Projekt

Obecné

Profil

« Předchozí | Další » 

Revize bf634c97

Přidáno uživatelem Tomáš před více než 3 roky(ů)

fixed

Zobrazit rozdíly:

website/public/css/style.css
1
@import url("https://fonts.googleapis.com/css2?family=Be+Vietnam:wght@400;600;700;800&display=swap");
2
html, body {
3
  position: relative;
4
  height: 96.2%;
5
  font-family: 'Be Vietnam', sans-serif;
6
  color: #ffffff;
7
  background: #0b155a;
8
}
1
@import url(https://fonts.googleapis.com/css2?family=Be+Vietnam:wght@400;600;700;800&display=swap);
2
html,body{position:relative;height:96.2%;font-family:'Be Vietnam', sans-serif;color:#fff;background:#0b155a}@media (max-width: 767.98px){html.intro,body.intro{height:calc(100% - 45px)}}a{color:#fff;outline:none}a:hover{color:#fff}h1{text-transform:uppercase;font-size:21px;font-weight:700;letter-spacing:.53px}@media (min-width: 992px){h1{line-height:55px}}h2{font-size:16px;font-weight:400;letter-spacing:.4px}@media (min-width: 992px){h2{margin:0}}h3{font-size:38px;font-weight:800;letter-spacing:.95px}@media (max-width: 575.98px){h3{font-size:28px}}hr{width:300px;text-align:left;margin:30px 0;border-top:2px solid #fff}@media (max-width: 1199.98px){hr{width:90%}}@media (max-width: 575.98px){hr{margin:15px 0}}header{height:70px;background:#0048A9}header .logo{width:450px;height:181px;position:absolute;top:70px;left:0;z-index:2;background:url(img/header-bg.png)}@media (max-width: 1400px){header .logo{display:none}}header .logo img{height:100px;position:relative;top:-50px;left:50px}header nav.navbar{height:70px;position:relative}header .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgb(255,255,255)' stroke-width='3' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E")}@media (min-width: 1401px){header .navbar-brand.shifted{position:absolute;top:0;left:450px}}@media (max-width: 1199.98px){header .navbar-brand.shifted{left:20px}}@media (max-width: 991.98px){header #navigation{width:100%;padding:20px;position:absolute;top:70px;left:0;z-index:1001;opacity:.98;background:#004fb3}}header .nav-item{margin-right:40px}@media (max-width: 1480px){header .nav-item{margin-right:30px}}@media (max-width: 1440px){header .nav-item{margin-right:15px}}@media (max-width: 1199.98px){header .nav-item{margin-right:30px}}@media (max-width: 991.98px){header .nav-item{margin-right:0}}header .nav-item .active{font-weight:800}header .nav-item.button .nav-link{padding-left:22px;padding-right:22px;border:1px solid #fff;border-radius:20px}header .nav-item.button .nav-link:hover{background:#004fb3}header .navbar-button{padding:.5rem 22px;margin-right:40px;border:1px solid #fff;border-radius:20px;text-decoration:none}@media (max-width: 991.98px){header .navbar-button{display:none}}header .navbar-button:hover{background:#004fb3}header .btn-secondary{height:100%;font-size:16px;text-transform:uppercase;font-weight:800;letter-spacing:.4px;border-radius:0;border:#0048A9;background:#004fb3}header .btn-secondary:hover{background:#0048A9 !important}.swiper-container{height:100%;position:relative}.swiper-container .btn-primary{width:300px;height:50px;line-height:32px;position:relative;padding-left:30px;margin-top:40px;text-align:left;font-size:16px;text-transform:uppercase;letter-spacing:0.4px;border-radius:30px;border:1px solid #0b155a;background:#0b155a}.swiper-container .btn-primary:hover,.swiper-container .btn-primary:focus,.swiper-container .btn-primary:active{border:1px solid #0048A9;background:#0048A9 !important}@media (max-width: 575.98px){.swiper-container .btn-primary{width:100%;max-width:270px;height:auto;margin-top:20px}}.swiper-container .btn-secondary{background:#0b155a}.swiper-container .btn-secondary:hover,.swiper-container .btn-secondary:focus,.swiper-container .btn-secondary:active{background:rgba(255,255,255,0.1) !important}.swiper-slide{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.swiper-slide.slide-bg-1{background:url(img/bg-1.jpg) no-repeat top center;background-size:cover}.swiper-slide.slide-bg-2{background:url(img/bg-2.jpg) no-repeat bottom center;background-size:cover}.swiper-slide.slide-bg-3{background:url(img/bg-3.jpg) no-repeat bottom center;background-size:cover}.swiper-slide.slide-bg-3 .slide-text{width:100%}@media (max-width: 767.98px){.swiper-slide .container{max-width:100%;height:100%;overflow-y:scroll}}.slide-text{width:600px;padding-bottom:160px;position:relative}@media (max-width: 1199.98px){.slide-text{width:100%}}@media (max-width: 1199.98px){.slide-text{padding-bottom:80px}}.slide-text .slide-index{display:inline-block;padding-bottom:20px;font-size:72px;font-weight:800}@media (max-width: 575.98px){.slide-text .slide-index{padding-bottom:10px;font-size:48px}}.slide-text .btn-primary{z-index:1000}.slide-text .btn-primary:after{content:"";display:inline-block;width:10px;height:16px;position:absolute;top:16px;right:20px;background:url(img/btn-play.svg) no-repeat top right}.slide-text p{font-size:18px;font-weight:600}@media (max-width: 575.98px){.slide-text p{font-size:16px}}.slide-text p a{text-decoration:underline}.slide-text p a:hover{text-decoration:none}.swiper-pagination-buttons{width:200px;height:56px;padding:6px;position:absolute;right:150px;bottom:20px;z-index:1;border-radius:100px;background:#0b155a}@media (max-width: 1199.98px){.swiper-pagination-buttons{right:20px}}@media (max-width: 767.98px){.swiper-pagination-buttons{width:120px}}@media (max-width: 575.98px){.swiper-pagination-buttons{bottom:10px}}.swiper-pagination-buttons .btn-prev,.swiper-pagination-buttons .btn-next{display:inline-block;width:45px;height:45px;position:relative;border-radius:50%;border:2px solid #fff}.swiper-pagination-buttons .btn-prev:after,.swiper-pagination-buttons .btn-next:after{content:"";display:inline-block;width:7px;height:12px;position:absolute;top:calc(50% - 6px);left:calc(50% - 4px)}.swiper-pagination-buttons .btn-prev:after{background:url(img/btn-prev.svg) no-repeat top right}.swiper-pagination-buttons .btn-next{float:right}.swiper-pagination-buttons .btn-next:after{background:url(img/btn-next.svg) no-repeat top right}.swiper-pagination-bullets{display:inline-block;width:auto !important;height:30px;position:absolute;left:20px !important;bottom:30px !important;border-radius:100px;opacity:0.8;background:#0b155a}@media (min-width: 992px){.swiper-pagination-bullets{left:50% !important;-webkit-transform:translateX(-50%);transform:translateX(-50%)}}@media (max-width: 575.98px){.swiper-pagination-bullets{display:none}}.swiper-pagination-bullets:before{content:"";width:100px;position:absolute;top:13px;left:15px;z-index:1;border-top:2px solid #fff}.swiper-pagination-bullets .swiper-pagination-bullet{width:20px;height:20px;position:relative;margin:4px 15px !important;opacity:1;border:2px solid #0b155a;background:#0b155a}.swiper-pagination-bullets .swiper-pagination-bullet:before{content:"";display:inline-block;width:6px;height:6px;position:absolute;top:5px;left:5px;border-radius:50%;background:#fff}.swiper-pagination-bullets .swiper-pagination-bullet:first-of-type{margin-left:5px !important}.swiper-pagination-bullets .swiper-pagination-bullet:last-of-type{margin-right:5px !important}.swiper-pagination-bullets .swiper-pagination-bullet-active{border:2px solid #fff}.map-point{width:50px;height:50px;z-index:1;position:absolute;border-radius:50%;cursor:pointer;border:2px solid #fff}@media not all and (min-width: 1900px) and (max-width: 2100px){.map-point{display:none}}.map-point:before{content:"";display:inline-block;width:16px;height:16px;position:absolute;top:calc(50% - 8px);left:calc(50% - 8px);background:url(img/map-point-plus.svg) no-repeat}.map-point:hover:before{z-index:1;top:calc(50% - 1px);background:url(img/map-point-minus.svg) no-repeat}.map-point:hover .desc{display:block;width:220px;padding:10px 20px;z-index:0;opacity:0.75;border-radius:25px 0 25px 0;background:#0b155a}.map-point .desc{display:none}.map-point p{font-size:14px;font-weight:400}.map-point p:last-of-type{margin-bottom:10px}.map-point strong{display:inline-block;width:100%;padding:0 0 20px 40px;font-size:16px}.map-point .circle{width:50px;height:50px;position:absolute;top:-2px;left:-2px;border-radius:50%;border:2px solid #fff}.map-point.point-1{top:470px;right:32.2%}.map-point.point-2{top:688px;right:21.2%}.map-point.point-3{bottom:430px;right:20.8%}.slide-background{width:650px;height:290px;z-index:1;position:absolute;bottom:0;left:0;background:url(img/footer-bg.svg) no-repeat}@media (max-width: 991.98px){.slide-background{width:320px;height:143px;background-size:100%}}div.copyright p{font-weight:400}div.copyright span{font-size:17px}p.logos-partners{margin-top:40px;text-align:right}p.logos-partners a{text-decoration:none}p.logos-partners a img{margin-left:50px;height:80px}@media only screen and (max-width: 430px){p.logos-partners a img{height:70px;margin-left:0}}@media only screen and (max-width: 340px){p.logos-partners a img{height:60px}}p.logos-partners a:first-of-type img{margin-left:0}#heatmap{height:100%}@media (max-width: 991.98px){header.map .navbar-nav{width:100%}}header.map form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:auto}header.map label{margin:0 0 0 15px;font-size:16px;letter-spacing:.4px}header.map input{letter-spacing:.4px;color:#fff;border-color:#0048A9;background:#0048A9}header.map input::-webkit-input-placeholder{color:#fff;opacity:1}header.map input::-moz-placeholder{color:#fff;opacity:1}header.map input:-ms-input-placeholder{color:#fff;opacity:1}header.map input::-ms-input-placeholder{color:#fff;opacity:1}header.map input::placeholder{color:#fff;opacity:1}header.map input:hover{background:rgba(255,255,255,0.1)}header.map input:focus{background:#fff;color:#000}header.map .nav-item{padding:5px;margin:auto 0;border-right:1px solid #1c6cc0}@media (max-width: 991.98px){header.map .nav-item{margin-bottom:10px;border:0}}header.map .nav-item:nth-of-type(1),header.map .nav-item:nth-of-type(2),header.map .nav-item:nth-of-type(3){width:300px}@media (max-width: 1500px){header.map .nav-item:nth-of-type(1),header.map .nav-item:nth-of-type(2),header.map .nav-item:nth-of-type(3){width:280px}}@media (max-width: 1400px){header.map .nav-item:nth-of-type(1),header.map .nav-item:nth-of-type(2),header.map .nav-item:nth-of-type(3){width:230px}}@media (max-width: 1400px){header.map .nav-item:nth-of-type(1),header.map .nav-item:nth-of-type(2),header.map .nav-item:nth-of-type(3){max-width:230px;width:auto}}@media (max-width: 991.98px){header.map .nav-item:nth-of-type(1),header.map .nav-item:nth-of-type(2),header.map .nav-item:nth-of-type(3){max-width:none}}header.map .nav-item .dropdown{min-width:200px}header.map .nav-item .dropdown .btn{width:100%;text-align:left;letter-spacing:.4px;color:#fff;background:#0048A9}header.map .nav-item .dropdown .btn:hover{background:rgba(255,255,255,0.1)}header.map .nav-item .dropdown .dropdown-menu{width:100%;max-height:300px;overflow-y:auto;z-index:1001}header.map .nav-item .dropdown .dropdown-menu .dropdown-item:active{background:#0048A9}header.map .nav-item .dropdown .dropdown-menu .dropdown-item label{width:100% !important;margin-left:0;cursor:pointer}header.map .nav-item .dropdown #dropdown-time .dropdown-item:nth-of-type(even){background:rgba(0,0,0,0.05)}header.map .nav-item .dropdown #dropdown-time .dropdown-item:nth-of-type(even):active{background:#0048A9}header.map .nav-item .dropdown input[type="radio"]:checked ~ label{font-weight:800}header.map .nav-item:nth-child(3){padding:0;margin:0;border:0}@media (max-width: 991.98px){header.map .nav-item:nth-child(3){padding:5px}}header.map .nav-item:nth-child(3) .dropdown{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:100%}@media (max-width: 991.98px){header.map .nav-item:nth-child(3) .dropdown{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}}header.map .nav-item:nth-child(3) .dropdown .dropdown-menu{top:calc(100% - 5px)}header.map .nav-item:nth-child(3) .dropdown button{padding-left:20px;border-radius:0}@media (max-width: 991.98px){header.map .nav-item:nth-child(3) .dropdown button{padding-left:12px;border-radius:5px}}header.map .nav-item:last-child{margin-top:0;margin-bottom:0;border-left:1px solid #1c6cc0;background:#0057be}@media (max-width: 991.98px){header.map .nav-item:last-child{margin:10px 5px 0 5px;border-radius:5px;border:0}}header.map .nav-item:last-child:hover{background:#004fb3}header.map .nav-item:last-child .btn-secondary{display:inline-block;outline:none;padding:0 30px;background:url(img/btn-refresh.svg) no-repeat center center}header.map .nav-item:last-child .btn-secondary:hover{background:url(img/btn-refresh.svg) no-repeat center center !important}@media (max-width: 991.98px){header.map .nav-item:last-child .btn-secondary{width:100%;padding:20px;border-radius:5px}}.map-locations{position:absolute;top:95px;right:25px;z-index:1000;border-radius:22px;background-color:rgba(11,21,90,0.7)}.map-locations .mobile{display:none}@media (max-width: 991.98px){.map-locations{top:90px;right:20px}.map-locations .desktop{display:none}.map-locations .mobile{display:inline-block}}@media (max-width: 575.98px){.map-locations{max-width:240px;max-height:70%;top:80px;right:10px}}.map-locations .menu{width:100%;display:inline-block;position:relative;padding:10px 60px 13px 16px;text-decoration:none;border-radius:50px;opacity:1;background:#0b155a}.map-locations .menu .circle{display:inline-block;width:40px;height:40px;position:absolute;top:3px;right:3px;border-radius:50%;border:2px solid #fff}.map-locations .menu .circle:after{content:"";display:inline-block;width:16px;height:16px;position:absolute;top:calc(50% - 8px);left:calc(50% - 8px);background:url(img/map-point-plus.svg) no-repeat}.map-locations .locations{z-index:1000}.map-locations .locations ul{margin-top:10px;padding-left:36px;padding-right:20px;font-size:15px;list-style-image:url(img/li-bullet.svg)}@media (max-width: 575.98px){.map-locations .locations ul{max-height:244px;overflow-y:scroll;font-size:13.5px}}.map-locations .locations li{margin-bottom:10px;cursor:pointer}.map-locations .locations li:hover{text-decoration:underline}.player{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);bottom:-40px;z-index:1000}@media (max-width: 575.98px){.player{bottom:-30px}}.player .next-btn,.player .prev-btn,.player .animate-btn,.player .lock-btn{display:inline-block;width:42px;height:42px;margin-right:20px;position:relative;border-radius:50%;opacity:.7;border:2px solid #fff;-webkit-box-shadow:0 0 0 4px #0b155a;box-shadow:0 0 0 4px #0b155a;background:#0b155a;cursor:pointer}@media (max-width: 320px){.player .next-btn,.player .prev-btn,.player .animate-btn,.player .lock-btn{margin-right:15px}}.player .next-btn:hover,.player .prev-btn:hover,.player .animate-btn:hover,.player .lock-btn:hover{opacity:1}.player .next-btn:after,.player .prev-btn:after,.player .animate-btn:after,.player .lock-btn:after{content:"";display:inline-block;width:7px;height:12px;position:absolute;top:calc(50% - 6px);left:calc(50% - 4px)}.player .animate-btn{width:57px;height:57px;opacity:1}@media (max-width: 991.98px){.player .animate-btn{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}}.player .animate-btn:hover{opacity:.7}.player .animate-btn:after{width:10px;height:16px;top:calc(50% - 8px)}.player .animate-btn.play:after{left:calc(50% - 3px);background:url(img/btn-play.svg) no-repeat}.player .animate-btn.pause:after{left:calc(50% - 5px);background:url(img/btn-pause.png) no-repeat}@media (max-width: 991.98px){.player .next-btn{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}}@media (max-width: 575.98px){.player .next-btn{margin-right:0}}.player .next-btn:after{background:url(img/btn-next.svg) no-repeat}@media (max-width: 991.98px){.player .prev-btn{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}}.player .prev-btn:after{background:url(img/btn-prev.svg) no-repeat}.player .timeline-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}@media (max-width: 390px){.player .timeline-wrapper{display:block;text-align:center;margin-right:10px}}.player .date{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;font-size:15px;margin-right:10px;text-align:center;border-radius:15px;cursor:pointer;background:rgba(11,21,90,0.7)}@media (max-width: 390px){.player .date{margin-right:0}}.player .date:hover .lock-btn:after{background-position:0 0}.player .date.lock{background:#0b155a}.player .date.lock:hover .lock-btn:after{background-position:-8px 0}.player .date.lock .lock-btn{border:0;-webkit-box-shadow:none;box-shadow:none}.player .date.lock .lock-btn:after{background-position:0 0}.player .date span{padding:3px 6px 4px 12px}.player .date .lock-btn{width:26px;height:26px;margin-right:2px;opacity:1;border:1px solid #fff}.player .date .lock-btn:after{content:'';display:inline-block;width:8px;height:11px;background:url(img/btn-lock.svg) no-repeat -8px 0;background-size:cover}.player .date .lock-btn:hover:after{background-position:0 0}.player .timeline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:30px;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;position:relative;border-radius:100px;background-color:rgba(11,21,90,0.7)}@media (max-width: 991.98px){.player .timeline{padding:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1;margin-right:20px}}@media (max-width: 390px){.player .timeline{display:inline-block;margin:4px 0 0 0}}.player .timeline .hour{cursor:pointer}@media (max-width: 991.98px){.player .timeline .hour{display:none}}.player .timeline .hour:nth-of-type(2){margin-left:10px}.player .timeline .hour:before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:#fff}.player .timeline .hour:after{content:"";display:inline-block;position:relative;top:-2px;width:20px;height:2px;background:#fff}.player .timeline .end-dot:before{content:"";display:inline-block;width:6px;height:6px;margin-right:10px;border-radius:50%;background:#fff}@media (max-width: 991.98px){.player .timeline .end-dot:before{display:none}}.player .time{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:64px;padding:3px 0 4px 0;z-index:1000;font-size:15px;border-radius:15px;cursor:ew-resize;background:#0b155a}@media (min-width: 992px){.player .time{position:absolute}.player .time.hour-0{left:0}.player .time.hour-1{left:25px}.player .time.hour-2{left:50px}.player .time.hour-3{left:75px}.player .time.hour-4{left:100px}.player .time.hour-5{left:125px}.player .time.hour-6{left:150px}.player .time.hour-7{left:175px}.player .time.hour-8{left:200px}.player .time.hour-9{left:225px}.player .time.hour-10{left:250px}.player .time.hour-11{left:275px}.player .time.hour-12{left:300px}.player .time.hour-13{left:325px}.player .time.hour-14{left:350px}.player .time.hour-15{left:375px}.player .time.hour-16{left:400px}.player .time.hour-17{left:425px}.player .time.hour-18{left:450px}.player .time.hour-19{left:475px}.player .time.hour-20{left:500px}.player .time.hour-21{left:525px}.player .time.hour-22{left:550px}.player .time.hour-23{left:585px}}.player .time .custom-spinner-border{margin:3px 0 4px 0}.leaflet-popup-content-wrapper,.leaflet-popup-tip{font-family:'Be Vietnam', sans-serif;text-align:center;color:#fff}.leaflet-popup-content-wrapper strong,.leaflet-popup-tip strong{display:inline-block;margin-bottom:8px}.leaflet-popup-content-wrapper #place-intesity,.leaflet-popup-tip #place-intesity{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;font-family:monospace;font-size:24pt;font-weight:700}.leaflet-popup-content-wrapper #place-intesity #sum-number,.leaflet-popup-tip #place-intesity #sum-number{margin-left:5px;font-size:11pt}.leaflet-popup-content-wrapper .popup-pagination,.leaflet-popup-tip .popup-pagination{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:1em 0 1em 0}.leaflet-popup-content-wrapper .popup-pagination button,.leaflet-popup-tip .popup-pagination button{height:32px;width:32px;border:0;border-radius:24px;background:url(img/btn-prev.svg) rgba(255,255,255,0.1) no-repeat center center;-webkit-transition:background 0.3s ease-out;transition:background 0.3s ease-out;outline:none !important}.leaflet-popup-content-wrapper .popup-pagination button:hover,.leaflet-popup-tip .popup-pagination button:hover{background:url(img/btn-prev.svg) rgba(125,125,125,0.1) no-repeat center center}.leaflet-popup-content-wrapper .popup-pagination button.next,.leaflet-popup-tip .popup-pagination button.next{background:url(img/btn-next.svg) rgba(255,255,255,0.1) no-repeat center center}.leaflet-popup-content-wrapper .popup-pagination button.next:hover,.leaflet-popup-tip .popup-pagination button.next:hover{background:url(img/btn-next.svg) rgba(125,125,125,0.1) no-repeat center center}.leaflet-popup-content-wrapper .popup-pagination p,.leaflet-popup-tip .popup-pagination p{margin:auto}
9 3

  
10
@media (max-width: 767.98px) {
11
  html.intro, body.intro {
12
    height: calc(100% - 45px);
13
  }
14
}
15

  
16
a {
17
  color: #ffffff;
18
  outline: none;
19
}
20

  
21
a:hover {
22
  color: #ffffff;
23
}
24

  
25
h1 {
26
  text-transform: uppercase;
27
  font-size: 21px;
28
  font-weight: 700;
29
  letter-spacing: .53px;
30
}
31

  
32
@media (min-width: 992px) {
33
  h1 {
34
    line-height: 55px;
35
  }
36
}
37

  
38
h2 {
39
  font-size: 16px;
40
  font-weight: 400;
41
  letter-spacing: .4px;
42
}
43

  
44
@media (min-width: 992px) {
45
  h2 {
46
    margin: 0;
47
  }
48
}
49

  
50
h3 {
51
  font-size: 38px;
52
  font-weight: 800;
53
  letter-spacing: .95px;
54
}
55

  
56
@media (max-width: 575.98px) {
57
  h3 {
58
    font-size: 28px;
59
  }
60
}
61

  
62
hr {
63
  width: 300px;
64
  text-align: left;
65
  margin: 30px 0;
66
  border-top: 2px solid #ffffff;
67
}
68

  
69
@media (max-width: 1199.98px) {
70
  hr {
71
    width: 90%;
72
  }
73
}
74

  
75
@media (max-width: 575.98px) {
76
  hr {
77
    margin: 15px 0;
78
  }
79
}
80

  
81
header {
82
  height: 70px;
83
  background: #0048A9;
84
}
85

  
86
header .logo {
87
  width: 450px;
88
  height: 181px;
89
  position: absolute;
90
  top: 70px;
91
  left: 0;
92
  z-index: 2;
93
  background: url("../img/header-bg.png");
94
}
95

  
96
@media (max-width: 1400px) {
97
  header .logo {
98
    display: none;
99
  }
100
}
101

  
102
header .logo img {
103
  height: 100px;
104
  position: relative;
105
  top: -50px;
106
  left: 50px;
107
}
108

  
109
header nav.navbar {
110
  height: 70px;
111
  position: relative;
112
}
113

  
114
header .navbar-toggler-icon {
115
  background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgb(255,255,255)' stroke-width='3' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E");
116
}
117

  
118
@media (min-width: 1401px) {
119
  header .navbar-brand.shifted {
120
    position: absolute;
121
    top: 0;
122
    left: 450px;
123
  }
124
}
125

  
126
@media (max-width: 1199.98px) {
127
  header .navbar-brand.shifted {
128
    left: 20px;
129
  }
130
}
131

  
132
@media (max-width: 991.98px) {
133
  header #navigation {
134
    width: 100%;
135
    padding: 20px;
136
    position: absolute;
137
    top: 70px;
138
    left: 0;
139
    z-index: 1001;
140
    opacity: .98;
141
    background: #004fb3;
142
  }
143
}
144

  
145
header .nav-item {
146
  margin-right: 40px;
147
}
148

  
149
@media (max-width: 1480px) {
150
  header .nav-item {
151
    margin-right: 30px;
152
  }
153
}
154

  
155
@media (max-width: 1440px) {
156
  header .nav-item {
157
    margin-right: 15px;
158
  }
159
}
160

  
161
@media (max-width: 1199.98px) {
162
  header .nav-item {
163
    margin-right: 30px;
164
  }
165
}
166

  
167
@media (max-width: 991.98px) {
168
  header .nav-item {
169
    margin-right: 0;
170
  }
171
}
172

  
173
header .nav-item .active {
174
  font-weight: 800;
175
}
176

  
177
header .nav-item.button .nav-link {
178
  padding-left: 22px;
179
  padding-right: 22px;
180
  border: 1px solid #ffffff;
181
  border-radius: 20px;
182
}
183

  
184
header .nav-item.button .nav-link:hover {
185
  background: #004fb3;
186
}
187

  
188
header .navbar-button {
189
  padding: .5rem 22px;
190
  margin-right: 40px;
191
  border: 1px solid #ffffff;
192
  border-radius: 20px;
193
  text-decoration: none;
194
}
195

  
196
@media (max-width: 991.98px) {
197
  header .navbar-button {
198
    display: none;
199
  }
200
}
201

  
202
header .navbar-button:hover {
203
  background: #004fb3;
204
}
205

  
206
header .btn-secondary {
207
  height: 100%;
208
  font-size: 16px;
209
  text-transform: uppercase;
210
  font-weight: 800;
211
  letter-spacing: .4px;
212
  border-radius: 0;
213
  border: #0048A9;
214
  background: #004fb3;
215
}
216

  
217
header .btn-secondary:hover {
218
  background: #0048A9 !important;
219
}
220

  
221
.swiper-container {
222
  height: 100%;
223
  position: relative;
224
}
225

  
226
.swiper-container .btn-primary {
227
  width: 300px;
228
  height: 50px;
229
  line-height: 32px;
230
  position: relative;
231
  padding-left: 30px;
232
  margin-top: 40px;
233
  text-align: left;
234
  font-size: 16px;
235
  text-transform: uppercase;
236
  letter-spacing: 0.4px;
237
  border-radius: 30px;
238
  border: 1px solid #0b155a;
239
  background: #0b155a;
240
}
241

  
242
.swiper-container .btn-primary:hover, .swiper-container .btn-primary:focus, .swiper-container .btn-primary:active {
243
  border: 1px solid #0048A9;
244
  background: #0048A9 !important;
245
}
246

  
247
@media (max-width: 575.98px) {
248
  .swiper-container .btn-primary {
249
    width: 100%;
250
    max-width: 270px;
251
    height: auto;
252
    margin-top: 20px;
253
  }
254
}
255

  
256
.swiper-container .btn-secondary {
257
  background: #0b155a;
258
}
259

  
260
.swiper-container .btn-secondary:hover, .swiper-container .btn-secondary:focus, .swiper-container .btn-secondary:active {
261
  background: rgba(255, 255, 255, 0.1) !important;
262
}
263

  
264
.swiper-slide {
265
  display: flex;
266
  justify-content: center;
267
  align-items: center;
268
}
269

  
270
.swiper-slide.slide-bg-1 {
271
  background: url("../img/bg-1.jpg") no-repeat top center;
272
  background-size: cover;
273
}
274

  
275
.swiper-slide.slide-bg-2 {
276
  background: url("../img/bg-2.jpg") no-repeat bottom center;
277
  background-size: cover;
278
}
279

  
280
.swiper-slide.slide-bg-3 {
281
  background: url("../img/bg-3.jpg") no-repeat bottom center;
282
  background-size: cover;
283
}
284

  
285
.swiper-slide.slide-bg-3 .slide-text {
286
  width: 100%;
287
}
288

  
289
@media (max-width: 767.98px) {
290
  .swiper-slide .container {
291
    max-width: 100%;
292
    height: 100%;
293
    overflow-y: scroll;
294
  }
295
}
296

  
297
.slide-text {
298
  width: 600px;
299
  padding-bottom: 160px;
300
  position: relative;
301
}
302

  
303
@media (max-width: 1199.98px) {
304
  .slide-text {
305
    width: 100%;
306
  }
307
}
308

  
309
@media (max-width: 1199.98px) {
310
  .slide-text {
311
    padding-bottom: 80px;
312
  }
313
}
314

  
315
.slide-text .slide-index {
316
  display: inline-block;
317
  padding-bottom: 20px;
318
  font-size: 72px;
319
  font-weight: 800;
320
}
321

  
322
@media (max-width: 575.98px) {
323
  .slide-text .slide-index {
324
    padding-bottom: 10px;
325
    font-size: 48px;
326
  }
327
}
328

  
329
.slide-text .btn-primary {
330
  z-index: 1000;
331
}
332

  
333
.slide-text .btn-primary:after {
334
  content: "";
335
  display: inline-block;
336
  width: 10px;
337
  height: 16px;
338
  position: absolute;
339
  top: 16px;
340
  right: 20px;
341
  background: url("../img/btn-play.svg") no-repeat top right;
342
}
343

  
344
.slide-text p {
345
  font-size: 18px;
346
  font-weight: 600;
347
}
348

  
349
@media (max-width: 575.98px) {
350
  .slide-text p {
351
    font-size: 16px;
352
  }
353
}
354

  
355
.slide-text p a {
356
  text-decoration: underline;
357
}
358

  
359
.slide-text p a:hover {
360
  text-decoration: none;
361
}
362

  
363
.swiper-pagination-buttons {
364
  width: 200px;
365
  height: 56px;
366
  padding: 6px;
367
  position: absolute;
368
  right: 150px;
369
  bottom: 20px;
370
  z-index: 1;
371
  border-radius: 100px;
372
  background: #0b155a;
373
}
374

  
375
@media (max-width: 1199.98px) {
376
  .swiper-pagination-buttons {
377
    right: 20px;
378
  }
379
}
380

  
381
@media (max-width: 767.98px) {
382
  .swiper-pagination-buttons {
383
    width: 120px;
384
  }
385
}
386

  
387
@media (max-width: 575.98px) {
388
  .swiper-pagination-buttons {
389
    bottom: 10px;
390
  }
391
}
392

  
393
.swiper-pagination-buttons .btn-prev, .swiper-pagination-buttons .btn-next {
394
  display: inline-block;
395
  width: 45px;
396
  height: 45px;
397
  position: relative;
398
  border-radius: 50%;
399
  border: 2px solid #ffffff;
400
}
401

  
402
.swiper-pagination-buttons .btn-prev:after, .swiper-pagination-buttons .btn-next:after {
403
  content: "";
404
  display: inline-block;
405
  width: 7px;
406
  height: 12px;
407
  position: absolute;
408
  top: calc(50% - 6px);
409
  left: calc(50% - 4px);
410
}
411

  
412
.swiper-pagination-buttons .btn-prev:after {
413
  background: url("../img/btn-prev.svg") no-repeat top right;
414
}
415

  
416
.swiper-pagination-buttons .btn-next {
417
  float: right;
418
}
419

  
420
.swiper-pagination-buttons .btn-next:after {
421
  background: url("../img/btn-next.svg") no-repeat top right;
422
}
423

  
424
.swiper-pagination-bullets {
425
  display: inline-block;
426
  width: auto !important;
427
  height: 30px;
428
  position: absolute;
429
  left: 20px !important;
430
  bottom: 30px !important;
431
  border-radius: 100px;
432
  opacity: 0.8;
433
  background: #0b155a;
434
}
435

  
436
@media (min-width: 992px) {
437
  .swiper-pagination-bullets {
438
    left: 50% !important;
439
    transform: translateX(-50%);
440
  }
441
}
442

  
443
@media (max-width: 575.98px) {
444
  .swiper-pagination-bullets {
445
    display: none;
446
  }
447
}
448

  
449
.swiper-pagination-bullets:before {
450
  content: "";
451
  width: 100px;
452
  position: absolute;
453
  top: 13px;
454
  left: 15px;
455
  z-index: 1;
456
  border-top: 2px solid #ffffff;
457
}
458

  
459
.swiper-pagination-bullets .swiper-pagination-bullet {
460
  width: 20px;
461
  height: 20px;
462
  position: relative;
463
  margin: 4px 15px !important;
464
  opacity: 1;
465
  border: 2px solid #0b155a;
466
  background: #0b155a;
467
}
468

  
469
.swiper-pagination-bullets .swiper-pagination-bullet:before {
470
  content: "";
471
  display: inline-block;
472
  width: 6px;
473
  height: 6px;
474
  position: absolute;
475
  top: 5px;
476
  left: 5px;
477
  border-radius: 50%;
478
  background: #ffffff;
479
}
480

  
481
.swiper-pagination-bullets .swiper-pagination-bullet:first-of-type {
482
  margin-left: 5px !important;
483
}
484

  
485
.swiper-pagination-bullets .swiper-pagination-bullet:last-of-type {
486
  margin-right: 5px !important;
487
}
488

  
489
.swiper-pagination-bullets .swiper-pagination-bullet-active {
490
  border: 2px solid #ffffff;
491
}
492

  
493
.map-point {
494
  width: 50px;
495
  height: 50px;
496
  z-index: 1;
497
  position: absolute;
498
  border-radius: 50%;
499
  cursor: pointer;
500
  border: 2px solid #ffffff;
501
}
502

  
503
@media not all and (min-width: 1900px) and (max-width: 2100px) {
504
  .map-point {
505
    display: none;
506
  }
507
}
508

  
509
.map-point:before {
510
  content: "";
511
  display: inline-block;
512
  width: 16px;
513
  height: 16px;
514
  position: absolute;
515
  top: calc(50% - 8px);
516
  left: calc(50% - 8px);
517
  background: url("../img/map-point-plus.svg") no-repeat;
518
}
519

  
520
.map-point:hover:before {
521
  z-index: 1;
522
  top: calc(50% - 1px);
523
  background: url("../img/map-point-minus.svg") no-repeat;
524
}
525

  
526
.map-point:hover .desc {
527
  display: block;
528
  width: 220px;
529
  padding: 10px 20px;
530
  z-index: 0;
531
  opacity: 0.75;
532
  border-radius: 25px 0 25px 0;
533
  background: #0b155a;
534
}
535

  
536
.map-point .desc {
537
  display: none;
538
}
539

  
540
.map-point p {
541
  font-size: 14px;
542
  font-weight: 400;
543
}
544

  
545
.map-point p:last-of-type {
546
  margin-bottom: 10px;
547
}
548

  
549
.map-point strong {
550
  display: inline-block;
551
  width: 100%;
552
  padding: 0 0 20px 40px;
553
  font-size: 16px;
554
}
555

  
556
.map-point .circle {
557
  width: 50px;
558
  height: 50px;
559
  position: absolute;
560
  top: -2px;
561
  left: -2px;
562
  border-radius: 50%;
563
  border: 2px solid #ffffff;
564
}
565

  
566
.map-point.point-1 {
567
  top: 470px;
568
  right: 32.2%;
569
}
570

  
571
.map-point.point-2 {
572
  top: 688px;
573
  right: 21.2%;
574
}
575

  
576
.map-point.point-3 {
577
  bottom: 430px;
578
  right: 20.8%;
579
}
580

  
581
.slide-background {
582
  width: 650px;
583
  height: 290px;
584
  z-index: 1;
585
  position: absolute;
586
  bottom: 0;
587
  left: 0;
588
  background: url("../img/footer-bg.svg") no-repeat;
589
}
590

  
591
@media (max-width: 991.98px) {
592
  .slide-background {
593
    width: 320px;
594
    height: 143px;
595
    background-size: 100%;
596
  }
597
}
598

  
599
div.copyright p {
600
  font-weight: 400;
601
}
602

  
603
div.copyright span {
604
  font-size: 17px;
605
}
606

  
607
p.logos-partners {
608
  margin-top: 40px;
609
  text-align: right;
610
}
611

  
612
p.logos-partners a {
613
  text-decoration: none;
614
}
615

  
616
p.logos-partners a img {
617
  margin-left: 50px;
618
  height: 80px;
619
}
620

  
621
@media only screen and (max-width: 430px) {
622
  p.logos-partners a img {
623
    height: 70px;
624
    margin-left: 0;
625
  }
626
}
627

  
628
@media only screen and (max-width: 340px) {
629
  p.logos-partners a img {
630
    height: 60px;
631
  }
632
}
633

  
634
p.logos-partners a:first-of-type img {
635
  margin-left: 0;
636
}
637

  
638
#heatmap {
639
  height: 100%;
640
}
641

  
642
@media (max-width: 991.98px) {
643
  header.map .navbar-nav {
644
    width: 100%;
645
  }
646
}
647

  
648
header.map form {
649
  display: flex;
650
  margin: auto;
651
}
652

  
653
header.map label {
654
  margin: 0 0 0 15px;
655
  font-size: 16px;
656
  letter-spacing: .4px;
657
}
658

  
659
header.map input {
660
  letter-spacing: .4px;
661
  color: #ffffff;
662
  border-color: #0048A9;
663
  background: #0048A9;
664
}
665

  
666
header.map input::placeholder {
667
  color: #ffffff;
668
  opacity: 1;
669
}
670

  
671
header.map input:hover {
672
  background: rgba(255, 255, 255, 0.1);
673
}
674

  
675
header.map input:focus {
676
  background: #ffffff;
677
  color: #000;
678
}
679

  
680
header.map .nav-item {
681
  padding: 5px;
682
  margin: auto 0;
683
  border-right: 1px solid #1c6cc0;
684
}
685

  
686
@media (max-width: 991.98px) {
687
  header.map .nav-item {
688
    margin-bottom: 10px;
689
    border: 0;
690
  }
691
}
692

  
693
header.map .nav-item:nth-of-type(1), header.map .nav-item:nth-of-type(2), header.map .nav-item:nth-of-type(3) {
694
  width: 300px;
695
}
696

  
697
@media (max-width: 1500px) {
698
  header.map .nav-item:nth-of-type(1), header.map .nav-item:nth-of-type(2), header.map .nav-item:nth-of-type(3) {
699
    width: 280px;
700
  }
701
}
702

  
703
@media (max-width: 1400px) {
704
  header.map .nav-item:nth-of-type(1), header.map .nav-item:nth-of-type(2), header.map .nav-item:nth-of-type(3) {
705
    width: 230px;
706
  }
707
}
708

  
709
@media (max-width: 1400px) {
710
  header.map .nav-item:nth-of-type(1), header.map .nav-item:nth-of-type(2), header.map .nav-item:nth-of-type(3) {
711
    max-width: 230px;
712
    width: auto;
713
  }
714
}
715

  
716
@media (max-width: 991.98px) {
717
  header.map .nav-item:nth-of-type(1), header.map .nav-item:nth-of-type(2), header.map .nav-item:nth-of-type(3) {
718
    max-width: none;
719
  }
720
}
721

  
722
header.map .nav-item .dropdown {
723
  min-width: 200px;
724
}
725

  
726
header.map .nav-item .dropdown .btn {
727
  width: 100%;
728
  text-align: left;
729
  letter-spacing: .4px;
730
  color: #ffffff;
731
  background: #0048A9;
732
}
733

  
734
header.map .nav-item .dropdown .btn:hover {
735
  background: rgba(255, 255, 255, 0.1);
736
}
737

  
738
header.map .nav-item .dropdown .dropdown-menu {
739
  width: 100%;
740
  max-height: 300px;
741
  overflow-y: auto;
742
  z-index: 1001;
743
}
744

  
745
header.map .nav-item .dropdown .dropdown-menu .dropdown-item:active {
746
  background: #0048A9;
747
}
748

  
749
header.map .nav-item .dropdown .dropdown-menu .dropdown-item label {
750
  width: 100% !important;
751
  margin-left: 0;
752
  cursor: pointer;
753
}
754

  
755
header.map .nav-item .dropdown #dropdown-time .dropdown-item:nth-of-type(even) {
756
  background: rgba(0, 0, 0, 0.05);
757
}
758

  
759
header.map .nav-item .dropdown #dropdown-time .dropdown-item:nth-of-type(even):active {
760
  background: #0048A9;
761
}
762

  
763
header.map .nav-item .dropdown input[type="radio"]:checked ~ label {
764
  font-weight: 800;
765
}
766

  
767
header.map .nav-item:nth-child(3) {
768
  padding: 0;
769
  margin: 0;
770
  border: 0;
771
}
772

  
773
@media (max-width: 991.98px) {
774
  header.map .nav-item:nth-child(3) {
775
    padding: 5px;
776
  }
777
}
778

  
779
header.map .nav-item:nth-child(3) .dropdown {
780
  display: flex;
781
  height: 100%;
782
}
783

  
784
@media (max-width: 991.98px) {
785
  header.map .nav-item:nth-child(3) .dropdown {
786
    flex-direction: column;
787
  }
788
}
789

  
790
header.map .nav-item:nth-child(3) .dropdown .dropdown-menu {
791
  top: calc(100% - 5px);
792
}
793

  
794
header.map .nav-item:nth-child(3) .dropdown button {
795
  padding-left: 20px;
796
  border-radius: 0;
797
}
798

  
799
@media (max-width: 991.98px) {
800
  header.map .nav-item:nth-child(3) .dropdown button {
801
    padding-left: 12px;
802
    border-radius: 5px;
803
  }
804
}
805

  
806
header.map .nav-item:last-child {
807
  margin-top: 0;
808
  margin-bottom: 0;
809
  border-left: 1px solid #1c6cc0;
810
  background: #0057be;
811
}
812

  
813
@media (max-width: 991.98px) {
814
  header.map .nav-item:last-child {
815
    margin: 10px 5px 0 5px;
816
    border-radius: 5px;
817
    border: 0;
818
  }
819
}
820

  
821
header.map .nav-item:last-child:hover {
822
  background: #004fb3;
823
}
824

  
825
header.map .nav-item:last-child .btn-secondary {
826
  display: inline-block;
827
  outline: none;
828
  padding: 0 30px;
829
  background: url("../img/btn-refresh.svg") no-repeat center center;
830
}
831

  
832
header.map .nav-item:last-child .btn-secondary:hover {
833
  background: url("../img/btn-refresh.svg") no-repeat center center !important;
834
}
835

  
836
@media (max-width: 991.98px) {
837
  header.map .nav-item:last-child .btn-secondary {
838
    width: 100%;
839
    padding: 20px;
840
    border-radius: 5px;
841
  }
842
}
843

  
844
.map-locations {
845
  position: absolute;
846
  top: 95px;
847
  right: 25px;
848
  z-index: 1000;
849
  border-radius: 22px;
850
  background-color: rgba(11, 21, 90, 0.7);
851
}
852

  
853
.map-locations .mobile {
854
  display: none;
855
}
856

  
857
@media (max-width: 991.98px) {
858
  .map-locations {
859
    top: 90px;
860
    right: 20px;
861
  }
862
  .map-locations .desktop {
863
    display: none;
864
  }
865
  .map-locations .mobile {
866
    display: inline-block;
867
  }
868
}
869

  
870
@media (max-width: 575.98px) {
871
  .map-locations {
872
    max-width: 240px;
873
    max-height: 70%;
874
    top: 80px;
875
    right: 10px;
876
  }
877
}
878

  
879
.map-locations .menu {
880
  width: 100%;
881
  display: inline-block;
882
  position: relative;
883
  padding: 10px 60px 13px 16px;
884
  text-decoration: none;
885
  border-radius: 50px;
886
  opacity: 1;
887
  background: #0b155a;
888
}
889

  
890
.map-locations .menu .circle {
891
  display: inline-block;
892
  width: 40px;
893
  height: 40px;
894
  position: absolute;
895
  top: 3px;
896
  right: 3px;
897
  border-radius: 50%;
898
  border: 2px solid #ffffff;
899
}
900

  
901
.map-locations .menu .circle:after {
902
  content: "";
903
  display: inline-block;
904
  width: 16px;
905
  height: 16px;
906
  position: absolute;
907
  top: calc(50% - 8px);
908
  left: calc(50% - 8px);
909
  background: url("../img/map-point-plus.svg") no-repeat;
910
}
911

  
912
.map-locations .locations {
913
  z-index: 1000;
914
}
915

  
916
.map-locations .locations ul {
917
  margin-top: 10px;
918
  padding-left: 36px;
919
  padding-right: 20px;
920
  font-size: 15px;
921
  list-style-image: url("../img/li-bullet.svg");
922
}
923

  
924
@media (max-width: 575.98px) {
925
  .map-locations .locations ul {
926
    max-height: 244px;
927
    overflow-y: scroll;
928
    font-size: 13.5px;
929
  }
930
}
931

  
932
.map-locations .locations li {
933
  margin-bottom: 10px;
934
  cursor: pointer;
935
}
936

  
937
.map-locations .locations li:hover {
938
  text-decoration: underline;
939
}
940

  
941
.player {
942
  width: 100%;
943
  display: flex;
944
  justify-content: center;
945
  align-items: center;
946
  position: absolute;
947
  left: 50%;
948
  transform: translateX(-50%);
949
  bottom: -40px;
950
  z-index: 1000;
951
}
952

  
953
@media (max-width: 575.98px) {
954
  .player {
955
    bottom: -30px;
956
  }
957
}
958

  
959
.player .next-btn, .player .prev-btn, .player .animate-btn, .player .lock-btn {
960
  display: inline-block;
961
  width: 42px;
962
  height: 42px;
963
  margin-right: 20px;
964
  position: relative;
965
  border-radius: 50%;
966
  opacity: .7;
967
  border: 2px solid #ffffff;
968
  box-shadow: 0 0 0 4px #0b155a;
969
  background: #0b155a;
970
  cursor: pointer;
971
}
972

  
973
@media (max-width: 320px) {
974
  .player .next-btn, .player .prev-btn, .player .animate-btn, .player .lock-btn {
975
    margin-right: 15px;
976
  }
977
}
978

  
979
.player .next-btn:hover, .player .prev-btn:hover, .player .animate-btn:hover, .player .lock-btn:hover {
980
  opacity: 1;
981
}
982

  
983
.player .next-btn:after, .player .prev-btn:after, .player .animate-btn:after, .player .lock-btn:after {
984
  content: "";
985
  display: inline-block;
986
  width: 7px;
987
  height: 12px;
988
  position: absolute;
989
  top: calc(50% - 6px);
990
  left: calc(50% - 4px);
991
}
992

  
993
.player .animate-btn {
994
  width: 57px;
995
  height: 57px;
996
  opacity: 1;
997
}
998

  
999
@media (max-width: 991.98px) {
1000
  .player .animate-btn {
1001
    order: 3;
1002
  }
1003
}
1004

  
1005
.player .animate-btn:hover {
1006
  opacity: .7;
1007
}
1008

  
1009
.player .animate-btn:after {
1010
  width: 10px;
1011
  height: 16px;
1012
  top: calc(50% - 8px);
1013
}
1014

  
1015
.player .animate-btn.play:after {
1016
  left: calc(50% - 3px);
1017
  background: url("../img/btn-play.svg") no-repeat;
1018
}
1019

  
1020
.player .animate-btn.pause:after {
1021
  left: calc(50% - 5px);
1022
  background: url("../img/btn-pause.png") no-repeat;
1023
}
1024

  
1025
@media (max-width: 991.98px) {
1026
  .player .next-btn {
1027
    order: 3;
1028
  }
1029
}
1030

  
1031
@media (max-width: 575.98px) {
1032
  .player .next-btn {
1033
    margin-right: 0;
1034
  }
1035
}
1036

  
1037
.player .next-btn:after {
1038
  background: url("../img/btn-next.svg") no-repeat;
1039
}
1040

  
1041
@media (max-width: 991.98px) {
1042
  .player .prev-btn {
1043
    order: 2;
1044
  }
1045
}
1046

  
1047
.player .prev-btn:after {
1048
  background: url("../img/btn-prev.svg") no-repeat;
1049
}
1050

  
1051
.player .timeline-wrapper {
1052
  display: flex;
1053
}
1054

  
1055
@media (max-width: 390px) {
1056
  .player .timeline-wrapper {
1057
    display: block;
1058
    text-align: center;
1059
    margin-right: 10px;
1060
  }
1061
}
1062

  
1063
.player .date {
1064
  display: flex;
1065
  align-items: center;
1066
  align-content: center;
1067
  font-size: 15px;
1068
  margin-right: 10px;
1069
  text-align: center;
1070
  border-radius: 15px;
1071
  cursor: pointer;
1072
  background: rgba(11, 21, 90, 0.7);
1073
}
1074

  
1075
@media (max-width: 390px) {
1076
  .player .date {
1077
    margin-right: 0;
1078
  }
1079
}
1080

  
1081
.player .date:hover .lock-btn:after {
1082
  background-position: 0 0;
1083
}
1084

  
1085
.player .date.lock {
1086
  background: #0b155a;
1087
}
1088

  
1089
.player .date.lock:hover .lock-btn:after {
1090
  background-position: -8px 0;
1091
}
1092

  
1093
.player .date.lock .lock-btn {
1094
  border: 0;
1095
  box-shadow: none;
1096
}
1097

  
1098
.player .date.lock .lock-btn:after {
1099
  background-position: 0 0;
1100
}
1101

  
1102
.player .date span {
1103
  padding: 3px 6px 4px 12px;
1104
}
1105

  
1106
.player .date .lock-btn {
1107
  width: 26px;
1108
  height: 26px;
1109
  margin-right: 2px;
1110
  opacity: 1;
1111
  border: 1px solid #ffffff;
1112
}
1113

  
1114
.player .date .lock-btn:after {
1115
  content: '';
1116
  display: inline-block;
1117
  width: 8px;
1118
  height: 11px;
1119
  background: url("../img/btn-lock.svg") no-repeat -8px 0;
1120
  background-size: cover;
1121
}
1122

  
1123
.player .date .lock-btn:hover:after {
1124
  background-position: 0 0;
1125
}
1126

  
1127
.player .timeline {
1128
  display: flex;
1129
  height: 30px;
1130
  flex-direction: row;
1131
  position: relative;
1132
  border-radius: 100px;
1133
  background-color: rgba(11, 21, 90, 0.7);
1134
}
1135

  
1136
@media (max-width: 991.98px) {
1137
  .player .timeline {
1138
    padding: 0;
1139
    order: 1;
1140
    margin-right: 20px;
1141
  }
1142
}
1143

  
1144
@media (max-width: 390px) {
1145
  .player .timeline {
1146
    display: inline-block;
1147
    margin: 4px 0 0 0;
1148
  }
1149
}
1150

  
1151
.player .timeline .hour {
1152
  cursor: pointer;
1153
}
1154

  
1155
@media (max-width: 991.98px) {
1156
  .player .timeline .hour {
1157
    display: none;
1158
  }
1159
}
1160

  
1161
.player .timeline .hour:nth-of-type(2) {
1162
  margin-left: 10px;
1163
}
1164

  
1165
.player .timeline .hour:before {
1166
  content: "";
1167
  display: inline-block;
1168
  width: 6px;
1169
  height: 6px;
1170
  border-radius: 50%;
1171
  background: #ffffff;
1172
}
1173

  
1174
.player .timeline .hour:after {
1175
  content: "";
1176
  display: inline-block;
1177
  position: relative;
1178
  top: -2px;
1179
  width: 20px;
1180
  height: 2px;
1181
  background: #ffffff;
1182
}
1183

  
1184
.player .timeline .end-dot:before {
1185
  content: "";
1186
  display: inline-block;
1187
  width: 6px;
1188
  height: 6px;
1189
  margin-right: 10px;
1190
  border-radius: 50%;
1191
  background: #ffffff;
1192
}
1193

  
1194
@media (max-width: 991.98px) {
1195
  .player .timeline .end-dot:before {
1196
    display: none;
1197
  }
1198
}
1199

  
1200
.player .time {
1201
  display: flex;
1202
  justify-content: center;
1203
  align-items: center;
1204
  width: 64px;
1205
  padding: 3px 0 4px 0;
1206
  z-index: 1000;
1207
  font-size: 15px;
1208
  border-radius: 15px;
1209
  cursor: ew-resize;
1210
  background: #0b155a;
1211
}
1212

  
1213
@media (min-width: 992px) {
1214
  .player .time {
1215
    position: absolute;
1216
  }
1217
  .player .time.hour-0 {
1218
    left: 0;
1219
  }
1220
  .player .time.hour-1 {
1221
    left: 25px;
1222
  }
1223
  .player .time.hour-2 {
1224
    left: 50px;
1225
  }
1226
  .player .time.hour-3 {
1227
    left: 75px;
1228
  }
1229
  .player .time.hour-4 {
1230
    left: 100px;
1231
  }
1232
  .player .time.hour-5 {
1233
    left: 125px;
1234
  }
1235
  .player .time.hour-6 {
1236
    left: 150px;
1237
  }
1238
  .player .time.hour-7 {
1239
    left: 175px;
1240
  }
1241
  .player .time.hour-8 {
1242
    left: 200px;
1243
  }
1244
  .player .time.hour-9 {
1245
    left: 225px;
1246
  }
1247
  .player .time.hour-10 {
1248
    left: 250px;
1249
  }
1250
  .player .time.hour-11 {
1251
    left: 275px;
1252
  }
1253
  .player .time.hour-12 {
1254
    left: 300px;
1255
  }
1256
  .player .time.hour-13 {
1257
    left: 325px;
1258
  }
1259
  .player .time.hour-14 {
1260
    left: 350px;
1261
  }
1262
  .player .time.hour-15 {
1263
    left: 375px;
1264
  }
1265
  .player .time.hour-16 {
1266
    left: 400px;
1267
  }
1268
  .player .time.hour-17 {
1269
    left: 425px;
1270
  }
1271
  .player .time.hour-18 {
1272
    left: 450px;
1273
  }
1274
  .player .time.hour-19 {
1275
    left: 475px;
1276
  }
1277
  .player .time.hour-20 {
1278
    left: 500px;
1279
  }
1280
  .player .time.hour-21 {
1281
    left: 525px;
1282
  }
1283
  .player .time.hour-22 {
1284
    left: 550px;
1285
  }
1286
  .player .time.hour-23 {
1287
    left: 585px;
1288
  }
1289
}
1290

  
1291
.player .time .custom-spinner-border {
1292
  margin: 3px 0 4px 0;
1293
}
1294

  
1295
.leaflet-popup-content-wrapper, .leaflet-popup-tip {
1296
  font-family: 'Be Vietnam', sans-serif;
1297
  text-align: center;
1298
  color: #ffffff;
1299
}
1300

  
1301
.leaflet-popup-content-wrapper strong, .leaflet-popup-tip strong {
1302
  display: inline-block;
1303
  margin-bottom: 8px;
1304
}
1305

  
1306
.leaflet-popup-content-wrapper #place-intesity, .leaflet-popup-tip #place-intesity {
1307
  display: flex;
1308
  align-items: center;
1309
  justify-content: center;
1310
  font-family: monospace;
1311
  font-size: 24pt;
1312
  font-weight: 700;
1313
}
1314

  
1315
.leaflet-popup-content-wrapper #place-intesity #sum-number, .leaflet-popup-tip #place-intesity #sum-number {
1316
  margin-left: 5px;
1317
  font-size: 11pt;
1318
}
1319

  
1320
.leaflet-popup-content-wrapper .popup-pagination, .leaflet-popup-tip .popup-pagination {
1321
  display: flex;
1322
  margin: 1em 0 1em 0;
1323
}
1324

  
1325
.leaflet-popup-content-wrapper .popup-pagination button, .leaflet-popup-tip .popup-pagination button {
1326
  height: 32px;
1327
  width: 32px;
1328
  border: 0;
1329
  border-radius: 24px;
1330
  background: url("../img/btn-prev.svg") rgba(255, 255, 255, 0.1) no-repeat center center;
1331
  transition: background 0.3s ease-out;
1332
  outline: none !important;
1333
}
1334

  
1335
.leaflet-popup-content-wrapper .popup-pagination button:hover, .leaflet-popup-tip .popup-pagination button:hover {
1336
  background: url("../img/btn-prev.svg") rgba(125, 125, 125, 0.1) no-repeat center center;
1337
}
1338

  
1339
.leaflet-popup-content-wrapper .popup-pagination button.next, .leaflet-popup-tip .popup-pagination button.next {
1340
  background: url("../img/btn-next.svg") rgba(255, 255, 255, 0.1) no-repeat center center;
1341
}
1342

  
1343
.leaflet-popup-content-wrapper .popup-pagination button.next:hover, .leaflet-popup-tip .popup-pagination button.next:hover {
1344
  background: url("../img/btn-next.svg") rgba(125, 125, 125, 0.1) no-repeat center center;
1345
}
1346

  
1347
.leaflet-popup-content-wrapper .popup-pagination p, .leaflet-popup-tip .popup-pagination p {
1348
  margin: auto;
1349
}
website/public/js/index.bundle.js
1
var js;js=function(){var e={157:function(e){var t,a,n=null,o=null,s=49.7248,p=13.3521,r=17;let i,l,c;var u,d=!1,m=[],h=[];let g=0;const y={};var b=[];let f=!1,v=0;const w={},x={};let k={};const C={coord:{lat:0,lng:0},_popup:null},N=async(e,t,a,n)=>{const o=new Headers,s=new Request(e+"/"+t+"/"+a+"/"+n,{method:"GET",headers:o});return(await fetch(s)).json()};async function j(e,t,n){le();for(let o=e+t;o>=0&&o<=23;o+=t)m[o]||(m[o]={}),b.forEach((async e=>{m[o][e]||(m[o][e]=await N(a,e,n,o))}));ce()}const P=async(e,t,n=1e3)=>{pe(),a=e,i=t;const o=[];m[l]={};b.forEach((e=>{o.push((async e=>{e in w||(w[e]=await(async(e,t)=>{const a=new Headers,n=new Request(e+"/"+t,{method:"GET",headers:a});return(await fetch(n)).json()})(t,e));const n=await N(a,e,W(),l);m[l][e]=n})(e))})),le(n),await Promise.all(o).then((()=>{ce(0),O(w),I(m[l]),j(l,1,W()),j(l,-1,W())}))},I=e=>{const a=e,o=[];let s=0;Object.keys(k).length&&(Object.keys(k).forEach((function(e){k[e][0].bindPopup(k[e][1])})),k={}),Object.keys(a).forEach((e=>{const p=a[e];if(s=Math.max(s,p.max),null!=p){const e=p.items.map((e=>{const{x:t,y:a,number:n}=e,o=t+""+a,s=x[o];return!k[o]&&n&&(s[0]=s[0].unbindPopup(),k[o]=s),[t,a,n]}));o.push(...e)}else null!=n&&t.removeLayer(n)})),null!=n&&t.removeLayer(n),o.length&&(n=L.heatLayer(o,{max:s,minOpacity:.5,radius:35,blur:30}).addTo(t)),Y()},O=e=>{null!=o&&t.removeLayer(o),o=L.layerGroup(),Object.keys(e).forEach((t=>{for(var a in e[t]){const{x:n,y:s,name:p}=e[t][a],r=G(n,s,1,`popup-${t}`).setContent(H(y[t],p,0,0,1,1)),i=L.circle([n,s],{radius:2,fillOpacity:.8,color:"#004fb3",fillColor:"#004fb3",bubblingMouseEvents:!0}).bindPopup(r);x[n+""+s]=[i,r],o.addLayer(i)}})),o.setZIndex(-1).addTo(t)},S=(e=null)=>{l=null!==e?e:parseInt($('#dropdown-time input[type="radio"]:checked').val())},T=(e=null)=>{const t=$("#date");c=new Date(e||t.val()),t.val(W()),$("#player-date span").html(`${c.getDate()}. ${c.getMonth()+1}. ${c.getFullYear()}`),m=[]},D=e=>{C._popup.setContent(e),C._popup.openOn(t)},E=(e,t)=>({previousButton:'<button type="button" id="btn-popup-previous-page" onclick="js.setPreviousPageInPopup()"></button>',pagesList:`<p id="pages">${e} z ${t}</p>`,nextButton:'<button type="button" id="btn-popup-next-page" class="next" onclick="js.setNextPageInPopup()"></button>'}),M=()=>{$("#btn-popup-previous-page").prop("disabled",!0),$("#btn-popup-next-page").prop("disabled",!0),$(".popup-pagination").hide()},_=e=>`<div class="popup-pagination">${e?e.reduce(((e,t)=>e+t),""):""}</div>`,B=()=>{const e=Object.keys(h);return 1===e.length?h[e[0]].items.length:e.length},z=e=>{const t=Object.keys(h);return h[t[e]]},G=(e,t,a,n)=>L.popup({autoPan:!1,className:n}).setLatLng([e/a,t/a]),H=(e,t,a,n,o,s)=>{const p=`\n    <strong>${e}</strong>\n    <div id="place-name">${t}</div>`,r=`\n    <div id="place-intesity">\n      <span id="current-number">${a}</span>\n      <span id="sum-number">${n&&n!==Number(a)?"/"+n:""}</span>\n    </div>`,{previousButton:i,nextButton:l,pagesList:c}=E(o,s);return`\n  ${p}\n  ${r}\n  ${_(s>1?[i,c,l]:null)}\n  `},A=()=>Object.keys(h).length>1,F=e=>{const t=$(".leaflet-popup");t.removeClass((function(e,t){return(t.match(/(^|\s)popup-\S+/g)||[]).join(" ")})),t.addClass("popup-"+e)},R=e=>{h=[],g=0;const a=40075016.686*Math.cos(s)/Math.pow(2,t.getZoom())*25/256;let n=0,o=0,p=0,r=0;const i={},c={lng:e.latlng.lng,lat:e.latlng.lat};Object.keys(m[l]).forEach((t=>{m[l][t].items.forEach((s=>{e.latlng.distanceTo(new L.LatLng(s.x,s.y))<a&&(o+=s.x,p+=s.y,h[n]={place:s.place,number:s.number,datasetName:t},r+=parseInt(s.number),n++,i[t]=!0)}))})),h=h.reduce(((e,t)=>(e[t.datasetName]||(e[t.datasetName]={items:[],number:0,datasetName:t.datasetName}),e[t.datasetName].items.push(t),e[t.datasetName].number+=Number(t.number),e)),{});const u=Object.keys(i).length;if(u)if(1===u){const e=z(0),t=e.items,{place:a,number:s}=t[g];C._popup&&ee(C.coord,c)?F(e.datasetName):(C._popup=G(o,p,n,`popup-${e.datasetName}`),C.coord=c),D(H(y[e.datasetName],a,s,r,1,t.length)),1===t.length&&M()}else{const{datasetName:e,number:t}=z(g);C._popup&&ee(C.coord,c)?F(e):(C._popup=G(o,p,n,`popup-${e}`),C.coord=c),D(((e,t,a,n)=>{const o=`<strong id="dataset-name">${n}</strong>`,s=`<div id="place-intesity"><span id="current-number">${e}</span></div>`,{previousButton:p,nextButton:r,pagesList:i}=E(1,a);return`\n  ${o}\n  ${s}\n  ${_([p,i,r])}\n  `})(t,0,B(),y[e]))}else t._popup&&($("#sum-number").text(""),$("#current-number").html(0),M())},V=e=>{const t=A()?z(e):z(0).items[e],a=A()?z(g):z(0).items[g],n=$("#dataset-name");n&&n.html(y[a.datasetName]),$("#place-name").html(a.place?a.place:a.datasetName),$("#current-number").html(a.number),$("#pages").html(g+1+" z "+B()),$(".leaflet-popup").removeClass(`popup-${t.datasetName}`).addClass(`popup-${a.datasetName}`)},Y=()=>{const{_popup:e}=t;e&&R({latlng:e.getLatLng()})},Z=async()=>{v||(l=(l+23)%24,K(l),f||23!==l?I(m[l]):(X(-1),await P(a,i)),Y())},q=async()=>{v||(l=(l+1)%24,K(l),f||0!==l?I(m[l]):(X(1),await P(a,i)),Y())},J=e=>{K(e),I(m[l])},K=e=>{$("#player-time").removeAttr("style"),S(e),ae(),ne(),Q(),Y()},Q=()=>{window.history.pushState("",document.title,window.location.origin+window.location.pathname+`?date=${W()}&time=${l}${b.reduce(((e,t)=>e+"&type[]="+t),"")}`)},U=(e,t=!1)=>(t&&e<10?"0":"")+e+":00",W=()=>`${c.getFullYear()}-${(()=>{const e=c.getMonth()+1;return e>9?`${e}`:`0${e}`})()}-${(()=>{const e=c.getDate();return e>9?`${e}`:`0${e}`})()}`,X=e=>{c.setDate(c.getDate()+e),T(c)},ee=(e,t)=>e.lat===t.lat&&e.lng===t.lng,te=(e,t)=>{let a;return function(){const n=this,o=arguments;clearTimeout(a),a=setTimeout((()=>e.apply(n,o)),t)}},ae=()=>{$(`#time_${l}`).prop("checked",!0),$("#dropdownMenuButtonTime").html(U(l,!0))},ne=()=>{$("#player-time > span").text(U(l)),$("#player-time").attr("class","time hour-"+l)},oe=()=>{$("#date").change((function(){T($(this).val()),P(a,i,0),Q()})),$('#dropdown-time input[type="radio"]').each((function(){$(this).change((function(){K(parseInt($(this).val())),I(m[l])}))})),$('#dropdown-dataset input[type="checkbox"]').each((function(){$(this).change(te((()=>se(this)),1e3))}))},se=async e=>{$(e).prop("checked")?await P(a,i,0):(pe(),m.forEach(((t,a)=>{Object.keys(t).forEach((t=>{t===$(e).val()&&delete m[a][t]})),I(m[l])}))),Y(),Q()},pe=()=>{b=[],$("#dropdown-dataset .dropdown-item").each((function(){const e=$(this).find("input"),t=e[0].value;e[0].checked&&b.push(t),y[t]=$(e).data("dataset-display-name")}))},re=async e=>{let t=!1;$("#dropdown-dataset .dropdown-item").each((function(){const a=$(this).find("input");a[0].value in e?(t=!0,$(this).removeClass("disabled")):($(this).addClass("disabled"),$(a).prop("checked",!1))})),$("#btn-update-heatmap").prop("disabled",!t)},ie=(e,t)=>{setTimeout((()=>{e(v),v&&ie(e,t)}),t)},le=(e=1e3)=>{v++,ie((()=>ie((e=>ue(e)),e)))},ce=(e=1e3)=>{v--,ie((()=>ie((e=>ue(e)))),e)},ue=e=>{e?de():me()},de=()=>{$("#player-time > .spinner-border").removeClass("d-none"),$("#player-time > span").text("")},me=()=>{$("#player-time > .spinner-border").addClass("d-none"),ne()};e.exports={initDatepicker:e=>{var t="";$.ajax({type:"GET",url:e,success:function(e){t=String(e).split(",")}}).then((function(){$("#date").datepicker({format:"yyyy-mm-dd",language:"cs",beforeShowDay:function(e){return t.indexOf((e=>{var t=String(e.getDate()),a=String(e.getMonth()+1);return 1===t.length&&(t="0"+t),1===a.length&&(a="0"+a),e.getFullYear()+"-"+a+"-"+t})(e))<0?{enabled:!1,tooltip:"Žádná data"}:{enabled:!0}},autoclose:!0})}))},initLocationsMenu:()=>{const e=$(".locations"),t="show";$(window).width()<=480?e.removeClass(t):e.addClass(t)},initMap:()=>{s=localStorage.getItem("lat")||s,p=localStorage.getItem("lng")||p,r=localStorage.getItem("zoom")||r,t=L.map("heatmap").setView([s,p],r),L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:"",maxZoom:19}).addTo(t),t.on("click",(function(e){R(e)}))},onDocumentReady:function(){$("#dropdown-dataset").on("click",(function(e){e.stopPropagation()})),$("#btn-update-heatmap").prop("name",""),S(),T(),oe(),$(document).keydown((function(e){const{which:t}=e;37===t?(Z(),e.preventDefault()):39===t&&(q(),e.preventDefault())}))},checkDataSetsAvailability:e=>{$.ajax({type:"POST",url:e+"/"+W(),success:function(e){re(e)}})},loadCurrentTimeHeatmap:P,dragTimeline:()=>{const e=$("#player-time"),t=e.offset().left-e.parent().offset().left;if(t>=0&&t<=e.parent().width()){const a=Math.round(t/26);a!==l&&(e.attr("class","time hour-"+a),$("#player-time span").html(U(a)),J(a))}},setPreviousPageInPopup:()=>{const e=B(),t=g;g=(g+e-1)%e,V(t)},setNextPageInPopup:()=>{const e=B(),t=g;g=(g+1)%e,V(t)},previous:Z,next:q,toggleDayLock:()=>{f=!f,$("#player-date").toggleClass("lock")},changeAnimationState:()=>{const e=$("#animate-btn");(d=!d)?(e.removeClass("play").addClass("pause"),u=setInterval((function(){q()}),800)):(clearTimeout(u),e.removeClass("pause").addClass("play"))},onChangeHour:J,setMapView:function(e,a,n){localStorage.setItem("lat",e),localStorage.setItem("lng",a),localStorage.setItem("zoom",n),t.setView([e,a],n)}}}},t={};return function a(n){if(t[n])return t[n].exports;var o=t[n]={exports:{}};return e[n](o,o.exports,a),o.exports}(157)}();
1
var js;js=function(){var t={157:function(t){var e,a,n=null,o=null,s=49.7248,p=13.3521,r=17;let l,i,c;var u,d=!1,m=[],h=[];let g=0;const y={};var b=[];let f=!1,v=0;const w={},x={};let k={};const C={coord:{lat:0,lng:0},_popup:null},N=async(t,e)=>{const a=new Headers,n=new Request(t,{method:e,headers:a});return(await fetch(n)).json()},P=async(t,e,a,n)=>await N(t+"/"+e+"/"+a+"/"+n,"GET");preload=async(t,e,n)=>{it();for(let o=t+e;o>=0&&o<=23;o+=e)m[o]||(m[o]={}),b.forEach((async t=>{m[o][t]||(m[o][t]=await P(a,t,n,o))}));ct()};const j=async(t,e,n=1e3)=>{pt(),a=t,l=e;const o=[];m[i]={};b.forEach((t=>{o.push((async t=>{t in w||(w[t]=await(async(t,e)=>await N(t+"/"+e,"GET"))(e,t));const n=await P(a,t,W(),i);m[i][t]=n})(t))})),it(n),await Promise.all(o).then((()=>{ct(0),O(w),I(m[i]),preload(i,1,W()),preload(i,-1,W())}))},I=t=>{const a=t,o=[];let s=0;Object.keys(k).length&&(Object.keys(k).forEach((function(t){k[t][0].bindPopup(k[t][1])})),k={}),Object.keys(a).forEach((t=>{const p=a[t];if(s=Math.max(s,p.max),null!=p){const t=p.items.map((t=>{const{x:e,y:a,number:n}=t,o=e+""+a,s=x[o];return!k[o]&&n&&(s[0]=s[0].unbindPopup(),k[o]=s),[e,a,n]}));o.push(...t)}else null!=n&&e.removeLayer(n)})),null!=n&&e.removeLayer(n),o.length&&(n=L.heatLayer(o,{max:s,minOpacity:.5,radius:35,blur:30}).addTo(e)),Z()},O=t=>{null!=o&&e.removeLayer(o),o=L.layerGroup(),Object.keys(t).forEach((e=>{for(var a in t[e]){const{x:n,y:s,name:p}=t[e][a],r=G(n,s,1,`popup-${e}`).setContent(A(y[e],p,0,0,1,1)),l=L.circle([n,s],{radius:2,fillOpacity:.8,color:"#004fb3",fillColor:"#004fb3",bubblingMouseEvents:!0}).bindPopup(r);x[n+""+s]=[l,r],o.addLayer(l)}})),o.setZIndex(-1).addTo(e)},S=(t=null)=>{i=null!==t?t:parseInt($('#dropdown-time input[type="radio"]:checked').val())},T=(t=null)=>{const e=$("#date");c=new Date(t||e.val()),e.val(W()),$("#player-date span").html(`${c.getDate()}. ${c.getMonth()+1}. ${c.getFullYear()}`),m=[]},D=t=>{C._popup.setContent(t),C._popup.openOn(e)},E=(t,e)=>({previousButton:'<button type="button" id="btn-popup-previous-page" onclick="js.setPreviousPageInPopup()"></button>',pagesList:`<p id="pages">${t} z ${e}</p>`,nextButton:'<button type="button" id="btn-popup-next-page" class="next" onclick="js.setNextPageInPopup()"></button>'}),M=()=>{$("#btn-popup-previous-page").prop("disabled",!0),$("#btn-popup-next-page").prop("disabled",!0),$(".popup-pagination").hide()},_=t=>`<div class="popup-pagination">${t?t.reduce(((t,e)=>t+e),""):""}</div>`,B=()=>{const t=Object.keys(h);return 1===t.length?h[t[0]].items.length:t.length},z=t=>{const e=Object.keys(h);return h[e[t]]},G=(t,e,a,n)=>L.popup({autoPan:!1,className:n}).setLatLng([t/a,e/a]),A=(t,e,a,n,o,s)=>{const p=`\n    <strong>${t}</strong>\n    <div id="place-name">${e}</div>`,r=`\n    <div id="place-intesity">\n      <span id="current-number">${a}</span>\n      <span id="sum-number">${n&&n!==Number(a)?"/"+n:""}</span>\n    </div>`,{previousButton:l,nextButton:i,pagesList:c}=E(o,s);return`\n  ${p}\n  ${r}\n  ${_(s>1?[l,c,i]:null)}\n  `},F=()=>Object.keys(h).length>1,H=t=>{const e=$(".leaflet-popup");e.removeClass((function(t,e){return(e.match(/(^|\s)popup-\S+/g)||[]).join(" ")})),e.addClass("popup-"+t)},V=t=>{h=[],g=0;const a=40075016.686*Math.cos(s)/Math.pow(2,e.getZoom())*25/256;let n=0,o=0,p=0,r=0;const l={},c={lng:t.latlng.lng,lat:t.latlng.lat};Object.keys(m[i]).forEach((e=>{m[i][e].items.forEach((s=>{t.latlng.distanceTo(new L.LatLng(s.x,s.y))<a&&(o+=s.x,p+=s.y,h[n]={place:s.place,number:s.number,datasetName:e},r+=parseInt(s.number),n++,l[e]=!0)}))})),h=h.reduce(((t,e)=>(t[e.datasetName]||(t[e.datasetName]={items:[],number:0,datasetName:e.datasetName}),t[e.datasetName].items.push(e),t[e.datasetName].number+=Number(e.number),t)),{});const u=Object.keys(l).length;if(u)if(1===u){const t=z(0),e=t.items,{place:a,number:s}=e[g];C._popup&&tt(C.coord,c)?H(t.datasetName):(C._popup=G(o,p,n,`popup-${t.datasetName}`),C.coord=c),D(A(y[t.datasetName],a,s,r,1,e.length)),1===e.length&&M()}else{const{datasetName:t,number:e}=z(g);C._popup&&tt(C.coord,c)?H(t):(C._popup=G(o,p,n,`popup-${t}`),C.coord=c),D(((t,e,a,n)=>{const o=`<strong id="dataset-name">${n}</strong>`,s=`<div id="place-intesity"><span id="current-number">${t}</span></div>`,{previousButton:p,nextButton:r,pagesList:l}=E(1,a);return`\n  ${o}\n  ${s}\n  ${_([p,l,r])}\n  `})(e,0,B(),y[t]))}else e._popup&&($("#sum-number").text(""),$("#current-number").html(0),M())},Y=t=>{const e=F()?z(t):z(0).items[t],a=F()?z(g):z(0).items[g],n=$("#dataset-name");n&&n.html(y[a.datasetName]),$("#place-name").html(a.place?a.place:a.datasetName),$("#current-number").html(a.number),$("#pages").html(g+1+" z "+B()),$(".leaflet-popup").removeClass(`popup-${e.datasetName}`).addClass(`popup-${a.datasetName}`)},Z=()=>{const{_popup:t}=e;t&&V({latlng:t.getLatLng()})},R=async()=>{v||(i=(i+23)%24,K(i),f||23!==i?I(m[i]):(X(-1),await j(a,l)),Z())},q=async()=>{v||(i=(i+1)%24,K(i),f||0!==i?I(m[i]):(X(1),await j(a,l)),Z())},J=t=>{K(t),I(m[i])},K=t=>{$("#player-time").removeAttr("style"),S(t),at(),nt(),Q(),Z()},Q=()=>{window.history.pushState("",document.title,window.location.origin+window.location.pathname+`?date=${W()}&time=${i}${b.reduce(((t,e)=>t+"&type[]="+e),"")}`)},U=(t,e=!1)=>(e&&t<10?"0":"")+t+":00",W=()=>`${c.getFullYear()}-${(()=>{const t=c.getMonth()+1;return t>9?`${t}`:`0${t}`})()}-${(()=>{const t=c.getDate();return t>9?`${t}`:`0${t}`})()}`,X=t=>{c.setDate(c.getDate()+t),T(c)},tt=(t,e)=>t.lat===e.lat&&t.lng===e.lng,et=(t,e)=>{let a;return function(){const n=this,o=arguments;clearTimeout(a),a=setTimeout((()=>t.apply(n,o)),e)}},at=()=>{$(`#time_${i}`).prop("checked",!0),$("#dropdownMenuButtonTime").html(U(i,!0))},nt=()=>{$("#player-time > span").text(U(i)),$("#player-time").attr("class","time hour-"+i)},ot=()=>{$("#date").change((function(){T($(this).val()),j(a,l,0),Q()})),$('#dropdown-time input[type="radio"]').each((function(){$(this).change((function(){K(parseInt($(this).val())),I(m[i])}))})),$('#dropdown-dataset input[type="checkbox"]').each((function(){$(this).change(et((()=>st(this)),1e3))}))},st=async t=>{$(t).prop("checked")?await j(a,l,0):(pt(),m.forEach(((e,a)=>{Object.keys(e).forEach((e=>{e===$(t).val()&&delete m[a][e]})),I(m[i])}))),Z(),Q()},pt=()=>{b=[],$("#dropdown-dataset .dropdown-item").each((function(){const t=$(this).find("input"),e=t[0].value;t[0].checked&&b.push(e),y[e]=$(t).data("dataset-display-name")}))},rt=async t=>{let e=!1;$("#dropdown-dataset .dropdown-item").each((function(){const a=$(this).find("input");a[0].value in t?(e=!0,$(this).removeClass("disabled")):($(this).addClass("disabled"),$(a).prop("checked",!1))})),$("#btn-update-heatmap").prop("disabled",!e)},lt=(t,e)=>{setTimeout((()=>{t(v),v&&lt(t,e)}),e)},it=(t=1e3)=>{v++,lt((()=>lt((t=>ut(t)),t)))},ct=(t=1e3)=>{v--,lt((()=>lt((t=>ut(t)))),t)},ut=t=>{t?dt():mt()},dt=()=>{$("#player-time > .spinner-border").removeClass("d-none"),$("#player-time > span").text("")},mt=()=>{$("#player-time > .spinner-border").addClass("d-none"),nt()};t.exports={initDatepicker:async t=>{var e="";const a=await N(t,"GET");e=String(a).split(","),$("#date").datepicker({format:"yyyy-mm-dd",language:"cs",beforeShowDay:function(t){return e.indexOf((t=>{var e=String(t.getDate()),a=String(t.getMonth()+1);return 1===e.length&&(e="0"+e),1===a.length&&(a="0"+a),t.getFullYear()+"-"+a+"-"+e})(t))<0?{enabled:!1,tooltip:"Žádná data"}:{enabled:!0}},autoclose:!0})},initLocationsMenu:()=>{const t=$(".locations"),e="show";$(window).width()<=480?t.removeClass(e):t.addClass(e)},initMap:()=>{s=localStorage.getItem("lat")||s,p=localStorage.getItem("lng")||p,r=localStorage.getItem("zoom")||r,e=L.map("heatmap").setView([s,p],r),L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:"",maxZoom:19}).addTo(e),e.on("click",(function(t){V(t)}))},onDocumentReady:()=>{$("#dropdown-dataset").on("click",(function(t){t.stopPropagation()})),$("#btn-update-heatmap").prop("name",""),S(),T(),ot(),$(document).keydown((function(t){const{which:e}=t;37===e?(R(),t.preventDefault()):39===e&&(q(),t.preventDefault())}))},checkDataSetsAvailability:async t=>{const e=await N(t+"/"+W(),"POST");rt(e)},loadCurrentTimeHeatmap:j,dragTimeline:()=>{const t=$("#player-time"),e=t.offset().left-t.parent().offset().left;if(e>=0&&e<=t.parent().width()){const a=Math.round(e/26);a!==i&&(t.attr("class","time hour-"+a),$("#player-time span").html(U(a)),J(a))}},setPreviousPageInPopup:()=>{const t=B(),e=g;g=(g+t-1)%t,Y(e)},setNextPageInPopup:()=>{const t=B(),e=g;g=(g+1)%t,Y(e)},previous:R,next:q,toggleDayLock:()=>{f=!f,$("#player-date").toggleClass("lock")},changeAnimationState:()=>{const t=$("#animate-btn");(d=!d)?(t.removeClass("play").addClass("pause"),u=setInterval((function(){q()}),800)):(clearTimeout(u),t.removeClass("pause").addClass("play"))},onChangeHour:J,setMapView:(t,a,n)=>{localStorage.setItem("lat",t),localStorage.setItem("lng",a),localStorage.setItem("zoom",n),e.setView([t,a],n)}}}},e={};return function a(n){if(e[n])return e[n].exports;var o=e[n]={exports:{}};return t[n](o,o.exports,a),o.exports}(157)}();
website/public/js/index.js
69 69

  
70 70

  
71 71

  
72
function onDocumentReady() {
72
const onDocumentReady = () => {
73 73
  $('#dropdown-dataset').on('click', function (e) {
74 74
    e.stopPropagation()
75 75
  })
......
85 85

  
86 86

  
87 87
/* ------------ DATA FETCHERS ------------ */
88

  
89
const fetchByNameDate = async (baseRoute, name, date, currentTime) => {
88
const genericFetch = async (route, method) => {
90 89
  const headers = new Headers()
91
  const myRequest = new Request(baseRoute + '/' + name + '/' + date + '/' + currentTime, {
92
    method: 'GET',
90
  const myRequest = new Request(route, {
91
    method: method,
93 92
    headers: headers
94 93
  })
95 94
  const beforeJson = await fetch(myRequest)
96 95

  
97 96
  return beforeJson.json()
98 97
}
98
const fetchByNameDate = async (baseRoute, name, date, currentTime) => {
99
  return await genericFetch(baseRoute + '/' + name + '/' + date + '/' + currentTime, 'GET')
100
}
99 101

  
100 102
const fetchDataSourceMarks = async (positionRoute, datasetName) => {
101
  const headers = new Headers()
102
  const myRequest = new Request(positionRoute + '/' + datasetName, {
103
    method: 'GET',
104
    headers: headers
105
  })
106
  const beforeJson = await fetch(myRequest)
107

  
108
  return beforeJson.json()
103
    return await genericFetch(positionRoute + '/' + datasetName, 'GET')
109 104
}
110 105

  
111
async function preload(time, change, date) {
106
preload = async (time, change, date) => {
112 107
  loadingY()
113 108

  
114 109
  for (let nTime = time + change; nTime >= 0 && nTime <= 23; nTime = nTime + change) {
......
170 165
 * Checks dataset availibility
171 166
 * @param {string} route authority for datasets availibility checks
172 167
 */
173
const checkDataSetsAvailability = (route) => {
174
  $.ajax({
175
    type: 'POST',
176
    // Todo it might be good idea to change db collections format
177
    url: route + '/' + currentDateToString(),
178
    success: function (result) {
179
      updateAvailableDataSets(result)
180
    }
181
  })
168
const checkDataSetsAvailability = async (route) => {
169
  const result = await genericFetch(route + '/' + currentDateToString(), 'POST')
170
  updateAvailableDataSets(result)
182 171
}
183 172

  
184 173

  
......
204 193
  mymap.on('click', function (e) { showInfo(e) })
205 194
}
206 195

  
207
function setMapView(latitude, longitude, zoom) {
196
const setMapView = (latitude, longitude, zoom) => {
208 197
  localStorage.setItem('lat', latitude)
209 198
  localStorage.setItem('lng', longitude)
210 199
  localStorage.setItem('zoom', zoom)
......
725 714
  $('#dropdownMenuButtonTime').html(formatTime(currentTime, true))
726 715
}
727 716

  
728
const initDatepicker = (availableDatesSource) => {
717
const initDatepicker = async (availableDatesSource) => {
729 718
  var availableDates = ''
730

  
731
  $.ajax({
732
    type: 'GET',
733
    url: availableDatesSource,
734
    success: function (result) {
735
      availableDates = String(result).split(',')
736
    }
737
  }).then(function () {
738
    $('#date').datepicker({
739
      format: 'yyyy-mm-dd',
740
      language: 'cs',
741
      beforeShowDay: function (date) {
742
        if (availableDates.indexOf(formatDate(date)) < 0) {
743
          return { enabled: false, tooltip: 'Žádná data' }
744
        } else {
745
          return { enabled: true }
746
        }
747
      },
748
      autoclose: true
749
    })
719
  const result = await genericFetch(availableDatesSource, 'GET')
720
  availableDates = String(result).split(',')
721
  $('#date').datepicker({
722
    format: 'yyyy-mm-dd',
723
    language: 'cs',
724
    beforeShowDay: function (date) {
725
      if (availableDates.indexOf(formatDate(date)) < 0) {
726
        return { enabled: false, tooltip: 'Žádná data' }
727
      } else {
728
        return { enabled: true }
729
      }
730
    },
731
    autoclose: true
750 732
  })
751 733
}
752 734

  

Také k dispozici: Unified diff