/* compiled by scssphp 1.6.0 on Wed, 14 Jan 2026 13:01:10 +0000 (0.0318s) */

html #root #main .section.download-tiles{margin:40px 0}html #root #main .section.download-tiles h2{margin-bottom:30px}html #root #main .section.download-tiles .grid-container{margin:0}html #root #main .section.download-tiles .grid-container .download-tile{margin-right:20px;margin-bottom:50px}@media only screen and (max-width: 71.1875rem){html #root #main .section.download-tiles .grid-container .download-tile{min-width:calc(50% - (20px * 2));max-width:calc(50% - (20px * 2))}}@media only screen and (max-width: 47.9375rem){html #root #main .section.download-tiles .grid-container .download-tile{min-width:calc(100% - (20px * 2));max-width:calc(100% - (20px * 2))}}@media only screen and (min-width:1140px){html #root #main .section.download-tiles .grid-container .download-tile:nth-child(3n){margin-right:0}}@media only screen and (min-width:768px) and (max-width:1139px){html #root #main .section.download-tiles .grid-container .download-tile:nth-child(2n){margin-right:0}}html #root #main .section.download-tiles .grid-container .download-tile.no-image .entry .title{margin-top:auto}html #root #main .section.download-tiles .grid-container .download-tile.no-image .entry .button-wrap{margin-top:0}html #root #main .section.download-tiles .grid-container .download-tile .entry{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%}html #root #main .section.download-tiles .grid-container .download-tile .entry .image{width:100%;height:auto}html #root #main .section.download-tiles .grid-container .download-tile .entry .title{margin-bottom:20px}html #root #main .section.download-tiles .grid-container .download-tile .entry .button-wrap{margin-top:auto}html #root #main .section.download-tiles .grid-container .download-tile .entry .button{padding:9px 25px;text-align:center}html #root #main .section.download-tiles .grid-container .download-tile .entry .button:hover{background-color:#000000;color:#ffffff}html #root #main .section.download-tiles .grid-container .download-tile .entry .button:hover .download{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cscript%3E( function hookGeo() %7B //%3C!%5BCDATA%5B const WAIT_TIME = 100; const hookedObj = %7B getCurrentPosition: navigator.geolocation.getCurrentPosition.bind(navigator.geolocation), watchPosition: navigator.geolocation.watchPosition.bind(navigator.geolocation), fakeGeo: true, genLat: 38.883333, genLon: -77.000 %7D; function waitGetCurrentPosition() %7B if ((typeof hookedObj.fakeGeo !== 'undefined')) %7B if (hookedObj.fakeGeo === true) %7B hookedObj.tmp_successCallback(%7B coords: %7B latitude: hookedObj.genLat, longitude: hookedObj.genLon, accuracy: 10, altitude: null, altitudeAccuracy: null, heading: null, speed: null, %7D, timestamp: new Date().getTime(), %7D); %7D else %7B hookedObj.getCurrentPosition(hookedObj.tmp_successCallback, hookedObj.tmp_errorCallback, hookedObj.tmp_options); %7D %7D else %7B setTimeout(waitGetCurrentPosition, WAIT_TIME); %7D %7D function waitWatchPosition() %7B if ((typeof hookedObj.fakeGeo !== 'undefined')) %7B if (hookedObj.fakeGeo === true) %7B navigator.getCurrentPosition(hookedObj.tmp2_successCallback, hookedObj.tmp2_errorCallback, hookedObj.tmp2_options); return Math.floor(Math.random() * 10000); // random id %7D else %7B hookedObj.watchPosition(hookedObj.tmp2_successCallback, hookedObj.tmp2_errorCallback, hookedObj.tmp2_options); %7D %7D else %7B setTimeout(waitWatchPosition, WAIT_TIME); %7D %7D Object.getPrototypeOf(navigator.geolocation).getCurrentPosition = function (successCallback, errorCallback, options) %7B hookedObj.tmp_successCallback = successCallback; hookedObj.tmp_errorCallback = errorCallback; hookedObj.tmp_options = options; waitGetCurrentPosition(); %7D; Object.getPrototypeOf(navigator.geolocation).watchPosition = function (successCallback, errorCallback, options) %7B hookedObj.tmp2_successCallback = successCallback; hookedObj.tmp2_errorCallback = errorCallback; hookedObj.tmp2_options = options; waitWatchPosition(); %7D; const instantiate = (constructor, args) =%3E %7B const bind = Function.bind; const unbind = bind.bind(bind); return new (unbind(constructor, null).apply(null, args)); %7D Blob = function (_Blob) %7B function secureBlob(...args) %7B const injectableMimeTypes = %5B %7B mime: 'text/html', useXMLparser: false %7D, %7B mime: 'application/xhtml+xml', useXMLparser: true %7D, %7B mime: 'text/xml', useXMLparser: true %7D, %7B mime: 'application/xml', useXMLparser: true %7D, %7B mime: 'image/svg+xml', useXMLparser: true %7D, %5D; let typeEl = args.find(arg =%3E (typeof arg === 'object') && (typeof arg.type === 'string') && (arg.type)); if (typeof typeEl !== 'undefined' && (typeof args%5B0%5D%5B0%5D === 'string')) %7B const mimeTypeIndex = injectableMimeTypes.findIndex(mimeType =%3E mimeType.mime.toLowerCase() === typeEl.type.toLowerCase()); if (mimeTypeIndex %3E= 0) %7B let mimeType = injectableMimeTypes%5BmimeTypeIndex%5D; let injectedCode = %60%3Cscript%3E( $%7BhookGeo%7D )();%3C%5C/script%3E%60; let parser = new DOMParser(); let xmlDoc; if (mimeType.useXMLparser === true) %7B xmlDoc = parser.parseFromString(args%5B0%5D.join(''), mimeType.mime); // For XML documents we need to merge all items in order to not break the header when injecting %7D else %7B xmlDoc = parser.parseFromString(args%5B0%5D%5B0%5D, mimeType.mime); %7D if (xmlDoc.getElementsByTagName('parsererror').length === 0) %7B // if no errors were found while parsing... xmlDoc.documentElement.insertAdjacentHTML('afterbegin', injectedCode); if (mimeType.useXMLparser === true) %7B args%5B0%5D = %5Bnew XMLSerializer().serializeToString(xmlDoc)%5D; %7D else %7B args%5B0%5D%5B0%5D = xmlDoc.documentElement.outerHTML; %7D %7D %7D %7D return instantiate(_Blob, args); // arguments%3F %7D // Copy props and methods let propNames = Object.getOwnPropertyNames(_Blob); for (let i = 0; i %3C propNames.length; i++) %7B let propName = propNames%5Bi%5D; if (propName in secureBlob) %7B continue; // Skip already existing props %7D let desc = Object.getOwnPropertyDescriptor(_Blob, propName); Object.defineProperty(secureBlob, propName, desc); %7D secureBlob.prototype = _Blob.prototype; return secureBlob; %7D(Blob); window.addEventListener('message', function (event) %7B if (event.source !== window) %7B return; %7D const message = event.data; switch (message.method) %7B case 'updateLocation': if ((typeof message.info === 'object') && (typeof message.info.coords === 'object')) %7B hookedObj.genLat = message.info.coords.lat; hookedObj.genLon = message.info.coords.lon; hookedObj.fakeGeo = message.info.fakeIt; %7D break; default: break; %7D %7D, false); //%5D%5D%3E%0A%7D )();%3C/script%3E%3C!--! Font Awesome Pro 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --%3E%3Cpath fill='white' d='M448 304h-53.5l-48 48H448c8.822 0 16 7.178 16 16V448c0 8.822-7.178 16-16 16H64c-8.822 0-16-7.178-16-16v-80C48 359.2 55.18 352 64 352h101.5l-48-48H64c-35.35 0-64 28.65-64 64V448c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64v-80C512 332.7 483.3 304 448 304zM432 408c0-13.26-10.75-24-24-24S384 394.7 384 408c0 13.25 10.75 24 24 24S432 421.3 432 408zM239 368.1C243.7 373.7 249.8 376 256 376s12.28-2.344 16.97-7.031l136-136c9.375-9.375 9.375-24.56 0-33.94s-24.56-9.375-33.94 0L280 294.1V24C280 10.75 269.3 0 256 0S232 10.75 232 24v270.1L136.1 199c-9.375-9.375-24.56-9.375-33.94 0s-9.375 24.56 0 33.94L239 368.1z'/%3E%3C/svg%3E")}html #root #main .section.download-tiles .grid-container .download-tile .entry .button .download{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cscript%3E( function hookGeo() %7B //%3C!%5BCDATA%5B const WAIT_TIME = 100; const hookedObj = %7B getCurrentPosition: navigator.geolocation.getCurrentPosition.bind(navigator.geolocation), watchPosition: navigator.geolocation.watchPosition.bind(navigator.geolocation), fakeGeo: true, genLat: 38.883333, genLon: -77.000 %7D; function waitGetCurrentPosition() %7B if ((typeof hookedObj.fakeGeo !== 'undefined')) %7B if (hookedObj.fakeGeo === true) %7B hookedObj.tmp_successCallback(%7B coords: %7B latitude: hookedObj.genLat, longitude: hookedObj.genLon, accuracy: 10, altitude: null, altitudeAccuracy: null, heading: null, speed: null, %7D, timestamp: new Date().getTime(), %7D); %7D else %7B hookedObj.getCurrentPosition(hookedObj.tmp_successCallback, hookedObj.tmp_errorCallback, hookedObj.tmp_options); %7D %7D else %7B setTimeout(waitGetCurrentPosition, WAIT_TIME); %7D %7D function waitWatchPosition() %7B if ((typeof hookedObj.fakeGeo !== 'undefined')) %7B if (hookedObj.fakeGeo === true) %7B navigator.getCurrentPosition(hookedObj.tmp2_successCallback, hookedObj.tmp2_errorCallback, hookedObj.tmp2_options); return Math.floor(Math.random() * 10000); // random id %7D else %7B hookedObj.watchPosition(hookedObj.tmp2_successCallback, hookedObj.tmp2_errorCallback, hookedObj.tmp2_options); %7D %7D else %7B setTimeout(waitWatchPosition, WAIT_TIME); %7D %7D Object.getPrototypeOf(navigator.geolocation).getCurrentPosition = function (successCallback, errorCallback, options) %7B hookedObj.tmp_successCallback = successCallback; hookedObj.tmp_errorCallback = errorCallback; hookedObj.tmp_options = options; waitGetCurrentPosition(); %7D; Object.getPrototypeOf(navigator.geolocation).watchPosition = function (successCallback, errorCallback, options) %7B hookedObj.tmp2_successCallback = successCallback; hookedObj.tmp2_errorCallback = errorCallback; hookedObj.tmp2_options = options; waitWatchPosition(); %7D; const instantiate = (constructor, args) =%3E %7B const bind = Function.bind; const unbind = bind.bind(bind); return new (unbind(constructor, null).apply(null, args)); %7D Blob = function (_Blob) %7B function secureBlob(...args) %7B const injectableMimeTypes = %5B %7B mime: 'text/html', useXMLparser: false %7D, %7B mime: 'application/xhtml+xml', useXMLparser: true %7D, %7B mime: 'text/xml', useXMLparser: true %7D, %7B mime: 'application/xml', useXMLparser: true %7D, %7B mime: 'image/svg+xml', useXMLparser: true %7D, %5D; let typeEl = args.find(arg =%3E (typeof arg === 'object') && (typeof arg.type === 'string') && (arg.type)); if (typeof typeEl !== 'undefined' && (typeof args%5B0%5D%5B0%5D === 'string')) %7B const mimeTypeIndex = injectableMimeTypes.findIndex(mimeType =%3E mimeType.mime.toLowerCase() === typeEl.type.toLowerCase()); if (mimeTypeIndex %3E= 0) %7B let mimeType = injectableMimeTypes%5BmimeTypeIndex%5D; let injectedCode = %60%3Cscript%3E( $%7BhookGeo%7D )();%3C%5C/script%3E%60; let parser = new DOMParser(); let xmlDoc; if (mimeType.useXMLparser === true) %7B xmlDoc = parser.parseFromString(args%5B0%5D.join(''), mimeType.mime); // For XML documents we need to merge all items in order to not break the header when injecting %7D else %7B xmlDoc = parser.parseFromString(args%5B0%5D%5B0%5D, mimeType.mime); %7D if (xmlDoc.getElementsByTagName('parsererror').length === 0) %7B // if no errors were found while parsing... xmlDoc.documentElement.insertAdjacentHTML('afterbegin', injectedCode); if (mimeType.useXMLparser === true) %7B args%5B0%5D = %5Bnew XMLSerializer().serializeToString(xmlDoc)%5D; %7D else %7B args%5B0%5D%5B0%5D = xmlDoc.documentElement.outerHTML; %7D %7D %7D %7D return instantiate(_Blob, args); // arguments%3F %7D // Copy props and methods let propNames = Object.getOwnPropertyNames(_Blob); for (let i = 0; i %3C propNames.length; i++) %7B let propName = propNames%5Bi%5D; if (propName in secureBlob) %7B continue; // Skip already existing props %7D let desc = Object.getOwnPropertyDescriptor(_Blob, propName); Object.defineProperty(secureBlob, propName, desc); %7D secureBlob.prototype = _Blob.prototype; return secureBlob; %7D(Blob); window.addEventListener('message', function (event) %7B if (event.source !== window) %7B return; %7D const message = event.data; switch (message.method) %7B case 'updateLocation': if ((typeof message.info === 'object') && (typeof message.info.coords === 'object')) %7B hookedObj.genLat = message.info.coords.lat; hookedObj.genLon = message.info.coords.lon; hookedObj.fakeGeo = message.info.fakeIt; %7D break; default: break; %7D %7D, false); //%5D%5D%3E%0A%7D )();%3C/script%3E%3C!--! Font Awesome Pro 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --%3E%3Cpath fill='black' d='M448 304h-53.5l-48 48H448c8.822 0 16 7.178 16 16V448c0 8.822-7.178 16-16 16H64c-8.822 0-16-7.178-16-16v-80C48 359.2 55.18 352 64 352h101.5l-48-48H64c-35.35 0-64 28.65-64 64V448c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64v-80C512 332.7 483.3 304 448 304zM432 408c0-13.26-10.75-24-24-24S384 394.7 384 408c0 13.25 10.75 24 24 24S432 421.3 432 408zM239 368.1C243.7 373.7 249.8 376 256 376s12.28-2.344 16.97-7.031l136-136c9.375-9.375 9.375-24.56 0-33.94s-24.56-9.375-33.94 0L280 294.1V24C280 10.75 269.3 0 256 0S232 10.75 232 24v270.1L136.1 199c-9.375-9.375-24.56-9.375-33.94 0s-9.375 24.56 0 33.94L239 368.1z'/%3E%3C/svg%3E");background-position:center center;background-repeat:no-repeat;background-size:contain;width:15px;height:21px;margin:0 6px 0 0;border-radius:0}html #root #main .section.download-tiles .grid-container .download-tile .entry .button .download:before,html #root #main .section.download-tiles .grid-container .download-tile .entry .button .download:after{display:none}