diff --git a/.ha_run.lock b/.ha_run.lock index cee60381..bbf9567c 100644 --- a/.ha_run.lock +++ b/.ha_run.lock @@ -1 +1 @@ -{"pid": 71, "version": 1, "ha_version": "2026.9.3", "start_ts": 1790211396.172996} \ No newline at end of file +{"pid": 72, "version": 1, "ha_version": "2026.9.3", "start_ts": 1790309385.7261584} \ No newline at end of file diff --git a/.storage/lovelace_resources b/.storage/lovelace_resources index 0d0468e8..8f3fb1ea 100644 --- a/.storage/lovelace_resources +++ b/.storage/lovelace_resources @@ -201,7 +201,7 @@ }, { "id": "4d1a17aa96b74064af713fc5e9334862", - "url": "/hacsfiles/ha-treemap-card/treemap-card.js?hacstag=11141174680153", + "url": "/hacsfiles/ha-treemap-card/treemap-card.js?hacstag=11141174680160", "type": "module" }, { @@ -231,7 +231,7 @@ }, { "id": "449ff43140654e4bbe2c7b2d361dfacc", - "url": "/hacsfiles/clock-weather-card/clock-weather-card.js?hacstag=522634019294", + "url": "/hacsfiles/clock-weather-card/clock-weather-card.js?hacstag=522634019295", "type": "module" }, { @@ -314,16 +314,6 @@ "url": "/taskmate/taskmate-sounds.js?v=5.7.0", "type": "module" }, - { - "id": "2dfca9e286bb4c5fb92ac3a46332fb3b", - "url": "/album_slideshow_static/album-slideshow-card.js?v=1.10.0", - "type": "module" - }, - { - "id": "f7036d587eed4a2ea6d30c5271d7a78e", - "url": "/climate_scheduler/static/climate-scheduler-card.js?v=1.15.1", - "type": "module" - }, { "id": "f4b0f22e5ce74727afbde9d7168a141e", "url": "/ha_creality_ws/k_printer_card.js?v=1790211801", @@ -333,6 +323,16 @@ "id": "5e4ca4c959f04b4c9b1dd8da0c4cb3b7", "url": "/ha_creality_ws/k_cfs_card.js?v=1790211801", "type": "module" + }, + { + "id": "0415d839dea24062b977830fdd85f135", + "url": "/climate_scheduler/static/climate-scheduler-card.js?v=1.15.1", + "type": "module" + }, + { + "id": "038f9bf71bde42548113bc0355fa4ec0", + "url": "/album_slideshow_static/album-slideshow-card.js?v=1.11.0", + "type": "module" } ] } diff --git a/custom_components/album_slideshow/__init__.py b/custom_components/album_slideshow/__init__.py index db146623..f68e4310 100644 --- a/custom_components/album_slideshow/__init__.py +++ b/custom_components/album_slideshow/__init__.py @@ -5,12 +5,22 @@ import json import logging import os +import voluptuous as vol + from homeassistant.config_entries import ConfigEntry from homeassistant.const import EVENT_HOMEASSISTANT_STARTED -from homeassistant.core import HomeAssistant +from homeassistant.core import HomeAssistant, SupportsResponse +from homeassistant.exceptions import ConfigEntryNotReady, ServiceValidationError from homeassistant.helpers import entity_registry as er from .const import DOMAIN, SERVICE_NEXT_SLIDE, SERVICE_PREVIOUS_SLIDE, SERVICE_REFRESH_ALBUM, ATTR_ENTRY_ID +from .const import ( + SERVICE_HIDE_PHOTO, + SERVICE_UNDO_HIDE, + SERVICE_RESTORE_PHOTOS, + SERVICE_RESTORE_ALL_PHOTOS, + SERVICE_LIST_HIDDEN_PHOTOS, +) from .store import SlideshowStore _LOGGER = logging.getLogger(__name__) @@ -353,6 +363,83 @@ async def async_setup(hass: HomeAssistant, config: dict) -> bool: return True +def _register_photo_services(hass: HomeAssistant) -> None: + def camera_for(call): + camera = hass.data.get(DOMAIN, {}).get(call.data[ATTR_ENTRY_ID], {}).get("camera") + if camera is None: + raise ServiceValidationError("This album slideshow is not loaded") + return camera + + async def hide_photo(call): + camera = camera_for(call) + try: + await camera.async_hide_photo( + photo_ids=call.data.get("photo_ids"), + position=call.data.get("position"), + frame_id=call.data.get("frame_id"), + ) + except (ValueError, OSError) as err: + raise ServiceValidationError(str(err)) from err + + async def undo_hide(call): + await camera_for(call).async_restore_photos(undo=True) + + async def restore_photos(call): + await camera_for(call).async_restore_photos(call.data["photo_ids"]) + + async def restore_all_photos(call): + await camera_for(call).async_restore_photos() + + async def list_hidden_photos(call): + camera = camera_for(call) + hidden = sorted(camera.store.hidden_photo_ids) + offset = call.data.get("offset", 0) + limit = call.data.get("limit", 50) + items = { + item.photo_id: item + for item in (camera.coordinator.data or {}).get("items", []) + if item.photo_id in camera.store.hidden_photo_ids + } + return { + "total": len(hidden), + "offset": offset, + "photos": [ + { + "photo_id": photo_id, + "name": (items[photo_id].filename if photo_id in items else None) or f"Photo {photo_id[-8:]}", + "in_album": photo_id in items, + } + for photo_id in hidden[offset:offset + limit] + ], + } + + identifiers = vol.All([str], vol.Length(min=1)) + registrations = ( + (SERVICE_HIDE_PHOTO, hide_photo, { + vol.Optional("photo_ids"): identifiers, + vol.Optional("position"): vol.In(["first", "second", "both"]), + vol.Optional("frame_id"): vol.All(vol.Coerce(int), vol.Range(min=0)), + }), + (SERVICE_UNDO_HIDE, undo_hide, {}), + (SERVICE_RESTORE_PHOTOS, restore_photos, {vol.Required("photo_ids"): identifiers}), + (SERVICE_RESTORE_ALL_PHOTOS, restore_all_photos, {}), + (SERVICE_LIST_HIDDEN_PHOTOS, list_hidden_photos, { + vol.Optional("offset", default=0): vol.All(vol.Coerce(int), vol.Range(min=0)), + vol.Optional("limit", default=50): vol.All(vol.Coerce(int), vol.Range(min=1, max=100)), + }), + ) + for name, handler, fields in registrations: + if not hass.services.has_service(DOMAIN, name): + hass.services.async_register( + DOMAIN, name, handler, + schema=vol.Schema({vol.Required(ATTR_ENTRY_ID): str, **fields}), + supports_response=( + SupportsResponse.ONLY if name == SERVICE_LIST_HIDDEN_PHOTOS + else SupportsResponse.NONE + ), + ) + + async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: from .coordinator import AlbumCoordinator @@ -372,6 +459,10 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: await _async_cleanup_legacy_entities(hass, entry) store = SlideshowStore() + try: + await store.async_load_hidden_photos(hass, entry.entry_id) + except Exception as err: + raise ConfigEntryNotReady("Could not load hidden photos; slideshow has not started") from err coordinator = AlbumCoordinator(hass, entry, store) await coordinator.async_config_entry_first_refresh() @@ -423,6 +514,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: if not hass.services.has_service(DOMAIN, SERVICE_REFRESH_ALBUM): hass.services.async_register(DOMAIN, SERVICE_REFRESH_ALBUM, _refresh_album) + _register_photo_services(hass) await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) store.notify() diff --git a/custom_components/album_slideshow/button.py b/custom_components/album_slideshow/button.py index ce4a81cd..a6a1364a 100644 --- a/custom_components/album_slideshow/button.py +++ b/custom_components/album_slideshow/button.py @@ -6,6 +6,7 @@ from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback from .const import DOMAIN, SERVICE_REFRESH_ALBUM, ATTR_ENTRY_ID +from .const import SERVICE_HIDE_PHOTO, SERVICE_UNDO_HIDE from .coordinator import AlbumCoordinator @@ -16,6 +17,8 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry, async_add_e PreviousSlideButton(hass, entry, coordinator), NextSlideButton(hass, entry, coordinator), RefreshAlbumButton(hass, entry, coordinator), + HidePhotoButton(hass, entry, coordinator), + UndoHideButton(hass, entry, coordinator), ] ) @@ -77,3 +80,29 @@ class RefreshAlbumButton(_BaseButton): {ATTR_ENTRY_ID: self.entry.entry_id}, blocking=False, ) + + +class HidePhotoButton(_BaseButton): + def __init__(self, hass: HomeAssistant, entry: ConfigEntry, coordinator: AlbumCoordinator) -> None: + super().__init__(hass, entry, coordinator) + self._attr_unique_id = f"{entry.entry_id}_hide_photo" + self._attr_name = "Hide current photo" + self._attr_icon = "mdi:eye-off" + + async def async_press(self) -> None: + await self.hass.services.async_call( + DOMAIN, SERVICE_HIDE_PHOTO, {ATTR_ENTRY_ID: self.entry.entry_id}, blocking=True + ) + + +class UndoHideButton(_BaseButton): + def __init__(self, hass: HomeAssistant, entry: ConfigEntry, coordinator: AlbumCoordinator) -> None: + super().__init__(hass, entry, coordinator) + self._attr_unique_id = f"{entry.entry_id}_undo_hide" + self._attr_name = "Undo hide" + self._attr_icon = "mdi:undo" + + async def async_press(self) -> None: + await self.hass.services.async_call( + DOMAIN, SERVICE_UNDO_HIDE, {ATTR_ENTRY_ID: self.entry.entry_id}, blocking=True + ) diff --git a/custom_components/album_slideshow/camera.py b/custom_components/album_slideshow/camera.py index 973ed67a..6f82e7da 100644 --- a/custom_components/album_slideshow/camera.py +++ b/custom_components/album_slideshow/camera.py @@ -2,7 +2,7 @@ from __future__ import annotations import asyncio from collections import OrderedDict, deque -from dataclasses import dataclass +from dataclasses import dataclass, replace from datetime import datetime, timezone import logging import random @@ -303,6 +303,25 @@ class AlbumSlideshowCamera(Camera): captured_at = _ts_to_iso(getattr(cur, "captured_at", None)) captured_at_pair = self._last_captured_at_pair return { + "entry_id": self.entry.entry_id, + "displayed_photo_ids": ( + self._current_frame.meta.get("photo_ids", []) + if self._current_frame is not None and not any( + photo_id in self.store.hidden_photo_ids + for photo_id in self._current_frame.meta.get("photo_ids", []) + ) else [] + ), + "hidden_photo_count": len(self.store.hidden_photo_ids), + "hidden_revision": self.store.hidden_revision, + "undo_hide_available": bool(self.store.last_hidden_photo_ids), + "empty_reason": ( + None if items else ( + "all_hidden" if data.get("items") and all( + item.photo_id in self.store.hidden_photo_ids + for item in data["items"] + ) else "no_matching_photos" + ) + ), "album_title": data.get("title"), "media_count": len(items), "media_count_total": len(data.get("items", []) or []), @@ -412,12 +431,14 @@ class AlbumSlideshowCamera(Camera): self.store.date_filter, self.store.missing_date_mode, self.store.order_mode, + self.store.hidden_revision, ) if self._effective_cache is not None and self._effective_cache[0] == hash(cache_key): return self._effective_cache[1] filtered = playlist.filter_items( - raw, + [item for item in raw if item.photo_id and item.photo_id not in self.store.hidden_photo_ids] + if self.store.hidden_photo_ids else raw, mode=self.store.date_filter, missing_date=self.store.missing_date_mode, ) @@ -476,6 +497,161 @@ class AlbumSlideshowCamera(Camera): async def async_force_refresh(self) -> None: await self.coordinator.async_request_refresh() + async def async_hide_photo( + self, + *, + photo_ids: list[str] | None = None, + position: str | None = None, + frame_id: int | None = None, + ) -> None: + async with self._navigation_lock: + if frame_id is not None and frame_id != self._frame_id: + raise ValueError("The displayed slide changed; try again") + if photo_ids is not None and position is not None: + raise ValueError("Choose photo IDs or a position, not both") + if photo_ids is None: + current_ids = ( + self._current_frame.meta.get("photo_ids", []) + if self._current_frame is not None else [] + ) + if not current_ids: + raise ValueError("There is no photo to hide") + if len(current_ids) > 1 and position is None: + raise ValueError("This slide is paired; choose first, second, or both") + if position == "second" and len(current_ids) < 2: + raise ValueError("This slide has no second photo") + if position not in (None, "first", "second", "both"): + raise ValueError("Invalid photo position") + photo_ids = ( + current_ids if position == "both" + else [current_ids[1 if position == "second" else 0]] + ) + known_ids = { + item.photo_id for item in (self.coordinator.data or {}).get("items", []) + if item.photo_id + } + for frame in [self._current_frame, *self._previous_frames, *self._next_frames]: + if frame is not None: + known_ids.update(photo_id for photo_id in frame.meta.get("photo_ids", []) if photo_id) + if not photo_ids or any(not photo_id or photo_id not in known_ids for photo_id in photo_ids): + raise ValueError("Photo identifier unavailable; refresh the album and try again") + await self._async_change_exclusions(photo_ids, hidden=True) + + async def async_restore_photos( + self, photo_ids: list[str] | None = None, *, undo: bool = False + ) -> None: + async with self._navigation_lock: + selected = ( + self.store.last_hidden_photo_ids if undo + else self.store.hidden_photo_ids if photo_ids is None + else photo_ids + ) + await self._async_change_exclusions(selected, hidden=False) + + async def _async_change_exclusions(self, photo_ids, *, hidden: bool) -> None: + generation = self._timeline_generation + buffered_frames = ( + () if self._timeline_dirty + else tuple(frame for frame in (self._current_frame, *self._next_frames) if frame is not None) + ) + if await self.store.async_set_photos_hidden(photo_ids, hidden=hidden): + if self._timeline_generation != generation + 1: + buffered_frames = () + await self._rebuild_after_exclusion_change(buffered_frames) + + async def _rebuild_after_exclusion_change( + self, buffered_frames: tuple[_RenderedFrame, ...] = () + ) -> None: + self._effective_cache = None + self._invalidate_timeline() + self._random_order = [] + self._random_pos = 0 + self._recent_urls = [] + items = self._effective_items() + positions = {item.photo_id: index for index, item in enumerate(items) if item.photo_id} + reusable = [] + for frame in buffered_frames: + photo_ids = frame.meta.get("photo_ids", []) + if not photo_ids or any(photo_id not in positions for photo_id in photo_ids): + continue + cursor = replace( + frame.cursor, + index=positions[photo_ids[0]], + random_order=(), + random_pos=0, + recent_urls=(), + ) + reusable.append(replace(frame, cursor=cursor)) + if reusable: + self._timeline_dirty = False + self._next_frames.extend(reusable[1:]) + self._trim_timeline() + self._apply_frame(reusable[0]) + self._schedule_preload() + return + generation = self._timeline_generation + await self._clear_current_frame() + for frame in buffered_frames: + if generation != self._timeline_generation: + break + photo_ids = frame.meta.get("photo_ids", []) + orientation = frame.meta.get("pair_orientation") + if len(photo_ids) != 2 or orientation not in ("horizontal", "vertical"): + continue + remaining = [ + (half, photo_id) for half, photo_id in enumerate(photo_ids) + if photo_id in positions + ] + if len(remaining) != 1: + continue + half, photo_id = remaining[0] + try: + encoded = await self._async_image_job( + ip.render_pair_photo, frame.data, half, orientation == "vertical", + max(0, int(self.store.pair_divider_px)), self.store.fill_mode, + ) + except Exception as err: + _LOGGER.debug("Album Slideshow: could not reuse paired photo: %s", err) + continue + if generation != self._timeline_generation: + break + cursor = replace( + frame.cursor, index=positions[photo_id], + random_order=(), random_pos=0, recent_urls=(), + ) + meta = { + **frame.meta, + "photo_ids": [photo_id], + "captured_at_pair": None, + "pair_frames": None, + "pair_orientation": None, + } + self._timeline_dirty = False + self._apply_frame(_RenderedFrame(encoded, cursor, meta)) + self._schedule_preload() + return + try: + await self._rebuild_current_frame() + except Exception as err: + _LOGGER.warning("Album Slideshow: photos updated but replacement render failed: %s", err) + + async def _clear_current_frame(self) -> None: + self._current_frame = None + self._framebuffer = None + self.store.last_frame = None + self._last_is_portrait = None + self._last_captured_at_pair = None + self._last_pair_frames = None + self._last_pair_orientation = None + + def blank_frame(): + with Image.new("RGB", (16, 9), "black") as image: + return ip.encode_image(image) + + self._framebuffer = await self.hass.async_add_executor_job(blank_frame) + self._frame_id += 1 + self.async_write_ha_state() + async def async_camera_image(self, width: int | None = None, height: int | None = None) -> bytes | None: return self._framebuffer @@ -577,14 +753,13 @@ class AlbumSlideshowCamera(Camera): composed: Image.Image | None = None try: - async with self._compose_semaphore: - composed, meta = await renderer._compose_for_index(items) - cursor = self._capture_cursor(renderer) - if composed is None: - raise RuntimeError("Image composition returned no frame") - encoded = await self.hass.async_add_executor_job( - ip.encode_image, composed - ) + composed, meta = await renderer._compose_for_index(items) + meta = dict(meta or {}) + meta.setdefault("photo_ids", [getattr(items[renderer._index], "photo_id", None)]) + cursor = self._capture_cursor(renderer) + if composed is None: + raise RuntimeError("Image composition returned no frame") + encoded = await self._async_image_job(ip.encode_image, composed) return _RenderedFrame(encoded, cursor, meta or {}) except asyncio.CancelledError: raise @@ -800,6 +975,7 @@ class AlbumSlideshowCamera(Camera): self._timeline_dirty = False items = self._effective_items() if not items: + await self._clear_current_frame() return False cursor = ( @@ -908,6 +1084,10 @@ class AlbumSlideshowCamera(Camera): domain_data["compose_semaphore"] = sem return sem + async def _async_image_job(self, function, *args): + async with self._compose_semaphore: + return await self.hass.async_add_executor_job(function, *args) + def _do_advance(self, count: int, items: list) -> None: """Advance _index to the next slide and commit random-order position.""" if count <= 0: @@ -978,7 +1158,7 @@ class AlbumSlideshowCamera(Camera): if not cur_bytes: raise RuntimeError(f"Failed to fetch image: {cur.url}") - img = await self.hass.async_add_executor_job( + img = await self._async_image_job( ip.open_image, cur_bytes, (width, height) ) try: @@ -1000,7 +1180,7 @@ class AlbumSlideshowCamera(Camera): pair_frames: list[dict] | None = None try: if other_img is not None: - composed = await self.hass.async_add_executor_job( + composed = await self._async_image_job( ip.pair_images, img, other_img, width, height, fill_mode, is_portrait_canvas, divider, divider_fill, transparent_divider, ) @@ -1022,12 +1202,16 @@ class AlbumSlideshowCamera(Camera): ] pair_meta = [f["captured_at"] for f in pair_frames] else: - composed = await self.hass.async_add_executor_job( + composed = await self._async_image_job( ip.render_image, img, fill_mode, width, height, ) finally: ip.safe_close(other_img) meta = { + "photo_ids": ( + [getattr(cur, "photo_id", None), getattr(other_item, "photo_id", None)] + if pair_frames else [getattr(cur, "photo_id", None)] + ), "is_portrait": cur_is_portrait, "captured_at_pair": pair_meta, "pair_frames": pair_frames, @@ -1041,7 +1225,7 @@ class AlbumSlideshowCamera(Camera): } return composed, meta - composed = await self.hass.async_add_executor_job( + composed = await self._async_image_job( ip.render_image, img, fill_mode, width, height ) return composed, { @@ -1086,14 +1270,14 @@ class AlbumSlideshowCamera(Camera): if not b: self._peek_advance(count, items) continue - img = await self.hass.async_add_executor_job(ip.open_image, b, (width, height)) + img = await self._async_image_job(ip.open_image, b, (width, height)) try: if ip.is_portrait_item(cur, img) != is_portrait_canvas: self._peek_advance(count, items) continue if self._index != start: self._do_advance(count, items) - composed = await self.hass.async_add_executor_job( + composed = await self._async_image_job( ip.render_image, img, fill_mode, width, height ) return composed, { @@ -1116,10 +1300,10 @@ class AlbumSlideshowCamera(Camera): b = await self._fetch_bytes(item.url) if not b: return None, None - img = await self.hass.async_add_executor_job(ip.open_image, b, (width, height)) + img = await self._async_image_job(ip.open_image, b, (width, height)) try: cur_is_portrait = ip.is_portrait_item(item, img) - composed = await self.hass.async_add_executor_job( + composed = await self._async_image_job( ip.render_image, img, fill_mode, width, height ) return composed, { @@ -1139,7 +1323,7 @@ class AlbumSlideshowCamera(Camera): if composed is None: return None try: - return await self.hass.async_add_executor_job(ip.encode_image, composed) + return await self._async_image_job(ip.encode_image, composed) finally: ip.safe_close(composed) @@ -1213,7 +1397,7 @@ class AlbumSlideshowCamera(Camera): continue try: - img = await self.hass.async_add_executor_job(ip.open_image, b, (width, height)) + img = await self._async_image_job(ip.open_image, b, (width, height)) except Exception: continue diff --git a/custom_components/album_slideshow/const.py b/custom_components/album_slideshow/const.py index 6cefd24b..df331c01 100644 --- a/custom_components/album_slideshow/const.py +++ b/custom_components/album_slideshow/const.py @@ -1,5 +1,11 @@ DOMAIN = "album_slideshow" +SERVICE_HIDE_PHOTO = "hide_photo" +SERVICE_UNDO_HIDE = "undo_hide" +SERVICE_RESTORE_PHOTOS = "restore_photos" +SERVICE_RESTORE_ALL_PHOTOS = "restore_all_photos" +SERVICE_LIST_HIDDEN_PHOTOS = "list_hidden_photos" + CONF_PROVIDER = "provider" CONF_ALBUM_URL = "album_url" CONF_ALBUM_NAME = "album_name" diff --git a/custom_components/album_slideshow/coordinator.py b/custom_components/album_slideshow/coordinator.py index 5abea846..fd33e07f 100644 --- a/custom_components/album_slideshow/coordinator.py +++ b/custom_components/album_slideshow/coordinator.py @@ -3,8 +3,10 @@ from __future__ import annotations import asyncio from dataclasses import dataclass from datetime import timedelta +from hashlib import sha256 import json import logging +import os from pathlib import Path import re from typing import Any @@ -130,6 +132,17 @@ class MediaItem: # background enrichment task skip already-processed files even after # an HA restart (the flag round-trips through the items cache). exif_scanned: bool = False + photo_id: str | None = None + + def __post_init__(self) -> None: + if self.photo_id is None: + self.photo_id = _photo_identifier(self.source_id) + + +def _photo_identifier(source_id: str | None) -> str | None: + if not source_id: + return None + return "v1:" + sha256(str(source_id).encode("utf-8")).hexdigest() _IMAGE_EXTS = {".jpg", ".jpeg", ".png", ".webp", ".bmp", ".gif"} @@ -1198,6 +1211,7 @@ class AlbumCoordinator(DataUpdateCoordinator): description=raw.get("description"), source_id=raw.get("source_id"), exif_scanned=bool(raw.get("exif_scanned", False)), + photo_id=raw.get("photo_id"), )) except Exception: continue @@ -1230,6 +1244,7 @@ class AlbumCoordinator(DataUpdateCoordinator): "description": it.description, "source_id": it.source_id, "exif_scanned": it.exif_scanned, + "photo_id": it.photo_id, } for it in items ], @@ -1290,6 +1305,7 @@ class AlbumCoordinator(DataUpdateCoordinator): height=None, mime_type=None, filename=p.name, + source_id=f"file://{os.path.abspath(p)}", ) ) @@ -1349,6 +1365,7 @@ class AlbumCoordinator(DataUpdateCoordinator): height=None, mime_type=resolved[1], filename=title, + source_id=cid, ) ) @@ -2037,6 +2054,7 @@ class AlbumCoordinator(DataUpdateCoordinator): # The DAV href, so enrichment can fetch the original bytes # even when the display URL is a preview. source_id=href, + photo_id=_photo_identifier(p.get("file_id") or href), ) ) @@ -2552,6 +2570,11 @@ class AlbumCoordinator(DataUpdateCoordinator): page_items = _find_largest_item_list(result) or _find_largest_item_list(data) api_items: list[MediaItem] = [] dropped_videos = 0 + scraped_ids = { + _photo_base_key(item.url): item.source_id + for item in scraped_items + if item.source_id + } if page_items: seen_urls: set[str] = set() for raw in page_items: @@ -2586,6 +2609,7 @@ class AlbumCoordinator(DataUpdateCoordinator): captured_at=captured_at, uploaded_at=None, byte_size=byte_size, + source_id=raw.get("id") or scraped_ids.get(_photo_base_key(url)), )) # Cross-source date enrichment: publicalbum.org often returns a fuller diff --git a/custom_components/album_slideshow/google_scraper.py b/custom_components/album_slideshow/google_scraper.py index 93b3d203..e635cf24 100644 --- a/custom_components/album_slideshow/google_scraper.py +++ b/custom_components/album_slideshow/google_scraper.py @@ -394,6 +394,7 @@ def _parse_album_item(raw: Any) -> MediaItem | None: captured_at=captured_at, uploaded_at=uploaded_at, byte_size=byte_size, + source_id=_media_key(raw), ) diff --git a/custom_components/album_slideshow/image_processing.py b/custom_components/album_slideshow/image_processing.py index 8718207c..81be9bdc 100644 --- a/custom_components/album_slideshow/image_processing.py +++ b/custom_components/album_slideshow/image_processing.py @@ -165,6 +165,32 @@ def pair_images( return canvas +def render_pair_photo( + data: bytes, + photo_position: int, + portrait_canvas: bool, + divider: int, + fill_mode: str, +) -> bytes: + """Render one safe photo from an already composed pair without source I/O.""" + if photo_position not in (0, 1): + raise ValueError("Invalid paired-photo position") + with open_image(data) as paired: + width, height = paired.size + length = height if portrait_canvas else width + first_length = max(1, (length - divider) // 2) + start, end = ( + (0, first_length) if photo_position == 0 + else (first_length + divider, length) + ) + if not 0 <= start < end <= length: + raise ValueError("Paired photo is outside the rendered canvas") + box = (0, start, width, end) if portrait_canvas else (start, 0, end, height) + with paired.crop(box) as photo: + with render_image(photo, fill_mode, width, height) as rendered: + return encode_image(rendered) + + def encode_image(img: Image.Image) -> bytes: """Encode a PIL image to a client-compatible JPEG or PNG. diff --git a/custom_components/album_slideshow/manifest.json b/custom_components/album_slideshow/manifest.json index dd01b78f..91303dca 100644 --- a/custom_components/album_slideshow/manifest.json +++ b/custom_components/album_slideshow/manifest.json @@ -8,5 +8,5 @@ "iot_class": "cloud_polling", "issue_tracker": "https://github.com/eyalgal/album_slideshow/issues", "requirements": ["Pillow", "PyNaCl>=1.5.0"], - "version": "1.10.0" + "version": "1.11.0" } diff --git a/custom_components/album_slideshow/sensor.py b/custom_components/album_slideshow/sensor.py index 5ffb6b65..7ff8d847 100644 --- a/custom_components/album_slideshow/sensor.py +++ b/custom_components/album_slideshow/sensor.py @@ -20,6 +20,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry, async_add_e AlbumCountSensor(entry, coordinator), AlbumTitleSensor(entry, coordinator), CacheUsageSensor(entry, coordinator), + HiddenPhotoCountSensor(entry, coordinator), ] if coordinator.provider in ENRICHING_PROVIDERS: # Diagnostic surface for the background enrichment pass (per-photo @@ -68,6 +69,20 @@ class AlbumCountSensor(_BaseAlbumSensor): return len(data.get("items", [])) +class HiddenPhotoCountSensor(_BaseAlbumSensor): + _attr_icon = "mdi:eye-off" + + def __init__(self, entry: ConfigEntry, coordinator: AlbumCoordinator) -> None: + super().__init__(entry, coordinator) + self._attr_unique_id = f"{entry.entry_id}_hidden_photo_count" + self._attr_name = "Hidden photos" + coordinator.store.add_listener(self.async_write_ha_state) + + @property + def native_value(self): + return len(self.coordinator.store.hidden_photo_ids) + + class AlbumTitleSensor(_BaseAlbumSensor): def __init__(self, entry: ConfigEntry, coordinator: AlbumCoordinator) -> None: super().__init__(entry, coordinator) diff --git a/custom_components/album_slideshow/services.yaml b/custom_components/album_slideshow/services.yaml index 7d2bbca9..c2f1fc4d 100644 --- a/custom_components/album_slideshow/services.yaml +++ b/custom_components/album_slideshow/services.yaml @@ -1,3 +1,94 @@ +hide_photo: + name: Hide photo + description: Exclude a photo from this slideshow without changing the source library. Paired slides require an explicit position or photo IDs. + fields: + entry_id: + name: Entry ID + required: true + selector: + text: + photo_ids: + name: Photo IDs + description: Optional list of IDs from displayed_photo_ids. These target the selected photos even if the slide changes. + selector: + object: + position: + name: Position + description: First is left or top; second is right or bottom. Omit for a single photo. + selector: + select: + options: + - first + - second + - both + frame_id: + name: Expected frame ID + description: Optional guard that rejects the action if the current frame has changed. + selector: + number: + min: 0 + mode: box + +undo_hide: + name: Undo hide + description: Restore the photos hidden by the last hide action for this slideshow. + fields: + entry_id: + name: Entry ID + required: true + selector: + text: + +restore_photos: + name: Restore photos + description: Remove selected photo IDs from this slideshow's exclusion list. + fields: + entry_id: + name: Entry ID + required: true + selector: + text: + photo_ids: + name: Photo IDs + required: true + selector: + object: + +restore_all_photos: + name: Restore all hidden photos + description: Clear this slideshow's exclusion list. Previously hidden photos become eligible for display again. + fields: + entry_id: + name: Entry ID + required: true + selector: + text: + +list_hidden_photos: + name: List hidden photos + description: Return a page of hidden photo IDs and names without putting the full list into entity state. + fields: + entry_id: + name: Entry ID + required: true + selector: + text: + offset: + name: Offset + default: 0 + selector: + number: + min: 0 + mode: box + limit: + name: Page size + default: 50 + selector: + number: + min: 1 + max: 100 + mode: box + next_slide: name: Next slide description: Advance the slideshow to the next image for a specific config entry. diff --git a/custom_components/album_slideshow/store.py b/custom_components/album_slideshow/store.py index a354171e..9180c8d4 100644 --- a/custom_components/album_slideshow/store.py +++ b/custom_components/album_slideshow/store.py @@ -1,9 +1,13 @@ from __future__ import annotations +import asyncio from dataclasses import dataclass, field -from typing import Callable +from typing import Callable, Iterable + +from homeassistant.helpers.storage import Store from .const import ( + DOMAIN, DEFAULT_SLIDE_INTERVAL, DEFAULT_REFRESH_HOURS, DEFAULT_FILL_MODE, @@ -52,8 +56,72 @@ class SlideshowStore: # the previous slide instantly across a camera reload. last_frame: bytes | None = None + hidden_photo_ids: frozenset[str] = field(default_factory=frozenset, init=False) + last_hidden_photo_ids: tuple[str, ...] = field(default=(), init=False) + hidden_revision: int = field(default=0, init=False) + _hidden_storage: Store | None = field(default=None, init=False, repr=False) + _hidden_lock: asyncio.Lock = field(default_factory=asyncio.Lock, init=False, repr=False) _listeners: list[Listener] = field(default_factory=list) + async def async_load_hidden_photos(self, hass, entry_id: str) -> None: + self._hidden_storage = Store(hass, 1, f"{DOMAIN}.{entry_id}.hidden") + data = await self._hidden_storage.async_load() + if data is None: + return + if not isinstance(data, dict): + raise ValueError("Invalid hidden-photo storage") + hidden = data.get("hidden", []) + last_hidden = data.get("last_hidden", []) + revision = data.get("revision", 0) + if type(revision) is not int or revision < 0: + raise ValueError("Invalid hidden-photo revision") + if any( + not isinstance(values, list) + or any(not isinstance(photo_id, str) or not photo_id for photo_id in values) + for values in (hidden, last_hidden) + ): + raise ValueError("Invalid hidden-photo identifiers") + self.hidden_photo_ids = frozenset(hidden) + self.hidden_revision = revision + self.last_hidden_photo_ids = tuple( + dict.fromkeys(photo_id for photo_id in last_hidden if photo_id in self.hidden_photo_ids) + ) + + async def async_set_photos_hidden( + self, photo_ids: Iterable[str], *, hidden: bool + ) -> bool: + requested = frozenset(photo_ids) + if any(not isinstance(photo_id, str) or not photo_id for photo_id in requested): + raise ValueError("Invalid photo identifier") + async with self._hidden_lock: + if self._hidden_storage is None: + raise RuntimeError("Photo exclusions have not been loaded") + updated = ( + self.hidden_photo_ids | requested + if hidden + else self.hidden_photo_ids - requested + ) + if updated == self.hidden_photo_ids: + return False + last_hidden = ( + tuple(sorted(updated - self.hidden_photo_ids)) + if hidden + else tuple(photo_id for photo_id in self.last_hidden_photo_ids if photo_id in updated) + ) + await self._hidden_storage.async_save( + { + "hidden": sorted(updated), + "last_hidden": list(last_hidden), + "revision": self.hidden_revision + 1, + } + ) + self.hidden_photo_ids = updated + self.last_hidden_photo_ids = last_hidden + self.hidden_revision += 1 + self.last_frame = None + self.notify() + return True + def add_listener(self, cb: Listener) -> None: if cb not in self._listeners: self._listeners.append(cb) diff --git a/custom_components/album_slideshow/www/album-slideshow-card.js b/custom_components/album_slideshow/www/album-slideshow-card.js index 0492589b..c698c9b7 100644 --- a/custom_components/album_slideshow/www/album-slideshow-card.js +++ b/custom_components/album_slideshow/www/album-slideshow-card.js @@ -26,7 +26,7 @@ * tap_action: none # none | more-info */ -const VERSION = "1.10.0"; +const VERSION = "1.11.0"; const ANIMATED_TRANSITIONS = [ "fade", @@ -46,6 +46,19 @@ const TRANSITIONS = new Set(["random", "none", ...ANIMATED_TRANSITIONS]); const FIT_MODES = new Set(["auto", "cover", "contain"]); +const PHOTO_CONTROL_OPTIONS = [ + { value: "off", label: "Off" }, + { value: "on_demand", label: "On demand" }, + { value: "always", label: "Always" }, +]; + +function normalizePhotoControls(value) { + if (value == null || value === false) return "off"; + if (value === true) return "always"; + if (PHOTO_CONTROL_OPTIONS.some((option) => option.value === value)) return value; + throw new Error(`album-slideshow-card: unknown photo controls mode '${value}'`); +} + // Caption overlay (date / location / description). ``show`` is an ordered // subset of these fields; ``position`` is one of a 3x3 anchor grid; // ``date_format`` is one of the named presets below or a custom token string. @@ -92,6 +105,436 @@ function isAlbumSlideshowCamera(state) { ); } +class PhotoControls { + constructor(container, getHass, onActivity = () => {}, onNavigate = () => {}) { + this._getHass = getHass; + this._onActivity = onActivity; + this._onNavigate = onNavigate; + this._state = {}; + this._busy = false; + this._root = container.attachShadow({ mode: "open" }); + this._root.innerHTML = ` + +
+
+ + + +
+
+ + + +
+
+ + +

Hidden photos

+ +
+
+ `; + this._dialog = this._root.querySelector("dialog"); + this._dialog.addEventListener("close", () => this._onActivity()); + container.addEventListener("click", (event) => event.stopPropagation()); + this._root.getElementById("previous").addEventListener("click", () => this._navigate("previous_slide")); + this._root.getElementById("next").addEventListener("click", () => this._navigate("next_slide")); + this._root.getElementById("pause").addEventListener("click", () => this._togglePause()); + this._root.getElementById("hide").addEventListener("click", () => this._hide()); + this._root.getElementById("undo").addEventListener("click", () => this._run("undo_hide")); + this._root.getElementById("manage").addEventListener("click", () => this._showHidden(0)); + this._root.getElementById("close").addEventListener("click", () => this._dialog.close()); + } + + get active() { + return this._busy || this._dialog.open; + } + + close() { + this._dialog.close(); + } + + update(state) { + if (this._state.entryId && this._state.entryId !== state.entryId) { + this._dialog.close(); + } + this._state = { ...state, photoIds: [...(state.photoIds || [])] }; + const unavailable = this._busy || !state.entryId; + this._root.getElementById("previous").disabled = unavailable || !state.canPrevious; + this._root.getElementById("next").disabled = unavailable || !state.canNext; + const pause = this._root.getElementById("pause"); + pause.disabled = unavailable || typeof state.paused !== "boolean"; + pause.title = state.paused ? "Resume slideshow" : "Pause slideshow"; + pause.setAttribute("aria-label", pause.title); + pause.querySelector("ha-icon").setAttribute("icon", state.paused ? "mdi:play" : "mdi:pause"); + this._root.getElementById("hide").disabled = this._busy || !state.entryId || !this._state.photoIds.some(Boolean); + this._root.getElementById("undo").disabled = this._busy || !state.entryId || !state.canUndo; + this._root.getElementById("manage").disabled = this._busy || !state.entryId; + this._root.getElementById("manage").title = `Hidden photos (${state.hiddenCount || 0})`; + } + + async _call(service, data = {}, entryId = this._state.entryId) { + if (!entryId) throw new Error("This slideshow does not support these controls"); + const result = await this._getHass().callWS({ + type: "call_service", + domain: "album_slideshow", + service, + service_data: { ...data, entry_id: entryId }, + ...(service === "list_hidden_photos" ? { return_response: true } : {}), + }); + return result?.response; + } + + async _navigate(service) { + if (this._busy || !this._state.entryId) return false; + const entryId = this._state.entryId; + this._onNavigate?.("start", entryId); + const success = await this._run(service, {}, entryId); + this._onNavigate?.(success ? "complete" : "failed", entryId); + return success; + } + + async _togglePause() { + const { entryId, paused } = this._state; + if (!entryId || typeof paused !== "boolean") return false; + return this._runAction(async () => { + const hass = this._getHass(); + const registry = await hass.callWS({ type: "config/entity_registry/list" }); + const entity = registry.find((candidate) => + candidate.config_entry_id === entryId && + candidate.unique_id === `${entryId}_paused` && + candidate.entity_id.startsWith("switch.") && + !candidate.disabled_by, + ); + if (!entity) throw new Error("The pause switch is unavailable for this slideshow"); + await hass.callWS({ + type: "call_service", + domain: "switch", + service: paused ? "turn_off" : "turn_on", + service_data: { entity_id: entity.entity_id }, + }); + }); + } + + _error(message = "") { + for (const id of ["error", "dialog-error"]) { + const element = this._root.getElementById(id); + element.textContent = message; + element.hidden = !message; + } + } + + async _run(service, data = {}, entryId = this._state.entryId) { + return this._runAction(() => this._call(service, data, entryId)); + } + + async _runAction(action) { + if (this._busy) return false; + this._busy = true; + this._onActivity?.(); + this._error(); + this.update(this._state); + const buttons = [...this._dialog.querySelectorAll("#content button")].map((button) => ({ button, disabled: button.disabled })); + buttons.forEach(({ button }) => { button.disabled = true; }); + try { + await action(); + this._dialog.close(); + return true; + } catch (error) { + this._error(error.message || "Photo action failed"); + return false; + } finally { + this._busy = false; + this.update(this._state); + buttons.forEach(({ button, disabled }) => { button.disabled = disabled; }); + this._onActivity?.(); + } + } + + _button(label, icon, action, iconOnly = false) { + const button = document.createElement("button"); + button.type = "button"; + button.title = label; + button.setAttribute("aria-label", label); + if (iconOnly) button.className = "icon"; + const symbol = document.createElement("ha-icon"); + symbol.setAttribute("icon", icon); + button.appendChild(symbol); + if (!iconOnly) button.appendChild(document.createTextNode(label)); + button.addEventListener("click", action); + return button; + } + + _open(title) { + this._viewGeneration = (this._viewGeneration || 0) + 1; + this._error(); + this._root.getElementById("title").textContent = title; + const content = this._root.getElementById("content"); + content.replaceChildren(); + if (!this._dialog.open) this._dialog.showModal(); + this._onActivity?.(); + return content; + } + + _hide() { + const { photoIds, orientation, entryId } = this._state; + if (photoIds.length === 1 && photoIds[0]) { + this._run("hide_photo", { photo_ids: [...photoIds] }, entryId); + return; + } + const content = this._open("Hide photo"); + content.className = "choices"; + const labels = orientation === "vertical" ? ["Hide top photo", "Hide bottom photo"] : ["Hide left photo", "Hide right photo"]; + photoIds.forEach((photoId, index) => { + const button = this._button(labels[index], "mdi:eye-off", () => this._run("hide_photo", { photo_ids: [photoId] }, entryId)); + button.disabled = !photoId; + content.appendChild(button); + }); + const both = this._button("Hide both photos", "mdi:eye-off", () => this._run("hide_photo", { photo_ids: [...photoIds] }, entryId)); + both.disabled = photoIds.length !== 2 || photoIds.some((photoId) => !photoId); + content.appendChild(both); + } + + async _showHidden(offset) { + const entryId = this._state.entryId; + const content = this._open("Hidden photos"); + const generation = this._viewGeneration; + content.className = ""; + content.textContent = "Loading..."; + try { + const page = await this._call("list_hidden_photos", { offset, limit: 25 }, entryId); + if (generation !== this._viewGeneration || this._state.entryId !== entryId || !this._dialog.open) return; + if (offset && !page.photos.length) { + await this._showHidden(Math.max(0, offset - 25)); + return; + } + content.replaceChildren(); + if (!page.photos.length) content.textContent = "No hidden photos"; + for (const photo of page.photos) { + const row = document.createElement("div"); + row.className = "row"; + const name = document.createElement("span"); + name.className = "name"; + name.textContent = photo.name; + if (!photo.in_album) { + const status = document.createElement("small"); + status.textContent = "Not in the current album"; + name.appendChild(status); + } + row.append(name, this._button(`Restore ${photo.name}`, "mdi:restore", async () => { + if (await this._run("restore_photos", { photo_ids: [photo.photo_id] }, entryId)) await this._showHidden(offset); + }, true)); + content.appendChild(row); + } + if (!page.total) return; + const footer = document.createElement("footer"); + footer.appendChild(this._button("Restore all", "mdi:restore", () => { + const confirm = this._open("Restore all hidden photos?"); + confirm.className = "choices"; + confirm.append( + this._button("Restore all", "mdi:restore", async () => { + if (await this._run("restore_all_photos", {}, entryId)) await this._showHidden(0); + }), + this._button("Cancel", "mdi:close", () => this._showHidden(offset)), + ); + })); + const pagination = document.createElement("div"); + pagination.className = "pagination"; + const previous = this._button("Previous page", "mdi:chevron-left", () => this._showHidden(Math.max(0, offset - 25)), true); + const next = this._button("Next page", "mdi:chevron-right", () => this._showHidden(offset + 25), true); + previous.disabled = offset === 0; + next.disabled = offset + page.photos.length >= page.total; + pagination.append(previous, document.createTextNode(`${offset + 1}-${offset + page.photos.length} of ${page.total}`), next); + footer.appendChild(pagination); + content.appendChild(footer); + } catch (error) { + if (generation !== this._viewGeneration || this._state.entryId !== entryId) return; + content.textContent = ""; + this._error(error.message || "Could not load hidden photos"); + } + } +} + +class PhotoControlsReveal { + constructor(card, container, controls, resume) { + this._card = card; + this._container = container; + this._controls = controls; + this._resume = resume; + this._visible = false; + this._pointer = null; + this._listeners = []; + container.hidden = true; + this._listen(card, "pointerenter", (event) => { + if (event.pointerType === "mouse") this.show(); + }); + this._listen(card, "pointerleave", (event) => { + this._cancelPress(); + if (event.pointerType === "mouse" && !this._keyboardFocused()) this.hide(); + else this.activity(); + }); + this._listen(card, "pointerdown", (event) => this._pointerDown(event)); + this._listen(card, "pointermove", (event) => this._pointerMove(event)); + this._listen(card, "pointerup", () => { this._cancelPress(); this.activity(); }); + this._listen(card, "pointercancel", () => { this._cancelPress(); this.activity(); }); + this._listen(card, "click", (event) => { + if (event.composedPath().includes(container)) { + this._suppressClick = false; + this.activity(); + } else if (this._suppressClick && event.detail !== 0) { + this._suppressClick = false; + event.preventDefault(); + event.stopImmediatePropagation(); + } + }, true); + this._listen(card, "contextmenu", (event) => { + if (this._suppressClick || (this._pointer && this._pointer.type !== "mouse")) { + event.preventDefault(); + event.stopPropagation(); + this._suppressClick = true; + this.show(); + } + }); + this._listen(card, "focusin", (event) => { + if (!this._ignoreFocus && event.composedPath()[0]?.matches?.(":focus-visible")) this.show(); + else this.activity(); + }); + this._listen(card, "focusout", () => this.activity()); + this._listen(card, "keydown", (event) => this._keyDown(event)); + this._listen(card.ownerDocument, "pointerdown", (event) => { + if (!event.composedPath().includes(card)) this.hide(); + }, true); + } + + get holding() { + return !this._disposed && (this._visible || this._pointer !== null); + } + + _listen(target, type, listener, capture = false) { + target.addEventListener(type, listener, capture); + this._listeners.push(() => target.removeEventListener(type, listener, capture)); + } + + show() { + if (this._disposed) return; + this._visible = true; + this._container.hidden = false; + this.activity(); + } + + hide() { + if (this._disposed || this._controls.active) return; + const wasHolding = this.holding; + this._visible = false; + this._container.hidden = true; + clearTimeout(this._idleTimer); + this._idleTimer = null; + this._cancelPress(false); + if (wasHolding) this._resume(); + } + + activity() { + if (this._disposed || !this._visible) return; + clearTimeout(this._idleTimer); + this._idleTimer = setTimeout(() => { + this._idleTimer = null; + if (this._controls.active || this._pointer || this._keyboardFocused()) return; + this.hide(); + }, 5000); + } + + _keyboardFocused() { + return this._card.matches(":focus-visible") || Boolean(this._container.shadowRoot?.querySelector(":focus-visible")); + } + + _pointerDown(event) { + if (event.composedPath().includes(this._container)) { + this.activity(); + return; + } + this._suppressClick = false; + if (event.isPrimary === false || event.button > 0) { + this._cancelPress(); + return; + } + this._cancelPress(false); + this._pointer = { id: event.pointerId, type: event.pointerType, x: event.clientX, y: event.clientY }; + this._pressTimer = setTimeout(() => { + this._pressTimer = null; + if (!this._pointer || this._disposed) return; + this._suppressClick = true; + this.show(); + }, 500); + } + + _pointerMove(event) { + if (this._pointer) { + if (event.pointerId === this._pointer.id && Math.hypot(event.clientX - this._pointer.x, event.clientY - this._pointer.y) > 10) this._cancelPress(); + } else if (event.pointerType === "mouse") { + this.show(); + } + } + + _cancelPress(resume = true) { + const wasPressed = this._pointer !== null; + clearTimeout(this._pressTimer); + this._pressTimer = null; + this._pointer = null; + if (resume && wasPressed && !this._visible && !this._disposed) this._resume(); + } + + _keyDown(event) { + if (event.key === "Escape" && this._visible && !this._controls.active) { + event.preventDefault(); + event.stopPropagation(); + this.hide(); + this._ignoreFocus = true; + this._card.focus({ preventScroll: true }); + this._ignoreFocus = false; + } else if ((event.key === "Enter" || event.key === " ") && event.composedPath()[0] === this._card) { + event.preventDefault(); + event.stopPropagation(); + this.show(); + this._container.shadowRoot?.querySelector("button:not([disabled])")?.focus(); + } else { + this.activity(); + } + } + + dispose() { + this._disposed = true; + clearTimeout(this._idleTimer); + this._cancelPress(false); + this._listeners.forEach((remove) => remove()); + this._listeners = []; + this._controls.close(); + this._visible = false; + } +} + // The card class is built lazily by a factory so the base class can be // resolved from the *live* ``window.HTMLElement`` at registration time. // See ``defineAlbumSlideshowCards`` for why this matters with the @@ -135,6 +578,13 @@ function createAlbumSlideshowCardClass(Base) { // schedules a deferred swap that runs once the hold expires. this._holdSwapsUntil = 0; this._holdSwapTimer = null; + this._loadGeneration = 0; + this._displayedPhotoIds = []; + this._displayedFrameId = null; + this._navigationRequest = null; + this._navigationTimer = null; + this._photoEntryId = null; + this._hiddenRevision = undefined; } setConfig(config) { @@ -164,6 +614,7 @@ function createAlbumSlideshowCardClass(Base) { // Empty/missing background means inherit theme. background: typeof config.background === "string" ? config.background : "", tap_action: config.tap_action === "more-info" ? "more-info" : "none", + photo_controls: normalizePhotoControls(config.photo_controls), // Number of seconds the card freezes its visible slide after a // tap, so the more-info dialog can settle without the slideshow // marching forward beneath it. Set to 0 to disable. @@ -232,7 +683,21 @@ function createAlbumSlideshowCardClass(Base) { if (!this._rendered) { this._renderShell(); this._rendered = true; + } else { + this._setupPhotoControlsReveal(); } + this._maybeSwap(); + } + + disconnectedCallback() { + this._cancelControlNavigation(); + this._controlsReveal?.dispose(); + this._controlsReveal = null; + clearTimeout(this._holdSwapTimer); + this._holdSwapTimer = null; + this._loadGeneration += 1; + this._lastFrameId = null; + this._lastEntityPicture = null; } set hass(hass) { @@ -257,6 +722,14 @@ function createAlbumSlideshowCardClass(Base) { _renderShell() { const c = this._config; + this._cancelControlNavigation(); + this._controlsReveal?.dispose(); + this._controlsReveal = null; + this._loadGeneration += 1; + this._displayedPhotoIds = []; + this._displayedFrameId = null; + this._photoEntryId = null; + this._hiddenRevision = undefined; const aspect = c.aspect_ratio === "auto" ? "auto" : c.aspect_ratio; // When the user did not set ``background`` we fall through to the // theme's --ha-card-background, so the card naturally inherits the @@ -275,6 +748,7 @@ function createAlbumSlideshowCardClass(Base) { position: relative; padding: 0; } + ha-card:focus-visible { outline: 2px solid var(--primary-color); outline-offset: -2px; } .stage { position: absolute; inset: 0; @@ -283,6 +757,7 @@ function createAlbumSlideshowCardClass(Base) { background: ${stageBg}; border-radius: inherit; overflow: hidden; + ${c.photo_controls === "on_demand" ? "-webkit-touch-callout: none; user-select: none;" : ""} } .blur-bg { position: absolute; @@ -347,6 +822,7 @@ function createAlbumSlideshowCardClass(Base) { font-family: var(--paper-font-body1_-_font-family, sans-serif); } .cap-line { font-weight: inherit; } + #photo-controls { position: absolute; right: 8px; max-width: calc(100% - 16px); ${c.caption?.position.startsWith("top") ? "bottom" : "top"}: 8px; z-index: 3; } .cap-box.cap-shadow { text-shadow: 0 1px 2px rgba(0, 0, 0, 0.9), @@ -363,13 +839,66 @@ function createAlbumSlideshowCardClass(Base) {
Waiting for first frame...
+
`; + this._photoControls = new PhotoControls( + this.shadowRoot.getElementById("photo-controls"), () => this._hass, + () => this._controlsReveal?.activity(), + (phase, entryId) => this._controlNavigation(phase, entryId), + ); const card = this.shadowRoot.querySelector("ha-card"); if (this._config.tap_action === "more-info") { card.addEventListener("click", () => this._fireMoreInfo()); card.style.cursor = "pointer"; } + this._setupPhotoControlsReveal(); + } + + _setupPhotoControlsReveal() { + this._controlsReveal?.dispose(); + this._controlsReveal = null; + const card = this.shadowRoot.querySelector("ha-card"); + const container = this.shadowRoot.getElementById("photo-controls"); + container.hidden = this._config.photo_controls !== "always"; + if (this._config.photo_controls === "on_demand") { + card.tabIndex = 0; + card.setAttribute("role", "group"); + card.setAttribute("aria-label", "Slideshow photo controls"); + if (this.isConnected) { + this._controlsReveal = new PhotoControlsReveal(card, container, this._photoControls, () => this._maybeSwap()); + } + } + } + + _cancelControlNavigation() { + clearTimeout(this._navigationTimer); + this._navigationTimer = null; + this._navigationRequest = null; + } + + _controlNavigation(phase, entryId) { + const attrs = this._hass?.states[this._config.entity]?.attributes || {}; + if (attrs.entry_id !== entryId) return; + if (phase === "start") { + this._cancelControlNavigation(); + this._navigationRequest = { entryId, frameId: attrs.frame_id, pending: true }; + this._holdSwapsUntil = 0; + clearTimeout(this._holdSwapTimer); + this._holdSwapTimer = null; + } else if (this._navigationRequest?.entryId === entryId) { + if (phase === "failed") { + this._cancelControlNavigation(); + } else { + this._navigationRequest.pending = false; + if (this._displayedFrameId !== this._navigationRequest.frameId && this._displayedFrameId === attrs.frame_id) { + this._cancelControlNavigation(); + } else { + this._navigationTimer = setTimeout(() => this._cancelControlNavigation(), 5000); + } + } + } + this._maybeSwap(); } _transitionStyles() { @@ -439,6 +968,18 @@ function createAlbumSlideshowCardClass(Base) { this._setPlaceholder(`Entity not found: ${this._config.entity}`); return; } + const attrs = state.attributes || {}; + if (this._hiddenRevision !== undefined && attrs.hidden_revision !== this._hiddenRevision) { + this._clearDisplayedPhotos(); + } + this._hiddenRevision = attrs.hidden_revision; + this._refreshPhotoControls(attrs); + if (attrs.empty_reason || (Array.isArray(attrs.displayed_photo_ids) && !attrs.displayed_photo_ids.length)) { + this._clearDisplayedPhotos(); + this._setPlaceholder(attrs.empty_reason === "all_hidden" ? "All photos hidden" : attrs.empty_reason ? "No matching photos" : "Preparing next photo..."); + return; + } + if (this._controlsReveal?.holding && this._displayedPhotoIds.length && !this._navigationRequest) return; // Hold visual swaps for the configured grace period after a tap. // The state cursor (`_lastFrameId`/`_lastEntityPicture`) is left // untouched during the hold; once the hold expires we re-enter @@ -454,7 +995,6 @@ function createAlbumSlideshowCardClass(Base) { } return; } - const attrs = state.attributes || {}; // ``frame_id`` increments on every slide commit; that's our primary // "new frame ready" signal. The integration also embeds frame_id in // ``entity_picture`` so that HA core surfaces (more-info, picture @@ -495,15 +1035,79 @@ function createAlbumSlideshowCardClass(Base) { description: attrs.description, } : null; - this._loadAndSwap(url, fit, blurBackdrop, captionData); + const photoData = { + photoIds: [...(attrs.displayed_photo_ids || [])], + entryId: attrs.entry_id, + orientation: attrs.pair_orientation, + frameId, + hiddenRevision: attrs.hidden_revision, + entityId: this._config.entity, + }; + this._loadAndSwap(url, fit, blurBackdrop, captionData, photoData); } - _loadAndSwap(url, fit, blurBackdrop, captionData) { + _clearDisplayedPhotos() { + this._loadGeneration += 1; + this._displayedPhotoIds = []; + this._displayedFrameId = null; + this._lastFrameId = null; + this._lastEntityPicture = null; + this._holdSwapsUntil = 0; + if (this._holdSwapTimer) clearTimeout(this._holdSwapTimer); + this._holdSwapTimer = null; + for (const id of ["a", "b", "blur-a", "blur-b"]) { + const image = this.shadowRoot.getElementById(id); + image.removeAttribute("src"); + image.classList.remove("show", "exit", "enter"); + } + this.shadowRoot.getElementById("captions").replaceChildren(); + this._refreshPhotoControls(this._hass.states[this._config.entity]?.attributes || {}); + } + + _refreshPhotoControls(attrs) { + this._photoControls?.update({ + entryId: attrs.entry_id, + photoIds: this._displayedPhotoIds, + orientation: this._photoOrientation, + hiddenCount: attrs.hidden_photo_count, + canUndo: attrs.undo_hide_available, + canPrevious: attrs.previous_frames_cached > 0, + canNext: attrs.media_count > 0, + paused: attrs.paused, + }); + } + + _loadAndSwap(url, fit, blurBackdrop, captionData, photoData) { + const generation = ++this._loadGeneration; // Pre-decode the new image so the swap is instant. const next = new Image(); next.decoding = "async"; - next.onload = () => this._performSwap(url, fit, blurBackdrop, captionData); - next.onerror = () => this._setPlaceholder("Failed to load slide"); + next.onload = () => { + if (generation !== this._loadGeneration) return; + if (this._controlsReveal?.holding && this._displayedPhotoIds.length && !this._navigationRequest) { + this._lastFrameId = null; + this._lastEntityPicture = null; + return; + } + const attrs = this._hass.states[this._config.entity]?.attributes || {}; + if (photoData.entityId !== this._config.entity || (attrs.frame_id ?? null) !== photoData.frameId || attrs.hidden_revision !== photoData.hiddenRevision) { + this._lastFrameId = null; + this._maybeSwap(); + return; + } + this._displayedPhotoIds = [...photoData.photoIds]; + this._displayedFrameId = photoData.frameId; + this._photoEntryId = photoData.entryId; + this._photoOrientation = photoData.orientation; + this._performSwap(url, fit, blurBackdrop, captionData); + if (this._navigationRequest && !this._navigationRequest.pending && photoData.frameId !== this._navigationRequest.frameId) { + this._cancelControlNavigation(); + } + this._refreshPhotoControls(attrs); + }; + next.onerror = () => { + if (generation === this._loadGeneration) this._setPlaceholder("Failed to load slide"); + }; next.src = url; } @@ -934,6 +1538,7 @@ const CAPTION_DATE_FORMAT_OPTIONS = [ ]; const DEFAULTS = { + photo_controls: "off", transition: "random", duration: 600, easing: "ease-in-out", @@ -1036,6 +1641,7 @@ function createAlbumSlideshowCardEditorClass(Base) { // see entity state updates. const form = this.shadowRoot.querySelector("ha-form"); if (form) form.hass = hass; + this._updatePhotoControls(); // Re-run a full update when the camera set changes (warning box) or // when any surfaced integration entity changed state, so the live // controls stay in sync with the integration. @@ -1277,6 +1883,10 @@ function createAlbumSlideshowCardEditorClass(Base) { title: "Interaction", icon: "mdi:gesture-tap", schema: [ + { + name: "photo_controls", + selector: { select: { mode: "dropdown", options: PHOTO_CONTROL_OPTIONS } }, + }, { name: "tap_action", selector: { select: { mode: "dropdown", options: TAP_OPTIONS } }, @@ -1364,6 +1974,7 @@ function createAlbumSlideshowCardEditorClass(Base) { const c = this._config || {}; return { entity: c.entity || "", + photo_controls: normalizePhotoControls(c.photo_controls), transition: c.transition || DEFAULTS.transition, duration: c.duration != null ? Number(c.duration) : DEFAULTS.duration, easing: c.easing || DEFAULTS.easing, @@ -1441,6 +2052,7 @@ function createAlbumSlideshowCardEditorClass(Base) { background: "Background (optional)", tap_action: "Tap action", tap_pause_seconds: "Tap pause (seconds)", + photo_controls: "Photo controls", caption_enabled: "Show caption overlay", caption_show: "Show", caption_position: "Position", @@ -1517,12 +2129,16 @@ function createAlbumSlideshowCardEditorClass(Base) {
+
`; const form = this.shadowRoot.querySelector("ha-form"); form.computeLabel = this._computeLabel; form.computeHelper = this._computeHelper; form.addEventListener("value-changed", (ev) => this._valueChanged(ev)); + this._photoControls = new PhotoControls( + this.shadowRoot.querySelector(".photo-controls"), () => this._hass, + ); this._rendered = true; this._update(); } @@ -1553,12 +2169,30 @@ function createAlbumSlideshowCardEditorClass(Base) { } this._renderActions(); + this._updatePhotoControls(); + } + + _updatePhotoControls() { + if (!this._photoControls) return; + const attrs = this._hass?.states[this._config?.entity]?.attributes || {}; + this.shadowRoot.querySelector(".photo-controls").hidden = !attrs.entry_id; + this._photoControls.update({ + entryId: attrs.entry_id, + photoIds: attrs.displayed_photo_ids, + orientation: attrs.pair_orientation, + hiddenCount: attrs.hidden_photo_count, + canUndo: attrs.undo_hide_available, + canPrevious: attrs.previous_frames_cached > 0, + canNext: attrs.media_count > 0, + paused: attrs.paused, + }); } _renderActions() { const wrap = this.shadowRoot.querySelector(".actions"); if (!wrap) return; - if (!this._hasActions()) { + const hasToolbarNavigation = !!this._hass?.states[this._config?.entity]?.attributes?.entry_id; + if (!this._hasActions() || (hasToolbarNavigation && !this._siblings.refresh_button)) { wrap.hidden = true; wrap.innerHTML = ""; return; @@ -1568,8 +2202,8 @@ function createAlbumSlideshowCardEditorClass(Base) { wrap.innerHTML = `
Actions
- ${s.previous_button ? `` : ""} - ${s.next_button ? `` : ""} + ${s.previous_button && !hasToolbarNavigation ? `` : ""} + ${s.next_button && !hasToolbarNavigation ? `` : ""} ${s.refresh_button ? `` : ""}
`; @@ -1651,6 +2285,9 @@ function createAlbumSlideshowCardEditorClass(Base) { const n = { type: "custom:album-slideshow-card" }; + const photoControls = normalizePhotoControls(data.photo_controls); + if (photoControls === "always") n.photo_controls = true; + if (photoControls === "on_demand") n.photo_controls = "on_demand"; if (data.entity) n.entity = data.entity; const t = data.transition || DEFAULTS.transition; diff --git a/custom_components/presence_simulation/manifest.json b/custom_components/presence_simulation/manifest.json index d66c3617..4022ba63 100644 --- a/custom_components/presence_simulation/manifest.json +++ b/custom_components/presence_simulation/manifest.json @@ -9,5 +9,5 @@ "documentation": "https://github.com/slashback100/presence_simulation", "iot_class": "local_polling", "issue_tracker": "https://github.com/slashback100/presence_simulation/issues", - "version": "5.3" + "version": "6.0" } diff --git a/custom_components/presence_simulation/services.yaml b/custom_components/presence_simulation/services.yaml index f3642a48..0fbb827f 100644 --- a/custom_components/presence_simulation/services.yaml +++ b/custom_components/presence_simulation/services.yaml @@ -27,6 +27,10 @@ start: name: Set light brightness description: Set a specific brightness fot lights that allows it example: 75 + history_end: + name: End of source history + description: ISO 8601 date and time at which source history ends. The selected history is replayed cyclically from that moment. + example: "2026-08-09T00:00:00+02:00" stop: description: Stop the presence simulation name: Presence simulation stop diff --git a/custom_components/presence_simulation/strings.json b/custom_components/presence_simulation/strings.json index fcdc9bfa..c7ca2506 100644 --- a/custom_components/presence_simulation/strings.json +++ b/custom_components/presence_simulation/strings.json @@ -14,7 +14,9 @@ "restore": "Restore state after simulation", "random": "Add a random time for switching entities. This parameter define the max time in seconds", "unavailable_as_off": "Consider Unavailable status as Off", - "brightness": "Brightness to be used if light allows the feature" + "brightness": "Brightness to be used if light allows the feature", + "history_end_date": "End date of source history", + "history_end_time": "End time of source history" } } } @@ -34,7 +36,9 @@ "restore": "Restore state after simulation", "random": "Add a random time for switching entities. This parameter define the max time in seconds", "unavailable_as_off": "Consider Unavailable status as Off", - "brightness": "Brightness to be used if light allows the feature" + "brightness": "Brightness to be used if light allows the feature", + "history_end_date": "End date of source history", + "history_end_time": "End time of source history" } } } diff --git a/custom_components/presence_simulation/translations/en-GB.json b/custom_components/presence_simulation/translations/en-GB.json index ead3c79e..29a75117 100644 --- a/custom_components/presence_simulation/translations/en-GB.json +++ b/custom_components/presence_simulation/translations/en-GB.json @@ -15,7 +15,9 @@ "restore": "Restore state after simulation", "random": "Add a random time for switching entities. This parameter define the max time in seconds", "unavailable_as_off": "Consider Unavailable status as Off", - "brightness": "Brightness to be used if light allows the feature" + "brightness": "Brightness to be used if light allows the feature", + "history_end_date": "End date of historic", + "history_end_time": "End time of historic" } } } @@ -35,7 +37,9 @@ "restore": "Restore state after simulation", "random": "Add a random time for switching entities. This parameter define the max time in seconds", "unavailable_as_off": "Consider Unavailable status as Off", - "brightness": "Brightness to be used if light allows the feature" + "brightness": "Brightness to be used if light allows the feature", + "history_end_date": "End date of historic", + "history_end_time": "End time of historic" } } } diff --git a/custom_components/presence_simulation/translations/en.json b/custom_components/presence_simulation/translations/en.json index ead3c79e..29a75117 100644 --- a/custom_components/presence_simulation/translations/en.json +++ b/custom_components/presence_simulation/translations/en.json @@ -15,7 +15,9 @@ "restore": "Restore state after simulation", "random": "Add a random time for switching entities. This parameter define the max time in seconds", "unavailable_as_off": "Consider Unavailable status as Off", - "brightness": "Brightness to be used if light allows the feature" + "brightness": "Brightness to be used if light allows the feature", + "history_end_date": "End date of historic", + "history_end_time": "End time of historic" } } } @@ -35,7 +37,9 @@ "restore": "Restore state after simulation", "random": "Add a random time for switching entities. This parameter define the max time in seconds", "unavailable_as_off": "Consider Unavailable status as Off", - "brightness": "Brightness to be used if light allows the feature" + "brightness": "Brightness to be used if light allows the feature", + "history_end_date": "End date of historic", + "history_end_time": "End time of historic" } } } diff --git a/custom_components/presence_simulation/translations/fr.json b/custom_components/presence_simulation/translations/fr.json index c5df68ac..7a6a2de5 100644 --- a/custom_components/presence_simulation/translations/fr.json +++ b/custom_components/presence_simulation/translations/fr.json @@ -15,7 +15,9 @@ "restore": "Restaurer l'état des entités à la fin de la simulation", "random": "Ajout d'un délai (s) aléatoire pour les changements d'entités", "unavailable_as_off": "Considérer le statut Indisponible comme éteint", - "brightness": "Luminosité à utiliser pour les lampes qui le permettent" + "brightness": "Luminosité à utiliser pour les lampes qui le permettent", + "history_end_date": "Date de fin de l'historique", + "history_end_time": "Heure de fin de l'historique" } } } @@ -35,7 +37,9 @@ "restore": "Restaurer l'état des entités à la fin de la simulation", "random": "Ajout d'un délai (s) aléatoire pour les changements d'entités", "unavailable_as_off": "Considérer le statut Indisponible comme éteint", - "brightness": "Luminosité à utiliser pour les lampes qui le permettent" + "brightness": "Luminosité à utiliser pour les lampes qui le permettent", + "history_end_date": "Date de fin de l'historique", + "history_end_time": "Heure de fin de l'historique" } } } diff --git a/custom_components/presence_simulation/translations/nl.json b/custom_components/presence_simulation/translations/nl.json index 5d50a57b..c2f39404 100644 --- a/custom_components/presence_simulation/translations/nl.json +++ b/custom_components/presence_simulation/translations/nl.json @@ -14,7 +14,9 @@ "interval": "Verversingsinterval (in seconden)", "restore": "Herstel toestand na simulatie", "random": "Add a random time for switching entities. This parameter define the max time in seconds", - "unavailable_as_off": "Consider Unavailable status as Off" + "unavailable_as_off": "Consider Unavailable status as Off", + "history_end_date": "Einddatum bronhistorie", + "history_end_time": "Eindtijd bronhistorie" } } } @@ -33,7 +35,9 @@ "interval": "Verversingsinterval (in seconden)", "restore": "Herstel toestand na simulatie", "random": "Add a random time for switching entities. This parameter define the max time in seconds", - "unavailable_as_off": "Consider Unavailable status as Off" + "unavailable_as_off": "Consider Unavailable status as Off", + "history_end_date": "Einddatum bronhistorie", + "history_end_time": "Eindtijd bronhistorie" } } } diff --git a/custom_components/seatemperatures/manifest.json b/custom_components/seatemperatures/manifest.json index c47917a7..70de3507 100644 --- a/custom_components/seatemperatures/manifest.json +++ b/custom_components/seatemperatures/manifest.json @@ -12,5 +12,5 @@ "iot_class": "cloud_polling", "issue_tracker": "https://github.com/timmaurice/sea-temperatures/issues", "requirements": [], - "version": "3.3.0" + "version": "3.3.1" } diff --git a/custom_components/seatemperatures/sea-temperatures-card.js b/custom_components/seatemperatures/sea-temperatures-card.js index f09f4bd0..11c0b5ad 100644 --- a/custom_components/seatemperatures/sea-temperatures-card.js +++ b/custom_components/seatemperatures/sea-temperatures-card.js @@ -1,4 +1,4 @@ -function t(t,e,n,r){var i,a=arguments.length,s=a<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,r);else for(var o=t.length-1;o>=0;o--)(i=t[o])&&(s=(a<3?i(s):a>3?i(e,n,s):i(e,n))||s);return a>3&&s&&Object.defineProperty(e,n,s),s}console.groupCollapsed("%c🌊 SEA TEMPERATURES CARD%cv3.3.0","color: orange; font-weight: bold; background: black; padding: 2px 4px; border-radius: 2px 0 0 2px;","color: white; font-weight: bold; background: dimgray; padding: 2px 4px; border-radius: 0 2px 2px 0;"),console.info("A Lovelace card to display sea temperatures."),console.info("Github: https://github.com/timmaurice/sea-temperatures.git"),console.info("Sponsor: https://buymeacoffee.com/timmaurice"),console.groupEnd(),"function"==typeof SuppressedError&&SuppressedError; +function t(t,e,n,r){var i,a=arguments.length,s=a<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,r);else for(var o=t.length-1;o>=0;o--)(i=t[o])&&(s=(a<3?i(s):a>3?i(e,n,s):i(e,n))||s);return a>3&&s&&Object.defineProperty(e,n,s),s}console.groupCollapsed("%c🌊 SEA TEMPERATURES CARD%cv3.3.1","color: orange; font-weight: bold; background: black; padding: 2px 4px; border-radius: 2px 0 0 2px;","color: white; font-weight: bold; background: dimgray; padding: 2px 4px; border-radius: 0 2px 2px 0;"),console.info("A Lovelace card to display sea temperatures."),console.info("Github: https://github.com/timmaurice/sea-temperatures.git"),console.info("Sponsor: https://buymeacoffee.com/timmaurice"),console.groupEnd(),"function"==typeof SuppressedError&&SuppressedError; /** * @license * Copyright 2019 Google LLC @@ -15,7 +15,7 @@ const e=globalThis,n=e.ShadowRoot&&(void 0===e.ShadyCSS||e.ShadyCSS.nativeShadow * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ -const M=globalThis,A=t=>t,S=M.trustedTypes,T=S?S.createPolicy("lit-html",{createHTML:t=>t}):void 0,C="$lit$",N=`lit$${Math.random().toFixed(9).slice(2)}$`,k="?"+N,E=`<${k}>`,D=document,U=()=>D.createComment(""),P=t=>null===t||"object"!=typeof t&&"function"!=typeof t,O=Array.isArray,H="[ \t\n\f\r]",F=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,L=/-->/g,z=/>/g,j=RegExp(`>|${H}(?:([^\\s"'>=/]+)(${H}*=${H}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),R=/'/g,Y=/"/g,q=/^(?:script|style|textarea|title)$/i,I=t=>(e,...n)=>({_$litType$:t,strings:e,values:n}),W=I(1),Z=I(2),V=Symbol.for("lit-noChange"),B=Symbol.for("lit-nothing"),G=new WeakMap,X=D.createTreeWalker(D,129);function J(t,e){if(!O(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==T?T.createHTML(e):e}const Q=(t,e)=>{const n=t.length-1,r=[];let i,a=2===e?"":3===e?"":"",s=F;for(let e=0;e"===c[0]?(s=i??F,l=-1):void 0===c[1]?l=-2:(l=s.lastIndex-c[2].length,o=c[1],s=void 0===c[3]?j:'"'===c[3]?Y:R):s===Y||s===R?s=j:s===L||s===z?s=F:(s=j,i=void 0);const h=s===j&&t[e+1].startsWith("/>")?" ":"";a+=s===F?n+E:l>=0?(r.push(o),n.slice(0,l)+C+n.slice(l)+N+h):n+N+(-2===l?e:h)}return[J(t,a+(t[n]||"")+(2===e?"":3===e?"":"")),r]};class K{constructor({strings:t,_$litType$:e},n){let r;this.parts=[];let i=0,a=0;const s=t.length-1,o=this.parts,[c,l]=Q(t,e);if(this.el=K.createElement(c,n),X.currentNode=this.el.content,2===e||3===e){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=X.nextNode())&&o.length0){r.textContent=S?S.emptyScript:"";for(let n=0;nO(t)||"function"==typeof t?.[Symbol.iterator])(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==B&&P(this._$AH)?this._$AA.nextSibling.data=t:this.T(D.createTextNode(t)),this._$AH=t}$(t){const{values:e,_$litType$:n}=t,r="number"==typeof n?this._$AC(t):(void 0===n.el&&(n.el=K.createElement(J(n.h,n.h[0]),this.options)),n);if(this._$AH?._$AD===r)this._$AH.p(e);else{const t=new et(r,this),n=t.u(this.options);t.p(e),this.T(n),this._$AH=t}}_$AC(t){let e=G.get(t.strings);return void 0===e&&G.set(t.strings,e=new K(t)),e}k(t){O(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let n,r=0;for(const i of t)r===e.length?e.push(n=new nt(this.O(U()),this.O(U()),this,this.options)):n=e[r],n._$AI(i),r++;r2||""!==n[0]||""!==n[1]?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=B}_$AI(t,e=this,n,r){const i=this.strings;let a=!1;if(void 0===i)t=tt(this,t,e,0),a=!P(t)||t!==this._$AH&&t!==V,a&&(this._$AH=t);else{const r=t;let s,o;for(t=i[0],s=0;st,S=M.trustedTypes,T=S?S.createPolicy("lit-html",{createHTML:t=>t}):void 0,C="$lit$",N=`lit$${Math.random().toFixed(9).slice(2)}$`,k="?"+N,E=`<${k}>`,D=document,U=()=>D.createComment(""),P=t=>null===t||"object"!=typeof t&&"function"!=typeof t,O=Array.isArray,F="[ \t\n\f\r]",H=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,L=/-->/g,z=/>/g,j=RegExp(`>|${F}(?:([^\\s"'>=/]+)(${F}*=${F}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),R=/'/g,Y=/"/g,q=/^(?:script|style|textarea|title)$/i,I=t=>(e,...n)=>({_$litType$:t,strings:e,values:n}),W=I(1),Z=I(2),V=Symbol.for("lit-noChange"),B=Symbol.for("lit-nothing"),G=new WeakMap,X=D.createTreeWalker(D,129);function J(t,e){if(!O(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==T?T.createHTML(e):e}const Q=(t,e)=>{const n=t.length-1,r=[];let i,a=2===e?"":3===e?"":"",s=H;for(let e=0;e"===c[0]?(s=i??H,l=-1):void 0===c[1]?l=-2:(l=s.lastIndex-c[2].length,o=c[1],s=void 0===c[3]?j:'"'===c[3]?Y:R):s===Y||s===R?s=j:s===L||s===z?s=H:(s=j,i=void 0);const h=s===j&&t[e+1].startsWith("/>")?" ":"";a+=s===H?n+E:l>=0?(r.push(o),n.slice(0,l)+C+n.slice(l)+N+h):n+N+(-2===l?e:h)}return[J(t,a+(t[n]||"")+(2===e?"":3===e?"":"")),r]};class K{constructor({strings:t,_$litType$:e},n){let r;this.parts=[];let i=0,a=0;const s=t.length-1,o=this.parts,[c,l]=Q(t,e);if(this.el=K.createElement(c,n),X.currentNode=this.el.content,2===e||3===e){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=X.nextNode())&&o.length0){r.textContent=S?S.emptyScript:"";for(let n=0;nO(t)||"function"==typeof t?.[Symbol.iterator])(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==B&&P(this._$AH)?this._$AA.nextSibling.data=t:this.T(D.createTextNode(t)),this._$AH=t}$(t){const{values:e,_$litType$:n}=t,r="number"==typeof n?this._$AC(t):(void 0===n.el&&(n.el=K.createElement(J(n.h,n.h[0]),this.options)),n);if(this._$AH?._$AD===r)this._$AH.p(e);else{const t=new et(r,this),n=t.u(this.options);t.p(e),this.T(n),this._$AH=t}}_$AC(t){let e=G.get(t.strings);return void 0===e&&G.set(t.strings,e=new K(t)),e}k(t){O(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let n,r=0;for(const i of t)r===e.length?e.push(n=new nt(this.O(U()),this.O(U()),this,this.options)):n=e[r],n._$AI(i),r++;r2||""!==n[0]||""!==n[1]?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=B}_$AI(t,e=this,n,r){const i=this.strings;let a=!1;if(void 0===i)t=tt(this,t,e,0),a=!P(t)||t!==this._$AH&&t!==V,a&&(this._$AH=t);else{const r=t;let s,o;for(t=i[0],s=0;s{const i=new CustomEvent(e,{bubbles:!0,cancelable:!1,composed:!0,...r,detail:n});t.dispatchEvent(i)},bt=new Set(["unavailable","unknown",""]);function xt(t,e,n={}){const r=(e??"").trim();if(!r)return{ok:!1,reason:"not_found",target:r};const i=r.indexOf(".");if(i<0)return{ok:!1,reason:"not_found",target:r};if(n.domain&&r.slice(0,i)!==n.domain)return{ok:!1,reason:"wrong_domain",target:r};const a=t?.states?.[r];return a?bt.has(a.state)?{ok:!1,reason:"unavailable",target:r}:n.numeric&&isNaN(parseFloat(a.state))?{ok:!1,reason:"not_numeric",target:r}:{ok:!0,entity:a}:{ok:!1,reason:"not_found",target:r}}const $t={comma_decimal:"en-US",decimal_comma:"de-DE",space_comma:"fr-FR",system:void 0};function wt(t,e,n){if(isNaN(t))return String(t);if("none"===e?.locale?.number_format)return String(t);try{return new Intl.NumberFormat(function(t){const e=t?.locale?.number_format;return e&&e in $t?$t[e]:t?.locale?.language||t?.language||void 0}(e),n).format(t)}catch{return String(t)}}function Mt(t,e,n){if(isNaN(t.getTime()))return"";try{return new Intl.DateTimeFormat(e?.language||void 0,n).format(t)}catch{return t.toISOString()}}function At(t,e){return Mt(t,e,{month:"short",day:"numeric"})}function St(t){return!isNaN(parseFloat(String(t)))}function Tt(t,e){return null==t||null==e?NaN:te?1:t>=e?0:NaN}function Ct(t,e){return null==t||null==e?NaN:et?1:e>=t?0:NaN}function Nt(t){let e,n,r;function i(t,r,i=0,a=t.length){if(i>>1;n(t[e],r)<0?i=e+1:a=e}while(iTt(t(e),n),r=(e,n)=>t(e)-n):(e=t===Tt||t===Ct?t:kt,n=t,r=t),{left:i,center:function(t,e,n=0,a=t.length){const s=i(t,e,n,a-1);return s>n&&r(t[s-1],e)>-r(t[s],e)?s-1:s},right:function(t,r,i=0,a=t.length){if(i>>1;n(t[e],r)<=0?i=e+1:a=e}while(i=e&&(n=r=e):(n>e&&(n=e),r=a&&(n=r=a):(n>a&&(n=a),r=Ut?10:a>=Pt?5:a>=Ot?2:1;let o,c,l;return i<0?(l=Math.pow(10,-i)/s,o=Math.round(t*l),c=Math.round(e*l),o/le&&--c,l=-l):(l=Math.pow(10,i)*s,o=Math.round(t/l),c=Math.round(e/l),o*le&&--c),c>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?se(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?se(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Gt.exec(t))?new ce(e[1],e[2],e[3],1):(e=Xt.exec(t))?new ce(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Jt.exec(t))?se(e[1],e[2],e[3],e[4]):(e=Qt.exec(t))?se(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=Kt.exec(t))?fe(e[1],e[2]/100,e[3]/100,1):(e=te.exec(t))?fe(e[1],e[2]/100,e[3]/100,e[4]):ee.hasOwnProperty(t)?ae(ee[t]):"transparent"===t?new ce(NaN,NaN,NaN,0):null}function ae(t){return new ce(t>>16&255,t>>8&255,255&t,1)}function se(t,e,n,r){return r<=0&&(t=e=n=NaN),new ce(t,e,n,r)}function oe(t,e,n,r){return 1===arguments.length?function(t){return t instanceof Yt||(t=ie(t)),t?new ce((t=t.rgb()).r,t.g,t.b,t.opacity):new ce}(t):new ce(t,e,n,null==r?1:r)}function ce(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function le(){return`#${pe(this.r)}${pe(this.g)}${pe(this.b)}`}function ue(){const t=he(this.opacity);return`${1===t?"rgb(":"rgba("}${de(this.r)}, ${de(this.g)}, ${de(this.b)}${1===t?")":`, ${t})`}`}function he(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function de(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function pe(t){return((t=de(t))<16?"0":"")+t.toString(16)}function fe(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new me(t,e,n,r)}function ge(t){if(t instanceof me)return new me(t.h,t.s,t.l,t.opacity);if(t instanceof Yt||(t=ie(t)),!t)return new me;if(t instanceof me)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),s=NaN,o=a-i,c=(a+i)/2;return o?(s=e===a?(n-r)/o+6*(n0&&c<1?0:s,new me(s,o,c,t.opacity)}function me(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function _e(t){return(t=(t||0)%360)<0?t+360:t}function ye(t){return Math.max(0,Math.min(1,t||0))}function ve(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}jt(Yt,ie,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:ne,formatHex:ne,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return ge(this).formatHsl()},formatRgb:re,toString:re}),jt(ce,oe,Rt(Yt,{brighter(t){return t=null==t?It:Math.pow(It,t),new ce(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?qt:Math.pow(qt,t),new ce(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new ce(de(this.r),de(this.g),de(this.b),he(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:le,formatHex:le,formatHex8:function(){return`#${pe(this.r)}${pe(this.g)}${pe(this.b)}${pe(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:ue,toString:ue})),jt(me,function(t,e,n,r){return 1===arguments.length?ge(t):new me(t,e,n,null==r?1:r)},Rt(Yt,{brighter(t){return t=null==t?It:Math.pow(It,t),new me(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?qt:Math.pow(qt,t),new me(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new ce(ve(t>=240?t-240:t+120,i,r),ve(t,i,r),ve(t<120?t+240:t-120,i,r),this.opacity)},clamp(){return new me(_e(this.h),ye(this.s),ye(this.l),he(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=he(this.opacity);return`${1===t?"hsl(":"hsla("}${_e(this.h)}, ${100*ye(this.s)}%, ${100*ye(this.l)}%${1===t?")":`, ${t})`}`}}));var be=t=>()=>t;function xe(t){return 1===(t=+t)?$e:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):be(isNaN(e)?n:e)}}function $e(t,e){var n=e-t;return n?function(t,e){return function(n){return t+n*e}}(t,n):be(isNaN(t)?e:t)}var we=function t(e){var n=xe(e);function r(t,e){var r=n((t=oe(t)).r,(e=oe(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),s=$e(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=s(e),t+""}}return r.gamma=t,r}(1);function Me(t,e){e||(e=[]);var n,r=t?Math.min(e.length,t.length):0,i=e.slice();return function(a){for(n=0;na&&(i=e.slice(a,i),o[s]?o[s]+=i:o[++s]=i),(n=n[0])===(r=r[0])?o[s]?o[s]+=r:o[++s]=r:(o[++s]=null,c.push({i:s,x:Te(n,r)})),a=ke.lastIndex;return ae&&(n=t,t=e,e=n),function(n){return Math.max(t,Math.min(e,n))}}(s[0],s[t-1])),r=t>2?ze:Le,i=a=null,h}function h(e){return null==e||isNaN(e=+e)?n:(i||(i=r(s.map(t),o,c)))(t(l(e)))}return h.invert=function(n){return l(e((a||(a=r(o,s.map(t),Te)))(n)))},h.domain=function(t){return arguments.length?(s=Array.from(t,Pe),u()):s.slice()},h.range=function(t){return arguments.length?(o=Array.from(t),u()):o.slice()},h.rangeRound=function(t){return o=Array.from(t),c=Ue,u()},h.clamp=function(t){return arguments.length?(l=!!t||He,u()):l!==He},h.interpolate=function(t){return arguments.length?(c=t,u()):c},h.unknown=function(t){return arguments.length?(n=t,h):n},function(n,r){return t=n,e=r,u()}}function Ye(){return Re()(He,He)}function qe(t,e){if(!isFinite(t)||0===t)return null;var n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"),r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function Ie(t){return(t=qe(Math.abs(t)))?t[1]:NaN}var We,Ze=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Ve(t){if(!(e=Ze.exec(t)))throw new Error("invalid format: "+t);var e;return new Be({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function Be(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function Ge(t,e){var n=qe(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}Ve.prototype=Be.prototype,Be.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var Xe={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>Ge(100*t,e),r:Ge,s:function(t,e){var n=qe(t,e);if(!n)return We=void 0,t.toPrecision(e);var r=n[0],i=n[1],a=i-(We=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,s=r.length;return a===s?r:a>s?r+new Array(a-s+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+qe(t,Math.max(0,e+a-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function Je(t){return t}var Qe,Ke,tn,en=Array.prototype.map,nn=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function rn(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?Je:(e=en.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,a=[],s=0,o=e[0],c=0;i>0&&o>0&&(c+o+1>r&&(o=Math.max(1,r-c)),a.push(t.substring(i-=o,i+o)),!((c+=o+1)>r));)o=e[s=(s+1)%e.length];return a.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",s=void 0===t.decimal?".":t.decimal+"",o=void 0===t.numerals?Je:function(t){return function(e){return e.replace(/[0-9]/g,function(e){return t[+e]})}}(en.call(t.numerals,String)),c=void 0===t.percent?"%":t.percent+"",l=void 0===t.minus?"−":t.minus+"",u=void 0===t.nan?"NaN":t.nan+"";function h(t,e){var n=(t=Ve(t)).fill,h=t.align,d=t.sign,p=t.symbol,f=t.zero,g=t.width,m=t.comma,_=t.precision,y=t.trim,v=t.type;"n"===v?(m=!0,v="g"):Xe[v]||(void 0===_&&(_=12),y=!0,v="g"),(f||"0"===n&&"="===h)&&(f=!0,n="0",h="=");var b=(e&&void 0!==e.prefix?e.prefix:"")+("$"===p?i:"#"===p&&/[boxX]/.test(v)?"0"+v.toLowerCase():""),x=("$"===p?a:/[%p]/.test(v)?c:"")+(e&&void 0!==e.suffix?e.suffix:""),$=Xe[v],w=/[defgprs%]/.test(v);function M(t){var e,i,a,c=b,p=x;if("c"===v)p=$(t)+p,t="";else{var M=(t=+t)<0||1/t<0;if(t=isNaN(t)?u:$(Math.abs(t),_),y&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),M&&0===+t&&"+"!==d&&(M=!1),c=(M?"("===d?d:l:"-"===d||"("===d?"":d)+c,p=("s"!==v||isNaN(t)||void 0===We?"":nn[8+We/3])+p+(M&&"("===d?")":""),w)for(e=-1,i=t.length;++e(a=t.charCodeAt(e))||a>57){p=(46===a?s+t.slice(e+1):t.slice(e))+p,t=t.slice(0,e);break}}m&&!f&&(t=r(t,1/0));var A=c.length+t.length+p.length,S=A>1)+c+t+p+S.slice(A);break;default:t=S+c+t+p}return o(t)}return _=void 0===_?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,_)):Math.max(0,Math.min(20,_)),M.toString=function(){return t+""},M}return{format:h,formatPrefix:function(t,e){var n=3*Math.max(-8,Math.min(8,Math.floor(Ie(e)/3))),r=Math.pow(10,-n),i=h(((t=Ve(t)).type="f",t),{suffix:nn[8+n/3]});return function(t){return i(r*t)}}}}function an(t,e,n,r){var i,a=Lt(t,e,n);switch((r=Ve(null==r?",f":r)).type){case"s":var s=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Ie(e)/3)))-Ie(Math.abs(t)))}(a,s))||(r.precision=i),tn(r,s);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Ie(e)-Ie(t))+1}(a,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=function(t){return Math.max(0,-Ie(Math.abs(t)))}(a))||(r.precision=i-2*("%"===r.type))}return Ke(r)}function sn(t){var e=t.domain;return t.ticks=function(t){var n=e();return function(t,e,n){if(!((n=+n)>0))return[];if((t=+t)===(e=+e))return[t];const r=e=i))return[];const o=a-i+1,c=new Array(o);if(r)if(s<0)for(let t=0;t0;){if((i=Ft(c,l,n))===r)return a[s]=c,a[o]=l,e(a);if(i>0)c=Math.floor(c/i)*i,l=Math.ceil(l/i)*i;else{if(!(i<0))break;c=Math.ceil(c*i)/i,l=Math.floor(l*i)/i}r=i}return t},t}function on(){var t=Ye();return t.copy=function(){return je(t,on())},zt.apply(t,arguments),sn(t)}Qe=rn({thousands:",",grouping:[3],currency:["$",""]}),Ke=Qe.format,tn=Qe.formatPrefix;const cn=new Date,ln=new Date;function un(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=e=>(t(e=new Date(+e)),e),i.ceil=n=>(t(n=new Date(n-1)),e(n,1),t(n),n),i.round=t=>{const e=i(t),n=i.ceil(t);return t-e(e(t=new Date(+t),null==n?1:Math.floor(n)),t),i.range=(n,r,a)=>{const s=[];if(n=i.ceil(n),a=null==a?1:Math.floor(a),!(n0))return s;let o;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(oun(e=>{if(e>=e)for(;t(e),!n(e);)e.setTime(e-1)},(t,r)=>{if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}),n&&(i.count=(e,r)=>(cn.setTime(+e),ln.setTime(+r),t(cn),t(ln),Math.floor(n(cn,ln))),i.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?e=>r(e)%t===0:e=>i.count(0,e)%t===0):i:null)),i}const hn=un(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);hn.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?un(e=>{e.setTime(Math.floor(e/t)*t)},(e,n)=>{e.setTime(+e+n*t)},(e,n)=>(n-e)/t):hn:null),hn.range;const dn=1e3,pn=6e4,fn=36e5,gn=864e5,mn=6048e5,_n=2592e6,yn=31536e6,vn=un(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*dn)},(t,e)=>(e-t)/dn,t=>t.getUTCSeconds());vn.range;const bn=un(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*dn)},(t,e)=>{t.setTime(+t+e*pn)},(t,e)=>(e-t)/pn,t=>t.getMinutes());bn.range;const xn=un(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*pn)},(t,e)=>(e-t)/pn,t=>t.getUTCMinutes());xn.range;const $n=un(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*dn-t.getMinutes()*pn)},(t,e)=>{t.setTime(+t+e*fn)},(t,e)=>(e-t)/fn,t=>t.getHours());$n.range;const wn=un(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*fn)},(t,e)=>(e-t)/fn,t=>t.getUTCHours());wn.range;const Mn=un(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*pn)/gn,t=>t.getDate()-1);Mn.range;const An=un(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/gn,t=>t.getUTCDate()-1);An.range;const Sn=un(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/gn,t=>Math.floor(t/gn));function Tn(t){return un(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(t,e)=>{t.setDate(t.getDate()+7*e)},(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*pn)/mn)}Sn.range;const Cn=Tn(0),Nn=Tn(1),kn=Tn(2),En=Tn(3),Dn=Tn(4),Un=Tn(5),Pn=Tn(6);function On(t){return un(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)},(t,e)=>(e-t)/mn)}Cn.range,Nn.range,kn.range,En.range,Dn.range,Un.range,Pn.range;const Hn=On(0),Fn=On(1),Ln=On(2),zn=On(3),jn=On(4),Rn=On(5),Yn=On(6);Hn.range,Fn.range,Ln.range,zn.range,jn.range,Rn.range,Yn.range;const qn=un(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear()),t=>t.getMonth());qn.range;const In=un(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear()),t=>t.getUTCMonth());In.range;const Wn=un(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());Wn.every=t=>isFinite(t=Math.floor(t))&&t>0?un(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,n)=>{e.setFullYear(e.getFullYear()+n*t)}):null,Wn.range;const Zn=un(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());Zn.every=t=>isFinite(t=Math.floor(t))&&t>0?un(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)}):null,Zn.range;const[Vn,Bn]=function(t,e,n,r,i,a){const s=[[vn,1,dn],[vn,5,5e3],[vn,15,15e3],[vn,30,3e4],[a,1,pn],[a,5,3e5],[a,15,9e5],[a,30,18e5],[i,1,fn],[i,3,108e5],[i,6,216e5],[i,12,432e5],[r,1,gn],[r,2,1728e5],[n,1,mn],[e,1,_n],[e,3,7776e6],[t,1,yn]];function o(e,n,r){const i=Math.abs(n-e)/r,a=Nt(([,,t])=>t).right(s,i);if(a===s.length)return t.every(Lt(e/yn,n/yn,r));if(0===a)return hn.every(Math.max(Lt(e,n,r),1));const[o,c]=s[i/s[a-1][2][t.toLowerCase(),e]))}function cr(t,e,n){var r=er.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function lr(t,e,n){var r=er.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function ur(t,e,n){var r=er.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function hr(t,e,n){var r=er.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function dr(t,e,n){var r=er.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function pr(t,e,n){var r=er.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function fr(t,e,n){var r=er.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function gr(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function mr(t,e,n){var r=er.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function _r(t,e,n){var r=er.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function yr(t,e,n){var r=er.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function vr(t,e,n){var r=er.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function br(t,e,n){var r=er.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function xr(t,e,n){var r=er.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function $r(t,e,n){var r=er.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function wr(t,e,n){var r=er.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Mr(t,e,n){var r=er.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Ar(t,e,n){var r=nr.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Sr(t,e,n){var r=er.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Tr(t,e,n){var r=er.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Cr(t,e){return ir(t.getDate(),e,2)}function Nr(t,e){return ir(t.getHours(),e,2)}function kr(t,e){return ir(t.getHours()%12||12,e,2)}function Er(t,e){return ir(1+Mn.count(Wn(t),t),e,3)}function Dr(t,e){return ir(t.getMilliseconds(),e,3)}function Ur(t,e){return Dr(t,e)+"000"}function Pr(t,e){return ir(t.getMonth()+1,e,2)}function Or(t,e){return ir(t.getMinutes(),e,2)}function Hr(t,e){return ir(t.getSeconds(),e,2)}function Fr(t){var e=t.getDay();return 0===e?7:e}function Lr(t,e){return ir(Cn.count(Wn(t)-1,t),e,2)}function zr(t){var e=t.getDay();return e>=4||0===e?Dn(t):Dn.ceil(t)}function jr(t,e){return t=zr(t),ir(Dn.count(Wn(t),t)+(4===Wn(t).getDay()),e,2)}function Rr(t){return t.getDay()}function Yr(t,e){return ir(Nn.count(Wn(t)-1,t),e,2)}function qr(t,e){return ir(t.getFullYear()%100,e,2)}function Ir(t,e){return ir((t=zr(t)).getFullYear()%100,e,2)}function Wr(t,e){return ir(t.getFullYear()%1e4,e,4)}function Zr(t,e){var n=t.getDay();return ir((t=n>=4||0===n?Dn(t):Dn.ceil(t)).getFullYear()%1e4,e,4)}function Vr(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+ir(e/60|0,"0",2)+ir(e%60,"0",2)}function Br(t,e){return ir(t.getUTCDate(),e,2)}function Gr(t,e){return ir(t.getUTCHours(),e,2)}function Xr(t,e){return ir(t.getUTCHours()%12||12,e,2)}function Jr(t,e){return ir(1+An.count(Zn(t),t),e,3)}function Qr(t,e){return ir(t.getUTCMilliseconds(),e,3)}function Kr(t,e){return Qr(t,e)+"000"}function ti(t,e){return ir(t.getUTCMonth()+1,e,2)}function ei(t,e){return ir(t.getUTCMinutes(),e,2)}function ni(t,e){return ir(t.getUTCSeconds(),e,2)}function ri(t){var e=t.getUTCDay();return 0===e?7:e}function ii(t,e){return ir(Hn.count(Zn(t)-1,t),e,2)}function ai(t){var e=t.getUTCDay();return e>=4||0===e?jn(t):jn.ceil(t)}function si(t,e){return t=ai(t),ir(jn.count(Zn(t),t)+(4===Zn(t).getUTCDay()),e,2)}function oi(t){return t.getUTCDay()}function ci(t,e){return ir(Fn.count(Zn(t)-1,t),e,2)}function li(t,e){return ir(t.getUTCFullYear()%100,e,2)}function ui(t,e){return ir((t=ai(t)).getUTCFullYear()%100,e,2)}function hi(t,e){return ir(t.getUTCFullYear()%1e4,e,4)}function di(t,e){var n=t.getUTCDay();return ir((t=n>=4||0===n?jn(t):jn.ceil(t)).getUTCFullYear()%1e4,e,4)}function pi(){return"+0000"}function fi(){return"%"}function gi(t){return+t}function mi(t){return Math.floor(+t/1e3)}function _i(t){return new Date(t)}function yi(t){return t instanceof Date?+t:+new Date(+t)}function vi(t,e,n,r,i,a,s,o,c,l){var u=Ye(),h=u.invert,d=u.domain,p=l(".%L"),f=l(":%S"),g=l("%I:%M"),m=l("%I %p"),_=l("%a %d"),y=l("%b %d"),v=l("%B"),b=l("%Y");function x(t){return(c(t)=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:gi,s:mi,S:Hr,u:Fr,U:Lr,V:jr,w:Rr,W:Yr,x:null,X:null,y:qr,Y:Wr,Z:Vr,"%":fi},b={a:function(t){return s[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return o[t.getUTCMonth()]},c:null,d:Br,e:Br,f:Kr,g:ui,G:di,H:Gr,I:Xr,j:Jr,L:Qr,m:ti,M:ei,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:gi,s:mi,S:ni,u:ri,U:ii,V:si,w:oi,W:ci,x:null,X:null,y:li,Y:hi,Z:pi,"%":fi},x={a:function(t,e,n){var r=p.exec(e.slice(n));return r?(t.w=f.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=h.exec(e.slice(n));return r?(t.w=d.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=_.exec(e.slice(n));return r?(t.m=y.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=g.exec(e.slice(n));return r?(t.m=m.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return M(t,e,n,r)},d:yr,e:yr,f:Mr,g:fr,G:pr,H:br,I:br,j:vr,L:wr,m:_r,M:xr,p:function(t,e,n){var r=l.exec(e.slice(n));return r?(t.p=u.get(r[0].toLowerCase()),n+r[0].length):-1},q:mr,Q:Sr,s:Tr,S:$r,u:lr,U:ur,V:hr,w:cr,W:dr,x:function(t,e,r){return M(t,n,e,r)},X:function(t,e,n){return M(t,r,e,n)},y:fr,Y:pr,Z:gr,"%":Ar};function $(t,e){return function(n){var r,i,a,s=[],o=-1,c=0,l=t.length;for(n instanceof Date||(n=new Date(+n));++o53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=Xn(Jn(a.y,0,1))).getUTCDay(),r=i>4||0===i?Fn.ceil(r):Fn(r),r=An.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=Gn(Jn(a.y,0,1))).getDay(),r=i>4||0===i?Nn.ceil(r):Nn(r),r=Mn.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?Xn(Jn(a.y,0,1)).getUTCDay():Gn(Jn(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,Xn(a)):Gn(a)}}function M(t,e,n,r){for(var i,a,s=0,o=e.length,c=n.length;s=c)return-1;if(37===(i=e.charCodeAt(s++))){if(i=e.charAt(s++),!(a=x[i in tr?e.charAt(s++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return v.x=$(n,v),v.X=$(r,v),v.c=$(e,v),b.x=$(n,b),b.X=$(r,b),b.c=$(e,b),{format:function(t){var e=$(t+="",v);return e.toString=function(){return t},e},parse:function(t){var e=w(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=$(t+="",b);return e.toString=function(){return t},e},utcParse:function(t){var e=w(t+="",!0);return e.toString=function(){return t},e}}}(t),Kn=Qn.format,Qn.parse,Qn.utcFormat,Qn.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});const $i=Math.PI,wi=2*$i,Mi=1e-6,Ai=wi-Mi;function Si(t){this._+=t[0];for(let e=1,n=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return Si;const n=10**e;return function(t){this._+=t[0];for(let e=1,r=t.length;eMi)if(Math.abs(u*o-c*l)>Mi&&i){let d=n-a,p=r-s,f=o*o+c*c,g=d*d+p*p,m=Math.sqrt(f),_=Math.sqrt(h),y=i*Math.tan(($i-Math.acos((f+h-g)/(2*m*_)))/2),v=y/_,b=y/m;Math.abs(v-1)>Mi&&this._append`L${t+v*l},${e+v*u}`,this._append`A${i},${i},0,0,${+(u*d>l*p)},${this._x1=t+b*o},${this._y1=e+b*c}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,n,r,i,a){if(t=+t,e=+e,a=!!a,(n=+n)<0)throw new Error(`negative radius: ${n}`);let s=n*Math.cos(r),o=n*Math.sin(r),c=t+s,l=e+o,u=1^a,h=a?r-i:i-r;null===this._x1?this._append`M${c},${l}`:(Math.abs(this._x1-c)>Mi||Math.abs(this._y1-l)>Mi)&&this._append`L${c},${l}`,n&&(h<0&&(h=h%wi+wi),h>Ai?this._append`A${n},${n},0,1,${u},${t-s},${e-o}A${n},${n},0,1,${u},${this._x1=c},${this._y1=l}`:h>Mi&&this._append`A${n},${n},0,${+(h>=$i)},${u},${this._x1=t+n*Math.cos(i)},${this._y1=e+n*Math.sin(i)}`)}rect(t,e,n,r){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${n=+n}v${+r}h${-n}Z`}toString(){return this._}}function Ci(t){let e=3;return t.digits=function(n){if(!arguments.length)return e;if(null==n)e=null;else{const t=Math.floor(n);if(!(t>=0))throw new RangeError(`invalid digits: ${n}`);e=t}return t},()=>new Ti(e)}function Ni(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function ki(t){this._context=t}function Ei(t){return new ki(t)}function Di(t){return t[0]}function Ui(t){return t[1]}function Pi(t,e){var n=xi(!0),r=null,i=Ei,a=null,s=Ci(o);function o(o){var c,l,u,h=(o=Ni(o)).length,d=!1;for(null==r&&(a=i(u=s())),c=0;c<=h;++c)!(c=h;--d)o.point(_[d],y[d]);o.lineEnd(),o.areaEnd()}m&&(_[u]=+t(p,u,l),y[u]=+e(p,u,l),o.point(r?+r(p,u,l):_[u],n?+n(p,u,l):y[u]))}if(f)return o=null,f+""||null}function u(){return Pi().defined(i).curve(s).context(a)}return t="function"==typeof t?t:void 0===t?Di:xi(+t),e="function"==typeof e?e:xi(void 0===e?0:+e),n="function"==typeof n?n:void 0===n?Ui:xi(+n),l.x=function(e){return arguments.length?(t="function"==typeof e?e:xi(+e),r=null,l):t},l.x0=function(e){return arguments.length?(t="function"==typeof e?e:xi(+e),l):t},l.x1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:xi(+t),l):r},l.y=function(t){return arguments.length?(e="function"==typeof t?t:xi(+t),n=null,l):e},l.y0=function(t){return arguments.length?(e="function"==typeof t?t:xi(+t),l):e},l.y1=function(t){return arguments.length?(n=null==t?null:"function"==typeof t?t:xi(+t),l):n},l.lineX0=l.lineY0=function(){return u().x(t).y(e)},l.lineY1=function(){return u().x(t).y(n)},l.lineX1=function(){return u().x(r).y(e)},l.defined=function(t){return arguments.length?(i="function"==typeof t?t:xi(!!t),l):i},l.curve=function(t){return arguments.length?(s=t,null!=a&&(o=s(a)),l):s},l.context=function(t){return arguments.length?(null==t?a=o=null:o=s(a=t),l):a},l}function Hi(t){return t<0?-1:1}function Fi(t,e,n){var r=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(r||i<0&&-0),s=(n-t._y1)/(i||r<0&&-0),o=(a*i+s*r)/(r+i);return(Hi(a)+Hi(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(o))||0}function Li(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function zi(t,e,n){var r=t._x0,i=t._y0,a=t._x1,s=t._y1,o=(a-r)/3;t._context.bezierCurveTo(r+o,i+o*e,a-o,s-o*n,a,s)}function ji(t){this._context=t}function Ri(t){return new ji(t)}function Yi(t,e){this._context=t,this._t=e}function qi(t){return new Yi(t,1)}ki.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}},ji.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:zi(this,this._t0,Li(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var n=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,zi(this,Li(this,n=Fi(this,t,e)),n);break;default:zi(this,this._t0,n=Fi(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=n}}},Object.create(ji.prototype).point=function(t,e){ji.prototype.point.call(this,e,t)},Yi.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};const Ii=o`:host{display:block}:host ::slotted(.card-content),.card-content{display:flex;flex-direction:column;gap:12px;padding:16px}.place-row{padding-bottom:16px;border-bottom:1px solid var(--divider-color, #eee)}.place-row:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.place-row .chart-container{margin-top:16px;width:100%;height:120px;background:rgba(var(--rgb-primary-color, 0, 119, 190), 0.03);border-radius:8px;overflow:hidden}.place-row svg{width:100%;height:100%;display:block}.place-row .ref-line{stroke-dasharray:4,4;stroke-width:1;opacity:.5}.place-row .ref-line.min{stroke:#41bdf5}.place-row .ref-line.max{stroke:#ff9800}.place-row .ref-line.avg{stroke:var(--primary-color, #0077be);stroke-dasharray:none;opacity:.3}.place-row .chart-line{stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 2px 4px rgba(var(--rgb-primary-color, 0, 119, 190), 0.2))}.place-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;cursor:pointer;transition:opacity .2s ease;border-radius:6px}.place-header:hover{opacity:.7}.place-header:focus-visible{outline:2px solid var(--primary-color, #0077be);outline-offset:2px}.place-info{display:flex;flex-direction:column;min-width:0}.last-updated{font-size:.75rem;color:var(--secondary-text-color);margin-top:4px}.place-name-container{display:flex;align-items:baseline;gap:6px;min-width:0}.place-name{font-size:1.2rem;font-weight:500;color:var(--primary-text-color)}.place-country{font-size:.85rem;color:var(--secondary-text-color);font-weight:400}.current-temp{display:flex;align-items:baseline;gap:4px;flex:0 0 auto;white-space:nowrap}.temp-value{font-size:2rem;font-weight:700;color:var(--primary-color, #0077be)}.temp-value.unavailable{color:var(--disabled-text-color, var(--secondary-text-color))}.temp-unit{font-size:1rem;font-weight:500;color:var(--secondary-text-color)}.stats-grid,.averages-grid{display:grid;grid-template-columns:repeat(3, 1fr);gap:8px;margin-top:8px}.stat-item{display:flex;flex-direction:column;align-items:center;background:var(--card-background-color);padding:8px;border-radius:8px;box-shadow:0 2px 4px rgba(0,0,0,.05)}.stat-label{font-size:.75rem;text-transform:uppercase;color:var(--secondary-text-color);margin-bottom:4px}.stat-value{font-size:.9rem;font-weight:600}.stat-delta{font-size:.75rem;font-weight:500;margin-top:2px}.stat-delta.pos{color:var(--success-color, #4caf50)}.stat-delta.neg{color:var(--error-color, #db4437)}.stat-delta.neu{color:var(--secondary-text-color)}.averages-section{margin-top:16px;padding-top:12px;border-top:1px dashed var(--divider-color)}.averages-header{font-size:.85rem;font-weight:600;color:var(--secondary-text-color);margin-bottom:8px;text-align:center}.current-trend{font-size:1rem;margin-left:8px;margin-top:0}.warning{color:var(--error-color);padding:8px;text-align:center}.entity-warning{display:flex;align-items:center;justify-content:center;gap:8px;padding:8px;color:var(--warning-color, #ffa600);font-size:.9rem;text-align:center}.entity-warning ha-icon{flex:0 0 auto;--mdc-icon-size: 20px}.ref-label{font-size:8px;font-weight:500;fill:var(--secondary-text-color);dominant-baseline:middle}.ref-label.min{fill:#41bdf5}.ref-label.max{fill:#ff9800}.ref-label.avg{fill:var(--primary-color, #0077be)}.axis-label{font-size:8px;fill:var(--secondary-text-color);opacity:.7}.now-dot{filter:drop-shadow(0 1px 2px rgba(var(--rgb-primary-color, 0, 119, 190), 0.3))}.extrema-dot{filter:drop-shadow(0 1px 2px rgba(0, 0, 0, 0.2))}.extrema-dot.min{fill:#41bdf5}.extrema-dot.max{fill:#ff9800}.hover-group{pointer-events:none;transition:opacity .2s ease-in-out}.hover-line{stroke:var(--secondary-text-color);stroke-width:1;stroke-dasharray:2,2;opacity:.5}.hover-point{fill:var(--card-background-color);stroke:var(--primary-color, #0077be);stroke-width:2}.hover-tooltip-bg{fill:var(--card-background-color);stroke:var(--divider-color, #eee);stroke-width:1;opacity:.95;filter:drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2))}.hover-tooltip-text{fill:var(--primary-text-color);font-size:10px;font-weight:bold}.hover-tooltip-date{fill:var(--secondary-text-color);font-size:8px}.hover-overlay{cursor:crosshair;touch-action:pan-y}ha-card.narrow .card-content{padding:12px;gap:8px}ha-card.narrow .place-row{padding-bottom:12px}ha-card.narrow .place-row .chart-container{margin-top:12px}ha-card.narrow .place-name{font-size:1.05rem}ha-card.narrow .place-name-container{flex-wrap:wrap;overflow-wrap:anywhere}ha-card.narrow .current-trend{margin-left:4px}ha-card.narrow .temp-value{font-size:1.6rem}ha-card.narrow .stats-grid{gap:6px;margin-top:6px}ha-card.narrow .stat-item{padding:6px 4px;border-radius:6px}ha-card.narrow .stat-label{font-size:.65rem;margin-bottom:2px}ha-card.narrow .stat-value{font-size:.8rem}ha-card.narrow .ref-label{font-size:7px}ha-card.narrow .axis-label{font-size:7px}`,Wi="sea-temperatures-card",Zi=`${Wi}-editor`;class Vi extends ut{constructor(){super(...arguments),this._chartData={},this._chartWidth=400,this._chartSources={}}setConfig(t){if(!t||!Array.isArray(t.places))throw new Error("You need to define at least one place.");this._config={show_last_updated:!0,show_trend:!0,show_stats:!0,show_chart:!0,show_country:!1,chart_smoothing:"smooth",...t}}connectedCallback(){super.connectedCallback(),this._resizeObserver=new ResizeObserver(t=>{for(const e of t)if(e.contentRect.width>0){const t=Math.max(200,e.contentRect.width-32);this._chartWidth!==t&&(this._chartWidth=t)}}),this._resizeObserver.observe(this)}disconnectedCallback(){super.disconnectedCallback(),this._resizeObserver?.disconnect()}static async getConfigElement(){return await Promise.resolve().then(function(){return ea}),document.createElement(Zi)}static getStubConfig(t,e){const n=[...e??[],...Object.keys(t?.states??{})].find(e=>Vi._isSuitablePlace(t,e));return{places:n?[n]:[]}}static _isSuitablePlace(t,e){const n=xt(t,e,{domain:"sensor",numeric:!0});if(!n.ok)return!1;const r=n.entity.attributes;return void 0!==r.yesterday||void 0!==r.charts}getCardSize(){return Math.max(1,Math.ceil(this._contentHeight()/50))}getGridOptions(){return{rows:Math.max(2,Math.ceil((this._contentHeight()+8)/64)),columns:12,min_rows:2,min_columns:6}}_contentHeight(){const t=this._config;if(!t)return 94;const e=this.hass?this._getPlacesData(this.hass,t):void 0,n=Math.max(e?.length??t.places?.length??1,1);let r=32;t.title&&(r+=68);for(let i=0;i0&&(r+=28),n?.problem?r+=40:(r+=62,!1!==t.show_stats&&this._hasStats(n)&&(r+=57),!1!==t.show_chart&&this._hasChart(n)&&(r+=136))}return r}_hasStats(t){return!t||[t.yesterday,t.last_week,t.average_avg].some(t=>void 0!==t)}_hasChart(t){if(!t)return!0;const e=this._chartData[t.entity_id];if(e)return e.length>=2;const n=this.hass?.states[t.entity_id]?.attributes?.charts;return(n?.last_thirty?.labels?.length??0)>=2}_getPlacesData(t,e){const n=this._placesMemo;if(n&&n.states===t.states&&n.entities===t.entities&&n.devices===t.devices&&n.config===e)return n.places;const r=this._computePlacesData(t,e);return this._placesMemo={states:t.states,entities:t.entities,devices:t.devices,config:e,places:r},r}_problemPlace(t,e,n){return{name:e||t,temperature:"",entity_id:t,unavailable:!0,problem:n}}_computePlacesData(t,e){const n=[],r=Object.values(t.states);return e.places.forEach(i=>{const a="string"==typeof i?i:i.device,s="object"==typeof i?i.name:void 0;let o,c;if(a&&a.includes(".")){const e=xt(t,a,{domain:"sensor",numeric:!0});if(!e.ok&&"unavailable"!==e.reason)return void n.push(this._problemPlace(a,s,e.reason));o=t.states[a],c=t.entities[a]?.device_id}else{c=a;const e=r.filter(e=>t.entities[e.entity_id]?.device_id===c&&e.entity_id.startsWith("sensor."));if(0===e.length)return void n.push(this._problemPlace(a,s,"not_found"));o=e.find(t=>void 0!==t.attributes.yesterday)||e.find(t=>"°C"===t.attributes.unit_of_measurement||"°F"===t.attributes.unit_of_measurement)||e[0]}if(o){const r=xt(t,o.entity_id,{domain:"sensor",numeric:!0});if(!r.ok&&"unavailable"!==r.reason)return void n.push(this._problemPlace(o.entity_id,s,r.reason));const i=o.attributes,a="unavailable"===o.state||"unknown"===o.state,l=c?t.devices[c]:void 0,u=l?.name_by_user||l?.name||i.friendly_name||"Unknown",h="°F"===i.unit_of_measurement||"F"===i.unit_of_measurement,d=t=>{if(null==t||isNaN(parseFloat(String(t))))return;const e=parseFloat(String(t));return String(h?Math.round(100*(1.8*e+32))/100:e)};n.push({name:s||u,country:e.show_country&&i.country?String(i.country):void 0,temperature:o.state,yesterday:d(i.yesterday),last_week:d(i.last_week),date:i.date?String(i.date):void 0,average_min:d(i.average_min),average_max:d(i.average_max),average_avg:d(i.average_avg),unit:i.unit_of_measurement||"°C",entity_id:o.entity_id,unavailable:a})}}),e.sort_by&&n.sort((t,n)=>{if("name"===e.sort_by)return t.name.localeCompare(n.name);if("temp_asc"===e.sort_by||"temp_desc"===e.sort_by){const r=parseFloat(t.temperature),i=parseFloat(n.temperature),a=isNaN(r)?null:r,s=isNaN(i)?null:i;return null===a||null===s?a===s?0:null===a?1:-1:"temp_asc"===e.sort_by?a-s:s-a}return 0}),n}willUpdate(){this.hass&&this._config&&this._chartSourcesChanged()&&this._fetchChartData()}_chartSourcesChanged(){if(!this._config?.places)return!1;const t=this._getPlacesData(this.hass,this._config);return 0!==t.length&&(!!t.some(t=>this._chartSources[t.entity_id]!==this.hass.states[t.entity_id]?.attributes?.charts)||Object.keys(this._chartSources).some(e=>!t.some(t=>t.entity_id===e)))}shouldUpdate(t){if(t.has("_config"))return!0;const e=t.get("hass");if(e){const n=this._getPlacesData(this.hass,this._config).some(t=>e.states[t.entity_id]!==this.hass.states[t.entity_id]);return n||e.language!==this.hass.language||t.has("_chartData")||t.has("_chartWidth")||this._chartSourcesChanged()}return!0}_parseChartLabel(t,e){const n=String(t).split("-");if(3===n.length){const[t,e,r]=n.map(t=>parseInt(t,10));if(isNaN(t)||isNaN(e)||isNaN(r))return;return new Date(t,e-1,r)}if(2===n.length){const t=parseInt(n[0],10),r=parseInt(n[1],10);if(isNaN(t)||isNaN(r))return;const i=new Date(e.getFullYear(),t-1,r);return i.getTime()>e.getTime()&&i.setFullYear(i.getFullYear()-1),i}}_fetchChartData(){if(!this.hass||!this._config.places)return;const t=this._getPlacesData(this.hass,this._config),e={},n={},r=new Date;t.forEach(({entity_id:t})=>{const i=this.hass?.states[t],a=i?.attributes?.charts;n[t]=i?.attributes?.charts;const s=a?.last_thirty?.labels,o=a?.last_thirty?.series;if(!Array.isArray(s)||!Array.isArray(o)||s.length!==o.length)return;const c="°F"===i?.attributes?.unit_of_measurement||"F"===i?.attributes?.unit_of_measurement,l=s.map((t,e)=>{const n=this._parseChartLabel(t,r);if(!n)return;let i=parseFloat(String(o[e]));return isNaN(i)?void 0:(c&&(i=Math.round(100*(1.8*i+32))/100),{date:n,value:i})}).filter(t=>void 0!==t).sort((t,e)=>t.date.getTime()-e.date.getTime());l.length>0&&(e[t]=l)}),this._chartSources=n,this._chartData=e}_handleHeaderKeydown(t,e){"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),this._handleMoreInfo(e))}_placeAriaLabel(t){const e=[t.name];return t.country&&e.push(t.country),e.push(t.unavailable?t.temperature:`${t.temperature}${t.unit??""}`),e.join(", ")}_chartAriaLabel(t,e){const n=e.map(t=>t.value),r=t.unit??"",i=t=>`${wt(t,this.hass)}${r}`;return[t.name,yt(this.hass,"card.chart_description"),`${yt(this.hass,"card.min")} ${i(Math.min(...n))}`,`${yt(this.hass,"card.max")} ${i(Math.max(...n))}`].join(", ")}_handleMoreInfo(t){vt(this,"hass-more-info",{entityId:t})}_renderTrend(t,e,n=""){if(!this._config.show_trend)return W``;const r=t;if(void 0===r||isNaN(parseFloat(e))||isNaN(parseFloat(r)))return W``;const i=parseFloat(e)-parseFloat(r),a=Math.round(10*i)/10;if(Math.abs(a)>0){const t=a>0,e=wt(Math.abs(a),this.hass,{minimumFractionDigits:1,maximumFractionDigits:1});return W`
+ */const mt={en:{editor:{groups:{display:"Display"},title:"Title (Optional)",places:"Places",show_trend:"Show trend indicators (vs Yesterday)",show_last_updated:"Show last updated",show_stats:"Show statistics (Yesterday, Last Week, 10-Year Avg)",show_chart:"Show historical chart (30d)",show_country:"Append country to place name",chart_smoothing:"Chart smoothing",chart_smoothing_options:{smooth:"Smooth",linear:"Linear",step:"Step"},sort_by:"Sort places by",sort_by_options:{default:"Default (Manual)",name:"Name (A-Z)",temp_asc:"Temperature (Coldest First)",temp_desc:"Temperature (Warmest First)"},add_place:"Add Place"},card:{yesterday:"Yesterday",last_week:"Last Week",average_avg:"10-Year Avg",averages:"Averages",min:"Min",max:"Max",avg:"Avg",chart_description:"30-day trend",entity_problem:{not_found:"Entity {entity} was not found.",wrong_domain:"{entity} is not a sensor.",not_numeric:"{entity} does not report a temperature.",unavailable:"{entity} is unavailable."}},common:{errors:{no_places:"You need to define at least one place.",duplicate_place:"This place is already in your list."}}},de:{editor:{groups:{display:"Anzeige"},title:"Titel (Optional)",places:"Orte",show_trend:"Zeige Trend-Indikatoren (vs Gestern)",show_last_updated:"Zuletzt aktualisiert anzeigen",show_stats:"Statistiken anzeigen (Gestern, Letzte Woche, 10-Jahres-Ø)",show_chart:"Historisches Diagramm anzeigen (30t)",show_country:"Land an den Ortsnamen anhängen",chart_smoothing:"Kurvenglättung",chart_smoothing_options:{smooth:"Weich",linear:"Linear",step:"Stufen"},sort_by:"Orte sortieren nach",sort_by_options:{default:"Standard (Manuell)",name:"Name (A-Z)",temp_asc:"Temperatur (Kälteste zuerst)",temp_desc:"Temperatur (Wärmste zuerst)"},add_place:"Ort hinzufügen"},card:{yesterday:"Gestern",last_week:"Letzte Woche",average_avg:"10-Jahres-Ø",averages:"Durchschnitte",min:"Min",max:"Max",avg:"Ø",chart_description:"30-Tage-Trend",entity_problem:{not_found:"Entität {entity} wurde nicht gefunden.",wrong_domain:"{entity} ist kein Sensor.",not_numeric:"{entity} liefert keine Temperatur.",unavailable:"{entity} ist nicht verfügbar."}},common:{errors:{no_places:"Du musst mindestens einen Ort definieren.",duplicate_place:"Dieser Ort ist bereits in deiner Liste."}}},fr:{editor:{groups:{display:"Affichage"},title:"Titre (Optionnel)",places:"Lieux",show_trend:"Afficher les indicateurs de tendance (vs Hier)",show_last_updated:"Afficher la dernière mise à jour",show_stats:"Afficher les statistiques (Hier, La semaine dernière, Moy. 10 ans)",show_chart:"Afficher le graphique historique (30j)",show_country:"Ajouter le pays au nom du lieu",chart_smoothing:"Lissage du graphique",chart_smoothing_options:{smooth:"Lisse",linear:"Linéaire",step:"En escalier"},sort_by:"Trier les lieux par",sort_by_options:{default:"Défaut (Manuel)",name:"Nom (A-Z)",temp_asc:"Température (Le plus froid d'abord)",temp_desc:"Température (Le plus chaud d'abord)"},add_place:"Ajouter un lieu"},card:{yesterday:"Hier",last_week:"La semaine dernière",average_avg:"Moy. 10 ans",averages:"Moyennes",min:"Min",max:"Max",avg:"Moy",chart_description:"Tendance sur 30 jours",entity_problem:{not_found:"L'entité {entity} est introuvable.",wrong_domain:"{entity} n'est pas un capteur.",not_numeric:"{entity} ne fournit pas de température.",unavailable:"{entity} est indisponible."}},common:{errors:{no_places:"Vous devez définir au moins un lieu.",duplicate_place:"Ce lieu est déjà dans votre liste."}}},es:{editor:{groups:{display:"Pantalla"},title:"Título (Opcional)",places:"Lugares",show_trend:"Mostrar indicadores de tendencia (vs Ayer)",show_last_updated:"Mostrar última actualización",show_stats:"Mostrar estadísticas (Ayer, Semana pasada, Media 10 años)",show_chart:"Mostrar gráfico histórico (30d)",show_country:"Añadir el país al nombre del lugar",chart_smoothing:"Suavizado del gráfico",chart_smoothing_options:{smooth:"Suave",linear:"Lineal",step:"Escalonado"},sort_by:"Ordenar lugares por",sort_by_options:{default:"Por defecto (Manual)",name:"Nombre (A-Z)",temp_asc:"Temperatura (Más frío primero)",temp_desc:"Temperatura (Más cálido primero)"},add_place:"Añadir Lugar"},card:{yesterday:"Ayer",last_week:"Semana Pasada",average_avg:"Media 10 años",averages:"Medias",min:"Mín",max:"Máx",avg:"Med",chart_description:"Tendencia de 30 días",entity_problem:{not_found:"No se encontró la entidad {entity}.",wrong_domain:"{entity} no es un sensor.",not_numeric:"{entity} no proporciona una temperatura.",unavailable:"{entity} no está disponible."}},common:{errors:{no_places:"Debes definir al menos un lugar.",duplicate_place:"Este lugar ya está en tu lista."}}},it:{editor:{groups:{display:"Visualizzazione"},title:"Titolo (Opzionale)",places:"Luoghi",show_trend:"Mostra indicatori di tendenza (vs Ieri)",show_last_updated:"Mostra ultimo aggiornamento",show_stats:"Mostra statistiche (Ieri, Settimana scorsa, Media 10 anni)",show_chart:"Mostra grafico storico (30g)",show_country:"Aggiungi il paese al nome del luogo",chart_smoothing:"Arrotondamento grafico",chart_smoothing_options:{smooth:"Morbido",linear:"Lineare",step:"A gradini"},sort_by:"Ordina luoghi per",sort_by_options:{default:"Predefinito (Manuale)",name:"Nome (A-Z)",temp_asc:"Temperatura (Più freddo prima)",temp_desc:"Temperatura (Più caldo prima)"},add_place:"Aggiungi Luogo"},card:{yesterday:"Ieri",last_week:"Settimana Scorsa",average_avg:"Media 10 anni",averages:"Medie",min:"Min",max:"Max",avg:"Med",chart_description:"Andamento a 30 giorni",entity_problem:{not_found:"L'entità {entity} non è stata trovata.",wrong_domain:"{entity} non è un sensore.",not_numeric:"{entity} non fornisce una temperatura.",unavailable:"{entity} non è disponibile."}},common:{errors:{no_places:"Devi definire almeno un luogo.",duplicate_place:"Questo luogo è già nella tua lista."}}}};function _t(t,e){let n=mt[t];for(const t of e){if("object"!=typeof n||null===n)return;n=n[t]}return"string"==typeof n?n:void 0}function yt(t,e,n={}){const r=t?.language||"en",i=e.replace("component.sea-temperatures-card.","").split("."),a=_t(r,i)??_t("en",i);if("string"==typeof a){let t=a;for(const e in n)t=t.replace(`{${e}}`,String(n[e]));return t}return e}const vt=(t,e,n,r)=>{const i=new CustomEvent(e,{bubbles:!0,cancelable:!1,composed:!0,...r,detail:n});t.dispatchEvent(i)},bt=new Set(["unavailable","unknown",""]);function xt(t,e,n={}){const r=(e??"").trim();if(!r)return{ok:!1,reason:"not_found",target:r};const i=r.indexOf(".");if(i<0)return{ok:!1,reason:"not_found",target:r};if(n.domain&&r.slice(0,i)!==n.domain)return{ok:!1,reason:"wrong_domain",target:r};const a=t?.states?.[r];return a?bt.has(a.state)?{ok:!1,reason:"unavailable",target:r}:n.numeric&&isNaN(parseFloat(a.state))?{ok:!1,reason:"not_numeric",target:r}:{ok:!0,entity:a}:{ok:!1,reason:"not_found",target:r}}const $t={comma_decimal:"en-US",decimal_comma:"de-DE",space_comma:"fr-FR",system:void 0};function wt(t,e,n){if(isNaN(t))return String(t);if("none"===e?.locale?.number_format)return String(t);try{return new Intl.NumberFormat(function(t){const e=t?.locale?.number_format;return e&&e in $t?$t[e]:t?.locale?.language||t?.language||void 0}(e),n).format(t)}catch{return String(t)}}function Mt(t,e,n){if(isNaN(t.getTime()))return"";try{return new Intl.DateTimeFormat(e?.language||void 0,n).format(t)}catch{return t.toISOString()}}function At(t,e){return Mt(t,e,{month:"short",day:"numeric"})}function St(t){return!isNaN(parseFloat(String(t)))}function Tt(t,e){return null==t||null==e?NaN:te?1:t>=e?0:NaN}function Ct(t,e){return null==t||null==e?NaN:et?1:e>=t?0:NaN}function Nt(t){let e,n,r;function i(t,r,i=0,a=t.length){if(i>>1;n(t[e],r)<0?i=e+1:a=e}while(iTt(t(e),n),r=(e,n)=>t(e)-n):(e=t===Tt||t===Ct?t:kt,n=t,r=t),{left:i,center:function(t,e,n=0,a=t.length){const s=i(t,e,n,a-1);return s>n&&r(t[s-1],e)>-r(t[s],e)?s-1:s},right:function(t,r,i=0,a=t.length){if(i>>1;n(t[e],r)<=0?i=e+1:a=e}while(i=e&&(n=r=e):(n>e&&(n=e),r=a&&(n=r=a):(n>a&&(n=a),r=Ut?10:a>=Pt?5:a>=Ot?2:1;let o,c,l;return i<0?(l=Math.pow(10,-i)/s,o=Math.round(t*l),c=Math.round(e*l),o/le&&--c,l=-l):(l=Math.pow(10,i)*s,o=Math.round(t/l),c=Math.round(e/l),o*le&&--c),c>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?se(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?se(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Gt.exec(t))?new ce(e[1],e[2],e[3],1):(e=Xt.exec(t))?new ce(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Jt.exec(t))?se(e[1],e[2],e[3],e[4]):(e=Qt.exec(t))?se(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=Kt.exec(t))?fe(e[1],e[2]/100,e[3]/100,1):(e=te.exec(t))?fe(e[1],e[2]/100,e[3]/100,e[4]):ee.hasOwnProperty(t)?ae(ee[t]):"transparent"===t?new ce(NaN,NaN,NaN,0):null}function ae(t){return new ce(t>>16&255,t>>8&255,255&t,1)}function se(t,e,n,r){return r<=0&&(t=e=n=NaN),new ce(t,e,n,r)}function oe(t,e,n,r){return 1===arguments.length?function(t){return t instanceof Yt||(t=ie(t)),t?new ce((t=t.rgb()).r,t.g,t.b,t.opacity):new ce}(t):new ce(t,e,n,null==r?1:r)}function ce(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function le(){return`#${pe(this.r)}${pe(this.g)}${pe(this.b)}`}function ue(){const t=he(this.opacity);return`${1===t?"rgb(":"rgba("}${de(this.r)}, ${de(this.g)}, ${de(this.b)}${1===t?")":`, ${t})`}`}function he(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function de(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function pe(t){return((t=de(t))<16?"0":"")+t.toString(16)}function fe(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new me(t,e,n,r)}function ge(t){if(t instanceof me)return new me(t.h,t.s,t.l,t.opacity);if(t instanceof Yt||(t=ie(t)),!t)return new me;if(t instanceof me)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),s=NaN,o=a-i,c=(a+i)/2;return o?(s=e===a?(n-r)/o+6*(n0&&c<1?0:s,new me(s,o,c,t.opacity)}function me(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function _e(t){return(t=(t||0)%360)<0?t+360:t}function ye(t){return Math.max(0,Math.min(1,t||0))}function ve(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}jt(Yt,ie,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:ne,formatHex:ne,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return ge(this).formatHsl()},formatRgb:re,toString:re}),jt(ce,oe,Rt(Yt,{brighter(t){return t=null==t?It:Math.pow(It,t),new ce(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?qt:Math.pow(qt,t),new ce(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new ce(de(this.r),de(this.g),de(this.b),he(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:le,formatHex:le,formatHex8:function(){return`#${pe(this.r)}${pe(this.g)}${pe(this.b)}${pe(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:ue,toString:ue})),jt(me,function(t,e,n,r){return 1===arguments.length?ge(t):new me(t,e,n,null==r?1:r)},Rt(Yt,{brighter(t){return t=null==t?It:Math.pow(It,t),new me(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?qt:Math.pow(qt,t),new me(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new ce(ve(t>=240?t-240:t+120,i,r),ve(t,i,r),ve(t<120?t+240:t-120,i,r),this.opacity)},clamp(){return new me(_e(this.h),ye(this.s),ye(this.l),he(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=he(this.opacity);return`${1===t?"hsl(":"hsla("}${_e(this.h)}, ${100*ye(this.s)}%, ${100*ye(this.l)}%${1===t?")":`, ${t})`}`}}));var be=t=>()=>t;function xe(t){return 1===(t=+t)?$e:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):be(isNaN(e)?n:e)}}function $e(t,e){var n=e-t;return n?function(t,e){return function(n){return t+n*e}}(t,n):be(isNaN(t)?e:t)}var we=function t(e){var n=xe(e);function r(t,e){var r=n((t=oe(t)).r,(e=oe(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),s=$e(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=s(e),t+""}}return r.gamma=t,r}(1);function Me(t,e){e||(e=[]);var n,r=t?Math.min(e.length,t.length):0,i=e.slice();return function(a){for(n=0;na&&(i=e.slice(a,i),o[s]?o[s]+=i:o[++s]=i),(n=n[0])===(r=r[0])?o[s]?o[s]+=r:o[++s]=r:(o[++s]=null,c.push({i:s,x:Te(n,r)})),a=ke.lastIndex;return ae&&(n=t,t=e,e=n),function(n){return Math.max(t,Math.min(e,n))}}(s[0],s[t-1])),r=t>2?ze:Le,i=a=null,h}function h(e){return null==e||isNaN(e=+e)?n:(i||(i=r(s.map(t),o,c)))(t(l(e)))}return h.invert=function(n){return l(e((a||(a=r(o,s.map(t),Te)))(n)))},h.domain=function(t){return arguments.length?(s=Array.from(t,Pe),u()):s.slice()},h.range=function(t){return arguments.length?(o=Array.from(t),u()):o.slice()},h.rangeRound=function(t){return o=Array.from(t),c=Ue,u()},h.clamp=function(t){return arguments.length?(l=!!t||Fe,u()):l!==Fe},h.interpolate=function(t){return arguments.length?(c=t,u()):c},h.unknown=function(t){return arguments.length?(n=t,h):n},function(n,r){return t=n,e=r,u()}}function Ye(){return Re()(Fe,Fe)}function qe(t,e){if(!isFinite(t)||0===t)return null;var n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"),r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function Ie(t){return(t=qe(Math.abs(t)))?t[1]:NaN}var We,Ze=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Ve(t){if(!(e=Ze.exec(t)))throw new Error("invalid format: "+t);var e;return new Be({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function Be(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function Ge(t,e){var n=qe(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}Ve.prototype=Be.prototype,Be.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var Xe={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>Ge(100*t,e),r:Ge,s:function(t,e){var n=qe(t,e);if(!n)return We=void 0,t.toPrecision(e);var r=n[0],i=n[1],a=i-(We=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,s=r.length;return a===s?r:a>s?r+new Array(a-s+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+qe(t,Math.max(0,e+a-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function Je(t){return t}var Qe,Ke,tn,en=Array.prototype.map,nn=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function rn(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?Je:(e=en.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,a=[],s=0,o=e[0],c=0;i>0&&o>0&&(c+o+1>r&&(o=Math.max(1,r-c)),a.push(t.substring(i-=o,i+o)),!((c+=o+1)>r));)o=e[s=(s+1)%e.length];return a.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",s=void 0===t.decimal?".":t.decimal+"",o=void 0===t.numerals?Je:function(t){return function(e){return e.replace(/[0-9]/g,function(e){return t[+e]})}}(en.call(t.numerals,String)),c=void 0===t.percent?"%":t.percent+"",l=void 0===t.minus?"−":t.minus+"",u=void 0===t.nan?"NaN":t.nan+"";function h(t,e){var n=(t=Ve(t)).fill,h=t.align,d=t.sign,p=t.symbol,f=t.zero,g=t.width,m=t.comma,_=t.precision,y=t.trim,v=t.type;"n"===v?(m=!0,v="g"):Xe[v]||(void 0===_&&(_=12),y=!0,v="g"),(f||"0"===n&&"="===h)&&(f=!0,n="0",h="=");var b=(e&&void 0!==e.prefix?e.prefix:"")+("$"===p?i:"#"===p&&/[boxX]/.test(v)?"0"+v.toLowerCase():""),x=("$"===p?a:/[%p]/.test(v)?c:"")+(e&&void 0!==e.suffix?e.suffix:""),$=Xe[v],w=/[defgprs%]/.test(v);function M(t){var e,i,a,c=b,p=x;if("c"===v)p=$(t)+p,t="";else{var M=(t=+t)<0||1/t<0;if(t=isNaN(t)?u:$(Math.abs(t),_),y&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),M&&0===+t&&"+"!==d&&(M=!1),c=(M?"("===d?d:l:"-"===d||"("===d?"":d)+c,p=("s"!==v||isNaN(t)||void 0===We?"":nn[8+We/3])+p+(M&&"("===d?")":""),w)for(e=-1,i=t.length;++e(a=t.charCodeAt(e))||a>57){p=(46===a?s+t.slice(e+1):t.slice(e))+p,t=t.slice(0,e);break}}m&&!f&&(t=r(t,1/0));var A=c.length+t.length+p.length,S=A>1)+c+t+p+S.slice(A);break;default:t=S+c+t+p}return o(t)}return _=void 0===_?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,_)):Math.max(0,Math.min(20,_)),M.toString=function(){return t+""},M}return{format:h,formatPrefix:function(t,e){var n=3*Math.max(-8,Math.min(8,Math.floor(Ie(e)/3))),r=Math.pow(10,-n),i=h(((t=Ve(t)).type="f",t),{suffix:nn[8+n/3]});return function(t){return i(r*t)}}}}function an(t,e,n,r){var i,a=Lt(t,e,n);switch((r=Ve(null==r?",f":r)).type){case"s":var s=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Ie(e)/3)))-Ie(Math.abs(t)))}(a,s))||(r.precision=i),tn(r,s);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Ie(e)-Ie(t))+1}(a,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=function(t){return Math.max(0,-Ie(Math.abs(t)))}(a))||(r.precision=i-2*("%"===r.type))}return Ke(r)}function sn(t){var e=t.domain;return t.ticks=function(t){var n=e();return function(t,e,n){if(!((n=+n)>0))return[];if((t=+t)===(e=+e))return[t];const r=e=i))return[];const o=a-i+1,c=new Array(o);if(r)if(s<0)for(let t=0;t0;){if((i=Ht(c,l,n))===r)return a[s]=c,a[o]=l,e(a);if(i>0)c=Math.floor(c/i)*i,l=Math.ceil(l/i)*i;else{if(!(i<0))break;c=Math.ceil(c*i)/i,l=Math.floor(l*i)/i}r=i}return t},t}function on(){var t=Ye();return t.copy=function(){return je(t,on())},zt.apply(t,arguments),sn(t)}Qe=rn({thousands:",",grouping:[3],currency:["$",""]}),Ke=Qe.format,tn=Qe.formatPrefix;const cn=new Date,ln=new Date;function un(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=e=>(t(e=new Date(+e)),e),i.ceil=n=>(t(n=new Date(n-1)),e(n,1),t(n),n),i.round=t=>{const e=i(t),n=i.ceil(t);return t-e(e(t=new Date(+t),null==n?1:Math.floor(n)),t),i.range=(n,r,a)=>{const s=[];if(n=i.ceil(n),a=null==a?1:Math.floor(a),!(n0))return s;let o;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(oun(e=>{if(e>=e)for(;t(e),!n(e);)e.setTime(e-1)},(t,r)=>{if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}),n&&(i.count=(e,r)=>(cn.setTime(+e),ln.setTime(+r),t(cn),t(ln),Math.floor(n(cn,ln))),i.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?e=>r(e)%t===0:e=>i.count(0,e)%t===0):i:null)),i}const hn=un(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);hn.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?un(e=>{e.setTime(Math.floor(e/t)*t)},(e,n)=>{e.setTime(+e+n*t)},(e,n)=>(n-e)/t):hn:null),hn.range;const dn=1e3,pn=6e4,fn=36e5,gn=864e5,mn=6048e5,_n=2592e6,yn=31536e6,vn=un(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*dn)},(t,e)=>(e-t)/dn,t=>t.getUTCSeconds());vn.range;const bn=un(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*dn)},(t,e)=>{t.setTime(+t+e*pn)},(t,e)=>(e-t)/pn,t=>t.getMinutes());bn.range;const xn=un(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*pn)},(t,e)=>(e-t)/pn,t=>t.getUTCMinutes());xn.range;const $n=un(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*dn-t.getMinutes()*pn)},(t,e)=>{t.setTime(+t+e*fn)},(t,e)=>(e-t)/fn,t=>t.getHours());$n.range;const wn=un(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*fn)},(t,e)=>(e-t)/fn,t=>t.getUTCHours());wn.range;const Mn=un(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*pn)/gn,t=>t.getDate()-1);Mn.range;const An=un(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/gn,t=>t.getUTCDate()-1);An.range;const Sn=un(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/gn,t=>Math.floor(t/gn));function Tn(t){return un(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(t,e)=>{t.setDate(t.getDate()+7*e)},(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*pn)/mn)}Sn.range;const Cn=Tn(0),Nn=Tn(1),kn=Tn(2),En=Tn(3),Dn=Tn(4),Un=Tn(5),Pn=Tn(6);function On(t){return un(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)},(t,e)=>(e-t)/mn)}Cn.range,Nn.range,kn.range,En.range,Dn.range,Un.range,Pn.range;const Fn=On(0),Hn=On(1),Ln=On(2),zn=On(3),jn=On(4),Rn=On(5),Yn=On(6);Fn.range,Hn.range,Ln.range,zn.range,jn.range,Rn.range,Yn.range;const qn=un(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear()),t=>t.getMonth());qn.range;const In=un(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear()),t=>t.getUTCMonth());In.range;const Wn=un(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());Wn.every=t=>isFinite(t=Math.floor(t))&&t>0?un(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,n)=>{e.setFullYear(e.getFullYear()+n*t)}):null,Wn.range;const Zn=un(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());Zn.every=t=>isFinite(t=Math.floor(t))&&t>0?un(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)}):null,Zn.range;const[Vn,Bn]=function(t,e,n,r,i,a){const s=[[vn,1,dn],[vn,5,5e3],[vn,15,15e3],[vn,30,3e4],[a,1,pn],[a,5,3e5],[a,15,9e5],[a,30,18e5],[i,1,fn],[i,3,108e5],[i,6,216e5],[i,12,432e5],[r,1,gn],[r,2,1728e5],[n,1,mn],[e,1,_n],[e,3,7776e6],[t,1,yn]];function o(e,n,r){const i=Math.abs(n-e)/r,a=Nt(([,,t])=>t).right(s,i);if(a===s.length)return t.every(Lt(e/yn,n/yn,r));if(0===a)return hn.every(Math.max(Lt(e,n,r),1));const[o,c]=s[i/s[a-1][2][t.toLowerCase(),e]))}function cr(t,e,n){var r=er.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function lr(t,e,n){var r=er.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function ur(t,e,n){var r=er.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function hr(t,e,n){var r=er.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function dr(t,e,n){var r=er.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function pr(t,e,n){var r=er.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function fr(t,e,n){var r=er.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function gr(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function mr(t,e,n){var r=er.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function _r(t,e,n){var r=er.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function yr(t,e,n){var r=er.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function vr(t,e,n){var r=er.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function br(t,e,n){var r=er.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function xr(t,e,n){var r=er.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function $r(t,e,n){var r=er.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function wr(t,e,n){var r=er.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Mr(t,e,n){var r=er.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Ar(t,e,n){var r=nr.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Sr(t,e,n){var r=er.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Tr(t,e,n){var r=er.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Cr(t,e){return ir(t.getDate(),e,2)}function Nr(t,e){return ir(t.getHours(),e,2)}function kr(t,e){return ir(t.getHours()%12||12,e,2)}function Er(t,e){return ir(1+Mn.count(Wn(t),t),e,3)}function Dr(t,e){return ir(t.getMilliseconds(),e,3)}function Ur(t,e){return Dr(t,e)+"000"}function Pr(t,e){return ir(t.getMonth()+1,e,2)}function Or(t,e){return ir(t.getMinutes(),e,2)}function Fr(t,e){return ir(t.getSeconds(),e,2)}function Hr(t){var e=t.getDay();return 0===e?7:e}function Lr(t,e){return ir(Cn.count(Wn(t)-1,t),e,2)}function zr(t){var e=t.getDay();return e>=4||0===e?Dn(t):Dn.ceil(t)}function jr(t,e){return t=zr(t),ir(Dn.count(Wn(t),t)+(4===Wn(t).getDay()),e,2)}function Rr(t){return t.getDay()}function Yr(t,e){return ir(Nn.count(Wn(t)-1,t),e,2)}function qr(t,e){return ir(t.getFullYear()%100,e,2)}function Ir(t,e){return ir((t=zr(t)).getFullYear()%100,e,2)}function Wr(t,e){return ir(t.getFullYear()%1e4,e,4)}function Zr(t,e){var n=t.getDay();return ir((t=n>=4||0===n?Dn(t):Dn.ceil(t)).getFullYear()%1e4,e,4)}function Vr(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+ir(e/60|0,"0",2)+ir(e%60,"0",2)}function Br(t,e){return ir(t.getUTCDate(),e,2)}function Gr(t,e){return ir(t.getUTCHours(),e,2)}function Xr(t,e){return ir(t.getUTCHours()%12||12,e,2)}function Jr(t,e){return ir(1+An.count(Zn(t),t),e,3)}function Qr(t,e){return ir(t.getUTCMilliseconds(),e,3)}function Kr(t,e){return Qr(t,e)+"000"}function ti(t,e){return ir(t.getUTCMonth()+1,e,2)}function ei(t,e){return ir(t.getUTCMinutes(),e,2)}function ni(t,e){return ir(t.getUTCSeconds(),e,2)}function ri(t){var e=t.getUTCDay();return 0===e?7:e}function ii(t,e){return ir(Fn.count(Zn(t)-1,t),e,2)}function ai(t){var e=t.getUTCDay();return e>=4||0===e?jn(t):jn.ceil(t)}function si(t,e){return t=ai(t),ir(jn.count(Zn(t),t)+(4===Zn(t).getUTCDay()),e,2)}function oi(t){return t.getUTCDay()}function ci(t,e){return ir(Hn.count(Zn(t)-1,t),e,2)}function li(t,e){return ir(t.getUTCFullYear()%100,e,2)}function ui(t,e){return ir((t=ai(t)).getUTCFullYear()%100,e,2)}function hi(t,e){return ir(t.getUTCFullYear()%1e4,e,4)}function di(t,e){var n=t.getUTCDay();return ir((t=n>=4||0===n?jn(t):jn.ceil(t)).getUTCFullYear()%1e4,e,4)}function pi(){return"+0000"}function fi(){return"%"}function gi(t){return+t}function mi(t){return Math.floor(+t/1e3)}function _i(t){return new Date(t)}function yi(t){return t instanceof Date?+t:+new Date(+t)}function vi(t,e,n,r,i,a,s,o,c,l){var u=Ye(),h=u.invert,d=u.domain,p=l(".%L"),f=l(":%S"),g=l("%I:%M"),m=l("%I %p"),_=l("%a %d"),y=l("%b %d"),v=l("%B"),b=l("%Y");function x(t){return(c(t)=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:gi,s:mi,S:Fr,u:Hr,U:Lr,V:jr,w:Rr,W:Yr,x:null,X:null,y:qr,Y:Wr,Z:Vr,"%":fi},b={a:function(t){return s[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return o[t.getUTCMonth()]},c:null,d:Br,e:Br,f:Kr,g:ui,G:di,H:Gr,I:Xr,j:Jr,L:Qr,m:ti,M:ei,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:gi,s:mi,S:ni,u:ri,U:ii,V:si,w:oi,W:ci,x:null,X:null,y:li,Y:hi,Z:pi,"%":fi},x={a:function(t,e,n){var r=p.exec(e.slice(n));return r?(t.w=f.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=h.exec(e.slice(n));return r?(t.w=d.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=_.exec(e.slice(n));return r?(t.m=y.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=g.exec(e.slice(n));return r?(t.m=m.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return M(t,e,n,r)},d:yr,e:yr,f:Mr,g:fr,G:pr,H:br,I:br,j:vr,L:wr,m:_r,M:xr,p:function(t,e,n){var r=l.exec(e.slice(n));return r?(t.p=u.get(r[0].toLowerCase()),n+r[0].length):-1},q:mr,Q:Sr,s:Tr,S:$r,u:lr,U:ur,V:hr,w:cr,W:dr,x:function(t,e,r){return M(t,n,e,r)},X:function(t,e,n){return M(t,r,e,n)},y:fr,Y:pr,Z:gr,"%":Ar};function $(t,e){return function(n){var r,i,a,s=[],o=-1,c=0,l=t.length;for(n instanceof Date||(n=new Date(+n));++o53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=Xn(Jn(a.y,0,1))).getUTCDay(),r=i>4||0===i?Hn.ceil(r):Hn(r),r=An.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=Gn(Jn(a.y,0,1))).getDay(),r=i>4||0===i?Nn.ceil(r):Nn(r),r=Mn.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?Xn(Jn(a.y,0,1)).getUTCDay():Gn(Jn(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,Xn(a)):Gn(a)}}function M(t,e,n,r){for(var i,a,s=0,o=e.length,c=n.length;s=c)return-1;if(37===(i=e.charCodeAt(s++))){if(i=e.charAt(s++),!(a=x[i in tr?e.charAt(s++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return v.x=$(n,v),v.X=$(r,v),v.c=$(e,v),b.x=$(n,b),b.X=$(r,b),b.c=$(e,b),{format:function(t){var e=$(t+="",v);return e.toString=function(){return t},e},parse:function(t){var e=w(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=$(t+="",b);return e.toString=function(){return t},e},utcParse:function(t){var e=w(t+="",!0);return e.toString=function(){return t},e}}}(t),Kn=Qn.format,Qn.parse,Qn.utcFormat,Qn.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});const $i=Math.PI,wi=2*$i,Mi=1e-6,Ai=wi-Mi;function Si(t){this._+=t[0];for(let e=1,n=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return Si;const n=10**e;return function(t){this._+=t[0];for(let e=1,r=t.length;eMi)if(Math.abs(u*o-c*l)>Mi&&i){let d=n-a,p=r-s,f=o*o+c*c,g=d*d+p*p,m=Math.sqrt(f),_=Math.sqrt(h),y=i*Math.tan(($i-Math.acos((f+h-g)/(2*m*_)))/2),v=y/_,b=y/m;Math.abs(v-1)>Mi&&this._append`L${t+v*l},${e+v*u}`,this._append`A${i},${i},0,0,${+(u*d>l*p)},${this._x1=t+b*o},${this._y1=e+b*c}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,n,r,i,a){if(t=+t,e=+e,a=!!a,(n=+n)<0)throw new Error(`negative radius: ${n}`);let s=n*Math.cos(r),o=n*Math.sin(r),c=t+s,l=e+o,u=1^a,h=a?r-i:i-r;null===this._x1?this._append`M${c},${l}`:(Math.abs(this._x1-c)>Mi||Math.abs(this._y1-l)>Mi)&&this._append`L${c},${l}`,n&&(h<0&&(h=h%wi+wi),h>Ai?this._append`A${n},${n},0,1,${u},${t-s},${e-o}A${n},${n},0,1,${u},${this._x1=c},${this._y1=l}`:h>Mi&&this._append`A${n},${n},0,${+(h>=$i)},${u},${this._x1=t+n*Math.cos(i)},${this._y1=e+n*Math.sin(i)}`)}rect(t,e,n,r){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${n=+n}v${+r}h${-n}Z`}toString(){return this._}}function Ci(t){let e=3;return t.digits=function(n){if(!arguments.length)return e;if(null==n)e=null;else{const t=Math.floor(n);if(!(t>=0))throw new RangeError(`invalid digits: ${n}`);e=t}return t},()=>new Ti(e)}function Ni(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function ki(t){this._context=t}function Ei(t){return new ki(t)}function Di(t){return t[0]}function Ui(t){return t[1]}function Pi(t,e){var n=xi(!0),r=null,i=Ei,a=null,s=Ci(o);function o(o){var c,l,u,h=(o=Ni(o)).length,d=!1;for(null==r&&(a=i(u=s())),c=0;c<=h;++c)!(c=h;--d)o.point(_[d],y[d]);o.lineEnd(),o.areaEnd()}m&&(_[u]=+t(p,u,l),y[u]=+e(p,u,l),o.point(r?+r(p,u,l):_[u],n?+n(p,u,l):y[u]))}if(f)return o=null,f+""||null}function u(){return Pi().defined(i).curve(s).context(a)}return t="function"==typeof t?t:void 0===t?Di:xi(+t),e="function"==typeof e?e:xi(void 0===e?0:+e),n="function"==typeof n?n:void 0===n?Ui:xi(+n),l.x=function(e){return arguments.length?(t="function"==typeof e?e:xi(+e),r=null,l):t},l.x0=function(e){return arguments.length?(t="function"==typeof e?e:xi(+e),l):t},l.x1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:xi(+t),l):r},l.y=function(t){return arguments.length?(e="function"==typeof t?t:xi(+t),n=null,l):e},l.y0=function(t){return arguments.length?(e="function"==typeof t?t:xi(+t),l):e},l.y1=function(t){return arguments.length?(n=null==t?null:"function"==typeof t?t:xi(+t),l):n},l.lineX0=l.lineY0=function(){return u().x(t).y(e)},l.lineY1=function(){return u().x(t).y(n)},l.lineX1=function(){return u().x(r).y(e)},l.defined=function(t){return arguments.length?(i="function"==typeof t?t:xi(!!t),l):i},l.curve=function(t){return arguments.length?(s=t,null!=a&&(o=s(a)),l):s},l.context=function(t){return arguments.length?(null==t?a=o=null:o=s(a=t),l):a},l}function Fi(t){return t<0?-1:1}function Hi(t,e,n){var r=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(r||i<0&&-0),s=(n-t._y1)/(i||r<0&&-0),o=(a*i+s*r)/(r+i);return(Fi(a)+Fi(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(o))||0}function Li(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function zi(t,e,n){var r=t._x0,i=t._y0,a=t._x1,s=t._y1,o=(a-r)/3;t._context.bezierCurveTo(r+o,i+o*e,a-o,s-o*n,a,s)}function ji(t){this._context=t}function Ri(t){return new ji(t)}function Yi(t,e){this._context=t,this._t=e}function qi(t){return new Yi(t,1)}ki.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}},ji.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:zi(this,this._t0,Li(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var n=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,zi(this,Li(this,n=Hi(this,t,e)),n);break;default:zi(this,this._t0,n=Hi(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=n}}},Object.create(ji.prototype).point=function(t,e){ji.prototype.point.call(this,e,t)},Yi.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};const Ii=o`:host{display:block}:host ::slotted(.card-content),.card-content{display:flex;flex-direction:column;gap:12px;padding:16px}.place-row{padding-bottom:16px;border-bottom:1px solid var(--divider-color, #eee)}.place-row:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.place-row .chart-container{margin-top:16px;width:100%;height:120px;background:rgba(var(--rgb-primary-color, 0, 119, 190), 0.03);border-radius:8px;overflow:hidden}.place-row svg{width:100%;height:100%;display:block}.place-row .ref-line{stroke-dasharray:4,4;stroke-width:1;opacity:.5}.place-row .ref-line.min{stroke:#41bdf5}.place-row .ref-line.max{stroke:#ff9800}.place-row .ref-line.avg{stroke:var(--primary-color, #0077be);stroke-dasharray:none;opacity:.3}.place-row .chart-line{stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 2px 4px rgba(var(--rgb-primary-color, 0, 119, 190), 0.2))}.place-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;cursor:pointer;transition:opacity .2s ease;border-radius:6px}.place-header:hover{opacity:.7}.place-header:focus-visible{outline:2px solid var(--primary-color, #0077be);outline-offset:2px}.place-info{display:flex;flex-direction:column;min-width:0}.last-updated{font-size:.75rem;color:var(--secondary-text-color);margin-top:4px}.place-name-container{display:flex;align-items:baseline;gap:6px;min-width:0}.place-name{font-size:1.2rem;font-weight:500;color:var(--primary-text-color)}.place-country{font-size:.85rem;color:var(--secondary-text-color);font-weight:400}.current-temp{display:flex;align-items:baseline;gap:4px;flex:0 0 auto;white-space:nowrap}.temp-value{font-size:2rem;font-weight:700;color:var(--primary-color, #0077be)}.temp-value.unavailable{color:var(--disabled-text-color, var(--secondary-text-color))}.temp-unit{font-size:1rem;font-weight:500;color:var(--secondary-text-color)}.stats-grid,.averages-grid{display:grid;grid-template-columns:repeat(3, 1fr);gap:8px;margin-top:8px}.stat-item{display:flex;flex-direction:column;align-items:center;background:var(--card-background-color);padding:8px;border-radius:8px;box-shadow:0 2px 4px rgba(0,0,0,.05)}.stat-label{font-size:.75rem;text-transform:uppercase;color:var(--secondary-text-color);margin-bottom:4px}.stat-value{font-size:.9rem;font-weight:600}.stat-delta{font-size:.75rem;font-weight:500;margin-top:2px}.stat-delta.pos{color:var(--success-color, #4caf50)}.stat-delta.neg{color:var(--error-color, #db4437)}.stat-delta.neu{color:var(--secondary-text-color)}.averages-section{margin-top:16px;padding-top:12px;border-top:1px dashed var(--divider-color)}.averages-header{font-size:.85rem;font-weight:600;color:var(--secondary-text-color);margin-bottom:8px;text-align:center}.current-trend{font-size:1rem;margin-left:8px;margin-top:0}.warning{color:var(--error-color);padding:8px;text-align:center}.entity-warning{display:flex;align-items:center;justify-content:center;gap:8px;padding:8px;color:var(--warning-color, #ffa600);font-size:.9rem;text-align:center}.entity-warning ha-icon{flex:0 0 auto;--mdc-icon-size: 20px}.ref-label{font-size:8px;font-weight:500;fill:var(--secondary-text-color);dominant-baseline:middle}.ref-label.min{fill:#41bdf5}.ref-label.max{fill:#ff9800}.ref-label.avg{fill:var(--primary-color, #0077be)}.axis-label{font-size:8px;fill:var(--secondary-text-color);opacity:.7}.now-dot{filter:drop-shadow(0 1px 2px rgba(var(--rgb-primary-color, 0, 119, 190), 0.3))}.extrema-dot{filter:drop-shadow(0 1px 2px rgba(0, 0, 0, 0.2))}.extrema-dot.min{fill:#41bdf5}.extrema-dot.max{fill:#ff9800}.hover-group{pointer-events:none;transition:opacity .2s ease-in-out}.hover-line{stroke:var(--secondary-text-color);stroke-width:1;stroke-dasharray:2,2;opacity:.5}.hover-point{fill:var(--card-background-color);stroke:var(--primary-color, #0077be);stroke-width:2}.hover-tooltip-bg{fill:var(--card-background-color);stroke:var(--divider-color, #eee);stroke-width:1;opacity:.95;filter:drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2))}.hover-tooltip-text{fill:var(--primary-text-color);font-size:10px;font-weight:bold}.hover-tooltip-date{fill:var(--secondary-text-color);font-size:8px}.hover-overlay{cursor:crosshair;touch-action:pan-y}ha-card.narrow .card-content{padding:12px;gap:8px}ha-card.narrow .place-row{padding-bottom:12px}ha-card.narrow .place-row .chart-container{margin-top:12px}ha-card.narrow .place-name{font-size:1.05rem}ha-card.narrow .place-name-container{flex-wrap:wrap;overflow-wrap:anywhere}ha-card.narrow .current-trend{margin-left:4px}ha-card.narrow .temp-value{font-size:1.6rem}ha-card.narrow .stats-grid{gap:6px;margin-top:6px}ha-card.narrow .stat-item{padding:6px 4px;border-radius:6px}ha-card.narrow .stat-label{font-size:.65rem;margin-bottom:2px}ha-card.narrow .stat-value{font-size:.8rem}ha-card.narrow .ref-label{font-size:7px}ha-card.narrow .axis-label{font-size:7px}`,Wi="sea-temperatures-card",Zi=`${Wi}-editor`;class Vi extends ut{constructor(){super(...arguments),this._chartData={},this._chartWidth=400,this._chartSources={}}setConfig(t){if(!t||!Array.isArray(t.places))throw new Error("You need to define at least one place.");this._config={show_last_updated:!0,show_trend:!0,show_stats:!0,show_chart:!0,show_country:!1,chart_smoothing:"smooth",...t}}connectedCallback(){super.connectedCallback(),this._resizeObserver=new ResizeObserver(t=>{for(const e of t)if(e.contentRect.width>0){const t=Math.max(200,e.contentRect.width-32);this._chartWidth!==t&&(this._chartWidth=t)}}),this._resizeObserver.observe(this)}disconnectedCallback(){super.disconnectedCallback(),this._resizeObserver?.disconnect()}static async getConfigElement(){return await Promise.resolve().then(function(){return ea}),document.createElement(Zi)}static getStubConfig(t,e){const n=[...e??[],...Object.keys(t?.states??{})].find(e=>Vi._isSuitablePlace(t,e));return{places:n?[n]:[]}}static _isSuitablePlace(t,e){const n=xt(t,e,{domain:"sensor",numeric:!0});if(!n.ok)return!1;const r=n.entity.attributes;return void 0!==r.yesterday||void 0!==r.charts}getCardSize(){return Math.max(1,Math.ceil(this._contentHeight()/50))}getGridOptions(){return{columns:"full",min_columns:6,rows:"auto",min_rows:2}}_contentHeight(){const t=this._config;if(!t)return 94;const e=this.hass?this._getPlacesData(this.hass,t):void 0,n=Math.max(e?.length??t.places?.length??1,1);let r=32;t.title&&(r+=68);for(let i=0;i0&&(r+=28),n?.problem?r+=40:(r+=62,!1!==t.show_stats&&this._hasStats(n)&&(r+=57),!1!==t.show_chart&&this._hasChart(n)&&(r+=136))}return r}_hasStats(t){return!t||[t.yesterday,t.last_week,t.average_avg].some(t=>void 0!==t)}_hasChart(t){if(!t)return!0;const e=this._chartData[t.entity_id];if(e)return e.length>=2;const n=this.hass?.states[t.entity_id]?.attributes?.charts;return(n?.last_thirty?.labels?.length??0)>=2}_getPlacesData(t,e){const n=this._placesMemo;if(n&&n.states===t.states&&n.entities===t.entities&&n.devices===t.devices&&n.config===e)return n.places;const r=this._computePlacesData(t,e);return this._placesMemo={states:t.states,entities:t.entities,devices:t.devices,config:e,places:r},r}_problemPlace(t,e,n){return{name:e||t,temperature:"",entity_id:t,unavailable:!0,problem:n}}_computePlacesData(t,e){const n=[],r=Object.values(t.states);return e.places.forEach(i=>{const a="string"==typeof i?i:i.device,s="object"==typeof i?i.name:void 0;let o,c;if(a&&a.includes(".")){const e=xt(t,a,{domain:"sensor",numeric:!0});if(!e.ok&&"unavailable"!==e.reason)return void n.push(this._problemPlace(a,s,e.reason));o=t.states[a],c=t.entities[a]?.device_id}else{c=a;const e=r.filter(e=>t.entities[e.entity_id]?.device_id===c&&e.entity_id.startsWith("sensor."));if(0===e.length)return void n.push(this._problemPlace(a,s,"not_found"));o=e.find(t=>void 0!==t.attributes.yesterday)||e.find(t=>"°C"===t.attributes.unit_of_measurement||"°F"===t.attributes.unit_of_measurement)||e[0]}if(o){const r=xt(t,o.entity_id,{domain:"sensor",numeric:!0});if(!r.ok&&"unavailable"!==r.reason)return void n.push(this._problemPlace(o.entity_id,s,r.reason));const i=o.attributes,a="unavailable"===o.state||"unknown"===o.state,l=c?t.devices[c]:void 0,u=l?.name_by_user||l?.name||i.friendly_name||"Unknown",h="°F"===i.unit_of_measurement||"F"===i.unit_of_measurement,d=t=>{if(null==t||isNaN(parseFloat(String(t))))return;const e=parseFloat(String(t));return String(h?Math.round(100*(1.8*e+32))/100:e)};n.push({name:s||u,country:e.show_country&&i.country?String(i.country):void 0,temperature:o.state,yesterday:d(i.yesterday),last_week:d(i.last_week),date:i.date?String(i.date):void 0,average_min:d(i.average_min),average_max:d(i.average_max),average_avg:d(i.average_avg),unit:i.unit_of_measurement||"°C",entity_id:o.entity_id,unavailable:a})}}),e.sort_by&&n.sort((t,n)=>{if("name"===e.sort_by)return t.name.localeCompare(n.name);if("temp_asc"===e.sort_by||"temp_desc"===e.sort_by){const r=parseFloat(t.temperature),i=parseFloat(n.temperature),a=isNaN(r)?null:r,s=isNaN(i)?null:i;return null===a||null===s?a===s?0:null===a?1:-1:"temp_asc"===e.sort_by?a-s:s-a}return 0}),n}willUpdate(){this.hass&&this._config&&this._chartSourcesChanged()&&this._fetchChartData()}_chartSourcesChanged(){if(!this._config?.places)return!1;const t=this._getPlacesData(this.hass,this._config);return 0!==t.length&&(!!t.some(t=>this._chartSources[t.entity_id]!==this.hass.states[t.entity_id]?.attributes?.charts)||Object.keys(this._chartSources).some(e=>!t.some(t=>t.entity_id===e)))}shouldUpdate(t){if(t.has("_config"))return!0;const e=t.get("hass");if(e){const n=this._getPlacesData(this.hass,this._config).some(t=>e.states[t.entity_id]!==this.hass.states[t.entity_id]);return n||e.language!==this.hass.language||t.has("_chartData")||t.has("_chartWidth")||this._chartSourcesChanged()}return!0}_parseChartLabel(t,e){const n=String(t).split("-");if(3===n.length){const[t,e,r]=n.map(t=>parseInt(t,10));if(isNaN(t)||isNaN(e)||isNaN(r))return;return new Date(t,e-1,r)}if(2===n.length){const t=parseInt(n[0],10),r=parseInt(n[1],10);if(isNaN(t)||isNaN(r))return;const i=new Date(e.getFullYear(),t-1,r);return i.getTime()>e.getTime()&&i.setFullYear(i.getFullYear()-1),i}}_fetchChartData(){if(!this.hass||!this._config.places)return;const t=this._getPlacesData(this.hass,this._config),e={},n={},r=new Date;t.forEach(({entity_id:t})=>{const i=this.hass?.states[t],a=i?.attributes?.charts;n[t]=i?.attributes?.charts;const s=a?.last_thirty?.labels,o=a?.last_thirty?.series;if(!Array.isArray(s)||!Array.isArray(o)||s.length!==o.length)return;const c="°F"===i?.attributes?.unit_of_measurement||"F"===i?.attributes?.unit_of_measurement,l=s.map((t,e)=>{const n=this._parseChartLabel(t,r);if(!n)return;let i=parseFloat(String(o[e]));return isNaN(i)?void 0:(c&&(i=Math.round(100*(1.8*i+32))/100),{date:n,value:i})}).filter(t=>void 0!==t).sort((t,e)=>t.date.getTime()-e.date.getTime());l.length>0&&(e[t]=l)}),this._chartSources=n,this._chartData=e}_handleHeaderKeydown(t,e){"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),this._handleMoreInfo(e))}_placeAriaLabel(t){const e=[t.name];return t.country&&e.push(t.country),e.push(t.unavailable?t.temperature:`${t.temperature}${t.unit??""}`),e.join(", ")}_chartAriaLabel(t,e){const n=e.map(t=>t.value),r=t.unit??"",i=t=>`${wt(t,this.hass)}${r}`;return[t.name,yt(this.hass,"card.chart_description"),`${yt(this.hass,"card.min")} ${i(Math.min(...n))}`,`${yt(this.hass,"card.max")} ${i(Math.max(...n))}`].join(", ")}_handleMoreInfo(t){vt(this,"hass-more-info",{entityId:t})}_renderTrend(t,e,n=""){if(!this._config.show_trend)return W``;const r=t;if(void 0===r||isNaN(parseFloat(e))||isNaN(parseFloat(r)))return W``;const i=parseFloat(e)-parseFloat(r),a=Math.round(10*i)/10;if(Math.abs(a)>0){const t=a>0,e=wt(Math.abs(a),this.hass,{minimumFractionDigits:1,maximumFractionDigits:1});return W`
${t?"↑":"↓"} ${t?"+":"-"}${e}${n}
`}const s=wt(0,this.hass,{minimumFractionDigits:1,maximumFractionDigits:1});return W`
→ ${s}${n}
`}render(){if(!this._config||!this.hass)return W``;const t=this._getPlacesData(this.hass,this._config),e=this._chartWidth<360;return W` diff --git a/custom_components/spook/integrations/spook_inverse/manifest.json b/custom_components/spook/integrations/spook_inverse/manifest.json index 2ffd48c7..55ffe8aa 100644 --- a/custom_components/spook/integrations/spook_inverse/manifest.json +++ b/custom_components/spook/integrations/spook_inverse/manifest.json @@ -10,5 +10,5 @@ "iot_class": "calculated", "issue_tracker": "https://github.com/frenck/spook/issues", "requirements": [], - "version": "5.5.0" + "version": "5.5.1" } diff --git a/custom_components/spook/manifest.json b/custom_components/spook/manifest.json index bc1bf0d7..516025f7 100644 --- a/custom_components/spook/manifest.json +++ b/custom_components/spook/manifest.json @@ -36,5 +36,5 @@ "requirements": [ "cronsim==2.7" ], - "version": "5.5.0" + "version": "5.5.1" } diff --git a/custom_components/spook/services.py b/custom_components/spook/services.py index bf6fafaf..b1d595b7 100644 --- a/custom_components/spook/services.py +++ b/custom_components/spook/services.py @@ -62,8 +62,11 @@ class AbstractSpookServiceBase(ABC): @abstractmethod @callback - def async_register(self) -> None: - """Handle the service call.""" + def async_register(self) -> bool: + """Register the service with Home Assistant. + + Returns True when the service was actually registered. + """ raise NotImplementedError @final @@ -92,7 +95,7 @@ class AbstractSpookService(AbstractSpookServiceBase): @final @callback - def async_register(self) -> None: + def async_register(self) -> bool: """Register the service with Home Assistant.""" # Only register the service if the domain is the spook integration # or if the target integration is loaded. @@ -103,7 +106,7 @@ class AbstractSpookService(AbstractSpookServiceBase): self.service, self.domain, ) - return + return False LOGGER.debug( "Registering Spook service: %s.%s", @@ -119,6 +122,8 @@ class AbstractSpookService(AbstractSpookServiceBase): supports_response=self.supports_response, ) + return True + @abstractmethod async def async_handle_service(self, call: ServiceCall) -> ServiceResponse: """Handle the service call.""" @@ -130,7 +135,7 @@ class AbstractSpookAdminService(AbstractSpookServiceBase): @final @callback - def async_register(self) -> None: + def async_register(self) -> bool: """Register the service with Home Assistant.""" if self.domain != DOMAIN and self.domain not in self.hass.config.components: LOGGER.debug( @@ -139,7 +144,7 @@ class AbstractSpookAdminService(AbstractSpookServiceBase): self.service, self.domain, ) - return + return False LOGGER.debug( "Registering Spook admin service: %s.%s", @@ -154,6 +159,8 @@ class AbstractSpookAdminService(AbstractSpookServiceBase): schema=vol.Schema(self.schema) if self.schema else None, ) + return True + @abstractmethod async def async_handle_service(self, call: ServiceCall) -> None: """Handle the service call.""" @@ -169,7 +176,7 @@ class AbstractSpookEntityService(AbstractSpookServiceBase, Generic[_EntityT]): @final @callback - def async_register(self) -> None: + def async_register(self) -> bool: """Register the service with Home Assistant.""" LOGGER.debug( "Registering Spook entity service: %s.%s for platform %s", @@ -205,6 +212,8 @@ class AbstractSpookEntityService(AbstractSpookServiceBase, Generic[_EntityT]): supports_response=self.supports_response, ) + return True + @abstractmethod async def async_handle_service( self, @@ -223,7 +232,7 @@ class AbstractSpookEntityComponentService(AbstractSpookServiceBase, Generic[_Ent @final @callback - def async_register(self) -> None: + def async_register(self) -> bool: """Register the service with Home Assistant.""" LOGGER.debug( "Registering Spook entity component service: %s.%s", @@ -248,6 +257,8 @@ class AbstractSpookEntityComponentService(AbstractSpookServiceBase, Generic[_Ent supports_response=self.supports_response, ) + return True + @abstractmethod async def async_handle_service( self, @@ -363,7 +374,12 @@ class SpookServiceManager: @callback def async_register_service(self, service: AbstractSpookService) -> None: """Register a Spook service.""" - service.async_register() + # A service aimed at an integration that is not set up never lands in + # Home Assistant. Injecting a description for it would then describe + # an action that does not exist, which core refuses with a KeyError. + if not service.async_register(): + return + self._services.add(service) # Override service description with Spook's if the service is not diff --git a/custom_components/spook/translations/pt.json b/custom_components/spook/translations/pt.json index a8b4d98f..a7dde435 100644 --- a/custom_components/spook/translations/pt.json +++ b/custom_components/spook/translations/pt.json @@ -1,13 +1,13 @@ { "config": { "abort": { - "already_spooked": "Spook já está configurado.", + "already_spooked": "O Spook já está configurado.", "enable_failed": "A entrada atual do Spook não pode ser ativada.", "enabled_existing": "A entrada atual do Spook foi ativada." }, "step": { "user": { - "description": "Leste o readme? Leste a licença? Tens mesmo a certeza?" + "description": "Leste o \"readme\"? Leste a licença? Tens mesmo a certeza?" }, "choice_restart": { "description": "Para que o Spook consiga terminar a configuração, o Home Assistant tem que ser reiniciado.\n\nPretendes reiniciar o Home assistant agora?", @@ -17,7 +17,7 @@ } }, "already_configured": { - "description": "Spook já está configurado, mas a entrada está desativada. Queres ativá-la?", + "description": "O Spook já está configurado, mas a entrada está desativada. Queres ativá-la?", "menu_options": { "enable_existing": "Ativar entrada existente" } @@ -72,7 +72,7 @@ "name": "Automations" }, "homeassistant_binary_sensor": { - "name": "Binary sensors" + "name": "Sensores binários" }, "homeassistant_button": { "name": "Buttons" @@ -168,7 +168,7 @@ "name": "Selects" }, "homeassistant_sensor": { - "name": "Sensors" + "name": "Sensores" }, "homeassistant_siren": { "name": "Sirens" @@ -198,10 +198,10 @@ "name": "Vacuums" }, "homeassistant_water_heater": { - "name": "Water heaters" + "name": "Aquecedores de água" }, "homeassistant_weather": { - "name": "Weather" + "name": "Metereologia" }, "homeassistant_zone": { "name": "Zonas" @@ -269,7 +269,7 @@ "title": "Membros do grupo desconhecido em: {group}", "fix_flow": { "abort": { - "issue_ignored": "Spook vai manter-se calado sobre este grupo a partir de agora.", + "issue_ignored": "O Spook vai manter-se calado sobre este grupo a partir de agora.", "manage": "Podes gerir este grupo tu próprio na [página de Assistentes](/config/helpers).", "not_editable": "Este grupo está configurado em YAML, por isso o Spook não o pode editar. Atualiza o grupo na tua configuração." }, @@ -287,19 +287,19 @@ } }, "lovelace_unknown_entity_references": { - "description": "O Spook encontrou um fantasma nos teus dashboards 👻\n\nEnquanto flutuava por ai, o Spook cruzou-se com o seguinte dashboard:\n\n[{dashboard}]({edit})\n\nEste dashboard contém as seguintes entidades que são desconhecidas para o Home Assistant:\n\n{entities}\n\n\n\nPara corrigir este erro, [edita a dashboard]({edit}) e remove as entidades inexistentes.\n\nSpook 👻 O teu amigo.", + "description": "O Spook encontrou um fantasma nos teus painéis👻\n\nEnquanto flutuava por ai, o Spook cruzou-se com o seguinte dashboard:\n\n[{dashboard}]({edit})\n\nEste dashboard contém as seguintes entidades que são desconhecidas para o Home Assistant:\n\n{entities}\n\n\n\nPara corrigir este erro, [edita a dashboard]({edit}) e remove as entidades inexistentes.\n\nSpook 👻 O teu amigo.", "title": "Entidades desconhecidas utilizadas em: {dashboard}" }, "proximity_unknown_ignored_zones": { - "description": "Spook encontrou um fantasma na tua configuração de proximidade 👻\n\nEnquanto flutuava por aí, o Spook cruzou-se com a seguinte configuração de proximidade:\n\n{name}\n\nEsta configuração ignora zonas que são desconhecidas para o Home Assistant:\n\n{zones}\n\nPara corrigir este erro, edita a configuração e remove esta ou estas zonas.\n\nSpook 👻 O teu amigo.", + "description": "O Spook encontrou um fantasma na tua configuração de proximidade 👻\n\nEnquanto flutuava por aí, o Spook cruzou-se com a seguinte configuração de proximidade:\n\n{name}\n\nEsta configuração ignora zonas que são desconhecidas para o Home Assistant:\n\n{zones}\n\nPara corrigir este erro, edita a configuração e remove esta ou estas zonas.\n\nSpook 👻 O teu amigo.", "title": "Zonas ignoradas desconhecidas: {name}" }, "proximity_unknown_tracked_entities": { - "description": "Spook encontrou um fantasma na tua configuração de proximidade 👻\n\nEnquanto flutuava por aí, o Spook cruzou-se com a seguinte configuração de proximidade:\n\n{name}\n\nEsta configuração segue pessoas ou rastreadores de dispositivo que são desconhecidos para o Home Assistant:\n\n{entities}\n\nPara corrigir este erro, edita a configuração e remove esta ou estas entidades.\n\nSpook 👻 O teu amigo.", + "description": "O Spook encontrou um fantasma na tua configuração de proximidade 👻\n\nEnquanto flutuava por aí, o Spook cruzou-se com a seguinte configuração de proximidade:\n\n{name}\n\nEsta configuração segue pessoas ou rastreadores de dispositivo que são desconhecidos para o Home Assistant:\n\n{entities}\n\nPara corrigir este erro, edita a configuração e remove esta ou estas entidades.\n\nSpook 👻 O teu amigo.", "title": "Entidades seguidas desconhecidas: {name}" }, "proximity_unknown_zone": { - "description": "Spook encontrou um fantasma na tua configuração de proximidade 👻\n\nEnquanto flutuava por aí, o Spook cruzou-se com a seguinte configuração de proximidade:\n\n{name}\n\nEsta configuração baseia-se numa zona que é desconhecida para o Home Assistant:\n\n`{zone}`\n\nPara corrigir este erro, e como não podes mudar a zona de uma configuração de proximidade, a única opção é remover esta instância da integração de proximidade.\n\nSpook 👻 O teu amigo.", + "description": "O Spook encontrou um fantasma na tua configuração de proximidade 👻\n\nEnquanto flutuava por aí, o Spook cruzou-se com a seguinte configuração de proximidade:\n\n{name}\n\nEsta configuração baseia-se numa zona que é desconhecida para o Home Assistant:\n\n`{zone}`\n\nPara corrigir este erro, e como não podes mudar a zona de uma configuração de proximidade, a única opção é remover especificamente esta integração de proximidade.\n\nSpook 👻 O teu amigo.", "title": "Zona desconhecida: {zone}" }, "scene_unknown_entity_references": { @@ -355,7 +355,7 @@ "empty_areas": { "fix_flow": { "abort": { - "issue_ignored": "Spook vai manter-se calado relativamente a esta área a partir de agora.", + "issue_ignored": "O Spook vai manter-se calado relativamente a esta área a partir de agora.", "manage": "Podes gerir esta área tu próprio na [página de Áreas](/config/areas/dashboard)." }, "step": { @@ -375,7 +375,7 @@ "unused_blueprints": { "fix_flow": { "abort": { - "issue_ignored": "Spook vai manter-se calado sobre este blueprint a partir de agora.", + "issue_ignored": "O Spook vai manter-se calado sobre este blueprint a partir de agora.", "manage": "Podes gerir este blueprint tu próprio na [página de Blueprints](/config/blueprint/dashboard)." }, "step": { @@ -395,7 +395,7 @@ "empty_floors": { "fix_flow": { "abort": { - "issue_ignored": "Spook vai manter-se calado sobre este piso a partir de agora.", + "issue_ignored": "O Spook vai manter-se calado sobre este piso a partir de agora.", "manage": "Podes gerir este piso tu próprio na [página de Áreas](/config/areas/dashboard)." }, "step": { @@ -415,13 +415,13 @@ "min_max_unknown_sources": { "fix_flow": { "abort": { - "issue_ignored": "Spook vai manter-se calado sobre este auxiliar a partir de agora.", + "issue_ignored": "O Spook vai manter-se calado sobre este auxiliar a partir de agora.", "manage": "Podes gerir este assistente tu próprio na [página de Assistentes](/config/helpers).", "too_few_members": "Um assistente mín/máx precisa de pelo menos dois membros, por isso remover os que faltam deixaria poucos demais. Reconfigura ou remove o assistente tu próprio na [página de Assistentes](/config/helpers)." }, "step": { "init": { - "description": "Spook encontrou um fantasma nos teus assistentes 👻\n\nO assistente mín/máx {helper} combina os seguintes membros, que são desconhecidos para o Home Assistant:\n\n{sources}\n\nRemove-os para o assistente continuar com os membros que restam, ou fica com eles e o Spook não volta a falar deles.\n\nSpook 👻 O teu amigo.", + "description": "O Spook encontrou um fantasma nos teus assistentes 👻\n\nO assistente mín/máx {helper} combina os seguintes membros, que são desconhecidos para o Home Assistant:\n\n{sources}\n\nRemove-os para o assistente continuar com os membros que restam, ou fica com eles e o Spook não volta a falar deles.\n\nSpook 👻 O teu amigo.", "menu_options": { "ignore": "Fica com ele e não me digas mais nada", "manage": "Eu próprio resolvo", @@ -436,7 +436,7 @@ "unknown_helper_source_references": { "fix_flow": { "abort": { - "issue_ignored": "Spook vai manter-se calado sobre este auxiliar a partir de agora.", + "issue_ignored": "O Spook vai manter-se calado sobre este auxiliar a partir de agora.", "manage": "Podes gerir este assistente tu próprio na [página de Assistentes](/config/helpers)." }, "step": { @@ -456,7 +456,7 @@ "unused_labels": { "fix_flow": { "abort": { - "issue_ignored": "Spook vai manter-se calado sobre esta legenda a partir de agora.", + "issue_ignored": "O Spook vai manter-se calado sobre esta legenda a partir de agora.", "manage": "Podes gerir esta etiqueta tu próprio na [página de Etiquetas](/config/labels)." }, "step": { @@ -476,13 +476,13 @@ "person_unknown_device_trackers": { "fix_flow": { "abort": { - "issue_ignored": "Spook vai manter-se calado sobre esta pessoa a partir de agora.", + "issue_ignored": "O Spook vai manter-se calado sobre esta pessoa a partir de agora.", "manage": "Podes gerir esta pessoa tu próprio na [página de Pessoas](/config/person).", "not_editable": "Esta pessoa está configurada em YAML, por isso o Spook não a pode editar. Atualiza a pessoa na tua configuração." }, "step": { "init": { - "description": "Spook encontrou um fantasma nas tuas pessoas 👻\n\n{person} segue os seguintes rastreadores de dispositivo, que são desconhecidos para o Home Assistant:\n\n{device_trackers}\n\nIsto acontece muitas vezes quando um rastreador de dispositivo foi renomeado ou a sua integração foi removida.\n\nRemove-os de {person}, ou fica com eles e o Spook não volta a falar deles.\n\nSpook 👻 O teu amigo.", + "description": "O Spook encontrou um fantasma nas tuas pessoas 👻\n\n{person} segue os seguintes rastreadores de dispositivo, que são desconhecidos para o Home Assistant:\n\n{device_trackers}\n\nIsto acontece muitas vezes quando um rastreador de dispositivo foi renomeado ou a sua integração foi removida.\n\nRemove-os de {person}, ou fica com eles e o Spook não volta a falar deles.\n\nSpook 👻 O teu amigo.", "menu_options": { "ignore": "Fica com ele e não me digas mais nada", "manage": "Eu próprio resolvo", @@ -507,7 +507,7 @@ "title": "Entidades desconhecidas nas tuas personalizações" }, "lovelace_missing_resources": { - "description": "O Spook encontrou um fantasma nos seus painéis 👻\n\nOs seguintes recursos de dashboard apontam para arquivos que não existem:\n\n{resources}\n\n\n\nIsto geralmente acontece quando um cartão personalizado ou seus arquivos foram removidos, mas o recurso permaneceu. Para corrigir esse erro, vá em Configurações > Dashboards > Recursos e remova ou corrija esses recursos.\n\nSpook 👻 O teu amigo.", + "description": "O Spook encontrou um fantasma nos teus painéis 👻\n\nOs seguintes recursos de dashboard apontam para arquivos que não existem:\n\n{resources}\n\n\n\nIsto geralmente acontece quando um cartão personalizado ou seus arquivos foram removidos, mas o recurso permaneceu. Para corrigir este erro, vai a Configurações > Dashboards > Recursos (/config/lovelace/resources) e remove ou corrije esses recursos. Não há uma aba própria: na página dos Painéis, encontra-se nos três pontos, no canto superior direito.\n\nSpook 👻 O teu amigo.", "title": "Recursos do painel a apontar para ficheiros que faltam" }, "lovelace_unknown_area_references": { @@ -532,22 +532,22 @@ }, "orphaned_statistics": { "title": "Encontradas estatísticas de longo prazo órfãs", - "description": "Spook encontrou um fantasma no teu gravador 👻\n\nO Home Assistant guarda estatísticas de longo prazo do seguinte, mas já não existe uma entidade que lhes corresponda:\n\n{statistics}\n\n\n\nIsto costuma acontecer quando um sensor foi apagado e as estatísticas dele ficaram. Para corrigir este erro, abre Definições > Ferramentas > Estatísticas e trata delas aí.\n\nSpook 👻 O teu amigo." + "description": "O Spook encontrou um fantasma no teu gravador 👻\n\nO Home Assistant guarda estatísticas de longo prazo do seguinte, mas já não existe uma entidade que lhes corresponda:\n\n{statistics}\n\n\n\nIsto costuma acontecer quando um sensor foi apagado e as estatísticas dele ficaram. Para corrigir este erro, abre Definições > Ferramentas > Estatísticas e trata delas aí.\n\nSpook 👻 O teu amigo." }, "script_unknown_trigger_references": { - "description": "Spook encontrou um fantasma nos teus scripts 👻\n\nEnquanto flutuava por aí, o Spook cruzou-se com o seguinte script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nEste script usa os seguintes acionadores, que nenhuma integração disponível para o Home Assistant consegue fornecer:\n\n{triggers}\n\nIsto acontece muitas vezes quando a integração que fornecia um acionador foi removida. Para corrigir este erro, [edita o script]({edit}) e remove o uso destes acionadores indisponíveis, ou restaura a integração que os fornece.\n\nSpook 👻 O teu amigo.", + "description": "O Spook encontrou um fantasma nos teus scripts 👻\n\nEnquanto flutuava por aí, o Spook cruzou-se com o seguinte script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nEste script usa os seguintes acionadores, que nenhuma integração disponível para o Home Assistant consegue fornecer:\n\n{triggers}\n\nIsto acontece muitas vezes quando a integração que fornecia um acionador foi removida. Para corrigir este erro, [edita o script]({edit}) e remove o uso destes acionadores indisponíveis, ou restaura a integração que os fornece.\n\nSpook 👻 O teu amigo.", "title": "Acionadores desconhecidos usados em: {script}" }, "template_unknown_entity_references": { - "description": "Spook encontrou um fantasma nos teus assistentes de template 👻\n\nEnquanto flutuava por aí, o Spook cruzou-se com o seguinte assistente de template:\n\n[{helper}]({edit})\n\nA sua configuração refere as seguintes entidades, que são desconhecidas para o Home Assistant:\n\n{entities}\n\nIsto acontece muitas vezes quando uma entidade foi renomeada ou removida. Para corrigir este erro, reconfigura o assistente de template para apontar para entidades que existam.\n\nSpook 👻 O teu amigo.", + "description": "O Spook encontrou um fantasma nos teus assistentes de template 👻\n\nEnquanto flutuava por aí, o Spook cruzou-se com o seguinte assistente de template:\n\n[{helper}]({edit})\n\nA sua configuração refere as seguintes entidades, que são desconhecidas para o Home Assistant:\n\n{entities}\n\nIsto acontece muitas vezes quando uma entidade foi renomeada ou removida. Para corrigir este erro, reconfigura o assistente de template para apontar para entidades que existam.\n\nSpook 👻 O teu amigo.", "title": "Entidades desconhecidas usadas no assistente de template: {helper}" }, "template_unknown_service_references": { - "description": "Spook encontrou um fantasma nos teus assistentes de template 👻\n\nEnquanto flutuava por aí, o Spook cruzou-se com o seguinte assistente de template:\n\n[{helper}]({edit})\n\nRefere as seguintes ações, que são desconhecidas para o Home Assistant:\n\n{services}\n\nIsto acontece muitas vezes quando a integração por trás de uma ação foi removida, ou quando um script foi renomeado ou eliminado. Para corrigir este erro, reconfigura o assistente de template para usar ações que existam.\n\nSpook 👻 O teu amigo.", + "description": "O Spook encontrou um fantasma nos teus assistentes de template 👻\n\nEnquanto flutuava por aí, o Spook cruzou-se com o seguinte assistente de template:\n\n[{helper}]({edit})\n\nRefere as seguintes ações, que são desconhecidas para o Home Assistant:\n\n{services}\n\nIsto acontece muitas vezes quando a integração por trás de uma ação foi removida, ou quando um script foi renomeado ou eliminado. Para corrigir este erro, reconfigura o assistente de template para usar ações que existam.\n\nSpook 👻 O teu amigo.", "title": "Ações desconhecidas usadas no assistente de template: {helper}" }, "notify_unknown_group_members": { - "description": "Spook encontrou um fantasma nos teus grupos de notificação 👻\n\nO grupo de notificação `{group}` encaminha para as seguintes ações, que são desconhecidas para o Home Assistant:\n\n{members}\n\nO grupo continua a entregar aos restantes membros e continua a comunicar sucesso a quem o chamou, pelo que nada a montante se apercebe. A falha só aparece como um \"Task exception was never retrieved\" solto no registo, que não nomeia nenhum grupo e parece um erro de programação. Quem estava por trás desse membro deixa simplesmente de ser notificado.\n\nPara corrigir este erro, edita a lista `services:` deste grupo na tua configuração e remove ou corrige estas entradas.\n\nSpook 👻 O teu amigo.", + "description": "O Spook encontrou um fantasma nos teus grupos de notificação 👻\n\nO grupo de notificação `{group}` encaminha para as seguintes ações, que são desconhecidas para o Home Assistant:\n\n{members}\n\nO grupo continua a entregar aos restantes membros e continua a comunicar sucesso a quem o chamou, pelo que nada a montante se apercebe. A falha só aparece como um \"Task exception was never retrieved\" solto no registo, que não nomeia nenhum grupo e parece um erro de programação. Quem estava por trás desse membro deixa simplesmente de ser notificado.\n\nPara corrigir este erro, edita a lista `services:` deste grupo na tua configuração e remove ou corrige estas entradas.\n\nSpook 👻 O teu amigo.", "title": "Membros desconhecidos no grupo de notificação: {group}" }, "lovelace_duplicate_resources": { @@ -556,7 +556,7 @@ "step": { "init": { "title": "Recurso do painel presente mais do que uma vez: {resource}", - "description": "Spook encontrou um fantasma nos teus painéis 👻\n\nEste recurso do painel aparece {count} vezes:\n\n{resources}\n\nIsto costuma acontecer quando um cartão personalizado foi atualizado acrescentando um recurso para a versão nova em vez de editar o que já lá estava. O navegador carrega os dois, o cartão tenta registar-se duas vezes e a segunda tentativa falha, o que parece um cartão avariado em vez de um recurso repetido.\n\nO Spook pode limpar as cópias a mais e ficar com a que foi acrescentada mais recentemente.\n\nSpook 👻 O teu amigo.", + "description": "O Spook encontrou um fantasma nos teus painéis 👻\n\nEste recurso do painel aparece {count} vezes:\n\n{resources}\n\nIsto costuma acontecer quando um cartão personalizado foi atualizado acrescentando um recurso para a versão nova em vez de editar o que já lá estava. O navegador carrega os dois, o cartão tenta registar-se duas vezes e a segunda tentativa falha, o que parece um cartão avariado em vez de um recurso repetido.\n\nO Spook pode limpar as cópias a mais e ficar com a que foi acrescentada mais recentemente.\n\nSpook 👻 O teu amigo.", "menu_options": { "remove": "Limpar as cópias a mais e ficar com a mais recente", "ignore": "Deixá-las estar, e não me dizer mais nada", @@ -1420,7 +1420,7 @@ "name": "Definir os aliases de uma área" }, "homeassistant_unexpose_entity": { - "description": "Deixa de expor uma entidade (ou entidades) aos assistentes de voz.", + "description": "Deixa de expor uma(s) entidade(s) aos assistentes de voz.", "fields": { "assistants": { "description": "O assistente ou assistentes a que isto se aplica.", @@ -1695,7 +1695,8 @@ "description": "As entidades a remover do grupo." }, "group": { - "name": "Grupo" + "name": "Grupo", + "description": "O grupo do qual é para retirar." } }, "description": "Remove entidades de um grupo criado pela interface enquanto o Home Assistant está em execução. Renomear algo que não faz parte do grupo não faz nada, portanto essa também é a maneira de remover um membro que já não existe." @@ -1710,7 +1711,9 @@ "name": "Membros", "description": "As entidades que o grupo deve manter de agora em diante." } - } + }, + "name": "Define os membros de um grupo", + "description": "Substitui os membros de um grupo criado pela interface pelos membros fornecidos, enquanto o Home Assistant está em execução." }, "group_add_members": { "name": "Adiciona membros a um grupo", @@ -1723,7 +1726,8 @@ "name": "Membros", "description": "As entidades a adicionar ao grupo." } - } + }, + "description": "Adiciona entidades a um grupo criado pela interface, enquanto o Home Assistant está em execução. As entidades que já fazem parte do grupo permanecem onde estão." } }, "triggers": { @@ -1760,20 +1764,20 @@ } }, "watchdog": { - "name": "Cão de guarda", + "name": "Watchdog", "description": "Dispara quando algo que esperavas não acontece a tempo.", "fields": { "arm": { "name": "Armar", - "description": "O que põe a guarda a postos. A espera conta a partir daí, e armar outra vez enquanto já se está à espera reinicia a contagem." + "description": "O que inicia a contagem. A espera é começa a partir deste ponto, e reativar a função enquanto a espera já está em curso reinicia a contagem." }, "expect": { "name": "Esperado", - "description": "O que esperas que aconteça a seguir. Se chegar a tempo, a guarda é cancelada e nada dispara." + "description": "O que é esperado que aconteça a seguir. Se chegar a tempo, cancela e nada dispara." }, "within": { "name": "Dentro de", - "description": "Quanto tempo tem o que é esperado para chegar. Isto dispara quando esse tempo passa e nada chegou." + "description": "O tempo que é expectável esperar para chegar. Isto dispara quando esse tempo passa e nada chegou." } } }, @@ -1862,23 +1866,38 @@ "debounce": { "fields": { "triggers": { - "name": "Gatilhos" + "name": "Gatilhos", + "description": "Os gatilhos a serem aguardados. O disparo de qualquer um deles inicia uma sequência de disparos, por isso o disparo subsequente de qualquer um deles mantém tudo a correr. Assim, vários gatilhos são agrupados, em vez de processados um de cada vez." }, "for": { "name": "Para", "description": "Quanto tempo deve permanecer silenciado antes que isto dispare. Cada disparo reinicia essa contagem de tempo, portanto, algo que nunca para de disparar nunca chega a ser relatado." } }, - "name": "Assim que ficar configurado" + "name": "Assim que ficar configurado", + "description": "Dispara após um gatilho parar de disparar por algum tempo, de modo que uma sequência de disparos chega como um único evento. Um sensor de movimento não relata o movimento apenas uma vez, reporta vinte vezes." }, "all_of": { "name": "Todos esses aconteceram", "fields": { "triggers": { - "name": "Gatilhos" + "name": "Gatilhos", + "description": "Todos os gatilhos que precisam ter sido disparados. A ordem não importa, e o disparo de um gatilho novamente substitui sua ocorrência anterior, em vez de contar duas vezes." }, "within": { - "description": "O quão perto eles têm de estar um do outro. A janela desliza, e um gatilho que tenha disparado há mais tempo que isso é esquecido, enquanto os outros continuam a contar." + "description": "O quão perto eles têm de estar um do outro. A janela desliza, e um gatilho que tenha disparado há mais tempo que isso é esquecido, enquanto os outros continuam a contar.", + "name": "Dentro de" + } + }, + "description": "É acionado quando todos os diversos gatilhos são disparados dentro do mesmo intervalo de tempo, em qualquer ordem. Os gatilhos nativos do Home Assistant funcionam como uma lista na qual basta que apenas um deles seja disparado; este é o outro tipo de gatilho." + }, + "recovered": { + "name": "A entidade retornou", + "description": "É disparado quando uma entidade retorna após um período de indisponibilidade, evitando que a reinicialização de um router seja interpretada como a recuperação de todos os dispositivos da casa.", + "fields": { + "for": { + "name": "Para", + "description": "O tempo que a entidade tem de permanecer ausente antes de retornar é relevante. Qualquer período inferior a isso é apenas uma oscilação momentânea: ao recarregar uma integração, todas as suas entidades passam pelo estado de indisponibilidade e retornam em menos de um segundo." } } } diff --git a/custom_components/taskmate/button.py b/custom_components/taskmate/button.py index 6fc46729..f738d65c 100644 --- a/custom_components/taskmate/button.py +++ b/custom_components/taskmate/button.py @@ -194,9 +194,8 @@ class ClaimRewardButton(TaskMateBaseButton): Pool-mode pending claims are skipped because their cost was already deducted from child.points at allocation time. """ - pending_claims = self.coordinator.data.get("pending_reward_claims", []) committed = 0 - for c in pending_claims: + for c in self.coordinator.storage.get_pending_reward_claims(): if c.child_id == child_id and not self.coordinator.is_pool_mode_claim(c): reward = self.coordinator.get_reward(c.reward_id) if reward: @@ -205,15 +204,19 @@ class ClaimRewardButton(TaskMateBaseButton): @property def available(self) -> bool: - """Return if button is available (accounting for committed points).""" - child = self.coordinator.get_child(self.child_id) - reward = self.coordinator.get_reward(self.reward_id) + """Offer the button exactly when claiming would be allowed. - if not child or not reward: + Deciding this on the wallet balance alone disagreed with the claim + itself in both directions: a jackpot or a filled savings jar is not + paid from the wallet, and a sold-out, expired, time-locked or + already-claimed reward cannot be claimed however many points a child + has. One rule, asked the same way by both. + """ + try: + self.coordinator.validate_reward_claim(self.reward_id, self.child_id) + except ValueError: return False - - available_points = child.points - self._get_committed_points(child.id) - return available_points >= reward.cost + return True @property def extra_state_attributes(self) -> dict: @@ -226,7 +229,10 @@ class ClaimRewardButton(TaskMateBaseButton): committed = self._get_committed_points(child.id) available_points = child.points - committed - can_afford = available_points >= reward.cost + # A jackpot is paid from the shared pool and an ordinary reward may be + # paid from a filled savings jar, so affordability is not a question + # about the wallet. + funding = self.coordinator.reward_claim_funding(reward, child.id) return { "child_id": child.id, @@ -237,8 +243,8 @@ class ClaimRewardButton(TaskMateBaseButton): "child_points": child.points, "committed_points": committed, "available_points": available_points, - "can_afford": can_afford, - "points_needed": max(0, reward.cost - available_points), + "can_afford": funding >= reward.cost, + "points_needed": max(0, reward.cost - funding), } async def async_press(self) -> None: diff --git a/custom_components/taskmate/coord_chores.py b/custom_components/taskmate/coord_chores.py index 4cada9cf..c3da41d8 100644 --- a/custom_components/taskmate/coord_chores.py +++ b/custom_components/taskmate/coord_chores.py @@ -4,7 +4,7 @@ from __future__ import annotations import logging from calendar import monthrange -from datetime import date, datetime +from datetime import date, datetime, timedelta from typing import TYPE_CHECKING from homeassistant.util import dt as dt_util @@ -833,6 +833,18 @@ class ChoresMixin: ) return None + # Weekly target (#883): the same cap one level up. Parents completing on + # behalf are bound by it too — the quota is the point of the chore, and + # the daily limit above already treats them the same way. + if self.weekly_target_met(chore, child_id): + _LOGGER.debug( + "complete_chore no-op: weekly target reached for '%s' (%d/%d this week)", + chore.name, + self.weekly_completion_count(chore_id, child_id), + getattr(chore, "weekly_target", 0), + ) + return None + # A photo-required chore always goes through parent approval (unless a # parent is completing on behalf), so the evidence gets reviewed. requires_photo = bool(getattr(chore, "require_photo", False)) @@ -869,6 +881,7 @@ class ChoresMixin: completed_at=now, approved=auto_approve, points_awarded=effective_points if auto_approve else 0, + submitted_points=effective_points, photo_url=photo_url or "", note=note, suggested_points=suggested_points, @@ -972,6 +985,7 @@ class ChoresMixin: approved=True, approved_at=now, points_awarded=0, + submitted_points=0, ) self.storage.add_completion(completion) @@ -1058,6 +1072,7 @@ class ChoresMixin: completed_at=now, approved=not chore.requires_approval, points_awarded=subtask.points if not chore.requires_approval else 0, + submitted_points=subtask.points, bonus_subtask_id=bonus_subtask_id, ) @@ -1093,8 +1108,9 @@ class ChoresMixin: worth (#832) — needed for open-ended submissions, useful for any chore. It replaces the chore's *base* points, so the streak and level multipliers ``_award_points`` applies still ride on top exactly as they - would for an ordinary approval. ``None`` means "use the chore's value" - and leaves the existing behaviour untouched. + would for an ordinary approval. ``None`` means "pay what the submission + was worth when it was made", falling back to the chore's value for + completions recorded before that was stored. """ completions = self.storage.get_completions() for completion in completions: @@ -1111,7 +1127,15 @@ class ChoresMixin: if chore and child: comp_date = dt_util.as_local(completion.completed_at).date() is_bonus = bool(completion.bonus_subtask_id) - if is_bonus: + if completion.submitted_points is not None: + # Pay what the child was promised when they submitted. + # Recalculating here reads the chore's *current* points + # — so an edit made while the work sat in the queue + # changed the price after the fact — and silently drops + # the speed bonus and roulette multiplier that were in + # the figure they saw. + pts = completion.submitted_points + elif is_bonus: subtask = next((b for b in chore.bonus_subtasks if b.id == completion.bonus_subtask_id), None) pts = subtask.points if subtask else 0 elif completion.timed_duration_seconds > 0 and chore.task_type == "timed": @@ -1601,6 +1625,34 @@ class ChoresMixin: days_since = (today - last_dt).days return days_since >= window_days + def weekly_completion_count(self, chore_id: str, child_id: str) -> int: + """How many times ``child_id`` has completed ``chore_id`` this week. + + Monday-anchored, matching the Challenges period convention. Bonus + sub-tasks don't count; pending completions do, so a chore can't be + submitted a fourth time just because the parent hasn't got round to + approving the third yet. + """ + today = dt_util.as_local(dt_util.now()).date() + week_start = today - timedelta(days=today.weekday()) + count = 0 + for comp in self._cached_completions_for_chore(chore_id): + if comp.child_id != child_id or getattr(comp, "bonus_subtask_id", ""): + continue + try: + if dt_util.as_local(comp.completed_at).date() >= week_start: + count += 1 + except (AttributeError, TypeError, ValueError): + continue + return count + + def weekly_target_met(self, chore, child_id: str) -> bool: + """True when a weekly-target chore has had its quota filled this week.""" + target = int(getattr(chore, "weekly_target", 0) or 0) + if target <= 0: + return False + return self.weekly_completion_count(chore.id, child_id) >= target + def _is_chore_completable_by_child(self, chore, child_id: str) -> bool: """Whether ``child_id`` may complete ``chore`` right now (card parity). @@ -1657,6 +1709,10 @@ class ChoresMixin: continue if done >= limit: continue + # Weekly target (#883): filled the week's quota, so nothing is + # owed until Monday even on a day the chore is scheduled. + if self.weekly_target_met(chore, child_id): + continue out.append(chore) return out diff --git a/custom_components/taskmate/coord_mandatory.py b/custom_components/taskmate/coord_mandatory.py index e923d62c..65c98bfc 100644 --- a/custom_components/taskmate/coord_mandatory.py +++ b/custom_components/taskmate/coord_mandatory.py @@ -119,6 +119,11 @@ class MandatoryMixin: continue if self._child_completed_today(chore.id, child_id, day): continue + # Weekly target (#883): the week's quota is already filled, so + # nothing is outstanding — even though the chore is still + # "scheduled" every day. + if self.weekly_target_met(chore, child_id): + continue if (chore.id, child_id, day.isoformat()) in existing: continue miss = MandatoryMiss( diff --git a/custom_components/taskmate/coord_notifications.py b/custom_components/taskmate/coord_notifications.py index 201ba4a2..b03ce077 100644 --- a/custom_components/taskmate/coord_notifications.py +++ b/custom_components/taskmate/coord_notifications.py @@ -538,27 +538,42 @@ class NotificationCoordinator: return if action.startswith("TASKMATE_APPROVE_"): - entry_id = action[len("TASKMATE_APPROVE_") :] - try: - await coordinator.async_approve_chore(entry_id) - return - except (ValueError, KeyError): - pass - try: - await coordinator.async_approve_reward(entry_id) - except (ValueError, KeyError): - _LOGGER.info("Mobile action %s — entry not found", action) + await self._review_from_mobile( + action, + action[len("TASKMATE_APPROVE_") :], + coordinator.async_approve_chore, + coordinator.async_approve_reward, + ) elif action.startswith("TASKMATE_REJECT_"): - entry_id = action[len("TASKMATE_REJECT_") :] - try: - await coordinator.async_reject_chore(entry_id) - return - except (ValueError, KeyError): - pass - try: - await coordinator.async_reject_reward(entry_id) - except (ValueError, KeyError): - _LOGGER.info("Mobile action %s — entry not found", action) + await self._review_from_mobile( + action, + action[len("TASKMATE_REJECT_") :], + coordinator.async_reject_chore, + coordinator.async_reject_reward, + ) + + async def _review_from_mobile(self, action: str, entry_id: str, review_chore, review_reward) -> None: + """Send a mobile review to whichever record the id belongs to. + + A chore completion id and a reward claim id look alike, so this used to + try the chore path and fall back to the reward path when it raised. It + never does: approving or rejecting an unknown completion is a no-op, + not an error, so the fallback was unreachable and every reward push + button did nothing at all. The id itself decides. + """ + if any(c.id == entry_id for c in self.storage.get_completions()): + review = review_chore + elif any(c.id == entry_id for c in self.storage.get_reward_claims()): + review = review_reward + else: + _LOGGER.info("Mobile action %s — entry not found", action) + return + try: + await review(entry_id) + except (ValueError, KeyError) as err: + # A stale push: the item was reviewed elsewhere, or the reward has + # since sold out. Nothing to do, but say why in the log. + _LOGGER.info("Mobile action %s could not be applied: %s", action, err) # ------------------------------------------------------------------ # Scheduler — time-gated callbacks diff --git a/custom_components/taskmate/coord_points.py b/custom_components/taskmate/coord_points.py index b0979761..6ea20ae0 100644 --- a/custom_components/taskmate/coord_points.py +++ b/custom_components/taskmate/coord_points.py @@ -681,6 +681,11 @@ class PointsMixin: continue if child_id not in self._compute_active_children(chore, day): continue + # Weekly target (#883): the child picks the days, so "every chore + # due today" can't include it — it's owed by Sunday, not by any one + # evening. + if int(getattr(chore, "weekly_target", 0) or 0) > 0: + continue if not self._is_chore_scheduled_for_date(chore, day): continue out.add(chore.id) @@ -763,14 +768,14 @@ class PointsMixin: weekend_bonus, points, ) - # Log weekend bonus as a separate transaction for activity history - transaction = PointsTransaction( - child_id=child.id, - points=weekend_bonus, - reason=f"Weekend bonus (×{multiplier:.0f})", - created_at=now, - ) - self.storage.add_points_transaction(transaction) + # Deliberately NOT written as its own transaction. The bonus is part + # of what `total_points` pays, and the completion records that in + # points_awarded — so an extra row here would be the same points + # counted twice by anything summing completions and transactions + # together (the graph, weekly and leaderboard cards all do). + # Households upgrading from an earlier version still have these + # rows in their history, so the "Weekend bonus" reason stays in + # _UNDO_DENY_PREFIXES and in the locales. # ── Streak tracking ───────────────────────────────────────────────── streak_reset_occurred = False diff --git a/custom_components/taskmate/coord_rewards.py b/custom_components/taskmate/coord_rewards.py index 4fed772f..309fd22c 100644 --- a/custom_components/taskmate/coord_rewards.py +++ b/custom_components/taskmate/coord_rewards.py @@ -8,7 +8,7 @@ from typing import TYPE_CHECKING from homeassistant.util import dt as dt_util -from .models import PointsTransaction, PoolAllocation, Reward, RewardClaim +from .models import Child, PointsTransaction, PoolAllocation, Reward, RewardClaim from .timewindow import has_window, is_within_window if TYPE_CHECKING: @@ -52,19 +52,37 @@ class RewardsMixin: return self.storage.get_reward(reward_id) def is_pool_mode_claim(self, claim: RewardClaim) -> bool: - """True if the claim is covered by pool allocations (points already deducted). + """True if the claim is funded from the pool rather than a wallet. - Pool-mode claims must NOT be counted against a child's spendable balance, - because their cost was already removed from child.points at allocation time. + Pool-funded claims must NOT be counted against a child's spendable + balance, because their cost was already removed from child.points at + allocation time. A jackpot is always pool-funded (#552), even if the + pool has since dipped below the cost — it is still not the claimer's + wallet that is on the hook for it. """ reward = self.get_reward(claim.reward_id) if not reward: return False if getattr(reward, "is_jackpot", False): - return self.storage.get_total_allocated_for_reward(claim.reward_id) >= reward.cost + return True alloc = self.storage.get_pool_allocation(claim.child_id, claim.reward_id) return bool(alloc and alloc.allocated_points >= reward.cost) + def _require_funded_jackpot(self, reward: Reward, cost: int) -> None: + """Raise unless the shared pool covers a jackpot's cost. + + Jackpots are funded from one shared pool and never from a wallet + (#552). The pool can fall short of a pending claim — the cost is + raised, a contributor is unassigned, a child is deleted — and without + this guard the fallback path charged the full jackpot to whichever + child happened to be holding the claim. + """ + pool_total = self.storage.get_total_allocated_for_reward(reward.id) + if pool_total < cost: + raise ValueError( + f"'{reward.name}' is a shared jackpot and its pool is not full. Need {cost}, have {pool_total} saved up" + ) + async def async_add_reward( self, name: str, @@ -102,12 +120,22 @@ class RewardsMixin: can't appear as e.g. 11/10. If the edit makes the reward unavailable (quantity set to 0, or expires_at moved into the past) any pool allocations on that reward are refunded in full. + + An edit can also take the savings jar itself away: switching a reward + between jackpot and ordinary, turning pool mode off, or dropping a + child from ``assigned_to``. Allocations are locked with no withdraw + operation, so anything left behind by those edits is a child's points + stranded for good — they are refunded, and any pending claim the edit + has invalidated is cancelled with it. """ old = self.get_reward(reward.id) # Jackpots are always pool-mode (#552); keep stored data consistent. if reward.is_jackpot: reward.pool_enabled = True + if old and reward.cost != old.cost: + self._freeze_unrecorded_prices(old) self.storage.update_reward(reward) + cancelled_claim_ids = self._settle_pool_after_edit(old, reward) if old else [] if old and reward.cost < old.cost: self._refund_pool_excess(reward, "Pool refund (reward cost reduced)") became_unavailable = ( @@ -121,6 +149,63 @@ class RewardsMixin: await self.storage.async_save() await self.async_refresh() + # Dismiss the approval pushes for claims this edit just cancelled. + if cancelled_claim_ids and getattr(self, "notifications", None): + for claim_id in cancelled_claim_ids: + await self.notifications.clear_approval("pending_reward_claim", claim_id) + + def _settle_pool_after_edit(self, old: Reward, reward: Reward) -> list[str]: + """Refund savings and cancel claims an edit has just invalidated. + + Returns the ids of the cancelled claims so the caller can clear their + approval notifications once the change is saved. + """ + # Funding changed: the shared jar became per-child jars, or the other + # way round, or pool mode was switched off altogether. Whatever is in + # the pool was saved towards something that no longer exists. + funding_changed = reward.is_jackpot != old.is_jackpot or (old.pool_enabled and not reward.pool_enabled) + if funding_changed: + self._refund_all_pool_allocations(reward, "Pool refund (reward funding changed)") + else: + # Narrowed assignment: a child who can no longer be given this + # reward can no longer redeem what they saved towards it either. + for alloc in list(self.storage.get_pool_allocations()): + if alloc.reward_id == reward.id and not self._reward_is_for_child(reward, alloc.child_id): + self._apply_pool_refund( + alloc, alloc.allocated_points, reward, "Pool refund (reward assignment changed)" + ) + + cancelled: list[str] = [] + for claim in self.storage.get_reward_claims(): + if claim.reward_id != reward.id or claim.approved: + continue + # A pool-funded claim whose pool has just been refunded would fall + # through to the claimer's wallet on approval, and an unassigned + # child's claim should not be approvable at all. + if funding_changed or not self._reward_is_for_child(reward, claim.child_id): + self.storage.remove_reward_claim(claim.id) + cancelled.append(claim.id) + if cancelled: + _LOGGER.info( + "Cancelled %d pending claim(s) for '%s' — the edit changed how it is funded or who it is for", + len(cancelled), + reward.name, + ) + return cancelled + + def _freeze_unrecorded_prices(self, old: Reward) -> None: + """Stamp the current price onto approved claims that never recorded one. + + Claims approved before the price was stored alongside them have no + record of what was paid, so history reads the reward's live cost. This + is the last moment that cost is still the one those purchases were + approved at, so it is written down before the edit lands. + """ + for claim in self.storage.get_reward_claims(): + if claim.reward_id == old.id and claim.approved and claim.approved_cost is None: + claim.approved_cost = old.cost + self.storage.update_reward_claim(claim) + async def async_remove_reward(self, reward_id: str) -> None: """Remove a reward and clean up any pending claims and pool allocations referencing it.""" self.storage.remove_reward_claims_for_reward(reward_id) @@ -253,14 +338,34 @@ class RewardsMixin: ) ) - async def async_claim_reward(self, reward_id: str, child_id: str) -> RewardClaim: - """Child claims a reward — creates a pending claim awaiting parent approval. + def reward_claim_funding(self, reward: Reward, child_id: str) -> int: + """What is available to pay for this reward, from whichever purse applies. - Two modes are supported: - * Wallet mode (default): requires child.points (minus committed) to cover cost - * Pool mode: if pool allocations exist for this (child, reward) and they fill the - reward's cost, the claim is a "redeem" — no wallet check needed. For jackpot - rewards the pool total across all contributing children must reach the cost. + A jackpot is paid from the shared pool, an ordinary reward from either + a filled savings jar or the child's uncommitted balance — so "can they + afford it" cannot be answered from the wallet alone. + """ + if reward.is_jackpot: + return self.storage.get_total_allocated_for_reward(reward.id) + child = self.get_child(child_id) + if not child: + return 0 + committed = 0 + for claim in self.storage.get_pending_reward_claims(): + if claim.child_id == child_id and not self.is_pool_mode_claim(claim): + pending_reward = self.get_reward(claim.reward_id) + if pending_reward: + committed += pending_reward.cost + wallet = child.points - committed + allocation = self.storage.get_pool_allocation(child_id, reward.id) + return max(wallet, allocation.allocated_points) if allocation else wallet + + def validate_reward_claim(self, reward_id: str, child_id: str) -> tuple[Reward, Child]: + """Check a claim is allowed, raising ValueError with the reason if not. + + Every rule that decides whether a child may claim right now lives here, + so the claim itself and anything that offers it — the per-reward button + entity, for one — cannot drift apart. Mutates nothing. """ reward = self.get_reward(reward_id) if not reward: @@ -306,9 +411,10 @@ class RewardsMixin: # or for jackpots the summed pool across all children reaches cost. pool_filled = False if reward.is_jackpot: - pool_total = self.storage.get_total_allocated_for_reward(reward_id) - if pool_total >= effective_cost: - pool_filled = True + # A short pool is the end of it: a jackpot is never redeemed out of + # one child's wallet, however many points they happen to have. + self._require_funded_jackpot(reward, effective_cost) + pool_filled = True else: allocation = self.storage.get_pool_allocation(child_id, reward_id) if allocation and allocation.allocated_points >= effective_cost: @@ -330,6 +436,19 @@ class RewardsMixin: if available_points < effective_cost: raise ValueError(f"Not enough points. Need {effective_cost}, have {available_points} available") + return reward, child + + async def async_claim_reward(self, reward_id: str, child_id: str) -> RewardClaim: + """Child claims a reward — creates a pending claim awaiting parent approval. + + Two modes are supported: + * Wallet mode (default): requires child.points (minus committed) to cover cost + * Pool mode: if pool allocations exist for this (child, reward) and they fill the + reward's cost, the claim is a "redeem" — no wallet check needed. For jackpot + rewards the pool total across all contributing children must reach the cost. + """ + reward, child = self.validate_reward_claim(reward_id, child_id) + claim = RewardClaim( reward_id=reward_id, child_id=child_id, @@ -378,7 +497,8 @@ class RewardsMixin: continue when = claim.approved_at or claim.claimed_at if when and dt_util.as_local(when).date() >= start: - total += reward_cost.get(claim.reward_id, 0) + paid = claim.approved_cost + total += paid if paid is not None else reward_cost.get(claim.reward_id, 0) return total def _enforce_spend_cap(self, child_id: str, cost: int) -> None: @@ -436,9 +556,12 @@ class RewardsMixin: pool_alloc = self.storage.get_pool_allocation(claim.child_id, claim.reward_id) is_pool_mode = False if reward.is_jackpot: - pool_total = self.storage.get_total_allocated_for_reward(claim.reward_id) - if pool_total >= effective_cost: - is_pool_mode = True + # The pool can have drained since the claim was made, and + # the wallet path below is not an acceptable fallback for a + # shared reward — it would charge the whole jackpot to the + # one child holding the claim. + self._require_funded_jackpot(reward, effective_cost) + is_pool_mode = True elif pool_alloc and pool_alloc.allocated_points >= effective_cost: is_pool_mode = True @@ -475,13 +598,34 @@ class RewardsMixin: claim.approved = True claim.approved_at = dt_util.now() + claim.approved_cost = effective_cost self.storage.update_reward_claim(claim) + + # One pool, one redemption. Claims stored before a jackpot was + # limited to a single pending claim (#873) can still be sitting + # in the queue; the pool that would have paid for them has just + # been spent, so approving one of those later would fall + # through to its claimer's wallet. Retire them with the pool. + superseded = [] + if reward.is_jackpot: + superseded = [c for c in claims if c.id != claim.id and c.reward_id == reward.id and not c.approved] + for other in superseded: + self.storage.remove_reward_claim(other.id) + if superseded: + _LOGGER.info( + "Retired %d duplicate pending claim(s) for jackpot '%s' on redemption", + len(superseded), + reward.name, + ) + await self.storage.async_save() await self.async_refresh() # Dismiss the mobile approval push now this claim is reviewed. if getattr(self, "notifications", None): await self.notifications.clear_approval("pending_reward_claim", claim_id) + for other in superseded: + await self.notifications.clear_approval("pending_reward_claim", other.id) # Timed unlock (#678): allowlisted entity on, auto-off later. await self.async_start_unlock(reward, child) @@ -506,8 +650,20 @@ class RewardsMixin: _LOGGER.warning("Reward claim %s not found for approval", claim_id) async def async_reject_reward(self, claim_id: str) -> None: - """Reject a reward claim — no refund needed as points were never deducted.""" + """Reject a *pending* reward claim — no refund needed as points were never deducted. + + That "no refund needed" only holds while the claim is pending. Two + parents can review the same claim at once — one in the panel, one from + a mobile approval push — and the second one is acting on a list that no + longer matches storage. Deleting an approved claim there would erase + the purchase from history while its points, its stock and any timed + unlock stayed spent, so the stale review is refused instead. + """ claim = next((c for c in self.storage.get_reward_claims() if c.id == claim_id), None) + if claim is not None and claim.approved: + reward = self.get_reward(claim.reward_id) + name = reward.name if reward else "This reward" + raise ValueError(f"'{name}' has already been approved and can no longer be rejected") self.storage.remove_reward_claim(claim_id) await self.storage.async_save() await self.async_refresh() diff --git a/custom_components/taskmate/coord_timed.py b/custom_components/taskmate/coord_timed.py index 8b2c3703..fd41f3ba 100644 --- a/custom_components/taskmate/coord_timed.py +++ b/custom_components/taskmate/coord_timed.py @@ -128,6 +128,7 @@ class TimedMixin: completed_at=now, approved=not chore.requires_approval, points_awarded=pts if not chore.requires_approval else 0, + submitted_points=pts, timed_duration_seconds=total_seconds, ) @@ -251,6 +252,7 @@ class TimedMixin: completed_at=dt_util.now(), approved=not chore.requires_approval, points_awarded=pts if not chore.requires_approval else 0, + submitted_points=pts, timed_duration_seconds=total_seconds, ) if not chore.requires_approval: diff --git a/custom_components/taskmate/manifest.json b/custom_components/taskmate/manifest.json index 9f962979..08dfa879 100644 --- a/custom_components/taskmate/manifest.json +++ b/custom_components/taskmate/manifest.json @@ -17,5 +17,5 @@ "iot_class": "calculated", "issue_tracker": "https://github.com/tempus2016/taskmate/issues", "requirements": [], - "version": "5.7.0" + "version": "5.8.0" } diff --git a/custom_components/taskmate/models.py b/custom_components/taskmate/models.py index 76bb79e3..b2a73b9e 100644 --- a/custom_components/taskmate/models.py +++ b/custom_components/taskmate/models.py @@ -54,6 +54,24 @@ def parse_datetime(value: str | datetime | None) -> datetime | None: return None +def parse_optional_points(value: Any) -> int | None: + """Parse a stored points figure, or None for "not recorded". + + Used for fields that snapshot a value at the moment it applied. ``None`` + marks a record written before the field existed, so callers can fall back + to recalculating; anything unusable is treated the same way rather than + being trusted as a number. + """ + if value is None or isinstance(value, bool): + return None + try: + points = int(value) + except (ValueError, TypeError, OverflowError): + _LOGGER.warning("Ignoring unusable stored points value %r", value) + return None + return None if points < 0 else points + + def format_datetime(dt: datetime | None) -> str | None: """Format a datetime as ISO string with timezone info. @@ -260,6 +278,12 @@ class Chore: time_category: str = "anytime" # morning, afternoon, evening, night, anytime claim_allowance_minutes: int = 0 # Grace minutes past period end during which the chore stays claimable; 0 = no grace. Night chores still cap at midnight. daily_limit: int = 1 + # Weekly target (#883): "do this N times this week, on whichever days you + # like" — instrument practice, reading, exercise. 0 = off. Monday-anchored + # to match Challenges. It caps the week the way daily_limit caps the day, + # and counts pending completions too, so a slow approval never hands the + # child a spare go. + weekly_target: int = 0 completion_sound: str = "coin" # Sound to play on completion # Optional picture for the chore. Text-free pre-reader mode (#683) needs # one per chore; everything else falls back to the time-of-day icon. @@ -375,6 +399,7 @@ class Chore: time_category=data.get("time_category", "anytime"), claim_allowance_minutes=max(0, int(data.get("claim_allowance_minutes", 0) or 0)), daily_limit=data.get("daily_limit", 1), + weekly_target=int(data.get("weekly_target", 0) or 0), completion_sound=data.get("completion_sound", "coin"), icon=str(data.get("icon", "") or ""), image_url=str(data.get("image_url", "") or ""), @@ -442,6 +467,7 @@ class Chore: "time_category": self.time_category, "claim_allowance_minutes": self.claim_allowance_minutes, "daily_limit": self.daily_limit, + "weekly_target": self.weekly_target, "completion_sound": self.completion_sound, "icon": self.icon, "image_url": self.image_url, @@ -721,6 +747,10 @@ class ChoreCompletion: note: str = "" # child's own description of the work (open-ended chores, #832) suggested_points: int = 0 # what the child reckons it was worth (#832) id: str = field(default_factory=generate_id) + # The award this submission was worth when it was made, before the streak + # and weekend multipliers that _award_points adds on top. None on records + # written before the field existed. + submitted_points: int | None = None @classmethod def from_dict(cls, data: dict[str, Any]) -> ChoreCompletion: @@ -741,6 +771,7 @@ class ChoreCompletion: note=data.get("note", ""), suggested_points=int(data.get("suggested_points", 0) or 0), id=data.get("id") or generate_id(), + submitted_points=parse_optional_points(data.get("submitted_points")), ) def to_dict(self) -> dict[str, Any]: @@ -758,6 +789,7 @@ class ChoreCompletion: "note": self.note, "suggested_points": self.suggested_points, "id": self.id, + "submitted_points": self.submitted_points, } @@ -820,6 +852,9 @@ class RewardClaim: approved: bool = False approved_at: datetime | None = None id: str = field(default_factory=generate_id) + # What this purchase actually cost, recorded when it was approved. None on + # a pending claim, and on claims approved before the field existed. + approved_cost: int | None = None @classmethod def from_dict(cls, data: dict[str, Any]) -> RewardClaim: @@ -834,6 +869,7 @@ class RewardClaim: approved=data.get("approved", False), approved_at=approved_at, id=data.get("id") or generate_id(), + approved_cost=parse_optional_points(data.get("approved_cost")), ) def to_dict(self) -> dict[str, Any]: @@ -845,6 +881,7 @@ class RewardClaim: "approved": self.approved, "approved_at": format_datetime(self.approved_at), "id": self.id, + "approved_cost": self.approved_cost, } diff --git a/custom_components/taskmate/select.py b/custom_components/taskmate/select.py index 0b6ee27f..12d92c63 100644 --- a/custom_components/taskmate/select.py +++ b/custom_components/taskmate/select.py @@ -21,7 +21,7 @@ _SELECTS = [ ( "card_design", "card_design", - ["classic", "playroom", "console", "cleanpro", "accessible"], + ["classic", "playroom", "console", "cleanpro", "accessible", "graphite"], "classic", "mdi:palette", ), diff --git a/custom_components/taskmate/sensor.py b/custom_components/taskmate/sensor.py index 16dbce7d..53228f52 100644 --- a/custom_components/taskmate/sensor.py +++ b/custom_components/taskmate/sensor.py @@ -146,6 +146,14 @@ def _build_children_summary(coordinator: TaskMateCoordinator, common: dict) -> l for c in children: committed_amount = committed.get(c.id, 0) lvl = coordinator.level_info(c) + # Weekly targets (#883): {chore_id: done so far this week} for the + # chores that have one, so a card can render "2/3 this week" without + # its own pass over completions. Empty — and so absent — for most. + weekly_progress = { + ch.id: coordinator.weekly_completion_count(ch.id, c.id) + for ch in common["chores"] + if int(getattr(ch, "weekly_target", 0) or 0) > 0 + } summary.append( { "level": lvl["level"], @@ -195,6 +203,7 @@ def _build_children_summary(coordinator: TaskMateCoordinator, common: dict) -> l "quests": coordinator.quest_progress_for_child(c.id), "avatar_options": coordinator.avatar_options_for_child(c), "challenges": coordinator.challenge_progress_for_child(c.id), + **({"weekly_chore_progress": weekly_progress} if weekly_progress else {}), } ) return summary @@ -243,6 +252,11 @@ def _build_chores_list(coordinator: TaskMateCoordinator, common: dict) -> list[d daily_limit = getattr(c, "daily_limit", 1) if daily_limit != 1: record["daily_limit"] = daily_limit + # Weekly target (#883) — off for almost every chore, so it only goes + # into the record when a family actually uses one. + weekly_target = int(getattr(c, "weekly_target", 0) or 0) + if weekly_target: + record["weekly_target"] = weekly_target claim_allowance_minutes = getattr(c, "claim_allowance_minutes", 0) or 0 if claim_allowance_minutes: record["claim_allowance_minutes"] = claim_allowance_minutes @@ -355,6 +369,27 @@ def _build_chore_availability(coordinator: TaskMateCoordinator, common: dict) -> return availability +def _completion_award(completion, recalculated: int) -> int: + """What a completion is worth, recorded rather than re-derived. + + Approved: what the child was actually paid, weekend multiplier included. + Re-deriving it from the chore reported the chore's *current* points, so + re-pricing a chore rewrote every past completion of it. + + Pending: what the child was promised at submission, including a speed + bonus or roulette multiplier that may no longer apply — the same figure + approval will pay. + + Neither recorded (a completion from before those fields existed): fall + back to the caller's calculation. + """ + if completion.approved: + return completion.points_awarded + if completion.submitted_points is not None: + return completion.submitted_points + return recalculated + + def _build_todays_completions(common: dict) -> list[dict]: """Build today's completions (both approved and pending).""" now = dt_util.now() @@ -391,7 +426,7 @@ def _build_todays_completions(common: dict) -> list[dict]: if comp.child_id == "__parent__" else (child_lookup[comp.child_id].name if comp.child_id in child_lookup else ""), "chore_name": display_name, - "points": display_points, + "points": _completion_award(comp, display_points), "approved": comp.approved, "completed_at": comp.completed_at.isoformat() if hasattr(comp.completed_at, "isoformat") @@ -573,7 +608,7 @@ def _build_recent_completions(common: dict, limit: int = 35) -> list[dict]: if comp.child_id == "__parent__" else (child_lookup[comp.child_id].name if comp.child_id in child_lookup else ""), "chore_name": matched_chore.name if matched_chore else "", - "points": display_points, + "points": _completion_award(comp, display_points), "approved": comp.approved, "completed_at": comp.completed_at.isoformat() if hasattr(comp.completed_at, "isoformat") @@ -657,7 +692,9 @@ def _build_recent_transactions(common: dict, limit: int = 20) -> list[dict]: "reward_id": rc.reward_id, "reward_name": reward.name, "reward_icon": reward.icon or "mdi:gift", - "points": -reward.cost, + # An approved purchase is worth what it cost that day, not what + # the reward has been re-priced to since. + "points": -(rc.approved_cost if rc.approved and rc.approved_cost is not None else reward.cost), "approved": rc.approved, "created_at": timestamp.isoformat() if hasattr(timestamp, "isoformat") else str(timestamp), } @@ -1378,7 +1415,7 @@ class PendingApprovalsSensor(TaskMateBaseSensor): "child_id": child.id, "chore_name": chore_name, "chore_id": chore.id, - "points": pts, + "points": _completion_award(comp, pts), "time_category": chore.time_category, "completed_at": comp.completed_at.isoformat(), "bonus_subtask_id": bonus_subtask_id, diff --git a/custom_components/taskmate/storage.py b/custom_components/taskmate/storage.py index 5f6bb08c..17b07d82 100644 --- a/custom_components/taskmate/storage.py +++ b/custom_components/taskmate/storage.py @@ -1277,7 +1277,7 @@ class TaskMateStorage: from .photos import is_taskmate_photo_url _STREAK_MODES = ("reset", "pause") - _CARD_DESIGNS = ("classic", "playroom", "console", "cleanpro", "accessible") + _CARD_DESIGNS = ("classic", "playroom", "console", "cleanpro", "accessible", "graphite") # Per-record numeric fields. The WebSocket schemas coerce these on every # normal write; import bypasses the schemas entirely, so a crafted # backup could leave a string (or inf/NaN) where the rest of the code — diff --git a/custom_components/taskmate/websocket.py b/custom_components/taskmate/websocket.py index 639c2bc1..a97d5369 100644 --- a/custom_components/taskmate/websocket.py +++ b/custom_components/taskmate/websocket.py @@ -575,6 +575,7 @@ _CHORE_EDITABLE_FIELDS = { "time_category", "claim_allowance_minutes", "daily_limit", + "weekly_target", "completion_sound", "icon", "image_url", @@ -629,6 +630,9 @@ def _chore_payload_schema(*, require_name: bool): vol.Optional("time_category"): str, vol.Optional("claim_allowance_minutes"): vol.All(int, vol.Range(min=0)), vol.Optional("daily_limit"): vol.All(int, vol.Range(min=1)), + # Weekly target (#883): 0 = no quota, which is the case for almost + # every chore, so it has to be a valid value rather than a floor of 1. + vol.Optional("weekly_target"): vol.All(int, vol.Range(min=0)), vol.Optional("completion_sound"): _completion_sound, vol.Optional("icon"): str, vol.Optional("image_url"): _image_url_or_blank, @@ -1640,7 +1644,7 @@ async def _ws_remove_custom_sound(hass, connection, msg, coordinator): # Top-level fields stored at storage._data root _TOP_LEVEL_SETTINGS = {"points_name", "points_icon"} # Allowed values for the global default card-design style (per-card design styles). -_ALLOWED_CARD_DESIGNS = {"classic", "playroom", "console", "cleanpro", "accessible"} +_ALLOWED_CARD_DESIGNS = {"classic", "playroom", "console", "cleanpro", "accessible", "graphite"} # Settings stored under storage._data["settings"][key] _SUBKEY_SETTINGS = { "require_linked_child", diff --git a/custom_components/taskmate/www/locales/de.json b/custom_components/taskmate/www/locales/de.json index 6fcac97f..e1a99fcb 100644 --- a/custom_components/taskmate/www/locales/de.json +++ b/custom_components/taskmate/www/locales/de.json @@ -6,6 +6,7 @@ "common.design.playroom": "Playroom", "common.design.console": "Console", "common.design.cleanpro": "Clean Pro", + "common.design.graphite": "Graphit", "panel.settings_card_design_label": "Standard-Kartendesign", "panel.settings_card_design_hint": "Der Stil neuer Karten, sofern nicht pro Karte überschrieben.", "activity.a_chore": "eine lästige Pflicht", @@ -55,9 +56,11 @@ "activity.reason_bonus": "Bonus: {name}", "activity.reason_penalty": "Strafe: {name}", "activity.reason_perfect_week": "Perfekter Wochenbonus!", + "activity.reason_pool_refund_assignment_changed": "Poolrückerstattung (Zuweisung der Prämie geändert): {name}", "activity.reason_pool_refund_cost_reduced": "Pool-Rückerstattung (Prämienkosten reduziert): {name}", "activity.reason_pool_refund_deleted": "Poolrückerstattung (Prämie gelöscht): {name}", "activity.reason_pool_refund_expired": "Poolrückerstattung (Prämie abgelaufen): {name}", + "activity.reason_pool_refund_funding_changed": "Poolrückerstattung (Finanzierung der Prämie geändert): {name}", "activity.reason_pool_refund_sold_out": "Poolrückerstattung (Prämie ausverkauft): {name}", "activity.reason_streak_milestone": "Serie-Meilensteinbonus ({days} Tage Serie!)", "activity.reason_weekend_bonus": "Wochenendbonus (×{multiplier})", @@ -158,6 +161,7 @@ "badges.entity_not_found": "{entity} nicht gefunden", "badges.label": "Abzeichen", "badges.next_up": "Als Nächstes", + "badges.one_more": "Nur noch eins – dann gehört es dir!", "badges.title_with_name": "Abzeichen von {name}", "bonuses.add_bonus": "Bonus hinzufügen", "bonuses.applying_to": "Beantragung bei {childName} – aktuelles Guthaben: {points} {pointsName}", @@ -229,6 +233,8 @@ "child.extra_submit": "Senden", "child.extra_needs_desc": "Schreib zuerst, was du gemacht hast.", "child.open_ended_tag": "Beschreiben", + "child.weekly_target_done": "Für diese Woche erledigt", + "child.weekly_target_progress": "{done}/{target} diese Woche", "child.photo_take": "Foto aufnehmen", "child.photo_hint": "Zeig deine erledigte Aufgabe", "child.photo_retake": "Neu aufnehmen", @@ -616,6 +622,9 @@ "panel.chore_daily_cap_label": "Tageslimit (Minuten, 0 = unbegrenzt)", "panel.chore_daily_limit_label": "Tageslimit", "panel.chore_days_label": "Wochentage (leer = jeden Tag)", + "panel.chore_weekly_target_pill": "{count}×/Woche", + "panel.chore_weekly_target_hint": "Wie oft pro Woche die Aufgabe erledigt werden muss, an beliebigen der gewählten Tage. Ist die Anzahl erreicht, wird sie nicht mehr angezeigt; montags beginnt die Zählung neu.", + "panel.chore_weekly_target_label": "Wochenziel (0 = aus)", "panel.chore_description_label": "Beschreibung (optional)", "panel.chore_enabled_label": "Aktiviert", "panel.chore_first_occurrence_label": "Erstes Vorkommen", diff --git a/custom_components/taskmate/www/locales/en-GB.json b/custom_components/taskmate/www/locales/en-GB.json index cfe5d675..679fd8dd 100644 --- a/custom_components/taskmate/www/locales/en-GB.json +++ b/custom_components/taskmate/www/locales/en-GB.json @@ -6,6 +6,7 @@ "common.design.playroom": "Playroom", "common.design.console": "Console", "common.design.cleanpro": "Clean Pro", + "common.design.graphite": "Graphite", "panel.settings_card_design_label": "Default card design", "panel.settings_card_design_hint": "The style new cards use unless overridden per card.", "activity.a_chore": "a chore", @@ -55,9 +56,11 @@ "activity.reason_bonus": "Bonus: {name}", "activity.reason_penalty": "Penalty: {name}", "activity.reason_perfect_week": "Perfect week bonus!", + "activity.reason_pool_refund_assignment_changed": "Pool refund (reward assignment changed): {name}", "activity.reason_pool_refund_cost_reduced": "Pool refund (reward cost reduced): {name}", "activity.reason_pool_refund_deleted": "Pool refund (reward deleted): {name}", "activity.reason_pool_refund_expired": "Pool refund (reward expired): {name}", + "activity.reason_pool_refund_funding_changed": "Pool refund (reward funding changed): {name}", "activity.reason_pool_refund_sold_out": "Pool refund (reward sold out): {name}", "activity.reason_streak_milestone": "Streak milestone bonus ({days} day streak!)", "activity.reason_weekend_bonus": "Weekend bonus (×{multiplier})", @@ -159,6 +162,7 @@ "badges.entity_not_found": "{entity} not found", "badges.label": "Badges", "badges.next_up": "Next up", + "badges.one_more": "One more and it's yours!", "badges.title_with_name": "{name}'s Badges", "bonuses.add_bonus": "Add Bonus", "bonuses.applying_to": "Applying to {childName} — current balance: {points} {pointsName}", @@ -231,6 +235,8 @@ "child.extra_submit": "Send", "child.extra_needs_desc": "Write what you did first.", "child.open_ended_tag": "Describe it", + "child.weekly_target_done": "Done for this week", + "child.weekly_target_progress": "{done}/{target} this week", "child.photo_take": "Take a photo", "child.photo_hint": "Show your finished chore", "child.photo_retake": "Retake", @@ -654,6 +660,9 @@ "panel.chore_daily_cap_label": "Daily cap (minutes, 0 = unlimited)", "panel.chore_daily_limit_label": "Daily limit", "panel.chore_days_label": "Days of week (leave empty = every day)", + "panel.chore_weekly_target_pill": "{count}×/week", + "panel.chore_weekly_target_hint": "How many times a week this has to be done, on any of the chosen days. It stops being offered once the count is reached, and resets on Monday.", + "panel.chore_weekly_target_label": "Weekly target (0 = off)", "panel.chore_description_label": "Description (optional)", "panel.chore_enabled_label": "Enabled", "panel.chore_first_occurrence_label": "First occurrence", diff --git a/custom_components/taskmate/www/locales/en.json b/custom_components/taskmate/www/locales/en.json index cfe5d675..679fd8dd 100644 --- a/custom_components/taskmate/www/locales/en.json +++ b/custom_components/taskmate/www/locales/en.json @@ -6,6 +6,7 @@ "common.design.playroom": "Playroom", "common.design.console": "Console", "common.design.cleanpro": "Clean Pro", + "common.design.graphite": "Graphite", "panel.settings_card_design_label": "Default card design", "panel.settings_card_design_hint": "The style new cards use unless overridden per card.", "activity.a_chore": "a chore", @@ -55,9 +56,11 @@ "activity.reason_bonus": "Bonus: {name}", "activity.reason_penalty": "Penalty: {name}", "activity.reason_perfect_week": "Perfect week bonus!", + "activity.reason_pool_refund_assignment_changed": "Pool refund (reward assignment changed): {name}", "activity.reason_pool_refund_cost_reduced": "Pool refund (reward cost reduced): {name}", "activity.reason_pool_refund_deleted": "Pool refund (reward deleted): {name}", "activity.reason_pool_refund_expired": "Pool refund (reward expired): {name}", + "activity.reason_pool_refund_funding_changed": "Pool refund (reward funding changed): {name}", "activity.reason_pool_refund_sold_out": "Pool refund (reward sold out): {name}", "activity.reason_streak_milestone": "Streak milestone bonus ({days} day streak!)", "activity.reason_weekend_bonus": "Weekend bonus (×{multiplier})", @@ -159,6 +162,7 @@ "badges.entity_not_found": "{entity} not found", "badges.label": "Badges", "badges.next_up": "Next up", + "badges.one_more": "One more and it's yours!", "badges.title_with_name": "{name}'s Badges", "bonuses.add_bonus": "Add Bonus", "bonuses.applying_to": "Applying to {childName} — current balance: {points} {pointsName}", @@ -231,6 +235,8 @@ "child.extra_submit": "Send", "child.extra_needs_desc": "Write what you did first.", "child.open_ended_tag": "Describe it", + "child.weekly_target_done": "Done for this week", + "child.weekly_target_progress": "{done}/{target} this week", "child.photo_take": "Take a photo", "child.photo_hint": "Show your finished chore", "child.photo_retake": "Retake", @@ -654,6 +660,9 @@ "panel.chore_daily_cap_label": "Daily cap (minutes, 0 = unlimited)", "panel.chore_daily_limit_label": "Daily limit", "panel.chore_days_label": "Days of week (leave empty = every day)", + "panel.chore_weekly_target_pill": "{count}×/week", + "panel.chore_weekly_target_hint": "How many times a week this has to be done, on any of the chosen days. It stops being offered once the count is reached, and resets on Monday.", + "panel.chore_weekly_target_label": "Weekly target (0 = off)", "panel.chore_description_label": "Description (optional)", "panel.chore_enabled_label": "Enabled", "panel.chore_first_occurrence_label": "First occurrence", diff --git a/custom_components/taskmate/www/locales/fr.json b/custom_components/taskmate/www/locales/fr.json index e4ac50cd..73406221 100644 --- a/custom_components/taskmate/www/locales/fr.json +++ b/custom_components/taskmate/www/locales/fr.json @@ -6,6 +6,7 @@ "common.design.playroom": "Playroom", "common.design.console": "Console", "common.design.cleanpro": "Clean Pro", + "common.design.graphite": "Graphite", "panel.settings_card_design_label": "Design de carte par défaut", "panel.settings_card_design_hint": "Le style des nouvelles cartes, sauf remplacement par carte.", "activity.a_chore": "une tâche", @@ -55,9 +56,11 @@ "activity.reason_bonus": "Bonus : {name}", "activity.reason_penalty": "Pénalité : {name}", "activity.reason_perfect_week": "Bonus de semaine parfaite !", + "activity.reason_pool_refund_assignment_changed": "Remboursement de cagnotte (attribution de la récompense modifiée) : {name}", "activity.reason_pool_refund_cost_reduced": "Remboursement de cagnotte (coût réduit) : {name}", "activity.reason_pool_refund_deleted": "Remboursement de cagnotte (récompense supprimée) : {name}", "activity.reason_pool_refund_expired": "Remboursement de cagnotte (récompense expirée) : {name}", + "activity.reason_pool_refund_funding_changed": "Remboursement de cagnotte (financement de la récompense modifié) : {name}", "activity.reason_pool_refund_sold_out": "Remboursement de cagnotte (récompense épuisée) : {name}", "activity.reason_streak_milestone": "Bonus de palier de série ({days} jours de suite !)", "activity.reason_weekend_bonus": "Bonus de week-end (×{multiplier})", @@ -158,6 +161,7 @@ "badges.entity_not_found": "{entity} introuvable", "badges.label": "Badges", "badges.next_up": "Prochain", + "badges.one_more": "Encore un et il est à toi !", "badges.title_with_name": "Badges de {name}", "bonuses.add_bonus": "Ajouter un bonus", "bonuses.applying_to": "Application à {childName} — solde actuel : {points} {pointsName}", @@ -229,6 +233,8 @@ "child.extra_submit": "Envoyer", "child.extra_needs_desc": "Écris d'abord ce que tu as fait.", "child.open_ended_tag": "À décrire", + "child.weekly_target_done": "Terminé pour cette semaine", + "child.weekly_target_progress": "{done}/{target} cette semaine", "child.photo_take": "Prendre une photo", "child.photo_hint": "Montre ta tâche terminée", "child.photo_retake": "Reprendre", @@ -616,6 +622,9 @@ "panel.chore_daily_cap_label": "Plafond journalier (minutes, 0 = illimité)", "panel.chore_daily_limit_label": "Limite quotidienne", "panel.chore_days_label": "Jours de la semaine (vide = tous les jours)", + "panel.chore_weekly_target_pill": "{count}×/semaine", + "panel.chore_weekly_target_hint": "Combien de fois par semaine la tâche doit être faite, n'importe lesquels des jours choisis. Elle n'est plus proposée une fois le compte atteint et repart le lundi.", + "panel.chore_weekly_target_label": "Objectif hebdomadaire (0 = désactivé)", "panel.chore_description_label": "Description (optionnel)", "panel.chore_enabled_label": "Activé", "panel.chore_first_occurrence_label": "Première occurrence", diff --git a/custom_components/taskmate/www/locales/nb.json b/custom_components/taskmate/www/locales/nb.json index 280d0092..2ac04cdb 100644 --- a/custom_components/taskmate/www/locales/nb.json +++ b/custom_components/taskmate/www/locales/nb.json @@ -6,6 +6,7 @@ "common.design.playroom": "Playroom", "common.design.console": "Console", "common.design.cleanpro": "Clean Pro", + "common.design.graphite": "Grafitt", "panel.settings_card_design_label": "Standard kortdesign", "panel.settings_card_design_hint": "Stilen nye kort bruker med mindre den overstyres per kort.", "activity.a_chore": "en oppgave", @@ -55,9 +56,11 @@ "activity.reason_bonus": "Bonus: {name}", "activity.reason_penalty": "Straff: {name}", "activity.reason_perfect_week": "Perfekt uke-bonus!", + "activity.reason_pool_refund_assignment_changed": "Refusjon fra sparegris (belønningens tildeling endret): {name}", "activity.reason_pool_refund_cost_reduced": "Refusjon fra sparegris (kostnad redusert): {name}", "activity.reason_pool_refund_deleted": "Refusjon fra sparegris (belønning slettet): {name}", "activity.reason_pool_refund_expired": "Refusjon fra sparegris (belønning utløpt): {name}", + "activity.reason_pool_refund_funding_changed": "Refusjon fra sparegris (belønningens finansiering endret): {name}", "activity.reason_pool_refund_sold_out": "Refusjon fra sparegris (belønning utsolgt): {name}", "activity.reason_streak_milestone": "Milepælsbonus ({days} dagers strek!)", "activity.reason_weekend_bonus": "Helgebonus (×{multiplier})", @@ -158,6 +161,7 @@ "badges.entity_not_found": "{entity} ikke funnet", "badges.label": "Merker", "badges.next_up": "Neste", + "badges.one_more": "Bare én til, så er det ditt!", "badges.title_with_name": "{name}s merker", "bonuses.add_bonus": "Legg til bonus", "bonuses.applying_to": "Brukes på {childName} — nåværende saldo: {points} {pointsName}", @@ -229,6 +233,8 @@ "child.extra_submit": "Send", "child.extra_needs_desc": "Skriv først hva du gjorde.", "child.open_ended_tag": "Beskriv", + "child.weekly_target_done": "Ferdig for denne uka", + "child.weekly_target_progress": "{done}/{target} denne uka", "child.photo_take": "Ta et bilde", "child.photo_hint": "Vis den ferdige oppgaven", "child.photo_retake": "Ta på nytt", @@ -616,6 +622,9 @@ "panel.chore_daily_cap_label": "Daglig tak (minutter, 0 = ubegrenset)", "panel.chore_daily_limit_label": "Daglig grense", "panel.chore_days_label": "Ukedager (la stå tomt = hver dag)", + "panel.chore_weekly_target_pill": "{count}×/uke", + "panel.chore_weekly_target_hint": "Hvor mange ganger i uka oppgaven må gjøres, på hvilke som helst av de valgte dagene. Den vises ikke lenger når antallet er nådd, og nullstilles på mandag.", + "panel.chore_weekly_target_label": "Ukesmål (0 = av)", "panel.chore_description_label": "Beskrivelse (valgfritt)", "panel.chore_enabled_label": "Aktivert", "panel.chore_first_occurrence_label": "Første forekomst", diff --git a/custom_components/taskmate/www/locales/nn.json b/custom_components/taskmate/www/locales/nn.json index 2f0845ad..d6281708 100644 --- a/custom_components/taskmate/www/locales/nn.json +++ b/custom_components/taskmate/www/locales/nn.json @@ -6,6 +6,7 @@ "common.design.playroom": "Playroom", "common.design.console": "Console", "common.design.cleanpro": "Clean Pro", + "common.design.graphite": "Grafitt", "panel.settings_card_design_label": "Standard kortdesign", "panel.settings_card_design_hint": "Stilen nye kort brukar med mindre den blir overstyrt per kort.", "activity.a_chore": "ei oppgåve", @@ -55,9 +56,11 @@ "activity.reason_bonus": "Bonus: {name}", "activity.reason_penalty": "Straff: {name}", "activity.reason_perfect_week": "Perfekt veke-bonus!", + "activity.reason_pool_refund_assignment_changed": "Refusjon frå sparegris (løninga si tildeling endra): {name}", "activity.reason_pool_refund_cost_reduced": "Refusjon frå sparegris (kostnad redusert): {name}", "activity.reason_pool_refund_deleted": "Refusjon frå sparegris (løning sletta): {name}", "activity.reason_pool_refund_expired": "Refusjon frå sparegris (løning utløpt): {name}", + "activity.reason_pool_refund_funding_changed": "Refusjon frå sparegris (løninga si finansiering endra): {name}", "activity.reason_pool_refund_sold_out": "Refusjon frå sparegris (løning utseld): {name}", "activity.reason_streak_milestone": "Milepælsbonus ({days} dagar på rad!)", "activity.reason_weekend_bonus": "Helgebonus (×{multiplier})", @@ -158,6 +161,7 @@ "badges.entity_not_found": "{entity} ikkje funne", "badges.label": "Merke", "badges.next_up": "Neste", + "badges.one_more": "Berre éin til, så er det ditt!", "badges.title_with_name": "Merka til {name}", "bonuses.add_bonus": "Legg til bonus", "bonuses.applying_to": "Vert brukt på {childName} — noverande saldo: {points} {pointsName}", @@ -229,6 +233,8 @@ "child.extra_submit": "Send", "child.extra_needs_desc": "Skriv først kva du gjorde.", "child.open_ended_tag": "Beskriv", + "child.weekly_target_done": "Ferdig for denne veka", + "child.weekly_target_progress": "{done}/{target} denne veka", "child.photo_take": "Ta eit bilete", "child.photo_hint": "Vis den ferdige oppgåva", "child.photo_retake": "Ta på nytt", @@ -616,6 +622,9 @@ "panel.chore_daily_cap_label": "Dagleg tak (minutt, 0 = uavgrensa)", "panel.chore_daily_limit_label": "Dagleg grense", "panel.chore_days_label": "Vekedagar (la stå tomt = kvar dag)", + "panel.chore_weekly_target_pill": "{count}×/veke", + "panel.chore_weekly_target_hint": "Kor mange gonger i veka oppgåva må gjerast, på kva som helst av dei valde dagane. Ho blir ikkje vist meir når talet er nådd, og blir nullstilt på måndag.", + "panel.chore_weekly_target_label": "Vekemål (0 = av)", "panel.chore_description_label": "Skildring (valfri)", "panel.chore_enabled_label": "Aktivert", "panel.chore_first_occurrence_label": "Fyrste førekomst", diff --git a/custom_components/taskmate/www/locales/pt-BR.json b/custom_components/taskmate/www/locales/pt-BR.json index f5c740ae..7de9a229 100644 --- a/custom_components/taskmate/www/locales/pt-BR.json +++ b/custom_components/taskmate/www/locales/pt-BR.json @@ -6,6 +6,7 @@ "common.design.playroom": "Playroom", "common.design.console": "Console", "common.design.cleanpro": "Clean Pro", + "common.design.graphite": "Grafite", "panel.settings_card_design_label": "Design de card padrão", "panel.settings_card_design_hint": "O estilo que novos cards usam, a menos que substituído por card.", "activity.a_chore": "uma tarefa", @@ -55,9 +56,11 @@ "activity.reason_bonus": "Bônus: {name}", "activity.reason_penalty": "Penalidade: {name}", "activity.reason_perfect_week": "Bônus de semana perfeita!", + "activity.reason_pool_refund_assignment_changed": "Reembolso do cofrinho (atribuição da recompensa alterada): {name}", "activity.reason_pool_refund_cost_reduced": "Reembolso do cofrinho (custo reduzido): {name}", "activity.reason_pool_refund_deleted": "Reembolso do cofrinho (recompensa excluída): {name}", "activity.reason_pool_refund_expired": "Reembolso do cofrinho (recompensa expirada): {name}", + "activity.reason_pool_refund_funding_changed": "Reembolso do cofrinho (financiamento da recompensa alterado): {name}", "activity.reason_pool_refund_sold_out": "Reembolso do cofrinho (recompensa esgotada): {name}", "activity.reason_streak_milestone": "Bônus de marco de sequência ({days} dias seguidos!)", "activity.reason_weekend_bonus": "Bônus de fim de semana (×{multiplier})", @@ -158,6 +161,7 @@ "badges.entity_not_found": "{entity} não encontrado", "badges.label": "Conquistas", "badges.next_up": "A seguir", + "badges.one_more": "Só mais um e é seu!", "badges.title_with_name": "Conquistas de {name}", "bonuses.add_bonus": "Adicionar Bónus", "bonuses.applying_to": "A aplicar a {childName} — saldo atual: {points} {pointsName}", @@ -229,6 +233,8 @@ "child.extra_submit": "Enviar", "child.extra_needs_desc": "Escreva primeiro o que você fez.", "child.open_ended_tag": "Descrever", + "child.weekly_target_done": "Concluída esta semana", + "child.weekly_target_progress": "{done}/{target} esta semana", "child.photo_take": "Tirar uma foto", "child.photo_hint": "Mostre sua tarefa concluída", "child.photo_retake": "Repetir", @@ -616,6 +622,9 @@ "panel.chore_daily_cap_label": "Limite diário (minutos, 0 = ilimitado)", "panel.chore_daily_limit_label": "Limite diário", "panel.chore_days_label": "Dias da semana (vazio = todos os dias)", + "panel.chore_weekly_target_pill": "{count}×/semana", + "panel.chore_weekly_target_hint": "Quantas vezes por semana a tarefa precisa ser feita, em qualquer um dos dias escolhidos. Ela deixa de aparecer quando a contagem é atingida e reinicia na segunda-feira.", + "panel.chore_weekly_target_label": "Meta semanal (0 = desligado)", "panel.chore_description_label": "Descrição (opcional)", "panel.chore_enabled_label": "Ativada", "panel.chore_first_occurrence_label": "Primeira ocorrência", diff --git a/custom_components/taskmate/www/locales/pt.json b/custom_components/taskmate/www/locales/pt.json index e9a9f37a..303fac08 100644 --- a/custom_components/taskmate/www/locales/pt.json +++ b/custom_components/taskmate/www/locales/pt.json @@ -6,6 +6,7 @@ "common.design.playroom": "Playroom", "common.design.console": "Console", "common.design.cleanpro": "Clean Pro", + "common.design.graphite": "Grafite", "panel.settings_card_design_label": "Design de cartão predefinido", "panel.settings_card_design_hint": "O estilo que os novos cartões usam, salvo substituição por cartão.", "activity.a_chore": "uma tarefa", @@ -55,9 +56,11 @@ "activity.reason_bonus": "Bónus: {name}", "activity.reason_penalty": "Penalidade: {name}", "activity.reason_perfect_week": "Bónus de semana perfeita!", + "activity.reason_pool_refund_assignment_changed": "Reembolso do mealheiro (atribuição da recompensa alterada): {name}", "activity.reason_pool_refund_cost_reduced": "Reembolso do mealheiro (custo reduzido): {name}", "activity.reason_pool_refund_deleted": "Reembolso do mealheiro (recompensa eliminada): {name}", "activity.reason_pool_refund_expired": "Reembolso do mealheiro (recompensa expirada): {name}", + "activity.reason_pool_refund_funding_changed": "Reembolso do mealheiro (financiamento da recompensa alterado): {name}", "activity.reason_pool_refund_sold_out": "Reembolso do mealheiro (recompensa esgotada): {name}", "activity.reason_streak_milestone": "Bónus de marco de sequência ({days} dias seguidos!)", "activity.reason_weekend_bonus": "Bónus de fim de semana (×{multiplier})", @@ -158,6 +161,7 @@ "badges.entity_not_found": "{entity} não encontrado", "badges.label": "Conquistas", "badges.next_up": "A seguir", + "badges.one_more": "Só mais um e é teu!", "badges.title_with_name": "Conquistas de {name}", "bonuses.add_bonus": "Adicionar Bónus", "bonuses.applying_to": "A aplicar a {childName} — saldo atual: {points} {pointsName}", @@ -229,6 +233,8 @@ "child.extra_submit": "Enviar", "child.extra_needs_desc": "Escreve primeiro o que fizeste.", "child.open_ended_tag": "Descrever", + "child.weekly_target_done": "Concluída esta semana", + "child.weekly_target_progress": "{done}/{target} esta semana", "child.photo_take": "Tirar uma foto", "child.photo_hint": "Mostra a tua tarefa terminada", "child.photo_retake": "Repetir", @@ -621,6 +627,9 @@ "panel.chore_daily_cap_label": "Limite diário (minutos, 0 = ilimitado)", "panel.chore_daily_limit_label": "Limite diário", "panel.chore_days_label": "Dias da semana (deixe vazio = todos os dias)", + "panel.chore_weekly_target_pill": "{count}×/semana", + "panel.chore_weekly_target_hint": "Quantas vezes por semana a tarefa tem de ser feita, em qualquer um dos dias escolhidos. Deixa de ser apresentada quando a contagem é atingida e reinicia à segunda-feira.", + "panel.chore_weekly_target_label": "Meta semanal (0 = desligado)", "panel.chore_description_label": "Descrição (opcional)", "panel.chore_enabled_label": "Ativada", "panel.chore_first_occurrence_label": "Primeira ocorrência", diff --git a/custom_components/taskmate/www/taskmate-activity-card.js b/custom_components/taskmate/www/taskmate-activity-card.js index 64c4c5af..c2ef6124 100644 --- a/custom_components/taskmate/www/taskmate-activity-card.js +++ b/custom_components/taskmate/www/taskmate-activity-card.js @@ -73,6 +73,8 @@ class TaskMateActivityCard extends LitElement { ['Pool refund (reward sold out):', 'activity.reason_pool_refund_sold_out'], ['Pool refund (reward cost reduced):', 'activity.reason_pool_refund_cost_reduced'], ['Pool refund (reward deleted):', 'activity.reason_pool_refund_deleted'], + ['Pool refund (reward funding changed):', 'activity.reason_pool_refund_funding_changed'], + ['Pool refund (reward assignment changed):', 'activity.reason_pool_refund_assignment_changed'], ['Penalty:', 'activity.reason_penalty'], ['Bonus:', 'activity.reason_bonus'], ]; diff --git a/custom_components/taskmate/www/taskmate-approvals-card.js b/custom_components/taskmate/www/taskmate-approvals-card.js index 2239eb67..2a7dbac8 100644 --- a/custom_components/taskmate/www/taskmate-approvals-card.js +++ b/custom_components/taskmate/www/taskmate-approvals-card.js @@ -603,7 +603,9 @@ class TaskMateApprovalsCard extends LitElement { .ap-cn-photo img { width: 100%; height: 100%; object-fit: cover; } /* Clean Pro — divided list */ - .ap-cp-item { padding: 10px 0; } + .ap-cp-item { padding: 10px 0; flex-wrap: wrap; row-gap: 8px; } + .ap-cp-mid { flex: 1 1 130px; min-width: 130px; } + .ap-cp-actions { display: flex; gap: 8px; flex: 0 0 auto; margin-left: auto; } .ap-cp-title { font-weight: 600; } .ap-cp-sub { font-size: 12px; } .ap-cp-photo { width: 32px; height: 32px; border-radius: 8px; overflow: hidden; @@ -1048,13 +1050,13 @@ class TaskMateApprovalsCard extends LitElement { return html`
${this._av(it.childName, this._childAvatar(it.childId), tone, 38)} -
+
${it.title}
${it.childName}${time ? html` · ${time}` : ""}
${this._apPhotoDesigned(it, "ap-cp-photo")} +${it.points} - ${this._designActions(it, "ghost")} +
${this._designActions(it, "ghost")}
`; } diff --git a/custom_components/taskmate/www/taskmate-child-card.js b/custom_components/taskmate/www/taskmate-child-card.js index 2ee6c586..775e805e 100644 --- a/custom_components/taskmate/www/taskmate-child-card.js +++ b/custom_components/taskmate/www/taskmate-child-card.js @@ -1716,6 +1716,12 @@ class TaskMateChildCard extends LitElement { border-radius: 3px; transition: width 0.4s ease; } + .next-badge-nudge { + margin-top: 5px; + font-size: 11px; + font-weight: 700; + color: var(--primary-color); + } /* ══════════════════════════════════════════════════════════════════ DESIGNED STYLES (playroom / console / cleanpro) @@ -1886,6 +1892,9 @@ class TaskMateChildCard extends LitElement { .tmd-next-badge .bar i { display: block; height: 100%; border-radius: 999px; transition: width .4s ease; } + .tmd-next-badge .nudge { + margin-top: 5px; font-size: 11px; font-weight: 800; color: var(--tmd-accent); + } /* Playroom is chunkier, console squares everything off, accessible needs a solid ring rather than a dashed one to stay legible. */ :host([data-tm-design="playroom"]) .tmd-next-badge .bar { height: 8px; } @@ -1895,6 +1904,7 @@ class TaskMateChildCard extends LitElement { :host([data-tm-design="accessible"]) .tmd-next-badge .bar { height: 10px; } :host([data-tm-design="accessible"]) .tmd-next-badge .nm, :host([data-tm-design="accessible"]) .tmd-next-badge .cnt { font-size: 14px; } + :host([data-tm-design="accessible"]) .tmd-next-badge .nudge { font-size: 13px; } /* Designed: vacation banner + swappable section */ .tmd-vacation { @@ -1928,6 +1938,7 @@ class TaskMateChildCard extends LitElement { show_due_days_only: true, // Whether to apply due_days filtering at all show_badges: true, // Show badge strip between points and chores show_next_badge: true, // Show progress toward the closest unearned badge + show_badge_nudge: true, // Encouraging line when one away from that badge header_color: '#9b59b6', ...config, }; @@ -2131,6 +2142,9 @@ class TaskMateChildCard extends LitElement { aria-valuenow="${nextBadge.pct}" aria-valuemin="0" aria-valuemax="100">
+ ${this._badgeNudgeText(nextBadge) + ? html`
${this._badgeNudgeText(nextBadge)}
` + : ''}
` : ''} @@ -2249,6 +2263,21 @@ class TaskMateChildCard extends LitElement { return best; } + /* "Nearly there" (#890) — the line of encouragement under the next-badge bar. + + It fires on the last remaining unit and nothing else, measured in the + criterion's own units rather than percent: 90% of a ten-week badge is one + week away, 90% of a hundred-point badge is ten points away. Rare on + purpose — a line that shows for half the climb has stopped meaning + anything by the time it matters. Manual-award badges carry no criterion + and so never nudge. */ + _badgeNudgeText(nextBadge) { + if (this.config.show_badge_nudge === false) return ""; + const c = nextBadge?.badge?.closest_criterion; + if (!c) return ""; + return Number(c.target) - Number(c.current) === 1 ? this._t("badges.one_more") : ""; + } + // Built-in badge names arrive from the sensor in English; the localised // name lives under badge.name_ (same scheme as the panel). _badgeName(b) { @@ -2307,6 +2336,23 @@ class TaskMateChildCard extends LitElement { } /** Mirror of _renderChoreCard's "completed today" detection, designed branch only. */ + // How many times this chore can still be ticked TODAY. + // + // Normally the chore's own daily_limit, clamped to 1 for a first_come race. + // A weekly target (#883) clamps it again: once the week's quota is full there + // is no allowance left, so a chore with daily_limit 5 and 2/2 done reads as + // finished rather than staying tappable — the tap would only be one + // complete_chore refuses (#805). Only applied once the child has ticked it + // today; a quota filled on earlier days leaves the row locked instead, so a + // green "done" row never appears with no completion behind it to undo. + _effectiveDailyLimit(chore, child, countToday, isFirstCome) { + const limit = isFirstCome ? 1 : (chore.daily_limit || 1); + const target = Number(chore.weekly_target) || 0; + if (target <= 0 || countToday <= 0) return limit; + const doneThisWeek = Number((child?.weekly_chore_progress || {})[chore.id] || 0); + return Math.min(limit, countToday + Math.max(0, target - doneThisWeek)); + } + _isChoreDone(chore, child, todaysCompletions) { // async_parent_complete_chore writes child_id="__parent__" to dismiss a // chore for the WHOLE pool with zero points — it never credits a specific @@ -2336,7 +2382,7 @@ class TaskMateChildCard extends LitElement { // the filter and the backend both clamp it to 1 (coord_assignments). Reading // the raw daily_limit here would leave the winner's own row looking incomplete // and tappable, and complete_chore would then silently no-op the tap (#805). - const done = count >= (isFirstCome ? 1 : (chore.daily_limit || 1)); + const done = count >= this._effectiveDailyLimit(chore, child, count, isFirstCome); return { done, completions: childCompletionsToday }; } @@ -2395,8 +2441,11 @@ class TaskMateChildCard extends LitElement { // dim/show only — hide is filtered upstream same as recurrence). Never true // for the winner's own row: _isFirstComeLocked is only set on siblings. const firstComeLocked = !!chore._isFirstComeLocked && !done; + // Weekly quota filled — nothing owed until Monday, so the tap is refused + // the same way a recurrence window refuses one. + const weeklyDone = !!chore._weeklyTargetMet && !done; const onAct = () => { - if (loading || blocked || recLocked || firstComeLocked) return; + if (loading || blocked || recLocked || firstComeLocked || weeklyDone) return; if (done) this._handleUndo(chore, child, completions); else this._handleComplete(chore, child); }; @@ -2409,10 +2458,11 @@ class TaskMateChildCard extends LitElement { (blocked && dependencyMode === "dim") || (chore._isRecurrenceLocked && recurrenceDoneMode === "dim") || (chore._isFirstComeLocked && firstComeClaimedMode === "dim") || + weeklyDone || chore._isLockedPreview === true ); return { - chore, child, done, loading, onAct, index: i, dimmed, blocked, recLocked, firstComeLocked, + chore, child, done, loading, onAct, index: i, dimmed, blocked, recLocked, firstComeLocked, weeklyDone, tone: this._designTone(i), glyph: this._choreGlyph(chore), points: chore.effective_points ?? chore.points, @@ -2494,6 +2544,9 @@ class TaskMateChildCard extends LitElement { aria-valuenow="${nextBadge.pct}" aria-valuemin="0" aria-valuemax="100"> + ${this._badgeNudgeText(nextBadge) + ? html`
${this._badgeNudgeText(nextBadge)}
` + : ""} ` : ""} ${sectionLine} @@ -2559,8 +2612,13 @@ class TaskMateChildCard extends LitElement { ? this._t("child.claimed_by_another", { name: r.chore._firstComeCompletedByName }) : this._t("child.claimed_by_another_generic")) : ""; + // Weekly target (#883): shown from the first tick so the child can see + // where they are, not only once the quota is full. + const weeklyLabel = r.chore._weeklyTarget > 0 + ? this._t("child.weekly_target_progress", { done: r.chore._weeklyProgress, target: r.chore._weeklyTarget }) + : ""; return html` - ${r.mandatory || r.photo || r.openEnded || depNames.length || recLabel || firstComeLabel ? html` + ${r.mandatory || r.photo || r.openEnded || depNames.length || recLabel || firstComeLabel || weeklyLabel ? html`
${r.mandatory ? html`⚠ ${this._t("child.mandatory")}` : ""} ${r.photo ? html`📷 ${this._t("child.photo_needed")}` : ""} @@ -2568,6 +2626,7 @@ class TaskMateChildCard extends LitElement { ${depNames.length ? html`🔒 ${this._t("child.blocked_by_dependency", { chores: depNames.join(", ") })}` : ""} ${recLabel ? html`🕒 ${recLabel}` : ""} ${firstComeLabel ? html`✅ ${firstComeLabel}` : ""} + ${weeklyLabel ? html`📅 ${weeklyLabel}` : ""}
` : ""} ${showDesc ? html`
${r.chore.description}
` : ""}`; } @@ -2583,7 +2642,7 @@ class TaskMateChildCard extends LitElement { _designDoneBtn(r, label, cls) { return html``; } @@ -2990,6 +3049,20 @@ class TaskMateChildCard extends LitElement { chore._isRecurrenceLocked = chore._isRecurring && !availableNow && !completedToday; if (chore._isRecurrenceLocked && recurrenceDoneMode === 'hide') return false; + // Weekly target (#883): the child picks which days, so the chore keeps + // being offered until the week's quota is filled. The count comes from + // the per-child map on the overview sensor — the card only ever sees + // today's completions, so it can't total a week by itself. Excluding + // completedToday keeps the row live for an undo when today's tick was + // the one that filled it, exactly as the recurrence lock does. + chore._weeklyTarget = Number(chore.weekly_target) || 0; + chore._weeklyProgress = chore._weeklyTarget > 0 + ? Number((child.weekly_chore_progress || {})[chore.id] || 0) + : 0; + chore._weeklyTargetMet = chore._weeklyTarget > 0 + && chore._weeklyProgress >= chore._weeklyTarget + && !completedToday; + // Mark whether this chore's time period has elapsed (grace-aware). chore._isTimeElapsed = this._isTimePeriodElapsed(chore); @@ -3494,7 +3567,7 @@ class TaskMateChildCard extends LitElement { // Clamped for first_come the same way the filter and the backend clamp it: a // stored daily_limit > 1 must not make the winner's finished row read as still // outstanding, or it invites a tap that complete_chore silently swallows (#805). - const dailyLimit = isFirstCome ? 1 : (chore.daily_limit || 1); + const dailyLimit = this._effectiveDailyLimit(chore, child, completionsToday, isFirstCome); // Check for optimistic completions (chores just completed but not yet confirmed by HA) const optimisticKey = `${chore.id}_${child.id}`; @@ -3547,6 +3620,9 @@ class TaskMateChildCard extends LitElement { const firstComeClaimedMode = this.config.first_come_claimed_mode || 'hide'; const firstComeLocked = !!chore._isFirstComeLocked && !isCompletedForToday; const notAvailableFirstCome = firstComeLocked && firstComeClaimedMode === 'dim'; + // Weekly quota filled (#883). Dimmed and non-interactive: the backend + // would refuse the completion, so a live row would just swallow the tap. + const weeklyDone = !!chore._weeklyTargetMet && !isCompletedForToday; // Elapsed: only dim incomplete chores — completed ones keep their green "done" style const elapsedTimeMode = this.config.elapsed_time_mode || 'dim'; const timeElapsed = chore._isTimeElapsed && !isCompletedForToday && elapsedTimeMode === 'dim'; @@ -3570,13 +3646,14 @@ class TaskMateChildCard extends LitElement { if (depBlocked) return; // Prerequisite chore not approved yet if (timeElapsed) return; // Time period passed — not interactive if (firstComeLocked) return; // Claimed by another child today — not interactive + if (weeklyDone) return; // Weekly target already met — nothing owed until Monday if (isCompletedForToday) { this._handleUndo(chore, child, childCompletionsToday); } else { this._handleComplete(chore, child); } }; - const isInteractive = !(isLoading || notDueToday || recurrenceLocked || isLockedPreview || depBlocked || timeElapsed || firstComeLocked); + const isInteractive = !(isLoading || notDueToday || recurrenceLocked || isLockedPreview || depBlocked || timeElapsed || firstComeLocked || weeklyDone); const handleRowKeyDown = (e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); @@ -3596,13 +3673,15 @@ class TaskMateChildCard extends LitElement { ? (chore._firstComeCompletedByName ? this._t('child.claimed_by_another', { name: chore._firstComeCompletedByName }) : this._t('child.claimed_by_another_generic')) + : weeklyDone + ? this._t('child.weekly_target_done') : isCompletedForToday ? this._t('child.click_to_undo') : this._t('child.click_to_complete'); return html`
+${chore.effective_points ?? chore.points} ${dailyLimit > 1 ? html`(${completionsToday}/${dailyLimit})` : ''} + ${chore._weeklyTarget > 0 ? html`${this._t('child.weekly_target_progress', { done: chore._weeklyProgress, target: chore._weeklyTarget })}` : ''}
${chore.require_photo && !isCompletedForToday ? html`
diff --git a/custom_components/taskmate/www/taskmate-design.js b/custom_components/taskmate/www/taskmate-design.js index 07ebf75c..ff15d62f 100644 --- a/custom_components/taskmate/www/taskmate-design.js +++ b/custom_components/taskmate/www/taskmate-design.js @@ -13,11 +13,21 @@ * console — dark gamified HUD * cleanpro — calm productivity / SaaS * accessible — high contrast, colour-blind safe, dyslexia-friendly type + * graphite — corporate/system look; reuses the cleanpro LAYOUT (see + * LAYOUT_ALIAS) and restyles it entirely through tokens + kit * * Mirrors window.__taskmate_localize: exposed globally, no ES module imports. */ (function () { - const IDS = ["classic", "playroom", "console", "cleanpro", "accessible"]; + const IDS = ["classic", "playroom", "console", "cleanpro", "accessible", "graphite"]; + + // A design whose markup is another design's. apply() stamps the real id on + // the host (so the style's CSS applies) but hands cards the layout id, so + // every existing `design === "cleanpro"` branch picks graphite up too. Without + // this a new id falls down each card's final `else`, which is playroom in + // some cards and cleanpro in others — the classic "works on one style, + // invisible on the rest" bug. + const LAYOUT_ALIAS = { graphite: "cleanpro" }; // Fonts must be loaded at the document level (an @import inside a shadow // stylesheet is honoured, but loading once globally avoids N duplicate fetches). @@ -56,6 +66,23 @@ --tmd-c1:#4F6BED;--tmd-c2:#0FB5A8;--tmd-c3:#E0A100;--tmd-c4:#7A5AF0;--tmd-c5:#E0567A;--tmd-c6:#2BA84A; } +:host([data-tm-design="graphite"]),[data-tm-design="graphite"]{ + /* Neutrals carry the card; the only saturated element is the header band + (per-card header_color). Actions are near-black rather than a coloured + accent, and colour is reserved for meaning: good / warn / bad. */ + --tmd-bg:#EFEFF2;--tmd-surface:#FFFFFF;--tmd-surface-2:#F5F5F7;--tmd-border:#D2D2D7; + --tmd-text:#1D1D1F;--tmd-dim:#6E6E73; + --tmd-accent:#1D1D1F;--tmd-accent2:#6E6E73;--tmd-good:#1D7A4C;--tmd-warn:#B25E00;--tmd-bad:#B3261E;--tmd-gold:#B25E00; + --tmd-radius:18px;--tmd-radius-sm:12px;--tmd-shadow:none;--tmd-hd-text:#fff; + /* The system stack resolves to real SF Pro on Apple hardware; Inter (already + in FONT_IMPORT) is the fallback everywhere else. Figures are kept aligned + with font-variant-numeric rather than a separate monospace face. */ + --tmd-font-display:-apple-system,BlinkMacSystemFont,"SF Pro Display","Inter",system-ui,sans-serif; + --tmd-font-body:-apple-system,BlinkMacSystemFont,"SF Pro Text","Inter",system-ui,sans-serif; + --tmd-font-mono:-apple-system,BlinkMacSystemFont,"SF Pro Text","Inter",system-ui,sans-serif; + --tmd-c1:#1F5F8B;--tmd-c2:#146356;--tmd-c3:#8A4B12;--tmd-c4:#3E4B8B;--tmd-c5:#6B3D6B;--tmd-c6:#2F4858; +} + /* ── Dark-mode variants ────────────────────────────────────────────────── Cards stamp data-tm-dark on the host when HA is in dark mode. Each design has a light base (above) and a dark override here, so all three follow HA's @@ -93,6 +120,16 @@ --tmd-text:#E6EAF1;--tmd-dim:#97A1B0;--tmd-accent:#6E86F5;--tmd-accent2:#1FC7B8; --tmd-shadow:0 1px 2px rgba(0,0,0,.4),0 8px 18px rgba(0,0,0,.35); } +:host([data-tm-design="graphite"][data-tm-dark]),[data-tm-design="graphite"][data-tm-dark]{ + /* True black behind elevated sheets. --tmd-accent stays a mid neutral so a + card with no header_color still has a legible band with white text; the + button colour is derived from --tmd-text instead, so it inverts properly. */ + --tmd-bg:#000000;--tmd-surface:#1C1C1E;--tmd-surface-2:#2C2C2E;--tmd-border:#38383A; + --tmd-text:#F5F5F7;--tmd-dim:#98989F; + --tmd-accent:#3A3A3C;--tmd-accent2:#98989F;--tmd-good:#30A46C;--tmd-warn:#D98324;--tmd-bad:#E5484D;--tmd-gold:#D98324; + --tmd-shadow:none; + --tmd-c1:#2C7CB0;--tmd-c2:#1E8C77;--tmd-c3:#B06A26;--tmd-c4:#5B6AC0;--tmd-c5:#945993;--tmd-c6:#4A6B80; +} :host([data-tm-design="accessible"][data-tm-dark]),[data-tm-design="accessible"][data-tm-dark]{ /* Pure black would bloom on OLED and is harsh for astigmatism; #0A0A0A with near-white text still clears AAA. Hues are the Okabe-Ito light variants, @@ -145,7 +182,142 @@ .stat{background:var(--tmd-surface-2);border:1px solid var(--tmd-border);border-radius:var(--tmd-radius-sm);padding:10px 11px} .stat .k{font-size:11px;font-weight:700;color:var(--tmd-dim);text-transform:uppercase;letter-spacing:.04em} .stat .v{font-family:var(--tmd-font-display);font-weight:800;font-size:20px;margin-top:2px} -.grid{display:grid;gap:10px}`; +.grid{display:grid;gap:10px} + +/* ── Graphite ───────────────────────────────────────────────────────────── + Graphite has no render path of its own: it borrows the Clean Pro markup + (LAYOUT_ALIAS) and is defined entirely by the rules below, so all cards + adopt it at once. Selectors are :host([...]) + class, which out-specifies + the '.tmd-check .c-num' pattern the cards use for their own design CSS. */ +:host([data-tm-design="graphite"]) .tmd{border:1px solid var(--tmd-border);box-shadow:none} +/* The header band stays full colour — it is the one saturated element. */ +:host([data-tm-design="graphite"]) .tmd-hd{padding:13px 15px 12px} +:host([data-tm-design="graphite"]) .tmd-hd .tt{font-weight:600;font-size:17px;letter-spacing:-.42px} +:host([data-tm-design="graphite"]) .tmd-hd .tt small{font-weight:400;font-size:13px;opacity:.78;letter-spacing:-.06px;margin-top:2px} +:host([data-tm-design="graphite"]) .tmd-hd .ic{border-radius:50%;background:rgba(255,255,255,.2)} +:host([data-tm-design="graphite"]) .tmd-hd .pill{background:transparent;padding:0;font-weight:500;font-size:15px;letter-spacing:-.2px;text-transform:none} +:host([data-tm-design="graphite"]) .tmd-hd .cnt{background:rgba(255,255,255,.22);font-weight:500;font-variant-numeric:tabular-nums} + +/* Actions are near-black on light and near-white on dark. Deriving them from + --tmd-text (not --tmd-accent) is what makes both directions invert. */ +:host([data-tm-design="graphite"]) .btn{background:var(--tmd-text);color:var(--tmd-surface); + font-family:var(--tmd-font-body);font-weight:500;letter-spacing:-.2px; + border-radius:9px;box-shadow:none} +:host([data-tm-design="graphite"]) .btn.ghost{background:transparent;color:var(--tmd-text);border:1px solid var(--tmd-border)} +/* "good" marks the primary confirm (Approve / Dismiss). Graphite draws the + primary action in near-black like every other one; green is reserved for + reporting a completed state, not for a button. */ +:host([data-tm-design="graphite"]) .btn.good{background:var(--tmd-text);color:var(--tmd-surface)} +:host([data-tm-design="graphite"]) .btn.bad{background:transparent;color:var(--tmd-bad)} +:host([data-tm-design="graphite"]) .btn.round{border-radius:50%} + +/* Figures hold their column as they tick over. */ +:host([data-tm-design="graphite"]) .num, +:host([data-tm-design="graphite"]) .big, +:host([data-tm-design="graphite"]) .stat .v{font-variant-numeric:tabular-nums;font-weight:600;letter-spacing:-.6px} +/* A chip reports a value here; it is not a highlight. */ +:host([data-tm-design="graphite"]) .chip{background:transparent;border-color:transparent;color:var(--tmd-dim); + font-weight:500;font-variant-numeric:tabular-nums} +:host([data-tm-design="graphite"]) .chip.soft{color:var(--tmd-dim)} +/* 4px track rather than a fat rounded pill. */ +:host([data-tm-design="graphite"]) .bar{height:4px;border:0;border-radius:2px;background:var(--tmd-border)} +:host([data-tm-design="graphite"]) .bar>i{box-shadow:none} +:host([data-tm-design="graphite"]) .av{box-shadow:none} +:host([data-tm-design="graphite"]) .divide{background:var(--tmd-border)} +/* Stat cells are separated by hairlines, not drawn as nested boxes. */ +:host([data-tm-design="graphite"]) .stat{background:transparent;border:0;border-radius:0;padding:0 12px} +:host([data-tm-design="graphite"]) .stat .k{text-transform:none;letter-spacing:-.04px;font-weight:400;font-size:12.5px} + +/* Grouped inset list: one hairline container, separators starting past the + leading control, and the leading badge reduced to a completion mark. */ +:host([data-tm-design="graphite"]) .tmd-checklist{border:1px solid var(--tmd-border);border-radius:var(--tmd-radius-sm)} +:host([data-tm-design="graphite"]) .tmd-check{position:relative;padding:9px 12px;min-height:46px;box-sizing:border-box} +:host([data-tm-design="graphite"]) .tmd-check+.tmd-check{border-top:0} +:host([data-tm-design="graphite"]) .tmd-check+.tmd-check::before{content:"";position:absolute;top:0;left:46px;right:0;height:1px;background:var(--tmd-border)} +:host([data-tm-design="graphite"]) .tmd-check .c-num{width:22px;height:22px;border-radius:50%; + background:transparent;border:1.5px solid var(--tmd-border);color:transparent;font-size:0} +:host([data-tm-design="graphite"]) .tmd-check.done .c-num{background:var(--tmd-good);border-color:var(--tmd-good);color:#fff;font-size:13px} +:host([data-tm-design="graphite"]) .tmd-check .c-name{font-weight:450;font-size:15px;letter-spacing:-.18px} +/* Dimming already says "done"; the strike-through is redundant noise. */ +:host([data-tm-design="graphite"]) .tmd-check.done .c-name{text-decoration:none} +:host([data-tm-design="graphite"]) .tmd-check.done{opacity:.52} +/* Meta reads as quiet text, not as a row of coloured pills. */ +:host([data-tm-design="graphite"]) .tmd-tag{background:transparent;border-color:transparent; + color:var(--tmd-dim);font-weight:400;font-size:12.5px;letter-spacing:-.02px;padding:0;text-transform:none} +:host([data-tm-design="graphite"]) .tmd-tag.mandatory{color:var(--tmd-bad)} +:host([data-tm-design="graphite"]) .tmd-tag.photo{color:var(--tmd-dim)} + +/* The decorative emoji tile in a card header is the loudest "kids app" tell + left in the designed markup, and it is chrome rather than user data — the + child card puts a real avatar here instead, which is kept. */ +:host([data-tm-design="graphite"]) .tmd-hd .ic{display:none} +/* Sentence case throughout: tracked-out uppercase labels are not this style. */ +:host([data-tm-design="graphite"]) .lbl, +:host([data-tm-design="graphite"]) .ap-group-label, +:host([data-tm-design="graphite"]) .rw-jackpot-label, +:host([data-tm-design="graphite"]) .tmd-badges .lbl{text-transform:none;letter-spacing:-.04px;font-weight:500;font-size:13px;color:var(--tmd-dim)} + +/* Badge strip + next-badge: outlines rather than filled colour discs. */ +:host([data-tm-design="graphite"]) .tmd-badges, +:host([data-tm-design="graphite"]) .tmd-next-badge{background:transparent;border:1px solid var(--tmd-border);border-radius:var(--tmd-radius-sm)} +:host([data-tm-design="graphite"]) .tmd-badge-mini{background:transparent;border:1px solid var(--tmd-border);box-shadow:none} +/* The glyphs inside these discs are drawn white for a filled tier colour; + once the fill is gone they have to take the text colour or they vanish. */ +:host([data-tm-design="graphite"]) .tmd-badge-mini, +:host([data-tm-design="graphite"]) .tmd-badge-mini ha-icon, +:host([data-tm-design="graphite"]) .tmd-next-badge .ic, +:host([data-tm-design="graphite"]) .tmd-next-badge .ic ha-icon{color:var(--tmd-text)} +:host([data-tm-design="graphite"]) .tmd-next-badge .ic{background:transparent;box-shadow:none} +:host([data-tm-design="graphite"]) .tmd-next-badge .bar{height:4px;border:0;background:var(--tmd-border)} +:host([data-tm-design="graphite"]) .tmd-next-badge .nm{font-weight:500} + +/* Points display: tiles become a plain figure block. */ +:host([data-tm-design="graphite"]) .cp-tile{background:transparent;border:1px solid var(--tmd-border);border-radius:var(--tmd-radius-sm);box-shadow:none} +:host([data-tm-design="graphite"]) .cp-pts, +:host([data-tm-design="graphite"]) .cp-total{font-variant-numeric:tabular-nums;font-weight:600;letter-spacing:-1.2px} +:host([data-tm-design="graphite"]) .cp-name{font-weight:500;letter-spacing:-.18px} +:host([data-tm-design="graphite"]) .cp-rank, +:host([data-tm-design="graphite"]) .cp-chips .chip{background:transparent;border-color:transparent;color:var(--tmd-dim);font-weight:500} + +/* Rewards: a grouped list of fixed costs, not a deck of tinted cards. */ +:host([data-tm-design="graphite"]) .rw-list{border:1px solid var(--tmd-border);border-radius:var(--tmd-radius-sm);gap:0} +:host([data-tm-design="graphite"]) .rw-card{background:transparent;border:0;border-radius:0;box-shadow:none} +:host([data-tm-design="graphite"]) .rw-card+.rw-card{border-top:1px solid var(--tmd-border)} +:host([data-tm-design="graphite"]) .rw-name{font-weight:500;letter-spacing:-.18px} +:host([data-tm-design="graphite"]) .rw-cost{font-variant-numeric:tabular-nums;font-weight:500;color:var(--tmd-dim)} +:host([data-tm-design="graphite"]) .rw-emoji{font-size:0} +:host([data-tm-design="graphite"]) .rw-pool-bar{height:4px;border:0;background:var(--tmd-border)} +:host([data-tm-design="graphite"]) .rw-jackpot{background:transparent;border:1px solid var(--tmd-border)} + +/* Approvals: one grouped queue; the destructive action is text, not a slab. */ +:host([data-tm-design="graphite"]) .ap-cp-item{background:transparent;border:0;border-radius:0;box-shadow:none} +:host([data-tm-design="graphite"]) .ap-cp-item+.ap-cp-item{border-top:1px solid var(--tmd-border)} +:host([data-tm-design="graphite"]) .ap-cp-title{font-weight:500;letter-spacing:-.18px} +:host([data-tm-design="graphite"]) .ap-cp-sub{color:var(--tmd-dim);font-weight:400} +:host([data-tm-design="graphite"]) .ap-cp-photo{border-radius:8px;border:1px solid var(--tmd-border)} +:host([data-tm-design="graphite"]) .ap-gold-soft{background:transparent;color:var(--tmd-dim)} +:host([data-tm-design="graphite"]) .approve-all-btn{background:transparent;color:#fff;border:1px solid rgba(255,255,255,.45);font-weight:500} + +/* Leaderboard: rank, name, figure — right-aligned and tabular. */ +:host([data-tm-design="graphite"]) .lb-cp-row{background:transparent;border:0;border-radius:0} +:host([data-tm-design="graphite"]) .lb-cp-row+.lb-cp-row{border-top:1px solid var(--tmd-border)} +:host([data-tm-design="graphite"]) .lb-cp-rank{background:transparent;border:0;color:var(--tmd-dim);font-variant-numeric:tabular-nums;font-weight:500} +:host([data-tm-design="graphite"]) .lb-cp-name{font-weight:500;letter-spacing:-.18px} +:host([data-tm-design="graphite"]) .lb-cp-score{font-variant-numeric:tabular-nums;font-weight:600;letter-spacing:-.6px} +:host([data-tm-design="graphite"]) .lb-cp-unit{color:var(--tmd-dim);font-weight:400} +:host([data-tm-design="graphite"]) .lb-cp-row.win{background:transparent} +:host([data-tm-design="graphite"]) .lb-cp-meta ha-icon{--mdc-icon-size:14px;vertical-align:-2px;margin-right:3px;color:var(--tmd-dim)} + +/* Overview: hairline-separated stats, then a grouped per-child list. */ +:host([data-tm-design="graphite"]) .ov-kids{border:1px solid var(--tmd-border);border-radius:var(--tmd-radius-sm)} +:host([data-tm-design="graphite"]) .ov-kid{background:transparent;border:0;border-radius:0} +:host([data-tm-design="graphite"]) .ov-kid+.ov-kid{border-top:1px solid var(--tmd-border)} +:host([data-tm-design="graphite"]) .ov-kid-flag{background:transparent;border:0;color:var(--tmd-dim);font-weight:400} +:host([data-tm-design="graphite"]) .ov-alert{background:transparent;border:1px solid var(--tmd-border);color:var(--tmd-text)} +:host([data-tm-design="graphite"]) .ov-today .val, +:host([data-tm-design="graphite"]) .pts{font-variant-numeric:tabular-nums;font-weight:600;letter-spacing:-.6px} +:host([data-tm-design="graphite"]) .nm, +:host([data-tm-design="graphite"]) .ttl{font-weight:500;letter-spacing:-.18px}`; if (!document.getElementById("taskmate-design-fonts")) { const styleEl = document.createElement("style"); @@ -249,7 +421,14 @@ el.setAttribute("data-tm-design", design); el.toggleAttribute("data-tm-dark", design !== "classic" && isDark(hass, el)); } - return design; + // The host keeps the real id (its CSS keys off it); the card gets the + // layout id so aliased styles reuse an existing render path. + return LAYOUT_ALIAS[design] || design; + } + + /** The real design id stamped on a card host (not the layout alias). */ + function active(el) { + return (el && el.getAttribute("data-tm-design")) || "classic"; } /** ha-form select options for a per-card design override (includes "use global"). */ @@ -262,6 +441,7 @@ { value: "console", label: label("console", "Console") }, { value: "cleanpro", label: label("cleanpro", "Clean Pro") }, { value: "accessible", label: label("accessible", "Accessible") }, + { value: "graphite", label: label("graphite", "Graphite") }, ]; } @@ -307,7 +487,7 @@ `; } - window.__taskmate_design = { IDS, resolve, isDark, apply, editorOptions, styles, cssText, tokensCSS: TOKENS, colourPicker }; + window.__taskmate_design = { IDS, resolve, isDark, apply, active, editorOptions, styles, cssText, tokensCSS: TOKENS, colourPicker }; /** * The single place that decides what a chore looks like (#750). diff --git a/custom_components/taskmate/www/taskmate-leaderboard-card.js b/custom_components/taskmate/www/taskmate-leaderboard-card.js index 5a14f170..11a36532 100644 --- a/custom_components/taskmate/www/taskmate-leaderboard-card.js +++ b/custom_components/taskmate/www/taskmate-leaderboard-card.js @@ -659,10 +659,17 @@ class TaskMateLeaderboardCard extends LitElement { _lbMetaChips(r, ctx, cls) { const sortBy = ctx.sortBy; const chips = []; - if (this.config.show_streak !== false && sortBy !== "streak") chips.push(html`🔥 ${r.streak}`); - if (this.config.show_weekly !== false && sortBy !== "weekly") chips.push(html`📅 ${r.weekly}`); - if (sortBy !== "points") chips.push(html`⭐ ${r.points}`); - if (this.config.show_career !== false && sortBy !== "career") chips.push(html`🏆 ${r.career}`); + // Graphite carries no emoji chrome, so the same figures get monoline + // icons there. active() returns the real design id (apply() hands the + // render path the layout alias, which for graphite is "cleanpro"). + const mono = window.__taskmate_design?.active?.(this) === "graphite"; + const stat = (icon, emoji, value) => (mono + ? html`${value}` + : html`${emoji} ${value}`); + if (this.config.show_streak !== false && sortBy !== "streak") chips.push(stat("mdi:fire", "🔥", r.streak)); + if (this.config.show_weekly !== false && sortBy !== "weekly") chips.push(stat("mdi:calendar-blank-outline", "📅", r.weekly)); + if (sortBy !== "points") chips.push(stat("mdi:star-outline", "⭐", r.points)); + if (this.config.show_career !== false && sortBy !== "career") chips.push(stat("mdi:trophy-outline", "🏆", r.career)); if (!chips.length) return ""; return html`
${chips}
`; } diff --git a/custom_components/taskmate/www/taskmate-overview-card.js b/custom_components/taskmate/www/taskmate-overview-card.js index 3938dab7..e6f18b35 100644 --- a/custom_components/taskmate/www/taskmate-overview-card.js +++ b/custom_components/taskmate/www/taskmate-overview-card.js @@ -581,6 +581,12 @@ class TaskMateOverviewCard extends LitElement { const perChild = availability[c.id]; if (perChild && perChild[child.id] === false) return false; } + // Weekly target (#883): the week's quota is filled, so the chore isn't + // outstanding today. Filtering here rather than at the two call sites + // keeps it out of the progress ring as well — otherwise the ring could + // never reach 100% once a weekly chore was finished for the week. + const weeklyTarget = Number(c.weekly_target) || 0; + if (weeklyTarget > 0 && Number((child.weekly_chore_progress || {})[c.id] || 0) >= weeklyTarget) return false; return true; }); } diff --git a/custom_components/taskmate/www/taskmate-panel.js b/custom_components/taskmate/www/taskmate-panel.js index ad89954a..b8a2ff23 100644 --- a/custom_components/taskmate/www/taskmate-panel.js +++ b/custom_components/taskmate/www/taskmate-panel.js @@ -345,6 +345,8 @@ class TaskMatePanel extends HTMLElement { ['Pool refund (reward sold out):', 'activity.reason_pool_refund_sold_out'], ['Pool refund (reward cost reduced):', 'activity.reason_pool_refund_cost_reduced'], ['Pool refund (reward deleted):', 'activity.reason_pool_refund_deleted'], + ['Pool refund (reward funding changed):', 'activity.reason_pool_refund_funding_changed'], + ['Pool refund (reward assignment changed):', 'activity.reason_pool_refund_assignment_changed'], ['Penalty:', 'activity.reason_penalty'], ['Bonus:', 'activity.reason_bonus'], ]; @@ -1417,6 +1419,7 @@ class TaskMatePanel extends HTMLElement { timed_rate_points: 10, timed_rate_minutes: 5, timed_max_daily_minutes: 0, assigned_to: [], requires_approval: true, time_category: "anytime", completion_sound: "coin", daily_limit: 1, + weekly_target: 0, difficulty: "medium", claim_allowance_minutes: 0, schedule_mode: "specific_days", @@ -1657,6 +1660,7 @@ class TaskMatePanel extends HTMLElement { completion_sound: d.completion_sound || "coin", difficulty: d.difficulty || "medium", daily_limit: Number(d.daily_limit) || 1, + weekly_target: Math.max(0, Number(d.weekly_target) || 0), schedule_mode: d.schedule_mode || "specific_days", due_days: d.due_days || [], recurrence: d.recurrence || "weekly", @@ -3235,7 +3239,7 @@ class TaskMatePanel extends HTMLElement { ts: c.approved_at || c.claimed_at, kind: "claim", child: (childById[c.child_id] || {}).name || "?", label: `${this._t("panel.activity_claimed_reward", {name: (rewardById[c.reward_id] || {}).name || this._t("panel.activity_deleted_reward")})}`, - points: -((rewardById[c.reward_id] || {}).cost || 0), + points: -(c.approved_cost ?? (rewardById[c.reward_id] || {}).cost ?? 0), })); transactions.forEach(t => events.push({ ts: t.created_at, kind: "manual", @@ -3283,6 +3287,10 @@ class TaskMatePanel extends HTMLElement { chorePoints = Math.floor(c.timed_duration_seconds / rateSeconds) * (chore.timed_rate_points || 0); } } + // What the child was promised when they submitted beats anything + // recalculated here: a chore edited while the work sat in the + // queue, or a speed/roulette bonus that no longer applies. + chorePoints = c.submitted_points ?? chorePoints; const photoCap = [choreName, (child && child.name) || "", c.completed_at ? new Date(c.completed_at).toLocaleString([], { month: "short", day: "numeric", hour: "2-digit", minute: "2-digit" }) : ""].filter(Boolean).join(" · "); return `
@@ -3464,6 +3472,11 @@ class TaskMatePanel extends HTMLElement { ? this._t("panel.common_one_shot") : ((c.due_days || []).length === 0 ? this._t("panel.common_daily") : (c.due_days || []).map(d => this._labelOf(DAYS, d)).join(" · ")); const schedClass = c.schedule_mode === "recurring" ? "tm-pill-accent" : c.schedule_mode === "one_shot" ? "tm-pill-warn" : "tm-pill-success"; + // A weekly quota doesn't replace the day list — the chore is still only + // offered on those days, it just stops once the week's count is filled. + const weeklyPill = Number(c.weekly_target) > 0 + ? ` ${this._t("panel.chore_weekly_target_pill", { count: Number(c.weekly_target) })}` + : ""; const modeBadge = c.assignment_mode && c.assignment_mode !== "everyone" ? `${this._t(`panel.assign_${c.assignment_mode}_short`)}` : ""; const nameCell = renaming @@ -3485,7 +3498,7 @@ class TaskMatePanel extends HTMLElement { ${this._esc(this._timeCategoryLabel(c.time_category))} ${assignedNames} ${modeBadge} ${currentName} - ${this._esc(schedLabel)} + ${this._esc(schedLabel)}${weeklyPill} ${c.requires_approval ? `${this._t("panel.common_yes")}` : `${this._t("panel.common_no")}`} `; @@ -4539,7 +4552,7 @@ class TaskMatePanel extends HTMLElement {
${this._t("panel.settings_card_design_label")}${this._t("panel.settings_card_design_hint")}
@@ -5433,6 +5446,8 @@ class TaskMatePanel extends HTMLElement { `).join("")}
+ ${this._field(this._t("panel.chore_weekly_target_label"), "weekly_target", d.weekly_target || 0, "number", + this._t("panel.chore_weekly_target_hint"))} ` : "", showRecurring ? `
diff --git a/custom_components/taskmate/www/taskmate-parent-dashboard-card.js b/custom_components/taskmate/www/taskmate-parent-dashboard-card.js index 47bac0e0..ff8724d7 100644 --- a/custom_components/taskmate/www/taskmate-parent-dashboard-card.js +++ b/custom_components/taskmate/www/taskmate-parent-dashboard-card.js @@ -1042,6 +1042,10 @@ class TaskMateParentDashboardCard extends LitElement { if (c.schedule_mode === 'recurring') { if (perChild && perChild[child.id] === false) return false; } + // Weekly target (#883): quota filled for the week, so it is neither + // outstanding nor part of today's total. + const weeklyTarget = Number(c.weekly_target) || 0; + if (weeklyTarget > 0 && Number((child.weekly_chore_progress || {})[c.id] || 0) >= weeklyTarget) return false; return true; }); const childChoreIds = new Set(childChores.map(c => c.id)); diff --git a/www/community/clock-weather-card/clock-weather-card.js b/www/community/clock-weather-card/clock-weather-card.js index b5e753ad..1e7375cd 100644 --- a/www/community/clock-weather-card/clock-weather-card.js +++ b/www/community/clock-weather-card/clock-weather-card.js @@ -15,7 +15,7 @@ const i=window,r=i.ShadowRoot&&(void 0===i.ShadyCSS||i.ShadyCSS.nativeShadow)&&" * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ -var g;b[y]=!0,b.elementProperties=new Map,b.elementStyles=[],b.shadowRootOptions={mode:"open"},null==h||h({ReactiveElement:b}),(null!==(l=c.reactiveElementVersions)&&void 0!==l?l:c.reactiveElementVersions=[]).push("1.6.3");const w=window,v=w.trustedTypes,k=v?v.createPolicy("lit-html",{createHTML:e=>e}):void 0,x="$lit$",T=`lit$${(Math.random()+"").slice(9)}$`,M="?"+T,S=`<${M}>`,_=document,N=()=>_.createComment(""),O=e=>null===e||"object"!=typeof e&&"function"!=typeof e,A=Array.isArray,$="[ \t\n\f\r]",Z=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,C=/-->/g,B=/>/g,U=RegExp(`>|${$}(?:([^\\s"'>=/]+)(${$}*=${$}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),G=/'/g,V=/"/g,E=/^(?:script|style|textarea|title)$/i,D=(e=>(t,...i)=>({_$litType$:e,strings:t,values:i}))(1),j=Symbol.for("lit-noChange"),z=Symbol.for("lit-nothing"),I=new WeakMap,F=_.createTreeWalker(_,129,null,!1);function L(e,t){if(!Array.isArray(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==k?k.createHTML(t):t}const P=(e,t)=>{const i=e.length-1,r=[];let s,a=2===t?"":"",n=Z;for(let t=0;t"===l[0]?(n=null!=s?s:Z,c=-1):void 0===l[1]?c=-2:(c=n.lastIndex-l[2].length,o=l[1],n=void 0===l[3]?U:'"'===l[3]?V:G):n===V||n===G?n=U:n===C||n===B?n=Z:(n=U,s=void 0);const u=n===U&&e[t+1].startsWith("/>")?" ":"";a+=n===Z?i+S:c>=0?(r.push(o),i.slice(0,c)+x+i.slice(c)+T+u):i+T+(-2===c?(r.push(void 0),t):u)}return[L(e,a+(e[i]||"")+(2===t?"":"")),r]};class H{constructor({strings:e,_$litType$:t},i){let r;this.parts=[];let s=0,a=0;const n=e.length-1,o=this.parts,[l,c]=P(e,t);if(this.el=H.createElement(l,i),F.currentNode=this.el.content,2===t){const e=this.el.content,t=e.firstChild;t.remove(),e.append(...t.childNodes)}for(;null!==(r=F.nextNode())&&o.length0){r.textContent=v?v.emptyScript:"";for(let i=0;iA(e)||"function"==typeof(null==e?void 0:e[Symbol.iterator]))(e)?this.T(e):this._(e)}k(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}$(e){this._$AH!==e&&(this._$AR(),this._$AH=this.k(e))}_(e){this._$AH!==z&&O(this._$AH)?this._$AA.nextSibling.data=e:this.$(_.createTextNode(e)),this._$AH=e}g(e){var t;const{values:i,_$litType$:r}=e,s="number"==typeof r?this._$AC(e):(void 0===r.el&&(r.el=H.createElement(L(r.h,r.h[0]),this.options)),r);if((null===(t=this._$AH)||void 0===t?void 0:t._$AD)===s)this._$AH.v(i);else{const e=new q(s,this),t=e.u(this.options);e.v(i),this.$(t),this._$AH=e}}_$AC(e){let t=I.get(e.strings);return void 0===t&&I.set(e.strings,t=new H(e)),t}T(e){A(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let i,r=0;for(const s of e)r===t.length?t.push(i=new R(this.k(N()),this.k(N()),this,this.options)):i=t[r],i._$AI(s),r++;r2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=z}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(e,t=this,i,r){const s=this.strings;let a=!1;if(void 0===s)e=W(this,e,t,0),a=!O(e)||e!==this._$AH&&e!==j,a&&(this._$AH=e);else{const r=e;let n,o;for(e=s[0],n=0;ne}):void 0,x="$lit$",T=`lit$${(Math.random()+"").slice(9)}$`,M="?"+T,S=`<${M}>`,_=document,N=()=>_.createComment(""),O=e=>null===e||"object"!=typeof e&&"function"!=typeof e,A=Array.isArray,$="[ \t\n\f\r]",C=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Z=/-->/g,B=/>/g,U=RegExp(`>|${$}(?:([^\\s"'>=/]+)(${$}*=${$}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),G=/'/g,V=/"/g,E=/^(?:script|style|textarea|title)$/i,D=(e=>(t,...i)=>({_$litType$:e,strings:t,values:i}))(1),j=Symbol.for("lit-noChange"),z=Symbol.for("lit-nothing"),I=new WeakMap,F=_.createTreeWalker(_,129,null,!1);function L(e,t){if(!Array.isArray(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==k?k.createHTML(t):t}const P=(e,t)=>{const i=e.length-1,r=[];let s,a=2===t?"":"",n=C;for(let t=0;t"===l[0]?(n=null!=s?s:C,c=-1):void 0===l[1]?c=-2:(c=n.lastIndex-l[2].length,o=l[1],n=void 0===l[3]?U:'"'===l[3]?V:G):n===V||n===G?n=U:n===Z||n===B?n=C:(n=U,s=void 0);const u=n===U&&e[t+1].startsWith("/>")?" ":"";a+=n===C?i+S:c>=0?(r.push(o),i.slice(0,c)+x+i.slice(c)+T+u):i+T+(-2===c?(r.push(void 0),t):u)}return[L(e,a+(e[i]||"")+(2===t?"":"")),r]};class H{constructor({strings:e,_$litType$:t},i){let r;this.parts=[];let s=0,a=0;const n=e.length-1,o=this.parts,[l,c]=P(e,t);if(this.el=H.createElement(l,i),F.currentNode=this.el.content,2===t){const e=this.el.content,t=e.firstChild;t.remove(),e.append(...t.childNodes)}for(;null!==(r=F.nextNode())&&o.length0){r.textContent=v?v.emptyScript:"";for(let i=0;iA(e)||"function"==typeof(null==e?void 0:e[Symbol.iterator]))(e)?this.T(e):this._(e)}k(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}$(e){this._$AH!==e&&(this._$AR(),this._$AH=this.k(e))}_(e){this._$AH!==z&&O(this._$AH)?this._$AA.nextSibling.data=e:this.$(_.createTextNode(e)),this._$AH=e}g(e){var t;const{values:i,_$litType$:r}=e,s="number"==typeof r?this._$AC(e):(void 0===r.el&&(r.el=H.createElement(L(r.h,r.h[0]),this.options)),r);if((null===(t=this._$AH)||void 0===t?void 0:t._$AD)===s)this._$AH.v(i);else{const e=new q(s,this),t=e.u(this.options);e.v(i),this.$(t),this._$AH=e}}_$AC(e){let t=I.get(e.strings);return void 0===t&&I.set(e.strings,t=new H(e)),t}T(e){A(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let i,r=0;for(const s of e)r===t.length?t.push(i=new R(this.k(N()),this.k(N()),this,this.options)):i=t[r],i._$AI(s),r++;r2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=z}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(e,t=this,i,r){const s=this.strings;let a=!1;if(void 0===s)e=W(this,e,t,0),a=!O(e)||e!==this._$AH&&e!==j,a&&(this._$AH=e);else{const r=e;let n,o;for(e=s[0],n=0;n"method"===t.kind&&t.descriptor&&!("value"in t.descriptor)?{...t * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause - */;class we{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,i){this._$Ct=e,this._$AM=t,this._$Ci=i}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}}const ve="ontouchstart"in window||navigator.maxTouchPoints>0||navigator.maxTouchPoints>0;class ke extends HTMLElement{constructor(){super(),this.holdTime=500,this.held=!1,this.ripple=document.createElement("mwc-ripple")}connectedCallback(){Object.assign(this.style,{position:"absolute",width:ve?"100px":"50px",height:ve?"100px":"50px",transform:"translate(-50%, -50%)",pointerEvents:"none",zIndex:"999"}),this.appendChild(this.ripple),this.ripple.primary=!0,["touchcancel","mouseout","mouseup","touchmove","mousewheel","wheel","scroll"].forEach(e=>{document.addEventListener(e,()=>{clearTimeout(this.timer),this.stopAnimation(),this.timer=void 0},{passive:!0})})}bind(e,t){if(e.actionHandler)return;e.actionHandler=!0,e.addEventListener("contextmenu",e=>{const t=e||window.event;return t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.cancelBubble=!0,t.returnValue=!1,!1});const i=e=>{var t,i;this.held=!1;const r=null!==(t=e.pageX)&&void 0!==t?t:e.touches[0].pageX,s=null!==(i=e.pageY)&&void 0!==i?i:e.touches[0].pageY;this.timer=window.setTimeout(()=>{this.startAnimation(r,s),this.held=!0},this.holdTime)},r=i=>{i.preventDefault(),["touchend","touchcancel"].includes(i.type)&&void 0===this.timer||(clearTimeout(this.timer),this.stopAnimation(),this.timer=void 0,this.held?me(e,"action",{action:"hold"}):t.hasDoubleClick?"click"===i.type&&i.detail<2||!this.dblClickTimeout?this.dblClickTimeout=window.setTimeout(()=>{this.dblClickTimeout=void 0,me(e,"action",{action:"tap"})},250):(clearTimeout(this.dblClickTimeout),this.dblClickTimeout=void 0,me(e,"action",{action:"double_tap"})):me(e,"action",{action:"tap"}))};e.addEventListener("touchstart",i,{passive:!0}),e.addEventListener("touchend",r),e.addEventListener("touchcancel",r),e.addEventListener("mousedown",i,{passive:!0}),e.addEventListener("click",r),e.addEventListener("keyup",e=>{13===e.keyCode&&r(e)})}startAnimation(e,t){Object.assign(this.style,{left:`${e}px`,top:`${t}px`,display:null}),this.ripple.disabled=!1,this.ripple.active=!0,this.ripple.unbounded=!0}stopAnimation(){this.ripple.active=!1,this.ripple.disabled=!0,this.style.display="none"}}customElements.get("action-handler-clock-weather")||customElements.define("action-handler-clock-weather",ke);const xe=(e,t)=>{const i=(()=>{const e=document.body;if(e.querySelector("action-handler-clock-weather"))return e.querySelector("action-handler-clock-weather");const t=document.createElement("action-handler-clock-weather");return e.appendChild(t),t})();i&&i.bind(e,t)},Te=(e=>(...t)=>({_$litDirective$:e,values:t}))(class extends we{update(e,[t]){return xe(e.element,t),j}render(e){}});var Me={"clear-night":"صافي",cloudy:"غائم",fog:"ضباب",hail:"برد",lightning:"عواصف رعدية","lightning-rainy":"عواصف رعدية ممطرة",partlycloudy:"غائم جزئياً",pouring:"غزير",rainy:"ممطر",snowy:"ثلجي","snowy-rainy":"مطر ثلجي",sunny:"مشمس",windy:"عاصف","windy-variant":"رياح قوية",exceptional:"استثنائي"},Se={1:"الإثنين",2:"الثلاثاء",3:"الأربعاء",4:"الخميس",5:"الجمعة",6:"السبت",7:"الأحد"},_e={aqi:"مؤشر جودة الهواء",humidity:"رطوبة","feels-like":"يشعر كأنه"},Ne={weather:Me,day:Se,misc:_e},Oe=Object.freeze({__proto__:null,day:Se,default:Ne,misc:_e,weather:Me}),Ae={"clear-night":"Ясно",cloudy:"Облачно",fog:"Мъгла",hail:"Градушка",lightning:"Гръмотевични бури","lightning-rainy":"Дъждовни гръмотевични бури",partlycloudy:"Частична облачност",pouring:"Пороен дъжд",rainy:"Дъждовно",snowy:"Сняг","snowy-rainy":"Суграшица",sunny:"Слънчево",windy:"Ветровито","windy-variant":"Силен вятър",exceptional:"Изключително"},$e={1:"Пн",2:"Вт",3:"Ср",4:"Чт",5:"Пт",6:"Сб",7:"Нд"},Ze={aqi:"AQI",humidity:"Влажност","feels-like":"Усеща се като"},Ce={weather:Ae,day:$e,misc:Ze},Be=Object.freeze({__proto__:null,day:$e,default:Ce,misc:Ze,weather:Ae}),Ue={"clear-night":"Klart",cloudy:"Overskyet",fog:"Tåge",hail:"Hagl",lightning:"Lyn","lightning-rainy":"Regnvejr og lyn",partlycloudy:"Delvist overskyet",pouring:"Regnvejr",rainy:"Regnfuldt",snowy:"Sne","snowy-rainy":"Slud",sunny:"Solrigt",windy:"Blæsende","windy-variant":"Stærk vind",exceptional:"Kaos"},Ge={1:"Man",2:"Tir",3:"Ons",4:"Tor",5:"Fre",6:"Lør",7:"Søn"},Ve={aqi:"AQI",humidity:"luftfugtighed","feels-like":"Føles som"},Ee={weather:Ue,day:Ge,misc:Ve},De=Object.freeze({__proto__:null,day:Ge,default:Ee,misc:Ve,weather:Ue}),je={"clear-night":"Serè",cloudy:"Ennuvolat",fog:"Boira",hail:"Calamarsa",lightning:"Tempesta elèctrica","lightning-rainy":"Tempesta",partlycloudy:"Parcialment ennuvolat",pouring:"Aiguat",rainy:"Plujós",snowy:"Neu","snowy-rainy":"Aiguaneu",sunny:"Assolellat",windy:"Ventós","windy-variant":"Vent fort",exceptional:"Excepcional"},ze={1:"Dl.",2:"Dt.",3:"Dc.",4:"Dj.",5:"Dv.",6:"Ds.",7:"Dg."},Ie={aqi:"AQI",humidity:"humitat","feels-like":"Sensació tèrmica"},Fe={weather:je,day:ze,misc:Ie},Le=Object.freeze({__proto__:null,day:ze,default:Fe,misc:Ie,weather:je}),Pe={"clear-night":"Jasno",cloudy:"Zataženo",fog:"Mlha",hail:"Kroupy",lightning:"Bouřky","lightning-rainy":"Bouřky s deštěm",partlycloudy:"Částečně zataženo",pouring:"Silný déšť",rainy:"Déšť",snowy:"Sníh","snowy-rainy":"Sníh s deštěm",sunny:"Slunečno",windy:"Vítr","windy-variant":"Prudký vítr",exceptional:"Nevšední"},He={1:"Po",2:"Út",3:"St",4:"Čt",5:"Pá",6:"So",7:"Ne"},We={aqi:"AQI",humidity:"vlhkost","feels-like":"pocitová teplota"},qe={weather:Pe,day:He,misc:We},Re={"clear-night":"Noson Glir",cloudy:"Cymylog",fog:"Niwl",hail:"Cesair",lightning:"Mellt a Tharannau","lightning-rainy":"Mellt, Tharannau a Glaw",partlycloudy:"Ysbeidiau Heulog",pouring:"Glawio'n Drwm",rainy:"Glawio",snowy:"Bwrw Eira","snowy-rainy":"Eirlaw",sunny:"Heulog",windy:"Gwyntog","windy-variant":"Gwyntoedd Cryfion",exceptional:"Eithriadol"},Ye={1:"Llun",2:"Maw",3:"Mer",4:"Iau",5:"Gwe",6:"Sad",7:"Sul"},Je={aqi:"MAA",humidity:"Lleithder","feels-like":"Teimlo fel"},Qe={weather:Re,day:Ye,misc:Je},Ke={"clear-night":"Klar",cloudy:"Bewölkt",fog:"Nebel",hail:"Hagel",lightning:"Gewitter","lightning-rainy":"Gewitterregen",partlycloudy:"Teils bewölkt",pouring:"Starkregen",rainy:"Regen",snowy:"Schneefall","snowy-rainy":"Schneeregen",sunny:"Sonnig",windy:"Windig","windy-variant":"Stürmisch",exceptional:"Unwetter"},Xe={1:"Mo",2:"Di",3:"Mi",4:"Do",5:"Fr",6:"Sa",7:"So"},et={aqi:"AQI",humidity:"Luftfeuchtigkeit","feels-like":"Gefühlt"},tt={weather:Ke,day:Xe,misc:et},it={"clear-night":"Καθαρός",cloudy:"Συννεφιασμένος",fog:"Ομίχλη",hail:"Χαλάζι",lightning:"Καταιγίδες","lightning-rainy":"Καταιγίδες με βροχή",partlycloudy:"Λίγα σύννεφα",pouring:"Έντονη βροχή",rainy:"Βροχερός",snowy:"Χιόνι","snowy-rainy":"Χιονόνερο",sunny:"Ηλιόλουστος",windy:"Θυελλώδης","windy-variant":"Έντονοι άνεμοι",exceptional:"Εξαιρετικός"},rt={1:"Δευ",2:"Τρί",3:"Τετ",4:"Πεμ",5:"Παρ",6:"Σαβ",7:"Κυρ"},st={aqi:"AQI",humidity:"υγρασία","feels-like":"Αίσθηση σαν"},at={weather:it,day:rt,misc:st},nt={"clear-night":"Clear",cloudy:"Cloudy",fog:"Fog",hail:"Hail",lightning:"Thunderstorms","lightning-rainy":"Rainy thunderstorms",partlycloudy:"Partly cloudy",pouring:"Pouring",rainy:"Rainy",snowy:"Snowy","snowy-rainy":"Sleet",sunny:"Sunny",windy:"Windy","windy-variant":"Strong wind",exceptional:"Exceptional"},ot={1:"Mon",2:"Tue",3:"Wed",4:"Thu",5:"Fri",6:"Sat",7:"Sun"},lt={aqi:"AQI",humidity:"Humidity","feels-like":"Feels like"},ct={weather:nt,day:ot,misc:lt},dt={"clear-night":"Despejado",cloudy:"Nublado",fog:"Niebla",hail:"Granizo",lightning:"Tormenta eléctrica","lightning-rainy":"Tormenta",partlycloudy:"Parcialmente nublado",pouring:"Diluviando",rainy:"Lluvioso",snowy:"Nieve","snowy-rainy":"Aguanieve",sunny:"Soleado",windy:"Viento","windy-variant":"Fuerte viento",exceptional:"Caos"},ut={1:"Lun",2:"Mar",3:"Mie",4:"Jue",5:"Vie",6:"Sab",7:"Dom"},ht={aqi:"AQI",humidity:"humedad","feels-like":"Sensación térmica"},mt={weather:dt,day:ut,misc:ht},ft={"clear-night":"Selge",cloudy:"Pilvine",fog:"Udu",hail:"Rahe",lightning:"Äike","lightning-rainy":"Äiksevihm",partlycloudy:"Vahelduv pilvisus",pouring:"Paduvihm",rainy:"Vihm",snowy:"Lumi","snowy-rainy":"Lörts",sunny:"Päike",windy:"Tuuline","windy-variant":"Tuuline",exceptional:"Äärmuslik"},pt={1:"E",2:"T",3:"K",4:"N",5:"R",6:"L",7:"P"},yt={aqi:"AQI",humidity:"niiskus","feels-like":"Tundub nagu"},bt={weather:ft,day:pt,misc:yt},gt={"clear-night":"Selkeää",cloudy:"Pilvistä",fog:"Sumua",hail:"Raekuuroja",lightning:"Ukkosta","lightning-rainy":"Ukkoskuuroja",partlycloudy:"Puolipilvistä",pouring:"Voimakasta vesisadetta",rainy:"Vesisadetta",snowy:"Lumisadetta","snowy-rainy":"Räntäsadetta",sunny:"Selkeää",windy:"Tuulista","windy-variant":"Voimakasta tuulta",exceptional:"Poikkeuksellista"},wt={1:"Ma",2:"Ti",3:"Ke",4:"To",5:"Pe",6:"La",7:"Su"},vt={aqi:"AQI",humidity:"kosteus","feels-like":"Tuntuu kuin"},kt={weather:gt,day:wt,misc:vt},xt={"clear-night":"Dégagé",cloudy:"Nuageux",fog:"Brouillard",hail:"Grêle",lightning:"Orages","lightning-rainy":"Orages et pluie",partlycloudy:"Partiellement nuageux",pouring:"Pluie battante",rainy:"Pluie",snowy:"Neige","snowy-rainy":"Neige fondante",sunny:"Ensoleillé",windy:"Venteux","windy-variant":"Vent fort",exceptional:"Exceptionnelle"},Tt={1:"Lun",2:"Mar",3:"Mer",4:"Jeu",5:"Ven",6:"Sam",7:"Dim"},Mt={aqi:"AQI",humidity:"humidité","feels-like":"Ressentie"},St={weather:xt,day:Tt,misc:Mt},_t={"clear-night":"בהיר",cloudy:"מעונן",fog:"ערפל",hail:"ברד",lightning:"סופות רעמים","lightning-rainy":"סופות רעמים גשומות",partlycloudy:"מעונן חלקית",pouring:"גשם זלעפות",rainy:"גשום",snowy:"מושלג","snowy-rainy":"ברד",sunny:"שמשי",windy:"סוער","windy-variant":"רוח חזקה",exceptional:"חריג"},Nt={1:"שני",2:"שלישי",3:"רביעי",4:"חמישי",5:"שישי",6:"שבת",7:"ראשון"},Ot={aqi:"AQI",humidity:"לחות","feels-like":"מרגיש כמו"},At={weather:_t,day:Nt,misc:Ot},$t={"clear-night":"Tiszta",cloudy:"Felhős",fog:"Ködös",hail:"Jégeső",lightning:"Villámlás","lightning-rainy":"Zivatar",partlycloudy:"Helyenként felhős",pouring:"Felhőszakadás",rainy:"Esős",snowy:"Havazás","snowy-rainy":"Havaseső, ónoseső",sunny:"Napos",windy:"Szeles","windy-variant":"Erős szél",exceptional:"Kivételes"},Zt={1:"H",2:"K",3:"Sze",4:"Cs",5:"P",6:"Szo",7:"V"},Ct={aqi:"AQI",humidity:"páratartalom","feels-like":"Hőérzet"},Bt={weather:$t,day:Zt,misc:Ct},Ut={"clear-night":"Čisto",cloudy:"Oblačno",fog:"Magla",hail:"Tuča",lightning:"Grmljavina","lightning-rainy":"Grmljavinsko nevrijeme",partlycloudy:"Oblačno",pouring:"Pouring",rainy:"Kiša",snowy:"Snijeg","snowy-rainy":"Snijeg i kiša",sunny:"Sunčano",windy:"Vjetrovito","windy-variant":"Jako vjetrovito",exceptional:"Izuzetno"},Gt={0:"Ned",1:"Pon",2:"Ut",3:"Sri",4:"Čet",5:"Pet",6:"Sub"},Vt={aqi:"AQI",humidity:"vlažnost","feels-like":"Osjet temperature"},Et={weather:Ut,day:Gt,misc:Vt},Dt={"clear-night":"Cerah",cloudy:"Berawan",fog:"Berkabut",hail:"Hujan es",lightning:"Petir","lightning-rainy":"Hujan petir",partlycloudy:"Cerah berawan",pouring:"Hujan deras",rainy:"Hujan",snowy:"Salju","snowy-rainy":"Hujan salju",sunny:"Cerah",windy:"Berangin","windy-variant":"Berangin kencang",exceptional:"Badai"},jt={1:"Sen",2:"Sel",3:"Rab",4:"Kam",5:"Jum",6:"Sab",7:"Min"},zt={aqi:"AQI",humidity:"Kelembapan","feels-like":"Terasa seperti"},It={weather:Dt,day:jt,misc:zt},Ft={"clear-night":"Heiðskýrt",cloudy:"Skýjað",fog:"Þoka",hail:"Hagl",lightning:"Eldingar","lightning-rainy":"Þrumur",partlycloudy:"Skýjað að hluta",pouring:"mikil rigning",rainy:"Rigning",snowy:"Snjókoma","snowy-rainy":"Él",sunny:"Sólríkt",windy:"Hvasst","windy-variant":"Stórmur",exceptional:"Óveður"},Lt={1:"Mán",2:"Þri",3:"Mið",4:"Fim",5:"Fös",6:"Lau",7:"Sun"},Pt={aqi:"AQI",humidity:"raki","feels-like":"Feels like"},Ht={weather:Ft,day:Lt,misc:Pt},Wt={"clear-night":"Sereno",cloudy:"Nuvoloso",fog:"Nebbia",hail:"Grandine",lightning:"Temporali","lightning-rainy":"Temporali con pioggia",partlycloudy:"Parzialmente nuvoloso",pouring:"Rovesci",rainy:"Pioggia",snowy:"Neve","snowy-rainy":"Nevischio",sunny:"Soleggiato",windy:"Vento","windy-variant":"Vento forte",exceptional:"Tempesta"},qt={1:"Lun",2:"Mar",3:"Mer",4:"Gio",5:"Ven",6:"Sab",7:"Dom"},Rt={aqi:"AQI",humidity:"umidità","feels-like":"Percepita"},Yt={weather:Wt,day:qt,misc:Rt},Jt={"clear-night":"晴れ",cloudy:"曇り",fog:"霧",hail:"ひょう",lightning:"雷","lightning-rainy":"雷雨",partlycloudy:"晴れ時々曇り",pouring:"大雨",rainy:"雨",snowy:"雪","snowy-rainy":"みぞれ",sunny:"晴れ",windy:"強風","windy-variant":"強風と曇り",exceptional:"異常気象"},Qt={1:"月",2:"火",3:"水",4:"木",5:"金",6:"土",7:"日"},Kt={aqi:"AQI",humidity:"湿度","feels-like":"体感温度"},Xt={weather:Jt,day:Qt,misc:Kt},ei={"clear-night":"맑음",cloudy:"구름많음",fog:"안개",hail:"우박",lightning:"번개","lightning-rainy":"번개, 뇌우",partlycloudy:"구름조금",pouring:"강한 비",rainy:"비",snowy:"눈","snowy-rainy":"진눈깨비",sunny:"맑음",windy:"바람","windy-variant":"매우 강한 바람",exceptional:"예외"},ti={1:"월",2:"화",3:"수",4:"목",5:"금",6:"토",7:"일"},ii={aqi:"대기환경지수",humidity:"습도","feels-like":"체감온도"},ri={weather:ei,day:ti,misc:ii},si={"clear-night":"kloer",cloudy:"bedeckt",fog:"Niwwel",hail:"Knëppelsteng",lightning:"Donnerwieder","lightning-rainy":"Donnerwieder",partlycloudy:"deels bedeckt",pouring:"staarke Reen",rainy:"Reen",snowy:"Schnéi","snowy-rainy":"Schnéireen",sunny:"Sonn",windy:"lëfteg","windy-variant":"staarke Wand",exceptional:"Onwieder"},ai={1:"Mé",2:"Dë",3:"Më",4:"Do",5:"Fr",6:"Sa",7:"So"},ni={aqi:"AQI",humidity:"Loftfiichtegkeet","feels-like":"Gefillt"},oi={weather:si,day:ai,misc:ni},li={"clear-night":"Giedra",cloudy:"Debesuota",fog:"Rūkas",hail:"Kruša",lightning:"Perkūnija","lightning-rainy":"Perkūnija su lietumi",partlycloudy:"Apsiniaukę",pouring:"Liūtis",rainy:"Lietus",snowy:"Sniegas","snowy-rainy":"Šlapdriba",sunny:"Saulėta",windy:"Vėjuota","windy-variant":"Stiprus vėjas",exceptional:"Audra"},ci={1:"Pr",2:"An",3:"Tr",4:"Kt",5:"Pn",6:"Št",7:"Sk"},di={aqi:"AQI",humidity:"drėgmė","feels-like":"Feels like"},ui={weather:li,day:ci,misc:di},hi={"clear-night":"Klart",cloudy:"Overskyet",fog:"Tåke",hail:"Hagl",lightning:"Lyn","lightning-rainy":"Lyn, regn",partlycloudy:"Delvis overskyet",pouring:"Pøsregn",rainy:"Regn",snowy:"Snø","snowy-rainy":"Sludd",sunny:"Sol",windy:"Vindfullt","windy-variant":"Sterk vind",exceptional:"Storm"},mi={1:"Man",2:"Tir",3:"Ons",4:"Tor",5:"Fre",6:"Lør",7:"Søn"},fi={aqi:"AQI",humidity:"fuktighet","feels-like":"Føles som"},pi={weather:hi,day:mi,misc:fi},yi={"clear-night":"Helder",cloudy:"Bewolkt",fog:"Mistig",hail:"Hagel",lightning:"Onweersbuien","lightning-rainy":"Onweersbuien met regen",partlycloudy:"Half bewolkt",pouring:"Regen",rainy:"Regenachtig",snowy:"Sneeuw","snowy-rainy":"Natte sneeuw",sunny:"Zonnig",windy:"Winderig","windy-variant":"Storm",exceptional:"Uitzonderlijk"},bi={1:"Ma",2:"Di",3:"Wo",4:"Do",5:"Vr",6:"Za",7:"Zo"},gi={aqi:"AQI",humidity:"Vochtigheid","feels-like":"Gevoelstemperatuur"},wi={weather:yi,day:bi,misc:gi},vi={"clear-night":"pogodna noc",cloudy:"pochmurno",fog:"mgła",hail:"grad",lightning:"błyskawice","lightning-rainy":"burza",partlycloudy:"częściowe zachmurzenie",pouring:"ulewa",rainy:"deszczowo",snowy:"opady śniegu","snowy-rainy":"deszcz ze śniegiem",sunny:"słonecznie",windy:"wietrznie","windy-variant":"wietrznie",exceptional:"warunki nadzwyczajne"},ki={1:"pon.",2:"wt.",3:"śr.",4:"czw.",5:"pt.",6:"sob.",7:"niedz."},xi={aqi:"AQI",humidity:"wilgotność","feels-like":"Odczuwalne"},Ti={weather:vi,day:ki,misc:xi},Mi={"clear-night":"Céu limpo, sem nuvens",cloudy:"Nublado",fog:"Nevoeiro",hail:"Granizo",lightning:"Raios","lightning-rainy":"Chuvoso com raios",partlycloudy:"Parcialmente nublado",pouring:"Torrencial",rainy:"Chuvoso",snowy:"Neve","snowy-rainy":"Chuvoso com neve",sunny:"Ensolarado",windy:"Ventania","windy-variant":"Ventania forte",exceptional:"Excepcional"},Si={1:"Seg",2:"Ter",3:"Qua",4:"Qui",5:"Sex",6:"Sáb",7:"Dom"},_i={aqi:"AQI",humidity:"umidade","feels-like":"Sensação térmica"},Ni={weather:Mi,day:Si,misc:_i},Oi={"clear-night":"Céu limpo, sem nuvens",cloudy:"Nublado",fog:"Nevoeiro",hail:"Granizo",lightning:"Raios","lightning-rainy":"Chuvoso com raios",partlycloudy:"Parcialmente nublado",pouring:"Torrencial",rainy:"Chuvoso",snowy:"Neve","snowy-rainy":"Chuvoso com neve",sunny:"Ensolarado",windy:"Ventania","windy-variant":"Ventania forte",exceptional:"Excepcional"},Ai={1:"Seg",2:"Ter",3:"Qua",4:"Qui",5:"Sex",6:"Sáb",7:"Dom"},$i={aqi:"AQI",humidity:"humidade","feels-like":"Sensação térmica"},Zi={weather:Oi,day:Ai,misc:$i},Ci={"clear-night":"Senin",cloudy:"Înnorat",fog:"Ceață",hail:"Grindină",lightning:"Fulgere","lightning-rainy":"Furtuni cu ploaie",partlycloudy:"Parțial înnorat",pouring:"Averse",rainy:"Ploaie",snowy:"Ninsoare","snowy-rainy":"Lapoviță",sunny:"Însorit",windy:"Vânt","windy-variant":"Vânt puternic",exceptional:"Furtună"},Bi={1:"Lun",2:"Mar",3:"Mie",4:"Joi",5:"Vin",6:"Sâm",7:"Dum"},Ui={aqi:"AQI",humidity:"umiditate","feels-like":"Temp. resimțită"},Gi={weather:Ci,day:Bi,misc:Ui},Vi={"clear-night":"Ясно",cloudy:"Облачно",fog:"Туман",hail:"Град",lightning:"Гроза","lightning-rainy":"Дождь с грозой",partlycloudy:"Переменная облачность",pouring:"Проливной дождь",rainy:"Дождь",snowy:"Снег","snowy-rainy":"Мокрый снег",sunny:"Солнечно",windy:"Ветер","windy-variant":"Сильный ветер",exceptional:"Буря"},Ei={1:"Пн",2:"Вт",3:"Ср",4:"Чт",5:"Пт",6:"Сб",7:"Вс"},Di={aqi:"AQI",humidity:"влажность","feels-like":"Ощущается как"},ji={weather:Vi,day:Ei,misc:Di},zi={"clear-night":"Jasná noc",cloudy:"Zamračené",fog:"Hmla",hail:"Krupobitie",lightning:"Búrky","lightning-rainy":"Búrky s dažďom",partlycloudy:"Polooblačno",pouring:"Silný dážď",rainy:"Daždivo",snowy:"Sneženie","snowy-rainy":"Dážď so snehom",sunny:"Slnečno",windy:"Veterno","windy-variant":"Prudký vietor",exceptional:"Neobyčajné počasie (Chaos)"},Ii={1:"Pon",2:"Uto",3:"Str",4:"Štv",5:"Pia",6:"Sob",7:"Ned"},Fi={aqi:"AQI",humidity:"vlhkosť","feels-like":"pocitová teplota"},Li={weather:zi,day:Ii,misc:Fi},Pi={"clear-night":"Jasno",cloudy:"Oblačno",fog:"Megla",hail:"Toča",lightning:"Nevihte","lightning-rainy":"Nevihte z dežjem",partlycloudy:"Delno oblačno",pouring:"Lije",rainy:"Deževno",snowy:"Sneženo","snowy-rainy":"Žled",sunny:"Sončno",windy:"Vetrovno","windy-variant":"Močan veter",exceptional:"Izjemno vreme"},Hi={1:"Pon",2:"Tor",3:"Sre",4:"Čet",5:"Pet",6:"Sob",7:"Ned"},Wi={aqi:"AQI",humidity:"vlažnost","feels-like":"Občutek temperature"},qi={weather:Pi,day:Hi,misc:Wi},Ri={"clear-night":"Ведро",cloudy:"Облачно",fog:"Магла",hail:"Град",lightning:"Грмљавина","lightning-rainy":"Киша уз грмљавину",partlycloudy:"Делимично облачно",pouring:"Пљусак",rainy:"Киша",snowy:"Снег","snowy-rainy":"Суснежица",sunny:"Сунчано",windy:"Ветар","windy-variant":"Јак ветар",exceptional:"Изузетно"},Yi={1:"Пон",2:"Уто",3:"Сре",4:"Чет",5:"Пет",6:"Суб",7:"Нед"},Ji={aqi:"AQI",humidity:"Влажност","feels-like":"Feels like"},Qi={weather:Ri,day:Yi,misc:Ji},Ki={"clear-night":"Vedro",cloudy:"Oblačno",fog:"Magla",hail:"Grad",lightning:"Grmljavina","lightning-rainy":"Kiša uz grmljavinu",partlycloudy:"Delimično oblačno",pouring:"Pljusak",rainy:"Kiša",snowy:"Sneg","snowy-rainy":"Susnežica",sunny:"Sunčano",windy:"Vetar","windy-variant":"Jak vetar",exceptional:"Izuzetno"},Xi={1:"Pon",2:"Uto",3:"Sre",4:"Čet",5:"Pet",6:"Sub",7:"Ned"},er={aqi:"AQI",humidity:"Vlažnost","feels-like":"Feels like"},tr={weather:Ki,day:Xi,misc:er},ir={"clear-night":"Klart, natt",cloudy:"Molnigt",fog:"Dimma",hail:"Hagel",lightning:"Åska","lightning-rainy":"Åska, regnigt",partlycloudy:"Delvis molnigt",pouring:"Ösregn",rainy:"Regnigt",snowy:"Snöigt","snowy-rainy":"Snöblandat regn",sunny:"Soligt",windy:"Blåsigt","windy-variant":"Stark blåst",exceptional:"Exceptionellt"},rr={1:"Mån",2:"Tis",3:"Ons",4:"Tor",5:"Fre",6:"Lör",7:"Sön"},sr={aqi:"AQI",humidity:"fuktighet","feels-like":"Känns som"},ar={weather:ir,day:rr,misc:sr},nr={"clear-night":"ท้องฟ้าแจ่มใส",cloudy:"มีเมฆเป็นส่วนมาก",fog:"หมอก",hail:"ลูกเห็บ",lightning:"พายุฝนฟ้าคะนอง","lightning-rainy":"ฝนฟ้าคะนอง",partlycloudy:"มีเมฆบางส่วน",pouring:"ฝนตกหนัก",rainy:"ฝนตก",snowy:"หิมะตก","snowy-rainy":"ฝนตกเป็นลูกเห็บ",sunny:"แดดจัด",windy:"มีลมจัด","windy-variant":"ลมแรง",exceptional:"Exceptional"},or={1:"จ.",2:"อ.",3:"พ.",4:"พฤ.",5:"ศ.",6:"ส.",7:"อา."},lr={aqi:"AQI",humidity:"ความชื้น","feels-like":"รู้สึกเหมือน"},cr={weather:nr,day:or,misc:lr},dr={"clear-night":"Açık",cloudy:"Bulutlu",fog:"Sis",hail:"Dolu",lightning:"Gökgürültülü","lightning-rainy":"Gökgürültülü Yağmurlu",partlycloudy:"Parçalı Bulutlu",pouring:"Sağanak",rainy:"Yağmurlu",snowy:"Karlı","snowy-rainy":"Sulu Kar",sunny:"Güneşli",windy:"Rüzgarlı","windy-variant":"Güçlü Rüzgar",exceptional:"Mükemmel"},ur={1:"Pzt",2:"Sal",3:"Çrş",4:"Prş",5:"Cum",6:"Cts",7:"Pzr"},hr={aqi:"AQI",humidity:"nem","feels-like":"Hissedilen"},mr={weather:dr,day:ur,misc:hr},fr={"clear-night":"Ясно",cloudy:"Хмарно",fog:"Туман",hail:"Грім",lightning:"Грози","lightning-rainy":"Дощові грози",partlycloudy:"Мінлива хмарність",pouring:"Злива",rainy:"Дощ",snowy:"Сніг","snowy-rainy":"Мокрий сніг",sunny:"Сонячно",windy:"Вітряно","windy-variant":"Дуже вітряно",exceptional:"Буря"},pr={1:"Пн",2:"Вт",3:"Ср",4:"Чт",5:"Пт",6:"Сб",7:"Нд"},yr={aqi:"AQI",humidity:"вологість","feels-like":"Feels like"},br={weather:fr,day:pr,misc:yr},gr={"clear-night":"صاف",cloudy:"ابر آلود",fog:"دھند",hail:"اولے",lightning:"گرج چمک","lightning-rainy":"گرج چمک کے ساتھ بارش",partlycloudy:"جزوی طور پر ابر آلود",pouring:"موسلا دھار بارش",rainy:"بارش",snowy:"برفانی","snowy-rainy":"ژالہ باری",sunny:"دھوپ",windy:"آندھی","windy-variant":"تیز آندھی",exceptional:"غیر معمولی"},wr={1:"پیر",2:"منگل",3:"بدھ",4:"جمعرات",5:"جمعہ",6:"ہفتہ",7:"اتوار"},vr={aqi:"AQI",humidity:"نمی","feels-like":"Feels like"},kr={weather:gr,day:wr,misc:vr},xr={"clear-night":"Trời trong",cloudy:"Trời mây",fog:"Sương mù",hail:"Mưa đá",lightning:"Dông bão","lightning-rainy":"Mưa Dông",partlycloudy:"Mây nhẹ",pouring:"Mưa Lớn",rainy:"Mưa",snowy:"Tuyết","snowy-rainy":"Mưa Tuyết",sunny:"Nắng",windy:"Gió","windy-variant":"Gió mạnh",exceptional:"Khắc Nghiệt"},Tr={1:"T2",2:"T3",3:"T4",4:"T5",5:"T6",6:"T7",7:"CN"},Mr={aqi:"AQI",humidity:"độ ẩm","feels-like":"Cảm giác như"},Sr={weather:xr,day:Tr,misc:Mr},_r={"clear-night":"夜间晴朗",cloudy:"阴",fog:"雾",hail:"冰雹",lightning:"雷","lightning-rainy":"雷阵雨",partlycloudy:"多云",pouring:"大雨",rainy:"雨",snowy:"雪","snowy-rainy":"雨夹雪",sunny:"晴",windy:"有风","windy-variant":"强风",exceptional:"特殊"},Nr={1:"周一",2:"周二",3:"周三",4:"周四",5:"周五",6:"周六",7:"周日"},Or={aqi:"AQI",humidity:"湿度","feels-like":"体感温度"},Ar={weather:_r,day:Nr,misc:Or},$r={"clear-night":"晴朗夜晚",cloudy:"多雲",fog:"有霧",hail:"冰雹",lightning:"閃電","lightning-rainy":"雷雨",partlycloudy:"局部多雲",pouring:"大雨",rainy:"下雨",snowy:"下雪","snowy-rainy":"雪雨",sunny:"晴天",windy:"有風","windy-variant":"強風",exceptional:"極端天氣"},Zr={1:"週一",2:"週二",3:"週三",4:"週四",5:"週五",6:"週六",7:"週日"},Cr={aqi:"空氣品質",humidity:"濕度","feels-like":"體感溫度"},Br={weather:$r,day:Zr,misc:Cr};const Ur={ar:Oe,bg:Be,cs:Object.freeze({__proto__:null,day:He,default:qe,misc:We,weather:Pe}),ca:Le,cy:Object.freeze({__proto__:null,day:Ye,default:Qe,misc:Je,weather:Re}),da:De,de:Object.freeze({__proto__:null,day:Xe,default:tt,misc:et,weather:Ke}),el:Object.freeze({__proto__:null,day:rt,default:at,misc:st,weather:it}),en:Object.freeze({__proto__:null,day:ot,default:ct,misc:lt,weather:nt}),es:Object.freeze({__proto__:null,day:ut,default:mt,misc:ht,weather:dt}),et:Object.freeze({__proto__:null,day:pt,default:bt,misc:yt,weather:ft}),fi:Object.freeze({__proto__:null,day:wt,default:kt,misc:vt,weather:gt}),fr:Object.freeze({__proto__:null,day:Tt,default:St,misc:Mt,weather:xt}),he:Object.freeze({__proto__:null,day:Nt,default:At,misc:Ot,weather:_t}),hu:Object.freeze({__proto__:null,day:Zt,default:Bt,misc:Ct,weather:$t}),hr:Object.freeze({__proto__:null,day:Gt,default:Et,misc:Vt,weather:Ut}),id:Object.freeze({__proto__:null,day:jt,default:It,misc:zt,weather:Dt}),is:Object.freeze({__proto__:null,day:Lt,default:Ht,misc:Pt,weather:Ft}),it:Object.freeze({__proto__:null,day:qt,default:Yt,misc:Rt,weather:Wt}),ja:Object.freeze({__proto__:null,day:Qt,default:Xt,misc:Kt,weather:Jt}),ko:Object.freeze({__proto__:null,day:ti,default:ri,misc:ii,weather:ei}),lb:Object.freeze({__proto__:null,day:ai,default:oi,misc:ni,weather:si}),lt:Object.freeze({__proto__:null,day:ci,default:ui,misc:di,weather:li}),nb:Object.freeze({__proto__:null,day:mi,default:pi,misc:fi,weather:hi}),nl:Object.freeze({__proto__:null,day:bi,default:wi,misc:gi,weather:yi}),pl:Object.freeze({__proto__:null,day:ki,default:Ti,misc:xi,weather:vi}),ptbr:Object.freeze({__proto__:null,day:Si,default:Ni,misc:_i,weather:Mi}),pt:Object.freeze({__proto__:null,day:Ai,default:Zi,misc:$i,weather:Oi}),ro:Object.freeze({__proto__:null,day:Bi,default:Gi,misc:Ui,weather:Ci}),ru:Object.freeze({__proto__:null,day:Ei,default:ji,misc:Di,weather:Vi}),sk:Object.freeze({__proto__:null,day:Ii,default:Li,misc:Fi,weather:zi}),sl:Object.freeze({__proto__:null,day:Hi,default:qi,misc:Wi,weather:Pi}),sr:Object.freeze({__proto__:null,day:Yi,default:Qi,misc:Ji,weather:Ri}),srlatn:Object.freeze({__proto__:null,day:Xi,default:tr,misc:er,weather:Ki}),sv:Object.freeze({__proto__:null,day:rr,default:ar,misc:sr,weather:ir}),th:Object.freeze({__proto__:null,day:or,default:cr,misc:lr,weather:nr}),tr:Object.freeze({__proto__:null,day:ur,default:mr,misc:hr,weather:dr}),uk:Object.freeze({__proto__:null,day:pr,default:br,misc:yr,weather:fr}),ur:Object.freeze({__proto__:null,day:wr,default:kr,misc:vr,weather:gr}),vi:Object.freeze({__proto__:null,day:Tr,default:Sr,misc:Mr,weather:xr}),zhcn:Object.freeze({__proto__:null,day:Nr,default:Ar,misc:Or,weather:_r}),zhtw:Object.freeze({__proto__:null,day:Zr,default:Br,misc:Cr,weather:$r})};function Gr(e){return Math.max(...e)}function Vr(e){return Math.min(...e)}function Er(e){return null===e?null:Math.round(e)}var Dr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='54.3' x2='187.2' y1='29' y2='259.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3csymbol id='b' overflow='visible' viewBox='0 0 270 270'%3e%3cpath fill='url(%23a)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='6' d='M252.3 168.6A133.4 133.4 0 01118 36.2 130.5 130.5 0 01122.5 3 133 133 0 003 134.6C3 207.7 63 267 137.2 267c62.5 0 114.8-42.2 129.8-99.2a135.6 135.6 0 01-14.8.8Z'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 135 135%3b 9 135 135%3b -15 135 135'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='270' height='270' transform='translate(121 121)'/%3e%3c/svg%3e",jr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' overflow='visible' viewBox='0 0 279 279'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M256.8 173.1A133.3 133.3 0 01122.4 40.7 130.5 130.5 0 01127 7.5 133 133 0 007.5 139.1c0 73.1 60 132.4 134.2 132.4 62.5 0 114.8-42.2 129.8-99.2a135.6 135.6 0 01-14.8.8Z'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 135 135%3b 9 135 135%3b -15 135 135'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='279' height='279' transform='translate(116.5 116.5)'/%3e%3c/svg%3e",zr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='150' x2='234' y1='119.2' y2='264.8' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3csymbol id='b' viewBox='0 0 384 384'%3e%3ccircle cx='192' cy='192' r='84' fill='url(%23a)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='6'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M192 61.7V12m0 360v-49.7m92.2-222.5 35-35M64.8 319.2l35.1-35.1m0-184.4-35-35m254.5 254.5-35.1-35.1M61.7 192H12m360 0h-49.7'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 192 192%3b 45 192 192'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='384' height='384' transform='translate(64 64)'/%3e%3c/svg%3e",Ir="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 375 375'%3e%3ccircle cx='187.5' cy='187.5' r='84' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='15'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='15' d='M187.5 57.2V7.5m0 360v-49.7m92.2-222.5 35-35M60.3 314.7l35.1-35.1m0-184.4-35-35m254.5 254.5-35.1-35.1M57.2 187.5H7.5m360 0h-49.7'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 187.5 187.5%3b 45 187.5 187.5'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='375' height='375' transform='translate(68.5 68.5)'/%3e%3c/svg%3e",Fr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='90' x2='206' y1='155.6' y2='356.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23d4d7dd'/%3e%3cstop offset='.5' stop-color='%23d4d7dd'/%3e%3cstop offset='1' stop-color='%23bec1c6'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='179.4' x2='226.7' y1='142.4' y2='224.3' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f87171'/%3e%3cstop offset='.5' stop-color='%23f87171'/%3e%3cstop offset='1' stop-color='%23dc2626'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='252.5' x2='291.9' y1='149.2' y2='217.5'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='325.6' x2='357.2' y1='156' y2='210.7'/%3e%3c/defs%3e%3cpath fill='none' stroke='url(%23a)' stroke-linecap='round' stroke-linejoin='round' stroke-width='24' d='M148 376V136'/%3e%3cpath fill='url(%23b)' stroke='%23ef4444' stroke-miterlimit='10' stroke-width='2' d='m191.4 137 28.8 4.3a6.4 6.4 0 015.4 6.3v73.7a6.4 6.4 0 01-5.4 6.3l-28.8 4.2a6.4 6.4 0 01-7.3-6.4v-82a6.4 6.4 0 017.3-6.3Z'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='3s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='rotate' values='-6 99 184%3b 6 99 184%3b -6 99 184'/%3e%3c/path%3e%3cpath fill='url(%23c)' stroke='%23ef4444' stroke-miterlimit='10' stroke-width='2' d='m260.6 146.1 28.8 4.2a6.4 6.4 0 015.4 6.3v55.6a6.4 6.4 0 01-5.5 6.3l-28.7 4.2a6.4 6.4 0 01-7.3-6.3v-64a6.4 6.4 0 017.3-6.3Z'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='3s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='rotate' values='-6 99 184%3b 6 99 184%3b -6 99 184'/%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='1.5s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='translate' values='0 0%3b 5 0%3b 0 0'/%3e%3c/path%3e%3cpath fill='url(%23d)' stroke='%23ef4444' stroke-miterlimit='10' stroke-width='2' d='m329.8 155.2 28.7 4.2a6.4 6.4 0 015.5 6.3v37.4a6.4 6.4 0 01-5.5 6.3l-28.7 4.2a6.4 6.4 0 01-7.3-6.3v-45.8a6.4 6.4 0 017.3-6.3Z'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='3s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='rotate' values='-6 99 184%3b 6 99 184%3b -6 99 184'/%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='1.5s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='translate' values='0 0%3b 10 0%3b 0 0'/%3e%3c/path%3e%3c/svg%3e",Lr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3e%3cpath fill='none' stroke='%23cbd5e1' stroke-linecap='round' stroke-linejoin='round' stroke-width='24' d='M148 376V136'/%3e%3cpath fill='%23ef4444' d='m191.4 137 28.8 4.3a6.4 6.4 0 015.4 6.3v73.7a6.4 6.4 0 01-5.4 6.3l-28.8 4.2a6.4 6.4 0 01-7.3-6.4v-82a6.4 6.4 0 017.3-6.3Z'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='3s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='rotate' values='-6 99 184%3b 6 99 184%3b -6 99 184'/%3e%3c/path%3e%3cpath fill='%23ef4444' d='m260.6 146.1 28.8 4.2a6.4 6.4 0 015.4 6.3v55.6a6.4 6.4 0 01-5.5 6.3l-28.7 4.2a6.4 6.4 0 01-7.3-6.3v-64a6.4 6.4 0 017.3-6.3Z'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='3s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='rotate' values='-6 99 184%3b 6 99 184%3b -6 99 184'/%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='1.5s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='translate' values='0 0%3b 5 0%3b 0 0'/%3e%3c/path%3e%3cpath fill='%23ef4444' d='m329.8 155.2 28.7 4.2a6.4 6.4 0 015.5 6.3v37.4a6.4 6.4 0 01-5.5 6.3l-28.7 4.2a6.4 6.4 0 01-7.3-6.3v-45.8a6.4 6.4 0 017.3-6.3Z'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='3s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='rotate' values='-6 99 184%3b 6 99 184%3b -6 99 184'/%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='1.5s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='translate' values='0 0%3b 10 0%3b 0 0'/%3e%3c/path%3e%3c/svg%3e",Pr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='54.3' x2='187.2' y1='29' y2='259.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3csymbol id='b' viewBox='0 0 270 270'%3e%3cpath fill='url(%23a)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='6' d='M252.3 168.6A133.4 133.4 0 01118 36.2 130.5 130.5 0 01122.5 3 133 133 0 003 134.6C3 207.7 63 267 137.2 267c62.5 0 114.8-42.2 129.8-99.2a135.6 135.6 0 01-14.8.8Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='270' height='270' transform='translate(121 121)'/%3e%3c/svg%3e",Hr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 279 279'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M256.8 173.1A133.3 133.3 0 01122.4 40.7 130.5 130.5 0 01127 7.5 133 133 0 007.5 139.1c0 73.1 60 132.4 134.2 132.4 62.5 0 114.8-42.2 129.8-99.2a135.6 135.6 0 01-14.8.8Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='279' height='279' transform='translate(116.5 116.5)'/%3e%3c/svg%3e",Wr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='150' x2='234' y1='119.2' y2='264.8' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3csymbol id='b' viewBox='0 0 384 384'%3e%3ccircle cx='192' cy='192' r='84' fill='url(%23a)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='6'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M192 61.7V12m0 360v-49.7m92.2-222.5 35-35M64.8 319.2l35.1-35.1m0-184.4-35-35m254.5 254.5-35.1-35.1M61.7 192H12m360 0h-49.7'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='384' height='384' transform='translate(64 64)'/%3e%3c/svg%3e",qr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 375 375'%3e%3ccircle cx='187.5' cy='187.5' r='84' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='15'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='15' d='M187.5 57.2V7.5m0 360v-49.7m92.2-222.5 35-35M60.3 314.7l35.1-35.1m0-184.4-35-35m254.5 254.5-35.1-35.1M57.2 187.5H7.5m360 0h-49.7'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='375' height='375' transform='translate(68.5 68.5)'/%3e%3c/svg%3e",Rr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='90' x2='206' y1='155.6' y2='356.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23d4d7dd'/%3e%3cstop offset='.5' stop-color='%23d4d7dd'/%3e%3cstop offset='1' stop-color='%23bec1c6'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='179.4' x2='226.7' y1='142.4' y2='224.3' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f87171'/%3e%3cstop offset='.5' stop-color='%23f87171'/%3e%3cstop offset='1' stop-color='%23dc2626'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='252.5' x2='291.9' y1='149.2' y2='217.5'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='325.6' x2='357.2' y1='156' y2='210.7'/%3e%3c/defs%3e%3cpath fill='none' stroke='url(%23a)' stroke-linecap='round' stroke-linejoin='round' stroke-width='24' d='M148 376V136'/%3e%3cpath fill='url(%23b)' stroke='%23ef4444' stroke-miterlimit='10' stroke-width='2' d='m191.4 137 28.8 4.3a6.4 6.4 0 015.4 6.3v73.7a6.4 6.4 0 01-5.4 6.3l-28.8 4.2a6.4 6.4 0 01-7.3-6.4v-82a6.4 6.4 0 017.3-6.3Z'/%3e%3cpath fill='url(%23c)' stroke='%23ef4444' stroke-miterlimit='10' stroke-width='2' d='m260.6 146.1 28.8 4.2a6.4 6.4 0 015.4 6.3v55.6a6.4 6.4 0 01-5.5 6.3l-28.7 4.2a6.4 6.4 0 01-7.3-6.3v-64a6.4 6.4 0 017.3-6.3Z'/%3e%3cpath fill='url(%23d)' stroke='%23ef4444' stroke-miterlimit='10' stroke-width='2' d='m329.8 155.2 28.7 4.2a6.4 6.4 0 015.5 6.3v37.4a6.4 6.4 0 01-5.5 6.3l-28.7 4.2a6.4 6.4 0 01-7.3-6.3v-45.8a6.4 6.4 0 017.3-6.3Z'/%3e%3c/svg%3e",Yr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3e%3cpath fill='none' stroke='%23cbd5e1' stroke-linecap='round' stroke-linejoin='round' stroke-width='24' d='M148 376V136'/%3e%3cpath fill='%23ef4444' d='m191.4 137 28.8 4.3a6.4 6.4 0 015.4 6.3v73.7a6.4 6.4 0 01-5.4 6.3l-28.8 4.2a6.4 6.4 0 01-7.3-6.4v-82a6.4 6.4 0 017.3-6.3Zm69.2 9.1 28.8 4.2a6.4 6.4 0 015.4 6.3v55.6a6.4 6.4 0 01-5.5 6.3l-28.7 4.2a6.4 6.4 0 01-7.3-6.3v-64a6.4 6.4 0 017.3-6.3Zm69.2 9.1 28.7 4.2a6.4 6.4 0 015.5 6.3v37.4a6.4 6.4 0 01-5.5 6.3l-28.7 4.2a6.4 6.4 0 01-7.3-6.3v-45.8a6.4 6.4 0 017.3-6.3Z'/%3e%3c/svg%3e";const Jr={line:{rainy:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 193 193'%3e%3ccircle cx='96.5' cy='96.5' r='40' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='9'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='9' d='M96.5 29.9V4.5m0 184v-25.4m47.1-113.7 18-18M31.4 161.6l18-18m0-94.2-18-18m130.2 130.2-18-18M4.5 96.5h25.4m158.6 0h-25.4'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 96.5 96.5%3b 45 96.5 96.5'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='193' height='193' transform='translate(69.5 110.5)'/%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='e' overflow='visible' viewBox='0 0 128 56'%3e%3cpath fill='%230a5ad4' d='M8 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M64 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M120 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23e' width='128' height='56' transform='translate(192 344)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 178 178'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='10' d='M163.6 110.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0181 5 84.7 84.7 0 005 88.7 84.8 84.8 0 0090.4 173a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='178' height='178' transform='translate(77 118)'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 86 86%3b 9 86 86%3b -15 86 86'/%3e%3c/use%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='e' overflow='visible' viewBox='0 0 128 56'%3e%3cpath fill='%230a5ad4' d='M8 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M64 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M120 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23e' width='128' height='56' transform='translate(192 344)'/%3e%3c/svg%3e"},partlycloudy:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 193 193'%3e%3ccircle cx='96.5' cy='96.5' r='40' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='9'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='9' d='M96.5 29.9V4.5m0 184v-25.4m47.1-113.7 18-18M31.4 161.6l18-18m0-94.2-18-18m130.2 130.2-18-18M4.5 96.5h25.4m158.6 0h-25.4'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 96.5 96.5%3b 45 96.5 96.5'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='193' height='193' transform='translate(69.5 110.5)'/%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 178 178'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='10' d='M163.6 110.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0181 5 84.7 84.7 0 005 88.7 84.8 84.8 0 0090.4 173a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='178' height='178' transform='translate(77 118)'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 86 86%3b 9 86 86%3b -15 86 86'/%3e%3c/use%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3c/svg%3e"},cloudy:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='359' height='231' transform='translate(76.5 140.5)'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='-18 0%3b 18 0%3b -18 0'/%3e%3c/use%3e%3c/svg%3e","clear-night":{day:Ir,night:jr},fog:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='b' viewBox='0 0 375 375'%3e%3ccircle cx='187.5' cy='187.5' r='84' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='15'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='15' d='M187.5 57.2V7.5m0 360v-49.7m92.2-222.5 35-35M60.3 314.7l35.1-35.1m0-184.4-35-35m254.5 254.5-35.1-35.1M57.2 187.5H7.5m360 0h-49.7'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 187.5 187.5%3b 45 187.5 187.5'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='c' overflow='visible' viewBox='0 0 258 66'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-miterlimit='10' stroke-width='18' d='M9 57h240'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='-24 0%3b 24 0%3b -24 0'/%3e%3c/path%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-miterlimit='10' stroke-width='18' d='M9 9h240'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='24 0%3b -24 0%3b 24 0'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M0 0h512v306H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23b' width='375' height='375' transform='translate(68.5 104.5)'/%3e%3c/g%3e%3cuse xlink:href='%23c' width='258' height='66' transform='translate(127 339)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='b' overflow='visible' viewBox='0 0 279 279'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M256.8 173.1A133.3 133.3 0 01122.4 40.7 130.5 130.5 0 01127 7.5 133 133 0 007.5 139.1c0 73.1 60 132.4 134.2 132.4 62.5 0 114.8-42.2 129.8-99.2a135.6 135.6 0 01-14.8.8Z'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 135 135%3b 9 135 135%3b -15 135 135'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='c' overflow='visible' viewBox='0 0 258 66'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-miterlimit='10' stroke-width='18' d='M9 57h240'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='-24 0%3b 24 0%3b -24 0'/%3e%3c/path%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-miterlimit='10' stroke-width='18' d='M9 9h240'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='24 0%3b -24 0%3b 24 0'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M0 0h512v306H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23b' width='279' height='279' transform='translate(116.5 116.5)'/%3e%3c/g%3e%3cuse xlink:href='%23c' width='258' height='66' transform='translate(127 339)'/%3e%3c/svg%3e"},hail:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' overflow='visible' viewBox='0 0 136 24'%3e%3cpath fill='%2386c3db' d='M12 0a12 12 0 1012 12A12 12 0 0012 0Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.42s' dur='.58s' keyTimes='0%3b .71%3b 1' type='translate' values='0 -46%3b 0 86%3b -18 74'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.42s' dur='.58s' keyTimes='0%3b .14%3b .71%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%2386c3db' d='M68 0a12 12 0 1012 12A12 12 0 0068 0Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.67s%3b x2.end%2b.42s' dur='.58s' keyTimes='0%3b .71%3b 1' type='translate' values='0 -46%3b 0 86%3b 0 74'/%3e%3canimate id='y2' attributeName='opacity' begin='.67s%3b y2.end%2b.42s' dur='.58s' keyTimes='0%3b .14%3b .71%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%2386c3db' d='M124 0a12 12 0 1012 12 12 12 0 00-12-12Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='.33s%3b x3.end%2b.42s' dur='.58s' keyTimes='0%3b .71%3b 1' type='translate' values='0 -46%3b 0 86%3b 18 74'/%3e%3canimate id='y3' attributeName='opacity' begin='.33s%3b y3.end%2b.42s' dur='.58s' keyTimes='0%3b .14%3b .71%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3cuse xlink:href='%23b' width='136' height='24' transform='translate(188 350)'/%3e%3c/svg%3e",lightning:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 193 193'%3e%3ccircle cx='96.5' cy='96.5' r='40' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='9'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='9' d='M96.5 29.9V4.5m0 184v-25.4m47.1-113.7 18-18M31.4 161.6l18-18m0-94.2-18-18m130.2 130.2-18-18M4.5 96.5h25.4m158.6 0h-25.4'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 96.5 96.5%3b 45 96.5 96.5'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='193' height='193' transform='translate(69.5 110.5)'/%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 96 176'%3e%3cpath fill='%23f6a823' d='M32 0 0 96h32l-16 80L96 64H48L80 0H32z'%3e%3canimate id='x1' attributeName='opacity' begin='0s%3b x1.end%2b.67s' dur='1.33s' keyTimes='0%3b .38%3b .5%3b .63%3b .75%3b .86%3b .94%3b 1' values='1%3b 1%3b 0%3b 1%3b 0%3b 1%3b 0%3b 1'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23e' width='96' height='176' transform='translate(208 293)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 178 178'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='10' d='M163.6 110.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0181 5 84.7 84.7 0 005 88.7 84.8 84.8 0 0090.4 173a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='178' height='178' transform='translate(77 118)'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 86 86%3b 9 86 86%3b -15 86 86'/%3e%3c/use%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 96 176'%3e%3cpath fill='%23f6a823' d='M32 0 0 96h32l-16 80L96 64H48L80 0H32z'%3e%3canimate id='x1' attributeName='opacity' begin='0s%3b x1.end%2b.67s' dur='1.33s' keyTimes='0%3b .38%3b .5%3b .63%3b .75%3b .86%3b .94%3b 1' values='1%3b 1%3b 0%3b 1%3b 0%3b 1%3b 0%3b 1'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23e' width='96' height='176' transform='translate(208 293)'/%3e%3c/svg%3e"},"lightning-rainy":{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 193 193'%3e%3ccircle cx='96.5' cy='96.5' r='40' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='9'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='9' d='M96.5 29.9V4.5m0 184v-25.4m47.1-113.7 18-18M31.4 161.6l18-18m0-94.2-18-18m130.2 130.2-18-18M4.5 96.5h25.4m158.6 0h-25.4'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 96.5 96.5%3b 45 96.5 96.5'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='193' height='193' transform='translate(69.5 110.5)'/%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='e' overflow='visible' viewBox='0 0 128 56'%3e%3cpath fill='%230a5ad4' d='M8 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M64 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M120 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 96 176'%3e%3cpath fill='%23f6a823' d='M32 0 0 96h32l-16 80L96 64H48L80 0H32z'%3e%3canimate id='x1' attributeName='opacity' begin='0s%3b x1.end%2b.67s' dur='1.33s' keyTimes='0%3b .38%3b .5%3b .63%3b .75%3b .86%3b .94%3b 1' values='1%3b 1%3b 0%3b 1%3b 0%3b 1%3b 0%3b 1'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23e' width='128' height='56' transform='translate(192 344)'/%3e%3cuse xlink:href='%23f' width='96' height='176' transform='translate(208 293)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 178 178'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='10' d='M163.6 110.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0181 5 84.7 84.7 0 005 88.7 84.8 84.8 0 0090.4 173a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='178' height='178' transform='translate(77 118)'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 86 86%3b 9 86 86%3b -15 86 86'/%3e%3c/use%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='e' overflow='visible' viewBox='0 0 128 56'%3e%3cpath fill='%230a5ad4' d='M8 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M64 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M120 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 96 176'%3e%3cpath fill='%23f6a823' d='M32 0 0 96h32l-16 80L96 64H48L80 0H32z'%3e%3canimate id='x1' attributeName='opacity' begin='0s%3b x1.end%2b.67s' dur='1.33s' keyTimes='0%3b .38%3b .5%3b .63%3b .75%3b .86%3b .94%3b 1' values='1%3b 1%3b 0%3b 1%3b 0%3b 1%3b 0%3b 1'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23e' width='128' height='56' transform='translate(192 344)'/%3e%3cuse xlink:href='%23f' width='96' height='176' transform='translate(208 293)'/%3e%3c/svg%3e"},pouring:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' overflow='visible' viewBox='0 0 128 56'%3e%3cpath fill='%230a5ad4' d='M8 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M64 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M120 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3cuse xlink:href='%23b' width='128' height='56' transform='translate(192 344)'/%3e%3c/svg%3e",raindrop:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 175 260.9'%3e%3cpath fill='none' stroke='%232885c7' stroke-miterlimit='10' stroke-width='15' d='M87.5 13.4c-48.7 72-80 117-80 160.7s35.8 79.3 80 79.3 80-35.5 80-79.3-31.3-88.8-80-160.7Z'%3e%3canimateTransform attributeName='transform' calcMode='spline' dur='6s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='scale' values='1 1%3b 1 .9%3b 1 1'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='175' height='260.9' transform='translate(168.5 122.62)'/%3e%3c/svg%3e",raindrops:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M302 137c-48.7 72-80 117-80 160.8s35.8 79.2 80 79.2v135H0V0h302Z'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='6s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='scale' values='1 1%3b 1 .95%3b 1 1'/%3e%3c/path%3e%3c/clipPath%3e%3csymbol id='b' viewBox='0 0 175 260.9'%3e%3cpath fill='none' stroke='%232885c7' stroke-miterlimit='10' stroke-width='15' d='M87.5 13.4c-48.7 72-80 117-80 160.7s35.8 79.3 80 79.3 80-35.5 80-79.3-31.3-88.8-80-160.7Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='175' height='260.9' transform='translate(214.5 123.62)'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='6s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='scale' values='1 1%3b 1 .9%3b 1 1'/%3e%3c/use%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23b' width='175' height='260.9' transform='translate(122.5 123.62)'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='6s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='scale' values='1 .9%3b 1 1%3b 1 .9'/%3e%3c/use%3e%3c/g%3e%3c/svg%3e",snowy:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' overflow='visible' viewBox='0 0 155.2 48'%3e%3cg%3e%3cpath fill='%2386c3db' d='m41.2 30.5-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V4a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3A4 4 0 00.5 12 4 4 0 002 17.5l5.8 3.3a13.7 13.7 0 000 6.4L2 30.5A4 4 0 00.5 36a4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V44a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8A6 6 0 0127 27a6.1 6.1 0 01-8.3 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 24 24%3b 360 24 24'/%3e%3canimate id='t1' attributeName='opacity' begin='0s%3b t1.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s1' additive='sum' attributeName='transform' begin='0s%3b s1.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3cg%3e%3cpath fill='%2386c3db' d='m97.2 30.5-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V4a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.4L58 30.5a4 4 0 00-1.5 5.5 4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V44a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8A6 6 0 0183 27a6.1 6.1 0 01-8.3 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 80 24%3b 360 80 24'/%3e%3canimate id='t2' attributeName='opacity' begin='-.83s%3b t2.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s2' additive='sum' attributeName='transform' begin='-.83s%3b s2.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3cg%3e%3cpath fill='%2386c3db' d='m153.2 30.5-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V4a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.4l-5.8 3.3a4 4 0 00-1.5 5.5 4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V44a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 136 24%3b 360 136 24'/%3e%3canimate id='t3' attributeName='opacity' begin='.83s%3b t3.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s3' additive='sum' attributeName='transform' begin='.83s%3b s3.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3cuse xlink:href='%23b' width='155.2' height='48' transform='translate(178.4 338)'/%3e%3c/svg%3e","snowy-rainy":"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='c' overflow='visible' viewBox='0 0 155.2 48'%3e%3cg%3e%3cpath fill='%2386c3db' d='m41.2 30.5-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V4a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3A4 4 0 00.5 12 4 4 0 002 17.5l5.8 3.3a13.7 13.7 0 000 6.4L2 30.5A4 4 0 00.5 36a4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V44a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8A6 6 0 0127 27a6.1 6.1 0 01-8.3 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 24 24%3b 360 24 24'/%3e%3canimate id='t1' attributeName='opacity' begin='0s%3b t1.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s1' additive='sum' attributeName='transform' begin='0s%3b s1.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3cg%3e%3cpath fill='%2386c3db' d='m97.2 30.5-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V4a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.4L58 30.5a4 4 0 00-1.5 5.5 4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V44a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8A6 6 0 0183 27a6.1 6.1 0 01-8.3 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 80 24%3b 360 80 24'/%3e%3canimate id='t2' attributeName='opacity' begin='-.83s%3b t2.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s2' additive='sum' attributeName='transform' begin='-.83s%3b s2.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3cg%3e%3cpath fill='%2386c3db' d='m153.2 30.5-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V4a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.4l-5.8 3.3a4 4 0 00-1.5 5.5 4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V44a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 136 24%3b 360 136 24'/%3e%3canimate id='t3' attributeName='opacity' begin='.83s%3b t3.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s3' additive='sum' attributeName='transform' begin='.83s%3b s3.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3c/symbol%3e%3csymbol id='b' overflow='visible' viewBox='0 0 155.2 48'%3e%3cuse xlink:href='%23c' width='155.2' height='48'/%3e%3cpath fill='%230a5ad4' d='M21.6 38a8 8 0 01-8-8V18a8 8 0 0116 0v12a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' type='translate' values='0 -32%3b 0 -32%3b 0 120%3b'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M77.6 38a8 8 0 01-8-8V18a8 8 0 0116 0v12a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='1.34s%3b x2.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' type='translate' values='0 -32%3b 0 -32%3b 0 120%3b'/%3e%3canimate id='y2' attributeName='opacity' begin='1.34s%3b y2.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M133.6 38a8 8 0 01-8-8V18a8 8 0 0116 0v12a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='.67s%3b x3.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' type='translate' values='0 -32%3b 0 -32%3b 0 120%3b'/%3e%3canimate id='y3' attributeName='opacity' begin='.67s%3b y3.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3cuse xlink:href='%23b' width='155.2' height='48' transform='translate(178.4 338)'/%3e%3c/svg%3e",sunny:{day:Ir,night:jr},windy:Lr,"windy-exceptional":Lr,exceptional:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-miterlimit='10' stroke-width='18' d='M344 256a88 88 0 11-88-88 88 88 0 0188 88ZM200 116.9l-3.8 7.7A269.7 269.7 0 00169 267h0m143.1 128 3.8-7.7A269.7 269.7 0 00343.2 245h0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='1440 256 256%3b 0 256 256'/%3e%3c/path%3e%3c/svg%3e"},fill:{rainy:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1436.7' x2='1454.9' y1='-1137' y2='-1089.7' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1492.1' x2='1510.3' y1='-1129.3' y2='-1082.1' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3clinearGradient id='e' x1='78' x2='118' y1='63.4' y2='132.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3csymbol id='g' viewBox='0 0 196 196'%3e%3ccircle cx='98' cy='98' r='40' fill='url(%23e)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='4'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='12' d='M98 31.4V6m0 184v-25.4M145.1 51l18-17.9M33 163l18-17.9M51 51 33 33m130.1 130.1-18-18M6 98h25.4M190 98h-25.4'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 98 98%3b 45 98 98'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='h' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 363 258'%3e%3cuse xlink:href='%23g' width='196' height='196'/%3e%3cuse xlink:href='%23h' width='350' height='222' transform='translate(13 36)'/%3e%3c/symbol%3e%3csymbol id='i' overflow='visible' viewBox='0 0 129 57'%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23f' width='363' height='258' transform='translate(68 109)'/%3e%3cuse xlink:href='%23i' width='129' height='57' transform='translate(191.5 343.5)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='34.7' x2='119.2' y1='18.6' y2='165' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23c' id='d' x1='1436.7' x2='1454.9' y1='-1137' y2='-1089.7' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23c' id='e' x1='1492.1' x2='1510.3' y1='-1129.3' y2='-1082.1' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3csymbol id='g' viewBox='0 0 172 172'%3e%3cpath fill='url(%23b)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' d='M160.6 107.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0178 2 84.7 84.7 0 002 85.7 84.8 84.8 0 0087.4 170a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 86 86%3b 9 86 86%3b -15 86 86'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='h' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 351 246'%3e%3cuse xlink:href='%23g' width='172' height='172'/%3e%3cuse xlink:href='%23h' width='350' height='222' transform='translate(1 24)'/%3e%3c/symbol%3e%3csymbol id='i' overflow='visible' viewBox='0 0 129 57'%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23e)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23f' width='351' height='246' transform='translate(80 121)'/%3e%3cuse xlink:href='%23i' width='129' height='57' transform='translate(191.5 343.5)'/%3e%3c/svg%3e"},partlycloudy:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='d' viewBox='0 0 196 196'%3e%3ccircle cx='98' cy='98' r='40' fill='url(%23b)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='4'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='12' d='M98 31.4V6m0 184v-25.4M145.1 51l18-17.9M33 163l18-17.9M51 51 33 33m130.1 130.1-18-18M6 98h25.4M190 98h-25.4'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 98 98%3b 45 98 98'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='c' viewBox='0 0 363 258'%3e%3cuse xlink:href='%23d' width='196' height='196'/%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(13 36)'/%3e%3c/symbol%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='78' x2='118' y1='63.4' y2='132.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3c/defs%3e%3cuse xlink:href='%23c' width='363' height='258' transform='translate(68 109)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='d' viewBox='0 0 172 172'%3e%3cpath fill='url(%23b)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' d='M160.6 107.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0178 2 84.7 84.7 0 002 85.7 84.8 84.8 0 0087.4 170a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 86 86%3b 9 86 86%3b -15 86 86'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='c' viewBox='0 0 351 246'%3e%3cuse xlink:href='%23d' width='172' height='172'/%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(1 24)'/%3e%3c/symbol%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='34.7' x2='119.2' y1='18.6' y2='165' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3c/defs%3e%3cuse xlink:href='%23c' width='351' height='246' transform='translate(80 121)'/%3e%3c/svg%3e"},cloudy:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3csymbol id='b' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='350' height='222' transform='translate(81 145)'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='-18 0%3b 18 0%3b -18 0'/%3e%3c/use%3e%3c/svg%3e","clear-night":{day:zr,night:Dr},fog:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='96' x2='168' y1='-2.4' y2='122.3' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23d4d7dd'/%3e%3cstop offset='.5' stop-color='%23d4d7dd'/%3e%3cstop offset='1' stop-color='%23bec1c6'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23a' id='b' x2='168' y1='-50.4' y2='74.3'/%3e%3clinearGradient id='c' x1='150' x2='234' y1='119.2' y2='264.8' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3csymbol id='e' viewBox='0 0 384 384'%3e%3ccircle cx='192' cy='192' r='84' fill='url(%23c)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='6'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M192 61.7V12m0 360v-49.7m92.2-222.5 35-35M64.8 319.2l35.1-35.1m0-184.4-35-35m254.5 254.5-35.1-35.1M61.7 192H12m360 0h-49.7'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 192 192%3b 45 192 192'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='f' overflow='visible' viewBox='0 0 264 72'%3e%3cpath fill='none' stroke='url(%23a)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M12 60h240'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='-24 0%3b 24 0%3b -24 0'/%3e%3c/path%3e%3cpath fill='none' stroke='url(%23b)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M12 12h240'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='24 0%3b -24 0%3b 24 0'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='d'%3e%3cpath fill='none' d='M0 0h512v306H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg clip-path='url(%23d)'%3e%3cuse xlink:href='%23e' width='384' height='384' transform='translate(64 100)'/%3e%3c/g%3e%3cuse xlink:href='%23f' width='264' height='72' transform='translate(124 336)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='96' x2='168' y1='-2.4' y2='122.3' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23d4d7dd'/%3e%3cstop offset='.5' stop-color='%23d4d7dd'/%3e%3cstop offset='1' stop-color='%23bec1c6'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23a' id='b' x2='168' y1='-50.4' y2='74.3'/%3e%3clinearGradient id='c' x1='54.3' x2='187.2' y1='29' y2='259.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3csymbol id='e' viewBox='0 0 270 270'%3e%3cpath fill='url(%23c)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='6' d='M252.3 168.6A133.4 133.4 0 01118 36.2 130.5 130.5 0 01122.5 3 133 133 0 003 134.6C3 207.7 63 267 137.2 267c62.5 0 114.8-42.2 129.8-99.2a135.6 135.6 0 01-14.8.8Z'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 135 135%3b 9 135 135%3b -15 135 135'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='f' overflow='visible' viewBox='0 0 264 72'%3e%3cpath fill='none' stroke='url(%23a)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M12 60h240'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='-24 0%3b 24 0%3b -24 0'/%3e%3c/path%3e%3cpath fill='none' stroke='url(%23b)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M12 12h240'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='24 0%3b -24 0%3b 24 0'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='d'%3e%3cpath fill='none' d='M0 0h512v306H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg clip-path='url(%23d)'%3e%3cuse xlink:href='%23e' width='270' height='270' transform='translate(121 121)'/%3e%3c/g%3e%3cuse xlink:href='%23f' width='264' height='72' transform='translate(124 336)'/%3e%3c/svg%3e"},hail:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='6.5' x2='18.5' y1='2.1' y2='22.9' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='62.5' x2='74.5' y1='2.1' y2='22.9'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='118.5' x2='130.5' y1='2.1' y2='22.9'/%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' overflow='visible' viewBox='0 0 137 25'%3e%3cpath fill='url(%23b)' stroke='%2386c3db' stroke-miterlimit='10' d='M12.5.5a12 12 0 1012 12 12 12 0 00-12-12Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.42s' dur='.58s' keyTimes='0%3b .71%3b 1' type='translate' values='0 -46%3b 0 86%3b -18 74'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.42s' dur='.58s' keyTimes='0%3b .14%3b .71%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23c)' stroke='%2386c3db' stroke-miterlimit='10' d='M68.5.5a12 12 0 1012 12 12 12 0 00-12-12Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.67s%3b x2.end%2b.42s' dur='.58s' keyTimes='0%3b .71%3b 1' type='translate' values='0 -46%3b 0 86%3b 0 74'/%3e%3canimate id='y2' attributeName='opacity' begin='.67s%3b y2.end%2b.42s' dur='.58s' keyTimes='0%3b .14%3b .71%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23d)' stroke='%2386c3db' stroke-miterlimit='10' d='M124.5.5a12 12 0 1012 12 12 12 0 00-12-12Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='.33s%3b x3.end%2b.42s' dur='.58s' keyTimes='0%3b .71%3b 1' type='translate' values='0 -46%3b 0 86%3b 18 74'/%3e%3canimate id='y3' attributeName='opacity' begin='.33s%3b y3.end%2b.42s' dur='.58s' keyTimes='0%3b .14%3b .71%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(81 145)'/%3e%3cuse xlink:href='%23f' width='137' height='25' transform='translate(187.5 349.5)'/%3e%3c/svg%3e",lightning:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='e' viewBox='0 0 196 196'%3e%3ccircle cx='98' cy='98' r='40' fill='url(%23c)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='4'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='12' d='M98 31.4V6m0 184v-25.4M145.1 51l18-17.9M33 163l18-17.9M51 51 33 33m130.1 130.1-18-18M6 98h25.4M190 98h-25.4'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 98 98%3b 45 98 98'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 363 258'%3e%3cuse xlink:href='%23e' width='196' height='196'/%3e%3cuse xlink:href='%23f' width='350' height='222' transform='translate(13 36)'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 102.7 186.8'%3e%3cpath fill='url(%23b)' stroke='%23f6a823' stroke-miterlimit='10' stroke-width='4' d='m34.8 2-32 96h32l-16 80 80-112h-48l32-64h-48z'%3e%3canimate id='x1' attributeName='opacity' begin='0s%3b x1.end%2b.67s' dur='1.33s' keyTimes='0%3b .38%3b .5%3b .63%3b .75%3b .86%3b .94%3b 1' values='1%3b 1%3b 0%3b 1%3b 0%3b 1%3b 0%3b 1'/%3e%3c/path%3e%3c/symbol%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='8.7' x2='80.9' y1='17.1' y2='142.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f7b23b'/%3e%3cstop offset='.5' stop-color='%23f7b23b'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='78' x2='118' y1='63.4' y2='132.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3c/defs%3e%3cuse xlink:href='%23d' width='363' height='258' transform='translate(68 109)'/%3e%3cuse xlink:href='%23g' width='102.7' height='186.7' transform='translate(205.23 291)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='e' viewBox='0 0 172 172'%3e%3cpath fill='url(%23c)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' d='M160.6 107.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0178 2 84.7 84.7 0 002 85.7 84.8 84.8 0 0087.4 170a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 86 86%3b 9 86 86%3b -15 86 86'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 351 246'%3e%3cuse xlink:href='%23e' width='172' height='172'/%3e%3cuse xlink:href='%23f' width='350' height='222' transform='translate(1 24)'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 102.7 186.8'%3e%3cpath fill='url(%23b)' stroke='%23f6a823' stroke-miterlimit='10' stroke-width='4' d='m34.8 2-32 96h32l-16 80 80-112h-48l32-64h-48z'%3e%3canimate id='x1' attributeName='opacity' begin='0s%3b x1.end%2b.67s' dur='1.33s' keyTimes='0%3b .38%3b .5%3b .63%3b .75%3b .86%3b .94%3b 1' values='1%3b 1%3b 0%3b 1%3b 0%3b 1%3b 0%3b 1'/%3e%3c/path%3e%3c/symbol%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='8.7' x2='80.9' y1='17.1' y2='142.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f7b23b'/%3e%3cstop offset='.5' stop-color='%23f7b23b'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='34.7' x2='119.2' y1='18.6' y2='165' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3c/defs%3e%3cuse xlink:href='%23d' width='351' height='246' transform='translate(80 121)'/%3e%3cuse xlink:href='%23g' width='102.7' height='186.7' transform='translate(205.23 291)'/%3e%3c/svg%3e"},"lightning-rainy":{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='8.7' x2='80.9' y1='17.1' y2='142.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f7b23b'/%3e%3cstop offset='.5' stop-color='%23f7b23b'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23c' id='d' x1='1436.7' x2='1454.9' y1='-1137' y2='-1089.7' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23c' id='e' x1='1492.1' x2='1510.3' y1='-1129.3' y2='-1082.1' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3clinearGradient id='f' x1='78' x2='118' y1='63.4' y2='132.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3csymbol id='h' viewBox='0 0 196 196'%3e%3ccircle cx='98' cy='98' r='40' fill='url(%23f)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='4'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='12' d='M98 31.4V6m0 184v-25.4M145.1 51l18-17.9M33 163l18-17.9M51 51 33 33m130.1 130.1-18-18M6 98h25.4M190 98h-25.4'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 98 98%3b 45 98 98'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='i' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 363 258'%3e%3cuse xlink:href='%23h' width='196' height='196'/%3e%3cuse xlink:href='%23i' width='350' height='222' transform='translate(13 36)'/%3e%3c/symbol%3e%3csymbol id='j' overflow='visible' viewBox='0 0 129 57'%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23e)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='k' viewBox='0 0 102.7 186.8'%3e%3cpath fill='url(%23b)' stroke='%23f6a823' stroke-miterlimit='10' stroke-width='4' d='m34.8 2-32 96h32l-16 80 80-112h-48l32-64h-48z'%3e%3canimate id='x1' attributeName='opacity' begin='0s%3b x1.end%2b.67s' dur='1.33s' keyTimes='0%3b .38%3b .5%3b .63%3b .75%3b .86%3b .94%3b 1' values='1%3b 1%3b 0%3b 1%3b 0%3b 1%3b 0%3b 1'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23g' width='363' height='258' transform='translate(68 109)'/%3e%3cuse xlink:href='%23j' width='129' height='57' transform='translate(191.5 343.5)'/%3e%3cuse xlink:href='%23k' width='102.7' height='186.7' transform='translate(205.23 291)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='8.7' x2='80.9' y1='17.1' y2='142.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f7b23b'/%3e%3cstop offset='.5' stop-color='%23f7b23b'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='34.7' x2='119.2' y1='18.6' y2='165' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient id='d' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23d' id='e' x1='1436.7' x2='1454.9' y1='-1137' y2='-1089.7' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23d' id='f' x1='1492.1' x2='1510.3' y1='-1129.3' y2='-1082.1' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3csymbol id='h' viewBox='0 0 172 172'%3e%3cpath fill='url(%23c)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' d='M160.6 107.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0178 2 84.7 84.7 0 002 85.7 84.8 84.8 0 0087.4 170a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 86 86%3b 9 86 86%3b -15 86 86'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='i' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 351 246'%3e%3cuse xlink:href='%23h' width='172' height='172'/%3e%3cuse xlink:href='%23i' width='350' height='222' transform='translate(1 24)'/%3e%3c/symbol%3e%3csymbol id='j' overflow='visible' viewBox='0 0 129 57'%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23e)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23f)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='k' viewBox='0 0 102.7 186.8'%3e%3cpath fill='url(%23b)' stroke='%23f6a823' stroke-miterlimit='10' stroke-width='4' d='m34.8 2-32 96h32l-16 80 80-112h-48l32-64h-48z'%3e%3canimate id='x1' attributeName='opacity' begin='0s%3b x1.end%2b.67s' dur='1.33s' keyTimes='0%3b .38%3b .5%3b .63%3b .75%3b .86%3b .94%3b 1' values='1%3b 1%3b 0%3b 1%3b 0%3b 1%3b 0%3b 1'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23g' width='351' height='246' transform='translate(80 121)'/%3e%3cuse xlink:href='%23j' width='129' height='57' transform='translate(191.5 343.5)'/%3e%3cuse xlink:href='%23k' width='102.7' height='186.7' transform='translate(205.23 291)'/%3e%3c/svg%3e"},pouring:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1436.7' x2='1454.9' y1='-1137' y2='-1089.7' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1492.1' x2='1510.3' y1='-1129.3' y2='-1082.1' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' overflow='visible' viewBox='0 0 129 57'%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(81 145)'/%3e%3cuse xlink:href='%23f' width='129' height='57' transform='translate(191.5 343.5)'/%3e%3c/svg%3e",raindrop:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='14.8' x2='124.2' y1='42.3' y2='231.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%233392d6'/%3e%3cstop offset='.5' stop-color='%233392d6'/%3e%3cstop offset='1' stop-color='%232477b2'/%3e%3c/linearGradient%3e%3csymbol id='b' viewBox='0 0 164 245.6'%3e%3cpath fill='url(%23a)' stroke='%232885c7' stroke-miterlimit='10' stroke-width='4' d='M82 3.6c-48.7 72-80 117-80 160.7s35.8 79.3 80 79.3 80-35.5 80-79.3S130.7 75.5 82 3.6Z'%3e%3canimateTransform attributeName='transform' calcMode='spline' dur='6s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='scale' values='1 1%3b 1 .9%3b 1 1'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='164' height='245.6' transform='translate(174 132.43)'/%3e%3c/svg%3e",raindrops:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='14.8' x2='124.2' y1='42.3' y2='231.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%233392d6'/%3e%3cstop offset='.5' stop-color='%233392d6'/%3e%3cstop offset='1' stop-color='%232477b2'/%3e%3c/linearGradient%3e%3csymbol id='b' viewBox='0 0 164 245.6'%3e%3cpath fill='url(%23a)' stroke='%232885c7' stroke-miterlimit='10' stroke-width='4' d='M82 3.6c-48.7 72-80 117-80 160.7s35.8 79.3 80 79.3 80-35.5 80-79.3S130.7 75.5 82 3.6Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='164' height='245.6' transform='translate(128 133.43)'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='6s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='scale' values='1 1%3b 1 .9%3b 1 1'/%3e%3c/use%3e%3cuse xlink:href='%23b' width='164' height='245.6' transform='translate(220 133.43)'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='6s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='scale' values='1 .9%3b 1 1%3b 1 .9'/%3e%3c/use%3e%3c/svg%3e",snowy:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='11.4' x2='32.8' y1='5.9' y2='43.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='67.4' x2='88.8' y1='5.9' y2='43.1'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='123.4' x2='144.8' y1='5.9' y2='43.1'/%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' overflow='visible' viewBox='0 0 156.2 49'%3e%3cg%3e%3cpath fill='url(%23b)' stroke='%2386c3db' stroke-miterlimit='10' d='m41.7 31-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3V4.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2L6.6 11A4 4 0 001 12.5 4 4 0 002.5 18l5.8 3.3a13.7 13.7 0 000 6.5L2.5 31A4 4 0 001 36.5a4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008.2 0v-6.6a14.2 14.2 0 005.6-3.2l6 3.3a4 4 0 002 .5 4 4 0 003.4-2 4 4 0 00-1.4-5.5ZM19 29.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 24 24%3b 360 24 24'/%3e%3canimate id='t1' attributeName='opacity' begin='0s%3b t1.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s1' additive='sum' attributeName='transform' begin='0s%3b s1.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3cg%3e%3cpath fill='url(%23c)' stroke='%2386c3db' stroke-miterlimit='10' d='m97.7 31-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3V4.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2L62.6 11a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.5L58.5 31a4 4 0 00-1.5 5.5 4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.7 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0v-6.6a14.2 14.2 0 005.7-3.2l6 3.3a4 4 0 002 .5 4 4 0 003.4-2 4 4 0 00-1.4-5.5ZM75 29.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 80 24%3b 360 80 24'/%3e%3canimate id='t2' attributeName='opacity' begin='-.83s%3b t2.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s2' additive='sum' attributeName='transform' begin='-.83s%3b s2.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3cg%3e%3cpath fill='url(%23d)' stroke='%2386c3db' stroke-miterlimit='10' d='m153.7 31-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3V4.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.5l-5.8 3.2a4 4 0 00-1.5 5.5 4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.7 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0v-6.6a14.2 14.2 0 005.7-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.3-5.5ZM131 29.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 136 24%3b 360 136 24'/%3e%3canimate id='t3' attributeName='opacity' begin='.83s%3b t3.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s3' additive='sum' attributeName='transform' begin='.83s%3b s3.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(81 145)'/%3e%3cuse xlink:href='%23f' width='156.2' height='49' transform='translate(177.9 337.5)'/%3e%3c/svg%3e","snowy-rainy":"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='1399.3' x2='1408.7' y1='-1137.3' y2='-1112.7' gradientTransform='rotate(-9 8016.182 8229.021)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1454.6' x2='1464' y1='-1128.6' y2='-1104'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1509.9' x2='1519.3' y1='-1119.8' y2='-1095.2'/%3e%3clinearGradient id='e' x1='11.4' x2='32.8' y1='5.9' y2='43.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23e' id='f' x1='67.4' x2='88.8' y1='5.9' y2='43.1'/%3e%3clinearGradient xlink:href='%23e' id='g' x1='123.4' x2='144.8' y1='5.9' y2='43.1'/%3e%3csymbol id='h' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='j' overflow='visible' viewBox='0 0 156.2 49'%3e%3cg%3e%3cpath fill='url(%23e)' stroke='%2386c3db' stroke-miterlimit='10' d='m41.7 31-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3V4.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2L6.6 11A4 4 0 001 12.5 4 4 0 002.5 18l5.8 3.3a13.7 13.7 0 000 6.5L2.5 31A4 4 0 001 36.5a4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008.2 0v-6.6a14.2 14.2 0 005.6-3.2l6 3.3a4 4 0 002 .5 4 4 0 003.4-2 4 4 0 00-1.4-5.5ZM19 29.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 24 24%3b 360 24 24'/%3e%3canimate id='t1' attributeName='opacity' begin='0s%3b t1.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s1' additive='sum' attributeName='transform' begin='0s%3b s1.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3cg%3e%3cpath fill='url(%23f)' stroke='%2386c3db' stroke-miterlimit='10' d='m97.7 31-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3V4.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2L62.6 11a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.5L58.5 31a4 4 0 00-1.5 5.5 4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.7 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0v-6.6a14.2 14.2 0 005.7-3.2l6 3.3a4 4 0 002 .5 4 4 0 003.4-2 4 4 0 00-1.4-5.5ZM75 29.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 80 24%3b 360 80 24'/%3e%3canimate id='t2' attributeName='opacity' begin='-.83s%3b t2.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s2' additive='sum' attributeName='transform' begin='-.83s%3b s2.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3cg%3e%3cpath fill='url(%23g)' stroke='%2386c3db' stroke-miterlimit='10' d='m153.7 31-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3V4.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.5l-5.8 3.2a4 4 0 00-1.5 5.5 4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.7 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0v-6.6a14.2 14.2 0 005.7-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.3-5.5ZM131 29.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 136 24%3b 360 136 24'/%3e%3canimate id='t3' attributeName='opacity' begin='.83s%3b t3.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s3' additive='sum' attributeName='transform' begin='.83s%3b s3.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3c/symbol%3e%3csymbol id='i' overflow='visible' viewBox='0 0 156.2 49'%3e%3cuse xlink:href='%23j' width='156.2' height='49'/%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M22.1 38.5a8 8 0 01-8-8v-12a8 8 0 0116 0v12a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' type='translate' values='0 -32%3b 0 -32%3b 0 120%3b'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M78.1 38.5a8 8 0 01-8-8v-12a8 8 0 0116 0v12a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='1.34s%3b x2.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' type='translate' values='0 -32%3b 0 -32%3b 0 120%3b'/%3e%3canimate id='y2' attributeName='opacity' begin='1.34s%3b y2.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M134.1 38.5a8 8 0 01-8-8v-12a8 8 0 0116 0v12a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='.67s%3b x3.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' type='translate' values='0 -32%3b 0 -32%3b 0 120%3b'/%3e%3canimate id='y3' attributeName='opacity' begin='.67s%3b y3.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23h' width='350' height='222' transform='translate(81 145)'/%3e%3cuse xlink:href='%23i' width='156.2' height='49' transform='translate(177.9 337.5)'/%3e%3c/svg%3e",sunny:{day:zr,night:Dr},windy:Fr,"windy-exceptional":Fr,exceptional:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='175.8' x2='336.2' y1='117' y2='395' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23d4d7dd'/%3e%3cstop offset='.5' stop-color='%23d4d7dd'/%3e%3cstop offset='1' stop-color='%23bec1c6'/%3e%3c/linearGradient%3e%3c/defs%3e%3cpath fill='none' stroke='url(%23a)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M344 256a88 88 0 11-88-88 88 88 0 0188 88ZM200 116.9l-3.8 7.7A269.7 269.7 0 00169 267h0m143.1 128 3.8-7.7A269.7 269.7 0 00343.2 245h0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='1440 256 256%3b 0 256 256'/%3e%3c/path%3e%3c/svg%3e"}},Qr={line:{rainy:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='f' viewBox='0 0 193 193'%3e%3ccircle cx='96.5' cy='96.5' r='40' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='9'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='9' d='M96.5 29.9V4.5m0 184v-25.4m47.1-113.7 18-18M31.4 161.6l18-18m0-94.2-18-18m130.2 130.2-18-18M4.5 96.5h25.4m158.6 0h-25.4'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23f' width='193' height='193' transform='translate(69.5 110.5)'/%3e%3c/g%3e%3cuse xlink:href='%23g' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='h' viewBox='0 0 129 110'%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3clinearGradient id='b' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23e' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23h' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='f' viewBox='0 0 178 178'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='10' d='M163.6 110.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0181 5 84.7 84.7 0 005 88.7 84.8 84.8 0 0090.4 173a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23f' width='178' height='178' transform='translate(77 118)'/%3e%3c/g%3e%3cuse xlink:href='%23g' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='h' viewBox='0 0 129 110'%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3clinearGradient id='b' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23e' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23h' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3c/svg%3e"},partlycloudy:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 193 193'%3e%3ccircle cx='96.5' cy='96.5' r='40' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='9'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='9' d='M96.5 29.9V4.5m0 184v-25.4m47.1-113.7 18-18M31.4 161.6l18-18m0-94.2-18-18m130.2 130.2-18-18M4.5 96.5h25.4m158.6 0h-25.4'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='193' height='193' transform='translate(69.5 110.5)'/%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 178 178'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='10' d='M163.6 110.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0181 5 84.7 84.7 0 005 88.7 84.8 84.8 0 0090.4 173a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='178' height='178' transform='translate(77 118)'/%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3c/svg%3e"},cloudy:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/svg%3e","clear-night":{day:qr,night:Hr},fog:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='b' viewBox='0 0 375 375'%3e%3ccircle cx='187.5' cy='187.5' r='84' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='15'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='15' d='M187.5 57.2V7.5m0 360v-49.7m92.2-222.5 35-35M60.3 314.7l35.1-35.1m0-184.4-35-35m254.5 254.5-35.1-35.1M57.2 187.5H7.5m360 0h-49.7'/%3e%3c/symbol%3e%3csymbol id='c' viewBox='0 0 258 66'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-miterlimit='10' stroke-width='18' d='M9 57h240M9 9h240'/%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M0 0h512v306H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23b' width='375' height='375' transform='translate(68.5 104.5)'/%3e%3c/g%3e%3cuse xlink:href='%23c' width='258' height='66' transform='translate(127 339)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='b' viewBox='0 0 279 279'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M256.8 173.1A133.3 133.3 0 01122.4 40.7 130.5 130.5 0 01127 7.5 133 133 0 007.5 139.1c0 73.1 60 132.4 134.2 132.4 62.5 0 114.8-42.2 129.8-99.2a135.6 135.6 0 01-14.8.8Z'/%3e%3c/symbol%3e%3csymbol id='c' viewBox='0 0 258 66'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-miterlimit='10' stroke-width='18' d='M9 57h240M9 9h240'/%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M0 0h512v306H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23b' width='279' height='279' transform='translate(116.5 116.5)'/%3e%3c/g%3e%3cuse xlink:href='%23c' width='258' height='66' transform='translate(127 339)'/%3e%3c/svg%3e"},hail:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 136 114'%3e%3cpath fill='%2386c3db' d='M12 0a12 12 0 1012 12A12 12 0 0012 0Zm56 90a12 12 0 1012 12 12 12 0 00-12-12Zm56-60a12 12 0 1012 12 12 12 0 00-12-12Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3cuse xlink:href='%23b' width='136' height='114' transform='translate(188 350)'/%3e%3c/svg%3e",lightning:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 193 193'%3e%3ccircle cx='96.5' cy='96.5' r='40' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='9'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='9' d='M96.5 29.9V4.5m0 184v-25.4m47.1-113.7 18-18M31.4 161.6l18-18m0-94.2-18-18m130.2 130.2-18-18M4.5 96.5h25.4m158.6 0h-25.4'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='193' height='193' transform='translate(69.5 110.5)'/%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 96 176'%3e%3cpath fill='%23f6a823' d='M32 0 0 96h32l-16 80L96 64H48L80 0H32z'/%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23e' width='96' height='176' transform='translate(208 293)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 178 178'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='10' d='M163.6 110.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0181 5 84.7 84.7 0 005 88.7 84.8 84.8 0 0090.4 173a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='178' height='178' transform='translate(77 118)'/%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 96 176'%3e%3cpath fill='%23f6a823' d='M32 0 0 96h32l-16 80L96 64H48L80 0H32z'/%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23e' width='96' height='176' transform='translate(208 293)'/%3e%3c/svg%3e"},"lightning-rainy":{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='f' viewBox='0 0 193 193'%3e%3ccircle cx='96.5' cy='96.5' r='40' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='9'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='9' d='M96.5 29.9V4.5m0 184v-25.4m47.1-113.7 18-18M31.4 161.6l18-18m0-94.2-18-18m130.2 130.2-18-18M4.5 96.5h25.4m158.6 0h-25.4'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23f' width='193' height='193' transform='translate(69.5 110.5)'/%3e%3c/g%3e%3cuse xlink:href='%23g' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='h' viewBox='0 0 129 110'%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3csymbol id='i' viewBox='0 0 96 176'%3e%3cpath fill='%23f6a823' d='M32 0 0 96h32l-16 80L96 64H48L80 0H32z'/%3e%3c/symbol%3e%3clinearGradient id='b' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23e' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23h' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3cuse xlink:href='%23i' width='96' height='176' transform='translate(208 293)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='f' viewBox='0 0 178 178'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='10' d='M163.6 110.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0181 5 84.7 84.7 0 005 88.7 84.8 84.8 0 0090.4 173a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23f' width='178' height='178' transform='translate(77 118)'/%3e%3c/g%3e%3cuse xlink:href='%23g' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='h' viewBox='0 0 129 110'%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3csymbol id='i' viewBox='0 0 96 176'%3e%3cpath fill='%23f6a823' d='M32 0 0 96h32l-16 80L96 64H48L80 0H32z'/%3e%3c/symbol%3e%3clinearGradient id='b' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23e' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23h' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3cuse xlink:href='%23i' width='96' height='176' transform='translate(208 293)'/%3e%3c/svg%3e"},pouring:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23a' id='b' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23a' id='c' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 129 110'%3e%3cpath fill='url(%23a)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3cuse xlink:href='%23e' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3c/svg%3e",raindrop:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 175 260.9'%3e%3cpath fill='none' stroke='%232885c7' stroke-miterlimit='10' stroke-width='15' d='M87.5 13.4c-48.7 72-80 117-80 160.7s35.8 79.3 80 79.3 80-35.5 80-79.3-31.3-88.8-80-160.7Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='175' height='260.9' transform='translate(168.5 122.62)'/%3e%3c/svg%3e",raindrops:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M302 137c-48.7 72-80 117-80 160.8s35.8 79.2 80 79.2v135H0V0h302Z'/%3e%3c/clipPath%3e%3csymbol id='b' viewBox='0 0 175 260.9'%3e%3cpath fill='none' stroke='%232885c7' stroke-miterlimit='10' stroke-width='15' d='M87.5 13.4c-48.7 72-80 117-80 160.7s35.8 79.3 80 79.3 80-35.5 80-79.3-31.3-88.8-80-160.7Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='175' height='260.9' transform='translate(214.5 123.62)'/%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23b' width='175' height='260.9' transform='translate(122.5 123.62)'/%3e%3c/g%3e%3c/svg%3e",snowy:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 155.2 138'%3e%3cpath fill='%2386c3db' d='m41.2 30.5-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V4a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3A4 4 0 00.5 12 4 4 0 002 17.5l5.8 3.3a13.7 13.7 0 000 6.4L2 30.5A4 4 0 00.5 36a4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V44a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8A6 6 0 0127 27a6.1 6.1 0 01-8.3 2.2Zm78.6 91.3-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V94a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.4l-5.8 3.3a4 4 0 00-1.5 5.5 4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Zm78.6-48.7-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V44a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.4l-5.8 3.3a4 4 0 00-1.5 5.5 4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V84a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3cuse xlink:href='%23b' width='155.2' height='138' transform='translate(178.4 338)'/%3e%3c/svg%3e","snowy-rainy":"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='c' viewBox='0 0 155.2 138'%3e%3cpath fill='%2386c3db' d='m41.2 30.5-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V4a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3A4 4 0 00.5 12 4 4 0 002 17.5l5.8 3.3a13.7 13.7 0 000 6.4L2 30.5A4 4 0 00.5 36a4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V44a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8A6 6 0 0127 27a6.1 6.1 0 01-8.3 2.2Zm78.6 91.3-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V94a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.4l-5.8 3.3a4 4 0 00-1.5 5.5 4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Zm78.6-48.7-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V44a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.4l-5.8 3.3a4 4 0 00-1.5 5.5 4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V84a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 155.2 138'%3e%3cuse xlink:href='%23c' width='155.2' height='138'/%3e%3cpath fill='%230a5ad4' d='M21.6 98a8 8 0 01-8-8V78a8 8 0 0116 0v12a8 8 0 01-8 8Zm56-50a8 8 0 01-8-8V28a8 8 0 0116 0v12a8 8 0 01-8 8Zm56 90a8 8 0 01-8-8v-12a8 8 0 0116 0v12a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3cuse xlink:href='%23b' width='155.2' height='138' transform='translate(178.4 338)'/%3e%3c/svg%3e",sunny:{day:qr,night:Hr},windy:Yr,"windy-exceptional":Yr,exceptional:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-miterlimit='10' stroke-width='18' d='M344 256a88 88 0 11-88-88 88 88 0 0188 88ZM200 116.9l-3.8 7.7A269.7 269.7 0 00169 267h0m143.1 128 3.8-7.7A269.7 269.7 0 00343.2 245h0'/%3e%3c/svg%3e"},fill:{rainy:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3clinearGradient id='e' x1='78' x2='118' y1='63.4' y2='132.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3csymbol id='g' viewBox='0 0 196 196'%3e%3ccircle cx='98' cy='98' r='40' fill='url(%23e)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='4'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='12' d='M98 31.4V6m0 184v-25.4M145.1 51l18-17.9M33 163l18-17.9M51 51 33 33m130.1 130.1-18-18M6 98h25.4M190 98h-25.4'/%3e%3c/symbol%3e%3csymbol id='h' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 363 258'%3e%3cuse xlink:href='%23g' width='196' height='196'/%3e%3cuse xlink:href='%23h' width='350' height='222' transform='translate(13 36)'/%3e%3c/symbol%3e%3csymbol id='i' viewBox='0 0 129 110'%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23f' width='363' height='258' transform='translate(68 109)'/%3e%3cuse xlink:href='%23i' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='34.7' x2='119.2' y1='18.6' y2='165' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23c' id='d' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23c' id='e' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3csymbol id='g' viewBox='0 0 172 172'%3e%3cpath fill='url(%23b)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' d='M160.6 107.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0178 2 84.7 84.7 0 002 85.7 84.8 84.8 0 0087.4 170a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='h' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 351 246'%3e%3cuse xlink:href='%23g' width='172' height='172'/%3e%3cuse xlink:href='%23h' width='350' height='222' transform='translate(1 24)'/%3e%3c/symbol%3e%3csymbol id='i' viewBox='0 0 129 110'%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23e)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23f' width='351' height='246' transform='translate(80 121)'/%3e%3cuse xlink:href='%23i' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3c/svg%3e"},partlycloudy:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='d' viewBox='0 0 196 196'%3e%3ccircle cx='98' cy='98' r='40' fill='url(%23b)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='4'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='12' d='M98 31.4V6m0 184v-25.4M145.1 51l18-17.9M33 163l18-17.9M51 51 33 33m130.1 130.1-18-18M6 98h25.4M190 98h-25.4'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='c' viewBox='0 0 363 258'%3e%3cuse xlink:href='%23d' width='196' height='196'/%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(13 36)'/%3e%3c/symbol%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='78' x2='118' y1='63.4' y2='132.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3c/defs%3e%3cuse xlink:href='%23c' width='363' height='258' transform='translate(68 109)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='d' viewBox='0 0 172 172'%3e%3cpath fill='url(%23b)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' d='M160.6 107.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0178 2 84.7 84.7 0 002 85.7 84.8 84.8 0 0087.4 170a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='c' viewBox='0 0 351 246'%3e%3cuse xlink:href='%23d' width='172' height='172'/%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(1 24)'/%3e%3c/symbol%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='34.7' x2='119.2' y1='18.6' y2='165' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3c/defs%3e%3cuse xlink:href='%23c' width='351' height='246' transform='translate(80 121)'/%3e%3c/svg%3e"},cloudy:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3csymbol id='b' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='350' height='222' transform='translate(81 145)'/%3e%3c/svg%3e","clear-night":{day:Wr,night:Pr},fog:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='96' x2='168' y1='-2.4' y2='122.3' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23d4d7dd'/%3e%3cstop offset='.5' stop-color='%23d4d7dd'/%3e%3cstop offset='1' stop-color='%23bec1c6'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23a' id='b' x2='168' y1='-50.4' y2='74.3'/%3e%3clinearGradient id='c' x1='150' x2='234' y1='119.2' y2='264.8' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3csymbol id='e' viewBox='0 0 384 384'%3e%3ccircle cx='192' cy='192' r='84' fill='url(%23c)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='6'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M192 61.7V12m0 360v-49.7m92.2-222.5 35-35M64.8 319.2l35.1-35.1m0-184.4-35-35m254.5 254.5-35.1-35.1M61.7 192H12m360 0h-49.7'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 264 72'%3e%3cpath fill='none' stroke='url(%23a)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M12 60h240'/%3e%3cpath fill='none' stroke='url(%23b)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M12 12h240'/%3e%3c/symbol%3e%3cclipPath id='d'%3e%3cpath fill='none' d='M0 0h512v306H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg clip-path='url(%23d)'%3e%3cuse xlink:href='%23e' width='384' height='384' transform='translate(64 100)'/%3e%3c/g%3e%3cuse xlink:href='%23f' width='264' height='72' transform='translate(124 336)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='96' x2='168' y1='-2.4' y2='122.3' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23d4d7dd'/%3e%3cstop offset='.5' stop-color='%23d4d7dd'/%3e%3cstop offset='1' stop-color='%23bec1c6'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23a' id='b' x2='168' y1='-50.4' y2='74.3'/%3e%3clinearGradient id='c' x1='54.3' x2='187.2' y1='29' y2='259.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3csymbol id='e' viewBox='0 0 270 270'%3e%3cpath fill='url(%23c)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='6' d='M252.3 168.6A133.4 133.4 0 01118 36.2 130.5 130.5 0 01122.5 3 133 133 0 003 134.6C3 207.7 63 267 137.2 267c62.5 0 114.8-42.2 129.8-99.2a135.6 135.6 0 01-14.8.8Z'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 264 72'%3e%3cpath fill='none' stroke='url(%23a)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M12 60h240'/%3e%3cpath fill='none' stroke='url(%23b)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M12 12h240'/%3e%3c/symbol%3e%3cclipPath id='d'%3e%3cpath fill='none' d='M0 0h512v306H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg clip-path='url(%23d)'%3e%3cuse xlink:href='%23e' width='270' height='270' transform='translate(121 121)'/%3e%3c/g%3e%3cuse xlink:href='%23f' width='264' height='72' transform='translate(124 336)'/%3e%3c/svg%3e"},hail:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='6.5' x2='18.5' y1='2.1' y2='22.9' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='62.5' x2='74.5' y1='92.1' y2='112.9'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='118.5' x2='130.5' y1='32.1' y2='52.9'/%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 137 115'%3e%3cpath fill='url(%23b)' stroke='%2386c3db' stroke-miterlimit='10' d='M12.5.5a12 12 0 1012 12 12 12 0 00-12-12Z'/%3e%3cpath fill='url(%23c)' stroke='%2386c3db' stroke-miterlimit='10' d='M68.5 90.5a12 12 0 1012 12 12 12 0 00-12-12Z'/%3e%3cpath fill='url(%23d)' stroke='%2386c3db' stroke-miterlimit='10' d='M124.5 30.5a12 12 0 1012 12 12 12 0 00-12-12Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(81 145)'/%3e%3cuse xlink:href='%23f' width='137' height='115' transform='translate(187.5 349.5)'/%3e%3c/svg%3e",lightning:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='e' viewBox='0 0 196 196'%3e%3ccircle cx='98' cy='98' r='40' fill='url(%23c)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='4'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='12' d='M98 31.4V6m0 184v-25.4M145.1 51l18-17.9M33 163l18-17.9M51 51 33 33m130.1 130.1-18-18M6 98h25.4M190 98h-25.4'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 363 258'%3e%3cuse xlink:href='%23e' width='196' height='196'/%3e%3cuse xlink:href='%23f' width='350' height='222' transform='translate(13 36)'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 102.7 186.8'%3e%3cpath fill='url(%23b)' stroke='%23f6a823' stroke-miterlimit='10' stroke-width='4' d='m34.8 2-32 96h32l-16 80 80-112h-48l32-64h-48z'/%3e%3c/symbol%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='8.7' x2='80.9' y1='17.1' y2='142.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f7b23b'/%3e%3cstop offset='.5' stop-color='%23f7b23b'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='78' x2='118' y1='63.4' y2='132.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3c/defs%3e%3cuse xlink:href='%23d' width='363' height='258' transform='translate(68 109)'/%3e%3cuse xlink:href='%23g' width='102.7' height='186.7' transform='translate(205.23 291)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='e' viewBox='0 0 172 172'%3e%3cpath fill='url(%23c)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' d='M160.6 107.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0178 2 84.7 84.7 0 002 85.7 84.8 84.8 0 0087.4 170a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 351 246'%3e%3cuse xlink:href='%23e' width='172' height='172'/%3e%3cuse xlink:href='%23f' width='350' height='222' transform='translate(1 24)'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 102.7 186.8'%3e%3cpath fill='url(%23b)' stroke='%23f6a823' stroke-miterlimit='10' stroke-width='4' d='m34.8 2-32 96h32l-16 80 80-112h-48l32-64h-48z'/%3e%3c/symbol%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='8.7' x2='80.9' y1='17.1' y2='142.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f7b23b'/%3e%3cstop offset='.5' stop-color='%23f7b23b'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='34.7' x2='119.2' y1='18.6' y2='165' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3c/defs%3e%3cuse xlink:href='%23d' width='351' height='246' transform='translate(80 121)'/%3e%3cuse xlink:href='%23g' width='102.7' height='186.7' transform='translate(205.23 291)'/%3e%3c/svg%3e"},"lightning-rainy":{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='8.7' x2='80.9' y1='17.1' y2='142.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f7b23b'/%3e%3cstop offset='.5' stop-color='%23f7b23b'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23c' id='d' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23c' id='e' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3clinearGradient id='f' x1='78' x2='118' y1='63.4' y2='132.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3csymbol id='h' viewBox='0 0 196 196'%3e%3ccircle cx='98' cy='98' r='40' fill='url(%23f)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='4'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='12' d='M98 31.4V6m0 184v-25.4M145.1 51l18-17.9M33 163l18-17.9M51 51 33 33m130.1 130.1-18-18M6 98h25.4M190 98h-25.4'/%3e%3c/symbol%3e%3csymbol id='i' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 363 258'%3e%3cuse xlink:href='%23h' width='196' height='196'/%3e%3cuse xlink:href='%23i' width='350' height='222' transform='translate(13 36)'/%3e%3c/symbol%3e%3csymbol id='j' viewBox='0 0 129 110'%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23e)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3csymbol id='k' viewBox='0 0 102.7 186.8'%3e%3cpath fill='url(%23b)' stroke='%23f6a823' stroke-miterlimit='10' stroke-width='4' d='m34.8 2-32 96h32l-16 80 80-112h-48l32-64h-48z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23g' width='363' height='258' transform='translate(68 109)'/%3e%3cuse xlink:href='%23j' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3cuse xlink:href='%23k' width='102.7' height='186.7' transform='translate(205.23 291)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='8.7' x2='80.9' y1='17.1' y2='142.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f7b23b'/%3e%3cstop offset='.5' stop-color='%23f7b23b'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='34.7' x2='119.2' y1='18.6' y2='165' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient id='d' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23d' id='e' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23d' id='f' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3csymbol id='h' viewBox='0 0 172 172'%3e%3cpath fill='url(%23c)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' d='M160.6 107.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0178 2 84.7 84.7 0 002 85.7 84.8 84.8 0 0087.4 170a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='i' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 351 246'%3e%3cuse xlink:href='%23h' width='172' height='172'/%3e%3cuse xlink:href='%23i' width='350' height='222' transform='translate(1 24)'/%3e%3c/symbol%3e%3csymbol id='j' viewBox='0 0 129 110'%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23e)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23f)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3csymbol id='k' viewBox='0 0 102.7 186.8'%3e%3cpath fill='url(%23b)' stroke='%23f6a823' stroke-miterlimit='10' stroke-width='4' d='m34.8 2-32 96h32l-16 80 80-112h-48l32-64h-48z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23g' width='351' height='246' transform='translate(80 121)'/%3e%3cuse xlink:href='%23j' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3cuse xlink:href='%23k' width='102.7' height='186.7' transform='translate(205.23 291)'/%3e%3c/svg%3e"},pouring:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 129 110'%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(81 145)'/%3e%3cuse xlink:href='%23f' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3c/svg%3e",raindrop:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='14.8' x2='124.2' y1='42.3' y2='231.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%233392d6'/%3e%3cstop offset='.5' stop-color='%233392d6'/%3e%3cstop offset='1' stop-color='%232477b2'/%3e%3c/linearGradient%3e%3csymbol id='b' viewBox='0 0 164 245.6'%3e%3cpath fill='url(%23a)' stroke='%232885c7' stroke-miterlimit='10' stroke-width='4' d='M82 3.6c-48.7 72-80 117-80 160.7s35.8 79.3 80 79.3 80-35.5 80-79.3S130.7 75.5 82 3.6Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='164' height='245.6' transform='translate(174 132.43)'/%3e%3c/svg%3e",raindrops:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='14.8' x2='124.2' y1='42.3' y2='231.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%233392d6'/%3e%3cstop offset='.5' stop-color='%233392d6'/%3e%3cstop offset='1' stop-color='%232477b2'/%3e%3c/linearGradient%3e%3csymbol id='b' viewBox='0 0 164 245.6'%3e%3cpath fill='url(%23a)' stroke='%232885c7' stroke-miterlimit='10' stroke-width='4' d='M82 3.6c-48.7 72-80 117-80 160.7s35.8 79.3 80 79.3 80-35.5 80-79.3S130.7 75.5 82 3.6Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='164' height='245.6' transform='translate(128 133.43)'/%3e%3cuse xlink:href='%23b' width='164' height='245.6' transform='translate(220 133.43)'/%3e%3c/svg%3e",snowy:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='11.4' x2='32.8' y1='5.9' y2='43.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='67.4' x2='88.8' y1='95.9' y2='133.1'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='123.4' x2='144.8' y1='45.9' y2='83.1'/%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 156.2 139'%3e%3cpath fill='url(%23b)' stroke='%2386c3db' stroke-miterlimit='10' d='m41.7 31-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3V4.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2L6.6 11A4 4 0 001 12.5 4 4 0 002.5 18l5.8 3.3a13.7 13.7 0 000 6.5L2.5 31A4 4 0 001 36.5a4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008.2 0v-6.6a14.2 14.2 0 005.6-3.2l6 3.3a4 4 0 002 .5 4 4 0 003.4-2 4 4 0 00-1.4-5.5ZM19 29.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z'/%3e%3cpath fill='url(%23c)' stroke='%2386c3db' stroke-miterlimit='10' d='m97.7 121-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3v-6.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.5l-5.8 3.2a4 4 0 00-1.5 5.5 4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.7 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0V128a14.2 14.2 0 005.7-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.3-5.5ZM75 119.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z'/%3e%3cpath fill='url(%23d)' stroke='%2386c3db' stroke-miterlimit='10' d='m153.7 71-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3v-6.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.5l-5.8 3.2a4 4 0 00-1.5 5.5 4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.7 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0v-6.6a14.2 14.2 0 005.7-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.3-5.5ZM131 69.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(81 145)'/%3e%3cuse xlink:href='%23f' width='156.2' height='139' transform='translate(177.9 337.5)'/%3e%3c/svg%3e","snowy-rainy":"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='1389.9' x2='1399.3' y1='-1078.1' y2='-1053.5' gradientTransform='rotate(-9 8016.182 8229.021)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1453' x2='1462.5' y1='-1118.7' y2='-1094.1'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1494.2' x2='1503.7' y1='-1021.1' y2='-996.4'/%3e%3clinearGradient id='e' x1='11.4' x2='32.8' y1='5.9' y2='43.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23e' id='f' x1='67.4' x2='88.8' y1='95.9' y2='133.1'/%3e%3clinearGradient xlink:href='%23e' id='g' x1='123.4' x2='144.8' y1='45.9' y2='83.1'/%3e%3csymbol id='h' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='j' viewBox='0 0 156.2 139'%3e%3cpath fill='url(%23e)' stroke='%2386c3db' stroke-miterlimit='10' d='m41.7 31-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3V4.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2L6.6 11A4 4 0 001 12.5 4 4 0 002.5 18l5.8 3.3a13.7 13.7 0 000 6.5L2.5 31A4 4 0 001 36.5a4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008.2 0v-6.6a14.2 14.2 0 005.6-3.2l6 3.3a4 4 0 002 .5 4 4 0 003.4-2 4 4 0 00-1.4-5.5ZM19 29.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z'/%3e%3cpath fill='url(%23f)' stroke='%2386c3db' stroke-miterlimit='10' d='m97.7 121-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3v-6.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.5l-5.8 3.2a4 4 0 00-1.5 5.5 4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.7 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0V128a14.2 14.2 0 005.7-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.3-5.5ZM75 119.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z'/%3e%3cpath fill='url(%23g)' stroke='%2386c3db' stroke-miterlimit='10' d='m153.7 71-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3v-6.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.5l-5.8 3.2a4 4 0 00-1.5 5.5 4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.7 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0v-6.6a14.2 14.2 0 005.7-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.3-5.5ZM131 69.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z'/%3e%3c/symbol%3e%3csymbol id='i' viewBox='0 0 156.2 139'%3e%3cuse xlink:href='%23j' width='156.2' height='139'/%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M22.1 98.5a8 8 0 01-8-8v-12a8 8 0 0116 0v12a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M78.1 48.5a8 8 0 01-8-8v-12a8 8 0 0116 0v12a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M134.1 138.5a8 8 0 01-8-8v-12a8 8 0 0116 0v12a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23h' width='350' height='222' transform='translate(81 145)'/%3e%3cuse xlink:href='%23i' width='156.2' height='139' transform='translate(177.9 337.5)'/%3e%3c/svg%3e",sunny:{day:Wr,night:Pr},windy:Rr,"windy-exceptional":Rr,exceptional:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='175.8' x2='336.2' y1='117' y2='395' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23d4d7dd'/%3e%3cstop offset='.5' stop-color='%23d4d7dd'/%3e%3cstop offset='1' stop-color='%23bec1c6'/%3e%3c/linearGradient%3e%3c/defs%3e%3cpath fill='none' stroke='url(%23a)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M344 256a88 88 0 11-88-88 88 88 0 0188 88ZM200 116.9l-3.8 7.7A269.7 269.7 0 00169 267h0m143.1 128 3.8-7.7A269.7 269.7 0 00343.2 245h0'/%3e%3c/svg%3e"}};function Kr(e){try{return e()}catch(e){return console.error("clock-weather-card - Error while rendering clock-weather-card component:",e),D``}}class Xr extends Error{}class es extends Xr{constructor(e){super(`Invalid DateTime: ${e.toMessage()}`)}}class ts extends Xr{constructor(e){super(`Invalid Interval: ${e.toMessage()}`)}}class is extends Xr{constructor(e){super(`Invalid Duration: ${e.toMessage()}`)}}class rs extends Xr{}class ss extends Xr{constructor(e){super(`Invalid unit ${e}`)}}class as extends Xr{}class ns extends Xr{constructor(){super("Zone is an abstract class")}}const os="numeric",ls="short",cs="long",ds={year:os,month:os,day:os},us={year:os,month:ls,day:os},hs={year:os,month:ls,day:os,weekday:ls},ms={year:os,month:cs,day:os},fs={year:os,month:cs,day:os,weekday:cs},ps={hour:os,minute:os},ys={hour:os,minute:os,second:os},bs={hour:os,minute:os,second:os,timeZoneName:ls},gs={hour:os,minute:os,second:os,timeZoneName:cs},ws={hour:os,minute:os,hourCycle:"h23"},vs={hour:os,minute:os,second:os,hourCycle:"h23"},ks={hour:os,minute:os,second:os,hourCycle:"h23",timeZoneName:ls},xs={hour:os,minute:os,second:os,hourCycle:"h23",timeZoneName:cs},Ts={year:os,month:os,day:os,hour:os,minute:os},Ms={year:os,month:os,day:os,hour:os,minute:os,second:os},Ss={year:os,month:ls,day:os,hour:os,minute:os},_s={year:os,month:ls,day:os,hour:os,minute:os,second:os},Ns={year:os,month:ls,day:os,weekday:ls,hour:os,minute:os},Os={year:os,month:cs,day:os,hour:os,minute:os,timeZoneName:ls},As={year:os,month:cs,day:os,hour:os,minute:os,second:os,timeZoneName:ls},$s={year:os,month:cs,day:os,weekday:cs,hour:os,minute:os,timeZoneName:cs},Zs={year:os,month:cs,day:os,weekday:cs,hour:os,minute:os,second:os,timeZoneName:cs};class Cs{get type(){throw new ns}get name(){throw new ns}get ianaName(){return this.name}get isUniversal(){throw new ns}offsetName(e,t){throw new ns}formatOffset(e,t){throw new ns}offset(e){throw new ns}equals(e){throw new ns}get isValid(){throw new ns}}let Bs=null;class Us extends Cs{static get instance(){return null===Bs&&(Bs=new Us),Bs}get type(){return"system"}get name(){return(new Intl.DateTimeFormat).resolvedOptions().timeZone}get isUniversal(){return!1}offsetName(e,{format:t,locale:i}){return en(e,t,i)}formatOffset(e,t){return an(this.offset(e),t)}offset(e){return-new Date(e).getTimezoneOffset()}equals(e){return"system"===e.type}get isValid(){return!0}}const Gs=new Map;const Vs={year:0,month:1,day:2,era:3,hour:4,minute:5,second:6};const Es=new Map;class Ds extends Cs{static create(e){let t=Es.get(e);return void 0===t&&Es.set(e,t=new Ds(e)),t}static resetCache(){Es.clear(),Gs.clear()}static isValidSpecifier(e){return this.isValidZone(e)}static isValidZone(e){if(!e)return!1;try{return new Intl.DateTimeFormat("en-US",{timeZone:e}).format(),!0}catch(e){return!1}}constructor(e){super(),this.zoneName=e,this.valid=Ds.isValidZone(e)}get type(){return"iana"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(e,{format:t,locale:i}){return en(e,t,i,this.name)}formatOffset(e,t){return an(this.offset(e),t)}offset(e){if(!this.valid)return NaN;const t=new Date(e);if(isNaN(t))return NaN;const i=function(e){let t=Gs.get(e);return void 0===t&&(t=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",era:"short"}),Gs.set(e,t)),t}(this.name);let[r,s,a,n,o,l,c]=i.formatToParts?function(e,t){const i=e.formatToParts(t),r=[];for(let e=0;e=0?u:1e3+u,(Ja({year:r,month:s,day:a,hour:24===o?0:o,minute:l,second:c,millisecond:0})-d)/6e4}equals(e){return"iana"===e.type&&e.name===this.name}get isValid(){return this.valid}}let js={};const zs=new Map;function Is(e,t={}){const i=JSON.stringify([e,t]);let r=zs.get(i);return void 0===r&&(r=new Intl.DateTimeFormat(e,t),zs.set(i,r)),r}const Fs=new Map;const Ls=new Map;let Ps=null;const Hs=new Map;function Ws(e){let t=Hs.get(e);return void 0===t&&(t=new Intl.DateTimeFormat(e).resolvedOptions(),Hs.set(e,t)),t}const qs=new Map;function Rs(e,t,i,r){const s=e.listingMode();return"error"===s?null:"en"===s?i(t):r(t)}class Ys{constructor(e,t,i){this.padTo=i.padTo||0,this.floor=i.floor||!1;const{padTo:r,floor:s,...a}=i;if(!t||Object.keys(a).length>0){const t={useGrouping:!1,...i};i.padTo>0&&(t.minimumIntegerDigits=i.padTo),this.inf=function(e,t={}){const i=JSON.stringify([e,t]);let r=Fs.get(i);return void 0===r&&(r=new Intl.NumberFormat(e,t),Fs.set(i,r)),r}(e,t)}}format(e){if(this.inf){const t=this.floor?Math.floor(e):e;return this.inf.format(t)}return Fa(this.floor?Math.floor(e):Wa(e,3),this.padTo)}}class Js{constructor(e,t,i){let r;if(this.opts=i,this.originalZone=void 0,this.opts.timeZone)this.dt=e;else if("fixed"===e.zone.type){const t=e.offset/60*-1,i=t>=0?`Etc/GMT+${t}`:`Etc/GMT${t}`;0!==e.offset&&Ds.create(i).valid?(r=i,this.dt=e):(r="UTC",this.dt=0===e.offset?e:e.setZone("UTC").plus({minutes:e.offset}),this.originalZone=e.zone)}else"system"===e.zone.type?this.dt=e:"iana"===e.zone.type?(this.dt=e,r=e.zone.name):(r="UTC",this.dt=e.setZone("UTC").plus({minutes:e.offset}),this.originalZone=e.zone);const s={...this.opts};s.timeZone=s.timeZone||r,this.dtf=Is(t,s)}format(){return this.originalZone?this.formatToParts().map(({value:e})=>e).join(""):this.dtf.format(this.dt.toJSDate())}formatToParts(){const e=this.dtf.formatToParts(this.dt.toJSDate());return this.originalZone?e.map(e=>{if("timeZoneName"===e.type){const t=this.originalZone.offsetName(this.dt.ts,{locale:this.dt.locale,format:this.opts.timeZoneName});return{...e,value:t}}return e}):e}resolvedOptions(){return this.dtf.resolvedOptions()}}class Qs{constructor(e,t,i){this.opts={style:"long",...i},!t&&Va()&&(this.rtf=function(e,t={}){const{base:i,...r}=t,s=JSON.stringify([e,r]);let a=Ls.get(s);return void 0===a&&(a=new Intl.RelativeTimeFormat(e,t),Ls.set(s,a)),a}(e,i))}format(e,t){return this.rtf?this.rtf.format(e,t):function(e,t,i="always",r=!1){const s={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},a=-1===["hours","minutes","seconds"].indexOf(e);if("auto"===i&&a){const i="days"===e;switch(t){case 1:return i?"tomorrow":`next ${s[e][0]}`;case-1:return i?"yesterday":`last ${s[e][0]}`;case 0:return i?"today":`this ${s[e][0]}`}}const n=Object.is(t,-0)||t<0,o=Math.abs(t),l=1===o,c=s[e],d=r?l?c[1]:c[2]||c[1]:l?s[e][0]:e;return n?`${o} ${d} ago`:`in ${o} ${d}`}(t,e,this.opts.numeric,"long"!==this.opts.style)}formatToParts(e,t){return this.rtf?this.rtf.formatToParts(e,t):[]}}const Ks={firstDay:1,minimalDays:4,weekend:[6,7]};class Xs{static fromOpts(e){return Xs.create(e.locale,e.numberingSystem,e.outputCalendar,e.weekSettings,e.defaultToEN)}static create(e,t,i,r,s=!1){const a=e||ba.defaultLocale,n=a||(s?"en-US":Ps||(Ps=(new Intl.DateTimeFormat).resolvedOptions().locale,Ps)),o=t||ba.defaultNumberingSystem,l=i||ba.defaultOutputCalendar,c=za(r)||ba.defaultWeekSettings;return new Xs(n,o,l,c,a)}static resetCache(){Ps=null,zs.clear(),Fs.clear(),Ls.clear(),Hs.clear(),qs.clear()}static fromObject({locale:e,numberingSystem:t,outputCalendar:i,weekSettings:r}={}){return Xs.create(e,t,i,r)}constructor(e,t,i,r,s){const[a,n,o]=function(e){const t=e.indexOf("-x-");-1!==t&&(e=e.substring(0,t));const i=e.indexOf("-u-");if(-1===i)return[e];{let t,r;try{t=Is(e).resolvedOptions(),r=e}catch(s){const a=e.substring(0,i);t=Is(a).resolvedOptions(),r=a}const{numberingSystem:s,calendar:a}=t;return[r,s,a]}}(e);this.locale=a,this.numberingSystem=t||n||null,this.outputCalendar=i||o||null,this.weekSettings=r,this.intl=function(e,t,i){return i||t?(e.includes("-u-")||(e+="-u"),i&&(e+=`-ca-${i}`),t&&(e+=`-nu-${t}`),e):e}(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=s,this.fastNumbersCached=null}get fastNumbers(){var e;return null==this.fastNumbersCached&&(this.fastNumbersCached=(!(e=this).numberingSystem||"latn"===e.numberingSystem)&&("latn"===e.numberingSystem||!e.locale||e.locale.startsWith("en")||"latn"===Ws(e.locale).numberingSystem)),this.fastNumbersCached}listingMode(){const e=this.isEnglish(),t=!(null!==this.numberingSystem&&"latn"!==this.numberingSystem||null!==this.outputCalendar&&"gregory"!==this.outputCalendar);return e&&t?"en":"intl"}clone(e){return e&&0!==Object.getOwnPropertyNames(e).length?Xs.create(e.locale||this.specifiedLocale,e.numberingSystem||this.numberingSystem,e.outputCalendar||this.outputCalendar,za(e.weekSettings)||this.weekSettings,e.defaultToEN||!1):this}redefaultToEN(e={}){return this.clone({...e,defaultToEN:!0})}redefaultToSystem(e={}){return this.clone({...e,defaultToEN:!1})}months(e,t=!1){return Rs(this,e,dn,()=>{const i="ja"===this.intl||this.intl.startsWith("ja-"),r=(t&=!i)?{month:e,day:"numeric"}:{month:e},s=t?"format":"standalone";if(!this.monthsCache[s][e]){const t=i?e=>this.dtFormatter(e,r).format():e=>this.extract(e,r,"month");this.monthsCache[s][e]=function(e){const t=[];for(let i=1;i<=12;i++){const r=yl.utc(2009,i,1);t.push(e(r))}return t}(t)}return this.monthsCache[s][e]})}weekdays(e,t=!1){return Rs(this,e,fn,()=>{const i=t?{weekday:e,year:"numeric",month:"long",day:"numeric"}:{weekday:e},r=t?"format":"standalone";return this.weekdaysCache[r][e]||(this.weekdaysCache[r][e]=function(e){const t=[];for(let i=1;i<=7;i++){const r=yl.utc(2016,11,13+i);t.push(e(r))}return t}(e=>this.extract(e,i,"weekday"))),this.weekdaysCache[r][e]})}meridiems(){return Rs(this,void 0,()=>pn,()=>{if(!this.meridiemCache){const e={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[yl.utc(2016,11,13,9),yl.utc(2016,11,13,19)].map(t=>this.extract(t,e,"dayperiod"))}return this.meridiemCache})}eras(e){return Rs(this,e,wn,()=>{const t={era:e};return this.eraCache[e]||(this.eraCache[e]=[yl.utc(-40,1,1),yl.utc(2017,1,1)].map(e=>this.extract(e,t,"era"))),this.eraCache[e]})}extract(e,t,i){const r=this.dtFormatter(e,t).formatToParts().find(e=>e.type.toLowerCase()===i);return r?r.value:null}numberFormatter(e={}){return new Ys(this.intl,e.forceSimple||this.fastNumbers,e)}dtFormatter(e,t={}){return new Js(e,this.intl,t)}relFormatter(e={}){return new Qs(this.intl,this.isEnglish(),e)}listFormatter(e={}){return function(e,t={}){const i=JSON.stringify([e,t]);let r=js[i];return r||(r=new Intl.ListFormat(e,t),js[i]=r),r}(this.intl,e)}isEnglish(){return"en"===this.locale||"en-us"===this.locale.toLowerCase()||Ws(this.intl).locale.startsWith("en-us")}getWeekSettings(){return this.weekSettings?this.weekSettings:Ea()?function(e){let t=qs.get(e);if(!t){const i=new Intl.Locale(e);t="getWeekInfo"in i?i.getWeekInfo():i.weekInfo,"minimalDays"in t||(t={...Ks,...t}),qs.set(e,t)}return t}(this.locale):Ks}getStartOfWeek(){return this.getWeekSettings().firstDay}getMinDaysInFirstWeek(){return this.getWeekSettings().minimalDays}getWeekendDays(){return this.getWeekSettings().weekend}equals(e){return this.locale===e.locale&&this.numberingSystem===e.numberingSystem&&this.outputCalendar===e.outputCalendar}toString(){return`Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`}}let ea=null;class ta extends Cs{static get utcInstance(){return null===ea&&(ea=new ta(0)),ea}static instance(e){return 0===e?ta.utcInstance:new ta(e)}static parseSpecifier(e){if(e){const t=e.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(t)return new ta(tn(t[1],t[2]))}return null}constructor(e){super(),this.fixed=e}get type(){return"fixed"}get name(){return 0===this.fixed?"UTC":`UTC${an(this.fixed,"narrow")}`}get ianaName(){return 0===this.fixed?"Etc/UTC":`Etc/GMT${an(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(e,t){return an(this.fixed,t)}get isUniversal(){return!0}offset(){return this.fixed}equals(e){return"fixed"===e.type&&e.fixed===this.fixed}get isValid(){return!0}}class ia extends Cs{constructor(e){super(),this.zoneName=e}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}}function ra(e,t){if(Ba(e)||null===e)return t;if(e instanceof Cs)return e;if(function(e){return"string"==typeof e}(e)){const i=e.toLowerCase();return"default"===i?t:"local"===i||"system"===i?Us.instance:"utc"===i||"gmt"===i?ta.utcInstance:ta.parseSpecifier(i)||Ds.create(e)}return Ua(e)?ta.instance(e):"object"==typeof e&&"offset"in e&&"function"==typeof e.offset?e:new ia(e)}const sa={arab:"[٠-٩]",arabext:"[۰-۹]",bali:"[᭐-᭙]",beng:"[০-৯]",deva:"[०-९]",fullwide:"[0-9]",gujr:"[૦-૯]",hanidec:"[〇|一|二|三|四|五|六|七|八|九]",khmr:"[០-៩]",knda:"[೦-೯]",laoo:"[໐-໙]",limb:"[᥆-᥏]",mlym:"[൦-൯]",mong:"[᠐-᠙]",mymr:"[၀-၉]",orya:"[୦-୯]",tamldec:"[௦-௯]",telu:"[౦-౯]",thai:"[๐-๙]",tibt:"[༠-༩]",latn:"\\d"},aa={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},na=sa.hanidec.replace(/[\[|\]]/g,"").split("");const oa=new Map;function la({numberingSystem:e},t=""){const i=e||"latn";let r=oa.get(i);void 0===r&&(r=new Map,oa.set(i,r));let s=r.get(t);return void 0===s&&(s=new RegExp(`${sa[i]}${t}`),r.set(t,s)),s}let ca,da=()=>Date.now(),ua="system",ha=null,ma=null,fa=null,pa=60,ya=null;class ba{static get now(){return da}static set now(e){da=e}static set defaultZone(e){ua=e}static get defaultZone(){return ra(ua,Us.instance)}static get defaultLocale(){return ha}static set defaultLocale(e){ha=e}static get defaultNumberingSystem(){return ma}static set defaultNumberingSystem(e){ma=e}static get defaultOutputCalendar(){return fa}static set defaultOutputCalendar(e){fa=e}static get defaultWeekSettings(){return ya}static set defaultWeekSettings(e){ya=za(e)}static get twoDigitCutoffYear(){return pa}static set twoDigitCutoffYear(e){pa=e%100}static get throwOnInvalid(){return ca}static set throwOnInvalid(e){ca=e}static resetCaches(){Xs.resetCache(),Ds.resetCache(),yl.resetCache(),oa.clear()}}class ga{constructor(e,t){this.reason=e,this.explanation=t}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}}const wa=[0,31,59,90,120,151,181,212,243,273,304,334],va=[0,31,60,91,121,152,182,213,244,274,305,335];function ka(e,t){return new ga("unit out of range",`you specified ${t} (of type ${typeof t}) as a ${e}, which is invalid`)}function xa(e,t,i){const r=new Date(Date.UTC(e,t-1,i));e<100&&e>=0&&r.setUTCFullYear(r.getUTCFullYear()-1900);const s=r.getUTCDay();return 0===s?7:s}function Ta(e,t,i){return i+(qa(e)?va:wa)[t-1]}function Ma(e,t){const i=qa(e)?va:wa,r=i.findIndex(e=>eKa(r,t,i)?(l=r+1,c=1):l=r,{weekYear:l,weekNumber:c,weekday:o,...nn(e)}}function Na(e,t=4,i=1){const{weekYear:r,weekNumber:s,weekday:a}=e,n=Sa(xa(r,1,t),i),o=Ra(r);let l,c=7*s+a-n-7+t;c<1?(l=r-1,c+=Ra(l)):c>o?(l=r+1,c-=Ra(r)):l=r;const{month:d,day:u}=Ma(l,c);return{year:l,month:d,day:u,...nn(e)}}function Oa(e){const{year:t,month:i,day:r}=e;return{year:t,ordinal:Ta(t,i,r),...nn(e)}}function Aa(e){const{year:t,ordinal:i}=e,{month:r,day:s}=Ma(t,i);return{year:t,month:r,day:s,...nn(e)}}function $a(e,t){if(!Ba(e.localWeekday)||!Ba(e.localWeekNumber)||!Ba(e.localWeekYear)){if(!Ba(e.weekday)||!Ba(e.weekNumber)||!Ba(e.weekYear))throw new rs("Cannot mix locale-based week fields with ISO-based week fields");return Ba(e.localWeekday)||(e.weekday=e.localWeekday),Ba(e.localWeekNumber)||(e.weekNumber=e.localWeekNumber),Ba(e.localWeekYear)||(e.weekYear=e.localWeekYear),delete e.localWeekday,delete e.localWeekNumber,delete e.localWeekYear,{minDaysInFirstWeek:t.getMinDaysInFirstWeek(),startOfWeek:t.getStartOfWeek()}}return{minDaysInFirstWeek:4,startOfWeek:1}}function Za(e){const t=Ga(e.year),i=Ia(e.month,1,12),r=Ia(e.day,1,Ya(e.year,e.month));return t?i?!r&&ka("day",e.day):ka("month",e.month):ka("year",e.year)}function Ca(e){const{hour:t,minute:i,second:r,millisecond:s}=e,a=Ia(t,0,23)||24===t&&0===i&&0===r&&0===s,n=Ia(i,0,59),o=Ia(r,0,59),l=Ia(s,0,999);return a?n?o?!l&&ka("millisecond",s):ka("second",r):ka("minute",i):ka("hour",t)}function Ba(e){return void 0===e}function Ua(e){return"number"==typeof e}function Ga(e){return"number"==typeof e&&e%1==0}function Va(){try{return"undefined"!=typeof Intl&&!!Intl.RelativeTimeFormat}catch(e){return!1}}function Ea(){try{return"undefined"!=typeof Intl&&!!Intl.Locale&&("weekInfo"in Intl.Locale.prototype||"getWeekInfo"in Intl.Locale.prototype)}catch(e){return!1}}function Da(e,t,i){if(0!==e.length)return e.reduce((e,r)=>{const s=[t(r),r];return e&&i(e[0],s[0])===e[0]?e:s},null)[1]}function ja(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function za(e){if(null==e)return null;if("object"!=typeof e)throw new as("Week settings must be an object");if(!Ia(e.firstDay,1,7)||!Ia(e.minimalDays,1,7)||!Array.isArray(e.weekend)||e.weekend.some(e=>!Ia(e,1,7)))throw new as("Invalid week settings");return{firstDay:e.firstDay,minimalDays:e.minimalDays,weekend:Array.from(e.weekend)}}function Ia(e,t,i){return Ga(e)&&e>=t&&e<=i}function Fa(e,t=2){let i;return i=e<0?"-"+(""+-e).padStart(t,"0"):(""+e).padStart(t,"0"),i}function La(e){return Ba(e)||null===e||""===e?void 0:parseInt(e,10)}function Pa(e){return Ba(e)||null===e||""===e?void 0:parseFloat(e)}function Ha(e){if(!Ba(e)&&null!==e&&""!==e){const t=1e3*parseFloat("0."+e);return Math.floor(t)}}function Wa(e,t,i="round"){const r=10**t;switch(i){case"expand":return e>0?Math.ceil(e*r)/r:Math.floor(e*r)/r;case"trunc":return Math.trunc(e*r)/r;case"round":return Math.round(e*r)/r;case"floor":return Math.floor(e*r)/r;case"ceil":return Math.ceil(e*r)/r;default:throw new RangeError(`Value rounding ${i} is out of range`)}}function qa(e){return e%4==0&&(e%100!=0||e%400==0)}function Ra(e){return qa(e)?366:365}function Ya(e,t){const i=function(e,t){return e-t*Math.floor(e/t)}(t-1,12)+1;return 2===i?qa(e+(t-i)/12)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][i-1]}function Ja(e){let t=Date.UTC(e.year,e.month-1,e.day,e.hour,e.minute,e.second,e.millisecond);return e.year<100&&e.year>=0&&(t=new Date(t),t.setUTCFullYear(e.year,e.month-1,e.day)),+t}function Qa(e,t,i){return-Sa(xa(e,1,t),i)+t-1}function Ka(e,t=4,i=1){const r=Qa(e,t,i),s=Qa(e+1,t,i);return(Ra(e)-r+s)/7}function Xa(e){return e>99?e:e>ba.twoDigitCutoffYear?1900+e:2e3+e}function en(e,t,i,r=null){const s=new Date(e),a={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};r&&(a.timeZone=r);const n={timeZoneName:t,...a},o=new Intl.DateTimeFormat(i,n).formatToParts(s).find(e=>"timezonename"===e.type.toLowerCase());return o?o.value:null}function tn(e,t){let i=parseInt(e,10);Number.isNaN(i)&&(i=0);const r=parseInt(t,10)||0;return 60*i+(i<0||Object.is(i,-0)?-r:r)}function rn(e){const t=Number(e);if("boolean"==typeof e||""===e||!Number.isFinite(t))throw new as(`Invalid unit value ${e}`);return t}function sn(e,t){const i={};for(const r in e)if(ja(e,r)){const s=e[r];if(null==s)continue;i[t(r)]=rn(s)}return i}function an(e,t){const i=Math.trunc(Math.abs(e/60)),r=Math.trunc(Math.abs(e%60)),s=e>=0?"+":"-";switch(t){case"short":return`${s}${Fa(i,2)}:${Fa(r,2)}`;case"narrow":return`${s}${i}${r>0?`:${r}`:""}`;case"techie":return`${s}${Fa(i,2)}${Fa(r,2)}`;default:throw new RangeError(`Value format ${t} is out of range for property format`)}}function nn(e){return function(e,t){return t.reduce((t,i)=>(t[i]=e[i],t),{})}(e,["hour","minute","second","millisecond"])}const on=["January","February","March","April","May","June","July","August","September","October","November","December"],ln=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],cn=["J","F","M","A","M","J","J","A","S","O","N","D"];function dn(e){switch(e){case"narrow":return[...cn];case"short":return[...ln];case"long":return[...on];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}const un=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],hn=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],mn=["M","T","W","T","F","S","S"];function fn(e){switch(e){case"narrow":return[...mn];case"short":return[...hn];case"long":return[...un];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}const pn=["AM","PM"],yn=["Before Christ","Anno Domini"],bn=["BC","AD"],gn=["B","A"];function wn(e){switch(e){case"narrow":return[...gn];case"short":return[...bn];case"long":return[...yn];default:return null}}function vn(e,t){let i="";for(const r of e)r.literal?i+=r.val:i+=t(r.val);return i}const kn={D:ds,DD:us,DDD:ms,DDDD:fs,t:ps,tt:ys,ttt:bs,tttt:gs,T:ws,TT:vs,TTT:ks,TTTT:xs,f:Ts,ff:Ss,fff:Os,ffff:$s,F:Ms,FF:_s,FFF:As,FFFF:Zs};class xn{static create(e,t={}){return new xn(e,t)}static parseFormat(e){let t=null,i="",r=!1;const s=[];for(let a=0;a0||r)&&s.push({literal:r||/^\s+$/.test(i),val:""===i?"'":i}),t=null,i="",r=!r):r||n===t?i+=n:(i.length>0&&s.push({literal:/^\s+$/.test(i),val:i}),i=n,t=n)}return i.length>0&&s.push({literal:r||/^\s+$/.test(i),val:i}),s}static macroTokenToFormatOpts(e){return kn[e]}constructor(e,t){this.opts=t,this.loc=e,this.systemLoc=null}formatWithSystemDefault(e,t){null===this.systemLoc&&(this.systemLoc=this.loc.redefaultToSystem());return this.systemLoc.dtFormatter(e,{...this.opts,...t}).format()}dtFormatter(e,t={}){return this.loc.dtFormatter(e,{...this.opts,...t})}formatDateTime(e,t){return this.dtFormatter(e,t).format()}formatDateTimeParts(e,t){return this.dtFormatter(e,t).formatToParts()}formatInterval(e,t){return this.dtFormatter(e.start,t).dtf.formatRange(e.start.toJSDate(),e.end.toJSDate())}resolvedOptions(e,t){return this.dtFormatter(e,t).resolvedOptions()}num(e,t=0,i=void 0){if(this.opts.forceSimple)return Fa(e,t);const r={...this.opts};return t>0&&(r.padTo=t),i&&(r.signDisplay=i),this.loc.numberFormatter(r).format(e)}formatDateTimeFromString(e,t){const i="en"===this.loc.listingMode(),r=this.loc.outputCalendar&&"gregory"!==this.loc.outputCalendar,s=(t,i)=>this.loc.extract(e,t,i),a=t=>e.isOffsetFixed&&0===e.offset&&t.allowZ?"Z":e.isValid?e.zone.formatOffset(e.ts,t.format):"",n=()=>i?function(e){return pn[e.hour<12?0:1]}(e):s({hour:"numeric",hourCycle:"h12"},"dayperiod"),o=(t,r)=>i?function(e,t){return dn(t)[e.month-1]}(e,t):s(r?{month:t}:{month:t,day:"numeric"},"month"),l=(t,r)=>i?function(e,t){return fn(t)[e.weekday-1]}(e,t):s(r?{weekday:t}:{weekday:t,month:"long",day:"numeric"},"weekday"),c=t=>{const i=xn.macroTokenToFormatOpts(t);return i?this.formatWithSystemDefault(e,i):t},d=t=>i?function(e,t){return wn(t)[e.year<0?0:1]}(e,t):s({era:t},"era");return vn(xn.parseFormat(t),t=>{switch(t){case"S":return this.num(e.millisecond);case"u":case"SSS":return this.num(e.millisecond,3);case"s":return this.num(e.second);case"ss":return this.num(e.second,2);case"uu":return this.num(Math.floor(e.millisecond/10),2);case"uuu":return this.num(Math.floor(e.millisecond/100));case"m":return this.num(e.minute);case"mm":return this.num(e.minute,2);case"h":return this.num(e.hour%12==0?12:e.hour%12);case"hh":return this.num(e.hour%12==0?12:e.hour%12,2);case"H":return this.num(e.hour);case"HH":return this.num(e.hour,2);case"Z":return a({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return a({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return a({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return e.zone.offsetName(e.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return e.zone.offsetName(e.ts,{format:"long",locale:this.loc.locale});case"z":return e.zoneName;case"a":return n();case"d":return r?s({day:"numeric"},"day"):this.num(e.day);case"dd":return r?s({day:"2-digit"},"day"):this.num(e.day,2);case"c":case"E":return this.num(e.weekday);case"ccc":return l("short",!0);case"cccc":return l("long",!0);case"ccccc":return l("narrow",!0);case"EEE":return l("short",!1);case"EEEE":return l("long",!1);case"EEEEE":return l("narrow",!1);case"L":return r?s({month:"numeric",day:"numeric"},"month"):this.num(e.month);case"LL":return r?s({month:"2-digit",day:"numeric"},"month"):this.num(e.month,2);case"LLL":return o("short",!0);case"LLLL":return o("long",!0);case"LLLLL":return o("narrow",!0);case"M":return r?s({month:"numeric"},"month"):this.num(e.month);case"MM":return r?s({month:"2-digit"},"month"):this.num(e.month,2);case"MMM":return o("short",!1);case"MMMM":return o("long",!1);case"MMMMM":return o("narrow",!1);case"y":return r?s({year:"numeric"},"year"):this.num(e.year);case"yy":return r?s({year:"2-digit"},"year"):this.num(e.year.toString().slice(-2),2);case"yyyy":return r?s({year:"numeric"},"year"):this.num(e.year,4);case"yyyyyy":return r?s({year:"numeric"},"year"):this.num(e.year,6);case"G":return d("short");case"GG":return d("long");case"GGGGG":return d("narrow");case"kk":return this.num(e.weekYear.toString().slice(-2),2);case"kkkk":return this.num(e.weekYear,4);case"W":return this.num(e.weekNumber);case"WW":return this.num(e.weekNumber,2);case"n":return this.num(e.localWeekNumber);case"nn":return this.num(e.localWeekNumber,2);case"ii":return this.num(e.localWeekYear.toString().slice(-2),2);case"iiii":return this.num(e.localWeekYear,4);case"o":return this.num(e.ordinal);case"ooo":return this.num(e.ordinal,3);case"q":return this.num(e.quarter);case"qq":return this.num(e.quarter,2);case"X":return this.num(Math.floor(e.ts/1e3));case"x":return this.num(e.ts);default:return c(t)}})}formatDurationFromString(e,t){const i="negativeLargestOnly"===this.opts.signMode?-1:1,r=e=>{switch(e[0]){case"S":return"milliseconds";case"s":return"seconds";case"m":return"minutes";case"h":return"hours";case"d":return"days";case"w":return"weeks";case"M":return"months";case"y":return"years";default:return null}},s=xn.parseFormat(t),a=s.reduce((e,{literal:t,val:i})=>t?e:e.concat(i),[]),n=e.shiftTo(...a.map(r).filter(e=>e));return vn(s,((e,t)=>s=>{const a=r(s);if(a){const r=t.isNegativeDuration&&a!==t.largestUnit?i:1;let n;return n="negativeLargestOnly"===this.opts.signMode&&a!==t.largestUnit?"never":"all"===this.opts.signMode?"always":"auto",this.num(e.get(a)*r,s.length,n)}return s})(n,{isNegativeDuration:n<0,largestUnit:Object.keys(n.values)[0]}))}}const Tn=/[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/;function Mn(...e){const t=e.reduce((e,t)=>e+t.source,"");return RegExp(`^${t}$`)}function Sn(...e){return t=>e.reduce(([e,i,r],s)=>{const[a,n,o]=s(t,r);return[{...e,...a},n||i,o]},[{},null,1]).slice(0,2)}function _n(e,...t){if(null==e)return[null,null];for(const[i,r]of t){const t=i.exec(e);if(t)return r(t)}return[null,null]}function Nn(...e){return(t,i)=>{const r={};let s;for(s=0;svoid 0!==e&&(t||e&&d)?-e:e;return[{years:h(Pa(i)),months:h(Pa(r)),weeks:h(Pa(s)),days:h(Pa(a)),hours:h(Pa(n)),minutes:h(Pa(o)),seconds:h(Pa(l),"-0"===l),milliseconds:h(Ha(c),u)}]}const Ln={GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Pn(e,t,i,r,s,a,n){const o={year:2===t.length?Xa(La(t)):La(t),month:ln.indexOf(i)+1,day:La(r),hour:La(s),minute:La(a)};return n&&(o.second=La(n)),e&&(o.weekday=e.length>3?un.indexOf(e)+1:hn.indexOf(e)+1),o}const Hn=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function Wn(e){const[,t,i,r,s,a,n,o,l,c,d,u]=e,h=Pn(t,s,r,i,a,n,o);let m;return m=l?Ln[l]:c?0:tn(d,u),[h,new ta(m)]}const qn=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,Rn=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,Yn=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function Jn(e){const[,t,i,r,s,a,n,o]=e;return[Pn(t,s,r,i,a,n,o),ta.utcInstance]}function Qn(e){const[,t,i,r,s,a,n,o]=e;return[Pn(t,o,i,r,s,a,n),ta.utcInstance]}const Kn=Mn(/([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/,Zn),Xn=Mn(/(\d{4})-?W(\d\d)(?:-?(\d))?/,Zn),eo=Mn(/(\d{4})-?(\d{3})/,Zn),to=Mn($n),io=Sn(function(e,t){return[{year:Vn(e,t),month:Vn(e,t+1,1),day:Vn(e,t+2,1)},null,t+3]},En,Dn,jn),ro=Sn(Cn,En,Dn,jn),so=Sn(Bn,En,Dn,jn),ao=Sn(En,Dn,jn);const no=Sn(En);const oo=Mn(/(\d{4})-(\d\d)-(\d\d)/,Gn),lo=Mn(Un),co=Sn(En,Dn,jn);const uo="Invalid Duration",ho={weeks:{days:7,hours:168,minutes:10080,seconds:604800,milliseconds:6048e5},days:{hours:24,minutes:1440,seconds:86400,milliseconds:864e5},hours:{minutes:60,seconds:3600,milliseconds:36e5},minutes:{seconds:60,milliseconds:6e4},seconds:{milliseconds:1e3}},mo={years:{quarters:4,months:12,weeks:52,days:365,hours:8760,minutes:525600,seconds:31536e3,milliseconds:31536e6},quarters:{months:3,weeks:13,days:91,hours:2184,minutes:131040,seconds:7862400,milliseconds:78624e5},months:{weeks:4,days:30,hours:720,minutes:43200,seconds:2592e3,milliseconds:2592e6},...ho},fo=365.2425,po=30.436875,yo={years:{quarters:4,months:12,weeks:52.1775,days:fo,hours:8765.82,minutes:525949.2,seconds:525949.2*60,milliseconds:525949.2*60*1e3},quarters:{months:3,weeks:13.044375,days:91.310625,hours:2191.455,minutes:131487.3,seconds:525949.2*60/4,milliseconds:7889237999.999999},months:{weeks:4.3481250000000005,days:po,hours:730.485,minutes:43829.1,seconds:2629746,milliseconds:2629746e3},...ho},bo=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],go=bo.slice(0).reverse();function wo(e,t,i=!1){const r={values:i?t.values:{...e.values,...t.values||{}},loc:e.loc.clone(t.loc),conversionAccuracy:t.conversionAccuracy||e.conversionAccuracy,matrix:t.matrix||e.matrix};return new To(r)}function vo(e,t){let i=t.milliseconds??0;for(const r of go.slice(1))t[r]&&(i+=t[r]*e[r].milliseconds);return i}function ko(e,t){const i=vo(e,t)<0?-1:1;bo.reduceRight((r,s)=>{if(Ba(t[s]))return r;if(r){const a=t[r]*i,n=e[s][r],o=Math.floor(a/n);t[s]+=o*i,t[r]-=o*n*i}return s},null),bo.reduce((i,r)=>{if(Ba(t[r]))return i;if(i){const s=t[i]%1;t[i]-=s,t[r]+=s*e[i][r]}return r},null)}function xo(e){const t={};for(const[i,r]of Object.entries(e))0!==r&&(t[i]=r);return t}class To{constructor(e){const t="longterm"===e.conversionAccuracy||!1;let i=t?yo:mo;e.matrix&&(i=e.matrix),this.values=e.values,this.loc=e.loc||Xs.create(),this.conversionAccuracy=t?"longterm":"casual",this.invalid=e.invalid||null,this.matrix=i,this.isLuxonDuration=!0}static fromMillis(e,t){return To.fromObject({milliseconds:e},t)}static fromObject(e,t={}){if(null==e||"object"!=typeof e)throw new as("Duration.fromObject: argument expected to be an object, got "+(null===e?"null":typeof e));return new To({values:sn(e,To.normalizeUnit),loc:Xs.fromObject(t),conversionAccuracy:t.conversionAccuracy,matrix:t.matrix})}static fromDurationLike(e){if(Ua(e))return To.fromMillis(e);if(To.isDuration(e))return e;if("object"==typeof e)return To.fromObject(e);throw new as(`Unknown duration argument ${e} of type ${typeof e}`)}static fromISO(e,t){const[i]=function(e){return _n(e,[In,Fn])}(e);return i?To.fromObject(i,t):To.invalid("unparsable",`the input "${e}" can't be parsed as ISO 8601`)}static fromISOTime(e,t){const[i]=function(e){return _n(e,[zn,no])}(e);return i?To.fromObject(i,t):To.invalid("unparsable",`the input "${e}" can't be parsed as ISO 8601`)}static invalid(e,t=null){if(!e)throw new as("need to specify a reason the Duration is invalid");const i=e instanceof ga?e:new ga(e,t);if(ba.throwOnInvalid)throw new is(i);return new To({invalid:i})}static normalizeUnit(e){const t={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[e?e.toLowerCase():e];if(!t)throw new ss(e);return t}static isDuration(e){return e&&e.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(e,t={}){const i={...t,floor:!1!==t.round&&!1!==t.floor};return this.isValid?xn.create(this.loc,i).formatDurationFromString(this,e):uo}toHuman(e={}){if(!this.isValid)return uo;const t=!1!==e.showZeros,i=bo.map(i=>{const r=this.values[i];return Ba(r)||0===r&&!t?null:this.loc.numberFormatter({style:"unit",unitDisplay:"long",...e,unit:i.slice(0,-1)}).format(r)}).filter(e=>e);return this.loc.listFormatter({type:"conjunction",style:e.listStyle||"narrow",...e}).format(i)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let e="P";return 0!==this.years&&(e+=this.years+"Y"),0===this.months&&0===this.quarters||(e+=this.months+3*this.quarters+"M"),0!==this.weeks&&(e+=this.weeks+"W"),0!==this.days&&(e+=this.days+"D"),0===this.hours&&0===this.minutes&&0===this.seconds&&0===this.milliseconds||(e+="T"),0!==this.hours&&(e+=this.hours+"H"),0!==this.minutes&&(e+=this.minutes+"M"),0===this.seconds&&0===this.milliseconds||(e+=Wa(this.seconds+this.milliseconds/1e3,3)+"S"),"P"===e&&(e+="T0S"),e}toISOTime(e={}){if(!this.isValid)return null;const t=this.toMillis();if(t<0||t>=864e5)return null;e={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended",...e,includeOffset:!1};return yl.fromMillis(t,{zone:"UTC"}).toISOTime(e)}toJSON(){return this.toISO()}toString(){return this.toISO()}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Duration { values: ${JSON.stringify(this.values)} }`:`Duration { Invalid, reason: ${this.invalidReason} }`}toMillis(){return this.isValid?vo(this.matrix,this.values):NaN}valueOf(){return this.toMillis()}plus(e){if(!this.isValid)return this;const t=To.fromDurationLike(e),i={};for(const e of bo)(ja(t.values,e)||ja(this.values,e))&&(i[e]=t.get(e)+this.get(e));return wo(this,{values:i},!0)}minus(e){if(!this.isValid)return this;const t=To.fromDurationLike(e);return this.plus(t.negate())}mapUnits(e){if(!this.isValid)return this;const t={};for(const i of Object.keys(this.values))t[i]=rn(e(this.values[i],i));return wo(this,{values:t},!0)}get(e){return this[To.normalizeUnit(e)]}set(e){if(!this.isValid)return this;return wo(this,{values:{...this.values,...sn(e,To.normalizeUnit)}})}reconfigure({locale:e,numberingSystem:t,conversionAccuracy:i,matrix:r}={}){return wo(this,{loc:this.loc.clone({locale:e,numberingSystem:t}),matrix:r,conversionAccuracy:i})}as(e){return this.isValid?this.shiftTo(e).get(e):NaN}normalize(){if(!this.isValid)return this;const e=this.toObject();return ko(this.matrix,e),wo(this,{values:e},!0)}rescale(){if(!this.isValid)return this;return wo(this,{values:xo(this.normalize().shiftToAll().toObject())},!0)}shiftTo(...e){if(!this.isValid)return this;if(0===e.length)return this;e=e.map(e=>To.normalizeUnit(e));const t={},i={},r=this.toObject();let s;for(const a of bo)if(e.indexOf(a)>=0){s=a;let e=0;for(const t in i)e+=this.matrix[t][a]*i[t],i[t]=0;Ua(r[a])&&(e+=r[a]);const n=Math.trunc(e);t[a]=n,i[a]=(1e3*e-1e3*n)/1e3}else Ua(r[a])&&(i[a]=r[a]);for(const e in i)0!==i[e]&&(t[s]+=e===s?i[e]:i[e]/this.matrix[s][e]);return ko(this.matrix,t),wo(this,{values:t},!0)}shiftToAll(){return this.isValid?this.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds"):this}negate(){if(!this.isValid)return this;const e={};for(const t of Object.keys(this.values))e[t]=0===this.values[t]?0:-this.values[t];return wo(this,{values:e},!0)}removeZeros(){if(!this.isValid)return this;return wo(this,{values:xo(this.values)},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return null===this.invalid}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(e){if(!this.isValid||!e.isValid)return!1;if(!this.loc.equals(e.loc))return!1;function t(e,t){return void 0===e||0===e?void 0===t||0===t:e===t}for(const i of bo)if(!t(this.values[i],e.values[i]))return!1;return!0}}const Mo="Invalid Interval";class So{constructor(e){this.s=e.start,this.e=e.end,this.invalid=e.invalid||null,this.isLuxonInterval=!0}static invalid(e,t=null){if(!e)throw new as("need to specify a reason the Interval is invalid");const i=e instanceof ga?e:new ga(e,t);if(ba.throwOnInvalid)throw new ts(i);return new So({invalid:i})}static fromDateTimes(e,t){const i=bl(e),r=bl(t),s=function(e,t){return e&&e.isValid?t&&t.isValid?te}isBefore(e){return!!this.isValid&&this.e<=e}contains(e){return!!this.isValid&&(this.s<=e&&this.e>e)}set({start:e,end:t}={}){return this.isValid?So.fromDateTimes(e||this.s,t||this.e):this}splitAt(...e){if(!this.isValid)return[];const t=e.map(bl).filter(e=>this.contains(e)).sort((e,t)=>e.toMillis()-t.toMillis()),i=[];let{s:r}=this,s=0;for(;r+this.e?this.e:e;i.push(So.fromDateTimes(r,a)),r=a,s+=1}return i}splitBy(e){const t=To.fromDurationLike(e);if(!this.isValid||!t.isValid||0===t.as("milliseconds"))return[];let i,{s:r}=this,s=1;const a=[];for(;re*s));i=+e>+this.e?this.e:e,a.push(So.fromDateTimes(r,i)),r=i,s+=1}return a}divideEqually(e){return this.isValid?this.splitBy(this.length()/e).slice(0,e):[]}overlaps(e){return this.e>e.s&&this.s=e.e)}equals(e){return!(!this.isValid||!e.isValid)&&(this.s.equals(e.s)&&this.e.equals(e.e))}intersection(e){if(!this.isValid)return this;const t=this.s>e.s?this.s:e.s,i=this.e=i?null:So.fromDateTimes(t,i)}union(e){if(!this.isValid)return this;const t=this.se.e?this.e:e.e;return So.fromDateTimes(t,i)}static merge(e){const[t,i]=e.sort((e,t)=>e.s-t.s).reduce(([e,t],i)=>t?t.overlaps(i)||t.abutsStart(i)?[e,t.union(i)]:[e.concat([t]),i]:[e,i],[[],null]);return i&&t.push(i),t}static xor(e){let t=null,i=0;const r=[],s=e.map(e=>[{time:e.s,type:"s"},{time:e.e,type:"e"}]),a=Array.prototype.concat(...s).sort((e,t)=>e.time-t.time);for(const e of a)i+="s"===e.type?1:-1,1===i?t=e.time:(t&&+t!==+e.time&&r.push(So.fromDateTimes(t,e.time)),t=null);return So.merge(r)}difference(...e){return So.xor([this].concat(e)).map(e=>this.intersection(e)).filter(e=>e&&!e.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()} – ${this.e.toISO()})`:Mo}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`:`Interval { Invalid, reason: ${this.invalidReason} }`}toLocaleString(e=ds,t={}){return this.isValid?xn.create(this.s.loc.clone(t),e).formatInterval(this):Mo}toISO(e){return this.isValid?`${this.s.toISO(e)}/${this.e.toISO(e)}`:Mo}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:Mo}toISOTime(e){return this.isValid?`${this.s.toISOTime(e)}/${this.e.toISOTime(e)}`:Mo}toFormat(e,{separator:t=" – "}={}){return this.isValid?`${this.s.toFormat(e)}${t}${this.e.toFormat(e)}`:Mo}toDuration(e,t){return this.isValid?this.e.diff(this.s,e,t):To.invalid(this.invalidReason)}mapEndpoints(e){return So.fromDateTimes(e(this.s),e(this.e))}}class _o{static hasDST(e=ba.defaultZone){const t=yl.now().setZone(e).set({month:12});return!e.isUniversal&&t.offset!==t.set({month:6}).offset}static isValidIANAZone(e){return Ds.isValidZone(e)}static normalizeZone(e){return ra(e,ba.defaultZone)}static getStartOfWeek({locale:e=null,locObj:t=null}={}){return(t||Xs.create(e)).getStartOfWeek()}static getMinimumDaysInFirstWeek({locale:e=null,locObj:t=null}={}){return(t||Xs.create(e)).getMinDaysInFirstWeek()}static getWeekendWeekdays({locale:e=null,locObj:t=null}={}){return(t||Xs.create(e)).getWeekendDays().slice()}static months(e="long",{locale:t=null,numberingSystem:i=null,locObj:r=null,outputCalendar:s="gregory"}={}){return(r||Xs.create(t,i,s)).months(e)}static monthsFormat(e="long",{locale:t=null,numberingSystem:i=null,locObj:r=null,outputCalendar:s="gregory"}={}){return(r||Xs.create(t,i,s)).months(e,!0)}static weekdays(e="long",{locale:t=null,numberingSystem:i=null,locObj:r=null}={}){return(r||Xs.create(t,i,null)).weekdays(e)}static weekdaysFormat(e="long",{locale:t=null,numberingSystem:i=null,locObj:r=null}={}){return(r||Xs.create(t,i,null)).weekdays(e,!0)}static meridiems({locale:e=null}={}){return Xs.create(e).meridiems()}static eras(e="short",{locale:t=null}={}){return Xs.create(t,null,"gregory").eras(e)}static features(){return{relative:Va(),localeWeek:Ea()}}}function No(e,t){const i=e=>e.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),r=i(t)-i(e);return Math.floor(To.fromMillis(r).as("days"))}function Oo(e,t,i,r){let[s,a,n,o]=function(e,t,i){const r=[["years",(e,t)=>t.year-e.year],["quarters",(e,t)=>t.quarter-e.quarter+4*(t.year-e.year)],["months",(e,t)=>t.month-e.month+12*(t.year-e.year)],["weeks",(e,t)=>{const i=No(e,t);return(i-i%7)/7}],["days",No]],s={},a=e;let n,o;for(const[l,c]of r)i.indexOf(l)>=0&&(n=l,s[l]=c(e,t),o=a.plus(s),o>t?(s[l]--,(e=a.plus(s))>t&&(o=e,s[l]--,e=a.plus(s))):e=o);return[e,s,o,n]}(e,t,i);const l=t-s,c=i.filter(e=>["hours","minutes","seconds","milliseconds"].indexOf(e)>=0);0===c.length&&(n0?To.fromMillis(l,r).shiftTo(...c).plus(d):d}function Ao(e,t=e=>e){return{regex:e,deser:([e])=>t(function(e){let t=parseInt(e,10);if(isNaN(t)){t="";for(let i=0;i=i&&r<=s&&(t+=r-i)}}return parseInt(t,10)}return t}(e))}}const $o=`[ ${String.fromCharCode(160)}]`,Zo=new RegExp($o,"g");function Co(e){return e.replace(/\./g,"\\.?").replace(Zo,$o)}function Bo(e){return e.replace(/\./g,"").replace(Zo," ").toLowerCase()}function Uo(e,t){return null===e?null:{regex:RegExp(e.map(Co).join("|")),deser:([i])=>e.findIndex(e=>Bo(i)===Bo(e))+t}}function Go(e,t){return{regex:e,deser:([,e,t])=>tn(e,t),groups:t}}function Vo(e){return{regex:e,deser:([e])=>e}}const Eo={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour12:{numeric:"h","2-digit":"hh"},hour24:{numeric:"H","2-digit":"HH"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"},timeZoneName:{long:"ZZZZZ",short:"ZZZ"}};let Do=null;function jo(e,t){return Array.prototype.concat(...e.map(e=>function(e,t){if(e.literal)return e;const i=Fo(xn.macroTokenToFormatOpts(e.val),t);return null==i||i.includes(void 0)?e:i}(e,t)))}class zo{constructor(e,t){if(this.locale=e,this.format=t,this.tokens=jo(xn.parseFormat(t),e),this.units=this.tokens.map(t=>function(e,t){const i=la(t),r=la(t,"{2}"),s=la(t,"{3}"),a=la(t,"{4}"),n=la(t,"{6}"),o=la(t,"{1,2}"),l=la(t,"{1,3}"),c=la(t,"{1,6}"),d=la(t,"{1,9}"),u=la(t,"{2,4}"),h=la(t,"{4,6}"),m=e=>{return{regex:RegExp((t=e.val,t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"))),deser:([e])=>e,literal:!0};var t},f=(f=>{if(e.literal)return m(f);switch(f.val){case"G":return Uo(t.eras("short"),0);case"GG":return Uo(t.eras("long"),0);case"y":return Ao(c);case"yy":case"kk":return Ao(u,Xa);case"yyyy":case"kkkk":return Ao(a);case"yyyyy":return Ao(h);case"yyyyyy":return Ao(n);case"M":case"L":case"d":case"H":case"h":case"m":case"q":case"s":case"W":return Ao(o);case"MM":case"LL":case"dd":case"HH":case"hh":case"mm":case"qq":case"ss":case"WW":return Ao(r);case"MMM":return Uo(t.months("short",!0),1);case"MMMM":return Uo(t.months("long",!0),1);case"LLL":return Uo(t.months("short",!1),1);case"LLLL":return Uo(t.months("long",!1),1);case"o":case"S":return Ao(l);case"ooo":case"SSS":return Ao(s);case"u":return Vo(d);case"uu":return Vo(o);case"uuu":case"E":case"c":return Ao(i);case"a":return Uo(t.meridiems(),0);case"EEE":return Uo(t.weekdays("short",!1),1);case"EEEE":return Uo(t.weekdays("long",!1),1);case"ccc":return Uo(t.weekdays("short",!0),1);case"cccc":return Uo(t.weekdays("long",!0),1);case"Z":case"ZZ":return Go(new RegExp(`([+-]${o.source})(?::(${r.source}))?`),2);case"ZZZ":return Go(new RegExp(`([+-]${o.source})(${r.source})?`),2);case"z":return Vo(/[a-z_+-/]{1,256}?/i);case" ":return Vo(/[^\S\n\r]/);default:return m(f)}})(e)||{invalidReason:"missing Intl.DateTimeFormat.formatToParts support"};return f.token=e,f}(t,e)),this.disqualifyingUnit=this.units.find(e=>e.invalidReason),!this.disqualifyingUnit){const[e,t]=function(e){const t=e.map(e=>e.regex).reduce((e,t)=>`${e}(${t.source})`,"");return[`^${t}$`,e]}(this.units);this.regex=RegExp(e,"i"),this.handlers=t}}explainFromTokens(e){if(this.isValid){const[t,i]=function(e,t,i){const r=e.match(t);if(r){const e={};let t=1;for(const s in i)if(ja(i,s)){const a=i[s],n=a.groups?a.groups+1:1;!a.literal&&a.token&&(e[a.token.val[0]]=a.deser(r.slice(t,t+n))),t+=n}return[r,e]}return[r,{}]}(e,this.regex,this.handlers),[r,s,a]=i?function(e){let t,i=null;Ba(e.z)||(i=Ds.create(e.z)),Ba(e.Z)||(i||(i=new ta(e.Z)),t=e.Z),Ba(e.q)||(e.M=3*(e.q-1)+1),Ba(e.h)||(e.h<12&&1===e.a?e.h+=12:12===e.h&&0===e.a&&(e.h=0)),0===e.G&&e.y&&(e.y=-e.y),Ba(e.u)||(e.S=Ha(e.u));const r=Object.keys(e).reduce((t,i)=>{const r=(e=>{switch(e){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}})(i);return r&&(t[r]=e[i]),t},{});return[r,i,t]}(i):[null,null,void 0];if(ja(i,"a")&&ja(i,"H"))throw new rs("Can't include meridiem when specifying 24-hour format");return{input:e,tokens:this.tokens,regex:this.regex,rawMatches:t,matches:i,result:r,zone:s,specificOffset:a}}return{input:e,tokens:this.tokens,invalidReason:this.invalidReason}}get isValid(){return!this.disqualifyingUnit}get invalidReason(){return this.disqualifyingUnit?this.disqualifyingUnit.invalidReason:null}}function Io(e,t,i){return new zo(e,i).explainFromTokens(t)}function Fo(e,t){if(!e)return null;const i=xn.create(t,e).dtFormatter((Do||(Do=yl.fromMillis(1555555555555)),Do)),r=i.formatToParts(),s=i.resolvedOptions();return r.map(t=>function(e,t,i){const{type:r,value:s}=e;if("literal"===r){const e=/^\s+$/.test(s);return{literal:!e,val:e?" ":s}}const a=t[r];let n=r;"hour"===r&&(n=null!=t.hour12?t.hour12?"hour12":"hour24":null!=t.hourCycle?"h11"===t.hourCycle||"h12"===t.hourCycle?"hour12":"hour24":i.hour12?"hour12":"hour24");let o=Eo[n];if("object"==typeof o&&(o=o[a]),o)return{literal:!1,val:o}}(t,e,s))}const Lo="Invalid DateTime",Po=864e13;function Ho(e){return new ga("unsupported zone",`the zone "${e.name}" is not supported`)}function Wo(e){return null===e.weekData&&(e.weekData=_a(e.c)),e.weekData}function qo(e){return null===e.localWeekData&&(e.localWeekData=_a(e.c,e.loc.getMinDaysInFirstWeek(),e.loc.getStartOfWeek())),e.localWeekData}function Ro(e,t){const i={ts:e.ts,zone:e.zone,c:e.c,o:e.o,loc:e.loc,invalid:e.invalid};return new yl({...i,...t,old:i})}function Yo(e,t,i){let r=e-60*t*1e3;const s=i.offset(r);if(t===s)return[r,t];r-=60*(s-t)*1e3;const a=i.offset(r);return s===a?[r,s]:[e-60*Math.min(s,a)*1e3,Math.max(s,a)]}function Jo(e,t){const i=new Date(e+=60*t*1e3);return{year:i.getUTCFullYear(),month:i.getUTCMonth()+1,day:i.getUTCDate(),hour:i.getUTCHours(),minute:i.getUTCMinutes(),second:i.getUTCSeconds(),millisecond:i.getUTCMilliseconds()}}function Qo(e,t,i){return Yo(Ja(e),t,i)}function Ko(e,t){const i=e.o,r=e.c.year+Math.trunc(t.years),s=e.c.month+Math.trunc(t.months)+3*Math.trunc(t.quarters),a={...e.c,year:r,month:s,day:Math.min(e.c.day,Ya(r,s))+Math.trunc(t.days)+7*Math.trunc(t.weeks)},n=To.fromObject({years:t.years-Math.trunc(t.years),quarters:t.quarters-Math.trunc(t.quarters),months:t.months-Math.trunc(t.months),weeks:t.weeks-Math.trunc(t.weeks),days:t.days-Math.trunc(t.days),hours:t.hours,minutes:t.minutes,seconds:t.seconds,milliseconds:t.milliseconds}).as("milliseconds"),o=Ja(a);let[l,c]=Yo(o,i,e.zone);return 0!==n&&(l+=n,c=e.zone.offset(l)),{ts:l,o:c}}function Xo(e,t,i,r,s,a){const{setZone:n,zone:o}=i;if(e&&0!==Object.keys(e).length||t){const r=t||o,s=yl.fromObject(e,{...i,zone:r,specificOffset:a});return n?s:s.setZone(o)}return yl.invalid(new ga("unparsable",`the input "${s}" can't be parsed as ${r}`))}function el(e,t,i=!0){return e.isValid?xn.create(Xs.create("en-US"),{allowZ:i,forceSimple:!0}).formatDateTimeFromString(e,t):null}function tl(e,t,i){const r=e.c.year>9999||e.c.year<0;let s="";if(r&&e.c.year>=0&&(s+="+"),s+=Fa(e.c.year,r?6:4),"year"===i)return s;if(t){if(s+="-",s+=Fa(e.c.month),"month"===i)return s;s+="-"}else if(s+=Fa(e.c.month),"month"===i)return s;return s+=Fa(e.c.day),s}function il(e,t,i,r,s,a,n){let o=!i||0!==e.c.millisecond||0!==e.c.second,l="";switch(n){case"day":case"month":case"year":break;default:if(l+=Fa(e.c.hour),"hour"===n)break;if(t){if(l+=":",l+=Fa(e.c.minute),"minute"===n)break;o&&(l+=":",l+=Fa(e.c.second))}else{if(l+=Fa(e.c.minute),"minute"===n)break;o&&(l+=Fa(e.c.second))}if("second"===n)break;!o||r&&0===e.c.millisecond||(l+=".",l+=Fa(e.c.millisecond,3))}return s&&(e.isOffsetFixed&&0===e.offset&&!a?l+="Z":e.o<0?(l+="-",l+=Fa(Math.trunc(-e.o/60)),l+=":",l+=Fa(Math.trunc(-e.o%60))):(l+="+",l+=Fa(Math.trunc(e.o/60)),l+=":",l+=Fa(Math.trunc(e.o%60)))),a&&(l+="["+e.zone.ianaName+"]"),l}const rl={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},sl={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},al={ordinal:1,hour:0,minute:0,second:0,millisecond:0},nl=["year","month","day","hour","minute","second","millisecond"],ol=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],ll=["year","ordinal","hour","minute","second","millisecond"];function cl(e){const t={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[e.toLowerCase()];if(!t)throw new ss(e);return t}function dl(e){switch(e.toLowerCase()){case"localweekday":case"localweekdays":return"localWeekday";case"localweeknumber":case"localweeknumbers":return"localWeekNumber";case"localweekyear":case"localweekyears":return"localWeekYear";default:return cl(e)}}function ul(e,t){const i=ra(t.zone,ba.defaultZone);if(!i.isValid)return yl.invalid(Ho(i));const r=Xs.fromObject(t);let s,a;if(Ba(e.year))s=ba.now();else{for(const t of nl)Ba(e[t])&&(e[t]=rl[t]);const t=Za(e)||Ca(e);if(t)return yl.invalid(t);const r=function(e){if(void 0===fl&&(fl=ba.now()),"iana"!==e.type)return e.offset(fl);const t=e.name;let i=pl.get(t);return void 0===i&&(i=e.offset(fl),pl.set(t,i)),i}(i);[s,a]=Qo(e,r,i)}return new yl({ts:s,zone:i,loc:r,o:a})}function hl(e,t,i){const r=!!Ba(i.round)||i.round,s=Ba(i.rounding)?"trunc":i.rounding,a=(e,a)=>{e=Wa(e,r||i.calendary?0:2,i.calendary?"round":s);return t.loc.clone(i).relFormatter(i).format(e,a)},n=r=>i.calendary?t.hasSame(e,r)?0:t.startOf(r).diff(e.startOf(r),r).get(r):t.diff(e,r).get(r);if(i.unit)return a(n(i.unit),i.unit);for(const e of i.units){const t=n(e);if(Math.abs(t)>=1)return a(t,e)}return a(e>t?-0:0,i.units[i.units.length-1])}function ml(e){let t,i={};return e.length>0&&"object"==typeof e[e.length-1]?(i=e[e.length-1],t=Array.from(e).slice(0,e.length-1)):t=Array.from(e),[i,t]}let fl;const pl=new Map;class yl{constructor(e){const t=e.zone||ba.defaultZone;let i=e.invalid||(Number.isNaN(e.ts)?new ga("invalid input"):null)||(t.isValid?null:Ho(t));this.ts=Ba(e.ts)?ba.now():e.ts;let r=null,s=null;if(!i){if(e.old&&e.old.ts===this.ts&&e.old.zone.equals(t))[r,s]=[e.old.c,e.old.o];else{const a=Ua(e.o)&&!e.old?e.o:t.offset(this.ts);r=Jo(this.ts,a),i=Number.isNaN(r.year)?new ga("invalid input"):null,r=i?null:r,s=i?null:a}}this._zone=t,this.loc=e.loc||Xs.create(),this.invalid=i,this.weekData=null,this.localWeekData=null,this.c=r,this.o=s,this.isLuxonDateTime=!0}static now(){return new yl({})}static local(){const[e,t]=ml(arguments),[i,r,s,a,n,o,l]=t;return ul({year:i,month:r,day:s,hour:a,minute:n,second:o,millisecond:l},e)}static utc(){const[e,t]=ml(arguments),[i,r,s,a,n,o,l]=t;return e.zone=ta.utcInstance,ul({year:i,month:r,day:s,hour:a,minute:n,second:o,millisecond:l},e)}static fromJSDate(e,t={}){const i=function(e){return"[object Date]"===Object.prototype.toString.call(e)}(e)?e.valueOf():NaN;if(Number.isNaN(i))return yl.invalid("invalid input");const r=ra(t.zone,ba.defaultZone);return r.isValid?new yl({ts:i,zone:r,loc:Xs.fromObject(t)}):yl.invalid(Ho(r))}static fromMillis(e,t={}){if(Ua(e))return e<-Po||e>Po?yl.invalid("Timestamp out of range"):new yl({ts:e,zone:ra(t.zone,ba.defaultZone),loc:Xs.fromObject(t)});throw new as(`fromMillis requires a numerical input, but received a ${typeof e} with value ${e}`)}static fromSeconds(e,t={}){if(Ua(e))return new yl({ts:1e3*e,zone:ra(t.zone,ba.defaultZone),loc:Xs.fromObject(t)});throw new as("fromSeconds requires a numerical input")}static fromObject(e,t={}){e=e||{};const i=ra(t.zone,ba.defaultZone);if(!i.isValid)return yl.invalid(Ho(i));const r=Xs.fromObject(t),s=sn(e,dl),{minDaysInFirstWeek:a,startOfWeek:n}=$a(s,r),o=ba.now(),l=Ba(t.specificOffset)?i.offset(o):t.specificOffset,c=!Ba(s.ordinal),d=!Ba(s.year),u=!Ba(s.month)||!Ba(s.day),h=d||u,m=s.weekYear||s.weekNumber;if((h||c)&&m)throw new rs("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(u&&c)throw new rs("Can't mix ordinal dates with month/day");const f=m||s.weekday&&!h;let p,y,b=Jo(o,l);f?(p=ol,y=sl,b=_a(b,a,n)):c?(p=ll,y=al,b=Oa(b)):(p=nl,y=rl);let g=!1;for(const e of p){Ba(s[e])?s[e]=g?y[e]:b[e]:g=!0}const w=f?function(e,t=4,i=1){const r=Ga(e.weekYear),s=Ia(e.weekNumber,1,Ka(e.weekYear,t,i)),a=Ia(e.weekday,1,7);return r?s?!a&&ka("weekday",e.weekday):ka("week",e.weekNumber):ka("weekYear",e.weekYear)}(s,a,n):c?function(e){const t=Ga(e.year),i=Ia(e.ordinal,1,Ra(e.year));return t?!i&&ka("ordinal",e.ordinal):ka("year",e.year)}(s):Za(s),v=w||Ca(s);if(v)return yl.invalid(v);const k=f?Na(s,a,n):c?Aa(s):s,[x,T]=Qo(k,l,i),M=new yl({ts:x,zone:i,o:T,loc:r});return s.weekday&&h&&e.weekday!==M.weekday?yl.invalid("mismatched weekday",`you can't specify both a weekday of ${s.weekday} and a date of ${M.toISO()}`):M.isValid?M:yl.invalid(M.invalid)}static fromISO(e,t={}){const[i,r]=function(e){return _n(e,[Kn,io],[Xn,ro],[eo,so],[to,ao])}(e);return Xo(i,r,t,"ISO 8601",e)}static fromRFC2822(e,t={}){const[i,r]=function(e){return _n(function(e){return e.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}(e),[Hn,Wn])}(e);return Xo(i,r,t,"RFC 2822",e)}static fromHTTP(e,t={}){const[i,r]=function(e){return _n(e,[qn,Jn],[Rn,Jn],[Yn,Qn])}(e);return Xo(i,r,t,"HTTP",t)}static fromFormat(e,t,i={}){if(Ba(e)||Ba(t))throw new as("fromFormat requires an input string and a format");const{locale:r=null,numberingSystem:s=null}=i,a=Xs.fromOpts({locale:r,numberingSystem:s,defaultToEN:!0}),[n,o,l,c]=function(e,t,i){const{result:r,zone:s,specificOffset:a,invalidReason:n}=Io(e,t,i);return[r,s,a,n]}(a,e,t);return c?yl.invalid(c):Xo(n,o,i,`format ${t}`,e,l)}static fromString(e,t,i={}){return yl.fromFormat(e,t,i)}static fromSQL(e,t={}){const[i,r]=function(e){return _n(e,[oo,io],[lo,co])}(e);return Xo(i,r,t,"SQL",e)}static invalid(e,t=null){if(!e)throw new as("need to specify a reason the DateTime is invalid");const i=e instanceof ga?e:new ga(e,t);if(ba.throwOnInvalid)throw new es(i);return new yl({invalid:i})}static isDateTime(e){return e&&e.isLuxonDateTime||!1}static parseFormatForOpts(e,t={}){const i=Fo(e,Xs.fromObject(t));return i?i.map(e=>e?e.val:null).join(""):null}static expandFormat(e,t={}){return jo(xn.parseFormat(e),Xs.fromObject(t)).map(e=>e.val).join("")}static resetCache(){fl=void 0,pl.clear()}get(e){return this[e]}get isValid(){return null===this.invalid}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?Wo(this).weekYear:NaN}get weekNumber(){return this.isValid?Wo(this).weekNumber:NaN}get weekday(){return this.isValid?Wo(this).weekday:NaN}get isWeekend(){return this.isValid&&this.loc.getWeekendDays().includes(this.weekday)}get localWeekday(){return this.isValid?qo(this).weekday:NaN}get localWeekNumber(){return this.isValid?qo(this).weekNumber:NaN}get localWeekYear(){return this.isValid?qo(this).weekYear:NaN}get ordinal(){return this.isValid?Oa(this.c).ordinal:NaN}get monthShort(){return this.isValid?_o.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?_o.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?_o.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?_o.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return!this.isOffsetFixed&&(this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset)}getPossibleOffsets(){if(!this.isValid||this.isOffsetFixed)return[this];const e=864e5,t=6e4,i=Ja(this.c),r=this.zone.offset(i-e),s=this.zone.offset(i+e),a=this.zone.offset(i-r*t),n=this.zone.offset(i-s*t);if(a===n)return[this];const o=i-a*t,l=i-n*t,c=Jo(o,a),d=Jo(l,n);return c.hour===d.hour&&c.minute===d.minute&&c.second===d.second&&c.millisecond===d.millisecond?[Ro(this,{ts:o}),Ro(this,{ts:l})]:[this]}get isInLeapYear(){return qa(this.year)}get daysInMonth(){return Ya(this.year,this.month)}get daysInYear(){return this.isValid?Ra(this.year):NaN}get weeksInWeekYear(){return this.isValid?Ka(this.weekYear):NaN}get weeksInLocalWeekYear(){return this.isValid?Ka(this.localWeekYear,this.loc.getMinDaysInFirstWeek(),this.loc.getStartOfWeek()):NaN}resolvedLocaleOptions(e={}){const{locale:t,numberingSystem:i,calendar:r}=xn.create(this.loc.clone(e),e).resolvedOptions(this);return{locale:t,numberingSystem:i,outputCalendar:r}}toUTC(e=0,t={}){return this.setZone(ta.instance(e),t)}toLocal(){return this.setZone(ba.defaultZone)}setZone(e,{keepLocalTime:t=!1,keepCalendarTime:i=!1}={}){if((e=ra(e,ba.defaultZone)).equals(this.zone))return this;if(e.isValid){let r=this.ts;if(t||i){const t=e.offset(this.ts),i=this.toObject();[r]=Qo(i,t,e)}return Ro(this,{ts:r,zone:e})}return yl.invalid(Ho(e))}reconfigure({locale:e,numberingSystem:t,outputCalendar:i}={}){return Ro(this,{loc:this.loc.clone({locale:e,numberingSystem:t,outputCalendar:i})})}setLocale(e){return this.reconfigure({locale:e})}set(e){if(!this.isValid)return this;const t=sn(e,dl),{minDaysInFirstWeek:i,startOfWeek:r}=$a(t,this.loc),s=!Ba(t.weekYear)||!Ba(t.weekNumber)||!Ba(t.weekday),a=!Ba(t.ordinal),n=!Ba(t.year),o=!Ba(t.month)||!Ba(t.day),l=n||o,c=t.weekYear||t.weekNumber;if((l||a)&&c)throw new rs("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(o&&a)throw new rs("Can't mix ordinal dates with month/day");let d;s?d=Na({..._a(this.c,i,r),...t},i,r):Ba(t.ordinal)?(d={...this.toObject(),...t},Ba(t.day)&&(d.day=Math.min(Ya(d.year,d.month),d.day))):d=Aa({...Oa(this.c),...t});const[u,h]=Qo(d,this.o,this.zone);return Ro(this,{ts:u,o:h})}plus(e){if(!this.isValid)return this;return Ro(this,Ko(this,To.fromDurationLike(e)))}minus(e){if(!this.isValid)return this;return Ro(this,Ko(this,To.fromDurationLike(e).negate()))}startOf(e,{useLocaleWeeks:t=!1}={}){if(!this.isValid)return this;const i={},r=To.normalizeUnit(e);switch(r){case"years":i.month=1;case"quarters":case"months":i.day=1;case"weeks":case"days":i.hour=0;case"hours":i.minute=0;case"minutes":i.second=0;case"seconds":i.millisecond=0}if("weeks"===r)if(t){const e=this.loc.getStartOfWeek(),{weekday:t}=this;t=3&&(o+="T"),o+=il(this,n,t,i,r,s,a),o}toISODate({format:e="extended",precision:t="day"}={}){return this.isValid?tl(this,"extended"===e,cl(t)):null}toISOWeekDate(){return el(this,"kkkk-'W'WW-c")}toISOTime({suppressMilliseconds:e=!1,suppressSeconds:t=!1,includeOffset:i=!0,includePrefix:r=!1,extendedZone:s=!1,format:a="extended",precision:n="milliseconds"}={}){if(!this.isValid)return null;return n=cl(n),(r&&nl.indexOf(n)>=3?"T":"")+il(this,"extended"===a,t,e,i,s,n)}toRFC2822(){return el(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ",!1)}toHTTP(){return el(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss 'GMT'")}toSQLDate(){return this.isValid?tl(this,!0):null}toSQLTime({includeOffset:e=!0,includeZone:t=!1,includeOffsetSpace:i=!0}={}){let r="HH:mm:ss.SSS";return(t||e)&&(i&&(r+=" "),t?r+="z":e&&(r+="ZZ")),el(this,r,!0)}toSQL(e={}){return this.isValid?`${this.toSQLDate()} ${this.toSQLTime(e)}`:null}toString(){return this.isValid?this.toISO():Lo}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`:`DateTime { Invalid, reason: ${this.invalidReason} }`}valueOf(){return this.toMillis()}toMillis(){return this.isValid?this.ts:NaN}toSeconds(){return this.isValid?this.ts/1e3:NaN}toUnixInteger(){return this.isValid?Math.floor(this.ts/1e3):NaN}toJSON(){return this.toISO()}toBSON(){return this.toJSDate()}toObject(e={}){if(!this.isValid)return{};const t={...this.c};return e.includeConfig&&(t.outputCalendar=this.outputCalendar,t.numberingSystem=this.loc.numberingSystem,t.locale=this.loc.locale),t}toJSDate(){return new Date(this.isValid?this.ts:NaN)}diff(e,t="milliseconds",i={}){if(!this.isValid||!e.isValid)return To.invalid("created by diffing an invalid DateTime");const r={locale:this.locale,numberingSystem:this.numberingSystem,...i},s=(o=t,Array.isArray(o)?o:[o]).map(To.normalizeUnit),a=e.valueOf()>this.valueOf(),n=Oo(a?this:e,a?e:this,s,r);var o;return a?n.negate():n}diffNow(e="milliseconds",t={}){return this.diff(yl.now(),e,t)}until(e){return this.isValid?So.fromDateTimes(this,e):this}hasSame(e,t,i){if(!this.isValid)return!1;const r=e.valueOf(),s=this.setZone(e.zone,{keepLocalTime:!0});return s.startOf(t,i)<=r&&r<=s.endOf(t,i)}equals(e){return this.isValid&&e.isValid&&this.valueOf()===e.valueOf()&&this.zone.equals(e.zone)&&this.loc.equals(e.loc)}toRelative(e={}){if(!this.isValid)return null;const t=e.base||yl.fromObject({},{zone:this.zone}),i=e.padding?thise.valueOf(),Math.min)}static max(...e){if(!e.every(yl.isDateTime))throw new as("max requires all arguments be DateTimes");return Da(e,e=>e.valueOf(),Math.max)}static fromFormatExplain(e,t,i={}){const{locale:r=null,numberingSystem:s=null}=i;return Io(Xs.fromOpts({locale:r,numberingSystem:s,defaultToEN:!0}),e,t)}static fromStringExplain(e,t,i={}){return yl.fromFormatExplain(e,t,i)}static buildFormatParser(e,t={}){const{locale:i=null,numberingSystem:r=null}=t,s=Xs.fromOpts({locale:i,numberingSystem:r,defaultToEN:!0});return new zo(s,e)}static fromFormatParser(e,t,i={}){if(Ba(e)||Ba(t))throw new as("fromFormatParser requires an input string and a format parser");const{locale:r=null,numberingSystem:s=null}=i,a=Xs.fromOpts({locale:r,numberingSystem:s,defaultToEN:!0});if(!a.equals(t.locale))throw new as(`fromFormatParser called with a locale of ${a}, but the format parser was created for ${t.locale}`);const{result:n,zone:o,specificOffset:l,invalidReason:c}=t.explainFromTokens(e);return c?yl.invalid(c):Xo(n,o,i,`format ${t.format}`,e,l)}static get DATE_SHORT(){return ds}static get DATE_MED(){return us}static get DATE_MED_WITH_WEEKDAY(){return hs}static get DATE_FULL(){return ms}static get DATE_HUGE(){return fs}static get TIME_SIMPLE(){return ps}static get TIME_WITH_SECONDS(){return ys}static get TIME_WITH_SHORT_OFFSET(){return bs}static get TIME_WITH_LONG_OFFSET(){return gs}static get TIME_24_SIMPLE(){return ws}static get TIME_24_WITH_SECONDS(){return vs}static get TIME_24_WITH_SHORT_OFFSET(){return ks}static get TIME_24_WITH_LONG_OFFSET(){return xs}static get DATETIME_SHORT(){return Ts}static get DATETIME_SHORT_WITH_SECONDS(){return Ms}static get DATETIME_MED(){return Ss}static get DATETIME_MED_WITH_SECONDS(){return _s}static get DATETIME_MED_WITH_WEEKDAY(){return Ns}static get DATETIME_FULL(){return Os}static get DATETIME_FULL_WITH_SECONDS(){return As}static get DATETIME_HUGE(){return $s}static get DATETIME_HUGE_WITH_SECONDS(){return Zs}}function bl(e){if(yl.isDateTime(e))return e;if(e&&e.valueOf&&Ua(e.valueOf()))return yl.fromJSDate(e);if(e&&"object"==typeof e)return yl.fromObject(e);throw new as(`Unknown datetime argument: ${e}, of type ${typeof e}`)}console.info("%c CLOCK-WEATHER-CARD \n%c Version: 2.9.4","color: orange; font-weight: bold; background: black","color: white; font-weight: bold; background: dimgray"),window.customCards=window.customCards||[],window.customCards.push({type:"clock-weather-card",name:"Clock Weather Card",description:"Shows the current date/time in combination with the current weather and an iOS insipired weather forecast."});const gl=(new Map).set(-20,new be(0,60,98)).set(-10,new be(120,162,204)).set(0,new be(164,195,210)).set(10,new be(121,210,179)).set(20,new be(252,245,112)).set(30,new be(255,150,79)).set(40,new be(255,192,159));let wl=class extends se{constructor(){super(),this.forecastSubscriberLock=!1,this.currentDate=yl.now();const e=1e3-this.currentDate.millisecond;setTimeout(()=>setInterval(()=>{this.currentDate=yl.now()},1e3),e),setTimeout(()=>{this.currentDate=yl.now()},e)}static getStubConfig(e,t,i){const r=t.find(e=>{var t;return null!==(t=e.startsWith("weather."))&&void 0!==t?t:i.find(()=>!0)});return r?{entity:r}:{}}getCardSize(){return 3+function(e,t=0){return t<=0?Math.ceil(e):Math.ceil(e/t)*t}(this.config.forecast_rows/2)}setConfig(e){if(!e)throw this.createError("Invalid configuration.");if(!e.entity)throw this.createError('Attribute "entity" must be present.');if(e.forecast_rows&&e.forecast_rows<1)throw this.createError('Attribute "forecast_rows" must be greater than 0.');if(e.time_format&&"24"!==e.time_format.toString()&&"12"!==e.time_format.toString())throw this.createError('Attribute "time_format" must either be "12" or "24".');if(e.hide_today_section&&e.hide_forecast_section)throw this.createError('Attributes "hide_today_section" and "hide_forecast_section" must not enabled at the same time.');this.config=this.mergeConfig(e)}shouldUpdate(e){if(!this.config)return!1;if(e.has("forecasts"))return!0;const t=e.get("hass");if(t){if(t.states[this.config.sun_entity]!==this.hass.states[this.config.sun_entity])return!0}return function(e,t,i){if(t.has("config")||i)return!0;if(e.config.entity){const i=t.get("hass");return!i||i.states[e.config.entity]!==e.hass.states[e.config.entity]}return!1}(this,e,!1)}updated(e){super.updated(e),e.has("config")&&this.subscribeForecastEvents()}render(){if(this.error)return this.error;const e=!this.config.hide_today_section,t=!this.config.hide_forecast_section;return D` + */;class we{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,i){this._$Ct=e,this._$AM=t,this._$Ci=i}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}}const ve="ontouchstart"in window||navigator.maxTouchPoints>0||navigator.maxTouchPoints>0;class ke extends HTMLElement{constructor(){super(),this.holdTime=500,this.held=!1,this.ripple=document.createElement("mwc-ripple")}connectedCallback(){Object.assign(this.style,{position:"absolute",width:ve?"100px":"50px",height:ve?"100px":"50px",transform:"translate(-50%, -50%)",pointerEvents:"none",zIndex:"999"}),this.appendChild(this.ripple),this.ripple.primary=!0,["touchcancel","mouseout","mouseup","touchmove","mousewheel","wheel","scroll"].forEach(e=>{document.addEventListener(e,()=>{clearTimeout(this.timer),this.stopAnimation(),this.timer=void 0},{passive:!0})})}bind(e,t){if(e.actionHandler)return;e.actionHandler=!0,e.addEventListener("contextmenu",e=>{const t=e||window.event;return t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.cancelBubble=!0,t.returnValue=!1,!1});const i=e=>{var t,i;this.held=!1;const r=null!==(t=e.pageX)&&void 0!==t?t:e.touches[0].pageX,s=null!==(i=e.pageY)&&void 0!==i?i:e.touches[0].pageY;this.timer=window.setTimeout(()=>{this.startAnimation(r,s),this.held=!0},this.holdTime)},r=i=>{i.preventDefault(),["touchend","touchcancel"].includes(i.type)&&void 0===this.timer||(clearTimeout(this.timer),this.stopAnimation(),this.timer=void 0,this.held?me(e,"action",{action:"hold"}):t.hasDoubleClick?"click"===i.type&&i.detail<2||!this.dblClickTimeout?this.dblClickTimeout=window.setTimeout(()=>{this.dblClickTimeout=void 0,me(e,"action",{action:"tap"})},250):(clearTimeout(this.dblClickTimeout),this.dblClickTimeout=void 0,me(e,"action",{action:"double_tap"})):me(e,"action",{action:"tap"}))};e.addEventListener("touchstart",i,{passive:!0}),e.addEventListener("touchend",r),e.addEventListener("touchcancel",r),e.addEventListener("mousedown",i,{passive:!0}),e.addEventListener("click",r),e.addEventListener("keyup",e=>{13===e.keyCode&&r(e)})}startAnimation(e,t){Object.assign(this.style,{left:`${e}px`,top:`${t}px`,display:null}),this.ripple.disabled=!1,this.ripple.active=!0,this.ripple.unbounded=!0}stopAnimation(){this.ripple.active=!1,this.ripple.disabled=!0,this.style.display="none"}}customElements.get("action-handler-clock-weather")||customElements.define("action-handler-clock-weather",ke);const xe=(e,t)=>{const i=(()=>{const e=document.body;if(e.querySelector("action-handler-clock-weather"))return e.querySelector("action-handler-clock-weather");const t=document.createElement("action-handler-clock-weather");return e.appendChild(t),t})();i&&i.bind(e,t)},Te=(e=>(...t)=>({_$litDirective$:e,values:t}))(class extends we{update(e,[t]){return xe(e.element,t),j}render(e){}});var Me={"clear-night":"صافي",cloudy:"غائم",fog:"ضباب",hail:"برد",lightning:"عواصف رعدية","lightning-rainy":"عواصف رعدية ممطرة",partlycloudy:"غائم جزئياً",pouring:"غزير",rainy:"ممطر",snowy:"ثلجي","snowy-rainy":"مطر ثلجي",sunny:"مشمس",windy:"عاصف","windy-variant":"رياح قوية",exceptional:"استثنائي"},Se={1:"الإثنين",2:"الثلاثاء",3:"الأربعاء",4:"الخميس",5:"الجمعة",6:"السبت",7:"الأحد"},_e={aqi:"مؤشر جودة الهواء",humidity:"رطوبة","feels-like":"يشعر كأنه"},Ne={weather:Me,day:Se,misc:_e},Oe=Object.freeze({__proto__:null,day:Se,default:Ne,misc:_e,weather:Me}),Ae={"clear-night":"Ясно",cloudy:"Облачно",fog:"Мъгла",hail:"Градушка",lightning:"Гръмотевични бури","lightning-rainy":"Дъждовни гръмотевични бури",partlycloudy:"Частична облачност",pouring:"Пороен дъжд",rainy:"Дъждовно",snowy:"Сняг","snowy-rainy":"Суграшица",sunny:"Слънчево",windy:"Ветровито","windy-variant":"Силен вятър",exceptional:"Изключително"},$e={1:"Пн",2:"Вт",3:"Ср",4:"Чт",5:"Пт",6:"Сб",7:"Нд"},Ce={aqi:"AQI",humidity:"Влажност","feels-like":"Усеща се като"},Ze={weather:Ae,day:$e,misc:Ce},Be=Object.freeze({__proto__:null,day:$e,default:Ze,misc:Ce,weather:Ae}),Ue={"clear-night":"Klart",cloudy:"Overskyet",fog:"Tåge",hail:"Hagl",lightning:"Lyn","lightning-rainy":"Regnvejr og lyn",partlycloudy:"Delvist overskyet",pouring:"Regnvejr",rainy:"Regnfuldt",snowy:"Sne","snowy-rainy":"Slud",sunny:"Solrigt",windy:"Blæsende","windy-variant":"Stærk vind",exceptional:"Kaos"},Ge={1:"Man",2:"Tir",3:"Ons",4:"Tor",5:"Fre",6:"Lør",7:"Søn"},Ve={aqi:"AQI",humidity:"luftfugtighed","feels-like":"Føles som"},Ee={weather:Ue,day:Ge,misc:Ve},De=Object.freeze({__proto__:null,day:Ge,default:Ee,misc:Ve,weather:Ue}),je={"clear-night":"Serè",cloudy:"Ennuvolat",fog:"Boira",hail:"Calamarsa",lightning:"Tempesta elèctrica","lightning-rainy":"Tempesta",partlycloudy:"Parcialment ennuvolat",pouring:"Aiguat",rainy:"Plujós",snowy:"Neu","snowy-rainy":"Aiguaneu",sunny:"Assolellat",windy:"Ventós","windy-variant":"Vent fort",exceptional:"Excepcional"},ze={1:"Dl.",2:"Dt.",3:"Dc.",4:"Dj.",5:"Dv.",6:"Ds.",7:"Dg."},Ie={aqi:"AQI",humidity:"humitat","feels-like":"Sensació tèrmica"},Fe={weather:je,day:ze,misc:Ie},Le=Object.freeze({__proto__:null,day:ze,default:Fe,misc:Ie,weather:je}),Pe={"clear-night":"Jasno",cloudy:"Zataženo",fog:"Mlha",hail:"Kroupy",lightning:"Bouřky","lightning-rainy":"Bouřky s deštěm",partlycloudy:"Částečně zataženo",pouring:"Silný déšť",rainy:"Déšť",snowy:"Sníh","snowy-rainy":"Sníh s deštěm",sunny:"Slunečno",windy:"Vítr","windy-variant":"Prudký vítr",exceptional:"Nevšední"},He={1:"Po",2:"Út",3:"St",4:"Čt",5:"Pá",6:"So",7:"Ne"},We={aqi:"AQI",humidity:"vlhkost","feels-like":"pocitová teplota"},qe={weather:Pe,day:He,misc:We},Re={"clear-night":"Noson Glir",cloudy:"Cymylog",fog:"Niwl",hail:"Cesair",lightning:"Mellt a Tharannau","lightning-rainy":"Mellt, Tharannau a Glaw",partlycloudy:"Ysbeidiau Heulog",pouring:"Glawio'n Drwm",rainy:"Glawio",snowy:"Bwrw Eira","snowy-rainy":"Eirlaw",sunny:"Heulog",windy:"Gwyntog","windy-variant":"Gwyntoedd Cryfion",exceptional:"Eithriadol"},Ye={1:"Llun",2:"Maw",3:"Mer",4:"Iau",5:"Gwe",6:"Sad",7:"Sul"},Je={aqi:"MAA",humidity:"Lleithder","feels-like":"Teimlo fel"},Qe={weather:Re,day:Ye,misc:Je},Ke={"clear-night":"Klar",cloudy:"Bewölkt",fog:"Nebel",hail:"Hagel",lightning:"Gewitter","lightning-rainy":"Gewitterregen",partlycloudy:"Teils bewölkt",pouring:"Starkregen",rainy:"Regen",snowy:"Schneefall","snowy-rainy":"Schneeregen",sunny:"Sonnig",windy:"Windig","windy-variant":"Stürmisch",exceptional:"Unwetter"},Xe={1:"Mo",2:"Di",3:"Mi",4:"Do",5:"Fr",6:"Sa",7:"So"},et={aqi:"AQI",humidity:"Luftfeuchtigkeit","feels-like":"Gefühlt"},tt={weather:Ke,day:Xe,misc:et},it={"clear-night":"Καθαρός",cloudy:"Συννεφιασμένος",fog:"Ομίχλη",hail:"Χαλάζι",lightning:"Καταιγίδες","lightning-rainy":"Καταιγίδες με βροχή",partlycloudy:"Λίγα σύννεφα",pouring:"Έντονη βροχή",rainy:"Βροχερός",snowy:"Χιόνι","snowy-rainy":"Χιονόνερο",sunny:"Ηλιόλουστος",windy:"Θυελλώδης","windy-variant":"Έντονοι άνεμοι",exceptional:"Εξαιρετικός"},rt={1:"Δευ",2:"Τρί",3:"Τετ",4:"Πεμ",5:"Παρ",6:"Σαβ",7:"Κυρ"},st={aqi:"AQI",humidity:"υγρασία","feels-like":"Αίσθηση σαν"},at={weather:it,day:rt,misc:st},nt={"clear-night":"Clear",cloudy:"Cloudy",fog:"Fog",hail:"Hail",lightning:"Thunderstorms","lightning-rainy":"Rainy thunderstorms",partlycloudy:"Partly cloudy",pouring:"Pouring",rainy:"Rainy",snowy:"Snowy","snowy-rainy":"Sleet",sunny:"Sunny",windy:"Windy","windy-variant":"Strong wind",exceptional:"Exceptional"},ot={1:"Mon",2:"Tue",3:"Wed",4:"Thu",5:"Fri",6:"Sat",7:"Sun"},lt={aqi:"AQI",humidity:"Humidity","feels-like":"Feels like"},ct={weather:nt,day:ot,misc:lt},dt={"clear-night":"Despejado",cloudy:"Nublado",fog:"Niebla",hail:"Granizo",lightning:"Tormenta eléctrica","lightning-rainy":"Tormenta",partlycloudy:"Parcialmente nublado",pouring:"Diluviando",rainy:"Lluvioso",snowy:"Nieve","snowy-rainy":"Aguanieve",sunny:"Soleado",windy:"Viento","windy-variant":"Fuerte viento",exceptional:"Caos"},ut={1:"Lun",2:"Mar",3:"Mie",4:"Jue",5:"Vie",6:"Sab",7:"Dom"},ht={aqi:"AQI",humidity:"humedad","feels-like":"Sensación térmica"},mt={weather:dt,day:ut,misc:ht},ft={"clear-night":"Selge",cloudy:"Pilvine",fog:"Udu",hail:"Rahe",lightning:"Äike","lightning-rainy":"Äiksevihm",partlycloudy:"Vahelduv pilvisus",pouring:"Paduvihm",rainy:"Vihm",snowy:"Lumi","snowy-rainy":"Lörts",sunny:"Päike",windy:"Tuuline","windy-variant":"Tuuline",exceptional:"Äärmuslik"},pt={1:"E",2:"T",3:"K",4:"N",5:"R",6:"L",7:"P"},yt={aqi:"AQI",humidity:"niiskus","feels-like":"Tundub nagu"},bt={weather:ft,day:pt,misc:yt},gt={"clear-night":"Selkeää",cloudy:"Pilvistä",fog:"Sumua",hail:"Raekuuroja",lightning:"Ukkosta","lightning-rainy":"Ukkoskuuroja",partlycloudy:"Puolipilvistä",pouring:"Voimakasta vesisadetta",rainy:"Vesisadetta",snowy:"Lumisadetta","snowy-rainy":"Räntäsadetta",sunny:"Selkeää",windy:"Tuulista","windy-variant":"Voimakasta tuulta",exceptional:"Poikkeuksellista"},wt={1:"Ma",2:"Ti",3:"Ke",4:"To",5:"Pe",6:"La",7:"Su"},vt={aqi:"AQI",humidity:"kosteus","feels-like":"Tuntuu kuin"},kt={weather:gt,day:wt,misc:vt},xt={"clear-night":"Dégagé",cloudy:"Nuageux",fog:"Brouillard",hail:"Grêle",lightning:"Orages","lightning-rainy":"Orages et pluie",partlycloudy:"Partiellement nuageux",pouring:"Pluie battante",rainy:"Pluie",snowy:"Neige","snowy-rainy":"Neige fondante",sunny:"Ensoleillé",windy:"Venteux","windy-variant":"Vent fort",exceptional:"Exceptionnelle"},Tt={1:"Lun",2:"Mar",3:"Mer",4:"Jeu",5:"Ven",6:"Sam",7:"Dim"},Mt={aqi:"AQI",humidity:"humidité","feels-like":"Ressentie"},St={weather:xt,day:Tt,misc:Mt},_t={"clear-night":"בהיר",cloudy:"מעונן",fog:"ערפל",hail:"ברד",lightning:"סופות רעמים","lightning-rainy":"סופות רעמים גשומות",partlycloudy:"מעונן חלקית",pouring:"גשם זלעפות",rainy:"גשום",snowy:"מושלג","snowy-rainy":"ברד",sunny:"שמשי",windy:"סוער","windy-variant":"רוח חזקה",exceptional:"חריג"},Nt={1:"שני",2:"שלישי",3:"רביעי",4:"חמישי",5:"שישי",6:"שבת",7:"ראשון"},Ot={aqi:"AQI",humidity:"לחות","feels-like":"מרגיש כמו"},At={weather:_t,day:Nt,misc:Ot},$t={"clear-night":"Tiszta",cloudy:"Felhős",fog:"Ködös",hail:"Jégeső",lightning:"Villámlás","lightning-rainy":"Zivatar",partlycloudy:"Helyenként felhős",pouring:"Felhőszakadás",rainy:"Esős",snowy:"Havazás","snowy-rainy":"Havaseső, ónoseső",sunny:"Napos",windy:"Szeles","windy-variant":"Erős szél",exceptional:"Kivételes"},Ct={1:"H",2:"K",3:"Sze",4:"Cs",5:"P",6:"Szo",7:"V"},Zt={aqi:"AQI",humidity:"páratartalom","feels-like":"Hőérzet"},Bt={weather:$t,day:Ct,misc:Zt},Ut={"clear-night":"Čisto",cloudy:"Oblačno",fog:"Magla",hail:"Tuča",lightning:"Grmljavina","lightning-rainy":"Grmljavinsko nevrijeme",partlycloudy:"Oblačno",pouring:"Pouring",rainy:"Kiša",snowy:"Snijeg","snowy-rainy":"Snijeg i kiša",sunny:"Sunčano",windy:"Vjetrovito","windy-variant":"Jako vjetrovito",exceptional:"Izuzetno"},Gt={0:"Ned",1:"Pon",2:"Ut",3:"Sri",4:"Čet",5:"Pet",6:"Sub"},Vt={aqi:"AQI",humidity:"vlažnost","feels-like":"Osjet temperature"},Et={weather:Ut,day:Gt,misc:Vt},Dt={"clear-night":"Cerah",cloudy:"Berawan",fog:"Berkabut",hail:"Hujan es",lightning:"Petir","lightning-rainy":"Hujan petir",partlycloudy:"Cerah berawan",pouring:"Hujan deras",rainy:"Hujan",snowy:"Salju","snowy-rainy":"Hujan salju",sunny:"Cerah",windy:"Berangin","windy-variant":"Berangin kencang",exceptional:"Badai"},jt={1:"Sen",2:"Sel",3:"Rab",4:"Kam",5:"Jum",6:"Sab",7:"Min"},zt={aqi:"AQI",humidity:"Kelembapan","feels-like":"Terasa seperti"},It={weather:Dt,day:jt,misc:zt},Ft={"clear-night":"Heiðskýrt",cloudy:"Skýjað",fog:"Þoka",hail:"Hagl",lightning:"Eldingar","lightning-rainy":"Þrumur",partlycloudy:"Skýjað að hluta",pouring:"mikil rigning",rainy:"Rigning",snowy:"Snjókoma","snowy-rainy":"Él",sunny:"Sólríkt",windy:"Hvasst","windy-variant":"Stórmur",exceptional:"Óveður"},Lt={1:"Mán",2:"Þri",3:"Mið",4:"Fim",5:"Fös",6:"Lau",7:"Sun"},Pt={aqi:"AQI",humidity:"raki","feels-like":"Feels like"},Ht={weather:Ft,day:Lt,misc:Pt},Wt={"clear-night":"Sereno",cloudy:"Nuvoloso",fog:"Nebbia",hail:"Grandine",lightning:"Temporali","lightning-rainy":"Temporali con pioggia",partlycloudy:"Parzialmente nuvoloso",pouring:"Rovesci",rainy:"Pioggia",snowy:"Neve","snowy-rainy":"Nevischio",sunny:"Soleggiato",windy:"Vento","windy-variant":"Vento forte",exceptional:"Tempesta"},qt={1:"Lun",2:"Mar",3:"Mer",4:"Gio",5:"Ven",6:"Sab",7:"Dom"},Rt={aqi:"AQI",humidity:"umidità","feels-like":"Percepita"},Yt={weather:Wt,day:qt,misc:Rt},Jt={"clear-night":"晴れ",cloudy:"曇り",fog:"霧",hail:"ひょう",lightning:"雷","lightning-rainy":"雷雨",partlycloudy:"晴れ時々曇り",pouring:"大雨",rainy:"雨",snowy:"雪","snowy-rainy":"みぞれ",sunny:"晴れ",windy:"強風","windy-variant":"強風と曇り",exceptional:"異常気象"},Qt={1:"月",2:"火",3:"水",4:"木",5:"金",6:"土",7:"日"},Kt={aqi:"AQI",humidity:"湿度","feels-like":"体感温度"},Xt={weather:Jt,day:Qt,misc:Kt},ei={"clear-night":"맑음",cloudy:"구름많음",fog:"안개",hail:"우박",lightning:"번개","lightning-rainy":"번개, 뇌우",partlycloudy:"구름조금",pouring:"강한 비",rainy:"비",snowy:"눈","snowy-rainy":"진눈깨비",sunny:"맑음",windy:"바람","windy-variant":"매우 강한 바람",exceptional:"예외"},ti={1:"월",2:"화",3:"수",4:"목",5:"금",6:"토",7:"일"},ii={aqi:"대기환경지수",humidity:"습도","feels-like":"체감온도"},ri={weather:ei,day:ti,misc:ii},si={"clear-night":"kloer",cloudy:"bedeckt",fog:"Niwwel",hail:"Knëppelsteng",lightning:"Donnerwieder","lightning-rainy":"Donnerwieder",partlycloudy:"deels bedeckt",pouring:"staarke Reen",rainy:"Reen",snowy:"Schnéi","snowy-rainy":"Schnéireen",sunny:"Sonn",windy:"lëfteg","windy-variant":"staarke Wand",exceptional:"Onwieder"},ai={1:"Mé",2:"Dë",3:"Më",4:"Do",5:"Fr",6:"Sa",7:"So"},ni={aqi:"AQI",humidity:"Loftfiichtegkeet","feels-like":"Gefillt"},oi={weather:si,day:ai,misc:ni},li={"clear-night":"Giedra",cloudy:"Debesuota",fog:"Rūkas",hail:"Kruša",lightning:"Perkūnija","lightning-rainy":"Perkūnija su lietumi",partlycloudy:"Apsiniaukę",pouring:"Liūtis",rainy:"Lietus",snowy:"Sniegas","snowy-rainy":"Šlapdriba",sunny:"Saulėta",windy:"Vėjuota","windy-variant":"Stiprus vėjas",exceptional:"Audra"},ci={1:"Pr",2:"An",3:"Tr",4:"Kt",5:"Pn",6:"Št",7:"Sk"},di={aqi:"AQI",humidity:"drėgmė","feels-like":"Feels like"},ui={weather:li,day:ci,misc:di},hi={"clear-night":"Klart",cloudy:"Overskyet",fog:"Tåke",hail:"Hagl",lightning:"Lyn","lightning-rainy":"Lyn, regn",partlycloudy:"Delvis overskyet",pouring:"Pøsregn",rainy:"Regn",snowy:"Snø","snowy-rainy":"Sludd",sunny:"Sol",windy:"Vindfullt","windy-variant":"Sterk vind",exceptional:"Storm"},mi={1:"Man",2:"Tir",3:"Ons",4:"Tor",5:"Fre",6:"Lør",7:"Søn"},fi={aqi:"AQI",humidity:"fuktighet","feels-like":"Føles som"},pi={weather:hi,day:mi,misc:fi},yi={"clear-night":"Helder",cloudy:"Bewolkt",fog:"Mistig",hail:"Hagel",lightning:"Onweersbuien","lightning-rainy":"Onweersbuien met regen",partlycloudy:"Half bewolkt",pouring:"Regen",rainy:"Regenachtig",snowy:"Sneeuw","snowy-rainy":"Natte sneeuw",sunny:"Zonnig",windy:"Winderig","windy-variant":"Storm",exceptional:"Uitzonderlijk"},bi={1:"Ma",2:"Di",3:"Wo",4:"Do",5:"Vr",6:"Za",7:"Zo"},gi={aqi:"AQI",humidity:"Vochtigheid","feels-like":"Gevoelstemperatuur"},wi={weather:yi,day:bi,misc:gi},vi={"clear-night":"pogodna noc",cloudy:"pochmurno",fog:"mgła",hail:"grad",lightning:"błyskawice","lightning-rainy":"burza",partlycloudy:"częściowe zachmurzenie",pouring:"ulewa",rainy:"deszczowo",snowy:"opady śniegu","snowy-rainy":"deszcz ze śniegiem",sunny:"słonecznie",windy:"wietrznie","windy-variant":"wietrznie",exceptional:"warunki nadzwyczajne"},ki={1:"pon.",2:"wt.",3:"śr.",4:"czw.",5:"pt.",6:"sob.",7:"niedz."},xi={aqi:"AQI",humidity:"wilgotność","feels-like":"Odczuwalne"},Ti={weather:vi,day:ki,misc:xi},Mi={"clear-night":"Céu limpo, sem nuvens",cloudy:"Nublado",fog:"Nevoeiro",hail:"Granizo",lightning:"Raios","lightning-rainy":"Chuvoso com raios",partlycloudy:"Parcialmente nublado",pouring:"Torrencial",rainy:"Chuvoso",snowy:"Neve","snowy-rainy":"Chuvoso com neve",sunny:"Ensolarado",windy:"Ventania","windy-variant":"Ventania forte",exceptional:"Excepcional"},Si={1:"Seg",2:"Ter",3:"Qua",4:"Qui",5:"Sex",6:"Sáb",7:"Dom"},_i={aqi:"AQI",humidity:"umidade","feels-like":"Sensação térmica"},Ni={weather:Mi,day:Si,misc:_i},Oi={"clear-night":"Céu limpo, sem nuvens",cloudy:"Nublado",fog:"Nevoeiro",hail:"Granizo",lightning:"Raios","lightning-rainy":"Chuvoso com raios",partlycloudy:"Parcialmente nublado",pouring:"Torrencial",rainy:"Chuvoso",snowy:"Neve","snowy-rainy":"Chuvoso com neve",sunny:"Ensolarado",windy:"Ventania","windy-variant":"Ventania forte",exceptional:"Excepcional"},Ai={1:"Seg",2:"Ter",3:"Qua",4:"Qui",5:"Sex",6:"Sáb",7:"Dom"},$i={aqi:"AQI",humidity:"humidade","feels-like":"Sensação térmica"},Ci={weather:Oi,day:Ai,misc:$i},Zi={"clear-night":"Senin",cloudy:"Înnorat",fog:"Ceață",hail:"Grindină",lightning:"Fulgere","lightning-rainy":"Furtuni cu ploaie",partlycloudy:"Parțial înnorat",pouring:"Averse",rainy:"Ploaie",snowy:"Ninsoare","snowy-rainy":"Lapoviță",sunny:"Însorit",windy:"Vânt","windy-variant":"Vânt puternic",exceptional:"Furtună"},Bi={1:"Lun",2:"Mar",3:"Mie",4:"Joi",5:"Vin",6:"Sâm",7:"Dum"},Ui={aqi:"AQI",humidity:"umiditate","feels-like":"Temp. resimțită"},Gi={weather:Zi,day:Bi,misc:Ui},Vi={"clear-night":"Ясно",cloudy:"Облачно",fog:"Туман",hail:"Град",lightning:"Гроза","lightning-rainy":"Дождь с грозой",partlycloudy:"Переменная облачность",pouring:"Проливной дождь",rainy:"Дождь",snowy:"Снег","snowy-rainy":"Мокрый снег",sunny:"Солнечно",windy:"Ветер","windy-variant":"Сильный ветер",exceptional:"Буря"},Ei={1:"Пн",2:"Вт",3:"Ср",4:"Чт",5:"Пт",6:"Сб",7:"Вс"},Di={aqi:"AQI",humidity:"влажность","feels-like":"Ощущается как"},ji={weather:Vi,day:Ei,misc:Di},zi={"clear-night":"Jasná noc",cloudy:"Zamračené",fog:"Hmla",hail:"Krupobitie",lightning:"Búrky","lightning-rainy":"Búrky s dažďom",partlycloudy:"Polooblačno",pouring:"Silný dážď",rainy:"Daždivo",snowy:"Sneženie","snowy-rainy":"Dážď so snehom",sunny:"Slnečno",windy:"Veterno","windy-variant":"Prudký vietor",exceptional:"Neobyčajné počasie (Chaos)"},Ii={1:"Pon",2:"Uto",3:"Str",4:"Štv",5:"Pia",6:"Sob",7:"Ned"},Fi={aqi:"AQI",humidity:"vlhkosť","feels-like":"pocitová teplota"},Li={weather:zi,day:Ii,misc:Fi},Pi={"clear-night":"Jasno",cloudy:"Oblačno",fog:"Megla",hail:"Toča",lightning:"Nevihte","lightning-rainy":"Nevihte z dežjem",partlycloudy:"Delno oblačno",pouring:"Lije",rainy:"Deževno",snowy:"Sneženo","snowy-rainy":"Žled",sunny:"Sončno",windy:"Vetrovno","windy-variant":"Močan veter",exceptional:"Izjemno vreme"},Hi={1:"Pon",2:"Tor",3:"Sre",4:"Čet",5:"Pet",6:"Sob",7:"Ned"},Wi={aqi:"AQI",humidity:"vlažnost","feels-like":"Občutek temperature"},qi={weather:Pi,day:Hi,misc:Wi},Ri={"clear-night":"Ведро",cloudy:"Облачно",fog:"Магла",hail:"Град",lightning:"Грмљавина","lightning-rainy":"Киша уз грмљавину",partlycloudy:"Делимично облачно",pouring:"Пљусак",rainy:"Киша",snowy:"Снег","snowy-rainy":"Суснежица",sunny:"Сунчано",windy:"Ветар","windy-variant":"Јак ветар",exceptional:"Изузетно"},Yi={1:"Пон",2:"Уто",3:"Сре",4:"Чет",5:"Пет",6:"Суб",7:"Нед"},Ji={aqi:"AQI",humidity:"Влажност","feels-like":"Feels like"},Qi={weather:Ri,day:Yi,misc:Ji},Ki={"clear-night":"Vedro",cloudy:"Oblačno",fog:"Magla",hail:"Grad",lightning:"Grmljavina","lightning-rainy":"Kiša uz grmljavinu",partlycloudy:"Delimično oblačno",pouring:"Pljusak",rainy:"Kiša",snowy:"Sneg","snowy-rainy":"Susnežica",sunny:"Sunčano",windy:"Vetar","windy-variant":"Jak vetar",exceptional:"Izuzetno"},Xi={1:"Pon",2:"Uto",3:"Sre",4:"Čet",5:"Pet",6:"Sub",7:"Ned"},er={aqi:"AQI",humidity:"Vlažnost","feels-like":"Feels like"},tr={weather:Ki,day:Xi,misc:er},ir={"clear-night":"Klart, natt",cloudy:"Molnigt",fog:"Dimma",hail:"Hagel",lightning:"Åska","lightning-rainy":"Åska, regnigt",partlycloudy:"Delvis molnigt",pouring:"Ösregn",rainy:"Regnigt",snowy:"Snöigt","snowy-rainy":"Snöblandat regn",sunny:"Soligt",windy:"Blåsigt","windy-variant":"Stark blåst",exceptional:"Exceptionellt"},rr={1:"Mån",2:"Tis",3:"Ons",4:"Tor",5:"Fre",6:"Lör",7:"Sön"},sr={aqi:"AQI",humidity:"fuktighet","feels-like":"Känns som"},ar={weather:ir,day:rr,misc:sr},nr={"clear-night":"ท้องฟ้าแจ่มใส",cloudy:"มีเมฆเป็นส่วนมาก",fog:"หมอก",hail:"ลูกเห็บ",lightning:"พายุฝนฟ้าคะนอง","lightning-rainy":"ฝนฟ้าคะนอง",partlycloudy:"มีเมฆบางส่วน",pouring:"ฝนตกหนัก",rainy:"ฝนตก",snowy:"หิมะตก","snowy-rainy":"ฝนตกเป็นลูกเห็บ",sunny:"แดดจัด",windy:"มีลมจัด","windy-variant":"ลมแรง",exceptional:"Exceptional"},or={1:"จ.",2:"อ.",3:"พ.",4:"พฤ.",5:"ศ.",6:"ส.",7:"อา."},lr={aqi:"AQI",humidity:"ความชื้น","feels-like":"รู้สึกเหมือน"},cr={weather:nr,day:or,misc:lr},dr={"clear-night":"Açık",cloudy:"Bulutlu",fog:"Sis",hail:"Dolu",lightning:"Gökgürültülü","lightning-rainy":"Gökgürültülü Yağmurlu",partlycloudy:"Parçalı Bulutlu",pouring:"Sağanak",rainy:"Yağmurlu",snowy:"Karlı","snowy-rainy":"Sulu Kar",sunny:"Güneşli",windy:"Rüzgarlı","windy-variant":"Güçlü Rüzgar",exceptional:"Mükemmel"},ur={1:"Pzt",2:"Sal",3:"Çrş",4:"Prş",5:"Cum",6:"Cts",7:"Pzr"},hr={aqi:"AQI",humidity:"nem","feels-like":"Hissedilen"},mr={weather:dr,day:ur,misc:hr},fr={"clear-night":"Ясно",cloudy:"Хмарно",fog:"Туман",hail:"Грім",lightning:"Грози","lightning-rainy":"Дощові грози",partlycloudy:"Мінлива хмарність",pouring:"Злива",rainy:"Дощ",snowy:"Сніг","snowy-rainy":"Мокрий сніг",sunny:"Сонячно",windy:"Вітряно","windy-variant":"Дуже вітряно",exceptional:"Буря"},pr={1:"Пн",2:"Вт",3:"Ср",4:"Чт",5:"Пт",6:"Сб",7:"Нд"},yr={aqi:"AQI",humidity:"вологість","feels-like":"Feels like"},br={weather:fr,day:pr,misc:yr},gr={"clear-night":"صاف",cloudy:"ابر آلود",fog:"دھند",hail:"اولے",lightning:"گرج چمک","lightning-rainy":"گرج چمک کے ساتھ بارش",partlycloudy:"جزوی طور پر ابر آلود",pouring:"موسلا دھار بارش",rainy:"بارش",snowy:"برفانی","snowy-rainy":"ژالہ باری",sunny:"دھوپ",windy:"آندھی","windy-variant":"تیز آندھی",exceptional:"غیر معمولی"},wr={1:"پیر",2:"منگل",3:"بدھ",4:"جمعرات",5:"جمعہ",6:"ہفتہ",7:"اتوار"},vr={aqi:"AQI",humidity:"نمی","feels-like":"Feels like"},kr={weather:gr,day:wr,misc:vr},xr={"clear-night":"Trời trong",cloudy:"Trời mây",fog:"Sương mù",hail:"Mưa đá",lightning:"Dông bão","lightning-rainy":"Mưa Dông",partlycloudy:"Mây nhẹ",pouring:"Mưa Lớn",rainy:"Mưa",snowy:"Tuyết","snowy-rainy":"Mưa Tuyết",sunny:"Nắng",windy:"Gió","windy-variant":"Gió mạnh",exceptional:"Khắc Nghiệt"},Tr={1:"T2",2:"T3",3:"T4",4:"T5",5:"T6",6:"T7",7:"CN"},Mr={aqi:"AQI",humidity:"độ ẩm","feels-like":"Cảm giác như"},Sr={weather:xr,day:Tr,misc:Mr},_r={"clear-night":"夜间晴朗",cloudy:"阴",fog:"雾",hail:"冰雹",lightning:"雷","lightning-rainy":"雷阵雨",partlycloudy:"多云",pouring:"大雨",rainy:"雨",snowy:"雪","snowy-rainy":"雨夹雪",sunny:"晴",windy:"有风","windy-variant":"强风",exceptional:"特殊"},Nr={1:"周一",2:"周二",3:"周三",4:"周四",5:"周五",6:"周六",7:"周日"},Or={aqi:"AQI",humidity:"湿度","feels-like":"体感温度"},Ar={weather:_r,day:Nr,misc:Or},$r={"clear-night":"晴朗夜晚",cloudy:"多雲",fog:"有霧",hail:"冰雹",lightning:"閃電","lightning-rainy":"雷雨",partlycloudy:"局部多雲",pouring:"大雨",rainy:"下雨",snowy:"下雪","snowy-rainy":"雪雨",sunny:"晴天",windy:"有風","windy-variant":"強風",exceptional:"極端天氣"},Cr={1:"週一",2:"週二",3:"週三",4:"週四",5:"週五",6:"週六",7:"週日"},Zr={aqi:"空氣品質",humidity:"濕度","feels-like":"體感溫度"},Br={weather:$r,day:Cr,misc:Zr};const Ur={ar:Oe,bg:Be,cs:Object.freeze({__proto__:null,day:He,default:qe,misc:We,weather:Pe}),ca:Le,cy:Object.freeze({__proto__:null,day:Ye,default:Qe,misc:Je,weather:Re}),da:De,de:Object.freeze({__proto__:null,day:Xe,default:tt,misc:et,weather:Ke}),el:Object.freeze({__proto__:null,day:rt,default:at,misc:st,weather:it}),en:Object.freeze({__proto__:null,day:ot,default:ct,misc:lt,weather:nt}),es:Object.freeze({__proto__:null,day:ut,default:mt,misc:ht,weather:dt}),et:Object.freeze({__proto__:null,day:pt,default:bt,misc:yt,weather:ft}),fi:Object.freeze({__proto__:null,day:wt,default:kt,misc:vt,weather:gt}),fr:Object.freeze({__proto__:null,day:Tt,default:St,misc:Mt,weather:xt}),he:Object.freeze({__proto__:null,day:Nt,default:At,misc:Ot,weather:_t}),hu:Object.freeze({__proto__:null,day:Ct,default:Bt,misc:Zt,weather:$t}),hr:Object.freeze({__proto__:null,day:Gt,default:Et,misc:Vt,weather:Ut}),id:Object.freeze({__proto__:null,day:jt,default:It,misc:zt,weather:Dt}),is:Object.freeze({__proto__:null,day:Lt,default:Ht,misc:Pt,weather:Ft}),it:Object.freeze({__proto__:null,day:qt,default:Yt,misc:Rt,weather:Wt}),ja:Object.freeze({__proto__:null,day:Qt,default:Xt,misc:Kt,weather:Jt}),ko:Object.freeze({__proto__:null,day:ti,default:ri,misc:ii,weather:ei}),lb:Object.freeze({__proto__:null,day:ai,default:oi,misc:ni,weather:si}),lt:Object.freeze({__proto__:null,day:ci,default:ui,misc:di,weather:li}),nb:Object.freeze({__proto__:null,day:mi,default:pi,misc:fi,weather:hi}),nl:Object.freeze({__proto__:null,day:bi,default:wi,misc:gi,weather:yi}),pl:Object.freeze({__proto__:null,day:ki,default:Ti,misc:xi,weather:vi}),ptbr:Object.freeze({__proto__:null,day:Si,default:Ni,misc:_i,weather:Mi}),pt:Object.freeze({__proto__:null,day:Ai,default:Ci,misc:$i,weather:Oi}),ro:Object.freeze({__proto__:null,day:Bi,default:Gi,misc:Ui,weather:Zi}),ru:Object.freeze({__proto__:null,day:Ei,default:ji,misc:Di,weather:Vi}),sk:Object.freeze({__proto__:null,day:Ii,default:Li,misc:Fi,weather:zi}),sl:Object.freeze({__proto__:null,day:Hi,default:qi,misc:Wi,weather:Pi}),sr:Object.freeze({__proto__:null,day:Yi,default:Qi,misc:Ji,weather:Ri}),srlatn:Object.freeze({__proto__:null,day:Xi,default:tr,misc:er,weather:Ki}),sv:Object.freeze({__proto__:null,day:rr,default:ar,misc:sr,weather:ir}),th:Object.freeze({__proto__:null,day:or,default:cr,misc:lr,weather:nr}),tr:Object.freeze({__proto__:null,day:ur,default:mr,misc:hr,weather:dr}),uk:Object.freeze({__proto__:null,day:pr,default:br,misc:yr,weather:fr}),ur:Object.freeze({__proto__:null,day:wr,default:kr,misc:vr,weather:gr}),vi:Object.freeze({__proto__:null,day:Tr,default:Sr,misc:Mr,weather:xr}),zhcn:Object.freeze({__proto__:null,day:Nr,default:Ar,misc:Or,weather:_r}),zhtw:Object.freeze({__proto__:null,day:Cr,default:Br,misc:Zr,weather:$r})};function Gr(e){return Math.max(...e)}function Vr(e){return Math.min(...e)}function Er(e){return null===e?null:Math.round(e)}var Dr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='54.3' x2='187.2' y1='29' y2='259.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3csymbol id='b' overflow='visible' viewBox='0 0 270 270'%3e%3cpath fill='url(%23a)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='6' d='M252.3 168.6A133.4 133.4 0 01118 36.2 130.5 130.5 0 01122.5 3 133 133 0 003 134.6C3 207.7 63 267 137.2 267c62.5 0 114.8-42.2 129.8-99.2a135.6 135.6 0 01-14.8.8Z'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 135 135%3b 9 135 135%3b -15 135 135'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='270' height='270' transform='translate(121 121)'/%3e%3c/svg%3e",jr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' overflow='visible' viewBox='0 0 279 279'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M256.8 173.1A133.3 133.3 0 01122.4 40.7 130.5 130.5 0 01127 7.5 133 133 0 007.5 139.1c0 73.1 60 132.4 134.2 132.4 62.5 0 114.8-42.2 129.8-99.2a135.6 135.6 0 01-14.8.8Z'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 135 135%3b 9 135 135%3b -15 135 135'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='279' height='279' transform='translate(116.5 116.5)'/%3e%3c/svg%3e",zr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='150' x2='234' y1='119.2' y2='264.8' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3csymbol id='b' viewBox='0 0 384 384'%3e%3ccircle cx='192' cy='192' r='84' fill='url(%23a)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='6'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M192 61.7V12m0 360v-49.7m92.2-222.5 35-35M64.8 319.2l35.1-35.1m0-184.4-35-35m254.5 254.5-35.1-35.1M61.7 192H12m360 0h-49.7'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 192 192%3b 45 192 192'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='384' height='384' transform='translate(64 64)'/%3e%3c/svg%3e",Ir="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 375 375'%3e%3ccircle cx='187.5' cy='187.5' r='84' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='15'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='15' d='M187.5 57.2V7.5m0 360v-49.7m92.2-222.5 35-35M60.3 314.7l35.1-35.1m0-184.4-35-35m254.5 254.5-35.1-35.1M57.2 187.5H7.5m360 0h-49.7'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 187.5 187.5%3b 45 187.5 187.5'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='375' height='375' transform='translate(68.5 68.5)'/%3e%3c/svg%3e",Fr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='90' x2='206' y1='155.6' y2='356.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23d4d7dd'/%3e%3cstop offset='.5' stop-color='%23d4d7dd'/%3e%3cstop offset='1' stop-color='%23bec1c6'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='179.4' x2='226.7' y1='142.4' y2='224.3' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f87171'/%3e%3cstop offset='.5' stop-color='%23f87171'/%3e%3cstop offset='1' stop-color='%23dc2626'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='252.5' x2='291.9' y1='149.2' y2='217.5'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='325.6' x2='357.2' y1='156' y2='210.7'/%3e%3c/defs%3e%3cpath fill='none' stroke='url(%23a)' stroke-linecap='round' stroke-linejoin='round' stroke-width='24' d='M148 376V136'/%3e%3cpath fill='url(%23b)' stroke='%23ef4444' stroke-miterlimit='10' stroke-width='2' d='m191.4 137 28.8 4.3a6.4 6.4 0 015.4 6.3v73.7a6.4 6.4 0 01-5.4 6.3l-28.8 4.2a6.4 6.4 0 01-7.3-6.4v-82a6.4 6.4 0 017.3-6.3Z'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='3s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='rotate' values='-6 99 184%3b 6 99 184%3b -6 99 184'/%3e%3c/path%3e%3cpath fill='url(%23c)' stroke='%23ef4444' stroke-miterlimit='10' stroke-width='2' d='m260.6 146.1 28.8 4.2a6.4 6.4 0 015.4 6.3v55.6a6.4 6.4 0 01-5.5 6.3l-28.7 4.2a6.4 6.4 0 01-7.3-6.3v-64a6.4 6.4 0 017.3-6.3Z'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='3s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='rotate' values='-6 99 184%3b 6 99 184%3b -6 99 184'/%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='1.5s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='translate' values='0 0%3b 5 0%3b 0 0'/%3e%3c/path%3e%3cpath fill='url(%23d)' stroke='%23ef4444' stroke-miterlimit='10' stroke-width='2' d='m329.8 155.2 28.7 4.2a6.4 6.4 0 015.5 6.3v37.4a6.4 6.4 0 01-5.5 6.3l-28.7 4.2a6.4 6.4 0 01-7.3-6.3v-45.8a6.4 6.4 0 017.3-6.3Z'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='3s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='rotate' values='-6 99 184%3b 6 99 184%3b -6 99 184'/%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='1.5s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='translate' values='0 0%3b 10 0%3b 0 0'/%3e%3c/path%3e%3c/svg%3e",Lr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3e%3cpath fill='none' stroke='%23cbd5e1' stroke-linecap='round' stroke-linejoin='round' stroke-width='24' d='M148 376V136'/%3e%3cpath fill='%23ef4444' d='m191.4 137 28.8 4.3a6.4 6.4 0 015.4 6.3v73.7a6.4 6.4 0 01-5.4 6.3l-28.8 4.2a6.4 6.4 0 01-7.3-6.4v-82a6.4 6.4 0 017.3-6.3Z'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='3s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='rotate' values='-6 99 184%3b 6 99 184%3b -6 99 184'/%3e%3c/path%3e%3cpath fill='%23ef4444' d='m260.6 146.1 28.8 4.2a6.4 6.4 0 015.4 6.3v55.6a6.4 6.4 0 01-5.5 6.3l-28.7 4.2a6.4 6.4 0 01-7.3-6.3v-64a6.4 6.4 0 017.3-6.3Z'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='3s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='rotate' values='-6 99 184%3b 6 99 184%3b -6 99 184'/%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='1.5s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='translate' values='0 0%3b 5 0%3b 0 0'/%3e%3c/path%3e%3cpath fill='%23ef4444' d='m329.8 155.2 28.7 4.2a6.4 6.4 0 015.5 6.3v37.4a6.4 6.4 0 01-5.5 6.3l-28.7 4.2a6.4 6.4 0 01-7.3-6.3v-45.8a6.4 6.4 0 017.3-6.3Z'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='3s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='rotate' values='-6 99 184%3b 6 99 184%3b -6 99 184'/%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='1.5s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='translate' values='0 0%3b 10 0%3b 0 0'/%3e%3c/path%3e%3c/svg%3e",Pr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='54.3' x2='187.2' y1='29' y2='259.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3csymbol id='b' viewBox='0 0 270 270'%3e%3cpath fill='url(%23a)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='6' d='M252.3 168.6A133.4 133.4 0 01118 36.2 130.5 130.5 0 01122.5 3 133 133 0 003 134.6C3 207.7 63 267 137.2 267c62.5 0 114.8-42.2 129.8-99.2a135.6 135.6 0 01-14.8.8Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='270' height='270' transform='translate(121 121)'/%3e%3c/svg%3e",Hr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 279 279'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M256.8 173.1A133.3 133.3 0 01122.4 40.7 130.5 130.5 0 01127 7.5 133 133 0 007.5 139.1c0 73.1 60 132.4 134.2 132.4 62.5 0 114.8-42.2 129.8-99.2a135.6 135.6 0 01-14.8.8Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='279' height='279' transform='translate(116.5 116.5)'/%3e%3c/svg%3e",Wr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='150' x2='234' y1='119.2' y2='264.8' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3csymbol id='b' viewBox='0 0 384 384'%3e%3ccircle cx='192' cy='192' r='84' fill='url(%23a)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='6'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M192 61.7V12m0 360v-49.7m92.2-222.5 35-35M64.8 319.2l35.1-35.1m0-184.4-35-35m254.5 254.5-35.1-35.1M61.7 192H12m360 0h-49.7'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='384' height='384' transform='translate(64 64)'/%3e%3c/svg%3e",qr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 375 375'%3e%3ccircle cx='187.5' cy='187.5' r='84' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='15'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='15' d='M187.5 57.2V7.5m0 360v-49.7m92.2-222.5 35-35M60.3 314.7l35.1-35.1m0-184.4-35-35m254.5 254.5-35.1-35.1M57.2 187.5H7.5m360 0h-49.7'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='375' height='375' transform='translate(68.5 68.5)'/%3e%3c/svg%3e",Rr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='90' x2='206' y1='155.6' y2='356.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23d4d7dd'/%3e%3cstop offset='.5' stop-color='%23d4d7dd'/%3e%3cstop offset='1' stop-color='%23bec1c6'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='179.4' x2='226.7' y1='142.4' y2='224.3' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f87171'/%3e%3cstop offset='.5' stop-color='%23f87171'/%3e%3cstop offset='1' stop-color='%23dc2626'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='252.5' x2='291.9' y1='149.2' y2='217.5'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='325.6' x2='357.2' y1='156' y2='210.7'/%3e%3c/defs%3e%3cpath fill='none' stroke='url(%23a)' stroke-linecap='round' stroke-linejoin='round' stroke-width='24' d='M148 376V136'/%3e%3cpath fill='url(%23b)' stroke='%23ef4444' stroke-miterlimit='10' stroke-width='2' d='m191.4 137 28.8 4.3a6.4 6.4 0 015.4 6.3v73.7a6.4 6.4 0 01-5.4 6.3l-28.8 4.2a6.4 6.4 0 01-7.3-6.4v-82a6.4 6.4 0 017.3-6.3Z'/%3e%3cpath fill='url(%23c)' stroke='%23ef4444' stroke-miterlimit='10' stroke-width='2' d='m260.6 146.1 28.8 4.2a6.4 6.4 0 015.4 6.3v55.6a6.4 6.4 0 01-5.5 6.3l-28.7 4.2a6.4 6.4 0 01-7.3-6.3v-64a6.4 6.4 0 017.3-6.3Z'/%3e%3cpath fill='url(%23d)' stroke='%23ef4444' stroke-miterlimit='10' stroke-width='2' d='m329.8 155.2 28.7 4.2a6.4 6.4 0 015.5 6.3v37.4a6.4 6.4 0 01-5.5 6.3l-28.7 4.2a6.4 6.4 0 01-7.3-6.3v-45.8a6.4 6.4 0 017.3-6.3Z'/%3e%3c/svg%3e",Yr="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3e%3cpath fill='none' stroke='%23cbd5e1' stroke-linecap='round' stroke-linejoin='round' stroke-width='24' d='M148 376V136'/%3e%3cpath fill='%23ef4444' d='m191.4 137 28.8 4.3a6.4 6.4 0 015.4 6.3v73.7a6.4 6.4 0 01-5.4 6.3l-28.8 4.2a6.4 6.4 0 01-7.3-6.4v-82a6.4 6.4 0 017.3-6.3Zm69.2 9.1 28.8 4.2a6.4 6.4 0 015.4 6.3v55.6a6.4 6.4 0 01-5.5 6.3l-28.7 4.2a6.4 6.4 0 01-7.3-6.3v-64a6.4 6.4 0 017.3-6.3Zm69.2 9.1 28.7 4.2a6.4 6.4 0 015.5 6.3v37.4a6.4 6.4 0 01-5.5 6.3l-28.7 4.2a6.4 6.4 0 01-7.3-6.3v-45.8a6.4 6.4 0 017.3-6.3Z'/%3e%3c/svg%3e";const Jr={line:{rainy:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 193 193'%3e%3ccircle cx='96.5' cy='96.5' r='40' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='9'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='9' d='M96.5 29.9V4.5m0 184v-25.4m47.1-113.7 18-18M31.4 161.6l18-18m0-94.2-18-18m130.2 130.2-18-18M4.5 96.5h25.4m158.6 0h-25.4'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 96.5 96.5%3b 45 96.5 96.5'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='193' height='193' transform='translate(69.5 110.5)'/%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='e' overflow='visible' viewBox='0 0 128 56'%3e%3cpath fill='%230a5ad4' d='M8 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M64 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M120 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23e' width='128' height='56' transform='translate(192 344)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 178 178'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='10' d='M163.6 110.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0181 5 84.7 84.7 0 005 88.7 84.8 84.8 0 0090.4 173a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='178' height='178' transform='translate(77 118)'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 86 86%3b 9 86 86%3b -15 86 86'/%3e%3c/use%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='e' overflow='visible' viewBox='0 0 128 56'%3e%3cpath fill='%230a5ad4' d='M8 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M64 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M120 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23e' width='128' height='56' transform='translate(192 344)'/%3e%3c/svg%3e"},partlycloudy:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 193 193'%3e%3ccircle cx='96.5' cy='96.5' r='40' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='9'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='9' d='M96.5 29.9V4.5m0 184v-25.4m47.1-113.7 18-18M31.4 161.6l18-18m0-94.2-18-18m130.2 130.2-18-18M4.5 96.5h25.4m158.6 0h-25.4'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 96.5 96.5%3b 45 96.5 96.5'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='193' height='193' transform='translate(69.5 110.5)'/%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 178 178'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='10' d='M163.6 110.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0181 5 84.7 84.7 0 005 88.7 84.8 84.8 0 0090.4 173a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='178' height='178' transform='translate(77 118)'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 86 86%3b 9 86 86%3b -15 86 86'/%3e%3c/use%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3c/svg%3e"},cloudy:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='359' height='231' transform='translate(76.5 140.5)'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='-18 0%3b 18 0%3b -18 0'/%3e%3c/use%3e%3c/svg%3e","clear-night":{day:Ir,night:jr},fog:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='b' viewBox='0 0 375 375'%3e%3ccircle cx='187.5' cy='187.5' r='84' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='15'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='15' d='M187.5 57.2V7.5m0 360v-49.7m92.2-222.5 35-35M60.3 314.7l35.1-35.1m0-184.4-35-35m254.5 254.5-35.1-35.1M57.2 187.5H7.5m360 0h-49.7'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 187.5 187.5%3b 45 187.5 187.5'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='c' overflow='visible' viewBox='0 0 258 66'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-miterlimit='10' stroke-width='18' d='M9 57h240'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='-24 0%3b 24 0%3b -24 0'/%3e%3c/path%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-miterlimit='10' stroke-width='18' d='M9 9h240'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='24 0%3b -24 0%3b 24 0'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M0 0h512v306H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23b' width='375' height='375' transform='translate(68.5 104.5)'/%3e%3c/g%3e%3cuse xlink:href='%23c' width='258' height='66' transform='translate(127 339)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='b' overflow='visible' viewBox='0 0 279 279'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M256.8 173.1A133.3 133.3 0 01122.4 40.7 130.5 130.5 0 01127 7.5 133 133 0 007.5 139.1c0 73.1 60 132.4 134.2 132.4 62.5 0 114.8-42.2 129.8-99.2a135.6 135.6 0 01-14.8.8Z'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 135 135%3b 9 135 135%3b -15 135 135'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='c' overflow='visible' viewBox='0 0 258 66'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-miterlimit='10' stroke-width='18' d='M9 57h240'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='-24 0%3b 24 0%3b -24 0'/%3e%3c/path%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-miterlimit='10' stroke-width='18' d='M9 9h240'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='24 0%3b -24 0%3b 24 0'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M0 0h512v306H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23b' width='279' height='279' transform='translate(116.5 116.5)'/%3e%3c/g%3e%3cuse xlink:href='%23c' width='258' height='66' transform='translate(127 339)'/%3e%3c/svg%3e"},hail:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' overflow='visible' viewBox='0 0 136 24'%3e%3cpath fill='%2386c3db' d='M12 0a12 12 0 1012 12A12 12 0 0012 0Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.42s' dur='.58s' keyTimes='0%3b .71%3b 1' type='translate' values='0 -46%3b 0 86%3b -18 74'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.42s' dur='.58s' keyTimes='0%3b .14%3b .71%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%2386c3db' d='M68 0a12 12 0 1012 12A12 12 0 0068 0Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.67s%3b x2.end%2b.42s' dur='.58s' keyTimes='0%3b .71%3b 1' type='translate' values='0 -46%3b 0 86%3b 0 74'/%3e%3canimate id='y2' attributeName='opacity' begin='.67s%3b y2.end%2b.42s' dur='.58s' keyTimes='0%3b .14%3b .71%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%2386c3db' d='M124 0a12 12 0 1012 12 12 12 0 00-12-12Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='.33s%3b x3.end%2b.42s' dur='.58s' keyTimes='0%3b .71%3b 1' type='translate' values='0 -46%3b 0 86%3b 18 74'/%3e%3canimate id='y3' attributeName='opacity' begin='.33s%3b y3.end%2b.42s' dur='.58s' keyTimes='0%3b .14%3b .71%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3cuse xlink:href='%23b' width='136' height='24' transform='translate(188 350)'/%3e%3c/svg%3e",lightning:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 193 193'%3e%3ccircle cx='96.5' cy='96.5' r='40' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='9'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='9' d='M96.5 29.9V4.5m0 184v-25.4m47.1-113.7 18-18M31.4 161.6l18-18m0-94.2-18-18m130.2 130.2-18-18M4.5 96.5h25.4m158.6 0h-25.4'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 96.5 96.5%3b 45 96.5 96.5'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='193' height='193' transform='translate(69.5 110.5)'/%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 96 176'%3e%3cpath fill='%23f6a823' d='M32 0 0 96h32l-16 80L96 64H48L80 0H32z'%3e%3canimate id='x1' attributeName='opacity' begin='0s%3b x1.end%2b.67s' dur='1.33s' keyTimes='0%3b .38%3b .5%3b .63%3b .75%3b .86%3b .94%3b 1' values='1%3b 1%3b 0%3b 1%3b 0%3b 1%3b 0%3b 1'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23e' width='96' height='176' transform='translate(208 293)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 178 178'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='10' d='M163.6 110.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0181 5 84.7 84.7 0 005 88.7 84.8 84.8 0 0090.4 173a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='178' height='178' transform='translate(77 118)'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 86 86%3b 9 86 86%3b -15 86 86'/%3e%3c/use%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 96 176'%3e%3cpath fill='%23f6a823' d='M32 0 0 96h32l-16 80L96 64H48L80 0H32z'%3e%3canimate id='x1' attributeName='opacity' begin='0s%3b x1.end%2b.67s' dur='1.33s' keyTimes='0%3b .38%3b .5%3b .63%3b .75%3b .86%3b .94%3b 1' values='1%3b 1%3b 0%3b 1%3b 0%3b 1%3b 0%3b 1'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23e' width='96' height='176' transform='translate(208 293)'/%3e%3c/svg%3e"},"lightning-rainy":{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 193 193'%3e%3ccircle cx='96.5' cy='96.5' r='40' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='9'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='9' d='M96.5 29.9V4.5m0 184v-25.4m47.1-113.7 18-18M31.4 161.6l18-18m0-94.2-18-18m130.2 130.2-18-18M4.5 96.5h25.4m158.6 0h-25.4'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 96.5 96.5%3b 45 96.5 96.5'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='193' height='193' transform='translate(69.5 110.5)'/%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='e' overflow='visible' viewBox='0 0 128 56'%3e%3cpath fill='%230a5ad4' d='M8 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M64 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M120 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 96 176'%3e%3cpath fill='%23f6a823' d='M32 0 0 96h32l-16 80L96 64H48L80 0H32z'%3e%3canimate id='x1' attributeName='opacity' begin='0s%3b x1.end%2b.67s' dur='1.33s' keyTimes='0%3b .38%3b .5%3b .63%3b .75%3b .86%3b .94%3b 1' values='1%3b 1%3b 0%3b 1%3b 0%3b 1%3b 0%3b 1'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23e' width='128' height='56' transform='translate(192 344)'/%3e%3cuse xlink:href='%23f' width='96' height='176' transform='translate(208 293)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 178 178'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='10' d='M163.6 110.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0181 5 84.7 84.7 0 005 88.7 84.8 84.8 0 0090.4 173a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='178' height='178' transform='translate(77 118)'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 86 86%3b 9 86 86%3b -15 86 86'/%3e%3c/use%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='e' overflow='visible' viewBox='0 0 128 56'%3e%3cpath fill='%230a5ad4' d='M8 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M64 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M120 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 96 176'%3e%3cpath fill='%23f6a823' d='M32 0 0 96h32l-16 80L96 64H48L80 0H32z'%3e%3canimate id='x1' attributeName='opacity' begin='0s%3b x1.end%2b.67s' dur='1.33s' keyTimes='0%3b .38%3b .5%3b .63%3b .75%3b .86%3b .94%3b 1' values='1%3b 1%3b 0%3b 1%3b 0%3b 1%3b 0%3b 1'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23e' width='128' height='56' transform='translate(192 344)'/%3e%3cuse xlink:href='%23f' width='96' height='176' transform='translate(208 293)'/%3e%3c/svg%3e"},pouring:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' overflow='visible' viewBox='0 0 128 56'%3e%3cpath fill='%230a5ad4' d='M8 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M64 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M120 56a8 8 0 01-8-8V8a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3cuse xlink:href='%23b' width='128' height='56' transform='translate(192 344)'/%3e%3c/svg%3e",raindrop:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 175 260.9'%3e%3cpath fill='none' stroke='%232885c7' stroke-miterlimit='10' stroke-width='15' d='M87.5 13.4c-48.7 72-80 117-80 160.7s35.8 79.3 80 79.3 80-35.5 80-79.3-31.3-88.8-80-160.7Z'%3e%3canimateTransform attributeName='transform' calcMode='spline' dur='6s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='scale' values='1 1%3b 1 .9%3b 1 1'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='175' height='260.9' transform='translate(168.5 122.62)'/%3e%3c/svg%3e",raindrops:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M302 137c-48.7 72-80 117-80 160.8s35.8 79.2 80 79.2v135H0V0h302Z'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='6s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='scale' values='1 1%3b 1 .95%3b 1 1'/%3e%3c/path%3e%3c/clipPath%3e%3csymbol id='b' viewBox='0 0 175 260.9'%3e%3cpath fill='none' stroke='%232885c7' stroke-miterlimit='10' stroke-width='15' d='M87.5 13.4c-48.7 72-80 117-80 160.7s35.8 79.3 80 79.3 80-35.5 80-79.3-31.3-88.8-80-160.7Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='175' height='260.9' transform='translate(214.5 123.62)'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='6s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='scale' values='1 1%3b 1 .9%3b 1 1'/%3e%3c/use%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23b' width='175' height='260.9' transform='translate(122.5 123.62)'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='6s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='scale' values='1 .9%3b 1 1%3b 1 .9'/%3e%3c/use%3e%3c/g%3e%3c/svg%3e",snowy:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' overflow='visible' viewBox='0 0 155.2 48'%3e%3cg%3e%3cpath fill='%2386c3db' d='m41.2 30.5-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V4a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3A4 4 0 00.5 12 4 4 0 002 17.5l5.8 3.3a13.7 13.7 0 000 6.4L2 30.5A4 4 0 00.5 36a4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V44a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8A6 6 0 0127 27a6.1 6.1 0 01-8.3 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 24 24%3b 360 24 24'/%3e%3canimate id='t1' attributeName='opacity' begin='0s%3b t1.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s1' additive='sum' attributeName='transform' begin='0s%3b s1.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3cg%3e%3cpath fill='%2386c3db' d='m97.2 30.5-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V4a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.4L58 30.5a4 4 0 00-1.5 5.5 4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V44a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8A6 6 0 0183 27a6.1 6.1 0 01-8.3 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 80 24%3b 360 80 24'/%3e%3canimate id='t2' attributeName='opacity' begin='-.83s%3b t2.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s2' additive='sum' attributeName='transform' begin='-.83s%3b s2.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3cg%3e%3cpath fill='%2386c3db' d='m153.2 30.5-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V4a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.4l-5.8 3.3a4 4 0 00-1.5 5.5 4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V44a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 136 24%3b 360 136 24'/%3e%3canimate id='t3' attributeName='opacity' begin='.83s%3b t3.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s3' additive='sum' attributeName='transform' begin='.83s%3b s3.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3cuse xlink:href='%23b' width='155.2' height='48' transform='translate(178.4 338)'/%3e%3c/svg%3e","snowy-rainy":"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='c' overflow='visible' viewBox='0 0 155.2 48'%3e%3cg%3e%3cpath fill='%2386c3db' d='m41.2 30.5-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V4a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3A4 4 0 00.5 12 4 4 0 002 17.5l5.8 3.3a13.7 13.7 0 000 6.4L2 30.5A4 4 0 00.5 36a4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V44a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8A6 6 0 0127 27a6.1 6.1 0 01-8.3 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 24 24%3b 360 24 24'/%3e%3canimate id='t1' attributeName='opacity' begin='0s%3b t1.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s1' additive='sum' attributeName='transform' begin='0s%3b s1.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3cg%3e%3cpath fill='%2386c3db' d='m97.2 30.5-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V4a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.4L58 30.5a4 4 0 00-1.5 5.5 4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V44a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8A6 6 0 0183 27a6.1 6.1 0 01-8.3 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 80 24%3b 360 80 24'/%3e%3canimate id='t2' attributeName='opacity' begin='-.83s%3b t2.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s2' additive='sum' attributeName='transform' begin='-.83s%3b s2.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3cg%3e%3cpath fill='%2386c3db' d='m153.2 30.5-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V4a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.4l-5.8 3.3a4 4 0 00-1.5 5.5 4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V44a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 136 24%3b 360 136 24'/%3e%3canimate id='t3' attributeName='opacity' begin='.83s%3b t3.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s3' additive='sum' attributeName='transform' begin='.83s%3b s3.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3c/symbol%3e%3csymbol id='b' overflow='visible' viewBox='0 0 155.2 48'%3e%3cuse xlink:href='%23c' width='155.2' height='48'/%3e%3cpath fill='%230a5ad4' d='M21.6 38a8 8 0 01-8-8V18a8 8 0 0116 0v12a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' type='translate' values='0 -32%3b 0 -32%3b 0 120%3b'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M77.6 38a8 8 0 01-8-8V18a8 8 0 0116 0v12a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='1.34s%3b x2.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' type='translate' values='0 -32%3b 0 -32%3b 0 120%3b'/%3e%3canimate id='y2' attributeName='opacity' begin='1.34s%3b y2.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='%230a5ad4' d='M133.6 38a8 8 0 01-8-8V18a8 8 0 0116 0v12a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='.67s%3b x3.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' type='translate' values='0 -32%3b 0 -32%3b 0 120%3b'/%3e%3canimate id='y3' attributeName='opacity' begin='.67s%3b y3.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3cuse xlink:href='%23b' width='155.2' height='48' transform='translate(178.4 338)'/%3e%3c/svg%3e",sunny:{day:Ir,night:jr},windy:Lr,"windy-exceptional":Lr,exceptional:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-miterlimit='10' stroke-width='18' d='M344 256a88 88 0 11-88-88 88 88 0 0188 88ZM200 116.9l-3.8 7.7A269.7 269.7 0 00169 267h0m143.1 128 3.8-7.7A269.7 269.7 0 00343.2 245h0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='1440 256 256%3b 0 256 256'/%3e%3c/path%3e%3c/svg%3e"},fill:{rainy:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1436.7' x2='1454.9' y1='-1137' y2='-1089.7' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1492.1' x2='1510.3' y1='-1129.3' y2='-1082.1' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3clinearGradient id='e' x1='78' x2='118' y1='63.4' y2='132.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3csymbol id='g' viewBox='0 0 196 196'%3e%3ccircle cx='98' cy='98' r='40' fill='url(%23e)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='4'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='12' d='M98 31.4V6m0 184v-25.4M145.1 51l18-17.9M33 163l18-17.9M51 51 33 33m130.1 130.1-18-18M6 98h25.4M190 98h-25.4'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 98 98%3b 45 98 98'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='h' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 363 258'%3e%3cuse xlink:href='%23g' width='196' height='196'/%3e%3cuse xlink:href='%23h' width='350' height='222' transform='translate(13 36)'/%3e%3c/symbol%3e%3csymbol id='i' overflow='visible' viewBox='0 0 129 57'%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23f' width='363' height='258' transform='translate(68 109)'/%3e%3cuse xlink:href='%23i' width='129' height='57' transform='translate(191.5 343.5)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='34.7' x2='119.2' y1='18.6' y2='165' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23c' id='d' x1='1436.7' x2='1454.9' y1='-1137' y2='-1089.7' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23c' id='e' x1='1492.1' x2='1510.3' y1='-1129.3' y2='-1082.1' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3csymbol id='g' viewBox='0 0 172 172'%3e%3cpath fill='url(%23b)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' d='M160.6 107.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0178 2 84.7 84.7 0 002 85.7 84.8 84.8 0 0087.4 170a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 86 86%3b 9 86 86%3b -15 86 86'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='h' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 351 246'%3e%3cuse xlink:href='%23g' width='172' height='172'/%3e%3cuse xlink:href='%23h' width='350' height='222' transform='translate(1 24)'/%3e%3c/symbol%3e%3csymbol id='i' overflow='visible' viewBox='0 0 129 57'%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23e)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23f' width='351' height='246' transform='translate(80 121)'/%3e%3cuse xlink:href='%23i' width='129' height='57' transform='translate(191.5 343.5)'/%3e%3c/svg%3e"},partlycloudy:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='d' viewBox='0 0 196 196'%3e%3ccircle cx='98' cy='98' r='40' fill='url(%23b)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='4'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='12' d='M98 31.4V6m0 184v-25.4M145.1 51l18-17.9M33 163l18-17.9M51 51 33 33m130.1 130.1-18-18M6 98h25.4M190 98h-25.4'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 98 98%3b 45 98 98'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='c' viewBox='0 0 363 258'%3e%3cuse xlink:href='%23d' width='196' height='196'/%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(13 36)'/%3e%3c/symbol%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='78' x2='118' y1='63.4' y2='132.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3c/defs%3e%3cuse xlink:href='%23c' width='363' height='258' transform='translate(68 109)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='d' viewBox='0 0 172 172'%3e%3cpath fill='url(%23b)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' d='M160.6 107.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0178 2 84.7 84.7 0 002 85.7 84.8 84.8 0 0087.4 170a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 86 86%3b 9 86 86%3b -15 86 86'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='c' viewBox='0 0 351 246'%3e%3cuse xlink:href='%23d' width='172' height='172'/%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(1 24)'/%3e%3c/symbol%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='34.7' x2='119.2' y1='18.6' y2='165' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3c/defs%3e%3cuse xlink:href='%23c' width='351' height='246' transform='translate(80 121)'/%3e%3c/svg%3e"},cloudy:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3csymbol id='b' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='350' height='222' transform='translate(81 145)'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='-18 0%3b 18 0%3b -18 0'/%3e%3c/use%3e%3c/svg%3e","clear-night":{day:zr,night:Dr},fog:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='96' x2='168' y1='-2.4' y2='122.3' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23d4d7dd'/%3e%3cstop offset='.5' stop-color='%23d4d7dd'/%3e%3cstop offset='1' stop-color='%23bec1c6'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23a' id='b' x2='168' y1='-50.4' y2='74.3'/%3e%3clinearGradient id='c' x1='150' x2='234' y1='119.2' y2='264.8' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3csymbol id='e' viewBox='0 0 384 384'%3e%3ccircle cx='192' cy='192' r='84' fill='url(%23c)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='6'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M192 61.7V12m0 360v-49.7m92.2-222.5 35-35M64.8 319.2l35.1-35.1m0-184.4-35-35m254.5 254.5-35.1-35.1M61.7 192H12m360 0h-49.7'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 192 192%3b 45 192 192'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='f' overflow='visible' viewBox='0 0 264 72'%3e%3cpath fill='none' stroke='url(%23a)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M12 60h240'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='-24 0%3b 24 0%3b -24 0'/%3e%3c/path%3e%3cpath fill='none' stroke='url(%23b)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M12 12h240'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='24 0%3b -24 0%3b 24 0'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='d'%3e%3cpath fill='none' d='M0 0h512v306H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg clip-path='url(%23d)'%3e%3cuse xlink:href='%23e' width='384' height='384' transform='translate(64 100)'/%3e%3c/g%3e%3cuse xlink:href='%23f' width='264' height='72' transform='translate(124 336)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='96' x2='168' y1='-2.4' y2='122.3' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23d4d7dd'/%3e%3cstop offset='.5' stop-color='%23d4d7dd'/%3e%3cstop offset='1' stop-color='%23bec1c6'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23a' id='b' x2='168' y1='-50.4' y2='74.3'/%3e%3clinearGradient id='c' x1='54.3' x2='187.2' y1='29' y2='259.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3csymbol id='e' viewBox='0 0 270 270'%3e%3cpath fill='url(%23c)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='6' d='M252.3 168.6A133.4 133.4 0 01118 36.2 130.5 130.5 0 01122.5 3 133 133 0 003 134.6C3 207.7 63 267 137.2 267c62.5 0 114.8-42.2 129.8-99.2a135.6 135.6 0 01-14.8.8Z'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 135 135%3b 9 135 135%3b -15 135 135'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='f' overflow='visible' viewBox='0 0 264 72'%3e%3cpath fill='none' stroke='url(%23a)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M12 60h240'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='-24 0%3b 24 0%3b -24 0'/%3e%3c/path%3e%3cpath fill='none' stroke='url(%23b)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M12 12h240'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='translate' values='24 0%3b -24 0%3b 24 0'/%3e%3c/path%3e%3c/symbol%3e%3cclipPath id='d'%3e%3cpath fill='none' d='M0 0h512v306H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg clip-path='url(%23d)'%3e%3cuse xlink:href='%23e' width='270' height='270' transform='translate(121 121)'/%3e%3c/g%3e%3cuse xlink:href='%23f' width='264' height='72' transform='translate(124 336)'/%3e%3c/svg%3e"},hail:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='6.5' x2='18.5' y1='2.1' y2='22.9' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='62.5' x2='74.5' y1='2.1' y2='22.9'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='118.5' x2='130.5' y1='2.1' y2='22.9'/%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' overflow='visible' viewBox='0 0 137 25'%3e%3cpath fill='url(%23b)' stroke='%2386c3db' stroke-miterlimit='10' d='M12.5.5a12 12 0 1012 12 12 12 0 00-12-12Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.42s' dur='.58s' keyTimes='0%3b .71%3b 1' type='translate' values='0 -46%3b 0 86%3b -18 74'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.42s' dur='.58s' keyTimes='0%3b .14%3b .71%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23c)' stroke='%2386c3db' stroke-miterlimit='10' d='M68.5.5a12 12 0 1012 12 12 12 0 00-12-12Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.67s%3b x2.end%2b.42s' dur='.58s' keyTimes='0%3b .71%3b 1' type='translate' values='0 -46%3b 0 86%3b 0 74'/%3e%3canimate id='y2' attributeName='opacity' begin='.67s%3b y2.end%2b.42s' dur='.58s' keyTimes='0%3b .14%3b .71%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23d)' stroke='%2386c3db' stroke-miterlimit='10' d='M124.5.5a12 12 0 1012 12 12 12 0 00-12-12Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='.33s%3b x3.end%2b.42s' dur='.58s' keyTimes='0%3b .71%3b 1' type='translate' values='0 -46%3b 0 86%3b 18 74'/%3e%3canimate id='y3' attributeName='opacity' begin='.33s%3b y3.end%2b.42s' dur='.58s' keyTimes='0%3b .14%3b .71%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(81 145)'/%3e%3cuse xlink:href='%23f' width='137' height='25' transform='translate(187.5 349.5)'/%3e%3c/svg%3e",lightning:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='e' viewBox='0 0 196 196'%3e%3ccircle cx='98' cy='98' r='40' fill='url(%23c)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='4'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='12' d='M98 31.4V6m0 184v-25.4M145.1 51l18-17.9M33 163l18-17.9M51 51 33 33m130.1 130.1-18-18M6 98h25.4M190 98h-25.4'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 98 98%3b 45 98 98'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 363 258'%3e%3cuse xlink:href='%23e' width='196' height='196'/%3e%3cuse xlink:href='%23f' width='350' height='222' transform='translate(13 36)'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 102.7 186.8'%3e%3cpath fill='url(%23b)' stroke='%23f6a823' stroke-miterlimit='10' stroke-width='4' d='m34.8 2-32 96h32l-16 80 80-112h-48l32-64h-48z'%3e%3canimate id='x1' attributeName='opacity' begin='0s%3b x1.end%2b.67s' dur='1.33s' keyTimes='0%3b .38%3b .5%3b .63%3b .75%3b .86%3b .94%3b 1' values='1%3b 1%3b 0%3b 1%3b 0%3b 1%3b 0%3b 1'/%3e%3c/path%3e%3c/symbol%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='8.7' x2='80.9' y1='17.1' y2='142.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f7b23b'/%3e%3cstop offset='.5' stop-color='%23f7b23b'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='78' x2='118' y1='63.4' y2='132.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3c/defs%3e%3cuse xlink:href='%23d' width='363' height='258' transform='translate(68 109)'/%3e%3cuse xlink:href='%23g' width='102.7' height='186.7' transform='translate(205.23 291)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='e' viewBox='0 0 172 172'%3e%3cpath fill='url(%23c)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' d='M160.6 107.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0178 2 84.7 84.7 0 002 85.7 84.8 84.8 0 0087.4 170a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 86 86%3b 9 86 86%3b -15 86 86'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 351 246'%3e%3cuse xlink:href='%23e' width='172' height='172'/%3e%3cuse xlink:href='%23f' width='350' height='222' transform='translate(1 24)'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 102.7 186.8'%3e%3cpath fill='url(%23b)' stroke='%23f6a823' stroke-miterlimit='10' stroke-width='4' d='m34.8 2-32 96h32l-16 80 80-112h-48l32-64h-48z'%3e%3canimate id='x1' attributeName='opacity' begin='0s%3b x1.end%2b.67s' dur='1.33s' keyTimes='0%3b .38%3b .5%3b .63%3b .75%3b .86%3b .94%3b 1' values='1%3b 1%3b 0%3b 1%3b 0%3b 1%3b 0%3b 1'/%3e%3c/path%3e%3c/symbol%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='8.7' x2='80.9' y1='17.1' y2='142.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f7b23b'/%3e%3cstop offset='.5' stop-color='%23f7b23b'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='34.7' x2='119.2' y1='18.6' y2='165' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3c/defs%3e%3cuse xlink:href='%23d' width='351' height='246' transform='translate(80 121)'/%3e%3cuse xlink:href='%23g' width='102.7' height='186.7' transform='translate(205.23 291)'/%3e%3c/svg%3e"},"lightning-rainy":{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='8.7' x2='80.9' y1='17.1' y2='142.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f7b23b'/%3e%3cstop offset='.5' stop-color='%23f7b23b'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23c' id='d' x1='1436.7' x2='1454.9' y1='-1137' y2='-1089.7' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23c' id='e' x1='1492.1' x2='1510.3' y1='-1129.3' y2='-1082.1' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3clinearGradient id='f' x1='78' x2='118' y1='63.4' y2='132.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3csymbol id='h' viewBox='0 0 196 196'%3e%3ccircle cx='98' cy='98' r='40' fill='url(%23f)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='4'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='12' d='M98 31.4V6m0 184v-25.4M145.1 51l18-17.9M33 163l18-17.9M51 51 33 33m130.1 130.1-18-18M6 98h25.4M190 98h-25.4'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 98 98%3b 45 98 98'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='i' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 363 258'%3e%3cuse xlink:href='%23h' width='196' height='196'/%3e%3cuse xlink:href='%23i' width='350' height='222' transform='translate(13 36)'/%3e%3c/symbol%3e%3csymbol id='j' overflow='visible' viewBox='0 0 129 57'%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23e)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='k' viewBox='0 0 102.7 186.8'%3e%3cpath fill='url(%23b)' stroke='%23f6a823' stroke-miterlimit='10' stroke-width='4' d='m34.8 2-32 96h32l-16 80 80-112h-48l32-64h-48z'%3e%3canimate id='x1' attributeName='opacity' begin='0s%3b x1.end%2b.67s' dur='1.33s' keyTimes='0%3b .38%3b .5%3b .63%3b .75%3b .86%3b .94%3b 1' values='1%3b 1%3b 0%3b 1%3b 0%3b 1%3b 0%3b 1'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23g' width='363' height='258' transform='translate(68 109)'/%3e%3cuse xlink:href='%23j' width='129' height='57' transform='translate(191.5 343.5)'/%3e%3cuse xlink:href='%23k' width='102.7' height='186.7' transform='translate(205.23 291)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='8.7' x2='80.9' y1='17.1' y2='142.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f7b23b'/%3e%3cstop offset='.5' stop-color='%23f7b23b'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='34.7' x2='119.2' y1='18.6' y2='165' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient id='d' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23d' id='e' x1='1436.7' x2='1454.9' y1='-1137' y2='-1089.7' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23d' id='f' x1='1492.1' x2='1510.3' y1='-1129.3' y2='-1082.1' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3csymbol id='h' viewBox='0 0 172 172'%3e%3cpath fill='url(%23c)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' d='M160.6 107.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0178 2 84.7 84.7 0 002 85.7 84.8 84.8 0 0087.4 170a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='-15 86 86%3b 9 86 86%3b -15 86 86'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='i' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 351 246'%3e%3cuse xlink:href='%23h' width='172' height='172'/%3e%3cuse xlink:href='%23i' width='350' height='222' transform='translate(1 24)'/%3e%3c/symbol%3e%3csymbol id='j' overflow='visible' viewBox='0 0 129 57'%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23e)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23f)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3csymbol id='k' viewBox='0 0 102.7 186.8'%3e%3cpath fill='url(%23b)' stroke='%23f6a823' stroke-miterlimit='10' stroke-width='4' d='m34.8 2-32 96h32l-16 80 80-112h-48l32-64h-48z'%3e%3canimate id='x1' attributeName='opacity' begin='0s%3b x1.end%2b.67s' dur='1.33s' keyTimes='0%3b .38%3b .5%3b .63%3b .75%3b .86%3b .94%3b 1' values='1%3b 1%3b 0%3b 1%3b 0%3b 1%3b 0%3b 1'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23g' width='351' height='246' transform='translate(80 121)'/%3e%3cuse xlink:href='%23j' width='129' height='57' transform='translate(191.5 343.5)'/%3e%3cuse xlink:href='%23k' width='102.7' height='186.7' transform='translate(205.23 291)'/%3e%3c/svg%3e"},pouring:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1436.7' x2='1454.9' y1='-1137' y2='-1089.7' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1492.1' x2='1510.3' y1='-1129.3' y2='-1082.1' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' overflow='visible' viewBox='0 0 129 57'%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='.33s%3b x2.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y2' attributeName='opacity' begin='.33s%3b y2.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='-.33s%3b x3.end%2b.33s' dur='.67s' type='translate' values='0 -60%3b 0 60'/%3e%3canimate id='y3' attributeName='opacity' begin='-.33s%3b y3.end%2b.33s' dur='.67s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(81 145)'/%3e%3cuse xlink:href='%23f' width='129' height='57' transform='translate(191.5 343.5)'/%3e%3c/svg%3e",raindrop:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='14.8' x2='124.2' y1='42.3' y2='231.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%233392d6'/%3e%3cstop offset='.5' stop-color='%233392d6'/%3e%3cstop offset='1' stop-color='%232477b2'/%3e%3c/linearGradient%3e%3csymbol id='b' viewBox='0 0 164 245.6'%3e%3cpath fill='url(%23a)' stroke='%232885c7' stroke-miterlimit='10' stroke-width='4' d='M82 3.6c-48.7 72-80 117-80 160.7s35.8 79.3 80 79.3 80-35.5 80-79.3S130.7 75.5 82 3.6Z'%3e%3canimateTransform attributeName='transform' calcMode='spline' dur='6s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='scale' values='1 1%3b 1 .9%3b 1 1'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='164' height='245.6' transform='translate(174 132.43)'/%3e%3c/svg%3e",raindrops:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='14.8' x2='124.2' y1='42.3' y2='231.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%233392d6'/%3e%3cstop offset='.5' stop-color='%233392d6'/%3e%3cstop offset='1' stop-color='%232477b2'/%3e%3c/linearGradient%3e%3csymbol id='b' viewBox='0 0 164 245.6'%3e%3cpath fill='url(%23a)' stroke='%232885c7' stroke-miterlimit='10' stroke-width='4' d='M82 3.6c-48.7 72-80 117-80 160.7s35.8 79.3 80 79.3 80-35.5 80-79.3S130.7 75.5 82 3.6Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='164' height='245.6' transform='translate(128 133.43)'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='6s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='scale' values='1 1%3b 1 .9%3b 1 1'/%3e%3c/use%3e%3cuse xlink:href='%23b' width='164' height='245.6' transform='translate(220 133.43)'%3e%3canimateTransform additive='sum' attributeName='transform' calcMode='spline' dur='6s' keySplines='.42%2c 0%2c .58%2c 1%3b .42%2c 0%2c .58%2c 1' repeatCount='indefinite' type='scale' values='1 .9%3b 1 1%3b 1 .9'/%3e%3c/use%3e%3c/svg%3e",snowy:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='11.4' x2='32.8' y1='5.9' y2='43.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='67.4' x2='88.8' y1='5.9' y2='43.1'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='123.4' x2='144.8' y1='5.9' y2='43.1'/%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' overflow='visible' viewBox='0 0 156.2 49'%3e%3cg%3e%3cpath fill='url(%23b)' stroke='%2386c3db' stroke-miterlimit='10' d='m41.7 31-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3V4.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2L6.6 11A4 4 0 001 12.5 4 4 0 002.5 18l5.8 3.3a13.7 13.7 0 000 6.5L2.5 31A4 4 0 001 36.5a4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008.2 0v-6.6a14.2 14.2 0 005.6-3.2l6 3.3a4 4 0 002 .5 4 4 0 003.4-2 4 4 0 00-1.4-5.5ZM19 29.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 24 24%3b 360 24 24'/%3e%3canimate id='t1' attributeName='opacity' begin='0s%3b t1.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s1' additive='sum' attributeName='transform' begin='0s%3b s1.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3cg%3e%3cpath fill='url(%23c)' stroke='%2386c3db' stroke-miterlimit='10' d='m97.7 31-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3V4.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2L62.6 11a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.5L58.5 31a4 4 0 00-1.5 5.5 4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.7 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0v-6.6a14.2 14.2 0 005.7-3.2l6 3.3a4 4 0 002 .5 4 4 0 003.4-2 4 4 0 00-1.4-5.5ZM75 29.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 80 24%3b 360 80 24'/%3e%3canimate id='t2' attributeName='opacity' begin='-.83s%3b t2.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s2' additive='sum' attributeName='transform' begin='-.83s%3b s2.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3cg%3e%3cpath fill='url(%23d)' stroke='%2386c3db' stroke-miterlimit='10' d='m153.7 31-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3V4.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.5l-5.8 3.2a4 4 0 00-1.5 5.5 4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.7 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0v-6.6a14.2 14.2 0 005.7-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.3-5.5ZM131 29.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 136 24%3b 360 136 24'/%3e%3canimate id='t3' attributeName='opacity' begin='.83s%3b t3.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s3' additive='sum' attributeName='transform' begin='.83s%3b s3.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(81 145)'/%3e%3cuse xlink:href='%23f' width='156.2' height='49' transform='translate(177.9 337.5)'/%3e%3c/svg%3e","snowy-rainy":"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='1399.3' x2='1408.7' y1='-1137.3' y2='-1112.7' gradientTransform='rotate(-9 8016.182 8229.021)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1454.6' x2='1464' y1='-1128.6' y2='-1104'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1509.9' x2='1519.3' y1='-1119.8' y2='-1095.2'/%3e%3clinearGradient id='e' x1='11.4' x2='32.8' y1='5.9' y2='43.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23e' id='f' x1='67.4' x2='88.8' y1='5.9' y2='43.1'/%3e%3clinearGradient xlink:href='%23e' id='g' x1='123.4' x2='144.8' y1='5.9' y2='43.1'/%3e%3csymbol id='h' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='j' overflow='visible' viewBox='0 0 156.2 49'%3e%3cg%3e%3cpath fill='url(%23e)' stroke='%2386c3db' stroke-miterlimit='10' d='m41.7 31-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3V4.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2L6.6 11A4 4 0 001 12.5 4 4 0 002.5 18l5.8 3.3a13.7 13.7 0 000 6.5L2.5 31A4 4 0 001 36.5a4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008.2 0v-6.6a14.2 14.2 0 005.6-3.2l6 3.3a4 4 0 002 .5 4 4 0 003.4-2 4 4 0 00-1.4-5.5ZM19 29.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 24 24%3b 360 24 24'/%3e%3canimate id='t1' attributeName='opacity' begin='0s%3b t1.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s1' additive='sum' attributeName='transform' begin='0s%3b s1.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3cg%3e%3cpath fill='url(%23f)' stroke='%2386c3db' stroke-miterlimit='10' d='m97.7 31-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3V4.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2L62.6 11a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.5L58.5 31a4 4 0 00-1.5 5.5 4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.7 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0v-6.6a14.2 14.2 0 005.7-3.2l6 3.3a4 4 0 002 .5 4 4 0 003.4-2 4 4 0 00-1.4-5.5ZM75 29.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 80 24%3b 360 80 24'/%3e%3canimate id='t2' attributeName='opacity' begin='-.83s%3b t2.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s2' additive='sum' attributeName='transform' begin='-.83s%3b s2.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3cg%3e%3cpath fill='url(%23g)' stroke='%2386c3db' stroke-miterlimit='10' d='m153.7 31-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3V4.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.5l-5.8 3.2a4 4 0 00-1.5 5.5 4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.7 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0v-6.6a14.2 14.2 0 005.7-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.3-5.5ZM131 29.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z' opacity='0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='0 136 24%3b 360 136 24'/%3e%3canimate id='t3' attributeName='opacity' begin='.83s%3b t3.end%2b1s' dur='2s' keyTimes='0%3b .17%3b .83%3b 1' values='0%3b 1%3b 1%3b 0'/%3e%3c/path%3e%3canimateTransform id='s3' additive='sum' attributeName='transform' begin='.83s%3b s3.end%2b1s' dur='2s' type='translate' values='0 -36%3b 0 92%3b'/%3e%3c/g%3e%3c/symbol%3e%3csymbol id='i' overflow='visible' viewBox='0 0 156.2 49'%3e%3cuse xlink:href='%23j' width='156.2' height='49'/%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M22.1 38.5a8 8 0 01-8-8v-12a8 8 0 0116 0v12a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x1' additive='sum' attributeName='transform' begin='0s%3b x1.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' type='translate' values='0 -32%3b 0 -32%3b 0 120%3b'/%3e%3canimate id='y1' attributeName='opacity' begin='0s%3b y1.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M78.1 38.5a8 8 0 01-8-8v-12a8 8 0 0116 0v12a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x2' additive='sum' attributeName='transform' begin='1.34s%3b x2.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' type='translate' values='0 -32%3b 0 -32%3b 0 120%3b'/%3e%3canimate id='y2' attributeName='opacity' begin='1.34s%3b y2.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M134.1 38.5a8 8 0 01-8-8v-12a8 8 0 0116 0v12a8 8 0 01-8 8Z' opacity='0'%3e%3canimateTransform id='x3' additive='sum' attributeName='transform' begin='.67s%3b x3.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' type='translate' values='0 -32%3b 0 -32%3b 0 120%3b'/%3e%3canimate id='y3' attributeName='opacity' begin='.67s%3b y3.end%2b1s' dur='1s' keyTimes='0%3b .25%3b 1' values='0%3b 1%3b 0'/%3e%3c/path%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23h' width='350' height='222' transform='translate(81 145)'/%3e%3cuse xlink:href='%23i' width='156.2' height='49' transform='translate(177.9 337.5)'/%3e%3c/svg%3e",sunny:{day:zr,night:Dr},windy:Fr,"windy-exceptional":Fr,exceptional:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='175.8' x2='336.2' y1='117' y2='395' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23d4d7dd'/%3e%3cstop offset='.5' stop-color='%23d4d7dd'/%3e%3cstop offset='1' stop-color='%23bec1c6'/%3e%3c/linearGradient%3e%3c/defs%3e%3cpath fill='none' stroke='url(%23a)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M344 256a88 88 0 11-88-88 88 88 0 0188 88ZM200 116.9l-3.8 7.7A269.7 269.7 0 00169 267h0m143.1 128 3.8-7.7A269.7 269.7 0 00343.2 245h0'%3e%3canimateTransform additive='sum' attributeName='transform' dur='6s' repeatCount='indefinite' type='rotate' values='1440 256 256%3b 0 256 256'/%3e%3c/path%3e%3c/svg%3e"}},Qr={line:{rainy:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='f' viewBox='0 0 193 193'%3e%3ccircle cx='96.5' cy='96.5' r='40' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='9'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='9' d='M96.5 29.9V4.5m0 184v-25.4m47.1-113.7 18-18M31.4 161.6l18-18m0-94.2-18-18m130.2 130.2-18-18M4.5 96.5h25.4m158.6 0h-25.4'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23f' width='193' height='193' transform='translate(69.5 110.5)'/%3e%3c/g%3e%3cuse xlink:href='%23g' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='h' viewBox='0 0 129 110'%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3clinearGradient id='b' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23e' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23h' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='f' viewBox='0 0 178 178'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='10' d='M163.6 110.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0181 5 84.7 84.7 0 005 88.7 84.8 84.8 0 0090.4 173a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23f' width='178' height='178' transform='translate(77 118)'/%3e%3c/g%3e%3cuse xlink:href='%23g' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='h' viewBox='0 0 129 110'%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3clinearGradient id='b' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23e' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23h' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3c/svg%3e"},partlycloudy:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 193 193'%3e%3ccircle cx='96.5' cy='96.5' r='40' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='9'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='9' d='M96.5 29.9V4.5m0 184v-25.4m47.1-113.7 18-18M31.4 161.6l18-18m0-94.2-18-18m130.2 130.2-18-18M4.5 96.5h25.4m158.6 0h-25.4'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='193' height='193' transform='translate(69.5 110.5)'/%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 178 178'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='10' d='M163.6 110.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0181 5 84.7 84.7 0 005 88.7 84.8 84.8 0 0090.4 173a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='178' height='178' transform='translate(77 118)'/%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3c/svg%3e"},cloudy:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/svg%3e","clear-night":{day:qr,night:Hr},fog:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='b' viewBox='0 0 375 375'%3e%3ccircle cx='187.5' cy='187.5' r='84' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='15'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='15' d='M187.5 57.2V7.5m0 360v-49.7m92.2-222.5 35-35M60.3 314.7l35.1-35.1m0-184.4-35-35m254.5 254.5-35.1-35.1M57.2 187.5H7.5m360 0h-49.7'/%3e%3c/symbol%3e%3csymbol id='c' viewBox='0 0 258 66'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-miterlimit='10' stroke-width='18' d='M9 57h240M9 9h240'/%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M0 0h512v306H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23b' width='375' height='375' transform='translate(68.5 104.5)'/%3e%3c/g%3e%3cuse xlink:href='%23c' width='258' height='66' transform='translate(127 339)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='b' viewBox='0 0 279 279'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M256.8 173.1A133.3 133.3 0 01122.4 40.7 130.5 130.5 0 01127 7.5 133 133 0 007.5 139.1c0 73.1 60 132.4 134.2 132.4 62.5 0 114.8-42.2 129.8-99.2a135.6 135.6 0 01-14.8.8Z'/%3e%3c/symbol%3e%3csymbol id='c' viewBox='0 0 258 66'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-miterlimit='10' stroke-width='18' d='M9 57h240M9 9h240'/%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M0 0h512v306H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23b' width='279' height='279' transform='translate(116.5 116.5)'/%3e%3c/g%3e%3cuse xlink:href='%23c' width='258' height='66' transform='translate(127 339)'/%3e%3c/svg%3e"},hail:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 136 114'%3e%3cpath fill='%2386c3db' d='M12 0a12 12 0 1012 12A12 12 0 0012 0Zm56 90a12 12 0 1012 12 12 12 0 00-12-12Zm56-60a12 12 0 1012 12 12 12 0 00-12-12Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3cuse xlink:href='%23b' width='136' height='114' transform='translate(188 350)'/%3e%3c/svg%3e",lightning:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 193 193'%3e%3ccircle cx='96.5' cy='96.5' r='40' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='9'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='9' d='M96.5 29.9V4.5m0 184v-25.4m47.1-113.7 18-18M31.4 161.6l18-18m0-94.2-18-18m130.2 130.2-18-18M4.5 96.5h25.4m158.6 0h-25.4'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='193' height='193' transform='translate(69.5 110.5)'/%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 96 176'%3e%3cpath fill='%23f6a823' d='M32 0 0 96h32l-16 80L96 64H48L80 0H32z'/%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23e' width='96' height='176' transform='translate(208 293)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='c' viewBox='0 0 178 178'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='10' d='M163.6 110.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0181 5 84.7 84.7 0 005 88.7 84.8 84.8 0 0090.4 173a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23c' width='178' height='178' transform='translate(77 118)'/%3e%3c/g%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 96 176'%3e%3cpath fill='%23f6a823' d='M32 0 0 96h32l-16 80L96 64H48L80 0H32z'/%3e%3c/symbol%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23b' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23e' width='96' height='176' transform='translate(208 293)'/%3e%3c/svg%3e"},"lightning-rainy":{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='f' viewBox='0 0 193 193'%3e%3ccircle cx='96.5' cy='96.5' r='40' fill='none' stroke='%23fbbf24' stroke-miterlimit='10' stroke-width='9'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='9' d='M96.5 29.9V4.5m0 184v-25.4m47.1-113.7 18-18M31.4 161.6l18-18m0-94.2-18-18m130.2 130.2-18-18M4.5 96.5h25.4m158.6 0h-25.4'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23f' width='193' height='193' transform='translate(69.5 110.5)'/%3e%3c/g%3e%3cuse xlink:href='%23g' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='h' viewBox='0 0 129 110'%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3csymbol id='i' viewBox='0 0 96 176'%3e%3cpath fill='%23f6a823' d='M32 0 0 96h32l-16 80L96 64H48L80 0H32z'/%3e%3c/symbol%3e%3clinearGradient id='b' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23e' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23h' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3cuse xlink:href='%23i' width='96' height='176' transform='translate(208 293)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='f' viewBox='0 0 178 178'%3e%3cpath fill='none' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='10' d='M163.6 110.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0181 5 84.7 84.7 0 005 88.7 84.8 84.8 0 0090.4 173a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 435.5 371.5'%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23f' width='178' height='178' transform='translate(77 118)'/%3e%3c/g%3e%3cuse xlink:href='%23g' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3c/symbol%3e%3csymbol id='h' viewBox='0 0 129 110'%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3csymbol id='i' viewBox='0 0 96 176'%3e%3cpath fill='%23f6a823' d='M32 0 0 96h32l-16 80L96 64H48L80 0H32z'/%3e%3c/symbol%3e%3clinearGradient id='b' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M288 148a83.8 83.8 0 00-71.4 40 56 56 0 00-84.6 48 56.6 56.6 0 00.8 9A60 60 0 0084 304H0V0h288Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cuse xlink:href='%23e' width='435.5' height='371.5'/%3e%3cuse xlink:href='%23h' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3cuse xlink:href='%23i' width='96' height='176' transform='translate(208 293)'/%3e%3c/svg%3e"},pouring:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23a' id='b' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23a' id='c' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3csymbol id='d' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 129 110'%3e%3cpath fill='url(%23a)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23d' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3cuse xlink:href='%23e' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3c/svg%3e",raindrop:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 175 260.9'%3e%3cpath fill='none' stroke='%232885c7' stroke-miterlimit='10' stroke-width='15' d='M87.5 13.4c-48.7 72-80 117-80 160.7s35.8 79.3 80 79.3 80-35.5 80-79.3-31.3-88.8-80-160.7Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='175' height='260.9' transform='translate(168.5 122.62)'/%3e%3c/svg%3e",raindrops:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3cclipPath id='a'%3e%3cpath fill='none' d='M302 137c-48.7 72-80 117-80 160.8s35.8 79.2 80 79.2v135H0V0h302Z'/%3e%3c/clipPath%3e%3csymbol id='b' viewBox='0 0 175 260.9'%3e%3cpath fill='none' stroke='%232885c7' stroke-miterlimit='10' stroke-width='15' d='M87.5 13.4c-48.7 72-80 117-80 160.7s35.8 79.3 80 79.3 80-35.5 80-79.3-31.3-88.8-80-160.7Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='175' height='260.9' transform='translate(214.5 123.62)'/%3e%3cg clip-path='url(%23a)'%3e%3cuse xlink:href='%23b' width='175' height='260.9' transform='translate(122.5 123.62)'/%3e%3c/g%3e%3c/svg%3e",snowy:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 155.2 138'%3e%3cpath fill='%2386c3db' d='m41.2 30.5-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V4a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3A4 4 0 00.5 12 4 4 0 002 17.5l5.8 3.3a13.7 13.7 0 000 6.4L2 30.5A4 4 0 00.5 36a4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V44a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8A6 6 0 0127 27a6.1 6.1 0 01-8.3 2.2Zm78.6 91.3-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V94a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.4l-5.8 3.3a4 4 0 00-1.5 5.5 4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Zm78.6-48.7-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V44a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.4l-5.8 3.3a4 4 0 00-1.5 5.5 4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V84a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3cuse xlink:href='%23b' width='155.2' height='138' transform='translate(178.4 338)'/%3e%3c/svg%3e","snowy-rainy":"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='a' viewBox='0 0 359 231'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-linejoin='round' stroke-width='15' d='M295.5 223.5a56 56 0 000-112l-2.5.1a83.9 83.9 0 00-153-64.2 56 56 0 00-84.6 48.1 56.6 56.6 0 00.8 9 60 60 0 0011.2 119'/%3e%3c/symbol%3e%3csymbol id='c' viewBox='0 0 155.2 138'%3e%3cpath fill='%2386c3db' d='m41.2 30.5-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V4a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3A4 4 0 00.5 12 4 4 0 002 17.5l5.8 3.3a13.7 13.7 0 000 6.4L2 30.5A4 4 0 00.5 36a4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V44a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8A6 6 0 0127 27a6.1 6.1 0 01-8.3 2.2Zm78.6 91.3-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V94a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.4l-5.8 3.3a4 4 0 00-1.5 5.5 4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Zm78.6-48.7-5.8-3.3a13.7 13.7 0 000-6.4l5.8-3.3a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.2V44a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.4l-5.8 3.3a4 4 0 00-1.5 5.5 4 4 0 003.6 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2V84a4 4 0 008 0v-6.6a14.2 14.2 0 005.8-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.4-5.5Zm-22.6-1.3a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z'/%3e%3c/symbol%3e%3csymbol id='b' viewBox='0 0 155.2 138'%3e%3cuse xlink:href='%23c' width='155.2' height='138'/%3e%3cpath fill='%230a5ad4' d='M21.6 98a8 8 0 01-8-8V78a8 8 0 0116 0v12a8 8 0 01-8 8Zm56-50a8 8 0 01-8-8V28a8 8 0 0116 0v12a8 8 0 01-8 8Zm56 90a8 8 0 01-8-8v-12a8 8 0 0116 0v12a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23a' width='359' height='231' transform='translate(76.5 140.5)'/%3e%3cuse xlink:href='%23b' width='155.2' height='138' transform='translate(178.4 338)'/%3e%3c/svg%3e",sunny:{day:qr,night:Hr},windy:Yr,"windy-exceptional":Yr,exceptional:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3e%3cpath fill='none' stroke='%23e2e8f0' stroke-linecap='round' stroke-miterlimit='10' stroke-width='18' d='M344 256a88 88 0 11-88-88 88 88 0 0188 88ZM200 116.9l-3.8 7.7A269.7 269.7 0 00169 267h0m143.1 128 3.8-7.7A269.7 269.7 0 00343.2 245h0'/%3e%3c/svg%3e"},fill:{rainy:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3clinearGradient id='e' x1='78' x2='118' y1='63.4' y2='132.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3csymbol id='g' viewBox='0 0 196 196'%3e%3ccircle cx='98' cy='98' r='40' fill='url(%23e)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='4'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='12' d='M98 31.4V6m0 184v-25.4M145.1 51l18-17.9M33 163l18-17.9M51 51 33 33m130.1 130.1-18-18M6 98h25.4M190 98h-25.4'/%3e%3c/symbol%3e%3csymbol id='h' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 363 258'%3e%3cuse xlink:href='%23g' width='196' height='196'/%3e%3cuse xlink:href='%23h' width='350' height='222' transform='translate(13 36)'/%3e%3c/symbol%3e%3csymbol id='i' viewBox='0 0 129 110'%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23f' width='363' height='258' transform='translate(68 109)'/%3e%3cuse xlink:href='%23i' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='34.7' x2='119.2' y1='18.6' y2='165' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23c' id='d' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23c' id='e' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3csymbol id='g' viewBox='0 0 172 172'%3e%3cpath fill='url(%23b)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' d='M160.6 107.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0178 2 84.7 84.7 0 002 85.7 84.8 84.8 0 0087.4 170a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='h' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 351 246'%3e%3cuse xlink:href='%23g' width='172' height='172'/%3e%3cuse xlink:href='%23h' width='350' height='222' transform='translate(1 24)'/%3e%3c/symbol%3e%3csymbol id='i' viewBox='0 0 129 110'%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23e)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23f' width='351' height='246' transform='translate(80 121)'/%3e%3cuse xlink:href='%23i' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3c/svg%3e"},partlycloudy:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='d' viewBox='0 0 196 196'%3e%3ccircle cx='98' cy='98' r='40' fill='url(%23b)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='4'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='12' d='M98 31.4V6m0 184v-25.4M145.1 51l18-17.9M33 163l18-17.9M51 51 33 33m130.1 130.1-18-18M6 98h25.4M190 98h-25.4'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='c' viewBox='0 0 363 258'%3e%3cuse xlink:href='%23d' width='196' height='196'/%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(13 36)'/%3e%3c/symbol%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='78' x2='118' y1='63.4' y2='132.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3c/defs%3e%3cuse xlink:href='%23c' width='363' height='258' transform='translate(68 109)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='d' viewBox='0 0 172 172'%3e%3cpath fill='url(%23b)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' d='M160.6 107.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0178 2 84.7 84.7 0 002 85.7 84.8 84.8 0 0087.4 170a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='c' viewBox='0 0 351 246'%3e%3cuse xlink:href='%23d' width='172' height='172'/%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(1 24)'/%3e%3c/symbol%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='34.7' x2='119.2' y1='18.6' y2='165' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3c/defs%3e%3cuse xlink:href='%23c' width='351' height='246' transform='translate(80 121)'/%3e%3c/svg%3e"},cloudy:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3csymbol id='b' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='350' height='222' transform='translate(81 145)'/%3e%3c/svg%3e","clear-night":{day:Wr,night:Pr},fog:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='96' x2='168' y1='-2.4' y2='122.3' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23d4d7dd'/%3e%3cstop offset='.5' stop-color='%23d4d7dd'/%3e%3cstop offset='1' stop-color='%23bec1c6'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23a' id='b' x2='168' y1='-50.4' y2='74.3'/%3e%3clinearGradient id='c' x1='150' x2='234' y1='119.2' y2='264.8' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3csymbol id='e' viewBox='0 0 384 384'%3e%3ccircle cx='192' cy='192' r='84' fill='url(%23c)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='6'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M192 61.7V12m0 360v-49.7m92.2-222.5 35-35M64.8 319.2l35.1-35.1m0-184.4-35-35m254.5 254.5-35.1-35.1M61.7 192H12m360 0h-49.7'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 264 72'%3e%3cpath fill='none' stroke='url(%23a)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M12 60h240'/%3e%3cpath fill='none' stroke='url(%23b)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M12 12h240'/%3e%3c/symbol%3e%3cclipPath id='d'%3e%3cpath fill='none' d='M0 0h512v306H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg clip-path='url(%23d)'%3e%3cuse xlink:href='%23e' width='384' height='384' transform='translate(64 100)'/%3e%3c/g%3e%3cuse xlink:href='%23f' width='264' height='72' transform='translate(124 336)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='96' x2='168' y1='-2.4' y2='122.3' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23d4d7dd'/%3e%3cstop offset='.5' stop-color='%23d4d7dd'/%3e%3cstop offset='1' stop-color='%23bec1c6'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23a' id='b' x2='168' y1='-50.4' y2='74.3'/%3e%3clinearGradient id='c' x1='54.3' x2='187.2' y1='29' y2='259.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3csymbol id='e' viewBox='0 0 270 270'%3e%3cpath fill='url(%23c)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='6' d='M252.3 168.6A133.4 133.4 0 01118 36.2 130.5 130.5 0 01122.5 3 133 133 0 003 134.6C3 207.7 63 267 137.2 267c62.5 0 114.8-42.2 129.8-99.2a135.6 135.6 0 01-14.8.8Z'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 264 72'%3e%3cpath fill='none' stroke='url(%23a)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M12 60h240'/%3e%3cpath fill='none' stroke='url(%23b)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M12 12h240'/%3e%3c/symbol%3e%3cclipPath id='d'%3e%3cpath fill='none' d='M0 0h512v306H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg clip-path='url(%23d)'%3e%3cuse xlink:href='%23e' width='270' height='270' transform='translate(121 121)'/%3e%3c/g%3e%3cuse xlink:href='%23f' width='264' height='72' transform='translate(124 336)'/%3e%3c/svg%3e"},hail:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='6.5' x2='18.5' y1='2.1' y2='22.9' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='62.5' x2='74.5' y1='92.1' y2='112.9'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='118.5' x2='130.5' y1='32.1' y2='52.9'/%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 137 115'%3e%3cpath fill='url(%23b)' stroke='%2386c3db' stroke-miterlimit='10' d='M12.5.5a12 12 0 1012 12 12 12 0 00-12-12Z'/%3e%3cpath fill='url(%23c)' stroke='%2386c3db' stroke-miterlimit='10' d='M68.5 90.5a12 12 0 1012 12 12 12 0 00-12-12Z'/%3e%3cpath fill='url(%23d)' stroke='%2386c3db' stroke-miterlimit='10' d='M124.5 30.5a12 12 0 1012 12 12 12 0 00-12-12Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(81 145)'/%3e%3cuse xlink:href='%23f' width='137' height='115' transform='translate(187.5 349.5)'/%3e%3c/svg%3e",lightning:{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='e' viewBox='0 0 196 196'%3e%3ccircle cx='98' cy='98' r='40' fill='url(%23c)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='4'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='12' d='M98 31.4V6m0 184v-25.4M145.1 51l18-17.9M33 163l18-17.9M51 51 33 33m130.1 130.1-18-18M6 98h25.4M190 98h-25.4'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 363 258'%3e%3cuse xlink:href='%23e' width='196' height='196'/%3e%3cuse xlink:href='%23f' width='350' height='222' transform='translate(13 36)'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 102.7 186.8'%3e%3cpath fill='url(%23b)' stroke='%23f6a823' stroke-miterlimit='10' stroke-width='4' d='m34.8 2-32 96h32l-16 80 80-112h-48l32-64h-48z'/%3e%3c/symbol%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='8.7' x2='80.9' y1='17.1' y2='142.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f7b23b'/%3e%3cstop offset='.5' stop-color='%23f7b23b'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='78' x2='118' y1='63.4' y2='132.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3c/defs%3e%3cuse xlink:href='%23d' width='363' height='258' transform='translate(68 109)'/%3e%3cuse xlink:href='%23g' width='102.7' height='186.7' transform='translate(205.23 291)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3csymbol id='e' viewBox='0 0 172 172'%3e%3cpath fill='url(%23c)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' d='M160.6 107.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0178 2 84.7 84.7 0 002 85.7 84.8 84.8 0 0087.4 170a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='d' viewBox='0 0 351 246'%3e%3cuse xlink:href='%23e' width='172' height='172'/%3e%3cuse xlink:href='%23f' width='350' height='222' transform='translate(1 24)'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 102.7 186.8'%3e%3cpath fill='url(%23b)' stroke='%23f6a823' stroke-miterlimit='10' stroke-width='4' d='m34.8 2-32 96h32l-16 80 80-112h-48l32-64h-48z'/%3e%3c/symbol%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='8.7' x2='80.9' y1='17.1' y2='142.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f7b23b'/%3e%3cstop offset='.5' stop-color='%23f7b23b'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='34.7' x2='119.2' y1='18.6' y2='165' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3c/defs%3e%3cuse xlink:href='%23d' width='351' height='246' transform='translate(80 121)'/%3e%3cuse xlink:href='%23g' width='102.7' height='186.7' transform='translate(205.23 291)'/%3e%3c/svg%3e"},"lightning-rainy":{day:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='8.7' x2='80.9' y1='17.1' y2='142.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f7b23b'/%3e%3cstop offset='.5' stop-color='%23f7b23b'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23c' id='d' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23c' id='e' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3clinearGradient id='f' x1='78' x2='118' y1='63.4' y2='132.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23fbbf24'/%3e%3cstop offset='.5' stop-color='%23fbbf24'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3csymbol id='h' viewBox='0 0 196 196'%3e%3ccircle cx='98' cy='98' r='40' fill='url(%23f)' stroke='%23f8af18' stroke-miterlimit='10' stroke-width='4'/%3e%3cpath fill='none' stroke='%23fbbf24' stroke-linecap='round' stroke-miterlimit='10' stroke-width='12' d='M98 31.4V6m0 184v-25.4M145.1 51l18-17.9M33 163l18-17.9M51 51 33 33m130.1 130.1-18-18M6 98h25.4M190 98h-25.4'/%3e%3c/symbol%3e%3csymbol id='i' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 363 258'%3e%3cuse xlink:href='%23h' width='196' height='196'/%3e%3cuse xlink:href='%23i' width='350' height='222' transform='translate(13 36)'/%3e%3c/symbol%3e%3csymbol id='j' viewBox='0 0 129 110'%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23e)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3csymbol id='k' viewBox='0 0 102.7 186.8'%3e%3cpath fill='url(%23b)' stroke='%23f6a823' stroke-miterlimit='10' stroke-width='4' d='m34.8 2-32 96h32l-16 80 80-112h-48l32-64h-48z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23g' width='363' height='258' transform='translate(68 109)'/%3e%3cuse xlink:href='%23j' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3cuse xlink:href='%23k' width='102.7' height='186.7' transform='translate(205.23 291)'/%3e%3c/svg%3e",night:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='8.7' x2='80.9' y1='17.1' y2='142.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f7b23b'/%3e%3cstop offset='.5' stop-color='%23f7b23b'/%3e%3cstop offset='1' stop-color='%23f59e0b'/%3e%3c/linearGradient%3e%3clinearGradient id='c' x1='34.7' x2='119.2' y1='18.6' y2='165' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient id='d' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23d' id='e' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23d' id='f' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3csymbol id='h' viewBox='0 0 172 172'%3e%3cpath fill='url(%23c)' stroke='%2372b9d5' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' d='M160.6 107.4a84.8 84.8 0 01-85.4-84.3A83.3 83.3 0 0178 2 84.7 84.7 0 002 85.7 84.8 84.8 0 0087.4 170a85.2 85.2 0 0082.6-63.1 88 88 0 01-9.4.5Z'/%3e%3c/symbol%3e%3csymbol id='i' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='g' viewBox='0 0 351 246'%3e%3cuse xlink:href='%23h' width='172' height='172'/%3e%3cuse xlink:href='%23i' width='350' height='222' transform='translate(1 24)'/%3e%3c/symbol%3e%3csymbol id='j' viewBox='0 0 129 110'%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23e)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23f)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3csymbol id='k' viewBox='0 0 102.7 186.8'%3e%3cpath fill='url(%23b)' stroke='%23f6a823' stroke-miterlimit='10' stroke-width='4' d='m34.8 2-32 96h32l-16 80 80-112h-48l32-64h-48z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23g' width='351' height='246' transform='translate(80 121)'/%3e%3cuse xlink:href='%23j' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3cuse xlink:href='%23k' width='102.7' height='186.7' transform='translate(205.23 291)'/%3e%3c/svg%3e"},pouring:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='1381.3' x2='1399.5' y1='-1144.7' y2='-1097.4' gradientTransform='rotate(-9 8002.567 8233.063)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1428.4' x2='1446.6' y1='-1084.7' y2='-1037.4' gradientTransform='rotate(-9 8009.537 8233.037)'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1489.3' x2='1507.5' y1='-1111.6' y2='-1064.3' gradientTransform='rotate(-9 8016.566 8233.078)'/%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 129 110'%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M8.5 56.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M64.5 109.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M120.5 74.5a8 8 0 01-8-8v-40a8 8 0 0116 0v40a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(81 145)'/%3e%3cuse xlink:href='%23f' width='129' height='110' transform='translate(191.5 343.5)'/%3e%3c/svg%3e",raindrop:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='14.8' x2='124.2' y1='42.3' y2='231.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%233392d6'/%3e%3cstop offset='.5' stop-color='%233392d6'/%3e%3cstop offset='1' stop-color='%232477b2'/%3e%3c/linearGradient%3e%3csymbol id='b' viewBox='0 0 164 245.6'%3e%3cpath fill='url(%23a)' stroke='%232885c7' stroke-miterlimit='10' stroke-width='4' d='M82 3.6c-48.7 72-80 117-80 160.7s35.8 79.3 80 79.3 80-35.5 80-79.3S130.7 75.5 82 3.6Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='164' height='245.6' transform='translate(174 132.43)'/%3e%3c/svg%3e",raindrops:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='14.8' x2='124.2' y1='42.3' y2='231.7' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%233392d6'/%3e%3cstop offset='.5' stop-color='%233392d6'/%3e%3cstop offset='1' stop-color='%232477b2'/%3e%3c/linearGradient%3e%3csymbol id='b' viewBox='0 0 164 245.6'%3e%3cpath fill='url(%23a)' stroke='%232885c7' stroke-miterlimit='10' stroke-width='4' d='M82 3.6c-48.7 72-80 117-80 160.7s35.8 79.3 80 79.3 80-35.5 80-79.3S130.7 75.5 82 3.6Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23b' width='164' height='245.6' transform='translate(128 133.43)'/%3e%3cuse xlink:href='%23b' width='164' height='245.6' transform='translate(220 133.43)'/%3e%3c/svg%3e",snowy:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='11.4' x2='32.8' y1='5.9' y2='43.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='67.4' x2='88.8' y1='95.9' y2='133.1'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='123.4' x2='144.8' y1='45.9' y2='83.1'/%3e%3csymbol id='e' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='f' viewBox='0 0 156.2 139'%3e%3cpath fill='url(%23b)' stroke='%2386c3db' stroke-miterlimit='10' d='m41.7 31-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3V4.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2L6.6 11A4 4 0 001 12.5 4 4 0 002.5 18l5.8 3.3a13.7 13.7 0 000 6.5L2.5 31A4 4 0 001 36.5a4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008.2 0v-6.6a14.2 14.2 0 005.6-3.2l6 3.3a4 4 0 002 .5 4 4 0 003.4-2 4 4 0 00-1.4-5.5ZM19 29.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z'/%3e%3cpath fill='url(%23c)' stroke='%2386c3db' stroke-miterlimit='10' d='m97.7 121-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3v-6.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.5l-5.8 3.2a4 4 0 00-1.5 5.5 4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.7 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0V128a14.2 14.2 0 005.7-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.3-5.5ZM75 119.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z'/%3e%3cpath fill='url(%23d)' stroke='%2386c3db' stroke-miterlimit='10' d='m153.7 71-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3v-6.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.5l-5.8 3.2a4 4 0 00-1.5 5.5 4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.7 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0v-6.6a14.2 14.2 0 005.7-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.3-5.5ZM131 69.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23e' width='350' height='222' transform='translate(81 145)'/%3e%3cuse xlink:href='%23f' width='156.2' height='139' transform='translate(177.9 337.5)'/%3e%3c/svg%3e","snowy-rainy":"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='99.5' x2='232.6' y1='30.7' y2='261.4' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23f3f7fe'/%3e%3cstop offset='.5' stop-color='%23f3f7fe'/%3e%3cstop offset='1' stop-color='%23deeafb'/%3e%3c/linearGradient%3e%3clinearGradient id='b' x1='1389.9' x2='1399.3' y1='-1078.1' y2='-1053.5' gradientTransform='rotate(-9 8016.182 8229.021)' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%230b65ed'/%3e%3cstop offset='.5' stop-color='%230a5ad4'/%3e%3cstop offset='1' stop-color='%230950bc'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23b' id='c' x1='1453' x2='1462.5' y1='-1118.7' y2='-1094.1'/%3e%3clinearGradient xlink:href='%23b' id='d' x1='1494.2' x2='1503.7' y1='-1021.1' y2='-996.4'/%3e%3clinearGradient id='e' x1='11.4' x2='32.8' y1='5.9' y2='43.1' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%2386c3db'/%3e%3cstop offset='.5' stop-color='%2386c3db'/%3e%3cstop offset='1' stop-color='%235eafcf'/%3e%3c/linearGradient%3e%3clinearGradient xlink:href='%23e' id='f' x1='67.4' x2='88.8' y1='95.9' y2='133.1'/%3e%3clinearGradient xlink:href='%23e' id='g' x1='123.4' x2='144.8' y1='45.9' y2='83.1'/%3e%3csymbol id='h' viewBox='0 0 350 222'%3e%3cpath fill='url(%23a)' stroke='%23e6effc' stroke-miterlimit='10' stroke-width='6' d='m291 107-2.5.1A83.9 83.9 0 00135.6 43 56 56 0 0051 91a56.6 56.6 0 00.8 9A60 60 0 0063 219l4-.2v.2h224a56 56 0 000-112Z'/%3e%3c/symbol%3e%3csymbol id='j' viewBox='0 0 156.2 139'%3e%3cpath fill='url(%23e)' stroke='%2386c3db' stroke-miterlimit='10' d='m41.7 31-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3V4.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2L6.6 11A4 4 0 001 12.5 4 4 0 002.5 18l5.8 3.3a13.7 13.7 0 000 6.5L2.5 31A4 4 0 001 36.5a4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.6 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008.2 0v-6.6a14.2 14.2 0 005.6-3.2l6 3.3a4 4 0 002 .5 4 4 0 003.4-2 4 4 0 00-1.4-5.5ZM19 29.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z'/%3e%3cpath fill='url(%23f)' stroke='%2386c3db' stroke-miterlimit='10' d='m97.7 121-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3v-6.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.5l-5.8 3.2a4 4 0 00-1.5 5.5 4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.7 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0V128a14.2 14.2 0 005.7-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.3-5.5ZM75 119.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z'/%3e%3cpath fill='url(%23g)' stroke='%2386c3db' stroke-miterlimit='10' d='m153.7 71-5.8-3.3a13.7 13.7 0 000-6.5l5.8-3.2a4 4 0 001.5-5.5 4 4 0 00-5.6-1.5l-5.8 3.3a13.6 13.6 0 00-2.6-2 13.8 13.8 0 00-3-1.3v-6.5a4 4 0 00-8.1 0v6.6a14.3 14.3 0 00-5.7 3.2l-5.8-3.3a4 4 0 00-5.6 1.5 4 4 0 001.5 5.5l5.8 3.3a13.7 13.7 0 000 6.5l-5.8 3.2a4 4 0 00-1.5 5.5 4 4 0 003.5 2 4 4 0 002-.5l5.8-3.3a13.6 13.6 0 002.7 2 13.8 13.8 0 003 1.2v6.6a4 4 0 008 0v-6.6a14.2 14.2 0 005.7-3.2l5.8 3.3a4 4 0 002 .5 4 4 0 003.5-2 4 4 0 00-1.3-5.5ZM131 69.7a6 6 0 01-2.3-8.2 6.1 6.1 0 015.3-3 6.2 6.2 0 013 .8 6 6 0 012.2 8.2 6.1 6.1 0 01-8.2 2.2Z'/%3e%3c/symbol%3e%3csymbol id='i' viewBox='0 0 156.2 139'%3e%3cuse xlink:href='%23j' width='156.2' height='139'/%3e%3cpath fill='url(%23b)' stroke='%230a5ad4' stroke-miterlimit='10' d='M22.1 98.5a8 8 0 01-8-8v-12a8 8 0 0116 0v12a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23c)' stroke='%230a5ad4' stroke-miterlimit='10' d='M78.1 48.5a8 8 0 01-8-8v-12a8 8 0 0116 0v12a8 8 0 01-8 8Z'/%3e%3cpath fill='url(%23d)' stroke='%230a5ad4' stroke-miterlimit='10' d='M134.1 138.5a8 8 0 01-8-8v-12a8 8 0 0116 0v12a8 8 0 01-8 8Z'/%3e%3c/symbol%3e%3c/defs%3e%3cuse xlink:href='%23h' width='350' height='222' transform='translate(81 145)'/%3e%3cuse xlink:href='%23i' width='156.2' height='139' transform='translate(177.9 337.5)'/%3e%3c/svg%3e",sunny:{day:Wr,night:Pr},windy:Rr,"windy-exceptional":Rr,exceptional:"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3e%3cdefs%3e%3clinearGradient id='a' x1='175.8' x2='336.2' y1='117' y2='395' gradientUnits='userSpaceOnUse'%3e%3cstop offset='0' stop-color='%23d4d7dd'/%3e%3cstop offset='.5' stop-color='%23d4d7dd'/%3e%3cstop offset='1' stop-color='%23bec1c6'/%3e%3c/linearGradient%3e%3c/defs%3e%3cpath fill='none' stroke='url(%23a)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='24' d='M344 256a88 88 0 11-88-88 88 88 0 0188 88ZM200 116.9l-3.8 7.7A269.7 269.7 0 00169 267h0m143.1 128 3.8-7.7A269.7 269.7 0 00343.2 245h0'/%3e%3c/svg%3e"}};function Kr(e){try{return e()}catch(e){return console.error("clock-weather-card - Error while rendering clock-weather-card component:",e),D``}}class Xr extends Error{}class es extends Xr{constructor(e){super(`Invalid DateTime: ${e.toMessage()}`)}}class ts extends Xr{constructor(e){super(`Invalid Interval: ${e.toMessage()}`)}}class is extends Xr{constructor(e){super(`Invalid Duration: ${e.toMessage()}`)}}class rs extends Xr{}class ss extends Xr{constructor(e){super(`Invalid unit ${e}`)}}class as extends Xr{}class ns extends Xr{constructor(){super("Zone is an abstract class")}}const os="numeric",ls="short",cs="long",ds={year:os,month:os,day:os},us={year:os,month:ls,day:os},hs={year:os,month:ls,day:os,weekday:ls},ms={year:os,month:cs,day:os},fs={year:os,month:cs,day:os,weekday:cs},ps={hour:os,minute:os},ys={hour:os,minute:os,second:os},bs={hour:os,minute:os,second:os,timeZoneName:ls},gs={hour:os,minute:os,second:os,timeZoneName:cs},ws={hour:os,minute:os,hourCycle:"h23"},vs={hour:os,minute:os,second:os,hourCycle:"h23"},ks={hour:os,minute:os,second:os,hourCycle:"h23",timeZoneName:ls},xs={hour:os,minute:os,second:os,hourCycle:"h23",timeZoneName:cs},Ts={year:os,month:os,day:os,hour:os,minute:os},Ms={year:os,month:os,day:os,hour:os,minute:os,second:os},Ss={year:os,month:ls,day:os,hour:os,minute:os},_s={year:os,month:ls,day:os,hour:os,minute:os,second:os},Ns={year:os,month:ls,day:os,weekday:ls,hour:os,minute:os},Os={year:os,month:cs,day:os,hour:os,minute:os,timeZoneName:ls},As={year:os,month:cs,day:os,hour:os,minute:os,second:os,timeZoneName:ls},$s={year:os,month:cs,day:os,weekday:cs,hour:os,minute:os,timeZoneName:cs},Cs={year:os,month:cs,day:os,weekday:cs,hour:os,minute:os,second:os,timeZoneName:cs};class Zs{get type(){throw new ns}get name(){throw new ns}get ianaName(){return this.name}get isUniversal(){throw new ns}offsetName(e,t){throw new ns}formatOffset(e,t){throw new ns}offset(e){throw new ns}equals(e){throw new ns}get isValid(){throw new ns}}let Bs=null;class Us extends Zs{static get instance(){return null===Bs&&(Bs=new Us),Bs}get type(){return"system"}get name(){return(new Intl.DateTimeFormat).resolvedOptions().timeZone}get isUniversal(){return!1}offsetName(e,{format:t,locale:i}){return en(e,t,i)}formatOffset(e,t){return an(this.offset(e),t)}offset(e){return-new Date(e).getTimezoneOffset()}equals(e){return"system"===e.type}get isValid(){return!0}}const Gs=new Map;const Vs={year:0,month:1,day:2,era:3,hour:4,minute:5,second:6};const Es=new Map;class Ds extends Zs{static create(e){let t=Es.get(e);return void 0===t&&Es.set(e,t=new Ds(e)),t}static resetCache(){Es.clear(),Gs.clear()}static isValidSpecifier(e){return this.isValidZone(e)}static isValidZone(e){if(!e)return!1;try{return new Intl.DateTimeFormat("en-US",{timeZone:e}).format(),!0}catch(e){return!1}}constructor(e){super(),this.zoneName=e,this.valid=Ds.isValidZone(e)}get type(){return"iana"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(e,{format:t,locale:i}){return en(e,t,i,this.name)}formatOffset(e,t){return an(this.offset(e),t)}offset(e){if(!this.valid)return NaN;const t=new Date(e);if(isNaN(t))return NaN;const i=function(e){let t=Gs.get(e);return void 0===t&&(t=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",era:"short"}),Gs.set(e,t)),t}(this.name);let[r,s,a,n,o,l,c]=i.formatToParts?function(e,t){const i=e.formatToParts(t),r=[];for(let e=0;e=0?u:1e3+u,(Ja({year:r,month:s,day:a,hour:24===o?0:o,minute:l,second:c,millisecond:0})-d)/6e4}equals(e){return"iana"===e.type&&e.name===this.name}get isValid(){return this.valid}}let js={};const zs=new Map;function Is(e,t={}){const i=JSON.stringify([e,t]);let r=zs.get(i);return void 0===r&&(r=new Intl.DateTimeFormat(e,t),zs.set(i,r)),r}const Fs=new Map;const Ls=new Map;let Ps=null;const Hs=new Map;function Ws(e){let t=Hs.get(e);return void 0===t&&(t=new Intl.DateTimeFormat(e).resolvedOptions(),Hs.set(e,t)),t}const qs=new Map;function Rs(e,t,i,r){const s=e.listingMode();return"error"===s?null:"en"===s?i(t):r(t)}class Ys{constructor(e,t,i){this.padTo=i.padTo||0,this.floor=i.floor||!1;const{padTo:r,floor:s,...a}=i;if(!t||Object.keys(a).length>0){const t={useGrouping:!1,...i};i.padTo>0&&(t.minimumIntegerDigits=i.padTo),this.inf=function(e,t={}){const i=JSON.stringify([e,t]);let r=Fs.get(i);return void 0===r&&(r=new Intl.NumberFormat(e,t),Fs.set(i,r)),r}(e,t)}}format(e){if(this.inf){const t=this.floor?Math.floor(e):e;return this.inf.format(t)}return Fa(this.floor?Math.floor(e):Wa(e,3),this.padTo)}}class Js{constructor(e,t,i){let r;if(this.opts=i,this.originalZone=void 0,this.opts.timeZone)this.dt=e;else if("fixed"===e.zone.type){const t=e.offset/60*-1,i=t>=0?`Etc/GMT+${t}`:`Etc/GMT${t}`;0!==e.offset&&Ds.create(i).valid?(r=i,this.dt=e):(r="UTC",this.dt=0===e.offset?e:e.setZone("UTC").plus({minutes:e.offset}),this.originalZone=e.zone)}else"system"===e.zone.type?this.dt=e:"iana"===e.zone.type?(this.dt=e,r=e.zone.name):(r="UTC",this.dt=e.setZone("UTC").plus({minutes:e.offset}),this.originalZone=e.zone);const s={...this.opts};s.timeZone=s.timeZone||r,this.dtf=Is(t,s)}format(){return this.originalZone?this.formatToParts().map(({value:e})=>e).join(""):this.dtf.format(this.dt.toJSDate())}formatToParts(){const e=this.dtf.formatToParts(this.dt.toJSDate());return this.originalZone?e.map(e=>{if("timeZoneName"===e.type){const t=this.originalZone.offsetName(this.dt.ts,{locale:this.dt.locale,format:this.opts.timeZoneName});return{...e,value:t}}return e}):e}resolvedOptions(){return this.dtf.resolvedOptions()}}class Qs{constructor(e,t,i){this.opts={style:"long",...i},!t&&Va()&&(this.rtf=function(e,t={}){const{base:i,...r}=t,s=JSON.stringify([e,r]);let a=Ls.get(s);return void 0===a&&(a=new Intl.RelativeTimeFormat(e,t),Ls.set(s,a)),a}(e,i))}format(e,t){return this.rtf?this.rtf.format(e,t):function(e,t,i="always",r=!1){const s={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},a=-1===["hours","minutes","seconds"].indexOf(e);if("auto"===i&&a){const i="days"===e;switch(t){case 1:return i?"tomorrow":`next ${s[e][0]}`;case-1:return i?"yesterday":`last ${s[e][0]}`;case 0:return i?"today":`this ${s[e][0]}`}}const n=Object.is(t,-0)||t<0,o=Math.abs(t),l=1===o,c=s[e],d=r?l?c[1]:c[2]||c[1]:l?s[e][0]:e;return n?`${o} ${d} ago`:`in ${o} ${d}`}(t,e,this.opts.numeric,"long"!==this.opts.style)}formatToParts(e,t){return this.rtf?this.rtf.formatToParts(e,t):[]}}const Ks={firstDay:1,minimalDays:4,weekend:[6,7]};class Xs{static fromOpts(e){return Xs.create(e.locale,e.numberingSystem,e.outputCalendar,e.weekSettings,e.defaultToEN)}static create(e,t,i,r,s=!1){const a=e||ba.defaultLocale,n=a||(s?"en-US":Ps||(Ps=(new Intl.DateTimeFormat).resolvedOptions().locale,Ps)),o=t||ba.defaultNumberingSystem,l=i||ba.defaultOutputCalendar,c=za(r)||ba.defaultWeekSettings;return new Xs(n,o,l,c,a)}static resetCache(){Ps=null,zs.clear(),Fs.clear(),Ls.clear(),Hs.clear(),qs.clear()}static fromObject({locale:e,numberingSystem:t,outputCalendar:i,weekSettings:r}={}){return Xs.create(e,t,i,r)}constructor(e,t,i,r,s){const[a,n,o]=function(e){const t=e.indexOf("-x-");-1!==t&&(e=e.substring(0,t));const i=e.indexOf("-u-");if(-1===i)return[e];{let t,r;try{t=Is(e).resolvedOptions(),r=e}catch(s){const a=e.substring(0,i);t=Is(a).resolvedOptions(),r=a}const{numberingSystem:s,calendar:a}=t;return[r,s,a]}}(e);this.locale=a,this.numberingSystem=t||n||null,this.outputCalendar=i||o||null,this.weekSettings=r,this.intl=function(e,t,i){return i||t?(e.includes("-u-")||(e+="-u"),i&&(e+=`-ca-${i}`),t&&(e+=`-nu-${t}`),e):e}(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=s,this.fastNumbersCached=null}get fastNumbers(){var e;return null==this.fastNumbersCached&&(this.fastNumbersCached=(!(e=this).numberingSystem||"latn"===e.numberingSystem)&&("latn"===e.numberingSystem||!e.locale||e.locale.startsWith("en")||"latn"===Ws(e.locale).numberingSystem)),this.fastNumbersCached}listingMode(){const e=this.isEnglish(),t=!(null!==this.numberingSystem&&"latn"!==this.numberingSystem||null!==this.outputCalendar&&"gregory"!==this.outputCalendar);return e&&t?"en":"intl"}clone(e){return e&&0!==Object.getOwnPropertyNames(e).length?Xs.create(e.locale||this.specifiedLocale,e.numberingSystem||this.numberingSystem,e.outputCalendar||this.outputCalendar,za(e.weekSettings)||this.weekSettings,e.defaultToEN||!1):this}redefaultToEN(e={}){return this.clone({...e,defaultToEN:!0})}redefaultToSystem(e={}){return this.clone({...e,defaultToEN:!1})}months(e,t=!1){return Rs(this,e,dn,()=>{const i="ja"===this.intl||this.intl.startsWith("ja-"),r=(t&=!i)?{month:e,day:"numeric"}:{month:e},s=t?"format":"standalone";if(!this.monthsCache[s][e]){const t=i?e=>this.dtFormatter(e,r).format():e=>this.extract(e,r,"month");this.monthsCache[s][e]=function(e){const t=[];for(let i=1;i<=12;i++){const r=yl.utc(2009,i,1);t.push(e(r))}return t}(t)}return this.monthsCache[s][e]})}weekdays(e,t=!1){return Rs(this,e,fn,()=>{const i=t?{weekday:e,year:"numeric",month:"long",day:"numeric"}:{weekday:e},r=t?"format":"standalone";return this.weekdaysCache[r][e]||(this.weekdaysCache[r][e]=function(e){const t=[];for(let i=1;i<=7;i++){const r=yl.utc(2016,11,13+i);t.push(e(r))}return t}(e=>this.extract(e,i,"weekday"))),this.weekdaysCache[r][e]})}meridiems(){return Rs(this,void 0,()=>pn,()=>{if(!this.meridiemCache){const e={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[yl.utc(2016,11,13,9),yl.utc(2016,11,13,19)].map(t=>this.extract(t,e,"dayperiod"))}return this.meridiemCache})}eras(e){return Rs(this,e,wn,()=>{const t={era:e};return this.eraCache[e]||(this.eraCache[e]=[yl.utc(-40,1,1),yl.utc(2017,1,1)].map(e=>this.extract(e,t,"era"))),this.eraCache[e]})}extract(e,t,i){const r=this.dtFormatter(e,t).formatToParts().find(e=>e.type.toLowerCase()===i);return r?r.value:null}numberFormatter(e={}){return new Ys(this.intl,e.forceSimple||this.fastNumbers,e)}dtFormatter(e,t={}){return new Js(e,this.intl,t)}relFormatter(e={}){return new Qs(this.intl,this.isEnglish(),e)}listFormatter(e={}){return function(e,t={}){const i=JSON.stringify([e,t]);let r=js[i];return r||(r=new Intl.ListFormat(e,t),js[i]=r),r}(this.intl,e)}isEnglish(){return"en"===this.locale||"en-us"===this.locale.toLowerCase()||Ws(this.intl).locale.startsWith("en-us")}getWeekSettings(){return this.weekSettings?this.weekSettings:Ea()?function(e){let t=qs.get(e);if(!t){const i=new Intl.Locale(e);t="getWeekInfo"in i?i.getWeekInfo():i.weekInfo,"minimalDays"in t||(t={...Ks,...t}),qs.set(e,t)}return t}(this.locale):Ks}getStartOfWeek(){return this.getWeekSettings().firstDay}getMinDaysInFirstWeek(){return this.getWeekSettings().minimalDays}getWeekendDays(){return this.getWeekSettings().weekend}equals(e){return this.locale===e.locale&&this.numberingSystem===e.numberingSystem&&this.outputCalendar===e.outputCalendar}toString(){return`Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`}}let ea=null;class ta extends Zs{static get utcInstance(){return null===ea&&(ea=new ta(0)),ea}static instance(e){return 0===e?ta.utcInstance:new ta(e)}static parseSpecifier(e){if(e){const t=e.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(t)return new ta(tn(t[1],t[2]))}return null}constructor(e){super(),this.fixed=e}get type(){return"fixed"}get name(){return 0===this.fixed?"UTC":`UTC${an(this.fixed,"narrow")}`}get ianaName(){return 0===this.fixed?"Etc/UTC":`Etc/GMT${an(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(e,t){return an(this.fixed,t)}get isUniversal(){return!0}offset(){return this.fixed}equals(e){return"fixed"===e.type&&e.fixed===this.fixed}get isValid(){return!0}}class ia extends Zs{constructor(e){super(),this.zoneName=e}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}}function ra(e,t){if(Ba(e)||null===e)return t;if(e instanceof Zs)return e;if(function(e){return"string"==typeof e}(e)){const i=e.toLowerCase();return"default"===i?t:"local"===i||"system"===i?Us.instance:"utc"===i||"gmt"===i?ta.utcInstance:ta.parseSpecifier(i)||Ds.create(e)}return Ua(e)?ta.instance(e):"object"==typeof e&&"offset"in e&&"function"==typeof e.offset?e:new ia(e)}const sa={arab:"[٠-٩]",arabext:"[۰-۹]",bali:"[᭐-᭙]",beng:"[০-৯]",deva:"[०-९]",fullwide:"[0-9]",gujr:"[૦-૯]",hanidec:"[〇|一|二|三|四|五|六|七|八|九]",khmr:"[០-៩]",knda:"[೦-೯]",laoo:"[໐-໙]",limb:"[᥆-᥏]",mlym:"[൦-൯]",mong:"[᠐-᠙]",mymr:"[၀-၉]",orya:"[୦-୯]",tamldec:"[௦-௯]",telu:"[౦-౯]",thai:"[๐-๙]",tibt:"[༠-༩]",latn:"\\d"},aa={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},na=sa.hanidec.replace(/[\[|\]]/g,"").split("");const oa=new Map;function la({numberingSystem:e},t=""){const i=e||"latn";let r=oa.get(i);void 0===r&&(r=new Map,oa.set(i,r));let s=r.get(t);return void 0===s&&(s=new RegExp(`${sa[i]}${t}`),r.set(t,s)),s}let ca,da=()=>Date.now(),ua="system",ha=null,ma=null,fa=null,pa=60,ya=null;class ba{static get now(){return da}static set now(e){da=e}static set defaultZone(e){ua=e}static get defaultZone(){return ra(ua,Us.instance)}static get defaultLocale(){return ha}static set defaultLocale(e){ha=e}static get defaultNumberingSystem(){return ma}static set defaultNumberingSystem(e){ma=e}static get defaultOutputCalendar(){return fa}static set defaultOutputCalendar(e){fa=e}static get defaultWeekSettings(){return ya}static set defaultWeekSettings(e){ya=za(e)}static get twoDigitCutoffYear(){return pa}static set twoDigitCutoffYear(e){pa=e%100}static get throwOnInvalid(){return ca}static set throwOnInvalid(e){ca=e}static resetCaches(){Xs.resetCache(),Ds.resetCache(),yl.resetCache(),oa.clear()}}class ga{constructor(e,t){this.reason=e,this.explanation=t}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}}const wa=[0,31,59,90,120,151,181,212,243,273,304,334],va=[0,31,60,91,121,152,182,213,244,274,305,335];function ka(e,t){return new ga("unit out of range",`you specified ${t} (of type ${typeof t}) as a ${e}, which is invalid`)}function xa(e,t,i){const r=new Date(Date.UTC(e,t-1,i));e<100&&e>=0&&r.setUTCFullYear(r.getUTCFullYear()-1900);const s=r.getUTCDay();return 0===s?7:s}function Ta(e,t,i){return i+(qa(e)?va:wa)[t-1]}function Ma(e,t){const i=qa(e)?va:wa,r=i.findIndex(e=>eKa(r,t,i)?(l=r+1,c=1):l=r,{weekYear:l,weekNumber:c,weekday:o,...nn(e)}}function Na(e,t=4,i=1){const{weekYear:r,weekNumber:s,weekday:a}=e,n=Sa(xa(r,1,t),i),o=Ra(r);let l,c=7*s+a-n-7+t;c<1?(l=r-1,c+=Ra(l)):c>o?(l=r+1,c-=Ra(r)):l=r;const{month:d,day:u}=Ma(l,c);return{year:l,month:d,day:u,...nn(e)}}function Oa(e){const{year:t,month:i,day:r}=e;return{year:t,ordinal:Ta(t,i,r),...nn(e)}}function Aa(e){const{year:t,ordinal:i}=e,{month:r,day:s}=Ma(t,i);return{year:t,month:r,day:s,...nn(e)}}function $a(e,t){if(!Ba(e.localWeekday)||!Ba(e.localWeekNumber)||!Ba(e.localWeekYear)){if(!Ba(e.weekday)||!Ba(e.weekNumber)||!Ba(e.weekYear))throw new rs("Cannot mix locale-based week fields with ISO-based week fields");return Ba(e.localWeekday)||(e.weekday=e.localWeekday),Ba(e.localWeekNumber)||(e.weekNumber=e.localWeekNumber),Ba(e.localWeekYear)||(e.weekYear=e.localWeekYear),delete e.localWeekday,delete e.localWeekNumber,delete e.localWeekYear,{minDaysInFirstWeek:t.getMinDaysInFirstWeek(),startOfWeek:t.getStartOfWeek()}}return{minDaysInFirstWeek:4,startOfWeek:1}}function Ca(e){const t=Ga(e.year),i=Ia(e.month,1,12),r=Ia(e.day,1,Ya(e.year,e.month));return t?i?!r&&ka("day",e.day):ka("month",e.month):ka("year",e.year)}function Za(e){const{hour:t,minute:i,second:r,millisecond:s}=e,a=Ia(t,0,23)||24===t&&0===i&&0===r&&0===s,n=Ia(i,0,59),o=Ia(r,0,59),l=Ia(s,0,999);return a?n?o?!l&&ka("millisecond",s):ka("second",r):ka("minute",i):ka("hour",t)}function Ba(e){return void 0===e}function Ua(e){return"number"==typeof e}function Ga(e){return"number"==typeof e&&e%1==0}function Va(){try{return"undefined"!=typeof Intl&&!!Intl.RelativeTimeFormat}catch(e){return!1}}function Ea(){try{return"undefined"!=typeof Intl&&!!Intl.Locale&&("weekInfo"in Intl.Locale.prototype||"getWeekInfo"in Intl.Locale.prototype)}catch(e){return!1}}function Da(e,t,i){if(0!==e.length)return e.reduce((e,r)=>{const s=[t(r),r];return e&&i(e[0],s[0])===e[0]?e:s},null)[1]}function ja(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function za(e){if(null==e)return null;if("object"!=typeof e)throw new as("Week settings must be an object");if(!Ia(e.firstDay,1,7)||!Ia(e.minimalDays,1,7)||!Array.isArray(e.weekend)||e.weekend.some(e=>!Ia(e,1,7)))throw new as("Invalid week settings");return{firstDay:e.firstDay,minimalDays:e.minimalDays,weekend:Array.from(e.weekend)}}function Ia(e,t,i){return Ga(e)&&e>=t&&e<=i}function Fa(e,t=2){let i;return i=e<0?"-"+(""+-e).padStart(t,"0"):(""+e).padStart(t,"0"),i}function La(e){return Ba(e)||null===e||""===e?void 0:parseInt(e,10)}function Pa(e){return Ba(e)||null===e||""===e?void 0:parseFloat(e)}function Ha(e){if(!Ba(e)&&null!==e&&""!==e){const t=1e3*parseFloat("0."+e);return Math.floor(t)}}function Wa(e,t,i="round"){const r=10**t;switch(i){case"expand":return e>0?Math.ceil(e*r)/r:Math.floor(e*r)/r;case"trunc":return Math.trunc(e*r)/r;case"round":return Math.round(e*r)/r;case"floor":return Math.floor(e*r)/r;case"ceil":return Math.ceil(e*r)/r;default:throw new RangeError(`Value rounding ${i} is out of range`)}}function qa(e){return e%4==0&&(e%100!=0||e%400==0)}function Ra(e){return qa(e)?366:365}function Ya(e,t){const i=function(e,t){return e-t*Math.floor(e/t)}(t-1,12)+1;return 2===i?qa(e+(t-i)/12)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][i-1]}function Ja(e){let t=Date.UTC(e.year,e.month-1,e.day,e.hour,e.minute,e.second,e.millisecond);return e.year<100&&e.year>=0&&(t=new Date(t),t.setUTCFullYear(e.year,e.month-1,e.day)),+t}function Qa(e,t,i){return-Sa(xa(e,1,t),i)+t-1}function Ka(e,t=4,i=1){const r=Qa(e,t,i),s=Qa(e+1,t,i);return(Ra(e)-r+s)/7}function Xa(e){return e>99?e:e>ba.twoDigitCutoffYear?1900+e:2e3+e}function en(e,t,i,r=null){const s=new Date(e),a={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};r&&(a.timeZone=r);const n={timeZoneName:t,...a},o=new Intl.DateTimeFormat(i,n).formatToParts(s).find(e=>"timezonename"===e.type.toLowerCase());return o?o.value:null}function tn(e,t){let i=parseInt(e,10);Number.isNaN(i)&&(i=0);const r=parseInt(t,10)||0;return 60*i+(i<0||Object.is(i,-0)?-r:r)}function rn(e){const t=Number(e);if("boolean"==typeof e||""===e||!Number.isFinite(t))throw new as(`Invalid unit value ${e}`);return t}function sn(e,t){const i={};for(const r in e)if(ja(e,r)){const s=e[r];if(null==s)continue;i[t(r)]=rn(s)}return i}function an(e,t){const i=Math.trunc(Math.abs(e/60)),r=Math.trunc(Math.abs(e%60)),s=e>=0?"+":"-";switch(t){case"short":return`${s}${Fa(i,2)}:${Fa(r,2)}`;case"narrow":return`${s}${i}${r>0?`:${r}`:""}`;case"techie":return`${s}${Fa(i,2)}${Fa(r,2)}`;default:throw new RangeError(`Value format ${t} is out of range for property format`)}}function nn(e){return function(e,t){return t.reduce((t,i)=>(t[i]=e[i],t),{})}(e,["hour","minute","second","millisecond"])}const on=["January","February","March","April","May","June","July","August","September","October","November","December"],ln=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],cn=["J","F","M","A","M","J","J","A","S","O","N","D"];function dn(e){switch(e){case"narrow":return[...cn];case"short":return[...ln];case"long":return[...on];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}const un=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],hn=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],mn=["M","T","W","T","F","S","S"];function fn(e){switch(e){case"narrow":return[...mn];case"short":return[...hn];case"long":return[...un];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}const pn=["AM","PM"],yn=["Before Christ","Anno Domini"],bn=["BC","AD"],gn=["B","A"];function wn(e){switch(e){case"narrow":return[...gn];case"short":return[...bn];case"long":return[...yn];default:return null}}function vn(e,t){let i="";for(const r of e)r.literal?i+=r.val:i+=t(r.val);return i}const kn={D:ds,DD:us,DDD:ms,DDDD:fs,t:ps,tt:ys,ttt:bs,tttt:gs,T:ws,TT:vs,TTT:ks,TTTT:xs,f:Ts,ff:Ss,fff:Os,ffff:$s,F:Ms,FF:_s,FFF:As,FFFF:Cs};class xn{static create(e,t={}){return new xn(e,t)}static parseFormat(e){let t=null,i="",r=!1;const s=[];for(let a=0;a0||r)&&s.push({literal:r||/^\s+$/.test(i),val:""===i?"'":i}),t=null,i="",r=!r):r||n===t?i+=n:(i.length>0&&s.push({literal:/^\s+$/.test(i),val:i}),i=n,t=n)}return i.length>0&&s.push({literal:r||/^\s+$/.test(i),val:i}),s}static macroTokenToFormatOpts(e){return kn[e]}constructor(e,t){this.opts=t,this.loc=e,this.systemLoc=null}formatWithSystemDefault(e,t){null===this.systemLoc&&(this.systemLoc=this.loc.redefaultToSystem());return this.systemLoc.dtFormatter(e,{...this.opts,...t}).format()}dtFormatter(e,t={}){return this.loc.dtFormatter(e,{...this.opts,...t})}formatDateTime(e,t){return this.dtFormatter(e,t).format()}formatDateTimeParts(e,t){return this.dtFormatter(e,t).formatToParts()}formatInterval(e,t){return this.dtFormatter(e.start,t).dtf.formatRange(e.start.toJSDate(),e.end.toJSDate())}resolvedOptions(e,t){return this.dtFormatter(e,t).resolvedOptions()}num(e,t=0,i=void 0){if(this.opts.forceSimple)return Fa(e,t);const r={...this.opts};return t>0&&(r.padTo=t),i&&(r.signDisplay=i),this.loc.numberFormatter(r).format(e)}formatDateTimeFromString(e,t){const i="en"===this.loc.listingMode(),r=this.loc.outputCalendar&&"gregory"!==this.loc.outputCalendar,s=(t,i)=>this.loc.extract(e,t,i),a=t=>e.isOffsetFixed&&0===e.offset&&t.allowZ?"Z":e.isValid?e.zone.formatOffset(e.ts,t.format):"",n=()=>i?function(e){return pn[e.hour<12?0:1]}(e):s({hour:"numeric",hourCycle:"h12"},"dayperiod"),o=(t,r)=>i?function(e,t){return dn(t)[e.month-1]}(e,t):s(r?{month:t}:{month:t,day:"numeric"},"month"),l=(t,r)=>i?function(e,t){return fn(t)[e.weekday-1]}(e,t):s(r?{weekday:t}:{weekday:t,month:"long",day:"numeric"},"weekday"),c=t=>{const i=xn.macroTokenToFormatOpts(t);return i?this.formatWithSystemDefault(e,i):t},d=t=>i?function(e,t){return wn(t)[e.year<0?0:1]}(e,t):s({era:t},"era");return vn(xn.parseFormat(t),t=>{switch(t){case"S":return this.num(e.millisecond);case"u":case"SSS":return this.num(e.millisecond,3);case"s":return this.num(e.second);case"ss":return this.num(e.second,2);case"uu":return this.num(Math.floor(e.millisecond/10),2);case"uuu":return this.num(Math.floor(e.millisecond/100));case"m":return this.num(e.minute);case"mm":return this.num(e.minute,2);case"h":return this.num(e.hour%12==0?12:e.hour%12);case"hh":return this.num(e.hour%12==0?12:e.hour%12,2);case"H":return this.num(e.hour);case"HH":return this.num(e.hour,2);case"Z":return a({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return a({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return a({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return e.zone.offsetName(e.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return e.zone.offsetName(e.ts,{format:"long",locale:this.loc.locale});case"z":return e.zoneName;case"a":return n();case"d":return r?s({day:"numeric"},"day"):this.num(e.day);case"dd":return r?s({day:"2-digit"},"day"):this.num(e.day,2);case"c":case"E":return this.num(e.weekday);case"ccc":return l("short",!0);case"cccc":return l("long",!0);case"ccccc":return l("narrow",!0);case"EEE":return l("short",!1);case"EEEE":return l("long",!1);case"EEEEE":return l("narrow",!1);case"L":return r?s({month:"numeric",day:"numeric"},"month"):this.num(e.month);case"LL":return r?s({month:"2-digit",day:"numeric"},"month"):this.num(e.month,2);case"LLL":return o("short",!0);case"LLLL":return o("long",!0);case"LLLLL":return o("narrow",!0);case"M":return r?s({month:"numeric"},"month"):this.num(e.month);case"MM":return r?s({month:"2-digit"},"month"):this.num(e.month,2);case"MMM":return o("short",!1);case"MMMM":return o("long",!1);case"MMMMM":return o("narrow",!1);case"y":return r?s({year:"numeric"},"year"):this.num(e.year);case"yy":return r?s({year:"2-digit"},"year"):this.num(e.year.toString().slice(-2),2);case"yyyy":return r?s({year:"numeric"},"year"):this.num(e.year,4);case"yyyyyy":return r?s({year:"numeric"},"year"):this.num(e.year,6);case"G":return d("short");case"GG":return d("long");case"GGGGG":return d("narrow");case"kk":return this.num(e.weekYear.toString().slice(-2),2);case"kkkk":return this.num(e.weekYear,4);case"W":return this.num(e.weekNumber);case"WW":return this.num(e.weekNumber,2);case"n":return this.num(e.localWeekNumber);case"nn":return this.num(e.localWeekNumber,2);case"ii":return this.num(e.localWeekYear.toString().slice(-2),2);case"iiii":return this.num(e.localWeekYear,4);case"o":return this.num(e.ordinal);case"ooo":return this.num(e.ordinal,3);case"q":return this.num(e.quarter);case"qq":return this.num(e.quarter,2);case"X":return this.num(Math.floor(e.ts/1e3));case"x":return this.num(e.ts);default:return c(t)}})}formatDurationFromString(e,t){const i="negativeLargestOnly"===this.opts.signMode?-1:1,r=e=>{switch(e[0]){case"S":return"milliseconds";case"s":return"seconds";case"m":return"minutes";case"h":return"hours";case"d":return"days";case"w":return"weeks";case"M":return"months";case"y":return"years";default:return null}},s=xn.parseFormat(t),a=s.reduce((e,{literal:t,val:i})=>t?e:e.concat(i),[]),n=e.shiftTo(...a.map(r).filter(e=>e));return vn(s,((e,t)=>s=>{const a=r(s);if(a){const r=t.isNegativeDuration&&a!==t.largestUnit?i:1;let n;return n="negativeLargestOnly"===this.opts.signMode&&a!==t.largestUnit?"never":"all"===this.opts.signMode?"always":"auto",this.num(e.get(a)*r,s.length,n)}return s})(n,{isNegativeDuration:n<0,largestUnit:Object.keys(n.values)[0]}))}}const Tn=/[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/;function Mn(...e){const t=e.reduce((e,t)=>e+t.source,"");return RegExp(`^${t}$`)}function Sn(...e){return t=>e.reduce(([e,i,r],s)=>{const[a,n,o]=s(t,r);return[{...e,...a},n||i,o]},[{},null,1]).slice(0,2)}function _n(e,...t){if(null==e)return[null,null];for(const[i,r]of t){const t=i.exec(e);if(t)return r(t)}return[null,null]}function Nn(...e){return(t,i)=>{const r={};let s;for(s=0;svoid 0!==e&&(t||e&&d)?-e:e;return[{years:h(Pa(i)),months:h(Pa(r)),weeks:h(Pa(s)),days:h(Pa(a)),hours:h(Pa(n)),minutes:h(Pa(o)),seconds:h(Pa(l),"-0"===l),milliseconds:h(Ha(c),u)}]}const Ln={GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Pn(e,t,i,r,s,a,n){const o={year:2===t.length?Xa(La(t)):La(t),month:ln.indexOf(i)+1,day:La(r),hour:La(s),minute:La(a)};return n&&(o.second=La(n)),e&&(o.weekday=e.length>3?un.indexOf(e)+1:hn.indexOf(e)+1),o}const Hn=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function Wn(e){const[,t,i,r,s,a,n,o,l,c,d,u]=e,h=Pn(t,s,r,i,a,n,o);let m;return m=l?Ln[l]:c?0:tn(d,u),[h,new ta(m)]}const qn=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,Rn=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,Yn=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function Jn(e){const[,t,i,r,s,a,n,o]=e;return[Pn(t,s,r,i,a,n,o),ta.utcInstance]}function Qn(e){const[,t,i,r,s,a,n,o]=e;return[Pn(t,o,i,r,s,a,n),ta.utcInstance]}const Kn=Mn(/([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/,Cn),Xn=Mn(/(\d{4})-?W(\d\d)(?:-?(\d))?/,Cn),eo=Mn(/(\d{4})-?(\d{3})/,Cn),to=Mn($n),io=Sn(function(e,t){return[{year:Vn(e,t),month:Vn(e,t+1,1),day:Vn(e,t+2,1)},null,t+3]},En,Dn,jn),ro=Sn(Zn,En,Dn,jn),so=Sn(Bn,En,Dn,jn),ao=Sn(En,Dn,jn);const no=Sn(En);const oo=Mn(/(\d{4})-(\d\d)-(\d\d)/,Gn),lo=Mn(Un),co=Sn(En,Dn,jn);const uo="Invalid Duration",ho={weeks:{days:7,hours:168,minutes:10080,seconds:604800,milliseconds:6048e5},days:{hours:24,minutes:1440,seconds:86400,milliseconds:864e5},hours:{minutes:60,seconds:3600,milliseconds:36e5},minutes:{seconds:60,milliseconds:6e4},seconds:{milliseconds:1e3}},mo={years:{quarters:4,months:12,weeks:52,days:365,hours:8760,minutes:525600,seconds:31536e3,milliseconds:31536e6},quarters:{months:3,weeks:13,days:91,hours:2184,minutes:131040,seconds:7862400,milliseconds:78624e5},months:{weeks:4,days:30,hours:720,minutes:43200,seconds:2592e3,milliseconds:2592e6},...ho},fo=365.2425,po=30.436875,yo={years:{quarters:4,months:12,weeks:52.1775,days:fo,hours:8765.82,minutes:525949.2,seconds:525949.2*60,milliseconds:525949.2*60*1e3},quarters:{months:3,weeks:13.044375,days:91.310625,hours:2191.455,minutes:131487.3,seconds:525949.2*60/4,milliseconds:7889237999.999999},months:{weeks:4.3481250000000005,days:po,hours:730.485,minutes:43829.1,seconds:2629746,milliseconds:2629746e3},...ho},bo=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],go=bo.slice(0).reverse();function wo(e,t,i=!1){const r={values:i?t.values:{...e.values,...t.values||{}},loc:e.loc.clone(t.loc),conversionAccuracy:t.conversionAccuracy||e.conversionAccuracy,matrix:t.matrix||e.matrix};return new To(r)}function vo(e,t){let i=t.milliseconds??0;for(const r of go.slice(1))t[r]&&(i+=t[r]*e[r].milliseconds);return i}function ko(e,t){const i=vo(e,t)<0?-1:1;bo.reduceRight((r,s)=>{if(Ba(t[s]))return r;if(r){const a=t[r]*i,n=e[s][r],o=Math.floor(a/n);t[s]+=o*i,t[r]-=o*n*i}return s},null),bo.reduce((i,r)=>{if(Ba(t[r]))return i;if(i){const s=t[i]%1;t[i]-=s,t[r]+=s*e[i][r]}return r},null)}function xo(e){const t={};for(const[i,r]of Object.entries(e))0!==r&&(t[i]=r);return t}class To{constructor(e){const t="longterm"===e.conversionAccuracy||!1;let i=t?yo:mo;e.matrix&&(i=e.matrix),this.values=e.values,this.loc=e.loc||Xs.create(),this.conversionAccuracy=t?"longterm":"casual",this.invalid=e.invalid||null,this.matrix=i,this.isLuxonDuration=!0}static fromMillis(e,t){return To.fromObject({milliseconds:e},t)}static fromObject(e,t={}){if(null==e||"object"!=typeof e)throw new as("Duration.fromObject: argument expected to be an object, got "+(null===e?"null":typeof e));return new To({values:sn(e,To.normalizeUnit),loc:Xs.fromObject(t),conversionAccuracy:t.conversionAccuracy,matrix:t.matrix})}static fromDurationLike(e){if(Ua(e))return To.fromMillis(e);if(To.isDuration(e))return e;if("object"==typeof e)return To.fromObject(e);throw new as(`Unknown duration argument ${e} of type ${typeof e}`)}static fromISO(e,t){const[i]=function(e){return _n(e,[In,Fn])}(e);return i?To.fromObject(i,t):To.invalid("unparsable",`the input "${e}" can't be parsed as ISO 8601`)}static fromISOTime(e,t){const[i]=function(e){return _n(e,[zn,no])}(e);return i?To.fromObject(i,t):To.invalid("unparsable",`the input "${e}" can't be parsed as ISO 8601`)}static invalid(e,t=null){if(!e)throw new as("need to specify a reason the Duration is invalid");const i=e instanceof ga?e:new ga(e,t);if(ba.throwOnInvalid)throw new is(i);return new To({invalid:i})}static normalizeUnit(e){const t={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[e?e.toLowerCase():e];if(!t)throw new ss(e);return t}static isDuration(e){return e&&e.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(e,t={}){const i={...t,floor:!1!==t.round&&!1!==t.floor};return this.isValid?xn.create(this.loc,i).formatDurationFromString(this,e):uo}toHuman(e={}){if(!this.isValid)return uo;const t=!1!==e.showZeros,i=bo.map(i=>{const r=this.values[i];return Ba(r)||0===r&&!t?null:this.loc.numberFormatter({style:"unit",unitDisplay:"long",...e,unit:i.slice(0,-1)}).format(r)}).filter(e=>e);return this.loc.listFormatter({type:"conjunction",style:e.listStyle||"narrow",...e}).format(i)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let e="P";return 0!==this.years&&(e+=this.years+"Y"),0===this.months&&0===this.quarters||(e+=this.months+3*this.quarters+"M"),0!==this.weeks&&(e+=this.weeks+"W"),0!==this.days&&(e+=this.days+"D"),0===this.hours&&0===this.minutes&&0===this.seconds&&0===this.milliseconds||(e+="T"),0!==this.hours&&(e+=this.hours+"H"),0!==this.minutes&&(e+=this.minutes+"M"),0===this.seconds&&0===this.milliseconds||(e+=Wa(this.seconds+this.milliseconds/1e3,3)+"S"),"P"===e&&(e+="T0S"),e}toISOTime(e={}){if(!this.isValid)return null;const t=this.toMillis();if(t<0||t>=864e5)return null;e={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended",...e,includeOffset:!1};return yl.fromMillis(t,{zone:"UTC"}).toISOTime(e)}toJSON(){return this.toISO()}toString(){return this.toISO()}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Duration { values: ${JSON.stringify(this.values)} }`:`Duration { Invalid, reason: ${this.invalidReason} }`}toMillis(){return this.isValid?vo(this.matrix,this.values):NaN}valueOf(){return this.toMillis()}plus(e){if(!this.isValid)return this;const t=To.fromDurationLike(e),i={};for(const e of bo)(ja(t.values,e)||ja(this.values,e))&&(i[e]=t.get(e)+this.get(e));return wo(this,{values:i},!0)}minus(e){if(!this.isValid)return this;const t=To.fromDurationLike(e);return this.plus(t.negate())}mapUnits(e){if(!this.isValid)return this;const t={};for(const i of Object.keys(this.values))t[i]=rn(e(this.values[i],i));return wo(this,{values:t},!0)}get(e){return this[To.normalizeUnit(e)]}set(e){if(!this.isValid)return this;return wo(this,{values:{...this.values,...sn(e,To.normalizeUnit)}})}reconfigure({locale:e,numberingSystem:t,conversionAccuracy:i,matrix:r}={}){return wo(this,{loc:this.loc.clone({locale:e,numberingSystem:t}),matrix:r,conversionAccuracy:i})}as(e){return this.isValid?this.shiftTo(e).get(e):NaN}normalize(){if(!this.isValid)return this;const e=this.toObject();return ko(this.matrix,e),wo(this,{values:e},!0)}rescale(){if(!this.isValid)return this;return wo(this,{values:xo(this.normalize().shiftToAll().toObject())},!0)}shiftTo(...e){if(!this.isValid)return this;if(0===e.length)return this;e=e.map(e=>To.normalizeUnit(e));const t={},i={},r=this.toObject();let s;for(const a of bo)if(e.indexOf(a)>=0){s=a;let e=0;for(const t in i)e+=this.matrix[t][a]*i[t],i[t]=0;Ua(r[a])&&(e+=r[a]);const n=Math.trunc(e);t[a]=n,i[a]=(1e3*e-1e3*n)/1e3}else Ua(r[a])&&(i[a]=r[a]);for(const e in i)0!==i[e]&&(t[s]+=e===s?i[e]:i[e]/this.matrix[s][e]);return ko(this.matrix,t),wo(this,{values:t},!0)}shiftToAll(){return this.isValid?this.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds"):this}negate(){if(!this.isValid)return this;const e={};for(const t of Object.keys(this.values))e[t]=0===this.values[t]?0:-this.values[t];return wo(this,{values:e},!0)}removeZeros(){if(!this.isValid)return this;return wo(this,{values:xo(this.values)},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return null===this.invalid}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(e){if(!this.isValid||!e.isValid)return!1;if(!this.loc.equals(e.loc))return!1;function t(e,t){return void 0===e||0===e?void 0===t||0===t:e===t}for(const i of bo)if(!t(this.values[i],e.values[i]))return!1;return!0}}const Mo="Invalid Interval";class So{constructor(e){this.s=e.start,this.e=e.end,this.invalid=e.invalid||null,this.isLuxonInterval=!0}static invalid(e,t=null){if(!e)throw new as("need to specify a reason the Interval is invalid");const i=e instanceof ga?e:new ga(e,t);if(ba.throwOnInvalid)throw new ts(i);return new So({invalid:i})}static fromDateTimes(e,t){const i=bl(e),r=bl(t),s=function(e,t){return e&&e.isValid?t&&t.isValid?te}isBefore(e){return!!this.isValid&&this.e<=e}contains(e){return!!this.isValid&&(this.s<=e&&this.e>e)}set({start:e,end:t}={}){return this.isValid?So.fromDateTimes(e||this.s,t||this.e):this}splitAt(...e){if(!this.isValid)return[];const t=e.map(bl).filter(e=>this.contains(e)).sort((e,t)=>e.toMillis()-t.toMillis()),i=[];let{s:r}=this,s=0;for(;r+this.e?this.e:e;i.push(So.fromDateTimes(r,a)),r=a,s+=1}return i}splitBy(e){const t=To.fromDurationLike(e);if(!this.isValid||!t.isValid||0===t.as("milliseconds"))return[];let i,{s:r}=this,s=1;const a=[];for(;re*s));i=+e>+this.e?this.e:e,a.push(So.fromDateTimes(r,i)),r=i,s+=1}return a}divideEqually(e){return this.isValid?this.splitBy(this.length()/e).slice(0,e):[]}overlaps(e){return this.e>e.s&&this.s=e.e)}equals(e){return!(!this.isValid||!e.isValid)&&(this.s.equals(e.s)&&this.e.equals(e.e))}intersection(e){if(!this.isValid)return this;const t=this.s>e.s?this.s:e.s,i=this.e=i?null:So.fromDateTimes(t,i)}union(e){if(!this.isValid)return this;const t=this.se.e?this.e:e.e;return So.fromDateTimes(t,i)}static merge(e){const[t,i]=e.sort((e,t)=>e.s-t.s).reduce(([e,t],i)=>t?t.overlaps(i)||t.abutsStart(i)?[e,t.union(i)]:[e.concat([t]),i]:[e,i],[[],null]);return i&&t.push(i),t}static xor(e){let t=null,i=0;const r=[],s=e.map(e=>[{time:e.s,type:"s"},{time:e.e,type:"e"}]),a=Array.prototype.concat(...s).sort((e,t)=>e.time-t.time);for(const e of a)i+="s"===e.type?1:-1,1===i?t=e.time:(t&&+t!==+e.time&&r.push(So.fromDateTimes(t,e.time)),t=null);return So.merge(r)}difference(...e){return So.xor([this].concat(e)).map(e=>this.intersection(e)).filter(e=>e&&!e.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()} – ${this.e.toISO()})`:Mo}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`:`Interval { Invalid, reason: ${this.invalidReason} }`}toLocaleString(e=ds,t={}){return this.isValid?xn.create(this.s.loc.clone(t),e).formatInterval(this):Mo}toISO(e){return this.isValid?`${this.s.toISO(e)}/${this.e.toISO(e)}`:Mo}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:Mo}toISOTime(e){return this.isValid?`${this.s.toISOTime(e)}/${this.e.toISOTime(e)}`:Mo}toFormat(e,{separator:t=" – "}={}){return this.isValid?`${this.s.toFormat(e)}${t}${this.e.toFormat(e)}`:Mo}toDuration(e,t){return this.isValid?this.e.diff(this.s,e,t):To.invalid(this.invalidReason)}mapEndpoints(e){return So.fromDateTimes(e(this.s),e(this.e))}}class _o{static hasDST(e=ba.defaultZone){const t=yl.now().setZone(e).set({month:12});return!e.isUniversal&&t.offset!==t.set({month:6}).offset}static isValidIANAZone(e){return Ds.isValidZone(e)}static normalizeZone(e){return ra(e,ba.defaultZone)}static getStartOfWeek({locale:e=null,locObj:t=null}={}){return(t||Xs.create(e)).getStartOfWeek()}static getMinimumDaysInFirstWeek({locale:e=null,locObj:t=null}={}){return(t||Xs.create(e)).getMinDaysInFirstWeek()}static getWeekendWeekdays({locale:e=null,locObj:t=null}={}){return(t||Xs.create(e)).getWeekendDays().slice()}static months(e="long",{locale:t=null,numberingSystem:i=null,locObj:r=null,outputCalendar:s="gregory"}={}){return(r||Xs.create(t,i,s)).months(e)}static monthsFormat(e="long",{locale:t=null,numberingSystem:i=null,locObj:r=null,outputCalendar:s="gregory"}={}){return(r||Xs.create(t,i,s)).months(e,!0)}static weekdays(e="long",{locale:t=null,numberingSystem:i=null,locObj:r=null}={}){return(r||Xs.create(t,i,null)).weekdays(e)}static weekdaysFormat(e="long",{locale:t=null,numberingSystem:i=null,locObj:r=null}={}){return(r||Xs.create(t,i,null)).weekdays(e,!0)}static meridiems({locale:e=null}={}){return Xs.create(e).meridiems()}static eras(e="short",{locale:t=null}={}){return Xs.create(t,null,"gregory").eras(e)}static features(){return{relative:Va(),localeWeek:Ea()}}}function No(e,t){const i=e=>e.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),r=i(t)-i(e);return Math.floor(To.fromMillis(r).as("days"))}function Oo(e,t,i,r){let[s,a,n,o]=function(e,t,i){const r=[["years",(e,t)=>t.year-e.year],["quarters",(e,t)=>t.quarter-e.quarter+4*(t.year-e.year)],["months",(e,t)=>t.month-e.month+12*(t.year-e.year)],["weeks",(e,t)=>{const i=No(e,t);return(i-i%7)/7}],["days",No]],s={},a=e;let n,o;for(const[l,c]of r)i.indexOf(l)>=0&&(n=l,s[l]=c(e,t),o=a.plus(s),o>t?(s[l]--,(e=a.plus(s))>t&&(o=e,s[l]--,e=a.plus(s))):e=o);return[e,s,o,n]}(e,t,i);const l=t-s,c=i.filter(e=>["hours","minutes","seconds","milliseconds"].indexOf(e)>=0);0===c.length&&(n0?To.fromMillis(l,r).shiftTo(...c).plus(d):d}function Ao(e,t=e=>e){return{regex:e,deser:([e])=>t(function(e){let t=parseInt(e,10);if(isNaN(t)){t="";for(let i=0;i=i&&r<=s&&(t+=r-i)}}return parseInt(t,10)}return t}(e))}}const $o=`[ ${String.fromCharCode(160)}]`,Co=new RegExp($o,"g");function Zo(e){return e.replace(/\./g,"\\.?").replace(Co,$o)}function Bo(e){return e.replace(/\./g,"").replace(Co," ").toLowerCase()}function Uo(e,t){return null===e?null:{regex:RegExp(e.map(Zo).join("|")),deser:([i])=>e.findIndex(e=>Bo(i)===Bo(e))+t}}function Go(e,t){return{regex:e,deser:([,e,t])=>tn(e,t),groups:t}}function Vo(e){return{regex:e,deser:([e])=>e}}const Eo={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour12:{numeric:"h","2-digit":"hh"},hour24:{numeric:"H","2-digit":"HH"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"},timeZoneName:{long:"ZZZZZ",short:"ZZZ"}};let Do=null;function jo(e,t){return Array.prototype.concat(...e.map(e=>function(e,t){if(e.literal)return e;const i=Fo(xn.macroTokenToFormatOpts(e.val),t);return null==i||i.includes(void 0)?e:i}(e,t)))}class zo{constructor(e,t){if(this.locale=e,this.format=t,this.tokens=jo(xn.parseFormat(t),e),this.units=this.tokens.map(t=>function(e,t){const i=la(t),r=la(t,"{2}"),s=la(t,"{3}"),a=la(t,"{4}"),n=la(t,"{6}"),o=la(t,"{1,2}"),l=la(t,"{1,3}"),c=la(t,"{1,6}"),d=la(t,"{1,9}"),u=la(t,"{2,4}"),h=la(t,"{4,6}"),m=e=>{return{regex:RegExp((t=e.val,t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"))),deser:([e])=>e,literal:!0};var t},f=(f=>{if(e.literal)return m(f);switch(f.val){case"G":return Uo(t.eras("short"),0);case"GG":return Uo(t.eras("long"),0);case"y":return Ao(c);case"yy":case"kk":return Ao(u,Xa);case"yyyy":case"kkkk":return Ao(a);case"yyyyy":return Ao(h);case"yyyyyy":return Ao(n);case"M":case"L":case"d":case"H":case"h":case"m":case"q":case"s":case"W":return Ao(o);case"MM":case"LL":case"dd":case"HH":case"hh":case"mm":case"qq":case"ss":case"WW":return Ao(r);case"MMM":return Uo(t.months("short",!0),1);case"MMMM":return Uo(t.months("long",!0),1);case"LLL":return Uo(t.months("short",!1),1);case"LLLL":return Uo(t.months("long",!1),1);case"o":case"S":return Ao(l);case"ooo":case"SSS":return Ao(s);case"u":return Vo(d);case"uu":return Vo(o);case"uuu":case"E":case"c":return Ao(i);case"a":return Uo(t.meridiems(),0);case"EEE":return Uo(t.weekdays("short",!1),1);case"EEEE":return Uo(t.weekdays("long",!1),1);case"ccc":return Uo(t.weekdays("short",!0),1);case"cccc":return Uo(t.weekdays("long",!0),1);case"Z":case"ZZ":return Go(new RegExp(`([+-]${o.source})(?::(${r.source}))?`),2);case"ZZZ":return Go(new RegExp(`([+-]${o.source})(${r.source})?`),2);case"z":return Vo(/[a-z_+-/]{1,256}?/i);case" ":return Vo(/[^\S\n\r]/);default:return m(f)}})(e)||{invalidReason:"missing Intl.DateTimeFormat.formatToParts support"};return f.token=e,f}(t,e)),this.disqualifyingUnit=this.units.find(e=>e.invalidReason),!this.disqualifyingUnit){const[e,t]=function(e){const t=e.map(e=>e.regex).reduce((e,t)=>`${e}(${t.source})`,"");return[`^${t}$`,e]}(this.units);this.regex=RegExp(e,"i"),this.handlers=t}}explainFromTokens(e){if(this.isValid){const[t,i]=function(e,t,i){const r=e.match(t);if(r){const e={};let t=1;for(const s in i)if(ja(i,s)){const a=i[s],n=a.groups?a.groups+1:1;!a.literal&&a.token&&(e[a.token.val[0]]=a.deser(r.slice(t,t+n))),t+=n}return[r,e]}return[r,{}]}(e,this.regex,this.handlers),[r,s,a]=i?function(e){let t,i=null;Ba(e.z)||(i=Ds.create(e.z)),Ba(e.Z)||(i||(i=new ta(e.Z)),t=e.Z),Ba(e.q)||(e.M=3*(e.q-1)+1),Ba(e.h)||(e.h<12&&1===e.a?e.h+=12:12===e.h&&0===e.a&&(e.h=0)),0===e.G&&e.y&&(e.y=-e.y),Ba(e.u)||(e.S=Ha(e.u));const r=Object.keys(e).reduce((t,i)=>{const r=(e=>{switch(e){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}})(i);return r&&(t[r]=e[i]),t},{});return[r,i,t]}(i):[null,null,void 0];if(ja(i,"a")&&ja(i,"H"))throw new rs("Can't include meridiem when specifying 24-hour format");return{input:e,tokens:this.tokens,regex:this.regex,rawMatches:t,matches:i,result:r,zone:s,specificOffset:a}}return{input:e,tokens:this.tokens,invalidReason:this.invalidReason}}get isValid(){return!this.disqualifyingUnit}get invalidReason(){return this.disqualifyingUnit?this.disqualifyingUnit.invalidReason:null}}function Io(e,t,i){return new zo(e,i).explainFromTokens(t)}function Fo(e,t){if(!e)return null;const i=xn.create(t,e).dtFormatter((Do||(Do=yl.fromMillis(1555555555555)),Do)),r=i.formatToParts(),s=i.resolvedOptions();return r.map(t=>function(e,t,i){const{type:r,value:s}=e;if("literal"===r){const e=/^\s+$/.test(s);return{literal:!e,val:e?" ":s}}const a=t[r];let n=r;"hour"===r&&(n=null!=t.hour12?t.hour12?"hour12":"hour24":null!=t.hourCycle?"h11"===t.hourCycle||"h12"===t.hourCycle?"hour12":"hour24":i.hour12?"hour12":"hour24");let o=Eo[n];if("object"==typeof o&&(o=o[a]),o)return{literal:!1,val:o}}(t,e,s))}const Lo="Invalid DateTime",Po=864e13;function Ho(e){return new ga("unsupported zone",`the zone "${e.name}" is not supported`)}function Wo(e){return null===e.weekData&&(e.weekData=_a(e.c)),e.weekData}function qo(e){return null===e.localWeekData&&(e.localWeekData=_a(e.c,e.loc.getMinDaysInFirstWeek(),e.loc.getStartOfWeek())),e.localWeekData}function Ro(e,t){const i={ts:e.ts,zone:e.zone,c:e.c,o:e.o,loc:e.loc,invalid:e.invalid};return new yl({...i,...t,old:i})}function Yo(e,t,i){let r=e-60*t*1e3;const s=i.offset(r);if(t===s)return[r,t];r-=60*(s-t)*1e3;const a=i.offset(r);return s===a?[r,s]:[e-60*Math.min(s,a)*1e3,Math.max(s,a)]}function Jo(e,t){const i=new Date(e+=60*t*1e3);return{year:i.getUTCFullYear(),month:i.getUTCMonth()+1,day:i.getUTCDate(),hour:i.getUTCHours(),minute:i.getUTCMinutes(),second:i.getUTCSeconds(),millisecond:i.getUTCMilliseconds()}}function Qo(e,t,i){return Yo(Ja(e),t,i)}function Ko(e,t){const i=e.o,r=e.c.year+Math.trunc(t.years),s=e.c.month+Math.trunc(t.months)+3*Math.trunc(t.quarters),a={...e.c,year:r,month:s,day:Math.min(e.c.day,Ya(r,s))+Math.trunc(t.days)+7*Math.trunc(t.weeks)},n=To.fromObject({years:t.years-Math.trunc(t.years),quarters:t.quarters-Math.trunc(t.quarters),months:t.months-Math.trunc(t.months),weeks:t.weeks-Math.trunc(t.weeks),days:t.days-Math.trunc(t.days),hours:t.hours,minutes:t.minutes,seconds:t.seconds,milliseconds:t.milliseconds}).as("milliseconds"),o=Ja(a);let[l,c]=Yo(o,i,e.zone);return 0!==n&&(l+=n,c=e.zone.offset(l)),{ts:l,o:c}}function Xo(e,t,i,r,s,a){const{setZone:n,zone:o}=i;if(e&&0!==Object.keys(e).length||t){const r=t||o,s=yl.fromObject(e,{...i,zone:r,specificOffset:a});return n?s:s.setZone(o)}return yl.invalid(new ga("unparsable",`the input "${s}" can't be parsed as ${r}`))}function el(e,t,i=!0){return e.isValid?xn.create(Xs.create("en-US"),{allowZ:i,forceSimple:!0}).formatDateTimeFromString(e,t):null}function tl(e,t,i){const r=e.c.year>9999||e.c.year<0;let s="";if(r&&e.c.year>=0&&(s+="+"),s+=Fa(e.c.year,r?6:4),"year"===i)return s;if(t){if(s+="-",s+=Fa(e.c.month),"month"===i)return s;s+="-"}else if(s+=Fa(e.c.month),"month"===i)return s;return s+=Fa(e.c.day),s}function il(e,t,i,r,s,a,n){let o=!i||0!==e.c.millisecond||0!==e.c.second,l="";switch(n){case"day":case"month":case"year":break;default:if(l+=Fa(e.c.hour),"hour"===n)break;if(t){if(l+=":",l+=Fa(e.c.minute),"minute"===n)break;o&&(l+=":",l+=Fa(e.c.second))}else{if(l+=Fa(e.c.minute),"minute"===n)break;o&&(l+=Fa(e.c.second))}if("second"===n)break;!o||r&&0===e.c.millisecond||(l+=".",l+=Fa(e.c.millisecond,3))}return s&&(e.isOffsetFixed&&0===e.offset&&!a?l+="Z":e.o<0?(l+="-",l+=Fa(Math.trunc(-e.o/60)),l+=":",l+=Fa(Math.trunc(-e.o%60))):(l+="+",l+=Fa(Math.trunc(e.o/60)),l+=":",l+=Fa(Math.trunc(e.o%60)))),a&&(l+="["+e.zone.ianaName+"]"),l}const rl={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},sl={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},al={ordinal:1,hour:0,minute:0,second:0,millisecond:0},nl=["year","month","day","hour","minute","second","millisecond"],ol=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],ll=["year","ordinal","hour","minute","second","millisecond"];function cl(e){const t={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[e.toLowerCase()];if(!t)throw new ss(e);return t}function dl(e){switch(e.toLowerCase()){case"localweekday":case"localweekdays":return"localWeekday";case"localweeknumber":case"localweeknumbers":return"localWeekNumber";case"localweekyear":case"localweekyears":return"localWeekYear";default:return cl(e)}}function ul(e,t){const i=ra(t.zone,ba.defaultZone);if(!i.isValid)return yl.invalid(Ho(i));const r=Xs.fromObject(t);let s,a;if(Ba(e.year))s=ba.now();else{for(const t of nl)Ba(e[t])&&(e[t]=rl[t]);const t=Ca(e)||Za(e);if(t)return yl.invalid(t);const r=function(e){if(void 0===fl&&(fl=ba.now()),"iana"!==e.type)return e.offset(fl);const t=e.name;let i=pl.get(t);return void 0===i&&(i=e.offset(fl),pl.set(t,i)),i}(i);[s,a]=Qo(e,r,i)}return new yl({ts:s,zone:i,loc:r,o:a})}function hl(e,t,i){const r=!!Ba(i.round)||i.round,s=Ba(i.rounding)?"trunc":i.rounding,a=(e,a)=>{e=Wa(e,r||i.calendary?0:2,i.calendary?"round":s);return t.loc.clone(i).relFormatter(i).format(e,a)},n=r=>i.calendary?t.hasSame(e,r)?0:t.startOf(r).diff(e.startOf(r),r).get(r):t.diff(e,r).get(r);if(i.unit)return a(n(i.unit),i.unit);for(const e of i.units){const t=n(e);if(Math.abs(t)>=1)return a(t,e)}return a(e>t?-0:0,i.units[i.units.length-1])}function ml(e){let t,i={};return e.length>0&&"object"==typeof e[e.length-1]?(i=e[e.length-1],t=Array.from(e).slice(0,e.length-1)):t=Array.from(e),[i,t]}let fl;const pl=new Map;class yl{constructor(e){const t=e.zone||ba.defaultZone;let i=e.invalid||(Number.isNaN(e.ts)?new ga("invalid input"):null)||(t.isValid?null:Ho(t));this.ts=Ba(e.ts)?ba.now():e.ts;let r=null,s=null;if(!i){if(e.old&&e.old.ts===this.ts&&e.old.zone.equals(t))[r,s]=[e.old.c,e.old.o];else{const a=Ua(e.o)&&!e.old?e.o:t.offset(this.ts);r=Jo(this.ts,a),i=Number.isNaN(r.year)?new ga("invalid input"):null,r=i?null:r,s=i?null:a}}this._zone=t,this.loc=e.loc||Xs.create(),this.invalid=i,this.weekData=null,this.localWeekData=null,this.c=r,this.o=s,this.isLuxonDateTime=!0}static now(){return new yl({})}static local(){const[e,t]=ml(arguments),[i,r,s,a,n,o,l]=t;return ul({year:i,month:r,day:s,hour:a,minute:n,second:o,millisecond:l},e)}static utc(){const[e,t]=ml(arguments),[i,r,s,a,n,o,l]=t;return e.zone=ta.utcInstance,ul({year:i,month:r,day:s,hour:a,minute:n,second:o,millisecond:l},e)}static fromJSDate(e,t={}){const i=function(e){return"[object Date]"===Object.prototype.toString.call(e)}(e)?e.valueOf():NaN;if(Number.isNaN(i))return yl.invalid("invalid input");const r=ra(t.zone,ba.defaultZone);return r.isValid?new yl({ts:i,zone:r,loc:Xs.fromObject(t)}):yl.invalid(Ho(r))}static fromMillis(e,t={}){if(Ua(e))return e<-Po||e>Po?yl.invalid("Timestamp out of range"):new yl({ts:e,zone:ra(t.zone,ba.defaultZone),loc:Xs.fromObject(t)});throw new as(`fromMillis requires a numerical input, but received a ${typeof e} with value ${e}`)}static fromSeconds(e,t={}){if(Ua(e))return new yl({ts:1e3*e,zone:ra(t.zone,ba.defaultZone),loc:Xs.fromObject(t)});throw new as("fromSeconds requires a numerical input")}static fromObject(e,t={}){e=e||{};const i=ra(t.zone,ba.defaultZone);if(!i.isValid)return yl.invalid(Ho(i));const r=Xs.fromObject(t),s=sn(e,dl),{minDaysInFirstWeek:a,startOfWeek:n}=$a(s,r),o=ba.now(),l=Ba(t.specificOffset)?i.offset(o):t.specificOffset,c=!Ba(s.ordinal),d=!Ba(s.year),u=!Ba(s.month)||!Ba(s.day),h=d||u,m=s.weekYear||s.weekNumber;if((h||c)&&m)throw new rs("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(u&&c)throw new rs("Can't mix ordinal dates with month/day");const f=m||s.weekday&&!h;let p,y,b=Jo(o,l);f?(p=ol,y=sl,b=_a(b,a,n)):c?(p=ll,y=al,b=Oa(b)):(p=nl,y=rl);let g=!1;for(const e of p){Ba(s[e])?s[e]=g?y[e]:b[e]:g=!0}const w=f?function(e,t=4,i=1){const r=Ga(e.weekYear),s=Ia(e.weekNumber,1,Ka(e.weekYear,t,i)),a=Ia(e.weekday,1,7);return r?s?!a&&ka("weekday",e.weekday):ka("week",e.weekNumber):ka("weekYear",e.weekYear)}(s,a,n):c?function(e){const t=Ga(e.year),i=Ia(e.ordinal,1,Ra(e.year));return t?!i&&ka("ordinal",e.ordinal):ka("year",e.year)}(s):Ca(s),v=w||Za(s);if(v)return yl.invalid(v);const k=f?Na(s,a,n):c?Aa(s):s,[x,T]=Qo(k,l,i),M=new yl({ts:x,zone:i,o:T,loc:r});return s.weekday&&h&&e.weekday!==M.weekday?yl.invalid("mismatched weekday",`you can't specify both a weekday of ${s.weekday} and a date of ${M.toISO()}`):M.isValid?M:yl.invalid(M.invalid)}static fromISO(e,t={}){const[i,r]=function(e){return _n(e,[Kn,io],[Xn,ro],[eo,so],[to,ao])}(e);return Xo(i,r,t,"ISO 8601",e)}static fromRFC2822(e,t={}){const[i,r]=function(e){return _n(function(e){return e.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}(e),[Hn,Wn])}(e);return Xo(i,r,t,"RFC 2822",e)}static fromHTTP(e,t={}){const[i,r]=function(e){return _n(e,[qn,Jn],[Rn,Jn],[Yn,Qn])}(e);return Xo(i,r,t,"HTTP",t)}static fromFormat(e,t,i={}){if(Ba(e)||Ba(t))throw new as("fromFormat requires an input string and a format");const{locale:r=null,numberingSystem:s=null}=i,a=Xs.fromOpts({locale:r,numberingSystem:s,defaultToEN:!0}),[n,o,l,c]=function(e,t,i){const{result:r,zone:s,specificOffset:a,invalidReason:n}=Io(e,t,i);return[r,s,a,n]}(a,e,t);return c?yl.invalid(c):Xo(n,o,i,`format ${t}`,e,l)}static fromString(e,t,i={}){return yl.fromFormat(e,t,i)}static fromSQL(e,t={}){const[i,r]=function(e){return _n(e,[oo,io],[lo,co])}(e);return Xo(i,r,t,"SQL",e)}static invalid(e,t=null){if(!e)throw new as("need to specify a reason the DateTime is invalid");const i=e instanceof ga?e:new ga(e,t);if(ba.throwOnInvalid)throw new es(i);return new yl({invalid:i})}static isDateTime(e){return e&&e.isLuxonDateTime||!1}static parseFormatForOpts(e,t={}){const i=Fo(e,Xs.fromObject(t));return i?i.map(e=>e?e.val:null).join(""):null}static expandFormat(e,t={}){return jo(xn.parseFormat(e),Xs.fromObject(t)).map(e=>e.val).join("")}static resetCache(){fl=void 0,pl.clear()}get(e){return this[e]}get isValid(){return null===this.invalid}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?Wo(this).weekYear:NaN}get weekNumber(){return this.isValid?Wo(this).weekNumber:NaN}get weekday(){return this.isValid?Wo(this).weekday:NaN}get isWeekend(){return this.isValid&&this.loc.getWeekendDays().includes(this.weekday)}get localWeekday(){return this.isValid?qo(this).weekday:NaN}get localWeekNumber(){return this.isValid?qo(this).weekNumber:NaN}get localWeekYear(){return this.isValid?qo(this).weekYear:NaN}get ordinal(){return this.isValid?Oa(this.c).ordinal:NaN}get monthShort(){return this.isValid?_o.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?_o.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?_o.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?_o.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return!this.isOffsetFixed&&(this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset)}getPossibleOffsets(){if(!this.isValid||this.isOffsetFixed)return[this];const e=864e5,t=6e4,i=Ja(this.c),r=this.zone.offset(i-e),s=this.zone.offset(i+e),a=this.zone.offset(i-r*t),n=this.zone.offset(i-s*t);if(a===n)return[this];const o=i-a*t,l=i-n*t,c=Jo(o,a),d=Jo(l,n);return c.hour===d.hour&&c.minute===d.minute&&c.second===d.second&&c.millisecond===d.millisecond?[Ro(this,{ts:o}),Ro(this,{ts:l})]:[this]}get isInLeapYear(){return qa(this.year)}get daysInMonth(){return Ya(this.year,this.month)}get daysInYear(){return this.isValid?Ra(this.year):NaN}get weeksInWeekYear(){return this.isValid?Ka(this.weekYear):NaN}get weeksInLocalWeekYear(){return this.isValid?Ka(this.localWeekYear,this.loc.getMinDaysInFirstWeek(),this.loc.getStartOfWeek()):NaN}resolvedLocaleOptions(e={}){const{locale:t,numberingSystem:i,calendar:r}=xn.create(this.loc.clone(e),e).resolvedOptions(this);return{locale:t,numberingSystem:i,outputCalendar:r}}toUTC(e=0,t={}){return this.setZone(ta.instance(e),t)}toLocal(){return this.setZone(ba.defaultZone)}setZone(e,{keepLocalTime:t=!1,keepCalendarTime:i=!1}={}){if((e=ra(e,ba.defaultZone)).equals(this.zone))return this;if(e.isValid){let r=this.ts;if(t||i){const t=e.offset(this.ts),i=this.toObject();[r]=Qo(i,t,e)}return Ro(this,{ts:r,zone:e})}return yl.invalid(Ho(e))}reconfigure({locale:e,numberingSystem:t,outputCalendar:i}={}){return Ro(this,{loc:this.loc.clone({locale:e,numberingSystem:t,outputCalendar:i})})}setLocale(e){return this.reconfigure({locale:e})}set(e){if(!this.isValid)return this;const t=sn(e,dl),{minDaysInFirstWeek:i,startOfWeek:r}=$a(t,this.loc),s=!Ba(t.weekYear)||!Ba(t.weekNumber)||!Ba(t.weekday),a=!Ba(t.ordinal),n=!Ba(t.year),o=!Ba(t.month)||!Ba(t.day),l=n||o,c=t.weekYear||t.weekNumber;if((l||a)&&c)throw new rs("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(o&&a)throw new rs("Can't mix ordinal dates with month/day");let d;s?d=Na({..._a(this.c,i,r),...t},i,r):Ba(t.ordinal)?(d={...this.toObject(),...t},Ba(t.day)&&(d.day=Math.min(Ya(d.year,d.month),d.day))):d=Aa({...Oa(this.c),...t});const[u,h]=Qo(d,this.o,this.zone);return Ro(this,{ts:u,o:h})}plus(e){if(!this.isValid)return this;return Ro(this,Ko(this,To.fromDurationLike(e)))}minus(e){if(!this.isValid)return this;return Ro(this,Ko(this,To.fromDurationLike(e).negate()))}startOf(e,{useLocaleWeeks:t=!1}={}){if(!this.isValid)return this;const i={},r=To.normalizeUnit(e);switch(r){case"years":i.month=1;case"quarters":case"months":i.day=1;case"weeks":case"days":i.hour=0;case"hours":i.minute=0;case"minutes":i.second=0;case"seconds":i.millisecond=0}if("weeks"===r)if(t){const e=this.loc.getStartOfWeek(),{weekday:t}=this;t=3&&(o+="T"),o+=il(this,n,t,i,r,s,a),o}toISODate({format:e="extended",precision:t="day"}={}){return this.isValid?tl(this,"extended"===e,cl(t)):null}toISOWeekDate(){return el(this,"kkkk-'W'WW-c")}toISOTime({suppressMilliseconds:e=!1,suppressSeconds:t=!1,includeOffset:i=!0,includePrefix:r=!1,extendedZone:s=!1,format:a="extended",precision:n="milliseconds"}={}){if(!this.isValid)return null;return n=cl(n),(r&&nl.indexOf(n)>=3?"T":"")+il(this,"extended"===a,t,e,i,s,n)}toRFC2822(){return el(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ",!1)}toHTTP(){return el(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss 'GMT'")}toSQLDate(){return this.isValid?tl(this,!0):null}toSQLTime({includeOffset:e=!0,includeZone:t=!1,includeOffsetSpace:i=!0}={}){let r="HH:mm:ss.SSS";return(t||e)&&(i&&(r+=" "),t?r+="z":e&&(r+="ZZ")),el(this,r,!0)}toSQL(e={}){return this.isValid?`${this.toSQLDate()} ${this.toSQLTime(e)}`:null}toString(){return this.isValid?this.toISO():Lo}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`:`DateTime { Invalid, reason: ${this.invalidReason} }`}valueOf(){return this.toMillis()}toMillis(){return this.isValid?this.ts:NaN}toSeconds(){return this.isValid?this.ts/1e3:NaN}toUnixInteger(){return this.isValid?Math.floor(this.ts/1e3):NaN}toJSON(){return this.toISO()}toBSON(){return this.toJSDate()}toObject(e={}){if(!this.isValid)return{};const t={...this.c};return e.includeConfig&&(t.outputCalendar=this.outputCalendar,t.numberingSystem=this.loc.numberingSystem,t.locale=this.loc.locale),t}toJSDate(){return new Date(this.isValid?this.ts:NaN)}diff(e,t="milliseconds",i={}){if(!this.isValid||!e.isValid)return To.invalid("created by diffing an invalid DateTime");const r={locale:this.locale,numberingSystem:this.numberingSystem,...i},s=(o=t,Array.isArray(o)?o:[o]).map(To.normalizeUnit),a=e.valueOf()>this.valueOf(),n=Oo(a?this:e,a?e:this,s,r);var o;return a?n.negate():n}diffNow(e="milliseconds",t={}){return this.diff(yl.now(),e,t)}until(e){return this.isValid?So.fromDateTimes(this,e):this}hasSame(e,t,i){if(!this.isValid)return!1;const r=e.valueOf(),s=this.setZone(e.zone,{keepLocalTime:!0});return s.startOf(t,i)<=r&&r<=s.endOf(t,i)}equals(e){return this.isValid&&e.isValid&&this.valueOf()===e.valueOf()&&this.zone.equals(e.zone)&&this.loc.equals(e.loc)}toRelative(e={}){if(!this.isValid)return null;const t=e.base||yl.fromObject({},{zone:this.zone}),i=e.padding?thise.valueOf(),Math.min)}static max(...e){if(!e.every(yl.isDateTime))throw new as("max requires all arguments be DateTimes");return Da(e,e=>e.valueOf(),Math.max)}static fromFormatExplain(e,t,i={}){const{locale:r=null,numberingSystem:s=null}=i;return Io(Xs.fromOpts({locale:r,numberingSystem:s,defaultToEN:!0}),e,t)}static fromStringExplain(e,t,i={}){return yl.fromFormatExplain(e,t,i)}static buildFormatParser(e,t={}){const{locale:i=null,numberingSystem:r=null}=t,s=Xs.fromOpts({locale:i,numberingSystem:r,defaultToEN:!0});return new zo(s,e)}static fromFormatParser(e,t,i={}){if(Ba(e)||Ba(t))throw new as("fromFormatParser requires an input string and a format parser");const{locale:r=null,numberingSystem:s=null}=i,a=Xs.fromOpts({locale:r,numberingSystem:s,defaultToEN:!0});if(!a.equals(t.locale))throw new as(`fromFormatParser called with a locale of ${a}, but the format parser was created for ${t.locale}`);const{result:n,zone:o,specificOffset:l,invalidReason:c}=t.explainFromTokens(e);return c?yl.invalid(c):Xo(n,o,i,`format ${t.format}`,e,l)}static get DATE_SHORT(){return ds}static get DATE_MED(){return us}static get DATE_MED_WITH_WEEKDAY(){return hs}static get DATE_FULL(){return ms}static get DATE_HUGE(){return fs}static get TIME_SIMPLE(){return ps}static get TIME_WITH_SECONDS(){return ys}static get TIME_WITH_SHORT_OFFSET(){return bs}static get TIME_WITH_LONG_OFFSET(){return gs}static get TIME_24_SIMPLE(){return ws}static get TIME_24_WITH_SECONDS(){return vs}static get TIME_24_WITH_SHORT_OFFSET(){return ks}static get TIME_24_WITH_LONG_OFFSET(){return xs}static get DATETIME_SHORT(){return Ts}static get DATETIME_SHORT_WITH_SECONDS(){return Ms}static get DATETIME_MED(){return Ss}static get DATETIME_MED_WITH_SECONDS(){return _s}static get DATETIME_MED_WITH_WEEKDAY(){return Ns}static get DATETIME_FULL(){return Os}static get DATETIME_FULL_WITH_SECONDS(){return As}static get DATETIME_HUGE(){return $s}static get DATETIME_HUGE_WITH_SECONDS(){return Cs}}function bl(e){if(yl.isDateTime(e))return e;if(e&&e.valueOf&&Ua(e.valueOf()))return yl.fromJSDate(e);if(e&&"object"==typeof e)return yl.fromObject(e);throw new as(`Unknown datetime argument: ${e}, of type ${typeof e}`)}console.info("%c CLOCK-WEATHER-CARD \n%c Version: 2.9.5","color: orange; font-weight: bold; background: black","color: white; font-weight: bold; background: dimgray"),window.customCards=window.customCards||[],window.customCards.push({type:"clock-weather-card",name:"Clock Weather Card",description:"Shows the current date/time in combination with the current weather and an iOS insipired weather forecast."});const gl=(new Map).set(-20,new be(0,60,98)).set(-10,new be(120,162,204)).set(0,new be(164,195,210)).set(10,new be(121,210,179)).set(20,new be(252,245,112)).set(30,new be(255,150,79)).set(40,new be(255,192,159));let wl=class extends se{constructor(){super(),this.forecastSubscriberLock=!1,this.currentDate=yl.now()}static getStubConfig(e,t,i){const r=t.find(e=>{var t;return null!==(t=e.startsWith("weather."))&&void 0!==t?t:i.find(()=>!0)});return r?{entity:r}:{}}getCardSize(){return 3+function(e,t=0){return t<=0?Math.ceil(e):Math.ceil(e/t)*t}(this.config.forecast_rows/2)}setConfig(e){if(!e)throw this.createError("Invalid configuration.");if(!e.entity)throw this.createError('Attribute "entity" must be present.');if(e.forecast_rows&&e.forecast_rows<1)throw this.createError('Attribute "forecast_rows" must be greater than 0.');if(e.time_format&&"24"!==e.time_format.toString()&&"12"!==e.time_format.toString())throw this.createError('Attribute "time_format" must either be "12" or "24".');if(e.hide_today_section&&e.hide_forecast_section)throw this.createError('Attributes "hide_today_section" and "hide_forecast_section" must not enabled at the same time.');this.config=this.mergeConfig(e)}shouldUpdate(e){if(!this.config)return!1;if(e.has("forecasts"))return!0;const t=e.get("hass");if(t){if(t.states[this.config.sun_entity]!==this.hass.states[this.config.sun_entity])return!0}return function(e,t,i){if(t.has("config")||i)return!0;if(e.config.entity){const i=t.get("hass");return!i||i.states[e.config.entity]!==e.hass.states[e.config.entity]}return!1}(this,e,!1)}updated(e){super.updated(e),e.has("config")&&this.subscribeForecastEvents()}render(){if(this.error)return this.error;const e=!this.config.hide_today_section,t=!this.config.hide_forecast_section;return D` {this.handleAction(e)}} .actionHandler=${Te({hasHold:ye(this.config.hold_action),hasDoubleClick:ye(this.config.double_tap_action)})} @@ -199,7 +199,7 @@ const ne=(e,t)=>"method"===t.kind&&t.descriptor&&!("value"in t.descriptor)?{...t `:""}
- `}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.subscribeForecastEvents()}disconnectedCallback(){super.disconnectedCallback(),this.unsubscribeForecastEvents()}willUpdate(e){super.willUpdate(e),this.forecastSubscriber||this.subscribeForecastEvents()}renderToday(){const e=this.getWeather(),t=e.state,i=this.config.show_decimal?this.getCurrentTemperature():Er(this.getCurrentTemperature()),r=e.attributes.temperature_unit,s=this.config.show_decimal?this.getApparentTemperature():Er(this.getApparentTemperature()),a=this.getAqi(),n=this.getAqiBackgroundColor(a),o=this.getAqiTextColor(a),l=Er(this.getCurrentHumidity()),c=this.config.weather_icon_type,d=this.toIcon(t,c,!1,this.getIconAnimationKind()),u=this.localize(`weather.${t}`),h=null!==i?this.toConfiguredTempWithUnit(r,i):null,m=null!==l?`${l}% ${this.localize("misc.humidity")}`:null,f=null!==s?this.toConfiguredTempWithUnit(r,s):null,p=this.localize("misc.feels-like"),y=this.localize("misc.aqi");return D` + `}connectedCallback(){super.connectedCallback(),this.startClock(),this.hasUpdated&&this.subscribeForecastEvents()}disconnectedCallback(){super.disconnectedCallback(),this.stopClock(),this.unsubscribeForecastEvents()}startClock(){this.stopClock(),this.currentDate=yl.now();const e=1e3-this.currentDate.millisecond;this.clockAlignTimer=setTimeout(()=>{this.currentDate=yl.now(),this.clockTimer=setInterval(()=>{this.currentDate=yl.now()},1e3)},e)}stopClock(){clearTimeout(this.clockAlignTimer),clearInterval(this.clockTimer),this.clockAlignTimer=void 0,this.clockTimer=void 0}willUpdate(e){super.willUpdate(e),this.forecastSubscriber||this.subscribeForecastEvents()}renderToday(){const e=this.getWeather(),t=e.state,i=this.config.show_decimal?this.getCurrentTemperature():Er(this.getCurrentTemperature()),r=e.attributes.temperature_unit,s=this.config.show_decimal?this.getApparentTemperature():Er(this.getApparentTemperature()),a=this.getAqi(),n=this.getAqiBackgroundColor(a),o=this.getAqiTextColor(a),l=Er(this.getCurrentHumidity()),c=this.config.weather_icon_type,d=this.toIcon(t,c,!1,this.getIconAnimationKind()),u=this.localize(`weather.${t}`),h=null!==i?this.toConfiguredTempWithUnit(r,i):null,m=null!==l?`${l}% ${this.localize("misc.humidity")}`:null,f=null!==s?this.toConfiguredTempWithUnit(r,s):null,p=this.localize("misc.feels-like"),y=this.localize("misc.aqi");return D` diff --git a/www/community/clock-weather-card/clock-weather-card.js.gz b/www/community/clock-weather-card/clock-weather-card.js.gz index 61e563ea..bcf8238e 100644 Binary files a/www/community/clock-weather-card/clock-weather-card.js.gz and b/www/community/clock-weather-card/clock-weather-card.js.gz differ diff --git a/www/community/ha-treemap-card/treemap-card.js b/www/community/ha-treemap-card/treemap-card.js index 618b7c3a..ae6a96a3 100644 --- a/www/community/ha-treemap-card/treemap-card.js +++ b/www/community/ha-treemap-card/treemap-card.js @@ -3,18 +3,18 @@ * Copyright 2019 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ -const oe = globalThis, ge = oe.ShadowRoot && (oe.ShadyCSS === void 0 || oe.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype, _e = Symbol(), xe = /* @__PURE__ */ new WeakMap(); -let Be = class { +const se = globalThis, $e = se.ShadowRoot && (se.ShadyCSS === void 0 || se.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype, xe = Symbol(), ze = /* @__PURE__ */ new WeakMap(); +let Qe = class { constructor(e, i, n) { - if (this._$cssResult$ = !0, n !== _e) throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead."); + if (this._$cssResult$ = !0, n !== xe) throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead."); this.cssText = e, this.t = i; } get styleSheet() { let e = this.o; const i = this.t; - if (ge && e === void 0) { + if ($e && e === void 0) { const n = i !== void 0 && i.length === 1; - n && (e = xe.get(i)), e === void 0 && ((this.o = e = new CSSStyleSheet()).replaceSync(this.cssText), n && xe.set(i, e)); + n && (e = ze.get(i)), e === void 0 && ((this.o = e = new CSSStyleSheet()).replaceSync(this.cssText), n && ze.set(i, e)); } return e; } @@ -22,33 +22,33 @@ let Be = class { return this.cssText; } }; -const rt = (t) => new Be(typeof t == "string" ? t : t + "", void 0, _e), Fe = (t, ...e) => { +const pt = (t) => new Qe(typeof t == "string" ? t : t + "", void 0, xe), Xe = (t, ...e) => { const i = t.length === 1 ? t[0] : e.reduce(((n, s, o) => n + ((r) => { if (r._$cssResult$ === !0) return r.cssText; if (typeof r == "number") return r; throw Error("Value passed to 'css' function must be a 'css' function result: " + r + ". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security."); })(s) + t[o + 1]), t[0]); - return new Be(i, t, _e); -}, at = (t, e) => { - if (ge) t.adoptedStyleSheets = e.map(((i) => i instanceof CSSStyleSheet ? i : i.styleSheet)); + return new Qe(i, t, xe); +}, gt = (t, e) => { + if ($e) t.adoptedStyleSheets = e.map(((i) => i instanceof CSSStyleSheet ? i : i.styleSheet)); else for (const i of e) { - const n = document.createElement("style"), s = oe.litNonce; + const n = document.createElement("style"), s = se.litNonce; s !== void 0 && n.setAttribute("nonce", s), n.textContent = i.cssText, t.appendChild(n); } -}, we = ge ? (t) => t : (t) => t instanceof CSSStyleSheet ? ((e) => { +}, Ve = $e ? (t) => t : (t) => t instanceof CSSStyleSheet ? ((e) => { let i = ""; for (const n of e.cssRules) i += n.cssText; - return rt(i); + return pt(i); })(t) : t; /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ -const { is: lt, defineProperty: ct, getOwnPropertyDescriptor: ht, getOwnPropertyNames: ut, getOwnPropertySymbols: dt, getPrototypeOf: ft } = Object, E = globalThis, Ae = E.trustedTypes, pt = Ae ? Ae.emptyScript : "", gt = E.reactiveElementPolyfillSupport, J = (t, e) => t, se = { toAttribute(t, e) { +const { is: _t, defineProperty: mt, getOwnPropertyDescriptor: bt, getOwnPropertyNames: vt, getOwnPropertySymbols: yt, getPrototypeOf: $t } = Object, T = globalThis, Ee = T.trustedTypes, xt = Ee ? Ee.emptyScript : "", wt = T.reactiveElementPolyfillSupport, Z = (t, e) => t, le = { toAttribute(t, e) { switch (e) { case Boolean: - t = t ? pt : null; + t = t ? xt : null; break; case Object: case Array: @@ -73,8 +73,8 @@ const { is: lt, defineProperty: ct, getOwnPropertyDescriptor: ht, getOwnProperty } } return i; -} }, me = (t, e) => !lt(t, e), ke = { attribute: !0, type: String, converter: se, reflect: !1, useDefault: !1, hasChanged: me }; -Symbol.metadata ?? (Symbol.metadata = Symbol("metadata")), E.litPropertyMetadata ?? (E.litPropertyMetadata = /* @__PURE__ */ new WeakMap()); +} }, we = (t, e) => !_t(t, e), Te = { attribute: !0, type: String, converter: le, reflect: !1, useDefault: !1, hasChanged: we }; +Symbol.metadata ?? (Symbol.metadata = Symbol("metadata")), T.litPropertyMetadata ?? (T.litPropertyMetadata = /* @__PURE__ */ new WeakMap()); let U = class extends HTMLElement { static addInitializer(e) { this._$Ei(), (this.l ?? (this.l = [])).push(e); @@ -82,14 +82,14 @@ let U = class extends HTMLElement { static get observedAttributes() { return this.finalize(), this._$Eh && [...this._$Eh.keys()]; } - static createProperty(e, i = ke) { + static createProperty(e, i = Te) { if (i.state && (i.attribute = !1), this._$Ei(), this.prototype.hasOwnProperty(e) && ((i = Object.create(i)).wrapped = !0), this.elementProperties.set(e, i), !i.noAccessor) { const n = Symbol(), s = this.getPropertyDescriptor(e, n, i); - s !== void 0 && ct(this.prototype, e, s); + s !== void 0 && mt(this.prototype, e, s); } } static getPropertyDescriptor(e, i, n) { - const { get: s, set: o } = ht(this.prototype, e) ?? { get() { + const { get: s, set: o } = bt(this.prototype, e) ?? { get() { return this[i]; }, set(r) { this[i] = r; @@ -100,17 +100,17 @@ let U = class extends HTMLElement { }, configurable: !0, enumerable: !0 }; } static getPropertyOptions(e) { - return this.elementProperties.get(e) ?? ke; + return this.elementProperties.get(e) ?? Te; } static _$Ei() { - if (this.hasOwnProperty(J("elementProperties"))) return; - const e = ft(this); + if (this.hasOwnProperty(Z("elementProperties"))) return; + const e = $t(this); e.finalize(), e.l !== void 0 && (this.l = [...e.l]), this.elementProperties = new Map(e.elementProperties); } static finalize() { - if (this.hasOwnProperty(J("finalized"))) return; - if (this.finalized = !0, this._$Ei(), this.hasOwnProperty(J("properties"))) { - const i = this.properties, n = [...ut(i), ...dt(i)]; + if (this.hasOwnProperty(Z("finalized"))) return; + if (this.finalized = !0, this._$Ei(), this.hasOwnProperty(Z("properties"))) { + const i = this.properties, n = [...vt(i), ...yt(i)]; for (const s of n) this.createProperty(s, i[s]); } const e = this[Symbol.metadata]; @@ -129,8 +129,8 @@ let U = class extends HTMLElement { const i = []; if (Array.isArray(e)) { const n = new Set(e.flat(1 / 0).reverse()); - for (const s of n) i.unshift(we(s)); - } else e !== void 0 && i.push(we(e)); + for (const s of n) i.unshift(Ve(s)); + } else e !== void 0 && i.push(Ve(e)); return i; } static _$Eu(e, i) { @@ -156,7 +156,7 @@ let U = class extends HTMLElement { } createRenderRoot() { const e = this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions); - return at(e, this.constructor.elementStyles), e; + return gt(e, this.constructor.elementStyles), e; } connectedCallback() { this.renderRoot ?? (this.renderRoot = this.createRenderRoot()), this.enableUpdating(!0), this._$EO?.forEach(((e) => e.hostConnected?.())); @@ -172,14 +172,14 @@ let U = class extends HTMLElement { _$ET(e, i) { const n = this.constructor.elementProperties.get(e), s = this.constructor._$Eu(e, n); if (s !== void 0 && n.reflect === !0) { - const o = (n.converter?.toAttribute !== void 0 ? n.converter : se).toAttribute(i, n.type); + const o = (n.converter?.toAttribute !== void 0 ? n.converter : le).toAttribute(i, n.type); this._$Em = e, o == null ? this.removeAttribute(s) : this.setAttribute(s, o), this._$Em = null; } } _$AK(e, i) { const n = this.constructor, s = n._$Eh.get(e); if (s !== void 0 && this._$Em !== s) { - const o = n.getPropertyOptions(s), r = typeof o.converter == "function" ? { fromAttribute: o.converter } : o.converter?.fromAttribute !== void 0 ? o.converter : se; + const o = n.getPropertyOptions(s), r = typeof o.converter == "function" ? { fromAttribute: o.converter } : o.converter?.fromAttribute !== void 0 ? o.converter : le; this._$Em = s; const a = r.fromAttribute(i, o.type); this[s] = a ?? this._$Ej?.get(s) ?? a, this._$Em = null; @@ -188,7 +188,7 @@ let U = class extends HTMLElement { requestUpdate(e, i, n) { if (e !== void 0) { const s = this.constructor, o = this[e]; - if (n ?? (n = s.getPropertyOptions(e)), !((n.hasChanged ?? me)(o, i) || n.useDefault && n.reflect && o === this._$Ej?.get(e) && !this.hasAttribute(s._$Eu(e, n)))) return; + if (n ?? (n = s.getPropertyOptions(e)), !((n.hasChanged ?? we)(o, i) || n.useDefault && n.reflect && o === this._$Ej?.get(e) && !this.hasAttribute(s._$Eu(e, n)))) return; this.C(e, i, n); } this.isUpdatePending === !1 && (this._$ES = this._$EP()); @@ -256,59 +256,59 @@ let U = class extends HTMLElement { firstUpdated(e) { } }; -U.elementStyles = [], U.shadowRootOptions = { mode: "open" }, U[J("elementProperties")] = /* @__PURE__ */ new Map(), U[J("finalized")] = /* @__PURE__ */ new Map(), gt?.({ ReactiveElement: U }), (E.reactiveElementVersions ?? (E.reactiveElementVersions = [])).push("2.1.1"); +U.elementStyles = [], U.shadowRootOptions = { mode: "open" }, U[Z("elementProperties")] = /* @__PURE__ */ new Map(), U[Z("finalized")] = /* @__PURE__ */ new Map(), wt?.({ ReactiveElement: U }), (T.reactiveElementVersions ?? (T.reactiveElementVersions = [])).push("2.1.1"); /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ -const Z = globalThis, re = Z.trustedTypes, Ce = re ? re.createPolicy("lit-html", { createHTML: (t) => t }) : void 0, je = "$lit$", V = `lit$${Math.random().toFixed(9).slice(2)}$`, qe = "?" + V, _t = `<${qe}>`, I = document, Q = () => I.createComment(""), K = (t) => t === null || typeof t != "object" && typeof t != "function", be = Array.isArray, mt = (t) => be(t) || typeof t?.[Symbol.iterator] == "function", ue = `[ -\f\r]`, W = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, Se = /-->/g, ze = />/g, P = RegExp(`>|${ue}(?:([^\\s"'>=/]+)(${ue}*=${ue}*(?:[^ -\f\r"'\`<>=]|("|')|))|$)`, "g"), Me = /'/g, Ve = /"/g, We = /^(?:script|style|textarea|title)$/i, Ge = (t) => (e, ...i) => ({ _$litType$: t, strings: e, values: i }), x = Ge(1), D = Ge(2), j = Symbol.for("lit-noChange"), _ = Symbol.for("lit-nothing"), Ee = /* @__PURE__ */ new WeakMap(), O = I.createTreeWalker(I, 129); -function Ye(t, e) { - if (!be(t) || !t.hasOwnProperty("raw")) throw Error("invalid template strings array"); - return Ce !== void 0 ? Ce.createHTML(e) : e; +const Q = globalThis, ce = Q.trustedTypes, Pe = ce ? ce.createPolicy("lit-html", { createHTML: (t) => t }) : void 0, Ke = "$lit$", E = `lit$${Math.random().toFixed(9).slice(2)}$`, et = "?" + E, kt = `<${et}>`, I = document, ee = () => I.createComment(""), te = (t) => t === null || typeof t != "object" && typeof t != "function", ke = Array.isArray, At = (t) => ke(t) || typeof t?.[Symbol.iterator] == "function", ge = `[ +\f\r]`, G = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, Ne = /-->/g, Oe = />/g, N = RegExp(`>|${ge}(?:([^\\s"'>=/]+)(${ge}*=${ge}*(?:[^ +\f\r"'\`<>=]|("|')|))|$)`, "g"), De = /'/g, Ie = /"/g, tt = /^(?:script|style|textarea|title)$/i, it = (t) => (e, ...i) => ({ _$litType$: t, strings: e, values: i }), $ = it(1), O = it(2), q = Symbol.for("lit-noChange"), _ = Symbol.for("lit-nothing"), He = /* @__PURE__ */ new WeakMap(), D = I.createTreeWalker(I, 129); +function nt(t, e) { + if (!ke(t) || !t.hasOwnProperty("raw")) throw Error("invalid template strings array"); + return Pe !== void 0 ? Pe.createHTML(e) : e; } -const bt = (t, e) => { +const Ct = (t, e) => { const i = t.length - 1, n = []; - let s, o = e === 2 ? "" : e === 3 ? "" : "", r = W; + let s, o = e === 2 ? "" : e === 3 ? "" : "", r = G; for (let a = 0; a < i; a++) { const l = t[a]; let h, c, u = -1, f = 0; - for (; f < l.length && (r.lastIndex = f, c = r.exec(l), c !== null); ) f = r.lastIndex, r === W ? c[1] === "!--" ? r = Se : c[1] !== void 0 ? r = ze : c[2] !== void 0 ? (We.test(c[2]) && (s = RegExp("" ? (r = s ?? W, u = -1) : c[1] === void 0 ? u = -2 : (u = r.lastIndex - c[2].length, h = c[1], r = c[3] === void 0 ? P : c[3] === '"' ? Ve : Me) : r === Ve || r === Me ? r = P : r === Se || r === ze ? r = W : (r = P, s = void 0); - const d = r === P && t[a + 1].startsWith("/>") ? " " : ""; - o += r === W ? l + _t : u >= 0 ? (n.push(h), l.slice(0, u) + je + l.slice(u) + V + d) : l + V + (u === -2 ? a : d); + for (; f < l.length && (r.lastIndex = f, c = r.exec(l), c !== null); ) f = r.lastIndex, r === G ? c[1] === "!--" ? r = Ne : c[1] !== void 0 ? r = Oe : c[2] !== void 0 ? (tt.test(c[2]) && (s = RegExp("" ? (r = s ?? G, u = -1) : c[1] === void 0 ? u = -2 : (u = r.lastIndex - c[2].length, h = c[1], r = c[3] === void 0 ? N : c[3] === '"' ? Ie : De) : r === Ie || r === De ? r = N : r === Ne || r === Oe ? r = G : (r = N, s = void 0); + const d = r === N && t[a + 1].startsWith("/>") ? " " : ""; + o += r === G ? l + kt : u >= 0 ? (n.push(h), l.slice(0, u) + Ke + l.slice(u) + E + d) : l + E + (u === -2 ? a : d); } - return [Ye(t, o + (t[i] || "") + (e === 2 ? "" : e === 3 ? "" : "")), n]; + return [nt(t, o + (t[i] || "") + (e === 2 ? "" : e === 3 ? "" : "")), n]; }; -class ee { +class ie { constructor({ strings: e, _$litType$: i }, n) { let s; this.parts = []; let o = 0, r = 0; - const a = e.length - 1, l = this.parts, [h, c] = bt(e, i); - if (this.el = ee.createElement(h, n), O.currentNode = this.el.content, i === 2 || i === 3) { + const a = e.length - 1, l = this.parts, [h, c] = Ct(e, i); + if (this.el = ie.createElement(h, n), D.currentNode = this.el.content, i === 2 || i === 3) { const u = this.el.content.firstChild; u.replaceWith(...u.childNodes); } - for (; (s = O.nextNode()) !== null && l.length < a; ) { + for (; (s = D.nextNode()) !== null && l.length < a; ) { if (s.nodeType === 1) { - if (s.hasAttributes()) for (const u of s.getAttributeNames()) if (u.endsWith(je)) { - const f = c[r++], d = s.getAttribute(u).split(V), p = /([.?@])?(.*)/.exec(f); - l.push({ type: 1, index: o, name: p[2], strings: d, ctor: p[1] === "." ? yt : p[1] === "?" ? $t : p[1] === "@" ? xt : ae }), s.removeAttribute(u); - } else u.startsWith(V) && (l.push({ type: 6, index: o }), s.removeAttribute(u)); - if (We.test(s.tagName)) { - const u = s.textContent.split(V), f = u.length - 1; + if (s.hasAttributes()) for (const u of s.getAttributeNames()) if (u.endsWith(Ke)) { + const f = c[r++], d = s.getAttribute(u).split(E), g = /([.?@])?(.*)/.exec(f); + l.push({ type: 1, index: o, name: g[2], strings: d, ctor: g[1] === "." ? Mt : g[1] === "?" ? zt : g[1] === "@" ? Vt : ue }), s.removeAttribute(u); + } else u.startsWith(E) && (l.push({ type: 6, index: o }), s.removeAttribute(u)); + if (tt.test(s.tagName)) { + const u = s.textContent.split(E), f = u.length - 1; if (f > 0) { - s.textContent = re ? re.emptyScript : ""; - for (let d = 0; d < f; d++) s.append(u[d], Q()), O.nextNode(), l.push({ type: 2, index: ++o }); - s.append(u[f], Q()); + s.textContent = ce ? ce.emptyScript : ""; + for (let d = 0; d < f; d++) s.append(u[d], ee()), D.nextNode(), l.push({ type: 2, index: ++o }); + s.append(u[f], ee()); } } - } else if (s.nodeType === 8) if (s.data === qe) l.push({ type: 2, index: o }); + } else if (s.nodeType === 8) if (s.data === et) l.push({ type: 2, index: o }); else { let u = -1; - for (; (u = s.data.indexOf(V, u + 1)) !== -1; ) l.push({ type: 7, index: o }), u += V.length - 1; + for (; (u = s.data.indexOf(E, u + 1)) !== -1; ) l.push({ type: 7, index: o }), u += E.length - 1; } o++; } @@ -318,13 +318,13 @@ class ee { return n.innerHTML = e, n; } } -function q(t, e, i = t, n) { - if (e === j) return e; +function W(t, e, i = t, n) { + if (e === q) return e; let s = n !== void 0 ? i._$Co?.[n] : i._$Cl; - const o = K(e) ? void 0 : e._$litDirective$; - return s?.constructor !== o && (s?._$AO?.(!1), o === void 0 ? s = void 0 : (s = new o(t), s._$AT(t, i, n)), n !== void 0 ? (i._$Co ?? (i._$Co = []))[n] = s : i._$Cl = s), s !== void 0 && (e = q(t, s._$AS(t, e.values), s, n)), e; + const o = te(e) ? void 0 : e._$litDirective$; + return s?.constructor !== o && (s?._$AO?.(!1), o === void 0 ? s = void 0 : (s = new o(t), s._$AT(t, i, n)), n !== void 0 ? (i._$Co ?? (i._$Co = []))[n] = s : i._$Cl = s), s !== void 0 && (e = W(t, s._$AS(t, e.values), s, n)), e; } -class vt { +class St { constructor(e, i) { this._$AV = [], this._$AN = void 0, this._$AD = e, this._$AM = i; } @@ -336,23 +336,23 @@ class vt { } u(e) { const { el: { content: i }, parts: n } = this._$AD, s = (e?.creationScope ?? I).importNode(i, !0); - O.currentNode = s; - let o = O.nextNode(), r = 0, a = 0, l = n[0]; + D.currentNode = s; + let o = D.nextNode(), r = 0, a = 0, l = n[0]; for (; l !== void 0; ) { if (r === l.index) { let h; - l.type === 2 ? h = new te(o, o.nextSibling, this, e) : l.type === 1 ? h = new l.ctor(o, l.name, l.strings, this, e) : l.type === 6 && (h = new wt(o, this, e)), this._$AV.push(h), l = n[++a]; + l.type === 2 ? h = new ne(o, o.nextSibling, this, e) : l.type === 1 ? h = new l.ctor(o, l.name, l.strings, this, e) : l.type === 6 && (h = new Et(o, this, e)), this._$AV.push(h), l = n[++a]; } - r !== l?.index && (o = O.nextNode(), r++); + r !== l?.index && (o = D.nextNode(), r++); } - return O.currentNode = I, s; + return D.currentNode = I, s; } p(e) { let i = 0; for (const n of this._$AV) n !== void 0 && (n.strings !== void 0 ? (n._$AI(e, n, i), i += n.strings.length - 2) : n._$AI(e[i])), i++; } } -class te { +class ne { get _$AU() { return this._$AM?._$AU ?? this._$Cv; } @@ -371,7 +371,7 @@ class te { return this._$AB; } _$AI(e, i = this) { - e = q(this, e, i), K(e) ? e === _ || e == null || e === "" ? (this._$AH !== _ && this._$AR(), this._$AH = _) : e !== this._$AH && e !== j && this._(e) : e._$litType$ !== void 0 ? this.$(e) : e.nodeType !== void 0 ? this.T(e) : mt(e) ? this.k(e) : this._(e); + e = W(this, e, i), te(e) ? e === _ || e == null || e === "" ? (this._$AH !== _ && this._$AR(), this._$AH = _) : e !== this._$AH && e !== q && this._(e) : e._$litType$ !== void 0 ? this.$(e) : e.nodeType !== void 0 ? this.T(e) : At(e) ? this.k(e) : this._(e); } O(e) { return this._$AA.parentNode.insertBefore(e, this._$AB); @@ -380,25 +380,25 @@ class te { this._$AH !== e && (this._$AR(), this._$AH = this.O(e)); } _(e) { - this._$AH !== _ && K(this._$AH) ? this._$AA.nextSibling.data = e : this.T(I.createTextNode(e)), this._$AH = e; + this._$AH !== _ && te(this._$AH) ? this._$AA.nextSibling.data = e : this.T(I.createTextNode(e)), this._$AH = e; } $(e) { - const { values: i, _$litType$: n } = e, s = typeof n == "number" ? this._$AC(e) : (n.el === void 0 && (n.el = ee.createElement(Ye(n.h, n.h[0]), this.options)), n); + const { values: i, _$litType$: n } = e, s = typeof n == "number" ? this._$AC(e) : (n.el === void 0 && (n.el = ie.createElement(nt(n.h, n.h[0]), this.options)), n); if (this._$AH?._$AD === s) this._$AH.p(i); else { - const o = new vt(s, this), r = o.u(this.options); + const o = new St(s, this), r = o.u(this.options); o.p(i), this.T(r), this._$AH = o; } } _$AC(e) { - let i = Ee.get(e.strings); - return i === void 0 && Ee.set(e.strings, i = new ee(e)), i; + let i = He.get(e.strings); + return i === void 0 && He.set(e.strings, i = new ie(e)), i; } k(e) { - be(this._$AH) || (this._$AH = [], this._$AR()); + ke(this._$AH) || (this._$AH = [], this._$AR()); const i = this._$AH; let n, s = 0; - for (const o of e) s === i.length ? i.push(n = new te(this.O(Q()), this.O(Q()), this, this.options)) : n = i[s], n._$AI(o), s++; + for (const o of e) s === i.length ? i.push(n = new ne(this.O(ee()), this.O(ee()), this, this.options)) : n = i[s], n._$AI(o), s++; s < i.length && (this._$AR(n && n._$AB.nextSibling, s), i.length = s); } _$AR(e = this._$AA.nextSibling, i) { @@ -411,7 +411,7 @@ class te { this._$AM === void 0 && (this._$Cv = e, this._$AP?.(e)); } } -class ae { +class ue { get tagName() { return this.element.tagName; } @@ -424,11 +424,11 @@ class ae { _$AI(e, i = this, n, s) { const o = this.strings; let r = !1; - if (o === void 0) e = q(this, e, i, 0), r = !K(e) || e !== this._$AH && e !== j, r && (this._$AH = e); + if (o === void 0) e = W(this, e, i, 0), r = !te(e) || e !== this._$AH && e !== q, r && (this._$AH = e); else { const a = e; let l, h; - for (e = o[0], l = 0; l < o.length - 1; l++) h = q(this, a[n + l], i, l), h === j && (h = this._$AH[l]), r || (r = !K(h) || h !== this._$AH[l]), h === _ ? e = _ : e !== _ && (e += (h ?? "") + o[l + 1]), this._$AH[l] = h; + for (e = o[0], l = 0; l < o.length - 1; l++) h = W(this, a[n + l], i, l), h === q && (h = this._$AH[l]), r || (r = !te(h) || h !== this._$AH[l]), h === _ ? e = _ : e !== _ && (e += (h ?? "") + o[l + 1]), this._$AH[l] = h; } r && !s && this.j(e); } @@ -436,7 +436,7 @@ class ae { e === _ ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, e ?? ""); } } -class yt extends ae { +class Mt extends ue { constructor() { super(...arguments), this.type = 3; } @@ -444,7 +444,7 @@ class yt extends ae { this.element[this.name] = e === _ ? void 0 : e; } } -class $t extends ae { +class zt extends ue { constructor() { super(...arguments), this.type = 4; } @@ -452,12 +452,12 @@ class $t extends ae { this.element.toggleAttribute(this.name, !!e && e !== _); } } -class xt extends ae { +class Vt extends ue { constructor(e, i, n, s, o) { super(e, i, n, s, o), this.type = 5; } _$AI(e, i = this) { - if ((e = q(this, e, i, 0) ?? _) === j) return; + if ((e = W(this, e, i, 0) ?? _) === q) return; const n = this._$AH, s = e === _ && n !== _ || e.capture !== n.capture || e.once !== n.once || e.passive !== n.passive, o = e !== _ && (n === _ || s); s && this.element.removeEventListener(this.name, this, n), o && this.element.addEventListener(this.name, this, e), this._$AH = e; } @@ -465,7 +465,7 @@ class xt extends ae { typeof this._$AH == "function" ? this._$AH.call(this.options?.host ?? this.element, e) : this._$AH.handleEvent(e); } } -class wt { +class Et { constructor(e, i, n) { this.element = e, this.type = 6, this._$AN = void 0, this._$AM = i, this.options = n; } @@ -473,17 +473,17 @@ class wt { return this._$AM._$AU; } _$AI(e) { - q(this, e); + W(this, e); } } -const At = Z.litHtmlPolyfillSupport; -At?.(ee, te), (Z.litHtmlVersions ?? (Z.litHtmlVersions = [])).push("3.3.1"); -const kt = (t, e, i) => { +const Tt = Q.litHtmlPolyfillSupport; +Tt?.(ie, ne), (Q.litHtmlVersions ?? (Q.litHtmlVersions = [])).push("3.3.1"); +const Pt = (t, e, i) => { const n = i?.renderBefore ?? e; let s = n._$litPart$; if (s === void 0) { const o = i?.renderBefore ?? null; - n._$litPart$ = s = new te(e.insertBefore(Q(), o), o, void 0, i ?? {}); + n._$litPart$ = s = new ne(e.insertBefore(ee(), o), o, void 0, i ?? {}); } return s._$AI(t), s; }; @@ -504,7 +504,7 @@ class B extends U { } update(e) { const i = this.render(); - this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(e), this._$Do = kt(i, this.renderRoot, this.renderOptions); + this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(e), this._$Do = Pt(i, this.renderRoot, this.renderOptions); } connectedCallback() { super.connectedCallback(), this._$Do?.setConnected(!0); @@ -513,19 +513,19 @@ class B extends U { super.disconnectedCallback(), this._$Do?.setConnected(!1); } render() { - return j; + return q; } } B._$litElement$ = !0, B.finalized = !0, X.litElementHydrateSupport?.({ LitElement: B }); -const Ct = X.litElementPolyfillSupport; -Ct?.({ LitElement: B }); +const Nt = X.litElementPolyfillSupport; +Nt?.({ LitElement: B }); (X.litElementVersions ?? (X.litElementVersions = [])).push("4.2.1"); /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ -const Je = (t) => (e, i) => { +const ot = (t) => (e, i) => { i !== void 0 ? i.addInitializer((() => { customElements.define(t, e); })) : customElements.define(t, e); @@ -535,7 +535,7 @@ const Je = (t) => (e, i) => { * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ -const St = { attribute: !0, type: String, converter: se, reflect: !1, hasChanged: me }, zt = (t = St, e, i) => { +const Ot = { attribute: !0, type: String, converter: le, reflect: !1, hasChanged: we }, Dt = (t = Ot, e, i) => { const { kind: n, metadata: s } = i; let o = globalThis.litPropertyMetadata.get(s); if (o === void 0 && globalThis.litPropertyMetadata.set(s, o = /* @__PURE__ */ new Map()), n === "setter" && ((t = Object.create(t)).wrapped = !0), o.set(i.name, t), n === "accessor") { @@ -556,8 +556,8 @@ const St = { attribute: !0, type: String, converter: se, reflect: !1, hasChanged } throw Error("Unsupported decorator location: " + n); }; -function le(t) { - return (e, i) => typeof i == "object" ? zt(t, e, i) : ((n, s, o) => { +function de(t) { + return (e, i) => typeof i == "object" ? Dt(t, e, i) : ((n, s, o) => { const r = s.hasOwnProperty(o); return s.constructor.createProperty(o, n), r ? Object.getOwnPropertyDescriptor(s, o) : void 0; })(t, e, i); @@ -567,20 +567,20 @@ function le(t) { * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ -function ve(t) { - return le({ ...t, state: !0, attribute: !1 }); +function Ae(t) { + return de({ ...t, state: !0, attribute: !1 }); } -var Te, Pe; +var Re, Le; (function(t) { t.language = "language", t.system = "system", t.comma_decimal = "comma_decimal", t.decimal_comma = "decimal_comma", t.space_comma = "space_comma", t.none = "none"; -})(Te || (Te = {})), (function(t) { +})(Re || (Re = {})), (function(t) { t.language = "language", t.system = "system", t.am_pm = "12", t.twenty_four = "24"; -})(Pe || (Pe = {})); -var fe = function(t, e, i, n) { +})(Le || (Le = {})); +var be = function(t, e, i, n) { n = n || {}, i = i ?? {}; var s = new Event(e, { bubbles: n.bubbles === void 0 || n.bubbles, cancelable: !!n.cancelable, composed: n.composed === void 0 || n.composed }); return s.detail = i, t.dispatchEvent(s), s; -}, Mt = function(t, e, i) { +}, It = function(t, e, i) { var n; return i === void 0 && (i = !1), function() { var s = [].slice.call(arguments), o = this, r = function() { @@ -588,28 +588,28 @@ var fe = function(t, e, i, n) { }, a = i && !n; clearTimeout(n), n = setTimeout(r, e), a && t.apply(o, s); }; -}, Vt = function(t, e, i) { - i === void 0 && (i = !1), i ? history.replaceState(null, "", e) : history.pushState(null, "", e), fe(window, "location-changed", { replace: i }); +}, Ht = function(t, e, i) { + i === void 0 && (i = !1), i ? history.replaceState(null, "", e) : history.pushState(null, "", e), be(window, "location-changed", { replace: i }); }; -function Ze(t) { +function re(t) { return typeof t == "object" && t !== null && "entity" in t && typeof t.entity == "string"; } -function Et(t) { +function Rt(t) { return Array.isArray(t) && t.every((e) => typeof e == "string"); } -function Tt(t) { +function Lt(t) { return Array.isArray(t) && t.length === 3 && t.every((e) => typeof e == "number"); } -function Pt(t) { +function Ft(t) { return Array.isArray(t) && t.length === 2 && t.every((e) => typeof e == "number"); } -function Nt(t) { +function Ut(t) { return typeof t == "string" && (t === "heating" || t === "cooling" || t === "idle" || t === "off"); } -function Dt(t) { - return Nt(t) ? t : void 0; +function Bt(t) { + return Ut(t) ? t : void 0; } -function F(t) { +function j(t) { if (typeof t == "number" && !Number.isNaN(t)) return t; } @@ -617,25 +617,25 @@ function L(t) { if (typeof t == "string") return t; } -function Ot(t) { - return Et(t) ? t : []; +function jt(t) { + return Rt(t) ? t : []; } -function It(t) { - if (Tt(t)) +function qt(t) { + if (Lt(t)) return t; } -function Ht(t) { - if (Pt(t)) +function Wt(t) { + if (Ft(t)) return t; } -function ie(t, e) { +function Y(t, e) { return e.includes("*") ? new RegExp(`^${e.replaceAll("*", ".*")}$`).test(t) : t === e; } -const Rt = /* @__PURE__ */ new Set(["unavailable", "unknown", "none"]); -function Lt(t) { - return Rt.has(t.toLowerCase()); +const Gt = /* @__PURE__ */ new Set(["unavailable", "unknown", "none"]); +function Yt(t) { + return Gt.has(t.toLowerCase()); } -function Ut(t, e) { +function Jt(t, e) { const i = t / 360, n = e / 100, s = 0.5; let o, r, a; if (n === 0) @@ -646,7 +646,7 @@ function Ut(t, e) { } return [Math.round(o * 255), Math.round(r * 255), Math.round(a * 255)]; } -function ye(t) { +function Ce(t) { if (t.startsWith("#")) { const i = t.replaceAll("#", ""); return [ @@ -662,12 +662,12 @@ function ye(t) { Number.parseInt(e[3] ?? "0", 10) ] : null; } -function Bt(t, e, i) { +function Zt(t, e, i) { return (0.299 * t + 0.587 * e + 0.114 * i) / 255; } -function Ft(t) { - const e = ye(t); - return (e ? Bt(e[0], e[1], e[2]) > 0.5 : !1) ? { +function Qt(t) { + const e = Ce(t); + return (e ? Zt(e[0], e[1], e[2]) > 0.5 : !1) ? { icon: "rgba(0, 0, 0, 0.7)", label: "rgba(0, 0, 0, 0.9)", value: "rgba(0, 0, 0, 0.7)" @@ -678,10 +678,10 @@ function Ft(t) { }; } function S(t, e, i, n) { - const s = t.replaceAll("#", ""), o = e.replaceAll("#", ""), r = Number.parseInt(s.slice(0, 2), 16), a = Number.parseInt(s.slice(2, 4), 16), l = Number.parseInt(s.slice(4, 6), 16), h = Number.parseInt(o.slice(0, 2), 16), c = Number.parseInt(o.slice(2, 4), 16), u = Number.parseInt(o.slice(4, 6), 16), f = Math.round(r + (h - r) * i), d = Math.round(a + (c - a) * i), p = Math.round(l + (u - l) * i); - return n !== void 0 ? `rgba(${f}, ${d}, ${p}, ${n})` : `rgb(${f}, ${d}, ${p})`; + const s = t.replaceAll("#", ""), o = e.replaceAll("#", ""), r = Number.parseInt(s.slice(0, 2), 16), a = Number.parseInt(s.slice(2, 4), 16), l = Number.parseInt(s.slice(4, 6), 16), h = Number.parseInt(o.slice(0, 2), 16), c = Number.parseInt(o.slice(2, 4), 16), u = Number.parseInt(o.slice(4, 6), 16), f = Math.round(r + (h - r) * i), d = Math.round(a + (c - a) * i), g = Math.round(l + (u - l) * i); + return n !== void 0 ? `rgba(${f}, ${d}, ${g}, ${n})` : `rgb(${f}, ${d}, ${g})`; } -function jt(t) { +function Xt(t) { const { clampedValue: e, minValue: i, maxValue: n, midPoint: s, colorLow: o, colorMid: r, colorHigh: a, opacity: l } = t; if (e <= s) { if (i >= s) @@ -695,7 +695,7 @@ function jt(t) { return S(r, a, h, l); } } -function qt(t) { +function Kt(t) { const { clampedValue: e, minValue: i, maxValue: n, neutral: s, colorLow: o, colorHigh: r, opacity: a } = t; if (e <= s) { if (i >= s) return S(o, r, 0.5, a); @@ -707,10 +707,10 @@ function qt(t) { return S(o, r, 0.5 + l * 0.5, a); } } -function Wt(t, e, i, n) { +function ei(t, e, i, n) { const { colorHigh: s, colorLow: o, colorMid: r, opacity: a } = n, l = n.scaleMin ?? e, h = n.scaleMax ?? i, c = n.neutral, u = Math.max(l, Math.min(h, t)), f = c ?? (l + h) / 2; if (r) - return jt({ + return Xt({ clampedValue: u, minValue: l, maxValue: h, @@ -721,7 +721,7 @@ function Wt(t, e, i, n) { opacity: a }); if (c !== void 0) - return qt({ + return Kt({ clampedValue: u, minValue: l, maxValue: h, @@ -735,15 +735,15 @@ function Wt(t, e, i, n) { const d = (u - l) / (h - l); return S(o, s, d, a); } -function G(t, e) { - const i = ye(t); +function J(t, e) { + const i = Ce(t); return i ? `rgba(${i[0]}, ${i[1]}, ${i[2]}, ${e})` : t; } -function Gt(t) { +function ti(t) { return t.startsWith("light."); } -function Yt({ attributes: t, state: e }) { - const i = e === "on", n = F(t.brightness), s = i ? Math.round((n ?? 255) / 255 * 100) : 0, r = Ot(t.supported_color_modes).some( +function ii({ attributes: t, state: e }) { + const i = e === "on", n = j(t.brightness), s = i ? Math.round((n ?? 255) / 255 * 100) : 0, r = jt(t.supported_color_modes).some( (l) => ["rgb", "rgbw", "rgbww", "hs", "xy"].includes(l) ), a = { brightness: s, @@ -751,12 +751,12 @@ function Yt({ attributes: t, state: e }) { supportsColor: r }; if (i && r) { - const l = It(t.rgb_color), h = Ht(t.hs_color); + const l = qt(t.rgb_color), h = Wt(t.hs_color); l ? a.rgb = l : h && (a.hs = h); } return a; } -function Jt(t, e, i) { +function ni(t, e, i) { if (!t || !t.isOn) return e; const n = 0.3 + t.brightness / 100 * 0.7; @@ -765,28 +765,28 @@ function Jt(t, e, i) { return `rgba(${o}, ${r}, ${a}, ${n})`; } if (t.supportsColor && t.hs) { - const [o, r] = t.hs, [a, l, h] = Ut(o, r); + const [o, r] = t.hs, [a, l, h] = Jt(o, r); return `rgba(${a}, ${l}, ${h}, ${n})`; } - const s = ye(i); + const s = Ce(i); return s ? `rgba(${s[0]}, ${s[1]}, ${s[2]}, ${n})` : i; } -const Zt = ["switch", "input_boolean", "binary_sensor"]; -function Xt(t) { +const oi = ["switch", "input_boolean", "binary_sensor"]; +function si(t) { const e = t.split(".")[0]; - return Zt.includes(e ?? ""); + return oi.includes(e ?? ""); } -function Qt({ state: t }) { +function ri({ state: t }) { return { isOn: t === "on" }; } -function Kt(t, e, i) { +function ai(t, e, i) { return t ? i : e; } -function ei(t) { +function li(t) { return t.startsWith("climate."); } -function ti({ attributes: t, state: e }) { - const i = F(t.current_temperature), n = F(t.temperature), s = Dt(t.hvac_action), o = e, r = i ?? null, a = n ?? null; +function ci({ attributes: t, state: e }) { + const i = j(t.current_temperature), n = j(t.temperature), s = Bt(t.hvac_action), o = e, r = i ?? null, a = n ?? null; let l = 0, h = 0; if (r !== null && a !== null) { const c = r - a; @@ -801,17 +801,17 @@ function ti({ attributes: t, state: e }) { hvacMode: o ?? null }; } -function de(t, e) { +function _e(t, e) { return e === "temp_difference" ? t.tempDifference : e === "temp_offset" ? t.tempOffset : e === "current_temperature" ? t.currentTemperature : e === "temperature" ? t.targetTemperature : e === "hvac_action" ? t.hvacAction : e === "hvac_mode" ? t.hvacMode : null; } -function ii(t, e = {}, i = 0) { +function hi(t, e = {}, i = 0) { const { width: n = 100, height: s = 20 } = e, o = 1, r = s - i, a = e.min ?? Math.min(...t), h = (e.max ?? Math.max(...t)) - a || 1, c = t.map((f, d) => { - const p = d / (t.length - 1) * n, $ = r - o - (f - a) / h * (r - o * 2); - return `${p.toFixed(1)},${$.toFixed(1)}`; + const g = d / (t.length - 1) * n, x = r - o - (f - a) / h * (r - o * 2); + return `${g.toFixed(1)},${x.toFixed(1)}`; }).join(" "), u = `0,${r} ${c} ${n},${r}`; return { linePoints: c, fillPoints: u }; } -function ni(t) { +function ui(t) { return t === "light" ? { line: "rgba(255, 255, 255, 0.25)", fillTop: "rgba(255, 255, 255, 0.25)", @@ -822,8 +822,8 @@ function ni(t) { fillBottom: "rgba(0, 0, 0, 0.1)" }; } -let oi = 0; -function si(t) { +let di = 0; +function fi(t) { return t === "light" ? { heating: "rgba(255, 255, 255, 0.4)", cooling: "rgba(255, 255, 255, 0.4)" @@ -832,7 +832,7 @@ function si(t) { cooling: "rgba(0, 0, 0, 0.35)" }; } -function ri(t, e) { +function pi(t, e) { const n = e * 4, s = Array.from({ length: n }, () => null); for (const o of t) { if (o.action !== "heating" && o.action !== "cooling") continue; @@ -842,149 +842,171 @@ function ri(t, e) { } return s; } -function ai(t) { +function gi(t) { const { segments: e, data: i, width: n, height: s, colors: o, periodHours: r } = t; - if (i.length < 2) return D``; - const a = ri(e, r), l = a.length, h = t.min ?? Math.min(...i), u = (t.max ?? Math.max(...i)) - h || 1, f = 1, d = (m) => s - f - (m - h) / u * (s - f * 2), p = (m) => { - const g = m * (i.length - 1), b = Math.floor(g), w = Math.min(Math.ceil(g), i.length - 1), A = g - b; - return (i[b] ?? 0) * (1 - A) + (i[w] ?? 0) * A; - }, $ = []; + if (i.length < 2) return O``; + const a = pi(e, r), l = a.length, h = t.min ?? Math.min(...i), u = (t.max ?? Math.max(...i)) - h || 1, f = 1, d = (b) => s - f - (b - h) / u * (s - f * 2), g = (b) => { + const p = b * (i.length - 1), m = Math.floor(p), w = Math.min(Math.ceil(p), i.length - 1), k = p - m; + return (i[m] ?? 0) * (1 - k) + (i[w] ?? 0) * k; + }, x = []; let v = null; - for (let m = 0; m < l; m++) { - const g = a[m]; - g ? v !== null && v.action === g ? v.end = (m + 1) / l : (v && $.push(v), v = { start: m / l, end: (m + 1) / l, action: g }) : v && ($.push(v), v = null); + for (let b = 0; b < l; b++) { + const p = a[b]; + p ? v !== null && v.action === p ? v.end = (b + 1) / l : (v && x.push(v), v = { start: b / l, end: (b + 1) / l, action: p }) : v && (x.push(v), v = null); } - return v && $.push(v), D` - ${$.map((m) => { - const g = m.action === "heating" ? o.heating : o.cooling, b = 10, w = (m.end - m.start) / b; - let A = `${(m.start * n).toFixed(1)},${s}`; - for (let k = 0; k <= b; k++) { - const C = m.start + k * w, y = C * n, z = d(p(C)); - A += ` ${y.toFixed(1)},${z.toFixed(1)}`; + return v && x.push(v), O` + ${x.map((b) => { + const p = b.action === "heating" ? o.heating : o.cooling, m = 10, w = (b.end - b.start) / m; + let k = `${(b.start * n).toFixed(1)},${s}`; + for (let A = 0; A <= m; A++) { + const C = b.start + A * w, y = C * n, M = d(g(C)); + k += ` ${y.toFixed(1)},${M.toFixed(1)}`; } - return A += ` ${(m.end * n).toFixed(1)},${s}`, D``; + return k += ` ${(b.end * n).toFixed(1)},${s}`, O``; })} `; } -function Ne(t, e = {}, i) { - const { width: n = 100, height: s = 20, mode: o = "dark", line: r, fill: a, hvac: l, periodHours: h = 24 } = e, c = t.length > 1, u = l?.show !== !1 && i && i.length > 0, { linePoints: f, fillPoints: d } = c ? ii(t, e, 0) : { linePoints: "", fillPoints: "" }, p = ni(o), $ = si(o), v = a?.show !== !1 && c, m = r?.show !== !1 && c, g = `sparkline-gradient-${oi++}`, b = !!a?.style, w = a?.style || `fill: url(#${g});`, A = `stroke: ${p.line}; stroke-width: 1.5;`, k = r?.style ? `${A} ${r.style}` : A; - return D` +function Fe(t, e = {}, i) { + const { width: n = 100, height: s = 20, mode: o = "dark", line: r, fill: a, hvac: l, periodHours: h = 24 } = e, c = t.length > 1, u = l?.show !== !1 && i && i.length > 0, { linePoints: f, fillPoints: d } = c ? hi(t, e, 0) : { linePoints: "", fillPoints: "" }, g = ui(o), x = fi(o), v = a?.show !== !1 && c, b = r?.show !== !1 && c, p = `sparkline-gradient-${di++}`, m = !!a?.style, w = a?.style || `fill: url(#${p});`, k = `stroke: ${g.line}; stroke-width: 1.5;`, A = r?.style ? `${k} ${r.style}` : k; + return O` - ${v && !b ? D` + ${v && !m ? O` - - - + + + ` : _} - ${u && c ? ai({ segments: i, data: t, width: n, height: s, colors: $, periodHours: h, min: e.min, max: e.max }) : _} - ${v && !i ? D`` : _} - ${m ? D`` : _} + ${u && c ? gi({ segments: i, data: t, width: n, height: s, colors: x, periodHours: h, min: e.min, max: e.max }) : _} + ${v && !i ? O`` : _} + ${b ? O`` : _} `; } -function li(t, e = {}) { +function _i(t, e = {}) { if (t && typeof t == "object" && "temperature" in t) { const i = t, n = i.temperature && i.temperature.length > 1, s = i.hvacActions && i.hvacActions.length > 0; - return n || s ? Ne( + return n || s ? Fe( n ? i.temperature : [], e, i.hvacActions ) : _; } - return Array.isArray(t) && t.length > 1 ? Ne(t, e) : _; + return Array.isArray(t) && t.length > 1 ? Fe(t, e) : _; } -function ci(t) { +function mi(t) { return t === "heating" || t === "cooling" || t === "idle" || t === "off"; } -const Xe = { +function ae(t) { + return t.startsWith("climate."); +} +const st = { "12h": { hours: 12, statsPeriod: "5minute" }, "24h": { hours: 24, statsPeriod: "hour" }, "7d": { hours: 168, statsPeriod: "hour" }, "30d": { hours: 720, statsPeriod: "day" } -}, De = /* @__PURE__ */ new Map(), hi = 300 * 1e3; -async function ui(t, e, i = "24h") { - const n = /* @__PURE__ */ new Map(), s = Date.now(), o = []; - for (const r of e) { - const a = `${r}:${i}`, l = De.get(a); - l && s - l.fetchedAt < hi ? n.set(r, l.data) : o.push(r); +}, rt = 300 * 1e3, Ue = /* @__PURE__ */ new Map(), Be = /* @__PURE__ */ new Map(); +function ve({ entityId: t, period: e, statistic: i }) { + return `${t}:${e}:${i}`; +} +function K(t, e) { + return `${t}|${e}`; +} +async function bi(t, e) { + const i = /* @__PURE__ */ new Map(); + if (e.size === 0) return i; + const n = Date.now(), s = /* @__PURE__ */ new Map(); + for (const [a, l] of e) + ae(a) && s.set(K(a, l.period), { + entityId: a, + period: l.period + }), ae(l.entityId) && s.set(K(l.entityId, l.period), { + entityId: l.entityId, + period: l.period + }); + const o = await yi(t, s, n), r = await vi(t, e, o, n); + for (const [a, l] of e) { + const h = r.get(ve(l)) ?? [], c = ae(a) ? o.get(K(a, l.period))?.hvacActions : void 0; + i.set(a, c ? { temperature: h, hvacActions: c } : { temperature: h }); } - if (o.length > 0) { - const r = await di(t, o, i); - for (const [a, l] of r) { - const h = `${a}:${i}`; - De.set(h, { data: l, fetchedAt: s }), n.set(a, l); + return i; +} +async function vi(t, e, i, n) { + const s = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(); + for (const r of e.values()) { + const a = ve(r); + if (s.has(a)) continue; + const l = Ue.get(a); + if (l && n - l.fetchedAt < rt) { + s.set(a, l.data); + continue; } + const h = `${r.period}|${r.statistic}`, c = o.get(h); + c ? c.entityIds.add(r.entityId) : o.set(h, { spec: r, entityIds: /* @__PURE__ */ new Set([r.entityId]) }); } - return n; + return await Promise.all( + [...o.values()].map(async ({ spec: r, entityIds: a }) => { + const l = [...a], h = await ki(t, l, r.period, r.statistic); + for (const c of l) { + let u = h.get(c) ?? []; + u.length === 0 && ae(c) && (u = i.get(K(c, r.period))?.temperature ?? []); + const f = ve({ ...r, entityId: c }); + Ue.set(f, { data: u, fetchedAt: n }), s.set(f, u); + } + }) + ), s; } -async function di(t, e, i) { +async function yi(t, e, i) { const n = /* @__PURE__ */ new Map(); - if (e.length === 0) - return n; - const s = e.filter((r) => r.startsWith("climate.")), o = e.filter((r) => !r.startsWith("climate.")); - if (o.length > 0) { - const r = await Qe(t, o, i); - for (const [a, l] of r) - n.set(a, { temperature: l }); - } - if (s.length > 0) { - const r = await fi(t, s, i); - for (const [a, l] of r) - n.set(a, l); - } - return n; -} -async function fi(t, e, i) { - const n = /* @__PURE__ */ new Map(), s = Xe[i], o = new Date(Date.now() - s.hours * 60 * 60 * 1e3), r = await Qe(t, e, i), a = []; - for (const h of e) { - const c = r.get(h); - !c || c.length === 0 ? a.push(h) : n.set(h, { temperature: c }); - } - const l = await pi(t, e, o, s); - for (const h of a) { - const c = l.get(h); - c && c.temperature.length > 0 && n.set(h, { temperature: c.temperature }); - } - for (const [h, c] of l) { - const u = n.get(h); - u ? u.hvacActions = c.hvacActions : n.set(h, { temperature: [], hvacActions: c.hvacActions }); - } - return n; -} -async function pi(t, e, i, n) { + if (e.size === 0) return n; const s = /* @__PURE__ */ new Map(); - if (e.length === 0) - return s; + for (const [o, { entityId: r, period: a }] of e) { + const l = Be.get(o); + if (l && i - l.fetchedAt < rt) { + n.set(o, l.data); + continue; + } + const h = s.get(a); + h ? h.push(r) : s.set(a, [r]); + } + return await Promise.all( + [...s].map(async ([o, r]) => { + const a = await $i(t, r, o, i); + for (const l of r) { + const h = a.get(l) ?? { temperature: [], hvacActions: [] }, c = K(l, o); + Be.set(c, { data: h, fetchedAt: i }), n.set(c, h); + } + }) + ), n; +} +async function $i(t, e, i, n) { + const s = /* @__PURE__ */ new Map(); + if (e.length === 0) return s; + const r = st[i].hours * 60 * 60 * 1e3, a = new Date(n - r); try { - const o = await t.callWS({ + const l = await t.callWS({ type: "history/history_during_period", - start_time: i.toISOString(), + start_time: a.toISOString(), entity_ids: e, no_attributes: !1, significant_changes_only: !1 // Get all changes for better temperature resolution }); - if (o) { - const r = n.hours * 60 * 60 * 1e3, a = Date.now(); - for (const l of e) { - const h = o[l]; - if (h && h.length > 0) { - const c = gi(h), u = _i(h, i.getTime(), a, r); - s.set(l, { - temperature: c, - hvacActions: u - }); - } + if (l) + for (const h of e) { + const c = l[h]; + c && c.length > 0 && s.set(h, { + temperature: xi(c), + hvacActions: wi(c, a.getTime(), n, r) + }); } - } - } catch (o) { - console.warn("[treemap] Failed to fetch climate history:", o); + } catch (l) { + console.warn("[treemap] Failed to fetch climate history:", l); } return s; } -function gi(t) { +function xi(t) { const e = [], n = Math.max(1, Math.floor(t.length / 60)); for (let s = 0; s < t.length; s += n) { const o = t[s]; @@ -994,51 +1016,84 @@ function gi(t) { } return e; } -function _i(t, e, i, n) { +function wi(t, e, i, n) { const s = []; for (let o = 0; o < t.length; o++) { const r = t[o]; if (!r) continue; const a = t[o + 1], h = (r.attributes || r.a)?.hvac_action; - if (!ci(h) || h === "idle" || h === "off") continue; + if (!mi(h) || h === "idle" || h === "off") continue; const c = h, u = r.last_updated ? new Date(r.last_updated).getTime() : new Date((r.lu ?? 0) * 1e3).getTime(); let f; a ? f = a.last_updated ? new Date(a.last_updated).getTime() : new Date((a.lu ?? 0) * 1e3).getTime() : f = i; - const d = Math.max(0, (u - e) / n), p = Math.min(1, (f - e) / n); - d < 1 && p > 0 && s.push({ start: d, end: p, action: c }); + const d = Math.max(0, (u - e) / n), g = Math.min(1, (f - e) / n); + d < 1 && g > 0 && s.push({ start: d, end: g, action: c }); } return s; } -async function Qe(t, e, i) { - const n = /* @__PURE__ */ new Map(); +async function ki(t, e, i, n) { + const s = /* @__PURE__ */ new Map(); if (e.length === 0) - return n; - const s = Xe[i], o = new Date(Date.now() - s.hours * 60 * 60 * 1e3).toISOString(); + return s; + const o = st[i], r = new Date(Date.now() - o.hours * 60 * 60 * 1e3).toISOString(); try { - const r = await t.callWS({ + const a = await t.callWS({ type: "recorder/statistics_during_period", - start_time: o, + start_time: r, statistic_ids: e, - period: s.statsPeriod + period: o.statsPeriod, + types: [n] }); - if (r) - for (const [a, l] of Object.entries(r)) { - const h = l.map(({ mean: c }) => c).filter((c) => c != null); - n.set(a, h); + if (a) + for (const [l, h] of Object.entries(a)) { + const c = h.map((u) => u[n]).filter((u) => typeof u == "number" && !Number.isNaN(u)); + s.set(l, c); } - } catch (r) { - console.warn("[treemap] Failed to fetch statistics:", r); - for (const a of e) - n.has(a) || n.set(a, []); + } catch (a) { + console.warn("[treemap] Failed to fetch statistics:", a); + for (const l of e) + s.has(l) || s.set(l, []); } - return n; + return s; } -function Oe(t, e) { +const Se = ["mean", "min", "max", "sum", "state", "change"]; +function Ai(t) { + return typeof t == "string" && Se.some((e) => e === t); +} +function me(t, e) { + return t ? e ? { ...t, ...e } : t : e; +} +function je(t) { + const e = {}; + if (!t) return e; + for (const i of Object.keys(t)) { + const n = Reflect.get(t, i); + n !== void 0 && Object.assign(e, { [i]: n }); + } + return e; +} +function he(t, e) { + const i = { ...je(t), ...je(e) }, n = me(t?.line, e?.line), s = me(t?.fill, e?.fill), o = me(t?.hvac, e?.hvac); + return { + ...i, + show: i.show !== !1, + period: i.period ?? "24h", + function: i.function ?? "mean", + mode: i.mode ?? "dark", + ...n ? { line: n } : {}, + ...s ? { fill: s } : {}, + ...o ? { hvac: o } : {} + }; +} +function Ci(t, e) { + return t.entity ?? e; +} +function qe(t, e) { if (t.length === 0) return 1 / 0; const i = t.reduce((a, l) => a + l, 0), n = Math.max(...t), s = Math.min(...t), o = e * e, r = i * i; return Math.max(o * n / r, r / (o * s)); } -function mi(t, e, i) { +function Si(t, e, i) { const n = t.reduce((r, a) => r + a.normalizedValue, 0), s = []; let o = 0; if (i) { @@ -1111,7 +1166,7 @@ function mi(t, e, i) { }; } } -function bi(t, e, i) { +function Mi(t, e, i) { return e === "default" ? [...t] : [...t].sort((n, s) => { let o; if (e === "entity_id") { @@ -1121,7 +1176,7 @@ function bi(t, e, i) { return i ? o : -o; }); } -function Ie(t, e, i, n = !1, s = "value") { +function We(t, e, i, n = !1, s = "value") { const o = t.length; if (o === 0) return { rects: [], rows: 0 }; const r = e / i; @@ -1129,7 +1184,7 @@ function Ie(t, e, i, n = !1, s = "value") { for (; a * (l - 1) >= o && l > 1; ) l--; for (; (a - 1) * l >= o && a > 1; ) a--; const h = e / a, c = i / l; - return { rects: bi(t, s, n).map((d, p) => ({ + return { rects: Mi(t, s, n).map((d, g) => ({ label: d.label, value: d.value, sizeValue: d.sizeValue, @@ -1144,13 +1199,13 @@ function Ie(t, e, i, n = !1, s = "value") { sparklineData: d.sparklineData, unavailable: d.unavailable, rawState: d.rawState, - x: p % a * h, - y: Math.floor(p / a) * c, + x: g % a * h, + y: Math.floor(g / a) * c, width: h, height: c })), rows: l }; } -function vi(t, e, i, n) { +function zi(t, e, i, n) { const s = t.map((c) => Math.abs(c.value)), o = Math.max(...s), r = e ? s.map((c) => Math.sqrt(c / o) * o) : s, a = r.reduce((c, u) => c + u, 0), l = []; for (const [c, u] of t.entries()) { const f = s[c], d = r[c]; @@ -1165,20 +1220,20 @@ function vi(t, e, i, n) { return f.localeCompare(d); }) : n === "label" ? h.sort((c, u) => c.item.label.localeCompare(u.item.label)) : h.sort((c, u) => u.normalizedValue - c.normalizedValue)), h; } -function yi(t, e) { +function Vi(t, e) { const i = []; let n = [], s = [...t]; for (; s.length > 0; ) { const o = s[0]; if (!o) break; - const r = [...n, o.normalizedValue], a = Oe(n, e), l = Oe(r, e), h = s.length <= 3 && n.length > 0; + const r = [...n, o.normalizedValue], a = qe(n, e), l = qe(r, e), h = s.length <= 3 && n.length > 0; if (n.length > 0 && l > a && !h) break; i.push(o), n = r, s = s.slice(1); } return { row: i, rowValues: n, newRemaining: s }; } -function $i(t, e, i) { +function Ei(t, e, i) { for (const o of t) o.x = e - o.x - o.width, o.y = i - o.y - o.height; const n = Math.min(...t.map((o) => o.x)), s = Math.min(...t.map((o) => o.y)); @@ -1186,38 +1241,38 @@ function $i(t, e, i) { for (const o of t) o.x -= n, o.y -= s; } -function xi(t, e, i, n = {}) { +function Ti(t, e, i, n = {}) { const { compressRange: s = !0, equalSize: o = !1, ascending: r = !1, sortBy: a = "value" } = n; if (t.length === 0) return { rects: [], rows: 0 }; if (o) - return Ie(t, e, i, r, a); - const l = t.map((g) => Math.abs(g.value)), h = Math.max(...l); + return We(t, e, i, r, a); + const l = t.map((p) => Math.abs(p.value)), h = Math.max(...l); if (h === 0) return { rects: [], rows: 0 }; - const c = l.filter((g) => g > 0); + const c = l.filter((p) => p > 0); if (c.length > 1) { - const g = Math.min(...c); - if ((h - g) / h < 0.01) - return Ie(t, e, i, r, a); + const p = Math.min(...c); + if ((h - p) / h < 0.01) + return We(t, e, i, r, a); } - const u = e * i, f = vi(t, s, u, a), d = []; - let p = { x: 0, y: 0, width: e, height: i }, $ = [...f]; - for (; $.length > 0; ) { - const g = p.width < p.height, b = g ? p.height : p.width, { row: w, newRemaining: A } = yi($, b); - $ = A; - const { rects: k, remaining: C } = mi(w, p, g); - if (d.push(...k), p = C, p.width <= 0 || p.height <= 0) break; + const u = e * i, f = zi(t, s, u, a), d = []; + let g = { x: 0, y: 0, width: e, height: i }, x = [...f]; + for (; x.length > 0; ) { + const p = g.width < g.height, m = p ? g.height : g.width, { row: w, newRemaining: k } = Vi(x, m); + x = k; + const { rects: A, remaining: C } = Si(w, g, p); + if (d.push(...A), g = C, g.width <= 0 || g.height <= 0) break; } - r && d.length > 0 && $i(d, e, i); - const m = new Set(d.map((g) => Math.round(g.y * 100) / 100)).size; - return { rects: d, rows: m }; + r && d.length > 0 && Ei(d, e, i); + const b = new Set(d.map((p) => Math.round(p.y * 100) / 100)).size; + return { rects: d, rows: b }; } -function wi(t) { +function Pi(t) { let e = Number.POSITIVE_INFINITY, i = Number.NEGATIVE_INFINITY, n = Number.POSITIVE_INFINITY, s = Number.NEGATIVE_INFINITY; for (const o of t) o.colorValue < e && (e = o.colorValue), o.colorValue > i && (i = o.colorValue), o.sizeValue < n && (n = o.sizeValue), o.sizeValue > s && (s = o.sizeValue); return { colorMin: e, colorMax: i, sizeMin: n, sizeMax: s }; } -function Ai(t, e, i) { +function Ni(t, e, i) { const n = i + e; for (const r of t) r.sizeValue = n - r.sizeValue, r.sortValue = -r.sortValue; @@ -1226,58 +1281,58 @@ function Ai(t, e, i) { r.sizeValue < o && (r.sizeValue = o); return s; } -function He(t, e, i) { +function Ge(t, e, i) { const n = e ? !i : i; return [...t].sort( (s, o) => n ? s.sizeValue - o.sizeValue : o.sizeValue - s.sizeValue ); } -function ki(t, e) { +function Oi(t, e) { let i = 1; for (const n of t) e !== void 0 && n.sizeValue > e && (n.sizeValue = e), n.sizeValue > i && (i = n.sizeValue); return i; } -function Ci(t, e, i) { +function Di(t, e, i) { const n = e ?? i * 0.15; for (const s of t) s.sizeValue < n && (s.sizeValue = n); } -function Si(t, e = {}) { +function Ii(t, e = {}) { const { inverse: i = !1, ascending: n = !1, limit: s, sizeMin: o, sizeMax: r, sortBy: a } = e; if (t.length === 0) return { items: [], colorMin: 0, colorMax: 0 }; - const l = wi(t); + const l = Pi(t); if (l.sizeMin < 0) { const f = Math.abs(l.sizeMin); for (const d of t) d.sizeValue = d.sizeValue + f; l.sizeMin = 0, l.sizeMax = l.sizeMax + f; } - i && Ai(t, l.sizeMin, l.sizeMax); + i && Ni(t, l.sizeMin, l.sizeMax); const h = !a || a === "value"; let c; if (h) { - const f = He(t, i, n); + const f = Ge(t, i, n); c = s !== void 0 && s > 0 ? f.slice(0, s) : f; } else if (s !== void 0 && s > 0) { - const f = He(t, i, n), d = new Set(f.slice(0, s).map((p) => p.entity_id ?? p.label)); - c = t.filter((p) => d.has(p.entity_id ?? p.label)); + const f = Ge(t, i, n), d = new Set(f.slice(0, s).map((g) => g.entity_id ?? g.label)); + c = t.filter((g) => d.has(g.entity_id ?? g.label)); } else c = [...t]; - const u = ki(c, r); - return Ci(c, o, u), { items: c, colorMin: l.colorMin, colorMax: l.colorMax }; + const u = Oi(c, r); + return Di(c, o, u), { items: c, colorMin: l.colorMin, colorMax: l.colorMax }; } -const zi = [ +const Hi = [ { threshold: 1e12, suffix: "T" }, { threshold: 1e9, suffix: "B" }, { threshold: 1e6, suffix: "M" }, { threshold: 1e3, suffix: "k" } ]; -function Mi(t, e = 1, i = !1) { +function Ri(t, e = 1, i = !1) { let n = t, s = ""; if (i) { - for (const o of zi) + for (const o of Hi) if (Math.abs(t) >= o.threshold) { n = t / o.threshold, s = o.suffix; break; @@ -1285,10 +1340,10 @@ function Mi(t, e = 1, i = !1) { } return n.toFixed(e) + s; } -function Vi(t, e) { +function Li(t, e) { return t !== void 0 ? t : e !== void 0 ? e : 1; } -const Ei = Fe` +const Fi = Xe` :host { display: block; } @@ -1433,26 +1488,29 @@ const Ei = Fe` display: none; } `; -var Ti = Object.defineProperty, Pi = Object.getOwnPropertyDescriptor, ce = (t, e, i, n) => { - for (var s = n > 1 ? void 0 : n ? Pi(e, i) : e, o = t.length - 1, r; o >= 0; o--) +var Ui = Object.defineProperty, Bi = Object.getOwnPropertyDescriptor, fe = (t, e, i, n) => { + for (var s = n > 1 ? void 0 : n ? Bi(e, i) : e, o = t.length - 1, r; o >= 0; o--) (r = t[o]) && (s = (n ? r(e, i, s) : r(s)) || s); - return n && s && Ti(e, i, s), s; + return n && s && Ui(e, i, s), s; }; -const Ni = "0.15.3"; +const ji = "0.16.0"; console.info( - `%c TREEMAP-CARD %c v${Ni}`, + `%c TREEMAP-CARD %c v${ji}`, "color: white; background: #3498db; font-weight: bold;", "color: #3498db; background: white; font-weight: bold;" ); -let T = class extends B { +function qi(t, e) { + return t.length !== e.length ? !1 : t.every((i, n) => i === e[n]); +} +let P = class extends B { constructor() { - super(...arguments), this._sparklineData = /* @__PURE__ */ new Map(), this._fetchingSparklines = !1, this._debouncedFetchSparklines = Mt(() => void this._fetchSparklineData(), 100), this._entityConfigMap = /* @__PURE__ */ new Map(), this._holdTimer = null, this._holdFired = !1; + super(...arguments), this._sparklineData = /* @__PURE__ */ new Map(), this._fetchingSparklines = !1, this._debouncedFetchSparklines = It(() => void this._fetchSparklineData(), 100), this._entityConfigMap = /* @__PURE__ */ new Map(), this._sparklineConfigMap = /* @__PURE__ */ new Map(), this._sparklineConfigCache = /* @__PURE__ */ new Map(), this._holdTimer = null, this._holdFired = !1; } /** * Return the editor element for visual configuration */ static getConfigElement() { - return Promise.resolve().then(() => cn), document.createElement("treemap-card-editor"); + return Promise.resolve().then(() => yn), document.createElement("treemap-card-editor"); } /** * Return stub config for card picker (finds temperature sensors for preview) @@ -1501,7 +1559,7 @@ let T = class extends B { const { entity: n } = this._normalizeEntity(i); if (n.includes("*")) for (const s of t) - ie(s, n) && e.push(s); + Y(s, n) && e.push(s); else e.push(n); } @@ -1512,23 +1570,59 @@ let T = class extends B { setConfig(t) { if (!t.entities && !t.entity) throw new Error('Please define "entities" (list) or "entity" (single with JSON array)'); - if (this._config = { + if (this._validateSparklineFunction(t.sparkline), this._config = { gap: 4, // smaller gap ...t - }, this._entityConfigMap = /* @__PURE__ */ new Map(), t.entities) + }, this._entityConfigMap = /* @__PURE__ */ new Map(), this._sparklineConfigMap = /* @__PURE__ */ new Map(), this._sparklineConfigCache = /* @__PURE__ */ new Map(), t.entities) for (const e of t.entities) { const i = this._normalizeEntity(e); - (i.tap_action || i.hold_action || i.double_tap_action) && this._entityConfigMap.set(i.entity, i); + (i.tap_action || i.hold_action || i.double_tap_action) && this._entityConfigMap.set(i.entity, i), i.sparkline && (this._validateSparklineFunction(i.sparkline, i.entity), this._sparklineConfigMap.set(i.entity, i.sparkline)); } } + /** + * Reject an unknown sparkline function up front. + * + * Home Assistant validates the `types` parameter server side and rejects the + * whole websocket call, which would blank every sparkline sharing that request + * rather than just the misconfigured one. + */ + _validateSparklineFunction(t, e) { + const i = t?.function; + if (i === void 0 || Ai(i)) return; + const n = e ? ` for "${e}"` : ""; + throw new Error( + `Invalid sparkline function "${String(i)}"${n}. Must be one of: ${Se.join(", ")}` + ); + } + /** + * Effective sparkline config for a tile: card-level defaults with the + * per-entity override applied. Matches an exact entity id first, then + * wildcard patterns, mirroring how per-entity actions resolve. + */ + _getSparklineConfig(t) { + const e = this._config?.sparkline; + if (!t) return he(e); + const i = this._sparklineConfigCache.get(t); + if (i) return i; + let n = this._sparklineConfigMap.get(t); + if (!n) { + for (const [o, r] of this._sparklineConfigMap) + if (Y(t, o)) { + n = r; + break; + } + } + const s = he(e, n); + return this._sparklineConfigCache.set(t, s), s; + } /** * Normalize EntityInput to object format * Converts "sensor.foo" to { entity: "sensor.foo" } * Preserves existing { entity, name, icon } objects as-is */ _normalizeEntity(t) { - return typeof t == "string" ? { entity: t } : Ze(t) ? t : { entity: String(t) }; + return typeof t == "string" ? { entity: t } : re(t) ? t : { entity: String(t) }; } getCardSize() { return 4; @@ -1537,13 +1631,22 @@ let T = class extends B { this._debouncedFetchSparklines(); } async _fetchSparklineData() { - if (!this.hass || this._fetchingSparklines || this._config?.sparkline?.show === !1) return; - const e = this._resolveData().map(({ entity_id: i }) => i).filter((i) => !!i); - if (e.length !== 0) { + if (!this.hass || this._fetchingSparklines) return; + const t = /* @__PURE__ */ new Map(); + for (const { entity_id: e } of this._resolveData()) { + if (!e) continue; + const i = this._getSparklineConfig(e); + i.show && t.set(e, { + entityId: Ci(i, e), + period: i.period, + statistic: i.function + }); + } + if (t.size !== 0) { this._fetchingSparklines = !0; try { - const i = this._config?.sparkline?.period || "24h", n = await ui(this.hass, e, i); - n.size > 0 && !this._sparklineDataEquals(n) && (this._sparklineData = n); + const e = await bi(this.hass, t); + e.size > 0 && !this._sparklineDataEquals(e) && (this._sparklineData = e); } finally { this._fetchingSparklines = !1; } @@ -1551,22 +1654,31 @@ let T = class extends B { } /** * Compare sparkline data maps to avoid unnecessary re-renders. + * + * Compares values rather than just lengths: pointing a tile at a different + * source entity usually yields the same number of buckets, and a length-only + * check would discard the new series. If the values really are identical the + * render is identical too, so skipping the update stays safe. */ _sparklineDataEquals(t) { if (this._sparklineData.size !== t.size) return !1; for (const [e, i] of t) { const n = this._sparklineData.get(e); - if (!n || n.temperature.length !== i.temperature.length) return !1; - const s = n.hvacActions?.length ?? 0, o = i.hvacActions?.length ?? 0; - if (s !== o) return !1; + if (!n || !qi(n.temperature, i.temperature)) return !1; + const s = n.hvacActions ?? [], o = i.hvacActions ?? []; + if (s.length !== o.length) return !1; + for (const [r, a] of s.entries()) { + const l = o[r]; + if (a.action !== l?.action || a.start !== l.start || a.end !== l.end) + return !1; + } } return !0; } /** - * Get period hours from config for HVAC quantization. + * Get period hours for HVAC quantization. */ - _getPeriodHours() { - const t = this._config?.sparkline?.period || "24h"; + _getPeriodHours(t) { return { "12h": 12, "24h": 24, @@ -1586,7 +1698,7 @@ let T = class extends B { const e = this._config?.exclude; if (!e || e.length === 0) return !1; for (const i of e) - if (ie(t, i)) + if (Y(t, i)) return !0; return !1; } @@ -1600,40 +1712,40 @@ let T = class extends B { icon: r, color: a } = this._normalizeEntity(n), l = i.filter( - (h) => ie(h, s) && !this._isExcluded(h) + (h) => Y(h, s) && !this._isExcluded(h) ); for (const h of l) { const c = this.hass.states[h]; if (!c) continue; - const u = this._config?.label?.attribute || "friendly_name", f = u === "entity_id" ? h : String(c.attributes[u] ?? h.split(".").pop() ?? h), d = o ?? f, p = r ?? L(c.attributes.icon); - if (Gt(h)) { - const g = Yt(c), { brightness: b } = g; + const u = this._config?.label?.attribute || "friendly_name", f = u === "entity_id" ? h : String(c.attributes[u] ?? h.split(".").pop() ?? h), d = o ?? f, g = r ?? L(c.attributes.icon); + if (ti(h)) { + const p = ii(c), { brightness: m } = p; let w; - g.isOn ? w = 40 + b / 100 * 60 : w = 10, e.push({ + p.isOn ? w = 40 + m / 100 * 60 : w = 10, e.push({ label: d, - value: b, + value: m, // Display brightness as percentage sizeValue: w, - sortValue: b, - colorValue: b, + sortValue: m, + colorValue: m, entity_id: h, - icon: p ?? "mdi:lightbulb", + icon: g ?? "mdi:lightbulb", unit: "%", - light: g, + light: p, color: a }); continue; } - if (ei(h)) { - const g = ti(c), b = this._config?.value?.attribute || "current_temperature", w = this._config?.size?.attribute || b, A = this._config?.color?.attribute || b; - let k = de(g, b), C = de(g, w), y = de(g, A); - k === null && (k = F(c.attributes[b]) ?? 0), C === null && (C = F(c.attributes[w]) ?? 0), y === null && (y = F(c.attributes[A]) ?? 0); - const z = typeof k == "number" ? k : 0, M = typeof C == "number" ? Math.max(0.1, Math.abs(C)) : 0.1, st = typeof y == "number" ? y : 0; + if (li(h)) { + const p = ci(c), m = this._config?.value?.attribute || "current_temperature", w = this._config?.size?.attribute || m, k = this._config?.color?.attribute || m; + let A = _e(p, m), C = _e(p, w), y = _e(p, k); + A === null && (A = j(c.attributes[m]) ?? 0), C === null && (C = j(c.attributes[w]) ?? 0), y === null && (y = j(c.attributes[k]) ?? 0); + const M = typeof A == "number" ? A : 0, z = typeof C == "number" ? Math.max(0.1, Math.abs(C)) : 0.1, ft = typeof y == "number" ? y : 0; let R; - if (p) - R = p; + if (g) + R = g; else - switch (g.hvacAction) { + switch (p.hvacAction) { case "heating": { R = "mdi:fire"; break; @@ -1651,46 +1763,46 @@ let T = class extends B { } e.push({ label: d, - value: z, - sizeValue: M, - sortValue: z, - colorValue: st, + value: M, + sizeValue: z, + sortValue: M, + colorValue: ft, entity_id: h, icon: R, unit: L(c.attributes.unit_of_measurement), - climate: g, + climate: p, color: a }); continue; } - if (Xt(h)) { - const g = Qt(c), { isOn: b } = g; + if (si(h)) { + const p = ri(c), { isOn: m } = p; e.push({ label: d, - value: b ? 1 : 0, + value: m ? 1 : 0, sizeValue: 1, // Equal size for all binary entities - sortValue: b ? 1 : 0, - colorValue: b ? 1 : 0, + sortValue: m ? 1 : 0, + colorValue: m ? 1 : 0, entity_id: h, - icon: p, - binary: g, + icon: g, + binary: p, color: a }); continue; } - const $ = this._config?.value?.attribute || "state"; + const x = this._config?.value?.attribute || "state"; let v; - if ($ === "state") + if (x === "state") v = Number.parseFloat(c.state); else { - const g = c.attributes[$]; - v = Number.parseFloat(String(g ?? 0)); + const p = c.attributes[x]; + v = Number.parseFloat(String(p ?? 0)); } if (Number.isNaN(v)) { - if (!Lt(c.state) || !this._config?.filter?.unavailable) + if (!Yt(c.state) || !this._config?.filter?.unavailable) continue; - const b = L(c.attributes.unit_of_measurement); + const m = L(c.attributes.unit_of_measurement); e.push({ label: d, value: 0, @@ -1700,15 +1812,15 @@ let T = class extends B { sortValue: 0, colorValue: 0, entity_id: h, - icon: p, - unit: b, + icon: g, + unit: m, unavailable: !0, rawState: c.state, color: a }); continue; } - const m = L(c.attributes.unit_of_measurement); + const b = L(c.attributes.unit_of_measurement); e.push({ label: d, value: v, @@ -1716,8 +1828,8 @@ let T = class extends B { sortValue: v, colorValue: v, entity_id: h, - icon: p, - unit: m, + icon: g, + unit: b, color: a }); } @@ -1735,7 +1847,7 @@ let T = class extends B { let u; if (h) { const d = c[h]; - Array.isArray(d) && (u = d.filter((p) => typeof p == "number")); + Array.isArray(d) && (u = d.filter((g) => typeof g == "number")); } const f = Number(c[o] ?? 0); return { @@ -1762,7 +1874,7 @@ let T = class extends B { }; } _getColor(t, e, i) { - return Wt(t, e, i, this._getGradientColorOptions()); + return ei(t, e, i, this._getGradientColorOptions()); } _getSizeClass(t) { const e = t.width * t.height; @@ -1770,7 +1882,7 @@ let T = class extends B { } _getLightColor(t) { const e = this._config?.color?.low ?? "#333333", i = this._config?.color?.high ?? "#fbbf24"; - return Jt(t.light, e, i); + return ni(t.light, e, i); } _filterData(t) { if (!this._config) return t; @@ -1779,12 +1891,12 @@ let T = class extends B { } render() { if (!this._config) - return x`
No configuration
`; + return $`
No configuration
`; const t = this._resolveData(), e = this._filterData(t), i = !!this._config.header?.title, n = this._config.header?.title, s = this._config.header?.show ?? !!n, o = this._config.header?.style || "", r = this._config.card_style || "", a = i ? void 0 : this._config.title; if (e.length === 0) - return x` + return $` - ${s && n ? x`
${n}
` : _} + ${s && n ? $`
${n}
` : _}
No data available
@@ -1794,7 +1906,7 @@ let T = class extends B { items: l, colorMin: h, colorMax: c - } = Si(e, { + } = Ii(e, { inverse: this._config?.size?.inverse, ascending: this._config?.order === "asc", limit: this._config?.limit, @@ -1803,8 +1915,8 @@ let T = class extends B { sortBy: this._config?.sort_by ?? "value" }), u = this._config?.size?.equal === !0, f = /* @__PURE__ */ new Map(); for (const y of l) { - const z = y.entity_id ?? y.label; - f.set(z, { + const M = y.entity_id ?? y.label; + f.set(M, { value: y.value, sortValue: y.sortValue, colorValue: y.colorValue, @@ -1812,23 +1924,23 @@ let T = class extends B { unit: y.unit }); } - const d = l.map((y) => ({ ...y, value: y.sizeValue })), p = this._config?.order === "asc", v = this._config?.size?.inverse === !0 ? !p : p, m = this._config?.sort_by ?? "value", { rects: g, rows: b } = xi(d, 100, 100, { + const d = l.map((y) => ({ ...y, value: y.sizeValue })), g = this._config?.order === "asc", v = this._config?.size?.inverse === !0 ? !g : g, b = this._config?.sort_by ?? "value", { rects: p, rows: m } = Ti(d, 100, 100, { compressRange: !0, equalSize: u, ascending: v, - sortBy: m + sortBy: b }); - for (const y of g) { - const z = y.entity_id ?? y.label, M = f.get(z); - M && (y.value = M.value, y.sortValue = M.sortValue, y.colorValue = M.colorValue, y.sizeValue = M.sizeValue, y.unit = M.unit); + for (const y of p) { + const M = y.entity_id ?? y.label, z = f.get(M); + z && (y.value = z.value, y.sortValue = z.sortValue, y.colorValue = z.colorValue, y.sizeValue = z.sizeValue, y.unit = z.unit); } - const w = Math.max(1, b), A = Math.max(100, w * 100), k = this._config.height ?? A, C = this._config.gap ?? 6; - return x` + const w = Math.max(1, m), k = Math.max(100, w * 100), A = this._config.height ?? k, C = this._config.gap ?? 6; + return $` - ${s && n ? x`
${n}
` : _} + ${s && n ? $`
${n}
` : _}
-
- ${g.map((y) => this._renderRect(y, h, c, k, C))} +
+ ${p.map((y) => this._renderRect(y, h, c, A, C))}
@@ -1841,27 +1953,27 @@ let T = class extends B { _getRectColor(t, e, i) { const n = this._config?.color?.opacity; if (t.color) - return n === void 0 ? t.color : G(t.color, n); + return n === void 0 ? t.color : J(t.color, n); if (t.unavailable) { const s = this._config?.color?.unavailable ?? "#868e96"; - return n === void 0 ? s : G(s, n); + return n === void 0 ? s : J(s, n); } if (t.climate && (t.climate.hvacMode === "off" || t.climate.hvacMode === "unavailable")) { const s = this._config?.color?.hvac?.off ?? "#868e96"; - return n === void 0 ? s : G(s, n); + return n === void 0 ? s : J(s, n); } if (t.climate && this._config?.color?.hvac) { const s = this._config.color.hvac; if (t.climate.hvacAction === "heating" && s.heating) - return n === void 0 ? s.heating : G(s.heating, n); + return n === void 0 ? s.heating : J(s.heating, n); if (t.climate.hvacAction === "cooling" && s.cooling) - return n === void 0 ? s.cooling : G(s.cooling, n); + return n === void 0 ? s.cooling : J(s.cooling, n); } if (t.light) return this._getLightColor(t); if (t.binary) { const s = this._config?.color?.low ?? "#333333", o = this._config?.color?.high ?? "#22c55e"; - return Kt(t.binary.isOn, s, o); + return ai(t.binary.isOn, s, o); } return this._getColor(t.colorValue, e, i); } @@ -1892,54 +2004,56 @@ let T = class extends B { return t.rawState.charAt(0).toUpperCase() + t.rawState.slice(1); if (t.binary) return t.binary.isOn ? "On" : "Off"; - const n = t.entity_id ? this.hass?.entities?.[t.entity_id]?.display_precision : void 0, s = Vi(this._config?.value?.precision, n), o = this._config?.value?.abbreviate ?? !1, r = Mi(t.value, s, o), l = this._config?.value?.attribute === "temp_offset" && t.value > 0 ? "+" : "", h = e !== void 0 || i !== void 0, c = t.unit ? " " + t.unit : ""; + const n = t.entity_id ? this.hass?.entities?.[t.entity_id]?.display_precision : void 0, s = Li(this._config?.value?.precision, n), o = this._config?.value?.abbreviate ?? !1, r = Ri(t.value, s, o), l = this._config?.value?.attribute === "temp_offset" && t.value > 0 ? "+" : "", h = e !== void 0 || i !== void 0, c = t.unit ? " " + t.unit : ""; return h ? `${e ?? ""}${l}${r}${i ?? ""}` : `${l}${r}${c}`; } /** * Calculate styles for icon, label, and value based on color target mode. */ _calculateStyles(t) { - const i = (this._config?.color?.target ?? "background") === "foreground", n = i ? "rgba(0, 0, 0, 0.1)" : t, s = i ? { icon: t, label: t, value: t } : Ft(t), o = this._config?.icon?.style || `color: ${s.icon};`, r = this._config?.label?.style || `color: ${s.label};`, a = this._config?.value?.style || `color: ${s.value};`; + const i = (this._config?.color?.target ?? "background") === "foreground", n = i ? "rgba(0, 0, 0, 0.1)" : t, s = i ? { icon: t, label: t, value: t } : Qt(t), o = this._config?.icon?.style || `color: ${s.icon};`, r = this._config?.label?.style || `color: ${s.label};`, a = this._config?.value?.style || `color: ${s.value};`; return { backgroundColor: n, iconStyle: o, labelStyle: r, valueStyle: a }; } _renderRect(t, e, i, n, s) { - const o = this._getRectColor(t, e, i), r = this._getSizeClass(t), a = t.climate?.hvacAction === "heating" || t.climate?.hvacAction === "cooling", l = this._config?.icon?.show ?? !0, h = this._config?.label?.show ?? !0, c = this._config?.value?.show ?? !0, u = this._formatLabel(t), f = this._formatValue(t), { backgroundColor: d, iconStyle: p, labelStyle: $, valueStyle: v } = this._calculateStyles(o), m = s / 2; - return x` + const o = this._getRectColor(t, e, i), r = this._getSizeClass(t), a = t.climate?.hvacAction === "heating" || t.climate?.hvacAction === "cooling", l = this._config?.icon?.show ?? !0, h = this._config?.label?.show ?? !0, c = this._config?.value?.show ?? !0, u = this._formatLabel(t), f = this._formatValue(t), { backgroundColor: d, iconStyle: g, labelStyle: x, valueStyle: v } = this._calculateStyles(o), b = s / 2; + return $`
- ${l && (t.icon || this._config?.icon?.icon) ? x`` : _} - ${h ? x`${u}` : _} - ${c ? x`${f}` : _} - ${this._config?.sparkline?.show !== !1 ? (() => { - const g = t.sparklineData ?? (t.entity_id ? this._sparklineData.get(t.entity_id) : void 0); - return x`
- ${li(g, { - mode: this._config?.sparkline?.mode || "dark", - line: this._config?.sparkline?.line, - fill: this._config?.sparkline?.fill, - hvac: this._config?.sparkline?.hvac, - periodHours: this._getPeriodHours(), - min: this._config?.sparkline?.min, - max: this._config?.sparkline?.max + ${h ? $`${u}` : _} + ${c ? $`${f}` : _} + ${(() => { + const p = this._getSparklineConfig(t.entity_id); + if (!p.show) return _; + const m = t.sparklineData ?? (t.entity_id ? this._sparklineData.get(t.entity_id) : void 0); + return $`
+ ${_i(m, { + mode: p.mode, + line: p.line, + fill: p.fill, + hvac: p.hvac, + periodHours: this._getPeriodHours(p.period), + min: p.min, + max: p.max })} -
`; - })() : _} +
`; + })()}
`; } @@ -1951,7 +2065,7 @@ let T = class extends B { const n = this._entityConfigMap.get(t.entity_id); if (n?.[e]) return n[e]; for (const [s, o] of this._entityConfigMap) - if (o[e] && ie(t.entity_id, s)) + if (o[e] && Y(t.entity_id, s)) return o[e]; } const i = this._config?.[e]; @@ -1960,10 +2074,10 @@ let T = class extends B { _executeAction(t, e) { switch (t.action) { case "more-info": - e && fe(this, "hass-more-info", { entityId: e }); + e && be(this, "hass-more-info", { entityId: e }); break; case "navigate": - "navigation_path" in t && t.navigation_path && Vt(this, t.navigation_path); + "navigation_path" in t && t.navigation_path && Ht(this, t.navigation_path); break; case "url": "url_path" in t && t.url_path && window.open(t.url_path); @@ -1981,7 +2095,7 @@ let T = class extends B { } break; case "assist": - fe(this, "hass-launch-voice-assistant", {}); + be(this, "hass-launch-voice-assistant", {}); break; } } @@ -1991,7 +2105,7 @@ let T = class extends B { const i = this._getActionConfig(e, "hold_action"); i.action !== "none" && (this._holdTimer = setTimeout(() => { this._holdFired = !0, this._clearHoldTimer(), this._executeAction(i, e.entity_id); - }, T._HOLD_THRESHOLD_MS)); + }, P._HOLD_THRESHOLD_MS)); } _onPointerUp(t, e) { if (t.button !== 0 && t.pointerType === "mouse" || (this._clearHoldTimer(), this._holdFired)) return; @@ -2002,20 +2116,20 @@ let T = class extends B { this._holdTimer !== null && (clearTimeout(this._holdTimer), this._holdTimer = null); } }; -T.styles = Ei; -T._HOLD_THRESHOLD_MS = 500; -ce([ - le({ attribute: !1 }) -], T.prototype, "hass", 2); -ce([ - ve() -], T.prototype, "_config", 2); -ce([ - ve() -], T.prototype, "_sparklineData", 2); -T = ce([ - Je("treemap-card") -], T); +P.styles = Fi; +P._HOLD_THRESHOLD_MS = 500; +fe([ + de({ attribute: !1 }) +], P.prototype, "hass", 2); +fe([ + Ae() +], P.prototype, "_config", 2); +fe([ + Ae() +], P.prototype, "_sparklineData", 2); +P = fe([ + ot("treemap-card") +], P); window.customCards = window.customCards || []; window.customCards.push({ type: "treemap-card", @@ -2023,25 +2137,25 @@ window.customCards.push({ description: "Visualize entities as a treemap with size and color based on values", preview: !0 }); -function Di(t, e) { +function Wi(t, e) { return t === e || Number.isNaN(t) && Number.isNaN(e); } -function Oi(t) { - return t == null ? "" : Ke(t); +function Gi(t) { + return t == null ? "" : at(t); } -function Ke(t) { +function at(t) { if (typeof t == "string") return t; - if (Array.isArray(t)) return t.map(Ke).join(","); + if (Array.isArray(t)) return t.map(at).join(","); const e = String(t); return e === "0" && Object.is(Number(t), -0) ? "-0" : e; } -function $e(t) { +function Me(t) { return typeof t == "string" || typeof t == "symbol" ? t : Object.is(t?.valueOf?.(), -0) ? "-0" : String(t); } -function et(t) { - if (Array.isArray(t)) return t.map($e); +function lt(t) { + if (Array.isArray(t)) return t.map(Me); if (typeof t == "symbol") return [t]; - t = Oi(t); + t = Gi(t); const e = [], i = t.length; if (i === 0) return e; let n = 0, s = "", o = "", r = !1, a = !1; @@ -2069,104 +2183,104 @@ function et(t) { } return s && e.push(s), e; } -function pe(t) { +function ye(t) { return t === "__proto__"; } -const Ii = /\.|(\[(?:[^[\]]*|(["'])(?:(?!\2)[^\\]|\\.)*?\2)\])/; -function Hi(t) { +const Yi = /\.|(\[(?:[^[\]]*|(["'])(?:(?!\2)[^\\]|\\.)*?\2)\])/; +function Ji(t) { switch (typeof t) { case "number": case "symbol": return !1; case "string": - return t === "" || t.startsWith(".") || t.endsWith(".") ? !1 : Ii.test(t); + return t === "" || t.startsWith(".") || t.endsWith(".") ? !1 : Yi.test(t); default: return !1; } } -function tt(t, e, i) { +function ct(t, e, i) { if (t == null) return i; switch (typeof e) { case "string": { - if (pe(e)) return i; + if (ye(e)) return i; const n = t[e]; - return n === void 0 ? Hi(e) && !Object.hasOwn(t, e) ? tt(t, et(e), i) : i : n; + return n === void 0 ? Ji(e) && !Object.hasOwn(t, e) ? ct(t, lt(e), i) : i : n; } case "number": case "symbol": { - typeof e == "number" && (e = $e(e)); + typeof e == "number" && (e = Me(e)); const n = t[e]; return n === void 0 ? i : n; } default: { - if (Array.isArray(e)) return Ri(t, e, i); - if (Object.is(e?.valueOf(), -0) ? e = "-0" : e = String(e), pe(e)) return i; + if (Array.isArray(e)) return Zi(t, e, i); + if (Object.is(e?.valueOf(), -0) ? e = "-0" : e = String(e), ye(e)) return i; const n = t[e]; return n === void 0 ? i : n; } } } -function Ri(t, e, i) { +function Zi(t, e, i) { if (e.length === 0) return i; let n = t; for (let s = 0; s < e.length; s++) { - if (n == null || pe(e[s])) return i; + if (n == null || ye(e[s])) return i; n = n[e[s]]; } return n === void 0 ? i : n; } -function Re(t) { +function Ye(t) { return t !== null && (typeof t == "object" || typeof t == "function"); } -const Li = /^(?:0|[1-9]\d*)$/; -function Ui(t, e = Number.MAX_SAFE_INTEGER) { +const Qi = /^(?:0|[1-9]\d*)$/; +function Xi(t, e = Number.MAX_SAFE_INTEGER) { switch (typeof t) { case "number": return Number.isInteger(t) && t >= 0 && t < e; case "symbol": return !1; case "string": - return Li.test(t); + return Qi.test(t); } } -function Bi(t) { +function Ki(t) { return typeof t == "symbol" || t instanceof Symbol; } -const Fi = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, ji = /^\w*$/; -function qi(t, e) { - return Array.isArray(t) ? !1 : typeof t == "number" || typeof t == "boolean" || t == null || Bi(t) ? !0 : typeof t == "string" && (ji.test(t) || !Fi.test(t)) || e != null && Object.hasOwn(e, t); +const en = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, tn = /^\w*$/; +function nn(t, e) { + return Array.isArray(t) ? !1 : typeof t == "number" || typeof t == "boolean" || t == null || Ki(t) ? !0 : typeof t == "string" && (tn.test(t) || !en.test(t)) || e != null && Object.hasOwn(e, t); } -const Wi = (t, e, i) => { +const on = (t, e, i) => { const n = t[e]; - (!(Object.hasOwn(t, e) && Di(n, i)) || i === void 0 && !(e in t)) && (t[e] = i); + (!(Object.hasOwn(t, e) && Wi(n, i)) || i === void 0 && !(e in t)) && (t[e] = i); }; -function Gi(t) { +function sn(t) { return t === "__proto__" || t === "constructor" || t === "prototype"; } -function Yi(t, e, i, n) { - if (t == null && !Re(t)) return t; +function rn(t, e, i, n) { + if (t == null && !Ye(t)) return t; let s; - qi(e, t) ? s = [e] : Array.isArray(e) ? s = e : s = et(e); - const o = i(tt(t, s)); + nn(e, t) ? s = [e] : Array.isArray(e) ? s = e : s = lt(e); + const o = i(ct(t, s)); let r = t; for (let a = 0; a < s.length && r != null; a++) { - const l = $e(s[a]); - if (Gi(l)) return t; + const l = Me(s[a]); + if (sn(l)) return t; let h; if (a === s.length - 1) h = o; else { const c = r[l], u = n?.(c, l, t); - h = u !== void 0 ? u : Re(c) ? c : Ui(s[a + 1]) ? [] : {}; + h = u !== void 0 ? u : Ye(c) ? c : Xi(s[a + 1]) ? [] : {}; } - Wi(r, l, h), r = r[l]; + on(r, l, h), r = r[l]; } return t; } -function N(t, e, i) { - return Yi(t, e, () => i, () => { +function V(t, e, i) { + return rn(t, e, () => i, () => { }); } -const Ji = Fe` +const an = Xe` :host { display: block; } @@ -2419,79 +2533,79 @@ const Ji = Fe` .footer-banner .separator { opacity: 0.3; } -`, it = { no_config: "Keine Konfiguration", yaml_only: "JSON-Attributmodus wird nur über YAML konfiguriert.", entities: { label: "Entitätsmuster (eines pro Zeile)", helper: "Wildcards (*) werden unterstützt", placeholder: `sensor.temperature_* +`, ht = { no_config: "Keine Konfiguration", yaml_only: "JSON-Attributmodus wird nur über YAML konfiguriert.", entities: { label: "Entitätsmuster (eines pro Zeile)", helper: "Wildcards (*) werden unterstützt", placeholder: `sensor.temperature_* climate.* light.living_*` }, exclude: { label: "Ausschlussmuster", placeholder: `*_battery *_unavailable -light.*` }, label: { title: "Bezeichnung", prefix: "Präfix", suffix: "Suffix", find: "Suchen", replace: "Ersetzen mit", find_placeholder: "Temperatur", replace_placeholder: "Temp" }, value: { title: "Wert", prefix: "Präfix", suffix: "Suffix", suffix_placeholder: "%", precision: "Dezimalstellen", abbreviate: "Große Zahlen abkürzen (k, M, B)" }, icon: { title: "Symbol", override: "Symbol ersetzen" }, sparkline: { title: "Sparkline", period: "Zeitraum", period_12h: "12 Stunden", period_24h: "24 Stunden", period_7d: "7 Tage", period_30d: "30 Tage", mode: "Modus", mode_dark: "Dunkel", mode_light: "Hell", show_line: "Linie anzeigen", show_fill: "Füllung anzeigen", show_hvac: "HVAC-Balken anzeigen (Klimaentitäten)", min: "Y-Achse Min", max: "Y-Achse Max" }, colors: { title: "Farben", target: "Farbe anwenden auf", target_background: "Hintergrund", target_foreground: "Vordergrund (Text)", gradient: "Farbverlauf (niedrig → mittel → hoch)", low: "Niedrig ≤", mid: "Mittel =", high: "Hoch ≥", auto: "auto", middle: "mitte", hvac_colors: "HVAC-Farben (Klimaentitäten)", heating: "Heizen", cooling: "Kühlen", off: "Aus", unavailable: "Nicht verfügbar" }, size: { title: "Größe", equal: "Gleich große Rechtecke", inverse: "Invertiert (niedrige Werte = größer)", min: "Min", max: "Max" }, layout: { title: "Layout", height: "Höhe (px)", gap: "Abstand (px)" }, footer: { docs: "Doku", issues: "Bug oder Idee?", star: "Gefällt es? Stern geben!" }, actions: { title: "Aktionen", tap_action: "Tipp-Aktion", hold_action: "Halten-Aktion" }, data: { title: "Daten", order: "Sortierung", desc: "Absteigend (hoch zuerst)", asc: "Aufsteigend (niedrig zuerst)", limit: "Limit", all: "alle", above: "Filter oberhalb", below: "Filter unterhalb", unavailable: "Nicht verfügbare Entitäten einschließen", sort_by: "Sortieren nach", sort_by_value: "Wert (optimales Layout)", sort_by_entity_id: "Entitäts-ID", sort_by_label: "Bezeichnung", sort_by_default: "Konfigurationsreihenfolge" } }, Zi = { - editor: it -}, Xi = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ +light.*` }, label: { title: "Bezeichnung", prefix: "Präfix", suffix: "Suffix", find: "Suchen", replace: "Ersetzen mit", find_placeholder: "Temperatur", replace_placeholder: "Temp" }, value: { title: "Wert", prefix: "Präfix", suffix: "Suffix", suffix_placeholder: "%", precision: "Dezimalstellen", abbreviate: "Große Zahlen abkürzen (k, M, B)" }, icon: { title: "Symbol", override: "Symbol ersetzen" }, sparkline: { title: "Sparkline", period: "Zeitraum", period_12h: "12 Stunden", period_24h: "24 Stunden", period_7d: "7 Tage", period_30d: "30 Tage", mode: "Modus", mode_dark: "Dunkel", mode_light: "Hell", show_line: "Linie anzeigen", show_fill: "Füllung anzeigen", show_hvac: "HVAC-Balken anzeigen (Klimaentitäten)", min: "Y-Achse Min", max: "Y-Achse Max", function: "Statistik", function_mean: "Mittelwert", function_min: "Minimum", function_max: "Maximum", function_sum: "Summe (laufend)", function_state: "Zustand (letzter Wert)", function_change: "Änderung (Differenz je Intervall)", entity: "Quell-Entität", entity_helper: "Leer lassen, um die eigene Entität der Kachel zu zeichnen. Alle Statistiken stammen aus den Langzeitstatistiken, Sensoren ohne state_class bleiben daher leer." }, colors: { title: "Farben", target: "Farbe anwenden auf", target_background: "Hintergrund", target_foreground: "Vordergrund (Text)", gradient: "Farbverlauf (niedrig → mittel → hoch)", low: "Niedrig ≤", mid: "Mittel =", high: "Hoch ≥", auto: "auto", middle: "mitte", hvac_colors: "HVAC-Farben (Klimaentitäten)", heating: "Heizen", cooling: "Kühlen", off: "Aus", unavailable: "Nicht verfügbar" }, size: { title: "Größe", equal: "Gleich große Rechtecke", inverse: "Invertiert (niedrige Werte = größer)", min: "Min", max: "Max" }, layout: { title: "Layout", height: "Höhe (px)", gap: "Abstand (px)" }, footer: { docs: "Doku", issues: "Bug oder Idee?", star: "Gefällt es? Stern geben!" }, actions: { title: "Aktionen", tap_action: "Tipp-Aktion", hold_action: "Halten-Aktion" }, data: { title: "Daten", order: "Sortierung", desc: "Absteigend (hoch zuerst)", asc: "Aufsteigend (niedrig zuerst)", limit: "Limit", all: "alle", above: "Filter oberhalb", below: "Filter unterhalb", unavailable: "Nicht verfügbare Entitäten einschließen", sort_by: "Sortieren nach", sort_by_value: "Wert (optimales Layout)", sort_by_entity_id: "Entitäts-ID", sort_by_label: "Bezeichnung", sort_by_default: "Konfigurationsreihenfolge" } }, ln = { + editor: ht +}, cn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, - default: Zi, - editor: it -}, Symbol.toStringTag, { value: "Module" })), nt = { no_config: "No configuration", yaml_only: "JSON attribute mode is configured via YAML only.", entities: { label: "Entity patterns (one per line)", helper: "Wildcards (*) are supported", placeholder: `sensor.temperature_* + default: ln, + editor: ht +}, Symbol.toStringTag, { value: "Module" })), ut = { no_config: "No configuration", yaml_only: "JSON attribute mode is configured via YAML only.", entities: { label: "Entity patterns (one per line)", helper: "Wildcards (*) are supported", placeholder: `sensor.temperature_* climate.* light.living_*` }, exclude: { label: "Exclude patterns", placeholder: `*_battery *_unavailable -light.*` }, label: { title: "Label", prefix: "Prefix", suffix: "Suffix", find: "Find", replace: "Replace with", find_placeholder: "Temperature", replace_placeholder: "Temp" }, value: { title: "Value", prefix: "Prefix", suffix: "Suffix", suffix_placeholder: "%", precision: "Decimal places", abbreviate: "Abbreviate large numbers (k, M, B)" }, icon: { title: "Icon", override: "Override icon" }, sparkline: { title: "Sparkline", period: "Period", period_12h: "12 hours", period_24h: "24 hours", period_7d: "7 days", period_30d: "30 days", mode: "Mode", mode_dark: "Dark", mode_light: "Light", show_line: "Show line", show_fill: "Show fill", show_hvac: "Show HVAC bars (climate entities)", min: "Y-axis min", max: "Y-axis max" }, colors: { title: "Colors", target: "Apply color to", target_background: "Background", target_foreground: "Foreground (text)", gradient: "Color gradient (low → mid → high)", low: "Low ≤", mid: "Mid =", high: "High ≥", auto: "auto", middle: "middle", hvac_colors: "HVAC colors (climate entities)", heating: "Heating", cooling: "Cooling", off: "Off", unavailable: "Unavailable" }, size: { title: "Size", equal: "Equal size rectangles", inverse: "Inverse (low values = bigger)", min: "Min", max: "Max" }, layout: { title: "Layout", height: "Height (px)", gap: "Gap (px)" }, footer: { docs: "Docs", issues: "Bug or idea?", star: "Like it? Star it!" }, actions: { title: "Actions", tap_action: "Tap action", hold_action: "Hold action" }, data: { title: "Data", order: "Order", desc: "Descending (high first)", asc: "Ascending (low first)", sort_by: "Sort by", sort_by_value: "Value (optimal layout)", sort_by_entity_id: "Entity ID", sort_by_label: "Label", sort_by_default: "Config order", limit: "Limit", all: "all", above: "Filter above", below: "Filter below", unavailable: "Include unavailable entities" } }, Qi = { - editor: nt -}, Ki = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ +light.*` }, label: { title: "Label", prefix: "Prefix", suffix: "Suffix", find: "Find", replace: "Replace with", find_placeholder: "Temperature", replace_placeholder: "Temp" }, value: { title: "Value", prefix: "Prefix", suffix: "Suffix", suffix_placeholder: "%", precision: "Decimal places", abbreviate: "Abbreviate large numbers (k, M, B)" }, icon: { title: "Icon", override: "Override icon" }, sparkline: { title: "Sparkline", period: "Period", period_12h: "12 hours", period_24h: "24 hours", period_7d: "7 days", period_30d: "30 days", mode: "Mode", mode_dark: "Dark", mode_light: "Light", show_line: "Show line", show_fill: "Show fill", show_hvac: "Show HVAC bars (climate entities)", min: "Y-axis min", max: "Y-axis max", function: "Statistic", function_mean: "Mean (average)", function_min: "Min", function_max: "Max", function_sum: "Sum (running total)", function_state: "State (last value)", function_change: "Change (difference per bucket)", entity: "Source entity", entity_helper: "Leave empty to plot each tile's own entity. All statistics come from long-term statistics, so sensors without a state_class stay blank." }, colors: { title: "Colors", target: "Apply color to", target_background: "Background", target_foreground: "Foreground (text)", gradient: "Color gradient (low → mid → high)", low: "Low ≤", mid: "Mid =", high: "High ≥", auto: "auto", middle: "middle", hvac_colors: "HVAC colors (climate entities)", heating: "Heating", cooling: "Cooling", off: "Off", unavailable: "Unavailable" }, size: { title: "Size", equal: "Equal size rectangles", inverse: "Inverse (low values = bigger)", min: "Min", max: "Max" }, layout: { title: "Layout", height: "Height (px)", gap: "Gap (px)" }, footer: { docs: "Docs", issues: "Bug or idea?", star: "Like it? Star it!" }, actions: { title: "Actions", tap_action: "Tap action", hold_action: "Hold action" }, data: { title: "Data", order: "Order", desc: "Descending (high first)", asc: "Ascending (low first)", sort_by: "Sort by", sort_by_value: "Value (optimal layout)", sort_by_entity_id: "Entity ID", sort_by_label: "Label", sort_by_default: "Config order", limit: "Limit", all: "all", above: "Filter above", below: "Filter below", unavailable: "Include unavailable entities" } }, hn = { + editor: ut +}, un = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, - default: Qi, - editor: nt -}, Symbol.toStringTag, { value: "Module" })), ot = { no_config: "Aucune configuration", yaml_only: "Le mode attribut JSON est configurable uniquement via YAML.", entities: { label: "Motifs d'entités (un par ligne)", helper: "Wildcards (*) supportés", placeholder: `sensor.temperature_* + default: hn, + editor: ut +}, Symbol.toStringTag, { value: "Module" })), dt = { no_config: "Aucune configuration", yaml_only: "Le mode attribut JSON est configurable uniquement via YAML.", entities: { label: "Motifs d'entités (un par ligne)", helper: "Wildcards (*) supportés", placeholder: `sensor.temperature_* climate.* light.living_*` }, exclude: { label: "Motifs à exclure", placeholder: `*_battery *_unavailable -light.*` }, label: { title: "Libellé", prefix: "Préfixe", suffix: "Suffixe", find: "Rechercher", replace: "Remplacer par", find_placeholder: "Température", replace_placeholder: "Temp" }, value: { title: "Valeur", prefix: "Préfixe", suffix: "Suffixe", suffix_placeholder: "%", precision: "Décimales", abbreviate: "Abréger les grands nombres (k, M, B)" }, icon: { title: "Icône", override: "Remplacer l'icône" }, sparkline: { title: "Sparkline", period: "Période", period_12h: "12 heures", period_24h: "24 heures", period_7d: "7 jours", period_30d: "30 jours", mode: "Mode", mode_dark: "Sombre", mode_light: "Clair", show_line: "Afficher la ligne", show_fill: "Afficher le remplissage", show_hvac: "Afficher les barres HVAC (entités climatiques)", min: "Min axe Y", max: "Max axe Y" }, colors: { title: "Couleurs", target: "Appliquer la couleur à", target_background: "Arrière-plan", target_foreground: "Premier plan (texte)", gradient: "Dégradé de couleur (bas → milieu → haut)", low: "Bas ≤", mid: "Milieu =", high: "Haut ≥", auto: "auto", middle: "milieu", hvac_colors: "Couleurs HVAC (entités climatiques)", heating: "Chauffage", cooling: "Climatisation", off: "Éteint", unavailable: "Indisponible" }, size: { title: "Taille", equal: "Rectangles de taille égale", inverse: "Inverse (valeurs basses = plus grand)", min: "Min", max: "Max" }, layout: { title: "Disposition", height: "Hauteur (px)", gap: "Espacement (px)" }, footer: { docs: "Docs", issues: "Bug ou idée?", star: "Vous aimez? Étoile!" }, actions: { title: "Actions", tap_action: "Action au tap", hold_action: "Action au maintien" }, data: { title: "Données", order: "Ordre", desc: "Décroissant (haut en premier)", asc: "Croissant (bas en premier)", limit: "Limite", all: "tous", above: "Filtrer au-dessus", below: "Filtrer en-dessous", unavailable: "Inclure les entités indisponibles", sort_by: "Trier par", sort_by_value: "Valeur (disposition optimale)", sort_by_entity_id: "ID d'entité", sort_by_label: "Étiquette", sort_by_default: "Ordre de configuration" } }, en = { - editor: ot -}, tn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ +light.*` }, label: { title: "Libellé", prefix: "Préfixe", suffix: "Suffixe", find: "Rechercher", replace: "Remplacer par", find_placeholder: "Température", replace_placeholder: "Temp" }, value: { title: "Valeur", prefix: "Préfixe", suffix: "Suffixe", suffix_placeholder: "%", precision: "Décimales", abbreviate: "Abréger les grands nombres (k, M, B)" }, icon: { title: "Icône", override: "Remplacer l'icône" }, sparkline: { title: "Sparkline", period: "Période", period_12h: "12 heures", period_24h: "24 heures", period_7d: "7 jours", period_30d: "30 jours", mode: "Mode", mode_dark: "Sombre", mode_light: "Clair", show_line: "Afficher la ligne", show_fill: "Afficher le remplissage", show_hvac: "Afficher les barres HVAC (entités climatiques)", min: "Min axe Y", max: "Max axe Y", function: "Statistique", function_mean: "Moyenne", function_min: "Minimum", function_max: "Maximum", function_sum: "Somme (cumulée)", function_state: "État (dernière valeur)", function_change: "Variation (différence par intervalle)", entity: "Entité source", entity_helper: "Laisser vide pour tracer l’entité de la tuile. Toutes les statistiques proviennent des statistiques long terme : les capteurs sans state_class restent vides." }, colors: { title: "Couleurs", target: "Appliquer la couleur à", target_background: "Arrière-plan", target_foreground: "Premier plan (texte)", gradient: "Dégradé de couleur (bas → milieu → haut)", low: "Bas ≤", mid: "Milieu =", high: "Haut ≥", auto: "auto", middle: "milieu", hvac_colors: "Couleurs HVAC (entités climatiques)", heating: "Chauffage", cooling: "Climatisation", off: "Éteint", unavailable: "Indisponible" }, size: { title: "Taille", equal: "Rectangles de taille égale", inverse: "Inverse (valeurs basses = plus grand)", min: "Min", max: "Max" }, layout: { title: "Disposition", height: "Hauteur (px)", gap: "Espacement (px)" }, footer: { docs: "Docs", issues: "Bug ou idée?", star: "Vous aimez? Étoile!" }, actions: { title: "Actions", tap_action: "Action au tap", hold_action: "Action au maintien" }, data: { title: "Données", order: "Ordre", desc: "Décroissant (haut en premier)", asc: "Croissant (bas en premier)", limit: "Limite", all: "tous", above: "Filtrer au-dessus", below: "Filtrer en-dessous", unavailable: "Inclure les entités indisponibles", sort_by: "Trier par", sort_by_value: "Valeur (disposition optimale)", sort_by_entity_id: "ID d'entité", sort_by_label: "Étiquette", sort_by_default: "Ordre de configuration" } }, dn = { + editor: dt +}, fn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, - default: en, - editor: ot -}, Symbol.toStringTag, { value: "Module" })), Le = { - de: Xi, - en: Ki, - fr: tn + default: dn, + editor: dt +}, Symbol.toStringTag, { value: "Module" })), Je = { + de: cn, + en: un, + fr: fn }; -function nn(t) { +function pn(t) { return typeof t == "object" && t !== null; } -function Ue(t, e) { +function Ze(t, e) { const i = e.split("."); let n = t; for (const s of i) - if (n && nn(n) && s in n) + if (n && pn(n) && s in n) n = n[s]; else return; return typeof n == "string" ? n : void 0; } -function on(t) { +function gn(t) { return (t?.language ?? "en").split("-")[0] ?? "en"; } -function sn(t, e) { - const i = on(t), n = Le[i]; +function _n(t, e) { + const i = gn(t), n = Je[i]; if (n) { - const s = Ue(n, e); + const s = Ze(n, e); if (s) return s; } if (i !== "en") { - const s = Le.en; + const s = Je.en; if (s) { - const o = Ue(s, e); + const o = Ze(s, e); if (o) return o; } } return e; } -var rn = Object.defineProperty, an = Object.getOwnPropertyDescriptor, he = (t, e, i, n) => { - for (var s = n > 1 ? void 0 : n ? an(e, i) : e, o = t.length - 1, r; o >= 0; o--) +var mn = Object.defineProperty, bn = Object.getOwnPropertyDescriptor, pe = (t, e, i, n) => { + for (var s = n > 1 ? void 0 : n ? bn(e, i) : e, o = t.length - 1, r; o >= 0; o--) (r = t[o]) && (s = (n ? r(e, i, s) : r(s)) || s); - return n && s && rn(e, i, s), s; + return n && s && mn(e, i, s), s; }; -const ne = "https://github.com/omachala/ha-treemap-card"; -function Y(t) { +const oe = "https://github.com/omachala/ha-treemap-card"; +function F(t) { const e = t.target; if (e && typeof e == "object" && "value" in e) { const i = e.value; @@ -2499,7 +2613,7 @@ function Y(t) { } return ""; } -function ln(t) { +function vn(t) { const e = t.target; return e instanceof HTMLInputElement ? e.checked : !1; } @@ -2517,7 +2631,7 @@ let H = class extends B { * Shorthand for localize with current hass context */ _t(t) { - return sn(this.hass, t); + return _n(this.hass, t); } _fireConfigChanged() { this._config && this.dispatchEvent( @@ -2533,33 +2647,74 @@ let H = class extends B { */ _handleTextChange(t, e) { if (!this._config) return; - const i = Y(e) || void 0; - this._config = N({ ...this._config }, t, i), this._fireConfigChanged(); + const i = F(e) || void 0; + this._config = V({ ...this._config }, t, i), this._fireConfigChanged(); } /** * Generic handler for checkbox changes */ _handleBoolChange(t, e) { if (!this._config) return; - const i = ln(e); - this._config = N({ ...this._config }, t, i), this._fireConfigChanged(); + const i = vn(e); + this._config = V({ ...this._config }, t, i), this._fireConfigChanged(); } /** * Generic handler for number input changes */ _handleNumberChange(t, e) { if (!this._config) return; - const i = Y(e), n = i ? Number.parseFloat(i) : void 0; - this._config = N({ ...this._config }, t, n), this._fireConfigChanged(); + const i = F(e), n = i ? Number.parseFloat(i) : void 0; + this._config = V({ ...this._config }, t, n), this._fireConfigChanged(); } /** - * Handler for entities textarea (splits lines into array) + * Handler for entities textarea (splits lines into array). + * + * Any entity that survives the edit keeps its object config, so per-entity + * settings the textarea cannot show - name, color, actions, sparkline + * overrides - are not destroyed by typing in it. */ _handleEntitiesChange(t) { if (!this._config) return; - const i = Y(t).split(` -`).map((n) => n.trim()).filter((n) => n.length > 0); - this._config = N({ ...this._config }, "entities", i), this._fireConfigChanged(); + const e = /* @__PURE__ */ new Map(); + for (const n of this._config.entities ?? []) + re(n) && e.set(n.entity, n); + const i = F(t).split(` +`).map((n) => n.trim()).filter((n) => n.length > 0).map((n) => e.get(n) ?? n); + this._config = V({ ...this._config }, "entities", i), this._fireConfigChanged(); + } + /** + * The value to display for a card-level sparkline field. + * + * The editor presents one setting for the whole card, but YAML may override a + * key per entity. When the tiles do not all resolve to the same value there is + * no honest value to show, so the control is left unselected rather than + * claiming a value that only some tiles use. + */ + _sparklineFieldValue(t) { + const e = this._config?.sparkline, i = this._config?.entities ?? [], n = he(e)[t]; + if (i.length === 0) return n ?? ""; + let s, o = !0; + for (const r of i) { + const a = re(r) ? r.sparkline : void 0, l = he(e, a)[t]; + if (o) + s = l, o = !1; + else if (s !== l) + return ""; + } + return s ?? ""; + } + /** + * Write a card-level sparkline setting. + * + * Per-entity overrides are left alone, exactly as a card-level colour change + * leaves per-entity `color` alone. A tile that overrides this key keeps its + * own value; the control renders blank in that case, which is the signal that + * the tiles do not all agree. + */ + _handleSparklineFieldChange(t, e) { + if (!this._config) return; + const i = F(e).trim() || void 0; + this._config = V({ ...this._config }, `sparkline.${t}`, i), this._fireConfigChanged(); } /** * Handler for ha-icon-picker value-changed event @@ -2567,24 +2722,24 @@ let H = class extends B { _handleIconChange(t) { if (!this._config) return; const e = t.detail?.value || void 0; - this._config = N({ ...this._config }, "icon.icon", e), this._fireConfigChanged(); + this._config = V({ ...this._config }, "icon.icon", e), this._fireConfigChanged(); } /** * Handler for find/replace inputs (combines into 'find/replace' format) */ _handleReplaceChange(t, e) { if (!this._config) return; - const i = Y(e), s = (this._config.label?.replace ?? "/").split("/"), o = t === "find" ? i : s[0] ?? "", r = t === "replace" ? i : s[1] ?? "", a = o || r ? `${o}/${r}` : void 0; - this._config = N({ ...this._config }, "label.replace", a), this._fireConfigChanged(); + const i = F(e), s = (this._config.label?.replace ?? "/").split("/"), o = t === "find" ? i : s[0] ?? "", r = t === "replace" ? i : s[1] ?? "", a = o || r ? `${o}/${r}` : void 0; + this._config = V({ ...this._config }, "label.replace", a), this._fireConfigChanged(); } /** * Handler for exclude textarea (splits lines into array, removes if empty) */ _handleExcludeChange(t) { if (!this._config) return; - const i = Y(t).split(` + const i = F(t).split(` `).map((n) => n.trim()).filter((n) => n.length > 0); - this._config = N({ ...this._config }, "exclude", i.length > 0 ? i : void 0), this._fireConfigChanged(); + this._config = V({ ...this._config }, "exclude", i.length > 0 ? i : void 0), this._fireConfigChanged(); } _handleActionsChanged(t) { if (!this._config) return; @@ -2596,17 +2751,17 @@ let H = class extends B { }, this._fireConfigChanged(); } _docsUrl(t) { - return `${ne}?tab=readme-ov-file#${t}`; + return `${oe}?tab=readme-ov-file#${t}`; } _renderDocsLink(t) { - return x` + return $` `; } _renderToggleSection(t) { - return x` + return $` ${this._t("editor.no_config")}
`; + return $`
${this._t("editor.no_config")}
`; if (this._config.entity) - return x` + return $`
${this._t("editor.yaml_only")}
`; - const t = this._config.entities?.map((o) => Ze(o) ? o.entity : o).join(` + const t = this._config.entities?.map((o) => re(o) ? o.entity : o).join(` `) ?? "", e = this._config.exclude?.join(` `) ?? "", i = this._config.label ?? {}, n = this._config.value ?? {}, s = this._config.icon ?? {}; - return x` + return $`
@@ -2667,7 +2822,7 @@ let H = class extends B { checked: i.show !== !1, onToggle: (o) => this._handleBoolChange("label.show", o), docsAnchor: "label", - content: x` + content: $`
this._handleBoolChange("value.show", o), docsAnchor: "value", - content: x` + content: $`
this._handleBoolChange("icon.show", o), docsAnchor: "icon", - content: x` + content: $` ${this._t("editor.sparkline.title")}
this._handleTextChange("sparkline.period", o)} + .value=${this._sparklineFieldValue("period")} + @selected=${(o) => this._handleSparklineFieldChange("period", o)} @closed=${(o) => o.stopPropagation()} > ${this._t("editor.sparkline.period_12h")} @@ -2778,9 +2934,31 @@ let H = class extends B { ${this._t("editor.sparkline.period_30d")} this._handleSparklineFieldChange("function", o)} + @closed=${(o) => o.stopPropagation()} + > + ${Se.map( + (o) => $`${this._t(`editor.sparkline.function_${o}`)}` + )} + + this._handleSparklineFieldChange("entity", o)} + placeholder="sensor.outdoor_humidity" + > + ${this._t("editor.sparkline.entity_helper")} + this._handleTextChange("sparkline.mode", o)} + .value=${this._sparklineFieldValue("mode")} + @selected=${(o) => this._handleSparklineFieldChange("mode", o)} @closed=${(o) => o.stopPropagation()} > ${this._t("editor.sparkline.mode_dark")} @@ -3084,17 +3262,17 @@ let H = class extends B {