diff --git a/assets/css/app.css b/assets/css/app.css
index df0fbee7b..0b5c7c50f 100644
--- a/assets/css/app.css
+++ b/assets/css/app.css
@@ -8,12 +8,17 @@
--evcc-export: var(--evcc-yellow);
--bs-primary: var(--evcc-dark-green);
+ --bs-primary-rgb: 58, 186, 44;
}
.bg-primary {
background-color: var(--evcc-dark-green) !important;
}
+a {
+ color: var(--evcc-dark-green);
+}
+
/* reverse loading animation */
.progress-bar-animated {
animation-direction: reverse;
@@ -21,3 +26,12 @@
.bg-muted {
opacity: 0.25;
}
+
+.btn-primary {
+ background-color: var(--bs-gray-dark);
+ border-color: var(--bs-gray-dark);
+}
+.btn-primary:hover {
+ background-color: var(--evcc-dark-green);
+ border-color: var(--evcc-dark-green);
+}
diff --git a/assets/js/components/Loadpoint.vue b/assets/js/components/Loadpoint.vue
index c11a2b210..b79270b07 100644
--- a/assets/js/components/Loadpoint.vue
+++ b/assets/js/components/Loadpoint.vue
@@ -16,6 +16,7 @@
class="col-12 col-md-6 col-lg-8 mb-4"
v-bind="vehicle"
@target-soc-updated="setTargetSoC"
+ @target-time-updated="setTargetTime"
/>
@@ -134,6 +135,12 @@ export default {
)
.catch(window.app.error);
},
+ setTargetTime: function (date) {
+ const formattedDate = `${this.fmtDayString(date)}T${this.fmtTimeString(date)}:00`;
+ axios
+ .post(this.api("targetcharge") + "/" + this.targetSoC + "/" + formattedDate)
+ .catch(window.app.error);
+ },
},
destroyed: function () {
window.clearInterval(this.tickerHandle);
diff --git a/assets/js/components/TargetCharge.vue b/assets/js/components/TargetCharge.vue
new file mode 100644
index 000000000..538a7e4ee
--- /dev/null
+++ b/assets/js/components/TargetCharge.vue
@@ -0,0 +1,206 @@
+
+
+
+
+
+
+
+
diff --git a/assets/js/components/Vehicle.stories.js b/assets/js/components/Vehicle.stories.js
index f5f7665de..1937e118d 100644
--- a/assets/js/components/Vehicle.stories.js
+++ b/assets/js/components/Vehicle.stories.js
@@ -22,6 +22,7 @@ Base.args = {
vehiclePresent: true,
vehicleSoc: 42,
targetSoC: 90,
+ id: 0,
};
export const Connected = Template.bind({});
@@ -33,6 +34,7 @@ Connected.args = {
charging: false,
vehicleSoc: 66,
targetSoC: 90,
+ id: 0,
};
export const ReadyToCharge = Template.bind({});
@@ -44,6 +46,7 @@ ReadyToCharge.args = {
charging: false,
vehicleSoc: 66,
targetSoC: 90,
+ id: 0,
};
export const Charging = Template.bind({});
@@ -55,6 +58,7 @@ Charging.args = {
charging: true,
vehicleSoc: 66,
targetSoC: 90,
+ id: 0,
};
const hoursFromNow = function (hours) {
@@ -76,6 +80,7 @@ TargetChargePlanned.args = {
timerActive: false,
targetSoC: 45,
targetTime: hoursFromNow(14),
+ id: 0,
};
export const TargetChargeActive = Template.bind({});
@@ -91,6 +96,7 @@ TargetChargeActive.args = {
timerActive: true,
targetSoC: 80,
targetTime: hoursFromNow(2),
+ id: 0,
};
export const MinCharge = Template.bind({});
@@ -103,6 +109,7 @@ MinCharge.args = {
minSoC: 20,
charging: true,
targetSoC: 90,
+ id: 0,
};
export const UnknownVehicleConnected = Template.bind({});
@@ -111,6 +118,7 @@ UnknownVehicleConnected.args = {
enabled: false,
connected: true,
vehiclePresent: false,
+ id: 0,
};
export const UnknownVehicleReadyToCharge = Template.bind({});
@@ -120,6 +128,7 @@ UnknownVehicleReadyToCharge.args = {
connected: true,
vehiclePresent: false,
charging: false,
+ id: 0,
};
export const UnknownVehicleCharging = Template.bind({});
@@ -129,6 +138,7 @@ UnknownVehicleCharging.args = {
connected: true,
vehiclePresent: false,
charging: true,
+ id: 0,
};
export const Disconnected = Template.bind({});
@@ -136,6 +146,7 @@ Disconnected.args = {
vehicleTitle: "Mein Auto",
connected: false,
vehiclePresent: false,
+ id: 0,
};
export const DisconnectedKnownSoc = Template.bind({});
@@ -146,4 +157,5 @@ DisconnectedKnownSoc.args = {
vehiclePresent: true,
vehicleSoc: 17,
targetSoC: 60,
+ id: 0,
};
diff --git a/assets/js/components/Vehicle.vue b/assets/js/components/Vehicle.vue
index 6b5c65bf8..e1bd64547 100644
--- a/assets/js/components/Vehicle.vue
+++ b/assets/js/components/Vehicle.vue
@@ -4,7 +4,11 @@
{{ vehicleTitle || $t("main.vehicle.fallbackName") }}
-
+
@@ -18,6 +22,7 @@ export default {
name: "Vehicle",
components: { VehicleSoc, VehicleSubline },
props: {
+ id: Number,
connected: Boolean,
vehiclePresent: Boolean,
vehicleSoc: Number,
@@ -42,6 +47,9 @@ export default {
targetSocUpdated: function (targetSoC) {
this.$emit("target-soc-updated", targetSoC);
},
+ targetTimeUpdated: function (targetTime) {
+ this.$emit("target-time-updated", targetTime);
+ },
},
mixins: [collector],
};
diff --git a/assets/js/components/VehicleSubline.vue b/assets/js/components/VehicleSubline.vue
index 90f82fbe3..035f648ba 100644
--- a/assets/js/components/VehicleSubline.vue
+++ b/assets/js/components/VehicleSubline.vue
@@ -6,26 +6,19 @@
{{ $t("main.vehicleSubline.mincharge", { soc: minSoC }) }}
-
- {{ targetTimeLabel() }}
-
-
+
diff --git a/assets/js/i18n/de.js b/assets/js/i18n/de.js
index 69439e244..319132a17 100644
--- a/assets/js/i18n/de.js
+++ b/assets/js/i18n/de.js
@@ -67,6 +67,25 @@ export default {
vehicleSubline: {
mincharge: "Mindestladung bis {soc}%",
},
+ targetCharge: {
+ inactiveLabel: "Zielzeit",
+ activeLabel: "bis {time} Uhr",
+ modalTitle: "Zielzeit festlegen",
+ description: "Wann soll das Fahrzeug auf {targetSoC}% geladen sein?",
+ today: "heute",
+ tomorrow: "morgen",
+ targetIsInThePast: "Zeitpunkt liegt in der Vergangenheit.",
+ remove: "Keine Zielzeit",
+ activate: "Zielzeit aktivieren",
+ experimentalLabel: "experimentell",
+ experimentalText: `
+ Diese Funktion ist in einem frühen Stadium. Der Algorithmus ist noch
+ nicht perfekt. Die Zielzeit wird aktuell nicht persistiert - das
+ heißt sie geht beim Neustart verloren. Verlasse dich also noch nicht
+ zu sehr auf diese Funktion. Wir freuen uns aber über deine
+ Erfahrungen und Verbessungsvorschläge in den
+ `,
+ },
loadpointDetails: {
power: "Leistung",
range: "Reichweite",
diff --git a/assets/js/i18n/en.js b/assets/js/i18n/en.js
index dcf9d2c3d..c34ac78e4 100644
--- a/assets/js/i18n/en.js
+++ b/assets/js/i18n/en.js
@@ -67,6 +67,25 @@ export default {
vehicleSubline: {
mincharge: "minimum charging to {soc}%",
},
+ targetCharge: {
+ inactiveLabel: "Target time",
+ activeLabel: "until {time}",
+ modalTitle: "Set Target Time",
+ description: "When should the vehicle be chargerd to {targetSoC}%?",
+ today: "today",
+ tomorrow: "tomorrow",
+ targetIsInThePast: "The chosen time is in the past.",
+ remove: "Remove",
+ activate: "Activate",
+ experimentalLabel: "experimental",
+ experimentalText: `
+ This function is at an early stage.
+ The algorithm is not perfect yet.
+ The target time is currently not persisted - this means, it will be lost when your server restarts.
+ So do not rely too much on this function.
+ However, we look forward to your experiences and suggestions for improvement in the
+ `,
+ },
loadpointDetails: {
power: "Power",
range: "Range",
diff --git a/assets/js/icons.js b/assets/js/icons.js
index 68a3b6c05..20ae3cfa5 100644
--- a/assets/js/icons.js
+++ b/assets/js/icons.js
@@ -12,6 +12,7 @@ import { faAngleDown } from "@fortawesome/free-solid-svg-icons/faAngleDown";
import { faClock } from "@fortawesome/free-solid-svg-icons/faClock";
import { faExclamationTriangle } from "@fortawesome/free-solid-svg-icons/faExclamationTriangle";
import { faSun } from "@fortawesome/free-solid-svg-icons/faSun";
+import { faFlask } from "@fortawesome/free-solid-svg-icons/faFlask";
import { faTemperatureHigh } from "@fortawesome/free-solid-svg-icons/faTemperatureHigh";
import { faTemperatureLow } from "@fortawesome/free-solid-svg-icons/faTemperatureLow";
import { faThermometerHalf } from "@fortawesome/free-solid-svg-icons/faThermometerHalf";
@@ -47,6 +48,7 @@ library.add(
fasHeart,
faSquare,
faSun,
+ faFlask,
faTemperatureHigh,
faTemperatureLow,
faThermometerHalf
diff --git a/dist/css/index.610b9fdd.css b/dist/css/index.610b9fdd.css
deleted file mode 100644
index b6f26c2fe..000000000
--- a/dist/css/index.610b9fdd.css
+++ /dev/null
@@ -1 +0,0 @@
-:root{--evcc-green:#66d85a;--evcc-dark-green:#3aba2c;--evcc-yellow:#ffe000;--evcc-grid:var(--bs-gray-dark);--evcc-self:var(--evcc-dark-green);--evcc-export:var(--evcc-yellow);--bs-primary:var(--evcc-dark-green)}.bg-primary{background-color:var(--evcc-dark-green)!important}.progress-bar-animated{animation-direction:reverse}.bg-muted{opacity:.25}.icon[data-v-785de62e]{color:#0fdd42}.icon[data-v-1eecc7b7]{color:#0fdd42;display:inline-block}.sponsor-button[data-v-1eecc7b7]{touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.support-button .solid[data-v-1eecc7b7]{display:none}.support-button:hover .solid[data-v-1eecc7b7]{display:inline-block}.support-button:hover .outline[data-v-1eecc7b7]{display:none}.logo[data-v-152e128c]{width:85px}.app[data-v-152e128c]{min-height:100vh}.title[data-v-152e128c]{position:relative;top:.1rem}.battery[data-v-2dcca16c]{transform:translateX(.35rem) rotate(-90deg);transition-property:transform;transition-duration:.25s;transition-timing-function:ease}.power--in .battery[data-v-2dcca16c]{transform:translateX(.7rem) rotate(-90deg)}.power--out .battery[data-v-2dcca16c]{transform:translateX(0) rotate(-90deg)}.arrow[data-v-2dcca16c]{margin-left:-.2rem;opacity:0;transform:translateX(-.5rem);transition-property:opacity,transform;transition-duration:.25s;transition-timing-function:ease}.power--in .arrow[data-v-2dcca16c]{opacity:1;transform:translateX(-1rem) scaleX(1)}.power--out .arrow[data-v-2dcca16c]{opacity:1;transform:translateX(0) scaleX(1)}.label-bar[data-v-17da7e54]{width:0;margin:0;height:1.7rem;padding:.6rem 0;opacity:1;overflow:hidden}.label-bar-scale--hidden[data-v-17da7e54]{opacity:0}.label-bar-scale[data-v-17da7e54]{border:1px solid var(--bs-gray);height:.5rem;background:none;display:flex;justify-content:center;align-items:center;white-space:nowrap;border-radius:0;transition:border-radius .5s linear}.label-bar--top .label-bar-scale[data-v-17da7e54]{border-bottom:none}.label-bar--bottom .label-bar-scale[data-v-17da7e54]{border-top:none}.label-bar--top.label-bar--first .label-bar-scale[data-v-17da7e54]{border-top-left-radius:4px}.label-bar--top.label-bar--last .label-bar-scale[data-v-17da7e54]{border-top-right-radius:4px}.label-bar--bottom.label-bar--first .label-bar-scale[data-v-17da7e54]{border-bottom-left-radius:4px}.label-bar--bottom.label-bar--last .label-bar-scale[data-v-17da7e54]{border-bottom-right-radius:4px}.label-bar:not(.label-bar--first) .label-bar-scale[data-v-17da7e54]{border-left:none}.label-bar-icon[data-v-17da7e54]{background-color:#fff;color:var(--bs-gray);padding:0 .3rem;opacity:1}.label-bar--top .label-bar-icon[data-v-17da7e54]{margin-top:-6px}.label-bar--bottom .label-bar-icon[data-v-17da7e54]{margin-top:6px}.label-bar--hidden[data-v-17da7e54],.label-bar--hide-icon .label-bar-icon[data-v-17da7e54]{opacity:0}.site-progress[data-v-787f3c3e]{--height:38px;height:var(--height);margin:.25rem 0;border-radius:5px;display:flex;overflow:hidden}.site-progress-bar[data-v-787f3c3e]{display:flex;justify-content:center;align-items:center;overflow:hidden;position:relative;width:0}.visualization--ready .site-progress-bar[data-v-787f3c3e]{transition-property:width;transition-duration:.5s;transition-timing-function:linear}.grid-import[data-v-787f3c3e]{background-color:var(--evcc-grid);color:var(--bs-white)}.self-consumption[data-v-787f3c3e]{background-color:var(--evcc-self);color:var(--bs-white)}.pv-export[data-v-787f3c3e]{background-color:var(--evcc-export);color:var(--bs-dark)}.power[data-v-787f3c3e]{display:block;margin:0 .2rem;white-space:nowrap;overflow:hidden}.visualization--ready[data-v-787f3c3e] .label-bar{transition-property:width,opacity;transition-duration:.5s,.25s;transition-timing-function:linear,ease}.visualization--ready[data-v-787f3c3e] .label-bar-icon{transition:opacity .25s ease-in}.energyflow[data-v-d9a8a664]{cursor:pointer}.color-grid[data-v-d9a8a664]{color:var(--evcc-grid)}.color-self[data-v-d9a8a664]{color:var(--evcc-self)}.color-export[data-v-d9a8a664]{color:var(--evcc-export)}.details-icon[data-v-d9a8a664]{text-align:center;width:30px;margin-right:.25rem;white-space:nowrap;flex-shrink:0}.btn[data-v-1ff39d22]{flex-basis:0;white-space:nowrap}.vehicle-soc[data-v-61aaba9a]{--height:38px;--thumb-overlap:3px;--thumb-width:3px;--thumb-horizontal-padding:15px;--label-height:26px;position:relative;height:var(--height)}.progress[data-v-61aaba9a]{height:100%;font-size:1rem}.progress-bar.bg-muted[data-v-61aaba9a]{color:var(--white)}.bg-light[data-v-61aaba9a]{color:var(--bs-gray-dark)}.target-label[data-v-61aaba9a]{width:3em;margin-left:-1.5em;height:var(--label-height);position:absolute;top:calc(var(--label-height)*-1 + var(--thumb-overlap)*-1);text-align:center;color:var(--bs-gray-dark);font-size:1rem;opacity:1;transition:opacity .2s ease 1s}.target-slider[data-v-61aaba9a]{-webkit-appearance:none;position:absolute;top:calc(var(--thumb-overlap)*-1);left:calc(var(--thumb-horizontal-padding)*-1);height:calc(100% + var(--thumb-overlap)*2);width:calc(100% + var(--thumb-horizontal-padding)*2);background:transparent}.target-slider[data-v-61aaba9a]:focus{outline:none}.target-slider[data-v-61aaba9a]::-webkit-slider-runnable-track{position:relative;background:transparent;border:none;height:100%;cursor:pointer}.target-slider[data-v-61aaba9a]::-moz-range-track{background:transparent;border:none;height:100%;cursor:pointer}.target-slider[data-v-61aaba9a]::-webkit-slider-thumb{-webkit-appearance:none;position:relative;top:calc(var(--label-height)*-1);height:100%;width:var(--thumb-width);padding:var(--label-height) var(--thumb-horizontal-padding) 0;box-sizing:content-box;background-clip:content-box;background-color:var(--bs-gray-dark);cursor:-webkit-grab;cursor:grab;border:none;opacity:1;-webkit-transition:opacity .2s ease 1s;transition:opacity .2s ease 1s}.target-slider[data-v-61aaba9a]::-moz-range-thumb{position:relative;top:calc(var(--label-height)*-1);height:100%;width:var(--thumb-width);padding:0 var(--thumb-horizontal-padding) 0;box-sizing:content-box;background-clip:content-box;background-color:var(--bs-gray-dark);cursor:grab;border:none;opacity:1;-moz-transition:opacity .5s ease 1s;transition:opacity .5s ease 1s}.target--slider-hidden .target-label[data-v-61aaba9a],.target--slider-hidden .target-slider[data-v-61aaba9a]::-webkit-slider-thumb{opacity:0}.target--slider-hidden .target-label[data-v-61aaba9a],.target--slider-hidden .target-slider[data-v-61aaba9a]::-moz-range-thumb{opacity:0}.target:hover .target-label[data-v-61aaba9a],.target:hover .target-slider[data-v-61aaba9a]::-webkit-slider-thumb{opacity:1;transition-delay:0s}.target:hover .target-label[data-v-61aaba9a],.target:hover .target-slider[data-v-61aaba9a]::-moz-range-thumb{opacity:1;transition-delay:0s}
\ No newline at end of file
diff --git a/dist/css/index.93d569c8.css b/dist/css/index.93d569c8.css
new file mode 100644
index 000000000..cd328fc27
--- /dev/null
+++ b/dist/css/index.93d569c8.css
@@ -0,0 +1 @@
+:root{--evcc-green:#66d85a;--evcc-dark-green:#3aba2c;--evcc-yellow:#ffe000;--evcc-grid:var(--bs-gray-dark);--evcc-self:var(--evcc-dark-green);--evcc-export:var(--evcc-yellow);--bs-primary:var(--evcc-dark-green);--bs-primary-rgb:58,186,44}.bg-primary{background-color:var(--evcc-dark-green)!important}a{color:var(--evcc-dark-green)}.progress-bar-animated{animation-direction:reverse}.bg-muted{opacity:.25}.btn-primary{background-color:var(--bs-gray-dark);border-color:var(--bs-gray-dark)}.btn-primary:hover{background-color:var(--evcc-dark-green);border-color:var(--evcc-dark-green)}.icon[data-v-785de62e]{color:#0fdd42}.icon[data-v-1eecc7b7]{color:#0fdd42;display:inline-block}.sponsor-button[data-v-1eecc7b7]{touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.support-button .solid[data-v-1eecc7b7]{display:none}.support-button:hover .solid[data-v-1eecc7b7]{display:inline-block}.support-button:hover .outline[data-v-1eecc7b7]{display:none}.logo[data-v-152e128c]{width:85px}.app[data-v-152e128c]{min-height:100vh}.title[data-v-152e128c]{position:relative;top:.1rem}.battery[data-v-2dcca16c]{transform:translateX(.35rem) rotate(-90deg);transition-property:transform;transition-duration:.25s;transition-timing-function:ease}.power--in .battery[data-v-2dcca16c]{transform:translateX(.7rem) rotate(-90deg)}.power--out .battery[data-v-2dcca16c]{transform:translateX(0) rotate(-90deg)}.arrow[data-v-2dcca16c]{margin-left:-.2rem;opacity:0;transform:translateX(-.5rem);transition-property:opacity,transform;transition-duration:.25s;transition-timing-function:ease}.power--in .arrow[data-v-2dcca16c]{opacity:1;transform:translateX(-1rem) scaleX(1)}.power--out .arrow[data-v-2dcca16c]{opacity:1;transform:translateX(0) scaleX(1)}.label-bar[data-v-17da7e54]{width:0;margin:0;height:1.7rem;padding:.6rem 0;opacity:1;overflow:hidden}.label-bar-scale--hidden[data-v-17da7e54]{opacity:0}.label-bar-scale[data-v-17da7e54]{border:1px solid var(--bs-gray);height:.5rem;background:none;display:flex;justify-content:center;align-items:center;white-space:nowrap;border-radius:0;transition:border-radius .5s linear}.label-bar--top .label-bar-scale[data-v-17da7e54]{border-bottom:none}.label-bar--bottom .label-bar-scale[data-v-17da7e54]{border-top:none}.label-bar--top.label-bar--first .label-bar-scale[data-v-17da7e54]{border-top-left-radius:4px}.label-bar--top.label-bar--last .label-bar-scale[data-v-17da7e54]{border-top-right-radius:4px}.label-bar--bottom.label-bar--first .label-bar-scale[data-v-17da7e54]{border-bottom-left-radius:4px}.label-bar--bottom.label-bar--last .label-bar-scale[data-v-17da7e54]{border-bottom-right-radius:4px}.label-bar:not(.label-bar--first) .label-bar-scale[data-v-17da7e54]{border-left:none}.label-bar-icon[data-v-17da7e54]{background-color:#fff;color:var(--bs-gray);padding:0 .3rem;opacity:1}.label-bar--top .label-bar-icon[data-v-17da7e54]{margin-top:-6px}.label-bar--bottom .label-bar-icon[data-v-17da7e54]{margin-top:6px}.label-bar--hidden[data-v-17da7e54],.label-bar--hide-icon .label-bar-icon[data-v-17da7e54]{opacity:0}.site-progress[data-v-787f3c3e]{--height:38px;height:var(--height);margin:.25rem 0;border-radius:5px;display:flex;overflow:hidden}.site-progress-bar[data-v-787f3c3e]{display:flex;justify-content:center;align-items:center;overflow:hidden;position:relative;width:0}.visualization--ready .site-progress-bar[data-v-787f3c3e]{transition-property:width;transition-duration:.5s;transition-timing-function:linear}.grid-import[data-v-787f3c3e]{background-color:var(--evcc-grid);color:var(--bs-white)}.self-consumption[data-v-787f3c3e]{background-color:var(--evcc-self);color:var(--bs-white)}.pv-export[data-v-787f3c3e]{background-color:var(--evcc-export);color:var(--bs-dark)}.power[data-v-787f3c3e]{display:block;margin:0 .2rem;white-space:nowrap;overflow:hidden}.visualization--ready[data-v-787f3c3e] .label-bar{transition-property:width,opacity;transition-duration:.5s,.25s;transition-timing-function:linear,ease}.visualization--ready[data-v-787f3c3e] .label-bar-icon{transition:opacity .25s ease-in}.energyflow[data-v-d9a8a664]{cursor:pointer}.color-grid[data-v-d9a8a664]{color:var(--evcc-grid)}.color-self[data-v-d9a8a664]{color:var(--evcc-self)}.color-export[data-v-d9a8a664]{color:var(--evcc-export)}.details-icon[data-v-d9a8a664]{text-align:center;width:30px;margin-right:.25rem;white-space:nowrap;flex-shrink:0}.btn[data-v-1ff39d22]{flex-basis:0;white-space:nowrap}.vehicle-soc[data-v-61aaba9a]{--height:38px;--thumb-overlap:3px;--thumb-width:3px;--thumb-horizontal-padding:15px;--label-height:26px;position:relative;height:var(--height)}.progress[data-v-61aaba9a]{height:100%;font-size:1rem}.progress-bar.bg-muted[data-v-61aaba9a]{color:var(--white)}.bg-light[data-v-61aaba9a]{color:var(--bs-gray-dark)}.target-label[data-v-61aaba9a]{width:3em;margin-left:-1.5em;height:var(--label-height);position:absolute;top:calc(var(--label-height)*-1 + var(--thumb-overlap)*-1);text-align:center;color:var(--bs-gray-dark);font-size:1rem;opacity:1;transition:opacity .2s ease 1s}.target-slider[data-v-61aaba9a]{-webkit-appearance:none;position:absolute;top:calc(var(--thumb-overlap)*-1);left:calc(var(--thumb-horizontal-padding)*-1);height:calc(100% + var(--thumb-overlap)*2);width:calc(100% + var(--thumb-horizontal-padding)*2);background:transparent}.target-slider[data-v-61aaba9a]:focus{outline:none}.target-slider[data-v-61aaba9a]::-webkit-slider-runnable-track{position:relative;background:transparent;border:none;height:100%;cursor:pointer}.target-slider[data-v-61aaba9a]::-moz-range-track{background:transparent;border:none;height:100%;cursor:pointer}.target-slider[data-v-61aaba9a]::-webkit-slider-thumb{-webkit-appearance:none;position:relative;top:calc(var(--label-height)*-1);height:100%;width:var(--thumb-width);padding:var(--label-height) var(--thumb-horizontal-padding) 0;box-sizing:content-box;background-clip:content-box;background-color:var(--bs-gray-dark);cursor:-webkit-grab;cursor:grab;border:none;opacity:1;-webkit-transition:opacity .2s ease 1s;transition:opacity .2s ease 1s}.target-slider[data-v-61aaba9a]::-moz-range-thumb{position:relative;top:calc(var(--label-height)*-1);height:100%;width:var(--thumb-width);padding:0 var(--thumb-horizontal-padding) 0;box-sizing:content-box;background-clip:content-box;background-color:var(--bs-gray-dark);cursor:grab;border:none;opacity:1;-moz-transition:opacity .5s ease 1s;transition:opacity .5s ease 1s}.target--slider-hidden .target-label[data-v-61aaba9a],.target--slider-hidden .target-slider[data-v-61aaba9a]::-webkit-slider-thumb{opacity:0}.target--slider-hidden .target-label[data-v-61aaba9a],.target--slider-hidden .target-slider[data-v-61aaba9a]::-moz-range-thumb{opacity:0}.target:hover .target-label[data-v-61aaba9a],.target:hover .target-slider[data-v-61aaba9a]::-webkit-slider-thumb{opacity:1;transition-delay:0s}.target:hover .target-label[data-v-61aaba9a],.target:hover .target-slider[data-v-61aaba9a]::-moz-range-thumb{opacity:1;transition-delay:0s}
\ No newline at end of file
diff --git a/dist/index.html b/dist/index.html
index c92eef765..5b307b143 100644
--- a/dist/index.html
+++ b/dist/index.html
@@ -1,4 +1,4 @@
-
evcc
\ No newline at end of file
+ };