@road-labs/map-sdk 0.0.27 → 0.0.28-rc.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -30,17 +30,18 @@ The `App` component accepts the following props:
30
30
  | :-------------------------- | :------- | :--------- | :------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------- |
31
31
  | `height` | Yes | Both | Both | Height of the map container in pixels. | `-` |
32
32
  | `gestureHandling` | Yes | Both | Both | Google Maps SDK parameter controlling how gestures (scroll, pinch, etc.) interact with the map. Allowed values: `greedy`, `cooperative`, `none`, `auto`. We suggest a default value of `greedy`. | `-` |
33
- | `authorization` | Yes | v2 | Both | The public authorization key to search for locations. | `-` |
34
- | `context` | Yes | Both | Both | Context type for the map. Allowed values: `"cpo"` or `"msp"`. | `-` |
35
- | `version` | No | Both | Both | Which version of the map SDK do you wish to use. | `v1` |
36
- | `language` | No | Both | Both | Language of the widget. Supported values: `en`. If nothing is set, it will use the browser language. | Browser language |
33
+ | `authorization` | Yes | v2 | Both | The public map key. Besides granting access it decides what kind of map this is: its remote configuration carries the context (`cpo` or `msp`), the operators, publishing modes and Google Maps key. The context is never passed as a prop. On `cpo` maps the widget uses the `/1/map/cpo/*` endpoints, draws locations individually while the view holds at most 1000 of them, and colours pins and filters by the OCPP status the station reports (Faulted red, Unavailable amber, in-session blue, Available green, no report grey, a fault outranking everything else on a pin). `msp` maps keep the clustering, filters and colours the mobile apps use. | `-` |
34
+ | `version` | No | Both | Both | Which behaviour set the widget runs. `v1` is the legacy widget. `v2` authenticates with the map key, loads its remote configuration and shows the v2 details view. `v3` keeps everything in `v2` and draws the redesigned pins described under [Pins](#pins-v3); it also sends `version: v3` to the API, which then counts a bucket's statuses per EVSE (per connector on `cpo` maps) instead of per location and returns the cheapest current energy price per kWh for each bucket. | `v1` |
35
+ | `currency` | No | v3 | Both | ISO 4217 code of the currency prices per kWh are shown in on the pins and filtered in. Sent as `currency` on every search and analytics request; a location publishing its tariff in another currency shows no price. A `currency` in the map key's remote configuration is used when the prop is not set. | `EUR` |
36
+ | `language` | No | Both | Both | Language of the widget. Supported values: `en`, `nl`, `de`, `fr`, `it`, `es` and their regional variants (e.g. `nl-NL`, `de-AT`), matched case-insensitively. Unsupported values fall back to `en`. If nothing is set, the browser language is used. | Browser language |
37
37
  | `position {lat,lng}` | No | Both | Both | Initial latitude/longitude to center the map on load. If not provided, defaults to visitor's IP-based location. | Visitor IP location |
38
38
  | `useBrowserLocation` | No | Both | Both | Use the browser location to center the map. | `false` |
39
39
  | `enableZoomControls` | No | Both | Both | Whether to display zoom (+/-) controls in the bottom-right corner. | `false` |
40
40
  | `enableSidebar` | No | Both | Both | Enables sidebar with location/cluster information when selected. | `false` |
41
41
  | `enablePlacesSearch` | No | Both | Both | Enables address search input at the top of the map. | `true` |
42
42
  | `locationId` | No | Both | Both | If provided, the map will zoom to the given `locationId` and open its sidebar (if enabled). Overrides `position`. | `-` |
43
- | `locationBaseUrl` | No | Both | Both | Base URL for location data. | `-` |
43
+ | `locationBaseUrl` | No | Both | Both | Base URL for location data. When set, the location name links to `locationBaseUrl/{locationId}`. | `-` |
44
+ | `locationUrlTemplate` | No | v2 | cpo | URL template that makes the location name in the details view a clickable link, opening in a new tab. The `{{locationId}}` placeholder is replaced with the location id (e.g. `https://example.com/loc/{{locationId}}/details`). Applies only when the map key's context is `cpo`. Takes precedence over `locationBaseUrl`. | `-` |
44
45
  | `apiRoot` | No | Both | Both | The root URL of the API. | `-` |
45
46
  | `googleApiKey` | No | Both | Both | Google Maps API key. If not provided, you can set your own Google API key. | `-` |
46
47
  | `theming {}` | No | Both | Both | Controls widget look and feel with keys: `brandColor`, `backgroundColor`, `textColor`, `borderColor`, `fontFamily`. Accepts HEX values (e.g. `#ff3d00`). If `backgroundColor` is provided without `shadowRoot`, a shadow root will be automatically created. | `-` |
@@ -48,11 +49,11 @@ The `App` component accepts the following props:
48
49
  | `sdkRoot` | No | Both | Both | Root URL for SDK CSS file. Required when using automatic shadow root creation with theming (when `theming` is provided without `shadowRoot`). The stylesheet will be loaded from `sdkRoot + "/styles.css"`. | `-` |
49
50
  | `limitToLocationIds` | No | v2 | Both | Constrains the map to only show the locations with the configured IDs. Provided that they exist in the dataset. | All available locations |
50
51
  | `preferredOperators` | No | v2 | Both | Array of operator names. Ensures that the selected operators appear at the top of the operator selector dropdown. | `[]` |
51
- | `operators` | No | v2 | Both | Array of available operators. | `-` |
52
- | `publishingMode` | No | v2 | Both | Array of available publishing modes. Allowed values: `"PUBLISHING_MODE_PUBLIC"`, `"PUBLISHING_MODE_PRIVATE"`. | `-` |
53
52
  | `showNoAdditionalFeeFilter` | No | v2 | msp | Used to configure whether we enable the user to filter out stations that come with additional fees. | `false` |
54
53
  | `showPublishingModeFilter` | No | v2 | cpo | Used to configure whether we enable the user to filter out public or private stations. | `false` |
55
54
  | `showOperatorOnly` | No | v2 | both | String value representing the operator name. Include a quick filter option to find a specific operator. | `-` |
55
+ | `showPriceFilter` | No | v3 | Both | Shows a `Max. price per kWh` slider in the filters panel. While a limit is set the search sends `maxEnergyPrice` and only locations whose cheapest current energy price, including VAT, is at or below it are drawn; with `Fast Chargers` on, only DC connectors count towards that price. Locations the API has no price for are excluded while a limit is set, so enable this once the pricing backfill has run for the map's data. The `Any` step lifts the limit. | `false` |
56
+ | `showAnalytics` | No | v2 | Both | Shows a status pill next to the filter toggle for the current view and filters. On `msp` maps it lists EVSEs by roaming status. On `cpo` maps it defaults to connectors by the OCPP status the station reports, with an `EVSE Status \| Roaming Status` switch under the pill to flip to the roaming breakdown; only one shows at a time. Clicking a status toggles the matching status filter (the OCPP view on `cpo` maps, the roaming view on `msp` maps) and the selected statuses are highlighted; the roaming view on a `cpo` map is read-only because the CPO search filters on OCPP status. The counts ignore the status selection so every status in the view stays listed; all other filters apply. Fetched from `/1/map/analytics` (`/1/map/cpo/analytics` on `cpo` maps) whenever the view or filters change. Hidden on screens narrower than 768px. | `false` |
56
57
  | `onMarkerClicked` | No | Both | Both | Callback function that is called when a marker is clicked. Receives an object with `ids` property containing the location IDs. | `-` |
57
58
 
58
59
  ### Example
@@ -69,7 +70,6 @@ function MyMap() {
69
70
  <App
70
71
  height={600}
71
72
  authorization="your-authorization-key"
72
- context="cpo"
73
73
  gestureHandling="greedy"
74
74
  apiRoot="https://api.road.io"
75
75
  googleApiKey="your-google-maps-api-key"
@@ -84,7 +84,28 @@ function MyMap() {
84
84
  }
85
85
  ```
86
86
 
87
- **Note**: The `height`, `gestureHandling`, `authorization`, and `context` props are required. All other props are optional.
87
+ **Note**: The `height`, `gestureHandling` and `authorization` props are required. All other props are optional. The map context (`cpo` or `msp`) is not a prop; it comes from the map key's remote configuration.
88
+
89
+ ### Pins (v3)
90
+
91
+ With `version: "v3"` every location is a white teardrop anchored on its tail tip. Colour carries availability only and every state also has its own glyph, so the map still reads in greyscale:
92
+
93
+ | Pin | `msp` maps (EVSEs) | `cpo` maps (connectors) |
94
+ | :-- | :-- | :-- |
95
+ | Green ring, bolt | every EVSE free | every connector free |
96
+ | Green ring, `free/total` | some free, the rest out of order | some free, the rest unknown |
97
+ | Any ring, `free/total` | whatever else is going on, a free unit is always shown as a count | same |
98
+ | Amber ring, `free/total` | a session is running on at least one EVSE; the digits say how many are still free | at least one connector is taken out of service (`Unavailable`) |
99
+ | Blue ring, `free/total` | not used | a session is running (`Preparing`, `Charging`, `Suspended`, `Finishing`, `Reserved`) |
100
+ | Red ring, `free/total` or `!` | not used | at least one connector reports `Faulted`; the digits stay while anything is free, the `!` shows when nothing is |
101
+ | Grey ring, dash | nothing usable (`Inoperative`, `Out of order`, `Blocked`, `Closed`) or nothing reported | nothing reported |
102
+ | Dashed grey, `+` | every EVSE is `Planned` | not used |
103
+
104
+ Every single-location pin that shows a glyph (zoom 12 and up) also carries a price tag under its tail tip: white digits on a dark grey tag, e.g. `€0.42`, the current price per kWh including VAT in the map `currency`. When the API has no price for the location, or the price is zero because the tariff charges by time or session rather than energy, the tag reads `…` instead, so a pin never claims to be free. The pin above it is unchanged, so colour still carries availability only and the price is text, never a colour. The tag stays put when the pin grows on selection. Clusters and the dots below zoom 12 carry no tag.
105
+
106
+ The pin of the location open in the sidebar grows to 52px with a halo; the tail tip stays put. Below zoom 12 single pins shrink to a 26px dot without a glyph. Clusters of up to nine locations are a pin with two ghost pins behind it and the count as glyph; larger clusters are a circle with the count and a caption. A cluster whose locations are not all in the same state gets a ring split by that state, in proportion. On `msp` maps a cluster is green as soon as anything inside it is free; on `cpo` maps the operator priority above applies (fault, unavailable, in session, free).
107
+
108
+ The status pills and the status filter use the same colours as the pins on a `v3` map. With `showPriceFilter` the filters panel gains the price slider described in the props table. Clustering and the sidebar are unchanged.
88
109
 
89
110
  ### Theming with Shadow DOM
90
111
 
@@ -109,7 +130,6 @@ If you don't need custom theming, you can use the SDK without Shadow DOM (simply
109
130
  <App
110
131
  height={600}
111
132
  authorization="your-authorization-key"
112
- context="cpo"
113
133
  gestureHandling="greedy"
114
134
  apiRoot="https://api.road.io"
115
135
  // ... other props
@@ -0,0 +1 @@
1
+ export default function AnalyticsOverlay(): import("react/jsx-runtime").JSX.Element;
@@ -1,10 +1,11 @@
1
1
  import { default as React } from 'react';
2
- import { GeohashItem } from '../../types';
2
+ import { GeohashItem, MapKind } from '../../types';
3
3
  interface Props {
4
4
  data: GeohashItem;
5
5
  map?: google.maps.Map;
6
6
  onClick: (payload: GeohashItem) => void;
7
7
  highlight?: boolean;
8
+ kind?: MapKind;
8
9
  }
9
10
  declare const CustomMarker: React.FC<Props>;
10
11
  export default CustomMarker;
@@ -0,0 +1,17 @@
1
+ import { default as React } from 'react';
2
+ import { GeohashItem, MapKind } from '../../types';
3
+ export declare const pinStylesheet = "\n.roadmap-pin {\n position: absolute;\n left: 0;\n top: 0;\n display: block;\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0;\n background: none;\n -webkit-appearance: none;\n appearance: none;\n cursor: pointer;\n font-family: var(--roadmap-font-family, Inter), system-ui, -apple-system, sans-serif;\n animation: roadmap-pin-in 0.18s ease-out both;\n}\n.roadmap-pin:focus-visible {\n outline: none;\n}\n.roadmap-pin-body {\n position: absolute;\n inset: 0;\n box-sizing: border-box;\n border-radius: 50% 50% 50% 0;\n border: 3px solid currentColor;\n background: #fff;\n transform: rotate(-45deg);\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.12s ease, box-shadow 0.12s ease;\n}\n.roadmap-pin:hover .roadmap-pin-body {\n transform: rotate(-45deg) scale(1.06);\n}\n.roadmap-pin-ghost {\n position: absolute;\n box-sizing: border-box;\n border-radius: 50% 50% 50% 0;\n border: 2px solid;\n transform: rotate(-45deg);\n}\n.roadmap-pin-glyph {\n display: flex;\n align-items: center;\n justify-content: center;\n transform: rotate(45deg);\n line-height: 1;\n white-space: nowrap;\n font-family: \"IBM Plex Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-weight: 500;\n}\n.roadmap-pin-circle,\n.roadmap-pin-ring {\n position: absolute;\n inset: 0;\n box-sizing: border-box;\n border-radius: 50%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n line-height: 1;\n transition: transform 0.12s ease;\n}\n.roadmap-pin-circle {\n background: #fff;\n border: 3px solid currentColor;\n}\n.roadmap-pin:hover .roadmap-pin-circle,\n.roadmap-pin:hover .roadmap-pin-ring {\n transform: scale(1.06);\n}\n.roadmap-pin-ring-inner {\n width: calc(100% - 12px);\n height: calc(100% - 12px);\n border-radius: 50%;\n background: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.roadmap-pin-count {\n font-family: \"IBM Plex Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-weight: 500;\n line-height: 1;\n}\n.roadmap-pin-label {\n margin-top: 2px;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n line-height: 1;\n}\n.roadmap-pin-tag {\n position: absolute;\n transform: translateX(-50%);\n box-sizing: border-box;\n padding: 2px 6px;\n border-radius: 4px;\n background: #383c43;\n color: #fdfcf9;\n font-family: \"IBM Plex Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 11px;\n font-weight: 500;\n line-height: 13px;\n white-space: nowrap;\n pointer-events: none;\n}\n@keyframes roadmap-pin-in {\n from { opacity: 0; transform: translateY(4px); }\n to { opacity: 1; transform: none; }\n}\n";
4
+ export declare function PinStyles(): import("react/jsx-runtime").JSX.Element;
5
+ interface Props {
6
+ data: GeohashItem;
7
+ map?: google.maps.Map;
8
+ kind: MapKind;
9
+ onClick: (payload: GeohashItem) => void;
10
+ selected?: boolean;
11
+ compact?: boolean;
12
+ price?: string;
13
+ priceLabel?: string;
14
+ sitesLabel: string;
15
+ }
16
+ declare const Pin: React.FC<Props>;
17
+ export default Pin;
@@ -1,6 +1,12 @@
1
1
  import { default as React } from 'react';
2
2
  import { LabelsType } from '../i18n';
3
- import { Location, Position, RoadMapOptions, Status, FilterConfiguration } from '../types';
3
+ import { Analytics, Location, MapKind, Position, RoadMapOptions, Status, FilterConfiguration } from '../types';
4
+ export type SearchBounds = {
5
+ nwLat: number;
6
+ nwLng: number;
7
+ seLat: number;
8
+ seLng: number;
9
+ };
4
10
  export type MapContextType = {
5
11
  t: (key: keyof LabelsType, props?: any) => string;
6
12
  isReady: boolean;
@@ -11,6 +17,16 @@ export type MapContextType = {
11
17
  precision: any;
12
18
  bbox: any;
13
19
  }) => Promise<any>;
20
+ fetchAnalytics?: (args: {
21
+ bbox: SearchBounds;
22
+ [filter: string]: any;
23
+ }) => Promise<{
24
+ data: Analytics;
25
+ }>;
26
+ searchBounds?: SearchBounds;
27
+ setSearchBounds?: (bounds: SearchBounds) => void;
28
+ mapKind: MapKind;
29
+ currency: string;
14
30
  fetchLocations?: ({ ids }: {
15
31
  ids: any;
16
32
  }) => Promise<any>;
@@ -37,6 +53,7 @@ export type MapContextType = {
37
53
  isSearching?: boolean;
38
54
  setIsSearching?: (isSearching: boolean) => void;
39
55
  };
56
+ export declare const defaultCurrency = "EUR";
40
57
  export declare const MapContext: React.Context<MapContextType>;
41
58
  interface Props {
42
59
  children: React.ReactNode;
package/dist/i18n.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export declare function getLanguage(lng: any): "nl" | "en" | "de" | "fr" | "it" | "es";
1
+ export declare function getLanguage(lng?: string): "nl" | "en" | "de" | "fr" | "it" | "es";
2
2
  export type LabelsType = {
3
3
  "search.placeholder": string;
4
4
  "cdrPrice.flatFee": string;
@@ -48,11 +48,33 @@ export type LabelsType = {
48
48
  "filters.clearAll": string;
49
49
  "filters.onlyShow": string;
50
50
  "filters.statusHeading": string;
51
+ "evse.statusBlocked": string;
52
+ "evse.statusClosed": string;
53
+ "ocpp.statusPreparing": string;
54
+ "ocpp.statusSuspendedEvse": string;
55
+ "ocpp.statusSuspendedEv": string;
56
+ "ocpp.statusFinishing": string;
57
+ "ocpp.statusFaulted": string;
58
+ "analytics.evseStatus": string;
59
+ "analytics.roamingStatus": string;
60
+ "pin.sites": string;
61
+ "filters.maxEnergyPrice": string;
62
+ "filters.anyPrice": string;
63
+ "pin.pricePerKwh": string;
51
64
  "filters.chargingAccessibility": string;
52
65
  "filters.accessibilityAll": string;
53
66
  "filters.accessibilityTesla": string;
54
67
  "filters.allAccessibility": string;
55
68
  "filters.remoteStartStop": string;
69
+ "filters.searchPhrase": string;
70
+ "filters.searchPhrasePlaceholder": string;
71
+ "filters.operator": string;
72
+ "filters.excludeOperator": string;
73
+ "filters.authMethodCapabilities": string;
74
+ "filters.authCapability.rfid": string;
75
+ "filters.authCapability.plugAndCharge": string;
76
+ "filters.authCapability.creditCard": string;
77
+ "filters.authCapability.remoteStartStop": string;
56
78
  "locationType.onStreet": string;
57
79
  "locationType.parkingGarage": string;
58
80
  "locationType.undergroundGarage": string;
@@ -67,10 +89,14 @@ export type LabelsType = {
67
89
  "location.owner": string;
68
90
  "location.openingHours": string;
69
91
  "location.open24_7": string;
92
+ "location.open": string;
70
93
  "location.openNow": string;
71
94
  "location.closedNow": string;
72
95
  "location.closed": string;
96
+ "location.open24hours": string;
97
+ "location.hours24": string;
73
98
  "location.opensAt": string;
99
+ "location.opensAtDay": string;
74
100
  "location.closesAt": string;
75
101
  "location.chargingWhenClosed": string;
76
102
  "location.exceptionalClosings": string;
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- .app-module_container{font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;position:relative;background:#f5f5f5;color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a);display:flex;height:100%;width:100%;flex-direction:column;justify-items:center}.app-module_loader{display:flex;justify-content:center;align-items:center;height:100%;width:100%}.Map-module_container{height:100%;width:100%}.CustomMarker-module_container{-webkit-appearance:none;display:block;box-sizing:border-box;margin:0;padding:0 4px;min-width:21px;height:21px;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,sans-serif;font-size:12px;line-height:1;font-weight:600;font-style:normal;-webkit-text-decoration:none;text-decoration:none;text-align:center;background:#ff3d00;background:var(--roadmap-brand-color, #ff3d00);color:#fff;border-radius:2em;border:1.75px solid #fff;box-shadow:0 1px 4px #00000080;opacity:0;transform:translateY(10px);cursor:pointer;animation:CustomMarker-module_roadmap-pop-in .3s ease forwards}@keyframes CustomMarker-module_roadmap-pop-in{0%{opacity:0;transform:scale(0)}60%{opacity:1;transform:scale(1.1)}to{opacity:1;transform:scale(1)}}.CustomMarker-module_sliderContainer{position:absolute;width:100px;height:100px;background:#00f;transform:translate(-100%);-webkit-transform:translateX(-100%)}.CustomMarker-module_slide-in{animation:CustomMarker-module_slide-in .5s forwards;-webkit-animation:CustomMarker-module_slide-in .5s forwards}.CustomMarker-module_slide-out{animation:CustomMarker-module_slide-out .5s forwards;-webkit-animation:CustomMarker-module_slide-out .5s forwards}@keyframes CustomMarker-module_slide-in{to{transform:translate(0)}}@keyframes CustomMarker-module_slide-out{0%{transform:translate(0)}to{transform:translate(-100%)}}.stack-module_stack{display:flex;flex:1 0 0px;flex-direction:column;justify-content:flex-end}.stack-module_slideEnter{transform:translateY(125%)}.stack-module_slideEnterActive,.stack-module_slideExit{transform:translateY(0)}.stack-module_slideExitActive{transform:translateY(125%)}.stack-module_slideExitActive{transition:transform .25s ease-in}.stack-module_slideEnterActive{transition:transform .25s ease-out}@media screen and (min-width:768px){.stack-module_slideEnter{transform:translate(-150%)}.stack-module_slideEnterActive,.stack-module_slideExit{transform:translate(0)}.stack-module_slideExitActive{transform:translate(-150%)}}.router-module_container{box-sizing:border-box;position:absolute;top:0;left:0;z-index:1;display:flex;flex-direction:column;gap:20px;width:100%;height:100%;padding:20px;pointer-events:none;overflow:hidden}.router-module_controlsContainer{pointer-events:initial;flex:0 1 auto;display:flex;flex-direction:row;gap:20px}.router-module_filterButton{box-sizing:border-box;display:flex;position:relative;width:48px;height:48px;border-radius:10px;justify-content:center;align-items:center;background:#fff;background:var(--roadmap-background-color, #fff);border:1px solid #ddd;border:1px solid var(--roadmap-border-color, #ddd);cursor:pointer}.router-module_filterButton img{width:16px;height:16px}.router-module_filterCounter{box-sizing:border-box;display:block;position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 4px;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-size:10px;line-height:18px;background:#ff3d00;background:var(--roadmap-brand-color, #ff3d00);color:#fff;text-align:center;border-radius:18px}.router-module_spinner{width:16px;height:16px;border:2px solid #ddd;border:2px solid var(--roadmap-border-color, #ddd);border-top-color:#ff3d00;border-top-color:var(--roadmap-brand-color, #ff3d00);border-radius:50%;animation:router-module_roadmap-spin .8s linear infinite}@keyframes router-module_roadmap-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.router-module_stackContainer{flex:1 0 0px;display:flex;flex-direction:column;top:0;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media screen and (min-width:768px){.router-module_container{width:380px}}.SearchInput-module_container{flex:1 0 auto;display:flex;border-radius:10px}.SearchInput-module_searchInput{font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;flex:1 0 auto;box-sizing:border-box;outline:none;padding:15px 16px;border-radius:9px;color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a);background:#fff;background:var(--roadmap-background-color, #fff);border:none;outline:1px solid #ddd;outline:1px solid var(--roadmap-border-color, #ddd);outline-offset:-1px;font-size:13px}.pac-container{margin-top:-10px;padding-top:9px;background:#fff;background:var(--roadmap-background-color, #fff);border:1px solid #ddd;border:1px solid var(--roadmap-border-color, #ddd);border-top:none;border-radius:0 0 10px 10px;box-shadow:none}.pac-icon{display:none}.pac-item{font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;padding:5px 15px}.pac-logo:after{border-top:1px solid #ddd;border-top:1px solid var(--roadmap-border-color, #ddd);background-position:15px 50%;height:28px}.filters-module_headerContainer,.filters-module_footerContainer{flex:0 1 auto;padding:20px 20px 0}.filters-module_footerContainer{padding:10px 20px 20px}.filters-module_container{box-sizing:border-box;flex:0 1 auto;width:100%;padding:15px 20px 0;overflow:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.filters-module_container::-webkit-scrollbar{-webkit-appearance:none;width:9px;height:9px}.filters-module_container::-webkit-scrollbar-track{background:#fff;background:var(--roadmap-background-color, #fff);border-radius:9px}.filters-module_container::-webkit-scrollbar-thumb{border-radius:9px;background:#ddd;background:var(--roadmap-border-color, #ddd)}.filters-module_header,.filters-module_heading{font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a);font-size:14px;line-height:20px;font-style:normal;font-weight:600}.filters-module_header{margin:0;padding:0 40px 15px 0;border-bottom:1px solid #ddd;border-bottom:1px solid var(--roadmap-border-color, #ddd)}.filters-module_heading{margin:0;padding:0 0 10px}.filters-module_actionLink{cursor:pointer;background:none;border:none;font-family:inherit;color:#ff3d00;color:var(--roadmap-brand-color, #ff3d00);font-size:12px;font-weight:600;font-style:none;-webkit-text-decoration:none;text-decoration:none}.filters-module_actionLinkClearAll{cursor:pointer;background:none;border:none;font-family:inherit;color:#ff3d00;color:var(--roadmap-brand-color, #ff3d00);font-size:12px;font-weight:600;font-style:none;-webkit-text-decoration:none;text-decoration:none;float:right}.filters-module_optionsGroup{padding:0;margin:0 0 20px}.filters-module_rowLabel{display:flex;flex-direction:row;align-items:center;justify-content:space-between;padding:12px 0;border-bottom:1px solid #ddd;border-bottom:1px solid var(--roadmap-border-color, #ddd);font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a);font-size:12px;font-style:normal;font-weight:400;cursor:pointer}.filters-module_label{display:flex;flex-direction:row;align-items:center;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a);font-size:12px;font-style:normal;font-weight:400}.filters-module_dot{display:block;width:8px;height:8px;border-radius:8px;margin-right:22px}.filters-module_connectorIcon{display:block;width:20px;height:20px;margin-right:10px}.Checkbox-module_container{position:relative;display:inline-block;backface-visibility:hidden;outline:none;vertical-align:baseline;font-style:normal;min-height:16px;font-size:12px;line-height:16px;min-width:16px}.Checkbox-module_container input[type=checkbox]{cursor:pointer;position:absolute;top:0;left:0;opacity:0!important;outline:none;z-index:3;width:16px;height:16px}.Checkbox-module_container .Checkbox-module_box{cursor:pointer;position:relative;display:block;outline:none;font-size:12px;width:12px;height:12px;background:#fff;background:var(--roadmap-background-color, #fff);border-radius:3px;border:2px solid #ddd;border:2px solid var(--roadmap-border-color, #ddd)}.Checkbox-module_container .Checkbox-module_box:before{box-sizing:border-box}.Checkbox-module_container svg{padding:0;color:#fff;color:var(--roadmap-background-color, #fff)}.Checkbox-module_container input:checked~.Checkbox-module_box,.Checkbox-module_container input[value=true]~.Checkbox-module_box{background:#ff3d00;background:var(--roadmap-brand-color, #ff3d00);border-color:#ff3d00;border-color:var(--roadmap-brand-color, #ff3d00)}.Checkbox-module_container input:checked~.Checkbox-module_box,.Checkbox-module_container input[value=true]~.Checkbox-module_box{opacity:1}.Range-module_container{flex:1 0 auto;padding:10px 0}.Range-module_input{-webkit-appearance:none;width:100%;background:transparent}.Range-module_input::-webkit-slider-thumb{-webkit-appearance:none}.Range-module_input:focus{outline:none}.Range-module_input::-ms-track{width:100%;cursor:pointer;background:transparent;border-color:transparent;color:transparent}.Range-module_input::-webkit-slider-thumb{width:16px;height:16px;border:none;border-radius:16px;background:#ff3d00;background:var(--roadmap-brand-color, #ff3d00);cursor:pointer;margin-top:-6px;box-shadow:0 6px 13px #0000001f,0 .5px 4px #0000001f}.Range-module_input::-moz-range-thumb{width:16px;height:16px;border:none;border-radius:16px;background:#ff3d00;background:var(--roadmap-brand-color, #ff3d00);cursor:pointer;box-shadow:0 6px 13px #0000001f,0 .5px 4px #0000001f}.Range-module_input::-ms-thumb{width:16px;height:16px;border:none;border-radius:16px;background:#ff3d00;background:var(--roadmap-brand-color, #ff3d00);cursor:pointer;box-shadow:0 6px 13px #0000001f,0 .5px 4px #0000001f}.Range-module_input::-webkit-slider-runnable-track{width:100%;height:4px;background:linear-gradient(to right,#ddd,#ddd) #ff3d00;background:linear-gradient(to right,var(--roadmap-border-color, #ddd),var(--roadmap-border-color, #ddd)) var(--roadmap-brand-color, #ff3d00);background-size:var(--roadmap-range-bgize);background-repeat:no-repeat;border-radius:2px;cursor:pointer}.Range-module_input::-moz-range-track{width:100%;height:4px;background:linear-gradient(to right,#ddd,#ddd) #ff3d00;background:linear-gradient(to right,var(--roadmap-border-color, #ddd),var(--roadmap-border-color, #ddd)) var(--roadmap-brand-color, #ff3d00);background-size:var(--roadmap-range-bgize);background-repeat:no-repeat;border:none;border-radius:2px;cursor:pointer}.Range-module_input::-ms-track{width:100%;height:4px;cursor:pointer;background:transparent;border-color:transparent;border-width:6px 0;color:transparent}.Range-module_input::-ms-fill-lower{background:#ddd;background:var(--roadmap-border-color, #ddd);border:none;border-radius:2px}.Range-module_input::-ms-fill-upper{background:#ff3d00;background:var(--roadmap-brand-color, #ff3d00);border:none;border-radius:2px}.Range-module_input:focus::-ms-fill-upper{background:#ff3d00;background:var(--roadmap-brand-color, #ff3d00)}.Range-module_ticksContainer{display:flex;flex-direction:row;justify-content:space-between;margin:15px -15px 0 -12px}.Range-module_tick{flex:0 1 auto;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a);font-size:12px;line-height:1;position:relative;width:40px;cursor:pointer;text-align:center}.MultiSelect-module_multiSelect{position:relative;width:100%}.MultiSelect-module_control{display:flex;align-items:center;min-height:38px;border:1px solid #d1d5db;border-radius:6px;background-color:#fff}.MultiSelect-module_control:hover{border-color:#c7cdd6}.MultiSelect-module_control:focus-within{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.MultiSelect-module_control.MultiSelect-module_disabled,.MultiSelect-module_disabled{background-color:#f9fafb;color:#9ca3af;cursor:not-allowed;border-color:#e5e7eb;opacity:.6}.MultiSelect-module_valueContainer{display:flex;flex-wrap:wrap;align-items:center;flex:1;padding:2px 6px;gap:4px}.MultiSelect-module_input{flex:1;border:none;outline:none;background:transparent;font-size:14px;line-height:1.5;color:#374151;min-width:120px}.MultiSelect-module_input:disabled{color:#9ca3af;cursor:not-allowed}.MultiSelect-module_input::-moz-placeholder{color:#9ca3af}.MultiSelect-module_input::placeholder{color:#9ca3af}.MultiSelect-module_multiValue{display:flex;align-items:center;background-color:#eff6ff;border:1px solid #bfdbfe;border-radius:4px;padding:2px 6px;font-size:12px}.MultiSelect-module_multiValueLabel{color:#1e40af;margin-right:4px}.MultiSelect-module_multiValueRemove{background:none;border:none;color:#1e40af;cursor:pointer;font-size:16px;line-height:1;padding:0;width:16px;height:16px;display:flex;align-items:center;justify-content:center;border-radius:2px}.MultiSelect-module_multiValueRemove:hover{background-color:#dbeafe;color:#1e3a8a}.MultiSelect-module_multiValueRemove:disabled{cursor:not-allowed;opacity:.5}.MultiSelect-module_dropdownIndicator{background:none;border:none;color:#6b7280;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;transition:color .15s ease-in-out}.MultiSelect-module_dropdownIndicator:hover{color:#374151}.MultiSelect-module_dropdownIndicator:disabled{cursor:not-allowed;opacity:.5}.MultiSelect-module_menu{position:absolute;top:100%;left:0;right:0;z-index:1000;background-color:#fff;border:1px solid #e5e7eb;border-radius:6px;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;margin-top:4px;display:none}.MultiSelect-module_menu.MultiSelect-module_menuOpen{display:block}.MultiSelect-module_menuList{max-height:200px;overflow-y:auto;padding:0}.MultiSelect-module_groupHeading{font-size:12px;color:#6b7280;padding:8px 12px;text-transform:none;font-weight:600;background-color:#f3f4f6;border-bottom:1px solid #e5e7eb;margin:0;position:sticky;top:0;z-index:1}.MultiSelect-module_groupHeading:first-child{border-top-left-radius:6px;border-top-right-radius:6px}.MultiSelect-module_groupSeparator{height:1px;background-color:#e5e7eb;margin:4px 0}.MultiSelect-module_option{display:flex;align-items:center;padding:8px 12px;cursor:pointer;font-size:14px;color:#374151;transition:background-color .15s ease-in-out;border-bottom:1px solid #f3f4f6}.MultiSelect-module_option:last-child,.MultiSelect-module_optionLast{border-bottom:none}.MultiSelect-module_option:hover:not(.MultiSelect-module_optionSelected),.MultiSelect-module_optionFocused{background-color:#f3f4f6;color:#212121}.MultiSelect-module_optionSelected{background-color:#3b82f6;color:#fff}.MultiSelect-module_optionDisabled{color:#9ca3af;cursor:not-allowed;background-color:#f9fafb}.MultiSelect-module_optionLabel{flex:1;display:flex;align-items:center}.MultiSelect-module_noOptions{padding:12px;text-align:center;color:#9ca3af;font-size:14px}.SelectField-module_selectField{position:relative;width:100%}.SelectField-module_select{width:100%;padding:8px 32px 8px 12px;border:1px solid #d1d5db;border-radius:6px;background-color:#fff;font-size:14px;line-height:1.5;color:#374151;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6,9 12,15 18,9'%3e%3c/polyline%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right 8px center;background-size:16px;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.SelectField-module_select:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.SelectField-module_select:disabled{background-color:#f9fafb;color:#9ca3af;cursor:not-allowed;border-color:#e5e7eb}.SelectField-module_select option{padding:8px 12px;color:#374151}.SelectField-module_select option:disabled{color:#9ca3af;background-color:#f9fafb}.SelectField-module_select option:checked{background-color:#3b82f6;color:#fff}.locations-module_headerContainer,.locations-module_footerContainer{flex:0 1 auto;padding:20px 20px 0}.locations-module_footerContainer{padding:10px 20px 20px}.locations-module_publishingMode{font-size:12px;font-style:normal;font-weight:600;margin:0 0 15px;padding:0 40px 15px 0;border-bottom:1px solid #ddd;border-bottom:1px solid var(--roadmap-border-color, #ddd)}.locations-module_container{font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a);box-sizing:border-box;flex:0 1 auto;display:flex;flex-direction:column;width:100%;padding:15px 20px 10px;overflow:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.locations-module_container::-webkit-scrollbar{-webkit-appearance:none;width:8px;height:8px}.locations-module_container::-webkit-scrollbar-track{background:#fff;background:var(--roadmap-background-color, #fff);border-radius:8px}.locations-module_container::-webkit-scrollbar-thumb{border-radius:8px;background:#ddd;background:var(--roadmap-border-color, #ddd)}.locations-module_container:last-child{padding-bottom:20px}.locations-module_header{font-size:14px;font-style:normal;font-weight:600;margin:0;padding:0 40px 15px 0;border-bottom:1px solid #ddd;border-bottom:1px solid var(--roadmap-border-color, #ddd)}.locations-module_subheader{font-size:14px;text-transform:capitalize;font-style:normal;font-weight:600;margin:0 0 5px;line-height:1.5}.locations-module_row{flex:0 1 auto;display:flex;flex-direction:row;align-items:center;padding:5px 0}.locations-module_icon{display:inline-flex;align-items:center;justify-content:center;height:16px;width:16px;flex:0 0 auto;margin-right:14px}.locations-module_icon svg{width:16px;height:16px;display:block}.locations-module_statusIcon{display:block;width:8px;height:8px;border-radius:8px;margin:4px 18px 4px 4px}.locations-module_text{font-size:12px;font-style:normal;font-weight:400;padding:0}.locations-module_text a{color:var(--roadmap-text-color);-webkit-text-decoration:none;text-decoration:none}.locations-module_note{font-size:12px;font-style:normal;font-weight:400;margin:10px 0}.locations-module_divider{flex:0 1 auto;height:1px;width:100%;background:#ddd;background:var(--roadmap-border-color, #ddd);margin:10px 0;padding:0;border:none}.locations-module_tariffNote{font-size:12px;font-style:italic;font-weight:400;margin:10px 0 0}.locations-module_pagingation{font-size:12px;font-weight:400;margin-bottom:10px;width:100%;display:flex;flex-direction:row;align-items:stretch}.locations-module_pagingation span{margin-right:10px}.locations-module_pagingation button{color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a);border:none;background:none;padding:0;margin:0;margin-right:.2rem}.locations-module_pagingation button svg{height:15px;width:15px}.locations-module_pagingation button:disabled{color:var(--roadmap-border-color)}.locations-module_tariffNoteLink{color:var(--roadmap-brand-color);cursor:pointer;display:flex;align-items:center;font-size:12px;line-height:16px;margin:20px 0 10px}.locations-module_tariffNoteLink svg{fill:var(--roadmap-brand-color);height:16px;width:16px;margin-right:5px}.LocationPlaceholder-module_container{overflow:hidden!important}.LocationPlaceholder-module_header{height:17px;width:75%;margin:5px 40px 15px 0}.LocationPlaceholder-module_divider{height:1px;width:100%;margin:17px 0 18px}.LocationPlaceholder-module_iconLine{height:11px;width:80%;margin:10px 0 15px 30px;position:relative}.LocationPlaceholder-module_iconLine:before{content:"";display:block;background-color:#ddd;background-color:var(--roadmap-border-color, #ddd);width:15px;height:15px;border-radius:15px;position:absolute;left:-30px;top:-2px}.LocationPlaceholder-module_priceLine{height:11px;width:50%;margin:16px 0 15px}.LocationPlaceholder-module_header,.LocationPlaceholder-module_divider,.LocationPlaceholder-module_iconLine,.LocationPlaceholder-module_priceLine{display:block;background-color:#ddd;background-color:var(--roadmap-border-color, #ddd);background-image:linear-gradient(to right,transparent 0,rgba(0,0,0,.15) 15%,transparent 30%);background-size:1200px 100%;animation:LocationPlaceholder-module_roadmap-placeholder-shimmer 2s linear;animation-iteration-count:infinite}@keyframes LocationPlaceholder-module_roadmap-placeholder-shimmer{0%{background-position:-1200px 0}to{background-position:1200px 0}}.SidebarContainer-module_container{position:relative;pointer-events:initial;box-sizing:border-box;flex:1 0 0px;display:flex;flex-direction:column;background:#fff;background:var(--roadmap-background-color, #fff);border:1px solid #ddd;border:1px solid var(--roadmap-border-color, #ddd);border-radius:10px;overflow:hidden}@media screen and (min-width:768px){.SidebarContainer-module_container{-webkit-user-select:none;-moz-user-select:none;user-select:none}}.Debug-module_container{position:fixed;top:0;right:0;width:370px;margin:20px}.Debug-module_container>div{padding:0 20px}.Debug-module_content{max-height:calc(100vh - 100px);overflow:scroll}.Debug-module_connectorHeader{font-size:12px;margin-top:5px}.Debug-module_code{-webkit-user-select:all;-moz-user-select:all;user-select:all;font-size:10px;display:block;margin:10px 0;background:#eee;padding:10px 5px;border-radius:3px}.Debug-module_evse{border-bottom:1px solid #ddd;border-bottom:1px solid var(--roadmap-border-color, #ddd);margin-top:5px}.ConnectorTariff-module_container{margin:5px 0 10px;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a);font-size:12px;font-style:normal;font-weight:400}.ConnectorTariff-module_bold{font-weight:700}.ConnectorTariff-module_dynamicTariffItem{display:flex;flex-direction:row;padding:2px 0;align-items:center;justify-content:flex-start}.ConnectorTariff-module_dynamicTariffItemRange{display:inline-block;width:7.75em;border-right:1px solid #ddd;border-right:1px solid var(--roadmap-border-color, #ddd);margin-right:.75em;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.ConnectorTariff-module_tariffHeader{text-transform:capitalize;font-weight:600;margin:15px 0 5px;line-height:1.5}.ConnectorTariff-module_tariffLabel{margin:6px 0 0;line-height:1.5}.ConnectorTariff-module_tariffNote{font-size:12px;font-style:italic;font-weight:400;margin:10px 0}.ConnectorTariff-module_activeNowLabel{display:inline-block;vertical-align:baseline;vertical-align:initial;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;text-align:center;font-size:10px;font-style:normal;font-weight:600;line-height:1;text-transform:uppercase;letter-spacing:.05em;background:#f2f7fe;color:#005cee;border:1px solid rgba(0,92,238,.2);border-radius:5px;padding:2px 6px;margin:0 0 0 6px}.ConnectorTariff-module_tarifNotes{color:var(--roadmap-text-color)}.Price-module_tariffItem{display:inline-block;border-right:1px solid #ddd;border-right:1px solid var(--roadmap-border-color, #ddd);margin:2px .75em 2px 0;padding:0 .75em 0 0}.Price-module_tariffItem:last-child{margin-right:0;padding-right:0;border-right:none}.Price-module_tariffItem:empty{display:none}.LocationRow-module_row{flex:0 1 auto;display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;padding:5px 0;min-width:0}.LocationRow-module_expandable{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.LocationRow-module_icon{display:inline-flex;align-items:center;justify-content:center;height:16px;width:16px;flex:0 0 auto;margin-right:14px}.LocationRow-module_icon img,.LocationRow-module_icon svg{width:16px;height:16px;display:block}.LocationRow-module_text{flex:1 1 auto;min-width:0;font-size:12px;line-height:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.LocationRow-module_text a{color:var(--roadmap-text-color);-webkit-text-decoration:none;text-decoration:none}.LocationRow-module_textHint{color:#6a6a6a;color:var(--roadmap-muted-color, #6a6a6a);font-weight:400}.LocationRow-module_chevron{display:inline-flex;align-items:center;justify-content:center;height:10px;width:10px;flex:0 0 auto;margin-left:8px;transition:transform .15s ease;color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a)}.LocationRow-module_chevron svg{width:10px;height:10px;display:block}.LocationRow-module_chevronOpen{transform:rotate(180deg)}.LocationRow-module_body{padding:4px 0 6px 30px;display:flex;flex-direction:column;gap:4px}.OperatorSection-module_block{display:flex;flex-direction:column;gap:2px;margin-bottom:8px}.OperatorSection-module_block:last-child{margin-bottom:0}.OperatorSection-module_role{font-size:11px;text-transform:uppercase;color:#6a6a6a;color:var(--roadmap-muted-color, #6a6a6a);letter-spacing:.04em}.OperatorSection-module_header{display:flex;align-items:center;gap:8px}.OperatorSection-module_name{font-size:13px;font-weight:600}.OperatorSection-module_logo{height:20px;width:auto;max-width:80px;-o-object-fit:contain;object-fit:contain}.OperatorSection-module_website{font-size:12px;color:var(--roadmap-brand-color);-webkit-text-decoration:none;text-decoration:none;word-break:break-all}.OpeningHours-module_day{display:flex;font-size:12px;line-height:1.5}.OpeningHours-module_dayLabel{min-width:56px;font-weight:600}.OpeningHours-module_dayValue{flex:1 1 auto}.OpeningHours-module_exceptional{font-size:11px;color:#6a6a6a;color:var(--roadmap-muted-color, #6a6a6a);margin-top:6px}.OpeningHours-module_exceptionalHeader{font-weight:600;margin-bottom:2px}.OpeningHours-module_footnote{font-size:11px;font-style:italic;color:#6a6a6a;color:var(--roadmap-muted-color, #6a6a6a);margin-top:6px}.BackButton-module_backButton{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background:none;border:none;display:block;height:16px;line-height:16px;margin:0 14px 10px 0;color:#ff5f00;color:var(--roadmap-brand-color, #ff5f00)}.BackButton-module_backButton svg{height:14px;fill:currentColor;vertical-align:top;margin-right:10px}.CloseButton-module_closeButton{cursor:pointer;background:none;border:none;position:absolute;top:0;right:0;padding:20px}
1
+ .app-module_container{font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;position:relative;background:#f5f5f5;color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a);display:flex;height:100%;width:100%;flex-direction:column;justify-items:center}.app-module_loader{display:flex;justify-content:center;align-items:center;height:100%;width:100%}.Map-module_container{height:100%;width:100%}.CustomMarker-module_container{-webkit-appearance:none;display:block;box-sizing:border-box;margin:0;padding:0 4px;min-width:21px;height:21px;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,sans-serif;font-size:12px;line-height:1;font-weight:600;font-style:normal;-webkit-text-decoration:none;text-decoration:none;text-align:center;background:#ff3d00;background:var(--roadmap-brand-color, #ff3d00);color:#fff;border-radius:2em;border:1.75px solid #fff;box-shadow:0 1px 4px #00000080;opacity:0;transform:translateY(10px);cursor:pointer;animation:CustomMarker-module_roadmap-pop-in .3s ease forwards}@keyframes CustomMarker-module_roadmap-pop-in{0%{opacity:0;transform:scale(0)}60%{opacity:1;transform:scale(1.1)}to{opacity:1;transform:scale(1)}}.CustomMarker-module_sliderContainer{position:absolute;width:100px;height:100px;background:#00f;transform:translate(-100%);-webkit-transform:translateX(-100%)}.CustomMarker-module_slide-in{animation:CustomMarker-module_slide-in .5s forwards;-webkit-animation:CustomMarker-module_slide-in .5s forwards}.CustomMarker-module_slide-out{animation:CustomMarker-module_slide-out .5s forwards;-webkit-animation:CustomMarker-module_slide-out .5s forwards}@keyframes CustomMarker-module_slide-in{to{transform:translate(0)}}@keyframes CustomMarker-module_slide-out{0%{transform:translate(0)}to{transform:translate(-100%)}}.stack-module_stack{display:flex;flex:1 0 0px;flex-direction:column;justify-content:flex-end}.stack-module_slideEnter{transform:translateY(125%)}.stack-module_slideEnterActive,.stack-module_slideExit{transform:translateY(0)}.stack-module_slideExitActive{transform:translateY(125%)}.stack-module_slideExitActive{transition:transform .25s ease-in}.stack-module_slideEnterActive{transition:transform .25s ease-out}@media screen and (min-width:768px){.stack-module_slideEnter{transform:translate(-150%)}.stack-module_slideEnterActive,.stack-module_slideExit{transform:translate(0)}.stack-module_slideExitActive{transform:translate(-150%)}}.router-module_container{box-sizing:border-box;position:absolute;top:0;left:0;z-index:1;display:flex;flex-direction:column;gap:20px;width:100%;height:100%;padding:20px;pointer-events:none;overflow:hidden}.router-module_controlsContainer{pointer-events:initial;flex:0 1 auto;display:flex;flex-direction:row;gap:20px}.router-module_filterButton{box-sizing:border-box;display:flex;position:relative;width:48px;height:48px;border-radius:10px;justify-content:center;align-items:center;background:#fff;background:var(--roadmap-background-color, #fff);border:1px solid #ddd;border:1px solid var(--roadmap-border-color, #ddd);cursor:pointer}.router-module_filterButton img{width:16px;height:16px}.router-module_filterCounter{box-sizing:border-box;display:block;position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 4px;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-size:10px;line-height:18px;background:#ff3d00;background:var(--roadmap-brand-color, #ff3d00);color:#fff;text-align:center;border-radius:18px}.router-module_spinner{width:16px;height:16px;border:2px solid #ddd;border:2px solid var(--roadmap-border-color, #ddd);border-top-color:#ff3d00;border-top-color:var(--roadmap-brand-color, #ff3d00);border-radius:50%;animation:router-module_roadmap-spin .8s linear infinite}@keyframes router-module_roadmap-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.router-module_stackContainer{flex:1 0 0px;display:flex;flex-direction:column;top:0;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media screen and (min-width:768px){.router-module_container{width:380px}}.SearchInput-module_container{flex:1 0 auto;display:flex;border-radius:10px}.SearchInput-module_searchInput{font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;flex:1 0 auto;box-sizing:border-box;outline:none;padding:15px 16px;border-radius:9px;color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a);background:#fff;background:var(--roadmap-background-color, #fff);border:none;outline:1px solid #ddd;outline:1px solid var(--roadmap-border-color, #ddd);outline-offset:-1px;font-size:13px}.pac-container{margin-top:-10px;padding-top:9px;background:#fff;background:var(--roadmap-background-color, #fff);border:1px solid #ddd;border:1px solid var(--roadmap-border-color, #ddd);border-top:none;border-radius:0 0 10px 10px;box-shadow:none}.pac-icon{display:none}.pac-item{font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;padding:5px 15px}.pac-logo:after{border-top:1px solid #ddd;border-top:1px solid var(--roadmap-border-color, #ddd);background-position:15px 50%;height:28px}.filters-module_headerContainer,.filters-module_footerContainer{flex:0 1 auto;padding:20px 20px 0}.filters-module_footerContainer{padding:10px 20px 20px}.filters-module_container{box-sizing:border-box;flex:0 1 auto;width:100%;padding:15px 20px 0;overflow:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.filters-module_container::-webkit-scrollbar{-webkit-appearance:none;width:9px;height:9px}.filters-module_container::-webkit-scrollbar-track{background:#fff;background:var(--roadmap-background-color, #fff);border-radius:9px}.filters-module_container::-webkit-scrollbar-thumb{border-radius:9px;background:#ddd;background:var(--roadmap-border-color, #ddd)}.filters-module_header,.filters-module_heading{font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a);font-size:14px;line-height:20px;font-style:normal;font-weight:600}.filters-module_header{margin:0;padding:0 40px 15px 0;border-bottom:1px solid #ddd;border-bottom:1px solid var(--roadmap-border-color, #ddd)}.filters-module_heading{margin:0;padding:0 0 10px}.filters-module_actionLink{cursor:pointer;background:none;border:none;font-family:inherit;color:#ff3d00;color:var(--roadmap-brand-color, #ff3d00);font-size:12px;font-weight:600;font-style:none;-webkit-text-decoration:none;text-decoration:none}.filters-module_actionLinkClearAll{cursor:pointer;background:none;border:none;font-family:inherit;color:#ff3d00;color:var(--roadmap-brand-color, #ff3d00);font-size:12px;font-weight:600;font-style:none;-webkit-text-decoration:none;text-decoration:none;float:right}.filters-module_optionsGroup{padding:0;margin:0 0 20px}.filters-module_rowLabel{display:flex;flex-direction:row;align-items:center;justify-content:space-between;padding:12px 0;border-bottom:1px solid #ddd;border-bottom:1px solid var(--roadmap-border-color, #ddd);font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a);font-size:12px;font-style:normal;font-weight:400;cursor:pointer}.filters-module_label{display:flex;flex-direction:row;align-items:center;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a);font-size:12px;font-style:normal;font-weight:400}.filters-module_dot{display:block;width:8px;height:8px;border-radius:8px;margin-right:22px}.filters-module_connectorIcon{display:block;width:20px;height:20px;margin-right:10px}.Checkbox-module_container{position:relative;display:inline-block;backface-visibility:hidden;outline:none;vertical-align:baseline;font-style:normal;min-height:16px;font-size:12px;line-height:16px;min-width:16px}.Checkbox-module_container input[type=checkbox]{cursor:pointer;position:absolute;top:0;left:0;opacity:0!important;outline:none;z-index:3;width:16px;height:16px}.Checkbox-module_container .Checkbox-module_box{cursor:pointer;position:relative;display:block;outline:none;font-size:12px;width:12px;height:12px;background:#fff;background:var(--roadmap-background-color, #fff);border-radius:3px;border:2px solid #ddd;border:2px solid var(--roadmap-border-color, #ddd)}.Checkbox-module_container .Checkbox-module_box:before{box-sizing:border-box}.Checkbox-module_container svg{padding:0;color:#fff;color:var(--roadmap-background-color, #fff)}.Checkbox-module_container input:checked~.Checkbox-module_box,.Checkbox-module_container input[value=true]~.Checkbox-module_box{background:#ff3d00;background:var(--roadmap-brand-color, #ff3d00);border-color:#ff3d00;border-color:var(--roadmap-brand-color, #ff3d00)}.Checkbox-module_container input:checked~.Checkbox-module_box,.Checkbox-module_container input[value=true]~.Checkbox-module_box{opacity:1}.Range-module_container{flex:1 0 auto;padding:10px 0}.Range-module_input{-webkit-appearance:none;width:100%;background:transparent}.Range-module_input::-webkit-slider-thumb{-webkit-appearance:none}.Range-module_input:focus{outline:none}.Range-module_input::-ms-track{width:100%;cursor:pointer;background:transparent;border-color:transparent;color:transparent}.Range-module_input::-webkit-slider-thumb{width:16px;height:16px;border:none;border-radius:16px;background:#ff3d00;background:var(--roadmap-brand-color, #ff3d00);cursor:pointer;margin-top:-6px;box-shadow:0 6px 13px #0000001f,0 .5px 4px #0000001f}.Range-module_input::-moz-range-thumb{width:16px;height:16px;border:none;border-radius:16px;background:#ff3d00;background:var(--roadmap-brand-color, #ff3d00);cursor:pointer;box-shadow:0 6px 13px #0000001f,0 .5px 4px #0000001f}.Range-module_input::-ms-thumb{width:16px;height:16px;border:none;border-radius:16px;background:#ff3d00;background:var(--roadmap-brand-color, #ff3d00);cursor:pointer;box-shadow:0 6px 13px #0000001f,0 .5px 4px #0000001f}.Range-module_input::-webkit-slider-runnable-track{width:100%;height:4px;background:linear-gradient(to right,#ddd,#ddd) #ff3d00;background:linear-gradient(to right,var(--roadmap-border-color, #ddd),var(--roadmap-border-color, #ddd)) var(--roadmap-brand-color, #ff3d00);background-size:var(--roadmap-range-bgize);background-repeat:no-repeat;border-radius:2px;cursor:pointer}.Range-module_input::-moz-range-track{width:100%;height:4px;background:linear-gradient(to right,#ddd,#ddd) #ff3d00;background:linear-gradient(to right,var(--roadmap-border-color, #ddd),var(--roadmap-border-color, #ddd)) var(--roadmap-brand-color, #ff3d00);background-size:var(--roadmap-range-bgize);background-repeat:no-repeat;border:none;border-radius:2px;cursor:pointer}.Range-module_input::-ms-track{width:100%;height:4px;cursor:pointer;background:transparent;border-color:transparent;border-width:6px 0;color:transparent}.Range-module_input::-ms-fill-lower{background:#ddd;background:var(--roadmap-border-color, #ddd);border:none;border-radius:2px}.Range-module_input::-ms-fill-upper{background:#ff3d00;background:var(--roadmap-brand-color, #ff3d00);border:none;border-radius:2px}.Range-module_input:focus::-ms-fill-upper{background:#ff3d00;background:var(--roadmap-brand-color, #ff3d00)}.Range-module_ticksContainer{display:flex;flex-direction:row;justify-content:space-between;margin:15px -15px 0 -12px}.Range-module_tick{flex:0 1 auto;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a);font-size:12px;line-height:1;position:relative;width:40px;cursor:pointer;text-align:center}.MultiSelect-module_multiSelect{position:relative;width:100%}.MultiSelect-module_control{display:flex;align-items:center;min-height:38px;border:1px solid #d1d5db;border-radius:6px;background-color:#fff}.MultiSelect-module_control:hover{border-color:#c7cdd6}.MultiSelect-module_control:focus-within{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.MultiSelect-module_control.MultiSelect-module_disabled,.MultiSelect-module_disabled{background-color:#f9fafb;color:#9ca3af;cursor:not-allowed;border-color:#e5e7eb;opacity:.6}.MultiSelect-module_valueContainer{display:flex;flex-wrap:wrap;align-items:center;flex:1;padding:2px 6px;gap:4px}.MultiSelect-module_input{flex:1;border:none;outline:none;background:transparent;font-size:14px;line-height:1.5;color:#374151;min-width:120px}.MultiSelect-module_input:disabled{color:#9ca3af;cursor:not-allowed}.MultiSelect-module_input::-moz-placeholder{color:#9ca3af}.MultiSelect-module_input::placeholder{color:#9ca3af}.MultiSelect-module_multiValue{display:flex;align-items:center;background-color:#eff6ff;border:1px solid #bfdbfe;border-radius:4px;padding:2px 6px;font-size:12px;transition:background-color .12s ease-in-out}.MultiSelect-module_multiValue:hover{background-color:#dbeafe}.MultiSelect-module_multiValueLabel{color:#1e40af;margin-right:4px}.MultiSelect-module_multiValueRemove{background:none;border:none;color:#1e40af;cursor:pointer;font-size:16px;line-height:1;padding:0;width:16px;height:16px;display:flex;align-items:center;justify-content:center;border-radius:2px}.MultiSelect-module_multiValueRemove:hover{background-color:#dbeafe;color:#1e3a8a}.MultiSelect-module_multiValueRemove:disabled{cursor:not-allowed;opacity:.5}.MultiSelect-module_dropdownIndicator{background:none;border:none;color:#6b7280;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;transition:color .15s ease-in-out}.MultiSelect-module_dropdownIndicator:hover{color:#374151}.MultiSelect-module_dropdownIndicator:disabled{cursor:not-allowed;opacity:.5}.MultiSelect-module_menu{position:absolute;top:100%;left:0;right:0;z-index:1000;background-color:#fff;border:1px solid #e5e7eb;border-radius:6px;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;margin-top:4px;display:none}.MultiSelect-module_menu.MultiSelect-module_menuOpen{display:block}.MultiSelect-module_menuList{max-height:200px;overflow-y:auto;padding:0}.MultiSelect-module_groupHeading{font-size:12px;color:#6b7280;padding:8px 12px;text-transform:none;font-weight:600;background-color:#f3f4f6;border-bottom:1px solid #e5e7eb;margin:0;position:sticky;top:0;z-index:1}.MultiSelect-module_groupHeading:first-child{border-top-left-radius:6px;border-top-right-radius:6px}.MultiSelect-module_groupSeparator{height:1px;background-color:#e5e7eb;margin:4px 0}.MultiSelect-module_option{display:flex;align-items:center;padding:8px 12px;cursor:pointer;font-size:14px;color:#374151;transition:background-color .15s ease-in-out;border-bottom:1px solid #f3f4f6}.MultiSelect-module_option:last-child,.MultiSelect-module_optionLast{border-bottom:none}.MultiSelect-module_option:hover:not(.MultiSelect-module_optionSelected),.MultiSelect-module_optionFocused{background-color:#f3f4f6;color:#212121}.MultiSelect-module_optionSelected{background-color:#eff6ff;color:#1e40af;font-weight:500}.MultiSelect-module_option.MultiSelect-module_optionSelected:hover,.MultiSelect-module_optionSelected.MultiSelect-module_optionFocused{background-color:#dbeafe;color:#1e3a8a}.MultiSelect-module_optionCheck{margin-left:auto;color:#1e40af;flex-shrink:0}.MultiSelect-module_optionDisabled{color:#9ca3af;cursor:not-allowed;background-color:#f9fafb}.MultiSelect-module_optionLabel{flex:1;display:flex;align-items:center}.MultiSelect-module_noOptions{padding:12px;text-align:center;color:#9ca3af;font-size:14px}.SelectField-module_selectField{position:relative;width:100%}.SelectField-module_select{width:100%;padding:8px 32px 8px 12px;border:1px solid #d1d5db;border-radius:6px;background-color:#fff;font-size:14px;line-height:1.5;color:#374151;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6,9 12,15 18,9'%3e%3c/polyline%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right 8px center;background-size:16px;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.SelectField-module_select:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.SelectField-module_select:disabled{background-color:#f9fafb;color:#9ca3af;cursor:not-allowed;border-color:#e5e7eb}.SelectField-module_select option{padding:8px 12px;color:#374151}.SelectField-module_select option:disabled{color:#9ca3af;background-color:#f9fafb}.SelectField-module_select option:checked{background-color:#3b82f6;color:#fff}.locations-module_headerContainer,.locations-module_footerContainer{flex:0 1 auto;padding:20px 20px 0}.locations-module_footerContainer{padding:10px 20px 20px}.locations-module_publishingMode{font-size:12px;font-style:normal;font-weight:600;margin:0 0 15px;padding:0 40px 15px 0;border-bottom:1px solid #ddd;border-bottom:1px solid var(--roadmap-border-color, #ddd)}.locations-module_container{font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a);box-sizing:border-box;flex:0 1 auto;display:flex;flex-direction:column;width:100%;padding:15px 20px 10px;overflow:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;-webkit-user-select:text;-moz-user-select:text;user-select:text}.locations-module_container::-webkit-scrollbar{-webkit-appearance:none;width:8px;height:8px}.locations-module_container::-webkit-scrollbar-track{background:#fff;background:var(--roadmap-background-color, #fff);border-radius:8px}.locations-module_container::-webkit-scrollbar-thumb{border-radius:8px;background:#ddd;background:var(--roadmap-border-color, #ddd)}.locations-module_container:last-child{padding-bottom:20px}.locations-module_header{font-size:14px;font-style:normal;font-weight:600;margin:0;padding:0 40px 15px 0;border-bottom:1px solid #ddd;border-bottom:1px solid var(--roadmap-border-color, #ddd)}.locations-module_subheader{font-size:14px;text-transform:capitalize;font-style:normal;font-weight:600;margin:0 0 5px;line-height:1.5}.locations-module_row{flex:0 1 auto;display:flex;flex-direction:row;align-items:center;padding:5px 0}.locations-module_icon{display:inline-flex;align-items:center;justify-content:center;height:16px;width:16px;flex:0 0 auto;margin-right:14px}.locations-module_icon svg{width:16px;height:16px;display:block}.locations-module_statusIcon{display:block;width:8px;height:8px;border-radius:8px;margin:4px 18px 4px 4px}.locations-module_text{font-size:12px;font-style:normal;font-weight:400;padding:0}.locations-module_text a{color:var(--roadmap-text-color);-webkit-text-decoration:none;text-decoration:none}.locations-module_note{font-size:12px;font-style:normal;font-weight:400;margin:10px 0}.locations-module_divider{flex:0 1 auto;height:1px;width:100%;background:#ddd;background:var(--roadmap-border-color, #ddd);margin:10px 0;padding:0;border:none}.locations-module_tariffNote{font-size:12px;font-style:italic;font-weight:400;margin:10px 0 0}.locations-module_pagingation{font-size:12px;font-weight:400;margin-bottom:10px;width:100%;display:flex;flex-direction:row;align-items:stretch}.locations-module_pagingation span{margin-right:10px}.locations-module_pagingation button{color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a);border:none;background:none;padding:0;margin:0;margin-right:.2rem}.locations-module_pagingation button svg{height:15px;width:15px}.locations-module_pagingation button:disabled{color:var(--roadmap-border-color)}.locations-module_tariffNoteLink{color:var(--roadmap-brand-color);cursor:pointer;display:flex;align-items:center;font-size:12px;line-height:16px;margin:20px 0 10px}.locations-module_tariffNoteLink svg{fill:var(--roadmap-brand-color);height:16px;width:16px;margin-right:5px}.LocationPlaceholder-module_container{overflow:hidden!important}.LocationPlaceholder-module_header{height:17px;width:75%;margin:5px 40px 15px 0}.LocationPlaceholder-module_divider{height:1px;width:100%;margin:17px 0 18px}.LocationPlaceholder-module_iconLine{height:11px;width:80%;margin:10px 0 15px 30px;position:relative}.LocationPlaceholder-module_iconLine:before{content:"";display:block;background-color:#ddd;background-color:var(--roadmap-border-color, #ddd);width:15px;height:15px;border-radius:15px;position:absolute;left:-30px;top:-2px}.LocationPlaceholder-module_priceLine{height:11px;width:50%;margin:16px 0 15px}.LocationPlaceholder-module_header,.LocationPlaceholder-module_divider,.LocationPlaceholder-module_iconLine,.LocationPlaceholder-module_priceLine{display:block;background-color:#ddd;background-color:var(--roadmap-border-color, #ddd);background-image:linear-gradient(to right,transparent 0,rgba(0,0,0,.15) 15%,transparent 30%);background-size:1200px 100%;animation:LocationPlaceholder-module_roadmap-placeholder-shimmer 2s linear;animation-iteration-count:infinite}@keyframes LocationPlaceholder-module_roadmap-placeholder-shimmer{0%{background-position:-1200px 0}to{background-position:1200px 0}}.SidebarContainer-module_container{position:relative;pointer-events:initial;box-sizing:border-box;flex:1 0 0px;display:flex;flex-direction:column;background:#fff;background:var(--roadmap-background-color, #fff);border:1px solid #ddd;border:1px solid var(--roadmap-border-color, #ddd);border-radius:10px;overflow:hidden}@media screen and (min-width:768px){.SidebarContainer-module_container{-webkit-user-select:none;-moz-user-select:none;user-select:none}}.Debug-module_container{position:fixed;top:0;right:0;width:370px;margin:20px}.Debug-module_container>div{padding:0 20px}.Debug-module_content{max-height:calc(100vh - 100px);overflow:scroll}.Debug-module_connectorHeader{font-size:12px;margin-top:5px}.Debug-module_code{-webkit-user-select:all;-moz-user-select:all;user-select:all;font-size:10px;display:block;margin:10px 0;background:#eee;padding:10px 5px;border-radius:3px}.Debug-module_evse{border-bottom:1px solid #ddd;border-bottom:1px solid var(--roadmap-border-color, #ddd);margin-top:5px}.ConnectorTariff-module_container{margin:5px 0 10px;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a);font-size:12px;font-style:normal;font-weight:400}.ConnectorTariff-module_bold{font-weight:700}.ConnectorTariff-module_dynamicTariffItem{display:flex;flex-direction:row;padding:2px 0;align-items:center;justify-content:flex-start}.ConnectorTariff-module_dynamicTariffItemRange{display:inline-block;width:7.75em;border-right:1px solid #ddd;border-right:1px solid var(--roadmap-border-color, #ddd);margin-right:.75em;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.ConnectorTariff-module_tariffHeader{text-transform:capitalize;font-weight:600;margin:15px 0 5px;line-height:1.5}.ConnectorTariff-module_tariffLabel{margin:6px 0 0;line-height:1.5}.ConnectorTariff-module_tariffNote{font-size:12px;font-style:italic;font-weight:400;margin:10px 0}.ConnectorTariff-module_activeNowLabel{display:inline-block;vertical-align:baseline;vertical-align:initial;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--roadmap-font-family, Inter),system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;text-align:center;font-size:10px;font-style:normal;font-weight:600;line-height:1;text-transform:uppercase;letter-spacing:.05em;background:#f2f7fe;color:#005cee;border:1px solid rgba(0,92,238,.2);border-radius:5px;padding:2px 6px;margin:0 0 0 6px}.ConnectorTariff-module_tarifNotes{color:var(--roadmap-text-color)}.Price-module_tariffItem{display:inline-block;border-right:1px solid #ddd;border-right:1px solid var(--roadmap-border-color, #ddd);margin:2px .75em 2px 0;padding:0 .75em 0 0}.Price-module_tariffItem:last-child{margin-right:0;padding-right:0;border-right:none}.Price-module_tariffItem:empty{display:none}.LocationRow-module_row{flex:0 1 auto;display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;padding:5px 0;min-width:0}.LocationRow-module_expandable{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.LocationRow-module_icon{display:inline-flex;align-items:center;justify-content:center;height:16px;width:16px;flex:0 0 auto;margin-right:14px}.LocationRow-module_icon img,.LocationRow-module_icon svg{width:16px;height:16px;display:block}.LocationRow-module_text{flex:1 1 auto;min-width:0;font-size:12px;line-height:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.LocationRow-module_text a{color:var(--roadmap-text-color);-webkit-text-decoration:none;text-decoration:none}.LocationRow-module_textHint{color:#6a6a6a;color:var(--roadmap-muted-color, #6a6a6a);font-weight:400}.LocationRow-module_chevron{display:inline-flex;align-items:center;justify-content:center;height:10px;width:10px;flex:0 0 auto;margin-left:8px;transition:transform .15s ease;color:#2a2a2a;color:var(--roadmap-text-color, #2a2a2a)}.LocationRow-module_chevron svg{width:10px;height:10px;display:block}.LocationRow-module_chevronOpen{transform:rotate(180deg)}.LocationRow-module_body{padding:4px 0 6px 30px;display:flex;flex-direction:column;gap:4px}.OperatorSection-module_block{display:flex;flex-direction:column;gap:2px;margin-bottom:8px}.OperatorSection-module_block:last-child{margin-bottom:0}.OperatorSection-module_role{font-size:11px;text-transform:uppercase;color:#6a6a6a;color:var(--roadmap-muted-color, #6a6a6a);letter-spacing:.04em}.OperatorSection-module_header{display:flex;align-items:center;gap:8px}.OperatorSection-module_name{font-size:13px;font-weight:600}.OperatorSection-module_logo{height:20px;width:auto;max-width:80px;-o-object-fit:contain;object-fit:contain}.OperatorSection-module_website{font-size:12px;color:var(--roadmap-brand-color);-webkit-text-decoration:none;text-decoration:none;word-break:break-all}.OpeningHours-module_pill{display:inline-block;border-radius:8px;padding:1px 8px;font-size:12px;line-height:16px;font-weight:600}.OpeningHours-module_pillOpen{background:#e7f6ec;color:#1b7a3d}.OpeningHours-module_pillClosed{background:#fdecea;color:#c5221f}.OpeningHours-module_day{display:flex;font-size:12px;line-height:1.5}.OpeningHours-module_dayLabel{min-width:84px}.OpeningHours-module_dayValue{flex:1 1 auto}.OpeningHours-module_today{font-weight:600}.OpeningHours-module_exceptional{font-size:12px;margin-top:8px;padding-top:8px;border-top:1px solid #e5e5e5;border-top:1px solid var(--roadmap-border-color, #e5e5e5)}.OpeningHours-module_exceptionalHeader{font-weight:600;margin-bottom:4px}.OpeningHours-module_exceptionalClosingHeader{color:#c5221f}.OpeningHours-module_exceptionalOpeningHeader{color:#1b7a3d}.OpeningHours-module_footnote{font-size:11px;font-style:italic;color:#6a6a6a;color:var(--roadmap-muted-color, #6a6a6a);margin-top:6px}.BackButton-module_backButton{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background:none;border:none;display:block;height:16px;line-height:16px;margin:0 14px 10px 0;color:#ff5f00;color:var(--roadmap-brand-color, #ff5f00)}.BackButton-module_backButton svg{height:14px;fill:currentColor;vertical-align:top;margin-right:10px}.CloseButton-module_closeButton{cursor:pointer;background:none;border:none;position:absolute;top:0;right:0;padding:20px}