calque affichant des infos QA

This commit is contained in:
Tykayn 2025-04-28 15:49:55 +02:00 committed by tykayn
parent 0f63309248
commit f19bff1953
8 changed files with 121 additions and 40 deletions

View file

@ -130,51 +130,55 @@
<h3>Types de prises</h3>
<label>
<input type="checkbox" id="filterCableAttached">
<span class="checkbox-custom"></span>
<span>Prise avec câble attaché</span>
<img class="icon-img" src="img/vending_machine.png" alt="cable">
<span>Avec câble attaché</span>
</label>
<label>
<input type="checkbox" id="filterCCS">
<span class="checkbox-custom"></span>
<!-- <span>Prise CCS</span> -->
<img class="icon-img" src="img/type2_combo.svg" alt="prise">
<span>CCS</span>
</label>
<label>
<input type="checkbox" id="filterType1">
<span class="checkbox-custom"></span>
<span>Type 1</span>
</label>
<label>
<input type="checkbox" id="filterType2">
<span class="checkbox-custom"></span>
<img class="icon-img" src="img/Type2_socket.svg" alt="prise">
<!-- <span>Prise Type 2</span> -->
<span>Type 2</span>
</label>
<label>
<input type="checkbox" id="filterType3">
<span class="checkbox-custom"></span>
<span>Type 3</span>
</label>
<label>
<input type="checkbox" id="filterDomestic">
<span class="checkbox-custom"></span>
<img class="icon-img" src="img/socket_typee.svg" alt="prise">
<!-- <span>Prise domestique</span> -->
<span>E / Domestique</span>
</label>
<label>
<input type="checkbox" id="filterChademo">
<span class="checkbox-custom"></span>
<img class="icon-img" src="img/chademo.svg" alt="prise">
<!-- <span>Prise CHAdeMO</span> -->
</label>
<label>
<input type="checkbox" id="filterType1">
<span class="checkbox-custom"></span>
<span>Prise Type 1</span>
</label>
<label>
<input type="checkbox" id="filterType3">
<span class="checkbox-custom"></span>
<span>Prise Type 3</span>
<span>CHAdeMO</span>
</label>
</div>
<hr>
<h3>Qualité des données</h3>
<label for="filterBadTags">
<input type="checkbox" id="filterBadTags">
<span class="checkbox-custom"></span>
<span>Afficher les alertes de problèmes de qualité</span>
</label>
<label>
<input type="checkbox" id="filterUnkown">
<span class="checkbox-custom"></span>

View file

@ -11,7 +11,8 @@ const lcm_config = {
filter_max_output_max: 499,
filter_max_output_default_value: 1,
filter_unknown_output: true,
display_alert_bad_tags: false,
display_restaurants_and_cafes: false,
max_possible_station_output: 499,
// Filtres pour les prises
filterCableAttached: false,

View file

@ -8,6 +8,7 @@ import lcm_config from './lcm_config.js'
import lcm_utils from './lcm_utils.js'
import lcm_color_utils from './lcm_color_utils.js'
import { sendToJOSM, createJOSMEditLink } from './lcm_editor.js'
import { valid_qa_message } from './lcm_utils.js'
let geojsondata;
let lastLatLng;
@ -246,6 +247,7 @@ function updateURLWithMapCoordinatesAndZoom() {
let all_stations_markers = L.layerGroup().addTo(map) // layer group pour tous les marqueurs
let bad_tags_markers = L.layerGroup()// layer group pour les marqueurs avec des problèmes de qualité
// let stations_much_speed_wow = L.layerGroup().addTo(map) // layer group des stations rapides
var osm = L.tileLayer(lcm_config.tileServers.osm, {
@ -680,6 +682,7 @@ function eachFeature(feature, layer, stats) {
return;
}
}
/**
* bornes sans informations, suggérer d'ajouter des tags dans OSM
*/
@ -692,7 +695,14 @@ function eachFeature(feature, layer, stats) {
// contenu de la popup
let html = `<span class="color-indication" style="background-color: ${lcm_color_utils.getColor(feature)};">${displayOutPowerGuessed}</span>
<span class="popup-content">${popupContent}</span>
<div class="popup-content">
<div class="socket-list">
${displaySocketsList(feature)}
</div>
<div class="other-infos">
${popupContent}
</div>
</div>
`
@ -796,6 +806,23 @@ function eachFeature(feature, layer, stats) {
}).addTo(all_stations_markers);
}
let badtags = lcm_utils.displayBadTagsFromFeature(feature);
if (badtags !== valid_qa_message) {
let circle_alert = L.circle(layer._latlng, {
color: 'red',
fillColor: 'orange',
fillOpacity: 0.5,
radius: radius * 1.2
});
circle_alert.bindTooltip(badtags, {
permanent: true,
direction: 'top'
}).addTo(bad_tags_markers);
}
circle.bindPopup(html, {
autoPan: false,
closeOnClick: false
@ -819,6 +846,7 @@ function eachFeature(feature, layer, stats) {
},
});
}
/**
@ -1376,9 +1404,23 @@ function init() {
refreshDisplay();
});
});
$('#filterBadTags').on('click', function () {
lcm_config.display_alert_bad_tags = !lcm_config.display_alert_bad_tags;
showActiveFilter(lcm_config.display_alert_bad_tags, '#filterBadTags');
if (lcm_config.display_alert_bad_tags) {
bad_tags_markers.clearLayers();
bad_tags_markers.addTo(map);
} else {
bad_tags_markers.remove();
}
refreshDisplay();
});
// food_places_markers.addTo(map);
if (lcm_config.display_restaurants_and_cafes) {
food_places_markers.addTo(map);
}
// Mettre à jour le contrôle des calques
const overlayMaps = {
@ -1386,7 +1428,8 @@ function init() {
// "🗺️ Fond de carte": baseLayers,
"⚡ Stations de recharge": all_stations_markers,
"☕ Restaurants et cafés": food_places_markers,
"💡 Bornes potentielles (Osmose)": osmose_markers
"💡 Bornes potentielles (Osmose)": osmose_markers,
"💡 Problèmes de qualité": bad_tags_markers
};
const overlayControl = L.control.layers(baseLayers, overlayMaps, {

View file

@ -1,4 +1,6 @@
export const valid_qa_message = '<span class="quality-ok">✔ Aucun problème de qualité</span>'
const lcm_utils = {
/**
* fouiller dans les tags les valeurs explicites de puissance déclarée.
* Deviner aussi les puissances non déclarées:
@ -78,38 +80,49 @@ const lcm_utils = {
if (tag.includes(':output')) {
let value = feature.properties.tags[tag];
if (value && value.includes(';')) {
content += `<span class="quality-alert">Le tag "${tag}" ne devrait pas contenir de point-virgule dans sa valeur</span>`;
content += `<div class="quality-alert">Le tag "${tag}" ne devrait pas contenir de point-virgule dans sa valeur</div>`;
}
// Vérifier si la valeur est zéro
if (value === '0' || value === 0 || value === '0 kW') {
content += `<span class="quality-alert">Le tag "${tag}" ne devrait pas avoir une valeur de zéro</span>`;
content += `<div class="quality-alert">Le tag "${tag}" ne devrait pas avoir une valeur de zéro</div>`;
}
}
}
// Vérifier si aucun tag ne contient "socket"
let hasSocketTag = false;
for (let tag in feature.properties.tags) {
if (tag.includes('socket')) {
hasSocketTag = true;
break;
}
}
if (!hasSocketTag) {
content += '<div class="quality-alert">Aucune tag détaillant le <b class="quality-emphasis">socket:*</b></div>';
}
if (!feature.properties.tags['ref:EU:EVSE']) {
content += '<span class="quality-alert">Pas de référence ref:EU:EVSE</span>'
content += '<div class="quality-alert">Pas de référence <b class="quality-emphasis">ref:EU:EVSE</b></div>'
}
if (!feature.properties.tags['capacity']) {
content += '<span class="quality-alert">Pas de nombre de places donné avec capacity</span>'
content += '<div class="quality-alert">Pas de nombre de places donné avec <b class="quality-emphasis">capacity</b></div>'
}
if (!feature.properties.tags['network']) {
content += '<span class="quality-alert">Pas de réseau de recharge déclaré</span>'
content += '<div class="quality-alert">Pas de réseau de recharge déclaré</div>'
}
// Vérifier les valeurs true/false dans les tags
for (let tag in feature.properties.tags) {
let value = feature.properties.tags[tag];
if (value === 'true' || value === 'false') {
content += `<span class="quality-alert">Le tag "${tag}" utilise true/false au lieu de yes/no</span>`;
content += `<div class="quality-alert">Le tag <b class="quality-emphasis">${tag}</b> utilise <b class="quality-emphasis">true/false</b> au lieu de <b class="quality-emphasis">yes/no</b></div>`;
}
}
if (!content) {
content = '<span class="quality-ok">Aucun problème de qualité</span>'
content = '' + valid_qa_message
}
return content;

View file

@ -9,11 +9,17 @@ $hover-bg: #e9ecef;
$disabled-color: #adb5bd;
.filter-sockets {
height: 14rem;
label {
width: 45%;
float: left;
margin-right: 1rem;
}
.icon-img {
margin-right: 0.5rem;
}
}
#filter_max_output_slider {

View file

@ -165,13 +165,9 @@ img.leaflet-marker-icon.tag-socket\:type2_yes {
}
.navigation-link {
background: white;
background: white;
border-radius: 0.25em;
float: none;
position: relative;
top: -2.2em;
left: 18.7rem;
&:hover {
border: black;
@ -673,6 +669,14 @@ header {
color: green;
}
.quality-emphasis {
font-weight: bold;
padding: 0.25rem;
background: #f0f0f0;
border-radius: 0.25rem;
border: solid 1px #aaa;
}
.mapcomplete-link {
img {
width: 1rem;

View file

@ -149,13 +149,8 @@ img.leaflet-marker-icon.tag-socket\:type2_yes {
}
.navigation-link {
background: white;
background: white;
border-radius: 0.25em;
float: none;
position: relative;
top: -2.2em;
left: 18.7rem;
}
.navigation-link:hover {
border: black;
@ -619,6 +614,13 @@ header img {
.irve-details .quality-ok {
color: green;
}
.irve-details .quality-emphasis {
font-weight: bold;
padding: 0.25rem;
background: #f0f0f0;
border-radius: 0.25rem;
border: solid 1px #aaa;
}
.irve-details .mapcomplete-link img {
width: 1rem;
height: 1rem;
@ -762,12 +764,20 @@ header img {
margin-top: -3.6rem;
}
.filter-sockets {
height: 14rem;
}
.filter-sockets label {
width: 45%;
float: left;
margin-right: 1rem;
}
.filter-sockets .icon-img {
margin-right: 0.5rem;
}
#filter_max_output_slider {
width: 100%;
height: 10px;

View file

@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["main.scss","_osmose.scss","_recherche.scss","_filters.scss","_mobile.scss","_overrides.scss","_animations.scss"],"names":[],"mappings":";AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAKA;EACE;;AAGE;EACE;EACA;;AAKJ;EACE;;;AAMN;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;EAIE;EACA;EACA;EACA;EACA;;;AAKA;EACE;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EAOE;;AANA;EACE;EACA;EACA;;;AAMJ;EACE;;;AAGF;EACE;IACE;;EAGF;IACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;;AAEA;EACE;;;AAIJ;AAAA;AAAA;AAIA;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAIF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAIA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAIA;EACE;EACA;;;AAKN;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAIA;EACE;;;AAIJ;EACE;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAIA;EACE;EACA;;;ACtqBN;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAEA;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAKJ;EACE;EACA;EACA;EACA;;;AAEA;EACE;EACA;EACA;EACA;;;AAEA;EACE;;;AAIJ;EACE;EACA;;;AC3DJ;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEA;EACE;EACA;;;AAEA;EACE;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAEA;EACE;EACA;EACA;;;AAGF;EACE;;;AASJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;ACnEA;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAcF;AAAA;EAEE;EACA;EACA;EACA;EACA;;;AAEA;AAAA;EACE;EACA,OA9CS;EA+CT;;;AAGF;AAAA;EAvBA;EACA;EAwBE;EACA;EArBF;EAuBE;EACA;;;AAEA;AAAA;EACE,YAzDK;;;AA6DT;AAAA;EACE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EA/CF;;;AAkDE;AAAA;EACE;;;AAIJ;AAAA;EACE,YAzFY;EA0FZ,cA1FY;EA2FZ;;;AAEA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;AAAA;EACE;EACA;EACA;EACA;;;AAGF;AAAA;EACE;EACA,OAlHS;EAgCX;;;AAsFA;AAAA;EACE;;;AAIA;AAAA;EACE,YA1HK;EA2HL,cA1HW;EA2HX;;;AAGF;AAAA;EACE,OA/HW;EAgIX;;;AAMN;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;ACxJJ;AACA;EACE;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IAEA;IACA;IACA;IACA;IACA;IACA;;EAIF;IACE;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGF;AACE;;EAGF;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;;EAGF;AAAA;IAEE;IACA;IACA;IACA;IACA;IACA;;EAIF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;;EAIF;IAEE;;;AC/FJ;AAAA;AAAA;AAKA;EACE;;;AAIA;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAEA;EACE;EACA;;;AAKN;EACE;EACA;;;AAGF;AAEE;EACE;EACA;EACA;EACA;EACA;;;AAEA;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;;;AAEA;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAMN;EAyBE;EACA;EACA;EACA;;;AA1BE;EACE;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;ACnGN;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;;AAIJ;EAEE;IAEE;;EAGF;IACE","file":"style.css"}
{"version":3,"sourceRoot":"","sources":["main.scss","_osmose.scss","_recherche.scss","_filters.scss","_mobile.scss","_overrides.scss","_animations.scss"],"names":[],"mappings":";AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAKA;EACE;;AAGE;EACE;EACA;;AAKJ;EACE;;;AAMN;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;EAIE;EACA;EACA;EACA;EACA;;;AAKA;EACE;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;AAGA;EACE;EACA;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EAOE;;AANA;EACE;EACA;EACA;;;AAMJ;EACE;;;AAGF;EACE;IACE;;EAGF;IACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;;AAEA;EACE;;;AAIJ;AAAA;AAAA;AAIA;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAIF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAIA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAIA;EACE;EACA;;;AAKN;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAIA;EACE;;;AAIJ;EACE;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAIA;EACE;EACA;;;AC1qBN;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAEA;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAKJ;EACE;EACA;EACA;EACA;;;AAEA;EACE;EACA;EACA;EACA;;;AAEA;EACE;;;AAIJ;EACE;EACA;;;AC3DJ;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEA;EACE;EACA;;;AAEA;EACE;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAEA;EACE;EACA;EACA;;;AAGF;EACE;;;AASJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;ACpEF;EACE;;;AAEA;EACE;EACA;EACA;;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAcF;AAAA;EAEE;EACA;EACA;EACA;EACA;;;AAEA;AAAA;EACE;EACA,OApDS;EAqDT;;;AAGF;AAAA;EAvBA;EACA;EAwBE;EACA;EArBF;EAuBE;EACA;;;AAEA;AAAA;EACE,YA/DK;;;AAmET;AAAA;EACE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EA/CF;;;AAkDE;AAAA;EACE;;;AAIJ;AAAA;EACE,YA/FY;EAgGZ,cAhGY;EAiGZ;;;AAEA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;AAAA;EACE;EACA;EACA;EACA;;;AAGF;AAAA;EACE;EACA,OAxHS;EAsCX;;;AAsFA;AAAA;EACE;;;AAIA;AAAA;EACE,YAhIK;EAiIL,cAhIW;EAiIX;;;AAGF;AAAA;EACE,OArIW;EAsIX;;;AAMN;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;AC9JJ;AACA;EACE;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IAEA;IACA;IACA;IACA;IACA;IACA;;EAIF;IACE;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGF;AACE;;EAGF;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;;EAGF;AAAA;IAEE;IACA;IACA;IACA;IACA;IACA;;EAIF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;;EAIF;IAEE;;;AC/FJ;AAAA;AAAA;AAKA;EACE;;;AAIA;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAEA;EACE;EACA;;;AAKN;EACE;EACA;;;AAGF;AAEE;EACE;EACA;EACA;EACA;EACA;;;AAEA;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;;;AAEA;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAMN;EAyBE;EACA;EACA;EACA;;;AA1BE;EACE;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;ACnGN;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;;AAIJ;EAEE;IAEE;;EAGF;IACE","file":"style.css"}