{"version":3,"file":"app.071c8cd0894b5c9c8de4.js","mappings":"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","sources":["webpack://kvt/webpack/runtime/chunk loaded","webpack://kvt/./Vue/App.vue","webpack://kvt/./js/stores/scenario.js","webpack://kvt/./js/stores/kootenayConstants.js","webpack://kvt/./js/stores/informationToggles.js","webpack://kvt/./js/stores/annotation.js","webpack://kvt/./js/utils.js","webpack://kvt/./js/stores/unitSystemData.js","webpack://kvt/./Vue/WaterProfile.vue","webpack://kvt/./js/stores/locationMarkers.js","webpack://kvt/./Vue/LocationMarker.vue","webpack://kvt/./Vue/LocationMarker.vue?f01b","webpack://kvt/./Vue/WaterProfile.vue?0176","webpack://kvt/./Vue/OutflowHydraulicControlGauge.vue","webpack://kvt/./Vue/InfoBox.vue","webpack://kvt/./Vue/InfoBox.vue?9536","webpack://kvt/./Vue/OutflowHydraulicControlGauge.vue?a4da","webpack://kvt/./Vue/NarrowsHydraulicControl.vue","webpack://kvt/./Vue/NarrowsHydraulicControl.vue?8dc9","webpack://kvt/./Vue/Hydrograph.vue","webpack://kvt/./Vue/Hydrograph.vue?74a5","webpack://kvt/./Vue/IjcGraph.vue","webpack://kvt/./Vue/IjcGraph.vue?6ca8","webpack://kvt/./Vue/DynamicMap.vue","webpack://kvt/./Vue/Arrow.vue","webpack://kvt/./Vue/Arrow.vue?32ca","webpack://kvt/./Vue/MapModal.vue","webpack://kvt/./Vue/MapModal.vue?4e98","webpack://kvt/./Vue/DynamicMap.vue?84e8","webpack://kvt/./Vue/Scrubber.vue","webpack://kvt/./Vue/Scrubber.vue?a5b9","webpack://kvt/./Vue/Tutorial.vue","webpack://kvt/./js/stores/tutorialConfig.js","webpack://kvt/./Vue/Tutorial.vue?4d23","webpack://kvt/./Vue/Annotation.vue","webpack://kvt/./Vue/Annotation.vue?1e4a","webpack://kvt/./Vue/Credits.vue","webpack://kvt/./Vue/Credits.vue?1159","webpack://kvt/./Vue/FloodRiskInfoBox.vue","webpack://kvt/./Vue/FloodRiskInfoBox.vue?695f","webpack://kvt/./Vue/App.vue?8eb1","webpack://kvt/./js/app.js","webpack://kvt/./css/MaterialFonts.css","webpack://kvt/./css/app.css","webpack://kvt/./css/vue-transitions.css","webpack://kvt/./Vue/Annotation.vue?624b","webpack://kvt/./Vue/App.vue?c705","webpack://kvt/./Vue/Arrow.vue?8ab4","webpack://kvt/./Vue/Credits.vue?5e2e","webpack://kvt/./Vue/DynamicMap.vue?cf51","webpack://kvt/./Vue/Hydrograph.vue?f41e","webpack://kvt/./Vue/InfoBox.vue?b41d","webpack://kvt/./Vue/LocationMarker.vue?0616","webpack://kvt/./Vue/MapModal.vue?acc6","webpack://kvt/./Vue/NarrowsHydraulicControl.vue?8f77","webpack://kvt/./Vue/OutflowHydraulicControlGauge.vue?48e2","webpack://kvt/./Vue/Scrubber.vue?3443","webpack://kvt/./Vue/Tutorial.vue?2be5","webpack://kvt/./Vue/WaterProfile.vue?c74d","webpack://kvt/./css/MaterialFonts.css?4e64","webpack://kvt/./css/app.css?4aa9","webpack://kvt/./css/vue-transitions.css?5215","webpack://kvt/./Vue/Annotation.vue?dffb","webpack://kvt/./Vue/App.vue?8f4d","webpack://kvt/./Vue/Arrow.vue?683c","webpack://kvt/./Vue/Credits.vue?76c6","webpack://kvt/./Vue/DynamicMap.vue?fd2f","webpack://kvt/./Vue/Hydrograph.vue?4be4","webpack://kvt/./Vue/InfoBox.vue?e3fc","webpack://kvt/./Vue/LocationMarker.vue?a6ac","webpack://kvt/./Vue/MapModal.vue?b9e7","webpack://kvt/./Vue/NarrowsHydraulicControl.vue?9eea","webpack://kvt/./Vue/OutflowHydraulicControlGauge.vue?1dd9","webpack://kvt/./Vue/Scrubber.vue?f8b9","webpack://kvt/./Vue/Tutorial.vue?bece","webpack://kvt/./Vue/WaterProfile.vue?7862","webpack://kvt/webpack/bootstrap","webpack://kvt/webpack/runtime/compat get default export","webpack://kvt/webpack/runtime/define property getters","webpack://kvt/webpack/runtime/global","webpack://kvt/webpack/runtime/hasOwnProperty shorthand","webpack://kvt/webpack/runtime/make namespace object","webpack://kvt/webpack/runtime/jsonp chunk loading","webpack://kvt/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","<template>\n    <div id=\"modal-teleport-target\"></div>\n    <transition name=\"fade\">\n        <Tutorial v-if=\"showTutorial\" @tutorial-ended=\"showTutorial = false\"></Tutorial>\n    </transition>\n    <div class=\"app-grid\" v-if=\"appLoaded\">\n        <div class=\"top-left\">\n            <div class=\"branding q-mr-md\">\n                <div class=\"logo-container\">\n                    <a href=\"https://ijc.org\" target=\"_blank\" rel=\"noopener\">\n                        <img src=\"assets/IJC_logo.jpg\" alt=\"IJC Logo\" class=\"logo-image\">\n                    </a>\n                </div>\n            </div>\n            <div class=\"tutorial-controls q-mr-md\">\n                <q-btn color=\"green\" class=\"tutorial-btn\" dense padding=\"0rem 0rem\" @click=\"showTutorial = true\">\n                    <q-icon name=\"help\" size=\"4.5rem\"></q-icon>\n                    Instructions\n                </q-btn>\n            </div>\n            <div class=\"control-box main-controls tutorial-step-main-controls\">\n                <h2 class=\"control-box-header\">\n                    Controls <q-btn dense outline class=\"q-ml-sm\" label=\"Reset\" @click=\"resetControls\"></q-btn>\n                </h2>\n                <div class=\"main-controls-content\">\n                    <div class=\"control q-mb-sm\">\n                        <span class=\"control-text\">Year:</span>\n                        <q-btn-toggle\n                            class=\"q-ml-sm\"\n                            :model-value=\"scenarioSelection\"\n                            @update:model-value=\"selectScenario\"\n                            color=\"white\"\n                            text-color=\"black\"\n                            :options=\"scenarioListButtonConfig\"\n                        ></q-btn-toggle>\n                    </div>\n                    <div class=\"control\">\n                        <span class=\"control-text\">Units:</span>\n                        <q-btn-toggle\n                            class=\"q-ml-sm\"\n                            v-model=\"unitSystemSelection\"\n                            color=\"white\"\n                            text-color=\"black\"\n                            :options=\"[\n                                {label: 'Customary/Imperial', value: 'imperial'},\n                                {label: 'Metric', value: 'metric'},\n                            ]\"\n                        ></q-btn-toggle>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div class=\"top-right\">\n            <div class=\"control-box info-toggles tutorial-step-info-toggles\">\n                <h2 class=\"control-box-header\">Information Toggles</h2>\n                <div>\n                    <q-list class=\"info-toggles-list\">\n                        <q-item dense v-for=\"informationToggle in allInformationToggles\" tag=\"label\">\n                            <q-item-section side>\n                                <q-checkbox\n                                    keep-color\n                                    dense\n                                    v-model=\"informationToggle.selected\"\n                                    :color=\"informationToggle.quasarColorClass\"\n                                ></q-checkbox>\n                            </q-item-section>\n                            <q-item-section>\n                                <q-item-label>{{ informationToggle.getName(unitSystem) }}</q-item-label>\n                            </q-item-section>\n                            <q-tooltip\n                                anchor=\"center left\"\n                                self=\"center right\"\n                                class=\"bg-black text-body2\"\n                                transition-show=\"fade\"\n                                transition-hide=\"fade\"\n                                max-width=\"250px\"\n                            >\n                                {{ informationToggle.tooltipText }}\n                            </q-tooltip>\n                        </q-item>\n                    </q-list>\n                </div>\n            </div>\n        </div>\n        <div class=\"bottom-left\">\n            <water-profile\n                class=\"water-profile-graph\"\n                :year=\"scenarioMetadata.year\"\n                :day-offset=\"scrubberDayOffset\"\n                :data=\"selectedDayData\"\n                :unit-system=\"unitSystem\"\n            ></water-profile>\n            <outflow-hydraulic-control-gauge\n                :outflow-hydraulic-control=\"selectedDayData.outflow_hydraulic_control\"\n                :unit-system=\"unitSystem\"\n                class=\"outflow-control-gauge tutorial-step-hydraulic-control\">\n            </outflow-hydraulic-control-gauge>\n            <narrows-hydraulic-control\n                v-if=\"narrowsControlInformationToggleSelected\"\n                :outflow-hydraulic-control=\"selectedDayData.outflow_hydraulic_control\"\n                :narrows-hydraulic-control=\"selectedDayData.narrows_hydraulic_control\"\n                class=\"narrows-hydraulic-control\"\n            ></narrows-hydraulic-control>\n            <div>\n                <dynamic-map></dynamic-map>\n            </div>\n        </div>\n        <div class=\"bottom-right\">\n            <ijc-graph\n                class=\"ijc-graph\"\n                :scenario-metadata=\"scenarioMetadata\"\n                :scenario-data=\"scenarioData\"\n                :cursorProgress-fraction=\"scrubberFraction\"\n                :unit-system=\"unitSystem\"\n            >\n                <FloodRiskInfoBox\n                    v-if=\"floodToggleSelected\"\n                    class=\"flood-risk-info-box\"\n                    width=\"450px\"\n                    :unit-system=\"unitSystem\"\n                ></FloodRiskInfoBox>\n            </ijc-graph>\n            <hydrograph\n                class=\"hydrograph\"\n                height=\"350px\"\n                :year=\"scenarioMetadata.year\"\n                :data=\"scenarioData\"\n                :cursor-progress-fraction=\"scrubberFraction\"\n                :unit-system=\"unitSystem\"\n            ></hydrograph>\n            <div class=\"scrubber-container shadow-1 tutorial-step-scrubber\">\n                <scrubber\n                    v-model.number=\"scrubberDayOffset\"\n                    :min=\"0\"\n                    :max=\"maxYearArrayIndex\"\n                    :step=\"1\"\n                    :step-delay=\"100\"\n                    :label-value=\"scrubberLabel\"\n                >\n                    <template #slider-block-hook>\n                        <annotation\n                            v-for=\"annotation in timelineAnnotations\"\n                            class=\"slider-annotation\"\n                            :style=\"{'left': `calc(${getAnnotationOffsetFraction(annotation.date) * 100}% - 10.5px)`}\"\n                            @click=\"setScrubberFraction(getAnnotationOffsetFraction(annotation.date))\"\n                            :force-show-tooltip=\"annotation === highlightedAnnotation\"\n                        >\n                            <template #title>\n                                {{ getLongDateText(annotation.date) }}\n                            </template>\n                            <template #caption>\n                                {{ annotation.text }}\n                            </template>\n                        </annotation>\n                    </template>\n                </scrubber>\n            </div>\n            <credits class=\"text-right\" />\n        </div>\n    </div>\n    <div class=\"loading-container\" v-else>\n        <p>Fetching app data</p>\n        <img src=\"assets/spinner.svg\" alt=\"Loading icon\" height=\"65\">\n    </div>\n</template>\n\n<script>\nimport ScenarioStore from '../js/stores/scenario';\nimport {\n    NarrowsInformationToggle,\n    FloodInformationToggle,\n    KokaneeInformationToggle,\n    NarrowsControlInformationToggle\n} from '../js/stores/informationToggles';\nimport AnnotationStore from \"../js/stores/annotation\";\nimport utils from \"../js/utils\";\nimport unitSystemData from \"../js/stores/unitSystemData\";\n\nimport WaterProfile from \"./WaterProfile.vue\";\nimport OutflowHydraulicControlGauge from \"./OutflowHydraulicControlGauge.vue\";\nimport NarrowsHydraulicControl from \"./NarrowsHydraulicControl.vue\";\nimport Hydrograph from \"./Hydrograph.vue\";\nimport IjcGraph from \"./IjcGraph.vue\";\nimport DynamicMap from \"./DynamicMap.vue\";\nimport Scrubber from \"./Scrubber.vue\";\nimport Tutorial from './Tutorial.vue';\nimport Annotation from \"./Annotation.vue\";\nimport Credits from \"./Credits.vue\";\nimport FloodRiskInfoBox from \"./FloodRiskInfoBox.vue\";\n\nexport default {\n    name: \"App\",\n    components: {\n        FloodRiskInfoBox,\n        Credits,\n        Tutorial,\n        Scrubber,\n        WaterProfile,\n        OutflowHydraulicControlGauge,\n        NarrowsHydraulicControl,\n        Hydrograph,\n        IjcGraph,\n        DynamicMap,\n        Annotation\n    },\n    data() {\n        return {\n            // state\n            appLoaded: false,\n            scrubberDayOffset: 0,\n            scenarioSelection: null,\n            scenarioData: null,\n            unitSystemSelection: 'imperial',\n            showTutorial: false,\n\n            // static data\n            scenarioList: null,\n            allInformationToggles: [\n                NarrowsInformationToggle,\n                FloodInformationToggle,\n                KokaneeInformationToggle,\n                NarrowsControlInformationToggle\n            ],\n        }\n    },\n    computed: {\n        defaultScenarioId() {\n            const defaultScenario = this.scenarioList.filter(scenario => scenario.default)[0];\n            return defaultScenario?.id ?? this.scenarioList[0].id;\n        },\n        scenarioListButtonConfig() {\n            return this.scenarioList.map(scenario => ({\n                label: scenario.name,\n                value: scenario.id\n            }));\n        },\n        scenarioMetadata() {\n            return this.scenarioList.find(scenario => scenario.id === this.scenarioSelection);\n        },\n        selectedDayData() {\n            return this.scenarioData[this.scrubberDayOffset];\n        },\n        timelineAnnotations() {\n            return AnnotationStore.calculateAnnotations(this.scenarioData);\n        },\n        maxYearArrayIndex() {\n            return utils.isLeapYear(this.scenarioMetadata.year) ? 365 : 364;\n        },\n        scrubberFraction() {\n            return this.scrubberDayOffset / this.maxYearArrayIndex;\n        },\n        scrubberDate() {\n            return utils.createDateFromYearOffset(this.scenarioMetadata.year, this.scrubberDayOffset);\n        },\n        scrubberLabel() {\n            return utils.getLongDateText(this.scrubberDate);\n        },\n        highlightedAnnotation() {\n            const daysBehind = 3;\n            const daysAhead = 18;\n\n            return [...this.timelineAnnotations]\n                .reverse()\n                .find(annotation => {\n                    if (annotation.date.getTime() > this.scrubberDate.getTime()) {\n                        // scrubber ahead of annotation\n                        return annotation.date.getTime() - this.scrubberDate.getTime() <= 1000 * 60 * 60 * 24 * daysBehind;\n                    } else {\n                        // scrubber behind/at annotation\n                        return this.scrubberDate.getTime() - annotation.date.getTime() <= 1000 * 60 * 60 * 24 * daysAhead;\n                    }\n\n                });\n        },\n        unitSystem() {\n            return unitSystemData[this.unitSystemSelection];\n        },\n        narrowsControlInformationToggleSelected() {\n            return NarrowsControlInformationToggle.selected;\n        },\n        floodToggleSelected() {\n            return FloodInformationToggle.selected;\n        }\n    },\n    methods: {\n        async selectScenario(scenarioId) {\n            try {\n                this.scenarioData = await this.getScenario(scenarioId);\n            } catch (error) {\n                this.$q.notify({\n                    type: 'negative',\n                    message: `Unable to load scenario ${scenarioId}`\n                });\n                return;\n            }\n\n            this.scenarioSelection = scenarioId;\n\n            if (this.scrubberDayOffset >= this.maxYearArrayIndex) {\n                this.scrubberDayOffset = 0;\n            }\n        },\n        async getScenarioList() {\n            return ScenarioStore.listScenarios();\n        },\n        async getScenario(id) {\n            return ScenarioStore.getScenarioData(id);\n        },\n        getLongDateText(date) {\n            return utils.getLongDateText(date);\n        },\n        getAnnotationOffsetFraction(date) {\n            const x1 = new Date(this.scenarioMetadata.year + '-01-01').getTime();\n            const x2 = new Date(this.scenarioMetadata.year + '-12-31').getTime();\n            return (date.getTime() - x1) / (x2 - x1);\n        },\n        setScrubberFraction(fraction) {\n            if (fraction >= 0 && fraction <= 1) {\n                this.scrubberDayOffset = Math.round(this.maxYearArrayIndex * fraction);\n            } else {\n                throw new RangeError('Scrubber fraction must be between 0 and 1');\n            }\n        },\n        resetControls() {\n            this.scrubberDayOffset = 0;\n            this.unitSystemSelection = 'imperial';\n            this.allInformationToggles.forEach(x => x.selected = x.initialSelection);\n            this.selectScenario(this.defaultScenarioId);\n        }\n    },\n    async mounted() {\n        this.scenarioList = await this.getScenarioList();\n        this.scenarioSelection = this.defaultScenarioId;\n        this.scenarioData = await this.getScenario(this.scenarioSelection);\n\n        this.appLoaded = true;\n\n        if ((utils.deviceScreenSizeInches() ?? 999) <= 10) {\n            this.$q.dialog({\n                message: 'This app is optimized for screens 10 inches or larger. Please switch to a larger device for the best experience.',\n                persistent: true,\n                class: 'screensize-dialog'\n            });\n        }\n    }\n}\n</script>\n\n<style scoped>\n.app-grid {\n    display: grid;\n    width: 1600px;\n    height: 850px;\n    grid-template-columns: 1fr 1fr;\n    margin: 0 auto;\n    transform-origin: top left;\n}\n\n.app-grid > div {\n    margin: 0.4rem;\n}\n\n.top-left {\n    display: flex;\n}\n\n.bottom-left {\n    position: relative;\n}\n\n.logo-container {\n    width: 140px;\n    height: 140px;\n}\n\n.logo-image {\n    height: 100%;\n    width: auto;\n}\n\n.tutorial-btn {\n    width: 8rem;\n    border-radius: 1rem;\n    height: 100%;\n}\n\n.control-box {\n    border-radius: 1rem;\n    padding: 0.5rem 1rem;\n    height: 100%;\n    background: #d6dedb;\n}\n\n.control-box > .control-box-header {\n    line-height: unset;\n    font-size: 1.4rem;\n    text-align: center;\n    margin: 0 0 0.6rem 0;\n}\n\n.control {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n.main-controls {\n    flex-grow: 1;\n}\n\n.water-profile-graph, .hydrograph {\n    display: inline-block;\n    width: 100%;\n}\n\n.water-profile-graph {\n    height: 400px;\n    vertical-align: top;\n}\n\n.outflow-control-gauge {\n    position: absolute;\n    top: 39.5%;\n    left: 24%;\n}\n\n.narrows-hydraulic-control {\n    position: absolute;\n    top: 39.5%;\n    left: 54%;\n}\n\n.info-toggles-list {\n    display: grid;\n    grid-template-rows: 1fr 1fr;\n    grid-auto-flow: column;\n}\n\n.ijc-graph {\n    position: relative;\n    height: 300px;\n}\n\n.flood-risk-info-box {\n    position: absolute;\n    top: 0;\n    right: 100%;\n    z-index: 20;\n}\n\n.scrubber-container {\n    /* Set background color for tutorial callout */\n    background-color: white;\n    padding-top: 6px;\n    padding-bottom: 6px;\n    /* edit left and right padding to align scrubber with chart */\n    padding-left: 11px;\n    padding-right: 10px;\n}\n\n.slider-annotation {\n    position: absolute;\n    top: 7.5px;\n    cursor: pointer;\n}\n</style>","import Papa from 'papaparse';\n\nlet scenarioListCache = null;\nlet scenarioDataCache = {};\n\nasync function listScenarios() {\n    if (scenarioListCache) {\n        return scenarioListCache;\n    }\n\n    return new Promise((resolve, reject) => {\n        Papa.parse(`data/scenarioList.csv?cacheBust=${Date.now()}`, {\n            header: true,\n            dynamicTyping: true,\n            download: true,\n            complete: results => {\n                scenarioListCache = results.data;\n                resolve(results.data);\n            },\n            error: error => {\n                reject(error);\n            }\n        })\n    });\n}\n\nasync function getScenarioData(id) {\n    if (scenarioDataCache[id]) {\n        return scenarioDataCache[id];\n    }\n\n    return new Promise((resolve, reject) => {\n        Papa.parse(`data/${id}?cacheBust=${Date.now()}`, {\n            header: true,\n            dynamicTyping: true,\n            download: true,\n            transform: (value, column) => {\n                if (column === 'date') {\n                    return new Date(value + 'T00:00');\n                } else {\n                    return value;\n                }\n            },\n            complete: results => {\n                scenarioDataCache[id] = results.data;\n                resolve(results.data);\n            },\n            error: error => {\n                reject(error);\n            }\n        })\n    });\n}\n\nexport default {listScenarios, getScenarioData}","export const DrawdownDate = {month: 0, day: 8};\n\nexport const GatesFullyOpenHeuristicThreshold = 0.95;\n\nexport const SpringRiseHeuristicStartDate = {month: 3, day: 1};\nexport const SpringRiseHeuristicThresholdFt = 1739.32;\n\nexport const FreshetEndHeuristicStartDate = {month: 5, day: 1};\nexport const FreshetEndHeuristicEndDate = {month: 7, day: 31};\nexport const FreshetEndNelsonElevationFt = 1743.32;\n\nexport const ReservoirModeDate = {month: 8, day: 1};\nexport const ReservoirModeElevation = 1745.32;\n\nexport const CorraLinnGatesMaxOutflow = 252;\n\nexport const PotentialFloodImpactsElevation = 1752;\nexport const MajorFloodImpactsElevation = 1755;\nexport const FloodConstructionElevation = 1760.2;\n\nexport const KokaneeSpawningMinWaterDepth = 1.6404; // 0.5m\nexport const KokaneeSpawningMaxWaterDepth = 6.5617; // 2m","import {PotentialFloodImpactsElevation} from \"./kootenayConstants\";\nimport {reactive} from 'vue';\n\n/**\n * Creates a new information toggle object\n * @param id {string} ID of the info toggle (not visible to user)\n * @param getName {function(unitSystem: Object):string} Function that provides the name of info toggle to be displayed.\n * Takes in the unit system as a parameter.\n * @param tooltipText {string} Text that will appear when user hovers over the info toggle in the control panel\n * when user hovers over the info toggle in the control panel.\n * @param quasarColorClass {string} Color of the info toggle checkmark box and chart line, if applicable. Must be a\n * color in the Quasar color palette: https://quasar.dev/style/color-palette\n * @param initialSelection {boolean} Set to true to make info toggle automatically selected when app is loaded\n * @constructor\n */\nfunction InformationToggle(id, getName, tooltipText, quasarColorClass, initialSelection) {\n    this.id = id;\n    this.getName = getName;\n    this.tooltipText = tooltipText;\n    this.quasarColorClass = quasarColorClass;\n    this.initialSelection = initialSelection;\n    this.selected = initialSelection;\n}\n\nexport const NarrowsInformationToggle = reactive(new InformationToggle(\n    \"narrows\",\n    () => \"Max Lake Level Under Pre-1930’s Dredging Channel Capacity\",\n    \"Show Kootenay Lake levels if Grohman Narrows was not dredged in the 1930s\",\n    \"black\",\n    false\n));\n\nexport const FloodInformationToggle = reactive(new InformationToggle(\n    \"flood\",\n    () => `Flood Impacts`,\n    \"Above this lake level, flood damage starts occurring to surrounding areas\",\n    \"orange-9\",\n    false\n));\n\nexport const KokaneeInformationToggle = reactive(new InformationToggle(\n    \"kokanee\",\n    () => \"Kokanee Spawning Elevations\",\n    \"Shows the water elevations and seasons at which kokanee salmon spawn and hatch\",\n    \"teal-4\",\n    false\n));\n\nexport const NarrowsControlInformationToggle = reactive(new InformationToggle(\n    \"narrowsHydraulicControl\",\n    () => \"Corra Linn Dam Impacts on Grohman Narrows\",\n    \"Show information about the backwater impacts of Corra Linn Dam on Grohman Narrows\",\n    \"light-blue-10\",\n    false\n));","import * as Kootenay from './kootenayConstants';\n\n/**\n * Annotation config object. The reduceFn takes in a scenario data DTO and is expected to return a Date object\n * corresponding to the annotation.\n * @type {[{text: string, reduceFn: (function(scenarioData): Date)}]}\n */\nconst annotationConfig = [\n    {\n        text: 'Kootenay Lake drawdown begins in preparation for spring runoff.',\n        reduceFn: function(scenarioData) {\n            return scenarioData.find(datapoint => {\n                return datapoint.date.getMonth() === Kootenay.DrawdownDate.month\n                    && datapoint.date.getDate() === Kootenay.DrawdownDate.day\n            }).date;\n        }\n    },\n    {\n        text: 'Gates at Corra Linn open fully and enters free-fall to handle the large water inflow.',\n        reduceFn: function(scenarioData) {\n            return scenarioData.find(datapoint => {\n                return datapoint.outflow >= datapoint.max_q * Kootenay.GatesFullyOpenHeuristicThreshold;\n            }).date;\n        }\n    },\n    {\n        text: 'Kootenay Lake reaches its maximum level for this year',\n        reduceFn: function(scenarioData) {\n            return scenarioData.reduce((maxDatapoint, datapoint) => {\n                if (datapoint.lake_elev > maxDatapoint.lake_elev) {\n                    return datapoint;\n                }\n\n                return maxDatapoint;\n            }, scenarioData[0]).date;\n        }\n    },\n    {\n        text: 'Spring rise is declared by Kootenay Lake Board of Control.',\n        reduceFn: function(scenarioData) {\n            for (let i = 1; i < scenarioData.length; i++) {\n                const prevDatapoint = scenarioData[i-1];\n                const datapoint = scenarioData[i];\n\n                if (datapoint.date.getMonth() >= Kootenay.SpringRiseHeuristicStartDate.month) {\n                    if (prevDatapoint.ijc_rule_curve <= Kootenay.SpringRiseHeuristicThresholdFt\n                        && datapoint.ijc_rule_curve > Kootenay.SpringRiseHeuristicThresholdFt) {\n                        return datapoint.date;\n                    }\n                }\n            }\n        }\n    },\n    {\n        text: `End of Freshet: water level at Nelson, BC falls below ${Kootenay.FreshetEndNelsonElevationFt} ft. Kootenay Lake must be kept below this level until September 1.`,\n        reduceFn: function(scenarioData) {\n            for (let i = 1; i < scenarioData.length; i++) {\n                const prevDatapoint = scenarioData[i-1];\n                const datapoint = scenarioData[i];\n\n                if (datapoint.date.getMonth() >= Kootenay.FreshetEndHeuristicStartDate.month\n                    && datapoint.date.getMonth() <= Kootenay.FreshetEndHeuristicEndDate.month) {\n\n                    if (datapoint.nelson_elev < Kootenay.FreshetEndNelsonElevationFt\n                        && prevDatapoint.nelson_elev > datapoint.nelson_elev) {\n                        return datapoint.date;\n                    }\n                }\n            }\n        }\n    },\n    {\n        text: `From September 1 until next January, Kootenay Lake must stay below ${Kootenay.ReservoirModeElevation} ft.`,\n        reduceFn: function(scenarioData) {\n            return scenarioData.find(datapoint => {\n                return datapoint.date.getMonth() === Kootenay.ReservoirModeDate.month\n                    && datapoint.date.getDate() === Kootenay.ReservoirModeDate.day;\n            }).date;\n        }\n    },\n]\n\n/**\n * Dynamically produces timestamped annotations for the given scenarioData.\n * @param scenarioData Scenario DTO. Must span at most 1 year.\n * @returns {[{text: string, date: Date}]} Timeline annotation DTOs sorted by date.\n */\nfunction calculateAnnotations(scenarioData) {\n    return annotationConfig.map(annotation => {\n        return {\n            text: annotation.text,\n            date: annotation.reduceFn(scenarioData)\n        }\n    }).filter(annotation => annotation.date).sort((a, b) => a.date - b.date);\n}\n\nexport default {calculateAnnotations};","/**\n * Convert Date object to text in the format \"M d, y\" (e.g. \"January 12, 2021\")\n * @param date {Date}\n * @returns {string}\n */\nfunction getLongDateText(date) {\n    return date.toLocaleDateString('en-US', {dateStyle: 'long'})\n}\n\n/**\n * Create a Date object based on the number of days passed since the beginning of that year\n * @param year {int}\n * @param dayOffset {int} Number of days passed in the year. Zero-indexed\n * @returns {Date}\n */\nfunction createDateFromYearOffset(year, dayOffset) {\n    let date = new Date(year + '-01-01T00:00');\n    date.setDate(date.getDate() + dayOffset);\n    return date;\n}\n\n/**\n * Create a concrete Date object from a short date string representation.\n * @param year {int}\n * @param shortDate {string} Short date string in the format 'MM-dd'\n * @returns {Date}\n */\nfunction createDateFromShortDate(year, shortDate) {\n    return new Date(`${year}-${shortDate}T00:00`);\n}\n\nfunction isLeapYear(year) {\n    return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n}\n\nfunction deviceScreenSizeInches() {\n    const dpPerInch = 140; // should be 160 as per spec, but most devices report density from 110-180 ppi\n    const heightDp = window.screen.height;\n    const widthDp = window.screen.width;\n    const diagonalDp = Math.sqrt(heightDp * heightDp + widthDp * widthDp);\n    return diagonalDp ? diagonalDp / dpPerInch : null;\n}\n\nfunction toLocaleStringWithUnits(value, unitType, stringOpts = {maximumFractionDigits: 1}) {\n    const valueText = (value * unitType.scale).toLocaleString(undefined, stringOpts);\n    return `${valueText} ${unitType.symbol}`\n}\n\nexport default {\n    getLongDateText,\n    createDateFromYearOffset,\n    createDateFromShortDate,\n    isLeapYear,\n    deviceScreenSizeInches,\n    toLocaleStringWithUnits\n}","const unitSystemData = {\n    imperial: {\n        flowRate: {\n            scale: 1,\n            symbol: 'kcf/s'\n        },\n        distance: {\n            scale: 1,\n            symbol: 'ft'\n        }\n    },\n    metric: {\n        flowRate: {\n            scale: 28.316847,\n            symbol: 'm^3/s'\n        },\n        distance: {\n            scale: 0.3048,\n            symbol: 'm'\n        }\n    }\n};\n\nexport default unitSystemData;","<template>\n    <div class=\"water-profile-container tutorial-step-water-profile\">\n        <highchart :options=\"chartConfig\" ref=\"chartObj\"></highchart>\n        <location-marker v-for=\"(marker, key) in locationMarkers\"\n                        :highlighted=\"marker.highlighted\"\n                        :text=\"marker.displayText\"\n                        :offset-top=\"marker.profileChartOffsetTop\"\n                        :offset-left=\"marker.profileChartOffsetLeft\"\n                        @mouseenter=\"marker.highlighted = true\"\n                        @mouseleave=\"marker.highlighted = false\">\n        </location-marker>\n    </div>\n</template>\n\n<script>\nimport utils from \"../js/utils\";\nimport locationMarkers from \"../js/stores/locationMarkers\";\n\nimport {Chart} from 'highcharts-vue';\n\nimport LocationMarker from \"./LocationMarker.vue\";\n\n\nexport default {\n    name: \"WaterProfile\",\n    components: {\n        Highchart: Chart,\n        LocationMarker,\n    },\n    // TODO pass in display date instead of year and day offset\n    props: ['data', 'unitSystem', 'year', 'dayOffset'],\n    data() {\n        return {\n            locationMarkers,\n        }\n    },\n    computed: {\n        selectedDate() {\n            return utils.createDateFromYearOffset(this.year, this.dayOffset);\n        },\n        chartConfig() {\n            // We can't access component \"this\" inside label formatter function, so\n            // must provide unit system reference here\n            const unitSystem = this.unitSystem;\n\n            const profileSeriesData = [\n                [0.0, 1702],\n                [0.095, 1702],\n                [0.1, this.data.fb_elev],\n                [0.21, this.data.fb_elev, 'visible'],\n                [0.25, this.data.fb_elev],\n                [0.35, this.data.nelson_elev],\n                [0.48, this.data.nelson_elev, 'visible'],\n                [0.68, this.data.lake_elev, 'visible'],\n                [1.0, this.data.porthill_elev, 'visible']\n            ];\n            const groundProfile = [\n                [0.1, 1733],\n                [0.24, 1733],\n                [0.35, 1738.5],\n                [0.4, 1737],\n                [0.7, 1734],\n                [1.0, 1740]\n            ]\n\n            return {\n                chart: {\n                    animation: false,\n                    marginRight: 5,\n                },\n                plotOptions: {\n                    series: {\n                        enableMouseTracking: false,\n                        label: {\n                            enabled: false\n                        },\n                        fillOpacity: 1,\n                    }\n                },\n                title: {\n                    text: 'Kootenay Lake Water Profile'\n                },\n                subtitle: {\n                    text: 'on ' + utils.getLongDateText(this.selectedDate)\n                },\n                series: [\n                    {\n                        name: 'Water Profile',\n                        type: 'areaspline',\n                        color: '#52a3ff',\n                        data: profileSeriesData,\n                        keys: ['x', 'y', 'dataLabels.style.visibility'],\n                        dataLabels: {\n                            enabled: true,\n                            formatter: function() {\n                                return utils.toLocaleStringWithUnits(this.y, unitSystem.distance, {maximumFractionDigits: 2});\n                            },\n                            style: {\n                                visibility: 'hidden',\n                                color: '#52a3ff',\n                                textOutline: '#ffffff',\n                                fontSize: '13px'\n                            }\n                        }\n                    },\n                    {\n                        name: 'Ground profile',\n                        type: 'areaspline',\n                        color: '#9d7353',\n                        data: groundProfile,\n                    },\n                    {\n                        name: 'Corra Linn Dam',\n                        type: 'area',\n                        color: '#ccccccff',\n                        data: [\n                            [0.03, 1699],\n                            [0.06, 1754],\n                            [0.15, 1754],\n                            [0.15, 1699],\n                        ]\n                    }\n                ],\n                xAxis: {\n                    labels: {\n                        enabled: false\n                    },\n                    tickLength: 0,\n                },\n                yAxis: {\n                    min: 1700,\n                    max: 1760,\n                    title: {\n                        text: `Elevation (${unitSystem.distance.symbol})`\n                    },\n                    labels: {\n                        formatter: function() {\n                            const value = this.value * unitSystem.distance.scale;\n                            return parseFloat(value.toFixed(1));\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n</script>\n\n<style scoped>\n.water-profile-container {\n    position: relative;\n}\n</style>","import { reactive } from 'vue';\n\nfunction LocationMarker(displayText, profileChartOffsetTop, profileChartOffsetLeft, mapOffsetTop, mapOffsetLeft) {\n    this.displayText = displayText;\n    this.profileChartOffsetTop = profileChartOffsetTop;\n    this.profileChartOffsetLeft = profileChartOffsetLeft;\n    this.mapOffsetTop = mapOffsetTop;\n    this.mapOffsetLeft = mapOffsetLeft;\n    this.highlighted = false;\n}\n\nconst locationMarkers = reactive({\n    'dam': new LocationMarker('Corra Linn Dam', '55%', '14%', '80%', '2%'),\n    'forebay': new LocationMarker('Forebay', '51%', '24%', '71%', '6%'),\n    'narrows': new LocationMarker('Grohman Narrows', '46%', '36%', '14%', '60%'),\n    'nelson': new LocationMarker('Nelson', '48%', '50%', '40%', '85%'),\n    'kootenayLake': new LocationMarker('Kootenay Lake', '50%', '67%', '5%', '82%'),\n    'porthill': new LocationMarker('Porthill', '46%', '92%', '72%', '88%'),\n});\n\nexport default locationMarkers;","<template>\n    <div class=\"location-marker\" :class=\"{highlight: highlighted}\" :style=\"{top: offsetTop, left: offsetLeft}\">\n        {{ text }}\n    </div>\n</template>\n\n<script>\nexport default {\n    name: \"LocationMarker\",\n    props: ['offsetTop', 'offsetLeft', 'text', 'highlighted']\n}\n</script>\n\n<style scoped>\n.location-marker {\n    position: absolute;\n    cursor: default;\n    font-weight: bold;\n    /* CSS doesn't have proper text stroke. Must simulate by overlapping text shadows */\n    text-shadow:\n        -1px -1px 0 #ffffff,\n        0    -1px 0 #ffffff,\n        1px  -1px 0 #ffffff,\n        1px  0    0 #ffffff,\n        1px  1px  0 #ffffff,\n        0    1px  0 #ffffff,\n        -1px -1px 0 #ffffff,\n        -1px 0    0 #ffffff;\n    text-align: center;\n    max-width: 5em;\n    z-index: 10;\n}\n.highlight {\n    animation: glow 0.5s infinite alternate;\n}\n@keyframes glow {\n    to {\n        text-shadow: 0 0 10px #ff0000;\n    }\n}\n</style>","import { render } from \"./LocationMarker.vue?vue&type=template&id=c55a0600&scoped=true\"\nimport script from \"./LocationMarker.vue?vue&type=script&lang=js\"\nexport * from \"./LocationMarker.vue?vue&type=script&lang=js\"\n\nimport \"./LocationMarker.vue?vue&type=style&index=0&id=c55a0600&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\Victor\\\\WebstormProjects\\\\kvt\\\\Source\\\\www-src\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-c55a0600\"]])\n\nexport default __exports__","import { render } from \"./WaterProfile.vue?vue&type=template&id=6b861614&scoped=true\"\nimport script from \"./WaterProfile.vue?vue&type=script&lang=js\"\nexport * from \"./WaterProfile.vue?vue&type=script&lang=js\"\n\nimport \"./WaterProfile.vue?vue&type=style&index=0&id=6b861614&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\Victor\\\\WebstormProjects\\\\kvt\\\\Source\\\\www-src\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6b861614\"]])\n\nexport default __exports__","<template>\n    <info-box class=\"control-container\">\n        <div class=\"gauge-title\">\n            What is limiting the outflow from Kootenay Lake?\n            <q-icon name=\"information\" style=\"overflow: hidden\">\n                <q-tooltip\n                    anchor=\"center right\"\n                    self=\"center left\"\n                    class=\"bg-black text-body2\"\n                    transition-show=\"fade\"\n                    transition-hide=\"fade\"\n                    max-width=\"380px\"\n                >\n                    Flow out of Kootenay Lake can be limited by Corra Linn Dam or by the Grohman Narrows maximum capacity. This indicator shows which location is limiting outflow.\n                </q-tooltip>\n            </q-icon>\n        </div>\n        <div class=\"gauge-toggle\">\n            <div class=\"gauge-toggle-indicator\" :style=\"gaugeIndicatorStyle\"></div>\n            <div class=\"gauge-toggle-top text-weight-bold\">Corra Linn Dam</div>\n            <div class=\"gauge-toggle-bottom text-weight-bold\">Grohman Narrows</div>\n            <div class=\"gauge-toggle-shadow-overlay\"></div>\n        </div>\n<!--        <div class=\"q-mt-sm footnote\">*Max outflow at dam gates: {{ damGatesOutflowRate }}</div>-->\n    </info-box>\n</template>\n\n<script>\nimport {CorraLinnGatesMaxOutflow} from \"../js/stores/kootenayConstants\";\nimport InfoBox from \"./InfoBox.vue\";\n\nexport default {\n    name: \"OutflowHydraulicControlGauge\",\n    components: {InfoBox},\n    props: ['outflowHydraulicControl', 'unitSystem'],\n    computed: {\n        gaugeIndicatorStyle() {\n            return {\n                backgroundColor: this.outflowHydraulicControl > 0 ? '#5bea51' : '#ff6200',\n                top: this.outflowHydraulicControl > 0 ? '0' : '50%'\n            }\n        },\n        damGatesOutflowRate() {\n            const flow = CorraLinnGatesMaxOutflow * this.unitSystem.flowRate.scale;\n            const symbol = this.unitSystem.flowRate.symbol;\n            return `${flow.toLocaleString(undefined, {maximumFractionDigits: 0})} ${symbol}`\n        }\n    }\n}\n</script>\n\n<style scoped>\n.control-container {\n    display: flex;\n    align-items: center;\n    width: 225px;\n    height: 95px;\n}\n.gauge-title {\n    text-align: center;\n}\n\n.gauge-toggle {\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    border-radius: 0.5em;\n    background-color: #d9d9d9;\n    color: black;\n    width: 170px;\n    overflow: hidden;\n}\n\n.gauge-toggle-indicator {\n    position: absolute;\n    z-index: 1;\n    border-radius: 0.5em;\n    box-shadow: 0 0 0.2em black;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 50%;\n    transition: top 0.5s ease, background-color 0.5s ease;\n}\n\n.gauge-toggle-top, .gauge-toggle-bottom {\n    position: relative;\n    z-index: 2;\n    flex-grow: 1;\n    text-align: center;\n    font-size: 0.85em;\n    padding: 0.2em;\n}\n\n.gauge-toggle-shadow-overlay {\n    position: absolute;\n    z-index: 3;\n    border-radius: 0.5em;\n    box-shadow: inset 0 0 0.3em black;\n    width: 100%;\n    height: 100%;\n    top: 0;\n    left: 0;\n}\n\n.footnote {\n    font-size: 0.9em;\n}\n</style>","<template>\n    <div class=\"info-box\">\n        <slot></slot>\n    </div>\n</template>\n\n<script>\nexport default {\n    name: \"InfoBox\"\n}\n</script>\n\n<style scoped>\n.info-box {\n    background: #274989;\n    color: white;\n    padding: 0.4em;\n    border-radius: 0.5em;\n}\n</style>","import { render } from \"./InfoBox.vue?vue&type=template&id=11a7b842&scoped=true\"\nimport script from \"./InfoBox.vue?vue&type=script&lang=js\"\nexport * from \"./InfoBox.vue?vue&type=script&lang=js\"\n\nimport \"./InfoBox.vue?vue&type=style&index=0&id=11a7b842&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\Victor\\\\WebstormProjects\\\\kvt\\\\Source\\\\www-src\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-11a7b842\"]])\n\nexport default __exports__","import { render } from \"./OutflowHydraulicControlGauge.vue?vue&type=template&id=e00d1136&scoped=true\"\nimport script from \"./OutflowHydraulicControlGauge.vue?vue&type=script&lang=js\"\nexport * from \"./OutflowHydraulicControlGauge.vue?vue&type=script&lang=js\"\n\nimport \"./OutflowHydraulicControlGauge.vue?vue&type=style&index=0&id=e00d1136&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\Victor\\\\WebstormProjects\\\\kvt\\\\Source\\\\www-src\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-e00d1136\"]])\n\nexport default __exports__","<template>\n    <info-box class=\"control-container\">\n        <div>\n            <div style=\"display: inline-block; width: 115px\">{{ outflowHydraulicControl > 0 ? 'Corra Linn Dam' : 'Grohman Narrows' }}</div> is limiting the outflow from<br>\n            Kootenay Lake, and Corra Linn Dam <div style=\"display: inline-block; width: 40px\">{{ narrowsHydraulicControl > 0 ? 'is' : 'is not' }}</div> changing<br>\n            how water flows through Grohman Narrows.\n            <q-icon name=\"information\" style=\"overflow: hidden\">\n                <q-tooltip\n                    anchor=\"center right\"\n                    self=\"center left\"\n                    class=\"bg-black text-body2\"\n                    transition-show=\"fade\"\n                    transition-hide=\"fade\"\n                    max-width=\"380px\"\n                >\n                    Corra Linn Dam stores water and can increase the water level through the Grohman Narrows. This text states when stored water at Corra Linn changes the way water flows through the Narrows.\n                </q-tooltip>\n            </q-icon>\n        </div>\n    </info-box>\n</template>\n\n<script>\nimport InfoBox from \"./InfoBox.vue\";\nexport default {\n    name: \"NarrowsHydraulicControl\",\n    components: {InfoBox},\n    props: ['outflowHydraulicControl', 'narrowsHydraulicControl']\n}\n</script>\n\n<style scoped>\n.control-container {\n    display: flex;\n    align-items: center;\n    text-align: center;\n    width: 350px;\n    height: 95px;\n}\n</style>","import { render } from \"./NarrowsHydraulicControl.vue?vue&type=template&id=0498f210&scoped=true\"\nimport script from \"./NarrowsHydraulicControl.vue?vue&type=script&lang=js\"\nexport * from \"./NarrowsHydraulicControl.vue?vue&type=script&lang=js\"\n\nimport \"./NarrowsHydraulicControl.vue?vue&type=style&index=0&id=0498f210&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\Victor\\\\WebstormProjects\\\\kvt\\\\Source\\\\www-src\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0498f210\"]])\n\nexport default __exports__","<template>\n    <div class=\"tutorial-step-hydrograph\" style=\"position: relative\">\n        <highchart class=\"\" :options=\"chartConfig\" ref=\"chartObj\"></highchart>\n        <div class=\"control-label corra-linn-control-label\" :style=\"{opacity: controlLabelsOpacity}\">\n            <q-icon name=\"north\" size=\"xs\"></q-icon> Corra Linn control\n        </div>\n        <div class=\"control-label grohman-narrows-control-label\" :style=\"{opacity: controlLabelsOpacity}\">\n            <q-icon name=\"south\" size=\"xs\"></q-icon> Grohman Narrows control\n        </div>\n    </div>\n</template>\n\n<script>\nimport {Chart} from 'highcharts-vue';\nimport {NarrowsControlInformationToggle} from \"../js/stores/informationToggles\";\n\nexport default {\n    name: \"Hydrograph\",\n    components: {\n        Highchart: Chart\n    },\n    props: ['height', 'year', 'data', 'cursorProgressFraction', 'unitSystem'],\n    data() {\n        return {\n            chartObj: null,\n            cursorLine: null\n        }\n    },\n    computed: {\n        preDredgingMaxElevation() {\n            return this.data.reduce((maxDatapoint, datapoint) => {\n                return datapoint.natural_lake_elev > maxDatapoint.natural_lake_elev ? datapoint : maxDatapoint;\n            }, this.data[0]);\n        },\n        hydrographSeries() {\n            return [\n                {\n                    name: 'Inflow to Lake',\n                    color: '#0782de',\n                    data: this.data.map(datapoint => {\n                        return [datapoint.date.getTime(), datapoint.inflow]\n                    }),\n                    yAxis: 0\n                },\n                {\n                    name: 'Max Grohman Narrows',\n                    color: '#000000',\n                    dashStyle: 'dash',\n                    data: this.data.map(datapoint => {\n                        return [datapoint.date.getTime(), datapoint.max_q]\n                    }),\n                    yAxis: 0\n                },\n                {\n                    name: 'Outflow from Lake',\n                    color: '#5917d5',\n                    data: this.data.map(datapoint => {\n                        return [datapoint.date.getTime(), datapoint.outflow]\n                    }),\n                    yAxis: 0\n                },\n                {\n                    name: 'Kootenay Lake Outflow Restriction',\n                    label: {\n                        enabled: false\n                    },\n                    color: '#0dab00',\n                    type: 'area',\n                    lineWidth: 0,\n                    data: this.data.map(datapoint => {\n                        return [datapoint.date.getTime(), datapoint.outflow_hydraulic_control]\n                    }),\n                    yAxis: 1,\n                    zoneAxis: 'y',\n                    zones: [\n                        {\n                            value: 0,\n                            color: '#fc771d'\n                        }\n                    ]\n                },\n                {\n                    name: 'Narrows Hydraulic Control',\n                    label: {\n                        enabled: false\n                    },\n                    color: '#0dab00',\n                    visible: NarrowsControlInformationToggle.selected,\n                    data: this.data.map(datapoint => {\n                        return [datapoint.date.getTime(), datapoint.narrows_hydraulic_control]\n                    }),\n                    yAxis: 2,\n                    zoneAxis: 'y',\n                    zones: [\n                        {\n                            value: 0,\n                            color: '#fc581d'\n                        }\n                    ],\n                    zIndex: 2,\n                }\n            ];\n        },\n        chartConfig() {\n            // We can't access component \"this\" inside label formatter function due to conflict with this.value, so\n            // must provide unit system reference here\n            const unitSystem = this.unitSystem;\n\n            return {\n                chart: {\n                    marginRight: 10,\n                    height: this.height\n                },\n                plotOptions: {\n                    series: {\n                        enableMouseTracking: false,\n                        zIndex: 2,\n                        fillOpacity: 0.33,\n                    }\n                },\n                title: {\n                    text: `Kootenay Lake Inflow and Outflow (Hydrograph)`\n                },\n                series: [...this.hydrographSeries],\n                xAxis: {\n                    type: 'datetime',\n                    title: {\n                        enabled: false\n                    },\n                    tickInterval: 1000 * 60 * 60 * 24 * 30,\n                    gridLineWidth: 1,\n                },\n                yAxis: [\n                    {\n                        height: '75%',\n                        alignTicks: false,\n                        tickInterval: 25,\n                        min: 0,\n                        max: 125,\n                        title: {\n                            text: `Flow (${unitSystem.flowRate.symbol})`\n                        },\n                        labels: {\n                            formatter: function() {\n                                const value = this.value * unitSystem.flowRate.scale;\n                                return parseFloat(value.toFixed(1));\n                            }\n                        }\n                    },\n                    {\n                        top: '75%',\n                        height: '25%',\n                        alignTicks: false,\n                        min: -0.01,\n                        max: 0.01,\n                        labels: {\n                            enabled: false\n                        },\n                        title: {\n                            enabled: false,\n                        },\n                        plotLines: [\n                            {\n                                value: 0,\n                                dashStyle: 'dash'\n                            }\n                        ]\n                    },\n                    {\n                        top: '75%',\n                        height: '25%',\n                        alignTicks: false,\n                        min: -1,\n                        max: 1,\n                        labels: {\n                            enabled: false\n                        },\n                        title: {\n                            enabled: false,\n                        }\n                    }\n                ]\n            }\n        },\n        controlLabelsOpacity() {\n            return NarrowsControlInformationToggle.selected ? 0.35 : 1;\n        }\n    },\n    watch: {\n        cursorProgressFraction(newValue) {\n            // draw cursor line ourselves instead of using Highcharts plotLines because it has performance issues\n            const chart = this.$refs.chartObj.chart;\n            const x1 = chart.plotLeft + newValue * chart.plotWidth;\n            const y1 = chart.plotTop;\n            const x2 = chart.plotLeft + newValue * chart.plotWidth;\n            const y2 = chart.plotTop + chart.plotHeight;\n\n            if (!this.cursorLine) {\n                this.cursorLine = chart.renderer.path(['M', x1, y1, 'L', x2, y2]).attr({\n                    stroke: '#757575',\n                    'stroke-width': 2\n                }).add();\n            } else {\n                this.cursorLine.attr({\n                    d: ['M', x1, y1, 'L', x2, y2]\n                });\n            }\n        }\n    }\n}\n</script>\n\n<style scoped>\n.control-label {\n    font-size: 0.8rem;\n    font-weight: bold;\n    cursor: default;\n}\n\n.control-label:hover {\n    /* hack to override vue style binding */\n    opacity: 1 !important;\n}\n\n.corra-linn-control-label {\n    position: absolute;\n    top: 74%;\n    left: 9.5%;\n    color: darkgreen;\n}\n\n.grohman-narrows-control-label {\n    position: absolute;\n    top: 80.5%;\n    left: 9.5%;\n    color: #cc4d1b;\n}\n</style>","import { render } from \"./Hydrograph.vue?vue&type=template&id=69107028&scoped=true\"\nimport script from \"./Hydrograph.vue?vue&type=script&lang=js\"\nexport * from \"./Hydrograph.vue?vue&type=script&lang=js\"\n\nimport \"./Hydrograph.vue?vue&type=style&index=0&id=69107028&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\Victor\\\\WebstormProjects\\\\kvt\\\\Source\\\\www-src\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-69107028\"]])\n\nexport default __exports__","<template>\n    <div>\n        <Highchart class=\"tutorial-step-ijc-graph\" :options=\"chartConfig\" ref=\"chartObj\" style=\"height: 100%\"></Highchart>\n        <slot></slot>\n    </div>\n</template>\n\n<script>\nimport {Chart} from 'highcharts-vue';\nimport Quasar from 'quasar/dist/quasar.umd.prod';\nimport {\n    NarrowsInformationToggle,\n    FloodInformationToggle,\n    KokaneeInformationToggle\n} from \"../js/stores/informationToggles\";\nimport utils from \"../js/utils\";\nimport {\n    PotentialFloodImpactsElevation,\n    MajorFloodImpactsElevation,\n    FloodConstructionElevation,\n    KokaneeSpawningMinWaterDepth,\n    KokaneeSpawningMaxWaterDepth,\n} from \"../js/stores/kootenayConstants\";\n\nexport default {\n    name: \"IjcGraph\",\n    components: {\n        Highchart: Chart\n    },\n    props: [\n        'scenarioMetadata',\n        'scenarioData',\n        'cursorProgressFraction',\n        'unitSystem',\n    ],\n    data() {\n        return {\n            chartObj: null\n        }\n    },\n    computed: {\n        preDredgingMaxElevation() {\n            return this.scenarioData.reduce((maxDatapoint, datapoint) => {\n                return datapoint.natural_lake_elev > maxDatapoint ? datapoint.natural_lake_elev : maxDatapoint;\n            }, this.scenarioData[0].natural_lake_elev);\n        },\n        dataSeries() {\n            return [\n                {\n                    name: 'Min/Max Lake Level 1984-2021',\n                    color: '#bbbbbb',\n                    type: 'arearange',\n                    data: this.scenarioData.map(datapoint => {\n                        return [datapoint.date.getTime(), datapoint.max_ft, datapoint.min_ft]\n                    }),\n                    zIndex: 0\n                },\n                {\n                    name: 'Lake Elevation',\n                    color: '#00c853',\n                    data: this.scenarioData.map(datapoint => {\n                        return [datapoint.date.getTime(), datapoint.lake_elev]\n                    })\n                },\n                {\n                    name: 'IJC Rule Curve',\n                    color: '#c62828',\n                    data: this.scenarioData.map(datapoint => {\n                        return [datapoint.date.getTime(), datapoint.ijc_rule_curve]\n                    })\n                },\n                {\n                    name: NarrowsInformationToggle.getName(this.unitSystem),\n                    color: Quasar.colors.getPaletteColor(NarrowsInformationToggle.quasarColorClass),\n                    data: (() => {\n                        const preDredgingDatapoint = this.scenarioData.reduce((maxDatapoint, datapoint) => {\n                            return datapoint.natural_lake_elev > maxDatapoint.natural_lake_elev ? datapoint : maxDatapoint;\n                        }, this.scenarioData[0]);\n\n                        return [[preDredgingDatapoint.date.getTime(), preDredgingDatapoint.natural_lake_elev]];\n                    })(),\n                    visible: NarrowsInformationToggle.selected,\n                    marker: {\n                        enabled: true\n                    },\n                    label: {\n                        enabled: true\n                    },\n                    dataLabels: {\n                        enabled: true,\n                        formatter: function () {\n                            return NarrowsInformationToggle.getName(this.unitSystem);\n                        }\n                    }\n                },\n                {\n                    name: 'Kokanee Fry Emergence',\n                    color: Quasar.colors.getPaletteColor(KokaneeInformationToggle.quasarColorClass),\n                    type: 'arearange',\n                    lineWidth: 0,\n                    data: (() => {\n                        const spawningMaxElevation = this.scenarioMetadata.previous_shoal_spawn_lake_elevation - KokaneeSpawningMinWaterDepth;\n                        const spawningMinElevation = this.scenarioMetadata.previous_shoal_spawn_lake_elevation - KokaneeSpawningMaxWaterDepth;\n\n                        return [\n                            [utils.createDateFromShortDate(this.scenarioMetadata.year, '02-07').getTime(), spawningMinElevation, spawningMaxElevation],\n                            [utils.createDateFromShortDate(this.scenarioMetadata.year, '03-10').getTime(), spawningMinElevation, spawningMaxElevation],\n                        ]\n                    })(),\n                    visible: KokaneeInformationToggle.selected,\n                },\n                {\n                    name: 'Kokanee Shoal Spawning',\n                    color: Quasar.colors.getPaletteColor('purple-4'),\n                    type: 'arearange',\n                    lineWidth: 0,\n                    data: (() => {\n                        const spawningCentralDatapoint = this.scenarioData.find(row => {\n                            return row.date.getTime() === utils.createDateFromShortDate(this.scenarioMetadata.year, '10-01').getTime()\n                        });\n\n                        const spawningMaxElevation = spawningCentralDatapoint.lake_elev - KokaneeSpawningMinWaterDepth;\n                        const spawningMinElevation = spawningCentralDatapoint.lake_elev - KokaneeSpawningMaxWaterDepth;\n\n                        return [\n                            [utils.createDateFromShortDate(this.scenarioMetadata.year, '09-15').getTime(), spawningMinElevation, spawningMaxElevation],\n                            [utils.createDateFromShortDate(this.scenarioMetadata.year, '10-15').getTime(), spawningMinElevation, spawningMaxElevation],\n                        ]\n                    })(),\n                    visible: KokaneeInformationToggle.selected,\n                },\n            ];\n        },\n        yPlotLines() {\n            return FloodInformationToggle.selected ? [\n                this.createFloodPlotLine('#ff9e0c', PotentialFloodImpactsElevation),\n                this.createFloodPlotLine('#ff6200', MajorFloodImpactsElevation),\n                this.createFloodPlotLine('#ff0000', FloodConstructionElevation),\n            ] : null;\n        },\n        chartConfig() {\n            // We can't access component \"this\" inside label formatter function due to conflict with this.value, so\n            // must provide unit system reference here\n            const unitSystem = this.unitSystem;\n\n            return {\n                chart: {\n                    marginRight: 10\n                },\n                plotOptions: {\n                    series: {\n                        enableMouseTracking: false,\n                        zIndex: 2,\n                        fillOpacity: 0.33,\n                    }\n                },\n                title: {\n                    text: `Kootenay Lake Level at Queen's Bay`\n                },\n                series: this.dataSeries,\n                xAxis: {\n                    type: 'datetime',\n                    title: {\n                        enabled: false\n                    },\n                    tickInterval: 1000 * 60 * 60 * 24 * 30,\n                    gridLineWidth: 1,\n                },\n                yAxis: [\n                    {\n                        min: FloodInformationToggle.selected ? undefined : 1735,\n                        softMax: FloodInformationToggle.selected ? 1761 : 1755,\n                        maxPadding: 0.01,\n                        tickPixelInterval: 40,\n                        startOnTick: !FloodInformationToggle.selected,\n                        endOnTick: !FloodInformationToggle.selected,\n                        title: {\n                            text: `Elevation (${unitSystem.distance.symbol})`\n                        },\n                        labels: {\n                            formatter: function() {\n                                const value = this.value * unitSystem.distance.scale;\n                                return parseFloat(value.toFixed(1));\n                            }\n                        },\n                        plotLines: this.yPlotLines\n                    }\n                ]\n            }\n        }\n    },\n    methods: {\n        createFloodPlotLine(color, elevation) {\n            return {\n                label: {\n                    text: utils.toLocaleStringWithUnits(elevation, this.unitSystem.distance),\n                    style: {\n                        color,\n                        fontWeight: 'bold',\n                    },\n                },\n                color,\n                dashStyle: 'Dash',\n                value: elevation,\n                width: 2,\n                zIndex: 2,\n            }\n        }\n    },\n    watch: {\n        cursorProgressFraction(newValue) {\n            // draw cursor line ourselves instead of using Highcharts plotLines because it has performance issues\n            const chart = this.$refs.chartObj.chart;\n            const x1 = chart.plotLeft + newValue * chart.plotWidth;\n            const y1 = chart.plotTop;\n            const x2 = chart.plotLeft + newValue * chart.plotWidth;\n            const y2 = chart.plotTop + chart.plotHeight;\n\n            if (!this.cursorLine) {\n                this.cursorLine = chart.renderer.path(['M', x1, y1, 'L', x2, y2]).attr({\n                    stroke: '#757575',\n                    'stroke-width': 2\n                }).add();\n            } else {\n                this.cursorLine.attr({\n                    d: ['M', x1, y1, 'L', x2, y2]\n                });\n            }\n        }\n    }\n}\n</script>\n\n<style scoped>\n\n</style>","import { render } from \"./IjcGraph.vue?vue&type=template&id=59ba5588\"\nimport script from \"./IjcGraph.vue?vue&type=script&lang=js\"\nexport * from \"./IjcGraph.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\Victor\\\\WebstormProjects\\\\kvt\\\\Source\\\\www-src\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n    <div class=\"map-container\">\n        <img class=\"map\" src=\"assets/map_small.jpg\" alt=\"Localised map of Kootenay River\">\n\n        <q-btn class=\"zoom-button\" color=\"white\" text-color=\"black\" label=\"Zoom Out\" icon=\"zoom_out\" @click=\"showLargeMap = true\"></q-btn>\n        <MapModal v-if=\"showLargeMap\" @closeMapModal=\"showLargeMap = false\"></MapModal>\n\n        <LocationMarker v-for=\"(marker, key) in locationMarkers\"\n                        :highlighted=\"marker.highlighted\"\n                        :text=\"marker.displayText\"\n                        :offset-top=\"marker.mapOffsetTop\"\n                        :offset-left=\"marker.mapOffsetLeft\"\n                        @mouseenter=\"marker.highlighted = true\"\n                        @mouseleave=\"marker.highlighted = false\">\n        </LocationMarker>\n        <!-- Kootenay Lake arrow -->\n        <Arrow class=\"marker-arrow\" size=\"65px\" rotation=\"70deg\" style=\"top: 4%; left: 92%;\"></Arrow>\n        <!-- Porthill -->\n        <Arrow class=\"marker-arrow\" size=\"65px\" rotation=\"130deg\" style=\"top: 82%; left: 92%;\"></Arrow>\n    </div>\n</template>\n\n<script>\nimport LocationMarker from \"./LocationMarker.vue\";\nimport Arrow from \"./Arrow.vue\";\n\nimport locationMarkers from \"../js/stores/locationMarkers\";\nimport MapModal from \"./MapModal.vue\";\n\nexport default {\n    name: \"DynamicMap\",\n    components: {\n        MapModal: MapModal,\n        LocationMarker: LocationMarker,\n        Arrow: Arrow,\n    },\n    data() {\n        return {\n            showLargeMap: false,\n            locationMarkers: locationMarkers\n        }\n    }\n}\n</script>\n\n<style scoped>\n.map-container {\n    position: relative;\n    margin-right: 5px;\n}\n\n.map {\n    width: 100%;\n    height: 310px;\n    object-fit: cover;\n    border-radius: 8px;\n}\n\n.zoom-button {\n    position: absolute;\n    top: 1em;\n    left: 1em;\n}\n\n.location-marker {\n  font-size: 1.2em;\n}\n</style>","<template>\n    <svg :style=\"{width: size, transform: `rotate(-90deg) rotate(${rotation})`}\" class=\"arrow\" viewBox=\"0 0 902.25 364.72\" xmlns=\"http://www.w3.org/2000/svg\">\n        <g transform=\"rotate(180 451.12 182.36)\">\n            <polygon stroke=\"white\" stroke-width=\"25\" points=\"902.25,222.99 233.18,222.99 233.18,364.72 0,182.36 233.18,0 233.18,141.73 902.25,141.73\"/>\n        </g>\n    </svg>\n</template>\n\n<script>\nexport default {\n    name: \"Arrow\",\n    props: ['size', 'rotation']\n}\n</script>\n\n<style scoped>\n.arrow {\n    position: absolute;\n}\n</style>","import { render } from \"./Arrow.vue?vue&type=template&id=71df5ec2&scoped=true\"\nimport script from \"./Arrow.vue?vue&type=script&lang=js\"\nexport * from \"./Arrow.vue?vue&type=script&lang=js\"\n\nimport \"./Arrow.vue?vue&type=style&index=0&id=71df5ec2&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\Victor\\\\WebstormProjects\\\\kvt\\\\Source\\\\www-src\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-71df5ec2\"]])\n\nexport default __exports__","<template>\n    <q-dialog :modelValue=\"true\" @hide=\"$emit('closeMapModal')\" transition-duration=\"200\">\n        <q-card class=\"map-modal\">\n            <img class=\"map\" src=\"assets/kootenay_river_watershed.jpg\" alt=\"Kooteny River Watershed\">\n            <q-btn class=\"map-modal-floating-close\" icon=\"close\" label=\"Close\" color=\"primary\" v-close-popup />\n        </q-card>\n    </q-dialog>\n</template>\n\n<script>\n\nexport default {\n    name: \"MapModal\",\n    emits: ['closeMapModal']\n}\n</script>\n\n<style scoped>\n.map-modal {\n    max-width: 90vw;\n    max-height: 90vh;\n}\n\n.map {\n    max-height: inherit;\n    max-width: inherit;\n    display: block;\n    height: auto;\n    width: auto;\n}\n\n.map-modal-floating-close {\n    position: absolute;\n    bottom: 0.5em;\n    left: 50%;\n    transform: translate(-50%);\n}\n</style>","import { render } from \"./MapModal.vue?vue&type=template&id=6ea04a0f&scoped=true\"\nimport script from \"./MapModal.vue?vue&type=script&lang=js\"\nexport * from \"./MapModal.vue?vue&type=script&lang=js\"\n\nimport \"./MapModal.vue?vue&type=style&index=0&id=6ea04a0f&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\Victor\\\\WebstormProjects\\\\kvt\\\\Source\\\\www-src\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6ea04a0f\"]])\n\nexport default __exports__","import { render } from \"./DynamicMap.vue?vue&type=template&id=2e08793d&scoped=true\"\nimport script from \"./DynamicMap.vue?vue&type=script&lang=js\"\nexport * from \"./DynamicMap.vue?vue&type=script&lang=js\"\n\nimport \"./DynamicMap.vue?vue&type=style&index=0&id=2e08793d&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\Victor\\\\WebstormProjects\\\\kvt\\\\Source\\\\www-src\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2e08793d\"]])\n\nexport default __exports__","<template>\n    <div class=\"scrubber\">\n        <div class=\"control-button q-mr-sm\">\n            <q-btn outline flat :icon=\"controlIcon\" @click=\"togglePlayback\" :name=\"null\"></q-btn>\n        </div>\n        <div class=\"slider\">\n            <q-slider\n                v-model=\"scrubberValue\"\n                v-bind=\"bindLabelProps\"\n                :min=\"min\"\n                :max=\"max\"\n            ></q-slider>\n            <slot name=\"slider-block-hook\"></slot>\n        </div>\n    </div>\n</template>\n\n<script>\nexport default {\n    name: \"Scrubber\",\n    props: {\n        min: {\n            type: Number,\n            default: 0\n        },\n        max: {\n            type: Number,\n            default: 100,\n        },\n        step: {\n            type: Number,\n            default: 1,\n        },\n        stepDelay: {\n            type: Number,\n            default: 500\n        },\n        modelValue: Number,\n        labelValue: String\n    },\n    emits: ['update:modelValue'],\n    data() {\n        return {\n            scrubberValue: this.modelValue,\n            isPlaying: false\n        }\n    },\n    computed: {\n        controlIcon() {\n            if (this.isPlaying === true) {\n                return 'pause';\n            }\n\n            if (this.isPlaying === false && this.scrubberValue === this.max) {\n                return 'replay';\n            }\n\n            return 'play_arrow';\n        },\n        bindLabelProps() {\n            if (this.labelValue !== undefined && this.labelValue !== null) {\n                return {\n                    label: true,\n                    switchLabelSide: true,\n                    labelValue: this.labelValue\n                }\n            } else {\n                return {}\n            }\n        }\n    },\n    watch: {\n        modelValue(newValue) {\n            this.scrubberValue = newValue;\n        },\n        scrubberValue(newValue) {\n            this.$emit('update:modelValue', newValue);\n        }\n    },\n    methods: {\n        togglePlayback() {\n            this.isPlaying = !this.isPlaying;\n\n            if (this.isPlaying) {\n                this.play();\n            }\n        },\n        async play() {\n            this.isPlaying = true;\n\n            if (this.scrubberValue === this.max) {\n                this.scrubberValue = this.min;\n                // give time for animation to complete\n                await new Promise(r => setTimeout(r, 200));\n            }\n\n            while (this.scrubberValue < this.max) {\n                if (!this.isPlaying) {\n                    return;\n                }\n\n                await new Promise(r => setTimeout(r, this.stepDelay));\n\n                this.scrubberValue += this.step;\n\n                if (this.scrubberValue > this.max) {\n                    this.scrubberValue = this.max;\n                }\n            }\n\n            this.isPlaying = false;\n        }\n    }\n}\n</script>\n\n<style scoped>\n.scrubber {\n    display: flex;\n    align-items: center;\n}\n\n.slider {\n    position: relative;\n    flex-grow: 1;\n    padding-top: 4px; /* fix centering misalignment */\n}\n</style>","import { render } from \"./Scrubber.vue?vue&type=template&id=21fb045a&scoped=true\"\nimport script from \"./Scrubber.vue?vue&type=script&lang=js\"\nexport * from \"./Scrubber.vue?vue&type=script&lang=js\"\n\nimport \"./Scrubber.vue?vue&type=style&index=0&id=21fb045a&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\Victor\\\\WebstormProjects\\\\kvt\\\\Source\\\\www-src\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-21fb045a\"]])\n\nexport default __exports__","<template>\n    <div class=\"tutorial-shade\">\n        <q-menu\n            class=\"tutorial-tooltip bg-green-7 text-white\"\n            no-parent-event\n            v-model=\"showTutorial\"\n            max-width=\"500px\"\n            :target=\"tutorialStepClassSelector\"\n            :anchor=\"tutorialStep.anchorOrigin\"\n            :self=\"tutorialStep.tooltipOrigin\"\n            :offset=\"tutorialStep.marginXYPixels\"\n            :transition-duration=\"0\"\n            :key=\"stepIndex\"\n        >\n            <q-item>\n                <q-item-section>\n                    <div class=\"tutorial-tooltip-contents\" v-html=\"tutorialStep.tooltipHTML\"></div>\n                </q-item-section>\n                <q-item-section side>\n                    <q-btn text-color=\"white\" outline :ripple=\"false\" @click=\"advanceTutorial\" label=\"Next\"></q-btn>\n                </q-item-section>\n            </q-item>\n        </q-menu>\n    </div>\n</template>\n\n<script>\nimport {tutorialConfig} from \"../js/stores/tutorialConfig\";\n\nexport default {\n    name: \"Tutorial\",\n    emits: ['tutorialEnded'],\n    data() {\n        return {\n            showTutorial: true,\n            tutorialConfig,\n            stepIndex: 0\n        }\n    },\n    computed: {\n        tutorialStep() {\n            return this.tutorialConfig[this.stepIndex];\n        },\n        tutorialStepClassSelector() {\n            return '.tutorial-step-' + this.tutorialStep.stepName;\n        }\n    },\n    watch: {\n        showTutorial(newValue) {\n            if (!newValue) {\n                this.endTutorial();\n            }\n        },\n        tutorialStepClassSelector(newSelector, oldSelector) {\n            // call remove before set in case next tutorial step targets the same element(s)\n            this.removeCallout(oldSelector);\n            this.setCallout(newSelector);\n        }\n    },\n    methods: {\n        setCallout(cssSelector) {\n            document.querySelectorAll(cssSelector).forEach((e) => {\n                e.classList.add('tutorial-callout');\n            })\n        },\n        removeCallout(cssSelector) {\n            document.querySelectorAll(cssSelector).forEach((e) => {\n                e.classList.remove('tutorial-callout')\n            })\n        },\n        advanceTutorial() {\n            if (this.stepIndex >= this.tutorialConfig.length - 1) {\n                this.endTutorial();\n            } else {\n                this.stepIndex++;\n            }\n        },\n        endTutorial() {\n            this.removeCallout(this.tutorialStepClassSelector);\n            this.showTutorial = false;\n            this.$emit('tutorialEnded');\n        }\n    },\n    mounted() {\n        this.setCallout(this.tutorialStepClassSelector);\n    }\n}\n</script>\n\n<style scoped>\n.tutorial-shade {\n    box-shadow: 0 0 0 9999px #0009;\n    position: absolute;\n    width: 0;\n    height: 0;\n    z-index: 999;\n}\n</style>","/**\n * Defines the tutorial sequence. When adding a tutorial step, anchor the tooltip to an element by adding a class\n * 'tutorial-step-' followed by the stepName, e.g. 'tutorial-step-hydrograph'. If multiple elements have the same\n * tutorial step class, the first one found will be used as the anchor.\n * @type {[]}\n */\nconst tutorialConfig = [\n    {\n        stepName: 'ijc-graph',\n        tooltipHTML: `\n            The top graph shows the water level of Kootenay Lake throughout the year. The red line shows the maximum allowed lake level as mandated by the International Joint commission in the 1938 Order.\n            <a href=\"https://www.ijc.org/en/klbc/who/mandate\" target=\"_blank\" rel=\"noopener noreferrer\">Learn more about the 1938 Order.</a>\n        `,\n        anchorOrigin: 'top left',\n        tooltipOrigin: 'top right',\n        marginXYPixels: [10, 0]\n    },\n    {\n        stepName: 'hydrograph',\n        tooltipHTML: `\n            The bottom Hydrograph shows the inflow into, and outflow from, Kootenay Lake throughout the year. <span class=\"text-weight-bold\">The black dotted line represents the maximum possible outflow from the lake due to the Grohman Narrows constriction</span>.\n        `,\n        anchorOrigin: 'top left',\n        tooltipOrigin: 'top right',\n        marginXYPixels: [10, 0]\n    },\n    {\n        stepName: 'hydraulic-control',\n        tooltipHTML: `\n            The Outflow Limiting Factor Gauge shows what is currently limiting outflow from the lake for the selected date: Corra Linn Dam or Grohman Narrows.\n        `,\n        anchorOrigin: 'bottom middle',\n        tooltipOrigin: 'top middle',\n        marginXYPixels: [0, 10]\n    },\n    {\n        stepName: 'water-profile',\n        tooltipHTML: `\n            The Water Profile shows water elevations for the currently selected date at several points in the Kootenay Lake system as water travels downstream, starting from Porthill, Idaho towards Corra Linn Dam.\n        `,\n        anchorOrigin: 'bottom left',\n        tooltipOrigin: 'top left',\n        marginXYPixels: [0, 10]\n    },\n    {\n        stepName: 'scrubber',\n        tooltipHTML: `\n            You can change the date on the Water Profile graph by clicking and dragging the timeline bar. Clicking on the play button will automatically progress the timeline.\n        `,\n        anchorOrigin: 'bottom left',\n        tooltipOrigin: 'bottom right',\n        marginXYPixels: [10, 0]\n    },\n    {\n        stepName: 'main-controls',\n        tooltipHTML: `\n            View data from different years using the control panel.\n        `,\n        anchorOrigin: 'bottom left',\n        tooltipOrigin: 'top left',\n        marginXYPixels: [0, 10]\n    },\n    {\n        stepName: 'info-toggles',\n        tooltipHTML: `\n            Show or hide additional information related to Kootenay Lake.\n        `,\n        anchorOrigin: 'bottom left',\n        tooltipOrigin: 'top left',\n        marginXYPixels: [0, 10]\n    }\n];\n\nexport {tutorialConfig};","import { render } from \"./Tutorial.vue?vue&type=template&id=ef200ba4&scoped=true\"\nimport script from \"./Tutorial.vue?vue&type=script&lang=js\"\nexport * from \"./Tutorial.vue?vue&type=script&lang=js\"\n\nimport \"./Tutorial.vue?vue&type=style&index=0&id=ef200ba4&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\Victor\\\\WebstormProjects\\\\kvt\\\\Source\\\\www-src\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-ef200ba4\"]])\n\nexport default __exports__","<template>\n    <div class=\"annotation-mouse-target\" @mouseenter=\"onMouseEnter\" @mouseleave=\"onMouseLeave\">\n        <div class=\"annotation-marker bg-orange-9\" :class=\"{'annotation-marker-active': showTooltip}\">\n            <Transition name=\"fade\">\n                <!-- Arrow animation does not perfectly match tooltip animation. Set tooltip animation to 400ms as a\n                bandaid fix as it's more trouble than it's worth to properly couple the animations -->\n                <div v-if=\"showTooltip\" class=\"tooltip-arrow\"></div>\n            </Transition>\n            <q-menu\n                anchor=\"top middle\"\n                self=\"bottom middle\"\n                transition-duration=\"400\"\n                max-width=\"350px\"\n                no-parent-event\n                persistent\n                class=\"bg-orange-10 text-body2 shadow-2\"\n                dark\n                ref=\"tooltip\"\n                :offset=\"[0, 15]\"\n            >\n                <q-item>\n                    <q-item-section>\n                        <div class=\"annotation-title-container\">\n                            <div class=\"annotation-title\">\n                                <slot name=\"title\"></slot>\n                            </div>\n                            <q-btn round flat dense size=\"sm\" icon=\"close\" @click=\"forceShowTooltipLatch = false\"></q-btn>\n                        </div>\n                        <div>\n                            <slot name=\"caption\"></slot>\n                        </div>\n                    </q-item-section>\n                </q-item>\n            </q-menu>\n        </div>\n    </div>\n</template>\n\n<script>\nexport default {\n    name: \"Annotation\",\n    props: {\n        // programmatical override of tooltip display state\n        forceShowTooltip: {\n            type: Boolean,\n            default: false\n        }\n    },\n    data() {\n        return {\n            // create a latch (https://en.wikipedia.org/wiki/Flip-flop_(electronics)) to allow user override of the\n            // programmatical override until the next time forceShowTooltip is changed\n            forceShowTooltipLatch: this.forceShowTooltip,\n            mouseHovered: false\n        }\n    },\n    computed: {\n        showTooltip() {\n            return this.forceShowTooltipLatch || this.mouseHovered;\n        }\n    },\n    watch: {\n        forceShowTooltip(newValue) {\n            this.forceShowTooltipLatch = newValue;\n        },\n        showTooltip(newValue) {\n            if (newValue) {\n                this.$refs.tooltip.show();\n            } else {\n                this.$refs.tooltip.hide();\n            }\n        }\n    },\n    methods: {\n        onMouseEnter() {\n            this.mouseHovered = true;\n        },\n        onMouseLeave() {\n            this.mouseHovered = false;\n        }\n    }\n}\n</script>\n\n<style scoped>\n.annotation-marker {\n    position: relative;\n    width: 11px;\n    height: 11px;\n    margin: 5px;\n    border-radius: 999px;\n}\n\n.annotation-marker-active {\n    box-shadow: 0 0 0 2px #ef6c00;\n}\n\n.annotation-title-container {\n    display: flex;\n}\n\n.annotation-title {\n    font-weight: bold;\n    flex-grow: 1;\n}\n\n.tooltip-arrow {\n    position: absolute;\n    top: -15px;\n    left: calc(50% - 8px);\n    width: 0;\n    height: 0;\n    border-left: 8px solid transparent;\n    border-right: 8px solid transparent;\n    border-top: 8px solid #e65100;\n    z-index: 10000;\n}\n</style>","import { render } from \"./Annotation.vue?vue&type=template&id=dee1a7d8&scoped=true\"\nimport script from \"./Annotation.vue?vue&type=script&lang=js\"\nexport * from \"./Annotation.vue?vue&type=script&lang=js\"\n\nimport \"./Annotation.vue?vue&type=style&index=0&id=dee1a7d8&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\Victor\\\\WebstormProjects\\\\kvt\\\\Source\\\\www-src\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-dee1a7d8\"]])\n\nexport default __exports__","<template>\n    <div class=\"credits\">\n        <a href=\"https://sytec.ca\">Built by Sytec Engineering (<span class=\"underline\">www.sytec.ca</span>)</a>\n        | v{{ appVersion }}\n    </div>\n</template>\n\n<script>\nexport default {\n    name: \"Credits\",\n    data() {\n        return {\n            appVersion\n        }\n    }\n}\n</script>\n\n<style scoped>\n.credits {\n    font-size: 0.7rem;\n    color: darkgrey;\n}\n\n.credits a {\n    color: inherit;\n    text-decoration: none;\n}\n\n.underline {\n    text-decoration: underline;\n}\n</style>","import { render } from \"./Credits.vue?vue&type=template&id=237ed6c2&scoped=true\"\nimport script from \"./Credits.vue?vue&type=script&lang=js\"\nexport * from \"./Credits.vue?vue&type=script&lang=js\"\n\nimport \"./Credits.vue?vue&type=style&index=0&id=237ed6c2&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\Victor\\\\WebstormProjects\\\\kvt\\\\Source\\\\www-src\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-237ed6c2\"]])\n\nexport default __exports__","<template>\r\n    <q-card v-if=\"visible\" class=\"shadow-6\" :style=\"{width}\">\r\n        <q-card-section>\r\n            <p class=\"text-h6\">{{utils.toLocaleStringWithUnits(constants.PotentialFloodImpactsElevation, unitSystem.distance)}}</p>\r\n            <p>\r\n                Potential flooding at some boat launch ramps and at Canada Pacific Rail Line, minimum flood scenario considered by BC Hydro.\r\n                (<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.rdck.ca/assets/Government/Documents/2023-02-16-BRD_Addenda-lr.pdf\">RDCK Kootenay Lake Flood Impact Analysis, 2023, pg 22</a>)\r\n            </p>\r\n\r\n            <p class=\"text-h6\">{{utils.toLocaleStringWithUnits(constants.MajorFloodImpactsElevation, unitSystem.distance)}}</p>\r\n            <p>\r\n                Potential flooding at multiple boat launch ramps and at the regulated dyke at Redfish, and {{utils.toLocaleStringWithUnits(1.3, unitSystem.distance)}} above the approximate peak recorded reservoir level in July 2012.\r\n                (<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.rdck.ca/assets/Government/Documents/2023-02-16-BRD_Addenda-lr.pdf\">RDCK Kootenay Lake Flood Impact Analysis, 2023, pg 22</a>)\r\n            </p>\r\n\r\n            <p class=\"text-h6\">{{utils.toLocaleStringWithUnits(constants.FloodConstructionElevation, unitSystem.distance)}}</p>\r\n            <p>\r\n                Potential flooding at Nelson Airport (<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.rdck.ca/assets/Government/Documents/2023-02-16-BRD_Addenda-lr.pdf\">RDCK Kootenay Lake Flood Impact Analysis, 2023, pg 22</a>) and/or Flood Construction Level\r\n                (<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.rdck.ca/assets/Government/Bylaws/Land~Use-Planning/2080-Floodplain_Consolidated_2695.pdf\">RDCK Floodplain Management Bylaw No. 2080</a>)\r\n            </p>\r\n        </q-card-section>\r\n        <q-separator />\r\n        <q-card-actions align=\"right\">\r\n            <q-btn flat color=\"primary\" @click=\"visible = false\"><q-icon name=\"close\"></q-icon>Hide</q-btn>\r\n        </q-card-actions>\r\n    </q-card>\r\n</template>\r\n\r\n<script>\r\nimport {PotentialFloodImpactsElevation, MajorFloodImpactsElevation, FloodConstructionElevation} from '../js/stores/kootenayConstants';\r\nimport utils from '../js/utils';\r\n\r\nexport default {\r\n    name: \"FloodRiskInfoBox\",\r\n    props: [\"unitSystem\", 'width'],\r\n    data() {\r\n        return {\r\n            visible: true\r\n        }\r\n    },\r\n    computed: {\r\n        constants() {\r\n            return {PotentialFloodImpactsElevation, MajorFloodImpactsElevation, FloodConstructionElevation}\r\n        },\r\n        utils() {\r\n            return utils;\r\n        }\r\n    }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n</style>","import { render } from \"./FloodRiskInfoBox.vue?vue&type=template&id=c054734e\"\nimport script from \"./FloodRiskInfoBox.vue?vue&type=script&lang=js\"\nexport * from \"./FloodRiskInfoBox.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\Victor\\\\WebstormProjects\\\\kvt\\\\Source\\\\www-src\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./App.vue?vue&type=template&id=6e6e7ec1&scoped=true\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport \"./App.vue?vue&type=style&index=0&id=6e6e7ec1&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\Victor\\\\WebstormProjects\\\\kvt\\\\Source\\\\www-src\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6e6e7ec1\"]])\n\nexport default __exports__","// Vue framework\nimport { createApp } from 'vue';\n\n// Quasar framework\nimport Quasar from 'quasar/dist/quasar.umd.prod';\nimport 'quasar/dist/quasar.prod.css';\nimport '../css/MaterialFonts.css';\n\nconst quasarOptions = {\n    config: {\n        loadingBar: {\n            // disable loading bar on top of page\n            skipHijack: true\n        }\n    }\n};\n\n// Highcharts library\nimport Highcharts from 'highcharts';\nimport HighchartsMore from 'highcharts/highcharts-more';\nimport SeriesLabels from 'highcharts/modules/series-label';\n\nSeriesLabels(Highcharts);\n// needed for arearange and gauge functionality\nHighchartsMore(Highcharts);\n\nHighcharts.setOptions({\n    plotOptions: {\n        series: {\n            states: {\n                inactive: {\n                    opacity: 1\n                }\n            },\n            label: {\n                onArea: false\n            },\n            marker: {\n                enabled: false\n            }\n        }\n    },\n    chart: {\n        // animation: false,\n        marginLeft: 75,\n        style: {\n            fontFamily: 'Roboto,-apple-system,Helvetica Neue,Helvetica,Arial,sans-serif'\n        },\n        spacingLeft: 0,\n        spacingRight: 0\n    },\n    title: {\n        style: {\n            fontSize: '18px',\n            fontWeight: 'bold'\n        }\n    },\n    legend: {\n        enabled: false\n    },\n    tooltip: {\n        enabled: false\n    },\n    credits: {\n        enabled: false\n    },\n    xAxis: {\n        labels: {\n            style: {\n                fontSize: '13px',\n            }\n        },\n        title: {\n            style: {\n                fontSize: '15px'\n            }\n        },\n        // set min (max) padding to 0 to make the series plot lines flush with left (right) edge of chart\n        minPadding: 0,\n        maxPadding: 0\n    },\n    yAxis: {\n        labels: {\n            style: {\n                fontSize: '13px',\n            }\n        },\n        title: {\n            style: {\n                fontSize: '15px'\n            }\n        }\n    },\n    time: {\n        timezoneOffset: new Date().getTimezoneOffset()\n    }\n})\n\n// Set axios default params to bust browser cache\nimport axios from 'axios';\naxios.defaults.params = {\n    cacheBust: Date.now()\n}\n\n// App\nimport '../css/app.css';\nimport '../css/vue-transitions.css';\nimport App from '../Vue/App.vue';\n\nconst app = createApp(App);\napp.use(Quasar, quasarOptions);\napp.mount('#app');","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/* Retrieved from https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons 2022-08-21 */\\n\\n/* fallback */\\n@font-face {\\n    font-family: 'Material Icons';\\n    font-style: normal;\\n    font-weight: 400;\\n    src: url(https://fonts.gstatic.com/s/materialicons/v138/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format('woff2');\\n}\\n/* cyrillic-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 100;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOkCnqEu92Fr1MmgVxFIzIFKw.woff2) format('woff2');\\n    unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\\n}\\n/* cyrillic */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 100;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOkCnqEu92Fr1MmgVxMIzIFKw.woff2) format('woff2');\\n    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\\n}\\n/* greek-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 100;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOkCnqEu92Fr1MmgVxEIzIFKw.woff2) format('woff2');\\n    unicode-range: U+1F00-1FFF;\\n}\\n/* greek */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 100;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOkCnqEu92Fr1MmgVxLIzIFKw.woff2) format('woff2');\\n    unicode-range: U+0370-03FF;\\n}\\n/* vietnamese */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 100;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOkCnqEu92Fr1MmgVxHIzIFKw.woff2) format('woff2');\\n    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;\\n}\\n/* latin-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 100;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOkCnqEu92Fr1MmgVxGIzIFKw.woff2) format('woff2');\\n    unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\\n}\\n/* latin */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 100;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOkCnqEu92Fr1MmgVxIIzI.woff2) format('woff2');\\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n/* cyrillic-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 300;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fCRc4EsA.woff2) format('woff2');\\n    unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\\n}\\n/* cyrillic */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 300;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fABc4EsA.woff2) format('woff2');\\n    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\\n}\\n/* greek-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 300;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fCBc4EsA.woff2) format('woff2');\\n    unicode-range: U+1F00-1FFF;\\n}\\n/* greek */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 300;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fBxc4EsA.woff2) format('woff2');\\n    unicode-range: U+0370-03FF;\\n}\\n/* vietnamese */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 300;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fCxc4EsA.woff2) format('woff2');\\n    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;\\n}\\n/* latin-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 300;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fChc4EsA.woff2) format('woff2');\\n    unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\\n}\\n/* latin */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 300;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fBBc4.woff2) format('woff2');\\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n/* cyrillic-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 400;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2');\\n    unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\\n}\\n/* cyrillic */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 400;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2');\\n    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\\n}\\n/* greek-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 400;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2');\\n    unicode-range: U+1F00-1FFF;\\n}\\n/* greek */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 400;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2');\\n    unicode-range: U+0370-03FF;\\n}\\n/* vietnamese */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 400;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2');\\n    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;\\n}\\n/* latin-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 400;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2');\\n    unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\\n}\\n/* latin */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 400;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2');\\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n/* cyrillic-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 500;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fCRc4EsA.woff2) format('woff2');\\n    unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\\n}\\n/* cyrillic */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 500;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fABc4EsA.woff2) format('woff2');\\n    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\\n}\\n/* greek-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 500;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fCBc4EsA.woff2) format('woff2');\\n    unicode-range: U+1F00-1FFF;\\n}\\n/* greek */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 500;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fBxc4EsA.woff2) format('woff2');\\n    unicode-range: U+0370-03FF;\\n}\\n/* vietnamese */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 500;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fCxc4EsA.woff2) format('woff2');\\n    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;\\n}\\n/* latin-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 500;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fChc4EsA.woff2) format('woff2');\\n    unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\\n}\\n/* latin */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 500;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fBBc4.woff2) format('woff2');\\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n/* cyrillic-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 700;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfCRc4EsA.woff2) format('woff2');\\n    unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\\n}\\n/* cyrillic */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 700;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfABc4EsA.woff2) format('woff2');\\n    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\\n}\\n/* greek-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 700;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfCBc4EsA.woff2) format('woff2');\\n    unicode-range: U+1F00-1FFF;\\n}\\n/* greek */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 700;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfBxc4EsA.woff2) format('woff2');\\n    unicode-range: U+0370-03FF;\\n}\\n/* vietnamese */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 700;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfCxc4EsA.woff2) format('woff2');\\n    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;\\n}\\n/* latin-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 700;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2) format('woff2');\\n    unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\\n}\\n/* latin */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 700;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfBBc4.woff2) format('woff2');\\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n/* cyrillic-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 900;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfCRc4EsA.woff2) format('woff2');\\n    unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\\n}\\n/* cyrillic */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 900;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfABc4EsA.woff2) format('woff2');\\n    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\\n}\\n/* greek-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 900;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfCBc4EsA.woff2) format('woff2');\\n    unicode-range: U+1F00-1FFF;\\n}\\n/* greek */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 900;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfBxc4EsA.woff2) format('woff2');\\n    unicode-range: U+0370-03FF;\\n}\\n/* vietnamese */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 900;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfCxc4EsA.woff2) format('woff2');\\n    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;\\n}\\n/* latin-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 900;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfChc4EsA.woff2) format('woff2');\\n    unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\\n}\\n/* latin */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 900;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfBBc4.woff2) format('woff2');\\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n\\n.material-icons {\\n    font-family: 'Material Icons';\\n    font-weight: normal;\\n    font-style: normal;\\n    font-size: 24px;\\n    line-height: 1;\\n    letter-spacing: normal;\\n    text-transform: none;\\n    display: inline-block;\\n    white-space: nowrap;\\n    word-wrap: normal;\\n    direction: ltr;\\n    -webkit-font-feature-settings: 'liga';\\n    -webkit-font-smoothing: antialiased;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./css/MaterialFonts.css\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\"/* Retrieved from https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons 2022-08-21 */\\n\\n/* fallback */\\n@font-face {\\n    font-family: 'Material Icons';\\n    font-style: normal;\\n    font-weight: 400;\\n    src: url(https://fonts.gstatic.com/s/materialicons/v138/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format('woff2');\\n}\\n/* cyrillic-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 100;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOkCnqEu92Fr1MmgVxFIzIFKw.woff2) format('woff2');\\n    unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\\n}\\n/* cyrillic */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 100;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOkCnqEu92Fr1MmgVxMIzIFKw.woff2) format('woff2');\\n    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\\n}\\n/* greek-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 100;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOkCnqEu92Fr1MmgVxEIzIFKw.woff2) format('woff2');\\n    unicode-range: U+1F00-1FFF;\\n}\\n/* greek */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 100;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOkCnqEu92Fr1MmgVxLIzIFKw.woff2) format('woff2');\\n    unicode-range: U+0370-03FF;\\n}\\n/* vietnamese */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 100;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOkCnqEu92Fr1MmgVxHIzIFKw.woff2) format('woff2');\\n    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;\\n}\\n/* latin-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 100;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOkCnqEu92Fr1MmgVxGIzIFKw.woff2) format('woff2');\\n    unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\\n}\\n/* latin */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 100;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOkCnqEu92Fr1MmgVxIIzI.woff2) format('woff2');\\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n/* cyrillic-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 300;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fCRc4EsA.woff2) format('woff2');\\n    unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\\n}\\n/* cyrillic */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 300;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fABc4EsA.woff2) format('woff2');\\n    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\\n}\\n/* greek-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 300;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fCBc4EsA.woff2) format('woff2');\\n    unicode-range: U+1F00-1FFF;\\n}\\n/* greek */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 300;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fBxc4EsA.woff2) format('woff2');\\n    unicode-range: U+0370-03FF;\\n}\\n/* vietnamese */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 300;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fCxc4EsA.woff2) format('woff2');\\n    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;\\n}\\n/* latin-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 300;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fChc4EsA.woff2) format('woff2');\\n    unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\\n}\\n/* latin */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 300;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fBBc4.woff2) format('woff2');\\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n/* cyrillic-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 400;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2');\\n    unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\\n}\\n/* cyrillic */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 400;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2');\\n    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\\n}\\n/* greek-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 400;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2');\\n    unicode-range: U+1F00-1FFF;\\n}\\n/* greek */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 400;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2');\\n    unicode-range: U+0370-03FF;\\n}\\n/* vietnamese */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 400;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2');\\n    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;\\n}\\n/* latin-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 400;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2');\\n    unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\\n}\\n/* latin */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 400;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2');\\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n/* cyrillic-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 500;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fCRc4EsA.woff2) format('woff2');\\n    unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\\n}\\n/* cyrillic */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 500;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fABc4EsA.woff2) format('woff2');\\n    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\\n}\\n/* greek-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 500;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fCBc4EsA.woff2) format('woff2');\\n    unicode-range: U+1F00-1FFF;\\n}\\n/* greek */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 500;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fBxc4EsA.woff2) format('woff2');\\n    unicode-range: U+0370-03FF;\\n}\\n/* vietnamese */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 500;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fCxc4EsA.woff2) format('woff2');\\n    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;\\n}\\n/* latin-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 500;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fChc4EsA.woff2) format('woff2');\\n    unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\\n}\\n/* latin */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 500;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fBBc4.woff2) format('woff2');\\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n/* cyrillic-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 700;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfCRc4EsA.woff2) format('woff2');\\n    unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\\n}\\n/* cyrillic */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 700;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfABc4EsA.woff2) format('woff2');\\n    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\\n}\\n/* greek-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 700;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfCBc4EsA.woff2) format('woff2');\\n    unicode-range: U+1F00-1FFF;\\n}\\n/* greek */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 700;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfBxc4EsA.woff2) format('woff2');\\n    unicode-range: U+0370-03FF;\\n}\\n/* vietnamese */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 700;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfCxc4EsA.woff2) format('woff2');\\n    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;\\n}\\n/* latin-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 700;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2) format('woff2');\\n    unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\\n}\\n/* latin */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 700;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfBBc4.woff2) format('woff2');\\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n/* cyrillic-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 900;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfCRc4EsA.woff2) format('woff2');\\n    unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\\n}\\n/* cyrillic */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 900;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfABc4EsA.woff2) format('woff2');\\n    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\\n}\\n/* greek-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 900;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfCBc4EsA.woff2) format('woff2');\\n    unicode-range: U+1F00-1FFF;\\n}\\n/* greek */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 900;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfBxc4EsA.woff2) format('woff2');\\n    unicode-range: U+0370-03FF;\\n}\\n/* vietnamese */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 900;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfCxc4EsA.woff2) format('woff2');\\n    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;\\n}\\n/* latin-ext */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 900;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfChc4EsA.woff2) format('woff2');\\n    unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\\n}\\n/* latin */\\n@font-face {\\n    font-family: 'Roboto';\\n    font-style: normal;\\n    font-weight: 900;\\n    src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfBBc4.woff2) format('woff2');\\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n\\n.material-icons {\\n    font-family: 'Material Icons';\\n    font-weight: normal;\\n    font-style: normal;\\n    font-size: 24px;\\n    line-height: 1;\\n    letter-spacing: normal;\\n    text-transform: none;\\n    display: inline-block;\\n    white-space: nowrap;\\n    word-wrap: normal;\\n    direction: ltr;\\n    -webkit-font-feature-settings: 'liga';\\n    -webkit-font-smoothing: antialiased;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"body {\\n    margin: 0;\\n    padding: 0;\\n}\\n\\n#app {\\n    margin: 0 auto;\\n}\\n\\n/* fix text centering bug with Quasar buttons */\\n.q-btn {\\n    line-height: unset;\\n}\\n\\n.tutorial-callout {\\n    z-index: 1000;\\n    position: relative;\\n}\\n\\n.tutorial-tooltip-contents {\\n\\n}\\n\\n.screensize-dialog {\\n    font-size: 2em;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./css/app.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,SAAS;IACT,UAAU;AACd;;AAEA;IACI,cAAc;AAClB;;AAEA,+CAA+C;AAC/C;IACI,kBAAkB;AACtB;;AAEA;IACI,aAAa;IACb,kBAAkB;AACtB;;AAEA;;AAEA;;AAEA;IACI,cAAc;AAClB\",\"sourcesContent\":[\"body {\\n    margin: 0;\\n    padding: 0;\\n}\\n\\n#app {\\n    margin: 0 auto;\\n}\\n\\n/* fix text centering bug with Quasar buttons */\\n.q-btn {\\n    line-height: unset;\\n}\\n\\n.tutorial-callout {\\n    z-index: 1000;\\n    position: relative;\\n}\\n\\n.tutorial-tooltip-contents {\\n\\n}\\n\\n.screensize-dialog {\\n    font-size: 2em;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".fade-enter-active,\\n.fade-leave-active {\\n    transition: opacity 0.3s ease;\\n}\\n\\n.fade-enter-from,\\n.fade-leave-to {\\n    opacity: 0;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./css/vue-transitions.css\"],\"names\":[],\"mappings\":\"AAAA;;IAEI,6BAA6B;AACjC;;AAEA;;IAEI,UAAU;AACd\",\"sourcesContent\":[\".fade-enter-active,\\n.fade-leave-active {\\n    transition: opacity 0.3s ease;\\n}\\n\\n.fade-enter-from,\\n.fade-leave-to {\\n    opacity: 0;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.annotation-marker[data-v-dee1a7d8] {\\n    position: relative;\\n    width: 11px;\\n    height: 11px;\\n    margin: 5px;\\n    border-radius: 999px;\\n}\\n.annotation-marker-active[data-v-dee1a7d8] {\\n    box-shadow: 0 0 0 2px #ef6c00;\\n}\\n.annotation-title-container[data-v-dee1a7d8] {\\n    display: flex;\\n}\\n.annotation-title[data-v-dee1a7d8] {\\n    font-weight: bold;\\n    flex-grow: 1;\\n}\\n.tooltip-arrow[data-v-dee1a7d8] {\\n    position: absolute;\\n    top: -15px;\\n    left: calc(50% - 8px);\\n    width: 0;\\n    height: 0;\\n    border-left: 8px solid transparent;\\n    border-right: 8px solid transparent;\\n    border-top: 8px solid #e65100;\\n    z-index: 10000;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./Vue/Annotation.vue\"],\"names\":[],\"mappings\":\";AAqFA;IACI,kBAAkB;IAClB,WAAW;IACX,YAAY;IACZ,WAAW;IACX,oBAAoB;AACxB;AAEA;IACI,6BAA6B;AACjC;AAEA;IACI,aAAa;AACjB;AAEA;IACI,iBAAiB;IACjB,YAAY;AAChB;AAEA;IACI,kBAAkB;IAClB,UAAU;IACV,qBAAqB;IACrB,QAAQ;IACR,SAAS;IACT,kCAAkC;IAClC,mCAAmC;IACnC,6BAA6B;IAC7B,cAAc;AAClB\",\"sourcesContent\":[\"<template>\\n    <div class=\\\"annotation-mouse-target\\\" @mouseenter=\\\"onMouseEnter\\\" @mouseleave=\\\"onMouseLeave\\\">\\n        <div class=\\\"annotation-marker bg-orange-9\\\" :class=\\\"{'annotation-marker-active': showTooltip}\\\">\\n            <Transition name=\\\"fade\\\">\\n                <!-- Arrow animation does not perfectly match tooltip animation. Set tooltip animation to 400ms as a\\n                bandaid fix as it's more trouble than it's worth to properly couple the animations -->\\n                <div v-if=\\\"showTooltip\\\" class=\\\"tooltip-arrow\\\"></div>\\n            </Transition>\\n            <q-menu\\n                anchor=\\\"top middle\\\"\\n                self=\\\"bottom middle\\\"\\n                transition-duration=\\\"400\\\"\\n                max-width=\\\"350px\\\"\\n                no-parent-event\\n                persistent\\n                class=\\\"bg-orange-10 text-body2 shadow-2\\\"\\n                dark\\n                ref=\\\"tooltip\\\"\\n                :offset=\\\"[0, 15]\\\"\\n            >\\n                <q-item>\\n                    <q-item-section>\\n                        <div class=\\\"annotation-title-container\\\">\\n                            <div class=\\\"annotation-title\\\">\\n                                <slot name=\\\"title\\\"></slot>\\n                            </div>\\n                            <q-btn round flat dense size=\\\"sm\\\" icon=\\\"close\\\" @click=\\\"forceShowTooltipLatch = false\\\"></q-btn>\\n                        </div>\\n                        <div>\\n                            <slot name=\\\"caption\\\"></slot>\\n                        </div>\\n                    </q-item-section>\\n                </q-item>\\n            </q-menu>\\n        </div>\\n    </div>\\n</template>\\n\\n<script>\\nexport default {\\n    name: \\\"Annotation\\\",\\n    props: {\\n        // programmatical override of tooltip display state\\n        forceShowTooltip: {\\n            type: Boolean,\\n            default: false\\n        }\\n    },\\n    data() {\\n        return {\\n            // create a latch (https://en.wikipedia.org/wiki/Flip-flop_(electronics)) to allow user override of the\\n            // programmatical override until the next time forceShowTooltip is changed\\n            forceShowTooltipLatch: this.forceShowTooltip,\\n            mouseHovered: false\\n        }\\n    },\\n    computed: {\\n        showTooltip() {\\n            return this.forceShowTooltipLatch || this.mouseHovered;\\n        }\\n    },\\n    watch: {\\n        forceShowTooltip(newValue) {\\n            this.forceShowTooltipLatch = newValue;\\n        },\\n        showTooltip(newValue) {\\n            if (newValue) {\\n                this.$refs.tooltip.show();\\n            } else {\\n                this.$refs.tooltip.hide();\\n            }\\n        }\\n    },\\n    methods: {\\n        onMouseEnter() {\\n            this.mouseHovered = true;\\n        },\\n        onMouseLeave() {\\n            this.mouseHovered = false;\\n        }\\n    }\\n}\\n</script>\\n\\n<style scoped>\\n.annotation-marker {\\n    position: relative;\\n    width: 11px;\\n    height: 11px;\\n    margin: 5px;\\n    border-radius: 999px;\\n}\\n\\n.annotation-marker-active {\\n    box-shadow: 0 0 0 2px #ef6c00;\\n}\\n\\n.annotation-title-container {\\n    display: flex;\\n}\\n\\n.annotation-title {\\n    font-weight: bold;\\n    flex-grow: 1;\\n}\\n\\n.tooltip-arrow {\\n    position: absolute;\\n    top: -15px;\\n    left: calc(50% - 8px);\\n    width: 0;\\n    height: 0;\\n    border-left: 8px solid transparent;\\n    border-right: 8px solid transparent;\\n    border-top: 8px solid #e65100;\\n    z-index: 10000;\\n}\\n</style>\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.app-grid[data-v-6e6e7ec1] {\\n    display: grid;\\n    width: 1600px;\\n    height: 850px;\\n    grid-template-columns: 1fr 1fr;\\n    margin: 0 auto;\\n    transform-origin: top left;\\n}\\n.app-grid > div[data-v-6e6e7ec1] {\\n    margin: 0.4rem;\\n}\\n.top-left[data-v-6e6e7ec1] {\\n    display: flex;\\n}\\n.bottom-left[data-v-6e6e7ec1] {\\n    position: relative;\\n}\\n.logo-container[data-v-6e6e7ec1] {\\n    width: 140px;\\n    height: 140px;\\n}\\n.logo-image[data-v-6e6e7ec1] {\\n    height: 100%;\\n    width: auto;\\n}\\n.tutorial-btn[data-v-6e6e7ec1] {\\n    width: 8rem;\\n    border-radius: 1rem;\\n    height: 100%;\\n}\\n.control-box[data-v-6e6e7ec1] {\\n    border-radius: 1rem;\\n    padding: 0.5rem 1rem;\\n    height: 100%;\\n    background: #d6dedb;\\n}\\n.control-box > .control-box-header[data-v-6e6e7ec1] {\\n    line-height: unset;\\n    font-size: 1.4rem;\\n    text-align: center;\\n    margin: 0 0 0.6rem 0;\\n}\\n.control[data-v-6e6e7ec1] {\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n}\\n.main-controls[data-v-6e6e7ec1] {\\n    flex-grow: 1;\\n}\\n.water-profile-graph[data-v-6e6e7ec1], .hydrograph[data-v-6e6e7ec1] {\\n    display: inline-block;\\n    width: 100%;\\n}\\n.water-profile-graph[data-v-6e6e7ec1] {\\n    height: 400px;\\n    vertical-align: top;\\n}\\n.outflow-control-gauge[data-v-6e6e7ec1] {\\n    position: absolute;\\n    top: 39.5%;\\n    left: 24%;\\n}\\n.narrows-hydraulic-control[data-v-6e6e7ec1] {\\n    position: absolute;\\n    top: 39.5%;\\n    left: 54%;\\n}\\n.info-toggles-list[data-v-6e6e7ec1] {\\n    display: grid;\\n    grid-template-rows: 1fr 1fr;\\n    grid-auto-flow: column;\\n}\\n.ijc-graph[data-v-6e6e7ec1] {\\n    position: relative;\\n    height: 300px;\\n}\\n.flood-risk-info-box[data-v-6e6e7ec1] {\\n    position: absolute;\\n    top: 0;\\n    right: 100%;\\n    z-index: 20;\\n}\\n.scrubber-container[data-v-6e6e7ec1] {\\n    /* Set background color for tutorial callout */\\n    background-color: white;\\n    padding-top: 6px;\\n    padding-bottom: 6px;\\n    /* edit left and right padding to align scrubber with chart */\\n    padding-left: 11px;\\n    padding-right: 10px;\\n}\\n.slider-annotation[data-v-6e6e7ec1] {\\n    position: absolute;\\n    top: 7.5px;\\n    cursor: pointer;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./Vue/App.vue\"],\"names\":[],\"mappings\":\";AA6VA;IACI,aAAa;IACb,aAAa;IACb,aAAa;IACb,8BAA8B;IAC9B,cAAc;IACd,0BAA0B;AAC9B;AAEA;IACI,cAAc;AAClB;AAEA;IACI,aAAa;AACjB;AAEA;IACI,kBAAkB;AACtB;AAEA;IACI,YAAY;IACZ,aAAa;AACjB;AAEA;IACI,YAAY;IACZ,WAAW;AACf;AAEA;IACI,WAAW;IACX,mBAAmB;IACnB,YAAY;AAChB;AAEA;IACI,mBAAmB;IACnB,oBAAoB;IACpB,YAAY;IACZ,mBAAmB;AACvB;AAEA;IACI,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;IAClB,oBAAoB;AACxB;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,uBAAuB;AAC3B;AAEA;IACI,YAAY;AAChB;AAEA;IACI,qBAAqB;IACrB,WAAW;AACf;AAEA;IACI,aAAa;IACb,mBAAmB;AACvB;AAEA;IACI,kBAAkB;IAClB,UAAU;IACV,SAAS;AACb;AAEA;IACI,kBAAkB;IAClB,UAAU;IACV,SAAS;AACb;AAEA;IACI,aAAa;IACb,2BAA2B;IAC3B,sBAAsB;AAC1B;AAEA;IACI,kBAAkB;IAClB,aAAa;AACjB;AAEA;IACI,kBAAkB;IAClB,MAAM;IACN,WAAW;IACX,WAAW;AACf;AAEA;IACI,8CAA8C;IAC9C,uBAAuB;IACvB,gBAAgB;IAChB,mBAAmB;IACnB,6DAA6D;IAC7D,kBAAkB;IAClB,mBAAmB;AACvB;AAEA;IACI,kBAAkB;IAClB,UAAU;IACV,eAAe;AACnB\",\"sourcesContent\":[\"<template>\\n    <div id=\\\"modal-teleport-target\\\"></div>\\n    <transition name=\\\"fade\\\">\\n        <Tutorial v-if=\\\"showTutorial\\\" @tutorial-ended=\\\"showTutorial = false\\\"></Tutorial>\\n    </transition>\\n    <div class=\\\"app-grid\\\" v-if=\\\"appLoaded\\\">\\n        <div class=\\\"top-left\\\">\\n            <div class=\\\"branding q-mr-md\\\">\\n                <div class=\\\"logo-container\\\">\\n                    <a href=\\\"https://ijc.org\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">\\n                        <img src=\\\"assets/IJC_logo.jpg\\\" alt=\\\"IJC Logo\\\" class=\\\"logo-image\\\">\\n                    </a>\\n                </div>\\n            </div>\\n            <div class=\\\"tutorial-controls q-mr-md\\\">\\n                <q-btn color=\\\"green\\\" class=\\\"tutorial-btn\\\" dense padding=\\\"0rem 0rem\\\" @click=\\\"showTutorial = true\\\">\\n                    <q-icon name=\\\"help\\\" size=\\\"4.5rem\\\"></q-icon>\\n                    Instructions\\n                </q-btn>\\n            </div>\\n            <div class=\\\"control-box main-controls tutorial-step-main-controls\\\">\\n                <h2 class=\\\"control-box-header\\\">\\n                    Controls <q-btn dense outline class=\\\"q-ml-sm\\\" label=\\\"Reset\\\" @click=\\\"resetControls\\\"></q-btn>\\n                </h2>\\n                <div class=\\\"main-controls-content\\\">\\n                    <div class=\\\"control q-mb-sm\\\">\\n                        <span class=\\\"control-text\\\">Year:</span>\\n                        <q-btn-toggle\\n                            class=\\\"q-ml-sm\\\"\\n                            :model-value=\\\"scenarioSelection\\\"\\n                            @update:model-value=\\\"selectScenario\\\"\\n                            color=\\\"white\\\"\\n                            text-color=\\\"black\\\"\\n                            :options=\\\"scenarioListButtonConfig\\\"\\n                        ></q-btn-toggle>\\n                    </div>\\n                    <div class=\\\"control\\\">\\n                        <span class=\\\"control-text\\\">Units:</span>\\n                        <q-btn-toggle\\n                            class=\\\"q-ml-sm\\\"\\n                            v-model=\\\"unitSystemSelection\\\"\\n                            color=\\\"white\\\"\\n                            text-color=\\\"black\\\"\\n                            :options=\\\"[\\n                                {label: 'Customary/Imperial', value: 'imperial'},\\n                                {label: 'Metric', value: 'metric'},\\n                            ]\\\"\\n                        ></q-btn-toggle>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"top-right\\\">\\n            <div class=\\\"control-box info-toggles tutorial-step-info-toggles\\\">\\n                <h2 class=\\\"control-box-header\\\">Information Toggles</h2>\\n                <div>\\n                    <q-list class=\\\"info-toggles-list\\\">\\n                        <q-item dense v-for=\\\"informationToggle in allInformationToggles\\\" tag=\\\"label\\\">\\n                            <q-item-section side>\\n                                <q-checkbox\\n                                    keep-color\\n                                    dense\\n                                    v-model=\\\"informationToggle.selected\\\"\\n                                    :color=\\\"informationToggle.quasarColorClass\\\"\\n                                ></q-checkbox>\\n                            </q-item-section>\\n                            <q-item-section>\\n                                <q-item-label>{{ informationToggle.getName(unitSystem) }}</q-item-label>\\n                            </q-item-section>\\n                            <q-tooltip\\n                                anchor=\\\"center left\\\"\\n                                self=\\\"center right\\\"\\n                                class=\\\"bg-black text-body2\\\"\\n                                transition-show=\\\"fade\\\"\\n                                transition-hide=\\\"fade\\\"\\n                                max-width=\\\"250px\\\"\\n                            >\\n                                {{ informationToggle.tooltipText }}\\n                            </q-tooltip>\\n                        </q-item>\\n                    </q-list>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"bottom-left\\\">\\n            <water-profile\\n                class=\\\"water-profile-graph\\\"\\n                :year=\\\"scenarioMetadata.year\\\"\\n                :day-offset=\\\"scrubberDayOffset\\\"\\n                :data=\\\"selectedDayData\\\"\\n                :unit-system=\\\"unitSystem\\\"\\n            ></water-profile>\\n            <outflow-hydraulic-control-gauge\\n                :outflow-hydraulic-control=\\\"selectedDayData.outflow_hydraulic_control\\\"\\n                :unit-system=\\\"unitSystem\\\"\\n                class=\\\"outflow-control-gauge tutorial-step-hydraulic-control\\\">\\n            </outflow-hydraulic-control-gauge>\\n            <narrows-hydraulic-control\\n                v-if=\\\"narrowsControlInformationToggleSelected\\\"\\n                :outflow-hydraulic-control=\\\"selectedDayData.outflow_hydraulic_control\\\"\\n                :narrows-hydraulic-control=\\\"selectedDayData.narrows_hydraulic_control\\\"\\n                class=\\\"narrows-hydraulic-control\\\"\\n            ></narrows-hydraulic-control>\\n            <div>\\n                <dynamic-map></dynamic-map>\\n            </div>\\n        </div>\\n        <div class=\\\"bottom-right\\\">\\n            <ijc-graph\\n                class=\\\"ijc-graph\\\"\\n                :scenario-metadata=\\\"scenarioMetadata\\\"\\n                :scenario-data=\\\"scenarioData\\\"\\n                :cursorProgress-fraction=\\\"scrubberFraction\\\"\\n                :unit-system=\\\"unitSystem\\\"\\n            >\\n                <FloodRiskInfoBox\\n                    v-if=\\\"floodToggleSelected\\\"\\n                    class=\\\"flood-risk-info-box\\\"\\n                    width=\\\"450px\\\"\\n                    :unit-system=\\\"unitSystem\\\"\\n                ></FloodRiskInfoBox>\\n            </ijc-graph>\\n            <hydrograph\\n                class=\\\"hydrograph\\\"\\n                height=\\\"350px\\\"\\n                :year=\\\"scenarioMetadata.year\\\"\\n                :data=\\\"scenarioData\\\"\\n                :cursor-progress-fraction=\\\"scrubberFraction\\\"\\n                :unit-system=\\\"unitSystem\\\"\\n            ></hydrograph>\\n            <div class=\\\"scrubber-container shadow-1 tutorial-step-scrubber\\\">\\n                <scrubber\\n                    v-model.number=\\\"scrubberDayOffset\\\"\\n                    :min=\\\"0\\\"\\n                    :max=\\\"maxYearArrayIndex\\\"\\n                    :step=\\\"1\\\"\\n                    :step-delay=\\\"100\\\"\\n                    :label-value=\\\"scrubberLabel\\\"\\n                >\\n                    <template #slider-block-hook>\\n                        <annotation\\n                            v-for=\\\"annotation in timelineAnnotations\\\"\\n                            class=\\\"slider-annotation\\\"\\n                            :style=\\\"{'left': `calc(${getAnnotationOffsetFraction(annotation.date) * 100}% - 10.5px)`}\\\"\\n                            @click=\\\"setScrubberFraction(getAnnotationOffsetFraction(annotation.date))\\\"\\n                            :force-show-tooltip=\\\"annotation === highlightedAnnotation\\\"\\n                        >\\n                            <template #title>\\n                                {{ getLongDateText(annotation.date) }}\\n                            </template>\\n                            <template #caption>\\n                                {{ annotation.text }}\\n                            </template>\\n                        </annotation>\\n                    </template>\\n                </scrubber>\\n            </div>\\n            <credits class=\\\"text-right\\\" />\\n        </div>\\n    </div>\\n    <div class=\\\"loading-container\\\" v-else>\\n        <p>Fetching app data</p>\\n        <img src=\\\"assets/spinner.svg\\\" alt=\\\"Loading icon\\\" height=\\\"65\\\">\\n    </div>\\n</template>\\n\\n<script>\\nimport ScenarioStore from '../js/stores/scenario';\\nimport {\\n    NarrowsInformationToggle,\\n    FloodInformationToggle,\\n    KokaneeInformationToggle,\\n    NarrowsControlInformationToggle\\n} from '../js/stores/informationToggles';\\nimport AnnotationStore from \\\"../js/stores/annotation\\\";\\nimport utils from \\\"../js/utils\\\";\\nimport unitSystemData from \\\"../js/stores/unitSystemData\\\";\\n\\nimport WaterProfile from \\\"./WaterProfile.vue\\\";\\nimport OutflowHydraulicControlGauge from \\\"./OutflowHydraulicControlGauge.vue\\\";\\nimport NarrowsHydraulicControl from \\\"./NarrowsHydraulicControl.vue\\\";\\nimport Hydrograph from \\\"./Hydrograph.vue\\\";\\nimport IjcGraph from \\\"./IjcGraph.vue\\\";\\nimport DynamicMap from \\\"./DynamicMap.vue\\\";\\nimport Scrubber from \\\"./Scrubber.vue\\\";\\nimport Tutorial from './Tutorial.vue';\\nimport Annotation from \\\"./Annotation.vue\\\";\\nimport Credits from \\\"./Credits.vue\\\";\\nimport FloodRiskInfoBox from \\\"./FloodRiskInfoBox.vue\\\";\\n\\nexport default {\\n    name: \\\"App\\\",\\n    components: {\\n        FloodRiskInfoBox,\\n        Credits,\\n        Tutorial,\\n        Scrubber,\\n        WaterProfile,\\n        OutflowHydraulicControlGauge,\\n        NarrowsHydraulicControl,\\n        Hydrograph,\\n        IjcGraph,\\n        DynamicMap,\\n        Annotation\\n    },\\n    data() {\\n        return {\\n            // state\\n            appLoaded: false,\\n            scrubberDayOffset: 0,\\n            scenarioSelection: null,\\n            scenarioData: null,\\n            unitSystemSelection: 'imperial',\\n            showTutorial: false,\\n\\n            // static data\\n            scenarioList: null,\\n            allInformationToggles: [\\n                NarrowsInformationToggle,\\n                FloodInformationToggle,\\n                KokaneeInformationToggle,\\n                NarrowsControlInformationToggle\\n            ],\\n        }\\n    },\\n    computed: {\\n        defaultScenarioId() {\\n            const defaultScenario = this.scenarioList.filter(scenario => scenario.default)[0];\\n            return defaultScenario?.id ?? this.scenarioList[0].id;\\n        },\\n        scenarioListButtonConfig() {\\n            return this.scenarioList.map(scenario => ({\\n                label: scenario.name,\\n                value: scenario.id\\n            }));\\n        },\\n        scenarioMetadata() {\\n            return this.scenarioList.find(scenario => scenario.id === this.scenarioSelection);\\n        },\\n        selectedDayData() {\\n            return this.scenarioData[this.scrubberDayOffset];\\n        },\\n        timelineAnnotations() {\\n            return AnnotationStore.calculateAnnotations(this.scenarioData);\\n        },\\n        maxYearArrayIndex() {\\n            return utils.isLeapYear(this.scenarioMetadata.year) ? 365 : 364;\\n        },\\n        scrubberFraction() {\\n            return this.scrubberDayOffset / this.maxYearArrayIndex;\\n        },\\n        scrubberDate() {\\n            return utils.createDateFromYearOffset(this.scenarioMetadata.year, this.scrubberDayOffset);\\n        },\\n        scrubberLabel() {\\n            return utils.getLongDateText(this.scrubberDate);\\n        },\\n        highlightedAnnotation() {\\n            const daysBehind = 3;\\n            const daysAhead = 18;\\n\\n            return [...this.timelineAnnotations]\\n                .reverse()\\n                .find(annotation => {\\n                    if (annotation.date.getTime() > this.scrubberDate.getTime()) {\\n                        // scrubber ahead of annotation\\n                        return annotation.date.getTime() - this.scrubberDate.getTime() <= 1000 * 60 * 60 * 24 * daysBehind;\\n                    } else {\\n                        // scrubber behind/at annotation\\n                        return this.scrubberDate.getTime() - annotation.date.getTime() <= 1000 * 60 * 60 * 24 * daysAhead;\\n                    }\\n\\n                });\\n        },\\n        unitSystem() {\\n            return unitSystemData[this.unitSystemSelection];\\n        },\\n        narrowsControlInformationToggleSelected() {\\n            return NarrowsControlInformationToggle.selected;\\n        },\\n        floodToggleSelected() {\\n            return FloodInformationToggle.selected;\\n        }\\n    },\\n    methods: {\\n        async selectScenario(scenarioId) {\\n            try {\\n                this.scenarioData = await this.getScenario(scenarioId);\\n            } catch (error) {\\n                this.$q.notify({\\n                    type: 'negative',\\n                    message: `Unable to load scenario ${scenarioId}`\\n                });\\n                return;\\n            }\\n\\n            this.scenarioSelection = scenarioId;\\n\\n            if (this.scrubberDayOffset >= this.maxYearArrayIndex) {\\n                this.scrubberDayOffset = 0;\\n            }\\n        },\\n        async getScenarioList() {\\n            return ScenarioStore.listScenarios();\\n        },\\n        async getScenario(id) {\\n            return ScenarioStore.getScenarioData(id);\\n        },\\n        getLongDateText(date) {\\n            return utils.getLongDateText(date);\\n        },\\n        getAnnotationOffsetFraction(date) {\\n            const x1 = new Date(this.scenarioMetadata.year + '-01-01').getTime();\\n            const x2 = new Date(this.scenarioMetadata.year + '-12-31').getTime();\\n            return (date.getTime() - x1) / (x2 - x1);\\n        },\\n        setScrubberFraction(fraction) {\\n            if (fraction >= 0 && fraction <= 1) {\\n                this.scrubberDayOffset = Math.round(this.maxYearArrayIndex * fraction);\\n            } else {\\n                throw new RangeError('Scrubber fraction must be between 0 and 1');\\n            }\\n        },\\n        resetControls() {\\n            this.scrubberDayOffset = 0;\\n            this.unitSystemSelection = 'imperial';\\n            this.allInformationToggles.forEach(x => x.selected = x.initialSelection);\\n            this.selectScenario(this.defaultScenarioId);\\n        }\\n    },\\n    async mounted() {\\n        this.scenarioList = await this.getScenarioList();\\n        this.scenarioSelection = this.defaultScenarioId;\\n        this.scenarioData = await this.getScenario(this.scenarioSelection);\\n\\n        this.appLoaded = true;\\n\\n        if ((utils.deviceScreenSizeInches() ?? 999) <= 10) {\\n            this.$q.dialog({\\n                message: 'This app is optimized for screens 10 inches or larger. Please switch to a larger device for the best experience.',\\n                persistent: true,\\n                class: 'screensize-dialog'\\n            });\\n        }\\n    }\\n}\\n</script>\\n\\n<style scoped>\\n.app-grid {\\n    display: grid;\\n    width: 1600px;\\n    height: 850px;\\n    grid-template-columns: 1fr 1fr;\\n    margin: 0 auto;\\n    transform-origin: top left;\\n}\\n\\n.app-grid > div {\\n    margin: 0.4rem;\\n}\\n\\n.top-left {\\n    display: flex;\\n}\\n\\n.bottom-left {\\n    position: relative;\\n}\\n\\n.logo-container {\\n    width: 140px;\\n    height: 140px;\\n}\\n\\n.logo-image {\\n    height: 100%;\\n    width: auto;\\n}\\n\\n.tutorial-btn {\\n    width: 8rem;\\n    border-radius: 1rem;\\n    height: 100%;\\n}\\n\\n.control-box {\\n    border-radius: 1rem;\\n    padding: 0.5rem 1rem;\\n    height: 100%;\\n    background: #d6dedb;\\n}\\n\\n.control-box > .control-box-header {\\n    line-height: unset;\\n    font-size: 1.4rem;\\n    text-align: center;\\n    margin: 0 0 0.6rem 0;\\n}\\n\\n.control {\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n}\\n\\n.main-controls {\\n    flex-grow: 1;\\n}\\n\\n.water-profile-graph, .hydrograph {\\n    display: inline-block;\\n    width: 100%;\\n}\\n\\n.water-profile-graph {\\n    height: 400px;\\n    vertical-align: top;\\n}\\n\\n.outflow-control-gauge {\\n    position: absolute;\\n    top: 39.5%;\\n    left: 24%;\\n}\\n\\n.narrows-hydraulic-control {\\n    position: absolute;\\n    top: 39.5%;\\n    left: 54%;\\n}\\n\\n.info-toggles-list {\\n    display: grid;\\n    grid-template-rows: 1fr 1fr;\\n    grid-auto-flow: column;\\n}\\n\\n.ijc-graph {\\n    position: relative;\\n    height: 300px;\\n}\\n\\n.flood-risk-info-box {\\n    position: absolute;\\n    top: 0;\\n    right: 100%;\\n    z-index: 20;\\n}\\n\\n.scrubber-container {\\n    /* Set background color for tutorial callout */\\n    background-color: white;\\n    padding-top: 6px;\\n    padding-bottom: 6px;\\n    /* edit left and right padding to align scrubber with chart */\\n    padding-left: 11px;\\n    padding-right: 10px;\\n}\\n\\n.slider-annotation {\\n    position: absolute;\\n    top: 7.5px;\\n    cursor: pointer;\\n}\\n</style>\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.arrow[data-v-71df5ec2] {\\n    position: absolute;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./Vue/Arrow.vue\"],\"names\":[],\"mappings\":\";AAgBA;IACI,kBAAkB;AACtB\",\"sourcesContent\":[\"<template>\\n    <svg :style=\\\"{width: size, transform: `rotate(-90deg) rotate(${rotation})`}\\\" class=\\\"arrow\\\" viewBox=\\\"0 0 902.25 364.72\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n        <g transform=\\\"rotate(180 451.12 182.36)\\\">\\n            <polygon stroke=\\\"white\\\" stroke-width=\\\"25\\\" points=\\\"902.25,222.99 233.18,222.99 233.18,364.72 0,182.36 233.18,0 233.18,141.73 902.25,141.73\\\"/>\\n        </g>\\n    </svg>\\n</template>\\n\\n<script>\\nexport default {\\n    name: \\\"Arrow\\\",\\n    props: ['size', 'rotation']\\n}\\n</script>\\n\\n<style scoped>\\n.arrow {\\n    position: absolute;\\n}\\n</style>\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.credits[data-v-237ed6c2] {\\n    font-size: 0.7rem;\\n    color: darkgrey;\\n}\\n.credits a[data-v-237ed6c2] {\\n    color: inherit;\\n    text-decoration: none;\\n}\\n.underline[data-v-237ed6c2] {\\n    text-decoration: underline;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./Vue/Credits.vue\"],\"names\":[],\"mappings\":\";AAmBA;IACI,iBAAiB;IACjB,eAAe;AACnB;AAEA;IACI,cAAc;IACd,qBAAqB;AACzB;AAEA;IACI,0BAA0B;AAC9B\",\"sourcesContent\":[\"<template>\\n    <div class=\\\"credits\\\">\\n        <a href=\\\"https://sytec.ca\\\">Built by Sytec Engineering (<span class=\\\"underline\\\">www.sytec.ca</span>)</a>\\n        | v{{ appVersion }}\\n    </div>\\n</template>\\n\\n<script>\\nexport default {\\n    name: \\\"Credits\\\",\\n    data() {\\n        return {\\n            appVersion\\n        }\\n    }\\n}\\n</script>\\n\\n<style scoped>\\n.credits {\\n    font-size: 0.7rem;\\n    color: darkgrey;\\n}\\n\\n.credits a {\\n    color: inherit;\\n    text-decoration: none;\\n}\\n\\n.underline {\\n    text-decoration: underline;\\n}\\n</style>\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.map-container[data-v-2e08793d] {\\n    position: relative;\\n    margin-right: 5px;\\n}\\n.map[data-v-2e08793d] {\\n    width: 100%;\\n    height: 310px;\\n    object-fit: cover;\\n    border-radius: 8px;\\n}\\n.zoom-button[data-v-2e08793d] {\\n    position: absolute;\\n    top: 1em;\\n    left: 1em;\\n}\\n.location-marker[data-v-2e08793d] {\\n  font-size: 1.2em;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./Vue/DynamicMap.vue\"],\"names\":[],\"mappings\":\";AA8CA;IACI,kBAAkB;IAClB,iBAAiB;AACrB;AAEA;IACI,WAAW;IACX,aAAa;IACb,iBAAiB;IACjB,kBAAkB;AACtB;AAEA;IACI,kBAAkB;IAClB,QAAQ;IACR,SAAS;AACb;AAEA;EACE,gBAAgB;AAClB\",\"sourcesContent\":[\"<template>\\n    <div class=\\\"map-container\\\">\\n        <img class=\\\"map\\\" src=\\\"assets/map_small.jpg\\\" alt=\\\"Localised map of Kootenay River\\\">\\n\\n        <q-btn class=\\\"zoom-button\\\" color=\\\"white\\\" text-color=\\\"black\\\" label=\\\"Zoom Out\\\" icon=\\\"zoom_out\\\" @click=\\\"showLargeMap = true\\\"></q-btn>\\n        <MapModal v-if=\\\"showLargeMap\\\" @closeMapModal=\\\"showLargeMap = false\\\"></MapModal>\\n\\n        <LocationMarker v-for=\\\"(marker, key) in locationMarkers\\\"\\n                        :highlighted=\\\"marker.highlighted\\\"\\n                        :text=\\\"marker.displayText\\\"\\n                        :offset-top=\\\"marker.mapOffsetTop\\\"\\n                        :offset-left=\\\"marker.mapOffsetLeft\\\"\\n                        @mouseenter=\\\"marker.highlighted = true\\\"\\n                        @mouseleave=\\\"marker.highlighted = false\\\">\\n        </LocationMarker>\\n        <!-- Kootenay Lake arrow -->\\n        <Arrow class=\\\"marker-arrow\\\" size=\\\"65px\\\" rotation=\\\"70deg\\\" style=\\\"top: 4%; left: 92%;\\\"></Arrow>\\n        <!-- Porthill -->\\n        <Arrow class=\\\"marker-arrow\\\" size=\\\"65px\\\" rotation=\\\"130deg\\\" style=\\\"top: 82%; left: 92%;\\\"></Arrow>\\n    </div>\\n</template>\\n\\n<script>\\nimport LocationMarker from \\\"./LocationMarker.vue\\\";\\nimport Arrow from \\\"./Arrow.vue\\\";\\n\\nimport locationMarkers from \\\"../js/stores/locationMarkers\\\";\\nimport MapModal from \\\"./MapModal.vue\\\";\\n\\nexport default {\\n    name: \\\"DynamicMap\\\",\\n    components: {\\n        MapModal: MapModal,\\n        LocationMarker: LocationMarker,\\n        Arrow: Arrow,\\n    },\\n    data() {\\n        return {\\n            showLargeMap: false,\\n            locationMarkers: locationMarkers\\n        }\\n    }\\n}\\n</script>\\n\\n<style scoped>\\n.map-container {\\n    position: relative;\\n    margin-right: 5px;\\n}\\n\\n.map {\\n    width: 100%;\\n    height: 310px;\\n    object-fit: cover;\\n    border-radius: 8px;\\n}\\n\\n.zoom-button {\\n    position: absolute;\\n    top: 1em;\\n    left: 1em;\\n}\\n\\n.location-marker {\\n  font-size: 1.2em;\\n}\\n</style>\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.control-label[data-v-69107028] {\\n    font-size: 0.8rem;\\n    font-weight: bold;\\n    cursor: default;\\n}\\n.control-label[data-v-69107028]:hover {\\n    /* hack to override vue style binding */\\n    opacity: 1 !important;\\n}\\n.corra-linn-control-label[data-v-69107028] {\\n    position: absolute;\\n    top: 74%;\\n    left: 9.5%;\\n    color: darkgreen;\\n}\\n.grohman-narrows-control-label[data-v-69107028] {\\n    position: absolute;\\n    top: 80.5%;\\n    left: 9.5%;\\n    color: #cc4d1b;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./Vue/Hydrograph.vue\"],\"names\":[],\"mappings\":\";AAqNA;IACI,iBAAiB;IACjB,iBAAiB;IACjB,eAAe;AACnB;AAEA;IACI,uCAAuC;IACvC,qBAAqB;AACzB;AAEA;IACI,kBAAkB;IAClB,QAAQ;IACR,UAAU;IACV,gBAAgB;AACpB;AAEA;IACI,kBAAkB;IAClB,UAAU;IACV,UAAU;IACV,cAAc;AAClB\",\"sourcesContent\":[\"<template>\\n    <div class=\\\"tutorial-step-hydrograph\\\" style=\\\"position: relative\\\">\\n        <highchart class=\\\"\\\" :options=\\\"chartConfig\\\" ref=\\\"chartObj\\\"></highchart>\\n        <div class=\\\"control-label corra-linn-control-label\\\" :style=\\\"{opacity: controlLabelsOpacity}\\\">\\n            <q-icon name=\\\"north\\\" size=\\\"xs\\\"></q-icon> Corra Linn control\\n        </div>\\n        <div class=\\\"control-label grohman-narrows-control-label\\\" :style=\\\"{opacity: controlLabelsOpacity}\\\">\\n            <q-icon name=\\\"south\\\" size=\\\"xs\\\"></q-icon> Grohman Narrows control\\n        </div>\\n    </div>\\n</template>\\n\\n<script>\\nimport {Chart} from 'highcharts-vue';\\nimport {NarrowsControlInformationToggle} from \\\"../js/stores/informationToggles\\\";\\n\\nexport default {\\n    name: \\\"Hydrograph\\\",\\n    components: {\\n        Highchart: Chart\\n    },\\n    props: ['height', 'year', 'data', 'cursorProgressFraction', 'unitSystem'],\\n    data() {\\n        return {\\n            chartObj: null,\\n            cursorLine: null\\n        }\\n    },\\n    computed: {\\n        preDredgingMaxElevation() {\\n            return this.data.reduce((maxDatapoint, datapoint) => {\\n                return datapoint.natural_lake_elev > maxDatapoint.natural_lake_elev ? datapoint : maxDatapoint;\\n            }, this.data[0]);\\n        },\\n        hydrographSeries() {\\n            return [\\n                {\\n                    name: 'Inflow to Lake',\\n                    color: '#0782de',\\n                    data: this.data.map(datapoint => {\\n                        return [datapoint.date.getTime(), datapoint.inflow]\\n                    }),\\n                    yAxis: 0\\n                },\\n                {\\n                    name: 'Max Grohman Narrows',\\n                    color: '#000000',\\n                    dashStyle: 'dash',\\n                    data: this.data.map(datapoint => {\\n                        return [datapoint.date.getTime(), datapoint.max_q]\\n                    }),\\n                    yAxis: 0\\n                },\\n                {\\n                    name: 'Outflow from Lake',\\n                    color: '#5917d5',\\n                    data: this.data.map(datapoint => {\\n                        return [datapoint.date.getTime(), datapoint.outflow]\\n                    }),\\n                    yAxis: 0\\n                },\\n                {\\n                    name: 'Kootenay Lake Outflow Restriction',\\n                    label: {\\n                        enabled: false\\n                    },\\n                    color: '#0dab00',\\n                    type: 'area',\\n                    lineWidth: 0,\\n                    data: this.data.map(datapoint => {\\n                        return [datapoint.date.getTime(), datapoint.outflow_hydraulic_control]\\n                    }),\\n                    yAxis: 1,\\n                    zoneAxis: 'y',\\n                    zones: [\\n                        {\\n                            value: 0,\\n                            color: '#fc771d'\\n                        }\\n                    ]\\n                },\\n                {\\n                    name: 'Narrows Hydraulic Control',\\n                    label: {\\n                        enabled: false\\n                    },\\n                    color: '#0dab00',\\n                    visible: NarrowsControlInformationToggle.selected,\\n                    data: this.data.map(datapoint => {\\n                        return [datapoint.date.getTime(), datapoint.narrows_hydraulic_control]\\n                    }),\\n                    yAxis: 2,\\n                    zoneAxis: 'y',\\n                    zones: [\\n                        {\\n                            value: 0,\\n                            color: '#fc581d'\\n                        }\\n                    ],\\n                    zIndex: 2,\\n                }\\n            ];\\n        },\\n        chartConfig() {\\n            // We can't access component \\\"this\\\" inside label formatter function due to conflict with this.value, so\\n            // must provide unit system reference here\\n            const unitSystem = this.unitSystem;\\n\\n            return {\\n                chart: {\\n                    marginRight: 10,\\n                    height: this.height\\n                },\\n                plotOptions: {\\n                    series: {\\n                        enableMouseTracking: false,\\n                        zIndex: 2,\\n                        fillOpacity: 0.33,\\n                    }\\n                },\\n                title: {\\n                    text: `Kootenay Lake Inflow and Outflow (Hydrograph)`\\n                },\\n                series: [...this.hydrographSeries],\\n                xAxis: {\\n                    type: 'datetime',\\n                    title: {\\n                        enabled: false\\n                    },\\n                    tickInterval: 1000 * 60 * 60 * 24 * 30,\\n                    gridLineWidth: 1,\\n                },\\n                yAxis: [\\n                    {\\n                        height: '75%',\\n                        alignTicks: false,\\n                        tickInterval: 25,\\n                        min: 0,\\n                        max: 125,\\n                        title: {\\n                            text: `Flow (${unitSystem.flowRate.symbol})`\\n                        },\\n                        labels: {\\n                            formatter: function() {\\n                                const value = this.value * unitSystem.flowRate.scale;\\n                                return parseFloat(value.toFixed(1));\\n                            }\\n                        }\\n                    },\\n                    {\\n                        top: '75%',\\n                        height: '25%',\\n                        alignTicks: false,\\n                        min: -0.01,\\n                        max: 0.01,\\n                        labels: {\\n                            enabled: false\\n                        },\\n                        title: {\\n                            enabled: false,\\n                        },\\n                        plotLines: [\\n                            {\\n                                value: 0,\\n                                dashStyle: 'dash'\\n                            }\\n                        ]\\n                    },\\n                    {\\n                        top: '75%',\\n                        height: '25%',\\n                        alignTicks: false,\\n                        min: -1,\\n                        max: 1,\\n                        labels: {\\n                            enabled: false\\n                        },\\n                        title: {\\n                            enabled: false,\\n                        }\\n                    }\\n                ]\\n            }\\n        },\\n        controlLabelsOpacity() {\\n            return NarrowsControlInformationToggle.selected ? 0.35 : 1;\\n        }\\n    },\\n    watch: {\\n        cursorProgressFraction(newValue) {\\n            // draw cursor line ourselves instead of using Highcharts plotLines because it has performance issues\\n            const chart = this.$refs.chartObj.chart;\\n            const x1 = chart.plotLeft + newValue * chart.plotWidth;\\n            const y1 = chart.plotTop;\\n            const x2 = chart.plotLeft + newValue * chart.plotWidth;\\n            const y2 = chart.plotTop + chart.plotHeight;\\n\\n            if (!this.cursorLine) {\\n                this.cursorLine = chart.renderer.path(['M', x1, y1, 'L', x2, y2]).attr({\\n                    stroke: '#757575',\\n                    'stroke-width': 2\\n                }).add();\\n            } else {\\n                this.cursorLine.attr({\\n                    d: ['M', x1, y1, 'L', x2, y2]\\n                });\\n            }\\n        }\\n    }\\n}\\n</script>\\n\\n<style scoped>\\n.control-label {\\n    font-size: 0.8rem;\\n    font-weight: bold;\\n    cursor: default;\\n}\\n\\n.control-label:hover {\\n    /* hack to override vue style binding */\\n    opacity: 1 !important;\\n}\\n\\n.corra-linn-control-label {\\n    position: absolute;\\n    top: 74%;\\n    left: 9.5%;\\n    color: darkgreen;\\n}\\n\\n.grohman-narrows-control-label {\\n    position: absolute;\\n    top: 80.5%;\\n    left: 9.5%;\\n    color: #cc4d1b;\\n}\\n</style>\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.info-box[data-v-11a7b842] {\\n    background: #274989;\\n    color: white;\\n    padding: 0.4em;\\n    border-radius: 0.5em;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./Vue/InfoBox.vue\"],\"names\":[],\"mappings\":\";AAaA;IACI,mBAAmB;IACnB,YAAY;IACZ,cAAc;IACd,oBAAoB;AACxB\",\"sourcesContent\":[\"<template>\\n    <div class=\\\"info-box\\\">\\n        <slot></slot>\\n    </div>\\n</template>\\n\\n<script>\\nexport default {\\n    name: \\\"InfoBox\\\"\\n}\\n</script>\\n\\n<style scoped>\\n.info-box {\\n    background: #274989;\\n    color: white;\\n    padding: 0.4em;\\n    border-radius: 0.5em;\\n}\\n</style>\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.location-marker[data-v-c55a0600] {\\n    position: absolute;\\n    cursor: default;\\n    font-weight: bold;\\n    /* CSS doesn't have proper text stroke. Must simulate by overlapping text shadows */\\n    text-shadow:\\n        -1px -1px 0 #ffffff,\\n        0    -1px 0 #ffffff,\\n        1px  -1px 0 #ffffff,\\n        1px  0    0 #ffffff,\\n        1px  1px  0 #ffffff,\\n        0    1px  0 #ffffff,\\n        -1px -1px 0 #ffffff,\\n        -1px 0    0 #ffffff;\\n    text-align: center;\\n    max-width: 5em;\\n    z-index: 10;\\n}\\n.highlight[data-v-c55a0600] {\\n    animation: glow-c55a0600 0.5s infinite alternate;\\n}\\n@keyframes glow-c55a0600 {\\nto {\\n        text-shadow: 0 0 10px #ff0000;\\n}\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./Vue/LocationMarker.vue\"],\"names\":[],\"mappings\":\";AAcA;IACI,kBAAkB;IAClB,eAAe;IACf,iBAAiB;IACjB,mFAAmF;IACnF;;;;;;;;2BAQuB;IACvB,kBAAkB;IAClB,cAAc;IACd,WAAW;AACf;AACA;IACI,gDAAuC;AAC3C;AACA;AACI;QACI,6BAA6B;AACjC;AACJ\",\"sourcesContent\":[\"<template>\\n    <div class=\\\"location-marker\\\" :class=\\\"{highlight: highlighted}\\\" :style=\\\"{top: offsetTop, left: offsetLeft}\\\">\\n        {{ text }}\\n    </div>\\n</template>\\n\\n<script>\\nexport default {\\n    name: \\\"LocationMarker\\\",\\n    props: ['offsetTop', 'offsetLeft', 'text', 'highlighted']\\n}\\n</script>\\n\\n<style scoped>\\n.location-marker {\\n    position: absolute;\\n    cursor: default;\\n    font-weight: bold;\\n    /* CSS doesn't have proper text stroke. Must simulate by overlapping text shadows */\\n    text-shadow:\\n        -1px -1px 0 #ffffff,\\n        0    -1px 0 #ffffff,\\n        1px  -1px 0 #ffffff,\\n        1px  0    0 #ffffff,\\n        1px  1px  0 #ffffff,\\n        0    1px  0 #ffffff,\\n        -1px -1px 0 #ffffff,\\n        -1px 0    0 #ffffff;\\n    text-align: center;\\n    max-width: 5em;\\n    z-index: 10;\\n}\\n.highlight {\\n    animation: glow 0.5s infinite alternate;\\n}\\n@keyframes glow {\\n    to {\\n        text-shadow: 0 0 10px #ff0000;\\n    }\\n}\\n</style>\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.map-modal[data-v-6ea04a0f] {\\n    max-width: 90vw;\\n    max-height: 90vh;\\n}\\n.map[data-v-6ea04a0f] {\\n    max-height: inherit;\\n    max-width: inherit;\\n    display: block;\\n    height: auto;\\n    width: auto;\\n}\\n.map-modal-floating-close[data-v-6ea04a0f] {\\n    position: absolute;\\n    bottom: 0.5em;\\n    left: 50%;\\n    transform: translate(-50%);\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./Vue/MapModal.vue\"],\"names\":[],\"mappings\":\";AAkBA;IACI,eAAe;IACf,gBAAgB;AACpB;AAEA;IACI,mBAAmB;IACnB,kBAAkB;IAClB,cAAc;IACd,YAAY;IACZ,WAAW;AACf;AAEA;IACI,kBAAkB;IAClB,aAAa;IACb,SAAS;IACT,0BAA0B;AAC9B\",\"sourcesContent\":[\"<template>\\n    <q-dialog :modelValue=\\\"true\\\" @hide=\\\"$emit('closeMapModal')\\\" transition-duration=\\\"200\\\">\\n        <q-card class=\\\"map-modal\\\">\\n            <img class=\\\"map\\\" src=\\\"assets/kootenay_river_watershed.jpg\\\" alt=\\\"Kooteny River Watershed\\\">\\n            <q-btn class=\\\"map-modal-floating-close\\\" icon=\\\"close\\\" label=\\\"Close\\\" color=\\\"primary\\\" v-close-popup />\\n        </q-card>\\n    </q-dialog>\\n</template>\\n\\n<script>\\n\\nexport default {\\n    name: \\\"MapModal\\\",\\n    emits: ['closeMapModal']\\n}\\n</script>\\n\\n<style scoped>\\n.map-modal {\\n    max-width: 90vw;\\n    max-height: 90vh;\\n}\\n\\n.map {\\n    max-height: inherit;\\n    max-width: inherit;\\n    display: block;\\n    height: auto;\\n    width: auto;\\n}\\n\\n.map-modal-floating-close {\\n    position: absolute;\\n    bottom: 0.5em;\\n    left: 50%;\\n    transform: translate(-50%);\\n}\\n</style>\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.control-container[data-v-0498f210] {\\n    display: flex;\\n    align-items: center;\\n    text-align: center;\\n    width: 350px;\\n    height: 95px;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./Vue/NarrowsHydraulicControl.vue\"],\"names\":[],\"mappings\":\";AAgCA;IACI,aAAa;IACb,mBAAmB;IACnB,kBAAkB;IAClB,YAAY;IACZ,YAAY;AAChB\",\"sourcesContent\":[\"<template>\\n    <info-box class=\\\"control-container\\\">\\n        <div>\\n            <div style=\\\"display: inline-block; width: 115px\\\">{{ outflowHydraulicControl > 0 ? 'Corra Linn Dam' : 'Grohman Narrows' }}</div> is limiting the outflow from<br>\\n            Kootenay Lake, and Corra Linn Dam <div style=\\\"display: inline-block; width: 40px\\\">{{ narrowsHydraulicControl > 0 ? 'is' : 'is not' }}</div> changing<br>\\n            how water flows through Grohman Narrows.\\n            <q-icon name=\\\"information\\\" style=\\\"overflow: hidden\\\">\\n                <q-tooltip\\n                    anchor=\\\"center right\\\"\\n                    self=\\\"center left\\\"\\n                    class=\\\"bg-black text-body2\\\"\\n                    transition-show=\\\"fade\\\"\\n                    transition-hide=\\\"fade\\\"\\n                    max-width=\\\"380px\\\"\\n                >\\n                    Corra Linn Dam stores water and can increase the water level through the Grohman Narrows. This text states when stored water at Corra Linn changes the way water flows through the Narrows.\\n                </q-tooltip>\\n            </q-icon>\\n        </div>\\n    </info-box>\\n</template>\\n\\n<script>\\nimport InfoBox from \\\"./InfoBox.vue\\\";\\nexport default {\\n    name: \\\"NarrowsHydraulicControl\\\",\\n    components: {InfoBox},\\n    props: ['outflowHydraulicControl', 'narrowsHydraulicControl']\\n}\\n</script>\\n\\n<style scoped>\\n.control-container {\\n    display: flex;\\n    align-items: center;\\n    text-align: center;\\n    width: 350px;\\n    height: 95px;\\n}\\n</style>\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.control-container[data-v-e00d1136] {\\n    display: flex;\\n    align-items: center;\\n    width: 225px;\\n    height: 95px;\\n}\\n.gauge-title[data-v-e00d1136] {\\n    text-align: center;\\n}\\n.gauge-toggle[data-v-e00d1136] {\\n    position: relative;\\n    display: flex;\\n    flex-direction: column;\\n    border-radius: 0.5em;\\n    background-color: #d9d9d9;\\n    color: black;\\n    width: 170px;\\n    overflow: hidden;\\n}\\n.gauge-toggle-indicator[data-v-e00d1136] {\\n    position: absolute;\\n    z-index: 1;\\n    border-radius: 0.5em;\\n    box-shadow: 0 0 0.2em black;\\n    top: 0;\\n    left: 0;\\n    width: 100%;\\n    height: 50%;\\n    transition: top 0.5s ease, background-color 0.5s ease;\\n}\\n.gauge-toggle-top[data-v-e00d1136], .gauge-toggle-bottom[data-v-e00d1136] {\\n    position: relative;\\n    z-index: 2;\\n    flex-grow: 1;\\n    text-align: center;\\n    font-size: 0.85em;\\n    padding: 0.2em;\\n}\\n.gauge-toggle-shadow-overlay[data-v-e00d1136] {\\n    position: absolute;\\n    z-index: 3;\\n    border-radius: 0.5em;\\n    box-shadow: inset 0 0 0.3em black;\\n    width: 100%;\\n    height: 100%;\\n    top: 0;\\n    left: 0;\\n}\\n.footnote[data-v-e00d1136] {\\n    font-size: 0.9em;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./Vue/OutflowHydraulicControlGauge.vue\"],\"names\":[],\"mappings\":\";AAoDA;IACI,aAAa;IACb,mBAAmB;IACnB,YAAY;IACZ,YAAY;AAChB;AACA;IACI,kBAAkB;AACtB;AAEA;IACI,kBAAkB;IAClB,aAAa;IACb,sBAAsB;IACtB,oBAAoB;IACpB,yBAAyB;IACzB,YAAY;IACZ,YAAY;IACZ,gBAAgB;AACpB;AAEA;IACI,kBAAkB;IAClB,UAAU;IACV,oBAAoB;IACpB,2BAA2B;IAC3B,MAAM;IACN,OAAO;IACP,WAAW;IACX,WAAW;IACX,qDAAqD;AACzD;AAEA;IACI,kBAAkB;IAClB,UAAU;IACV,YAAY;IACZ,kBAAkB;IAClB,iBAAiB;IACjB,cAAc;AAClB;AAEA;IACI,kBAAkB;IAClB,UAAU;IACV,oBAAoB;IACpB,iCAAiC;IACjC,WAAW;IACX,YAAY;IACZ,MAAM;IACN,OAAO;AACX;AAEA;IACI,gBAAgB;AACpB\",\"sourcesContent\":[\"<template>\\n    <info-box class=\\\"control-container\\\">\\n        <div class=\\\"gauge-title\\\">\\n            What is limiting the outflow from Kootenay Lake?\\n            <q-icon name=\\\"information\\\" style=\\\"overflow: hidden\\\">\\n                <q-tooltip\\n                    anchor=\\\"center right\\\"\\n                    self=\\\"center left\\\"\\n                    class=\\\"bg-black text-body2\\\"\\n                    transition-show=\\\"fade\\\"\\n                    transition-hide=\\\"fade\\\"\\n                    max-width=\\\"380px\\\"\\n                >\\n                    Flow out of Kootenay Lake can be limited by Corra Linn Dam or by the Grohman Narrows maximum capacity. This indicator shows which location is limiting outflow.\\n                </q-tooltip>\\n            </q-icon>\\n        </div>\\n        <div class=\\\"gauge-toggle\\\">\\n            <div class=\\\"gauge-toggle-indicator\\\" :style=\\\"gaugeIndicatorStyle\\\"></div>\\n            <div class=\\\"gauge-toggle-top text-weight-bold\\\">Corra Linn Dam</div>\\n            <div class=\\\"gauge-toggle-bottom text-weight-bold\\\">Grohman Narrows</div>\\n            <div class=\\\"gauge-toggle-shadow-overlay\\\"></div>\\n        </div>\\n<!--        <div class=\\\"q-mt-sm footnote\\\">*Max outflow at dam gates: {{ damGatesOutflowRate }}</div>-->\\n    </info-box>\\n</template>\\n\\n<script>\\nimport {CorraLinnGatesMaxOutflow} from \\\"../js/stores/kootenayConstants\\\";\\nimport InfoBox from \\\"./InfoBox.vue\\\";\\n\\nexport default {\\n    name: \\\"OutflowHydraulicControlGauge\\\",\\n    components: {InfoBox},\\n    props: ['outflowHydraulicControl', 'unitSystem'],\\n    computed: {\\n        gaugeIndicatorStyle() {\\n            return {\\n                backgroundColor: this.outflowHydraulicControl > 0 ? '#5bea51' : '#ff6200',\\n                top: this.outflowHydraulicControl > 0 ? '0' : '50%'\\n            }\\n        },\\n        damGatesOutflowRate() {\\n            const flow = CorraLinnGatesMaxOutflow * this.unitSystem.flowRate.scale;\\n            const symbol = this.unitSystem.flowRate.symbol;\\n            return `${flow.toLocaleString(undefined, {maximumFractionDigits: 0})} ${symbol}`\\n        }\\n    }\\n}\\n</script>\\n\\n<style scoped>\\n.control-container {\\n    display: flex;\\n    align-items: center;\\n    width: 225px;\\n    height: 95px;\\n}\\n.gauge-title {\\n    text-align: center;\\n}\\n\\n.gauge-toggle {\\n    position: relative;\\n    display: flex;\\n    flex-direction: column;\\n    border-radius: 0.5em;\\n    background-color: #d9d9d9;\\n    color: black;\\n    width: 170px;\\n    overflow: hidden;\\n}\\n\\n.gauge-toggle-indicator {\\n    position: absolute;\\n    z-index: 1;\\n    border-radius: 0.5em;\\n    box-shadow: 0 0 0.2em black;\\n    top: 0;\\n    left: 0;\\n    width: 100%;\\n    height: 50%;\\n    transition: top 0.5s ease, background-color 0.5s ease;\\n}\\n\\n.gauge-toggle-top, .gauge-toggle-bottom {\\n    position: relative;\\n    z-index: 2;\\n    flex-grow: 1;\\n    text-align: center;\\n    font-size: 0.85em;\\n    padding: 0.2em;\\n}\\n\\n.gauge-toggle-shadow-overlay {\\n    position: absolute;\\n    z-index: 3;\\n    border-radius: 0.5em;\\n    box-shadow: inset 0 0 0.3em black;\\n    width: 100%;\\n    height: 100%;\\n    top: 0;\\n    left: 0;\\n}\\n\\n.footnote {\\n    font-size: 0.9em;\\n}\\n</style>\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.scrubber[data-v-21fb045a] {\\n    display: flex;\\n    align-items: center;\\n}\\n.slider[data-v-21fb045a] {\\n    position: relative;\\n    flex-grow: 1;\\n    padding-top: 4px; /* fix centering misalignment */\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./Vue/Scrubber.vue\"],\"names\":[],\"mappings\":\";AAqHA;IACI,aAAa;IACb,mBAAmB;AACvB;AAEA;IACI,kBAAkB;IAClB,YAAY;IACZ,gBAAgB,EAAE,+BAA+B;AACrD\",\"sourcesContent\":[\"<template>\\n    <div class=\\\"scrubber\\\">\\n        <div class=\\\"control-button q-mr-sm\\\">\\n            <q-btn outline flat :icon=\\\"controlIcon\\\" @click=\\\"togglePlayback\\\" :name=\\\"null\\\"></q-btn>\\n        </div>\\n        <div class=\\\"slider\\\">\\n            <q-slider\\n                v-model=\\\"scrubberValue\\\"\\n                v-bind=\\\"bindLabelProps\\\"\\n                :min=\\\"min\\\"\\n                :max=\\\"max\\\"\\n            ></q-slider>\\n            <slot name=\\\"slider-block-hook\\\"></slot>\\n        </div>\\n    </div>\\n</template>\\n\\n<script>\\nexport default {\\n    name: \\\"Scrubber\\\",\\n    props: {\\n        min: {\\n            type: Number,\\n            default: 0\\n        },\\n        max: {\\n            type: Number,\\n            default: 100,\\n        },\\n        step: {\\n            type: Number,\\n            default: 1,\\n        },\\n        stepDelay: {\\n            type: Number,\\n            default: 500\\n        },\\n        modelValue: Number,\\n        labelValue: String\\n    },\\n    emits: ['update:modelValue'],\\n    data() {\\n        return {\\n            scrubberValue: this.modelValue,\\n            isPlaying: false\\n        }\\n    },\\n    computed: {\\n        controlIcon() {\\n            if (this.isPlaying === true) {\\n                return 'pause';\\n            }\\n\\n            if (this.isPlaying === false && this.scrubberValue === this.max) {\\n                return 'replay';\\n            }\\n\\n            return 'play_arrow';\\n        },\\n        bindLabelProps() {\\n            if (this.labelValue !== undefined && this.labelValue !== null) {\\n                return {\\n                    label: true,\\n                    switchLabelSide: true,\\n                    labelValue: this.labelValue\\n                }\\n            } else {\\n                return {}\\n            }\\n        }\\n    },\\n    watch: {\\n        modelValue(newValue) {\\n            this.scrubberValue = newValue;\\n        },\\n        scrubberValue(newValue) {\\n            this.$emit('update:modelValue', newValue);\\n        }\\n    },\\n    methods: {\\n        togglePlayback() {\\n            this.isPlaying = !this.isPlaying;\\n\\n            if (this.isPlaying) {\\n                this.play();\\n            }\\n        },\\n        async play() {\\n            this.isPlaying = true;\\n\\n            if (this.scrubberValue === this.max) {\\n                this.scrubberValue = this.min;\\n                // give time for animation to complete\\n                await new Promise(r => setTimeout(r, 200));\\n            }\\n\\n            while (this.scrubberValue < this.max) {\\n                if (!this.isPlaying) {\\n                    return;\\n                }\\n\\n                await new Promise(r => setTimeout(r, this.stepDelay));\\n\\n                this.scrubberValue += this.step;\\n\\n                if (this.scrubberValue > this.max) {\\n                    this.scrubberValue = this.max;\\n                }\\n            }\\n\\n            this.isPlaying = false;\\n        }\\n    }\\n}\\n</script>\\n\\n<style scoped>\\n.scrubber {\\n    display: flex;\\n    align-items: center;\\n}\\n\\n.slider {\\n    position: relative;\\n    flex-grow: 1;\\n    padding-top: 4px; /* fix centering misalignment */\\n}\\n</style>\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.tutorial-shade[data-v-ef200ba4] {\\n    box-shadow: 0 0 0 9999px #0009;\\n    position: absolute;\\n    width: 0;\\n    height: 0;\\n    z-index: 999;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./Vue/Tutorial.vue\"],\"names\":[],\"mappings\":\";AA0FA;IACI,8BAA8B;IAC9B,kBAAkB;IAClB,QAAQ;IACR,SAAS;IACT,YAAY;AAChB\",\"sourcesContent\":[\"<template>\\n    <div class=\\\"tutorial-shade\\\">\\n        <q-menu\\n            class=\\\"tutorial-tooltip bg-green-7 text-white\\\"\\n            no-parent-event\\n            v-model=\\\"showTutorial\\\"\\n            max-width=\\\"500px\\\"\\n            :target=\\\"tutorialStepClassSelector\\\"\\n            :anchor=\\\"tutorialStep.anchorOrigin\\\"\\n            :self=\\\"tutorialStep.tooltipOrigin\\\"\\n            :offset=\\\"tutorialStep.marginXYPixels\\\"\\n            :transition-duration=\\\"0\\\"\\n            :key=\\\"stepIndex\\\"\\n        >\\n            <q-item>\\n                <q-item-section>\\n                    <div class=\\\"tutorial-tooltip-contents\\\" v-html=\\\"tutorialStep.tooltipHTML\\\"></div>\\n                </q-item-section>\\n                <q-item-section side>\\n                    <q-btn text-color=\\\"white\\\" outline :ripple=\\\"false\\\" @click=\\\"advanceTutorial\\\" label=\\\"Next\\\"></q-btn>\\n                </q-item-section>\\n            </q-item>\\n        </q-menu>\\n    </div>\\n</template>\\n\\n<script>\\nimport {tutorialConfig} from \\\"../js/stores/tutorialConfig\\\";\\n\\nexport default {\\n    name: \\\"Tutorial\\\",\\n    emits: ['tutorialEnded'],\\n    data() {\\n        return {\\n            showTutorial: true,\\n            tutorialConfig,\\n            stepIndex: 0\\n        }\\n    },\\n    computed: {\\n        tutorialStep() {\\n            return this.tutorialConfig[this.stepIndex];\\n        },\\n        tutorialStepClassSelector() {\\n            return '.tutorial-step-' + this.tutorialStep.stepName;\\n        }\\n    },\\n    watch: {\\n        showTutorial(newValue) {\\n            if (!newValue) {\\n                this.endTutorial();\\n            }\\n        },\\n        tutorialStepClassSelector(newSelector, oldSelector) {\\n            // call remove before set in case next tutorial step targets the same element(s)\\n            this.removeCallout(oldSelector);\\n            this.setCallout(newSelector);\\n        }\\n    },\\n    methods: {\\n        setCallout(cssSelector) {\\n            document.querySelectorAll(cssSelector).forEach((e) => {\\n                e.classList.add('tutorial-callout');\\n            })\\n        },\\n        removeCallout(cssSelector) {\\n            document.querySelectorAll(cssSelector).forEach((e) => {\\n                e.classList.remove('tutorial-callout')\\n            })\\n        },\\n        advanceTutorial() {\\n            if (this.stepIndex >= this.tutorialConfig.length - 1) {\\n                this.endTutorial();\\n            } else {\\n                this.stepIndex++;\\n            }\\n        },\\n        endTutorial() {\\n            this.removeCallout(this.tutorialStepClassSelector);\\n            this.showTutorial = false;\\n            this.$emit('tutorialEnded');\\n        }\\n    },\\n    mounted() {\\n        this.setCallout(this.tutorialStepClassSelector);\\n    }\\n}\\n</script>\\n\\n<style scoped>\\n.tutorial-shade {\\n    box-shadow: 0 0 0 9999px #0009;\\n    position: absolute;\\n    width: 0;\\n    height: 0;\\n    z-index: 999;\\n}\\n</style>\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.water-profile-container[data-v-6b861614] {\\n    position: relative;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./Vue/WaterProfile.vue\"],\"names\":[],\"mappings\":\";AAqJA;IACI,kBAAkB;AACtB\",\"sourcesContent\":[\"<template>\\n    <div class=\\\"water-profile-container tutorial-step-water-profile\\\">\\n        <highchart :options=\\\"chartConfig\\\" ref=\\\"chartObj\\\"></highchart>\\n        <location-marker v-for=\\\"(marker, key) in locationMarkers\\\"\\n                        :highlighted=\\\"marker.highlighted\\\"\\n                        :text=\\\"marker.displayText\\\"\\n                        :offset-top=\\\"marker.profileChartOffsetTop\\\"\\n                        :offset-left=\\\"marker.profileChartOffsetLeft\\\"\\n                        @mouseenter=\\\"marker.highlighted = true\\\"\\n                        @mouseleave=\\\"marker.highlighted = false\\\">\\n        </location-marker>\\n    </div>\\n</template>\\n\\n<script>\\nimport utils from \\\"../js/utils\\\";\\nimport locationMarkers from \\\"../js/stores/locationMarkers\\\";\\n\\nimport {Chart} from 'highcharts-vue';\\n\\nimport LocationMarker from \\\"./LocationMarker.vue\\\";\\n\\n\\nexport default {\\n    name: \\\"WaterProfile\\\",\\n    components: {\\n        Highchart: Chart,\\n        LocationMarker,\\n    },\\n    // TODO pass in display date instead of year and day offset\\n    props: ['data', 'unitSystem', 'year', 'dayOffset'],\\n    data() {\\n        return {\\n            locationMarkers,\\n        }\\n    },\\n    computed: {\\n        selectedDate() {\\n            return utils.createDateFromYearOffset(this.year, this.dayOffset);\\n        },\\n        chartConfig() {\\n            // We can't access component \\\"this\\\" inside label formatter function, so\\n            // must provide unit system reference here\\n            const unitSystem = this.unitSystem;\\n\\n            const profileSeriesData = [\\n                [0.0, 1702],\\n                [0.095, 1702],\\n                [0.1, this.data.fb_elev],\\n                [0.21, this.data.fb_elev, 'visible'],\\n                [0.25, this.data.fb_elev],\\n                [0.35, this.data.nelson_elev],\\n                [0.48, this.data.nelson_elev, 'visible'],\\n                [0.68, this.data.lake_elev, 'visible'],\\n                [1.0, this.data.porthill_elev, 'visible']\\n            ];\\n            const groundProfile = [\\n                [0.1, 1733],\\n                [0.24, 1733],\\n                [0.35, 1738.5],\\n                [0.4, 1737],\\n                [0.7, 1734],\\n                [1.0, 1740]\\n            ]\\n\\n            return {\\n                chart: {\\n                    animation: false,\\n                    marginRight: 5,\\n                },\\n                plotOptions: {\\n                    series: {\\n                        enableMouseTracking: false,\\n                        label: {\\n                            enabled: false\\n                        },\\n                        fillOpacity: 1,\\n                    }\\n                },\\n                title: {\\n                    text: 'Kootenay Lake Water Profile'\\n                },\\n                subtitle: {\\n                    text: 'on ' + utils.getLongDateText(this.selectedDate)\\n                },\\n                series: [\\n                    {\\n                        name: 'Water Profile',\\n                        type: 'areaspline',\\n                        color: '#52a3ff',\\n                        data: profileSeriesData,\\n                        keys: ['x', 'y', 'dataLabels.style.visibility'],\\n                        dataLabels: {\\n                            enabled: true,\\n                            formatter: function() {\\n                                return utils.toLocaleStringWithUnits(this.y, unitSystem.distance, {maximumFractionDigits: 2});\\n                            },\\n                            style: {\\n                                visibility: 'hidden',\\n                                color: '#52a3ff',\\n                                textOutline: '#ffffff',\\n                                fontSize: '13px'\\n                            }\\n                        }\\n                    },\\n                    {\\n                        name: 'Ground profile',\\n                        type: 'areaspline',\\n                        color: '#9d7353',\\n                        data: groundProfile,\\n                    },\\n                    {\\n                        name: 'Corra Linn Dam',\\n                        type: 'area',\\n                        color: '#ccccccff',\\n                        data: [\\n                            [0.03, 1699],\\n                            [0.06, 1754],\\n                            [0.15, 1754],\\n                            [0.15, 1699],\\n                        ]\\n                    }\\n                ],\\n                xAxis: {\\n                    labels: {\\n                        enabled: false\\n                    },\\n                    tickLength: 0,\\n                },\\n                yAxis: {\\n                    min: 1700,\\n                    max: 1760,\\n                    title: {\\n                        text: `Elevation (${unitSystem.distance.symbol})`\\n                    },\\n                    labels: {\\n                        formatter: function() {\\n                            const value = this.value * unitSystem.distance.scale;\\n                            return parseFloat(value.toFixed(1));\\n                        }\\n                    }\\n                }\\n            }\\n        }\\n    }\\n}\\n</script>\\n\\n<style scoped>\\n.water-profile-container {\\n    position: relative;\\n}\\n</style>\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!./MaterialFonts.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"703e8378\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!./MaterialFonts.css\", function() {\n     var newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!./MaterialFonts.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!./app.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"fec68a80\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!./app.css\", function() {\n     var newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!./app.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!./vue-transitions.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"15a433ec\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!./vue-transitions.css\", function() {\n     var newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!./vue-transitions.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./Annotation.vue?vue&type=style&index=0&id=dee1a7d8&scoped=true&lang=css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"29b3088d\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./Annotation.vue?vue&type=style&index=0&id=dee1a7d8&scoped=true&lang=css\", function() {\n     var newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./Annotation.vue?vue&type=style&index=0&id=dee1a7d8&scoped=true&lang=css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./App.vue?vue&type=style&index=0&id=6e6e7ec1&scoped=true&lang=css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"48cdc09c\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./App.vue?vue&type=style&index=0&id=6e6e7ec1&scoped=true&lang=css\", function() {\n     var newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./App.vue?vue&type=style&index=0&id=6e6e7ec1&scoped=true&lang=css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./Arrow.vue?vue&type=style&index=0&id=71df5ec2&scoped=true&lang=css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"4ff21161\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./Arrow.vue?vue&type=style&index=0&id=71df5ec2&scoped=true&lang=css\", function() {\n     var newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./Arrow.vue?vue&type=style&index=0&id=71df5ec2&scoped=true&lang=css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./Credits.vue?vue&type=style&index=0&id=237ed6c2&scoped=true&lang=css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"a2c45224\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./Credits.vue?vue&type=style&index=0&id=237ed6c2&scoped=true&lang=css\", function() {\n     var newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./Credits.vue?vue&type=style&index=0&id=237ed6c2&scoped=true&lang=css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./DynamicMap.vue?vue&type=style&index=0&id=2e08793d&scoped=true&lang=css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"432de778\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./DynamicMap.vue?vue&type=style&index=0&id=2e08793d&scoped=true&lang=css\", function() {\n     var newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./DynamicMap.vue?vue&type=style&index=0&id=2e08793d&scoped=true&lang=css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./Hydrograph.vue?vue&type=style&index=0&id=69107028&scoped=true&lang=css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"3493e3f7\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./Hydrograph.vue?vue&type=style&index=0&id=69107028&scoped=true&lang=css\", function() {\n     var newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./Hydrograph.vue?vue&type=style&index=0&id=69107028&scoped=true&lang=css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./InfoBox.vue?vue&type=style&index=0&id=11a7b842&scoped=true&lang=css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"07d49b1a\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./InfoBox.vue?vue&type=style&index=0&id=11a7b842&scoped=true&lang=css\", function() {\n     var newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./InfoBox.vue?vue&type=style&index=0&id=11a7b842&scoped=true&lang=css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./LocationMarker.vue?vue&type=style&index=0&id=c55a0600&scoped=true&lang=css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"7aa3295a\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./LocationMarker.vue?vue&type=style&index=0&id=c55a0600&scoped=true&lang=css\", function() {\n     var newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./LocationMarker.vue?vue&type=style&index=0&id=c55a0600&scoped=true&lang=css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./MapModal.vue?vue&type=style&index=0&id=6ea04a0f&scoped=true&lang=css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"76960997\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./MapModal.vue?vue&type=style&index=0&id=6ea04a0f&scoped=true&lang=css\", function() {\n     var newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./MapModal.vue?vue&type=style&index=0&id=6ea04a0f&scoped=true&lang=css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./NarrowsHydraulicControl.vue?vue&type=style&index=0&id=0498f210&scoped=true&lang=css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"6a6c2780\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./NarrowsHydraulicControl.vue?vue&type=style&index=0&id=0498f210&scoped=true&lang=css\", function() {\n     var newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./NarrowsHydraulicControl.vue?vue&type=style&index=0&id=0498f210&scoped=true&lang=css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./OutflowHydraulicControlGauge.vue?vue&type=style&index=0&id=e00d1136&scoped=true&lang=css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"12dd3a78\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./OutflowHydraulicControlGauge.vue?vue&type=style&index=0&id=e00d1136&scoped=true&lang=css\", function() {\n     var newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./OutflowHydraulicControlGauge.vue?vue&type=style&index=0&id=e00d1136&scoped=true&lang=css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./Scrubber.vue?vue&type=style&index=0&id=21fb045a&scoped=true&lang=css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"238fde81\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./Scrubber.vue?vue&type=style&index=0&id=21fb045a&scoped=true&lang=css\", function() {\n     var newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./Scrubber.vue?vue&type=style&index=0&id=21fb045a&scoped=true&lang=css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./Tutorial.vue?vue&type=style&index=0&id=ef200ba4&scoped=true&lang=css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"6192e47a\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./Tutorial.vue?vue&type=style&index=0&id=ef200ba4&scoped=true&lang=css\", function() {\n     var newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./Tutorial.vue?vue&type=style&index=0&id=ef200ba4&scoped=true&lang=css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./WaterProfile.vue?vue&type=style&index=0&id=6b861614&scoped=true&lang=css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"157cf3b0\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./WaterProfile.vue?vue&type=style&index=0&id=6b861614&scoped=true&lang=css\", function() {\n     var newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/vue-loader/dist/index.js??ruleSet[1].rules[3].use[0]!./WaterProfile.vue?vue&type=style&index=0&id=6b861614&scoped=true&lang=css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkkvt\"] = self[\"webpackChunkkvt\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [736], () => (__webpack_require__(510)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","id","class","href","target","rel","src","alt","height","scenarioListCache","scenarioDataCache","async","Promise","resolve","reject","Date","now","header","dynamicTyping","download","complete","results","data","error","transform","value","column","SpringRiseHeuristicThresholdFt","FloodConstructionElevation","KokaneeSpawningMinWaterDepth","KokaneeSpawningMaxWaterDepth","InformationToggle","getName","tooltipText","quasarColorClass","initialSelection","this","selected","NarrowsInformationToggle","FloodInformationToggle","KokaneeInformationToggle","NarrowsControlInformationToggle","annotationConfig","text","reduceFn","scenarioData","find","datapoint","date","getMonth","getDate","outflow","max_q","reduce","maxDatapoint","lake_elev","i","length","prevDatapoint","ijc_rule_curve","nelson_elev","map","annotation","filter","sort","a","b","getLongDateText","toLocaleDateString","dateStyle","createDateFromYearOffset","year","dayOffset","setDate","createDateFromShortDate","shortDate","isLeapYear","deviceScreenSizeInches","heightDp","window","screen","widthDp","width","diagonalDp","Math","sqrt","toLocaleStringWithUnits","unitType","stringOpts","maximumFractionDigits","scale","toLocaleString","undefined","symbol","imperial","flowRate","distance","metric","LocationMarker","displayText","profileChartOffsetTop","profileChartOffsetLeft","mapOffsetTop","mapOffsetLeft","highlighted","name","props","style","offsetTop","left","offsetLeft","components","Highchart","Chart","locationMarkers","computed","selectedDate","utils","chartConfig","unitSystem","profileSeriesData","fb_elev","porthill_elev","chart","animation","marginRight","plotOptions","series","enableMouseTracking","label","enabled","fillOpacity","title","subtitle","type","color","keys","dataLabels","formatter","y","visibility","textOutline","fontSize","xAxis","labels","tickLength","yAxis","min","max","parseFloat","toFixed","options","ref","marker","key","InfoBox","gaugeIndicatorStyle","backgroundColor","outflowHydraulicControl","top","damGatesOutflowRate","flow","anchor","self","narrowsHydraulicControl","chartObj","cursorLine","preDredgingMaxElevation","natural_lake_elev","hydrographSeries","getTime","inflow","dashStyle","lineWidth","outflow_hydraulic_control","zoneAxis","zones","visible","narrows_hydraulic_control","zIndex","tickInterval","gridLineWidth","alignTicks","plotLines","controlLabelsOpacity","watch","cursorProgressFraction","newValue","$refs","x1","plotLeft","plotWidth","y1","plotTop","x2","y2","plotHeight","attr","d","renderer","path","stroke","add","size","dataSeries","max_ft","min_ft","preDredgingDatapoint","spawningMaxElevation","scenarioMetadata","previous_shoal_spawn_lake_elevation","spawningMinElevation","spawningCentralDatapoint","row","yPlotLines","createFloodPlotLine","softMax","maxPadding","tickPixelInterval","startOnTick","endOnTick","methods","elevation","fontWeight","points","rotation","viewBox","xmlns","emits","MapModal","modelValue","$emit","icon","Arrow","showLargeMap","Number","default","step","stepDelay","labelValue","String","scrubberValue","isPlaying","controlIcon","bindLabelProps","switchLabelSide","togglePlayback","play","r","setTimeout","outline","flat","tutorialConfig","stepName","tooltipHTML","anchorOrigin","tooltipOrigin","marginXYPixels","showTutorial","stepIndex","tutorialStep","tutorialStepClassSelector","endTutorial","newSelector","oldSelector","removeCallout","setCallout","cssSelector","document","querySelectorAll","forEach","e","classList","remove","advanceTutorial","mounted","offset","side","ripple","forceShowTooltip","Boolean","forceShowTooltipLatch","mouseHovered","showTooltip","tooltip","show","hide","onMouseEnter","onMouseLeave","persistent","dark","round","dense","appVersion","constants","PotentialFloodImpactsElevation","MajorFloodImpactsElevation","FloodRiskInfoBox","align","Credits","Tutorial","Scrubber","WaterProfile","OutflowHydraulicControlGauge","NarrowsHydraulicControl","Hydrograph","IjcGraph","DynamicMap","Annotation","appLoaded","scrubberDayOffset","scenarioSelection","unitSystemSelection","scenarioList","allInformationToggles","defaultScenarioId","defaultScenario","scenario","scenarioListButtonConfig","selectedDayData","timelineAnnotations","maxYearArrayIndex","scrubberFraction","scrubberDate","scrubberLabel","highlightedAnnotation","reverse","narrowsControlInformationToggleSelected","floodToggleSelected","scenarioId","getScenario","$q","notify","message","getAnnotationOffsetFraction","setScrubberFraction","fraction","RangeError","resetControls","x","selectScenario","getScenarioList","dialog","padding","informationToggle","tag","caption","states","inactive","opacity","onArea","marginLeft","fontFamily","spacingLeft","spacingRight","legend","credits","minPadding","time","timezoneOffset","getTimezoneOffset","cacheBust","createApp","App","use","config","loadingBar","skipHijack","mount","___CSS_LOADER_EXPORT___","push","module","content","__esModule","locals","exports","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","call","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","Object","every","splice","n","getter","definition","o","defineProperty","enumerable","get","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","baseURI","location","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","__webpack_exports__"],"sourceRoot":""}