UNPKG

vue-azure-maps

Version:

Integrate Azure Maps in your Vue application

672 lines (582 loc) 1.63 MB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("vue")); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["vue-azure-maps"] = factory(require("vue")); else root["vue-azure-maps"] = factory(root["Vue"]); })((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__8bbf__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = "fb15"); /******/ }) /************************************************************************/ /******/ ({ /***/ "050f": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // CONCATENATED MODULE: ./src/plugin/utils/find-parent-component-by-name.ts /** * @name findParentComponentByName * @summary Find the Vue instance of the first parent component that matches the provided component name. * * @description The `findParentComponentByName()` method returns the Vue instance of the first parent component * that has a `name` component option that matches the provided component name. * * @param {Vue} vm - The children component Vue instance that is looking for the parent component Vue instance * @param {string} componentName - The parent component name * @returns {Vue|undefined} The parent component instance that matches the provided component name, * otherwise, undefined is returned * * @example * // Find `<App/>` component from `<Child/>`: * <App> * <GrandParent> * <Parent> * <Child/> * </Parent> * </GrandParent> * </App> * * // Descendant component Vue instance * new Vue({ * name: 'Child', * * created() { * const app = findParentComponentByName(this, 'App') * // => VueComponent {_uid: 1, _isVue: true, $options: {…}, _renderProxy: Proxy, _self: VueComponent, …} * }, * }) */ function findParentComponentByName(vm, componentName) { // // Components tree: // +---------------------+ \ return undefined, <Child/> is not a descendant of <App/> \ // | <App> |---> Return if component name option matches, otherwise // |---------------------| \ continue traversing the tree upwards \ // | <GrandParent> |-----> Return if component name option matches, otherwise // |---------------------| \ continue traversing the tree upwards \ // | <Parent> |-------> Return if component name option matches, otherwise // |---------------------| \ traverse the tree upwards \ // | <Child/> |---------> STARTING POINT, start looking for App component from here // |---------------------| // | </Parent> | // |---------------------| // | </GrandParent> | // |---------------------| // | </App> | // +---------------------+ // var component; var parent = vm.$parent; while (parent && !component) { if (parent.$options.name === componentName) { component = parent; } parent = parent.$parent; } return component; } // CONCATENATED MODULE: ./src/plugin/utils/dependency-injection.ts /* unused harmony export getInjection */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return getMapInjection; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return getDataSourceInjection; }); function isValidInjection(vm, injection, injectedPropertyLabel, componentName, parentName) { var isValid = Boolean(injection); if (!isValid && "production" !== 'production') { console.warn("Invalid <".concat(componentName, "> ").concat(injectedPropertyLabel, ".").concat(parentName && !findParentComponentByName(vm, parentName) ? "\nPlease make sure <".concat(componentName, "> is a descendant of <").concat(parentName, ">.") : "")); } return isValid; } function getInjection(_ref) { var vm = _ref.vm, injectionName = _ref.injectionName, injectedPropertyLabel = _ref.injectedPropertyLabel, sourceComponentName = _ref.sourceComponentName; var injection = vm[injectionName]; if (!isValidInjection(vm, injection, injectedPropertyLabel, vm.$options.name || '', sourceComponentName)) return; return injection; } function getMapInjection(vm) { return getInjection({ vm: vm, injectionName: 'getMap', injectedPropertyLabel: 'map instance', sourceComponentName: 'AzureMap' }); } function getDataSourceInjection(vm) { return getInjection({ vm: vm, injectionName: 'getDataSource', injectedPropertyLabel: 'data source', sourceComponentName: 'AzureMapDataSource' }); } /***/ }), /***/ "0c7c": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return normalizeComponent; }); /* globals __VUE_SSR_CONTEXT__ */ // IMPORTANT: Do NOT use ES2015 features in this file (except for modules). // This module is a runtime utility for cleaner component module output and will // be included in the final webpack user bundle. function normalizeComponent ( scriptExports, render, staticRenderFns, functionalTemplate, injectStyles, scopeId, moduleIdentifier, /* server only */ shadowMode /* vue-cli only */ ) { // Vue.extend constructor export interop var options = typeof scriptExports === 'function' ? scriptExports.options : scriptExports // render functions if (render) { options.render = render options.staticRenderFns = staticRenderFns options._compiled = true } // functional template if (functionalTemplate) { options.functional = true } // scopedId if (scopeId) { options._scopeId = 'data-v-' + scopeId } var hook if (moduleIdentifier) { // server build hook = function (context) { // 2.3 injection context = context || // cached call (this.$vnode && this.$vnode.ssrContext) || // stateful (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional // 2.2 with runInNewContext: true if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') { context = __VUE_SSR_CONTEXT__ } // inject component styles if (injectStyles) { injectStyles.call(this, context) } // register component module identifier for async chunk inferrence if (context && context._registeredComponents) { context._registeredComponents.add(moduleIdentifier) } } // used by ssr in case component is cached and beforeCreate // never gets called options._ssrRegister = hook } else if (injectStyles) { hook = shadowMode ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) } : injectStyles } if (hook) { if (options.functional) { // for template-only hot-reload because in that case the render fn doesn't // go through the normalizer options._injectStyles = hook // register for functional component in vue file var originalRender = options.render options.render = function renderWithStyleInjection (h, context) { hook.call(context) return originalRender(h, context) } } else { // inject component registration as beforeCreate hook var existing = options.beforeCreate options.beforeCreate = existing ? [].concat(existing, hook) : [hook] } } return { exports: scriptExports, options: options } } /***/ }), /***/ "31d7": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function getOptionsFromProps(_ref) { var props = _ref.props, _ref$excludedPropKeys = _ref.excludedPropKeys, excludedPropKeys = _ref$excludedPropKeys === void 0 ? [] : _ref$excludedPropKeys, _ref$reservedAttribut = _ref.reservedAttributes, reservedAttributes = _ref$reservedAttribut === void 0 ? {} : _ref$reservedAttribut; var propEntries = Object.entries(_objectSpread({}, props)); var options = {}; var reservedKeys = Object.keys(reservedAttributes); // Look for all the properties that have a truthy value for (var _i = 0, _propEntries = propEntries; _i < _propEntries.length; _i++) { var _propEntries$_i = _slicedToArray(_propEntries[_i], 2), prop = _propEntries$_i[0], value = _propEntries$_i[1]; if (!excludedPropKeys.includes(prop) && value !== null && value !== undefined) { var propKey = prop; // Handle reserved attributes if (reservedKeys.includes(prop)) { propKey = reservedAttributes[prop]; } options[propKey] = value; } } return options; } /* harmony default export */ __webpack_exports__["a"] = (getOptionsFromProps); /***/ }), /***/ "32ef": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export isObject */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return looseEqual; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return capitalize; }); function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } //=== // Helper functions //=== /** * Quick object check - this is primarily used to tell * Objects from primitive values when we know the value * is a JSON-compliant type. */ function isObject(obj) { return obj !== null && _typeof(obj) === 'object'; } /** * Check if two values are loosely equal - that is, * if they are plain objects, do they have the same shape? */ function looseEqual(a, b) { if (a === b) return true; var isObjectA = isObject(a); var isObjectB = isObject(b); if (isObjectA && isObjectB) { try { var isArrayA = Array.isArray(a); var isArrayB = Array.isArray(b); if (isArrayA && isArrayB) { return a.length === b.length && a.every(function (e, i) { return looseEqual(e, b[i]); }); } else if (a instanceof Date && b instanceof Date) { return a.getTime() === b.getTime(); } else if (!isArrayA && !isArrayB) { var keysA = Object.keys(a); var keysB = Object.keys(b); return keysA.length === keysB.length && keysA.every(function (key) { return looseEqual(a[key], b[key]); }); } else { return false; } } catch (e) { return false; } } else if (!isObjectA && !isObjectB) { return String(a) === String(b); } else { return false; } } function capitalize(str) { return str.charAt(0).toUpperCase() + str.slice(1); } /***/ }), /***/ "330c": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"3e5ca8aa-vue-loader-template"}!./node_modules/@vue/cli-service/node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader/lib??vue-loader-options!./src/plugin/components/AzureMapDataSource.vue?vue&type=template&id=7997c3ce& var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{directives:[{name:"show",rawName:"v-show",value:(false),expression:"false"}]},[(Boolean(_vm.dataSource))?[_vm._t("default",null,{"dataSource":_vm.dataSource})]:_vm._e()],2)} var staticRenderFns = [] // CONCATENATED MODULE: ./src/plugin/components/AzureMapDataSource.vue?vue&type=template&id=7997c3ce& // EXTERNAL MODULE: ./src/plugin/utils/dependency-injection.ts + 1 modules var dependency_injection = __webpack_require__("050f"); // EXTERNAL MODULE: ./src/plugin/utils/get-options-from-props.ts var get_options_from_props = __webpack_require__("31d7"); // EXTERNAL MODULE: external {"commonjs":"vue","commonjs2":"vue","root":"Vue"} var external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__("8bbf"); var external_commonjs_vue_commonjs2_vue_root_Vue_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_vue_commonjs2_vue_root_Vue_); // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/ts-loader??ref--14-3!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader/lib??vue-loader-options!./src/plugin/components/AzureMapDataSource.vue?vue&type=script&lang=ts& var AzureMapDataSourceEvent; (function (AzureMapDataSourceEvent) { AzureMapDataSourceEvent["Created"] = "created"; })(AzureMapDataSourceEvent || (AzureMapDataSourceEvent = {})); var state = external_commonjs_vue_commonjs2_vue_root_Vue_default.a.observable({ id: 0 }); /** * `AzureMapDataSource` makes it easy to manage shapes data that will be displayed on the map. * * A data source must be added to a layer before it is visible on the map. * * `AzureMapDataSource` may be used with: * `AzureMapSymbolLayer`, `AzureMapLineLayer`, `AzureMapPolygonLayer`, `AzureMapBubbleLayer`, and `AzureMapHeatMapLayer`. */ /* harmony default export */ var AzureMapDataSourcevue_type_script_lang_ts_ = (external_commonjs_vue_commonjs2_vue_root_Vue_default.a.extend({ name: 'AzureMapDataSource', provide: function provide() { return { /** * Provide a function to retreive the `atlas.source.DataSource` instance for descendent components that need to inject it * * Note that this method will only be available in the descendent component if it uses `inject: ['getDataSource']` */ getDataSource: this.getDataSource }; }, /** * Inject the `getMap` function to get the `atlas.Map` instance */ inject: ['getMap'], props: { /** * A unique id that the user assigns to the data source. * If this is not specified, then the data source will automatically be assigned an id. */ id: { type: String, default: undefined }, /** * Maximum zoom level at which to create vector tiles (higher means greater detail at high zoom levels). * default `18` * @default 18 */ maxZoom: { type: Number, default: undefined }, /** * A boolean indicating if Point features in the source should be clustered or not. * If set to true, points will be clustered together into groups by radius. * default `false` * @default false */ cluster: { type: Boolean, default: undefined }, /** * The radius of each cluster in pixels. * default `50` * @default 50 */ clusterRadius: { type: Number, default: undefined }, /** * The maximum zoom level in which to cluster points. * Defaults to one zoom less than `maxZoom` so that last zoom features are not clustered. */ clusterMaxZoom: { type: Number, default: undefined }, /** * Defines custom properties that are calculated using expressions against all the points within each cluster and added to the properties of each cluster point. */ clusterProperties: { type: Object, default: undefined }, /** * Specifies whether to calculate line distance metrics. * This is required for line layers that specify `lineGradient` values. * default `false` * @default false */ lineMetrics: { type: Boolean, default: undefined }, /** * The Douglas-Peucker simplification tolerance that is applied to the data when rendering (higher means simpler geometries and faster performance). * default `0.375` * @default 0.375 */ tolerance: { type: Number, default: undefined } }, data: function data() { return { // The data source instance dataSource: null }; }, computed: { dataSourceOptionProps: function dataSourceOptionProps() { var maxZoom = this.maxZoom, cluster = this.cluster, clusterRadius = this.clusterRadius, clusterMaxZoom = this.clusterMaxZoom, lineMetrics = this.lineMetrics, tolerance = this.tolerance, clusterProperties = this.clusterProperties; return { maxZoom: maxZoom, cluster: cluster, clusterRadius: clusterRadius, clusterMaxZoom: clusterMaxZoom, lineMetrics: lineMetrics, tolerance: tolerance, clusterProperties: clusterProperties }; } }, created: function created() { this.initializeDataSource(); }, methods: { initializeDataSource: function initializeDataSource() { var _this = this; // Look for the injected function that retreives the map instance var getMap = Object(dependency_injection["b" /* getMapInjection */])(this); if (!getMap) return; // Retrieve the map instance from the injected function var map = getMap(); // Create a data source to manage shapes var dataSource = new this.$_azureMaps.atlas.source.DataSource(this.id || "azure-map-data-source-".concat(state.id++), Object(get_options_from_props["a" /* default */])({ props: this.dataSourceOptionProps })); this.$emit(AzureMapDataSourceEvent.Created, dataSource); // Watch for all props changes this.$watch('dataSourceOptionProps', function () { dataSource.setOptions(_this.dataSourceOptionProps); }, { deep: true }); // Save the data source in a data property to provide it to descendent components this.dataSource = dataSource; // Add the data source to the map sources map.sources.add(this.dataSource); // Remove the data source when the component is destroyed this.$once('hook:destroyed', function () { map.sources.remove(dataSource); }); }, getDataSource: function getDataSource() { // Return the data source for descendent components injection return this.dataSource; } } })); // CONCATENATED MODULE: ./src/plugin/components/AzureMapDataSource.vue?vue&type=script&lang=ts& /* harmony default export */ var components_AzureMapDataSourcevue_type_script_lang_ts_ = (AzureMapDataSourcevue_type_script_lang_ts_); // EXTERNAL MODULE: ./node_modules/@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js var componentNormalizer = __webpack_require__("0c7c"); // CONCATENATED MODULE: ./src/plugin/components/AzureMapDataSource.vue /* normalize component */ var component = Object(componentNormalizer["a" /* default */])( components_AzureMapDataSourcevue_type_script_lang_ts_, render, staticRenderFns, false, null, null, null ) /* harmony default export */ var AzureMapDataSource = __webpack_exports__["default"] = (component.exports); /***/ }), /***/ "42fb": /***/ (function(module, exports, __webpack_require__) { // Imports var ___CSS_LOADER_API_IMPORT___ = __webpack_require__("4bad"); exports = ___CSS_LOADER_API_IMPORT___(false); // Module exports.push([module.i, ".mapboxgl-marker,.mapboxgl-popup{will-change:transform;top:0;left:0}.incident-popup-subtitle,.incident-popup-title{text-transform:capitalize;text-overflow:ellipsis}.mapboxgl-map{font:12px/20px Helvetica Neue,Arial,Helvetica,sans-serif;overflow:hidden;position:relative;-webkit-tap-highlight-color:transparent}.mapboxgl-canary{background-color:salmon}.mapboxgl-canvas-container.mapboxgl-interactive,.mapboxgl-ctrl-nav-compass{cursor:-webkit-grab;cursor:grab}.mapboxgl-canvas-container.mapboxgl-interactive:active,.mapboxgl-ctrl-nav-compass:active{cursor:-webkit-grabbing;cursor:grabbing}.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate{-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y}.mapboxgl-canvas-container.mapboxgl-touch-drag-pan{-ms-touch-action:pinch-zoom}.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan{-ms-touch-action:none;touch-action:none}.mapboxgl-ctrl-bottom-left,.mapboxgl-ctrl-bottom-right,.mapboxgl-ctrl-top-left,.mapboxgl-ctrl-top-right{position:absolute;pointer-events:none;z-index:2}.mapboxgl-ctrl-top-left{top:0;left:0}.mapboxgl-ctrl-top-right{top:0;right:0}.mapboxgl-ctrl-bottom-left{bottom:0;left:0}.mapboxgl-ctrl-bottom-right{right:0;bottom:0}.mapboxgl-ctrl{clear:both;pointer-events:auto}.mapboxgl-ctrl-top-left .mapboxgl-ctrl{margin:10px 0 0 10px;float:left}.mapboxgl-ctrl-top-right .mapboxgl-ctrl{margin:10px 10px 0 0;float:right}.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl{margin:0 0 10px 10px;float:left}.mapboxgl-ctrl-bottom-right .mapboxgl-ctrl{margin:0 10px 10px 0;float:right}.mapboxgl-ctrl-group{border-radius:4px;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1);box-shadow:0 0 0 2px rgba(0,0,0,.1);overflow:hidden;background:#fff}.mapboxgl-ctrl-group>button{width:30px;height:30px;display:block;padding:0;outline:0;border:none;border-bottom:1px solid #ddd;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:transparent;cursor:pointer}.mapboxgl-ctrl>button::-moz-focus-inner{border:0;padding:0}.mapboxgl-ctrl>button:last-child{border-bottom:0}.mapboxgl-ctrl>button:hover{background-color:rgba(0,0,0,.05)}.mapboxgl-ctrl-icon,.mapboxgl-ctrl-icon>.mapboxgl-ctrl-compass-arrow{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mapboxgl-ctrl-icon{padding:5px}.mapboxgl-ctrl-icon.mapboxgl-ctrl-zoom-out{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg%20viewBox%3D%270%200%2020%2020%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%0A%20%20%3Cpath%20style%3D%27fill%3A%23333333%3B%27%20d%3D%27m%207%2C9%20c%20-0.554%2C0%20-1%2C0.446%20-1%2C1%200%2C0.554%200.446%2C1%201%2C1%20l%206%2C0%20c%200.554%2C0%201%2C-0.446%201%2C-1%200%2C-0.554%20-0.446%2C-1%20-1%2C-1%20z%27%20%2F%3E%0A%3C%2Fsvg%3E%0A\")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-zoom-in{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg%20viewBox%3D%270%200%2020%2020%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%0A%20%20%3Cpath%20style%3D%27fill%3A%23333333%3B%27%20d%3D%27M%2010%206%20C%209.446%206%209%206.4459904%209%207%20L%209%209%20L%207%209%20C%206.446%209%206%209.446%206%2010%20C%206%2010.554%206.446%2011%207%2011%20L%209%2011%20L%209%2013%20C%209%2013.55401%209.446%2014%2010%2014%20C%2010.554%2014%2011%2013.55401%2011%2013%20L%2011%2011%20L%2013%2011%20C%2013.554%2011%2014%2010.554%2014%2010%20C%2014%209.446%2013.554%209%2013%209%20L%2011%209%20L%2011%207%20C%2011%206.4459904%2010.554%206%2010%206%20z%27%20%2F%3E%0A%3C%2Fsvg%3E%0A\")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 013.5 3.5 3.5 3.5 0 01-3.5 3.5A3.5 3.5 0 016.5 10 3.5 3.5 0 0110 6.5zm0 1.8A1.8 1.8 0 008.3 10a1.8 1.8 0 001.7 1.8 1.8 1.8 0 001.8-1.8A1.8 1.8 0 0010 8.3z' fill='%23333'/%3E%3C/svg%3E\")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate:disabled{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 013.5 3.5 3.5 3.5 0 01-3.5 3.5A3.5 3.5 0 016.5 10 3.5 3.5 0 0110 6.5zm0 1.8A1.8 1.8 0 008.3 10a1.8 1.8 0 001.7 1.8 1.8 1.8 0 001.8-1.8A1.8 1.8 0 0010 8.3z' fill='%23aaa'/%3E%3C/svg%3E\")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 013.5 3.5 3.5 3.5 0 01-3.5 3.5A3.5 3.5 0 016.5 10 3.5 3.5 0 0110 6.5zm0 1.8A1.8 1.8 0 008.3 10a1.8 1.8 0 001.7 1.8 1.8 1.8 0 001.8-1.8A1.8 1.8 0 0010 8.3z' fill='%2333b5e5'/%3E%3C/svg%3E\")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 013.5 3.5 3.5 3.5 0 01-3.5 3.5A3.5 3.5 0 016.5 10 3.5 3.5 0 0110 6.5zm0 1.8A1.8 1.8 0 008.3 10a1.8 1.8 0 001.7 1.8 1.8 1.8 0 001.8-1.8A1.8 1.8 0 0010 8.3z' fill='%23e58978'/%3E%3C/svg%3E\")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 110 7 3.5 3.5 0 010-7z' fill='%2333b5e5'/%3E%3C/svg%3E\")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 110 7 3.5 3.5 0 010-7z' fill='%23e54e33'/%3E%3C/svg%3E\")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-waiting{-webkit-animation:mapboxgl-spin 2s linear infinite;animation:mapboxgl-spin 2s linear infinite}@-webkit-keyframes mapboxgl-spin{0%{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(1turn)}}@keyframes mapboxgl-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.mapboxgl-ctrl-icon.mapboxgl-ctrl-fullscreen{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAyMCI+PHBhdGggZD0iTTUgNGMtLjUgMC0xIC41LTEgMXY0aC41bDEuMjc3LTEuNzAzYzEgLjc2MyAyLjA1OSAxLjY2IDMuMTE0IDIuNzAzYTMwLjM4IDMwLjM4IDAgMDEtMy4xMSAyLjcwN0w0LjUgMTFINHY0YzAgLjUuNSAxIDEgMWg0di0uNWwtMS43MjctMS4yOTVhMzUuNDk4IDM1LjQ5OCAwIDAxMi42ODgtMy4xMzcgMzAuMzEyIDMwLjMxMiAwIDAxMi43NDYgMy4xNUwxMSAxNS41di41aDRjLjUgMCAxLS41IDEtMXYtNGgtLjVsLTEuMjk1IDEuNzI3YTM1LjUxMyAzNS41MTMgMCAwMS0zLjE2OC0yLjcxNyA0Ny43ODcgNDcuNzg3IDAgMDEzLjE5Mi0yLjcwNUwxNS41IDloLjVWNWMwLS41LS41LTEtMS0xaC00di41bDEuNzAzIDEuMjc3QTMyLjI0MyAzMi4yNDMgMCAwMTkuOTcxIDguOTIgNDcuNzYxIDQ3Ljc2MSAwIDAxNy4zMDUgNS43N0w5IDQuNVY0SDV6Ii8+PC9zdmc+)}.mapboxgl-ctrl-icon.mapboxgl-ctrl-shrink{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAyMCI+PHBhdGggZD0iTTQuMjQyIDMuNDkyYS43NS43NSAwIDAwLS41MjMgMS4yOWwyLjI0NiAyLjI0NUw0IDguNVY5aDRjLjUgMCAxLS41IDEtMVY0aC0uNUw3LjAxOCA1Ljk1NSA0Ljc4IDMuNzJhLjc1Ljc1IDAgMDAtLjUzOS0uMjI3em0xMS40OTIgMGEuNzUuNzUgMCAwMC0uNTE1LjIyN2wtMi4yMzUgMi4yMzRMMTEuNSA0SDExdjRjMCAuNS41IDEgMSAxaDR2LS41bC0xLjk2NS0xLjQ3MyAyLjI0Ni0yLjI0NmEuNzUuNzUgMCAwMC0uNTQ3LTEuMjg5ek00IDExdi41bDEuOTY1IDEuNDczLTIuMjQ2IDIuMjQ2QS43NTEuNzUxIDAgMTA0Ljc4IDE2LjI4bDIuMjQ2LTIuMjQ2TDguNSAxNkg5di00YzAtLjUtLjUtMS0xLTFINHptOCAwYy0uNSAwLTEgLjUtMSAxdjRoLjVsMS40NzMtMS45NjUgMi4yNDYgMi4yNDZhLjc1MS43NTEgMCAxMDEuMDYyLTEuMDYybC0yLjI0Ni0yLjI0NkwxNiAxMS41VjExaC00eiIvPjwvc3ZnPg==)}.mapboxgl-ctrl-icon.mapboxgl-ctrl-compass>.mapboxgl-ctrl-compass-arrow{width:20px;height:20px;margin:5px;background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%0A%09%3Cpolygon%20fill%3D%27%23333333%27%20points%3D%276%2C9%2010%2C1%2014%2C9%27%2F%3E%0A%09%3Cpolygon%20fill%3D%27%23CCCCCC%27%20points%3D%276%2C11%2010%2C19%2014%2C11%20%27%2F%3E%0A%3C%2Fsvg%3E\");background-repeat:no-repeat;display:inline-block}a.mapboxgl-ctrl-logo{width:85px;height:21px;margin:0 0 -3px -3px;display:block;background-repeat:no-repeat;cursor:pointer;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA4NC40OSAyMSI+PHBhdGggY2xhc3M9InN0MCIgZD0iTTgzLjI1IDE0LjI2YzAgLjEyLS4wOS4yMS0uMjEuMjFoLTEuNjFjLS4xMyAwLS4yNC0uMDYtLjMtLjE3bC0xLjQ0LTIuMzktMS40NCAyLjM5YS4zNC4zNCAwIDAxLS4zLjE3aC0xLjYxYy0uMDQgMC0uMDgtLjAxLS4xMi0uMDMtLjA5LS4wNi0uMTMtLjE5LS4wNi0uMjhsMi40My0zLjY4LTIuMzktMy42NGEuMjEzLjIxMyAwIDAxLS4wMy0uMTJjMC0uMTIuMDktLjIxLjIxLS4yMWgxLjYxYy4xMyAwIC4yNC4wNi4zLjE3bDEuNDEgMi4zNiAxLjQtMi4zNWEuMzQuMzQgMCAwMS4zLS4xN0g4M2MuMDQgMCAuMDguMDEuMTIuMDMuMDkuMDYuMTMuMTkuMDYuMjhsLTIuMzcgMy42MyAyLjQzIDMuNjdjMCAuMDUuMDEuMDkuMDEuMTN6TTY2LjI0IDkuNTljLS4zOS0xLjg4LTEuOTYtMy4yOC0zLjg0LTMuMjgtMS4wMyAwLTIuMDMuNDItMi43MyAxLjE4VjMuNTFjMC0uMTMtLjEtLjIzLS4yMy0uMjNoLTEuNGMtLjEzIDAtLjIzLjExLS4yMy4yM3YxMC43MmMwIC4xMy4xLjIzLjIzLjIzaDEuNGMuMTMgMCAuMjMtLjExLjIzLS4yM3YtLjczYy43MS43NSAxLjcgMS4xOCAyLjczIDEuMTggMS44OCAwIDMuNDUtMS40MSAzLjg0LTMuMjkuMTMtLjYuMTMtMS4yMSAwLTEuOHpNNjIuMDggMTNjLTEuMzIgMC0yLjM5LTEuMTEtMi40MS0yLjQ4di0uMDZjLjAyLTEuMzggMS4wOS0yLjQ4IDIuNDEtMi40OHMyLjQyIDEuMTIgMi40MiAyLjUxUzYzLjQxIDEzIDYyLjA4IDEzek03MS42NyA2LjMyYTQuMjQgNC4yNCAwIDAwLTQuMTYgMy4yOWMtLjEzLjU5LS4xMyAxLjE5IDAgMS43N2E0LjIzMyA0LjIzMyAwIDAwNC4xNyAzLjNjMi4zNSAwIDQuMjYtMS44NyA0LjI2LTQuMTlzLTEuOS00LjE3LTQuMjctNC4xN3ptLS4wMiA2LjY5Yy0xLjMzIDAtMi40Mi0xLjEyLTIuNDItMi41MXMxLjA4LTIuNTIgMi40Mi0yLjUyYzEuMzMgMCAyLjQyIDEuMTIgMi40MiAyLjUxcy0xLjA4IDIuNTEtMi40MiAyLjUyeiIgb3BhY2l0eT0iLjkiIGZpbGw9IiNmZmYiLz48cGF0aCBjbGFzcz0ic3QxIiBkPSJNNjIuMDggNy45OGMtMS4zMiAwLTIuMzkgMS4xMS0yLjQxIDIuNDh2LjA2Yy4wMSAxLjM4IDEuMDggMi40OCAyLjQxIDIuNDhzMi40Mi0xLjEyIDIuNDItMi41MS0xLjA5LTIuNTEtMi40Mi0yLjUxem0wIDMuNzhjLS42MyAwLTEuMTQtLjU2LTEuMTctMS4yNXYtLjA0Yy4wMS0uNjkuNTQtMS4yNSAxLjE3LTEuMjUuNjMgMCAxLjE3LjU3IDEuMTcgMS4yNy0uMDEuNzEtLjUyIDEuMjctMS4xNyAxLjI3ek03MS42NSA3Ljk4Yy0xLjMzIDAtMi40MiAxLjEyLTIuNDIgMi41MVM3MC4zMiAxMyA3MS42NSAxM3MyLjQyLTEuMTIgMi40Mi0yLjUxLTEuMDgtMi41MS0yLjQyLTIuNTF6bTAgMy43OGMtLjY0IDAtMS4xNy0uNTctMS4xNy0xLjI3IDAtLjcuNTMtMS4yNiAxLjE3LTEuMjZzMS4xNy41NyAxLjE3IDEuMjdjMCAuNzEtLjUzIDEuMjYtMS4xNyAxLjI2eiIgb3BhY2l0eT0iLjM1Ii8+PHBhdGggY2xhc3M9InN0MCIgZD0iTTQ1Ljc0IDYuNTNoLTEuNGMtLjEzIDAtLjIzLjExLS4yMy4yM3YuNzNjLS43MS0uNzUtMS43LTEuMTgtMi43My0xLjE4LTIuMTcgMC0zLjk0IDEuODctMy45NCA0LjE5czEuNzcgNC4xOSAzLjk0IDQuMTljMS4wNCAwIDIuMDMtLjQzIDIuNzMtMS4xOXYuNzNjMCAuMTMuMS4yMy4yMy4yM2gxLjRjLjEzIDAgLjIzLS4xMS4yMy0uMjNWNi43NGMwLS4xMi0uMDktLjIyLS4yMi0uMjIgMCAuMDEgMCAuMDEtLjAxLjAxem0tMS42MiA0QzQ0LjExIDExLjkgNDMuMDMgMTMgNDEuNzEgMTNzLTIuNDItMS4xMi0yLjQyLTIuNTEgMS4wOC0yLjUyIDIuNC0yLjUyYzEuMzMgMCAyLjM5IDEuMTEgMi40MSAyLjQ4bC4wMi4wOHoiIG9wYWNpdHk9Ii45IiBmaWxsPSIjZmZmIi8+PHBhdGggY2xhc3M9InN0MSIgZD0iTTQxLjcxIDcuOThjLTEuMzMgMC0yLjQyIDEuMTItMi40MiAyLjUxUzQwLjM3IDEzIDQxLjcxIDEzczIuMzktMS4xMSAyLjQxLTIuNDh2LS4wNmMtLjAyLTEuMzctMS4wOS0yLjQ4LTIuNDEtMi40OHptLTEuMTYgMi41MWMwLS43LjUyLTEuMjcgMS4xNy0xLjI3LjY0IDAgMS4xNC41NiAxLjE3IDEuMjV2LjA0Yy0uMDEuNjgtLjUzIDEuMjQtMS4xNyAxLjI0LS42NCAwLTEuMTctLjU2LTEuMTctMS4yNnoiIG9wYWNpdHk9Ii4zNSIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik01Mi40MSA2LjMyYy0xLjAzIDAtMi4wMy40Mi0yLjczIDEuMTh2LS43NWMwLS4xMy0uMS0uMjMtLjIzLS4yM2gtMS40Yy0uMTMgMC0uMjMuMTEtLjIzLjIzdjEwLjcyYzAgLjEzLjEuMjMuMjMuMjNoMS40Yy4xMyAwIC4yMy0uMS4yMy0uMjNWMTMuNWMuNzEuNzUgMS43IDEuMTggMi43NCAxLjE4IDIuMTcgMCAzLjk0LTEuODcgMy45NC00LjE5cy0xLjc4LTQuMTctMy45NS00LjE3em0tLjMzIDYuNjljLTEuMzIgMC0yLjM5LTEuMTEtMi40Mi0yLjQ4di0uMDdjLjAyLTEuMzggMS4wOS0yLjQ5IDIuNC0yLjQ5IDEuMzIgMCAyLjQxIDEuMTIgMi40MSAyLjUxUzUzLjQgMTMgNTIuMDggMTMuMDF6IiBvcGFjaXR5PSIuOSIgZmlsbD0iI2ZmZiIvPjxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik01Mi4wOCA3Ljk4Yy0xLjMyIDAtMi4zOSAxLjExLTIuNDIgMi40OHYuMDZjLjAzIDEuMzggMS4xIDIuNDggMi40MiAyLjQ4czIuNDEtMS4xMiAyLjQxLTIuNTEtMS4wOS0yLjUxLTIuNDEtMi41MXptMCAzLjc4Yy0uNjMgMC0xLjE0LS41Ni0xLjE3LTEuMjV2LS4wNGMuMDEtLjY5LjU0LTEuMjUgMS4xNy0xLjI1LjYzIDAgMS4xNy41OCAxLjE3IDEuMjdzLS41MyAxLjI3LTEuMTcgMS4yN3oiIG9wYWNpdHk9Ii4zNSIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0zNi4wOCAxNC4yNGMwIC4xMy0uMS4yMy0uMjMuMjNoLTEuNDFjLS4xMyAwLS4yMy0uMTEtLjIzLS4yM1Y5LjY4YzAtLjk4LS43NC0xLjcxLTEuNjItMS43MS0uOCAwLTEuNDYuNy0xLjU5IDEuNjJsLjAxIDQuNjZjMCAuMTMtLjExLjIzLS4yMy4yM2gtMS40MWMtLjEzIDAtLjIzLS4xMS0uMjMtLjIzVjkuNjhjMC0uOTgtLjc0LTEuNzEtMS42Mi0xLjcxLS44NSAwLTEuNTQuNzktMS42IDEuOHY0LjQ4YzAgLjEzLS4xLjIzLS4yMy4yM2gtMS40Yy0uMTMgMC0uMjMtLjExLS4yMy0uMjNWNi43NGMuMDEtLjEzLjEtLjIyLjIzLS4yMmgxLjRjLjEzIDAgLjIyLjExLjIzLjIydi42NmMuNS0uNjggMS4zLTEuMDkgMi4xNi0xLjFoLjAzYzEuMDkgMCAyLjA5LjYgMi42IDEuNTUuNDUtLjk1IDEuNC0xLjU1IDIuNDQtMS41NiAxLjYyIDAgMi45MyAxLjI1IDIuOSAyLjc4bC4wMyA1LjE3eiIgb3BhY2l0eT0iLjkiIGZpbGw9IiNmZmYiLz48cGF0aCBjbGFzcz0ic3QxIiBkPSJNODQuMzQgMTMuNTlsLS4wNy0uMTMtMS45Ni0yLjk5IDEuOTQtMi45NWMuNDQtLjY3LjI2LTEuNTYtLjQxLTIuMDItLjAyIDAtLjAzIDAtLjA0LS4wMS0uMjMtLjE1LS41LS4yMi0uNzgtLjIyaC0xLjYxYy0uNTYgMC0xLjA4LjI5LTEuMzcuNzhsLS4zMi41NS0uMzQtLjU2Yy0uMjktLjQ4LS44MS0uNzctMS4zOC0uNzdoLTEuNmMtLjYgMC0xLjEzLjM3LTEuMzUuOTJhNS41OSA1LjU5IDAgMDAtNy4yNi40NWMtLjM1LjM0LS42NS43Mi0uODkgMS4xNC0uOS0xLjYyLTIuNTgtMi43Mi00LjUtMi43Mi0uNSAwLTEuMDEuMDctMS40OC4yM1YzLjUxYzAtLjgyLS42Ni0xLjQ4LTEuNDctMS40OGgtMS40Yy0uODEgMC0xLjQ3LjY2LTEuNDcgMS40N3YzLjc1YTUuMTIgNS4xMiAwIDAwLTQuMTctMi4xOWMtLjc0IDAtMS40Ni4xNi0yLjEyLjQ3LS4yNC0uMTctLjU0LS4yNi0uODQtLjI2aC0xLjRjLS40NSAwLS44Ny4yMS0xLjE1LjU2YTEuNDk4IDEuNDk4IDAgMDAtMS4xNi0uNTVoLTEuMzljLS4zIDAtLjYuMDktLjg0LjI2LS42Ny0uMy0xLjM5LS40Ni0yLjEyLS40Ni0xLjgzIDAtMy40MyAxLTQuMzcgMi41LS4yLS40Ni0uNDgtLjg5LS44My0xLjI1LS44LS44MS0xLjg5LTEuMjUtMy4wMi0xLjI1aC0uMDFjLS44OS4wMS0xLjc1LjMzLTIuNDYuODgtLjc0LS41Ny0xLjY0LS44OC0yLjU3LS44OGgtLjAzYy0uMjkgMC0uNTguMDMtLjg2LjExLS4yOC4wNi0uNTYuMTYtLjgyLjI4LS4yMS0uMTItLjQ1LS4xOC0uNy0uMThoLTEuNGMtLjgyIDAtMS40Ny42Ni0xLjQ3IDEuNDd2Ny41YzAgLjgyLjY2IDEuNDcgMS40NyAxLjQ3aDEuNGMuODIgMCAxLjQ4LS42NiAxLjQ4LTEuNDhWOS43OWMuMDMtLjM2LjIzLS41OS4zNi0uNTkuMTggMCAuMzguMTguMzguNDd2NC41N2MwIC44Mi42NiAxLjQ3IDEuNDcgMS40N2gxLjQxYy44MiAwIDEuNDctLjY2IDEuNDctMS40N2wtLjAxLTQuNTdjLjA2LS4zMi4yNS0uNDcuMzUtLjQ3LjE4IDAgLjM4LjE4LjM4LjQ3djQuNTdjMCAuODIuNjYgMS40NyAxLjQ3IDEuNDdoMS40MWMuODIgMCAxLjQ3LS42NiAxLjQ3LTEuNDd2LS4zOGE1LjA2OCA1LjA2OCAwIDAwNC4wNiAyLjA2Yy43NCAwIDEuNDYtLjE2IDIuMTItLjQ3LjI0LjE3LjU0LjI2Ljg0LjI2aDEuMzljLjMgMCAuNi0uMDkuODQtLjI2djIuMDFjMCAuODIuNjYgMS40NyAxLjQ3IDEuNDdoMS40Yy44MiAwIDEuNDctLjY2IDEuNDctMS40N3YtMS43N2MuNDguMTUuOTkuMjMgMS40OS4yMiAxLjcgMCAzLjIyLS44NyA0LjE3LTIuMnYuNTJjMCAuODIuNjYgMS40NyAxLjQ3IDEuNDdoMS40Yy4zIDAgLjYtLjA5Ljg0LS4yNi42Ni4zMSAxLjM5LjQ3IDIuMTIuNDcgMS45MiAwIDMuNi0xLjEgNC40OS0yLjczIDEuNTQgMi42NSA0Ljk1IDMuNTMgNy41OCAxLjk4LjE4LS4xMS4zNi0uMjIuNTMtLjM2LjIyLjU1Ljc2LjkxIDEuMzUuOUg3OGMuNTYgMCAxLjA4LS4yOSAxLjM3LS43OGwuMzctLjYxLjM3LjYxYy4yOS40OC44MS43OCAxLjM4Ljc4aDEuNmMuODEgMCAxLjQ2LS42NiAxLjQ1LTEuNDYtLjA1LS4yMi0uMS0uNDQtLjItLjY1em0tNDguNDguODhoLTEuNDFjLS4xMyAwLS4yMy0uMTEtLjIzLS4yM1Y5LjY4YzAtLjk4LS43NC0xLjcxLTEuNjItMS43MS0uOCAwLTEuNDYuNy0xLjU5IDEuNjJsLjAxIDQuNjZjMCAuMTMtLjEuMjMtLjIzLjIzaC0xLjQxYy0uMTMgMC0uMjMtLjExLS4yMy0uMjNWOS42OGMwLS45OC0uNzQtMS43MS0xLjYyLTEuNzEtLjg1IDAtMS41NC43OS0xLjYgMS44djQuNDhjMCAuMTMtLjEuMjMtLjIzLjIzaC0xLjRjLS4xMyAwLS4yMy0uMTEtLjIzLS4yM1Y2Ljc0YS4yMy4yMyAwIDAxLjIzLS4yMmgxLjRjLjEzIDAgLjIyLjExLjIzLjIydi42NmMuNS0uNjggMS4zLTEuMDkgMi4xNi0xLjFoLjAzYzEuMDkgMCAyLjA5LjYgMi42IDEuNTUuNDUtLjk1IDEuNC0xLjU1IDIuNDQtMS41NiAxLjYyIDAgMi45MyAxLjI1IDIuOSAyLjc4bC4wMSA1LjE2Yy4wMi4xMy0uMDkuMjMtLjIxLjI0em0xMC4xMS0uMjNjMCAuMTMtLjEuMjMtLjIzLjIzaC0xLjRjLS4xMyAwLS4yMy0uMTEtLjIzLS4yM3YtLjc0Yy0uNy43Ni0xLjY5IDEuMTgtMi43MiAxLjE4LTIuMTcgMC0zLjk0LTEuODctMy45NC00LjE5czEuNzctNC4xOSAzLjk0LTQuMTljMS4wMyAwIDIuMDIuNDMgMi43MyAxLjE4di0uNzRjMC0uMTMuMS0uMjMuMjMtLjIzaDEuNGMuMTItLjAxLjIyLjA4LjIzLjIxVjE0LjI1aC0uMDF2LS4wMXptNi40NC40M2MtMS4wMyAwLTIuMDItLjQzLTIuNzMtMS4xOHYzLjk3YzAgLjEzLS4xLjIzLS4yMy4yM2gtMS40Yy0uMTMgMC0uMjMtLjEtLjIzLS4yM1Y2Ljc1YzAtLjEzLjEtLjIyLjIzLS4yMmgxLjRjLjEzIDAgLjIzLjExLjIzLjIzdi43M2EzLjczIDMuNzMgMCAwMTIuNzMtMS4xOGMyLjE3IDAgMy45NCAxLjg2IDMuOTQgNC4xOHMtMS43NyA0LjE4LTMuOTQgNC4xOHptMTMuODMtMy4yOGMtLjM5IDEuODctMS45NiAzLjI5LTMuODQgMy4yOS0xLjAzIDAtMi4wMi0uNDMtMi43My0xLjE4di43M2MwIC4xMy0uMS4yMy0uMjMuMjNoLTEuNGMtLjEzIDAtLjIzLS4xMS0uMjMtLjIzVjMuNTFjMC0uMTMuMS0uMjMuMjMtLjIzaDEuNGMuMTMgMCAuMjMuMTEuMjMuMjN2My45N2EzLjcyIDMuNzIgMCAwMTIuNzMtMS4xN2MxLjg4IDAgMy40NSAxLjQgMy44NCAzLjI4LjEzLjYuMTMgMS4yMSAwIDEuOHptNS40MyAzLjI5Yy0yIC4wMS0zLjczLTEuMzUtNC4xNy0zLjMtLjEzLS41OS0uMTMtMS4xOSAwLTEuNzdhNC4yNDMgNC4yNDMgMCAwMTQuMTctMy4zYzIuMzYgMCA0LjI2IDEuODcgNC4yNiA0LjE5cy0xLjkgNC4xOC00LjI2IDQuMTh6bTExLjM3LS4yMWgtMS42MWMtLjEzIDAtLjI0LS4wNi0uMy0uMTdsLTEuNDQtMi4zOS0xLjQ0IDIuMzlhLjM0LjM0IDAgMDEtLjMuMTdoLTEuNjFjLS4wNCAwLS4wOC0uMDEtLjEyLS4wMy0uMDktLjA2LS4xMy0uMTktLjA2LS4yOGwyLjQzLTMuNjgtMi4zOS0zLjY0YS4yMTMuMjEzIDAgMDEtLjAzLS4xMmMwLS4xMi4wOS0uMjEuMjEtLjIxaDEuNjFjLjEzIDAgLjI0LjA2LjMuMTdsMS40MSAyLjM2IDEuNDEtMi4zNmEuMzQuMzQgMCAwMS4zLS4xN2gxLjYxYy4wNCAwIC4wOC4wMS4xMi4wMy4wOS4wNi4xMy4xOS4wNi4yOGwtMi4zOCAzLjY0IDIuNDMgMy42N2MuMDIuMDMuMDMuMDcuMDMuMTItLjAzLjEzLS4xMi4yMi0uMjQuMjJ6IiBvcGFjaXR5PSIuMzUiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTAuNSAxLjI0Yy01LjExIDAtOS4yNSA0LjE1LTkuMjUgOS4yNXM0LjE1IDkuMjUgOS4yNSA5LjI1IDkuMjUtNC4xNSA5LjI1LTkuMjVjMC01LjExLTQuMTQtOS4yNS05LjI1LTkuMjV6bTQuMzkgMTEuNTNjLTEuOTMgMS45My00Ljc4IDIuMzEtNi43IDIuMzEtLjcgMC0xLjQxLS4wNS0yLjEtLjE2IDAgMC0xLjAyLTUuNjQgMi4xNC04LjgxYTQuNCA0LjQgMCAwMTMuMTMtMS4yOGMxLjI3IDAgMi40OS41MSAzLjM5IDEuNDIgMS44NCAxLjg0IDEuODkgNC43NS4xNCA2LjUyeiIgb3BhY2l0eT0iLjkiIGZpbGw9IiNmZmYiLz48cGF0aCBjbGFzcz0ic3QxIiBkPSJNMTAuNS0uMDFDNC43LS4wMSAwIDQuNyAwIDEwLjQ5czQuNyAxMC41IDEwLjUgMTAuNVMyMSAxNi4yOSAyMSAxMC40OUMyMC45OSA0LjcgMTYuMy0uMDEgMTAuNS0uMDF6bTAgMTkuNzVjLTUuMTEgMC05LjI1LTQuMTUtOS4yNS05LjI1czQuMTQtOS4yNiA5LjI1LTkuMjYgOS4yNSA0LjE1IDkuMjUgOS4yNWMwIDUuMTMtNC4xNCA5LjI2LTkuMjUgOS4yNnoiIG9wYWNpdHk9Ii4zNSIvPjxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNC43NCA2LjI1Yy0xLjg0LTEuODQtNC43Ni0xLjktNi41MS0uMTUtMy4xNiAzLjE3LTIuMTQgOC44MS0yLjE0IDguODFzNS42NCAxLjAyIDguODEtMi4xNGMxLjc0LTEuNzcgMS42OS00LjY4LS4xNi02LjUyem0tMi4yNyA0LjA5bC0uOTEgMS44Ny0uOS0xLjg3LTEuODYtLjkxIDEuODYtLjkuOS0xLjg3LjkxIDEuODcgMS44Ni45LTEuODYuOTF6IiBvcGFjaXR5PSIuMzUiLz48cGF0aCBjbGFzcz0ic3QwIiBvcGFjaXR5PSIuOSIgZmlsbD0iI2ZmZiIgZD0iTTE0LjMzIDkuNDNsLTEuODYuOTEtLjkxIDEuODctLjktMS44Ny0xLjg2LS45MSAxLjg2LS45LjktMS44Ny45MSAxLjg3eiIvPjwvc3ZnPg==)}.mapboxgl-ctrl.mapboxgl-ctrl-attrib{padding:0 5px;background-color:hsla(0,0%,100%,.5);margin:0}.mapboxgl-ctrl-attrib.mapboxgl-compact{padding-top:2px;padding-bottom:2px;margin:0 10px 10px;position:relative;padding-right:24px;background-color:#fff;border-radius:3px 12px 12px 3px;visibility:hidden}.mapboxgl-ctrl-attrib.mapboxgl-compact:hover{visibility:visible}.mapboxgl-ctrl-attrib.mapboxgl-compact:after{content:\"\";cursor:pointer;position:absolute;bottom:0;right:0;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23333' fill-rule='evenodd' d='M4 10a6 6 0 1012 0 6 6 0 10-12 0m5-3a1 1 0 102 0 1 1 0 10-2 0m0 3a1 1 0 112 0v3a1 1 0 11-2 0'/%3E%3C/svg%3E\");background-color:hsla(0,0%,100%,.5);width:24px;height:24px;-webkit-box-sizing:border-box;box-sizing:border-box;visibility:visible;border-radius:12px}.mapboxgl-ctrl-attrib a{color:rgba(0,0,0,.75);text-decoration:none}.mapboxgl-ctrl-attrib a:hover{color:inherit;text-decoration:underline}.mapboxgl-ctrl-attrib .mapbox-improve-map{font-weight:700;margin-left:2px}.mapboxgl-ctrl-scale{background-color:hsla(0,0%,100%,.75);font-size:10px;border-width:medium 2px 2px;border-style:none solid solid;border-color:#333;padding:0 5px;color:#333}.mapboxgl-popup{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;pointer-events:none}.mapboxgl-popup-anchor-top,.mapboxgl-popup-anchor-top-left,.mapboxgl-popup-anchor-top-right{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.mapboxgl-popup-anchor-bottom,.mapboxgl-popup-anchor-bottom-left,.mapboxgl-popup-anchor-bottom-right{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.mapboxgl-popup-anchor-left{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.mapboxgl-popup-anchor-right{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.mapboxgl-popup-tip{width:0;height:0;border:10px solid transparent;z-index:1}.mapboxgl-popup-anchor-top .mapboxgl-popup-tip{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;border-top:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-top-left .mapboxgl-popup-tip{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;border-top:none;border-left:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-top-right .mapboxgl-popup-tip{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;border-top:none;border-right:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;border-bottom:none;border-top-color:#fff}.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-tip{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;border-bottom:none;border-left:none;border-top-color:#fff}.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-tip{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;border-bottom:none;border-right:none;border-top-color:#fff}.mapboxgl-popup-anchor-left .mapboxgl-popup-tip{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;border-left:none;border-right-color:#fff}.mapboxgl-popup-anchor-right .mapboxgl-popup-tip{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;border-right:none;border-left-color:#fff}.mapboxgl-popup-close-button{position:absolute;right:0;top:0;border:none;border-radius:0 3px 0 0;cursor:pointer;background-color:transparent}.mapboxgl-popup-close-button:hover{background-color:rgba(0,0,0,.05)}.mapboxgl-popup-content{position:relative;background:#fff;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.1);box-shadow:0 1px 2px rgba(0,0,0,.1);padding:10px 10px 15px;pointer-events:auto}.mapboxgl-popup-anchor-top-left .mapboxgl-popup-content{border-top-left-radius:0}.mapboxgl-popup-anchor-top-right .mapboxgl-popup-content{border-top-right-radius:0}.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-content{border-bottom-left-radius:0}.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-content{border-bottom-right-radius:0}.mapboxgl-marker{position:absolute}.mapboxgl-user-location-dot{background-color:#1da1f2;width:16px;height:16px;border-radius:50%;-webkit-box-shadow:0 0 2px rgba(0,0,0,.25);box-shadow:0 0 2px rgba(0,0,0,.25);border:2px solid #fff}.mapboxgl-user-location-dot:after{content:\"\";display:block;-webkit-box-shadow:#1da1f2 0 0 0 2px;box-shadow:0 0 0 2px #1da1f2;width:16px;height:16px;border-radius:50%;position:relative;z-index:-1;-webkit-animation:mapboxgl-user-location-dot-pulse 2s;animation:mapboxgl-user-location-dot-pulse 2s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}@-webkit-keyframes mapboxgl-user-location-dot-pulse{0%{-webkit-box-shadow:0 0 0 0 rgba(29,161,242,.8)}70%{-webkit-box-shadow:0 0 0 15px rgba(29,161,242,0)}242%{-webkit-box-shadow:0 0 0 0 rgba(29,161,242,0)}}@keyframes mapboxgl-user-location-dot-pulse{0%{-webkit-box-shadow:0 0 0 0 rgba(29,161,242,.4);box-shadow:0 0 0 0 rgba(29,161,242,.4)}70%{-webkit-box-shadow:0 0 0 15px rgba(29,161,242,0);box-shadow:0 0 0 15px rgba(29,161,242,0)}to{-webkit-box-shadow:0 0 0 0 rgba(29,161,242,0);box-shadow:0 0 0 0 rgba(29,161,242,0)}}.mapboxgl-user-location-dot-stale{background-color:#aaa}.mapboxgl-user-location-dot-stale:after{display:none}.mapboxgl-crosshair,.mapboxgl-crosshair .mapboxgl-interactive,.mapboxgl-crosshair .mapboxgl-interactive:active{cursor:crosshair}.mapboxgl-boxzoom{position:absolute;top:0;left:0;width:0;height:0;background:#fff;border:2px dotted #202020;opacity:.5}.azure-maps-control-container>.style-options.icons .azure-maps-control-button:active img,.azure-maps-control-container>.style-