Compare commits

..
4 Commits
128 changed files with 1730 additions and 5709 deletions
+1 -1
View File
@@ -10,4 +10,4 @@ max_line_length = 120
[*.md] [*.md]
max_line_length = off max_line_length = off
trim_trailing_whitespace = true trim_trailing_whitespace = false
+1 -3
View File
@@ -4,7 +4,5 @@ DOCKER_ROOT="$DOCKER_REPO/$DOCKER_GROUP"
VERSION=$(grep -m 1 'version' ./pyproject.toml | grep -oP 'version\s*=\s*"\K[^"]+') VERSION=$(grep -m 1 'version' ./pyproject.toml | grep -oP 'version\s*=\s*"\K[^"]+')
PYTHON_VERSION=$(grep -m 1 'python' ./pyproject.toml | grep -oP 'python\s*=\s*"\^?\K[^"]+') PYTHON_VERSION=$(grep -m 1 'python' ./pyproject.toml | grep -oP 'python\s*=\s*"\^?\K[^"]+')
DOCKER_PROJECTS=("gallery") DOCKER_PROJECTS=("gallery")
DOCKER_TAG="${DOCKER_TAG:-latest}"
OPENWEATHER_KEY="" OPENWEATHER_KEY="<EMPTY>"
GISMETEO_AUTH=""
-1
View File
@@ -6,4 +6,3 @@
static/node_modules static/node_modules
static/dist static/dist
.env .env
dist
-9
View File
@@ -1,9 +0,0 @@
[presets.python.tasks.setup.playwright]
conditions = ["{{ '.venv/bin/playwright' | file }}"]
commands = [".venv/bin/playwright install chromium --with-deps --only-shell"]
[presets.locales.tasks.build.locales]
priority = 1
conditions = ["{{ 'locales/ru/LC_MESSAGES' | file }}"]
cwd = "locales/ru/LC_MESSAGES"
commands = ["msgfmt messages.po"]
+14 -3
View File
@@ -4,12 +4,23 @@ ignore=.venv
[MESSAGES CONTROL] [MESSAGES CONTROL]
disable= disable=
missing-docstring, missing-docstring,
fixme,
invalid-name,
duplicate-code,
too-few-public-methods, too-few-public-methods,
too-many-instance-attributes,
too-many-arguments,
too-many-locals, too-many-locals,
too-many-boolean-expressions,
too-many-public-methods,
no-else-return, no-else-return,
singleton-comparison,
unused-argument,
unspecified-encoding,
fixme,
duplicate-code,
extension-pkg-allow-list=
lxml,
GeoIP,
pydantic
[MISCELLANEOUS] [MISCELLANEOUS]
notes=FIXME,TODO notes=FIXME,TODO
+1 -5
View File
@@ -9,7 +9,7 @@ COPY pyproject.toml poetry.lock README.md ./
RUN poetry config virtualenvs.in-project true RUN poetry config virtualenvs.in-project true
RUN --mount=type=cache,target=/root/.cache/pypoetry/cache \ RUN --mount=type=cache,target=/root/.cache/pypoetry/cache \
--mount=type=cache,target=/root/.cache/pypoetry/artifacts \ --mount=type=cache,target=/root/.cache/pypoetry/artifacts \
poetry install --extras app --no-root poetry install --with app --no-root
COPY locales ./locales COPY locales ./locales
RUN cd locales/ru/LC_MESSAGES && msgfmt messages.po RUN cd locales/ru/LC_MESSAGES && msgfmt messages.po
@@ -27,12 +27,8 @@ ENV PATH="/app/.venv/bin:$PATH"
WORKDIR /app WORKDIR /app
ENV TZ="Europe/Moscow" ENV TZ="Europe/Moscow"
COPY --from=builder /app ./ COPY --from=builder /app ./
RUN .venv/bin/playwright install chromium --with-deps --only-shell
COPY --from=node-builder /app/dist ./static/dist COPY --from=node-builder /app/dist ./static/dist
COPY gallery gallery/ COPY gallery gallery/
COPY --from=builder --parents locales/**/*.mo ./ COPY --from=builder --parents locales/**/*.mo ./
+6 -68
View File
@@ -1,75 +1,13 @@
# API Gallery # API Gallery
Currently implemented APIs: Weather and TV program API
- Weather forecast ![API Gallery](docs/screenshot.png "API Gallery")
- TV program
## API ## View
Swagger: https://api.shmyga.ru/docs
### Weather
#### Providers list
```
https://api.shmyga.ru/api/weather/providers
```
#### Locations search
```
https://api.shmyga.ru/api/weather/{provider}/locations?query={query}
```
#### Weather forecast
```
https://api.shmyga.ru/api/weather/{provider}/{location_id}/day/{date}
https://api.shmyga.ru/api/weather/{provider}/{location_id}/days/{days_count}
```
### TV program
#### Providers list
```
https://api.shmyga.ru/api/schedule/providers
```
#### Channels search
```
https://api.shmyga.ru/api/schedule/{provider}/channels?query={query}
```
#### TV program
```
https://api.shmyga.ru/api/schedule/{provider}/{channel_id}/{date}
```
## Providers
### Weather
| Provider | Site | API sample |
| :- | :- | :- |
| gismeteo | https://www.gismeteo.ru | https://api.shmyga.ru/api/weather/gismeteo/orel-4432/day/today |
| openweather | https://openweathermap.org | https://api.shmyga.ru/api/weather/openweather/52.9685433%3A36.0692477/day/today |
| yandex | https://yandex.ru/pogoda | https://api.shmyga.ru/api/weather/yandex/10/day/today |
| rp5 | https://rp5.ru | https://api.shmyga.ru/api/weather/rp5/Погода_в_Орле%2C_Орловская_область/day/today |
### TV program
| Provider | Site | API sample |
| :- | :- | :- |
| matchtv | https://matchtv.ru/tvguide | https://api.shmyga.ru/api/schedule/matchtv/igra/today |
| yandextv | https://tv.yandex.ru | https://api.shmyga.ru/api/schedule/yandextv/146/today |
## Demo
https://api.shmyga.ru https://api.shmyga.ru
![API Gallery](docs/screenshot.png "API Gallery") ## Swagger
https://api.shmyga.ru/docs
-1
View File
@@ -13,7 +13,6 @@ services:
environment: environment:
- REDIS_HOST=redis - REDIS_HOST=redis
- OPENWEATHER_KEY=$OPENWEATHER_KEY - OPENWEATHER_KEY=$OPENWEATHER_KEY
- GISMETEO_AUTH=$GISMETEO_AUTH
- DEBUG=1 - DEBUG=1
ports: ports:
- 8000:80 - 8000:80
+4 -5
View File
@@ -1,19 +1,18 @@
name: gallery-${DOCKER_TAG} name: gallery
services: services:
redis: redis:
container_name: gallery-${DOCKER_TAG}-redis container_name: gallery-redis
image: redis:alpine image: redis:alpine
stop_grace_period: 3s stop_grace_period: 3s
volumes: volumes:
- redis_data:/data - redis_data:/data
app: app:
container_name: gallery-${DOCKER_TAG}-app container_name: gallery-app
image: ${DOCKER_ROOT}/gallery:${DOCKER_TAG} image: ${DOCKER_ROOT}/gallery
environment: environment:
- REDIS_HOST=redis - REDIS_HOST=redis
- OPENWEATHER_KEY=$OPENWEATHER_KEY - OPENWEATHER_KEY=$OPENWEATHER_KEY
- GISMETEO_AUTH=$GISMETEO_AUTH
depends_on: depends_on:
- redis - redis
ports: ports:
-1
View File
@@ -9,7 +9,6 @@
"python.testing.unittestEnabled": false, "python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true, "python.testing.pytestEnabled": true,
"python.terminal.useEnvFile": true, "python.terminal.useEnvFile": true,
"python.analysis.importFormat": "relative",
"python-envs.pythonProjects": [ "python-envs.pythonProjects": [
{ {
"path": ".", "path": ".",
+1 -1
View File
@@ -10,7 +10,7 @@ caches.set_config(
{ {
"default": { "default": {
"cache": "aiocache.SimpleMemoryCache", "cache": "aiocache.SimpleMemoryCache",
"serializer": {"class": "aiocache.serializers.PickleSerializer"}, "serializer": {"class": "aiocache.serializers.StringSerializer"},
}, },
"redis": { "redis": {
"cache": "aiocache.RedisCache", "cache": "aiocache.RedisCache",
-25
View File
@@ -1,25 +0,0 @@
import datetime
from typing import Annotated
from fastapi import Depends, HTTPException, status
def date_parser(date: str) -> datetime.date:
if date == "today":
return datetime.date.today()
elif date == "tomorrow":
return datetime.date.today() + datetime.timedelta(days=1)
elif date.startswith("day-"):
days = int(date.split("-")[-1])
return datetime.date.today() + datetime.timedelta(days=days)
else:
try:
return datetime.date.strptime(date, "%Y-%m-%d")
except ValueError as exc:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail={"date": f"{exc}"},
) from exc
DateDepends = Annotated[datetime.date, Depends(date_parser)]
+3 -3
View File
@@ -1,3 +1,5 @@
import datetime
from fastapi import APIRouter from fastapi import APIRouter
from gallery.easel.core import AppRequest from gallery.easel.core import AppRequest
@@ -5,8 +7,6 @@ from gallery.easel.depends.schedule import ScheduleApiDepends
from gallery.sketch.schedule.api import ScheduleApi from gallery.sketch.schedule.api import ScheduleApi
from gallery.sketch.schedule.model import Channel, Schedule from gallery.sketch.schedule.model import Channel, Schedule
from ...depends.date import DateDepends
router = APIRouter(prefix="/schedule", tags=["Schedule"]) router = APIRouter(prefix="/schedule", tags=["Schedule"])
@@ -22,6 +22,6 @@ async def find_api_schedule_channels(schedule_api: ScheduleApiDepends, query: st
@router.get("/{provider}/{channel}/{date}") @router.get("/{provider}/{channel}/{date}")
async def get_api_schedule_channel_schedule( async def get_api_schedule_channel_schedule(
schedule_api: ScheduleApiDepends, channel: str, date: DateDepends schedule_api: ScheduleApiDepends, channel: str, date: datetime.date
) -> Schedule: ) -> Schedule:
return await schedule_api.get_schedule(channel, date) return await schedule_api.get_schedule(channel, date)
+3 -3
View File
@@ -1,3 +1,5 @@
import datetime
from fastapi import APIRouter from fastapi import APIRouter
from gallery.easel.core import AppRequest from gallery.easel.core import AppRequest
@@ -5,8 +7,6 @@ from gallery.easel.depends.weather import WeatherApiDepends
from gallery.sketch.weather.api import WeatherApi from gallery.sketch.weather.api import WeatherApi
from gallery.sketch.weather.model import Location, WeatherResponse from gallery.sketch.weather.model import Location, WeatherResponse
from ...depends.date import DateDepends
router = APIRouter(prefix="/weather", tags=["Weather"]) router = APIRouter(prefix="/weather", tags=["Weather"])
@@ -21,7 +21,7 @@ async def find_api_weather_locations(weather_api: WeatherApiDepends, query: str)
@router.get("/{provider}/{location}/day/{date}") @router.get("/{provider}/{location}/day/{date}")
async def get_api_weather_day(weather_api: WeatherApiDepends, location: str, date: DateDepends) -> WeatherResponse: async def get_api_weather_day(weather_api: WeatherApiDepends, location: str, date: datetime.date) -> WeatherResponse:
return await weather_api.get_day(location, date) return await weather_api.get_day(location, date)
@@ -23,6 +23,7 @@
<div class="app col-lg-8 mx-auto p-3 py-md-5"> <div class="app col-lg-8 mx-auto p-3 py-md-5">
{% if not is_widget %} {% if not is_widget %}
<header class="app-header pb-3 mb-5 border-bottom"> <header class="app-header pb-3 mb-5 border-bottom">
<div>{{request.query_params.widget}}</div>
<div class="link-list"> <div class="link-list">
<app-link href="/" <app-link href="/"
icon="gear">API Gallery</app-link> icon="gear">API Gallery</app-link>
@@ -0,0 +1,57 @@
import datetime
from enum import Enum
from typing import NamedTuple
class TagType(str, Enum):
DAY = "day"
DAYS = "days"
class Tag(NamedTuple):
type: TagType
date: datetime.date
days: int = 1
def __str__(self) -> str:
if self.type == TagType.DAY:
today = datetime.date.today()
day = (self.date - today).days
return f"day-{day}"
elif self.type == TagType.DAYS:
return f"days-{self.days}"
else:
raise ValueError(self.type)
class TagUtil:
@classmethod
def parse_tag(cls, tag: str) -> Tag:
if tag == "today":
return Tag(TagType.DAY, datetime.date.today())
elif tag == "tomorrow":
return Tag(TagType.DAY, datetime.date.today() + datetime.timedelta(days=1))
elif tag.startswith("day-"):
days = int(tag.split("-")[-1])
return Tag(
TagType.DAY,
datetime.date.today() + datetime.timedelta(days=days),
)
elif tag.startswith("days-"):
days = int(tag.split("-")[-1])
return Tag(TagType.DAYS, datetime.date.today(), days)
raise ValueError(tag)
@classmethod
def create_tag(
cls,
tag_type: TagType,
date: datetime.date,
day: int = 0,
days: int = 10,
) -> Tag:
if tag_type == TagType.DAY:
return Tag(tag_type, date + datetime.timedelta(days=day))
if tag_type == TagType.DAYS:
return Tag(tag_type, date, days)
raise ValueError(tag_type)
@@ -1,7 +1,6 @@
import datetime import datetime
import typing import typing
from pathlib import Path from pathlib import Path
from urllib.parse import parse_qsl, urlencode, urlsplit
from babel.dates import format_date from babel.dates import format_date
from fastapi import Request from fastapi import Request
@@ -11,6 +10,7 @@ from gallery.easel.core import AppRequest
from gallery.version import __version__ from gallery.version import __version__
from ...translation import _ from ...translation import _
from .tag import TagUtil
ContextProcessor = typing.Callable[[AppRequest], dict[str, typing.Any]] ContextProcessor = typing.Callable[[AppRequest], dict[str, typing.Any]]
@@ -24,30 +24,10 @@ def is_widget(request: Request) -> bool:
def base_context_processor(request: Request) -> dict: def base_context_processor(request: Request) -> dict:
return { return {
"is_widget": is_widget(request), "is_widget": is_widget(request),
"provider": request.query_params.get("provider") or request.path_params.get("provider"), "provider": request.query_params.get("provider"),
} }
def build_url(
request: Request, *, path: list[str] | None = None, up: int | None = None, query: dict | None = None
) -> str:
parts = urlsplit(str(request.url))
if up:
path = [".."] * up
if path:
path_parts = parts.path.split("/")
for item in path:
if item == "..":
path_parts = path_parts[:-1]
else:
path_parts.append(str(item))
parts = parts._replace(path="/".join(path_parts))
if query:
query_dict = {**dict(parse_qsl(parts.query)), **query}
parts = parts._replace(query=urlencode(query_dict))
return parts.geturl()
def build_templates( def build_templates(
templates_dir: Path | None = None, filters: dict | None = None, context_processor: ContextProcessor | None = None templates_dir: Path | None = None, filters: dict | None = None, context_processor: ContextProcessor | None = None
) -> Jinja2Templates: ) -> Jinja2Templates:
@@ -64,8 +44,8 @@ def build_templates(
"version": __version__, "version": __version__,
"format_date": format_date, "format_date": format_date,
"datetime": datetime, "datetime": datetime,
"tag_util": TagUtil,
"DATE_FORMAT": "E, d MMMM Y", "DATE_FORMAT": "E, d MMMM Y",
"build_url": build_url,
} }
) )
if filters: if filters:
+70 -1
View File
@@ -1 +1,70 @@
from .route import router import datetime
from pathlib import Path
from fastapi import APIRouter
from fastapi.responses import HTMLResponse, RedirectResponse
from gallery.easel.core import AppRequest
from gallery.easel.depends.api import api_resolver
from gallery.easel.depends.schedule import ScheduleApiDepends
from gallery.sketch.schedule.api import ScheduleApi
from ..common.utils.tag import TagType, TagUtil
from ..common.utils.template import build_templates
from .filters import timedelta_format
def context_procesor(request: AppRequest) -> dict:
return {
"providers": request.app.state.api.get_api_providers(ScheduleApi),
}
templates = build_templates(
Path(__file__).parent / "templates",
{
"timedelta_format": timedelta_format,
},
context_procesor,
)
router = APIRouter(prefix="/schedule")
@router.get("/", response_class=HTMLResponse)
async def get_schedule_index(request: AppRequest, provider: str | None = None, query: str | None = None):
if query and provider:
schedule_api = api_resolver(ScheduleApi)(request, provider)
channels = await schedule_api.find_channels(query)
else:
channels = []
return templates.TemplateResponse(
request=request,
name="index.html",
context={
"channels": channels,
},
)
@router.get("/{provider}/{channel}", response_class=RedirectResponse)
async def get_channel_default(channel: str):
return RedirectResponse(f"{channel}/tag/today")
@router.get("/{provider}/{channel}/tag/{tag}", response_class=HTMLResponse)
async def get_channel_tag(request: AppRequest, schedule_api: ScheduleApiDepends, channel: str, tag: str):
tag_value = TagUtil.parse_tag(tag)
if tag_value.type == TagType.DAY:
response = await schedule_api.get_schedule(channel, tag_value.date)
else:
raise ValueError(tag)
return templates.TemplateResponse(
request=request,
name="channel.html",
context={
"tag_util": TagUtil,
"datetime": datetime,
"response": response,
},
)
@@ -1,18 +0,0 @@
GROUP_MAP = {
"central": [
("yandextv", "146"), # pervyy
("yandextv", "587"), # rossya-1
("yandextv", "162"), # ntv
("yandextv", "79"), # sts
],
"sport": [
("matchtv", "matchtv"),
("matchtv", "igra"),
("matchtv", "arena"),
("matchtv", "futbol-1"),
("matchtv", "futbol-2"),
("matchtv", "futbol-3"),
("matchtv", "strana"),
("yandextv", "1799"), # start
],
}
@@ -1,86 +0,0 @@
import datetime
from pathlib import Path
from urllib import parse
from fastapi import APIRouter
from fastapi.responses import HTMLResponse, RedirectResponse
from gallery.easel.core import AppRequest
from gallery.easel.depends.api import api_resolver
from gallery.easel.depends.date import DateDepends
from gallery.easel.depends.schedule import ScheduleApiDepends
from gallery.sketch.bundle import ApiBundle
from gallery.sketch.schedule.api import ScheduleApi
from gallery.sketch.schedule.model import Schedule
from ..common.utils.template import build_templates
from .bundle import GROUP_MAP
from .filters import timedelta_format
def context_procesor(request: AppRequest) -> dict:
return {
"providers": request.app.state.api.get_api_providers(ScheduleApi),
}
templates = build_templates(
Path(__file__).parent / "templates",
{
"timedelta_format": timedelta_format,
},
context_procesor,
)
router = APIRouter(prefix="/schedule")
@router.get("/", response_class=HTMLResponse)
async def get_schedule_index(request: AppRequest, provider: str | None = None, query: str | None = None):
if query and provider:
schedule_api = api_resolver(ScheduleApi)(request, provider)
channels = await schedule_api.find_channels(query)
else:
channels = []
return templates.TemplateResponse(
request=request,
name="index.html",
context={"channels": [item.model_dump() for item in channels], "groups": GROUP_MAP.keys()},
)
async def _get_group_schedule(api: ApiBundle, channels: list[tuple[str, str]], date: datetime.date) -> list[Schedule]:
return [
await api.get_api(ScheduleApi, provider).get_schedule(channel_id, date) for provider, channel_id in channels
]
@router.get("/group/{group_id}", response_class=RedirectResponse)
async def get_group_default(group_id: str):
return RedirectResponse(f"{parse.quote(group_id)}/today")
@router.get("/group/{group_id}/{date}", response_class=HTMLResponse)
async def get_group(request: AppRequest, group_id: str, date: DateDepends):
channels = GROUP_MAP.get(group_id, [tuple(item.split(":")) for item in group_id.split(",")])
responses = await _get_group_schedule(request.app.state.api, channels, date)
return templates.TemplateResponse(
request=request,
name="group.html",
context={"responses": responses},
)
@router.get("/{provider}/{channel}", response_class=RedirectResponse)
async def get_channel_default(channel: str):
return RedirectResponse(f"{channel}/today")
@router.get("/{provider}/{channel}/{date}", response_class=HTMLResponse)
async def get_channel(request: AppRequest, schedule_api: ScheduleApiDepends, channel: str, date: DateDepends):
response = await schedule_api.get_schedule(channel, date)
return templates.TemplateResponse(
request=request,
name="channel.html",
context={"response": response},
)
@@ -1,7 +1,4 @@
{% extends "base.html" %} {% extends "base.html" %}
{% set live = request.query_params.live == '1' %}
{% set date = response.date %}
{% block title %} {% block title %}
{{_("TV program")}} | {{response.channel.name}} | {{format_date(response.date, DATE_FORMAT, {{_("TV program")}} | {{response.channel.name}} | {{format_date(response.date, DATE_FORMAT,
locale=request.state.language)}} locale=request.state.language)}}
@@ -13,23 +10,18 @@ locale=request.state.language)}}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<h4 class="mb-4"> <h4>
<a class="icon-link {{'disabled' if date == datetime.date.today() else ''}}" <a class="icon-link {{'disabled' if response.date == datetime.date.today() else ''}}"
href="{{build_url(request, path=['..', date - datetime.timedelta(days=1)])}}"> href="../tag/{{tag_util.create_tag('day', response.date, -1)}}">
<i class="bi bi-arrow-left-square"></i> <i class="bi bi-arrow-left-square"></i>
</a> </a>
<a class="icon-link" <a class="icon-link"
href="{{build_url(request, up=3)}}"> href="../../..">
<i class="bi bi-arrow-up-square"></i> <i class="bi bi-arrow-up-square"></i>
</a> </a>
<a class="icon-link {{'text-secondary' if not live else ''}}"
href="{{build_url(request, query={'live': 0 if live else 1})}}">
<i class="bi bi-cast"></i>
</a>
<span class="badge rounded-pill text-bg-secondary fs-6">{{provider}}</span>
<span>{{response.channel.name}} | {{format_date(response.date, DATE_FORMAT, locale=request.state.language)}}</span> <span>{{response.channel.name}} | {{format_date(response.date, DATE_FORMAT, locale=request.state.language)}}</span>
<a class="icon-link" <a class="icon-link"
href="{{build_url(request, path=['..', date + datetime.timedelta(days=1)])}}"> href="../tag/{{tag_util.create_tag('day', response.date, 1)}}">
<i class="bi bi-arrow-right-square"></i> <i class="bi bi-arrow-right-square"></i>
</a> </a>
</h4> </h4>
@@ -37,14 +29,15 @@ locale=request.state.language)}}
<thead> <thead>
<tr> <tr>
<td></td> <td></td>
<td style="width:100%"></td> <td></td>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for value in response.values %} {% for value in response.values %}
<tr class="{{'d-none' if (live and not value.live) else 'table-success' if (not live and value.live) else ''}}"> <tr class="{{'table-success' if value.live else ''}}">
<td> <td>
<span>{{value.start.strftime('%H:%M')}}</span>&nbsp;<span class="small ms-1">({{(value.end - value.start) | timedelta_format}})</span> <span>{{value.start.strftime('%H:%M')}}</span>
<span class="small ms-1">({{(value.end - value.start) | timedelta_format}})</span>
</td> </td>
<td>{{value.label}}</td> <td>{{value.label}}</td>
</tr> </tr>
@@ -1,59 +0,0 @@
{% extends "base.html" %}
{% set live = request.query_params.live == '1' %}
{% set date = responses[0].date %}
{% block title %}
{{_("TV program")}}
{% endblock %}
{% block header %}
<app-link href="/schedule"
icon="tv">{{_("TV program")}}</app-link>
{% endblock %}
{% block content %}
<h4 class="mb-4">
<a class="icon-link {{'disabled' if date == datetime.date.today() else ''}}"
href="{{build_url(request, path=['..', date - datetime.timedelta(days=1)])}}">
<i class="bi bi-arrow-left-square"></i>
</a>
<a class="icon-link"
href="{{build_url(request, up=3)}}">
<i class="bi bi-arrow-up-square"></i>
</a>
<a class="icon-link {{'text-secondary' if not live else ''}}"
href="{{build_url(request, query={'live': 0 if live else 1})}}">
<i class="bi bi-cast"></i>
</a>
<span>{{format_date(date, DATE_FORMAT, locale=request.state.language)}}</span>
<a class="icon-link"
href="{{build_url(request, path=['..', date + datetime.timedelta(days=1)])}}">
<i class="bi bi-arrow-right-square"></i>
</a>
</h4>
{% for response in responses %}
<h5>
<span class="badge rounded-pill text-bg-secondary fs-6">{{response.channel.provider}}</span>
<span>{{response.channel.name}}</span>
</h5>
<table class="table">
<thead>
<tr>
<td></td>
<td style="width:100%"></td>
</tr>
</thead>
<tbody>
{% for value in response.values %}
<tr class="{{'d-none' if (live and not value.live) else 'table-success' if (not live and value.live) else ''}}">
<td>
<span>{{value.start.strftime('%H:%M')}}</span>&nbsp;<span class="small ms-1">({{(value.end - value.start) |
timedelta_format}})</span>
</td>
<td>{{value.label}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endfor %}
{% endblock %}
@@ -35,26 +35,17 @@
</div> </div>
</form> </form>
{% if channels %} {% if channels %}
<div class="mb-4"> <ul id="channels"
<schedule-channel-list value="{{channels | tojson | forceescape}}" class="list-group mb-5">
onclick="scheduleChannelManager.store(element)" {% for channel in channels %}
onadd="scheduleChannelManager.add(element)"></schedule-channel-list> <schedule-channel channel="{{channel.model_dump() | tojson | forceescape}}"></schedule-channel>
<hr> {% endfor %}
</div> </ul>
<hr>
{% endif %} {% endif %}
<div class="mb-4"> <ul id="storedChannels"
<h3>{{_("Stored channels")}}</h3> class="list-group mb-5">
<schedule-channel-list id="storedChannels" </ul>
onremove="scheduleChannelManager.remove(element)"></schedule-channel-list>
</div>
<div class="mb-4">
<h3>{{_("Channel groups")}}</h3>
<ul class="list-group">
{% for group in groups %}
<schedule-channel-group value="{{group | tojson | forceescape}}"></schedule-channel-group>
{% endfor %}
</ul>
</div>
<script> <script>
(function () { (function () {
const params = new URLSearchParams(window.location.search); const params = new URLSearchParams(window.location.search);
@@ -62,8 +53,9 @@
if (searchQuery) { if (searchQuery) {
document.querySelector('#query').value = searchQuery; document.querySelector('#query').value = searchQuery;
} }
document.addEventListener("DOMContentLoaded", (event) => { document.addEventListener("DOMContentLoaded", (event) => {
scheduleChannelManager.load(); scheduleChannelManager.loadChannels('#storedChannels');
}); });
})(); })();
</script> </script>
+101 -1
View File
@@ -1 +1,101 @@
from .route import router import datetime
from pathlib import Path
from fastapi import APIRouter
from fastapi.responses import HTMLResponse, RedirectResponse
from gallery.easel.core import AppRequest
from gallery.easel.depends.api import api_resolver
from gallery.easel.depends.weather import WeatherApiDepends
from gallery.sketch.weather.api import WeatherApi
from gallery.sketch.weather.model import WeatherResponse
from ..common.utils.tag import TagType, TagUtil
from ..common.utils.template import build_templates
from .filters import cloudness_icon, wind_direction_icon
def context_procesor(request: AppRequest) -> dict:
return {
"providers": request.app.state.api.get_api_providers(WeatherApi),
}
templates = build_templates(
Path(__file__).parent / "templates",
{
"wind_direction_icon": wind_direction_icon,
"cloudness_icon": cloudness_icon,
},
context_procesor,
)
def build_weather_response(request: AppRequest, response: WeatherResponse):
return templates.TemplateResponse(
request=request,
name="weather.html",
context={
"response": response,
},
)
router = APIRouter(prefix="/weather")
@router.get("/", response_class=HTMLResponse)
async def get_weather_index(request: AppRequest, provider: str | None = None, query: str | None = None):
if query and provider:
weather_api = api_resolver(WeatherApi)(request, provider)
locations = await weather_api.find_locations(query)
else:
locations = []
return templates.TemplateResponse(
request=request,
name="index.html",
context={
"locations": locations,
},
)
@router.get("/{provider}/{location}", response_class=RedirectResponse)
async def get_weather(location: str):
return RedirectResponse(f"{location}/tag/today")
@router.get("/{provider}/{location}/day/{date}", response_class=HTMLResponse)
async def get_weather_day(
request: AppRequest,
weather_api: WeatherApiDepends,
location: str,
date: datetime.date,
):
response = await weather_api.get_day(location, date)
return build_weather_response(request, response)
@router.get("/{provider}/{location}/days/{days}", response_class=HTMLResponse)
async def get_weather_days(request: AppRequest, weather_api: WeatherApiDepends, location: str, days: int):
response = await weather_api.get_days(location, days)
return build_weather_response(request, response)
@router.get("/{provider}/{location}/tag/{tag}", response_class=HTMLResponse)
async def get_weather_tag(request: AppRequest, weather_api: WeatherApiDepends, location: str, tag: str):
tag_value = TagUtil.parse_tag(tag)
if tag_value.type == TagType.DAY:
response = await weather_api.get_day(location, tag_value.date)
elif tag_value.type == TagType.DAYS:
response = await weather_api.get_days(location, tag_value.days)
else:
raise ValueError(tag)
return build_weather_response(request, response)
@router.get("/zmiyevka-184640/tag/{tag}", response_class=RedirectResponse)
async def get_zmiyevka_weather_compat(request: AppRequest):
path_parts = request.url.path.split("/")
path_parts.insert(2, "gismeteo")
return RedirectResponse("/".join(path_parts))
@@ -1,7 +1,5 @@
import datetime import datetime
from markupsafe import Markup
from gallery.sketch.weather.model import ( from gallery.sketch.weather.model import (
Cloudness, Cloudness,
Precipitation, Precipitation,
@@ -9,7 +7,6 @@ from gallery.sketch.weather.model import (
WindDirection, WindDirection,
WindDirectionDeg, WindDirectionDeg,
) )
from gallery.util import root_path
def wind_direction_icon(wind_direction_deg: float) -> str: def wind_direction_icon(wind_direction_deg: float) -> str:
@@ -57,25 +54,3 @@ def cloudness_icon(sky: Sky, date: datetime.datetime, period: str) -> list[str]:
main_icon = f"{day_prefix}-{main_icon}" main_icon = f"{day_prefix}-{main_icon}"
icons = [main_icon] icons = [main_icon]
return icons return icons
class WeatherIconBundle:
def __init__(self):
self._icon_path = root_path / "static/dist/weather-icons/icons"
self._cache = {}
def _load_icon(self, icon: str) -> Markup:
icon_file = self._icon_path / f"wi-{icon}.svg"
return Markup(icon_file.read_text())
def get(self, icon: str) -> Markup:
if icon not in self._cache:
self._cache[icon] = self._load_icon(icon)
return self._cache[icon]
WEATHER_ICON_BUNDLE = WeatherIconBundle()
def weather_icon_svg(icon: str) -> Markup:
return WEATHER_ICON_BUNDLE.get(icon)
-81
View File
@@ -1,81 +0,0 @@
from pathlib import Path
from typing import Literal
from fastapi import APIRouter
from fastapi.responses import HTMLResponse, RedirectResponse
from gallery.easel.core import AppRequest
from gallery.easel.depends.api import api_resolver
from gallery.easel.depends.date import DateDepends
from gallery.easel.depends.weather import WeatherApiDepends
from gallery.sketch.weather.api import WeatherApi
from gallery.sketch.weather.model import WeatherResponse
from ..common.utils.template import build_templates
from .filters import cloudness_icon, weather_icon_svg, wind_direction_icon
def context_procesor(request: AppRequest) -> dict:
return {
"providers": request.app.state.api.get_api_providers(WeatherApi),
}
templates = build_templates(
Path(__file__).parent / "templates",
{
"wind_direction_icon": wind_direction_icon,
"cloudness_icon": cloudness_icon,
"weather_icon_svg": weather_icon_svg,
},
context_procesor,
)
def build_weather_response(request: AppRequest, response: WeatherResponse):
return templates.TemplateResponse(
request=request,
name="weather.html",
context={"response": response},
)
router = APIRouter(prefix="/weather")
@router.get("/", response_class=HTMLResponse)
async def get_weather_index(request: AppRequest, provider: str | None = None, query: str | None = None):
if query and provider:
weather_api = api_resolver(WeatherApi)(request, provider)
locations = await weather_api.find_locations(query)
else:
locations = []
return templates.TemplateResponse(
request=request,
name="index.html",
context={"locations": [item.model_dump() for item in locations]},
)
@router.get("/{provider}/{location}", response_class=RedirectResponse)
async def get_weather(location: str):
return RedirectResponse(f"{location}/day/today")
@router.get("/{provider}/{location}/days/{days}", response_class=HTMLResponse)
async def get_weather_days(request: AppRequest, weather_api: WeatherApiDepends, location: str, days: int):
response = await weather_api.get_days(location, days)
return build_weather_response(request, response)
# TODO: tag mode route deprecated, used in tizen app
@router.get("/{provider}/{location}/{mode:str}/{date}", response_class=HTMLResponse)
async def get_weather_day(
request: AppRequest,
weather_api: WeatherApiDepends,
location: str,
date: DateDepends,
mode: Literal["day", "tag"], # pylint:disable=unused-argument
):
response = await weather_api.get_day(location, date)
return build_weather_response(request, response)
@@ -35,18 +35,17 @@
</div> </div>
</form> </form>
{% if locations %} {% if locations %}
<div class="mb-4"> <ul id="locations"
<weather-location-list value="{{locations | tojson | forceescape}}" class="list-group mb-5">
onclick="weatherLocationManager.store(element)" {% for location in locations %}
onadd="weatherLocationManager.add(element)"></weather-location-list> <weather-location location="{{location.model_dump() | tojson | forceescape}}"></weather-location>
<hr> {% endfor %}
</div> </ul>
<hr>
{% endif %} {% endif %}
<div class="mb-4"> <ul id="storedLocations"
<h3>{{_("Stored locations")}}</h3> class="list-group mb-5">
<weather-location-list id="storedLocations" </ul>
onremove="weatherLocationManager.remove(element)"></weather-location-list>
</div>
<script> <script>
(function () { (function () {
const params = new URLSearchParams(window.location.search); const params = new URLSearchParams(window.location.search);
@@ -56,7 +55,7 @@
} }
document.addEventListener("DOMContentLoaded", (event) => { document.addEventListener("DOMContentLoaded", (event) => {
weatherLocationManager.load(); weatherLocationManager.loadLocations('#storedLocations');
}); });
})(); })();
</script> </script>
@@ -1,8 +1,5 @@
{% extends "base.html" %} {% extends "base.html" %}
{% set date = response.date %} {% block title %}{{_("Weather")}} | {{response.location}} | {{response.date.strftime('%a, %d %B %Y')}}{% endblock %}
{% block title %}{{_("Weather")}} | {{response.location}} | {{format_date(response.date, DATE_FORMAT,
locale=request.state.language)}}{% endblock %}
{% block header %} {% block header %}
<app-link href="/weather" <app-link href="/weather"
@@ -12,23 +9,21 @@ locale=request.state.language)}}{% endblock %}
{% block content %} {% block content %}
<h4> <h4>
{% if response.period == 'day' %} {% if response.period == 'day' %}
<a class="icon-link {{'disabled' if date == datetime.date.today() else ''}}" <a class="icon-link {{'disabled' if response.date == datetime.date.today() else ''}}"
href="{{build_url(request, path=['..', date - datetime.timedelta(days=1)])}}"> href="../tag/{{tag_util.create_tag('day', response.date, -1)}}">
<i class="bi bi-arrow-left-square"></i> <i class="bi bi-arrow-left-square"></i>
</a> </a>
<a class="icon-link" <a class="icon-link"
href="{{build_url(request, path=['..', '..', 'days', '10'])}}"> href="../tag/days-10">
<i class="bi bi-arrow-up-square"></i> <i class="bi bi-arrow-up-square"></i>
</a> </a>
<span class="badge rounded-pill text-bg-secondary fs-6">{{provider}}</span>
<span>{{response.location}} | {{format_date(response.date, DATE_FORMAT, locale=request.state.language)}}</span> <span>{{response.location}} | {{format_date(response.date, DATE_FORMAT, locale=request.state.language)}}</span>
<a class="icon-link" <a class="icon-link"
href="{{build_url(request, path=['..', date + datetime.timedelta(days=1)])}}"> href="../tag/{{tag_util.create_tag('day', response.date, 1)}}">
<i class="bi bi-arrow-right-square"></i> <i class="bi bi-arrow-right-square"></i>
</a> </a>
{% endif %} {% endif %}
{% if response.period == 'days' %} {% if response.period == 'days' %}
<span class="badge rounded-pill text-bg-secondary fs-6">{{provider}}</span>
<span>{{response.location}} | {{format_date(response.date, DATE_FORMAT, locale=request.state.language)}}</span> <span>{{response.location}} | {{format_date(response.date, DATE_FORMAT, locale=request.state.language)}}</span>
<span>- {{format_date(response.date + datetime.timedelta(days=(response.values | length - 1)), DATE_FORMAT, <span>- {{format_date(response.date + datetime.timedelta(days=(response.values | length - 1)), DATE_FORMAT,
locale=request.state.language)}}</span> locale=request.state.language)}}</span>
@@ -50,7 +45,7 @@ locale=request.state.language)}}{% endblock %}
{% if response.period == 'days' %} {% if response.period == 'days' %}
<td class="date {{'now' if value.date.date() == datetime.date.today() else ''}}"> <td class="date {{'now' if value.date.date() == datetime.date.today() else ''}}">
<span class="value {{'text-danger' if value.date.weekday() in [5,6] else ''}}"> <span class="value {{'text-danger' if value.date.weekday() in [5,6] else ''}}">
<a href="{{build_url(request, path=['..', '..', 'day', value.date.date()])}}"> <a href="../tag/{{tag_util.create_tag('day', value.date.date())}}">
{{format_date(value.date, 'E d', locale=request.state.language)}} {{format_date(value.date, 'E d', locale=request.state.language)}}
</a> </a>
</span> </span>
@@ -71,8 +66,7 @@ locale=request.state.language)}}{% endblock %}
data-bs-toggle="tooltip" data-bs-toggle="tooltip"
data-bs-title="{{ value.sky }}"> data-bs-title="{{ value.sky }}">
{% for icon in value.sky | cloudness_icon(value.date, response.period) %} {% for icon in value.sky | cloudness_icon(value.date, response.period) %}
<div class="wi-svg wi-l wi-border" <div class="wi wi-{{icon}} wi-xl text-primary"></div>
style="margin: 0 auto;">{{ icon | weather_icon_svg }}</div>
{% endfor %} {% endfor %}
</td> </td>
{% endfor %} {% endfor %}
@@ -108,8 +102,7 @@ locale=request.state.language)}}{% endblock %}
<td class="wind" <td class="wind"
data-bs-toggle="tooltip" data-bs-toggle="tooltip"
data-bs-title="{{ value.wind_direction }}"> data-bs-title="{{ value.wind_direction }}">
<div class="wi-svg wi-s wi-{{value.wind_direction | wind_direction_icon}}" <div class="wi wi-wind-deg wi-{{value.wind_direction | wind_direction_icon}} wi-l text-primary"></div>
style="margin: 0 auto;">{{ 'wind-deg' | weather_icon_svg }}</div>
</td> </td>
{% endfor %} {% endfor %}
</tr> </tr>
@@ -125,7 +118,7 @@ locale=request.state.language)}}{% endblock %}
<td class="wind" <td class="wind"
style="background-color: rgba(128, 128, 128, {{value.wind_speed * 0.05}});"> style="background-color: rgba(128, 128, 128, {{value.wind_speed * 0.05}});">
<span class="speed">{{value.wind_speed}}</span> <span class="speed">{{value.wind_speed}}</span>
{% if value.wind_gust != value.wind_speed and value.wind_gust > 0 %} {% if value.wind_gust != value.wind_speed %}
<span class="gust"> <span class="gust">
({{value.wind_gust}}) ({{value.wind_gust}})
</span> </span>
@@ -177,7 +170,7 @@ locale=request.state.language)}}{% endblock %}
{% for value in response.values %} {% for value in response.values %}
<td class="humidity" <td class="humidity"
style="background-color: rgba(128, 128, 255, {{value.humidity * 0.005}});"> style="background-color: rgba(128, 128, 255, {{value.humidity * 0.005}});">
{% if value.humidity > -1%}<span class="value">{{value.humidity}}</span>{% endif %} <span class="value">{{value.humidity}}</span>
</td> </td>
{% endfor %} {% endfor %}
</tr> </tr>
-4
View File
@@ -7,9 +7,7 @@ from gallery.easel import build_app
from gallery.painting.gismeteo.api import GismeteoApi from gallery.painting.gismeteo.api import GismeteoApi
from gallery.painting.matchtv.api import MatchTvApi from gallery.painting.matchtv.api import MatchTvApi
from gallery.painting.openweather.api import OpenWeatherApi from gallery.painting.openweather.api import OpenWeatherApi
from gallery.painting.rp5.api import RP5WeatherApi
from gallery.painting.yandextv.api import YandexTvApi from gallery.painting.yandextv.api import YandexTvApi
from gallery.painting.yandexweather.api import YandexWeatherApi
from gallery.sketch.bundle import ApiBundle from gallery.sketch.bundle import ApiBundle
from gallery.sketch.schedule.cached import CachedScheduleApi from gallery.sketch.schedule.cached import CachedScheduleApi
from gallery.sketch.weather.cached import CachedWeatherApi from gallery.sketch.weather.cached import CachedWeatherApi
@@ -20,8 +18,6 @@ api = ApiBundle(
CachedScheduleApi(MatchTvApi()), CachedScheduleApi(MatchTvApi()),
CachedWeatherApi(GismeteoApi()), CachedWeatherApi(GismeteoApi()),
CachedWeatherApi(OpenWeatherApi()), CachedWeatherApi(OpenWeatherApi()),
CachedWeatherApi(YandexWeatherApi()),
CachedWeatherApi(RP5WeatherApi()),
] ]
) )
app = build_app(api) app = build_app(api)
+18 -17
View File
@@ -1,7 +1,6 @@
import datetime import datetime
import json import json
import logging import logging
from os import environ
from typing import Any from typing import Any
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
@@ -10,7 +9,6 @@ from fastapi import HTTPException, status
from gallery.sketch.source import ApiSource from gallery.sketch.source import ApiSource
from gallery.sketch.weather.api import WeatherApi from gallery.sketch.weather.api import WeatherApi
from gallery.sketch.weather.model import Location, WeatherResponse, WeatherValue from gallery.sketch.weather.model import Location, WeatherResponse, WeatherValue
from gallery.sketch.weather.util import merge_weather_values
from . import datehelp from . import datehelp
from .parser import DAYS_PARSER, LOCATION_PARSER, ONE_DAY_PARSER, ROW_PARSERS from .parser import DAYS_PARSER, LOCATION_PARSER, ONE_DAY_PARSER, ROW_PARSERS
@@ -20,12 +18,21 @@ logger = logging.getLogger("gismeteo")
class GismeteoApi(WeatherApi): class GismeteoApi(WeatherApi):
PROVIDER = "gismeteo" PROVIDER = "gismeteo"
SOURCE = ApiSource(
def _build_source(self) -> ApiSource: "https://www.gismeteo.ru",
return ApiSource( cookies={
"https://www.gismeteo.ru", "cf_clearance": (
cookies={"xauth": auth} if (auth := environ.get("GISMETEO_AUTH")) else None, "zPj8qeaYZWp5BUZsWIRD7kd32s59IDWWaVvD7GGf6b4-1724254262-1.2.1.1-"
) "R1PaHoqlm4OEgHfrOg6oAJmVmFJ7053JI_QDjIFlCAmbNY0oyw1J4QtgmEkAkTWF4C99X5hpXmZB2en."
"9Ey3NL0kzaE10UGBHPli5OLxHNKC3wQ34xmxTxg6GcKouXOPRgqo92lVRpQP7ghvDmvvT_"
"S6YXDbRonkamptWhZiAsIhsnIQg2Mt7Lk1fxSEVbaey_RXVQBvaR2ofiFgIavcbQPRFSvJ."
"Ct_FujmymTAZWh1XHTptK32kur81NXyPuARThetOKQm8AklaMa855Oom6Bms1a4F9b0yEHSd2inA4j3FR7uauu8hhwO0Z2goa3."
"ktpXXAQLz6dm.fBEWIHD7wooda15X57tCcDOely4hxhO4LK2lIH6TbOr."
"rZQAiRRhltHiCizP1Ou2SiF_81lb1umoDh739tQD1cnw_USnL."
"JwTHvkB00ZnaHRMi4FCBrsKIE0NxJO6kiv1QANqumzf5.8_pSIGRo2cKeO8xCydduDNFbStdOmLR6FU7ZKqVu"
)
},
)
def _parse_oneday(self, date: datetime.date, data: str) -> WeatherResponse: def _parse_oneday(self, date: datetime.date, data: str) -> WeatherResponse:
result: list[dict[str, Any]] = [] result: list[dict[str, Any]] = []
@@ -38,12 +45,6 @@ class GismeteoApi(WeatherApi):
result.append({}) result.append({})
result[index][parser.KEY] = value result[index][parser.KEY] = value
values = [WeatherValue(**item) for item in result] values = [WeatherValue(**item) for item in result]
# group values by 3 hours
if len(values) > 8:
n = 3
values = [
merge_weather_values(values[i].date, values[i : i + n], "average") for i in range(0, len(values), n)
]
return WeatherResponse( return WeatherResponse(
location=location or "n/a", location=location or "n/a",
date=date, date=date,
@@ -74,7 +75,7 @@ class GismeteoApi(WeatherApi):
latitude = 52.968498 latitude = 52.968498
longitude = 36.0695 longitude = 36.0695
data = json.loads( data = json.loads(
await self.source.request( await self.SOURCE.request(
f"mq/city/q/?q={query}&geo={geo}&latitude={latitude}&longitude={longitude}&limit=10" f"mq/city/q/?q={query}&geo={geo}&latitude={latitude}&longitude={longitude}&limit=10"
) )
) )
@@ -107,9 +108,9 @@ class GismeteoApi(WeatherApi):
raise HTTPException( raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST, detail={"max_date": max_date.strftime("%Y-%m-%d")} status_code=status.HTTP_400_BAD_REQUEST, detail={"max_date": max_date.strftime("%Y-%m-%d")}
) )
data = await self.source.request(f"weather-{location_id}/{datehelp.dump(date)}") data = await self.SOURCE.request(f"weather-{location_id}/{datehelp.dump(date)}")
return self._parse_oneday(date, data) return self._parse_oneday(date, data)
async def get_days(self, location_id: str, days: int) -> WeatherResponse: async def get_days(self, location_id: str, days: int) -> WeatherResponse:
data = await self.source.request(f"weather-{location_id}/{days}-days") data = await self.SOURCE.request(f"weather-{location_id}/{days}-days")
return self._parse_manydays(data) return self._parse_manydays(data)
+25 -19
View File
@@ -11,8 +11,8 @@ from gallery.sketch.weather.model import (
Precipitation, Precipitation,
Sky, Sky,
WindDirection, WindDirection,
WindDirectionDeg,
) )
from gallery.sketch.weather.parser import ParseError, parse_wind_direction
from .core import BaseWidgetParser, RowParser from .core import BaseWidgetParser, RowParser
@@ -46,15 +46,9 @@ class DateParser(RowParser[datetime.datetime]):
time = datetime.datetime.fromtimestamp(timestamp) time = datetime.datetime.fromtimestamp(timestamp)
yield time yield time
else: else:
month = None
for item in tag.select(".widget-row.widget-row-date > .row-item"): for item in tag.select(".widget-row.widget-row-date > .row-item"):
date_str = item.text date_str = item.text
date = dateparser.parse(date_str, languages=["ru"]) date = dateparser.parse(date_str, languages=["ru"])
if date is None:
raise ParseError.invalid_date(date_str)
if month and month > date.month:
date = date.replace(month=month)
month = date.month
yield date yield date
@@ -71,10 +65,8 @@ class SkyParser(RowParser[Sky]):
PRECIPITATION_MAP: dict[str, Precipitation] = { PRECIPITATION_MAP: dict[str, Precipitation] = {
"без осадков": Precipitation.NO, "без осадков": Precipitation.NO,
"без существенных осадков": Precipitation.NO,
"небольшой дождь": Precipitation.SMALL_RAIN, "небольшой дождь": Precipitation.SMALL_RAIN,
"сильный дождь": Precipitation.HEAVY_RAIN, "сильный дождь": Precipitation.HEAVY_RAIN,
"очень сильный дождь": Precipitation.HEAVY_RAIN,
"ливневый дождь": Precipitation.SHOWER, "ливневый дождь": Precipitation.SHOWER,
"дождь": Precipitation.RAIN, "дождь": Precipitation.RAIN,
"ливень": Precipitation.SHOWER, "ливень": Precipitation.SHOWER,
@@ -89,13 +81,8 @@ class SkyParser(RowParser[Sky]):
"град": Precipitation.HAIL, "град": Precipitation.HAIL,
} }
THUNDER = {"гроза"} THUNDER = "гроза"
FOG = {"дымка", "туман"} FOG = "дымка"
@classmethod
def _detect_flag(cls, values: set[str], flag_values: set[str]) -> tuple[set[str], bool]:
result_values = values - flag_values
return result_values, len(result_values) < len(values)
def parse_row(self, tag: Tag) -> Iterable[Sky]: def parse_row(self, tag: Tag) -> Iterable[Sky]:
for item in tag.select(".widget-row[data-row=icon-tooltip] > .row-item"): for item in tag.select(".widget-row[data-row=icon-tooltip] > .row-item"):
@@ -103,8 +90,14 @@ class SkyParser(RowParser[Sky]):
values = {item.strip().lower() for item in sky_str.split(",")} values = {item.strip().lower() for item in sky_str.split(",")}
cloudness = Cloudness.CLEAR cloudness = Cloudness.CLEAR
precipitation = Precipitation.NO precipitation = Precipitation.NO
values, thunder = self._detect_flag(values, self.THUNDER) thunder = False
values, fog = self._detect_flag(values, self.FOG) fog = False
if self.THUNDER in values:
thunder = True
values.remove(self.THUNDER)
if self.FOG in values:
fog = True
values.remove(self.FOG)
for k, v in self.CLOUDNESS_MAP.items(): for k, v in self.CLOUDNESS_MAP.items():
if k in values: if k in values:
cloudness = v cloudness = v
@@ -153,10 +146,23 @@ class WindGustParser(RowParser[int]):
class WindDirectionParser(RowParser[WindDirection]): class WindDirectionParser(RowParser[WindDirection]):
KEY = "wind_direction" KEY = "wind_direction"
WIND_DIRECTION_MAP: dict[str, WindDirection] = {
"—": WindDirection.CALM,
"штиль": WindDirection.CALM,
"с": WindDirection.N,
"св": WindDirection.NE,
"в": WindDirection.E,
"юв": WindDirection.SE,
"ю": WindDirection.S,
"юз": WindDirection.SW,
"з": WindDirection.W,
"сз": WindDirection.NW,
}
def parse_row(self, tag: Tag) -> Iterable[float]: def parse_row(self, tag: Tag) -> Iterable[float]:
for item in tag.select(".widget-row-wind > .row-item > .wind-speed > .wind-direction"): for item in tag.select(".widget-row-wind > .row-item > .wind-speed > .wind-direction"):
wind_direction_str = item.text.lower().strip() wind_direction_str = item.text.lower().strip()
yield parse_wind_direction(wind_direction_str) yield WindDirectionDeg.from_direction(self.WIND_DIRECTION_MAP[wind_direction_str]).value
class PrecipitationParser(RowParser[float]): class PrecipitationParser(RowParser[float]):
+3 -5
View File
@@ -11,13 +11,11 @@ logger = logging.getLogger("matchtv")
class MatchTvApi(ScheduleApi): class MatchTvApi(ScheduleApi):
PROVIDER = "matchtv" PROVIDER = "matchtv"
SOURCE = ApiSource("https://matchtv.ru")
def _build_source(self) -> ApiSource:
return ApiSource("https://matchtv.ru")
async def find_channels(self, query: str) -> list[Channel]: async def find_channels(self, query: str) -> list[Channel]:
endpoint = "api/v1/channels" endpoint = "api/v1/channels"
data = json.loads(await self.source.request(endpoint)) data = json.loads(await self.SOURCE.request(endpoint))
result = [] result = []
query = query.lower() query = query.lower()
for item in data["result"]: for item in data["result"]:
@@ -29,7 +27,7 @@ class MatchTvApi(ScheduleApi):
async def get_schedule(self, channel_id: str, date: datetime.date) -> Schedule: async def get_schedule(self, channel_id: str, date: datetime.date) -> Schedule:
endpoint = f"api/v1/channels/{channel_id}/tv-schedule?date={date:%Y%m%d}" endpoint = f"api/v1/channels/{channel_id}/tv-schedule?date={date:%Y%m%d}"
data = json.loads(await self.source.request(endpoint)) data = json.loads(await self.SOURCE.request(endpoint))
channel_data = data["result"]["channels"][0] channel_data = data["result"]["channels"][0]
channel = Channel(id=channel_data["alias"], name=channel_data["name"], provider=self.provider) channel = Channel(id=channel_data["alias"], name=channel_data["name"], provider=self.provider)
values = [] values = []
+6 -8
View File
@@ -18,11 +18,9 @@ from .parser import FORECAST_ITEM_PARSER
logger = logging.getLogger("openweather") logger = logging.getLogger("openweather")
class OpenWeatherApi(WeatherApi[OpenWeather]): class OpenWeatherApi(WeatherApi):
PROVIDER = "openweather" PROVIDER = "openweather"
SOURCE = OpenWeather(environ["OPENWEATHER_KEY"])
def _build_source(self) -> OpenWeather:
return OpenWeather(environ["OPENWEATHER_KEY"])
@classmethod @classmethod
def _parse_location(cls, location_id: str) -> tuple[float, float]: def _parse_location(cls, location_id: str) -> tuple[float, float]:
@@ -34,18 +32,18 @@ class OpenWeatherApi(WeatherApi[OpenWeather]):
ttl=TimeUnit.DAY, ttl=TimeUnit.DAY,
) )
async def _get_location(self, location_id: str) -> OpenWeatherLocation: async def _get_location(self, location_id: str) -> OpenWeatherLocation:
return await self.source.get_location(*self._parse_location(location_id)) return await self.SOURCE.get_location(*self._parse_location(location_id))
@cached( @cached(
key_builder=lambda fun, self, location_id: f"api.weather.{self.provider}.source.{location_id}.forecast", key_builder=lambda fun, self, location_id: f"api.weather.{self.provider}.source.{location_id}.forecast",
alias="redis", alias="redis",
ttl=TimeUnit.HOUR, ttl=TimeUnit.DAY,
) )
async def _get_location_forecast(self, location_id: str) -> Forecast: async def _get_location_forecast(self, location_id: str) -> Forecast:
return await self.source.get_forecast(*self._parse_location(location_id)) return await self.SOURCE.get_forecast(*self._parse_location(location_id))
async def find_locations(self, query: str) -> list[Location]: async def find_locations(self, query: str) -> list[Location]:
result = await self.source.find_locations(query) result = await self.SOURCE.find_locations(query)
return [ return [
Location( Location(
id=f"{item.lat}:{item.lon}", id=f"{item.lat}:{item.lon}",
+5 -5
View File
@@ -76,28 +76,28 @@ class Location(Model):
local_names: dict[str, str] | None = None local_names: dict[str, str] | None = None
class OpenWeather(ApiSource): class OpenWeather:
BASE_URL = "https://api.openweathermap.org" BASE_URL = "https://api.openweathermap.org"
def __init__(self, api_key: str): def __init__(self, api_key: str):
self._api_key = api_key self._api_key = api_key
super().__init__(self.BASE_URL) self._source = ApiSource(self.BASE_URL)
async def get_forecast(self, lat: float, lon: float) -> Forecast: async def get_forecast(self, lat: float, lon: float) -> Forecast:
endpoint = f"data/2.5/forecast?lat={lat}&lon={lon}&appid={self._api_key}&units=metric" endpoint = f"data/2.5/forecast?lat={lat}&lon={lon}&appid={self._api_key}&units=metric"
response = await self.request(endpoint) response = await self._source.request(endpoint)
response_data = json.loads(response) response_data = json.loads(response)
return Forecast.model_validate(response_data) return Forecast.model_validate(response_data)
async def find_locations(self, query: str, limit: int = 5) -> list[Location]: async def find_locations(self, query: str, limit: int = 5) -> list[Location]:
endpoint = f"geo/1.0/direct?q={query}&limit={limit}&appid={self._api_key}" endpoint = f"geo/1.0/direct?q={query}&limit={limit}&appid={self._api_key}"
response = await self.request(endpoint) response = await self._source.request(endpoint)
response_data = json.loads(response) response_data = json.loads(response)
return [Location.model_validate(item) for item in response_data] return [Location.model_validate(item) for item in response_data]
async def get_location(self, lat: float, lon: float) -> Location: async def get_location(self, lat: float, lon: float) -> Location:
limit = 1 limit = 1
endpoint = f"geo/1.0/reverse?lat={lat}&lon={lon}&limit={limit}&appid={self._api_key}" endpoint = f"geo/1.0/reverse?lat={lat}&lon={lon}&limit={limit}&appid={self._api_key}"
response = await self.request(endpoint) response = await self._source.request(endpoint)
response_data = json.loads(response) response_data = json.loads(response)
return Location.model_validate(response_data[0]) return Location.model_validate(response_data[0])
+1 -1
View File
@@ -29,7 +29,7 @@ class ForecastItemParser:
# TODO parse temperature interval flag # TODO parse temperature interval flag
value.temperature = [round(item.main.temp)] value.temperature = [round(item.main.temp)]
# value.temperature = [round(item.main.temp_max), round(item.main.temp_min)] # value.temperature = [round(item.main.temp_max), round(item.main.temp_min)]
value.pressure = [round(item.main.pressure * 0.75006)] value.pressure = [round(item.main.pressure / 133.3 * 100)]
value.humidity = item.main.humidity value.humidity = item.main.humidity
value.wind_speed = round(item.wind.speed) value.wind_speed = round(item.wind.speed)
value.wind_gust = round(item.wind.gust) value.wind_gust = round(item.wind.gust)
View File
-86
View File
@@ -1,86 +0,0 @@
import datetime
import logging
import aiohttp
from aiocache import cached
from bs4 import BeautifulSoup
from gallery.sketch.source import ApiSource
from gallery.sketch.weather.api import WeatherApi
from gallery.sketch.weather.model import (
Location,
WeatherResponse,
)
from gallery.sketch.weather.util import merge_weather_values
from gallery.util import TimeUnit
from ...sketch.headers import build_headers
from .parser import parse_page
logger = logging.getLogger("rp5")
class RP5WeatherApi(WeatherApi):
PROVIDER = "rp5"
def _build_source(self) -> ApiSource:
return ApiSource("https://rp5.ru", headers=build_headers("rp5.ru"))
async def find_locations(self, query: str) -> list[Location]:
endpoint = "docs/search/ru"
data = aiohttp.FormData({"searchStr": query})
response = await self.source.request(endpoint, method="POST", data=data)
soup = BeautifulSoup(response, features="html.parser")
table = soup.select_one(".searchResults")
result = []
for row in table.select("tr")[1:]:
cells = row.select("td")
name = cells[0].text.strip()
location_id = cells[0].select_one("a").attrs["href"].lstrip("/")
country = cells[1].text.strip()
district = cells[2].text.strip()
subdistrict = cells[3].text.strip()
result.append(
Location(
id=location_id,
name=name,
provider=self.provider,
lat=0,
lon=0,
country=country,
country_code="ru", # TODO: contry_code from country
district=district,
subdistrict=subdistrict,
)
)
return result
@cached(
key_builder=lambda fun, self, location_id: f"api.weather.{self.provider}.source.{location_id}.forecast",
alias="redis",
ttl=TimeUnit.HOUR,
)
async def _get_location_forecast(self, location_id: str) -> list[WeatherResponse]:
endpoint = f"{location_id}"
content = await self.source.request(endpoint)
soup = BeautifulSoup(content, features="html.parser")
return parse_page(soup)
async def get_day(self, location_id: str, date: datetime.date) -> WeatherResponse:
forecast = await self._get_location_forecast(location_id)
for response in forecast:
if response.date == date:
return response
if date == datetime.date.today():
return WeatherResponse(location=location_id, date=date, period="day", values=[])
raise ValueError(f"Unsupported date: {date}")
async def get_days(self, location_id: str, days: int) -> WeatherResponse:
forecast = await self._get_location_forecast(location_id)
values = [merge_weather_values(item.date, item.values) for item in forecast]
return WeatherResponse(
location=forecast[0].location,
date=datetime.date.today(),
period="days",
values=values,
)
-107
View File
@@ -1,107 +0,0 @@
import re
import dateparser
from bs4 import BeautifulSoup, Tag
from gallery.sketch.weather.model import (
Cloudness,
Precipitation,
WeatherResponse,
WeatherValue,
)
from gallery.sketch.weather.parser import ParseError, parse_wind_direction
from gallery.sketch.weather.util import build_weather_value
CLOUDNESS_MAP = {
"Ясно": Cloudness.CLEAR,
"Малооблачно": Cloudness.PARTLY_CLOUDY,
"Облачно с прояснениями": Cloudness.PARTLY_CLOUDY,
"Переменная облачность": Cloudness.PARTLY_CLOUDY,
"Небольшая облачность": Cloudness.CLOUDY,
"Облачно": Cloudness.CLOUDY,
"Значительная облачность": Cloudness.MAINLY_CLOUDY,
"Пасмурная погода": Cloudness.MAINLY_CLOUDY,
}
PRECIPITATION_MAP = {
"Явления погоды отсутствуют": Precipitation.NO,
"Cлабый дождь": Precipitation.SMALL_RAIN,
}
def _parse_wind_speed(cell: Tag) -> int:
element = cell.select_one(".wv_0")
if element:
return int(element.text.strip() or "0")
return 0
# pylint:disable=too-many-branches
def parse_page(page: BeautifulSoup) -> list[WeatherResponse]:
location = page.select(".intoLeftNavi > .verticalBottom > a")[-1].text.strip()
table = page.select_one("#forecastTable")
if table is None:
raise ParseError("#forecastTable not found")
(
date_row,
time_row,
cloudness_row,
precipitation_row,
temperature_row,
pressure_row,
wind_speed_row,
wind_gust_row,
wind_direction_row,
humidity_row,
*_,
) = table.select("tr")
result: list[WeatherResponse] = []
values: list[WeatherValue] = []
for index, cell in enumerate(date_row.select("td")):
colspan = int(cell.attrs["colspan"])
if index == 0:
colspan -= 1
date_str = ",".join(cell.text.strip().split(",")[-2:])
date = dateparser.parse(date_str, languages=["ru"])
if date is None:
raise ParseError.invalid_date(date_str)
item_values = [build_weather_value(date) for _ in range(colspan)]
result.append(
WeatherResponse(
location=location,
date=date.date(),
period="day",
values=item_values,
)
)
values += item_values
for index, cell in enumerate(time_row.select("td")[1:]):
hour = int(cell.text.strip())
values[index].date = values[index].date.replace(hour=hour)
for index, cell in enumerate(cloudness_row.select("td")[1:]):
onmouseover = cell.select_one(".cc_0").next_element.attrs["onmouseover"]
cloudness_str = re.compile("<b>(.*?)</b>").search(onmouseover).group(1).strip()
values[index].sky.cloudness = CLOUDNESS_MAP[cloudness_str]
for index, cell in enumerate(precipitation_row.select("td")[1:]):
onmouseover = cell.select_one(".pr_0").attrs["onmouseover"]
precipitation_str = onmouseover.split(",")[1].strip(" '")
precipitation_value_matched = re.compile("(\\d+\\.\\d+) мм").search(precipitation_str)
if precipitation_value_matched:
# one hour value
values[index].precipitation = float(precipitation_value_matched.group(1)) * 6
if "(" in precipitation_str:
precipitation_str = precipitation_str.split(" (")[0]
values[index].sky.precipitation = PRECIPITATION_MAP[precipitation_str]
for index, cell in enumerate(temperature_row.select("td")[1:]):
values[index].temperature = [int(cell.select_one(".t_0").text.lstrip("+").strip())]
for index, cell in enumerate(pressure_row.select("td")[1:]):
values[index].pressure = [int(cell.select_one(".p_0").text.strip())]
for index, cell in enumerate(wind_speed_row.select("td")[1:]):
values[index].wind_speed = _parse_wind_speed(cell)
for index, cell in enumerate(wind_gust_row.select("td")[1:]):
values[index].wind_gust = _parse_wind_speed(cell)
for index, cell in enumerate(wind_direction_row.select("td")[1:]):
values[index].wind_direction = parse_wind_direction(cell.text.strip())
for index, cell in enumerate(humidity_row.select("td")[1:]):
values[index].humidity = int(cell.text.strip())
return result
+33 -7
View File
@@ -8,23 +8,49 @@ from gallery.sketch.schedule.api import ScheduleApi
from gallery.sketch.schedule.model import Channel, Schedule, ScheduleValue from gallery.sketch.schedule.model import Channel, Schedule, ScheduleValue
from gallery.sketch.source import ApiSource from gallery.sketch.source import ApiSource
from ...sketch.headers import build_headers
logger = logging.getLogger("matchtv") logger = logging.getLogger("matchtv")
HEADERS: dict[str, str] = {
"Accept": (
"text/html,"
"application/xhtml+xml,"
"application/xml;q=0.9,"
"image/avif,image/webp,"
"image/apng,*/*;q=0.8,"
"application/signed-exchange;v=b3;q=0.9"
),
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "en-US,en;q=0.9",
"Connection": "keep-alive",
"Host": "tv.yandex.ru",
"sec-ch-ua": '"Chromium";v="100", " Not A;Brand";v="99"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Linux"',
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Sec-Fetch-User": "?1",
"Upgrade-Insecure-Requests": "1",
"User-Agent": (
"Mozilla/5.0 (X11; Linux x86_64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/100.0.4896.133 "
"Safari/537.36"
),
}
class YandexTvApi(ScheduleApi): class YandexTvApi(ScheduleApi):
PROVIDER = "yandextv" PROVIDER = "yandextv"
SOURCE = ApiSource("https://tv.yandex.ru", headers=HEADERS)
def _build_source(self) -> ApiSource:
return ApiSource("https://tv.yandex.ru", headers=build_headers("tv.yandex.ru"))
async def find_channels(self, query: str) -> list[Channel]: async def find_channels(self, query: str) -> list[Channel]:
url = ( url = (
"https://suggest-multi.yandex.ru/suggest-tv2?" "https://suggest-multi.yandex.ru/suggest-tv2?"
f"v=4&uil=ru&lr=10&count_channels=4&count_programs=4&sn=50&part={query}" f"v=4&uil=ru&lr=10&count_channels=4&count_programs=4&sn=50&part={query}"
) )
_, values = json.loads(await self.source.request(url)) _, values = json.loads(await self.SOURCE.request(url))
result = [] result = []
for _, name, content in values: for _, name, content in values:
if content["label"] == "Каналы": if content["label"] == "Каналы":
@@ -34,7 +60,7 @@ class YandexTvApi(ScheduleApi):
async def get_schedule(self, channel_id: str, date: datetime.date) -> Schedule: async def get_schedule(self, channel_id: str, date: datetime.date) -> Schedule:
endpoint = f"channels/{channel_id}?date={date:%Y-%m-%d}" endpoint = f"channels/{channel_id}?date={date:%Y-%m-%d}"
data = await self.source.request(endpoint) data = await self.SOURCE.request(endpoint)
soup = BeautifulSoup(data, features="html.parser") soup = BeautifulSoup(data, features="html.parser")
if soup.select_one(".CheckboxCaptcha") is not None: if soup.select_one(".CheckboxCaptcha") is not None:
raise RuntimeError("Captcha") raise RuntimeError("Captcha")
-75
View File
@@ -1,75 +0,0 @@
import datetime
import json
import logging
from aiocache import cached
from bs4 import BeautifulSoup
from gallery.sketch.source import ApiSource
from gallery.sketch.weather.api import WeatherApi
from gallery.sketch.weather.model import (
Location,
WeatherResponse,
)
from gallery.sketch.weather.util import merge_weather_values
from gallery.util import TimeUnit
from .parser import parse_article
logger = logging.getLogger("yandexweather")
class YandexWeatherApi(WeatherApi):
PROVIDER = "yandex"
def _build_source(self) -> ApiSource:
return ApiSource("https://yandex.ru")
@cached(
key_builder=lambda fun, self, location_id: f"api.weather.{self.provider}.source.{location_id}.forecast",
alias="redis",
ttl=TimeUnit.HOUR,
)
async def _get_location_forecast(self, location_id: str) -> list[WeatherResponse]:
endpoint = f"pogoda/ru/{location_id}/details"
content = await self.source.request(endpoint, mode="browser")
soup = BeautifulSoup(content, features="html.parser")
location = soup.select_one("[class^=Suggest_placeholder]").text.strip()
articles = soup.select("article[class^=AppForecastDay]")
return [parse_article(article, location) for article in articles]
async def find_locations(self, query: str) -> list[Location]:
endpoint = f"weather/api/suggest?part={query}&lang=ru&type=weather"
response = await self.source.request(endpoint)
data = json.loads(response)
return [
Location(
id=str(item["geoId"]),
name=item["title"],
provider=self.provider,
lat=item["coords"]["lat"],
lon=item["coords"]["lon"],
country="ru",
country_code="ru",
district=item["description"],
subdistrict="",
)
for item in data
]
async def get_day(self, location_id: str, date: datetime.date) -> WeatherResponse:
forecast = await self._get_location_forecast(location_id)
for response in forecast:
if response.date == date:
return response
raise ValueError(f"Unsupported date: {date}")
async def get_days(self, location_id: str, days: int) -> WeatherResponse:
forecast = await self._get_location_forecast(location_id)
values = [merge_weather_values(item.date, item.values) for item in forecast]
return WeatherResponse(
location=forecast[0].location,
date=datetime.date.today(),
period="days",
values=values,
)
-91
View File
@@ -1,91 +0,0 @@
import logging
from enum import Enum
import dateparser
from bs4 import Tag
from gallery.sketch.weather.model import Cloudness, Precipitation, Sky, WeatherResponse
from gallery.sketch.weather.parser import ParseError, parse_wind_direction
from gallery.sketch.weather.util import build_weather_value
logger = logging.getLogger("yandexweather")
class DayPart(Enum):
MORNING = ("Утром", 6)
AFTERNOON = ("Днём", 12)
EVENING = ("Вечером", 18)
NIGHT = ("Ночью", 0)
def __init__(self, title: str, hour: int):
super().__init__()
self.title = title
self.hour = hour
def parse_sky(sky: str) -> Sky:
cloudness = Cloudness.CLEAR
precipitation = Precipitation.NO
thunder = False
fog = False
if sky == "ясно":
pass
elif sky == "облачно с прояснениями":
cloudness = Cloudness.PARTLY_CLOUDY
elif sky == "малооблачно":
cloudness = Cloudness.CLOUDY
elif sky == "пасмурно":
cloudness = Cloudness.MAINLY_CLOUDY
elif sky == "небольшой дождь":
precipitation = Precipitation.SMALL_RAIN
elif sky == "дождь":
precipitation = Precipitation.RAIN
elif sky == "ливень":
precipitation = Precipitation.SHOWER
else:
logger.warning("unknown sky value: %s", sky)
return Sky(
cloudness=cloudness,
precipitation=precipitation,
thunder=thunder,
fog=fog,
)
def parse_article(article: Tag, location: str) -> WeatherResponse:
date_str = article.select_one("[class^=AppForecastDayHeader_dayTitle]").text.split(",")[-1].strip()
date = dateparser.parse(date_str, languages=["ru"])
if date is None:
raise ParseError.invalid_date(date_str)
values = []
for day_part in DayPart:
value = build_weather_value(date.replace(hour=day_part.hour))
day_part_tag = article.find(string=day_part.title)
temperature_tag = day_part_tag.next_element
temperature = int(temperature_tag.text.strip().rstrip("°"))
value.temperature.append(temperature)
sky_tag = temperature_tag.next_element.next_element.next_element
sky_str = sky_tag.text.strip()
value.sky = parse_sky(sky_str)
temperature_tag = sky_tag.next_element.next_element
temperature = int(temperature_tag.text.strip().rstrip("°"))
value.temperature.append(temperature)
wind_speed_tag = temperature_tag.next_element.next_element
wind_speed = int(wind_speed_tag.text.strip())
value.wind_speed = wind_speed
wind_direction_tag = wind_speed_tag.next_element.next_element.next_element.next_element
wind_direction_str = wind_direction_tag.text.strip()
value.wind_direction = parse_wind_direction(wind_direction_str)
humidity_tag = wind_direction_tag.next_element.next_element.next_element.next_element
humidity = int(humidity_tag.text.strip().rstrip("%"))
value.humidity = humidity
pressure_tag = humidity_tag.next_element.next_element
pressure = int(pressure_tag.text.strip())
value.pressure.append(pressure)
values.append(value)
return WeatherResponse(
location=location,
date=date,
period="day",
values=values,
)
+1 -16
View File
@@ -1,19 +1,10 @@
from typing import TypeVar from typing import TypeVar
from .source import ApiSource
S = TypeVar("S", bound=ApiSource) class Api:
class Api[S = ApiSource]:
TYPE: str TYPE: str
PROVIDER: str PROVIDER: str
_source: S | None = None
def _build_source(self) -> S:
raise NotImplementedError
@property @property
def type(self) -> str: def type(self) -> str:
return self.TYPE return self.TYPE
@@ -22,11 +13,5 @@ class Api[S = ApiSource]:
def provider(self) -> str: def provider(self) -> str:
return self.PROVIDER return self.PROVIDER
@property
def source(self) -> S:
if self._source is None:
self._source = self._build_source()
return self._source
API = TypeVar("API", bound=Api) API = TypeVar("API", bound=Api)
-4
View File
@@ -1,6 +1,5 @@
from typing import Generic, NamedTuple from typing import Generic, NamedTuple
from gallery.sketch.source import ApiSource
from gallery.util import TimeUnit from gallery.util import TimeUnit
from .api import API, Api from .api import API, Api
@@ -20,9 +19,6 @@ class CachedApi(Api, Generic[API]):
def __init__(self, api: API): def __init__(self, api: API):
self._api = api self._api = api
def _build_source(self) -> ApiSource:
raise RuntimeError("Source not used in CachedApi")
@property @property
def provider(self) -> str: def provider(self) -> str:
return self._api.provider return self._api.provider
-42
View File
@@ -1,42 +0,0 @@
DEFAULT_USER_AGENT = (
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36"
)
DEFAULT_ACCEPT = (
"text/html,"
"application/xhtml+xml,"
"application/xml;q=0.9,"
"image/avif,"
"image/webp,"
"image/apng,"
"*/*;q=0.8,"
"application/signed-exchange;v=b3;q=0.7"
)
DEFAULT_HEADERS = {
"Accept": DEFAULT_ACCEPT,
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "en-US,en;q=0.9,ru-RU;q=0.8,ru;q=0.7,uk;q=0.6",
"Cache-Control": "max-age=0",
"Connection": "keep-alive",
"Host": None,
"Referer": None,
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Sec-Fetch-User": "?1",
"Upgrade-Insecure-Requests": "1",
"User-Agent": DEFAULT_USER_AGENT,
"sec-ch-ua": '"Not;A=Brand";v="8", "Chromium";v="150", "Google Chrome";v="150"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Linux"',
}
def build_headers(host: str, *, user_agent: str | None = None) -> dict[str, str]:
result = DEFAULT_HEADERS.copy()
result["Host"] = host
result["Referer"] = f"https://{host}/"
if user_agent is not None:
result["User-Agent"] = user_agent
return result
+1 -2
View File
@@ -1,11 +1,10 @@
import datetime import datetime
from ..api import Api from ..api import Api
from ..source import ApiSource
from .model import Channel, Schedule from .model import Channel, Schedule
class ScheduleApi[S = ApiSource](Api[S]): class ScheduleApi(Api):
TYPE = "schedule" TYPE = "schedule"
async def find_channels(self, query: str) -> list[Channel]: async def find_channels(self, query: str) -> list[Channel]:
+14 -47
View File
@@ -1,74 +1,41 @@
import datetime
import logging import logging
from typing import Any, Literal
import aiohttp import aiohttp
from playwright.async_api import async_playwright
logger = logging.getLogger("source") logger = logging.getLogger("source")
RequestMode = Literal["base", "browser"]
DEFAULT_REQUEST_MODE: RequestMode = "base"
DEFAULT_METHOD: str = "GET"
class ApiSource: class ApiSource:
DEFAULT_USER_AGENT = (
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
)
DEFAULT_TIMEOUT = 30.0 DEFAULT_TIMEOUT = 30.0
def __init__( def __init__(
self, self,
base_url, base_url,
user_agent: str = DEFAULT_USER_AGENT,
timeout: float = DEFAULT_TIMEOUT, timeout: float = DEFAULT_TIMEOUT,
cookies: dict[str, str] | None = None, cookies: dict[str, str] | None = None,
headers: dict[str, str] | None = None, headers: dict[str, str] | None = None,
): ):
self._base_url = base_url self._base_url = base_url
self._user_agent = user_agent
self._timeout = timeout self._timeout = timeout
self._cookies = cookies self._cookies = cookies
self._headers = headers self._headers = headers
async def _base_request( async def request(self, endpoint: str) -> str:
self,
url: str,
method: str = DEFAULT_METHOD,
data: Any | None = None,
) -> str:
async with aiohttp.ClientSession(
headers=self._headers,
cookies=self._cookies,
raise_for_status=True,
) as session:
async with session.request(method, url, timeout=self._timeout, data=data) as response:
return await response.text()
# pylint:disable=unused-argument
async def _browser_request(
self,
url: str,
method: str = DEFAULT_METHOD,
data: Any | None = None,
) -> str:
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto(url, timeout=datetime.timedelta(seconds=self._timeout), wait_until="networkidle")
content = await page.content()
await browser.close()
return content
async def request(
self,
endpoint: str,
/,
mode: RequestMode = DEFAULT_REQUEST_MODE,
method: str = DEFAULT_METHOD,
data: Any | None = None,
) -> str:
if endpoint.startswith("https:"): if endpoint.startswith("https:"):
url = endpoint url = endpoint
else: else:
url = f"{self._base_url}/{endpoint}" url = f"{self._base_url}/{endpoint}"
logger.info(url) logger.info(url)
fun = getattr(self, f"_{mode}_request") headers = {"User-Agent": self._user_agent, **(self._headers or {})}
return await fun(url, method, data) async with aiohttp.ClientSession(
headers=headers,
cookies=self._cookies,
raise_for_status=True,
) as session:
async with session.request("GET", url, timeout=self._timeout) as response:
return await response.text()
+1 -2
View File
@@ -1,11 +1,10 @@
import datetime import datetime
from ..api import Api from ..api import Api
from ..source import ApiSource
from .model import Location, WeatherResponse from .model import Location, WeatherResponse
class WeatherApi[S = ApiSource](Api[S]): class WeatherApi(Api):
TYPE = "weather" TYPE = "weather"
async def find_locations(self, query: str) -> list[Location]: async def find_locations(self, query: str) -> list[Location]:
+3 -13
View File
@@ -2,7 +2,7 @@ import datetime
from enum import StrEnum, auto from enum import StrEnum, auto
from typing import Self from typing import Self
from pydantic import BaseModel, Field from pydantic import BaseModel
class Model(BaseModel): class Model(BaseModel):
@@ -28,11 +28,6 @@ class Cloudness(StrEnum):
CLOUDY = auto() CLOUDY = auto()
MAINLY_CLOUDY = auto() MAINLY_CLOUDY = auto()
values: list[Self]
Cloudness.values = list(Cloudness)
class Precipitation(StrEnum): class Precipitation(StrEnum):
NO = auto() NO = auto()
@@ -44,11 +39,6 @@ class Precipitation(StrEnum):
HEAVY_SNOW = auto() HEAVY_SNOW = auto()
HAIL = auto() HAIL = auto()
values: list[Self]
Precipitation.values = list(Precipitation)
class Sky(Model): class Sky(Model):
cloudness: Cloudness cloudness: Cloudness
@@ -126,8 +116,8 @@ class WeatherValue(Model):
wind_gust: int wind_gust: int
wind_direction: float wind_direction: float
precipitation: float precipitation: float
pressure: list[int] = Field(default=[]) pressure: list[int]
humidity: int = Field(default=-1) humidity: int
class WeatherResponse(Model): class WeatherResponse(Model):
-29
View File
@@ -1,29 +0,0 @@
from typing import Self
from gallery.sketch.weather.model import WindDirection, WindDirectionDeg
class ParseError(Exception):
@classmethod
def invalid_date(cls, date_str: str) -> Self:
return cls("Invalid date string", date_str)
WIND_DIRECTION_MAP: dict[str, WindDirection] = {
"—": WindDirection.CALM,
"": WindDirection.CALM,
"штиль": WindDirection.CALM,
"штл": WindDirection.CALM,
"с": WindDirection.N,
"св": WindDirection.NE,
"в": WindDirection.E,
"юв": WindDirection.SE,
"ю": WindDirection.S,
"юз": WindDirection.SW,
"з": WindDirection.W,
"сз": WindDirection.NW,
}
def parse_wind_direction(value: str) -> WindDirectionDeg:
return WindDirectionDeg.from_direction(WIND_DIRECTION_MAP[value.replace("-", "").lower()])
+8 -23
View File
@@ -1,11 +1,8 @@
import datetime import datetime
import statistics import statistics
from typing import Literal
from .model import Cloudness, Precipitation, Sky, WeatherValue, WindDirectionDeg from .model import Cloudness, Precipitation, Sky, WeatherValue, WindDirectionDeg
MergeMode = Literal["interval", "average"]
def build_weather_value(date: datetime.datetime) -> WeatherValue: def build_weather_value(date: datetime.datetime) -> WeatherValue:
return WeatherValue( return WeatherValue(
@@ -22,25 +19,11 @@ def build_weather_value(date: datetime.datetime) -> WeatherValue:
wind_direction=WindDirectionDeg(-1), wind_direction=WindDirectionDeg(-1),
precipitation=0, precipitation=0,
pressure=[], pressure=[],
humidity=-1, humidity=0,
) )
def _merge_values(values: list[int], mode: MergeMode) -> list[int]: def merge_weather_values(date: datetime.datetime, values: list[WeatherValue]) -> WeatherValue:
if mode == "interval":
if (max_value := max(values)) == (min_value := min(values)):
return [max_value]
else:
return [max_value, min_value]
else:
return [round(sum(values) / len(values))]
def merge_weather_values(
date: datetime.datetime,
values: list[WeatherValue],
mode: MergeMode = "interval",
) -> WeatherValue:
result = build_weather_value(date) result = build_weather_value(date)
temperatures = [] temperatures = []
pressures = [] pressures = []
@@ -61,17 +44,19 @@ def merge_weather_values(
cloudnesses.append(value.sky.cloudness) cloudnesses.append(value.sky.cloudness)
precipitations.append(value.sky.precipitation) precipitations.append(value.sky.precipitation)
precipitation += value.precipitation precipitation += value.precipitation
result.temperature = _merge_values(temperatures, mode) result.temperature = [max(temperatures), min(temperatures)]
result.pressure = _merge_values(pressures, mode) result.pressure = [max(pressures), min(pressures)]
result.humidity = round(statistics.mean(humidities)) result.humidity = round(statistics.mean(humidities))
result.wind_speed = round(statistics.mean(wind_speeds)) result.wind_speed = round(statistics.mean(wind_speeds))
result.wind_gust = round(statistics.mean(wind_gusts)) result.wind_gust = round(statistics.mean(wind_gusts))
result.wind_direction = statistics.mean(wind_directions) result.wind_direction = statistics.mean(wind_directions)
# TODO: merge cloudnesses
for item in cloudnesses: for item in cloudnesses:
if Cloudness.values.index(item) > Cloudness.values.index(result.sky.cloudness): if item != Cloudness.CLEAR:
result.sky.cloudness = item result.sky.cloudness = item
# TODO: merge precipitations
for item in precipitations: for item in precipitations:
if Precipitation.values.index(item) > Precipitation.values.index(result.sky.precipitation): if item != Precipitation.NO:
result.sky.precipitation = item result.sky.precipitation = item
result.precipitation = precipitation result.precipitation = precipitation
return result return result
+1 -1
View File
@@ -1,4 +1,4 @@
import tomllib import tomllib
from pathlib import Path from pathlib import Path
__version__ = tomllib.loads((Path(__file__).parent.parent / "pyproject.toml").read_text())["project"]["version"] __version__ = tomllib.loads((Path(__file__).parent.parent / "pyproject.toml").read_text())["tool"]["poetry"]["version"]
-9
View File
@@ -69,18 +69,9 @@ msgstr "Давление, мм рт. ст."
msgid "Humidity, %" msgid "Humidity, %"
msgstr "Влажность, %" msgstr "Влажность, %"
msgid "Stored locations"
msgstr "Сохранённые локации"
# tv # tv
msgid "TV program" msgid "TV program"
msgstr "Телепрограмма" msgstr "Телепрограмма"
msgid "Live broadcasts" msgid "Live broadcasts"
msgstr "Прямые трансляции" msgstr "Прямые трансляции"
msgid "Stored channels"
msgstr "Сохранённые каналы"
msgid "Channel groups"
msgstr "Группы каналов"
Generated
+85 -258
View File
@@ -192,10 +192,9 @@ frozenlist = ">=1.1.0"
name = "annotated-doc" name = "annotated-doc"
version = "0.0.4" version = "0.0.4"
description = "Document parameters, class attributes, return types, and variables inline, with Annotated." description = "Document parameters, class attributes, return types, and variables inline, with Annotated."
optional = true optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320"}, {file = "annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320"},
{file = "annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4"}, {file = "annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4"},
@@ -207,7 +206,7 @@ version = "0.7.0"
description = "Reusable constraint types to use with typing.Annotated" description = "Reusable constraint types to use with typing.Annotated"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["main"] groups = ["main", "app"]
files = [ files = [
{file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"},
{file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"},
@@ -217,10 +216,9 @@ files = [
name = "anyio" name = "anyio"
version = "4.14.1" version = "4.14.1"
description = "High-level concurrency and networking framework on top of asyncio or Trio" description = "High-level concurrency and networking framework on top of asyncio or Trio"
optional = true optional = false
python-versions = ">=3.10" python-versions = ">=3.10"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"},
{file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"},
@@ -260,10 +258,9 @@ files = [
name = "babel" name = "babel"
version = "2.18.0" version = "2.18.0"
description = "Internationalization utilities" description = "Internationalization utilities"
optional = true optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35"}, {file = "babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35"},
{file = "babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d"}, {file = "babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d"},
@@ -350,10 +347,9 @@ uvloop = ["uvloop (>=0.15.2) ; sys_platform != \"win32\"", "winloop (>=0.5.0) ;
name = "certifi" name = "certifi"
version = "2026.6.17" version = "2026.6.17"
description = "Python package for providing Mozilla's CA Bundle." description = "Python package for providing Mozilla's CA Bundle."
optional = true optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "certifi-2026.6.17-py3-none-any.whl", hash = "sha256:2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db"}, {file = "certifi-2026.6.17-py3-none-any.whl", hash = "sha256:2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db"},
{file = "certifi-2026.6.17.tar.gz", hash = "sha256:024c88eeec92ca068db80f02b8b07c9cef7b9fe261d1d535abfd5abd6f6af432"}, {file = "certifi-2026.6.17.tar.gz", hash = "sha256:024c88eeec92ca068db80f02b8b07c9cef7b9fe261d1d535abfd5abd6f6af432"},
@@ -365,12 +361,11 @@ version = "8.4.2"
description = "Composable command line interface toolkit" description = "Composable command line interface toolkit"
optional = false optional = false
python-versions = ">=3.10" python-versions = ">=3.10"
groups = ["main", "dev"] groups = ["app", "dev"]
files = [ files = [
{file = "click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76"}, {file = "click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76"},
{file = "click-8.4.2.tar.gz", hash = "sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6"}, {file = "click-8.4.2.tar.gz", hash = "sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6"},
] ]
markers = {main = "extra == \"app\""}
[package.dependencies] [package.dependencies]
colorama = {version = "*", markers = "platform_system == \"Windows\""} colorama = {version = "*", markers = "platform_system == \"Windows\""}
@@ -381,12 +376,12 @@ version = "0.4.6"
description = "Cross-platform colored terminal text." description = "Cross-platform colored terminal text."
optional = false optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
groups = ["main", "dev", "test"] groups = ["app", "dev", "test"]
files = [ files = [
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
] ]
markers = {main = "extra == \"app\" and (platform_system == \"Windows\" or sys_platform == \"win32\")", dev = "platform_system == \"Windows\" or sys_platform == \"win32\"", test = "sys_platform == \"win32\""} markers = {app = "platform_system == \"Windows\" or sys_platform == \"win32\"", dev = "platform_system == \"Windows\" or sys_platform == \"win32\"", test = "sys_platform == \"win32\""}
[[package]] [[package]]
name = "dateparser" name = "dateparser"
@@ -414,10 +409,9 @@ langdetect = ["langdetect (>=1.0.0)"]
name = "detect-installer" name = "detect-installer"
version = "0.1.0" version = "0.1.0"
description = "Detect how a Python package was installed and get the correct upgrade command" description = "Detect how a Python package was installed and get the correct upgrade command"
optional = true optional = false
python-versions = ">=3.10" python-versions = ">=3.10"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "detect_installer-0.1.0-py3-none-any.whl", hash = "sha256:034fb20fd665c36e6ba52b8821525ea07fb4f7f938cac459df889fb33801528a"}, {file = "detect_installer-0.1.0-py3-none-any.whl", hash = "sha256:034fb20fd665c36e6ba52b8821525ea07fb4f7f938cac459df889fb33801528a"},
{file = "detect_installer-0.1.0.tar.gz", hash = "sha256:00ad7ba0a36e3cf7d08a40d3643011746dbc112597c7d475cc91c416710ca4e7"}, {file = "detect_installer-0.1.0.tar.gz", hash = "sha256:00ad7ba0a36e3cf7d08a40d3643011746dbc112597c7d475cc91c416710ca4e7"},
@@ -443,10 +437,9 @@ profile = ["gprof2dot (>=2022.7.29)"]
name = "dnspython" name = "dnspython"
version = "2.8.0" version = "2.8.0"
description = "DNS toolkit" description = "DNS toolkit"
optional = true optional = false
python-versions = ">=3.10" python-versions = ">=3.10"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af"}, {file = "dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af"},
{file = "dnspython-2.8.0.tar.gz", hash = "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f"}, {file = "dnspython-2.8.0.tar.gz", hash = "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f"},
@@ -465,10 +458,9 @@ wmi = ["wmi (>=1.5.1) ; platform_system == \"Windows\""]
name = "email-validator" name = "email-validator"
version = "2.3.0" version = "2.3.0"
description = "A robust email address syntax and deliverability validation library." description = "A robust email address syntax and deliverability validation library."
optional = true optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4"}, {file = "email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4"},
{file = "email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426"}, {file = "email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426"},
@@ -482,10 +474,9 @@ idna = ">=2.0.0"
name = "fastapi" name = "fastapi"
version = "0.139.0" version = "0.139.0"
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
optional = true optional = false
python-versions = ">=3.10" python-versions = ">=3.10"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "fastapi-0.139.0-py3-none-any.whl", hash = "sha256:cf15e1e9e667ddb0ad63811e60bd11390d1aac838ca4a7a23f421807b2308189"}, {file = "fastapi-0.139.0-py3-none-any.whl", hash = "sha256:cf15e1e9e667ddb0ad63811e60bd11390d1aac838ca4a7a23f421807b2308189"},
{file = "fastapi-0.139.0.tar.gz", hash = "sha256:99ab7b2d92223c76d6cf10757ab3f89d45b38267fc20b2a136cf02f6beac3145"}, {file = "fastapi-0.139.0.tar.gz", hash = "sha256:99ab7b2d92223c76d6cf10757ab3f89d45b38267fc20b2a136cf02f6beac3145"},
@@ -516,10 +507,9 @@ standard-no-fastapi-cloud-cli = ["email-validator (>=2.0.0)", "fastapi-cli[stand
name = "fastapi-cli" name = "fastapi-cli"
version = "0.0.27" version = "0.0.27"
description = "Run and manage FastAPI apps from the command line with FastAPI CLI. 🚀" description = "Run and manage FastAPI apps from the command line with FastAPI CLI. 🚀"
optional = true optional = false
python-versions = ">=3.10" python-versions = ">=3.10"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "fastapi_cli-0.0.27-py3-none-any.whl", hash = "sha256:2e389a40f318e29fec8cb1e289f267f17c048876fb82dbfa869a10b16740495d"}, {file = "fastapi_cli-0.0.27-py3-none-any.whl", hash = "sha256:2e389a40f318e29fec8cb1e289f267f17c048876fb82dbfa869a10b16740495d"},
{file = "fastapi_cli-0.0.27.tar.gz", hash = "sha256:1dffb1e40c0c88f2e0171a8a252a2b615c1e63ff8c05626649e4badd6a84336a"}, {file = "fastapi_cli-0.0.27.tar.gz", hash = "sha256:1dffb1e40c0c88f2e0171a8a252a2b615c1e63ff8c05626649e4badd6a84336a"},
@@ -540,10 +530,9 @@ standard-no-fastapi-cloud-cli = ["uvicorn[standard] (>=0.15.0)"]
name = "fastapi-cloud-cli" name = "fastapi-cloud-cli"
version = "0.22.0" version = "0.22.0"
description = "Deploy and manage FastAPI Cloud apps from the command line 🚀" description = "Deploy and manage FastAPI Cloud apps from the command line 🚀"
optional = true optional = false
python-versions = ">=3.10" python-versions = ">=3.10"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "fastapi_cloud_cli-0.22.0-py3-none-any.whl", hash = "sha256:799e263140d1b6e679390fc6e90da404556aee6730fd479d3b52475e850073bf"}, {file = "fastapi_cloud_cli-0.22.0-py3-none-any.whl", hash = "sha256:799e263140d1b6e679390fc6e90da404556aee6730fd479d3b52475e850073bf"},
{file = "fastapi_cloud_cli-0.22.0.tar.gz", hash = "sha256:cde14470227fc9275075ff537977d2991e8ce1baf947055d7a4149726de27e08"}, {file = "fastapi_cloud_cli-0.22.0.tar.gz", hash = "sha256:cde14470227fc9275075ff537977d2991e8ce1baf947055d7a4149726de27e08"},
@@ -567,10 +556,9 @@ standard = ["uvicorn[standard] (>=0.15.0)"]
name = "fastar" name = "fastar"
version = "0.11.0" version = "0.11.0"
description = "High-level bindings for the Rust tar crate" description = "High-level bindings for the Rust tar crate"
optional = true optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "fastar-0.11.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:e7c906ad371ca365591ebcb7630009923f3eceb20956814494d15591a78e9e46"}, {file = "fastar-0.11.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:e7c906ad371ca365591ebcb7630009923f3eceb20956814494d15591a78e9e46"},
{file = "fastar-0.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6919497b35fa5bd978d2c26ee117cf1771b90ee5073f7518e44b9bc364b57715"}, {file = "fastar-0.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6919497b35fa5bd978d2c26ee117cf1771b90ee5073f7518e44b9bc364b57715"},
@@ -853,107 +841,13 @@ files = [
{file = "frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad"}, {file = "frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad"},
] ]
[[package]]
name = "greenlet"
version = "3.5.5"
description = "Lightweight in-process concurrent programming"
optional = false
python-versions = ">=3.10"
groups = ["main"]
files = [
{file = "greenlet-3.5.5-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:816230f469381ad0a43abc9fa8dda5a699e32fb78958dde32ded93213b70a667"},
{file = "greenlet-3.5.5-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5433cf291e0ef9114bd14d0d824db6e5e4a43033234bca48181a9597acca07b"},
{file = "greenlet-3.5.5-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:19d59f068887d8c5907fc177f27683413ace3011b6ed646c0b309266e74a6502"},
{file = "greenlet-3.5.5-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:86c5113d698cb8d927b2750bb1f1d59eefe3a37e0e0217491aee29a7f84ef52c"},
{file = "greenlet-3.5.5-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ff00e12102358292087274dfb1669132387ff6e7920ebf9d85f4826ce0d3a56"},
{file = "greenlet-3.5.5-cp310-cp310-manylinux_2_39_riscv64.whl", hash = "sha256:c69bed34470abfcd456984fdadaa18e62169af4480335c45f3c32d1d9c12e638"},
{file = "greenlet-3.5.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:523bb8e27614d77101ea7a8cf59f8d91219b72d5c29f6a038c92b50828bfa8d0"},
{file = "greenlet-3.5.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f1e2db190db51c17433eee424803818cf0670bf049d9cfe0dd07be111d1aa7c4"},
{file = "greenlet-3.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:740e544169527b82695ce76af2f7ad6f030904658f2f3921a1d245771fb88cfc"},
{file = "greenlet-3.5.5-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:be63afcbbccfad3dd95a1ba12ada84dab2ef32031973d80b5b92df67fa763a61"},
{file = "greenlet-3.5.5-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a268024ce2d7d2b04694bf1594058981a9fa663d1df4b762dee499211ed7c1c"},
{file = "greenlet-3.5.5-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:35cbb8bf55ace57fbccb4fb8622c4521713acd8691e77f4696d416ea7ca527da"},
{file = "greenlet-3.5.5-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:abc8bc8d9f935cd685457545b6a53863a877fdc12c2c0f5ee9beee18d9db139c"},
{file = "greenlet-3.5.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cc6df89ec5302337adc9cf096221cbed2510fd444b0e0f1586cf0470740864"},
{file = "greenlet-3.5.5-cp311-cp311-manylinux_2_39_riscv64.whl", hash = "sha256:3134291427bb0f3526e9d90311988caf336eb43730e95244997a4fb15f45144f"},
{file = "greenlet-3.5.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d9b454c5fc48aeaa7c4337813dbf513a6870468e426438a04d922c6d0fe63db"},
{file = "greenlet-3.5.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03551ed792cb1b4fc0277a0c60dfd8c343894a0ba06fe60dcd22f568b433da39"},
{file = "greenlet-3.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:ab3df3dffb58bf70564e93a5cec7941e4d9faa5a36cc4234a10d3131afe04f53"},
{file = "greenlet-3.5.5-cp311-cp311-win_arm64.whl", hash = "sha256:2b70a766135540c472ac1393d57c2e1b4a2eb85bf526a1e41e6d096173a8cee5"},
{file = "greenlet-3.5.5-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:49520f0c95a48b42cf55414b8e8479beb274ea70431afc33e3f79903c71f4380"},
{file = "greenlet-3.5.5-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55272212cbc5f43d1d723725ab931f1939969b7e9523882ca58b55061769d053"},
{file = "greenlet-3.5.5-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655bca754a2ef4efcb0eb48a94d3f4593536d0f3d48f8ed44343c01d16a92f95"},
{file = "greenlet-3.5.5-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6ca5d6ae0739e5764f2cfcfaa562ac5a990cbdaedca93251c5e3cf07c362371f"},
{file = "greenlet-3.5.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:147b25a42e5ca5be3d42356e8f608b37af715a1c196e9bf9d1627f3341adfe1d"},
{file = "greenlet-3.5.5-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:1b5ed9162c0c098e0bbc2cf88a94f433c1b8926f831745252e099e5d83e17759"},
{file = "greenlet-3.5.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:27493374cff1d1b7919dc8126547f2aea582737e3046147b434b1e12de56389b"},
{file = "greenlet-3.5.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:12e2ee66c2aba86133f10fd99d6a8856c6d351ffb7be0e4d52ef2cc5fbb705b2"},
{file = "greenlet-3.5.5-cp312-cp312-win_amd64.whl", hash = "sha256:49ddacd36af37735fab103846f4ee4d18a492dde72730d1699c0c8ebe30d9f18"},
{file = "greenlet-3.5.5-cp312-cp312-win_arm64.whl", hash = "sha256:5f1b1ff4828cdc1aba4266aff814085d04a1d07959287219af021b838b265d52"},
{file = "greenlet-3.5.5-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:b79fd2a5bc099b5e744f34c4c9a58954a5f4cb7529fb4b6e8446057d61b6edaa"},
{file = "greenlet-3.5.5-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:634cf15a233a949136879dd388e25d3296e16f3f1e217d2456797b8579ebc6ed"},
{file = "greenlet-3.5.5-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:499adea519f748407fc6806d20eedabac2884fd73b9f38d81236e190ba20dfef"},
{file = "greenlet-3.5.5-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f7278591501941bb2456af102bb9cd59aab48c6cfd6e2dd68fa1290bb0c49a42"},
{file = "greenlet-3.5.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2eabb980975cba5b93a95f6f69287d05fc05ac955bfd6a320a7c083eeb52c0b0"},
{file = "greenlet-3.5.5-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:4dfc7c4470354e7b09184d1a3a985761053a2fd694ddb5b5c80242afc2c8c90b"},
{file = "greenlet-3.5.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:03115c2e0a371999bf8ae616aa8d653f96641d4705c457aebaa187276e9f7537"},
{file = "greenlet-3.5.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4441153ffba21b90d3ca89fe3d31f5c093ae6c0bf0cfdfc98f54cde22f95b62e"},
{file = "greenlet-3.5.5-cp313-cp313-win_amd64.whl", hash = "sha256:95c5b1f4b3a193f8a0c2de4bfdcb48d119f7f1063941f1de1f2168051b3e52dd"},
{file = "greenlet-3.5.5-cp313-cp313-win_arm64.whl", hash = "sha256:1af90aa4bc129883b340cdd6957a3bc74f60528a4993bbd1f53aaebe1d9981cc"},
{file = "greenlet-3.5.5-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:d4a389a852e392a6366058651a20fa5ba40d979865aa81bea2ccbdc44805070d"},
{file = "greenlet-3.5.5-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70b157cd319873e8b544ddc2de158f55bbd0a9b0218c8ce9332039801518e328"},
{file = "greenlet-3.5.5-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8bdfd1424abcf26832961e766570cae79efdb9599d709088c9cb6ef82b194926"},
{file = "greenlet-3.5.5-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d98ef6f92e67c6dbf299dbfd8facc1b0d2d9cedf91e325e73b3d0373fe4309d8"},
{file = "greenlet-3.5.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:182de51c6b572a705f2fafaab2e783bcf7d2760940229dfe73086cbae037af3e"},
{file = "greenlet-3.5.5-cp314-cp314-manylinux_2_39_riscv64.whl", hash = "sha256:159df1942d88e8f784cbb38d6f18bdb365cd11319cfbb3e89623de2b97892d53"},
{file = "greenlet-3.5.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8fec3f165dfe332e490c3247c0f6c23b0bfc45f06496ad7f00ddb00e3d35e4dc"},
{file = "greenlet-3.5.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c6ce25fee6cabc8bf22cb8b52e642cbb821be5b9aec8094d07ff03378141b8e9"},
{file = "greenlet-3.5.5-cp314-cp314-win_amd64.whl", hash = "sha256:7dffc5c859fe6059974df1e37d7923d654a83e2ae18fdd616994270e001115e1"},
{file = "greenlet-3.5.5-cp314-cp314-win_arm64.whl", hash = "sha256:5e2afcfc4d4305dd715809b03da5cbe437c8984f61d8917751eb5fe4aefa3e07"},
{file = "greenlet-3.5.5-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:0e5a7de979d764aea1f5b6e95cf92b5b37741b9823702041f34b126e7f690277"},
{file = "greenlet-3.5.5-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fef01bd457f11fc158b130ca0027a3c365693280e8e231b65bdaf57999f39f5b"},
{file = "greenlet-3.5.5-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5173a72310725a74afc82c164f0e52cb8ad0de62f2bb623f24f6c0cc07d80272"},
{file = "greenlet-3.5.5-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5e9ec2e7c98e895fcea0c5cc57b2606cf86ece6d0a56578f3eb225e2af4f0387"},
{file = "greenlet-3.5.5-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44f08341873200ba8a60a8bc14ace3d91f1754f7fa7bc66157714a8cd420a476"},
{file = "greenlet-3.5.5-cp314-cp314t-manylinux_2_39_riscv64.whl", hash = "sha256:102817506f6090b5176c746a82603341a549b40e5c3d5b72a4c672228a918c41"},
{file = "greenlet-3.5.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d246c0db9a2513cd45f019ba178ea4d4d4705bd210ee465e2c15d76a1ab13874"},
{file = "greenlet-3.5.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:72507285b5caa1d17904a3f7c322ca780823a54170a0e04ec3f37bcc60d4db71"},
{file = "greenlet-3.5.5-cp314-cp314t-win_amd64.whl", hash = "sha256:7805655781fb8f28a55d05fe57ed61f5f10f1892fb587673e3bb5264f28041f0"},
{file = "greenlet-3.5.5-cp315-cp315-macosx_11_0_universal2.whl", hash = "sha256:c0db80fcd5b8aece93f66c64f78a786bbb6b96c5fe63ef5a5a4581ecf8bab206"},
{file = "greenlet-3.5.5-cp315-cp315-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b241c32f912ada659808d68e308c568baf577eebf757d15471472de0c18cfad"},
{file = "greenlet-3.5.5-cp315-cp315-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ef6a08349401d8eaf3cb12688ac8557de95788556b8631ef17555a4a173022c0"},
{file = "greenlet-3.5.5-cp315-cp315-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:37faa97daccb6d9f4c2141ce3118d023c3c5506864a7d8bdf726f665018c1f76"},
{file = "greenlet-3.5.5-cp315-cp315-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f2e3d061b8e13aec2f0441689b3c71b244a20e5d274a52cb0f7e31bd1d139552"},
{file = "greenlet-3.5.5-cp315-cp315-manylinux_2_39_riscv64.whl", hash = "sha256:b18007dc2473a7942fd157366b55f01da6fed7ce85318591005b419e0a439474"},
{file = "greenlet-3.5.5-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:9ab5f5b93655e77fe0d6c2dfd22b5eac751bb1f876d8ec21761b7c1fb9266007"},
{file = "greenlet-3.5.5-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:f0e5a21bd4452a88cf032fc43c4a5b307ab1380eacb63b5988f9c0317885e773"},
{file = "greenlet-3.5.5-cp315-cp315-win_amd64.whl", hash = "sha256:469dbb0a78625642f4a626cfd0c6e8bccc0385b5e49189b6308bbe849ec88a8e"},
{file = "greenlet-3.5.5-cp315-cp315-win_arm64.whl", hash = "sha256:2d57406c3efd32d7a81e17a674314e8bd00792cdab49ea3228a49aa1bfb2e769"},
{file = "greenlet-3.5.5-cp315-cp315t-macosx_11_0_universal2.whl", hash = "sha256:68184dfcf50ccaa8e864770fe0633a7e27250ea9329f8192ef47ee9ecfd78e1c"},
{file = "greenlet-3.5.5-cp315-cp315t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ec0dc0e59dc9c61af5c47348365ccbbd7addfafe0a93b00336ff3da2907bdc6"},
{file = "greenlet-3.5.5-cp315-cp315t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e604f58e35833fc46ef20302bcb314dddbfd3fcf33a4f936216d51dd678d63ae"},
{file = "greenlet-3.5.5-cp315-cp315t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2888a3a38bc5ee5bb6c438372197152e815837e4fab7ed7a1f86ef18ffd58ad1"},
{file = "greenlet-3.5.5-cp315-cp315t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:40239b5384f96da3963585cc6d7eaa9b56f8ae67e8d92cc82dd9e202fc847de3"},
{file = "greenlet-3.5.5-cp315-cp315t-manylinux_2_39_riscv64.whl", hash = "sha256:1e8d9391fe77f15649589a907cef972dbbd6352ef7ff7dc0492f658c0c26495f"},
{file = "greenlet-3.5.5-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:a1eaccf5c3a1d3e46dead602c72e6836731e8e245c9de6a27764567b6b62d4c0"},
{file = "greenlet-3.5.5-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:19e4e026fe20691f333b8eb1a3bc9625eceba8c3f9d62ec5a6f8581afbc6b5a5"},
{file = "greenlet-3.5.5-cp315-cp315t-win_amd64.whl", hash = "sha256:712aee154f648bde84634654bb38bb78c69ac640c37a45c9effed800735049d8"},
{file = "greenlet-3.5.5-cp315-cp315t-win_arm64.whl", hash = "sha256:7f049911ee81a16a03c33d5450d8d5867d27f596ca5fb201b86f4524e874468b"},
{file = "greenlet-3.5.5.tar.gz", hash = "sha256:adb4bae02e91a8e863e48b177e4014bdcac8a6b5e047ea1df687a61534b85e6c"},
]
[package.extras]
docs = ["Sphinx", "furo"]
test = ["objgraph", "psutil", "setuptools"]
[[package]] [[package]]
name = "h11" name = "h11"
version = "0.16.0" version = "0.16.0"
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
optional = true optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"},
{file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"},
@@ -963,10 +857,9 @@ files = [
name = "httpcore" name = "httpcore"
version = "1.0.9" version = "1.0.9"
description = "A minimal low-level HTTP client." description = "A minimal low-level HTTP client."
optional = true optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"},
{file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"},
@@ -986,10 +879,9 @@ trio = ["trio (>=0.22.0,<1.0)"]
name = "httptools" name = "httptools"
version = "0.8.0" version = "0.8.0"
description = "A collection of framework independent HTTP protocol utils." description = "A collection of framework independent HTTP protocol utils."
optional = true optional = false
python-versions = ">=3.9" python-versions = ">=3.9"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "httptools-0.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bf3b6f807c8541503cecfbb8a8dffb385640d0d96102f3d112aa8740f9b7c826"}, {file = "httptools-0.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bf3b6f807c8541503cecfbb8a8dffb385640d0d96102f3d112aa8740f9b7c826"},
{file = "httptools-0.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da684f2e1aa2ee9bdcb083f3f3a68c5956750b375bc5df864d3a5f0c42a40b77"}, {file = "httptools-0.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da684f2e1aa2ee9bdcb083f3f3a68c5956750b375bc5df864d3a5f0c42a40b77"},
@@ -1047,10 +939,9 @@ files = [
name = "httpx" name = "httpx"
version = "0.28.1" version = "0.28.1"
description = "The next generation HTTP client." description = "The next generation HTTP client."
optional = true optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"},
{file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"},
@@ -1075,7 +966,7 @@ version = "3.18"
description = "Internationalized Domain Names in Applications (IDNA)" description = "Internationalized Domain Names in Applications (IDNA)"
optional = false optional = false
python-versions = ">=3.9" python-versions = ">=3.9"
groups = ["main"] groups = ["main", "app"]
files = [ files = [
{file = "idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2"}, {file = "idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2"},
{file = "idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848"}, {file = "idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848"},
@@ -1115,10 +1006,9 @@ colors = ["colorama"]
name = "jinja2" name = "jinja2"
version = "3.1.6" version = "3.1.6"
description = "A very fast and expressive template engine." description = "A very fast and expressive template engine."
optional = true optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"},
{file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"},
@@ -1134,10 +1024,9 @@ i18n = ["Babel (>=2.7)"]
name = "markdown-it-py" name = "markdown-it-py"
version = "4.2.0" version = "4.2.0"
description = "Python port of markdown-it. Markdown parsing, done right!" description = "Python port of markdown-it. Markdown parsing, done right!"
optional = true optional = false
python-versions = ">=3.10" python-versions = ">=3.10"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a"}, {file = "markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a"},
{file = "markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49"}, {file = "markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49"},
@@ -1159,10 +1048,9 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions", "pytest-tim
name = "markupsafe" name = "markupsafe"
version = "3.0.3" version = "3.0.3"
description = "Safely add untrusted strings to HTML/XML markup." description = "Safely add untrusted strings to HTML/XML markup."
optional = true optional = false
python-versions = ">=3.9" python-versions = ">=3.9"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559"}, {file = "markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559"},
{file = "markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419"}, {file = "markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419"},
@@ -1271,10 +1159,9 @@ files = [
name = "mdurl" name = "mdurl"
version = "0.1.2" version = "0.1.2"
description = "Markdown URL utilities" description = "Markdown URL utilities"
optional = true optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"},
{file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
@@ -1489,28 +1376,6 @@ files = [
{file = "platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7"}, {file = "platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7"},
] ]
[[package]]
name = "playwright"
version = "1.62.0"
description = "A high-level API to automate web browsers"
optional = false
python-versions = ">=3.10"
groups = ["main"]
files = [
{file = "playwright-1.62.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:d8da938f3748841a8754f2e1f0216902c1c8f8ae3720de8b32ccf8e6913a7c4f"},
{file = "playwright-1.62.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:db755ab27db21a04186f1fe8169888e42356086e439b1059b923ef417f0b6034"},
{file = "playwright-1.62.0-py3-none-macosx_11_0_universal2.whl", hash = "sha256:5108bd5b3e87169ddf269feee097da5893af7f8aea4634dfc840518d64c1f1da"},
{file = "playwright-1.62.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:ba33bae6a13b3d9d354c751cb618af357d20fe1d57767cbcce52079bbef17ad3"},
{file = "playwright-1.62.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db2d76613a57ad844362ce42f7d0c2fa26b19a4f7a46d4f76b891c631e6e5aff"},
{file = "playwright-1.62.0-py3-none-win32.whl", hash = "sha256:e5614fa89355d7081457680324bb219f79f69c423c5cb6fa250e30b0d8aebf1c"},
{file = "playwright-1.62.0-py3-none-win_amd64.whl", hash = "sha256:92c0d98ed04eb35af557b709875edba415b1f548bdb22ddb5bb3e1e6c835c2f1"},
{file = "playwright-1.62.0-py3-none-win_arm64.whl", hash = "sha256:ea8d3055aa9d5a9f1832ac82517bd8b42c78fac7ebcbebb0107116735c8cb6a1"},
]
[package.dependencies]
greenlet = ">=3.1.1,<4.0.0"
pyee = ">=13,<14"
[[package]] [[package]]
name = "pluggy" name = "pluggy"
version = "1.6.0" version = "1.6.0"
@@ -1664,7 +1529,7 @@ version = "2.13.4"
description = "Data validation using Python type hints" description = "Data validation using Python type hints"
optional = false optional = false
python-versions = ">=3.9" python-versions = ">=3.9"
groups = ["main"] groups = ["main", "app"]
files = [ files = [
{file = "pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba"}, {file = "pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba"},
{file = "pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6"}, {file = "pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6"},
@@ -1687,7 +1552,7 @@ version = "2.46.4"
description = "Core functionality for Pydantic validation and serialization" description = "Core functionality for Pydantic validation and serialization"
optional = false optional = false
python-versions = ">=3.9" python-versions = ">=3.9"
groups = ["main"] groups = ["main", "app"]
files = [ files = [
{file = "pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4"}, {file = "pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4"},
{file = "pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5"}, {file = "pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5"},
@@ -1818,10 +1683,9 @@ typing-extensions = ">=4.14.1"
name = "pydantic-extra-types" name = "pydantic-extra-types"
version = "2.11.1" version = "2.11.1"
description = "Extra Pydantic types." description = "Extra Pydantic types."
optional = true optional = false
python-versions = ">=3.9" python-versions = ">=3.9"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "pydantic_extra_types-2.11.1-py3-none-any.whl", hash = "sha256:1722ea2bddae5628ace25f2aa685b69978ef533123e5638cfbddb999e0100ec1"}, {file = "pydantic_extra_types-2.11.1-py3-none-any.whl", hash = "sha256:1722ea2bddae5628ace25f2aa685b69978ef533123e5638cfbddb999e0100ec1"},
{file = "pydantic_extra_types-2.11.1.tar.gz", hash = "sha256:46792d2307383859e923d8fcefa82108b1a141f8a9c0198982b3832ab5ef1049"}, {file = "pydantic_extra_types-2.11.1.tar.gz", hash = "sha256:46792d2307383859e923d8fcefa82108b1a141f8a9c0198982b3832ab5ef1049"},
@@ -1845,10 +1709,9 @@ uuid-utils = ["uuid-utils (>=0.6.0) ; python_version < \"3.14\""]
name = "pydantic-settings" name = "pydantic-settings"
version = "2.14.2" version = "2.14.2"
description = "Settings management using Pydantic" description = "Settings management using Pydantic"
optional = true optional = false
python-versions = ">=3.10" python-versions = ">=3.10"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "pydantic_settings-2.14.2-py3-none-any.whl", hash = "sha256:a20c97b37910b6550d5ea50fbcc2d4187defe58cd57070b73863d069419c9440"}, {file = "pydantic_settings-2.14.2-py3-none-any.whl", hash = "sha256:a20c97b37910b6550d5ea50fbcc2d4187defe58cd57070b73863d069419c9440"},
{file = "pydantic_settings-2.14.2.tar.gz", hash = "sha256:c19dd64b19097f1de80184f0cc7b0272a13ae6e170cbf240a3e27e381ed14a5f"}, {file = "pydantic_settings-2.14.2.tar.gz", hash = "sha256:c19dd64b19097f1de80184f0cc7b0272a13ae6e170cbf240a3e27e381ed14a5f"},
@@ -1866,36 +1729,17 @@ gcp-secret-manager = ["google-cloud-secret-manager (>=2.23.1)"]
toml = ["tomli (>=2.0.1)"] toml = ["tomli (>=2.0.1)"]
yaml = ["pyyaml (>=6.0.1)"] yaml = ["pyyaml (>=6.0.1)"]
[[package]]
name = "pyee"
version = "13.0.1"
description = "A rough port of Node.js's EventEmitter to Python with a few tricks of its own"
optional = false
python-versions = ">=3.8"
groups = ["main"]
files = [
{file = "pyee-13.0.1-py3-none-any.whl", hash = "sha256:af2f8fede4171ef667dfded53f96e2ed0d6e6bd7ee3bb46437f77e3b57689228"},
{file = "pyee-13.0.1.tar.gz", hash = "sha256:0b931f7c14535667ed4c7e0d531716368715e860b988770fc7eb8578d1f67fc8"},
]
[package.dependencies]
typing-extensions = "*"
[package.extras]
dev = ["black", "build", "flake8", "flake8-black", "isort", "jupyter-console", "mkdocs", "mkdocs-include-markdown-plugin", "mkdocstrings[python]", "mypy", "pytest", "pytest-asyncio ; python_version >= \"3.4\"", "pytest-trio ; python_version >= \"3.7\"", "sphinx", "toml", "tox", "trio", "trio ; python_version > \"3.6\"", "trio-typing ; python_version > \"3.6\"", "twine", "twisted", "validate-pyproject[all]"]
[[package]] [[package]]
name = "pygments" name = "pygments"
version = "2.20.0" version = "2.20.0"
description = "Pygments is a syntax highlighting package written in Python." description = "Pygments is a syntax highlighting package written in Python."
optional = false optional = false
python-versions = ">=3.9" python-versions = ">=3.9"
groups = ["main", "test"] groups = ["app", "test"]
files = [ files = [
{file = "pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176"}, {file = "pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176"},
{file = "pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f"}, {file = "pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f"},
] ]
markers = {main = "extra == \"app\""}
[package.extras] [package.extras]
windows-terminal = ["colorama (>=0.4.6)"] windows-terminal = ["colorama (>=0.4.6)"]
@@ -1985,10 +1829,9 @@ six = ">=1.5"
name = "python-dotenv" name = "python-dotenv"
version = "1.2.2" version = "1.2.2"
description = "Read key-value pairs from a .env file and set them as environment variables" description = "Read key-value pairs from a .env file and set them as environment variables"
optional = true optional = false
python-versions = ">=3.10" python-versions = ">=3.10"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a"}, {file = "python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a"},
{file = "python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3"}, {file = "python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3"},
@@ -2001,10 +1844,9 @@ cli = ["click (>=5.0)"]
name = "python-multipart" name = "python-multipart"
version = "0.0.32" version = "0.0.32"
description = "A streaming multipart parser for Python" description = "A streaming multipart parser for Python"
optional = true optional = false
python-versions = ">=3.10" python-versions = ">=3.10"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "python_multipart-0.0.32-py3-none-any.whl", hash = "sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23"}, {file = "python_multipart-0.0.32-py3-none-any.whl", hash = "sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23"},
{file = "python_multipart-0.0.32.tar.gz", hash = "sha256:be54b7f3fa167bb83e4fcd936b887b708f4e57fe75911c02aebf53efaf8d938e"}, {file = "python_multipart-0.0.32.tar.gz", hash = "sha256:be54b7f3fa167bb83e4fcd936b887b708f4e57fe75911c02aebf53efaf8d938e"},
@@ -2081,10 +1923,9 @@ files = [
name = "pyyaml" name = "pyyaml"
version = "6.0.3" version = "6.0.3"
description = "YAML parser and emitter for Python" description = "YAML parser and emitter for Python"
optional = true optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "PyYAML-6.0.3-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f"}, {file = "PyYAML-6.0.3-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f"},
{file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4"}, {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4"},
@@ -2309,10 +2150,9 @@ files = [
name = "rich" name = "rich"
version = "15.0.0" version = "15.0.0"
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
optional = true optional = false
python-versions = ">=3.9.0" python-versions = ">=3.9.0"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb"}, {file = "rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb"},
{file = "rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36"}, {file = "rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36"},
@@ -2329,10 +2169,9 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
name = "rich-toolkit" name = "rich-toolkit"
version = "0.20.1" version = "0.20.1"
description = "Rich toolkit for building command-line applications" description = "Rich toolkit for building command-line applications"
optional = true optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "rich_toolkit-0.20.1-py3-none-any.whl", hash = "sha256:2a6d5f8e15759b9eba5a9ee63da10b275359ead20e5a0fc92bd5b4dbae8ce4bf"}, {file = "rich_toolkit-0.20.1-py3-none-any.whl", hash = "sha256:2a6d5f8e15759b9eba5a9ee63da10b275359ead20e5a0fc92bd5b4dbae8ce4bf"},
{file = "rich_toolkit-0.20.1.tar.gz", hash = "sha256:c7336ae281f435c785acecaedc4b71d4b663dc73d9c8079fea96372527e822a4"}, {file = "rich_toolkit-0.20.1.tar.gz", hash = "sha256:c7336ae281f435c785acecaedc4b71d4b663dc73d9c8079fea96372527e822a4"},
@@ -2347,10 +2186,9 @@ typing-extensions = ">=4.12.2"
name = "rignore" name = "rignore"
version = "0.7.6" version = "0.7.6"
description = "Python Bindings for the ignore crate" description = "Python Bindings for the ignore crate"
optional = true optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "rignore-0.7.6-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f3c74a7e5ee77aea669c95fdb3933f2a6c7549893700082e759128a29cf67e45"}, {file = "rignore-0.7.6-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f3c74a7e5ee77aea669c95fdb3933f2a6c7549893700082e759128a29cf67e45"},
{file = "rignore-0.7.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7202404958f5fe3474bac91f65350f0b1dde1a5e05089f2946549b7e91e79ec"}, {file = "rignore-0.7.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7202404958f5fe3474bac91f65350f0b1dde1a5e05089f2946549b7e91e79ec"},
@@ -2512,10 +2350,9 @@ files = [
name = "sentry-sdk" name = "sentry-sdk"
version = "2.64.0" version = "2.64.0"
description = "Python client for Sentry (https://sentry.io)" description = "Python client for Sentry (https://sentry.io)"
optional = true optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "sentry_sdk-2.64.0-py3-none-any.whl", hash = "sha256:715ea91ca860a819e8d8a50a7bde3a80d0df3b4ed7b6660a20fb9a2d084188f1"}, {file = "sentry_sdk-2.64.0-py3-none-any.whl", hash = "sha256:715ea91ca860a819e8d8a50a7bde3a80d0df3b4ed7b6660a20fb9a2d084188f1"},
{file = "sentry_sdk-2.64.0.tar.gz", hash = "sha256:68be2c29e14ae310f8a39e1a79916b6d85c6cb41dcce789d14ff05fe293e4c55"}, {file = "sentry_sdk-2.64.0.tar.gz", hash = "sha256:68be2c29e14ae310f8a39e1a79916b6d85c6cb41dcce789d14ff05fe293e4c55"},
@@ -2577,10 +2414,9 @@ unleash = ["UnleashClient (>=6.0.1)"]
name = "shellingham" name = "shellingham"
version = "1.5.4" version = "1.5.4"
description = "Tool to Detect Surrounding Shell" description = "Tool to Detect Surrounding Shell"
optional = true optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"},
{file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"},
@@ -2614,10 +2450,9 @@ files = [
name = "starlette" name = "starlette"
version = "1.3.1" version = "1.3.1"
description = "The little ASGI library that shines." description = "The little ASGI library that shines."
optional = true optional = false
python-versions = ">=3.10" python-versions = ">=3.10"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "starlette-1.3.1-py3-none-any.whl", hash = "sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6"}, {file = "starlette-1.3.1-py3-none-any.whl", hash = "sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6"},
{file = "starlette-1.3.1.tar.gz", hash = "sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0"}, {file = "starlette-1.3.1.tar.gz", hash = "sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0"},
@@ -2645,10 +2480,9 @@ files = [
name = "typer" name = "typer"
version = "0.26.8" version = "0.26.8"
description = "Typer, build great CLIs. Easy to code. Based on Python type hints." description = "Typer, build great CLIs. Easy to code. Based on Python type hints."
optional = true optional = false
python-versions = ">=3.10" python-versions = ">=3.10"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "typer-0.26.8-py3-none-any.whl", hash = "sha256:3512ca79ac5c11113414b36e80281b872884477722440691c89d1112e321a49c"}, {file = "typer-0.26.8-py3-none-any.whl", hash = "sha256:3512ca79ac5c11113414b36e80281b872884477722440691c89d1112e321a49c"},
{file = "typer-0.26.8.tar.gz", hash = "sha256:c244a6bd558886fe3f8780efb6bdd28bb9aff005a94eedebaa5cb32926fe2f7e"}, {file = "typer-0.26.8.tar.gz", hash = "sha256:c244a6bd558886fe3f8780efb6bdd28bb9aff005a94eedebaa5cb32926fe2f7e"},
@@ -2666,7 +2500,7 @@ version = "4.15.0"
description = "Backported and Experimental Type Hints for Python 3.9+" description = "Backported and Experimental Type Hints for Python 3.9+"
optional = false optional = false
python-versions = ">=3.9" python-versions = ">=3.9"
groups = ["main"] groups = ["main", "app"]
files = [ files = [
{file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"},
{file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"},
@@ -2678,7 +2512,7 @@ version = "0.4.2"
description = "Runtime typing introspection tools" description = "Runtime typing introspection tools"
optional = false optional = false
python-versions = ">=3.9" python-versions = ">=3.9"
groups = ["main"] groups = ["main", "app"]
files = [ files = [
{file = "typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7"}, {file = "typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7"},
{file = "typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"}, {file = "typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"},
@@ -2723,10 +2557,9 @@ testing = ["check_manifest", "pyroma", "pytest (>=4.3)", "pytest-cov", "pytest-m
name = "urllib3" name = "urllib3"
version = "2.7.0" version = "2.7.0"
description = "HTTP library with thread-safe connection pooling, file post, and more." description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = true optional = false
python-versions = ">=3.10" python-versions = ">=3.10"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897"}, {file = "urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897"},
{file = "urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c"}, {file = "urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c"},
@@ -2742,10 +2575,9 @@ zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""]
name = "uvicorn" name = "uvicorn"
version = "0.49.0" version = "0.49.0"
description = "The lightning-fast ASGI server." description = "The lightning-fast ASGI server."
optional = true optional = false
python-versions = ">=3.10" python-versions = ">=3.10"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "uvicorn-0.49.0-py3-none-any.whl", hash = "sha256:ba3d14c3ee7e41c6c654c46c9eb489d33213cdd30aa1696eab1374337c13f68f"}, {file = "uvicorn-0.49.0-py3-none-any.whl", hash = "sha256:ba3d14c3ee7e41c6c654c46c9eb489d33213cdd30aa1696eab1374337c13f68f"},
{file = "uvicorn-0.49.0.tar.gz", hash = "sha256:ebf4271aa580d9de97f93192d4595176df6e91f9aae919ca73e4fc07df1e66a3"}, {file = "uvicorn-0.49.0.tar.gz", hash = "sha256:ebf4271aa580d9de97f93192d4595176df6e91f9aae919ca73e4fc07df1e66a3"},
@@ -2769,10 +2601,10 @@ standard = ["colorama (>=0.4) ; sys_platform == \"win32\"", "httptools (>=0.8.0)
name = "uvloop" name = "uvloop"
version = "0.22.1" version = "0.22.1"
description = "Fast implementation of asyncio event loop on top of libuv" description = "Fast implementation of asyncio event loop on top of libuv"
optional = true optional = false
python-versions = ">=3.8.1" python-versions = ">=3.8.1"
groups = ["main"] groups = ["app"]
markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\" and extra == \"app\"" markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\""
files = [ files = [
{file = "uvloop-0.22.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ef6f0d4cc8a9fa1f6a910230cd53545d9a14479311e87e3cb225495952eb672c"}, {file = "uvloop-0.22.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ef6f0d4cc8a9fa1f6a910230cd53545d9a14479311e87e3cb225495952eb672c"},
{file = "uvloop-0.22.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7cd375a12b71d33d46af85a3343b35d98e8116134ba404bd657b3b1d15988792"}, {file = "uvloop-0.22.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7cd375a12b71d33d46af85a3343b35d98e8116134ba404bd657b3b1d15988792"},
@@ -2834,10 +2666,9 @@ test = ["aiohttp (>=3.10.5)", "flake8 (>=6.1,<7.0)", "mypy (>=0.800)", "psutil",
name = "watchfiles" name = "watchfiles"
version = "1.2.0" version = "1.2.0"
description = "Simple, modern and high performance file watching and code reload in python." description = "Simple, modern and high performance file watching and code reload in python."
optional = true optional = false
python-versions = ">=3.10" python-versions = ">=3.10"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "watchfiles-1.2.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:bb68bf4df85abebe5efddc53cf2075520f243a59868d9b3973278b23e76962a9"}, {file = "watchfiles-1.2.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:bb68bf4df85abebe5efddc53cf2075520f243a59868d9b3973278b23e76962a9"},
{file = "watchfiles-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c16cb06dd17d43b9d185094268459eac92c9538356f050e55b54e82cf700e1d4"}, {file = "watchfiles-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c16cb06dd17d43b9d185094268459eac92c9538356f050e55b54e82cf700e1d4"},
@@ -2955,10 +2786,9 @@ anyio = ">=3.0.0"
name = "websockets" name = "websockets"
version = "16.0" version = "16.0"
description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
optional = true optional = false
python-versions = ">=3.10" python-versions = ">=3.10"
groups = ["main"] groups = ["app"]
markers = "extra == \"app\""
files = [ files = [
{file = "websockets-16.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a"}, {file = "websockets-16.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a"},
{file = "websockets-16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0"}, {file = "websockets-16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0"},
@@ -3142,10 +2972,7 @@ idna = ">=2.0"
multidict = ">=4.0" multidict = ">=4.0"
propcache = ">=0.2.1" propcache = ">=0.2.1"
[extras]
app = ["babel", "fastapi", "jinja2"]
[metadata] [metadata]
lock-version = "2.1" lock-version = "2.1"
python-versions = ">=3.14,<4.0" python-versions = "^3.14"
content-hash = "b0c7f9c6c9fbb20ada45e7d27601920b0ba42716a1a70b4e317e7295de230376" content-hash = "16dac910366fb78d67f45bac4c8cf19c0f448cb53fccb7e33c13ea22d509783f"
+31 -33
View File
@@ -1,44 +1,42 @@
[project]
name = "gallery"
description = ""
version = "0.8.0"
readme = "README.md"
authors = [{ name = "shmyga", email = "shmyga.z@gmail.com" }]
requires-python = '>=3.14,<4.0'
dependencies = [
'aiohttp (>=3.14,<4.0)',
'beautifulsoup4 (>=4.15,<5.0)',
'dateparser (>=1.4,<2.0)',
'pydantic (>=2.13,<3.0)',
'aiocache[redis] (>=0.12,<0.13)',
"playwright (>=1.62.0,<2.0.0)",
]
[project.optional-dependencies]
app = [
"fastapi[standard] (>=0.139,<0.140)",
"jinja2 (>=3.1,<4.0)",
"babel (>=2.18,<3.0)",
]
[dependency-groups]
test = ["pytest (>=9.1,<10.0)", "pytest-asyncio (>=1.4,<2.0)"]
dev = ["pylint (>=4.0.6,<5.0.0)", "black (>=26.5,<27.0)", "isort (>=8.0,<9.0)"]
[project.scripts]
gallery = "gallery.main:run"
[tool.poetry] [tool.poetry]
name = "gallery"
version = "0.4.1"
description = ""
authors = ["shmyga <shmyga.z@gmail.com>"]
readme = "README.md"
packages = [{ include = "gallery" }] packages = [{ include = "gallery" }]
requires-poetry = '>=2.0.0,<3.0.0'
[tool.poetry.dependencies]
python = "^3.14"
aiohttp = "^3.14"
beautifulsoup4 = "^4.15"
dateparser = "^1.4"
pydantic = "^2.13"
aiocache = { extras = ["redis"], version = "^0.12" }
[tool.poetry.group.app.dependencies]
fastapi = {extras = ["standard"], version = "^0.139.0"}
jinja2 = "^3.1"
babel = "^2.18"
[tool.poetry.group.test.dependencies]
pytest = "^9.1"
pytest-asyncio = "^1.4"
[tool.poetry.group.dev.dependencies]
pylint = "^4.0"
black = "^26.5"
isort = "^8.0"
[build-system] [build-system]
requires = ['poetry-core (>=2.0.0,<3.0.0)'] requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api" build-backend = "poetry.core.masonry.api"
[tool.poetry.scripts]
gallery = "gallery.main:run"
[tool.black] [tool.black]
line-length = 120 line-length = 120
target-version = ["py314"]
[tool.isort] [tool.isort]
profile = "black" profile = "black"
+2 -12
View File
@@ -29,19 +29,9 @@ publish () {
for PROJECT in "${DOCKER_PROJECTS[@]}"; do for PROJECT in "${DOCKER_PROJECTS[@]}"; do
IFS=: read -r PROJECT_NAME PROJECT_TARGET <<< "$PROJECT" IFS=: read -r PROJECT_NAME PROJECT_TARGET <<< "$PROJECT"
docker tag $DOCKER_GROUP/$PROJECT_NAME $DOCKER_ROOT/$PROJECT_NAME:$VERSION docker tag $DOCKER_GROUP/$PROJECT_NAME $DOCKER_ROOT/$PROJECT_NAME:$VERSION
docker tag $DOCKER_GROUP/$PROJECT_NAME $DOCKER_ROOT/$PROJECT_NAME:$DOCKER_TAG docker tag $DOCKER_GROUP/$PROJECT_NAME $DOCKER_ROOT/$PROJECT_NAME:latest
docker push $DOCKER_ROOT/$PROJECT_NAME:$VERSION docker push $DOCKER_ROOT/$PROJECT_NAME:$VERSION
docker push $DOCKER_ROOT/$PROJECT_NAME:$DOCKER_TAG docker push $DOCKER_ROOT/$PROJECT_NAME:latest
done
}
save () {
echo "save: $1"
. "$1/.env"
mkdir -p "$1/dist"
for PROJECT in "${DOCKER_PROJECTS[@]}"; do
IFS=: read -r PROJECT_NAME PROJECT_TARGET <<< "$PROJECT"
docker save --output "$1/dist/$PROJECT_NAME-$VERSION.tar" "$DOCKER_GROUP/$PROJECT_NAME"
done done
} }
-1
View File
@@ -11,7 +11,6 @@ source .env
# python # python
poetry env use ${PYTHON_VERSION} poetry env use ${PYTHON_VERSION}
poetry install poetry install
.venv/bin/playwright install chromium --with-deps --only-shell
# static # static
cd static || exit cd static || exit
+34 -2168
View File
File diff suppressed because it is too large Load Diff
+2 -13
View File
@@ -1,6 +1,6 @@
{ {
"name": "gallery", "name": "gallery",
"version": "0.8.0", "version": "0.4.1",
"type": "module", "type": "module",
"scripts": { "scripts": {
"build": "webpack --mode production", "build": "webpack --mode production",
@@ -16,19 +16,12 @@
"flag-icons": "^7.5.0" "flag-icons": "^7.5.0"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^8.0.1",
"@babel/preset-env": "^8.0.2",
"@types/bootstrap": "^5.2.11", "@types/bootstrap": "^5.2.11",
"@types/node": "^26.1.0", "@types/node": "^26.1.0",
"autoprefixer": "^10.5.4",
"babel-loader": "^10.1.1",
"copy-webpack-plugin": "^14.0.0", "copy-webpack-plugin": "^14.0.0",
"core-js": "^3.49.0",
"css-loader": "^7.1.4", "css-loader": "^7.1.4",
"file-loader": "^6.2.0", "file-loader": "^6.2.0",
"mini-css-extract-plugin": "^2.10.2", "mini-css-extract-plugin": "^2.10.2",
"postcss": "^8.5.22",
"postcss-loader": "^8.2.1",
"sass": "^1.101.0", "sass": "^1.101.0",
"sass-loader": "^17.0.0", "sass-loader": "^17.0.0",
"style-loader": "^4.0.0", "style-loader": "^4.0.0",
@@ -37,9 +30,5 @@
"typescript": "^6.0.3", "typescript": "^6.0.3",
"webpack": "^5.108.3", "webpack": "^5.108.3",
"webpack-cli": "^7.1.0" "webpack-cli": "^7.1.0"
}, }
"browserslist": [
"> 0.5%",
"last 2 versions"
]
} }
-196
View File
@@ -1,196 +0,0 @@
export interface Type<T> extends Function {
new (...args: any[]): T;
}
export abstract class ValueElement<T, O> extends HTMLElement {
static observedAttributes = ["value"];
private _value: T | null = null;
get value(): T | null {
return this._value;
}
set value(value: T | null) {
if (value) {
this.setAttribute("value", JSON.stringify(value));
} else if (this.hasAttribute("value")) {
this.removeAttribute("value");
}
}
options: O | null;
constructor(value: T | null = null, options: O | null = null) {
super();
if (value) {
this.value = value;
}
this.options = options;
this.onInit();
}
onInit() {}
beforeRefresh() {}
onRefresh() {}
abstract buildHTML(): string;
refresh() {
const rawValue = this.getAttribute("value");
if (rawValue) {
this._value = JSON.parse(rawValue);
} else {
this._value = null;
}
if (this.className) {
this.classList = this.className;
}
this.beforeRefresh();
this.innerHTML = this.buildHTML();
this.onRefresh();
}
connectedCallback() {
this.refresh();
}
attributeChangedCallback(name: string, oldValue: any, newValue: any) {
setTimeout(() => this.refresh());
}
}
export interface ListOptions<T> {
onClick?: (element: ListItemElement<T>) => void;
onAdd?: (element: ListItemElement<T>) => void;
onRemove?: (element: ListItemElement<T>) => void;
}
export abstract class ListItemElement<T> extends ValueElement<T, ListOptions<T>> {
abstract getHref(value: T): string;
abstract getContent(value: T): string;
className = "list-group-item list-group-item-action";
onInit(): void {
this.handleClick = this.handleClick.bind(this);
this.handleRemoveClick = this.handleRemoveClick.bind(this);
this.handleAddClick = this.handleAddClick.bind(this);
}
buildHTML(): string {
if (!this.value) {
return "";
}
const href = this.getHref(this.value);
const content = this.getContent(this.value);
return `
<a href="${href}"
class="d-flex justify-content-between align-items-start text-decoration-none">
<span>
<span class="text-success me-2 ${this.options?.onAdd ? "" : "d-none"}" style="color: green;" data-add>
&plus;
</span>
${content}
</span>
<span>
<span class="text-danger ms-2 ${this.options?.onRemove ? "" : "d-none"}" data-remove>
&#x2715;
</span>
</span>
</a>
`;
}
onRefresh(): void {
this.addEventListener("click", this.handleClick);
if (this.options?.onAdd) {
this.querySelector<HTMLElement>("[data-add]")?.addEventListener("click", this.handleAddClick);
} else {
this.querySelector("[data-add]")?.remove();
}
if (this.options?.onRemove) {
this.querySelector<HTMLElement>("[data-remove]")?.addEventListener("click", this.handleRemoveClick);
} else {
this.querySelector("[data-remove]")?.remove();
}
}
handleClick(event: MouseEvent) {
if (this.value && this.options?.onClick) {
this.options.onClick(this);
}
}
handleAddClick(event: MouseEvent) {
event.preventDefault();
event.stopPropagation();
if (this.value && this.options?.onAdd) {
this.options.onAdd(this);
}
}
handleRemoveClick(event: MouseEvent) {
event.preventDefault();
event.stopPropagation();
if (this.value && this.options?.onRemove) {
this.options.onRemove(this);
}
}
disconnectedCallback() {
this.removeEventListener("click", this.handleClick);
this.querySelector<HTMLElement>("[data-add]")?.removeEventListener("click", this.handleAddClick);
this.querySelector<HTMLElement>("[data-remove]")?.removeEventListener("click", this.handleRemoveClick);
}
}
export abstract class ListElement<T, C extends ListItemElement<T> = ListItemElement<T>> extends ValueElement<
T[],
ListOptions<T>
> {
static observedAttributes = ["value", "onadd", "onremove", "onclick"];
abstract childType: Type<C>;
className = "list-group";
buildHTML(): string {
return "";
}
beforeRefresh() {
if (this.hasAttribute("onclick")) {
const onclick = new Function("element", this.getAttribute("onclick")!) as ListOptions<T>["onClick"];
if (!this.options) {
this.options = {};
}
this.options.onClick = onclick;
}
if (this.hasAttribute("onadd")) {
const onadd = new Function("element", this.getAttribute("onadd")!) as ListOptions<T>["onAdd"];
if (!this.options) {
this.options = {};
}
this.options.onAdd = onadd;
}
if (this.hasAttribute("onremove")) {
const onremove = new Function("element", this.getAttribute("onremove")!) as ListOptions<T>["onRemove"];
if (!this.options) {
this.options = {};
}
this.options.onRemove = onremove;
}
}
onRefresh() {
if (this.value) {
for (const item of this.value) {
this.appendChild(new this.childType(item, this.options));
}
}
}
}
-50
View File
@@ -1,50 +0,0 @@
import { ListElement, ListItemElement } from "./component";
import { DataStorage, StorageValue } from "./storage";
export class DataManager<T extends StorageValue> {
private storage: DataStorage<T>;
private get dataList(): ListElement<T> {
return document.querySelector(this.dataListSelector)!;
}
constructor(
listComponentType: typeof ListElement<T>, //prevent removing as unusing
storageKey: string,
private dataListSelector: string,
) {
this.storage = new DataStorage(storageKey);
this.load = this.load.bind(this);
this.store = this.store.bind(this);
this.add = this.add.bind(this);
this.remove = this.remove.bind(this);
}
load() {
this.dataList.value = this.storage.getAll();
}
store(element: ListItemElement<T>) {
if (element.value) {
this.storage.add(element.value);
}
}
add(element: ListItemElement<T>) {
const value = element.value;
value;
if (value && this.storage.add(value)) {
const clone: ListItemElement<T> = element.cloneNode(true) as ListItemElement<T>;
clone.options = { onRemove: this.remove };
this.dataList.appendChild(clone);
}
}
remove(element: ListItemElement<T>) {
const value = element.value;
if (value) {
this.storage.remove(value.id);
element.remove();
}
}
}
-46
View File
@@ -1,46 +0,0 @@
export interface StorageValue {
id: string;
}
export class DataStorage<T extends StorageValue> {
constructor(private storageKey: string) {}
private readValues(): T[] {
const objects = JSON.parse(window.localStorage.getItem(this.storageKey) || "[]");
if (!Array.isArray(objects)) {
return Object.values(objects);
}
return objects;
}
private writeValues(values: T[]) {
window.localStorage.setItem(this.storageKey, JSON.stringify(values));
}
getAll(): T[] {
return this.readValues();
}
add(value: T): boolean {
const values = this.readValues();
for (const v of values) {
if (v.id == value.id) {
return false;
}
}
values.push(value);
this.writeValues(values);
return true;
}
remove(id: string) {
const values = this.readValues();
for (let i = 0; i < values.length; i++) {
if (values[i].id == id) {
values.splice(i, 1);
this.writeValues(values);
return;
}
}
}
}
+110
View File
@@ -0,0 +1,110 @@
export interface Channel {
id: string;
name: string;
provider: string;
}
export class ScheduleChannelStorage {
private storageKey: string = "schedule:channels";
getAll(): Channel[] {
const objects = JSON.parse(window.localStorage.getItem(this.storageKey) || "{}");
return Object.values(objects);
}
add(object: Channel) {
const objects = JSON.parse(window.localStorage.getItem(this.storageKey) || "{}");
objects[object.id] = object;
window.localStorage.setItem(this.storageKey, JSON.stringify(objects));
}
remove(id: string) {
const objects = JSON.parse(window.localStorage.getItem(this.storageKey) || "{}");
delete objects[id];
window.localStorage.setItem(this.storageKey, JSON.stringify(objects));
}
}
export class ScheduleChannelManager {
loadChannels(selector: string) {
const channels = window.scheduleChannelStorage.getAll();
const container = document.querySelector(selector);
if (container) {
container.innerHTML = "";
for (const channel of channels) {
const element = new ScheduleChannelElement();
element.setAttribute("channel", JSON.stringify(channel));
element.setAttribute("removable", "");
container.appendChild(element);
}
}
}
}
class ScheduleChannelElement extends HTMLElement {
static observedAttributes = ["channel", "removable"];
channel: Channel | null = null;
constructor() {
super();
this.handleClick = this.handleClick.bind(this);
this.handleRemoveClick = this.handleRemoveClick.bind(this);
}
connectedCallback() {
this.channel = JSON.parse(this.getAttribute("channel") || "{}");
this.innerHTML = `
<a href="${this.channel?.provider}/${this.channel?.id}"
class="d-flex justify-content-between align-items-start text-decoration-none">
<span>
<span class="text-primary">${this.channel?.name}</span>
</span>
<span>
<span class="badge text-bg-secondary">${this.channel?.provider}</span>
<span class="text-danger ms-2" data-remove>
&#x2715;
</span>
</span>
</a>`;
this.classList = "list-group-item list-group-item-action";
this.addEventListener("click", this.handleClick);
if (this.hasAttribute("removable")) {
this.querySelector<HTMLElement>("[data-remove]")?.addEventListener("click", this.handleRemoveClick);
} else {
this.querySelector("[data-remove]")?.remove();
}
}
disconnectedCallback() {
this.removeEventListener("click", this.handleClick);
this.querySelector<HTMLElement>("[data-remove]")?.removeEventListener("click", this.handleRemoveClick);
}
handleClick(event: MouseEvent) {
if (this.channel) {
window.scheduleChannelStorage.add(this.channel);
}
}
handleRemoveClick(event: MouseEvent) {
event.preventDefault();
event.stopPropagation();
if (this.channel) {
window.scheduleChannelStorage.remove(this.channel.id);
}
this.remove();
}
}
customElements.define("schedule-channel", ScheduleChannelElement);
declare global {
interface Window {
scheduleChannelStorage: ScheduleChannelStorage;
scheduleChannelManager: ScheduleChannelManager;
}
}
window.scheduleChannelStorage = new ScheduleChannelStorage();
window.scheduleChannelManager = new ScheduleChannelManager();
-52
View File
@@ -1,52 +0,0 @@
import { ListElement, ListItemElement, ValueElement } from "../base/component";
import { Channel } from "./model";
export class ScheduleChannelGroup extends ValueElement<string | Channel[], {}> {
className: string = "list-group-item list-group-item-action";
buildHTML(): string {
const groupName = Array.isArray(this.value) ? "Open All" : this.value;
const groupId = Array.isArray(this.value)
? this.value.map((item) => `${item.provider}:${item.id}`).join(",")
: this.value || "";
return `
<a href="group/${encodeURIComponent(groupId)}"
class="d-flex justify-content-between align-items-start text-decoration-none">
<span>
<span class="text-primary" style="text-transform: capitalize">${groupName}</span>
</span>
</a>`;
}
}
customElements.define("schedule-channel-group", ScheduleChannelGroup);
export class ScheduleChannelItem extends ListItemElement<Channel> {
getHref(value: Channel): string {
return `${value.provider}/${value.id}`;
}
getContent(value: Channel): string {
return `
<span class="badge me-1 text-bg-secondary">${value.provider}</span>
<span class="text-primary">${value.name}</span>
`;
}
}
export class ScheduleChannelList extends ListElement<Channel, ScheduleChannelItem> {
childType = ScheduleChannelItem;
public onRefresh(): void {
super.onRefresh();
if (this.value?.length) {
const groupElement = new ScheduleChannelGroup(this.value);
this.prepend(groupElement);
} else {
this.prepend("Empty");
}
}
}
customElements.define("schedule-channel-item", ScheduleChannelItem);
customElements.define("schedule-channel-list", ScheduleChannelList);
-11
View File
@@ -1,11 +0,0 @@
import { DataManager } from "../base/manager";
import { ScheduleChannelList } from "./component";
import { Channel } from "./model";
declare global {
interface Window {
scheduleChannelManager: DataManager<Channel>;
}
}
window.scheduleChannelManager = new DataManager(ScheduleChannelList, "schedule:channels", "#storedChannels");
-5
View File
@@ -1,5 +0,0 @@
export interface Channel {
id: string;
name: string;
provider: string;
}
+118
View File
@@ -0,0 +1,118 @@
export interface Location {
id: string;
name: string;
provider: string;
country_code: string;
country?: string;
district?: string;
subdistrict?: string;
}
export class WeatherLocationStorage {
private storageKey: string = "weather:locations";
getAll(): Location[] {
const locations = JSON.parse(window.localStorage.getItem(this.storageKey) || "{}");
return Object.values(locations);
}
add(location: Location) {
const locations = JSON.parse(window.localStorage.getItem(this.storageKey) || "{}");
locations[location.id] = location;
window.localStorage.setItem(this.storageKey, JSON.stringify(locations));
}
remove(id: string) {
const locations = JSON.parse(window.localStorage.getItem(this.storageKey) || "{}");
delete locations[id];
window.localStorage.setItem(this.storageKey, JSON.stringify(locations));
}
}
export class WeatherLocationManager {
loadLocations(selector: string) {
const locations = window.weatherLocationStorage.getAll();
const container = document.querySelector(selector);
if (container) {
container.innerHTML = "";
for (const location of locations) {
const element = new WeatherLocationElement();
element.setAttribute("location", JSON.stringify(location));
element.setAttribute("removable", "");
container.appendChild(element);
}
}
}
}
class WeatherLocationElement extends HTMLElement {
static observedAttributes = ["location", "removable"];
location: Location | null = null;
constructor() {
super();
this.handleClick = this.handleClick.bind(this);
this.handleRemoveClick = this.handleRemoveClick.bind(this);
}
connectedCallback() {
this.location = JSON.parse(this.getAttribute("location") || "{}");
this.innerHTML = `
<a href="${this.location?.provider}/${this.location?.id}"
class="d-flex justify-content-between align-items-start text-decoration-none">
<span>
<span class="fi fi-${this.location?.country_code} me-1"></span>
<span class="text-primary">${this.location?.name}</span>
<span class="small ms-1 text-secondary">
${this.location?.country}, ${this.location?.district}, ${this.location?.subdistrict}
</span>
</span>
<span>
<span class="badge text-bg-secondary">${this.location?.provider}</span>
<span class="text-danger ms-2" data-remove>
&#x2715;
</span>
</span>
</a>`;
this.classList = 'list-group-item list-group-item-action';
this.addEventListener("click", this.handleClick);
if (this.hasAttribute("removable")) {
this.querySelector<HTMLElement>("[data-remove]")?.addEventListener("click", this.handleRemoveClick);
} else {
this.querySelector("[data-remove]")?.remove();
}
}
disconnectedCallback() {
this.removeEventListener("click", this.handleClick);
this.querySelector<HTMLElement>("[data-remove]")?.removeEventListener("click", this.handleRemoveClick);
}
handleClick(event: MouseEvent) {
if (this.location) {
window.weatherLocationStorage.add(this.location);
}
}
handleRemoveClick(event: MouseEvent) {
event.preventDefault();
event.stopPropagation();
if (this.location) {
window.weatherLocationStorage.remove(this.location.id);
}
this.remove();
}
}
customElements.define("weather-location", WeatherLocationElement);
declare global {
interface Window {
weatherLocationStorage: WeatherLocationStorage;
weatherLocationManager: WeatherLocationManager;
}
}
window.weatherLocationStorage = new WeatherLocationStorage();
window.weatherLocationManager = new WeatherLocationManager();
-33
View File
@@ -1,33 +0,0 @@
import { ListElement, ListItemElement } from "../base/component";
import { Location } from "./model";
export class WheatherLocationItem extends ListItemElement<Location> {
getHref(value: Location): string {
return `${value.provider}/${value.id}`;
}
getContent(value: Location): string {
return `
<span class="badge me-1 text-bg-secondary">${value.provider}</span>
<span class="fi fi-${value.country_code} me-1"></span>
<span class="text-primary">${value.name}</span>
<span class="small ms-1 text-secondary">
${value.country}, ${value.district}, ${value.subdistrict}
</span>
`;
}
}
export class WeatherLocationList extends ListElement<Location, WheatherLocationItem> {
childType = WheatherLocationItem;
public onRefresh(): void {
super.onRefresh();
if (!this.value?.length) {
this.prepend("Empty");
}
}
}
customElements.define("weather-location-item", WheatherLocationItem);
customElements.define("weather-location-list", WeatherLocationList);
-11
View File
@@ -1,11 +0,0 @@
import { DataManager } from "../base/manager";
import { WeatherLocationList } from "./component";
import { Location } from "./model";
declare global {
interface Window {
weatherLocationManager: DataManager<Location>;
}
}
window.weatherLocationManager = new DataManager(WeatherLocationList, "weather:locations", "#storedLocations");
-9
View File
@@ -1,9 +0,0 @@
export interface Location {
id: string;
name: string;
provider: string;
country_code: string;
country?: string;
district?: string;
subdistrict?: string;
}
-2
View File
@@ -4,5 +4,3 @@ import "./app/common/tooltips";
import "./app/components/app-link"; import "./app/components/app-link";
import "./app/schedule"; import "./app/schedule";
import "./app/weather"; import "./app/weather";
import { init } from "./lib/weather-icons";
init("/static/weather-icons/icons");
-3
View File
@@ -45,7 +45,4 @@
&.bi-file-earmark-text { &.bi-file-earmark-text {
mask-image: url(bootstrap-icons/icons/file-earmark-text.svg); mask-image: url(bootstrap-icons/icons/file-earmark-text.svg);
} }
&.bi-cast {
mask-image: url(bootstrap-icons/icons/cast.svg);
}
} }
+4
View File
@@ -1,3 +1,7 @@
@import "bootstrap/scss/mixins/banner";
@include bsBanner("");
// scss-docs-start import-stack // scss-docs-start import-stack
// Configuration // Configuration
@import "bootstrap/scss/functions"; @import "bootstrap/scss/functions";
@@ -1,3 +1,13 @@
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M4.61,16.88c0-1.15,0.36-2.17,1.08-3.07c0.72-0.9,1.63-1.48,2.74-1.73c0.31-1.37,1.02-2.49,2.11-3.37s2.35-1.32,3.76-1.32 c1.38,0,2.61,0.43,3.69,1.28s1.78,1.95,2.1,3.29h0.33c0.9,0,1.73,0.22,2.49,0.65s1.37,1.03,1.81,1.79c0.44,0.76,0.67,1.58,0.67,2.48 c0,0.88-0.21,1.7-0.63,2.45s-1,1.35-1.73,1.8c-0.73,0.45-1.54,0.69-2.41,0.72H9.41c-1.34-0.06-2.47-0.57-3.4-1.53 C5.08,19.37,4.61,18.22,4.61,16.88z M6.32,16.88c0,0.87,0.3,1.62,0.9,2.26s1.33,0.98,2.19,1.03h11.19c0.86-0.04,1.59-0.39,2.19-1.03 c0.61-0.64,0.91-1.4,0.91-2.26c0-0.88-0.33-1.63-0.98-2.27c-0.65-0.64-1.42-0.96-2.32-0.96H18.8c-0.11,0-0.17-0.06-0.17-0.18 l-0.07-0.57c-0.11-1.08-0.58-1.99-1.4-2.72c-0.82-0.73-1.77-1.1-2.86-1.1c-1.09,0-2.05,0.37-2.85,1.1 c-0.81,0.73-1.27,1.64-1.37,2.72l-0.08,0.57c0,0.12-0.07,0.18-0.2,0.18H9.27c-0.84,0.1-1.54,0.46-2.1,1.07S6.32,16.05,6.32,16.88z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M4.61,16.88c0-1.15,0.36-2.17,1.08-3.07c0.72-0.9,1.63-1.48,2.74-1.73c0.31-1.37,1.02-2.49,2.11-3.37s2.35-1.32,3.76-1.32
c1.38,0,2.61,0.43,3.69,1.28s1.78,1.95,2.1,3.29h0.33c0.9,0,1.73,0.22,2.49,0.65s1.37,1.03,1.81,1.79c0.44,0.76,0.67,1.58,0.67,2.48
c0,0.88-0.21,1.7-0.63,2.45s-1,1.35-1.73,1.8c-0.73,0.45-1.54,0.69-2.41,0.72H9.41c-1.34-0.06-2.47-0.57-3.4-1.53
C5.08,19.37,4.61,18.22,4.61,16.88z M6.32,16.88c0,0.87,0.3,1.62,0.9,2.26s1.33,0.98,2.19,1.03h11.19c0.86-0.04,1.59-0.39,2.19-1.03
c0.61-0.64,0.91-1.4,0.91-2.26c0-0.88-0.33-1.63-0.98-2.27c-0.65-0.64-1.42-0.96-2.32-0.96H18.8c-0.11,0-0.17-0.06-0.17-0.18
l-0.07-0.57c-0.11-1.08-0.58-1.99-1.4-2.72c-0.82-0.73-1.77-1.1-2.86-1.1c-1.09,0-2.05,0.37-2.85,1.1
c-0.81,0.73-1.27,1.64-1.37,2.72l-0.08,0.57c0,0.12-0.07,0.18-0.2,0.18H9.27c-0.84,0.1-1.54,0.46-2.1,1.07S6.32,16.05,6.32,16.88z"
/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -1,3 +1,18 @@
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M3.89,17.6c0-0.99,0.31-1.88,0.93-2.65s1.41-1.27,2.38-1.49c0.26-1.17,0.85-2.14,1.78-2.88c0.93-0.75,2-1.12,3.22-1.12 c1.18,0,2.24,0.36,3.16,1.09c0.93,0.73,1.53,1.66,1.8,2.8h0.27c1.18,0,2.18,0.41,3.01,1.24s1.25,1.83,1.25,3 c0,1.18-0.42,2.18-1.25,3.01s-1.83,1.25-3.01,1.25H8.16c-0.58,0-1.13-0.11-1.65-0.34S5.52,21,5.14,20.62 c-0.38-0.38-0.68-0.84-0.91-1.36S3.89,18.17,3.89,17.6z M5.34,17.6c0,0.76,0.28,1.42,0.82,1.96s1.21,0.82,1.99,0.82h9.28 c0.77,0,1.44-0.27,1.99-0.82c0.55-0.55,0.83-1.2,0.83-1.96c0-0.76-0.27-1.42-0.83-1.96c-0.55-0.54-1.21-0.82-1.99-0.82h-1.39 c-0.1,0-0.15-0.05-0.15-0.15l-0.07-0.49c-0.1-0.94-0.5-1.73-1.19-2.35s-1.51-0.93-2.45-0.93c-0.94,0-1.76,0.31-2.46,0.94 c-0.7,0.62-1.09,1.41-1.18,2.34l-0.07,0.42c0,0.1-0.05,0.15-0.16,0.15l-0.45,0.07c-0.72,0.06-1.32,0.36-1.81,0.89 C5.59,16.24,5.34,16.87,5.34,17.6z M14.19,8.88c-0.1,0.09-0.08,0.16,0.07,0.21c0.43,0.19,0.79,0.37,1.08,0.55 c0.11,0.03,0.19,0.02,0.22-0.03c0.61-0.57,1.31-0.86,2.12-0.86c0.81,0,1.5,0.27,2.1,0.81c0.59,0.54,0.92,1.21,0.99,2l0.09,0.64h1.42 c0.65,0,1.21,0.23,1.68,0.7c0.47,0.47,0.7,1.02,0.7,1.66c0,0.6-0.21,1.12-0.62,1.57s-0.92,0.7-1.53,0.77c-0.1,0-0.15,0.05-0.15,0.16 v1.13c0,0.11,0.05,0.16,0.15,0.16c1.01-0.06,1.86-0.46,2.55-1.19s1.04-1.6,1.04-2.6c0-1.06-0.37-1.96-1.12-2.7 c-0.75-0.75-1.65-1.12-2.7-1.12h-0.15c-0.26-1-0.81-1.82-1.65-2.47c-0.83-0.65-1.77-0.97-2.8-0.97C16.28,7.29,15.11,7.82,14.19,8.88 z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M3.89,17.6c0-0.99,0.31-1.88,0.93-2.65s1.41-1.27,2.38-1.49c0.26-1.17,0.85-2.14,1.78-2.88c0.93-0.75,2-1.12,3.22-1.12
c1.18,0,2.24,0.36,3.16,1.09c0.93,0.73,1.53,1.66,1.8,2.8h0.27c1.18,0,2.18,0.41,3.01,1.24s1.25,1.83,1.25,3
c0,1.18-0.42,2.18-1.25,3.01s-1.83,1.25-3.01,1.25H8.16c-0.58,0-1.13-0.11-1.65-0.34S5.52,21,5.14,20.62
c-0.38-0.38-0.68-0.84-0.91-1.36S3.89,18.17,3.89,17.6z M5.34,17.6c0,0.76,0.28,1.42,0.82,1.96s1.21,0.82,1.99,0.82h9.28
c0.77,0,1.44-0.27,1.99-0.82c0.55-0.55,0.83-1.2,0.83-1.96c0-0.76-0.27-1.42-0.83-1.96c-0.55-0.54-1.21-0.82-1.99-0.82h-1.39
c-0.1,0-0.15-0.05-0.15-0.15l-0.07-0.49c-0.1-0.94-0.5-1.73-1.19-2.35s-1.51-0.93-2.45-0.93c-0.94,0-1.76,0.31-2.46,0.94
c-0.7,0.62-1.09,1.41-1.18,2.34l-0.07,0.42c0,0.1-0.05,0.15-0.16,0.15l-0.45,0.07c-0.72,0.06-1.32,0.36-1.81,0.89
C5.59,16.24,5.34,16.87,5.34,17.6z M14.19,8.88c-0.1,0.09-0.08,0.16,0.07,0.21c0.43,0.19,0.79,0.37,1.08,0.55
c0.11,0.03,0.19,0.02,0.22-0.03c0.61-0.57,1.31-0.86,2.12-0.86c0.81,0,1.5,0.27,2.1,0.81c0.59,0.54,0.92,1.21,0.99,2l0.09,0.64h1.42
c0.65,0,1.21,0.23,1.68,0.7c0.47,0.47,0.7,1.02,0.7,1.66c0,0.6-0.21,1.12-0.62,1.57s-0.92,0.7-1.53,0.77c-0.1,0-0.15,0.05-0.15,0.16
v1.13c0,0.11,0.05,0.16,0.15,0.16c1.01-0.06,1.86-0.46,2.55-1.19s1.04-1.6,1.04-2.6c0-1.06-0.37-1.96-1.12-2.7
c-0.75-0.75-1.65-1.12-2.7-1.12h-0.15c-0.26-1-0.81-1.82-1.65-2.47c-0.83-0.65-1.77-0.97-2.8-0.97C16.28,7.29,15.11,7.82,14.19,8.88
z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -1,11 +1,26 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 2.63 13.83 C 3.34 12.93 4.25 12.36 5.37 12.10 C 5.67 10.74 6.37 9.62 7.45 8.75 C 8.53 7.88 9.77 7.44 11.18 7.44 C 12.21 7.44 13.11 7.66 13.88 8.10 C 13.97 8.01 15.37 9.00 15.31 9.06 C 16.19 9.93 16.75 10.91 17.00 12.00 L 17.32 12.00 C 18.68 12.00 19.84 12.48 20.81 13.44 C 20.84 13.38 22.01 14.72 21.86 14.90 C 22.14 15.57 22.28 16.24 22.28 16.90 C 22.28 17.80 22.05 18.63 21.61 19.39 C 21.17 20.15 20.56 20.75 19.80 21.19 C 19.04 21.63 18.21 21.85 17.32 21.85 L 6.49 21.85 C 5.60 21.85 4.78 21.63 4.02 21.19 C 3.26 20.75 2.66 20.15 2.22 19.39 C 1.78 18.63 1.56 17.80 1.56 16.90 C 1.56 15.75 1.92 14.73 2.63 13.83 Z M 4.22 19.22 C 4.86 19.87 5.61 20.19 6.49 20.19 L 17.33 20.19 C 18.21 20.19 18.98 19.87 19.61 19.23 C 20.24 18.59 20.56 17.82 20.56 16.91 C 20.56 16.03 20.24 15.28 19.60 14.64 C 18.96 14.00 18.20 13.68 17.32 13.68 L 15.71 13.68 C 15.59 13.68 15.52 13.62 15.50 13.51 L 15.43 12.93 C 15.33 11.85 14.88 10.95 14.06 10.22 C 13.25 9.49 12.29 9.12 11.19 9.12 C 10.12 9.12 9.18 9.48 8.38 10.21 C 7.58 10.93 7.11 11.84 6.97 12.92 L 6.90 13.46 C 6.90 13.58 6.83 13.64 6.71 13.64 L 6.21 13.67 C 5.37 13.77 4.67 14.12 4.11 14.73 C 3.55 15.34 3.27 16.06 3.27 16.90 C 3.27 17.80 3.59 18.57 4.22 19.22 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<g id="sun"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<path d="M 17.89 6.23 C 18.60 6.23 19.28 6.36 19.93 6.64 C 20.58 6.91 21.13 7.29 21.60 7.76 C 22.07 8.23 22.45 8.78 22.72 9.43 C 22.99 10.08 23.13 10.76 23.13 11.47 C 23.13 12.49 22.36 14.03 21.87 14.83 L 20.85 13.50 C 21.12 12.95 21.45 12.02 21.45 11.47 C 21.45 10.48 21.10 9.65 20.41 8.96 C 19.72 8.27 18.88 7.93 17.89 7.93 C 17.03 7.93 15.96 8.51 15.31 9.07 L 13.92 8.12 C 14.96 7.14 16.54 6.23 17.89 6.23 Z"/> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M 24.72 11.60 C 24.72 11.83 24.81 12.02 24.98 12.18 C 25.14 12.34 25.35 12.42 25.59 12.42 L 27.63 12.42 C 27.86 12.42 28.05 12.34 28.21 12.19 C 28.37 12.04 28.44 11.84 28.44 11.60 C 28.44 11.36 28.36 11.16 28.21 11.00 C 28.06 10.84 27.86 10.75 27.63 10.75 L 25.59 10.75 C 25.35 10.75 25.15 10.83 24.98 11.00 C 24.80 11.17 24.72 11.37 24.72 11.60 Z"/> <path d="M1.56,16.9c0,0.9,0.22,1.73,0.66,2.49s1.04,1.36,1.8,1.8c0.76,0.44,1.58,0.66,2.47,0.66h10.83c0.89,0,1.72-0.22,2.48-0.66
<path d="M 23.25 17.91 C 23.25 18.15 23.33 18.36 23.50 18.54 L 24.15 19.17 C 24.30 19.33 24.49 19.41 24.73 19.41 C 24.97 19.41 25.17 19.33 25.33 19.16 C 25.49 18.99 25.57 18.79 25.57 18.54 C 25.57 18.32 25.49 18.12 25.33 17.96 L 24.68 17.31 C 24.52 17.15 24.33 17.07 24.11 17.07 C 23.87 17.07 23.67 17.15 23.51 17.31 C 23.34 17.47 23.25 17.67 23.25 17.91 Z"/> c0.76-0.44,1.37-1.04,1.81-1.8c0.44-0.76,0.67-1.59,0.67-2.49c0-0.66-0.14-1.33-0.42-2C22.62,13.98,23,12.87,23,11.6
<path d="M 22.46 6.07 C 22.46 6.33 22.53 6.53 22.68 6.69 C 22.89 6.85 23.10 6.93 23.30 6.93 C 23.48 6.93 23.68 6.85 23.89 6.69 L 25.32 5.26 C 25.48 5.08 25.56 4.87 25.56 4.62 C 25.56 4.38 25.48 4.18 25.32 4.02 C 25.16 3.86 24.96 3.78 24.73 3.78 C 24.49 3.78 24.30 3.86 24.15 4.02 L 22.68 5.45 C 22.53 5.64 22.46 5.84 22.46 6.07 Z"/> c0-0.71-0.14-1.39-0.41-2.04c-0.27-0.65-0.65-1.2-1.12-1.67C21,7.42,20.45,7.04,19.8,6.77c-0.65-0.28-1.33-0.41-2.04-0.41
<path d="M 16.94 3.78 C 16.94 4.04 17.02 4.24 17.17 4.40 C 17.32 4.56 17.52 4.63 17.76 4.63 C 18.02 4.63 18.22 4.55 18.38 4.40 C 18.54 4.24 18.61 4.04 18.61 3.78 L 18.61 1.73 C 18.61 1.49 18.53 1.30 18.37 1.14 C 18.21 0.98 18.01 0.91 17.76 0.91 C 17.52 0.91 17.33 0.99 17.17 1.14 C 17.01 1.29 16.94 1.49 16.94 1.73 L 16.94 3.78 L 16.94 3.78 Z"/> c-1.48,0-2.77,0.58-3.88,1.74c-0.77-0.44-1.67-0.66-2.7-0.66c-1.41,0-2.65,0.44-3.73,1.31c-1.08,0.87-1.78,1.99-2.08,3.35
<path d="M 9.97 4.63 C 9.97 4.87 10.05 5.08 10.21 5.26 L 10.87 5.90 C 11.12 6.09 11.33 6.17 11.51 6.15 C 11.72 6.15 11.90 6.06 12.06 5.89 C 12.22 5.72 12.30 5.51 12.30 5.27 C 12.30 5.03 12.21 4.83 12.04 4.68 L 11.45 4.02 C 11.27 3.86 11.07 3.78 10.84 3.78 C 10.60 3.78 10.39 3.86 10.22 4.03 C 10.05 4.19 9.97 4.39 9.97 4.63 Z"/> c-1.12,0.26-2.03,0.83-2.74,1.73S1.56,15.75,1.56,16.9z M3.27,16.9c0-0.84,0.28-1.56,0.84-2.17c0.56-0.61,1.26-0.96,2.1-1.06
</g> l0.5-0.03c0.12,0,0.19-0.06,0.19-0.18l0.07-0.54c0.14-1.08,0.61-1.99,1.41-2.71c0.8-0.73,1.74-1.09,2.81-1.09
c1.1,0,2.06,0.37,2.87,1.1c0.82,0.73,1.27,1.63,1.37,2.71l0.07,0.58c0.02,0.11,0.09,0.17,0.21,0.17h1.61c0.88,0,1.64,0.32,2.28,0.96
c0.64,0.64,0.96,1.39,0.96,2.27c0,0.91-0.32,1.68-0.95,2.32c-0.63,0.64-1.4,0.96-2.28,0.96H6.49c-0.88,0-1.63-0.32-2.27-0.97
C3.59,18.57,3.27,17.8,3.27,16.9z M9.97,4.63c0,0.24,0.08,0.45,0.24,0.63l0.66,0.64c0.25,0.19,0.46,0.27,0.64,0.25
c0.21,0,0.39-0.09,0.55-0.26s0.24-0.38,0.24-0.62c0-0.24-0.09-0.44-0.26-0.59l-0.59-0.66c-0.18-0.16-0.38-0.24-0.61-0.24
c-0.24,0-0.45,0.08-0.62,0.25C10.05,4.19,9.97,4.39,9.97,4.63z M15.31,9.06c0.69-0.67,1.51-1,2.45-1c0.99,0,1.83,0.34,2.52,1.03
c0.69,0.69,1.04,1.52,1.04,2.51c0,0.62-0.17,1.24-0.51,1.84C19.84,12.48,18.68,12,17.32,12H17C16.75,10.91,16.19,9.93,15.31,9.06z
M16.94,3.78c0,0.26,0.08,0.46,0.23,0.62s0.35,0.23,0.59,0.23c0.26,0,0.46-0.08,0.62-0.23c0.16-0.16,0.23-0.36,0.23-0.62V1.73
c0-0.24-0.08-0.43-0.24-0.59s-0.36-0.23-0.61-0.23c-0.24,0-0.43,0.08-0.59,0.23s-0.23,0.35-0.23,0.59V3.78z M22.46,6.07
c0,0.26,0.07,0.46,0.22,0.62c0.21,0.16,0.42,0.24,0.62,0.24c0.18,0,0.38-0.08,0.59-0.24l1.43-1.43c0.16-0.18,0.24-0.39,0.24-0.64
c0-0.24-0.08-0.44-0.24-0.6c-0.16-0.16-0.36-0.24-0.59-0.24c-0.24,0-0.43,0.08-0.58,0.24l-1.47,1.43
C22.53,5.64,22.46,5.84,22.46,6.07z M23.25,17.91c0,0.24,0.08,0.45,0.25,0.63l0.65,0.63c0.15,0.16,0.34,0.24,0.58,0.24
s0.44-0.08,0.6-0.25c0.16-0.17,0.24-0.37,0.24-0.62c0-0.22-0.08-0.42-0.24-0.58l-0.65-0.65c-0.16-0.16-0.35-0.24-0.57-0.24
c-0.24,0-0.44,0.08-0.6,0.24C23.34,17.47,23.25,17.67,23.25,17.91z M24.72,11.6c0,0.23,0.09,0.42,0.26,0.58
c0.16,0.16,0.37,0.24,0.61,0.24h2.04c0.23,0,0.42-0.08,0.58-0.23s0.23-0.35,0.23-0.59c0-0.24-0.08-0.44-0.23-0.6
s-0.35-0.25-0.58-0.25h-2.04c-0.24,0-0.44,0.08-0.61,0.25C24.8,11.17,24.72,11.37,24.72,11.6z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

@@ -1,19 +1,42 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 2.55 13.78 C 3.27 12.88 4.18 12.30 5.29 12.04 C 5.60 10.67 6.31 9.54 7.40 8.67 C 8.49 7.80 9.75 7.36 11.16 7.36 C 12.17 7.36 13.07 7.58 13.87 8.02 C 13.94 7.94 15.35 8.96 15.30 9.00 C 16.14 9.81 16.70 10.80 17.00 11.96 L 17.29 11.96 C 18.68 11.96 19.84 12.44 20.80 13.40 C 20.84 13.33 22.02 14.68 21.86 14.87 C 22.13 15.47 22.27 16.14 22.27 16.88 C 22.27 18.22 21.81 19.37 20.88 20.34 C 19.96 21.30 18.83 21.81 17.49 21.85 C 17.36 21.85 17.29 21.79 17.29 21.68 L 17.29 20.34 C 17.29 20.22 17.36 20.16 17.49 20.16 C 18.34 20.11 19.07 19.77 19.68 19.13 C 20.29 18.49 20.59 17.74 20.59 16.87 C 20.59 16.00 20.26 15.24 19.61 14.60 C 18.96 13.96 18.18 13.64 17.29 13.64 L 15.67 13.64 C 15.56 13.64 15.50 13.57 15.50 13.45 L 15.43 12.87 C 15.32 11.79 14.85 10.89 14.03 10.16 C 13.21 9.43 12.26 9.07 11.17 9.07 C 10.07 9.07 9.12 9.43 8.31 10.16 C 7.50 10.88 7.05 11.79 6.94 12.87 L 6.87 13.42 C 6.87 13.54 6.80 13.60 6.67 13.60 L 6.14 13.64 C 5.31 13.74 4.61 14.09 4.04 14.71 C 3.47 15.33 3.19 16.05 3.19 16.88 C 3.19 17.74 3.49 18.50 4.09 19.14 C 4.69 19.78 5.42 20.13 6.28 20.17 C 6.40 20.17 6.46 20.23 6.46 20.35 L 6.46 21.69 C 6.46 21.80 6.40 21.86 6.28 21.86 C 4.95 21.80 3.81 21.29 2.88 20.33 C 1.95 19.37 1.48 18.22 1.48 16.88 C 1.48 15.73 1.84 14.70 2.55 13.78 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<g id="sun"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<path d="M 17.77 6.27 C 18.71 6.27 19.59 6.51 20.40 6.98 C 21.21 7.46 21.85 8.10 22.33 8.91 C 22.80 9.72 23.04 10.60 23.04 11.54 C 23.04 12.55 22.38 14.09 21.88 14.91 L 20.82 13.45 C 21.09 12.91 21.32 12.10 21.32 11.55 C 21.32 10.57 20.97 9.74 20.28 9.06 C 19.59 8.37 18.76 8.03 17.78 8.03 C 16.87 8.03 15.97 8.45 15.33 9.00 L 13.88 8.00 C 14.88 6.98 16.31 6.27 17.77 6.27 Z"/> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M 24.74 11.55 C 24.74 11.79 24.83 11.99 25.00 12.15 C 25.18 12.33 25.38 12.41 25.62 12.41 L 27.65 12.41 C 27.89 12.41 28.09 12.33 28.26 12.16 C 28.43 11.99 28.52 11.79 28.52 11.55 C 28.52 11.32 28.44 11.12 28.27 10.96 C 28.10 10.80 27.89 10.72 27.65 10.72 L 25.62 10.72 C 25.37 10.72 25.16 10.80 24.99 10.96 C 24.83 11.12 24.74 11.32 24.74 11.55 Z"/> <path d="M1.48,16.88c0,1.34,0.47,2.49,1.4,3.45s2.07,1.47,3.4,1.53c0.12,0,0.18-0.06,0.18-0.17v-1.34c0-0.12-0.06-0.18-0.18-0.18
<path d="M 23.28 17.92 C 23.28 18.15 23.36 18.35 23.52 18.52 L 24.18 19.15 C 24.32 19.33 24.52 19.42 24.78 19.42 C 25.02 19.42 25.21 19.33 25.35 19.15 C 25.53 18.99 25.62 18.79 25.62 18.55 C 25.62 18.31 25.53 18.11 25.35 17.94 L 24.70 17.32 C 24.54 17.14 24.35 17.06 24.12 17.06 C 23.89 17.06 23.69 17.14 23.52 17.31 C 23.36 17.48 23.28 17.69 23.28 17.92 Z"/> c-0.86-0.04-1.59-0.39-2.19-1.03s-0.9-1.4-0.9-2.26c0-0.83,0.28-1.55,0.85-2.17s1.27-0.97,2.1-1.07l0.53-0.04
<path d="M 22.47 6.02 C 22.47 6.26 22.55 6.46 22.72 6.62 C 22.87 6.79 23.06 6.88 23.30 6.88 C 23.53 6.88 23.74 6.79 23.90 6.62 L 25.34 5.18 C 25.52 5.03 25.61 4.83 25.61 4.58 C 25.61 4.34 25.52 4.14 25.35 3.97 C 25.18 3.80 24.97 3.72 24.74 3.72 C 24.52 3.72 24.33 3.81 24.17 3.99 L 22.72 5.42 C 22.56 5.57 22.47 5.78 22.47 6.02 Z"/> c0.13,0,0.2-0.06,0.2-0.18l0.07-0.55c0.11-1.08,0.56-1.99,1.37-2.71c0.81-0.73,1.76-1.09,2.86-1.09c1.09,0,2.04,0.36,2.86,1.09
<path d="M 16.92 3.73 C 16.92 3.97 17.00 4.17 17.17 4.34 C 17.34 4.51 17.54 4.59 17.78 4.59 C 18.01 4.59 18.21 4.51 18.37 4.34 C 18.53 4.17 18.61 3.97 18.61 3.73 L 18.61 1.67 C 18.61 1.43 18.53 1.23 18.37 1.06 C 18.21 0.89 18.02 0.81 17.78 0.81 C 17.54 0.81 17.34 0.89 17.17 1.06 C 17.00 1.23 16.92 1.43 16.92 1.67 L 16.92 3.73 Z"/> c0.82,0.73,1.29,1.63,1.4,2.71l0.07,0.58c0,0.12,0.06,0.19,0.17,0.19h1.62c0.89,0,1.67,0.32,2.32,0.96c0.65,0.64,0.98,1.4,0.98,2.27
<path d="M 9.94 4.57 C 9.94 4.82 10.02 5.02 10.18 5.17 L 10.83 5.82 C 10.99 5.98 11.17 6.07 11.37 6.09 C 11.58 6.12 11.78 6.04 11.98 5.86 C 12.18 5.68 12.28 5.46 12.28 5.22 C 12.28 4.98 12.20 4.78 12.04 4.62 L 11.40 3.98 C 11.21 3.81 11.01 3.73 10.78 3.73 C 10.54 3.73 10.33 3.81 10.17 3.97 C 10.02 4.14 9.94 4.34 9.94 4.57 Z"/> c0,0.87-0.3,1.62-0.91,2.26c-0.61,0.64-1.34,0.98-2.19,1.03c-0.13,0-0.2,0.06-0.2,0.18v1.34c0,0.11,0.07,0.17,0.2,0.17
</g> c1.34-0.04,2.47-0.55,3.39-1.51c0.93-0.97,1.39-2.12,1.39-3.46c0-0.74-0.14-1.41-0.41-2.01c0.79-0.96,1.18-2.07,1.18-3.33
<g id="rain"> c0-0.94-0.24-1.82-0.71-2.63c-0.48-0.81-1.12-1.45-1.93-1.93c-0.81-0.47-1.69-0.71-2.63-0.71c-1.56,0-2.86,0.58-3.9,1.75
<path d="M 14.23 21.08 C 14.23 21.24 14.28 21.39 14.38 21.53 C 14.48 21.68 14.64 21.78 14.84 21.84 C 14.93 21.86 15.01 21.87 15.09 21.87 C 15.48 21.87 15.74 21.67 15.88 21.26 L 16.91 18.08 C 16.99 17.85 16.96 17.63 16.84 17.43 C 16.72 17.23 16.55 17.10 16.32 17.04 C 16.08 16.97 15.87 16.99 15.68 17.10 C 15.49 17.21 15.36 17.37 15.28 17.61 L 14.26 20.81 C 14.25 20.94 14.23 21.03 14.23 21.08 Z"/> c-0.8-0.44-1.7-0.66-2.71-0.66c-1.41,0-2.67,0.44-3.76,1.31s-1.8,2-2.11,3.37c-1.11,0.26-2.02,0.84-2.74,1.74
<path d="M 13.51 23.64 C 13.51 23.77 13.53 23.87 13.58 23.95 C 13.67 24.16 13.82 24.30 14.03 24.39 C 14.14 24.44 14.25 24.47 14.38 24.47 C 14.44 24.47 14.54 24.45 14.68 24.41 C 14.91 24.32 15.06 24.18 15.14 23.97 C 15.22 23.75 15.22 23.54 15.14 23.34 C 15.06 23.14 14.92 22.99 14.72 22.89 C 14.49 22.78 14.28 22.77 14.06 22.86 C 13.85 22.95 13.69 23.10 13.58 23.33 C 13.53 23.41 13.51 23.51 13.51 23.64 Z"/> C1.84,14.7,1.48,15.73,1.48,16.88z M6.82,23.94c0.1,0.22,0.25,0.37,0.46,0.45c0.2,0.1,0.41,0.11,0.63,0.02
<path d="M 10.06 24.03 C 10.06 24.19 10.11 24.35 10.22 24.51 C 10.33 24.67 10.49 24.78 10.70 24.84 C 10.81 24.86 10.89 24.88 10.94 24.88 C 11.09 24.88 11.22 24.85 11.32 24.80 C 11.52 24.72 11.66 24.53 11.75 24.23 L 13.55 18.09 C 13.62 17.85 13.60 17.64 13.49 17.44 C 13.38 17.24 13.22 17.11 12.99 17.05 C 12.75 16.98 12.53 17.00 12.33 17.11 C 12.13 17.22 11.99 17.38 11.92 17.62 L 10.08 23.81 C 10.07 23.92 10.06 24.00 10.06 24.03 Z"/> c0.22-0.08,0.37-0.23,0.45-0.45c0.1-0.22,0.11-0.43,0.02-0.65c-0.08-0.21-0.23-0.36-0.45-0.44c-0.2-0.11-0.41-0.12-0.62-0.03
<path d="M 9.33 26.72 C 9.33 26.85 9.35 26.95 9.38 27.01 C 9.47 27.23 9.62 27.38 9.83 27.46 C 9.92 27.51 10.04 27.53 10.18 27.53 C 10.24 27.53 10.34 27.51 10.48 27.47 C 10.70 27.39 10.86 27.24 10.95 27.02 C 11.04 26.80 11.05 26.58 10.95 26.36 C 10.85 26.14 10.70 25.99 10.50 25.91 C 10.30 25.83 10.09 25.83 9.88 25.91 C 9.69 25.98 9.55 26.10 9.46 26.26 C 9.37 26.42 9.33 26.58 9.33 26.72 Z"/> c-0.22,0.09-0.37,0.24-0.47,0.47C6.74,23.49,6.73,23.7,6.82,23.94z M7.46,21.1c0,0.14,0.03,0.27,0.09,0.38
<path d="M 7.46 21.10 C 7.46 21.24 7.49 21.37 7.55 21.48 C 7.74 21.79 8.04 21.94 8.44 21.94 C 8.76 21.94 8.99 21.72 9.13 21.29 L 10.17 18.07 C 10.25 17.83 10.23 17.60 10.10 17.40 C 9.97 17.20 9.79 17.07 9.55 17.03 C 9.34 16.98 9.13 17.00 8.93 17.10 C 8.73 17.21 8.59 17.38 8.52 17.60 L 7.49 20.82 C 7.47 20.92 7.46 21.02 7.46 21.10 Z"/> c0.19,0.31,0.49,0.46,0.89,0.46c0.32,0,0.55-0.22,0.69-0.65l1.04-3.22c0.08-0.24,0.06-0.47-0.07-0.67s-0.31-0.33-0.55-0.37
<path d="M 6.82 23.94 C 6.92 24.16 7.07 24.31 7.28 24.39 C 7.48 24.49 7.69 24.50 7.91 24.41 C 8.13 24.33 8.28 24.18 8.36 23.96 C 8.46 23.74 8.47 23.53 8.38 23.31 C 8.30 23.10 8.15 22.95 7.93 22.87 C 7.73 22.76 7.52 22.75 7.31 22.84 C 7.09 22.93 6.94 23.08 6.84 23.31 C 6.74 23.49 6.73 23.70 6.82 23.94 Z"/> C9.34,16.98,9.13,17,8.93,17.1c-0.2,0.11-0.34,0.28-0.41,0.5l-1.03,3.22C7.47,20.92,7.46,21.02,7.46,21.1z M9.33,26.72
</g> c0,0.13,0.02,0.23,0.05,0.29c0.09,0.22,0.24,0.37,0.45,0.45c0.09,0.05,0.21,0.07,0.35,0.07c0.06,0,0.16-0.02,0.3-0.06
c0.22-0.08,0.38-0.23,0.47-0.45s0.1-0.44,0-0.66c-0.1-0.22-0.25-0.37-0.45-0.45s-0.41-0.08-0.62,0c-0.19,0.07-0.33,0.19-0.42,0.35
C9.37,26.42,9.33,26.58,9.33,26.72z M9.94,4.57c0,0.25,0.08,0.45,0.24,0.6l0.65,0.65c0.16,0.16,0.34,0.25,0.54,0.27
c0.21,0.03,0.41-0.05,0.61-0.23c0.2-0.18,0.3-0.4,0.3-0.64c0-0.24-0.08-0.44-0.24-0.6l-0.64-0.64c-0.19-0.17-0.39-0.25-0.62-0.25
c-0.24,0-0.45,0.08-0.61,0.24C10.02,4.14,9.94,4.34,9.94,4.57z M10.06,24.03c0,0.16,0.05,0.32,0.16,0.48s0.27,0.27,0.48,0.33
c0.11,0.02,0.19,0.04,0.24,0.04c0.15,0,0.28-0.03,0.38-0.08c0.2-0.08,0.34-0.27,0.43-0.57l1.8-6.14c0.07-0.24,0.05-0.45-0.06-0.65
c-0.11-0.2-0.27-0.33-0.5-0.39c-0.24-0.07-0.46-0.05-0.66,0.06c-0.2,0.11-0.34,0.27-0.41,0.51l-1.84,6.19
C10.07,23.92,10.06,24,10.06,24.03z M13.51,23.64c0,0.13,0.02,0.23,0.07,0.31c0.09,0.21,0.24,0.35,0.45,0.44
c0.11,0.05,0.22,0.08,0.35,0.08c0.06,0,0.16-0.02,0.3-0.06c0.23-0.09,0.38-0.23,0.46-0.44c0.08-0.22,0.08-0.43,0-0.63
c-0.08-0.2-0.22-0.35-0.42-0.45c-0.23-0.11-0.44-0.12-0.66-0.03c-0.21,0.09-0.37,0.24-0.48,0.47
C13.53,23.41,13.51,23.51,13.51,23.64z M14.23,21.08c0,0.16,0.05,0.31,0.15,0.45c0.1,0.15,0.26,0.25,0.46,0.31
c0.09,0.02,0.17,0.03,0.25,0.03c0.39,0,0.65-0.2,0.79-0.61l1.03-3.18c0.08-0.23,0.05-0.45-0.07-0.65s-0.29-0.33-0.52-0.39
c-0.24-0.07-0.45-0.05-0.64,0.06s-0.32,0.27-0.4,0.51l-1.02,3.2C14.25,20.94,14.23,21.03,14.23,21.08z M15.3,9
c0.67-0.64,1.5-0.97,2.48-0.97c0.98,0,1.81,0.34,2.5,1.03c0.69,0.68,1.04,1.51,1.04,2.49c0,0.62-0.17,1.24-0.52,1.85
c-0.96-0.96-2.12-1.44-3.51-1.44H17C16.7,10.8,16.14,9.81,15.3,9z M16.92,3.73c0,0.24,0.08,0.44,0.25,0.61
c0.17,0.17,0.37,0.25,0.61,0.25c0.23,0,0.43-0.08,0.59-0.25c0.16-0.17,0.24-0.37,0.24-0.61V1.67c0-0.24-0.08-0.44-0.24-0.61
c-0.16-0.17-0.35-0.25-0.59-0.25c-0.24,0-0.44,0.08-0.61,0.25c-0.17,0.17-0.25,0.37-0.25,0.61V3.73z M22.47,6.02
c0,0.24,0.08,0.44,0.25,0.6c0.15,0.17,0.34,0.26,0.58,0.26c0.23,0,0.44-0.09,0.6-0.26l1.44-1.44c0.18-0.15,0.27-0.35,0.27-0.6
c0-0.24-0.09-0.44-0.26-0.61c-0.17-0.17-0.38-0.25-0.61-0.25c-0.22,0-0.41,0.09-0.57,0.27l-1.45,1.43
C22.56,5.57,22.47,5.78,22.47,6.02z M23.28,17.92c0,0.23,0.08,0.43,0.24,0.6l0.66,0.63c0.14,0.18,0.34,0.27,0.6,0.27
c0.24,0,0.43-0.09,0.57-0.27c0.18-0.16,0.27-0.36,0.27-0.6c0-0.24-0.09-0.44-0.27-0.61l-0.65-0.62c-0.16-0.18-0.35-0.26-0.58-0.26
s-0.43,0.08-0.6,0.25C23.36,17.48,23.28,17.69,23.28,17.92z M24.74,11.55c0,0.24,0.09,0.44,0.26,0.6c0.18,0.18,0.38,0.26,0.62,0.26
h2.03c0.24,0,0.44-0.08,0.61-0.25c0.17-0.17,0.26-0.37,0.26-0.61c0-0.23-0.08-0.43-0.25-0.59c-0.17-0.16-0.38-0.24-0.62-0.24h-2.03
c-0.25,0-0.46,0.08-0.63,0.24C24.83,11.12,24.74,11.32,24.74,11.55z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

@@ -1,12 +1,29 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 2.64 13.83 C 3.36 12.93 4.27 12.36 5.37 12.10 C 5.68 10.72 6.38 9.60 7.47 8.73 C 8.56 7.86 9.81 7.43 11.23 7.43 C 12.14 7.43 13.02 7.64 13.88 8.05 C 13.93 8.00 15.31 8.99 15.28 9.02 C 16.16 9.84 16.74 10.82 17.00 11.96 L 17.31 11.96 C 18.64 11.96 19.79 12.43 20.77 13.37 C 20.80 13.31 21.98 14.64 21.82 14.83 C 22.13 15.53 22.29 16.22 22.29 16.90 C 22.29 18.24 21.83 19.39 20.91 20.35 C 19.99 21.31 18.86 21.82 17.53 21.86 C 17.40 21.86 17.33 21.80 17.33 21.69 L 17.33 20.32 C 17.33 20.20 17.40 20.14 17.53 20.14 C 18.40 20.07 19.13 19.72 19.72 19.10 C 20.31 18.48 20.61 17.74 20.61 16.89 C 20.61 16.00 20.29 15.24 19.65 14.61 C 19.01 13.98 18.24 13.66 17.33 13.66 L 15.73 13.66 C 15.60 13.66 15.54 13.60 15.54 13.49 L 15.47 12.91 C 15.35 11.82 14.89 10.91 14.08 10.19 C 13.27 9.46 12.32 9.10 11.23 9.10 C 10.13 9.10 9.18 9.46 8.37 10.19 C 7.56 10.91 7.11 11.82 7.00 12.90 L 6.94 13.41 C 6.94 13.52 6.87 13.58 6.74 13.58 L 6.22 13.66 C 5.38 13.73 4.69 14.08 4.12 14.70 C 3.55 15.32 3.27 16.05 3.27 16.89 C 3.27 17.74 3.57 18.48 4.16 19.10 C 4.75 19.73 5.48 20.07 6.35 20.14 C 6.46 20.14 6.52 20.20 6.52 20.32 L 6.52 21.69 C 6.52 21.80 6.46 21.86 6.35 21.86 C 5.01 21.80 3.88 21.29 2.95 20.33 C 2.02 19.37 1.56 18.23 1.56 16.90 C 1.56 15.75 1.92 14.73 2.64 13.83 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<g id="sun"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<path d="M 17.76 6.32 C 18.47 6.32 19.14 6.46 19.79 6.73 C 20.43 7.01 20.99 7.38 21.46 7.85 C 21.93 8.32 22.30 8.87 22.58 9.52 C 22.86 10.17 23.00 10.85 23.00 11.56 C 23.00 12.55 22.32 14.09 21.82 14.89 L 20.81 13.42 C 21.08 12.88 21.28 12.11 21.28 11.56 C 21.28 10.57 20.94 9.73 20.25 9.04 C 19.57 8.35 18.74 8.00 17.76 8.00 C 16.83 8.00 15.88 8.39 15.22 9.01 L 13.89 8.03 C 14.90 6.99 16.29 6.32 17.76 6.32 Z"/> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M 24.68 11.56 C 24.68 11.78 24.77 11.97 24.94 12.13 C 25.11 12.30 25.31 12.38 25.54 12.38 L 27.58 12.38 C 27.82 12.38 28.02 12.30 28.19 12.14 C 28.36 11.98 28.44 11.79 28.44 11.55 C 28.44 11.31 28.35 11.11 28.18 10.94 C 28.01 10.77 27.81 10.69 27.58 10.69 L 25.54 10.69 C 25.31 10.69 25.11 10.77 24.94 10.94 C 24.77 11.12 24.68 11.32 24.68 11.56 Z"/> <path d="M1.56,16.9c0,1.33,0.46,2.47,1.39,3.43c0.93,0.96,2.06,1.47,3.4,1.53c0.11,0,0.17-0.06,0.17-0.17v-1.37
<path d="M 23.23 17.87 C 23.23 18.10 23.31 18.30 23.47 18.48 L 24.12 19.14 C 24.28 19.30 24.48 19.38 24.70 19.38 C 24.94 19.38 25.14 19.30 25.30 19.13 C 25.47 18.96 25.55 18.75 25.55 18.50 C 25.55 18.27 25.47 18.08 25.30 17.93 L 24.68 17.27 C 24.49 17.11 24.29 17.04 24.06 17.04 C 23.83 17.04 23.63 17.12 23.47 17.28 C 23.31 17.44 23.23 17.64 23.23 17.87 Z"/> c0-0.12-0.06-0.18-0.17-0.18c-0.87-0.07-1.6-0.41-2.19-1.04c-0.59-0.62-0.89-1.36-0.89-2.21c0-0.84,0.28-1.57,0.85-2.19
<path d="M 22.42 6.05 C 22.42 6.28 22.51 6.48 22.69 6.65 C 22.87 6.82 23.06 6.90 23.24 6.90 C 23.40 6.90 23.61 6.82 23.86 6.65 L 25.30 5.22 C 25.47 5.04 25.55 4.83 25.55 4.59 C 25.55 4.35 25.47 4.14 25.30 3.98 C 25.13 3.82 24.93 3.74 24.70 3.74 C 24.48 3.74 24.29 3.82 24.12 3.99 L 22.69 5.42 C 22.51 5.61 22.42 5.82 22.42 6.05 Z"/> s1.26-0.97,2.1-1.04l0.52-0.08c0.13,0,0.2-0.06,0.2-0.17l0.06-0.51c0.11-1.08,0.56-1.99,1.37-2.71c0.81-0.73,1.76-1.09,2.86-1.09
<path d="M 16.90 3.73 C 16.90 3.98 16.98 4.19 17.14 4.35 C 17.30 4.51 17.50 4.59 17.75 4.59 C 17.99 4.59 18.18 4.51 18.34 4.35 C 18.50 4.19 18.57 3.98 18.57 3.73 L 18.57 1.69 C 18.57 1.45 18.49 1.26 18.34 1.10 C 18.18 0.94 17.99 0.87 17.75 0.87 C 17.51 0.87 17.31 0.95 17.15 1.10 C 16.99 1.25 16.90 1.45 16.90 1.69 L 16.90 3.73 Z"/> c1.09,0,2.04,0.36,2.85,1.09c0.81,0.72,1.27,1.63,1.39,2.72l0.07,0.58c0,0.11,0.06,0.17,0.19,0.17h1.6c0.91,0,1.68,0.32,2.32,0.95
<path d="M 9.94 4.59 C 9.94 4.84 10.02 5.05 10.18 5.21 L 10.84 5.86 C 11.26 6.18 11.66 6.18 12.05 5.86 C 12.21 5.68 12.29 5.47 12.29 5.22 C 12.29 4.99 12.21 4.79 12.05 4.63 L 11.41 3.98 C 11.22 3.81 11.02 3.73 10.79 3.73 C 10.56 3.73 10.36 3.81 10.19 3.98 C 10.02 4.15 9.94 4.36 9.94 4.59 Z"/> c0.64,0.63,0.96,1.39,0.96,2.28c0,0.85-0.3,1.59-0.89,2.21c-0.59,0.62-1.32,0.97-2.19,1.04c-0.13,0-0.2,0.06-0.2,0.18v1.37
</g> c0,0.11,0.07,0.17,0.2,0.17c1.33-0.04,2.46-0.55,3.38-1.51s1.38-2.11,1.38-3.45c0-0.68-0.16-1.37-0.47-2.07
<path id="lightning" d="M 9.06 28.17 L 9.36 28.17 L 14.68 20.32 C 14.72 20.28 14.73 20.23 14.70 20.18 C 14.67 20.13 14.63 20.11 14.56 20.11 L 12.38 20.11 L 14.68 15.90 C 14.75 15.76 14.71 15.68 14.54 15.68 L 11.60 15.68 C 11.52 15.68 11.45 15.73 11.38 15.82 L 9.22 21.54 C 9.20 21.68 9.24 21.75 9.36 21.75 L 11.53 21.75 L 9.06 28.17 Z"/> C22.6,13.89,23,12.8,23,11.56c0-0.71-0.14-1.39-0.42-2.04c-0.28-0.65-0.65-1.2-1.12-1.67s-1.03-0.84-1.67-1.12
c-0.65-0.27-1.32-0.41-2.03-0.41c-1.54,0-2.84,0.58-3.88,1.73c-0.86-0.41-1.74-0.62-2.65-0.62c-1.42,0-2.67,0.43-3.76,1.3
s-1.79,1.99-2.1,3.37c-1.1,0.26-2.01,0.83-2.73,1.73S1.56,15.75,1.56,16.9z M9.06,28.17h0.3l5.32-7.85
c0.04-0.04,0.05-0.09,0.02-0.14s-0.07-0.07-0.14-0.07h-2.18l2.3-4.21c0.07-0.14,0.03-0.22-0.14-0.22h-2.94
c-0.08,0-0.15,0.05-0.22,0.14l-2.16,5.72c-0.02,0.14,0.02,0.21,0.14,0.21h2.17L9.06,28.17z M9.94,4.59c0,0.25,0.08,0.46,0.24,0.62
l0.66,0.65c0.42,0.32,0.82,0.32,1.21,0c0.16-0.18,0.24-0.39,0.24-0.64c0-0.23-0.08-0.43-0.24-0.59l-0.64-0.65
c-0.19-0.17-0.39-0.25-0.62-0.25c-0.23,0-0.43,0.08-0.6,0.25C10.02,4.15,9.94,4.36,9.94,4.59z M15.28,9.02
C15.96,8.34,16.79,8,17.76,8c0.98,0,1.81,0.35,2.49,1.04c0.69,0.69,1.03,1.53,1.03,2.52c0,0.61-0.17,1.21-0.51,1.81
c-0.98-0.94-2.13-1.41-3.46-1.41h-0.31C16.74,10.82,16.16,9.84,15.28,9.02z M16.9,3.73c0,0.25,0.08,0.46,0.24,0.62
c0.16,0.16,0.36,0.24,0.61,0.24c0.24,0,0.43-0.08,0.59-0.24c0.16-0.16,0.23-0.37,0.23-0.62V1.69c0-0.24-0.08-0.43-0.23-0.59
c-0.16-0.16-0.35-0.23-0.59-0.23c-0.24,0-0.44,0.08-0.6,0.23S16.9,1.45,16.9,1.69V3.73z M22.42,6.05c0,0.23,0.09,0.43,0.27,0.6
c0.18,0.17,0.37,0.25,0.55,0.25c0.16,0,0.37-0.08,0.62-0.25l1.44-1.43c0.17-0.18,0.25-0.39,0.25-0.63c0-0.24-0.08-0.45-0.25-0.61
c-0.17-0.16-0.37-0.24-0.6-0.24c-0.22,0-0.41,0.08-0.58,0.25l-1.43,1.43C22.51,5.61,22.42,5.82,22.42,6.05z M23.23,17.87
c0,0.23,0.08,0.43,0.24,0.61l0.65,0.66c0.16,0.16,0.36,0.24,0.58,0.24c0.24,0,0.44-0.08,0.6-0.25c0.17-0.17,0.25-0.38,0.25-0.63
c0-0.23-0.08-0.42-0.25-0.57l-0.62-0.66c-0.19-0.16-0.39-0.23-0.62-0.23c-0.23,0-0.43,0.08-0.59,0.24
C23.31,17.44,23.23,17.64,23.23,17.87z M24.68,11.56c0,0.22,0.09,0.41,0.26,0.57c0.17,0.17,0.37,0.25,0.6,0.25h2.04
c0.24,0,0.44-0.08,0.61-0.24c0.17-0.16,0.25-0.35,0.25-0.59c0-0.24-0.09-0.44-0.26-0.61s-0.37-0.25-0.6-0.25h-2.04
c-0.23,0-0.43,0.08-0.6,0.25C24.77,11.12,24.68,11.32,24.68,11.56z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

@@ -1,22 +1,49 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 2.54 13.86 C 3.25 12.96 4.17 12.39 5.29 12.13 C 5.60 10.75 6.29 9.62 7.37 8.75 C 8.45 7.88 9.70 7.44 11.11 7.44 C 12.04 7.44 12.96 7.66 13.85 8.10 C 13.88 8.06 15.25 9.07 15.23 9.09 C 16.07 9.94 16.64 10.91 16.92 12.01 L 17.23 12.01 C 18.58 12.01 19.75 12.50 20.73 13.48 C 20.76 13.44 21.93 14.78 21.79 14.95 C 22.04 15.62 22.17 16.28 22.17 16.96 C 22.17 18.29 21.71 19.43 20.80 20.38 C 19.88 21.33 18.76 21.83 17.43 21.87 C 17.30 21.87 17.23 21.81 17.23 21.70 L 17.23 20.37 C 17.23 20.25 17.30 20.19 17.43 20.19 C 18.29 20.14 19.01 19.82 19.60 19.19 C 20.19 18.56 20.48 17.82 20.48 16.95 C 20.48 16.05 20.16 15.28 19.52 14.64 C 18.88 14.00 18.12 13.68 17.23 13.68 L 15.63 13.68 C 15.51 13.68 15.43 13.62 15.41 13.51 L 15.34 12.93 C 15.24 11.86 14.78 10.96 13.96 10.24 C 13.15 9.52 12.20 9.16 11.10 9.16 C 10.00 9.16 9.06 9.51 8.27 10.23 C 7.48 10.95 7.01 11.86 6.89 12.95 L 6.81 13.50 C 6.81 13.59 6.76 13.64 6.65 13.64 L 6.12 13.72 C 5.28 13.79 4.58 14.13 4.02 14.75 C 3.46 15.36 3.18 16.10 3.18 16.94 C 3.18 17.81 3.47 18.56 4.06 19.18 C 4.65 19.80 5.37 20.14 6.23 20.18 C 6.35 20.18 6.41 20.24 6.41 20.36 L 6.41 21.69 C 6.41 21.80 6.35 21.86 6.23 21.86 C 4.89 21.80 3.76 21.29 2.85 20.35 C 1.94 19.41 1.48 18.27 1.48 16.95 C 1.48 15.79 1.83 14.76 2.54 13.86 L 2.54 13.86 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<g id="sun"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<path d="M 17.71 6.36 C 18.42 6.36 19.11 6.50 19.75 6.78 C 20.39 7.06 20.95 7.43 21.42 7.90 C 21.89 8.37 22.27 8.92 22.54 9.57 C 22.81 10.22 22.95 10.89 22.95 11.60 C 22.95 12.64 22.33 14.15 21.81 14.98 L 20.73 13.53 C 21.02 12.98 21.26 12.21 21.26 11.60 C 21.26 10.62 20.91 9.80 20.22 9.12 C 19.53 8.44 18.69 8.10 17.70 8.10 C 16.74 8.10 15.87 8.45 15.22 9.08 L 13.85 8.11 C 14.86 7.03 16.22 6.36 17.71 6.36 L 17.71 6.36 Z"/> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M 24.66 11.60 C 24.66 11.84 24.75 12.03 24.92 12.19 C 25.10 12.37 25.31 12.46 25.54 12.46 L 27.57 12.46 C 27.80 12.46 28.00 12.38 28.16 12.21 C 28.32 12.04 28.40 11.84 28.40 11.60 C 28.40 11.36 28.32 11.16 28.16 11.00 C 28.00 10.83 27.81 10.75 27.57 10.75 L 25.54 10.75 C 25.30 10.75 25.10 10.83 24.92 11.00 C 24.74 11.17 24.66 11.37 24.66 11.60 Z"/> <path d="M1.48,16.95c0,1.32,0.46,2.46,1.37,3.4c0.91,0.94,2.04,1.45,3.38,1.51c0.12,0,0.18-0.06,0.18-0.17v-1.33
<path d="M 23.18 17.94 C 23.18 18.17 23.27 18.37 23.45 18.53 L 24.06 19.16 C 24.26 19.32 24.46 19.40 24.67 19.40 C 24.87 19.40 25.07 19.32 25.27 19.16 C 25.44 19.00 25.52 18.81 25.52 18.57 C 25.52 18.34 25.44 18.14 25.27 17.95 L 24.62 17.34 C 24.47 17.17 24.28 17.09 24.05 17.09 C 23.82 17.09 23.62 17.17 23.45 17.34 C 23.27 17.51 23.18 17.71 23.18 17.94 Z"/> c0-0.12-0.06-0.18-0.18-0.18c-0.86-0.04-1.58-0.38-2.17-1s-0.88-1.37-0.88-2.24c0-0.84,0.28-1.58,0.84-2.19
<path d="M 22.40 6.09 C 22.40 6.34 22.48 6.54 22.63 6.69 C 22.99 7.05 23.39 7.05 23.84 6.69 L 25.27 5.26 C 25.44 5.09 25.52 4.88 25.52 4.63 C 25.52 4.39 25.44 4.19 25.27 4.03 C 25.10 3.86 24.90 3.78 24.67 3.78 C 24.44 3.78 24.24 3.86 24.06 4.02 L 22.63 5.50 C 22.48 5.65 22.40 5.84 22.40 6.09 Z"/> c0.56-0.62,1.26-0.96,2.1-1.03l0.53-0.08c0.11,0,0.16-0.05,0.16-0.14l0.08-0.55c0.12-1.09,0.59-2,1.38-2.72S10,9.16,11.1,9.16
<path d="M 16.88 3.83 C 16.88 4.06 16.96 4.25 17.11 4.41 C 17.26 4.56 17.46 4.64 17.70 4.64 C 17.94 4.64 18.15 4.56 18.32 4.41 C 18.49 4.26 18.57 4.06 18.57 3.83 L 18.57 1.76 C 18.57 1.53 18.48 1.33 18.31 1.16 C 18.14 0.99 17.93 0.91 17.70 0.91 C 17.47 0.91 17.27 0.99 17.12 1.16 C 16.96 1.33 16.89 1.53 16.89 1.76 L 16.89 3.83 L 16.88 3.83 Z"/> s2.05,0.36,2.86,1.08c0.82,0.72,1.28,1.62,1.38,2.69l0.07,0.58c0.02,0.11,0.1,0.17,0.22,0.17h1.6c0.89,0,1.65,0.32,2.29,0.96
<path d="M 9.92 4.66 C 9.92 4.90 10.00 5.10 10.16 5.26 L 10.82 5.90 C 10.96 6.06 11.14 6.14 11.36 6.16 C 11.58 6.18 11.79 6.09 11.98 5.90 C 12.14 5.74 12.22 5.54 12.22 5.31 C 12.22 5.07 12.14 4.87 11.98 4.71 L 11.35 4.06 C 11.20 3.90 11.00 3.82 10.77 3.80 C 10.54 3.80 10.34 3.88 10.17 4.05 C 10.01 4.22 9.92 4.42 9.92 4.66 Z"/> c0.64,0.64,0.96,1.41,0.96,2.31c0,0.87-0.29,1.61-0.88,2.24s-1.31,0.95-2.17,1c-0.13,0-0.2,0.06-0.2,0.18v1.33
</g> c0,0.11,0.07,0.17,0.2,0.17c1.33-0.04,2.45-0.54,3.37-1.49c0.91-0.95,1.37-2.09,1.37-3.42c0-0.68-0.13-1.34-0.38-2.01
<g id="rain"> c0.78-0.96,1.16-2.08,1.16-3.35c0-0.71-0.14-1.38-0.41-2.03c-0.27-0.65-0.65-1.2-1.12-1.67s-1.03-0.84-1.67-1.12
<path d="M 14.88 18.81 C 14.88 18.98 14.93 19.14 15.04 19.29 C 15.15 19.44 15.31 19.55 15.53 19.61 C 15.55 19.61 15.59 19.62 15.65 19.63 C 15.71 19.64 15.76 19.65 15.79 19.65 C 15.90 19.65 16.02 19.62 16.16 19.56 C 16.37 19.45 16.50 19.28 16.56 19.04 L 16.80 18.14 C 16.86 17.91 16.84 17.70 16.73 17.51 C 16.62 17.32 16.45 17.18 16.23 17.11 C 16.00 17.04 15.78 17.06 15.59 17.17 C 15.39 17.28 15.26 17.44 15.19 17.68 L 14.91 18.59 C 14.91 18.61 14.91 18.64 14.90 18.70 C 14.89 18.73 14.88 18.77 14.88 18.81 Z"/> s-1.33-0.42-2.04-0.42c-1.54,0-2.83,0.58-3.86,1.74c-0.89-0.44-1.81-0.66-2.74-0.66c-1.41,0-2.66,0.44-3.74,1.31s-1.77,2-2.08,3.38
<path d="M 14.27 21.12 C 14.27 21.35 14.35 21.54 14.51 21.69 C 14.66 21.85 14.85 21.93 15.09 21.93 C 15.33 21.93 15.52 21.85 15.68 21.70 C 15.84 21.54 15.91 21.35 15.91 21.12 C 15.91 20.88 15.83 20.69 15.68 20.53 C 15.52 20.37 15.33 20.30 15.09 20.30 C 14.85 20.30 14.66 20.38 14.50 20.53 C 14.34 20.68 14.27 20.88 14.27 21.12 Z"/> c-1.12,0.26-2.04,0.83-2.75,1.73C1.83,14.76,1.48,15.79,1.48,16.95z M6.83,23.98c0,0.17,0.05,0.34,0.16,0.51
<path d="M 13.53 24.08 C 13.53 24.25 13.58 24.41 13.68 24.56 C 13.78 24.71 13.93 24.82 14.14 24.88 C 14.17 24.88 14.22 24.89 14.28 24.90 C 14.34 24.91 14.39 24.92 14.42 24.92 C 14.83 24.92 15.08 24.70 15.18 24.26 L 15.32 23.66 C 15.39 23.45 15.37 23.24 15.25 23.03 C 15.13 22.82 14.96 22.69 14.74 22.62 C 14.49 22.56 14.26 22.58 14.06 22.70 C 13.86 22.82 13.72 22.99 13.65 23.23 L 13.56 23.82 C 13.56 23.83 13.56 23.87 13.55 23.93 C 13.54 24.00 13.53 24.04 13.53 24.08 Z"/> c0.11,0.17,0.27,0.28,0.47,0.35c0.23,0.07,0.45,0.06,0.64-0.04c0.2-0.09,0.33-0.28,0.4-0.56l0.14-0.61c0.05-0.23,0.02-0.44-0.1-0.63
<path d="M 10.77 21.93 C 10.76 22.08 10.80 22.24 10.91 22.40 C 11.01 22.56 11.16 22.66 11.36 22.70 C 11.59 22.76 11.80 22.74 12.00 22.64 C 12.20 22.54 12.33 22.35 12.41 22.08 L 12.67 21.18 C 12.74 20.96 12.72 20.75 12.60 20.55 C 12.48 20.35 12.31 20.22 12.07 20.15 C 11.85 20.08 11.64 20.11 11.43 20.23 C 11.22 20.35 11.09 20.53 11.02 20.76 L 10.80 21.66 C 10.78 21.74 10.77 21.83 10.77 21.93 Z"/> c-0.12-0.2-0.29-0.33-0.52-0.4c-0.23-0.07-0.44-0.04-0.64,0.08S7.06,22.97,7,23.2l-0.14,0.59C6.84,23.85,6.83,23.91,6.83,23.98z
<path d="M 10.15 24.20 C 10.15 24.43 10.23 24.62 10.39 24.78 C 10.55 24.94 10.75 25.02 10.97 25.02 C 11.21 25.02 11.40 24.94 11.56 24.79 C 11.72 24.63 11.79 24.44 11.79 24.20 C 11.79 23.97 11.71 23.78 11.56 23.62 C 11.40 23.46 11.21 23.39 10.97 23.39 C 10.73 23.39 10.54 23.47 10.38 23.62 C 10.22 23.77 10.15 23.97 10.15 24.20 Z"/> M7.6,21.08c0,0.22,0.08,0.41,0.24,0.57C8,21.83,8.19,21.91,8.4,21.91c0.24,0,0.44-0.08,0.6-0.24c0.17-0.16,0.25-0.35,0.25-0.59
<path d="M 9.36 27.10 C 9.36 27.27 9.41 27.43 9.52 27.59 C 9.63 27.75 9.79 27.86 10.01 27.92 C 10.10 27.94 10.18 27.95 10.25 27.95 C 10.68 27.95 10.95 27.75 11.05 27.34 L 11.18 26.75 C 11.24 26.49 11.21 26.27 11.10 26.07 C 10.99 25.87 10.81 25.75 10.58 25.70 C 10.37 25.63 10.16 25.65 9.95 25.77 C 9.74 25.89 9.61 26.06 9.54 26.28 L 9.40 26.88 C 9.37 26.99 9.36 27.07 9.36 27.10 Z"/> c0-0.23-0.08-0.43-0.25-0.59c-0.17-0.16-0.37-0.24-0.6-0.24c-0.23,0-0.42,0.08-0.58,0.23S7.6,20.85,7.6,21.08z M8.21,18.81
<path d="M 8.21 18.81 C 8.20 18.97 8.24 19.12 8.34 19.26 C 8.44 19.41 8.60 19.51 8.82 19.58 C 9.03 19.64 9.23 19.62 9.44 19.51 C 9.65 19.40 9.79 19.23 9.86 19.00 L 10.13 18.10 C 10.20 17.86 10.18 17.64 10.06 17.45 C 9.94 17.26 9.76 17.13 9.52 17.06 C 9.30 16.99 9.09 17.01 8.89 17.13 C 8.69 17.24 8.55 17.41 8.48 17.63 L 8.24 18.55 C 8.22 18.71 8.21 18.80 8.21 18.81 Z"/> c-0.01,0.16,0.03,0.31,0.13,0.45c0.1,0.15,0.26,0.25,0.48,0.32c0.21,0.06,0.41,0.04,0.62-0.07C9.65,19.4,9.79,19.23,9.86,19
<path d="M 7.60 21.08 C 7.60 21.30 7.68 21.49 7.84 21.65 C 8.00 21.83 8.19 21.91 8.40 21.91 C 8.64 21.91 8.84 21.83 9.00 21.67 C 9.17 21.51 9.25 21.32 9.25 21.08 C 9.25 20.85 9.17 20.65 9.00 20.49 C 8.83 20.33 8.63 20.25 8.40 20.25 C 8.17 20.25 7.98 20.33 7.82 20.48 C 7.66 20.63 7.60 20.85 7.60 21.08 Z"/> l0.27-0.9c0.07-0.24,0.05-0.46-0.07-0.65c-0.12-0.19-0.3-0.32-0.54-0.39c-0.22-0.07-0.43-0.05-0.63,0.07
<path d="M 6.83 23.98 C 6.83 24.15 6.88 24.32 6.99 24.49 C 7.10 24.66 7.26 24.77 7.46 24.84 C 7.69 24.91 7.91 24.90 8.10 24.80 C 8.30 24.71 8.43 24.52 8.50 24.24 L 8.64 23.63 C 8.69 23.40 8.66 23.19 8.54 23.00 C 8.42 22.80 8.25 22.67 8.02 22.60 C 7.79 22.53 7.58 22.56 7.38 22.68 C 7.18 22.80 7.06 22.97 7.00 23.20 L 6.86 23.79 C 6.84 23.85 6.83 23.91 6.83 23.98 Z"/> c-0.2,0.11-0.34,0.28-0.41,0.5l-0.24,0.92C8.22,18.71,8.21,18.8,8.21,18.81z M9.36,27.1c0,0.17,0.05,0.33,0.16,0.49
</g> c0.11,0.16,0.27,0.27,0.49,0.33c0.09,0.02,0.17,0.03,0.24,0.03c0.43,0,0.7-0.2,0.8-0.61l0.13-0.59c0.06-0.26,0.03-0.48-0.08-0.68
s-0.29-0.32-0.52-0.37c-0.21-0.07-0.42-0.05-0.63,0.07c-0.21,0.12-0.34,0.29-0.41,0.51L9.4,26.88C9.37,26.99,9.36,27.07,9.36,27.1z
M9.92,4.66c0,0.24,0.08,0.44,0.24,0.6l0.66,0.64c0.14,0.16,0.32,0.24,0.54,0.26c0.22,0.02,0.43-0.07,0.62-0.26
c0.16-0.16,0.24-0.36,0.24-0.59c0-0.24-0.08-0.44-0.24-0.6l-0.63-0.65C11.2,3.9,11,3.82,10.77,3.8c-0.23,0-0.43,0.08-0.6,0.25
C10.01,4.22,9.92,4.42,9.92,4.66z M10.15,24.2c0,0.23,0.08,0.42,0.24,0.58c0.16,0.16,0.36,0.24,0.58,0.24
c0.24,0,0.43-0.08,0.59-0.23c0.16-0.16,0.23-0.35,0.23-0.59c0-0.23-0.08-0.42-0.23-0.58c-0.16-0.16-0.35-0.23-0.59-0.23
c-0.24,0-0.43,0.08-0.59,0.23S10.15,23.97,10.15,24.2z M10.77,21.93c-0.01,0.15,0.03,0.31,0.14,0.47c0.1,0.16,0.25,0.26,0.45,0.3
c0.23,0.06,0.44,0.04,0.64-0.06s0.33-0.29,0.41-0.56l0.26-0.9c0.07-0.22,0.05-0.43-0.07-0.63c-0.12-0.2-0.29-0.33-0.53-0.4
c-0.22-0.07-0.43-0.04-0.64,0.08s-0.34,0.3-0.41,0.53l-0.22,0.9C10.78,21.74,10.77,21.83,10.77,21.93z M13.53,24.08
c0,0.17,0.05,0.33,0.15,0.48c0.1,0.15,0.25,0.26,0.46,0.32c0.03,0,0.08,0.01,0.14,0.02c0.06,0.01,0.11,0.02,0.14,0.02
c0.41,0,0.66-0.22,0.76-0.66l0.14-0.6c0.07-0.21,0.05-0.42-0.07-0.63c-0.12-0.21-0.29-0.34-0.51-0.41
c-0.25-0.06-0.48-0.04-0.68,0.08s-0.34,0.29-0.41,0.53l-0.09,0.59c0,0.01,0,0.05-0.01,0.11C13.54,24,13.53,24.04,13.53,24.08z
M14.27,21.12c0,0.23,0.08,0.42,0.24,0.57c0.15,0.16,0.34,0.24,0.58,0.24s0.43-0.08,0.59-0.23c0.16-0.16,0.23-0.35,0.23-0.58
c0-0.24-0.08-0.43-0.23-0.59c-0.16-0.16-0.35-0.23-0.59-0.23s-0.43,0.08-0.59,0.23S14.27,20.88,14.27,21.12z M14.88,18.81
c0,0.17,0.05,0.33,0.16,0.48c0.11,0.15,0.27,0.26,0.49,0.32c0.02,0,0.06,0.01,0.12,0.02c0.06,0.01,0.11,0.02,0.14,0.02
c0.11,0,0.23-0.03,0.37-0.09c0.21-0.11,0.34-0.28,0.4-0.52l0.24-0.9c0.06-0.23,0.04-0.44-0.07-0.63s-0.28-0.33-0.5-0.4
c-0.23-0.07-0.45-0.05-0.64,0.06c-0.2,0.11-0.33,0.27-0.4,0.51l-0.28,0.91c0,0.02,0,0.05-0.01,0.11
C14.89,18.73,14.88,18.77,14.88,18.81z M15.23,9.09c0.66-0.66,1.48-0.99,2.47-0.99c0.99,0,1.83,0.34,2.52,1.02s1.04,1.5,1.04,2.48
c0,0.66-0.18,1.29-0.53,1.88c-0.98-0.98-2.15-1.47-3.5-1.47h-0.31C16.64,10.91,16.07,9.94,15.23,9.09z M16.88,3.83
c0,0.23,0.08,0.42,0.23,0.58c0.15,0.15,0.35,0.23,0.59,0.23c0.24,0,0.45-0.08,0.62-0.23c0.17-0.15,0.25-0.35,0.25-0.58V1.76
c0-0.23-0.09-0.43-0.26-0.6c-0.17-0.17-0.38-0.25-0.61-0.25c-0.23,0-0.43,0.08-0.58,0.25c-0.16,0.17-0.23,0.37-0.23,0.6V3.83z
M22.4,6.09c0,0.25,0.08,0.45,0.23,0.6c0.36,0.36,0.76,0.36,1.21,0l1.43-1.43c0.17-0.17,0.25-0.38,0.25-0.63
c0-0.24-0.08-0.44-0.25-0.6c-0.17-0.17-0.37-0.25-0.6-0.25c-0.23,0-0.43,0.08-0.61,0.24L22.63,5.5C22.48,5.65,22.4,5.84,22.4,6.09z
M23.18,17.94c0,0.23,0.09,0.43,0.27,0.59l0.61,0.63c0.2,0.16,0.4,0.24,0.61,0.24c0.2,0,0.4-0.08,0.6-0.24
c0.17-0.16,0.25-0.35,0.25-0.59c0-0.23-0.08-0.43-0.25-0.62l-0.65-0.61c-0.15-0.17-0.34-0.25-0.57-0.25s-0.43,0.08-0.6,0.25
C23.27,17.51,23.18,17.71,23.18,17.94z M24.66,11.6c0,0.24,0.09,0.43,0.26,0.59c0.18,0.18,0.39,0.27,0.62,0.27h2.03
c0.23,0,0.43-0.08,0.59-0.25c0.16-0.17,0.24-0.37,0.24-0.61c0-0.24-0.08-0.44-0.24-0.6c-0.16-0.17-0.35-0.25-0.59-0.25h-2.03
c-0.24,0-0.44,0.08-0.62,0.25S24.66,11.37,24.66,11.6z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

@@ -1,16 +1,35 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 2.59 13.82 C 3.31 12.92 4.22 12.34 5.33 12.08 C 5.64 10.72 6.34 9.60 7.43 8.72 C 8.52 7.84 9.78 7.40 11.19 7.40 C 12.18 7.40 13.08 7.62 13.90 8.06 C 13.95 8.01 15.32 9.01 15.30 9.03 C 16.14 9.83 16.70 10.81 16.97 11.99 L 17.30 11.99 C 18.66 11.99 19.82 12.47 20.79 13.44 C 20.82 13.39 21.99 14.72 21.86 14.89 C 22.14 15.51 22.28 16.18 22.28 16.90 C 22.28 18.23 21.82 19.38 20.89 20.35 C 19.96 21.31 18.83 21.82 17.50 21.86 C 17.37 21.86 17.31 21.80 17.31 21.69 L 17.31 20.35 C 17.31 20.24 17.38 20.18 17.50 20.18 C 18.35 20.13 19.08 19.79 19.68 19.15 C 20.28 18.51 20.58 17.76 20.58 16.89 C 20.58 16.01 20.26 15.26 19.61 14.62 C 18.96 13.98 18.20 13.66 17.31 13.66 L 15.69 13.66 C 15.58 13.66 15.52 13.59 15.52 13.47 L 15.45 12.90 C 15.33 11.82 14.87 10.91 14.05 10.18 C 13.23 9.45 12.28 9.08 11.19 9.08 C 10.10 9.08 9.15 9.45 8.34 10.18 C 7.53 10.91 7.08 11.82 6.97 12.90 L 6.90 13.44 C 6.90 13.55 6.83 13.61 6.70 13.61 L 6.17 13.66 C 5.34 13.76 4.64 14.11 4.07 14.73 C 3.50 15.35 3.22 16.07 3.22 16.89 C 3.22 17.75 3.52 18.51 4.12 19.15 C 4.72 19.79 5.45 20.14 6.31 20.18 C 6.42 20.18 6.48 20.24 6.48 20.35 L 6.48 21.69 C 6.48 21.80 6.42 21.86 6.31 21.86 C 4.96 21.80 3.83 21.29 2.90 20.33 C 1.97 19.37 1.51 18.22 1.51 16.89 C 1.51 15.74 1.87 14.72 2.59 13.82 L 2.59 13.82 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<g id="sun"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<path d="M 17.78 6.32 C 18.72 6.32 19.59 6.55 20.40 7.02 C 21.21 7.49 21.85 8.13 22.32 8.94 C 22.79 9.75 23.03 10.63 23.03 11.58 C 23.03 12.61 22.43 14.13 21.90 14.97 L 20.81 13.48 C 21.11 12.92 21.31 12.16 21.31 11.59 C 21.31 10.60 20.97 9.76 20.28 9.07 C 19.60 8.38 18.76 8.03 17.78 8.03 C 16.86 8.03 15.99 8.43 15.30 9.05 L 13.91 8.07 C 14.92 7.01 16.29 6.32 17.78 6.32 L 17.78 6.32 Z"/> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M 24.72 11.58 C 24.72 11.82 24.81 12.01 24.98 12.17 C 25.16 12.35 25.36 12.43 25.60 12.43 L 27.63 12.43 C 27.87 12.43 28.07 12.35 28.24 12.18 C 28.41 12.01 28.49 11.81 28.49 11.58 C 28.49 11.34 28.41 11.14 28.24 10.97 C 28.07 10.80 27.87 10.71 27.63 10.71 L 25.60 10.71 C 25.36 10.71 25.16 10.80 24.98 10.97 C 24.80 11.14 24.72 11.34 24.72 11.58 Z"/> <path d="M1.51,16.89c0,1.33,0.46,2.48,1.39,3.44s2.06,1.47,3.41,1.53c0.11,0,0.17-0.06,0.17-0.17v-1.34c0-0.11-0.06-0.17-0.17-0.17
<path d="M 23.26 17.91 C 23.26 18.15 23.34 18.36 23.50 18.54 L 24.15 19.17 C 24.33 19.31 24.53 19.38 24.75 19.38 L 24.77 19.40 C 25.00 19.40 25.19 19.32 25.35 19.16 C 25.51 19.00 25.59 18.79 25.59 18.55 C 25.59 18.31 25.50 18.12 25.33 17.97 L 24.71 17.31 C 24.53 17.15 24.32 17.07 24.09 17.07 C 23.86 17.07 23.66 17.15 23.50 17.32 C 23.34 17.49 23.26 17.67 23.26 17.91 Z"/> c-0.86-0.04-1.59-0.39-2.19-1.03s-0.9-1.4-0.9-2.26c0-0.82,0.28-1.54,0.85-2.16s1.27-0.97,2.1-1.07l0.53-0.05
<path d="M 22.45 6.06 C 22.45 6.30 22.54 6.50 22.72 6.65 C 22.86 6.81 23.04 6.89 23.27 6.91 C 23.50 6.93 23.71 6.84 23.89 6.65 L 25.33 5.22 C 25.51 5.05 25.59 4.84 25.59 4.59 C 25.59 4.35 25.51 4.14 25.34 3.98 C 25.17 3.82 24.97 3.74 24.73 3.74 C 24.52 3.74 24.33 3.82 24.15 3.99 L 22.72 5.43 C 22.54 5.60 22.45 5.81 22.45 6.06 Z"/> c0.13,0,0.2-0.06,0.2-0.17l0.07-0.54c0.11-1.08,0.56-1.99,1.37-2.72s1.76-1.1,2.85-1.1c1.09,0,2.04,0.37,2.86,1.1
<path d="M 16.92 3.78 C 16.92 4.01 17.00 4.21 17.17 4.37 C 17.34 4.53 17.54 4.61 17.78 4.61 C 18.01 4.61 18.21 4.53 18.37 4.38 C 18.53 4.22 18.61 4.03 18.61 3.79 L 18.61 1.73 C 18.61 1.47 18.53 1.26 18.38 1.10 C 18.22 0.94 18.03 0.86 17.79 0.86 C 17.54 0.86 17.33 0.94 17.17 1.11 C 17.01 1.28 16.93 1.48 16.93 1.73 L 16.93 3.78 L 16.92 3.78 Z"/> s1.28,1.64,1.4,2.72l0.07,0.57c0,0.12,0.06,0.19,0.17,0.19h1.62c0.89,0,1.65,0.32,2.3,0.96c0.65,0.64,0.97,1.39,0.97,2.27
<path d="M 9.94 4.60 C 9.94 4.84 10.02 5.04 10.19 5.21 L 10.84 5.87 C 11.03 6.02 11.24 6.09 11.46 6.09 C 11.67 6.09 11.87 6.01 12.04 5.86 C 12.21 5.70 12.30 5.51 12.30 5.27 C 12.30 5.03 12.22 4.81 12.06 4.63 L 11.42 3.98 C 11.24 3.81 11.04 3.73 10.82 3.73 C 10.58 3.73 10.37 3.82 10.20 3.99 C 10.03 4.16 9.94 4.37 9.94 4.60 Z"/> c0,0.87-0.3,1.62-0.9,2.26c-0.6,0.64-1.33,0.98-2.18,1.03c-0.12,0-0.19,0.06-0.19,0.17v1.34c0,0.11,0.06,0.17,0.19,0.17
</g> c1.33-0.04,2.46-0.55,3.39-1.51c0.93-0.97,1.39-2.12,1.39-3.45c0-0.72-0.14-1.39-0.42-2.01c0.78-0.97,1.17-2.07,1.17-3.31
<g id="rain"> c0-0.95-0.24-1.83-0.71-2.64c-0.47-0.81-1.11-1.45-1.92-1.92s-1.68-0.7-2.62-0.7c-1.56,0-2.85,0.58-3.88,1.74
<path d="M 13.67 23.77 C 13.67 23.93 13.72 24.09 13.82 24.24 C 13.92 24.39 14.08 24.50 14.28 24.56 C 14.39 24.58 14.48 24.60 14.53 24.60 C 14.70 24.60 14.87 24.55 15.02 24.45 C 15.17 24.35 15.27 24.19 15.32 23.96 L 16.90 18.08 C 16.96 17.85 16.94 17.63 16.83 17.44 C 16.72 17.24 16.55 17.11 16.33 17.04 C 16.09 16.97 15.88 16.99 15.68 17.11 C 15.48 17.22 15.35 17.39 15.29 17.62 L 13.71 23.53 C 13.69 23.68 13.67 23.76 13.67 23.77 Z"/> c-0.82-0.44-1.72-0.66-2.71-0.66c-1.41,0-2.67,0.44-3.76,1.32s-1.79,2-2.1,3.36c-1.11,0.26-2.02,0.84-2.74,1.74
<path d="M 9.52 26.83 C 9.52 27.02 9.57 27.19 9.67 27.35 C 9.77 27.51 9.94 27.61 10.19 27.65 C 10.30 27.67 10.39 27.69 10.45 27.69 C 10.61 27.69 10.76 27.63 10.90 27.52 C 11.04 27.40 11.13 27.24 11.17 27.04 L 13.57 18.11 C 13.63 17.88 13.61 17.66 13.50 17.47 C 13.39 17.28 13.22 17.14 13.00 17.07 C 12.77 17.00 12.55 17.02 12.35 17.14 C 12.15 17.25 12.01 17.42 11.95 17.65 L 9.55 26.58 C 9.53 26.73 9.52 26.82 9.52 26.83 Z"/> S1.51,15.74,1.51,16.89z M6.91,23.75c0,0.17,0.05,0.33,0.16,0.49c0.11,0.16,0.27,0.27,0.49,0.33c0.11,0.02,0.2,0.04,0.27,0.04
<path d="M 6.91 23.75 C 6.91 23.92 6.96 24.08 7.07 24.24 C 7.18 24.40 7.34 24.51 7.56 24.57 C 7.67 24.59 7.76 24.61 7.83 24.61 C 8.22 24.61 8.48 24.40 8.60 23.97 L 10.18 18.09 C 10.25 17.85 10.22 17.63 10.10 17.42 C 9.98 17.21 9.80 17.09 9.57 17.04 C 9.35 16.97 9.14 16.99 8.94 17.11 C 8.74 17.22 8.60 17.39 8.53 17.62 L 6.95 23.53 C 6.93 23.66 6.91 23.73 6.91 23.75 Z"/> c0.39,0,0.65-0.21,0.77-0.64l1.58-5.88c0.07-0.24,0.04-0.46-0.08-0.67c-0.12-0.21-0.3-0.33-0.53-0.38
</g> c-0.22-0.07-0.43-0.05-0.63,0.07c-0.2,0.11-0.34,0.28-0.41,0.51l-1.58,5.91C6.93,23.66,6.91,23.73,6.91,23.75z M9.52,26.83
c0,0.19,0.05,0.36,0.15,0.52c0.1,0.16,0.27,0.26,0.52,0.3c0.11,0.02,0.2,0.04,0.26,0.04c0.16,0,0.31-0.06,0.45-0.17
c0.14-0.12,0.23-0.28,0.27-0.48l2.4-8.93c0.06-0.23,0.04-0.45-0.07-0.64s-0.28-0.33-0.5-0.4c-0.23-0.07-0.45-0.05-0.65,0.07
c-0.2,0.11-0.34,0.28-0.4,0.51l-2.4,8.93C9.53,26.73,9.52,26.82,9.52,26.83z M9.94,4.6c0,0.24,0.08,0.44,0.25,0.61l0.65,0.66
c0.19,0.15,0.4,0.22,0.62,0.22c0.21,0,0.41-0.08,0.58-0.23c0.17-0.16,0.26-0.35,0.26-0.59c0-0.24-0.08-0.46-0.24-0.64l-0.64-0.65
c-0.18-0.17-0.38-0.25-0.6-0.25c-0.24,0-0.45,0.09-0.62,0.26C10.03,4.16,9.94,4.37,9.94,4.6z M13.67,23.77
c0,0.16,0.05,0.32,0.15,0.47s0.26,0.26,0.46,0.32c0.11,0.02,0.2,0.04,0.25,0.04c0.17,0,0.34-0.05,0.49-0.15
c0.15-0.1,0.25-0.26,0.3-0.49l1.58-5.88c0.06-0.23,0.04-0.45-0.07-0.64c-0.11-0.2-0.28-0.33-0.5-0.4c-0.24-0.07-0.45-0.05-0.65,0.07
c-0.2,0.11-0.33,0.28-0.39,0.51l-1.58,5.91C13.69,23.68,13.67,23.76,13.67,23.77z M15.3,9.03c0.71-0.67,1.53-1,2.48-1
c0.98,0,1.82,0.35,2.5,1.04c0.69,0.69,1.03,1.53,1.03,2.52c0,0.62-0.17,1.24-0.52,1.85c-0.97-0.97-2.13-1.45-3.49-1.45h-0.33
C16.7,10.81,16.14,9.83,15.3,9.03z M16.92,3.78c0,0.23,0.08,0.43,0.25,0.59c0.17,0.16,0.37,0.24,0.61,0.24
c0.23,0,0.43-0.08,0.59-0.23c0.16-0.16,0.24-0.35,0.24-0.59V1.73c0-0.26-0.08-0.47-0.23-0.63c-0.16-0.16-0.35-0.24-0.59-0.24
c-0.25,0-0.46,0.08-0.62,0.25s-0.24,0.37-0.24,0.62V3.78z M22.45,6.06c0,0.24,0.09,0.44,0.27,0.59c0.14,0.16,0.32,0.24,0.55,0.26
c0.23,0.02,0.44-0.07,0.62-0.26l1.44-1.43c0.18-0.17,0.26-0.38,0.26-0.63c0-0.24-0.08-0.45-0.25-0.61
c-0.17-0.16-0.37-0.24-0.61-0.24c-0.21,0-0.4,0.08-0.58,0.25l-1.43,1.44C22.54,5.6,22.45,5.81,22.45,6.06z M23.26,17.91
c0,0.24,0.08,0.45,0.24,0.63l0.65,0.63c0.18,0.14,0.38,0.21,0.6,0.21l0.02,0.02c0.23,0,0.42-0.08,0.58-0.24
c0.16-0.16,0.24-0.37,0.24-0.61c0-0.24-0.09-0.43-0.26-0.58l-0.62-0.66c-0.18-0.16-0.39-0.24-0.62-0.24s-0.43,0.08-0.59,0.25
S23.26,17.67,23.26,17.91z M24.72,11.58c0,0.24,0.09,0.43,0.26,0.59c0.18,0.18,0.38,0.26,0.62,0.26h2.03c0.24,0,0.44-0.08,0.61-0.25
c0.17-0.17,0.25-0.37,0.25-0.6c0-0.24-0.08-0.44-0.25-0.61s-0.37-0.26-0.61-0.26H25.6c-0.24,0-0.44,0.09-0.62,0.26
C24.8,11.14,24.72,11.34,24.72,11.58z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

@@ -1,19 +1,43 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 2.63 13.81 C 3.35 12.92 4.28 12.35 5.40 12.09 C 5.70 10.73 6.38 9.61 7.47 8.74 C 8.56 7.87 9.81 7.43 11.22 7.43 C 12.25 7.43 13.16 7.64 13.95 8.07 C 13.99 8.02 15.39 9.03 15.36 9.06 C 16.21 9.87 16.77 10.84 17.03 11.98 L 17.37 11.98 C 18.73 11.98 19.88 12.45 20.84 13.41 C 20.88 13.34 22.03 14.71 21.86 14.92 C 22.13 15.51 22.27 16.17 22.27 16.88 C 22.27 17.76 22.07 18.57 21.65 19.32 C 21.24 20.07 20.67 20.66 19.94 21.12 C 19.21 21.58 18.42 21.82 17.54 21.84 C 17.43 21.84 17.37 21.78 17.37 21.67 L 17.37 20.33 C 17.37 20.21 17.43 20.15 17.54 20.15 C 18.38 20.08 19.10 19.73 19.70 19.10 C 20.30 18.47 20.60 17.73 20.60 16.88 C 20.60 16.00 20.28 15.25 19.64 14.61 C 19.00 13.97 18.25 13.65 17.37 13.65 L 15.70 13.65 C 15.58 13.65 15.52 13.59 15.52 13.47 L 15.45 12.90 C 15.35 11.82 14.89 10.92 14.08 10.19 C 13.27 9.46 12.31 9.10 11.22 9.10 C 10.12 9.10 9.17 9.46 8.36 10.19 C 7.55 10.91 7.10 11.82 6.99 12.90 L 6.93 13.43 C 6.93 13.55 6.86 13.61 6.73 13.61 L 6.23 13.65 C 5.39 13.75 4.69 14.10 4.13 14.71 C 3.57 15.32 3.29 16.04 3.29 16.88 C 3.29 17.74 3.58 18.49 4.18 19.13 C 4.78 19.77 5.50 20.11 6.35 20.15 C 6.46 20.15 6.52 20.21 6.52 20.33 L 6.52 21.67 C 6.52 21.78 6.46 21.84 6.35 21.84 C 5.01 21.77 3.88 21.27 2.95 20.31 C 2.02 19.35 1.56 18.21 1.56 16.88 C 1.56 15.73 1.92 14.70 2.63 13.81 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<g id="sun"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<path d="M 17.78 6.41 C 18.49 6.41 19.17 6.54 19.82 6.82 C 20.46 7.09 21.02 7.46 21.48 7.93 C 21.95 8.40 22.33 8.95 22.60 9.60 C 22.87 10.25 23.01 10.93 23.01 11.64 C 23.01 12.61 22.34 14.13 21.89 14.91 L 20.88 13.46 C 21.13 12.92 21.33 12.14 21.33 11.65 C 21.33 10.67 20.98 9.83 20.29 9.14 C 19.60 8.45 18.76 8.10 17.78 8.10 C 16.88 8.10 16.02 8.47 15.37 9.06 L 13.98 8.07 C 14.98 7.06 16.34 6.41 17.78 6.41 Z"/> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M 24.71 11.64 C 24.71 11.86 24.79 12.06 24.95 12.22 C 25.11 12.38 25.31 12.46 25.53 12.46 L 27.57 12.46 C 27.83 12.46 28.04 12.38 28.20 12.23 C 28.36 12.07 28.44 11.88 28.44 11.64 C 28.44 11.39 28.36 11.18 28.19 11.02 C 28.02 10.86 27.82 10.78 27.57 10.78 L 25.53 10.78 C 25.30 10.78 25.10 10.86 24.94 11.03 C 24.79 11.20 24.71 11.41 24.71 11.64 Z"/> <path d="M1.56,16.88c0,1.33,0.46,2.47,1.39,3.43s2.06,1.46,3.4,1.53c0.11,0,0.17-0.06,0.17-0.17v-1.34c0-0.12-0.06-0.18-0.17-0.18
<path d="M 23.24 17.95 C 23.24 18.18 23.33 18.39 23.50 18.58 L 24.12 19.22 C 24.33 19.43 24.53 19.53 24.74 19.53 C 24.93 19.53 25.13 19.43 25.32 19.22 C 25.50 19.04 25.59 18.83 25.58 18.61 C 25.57 18.38 25.49 18.18 25.32 18.01 L 24.67 17.35 C 24.51 17.19 24.32 17.11 24.10 17.11 C 23.86 17.11 23.66 17.19 23.49 17.36 C 23.33 17.52 23.24 17.72 23.24 17.95 Z"/> c-0.85-0.04-1.57-0.38-2.17-1.02s-0.89-1.39-0.89-2.25c0-0.84,0.28-1.56,0.84-2.17s1.26-0.96,2.1-1.06l0.5-0.04
<path d="M 22.45 6.12 C 22.45 6.37 22.53 6.57 22.68 6.73 C 22.89 6.90 23.09 6.98 23.30 6.98 C 23.49 6.98 23.68 6.90 23.89 6.73 L 25.32 5.30 C 25.48 5.12 25.56 4.91 25.56 4.67 C 25.56 4.43 25.48 4.23 25.32 4.07 C 25.16 3.91 24.96 3.83 24.73 3.83 C 24.50 3.83 24.30 3.91 24.12 4.07 L 22.68 5.50 C 22.53 5.68 22.45 5.88 22.45 6.12 Z"/> c0.13,0,0.2-0.06,0.2-0.18l0.06-0.53c0.11-1.08,0.56-1.99,1.37-2.71c0.81-0.73,1.76-1.09,2.86-1.09c1.09,0,2.05,0.36,2.86,1.09
<path d="M 16.90 3.83 C 16.90 4.08 16.98 4.28 17.14 4.44 C 17.30 4.60 17.50 4.68 17.75 4.68 C 18.00 4.68 18.20 4.60 18.36 4.44 C 18.52 4.28 18.60 4.08 18.60 3.83 L 18.60 1.81 C 18.60 1.56 18.52 1.35 18.36 1.19 C 18.20 1.03 18.00 0.95 17.75 0.95 C 17.50 0.95 17.30 1.03 17.14 1.19 C 16.98 1.35 16.90 1.56 16.90 1.81 L 16.90 3.83 Z"/> c0.81,0.73,1.27,1.63,1.37,2.71l0.07,0.57c0,0.12,0.06,0.18,0.18,0.18h1.67c0.88,0,1.63,0.32,2.27,0.96
<path d="M 9.96 4.68 C 9.96 4.93 10.04 5.14 10.21 5.30 L 10.87 5.95 C 11.21 6.29 11.60 6.29 12.04 5.95 C 12.20 5.78 12.28 5.57 12.28 5.34 C 12.28 5.11 12.20 4.91 12.04 4.73 L 11.41 4.07 C 11.25 3.91 11.05 3.83 10.81 3.83 C 10.58 3.83 10.38 3.91 10.21 4.08 C 10.04 4.24 9.96 4.44 9.96 4.68 Z"/> c0.64,0.64,0.96,1.39,0.96,2.27c0,0.85-0.3,1.59-0.9,2.22s-1.32,0.98-2.16,1.05c-0.11,0-0.17,0.06-0.17,0.18v1.34
</g> c0,0.11,0.06,0.17,0.17,0.17c0.88-0.02,1.67-0.26,2.4-0.72s1.3-1.05,1.71-1.8c0.42-0.75,0.62-1.56,0.62-2.44
<g id="rain"> c0-0.71-0.14-1.37-0.41-1.96c0.76-0.94,1.13-2.03,1.13-3.28c0-0.71-0.14-1.39-0.41-2.04c-0.27-0.65-0.65-1.2-1.12-1.67
<path d="M 15.03 18.92 C 15.03 19.08 15.08 19.24 15.18 19.40 C 15.28 19.56 15.43 19.67 15.63 19.72 L 15.88 19.75 C 16.07 19.75 16.25 19.69 16.40 19.57 C 16.55 19.45 16.64 19.29 16.68 19.10 L 16.95 18.11 C 17.02 17.87 17.00 17.66 16.88 17.46 C 16.77 17.26 16.60 17.13 16.37 17.07 C 16.14 17.00 15.92 17.02 15.73 17.13 C 15.53 17.24 15.40 17.41 15.34 17.63 L 15.04 18.69 C 15.04 18.77 15.03 18.85 15.03 18.92 Z"/> C21,7.46,20.44,7.09,19.8,6.82c-0.65-0.28-1.33-0.41-2.04-0.41c-1.51,0-2.78,0.55-3.81,1.66c-0.79-0.43-1.7-0.64-2.73-0.64
<path d="M 13.63 23.68 C 13.65 24.06 13.86 24.33 14.26 24.51 L 14.51 24.55 C 14.67 24.55 14.83 24.50 14.98 24.39 C 15.13 24.28 15.24 24.12 15.30 23.89 L 15.59 22.88 C 15.65 22.64 15.62 22.42 15.50 22.22 C 15.38 22.02 15.20 21.89 14.97 21.85 C 14.76 21.78 14.56 21.80 14.35 21.92 C 14.14 22.04 14.01 22.21 13.94 22.43 L 13.67 23.45 C 13.66 23.47 13.66 23.50 13.65 23.53 C 13.64 23.56 13.64 23.59 13.63 23.61 C 13.62 23.63 13.63 23.66 13.63 23.68 Z"/> c-1.41,0-2.66,0.44-3.75,1.31s-1.77,1.99-2.07,3.35c-1.12,0.26-2.05,0.83-2.77,1.72C1.92,14.7,1.56,15.73,1.56,16.88z M6.97,23.58
<path d="M 10.85 21.96 C 10.85 22.13 10.90 22.30 11.01 22.47 C 11.12 22.64 11.27 22.75 11.48 22.82 C 11.71 22.89 11.92 22.87 12.12 22.77 C 12.31 22.67 12.45 22.48 12.52 22.21 L 12.76 21.20 C 12.83 20.97 12.81 20.75 12.70 20.55 C 12.59 20.35 12.42 20.21 12.20 20.14 C 11.95 20.07 11.72 20.10 11.52 20.22 C 11.32 20.34 11.19 20.52 11.15 20.75 L 10.87 21.78 C 10.85 21.81 10.85 21.87 10.85 21.96 Z"/> c0,0.18,0.05,0.36,0.16,0.53c0.11,0.18,0.26,0.29,0.45,0.36c0.19,0.07,0.4,0.05,0.61-0.06c0.22-0.11,0.36-0.29,0.44-0.55l0.25-1.05
<path d="M 9.50 26.75 C 9.50 26.91 9.56 27.08 9.67 27.25 C 9.78 27.42 9.95 27.54 10.16 27.61 C 10.17 27.61 10.20 27.61 10.26 27.62 C 10.32 27.63 10.37 27.63 10.41 27.63 C 10.55 27.63 10.67 27.61 10.78 27.56 C 10.97 27.48 11.11 27.29 11.19 26.98 L 11.46 25.99 C 11.53 25.76 11.51 25.54 11.39 25.34 C 11.27 25.14 11.10 25.00 10.88 24.94 C 10.65 24.87 10.43 24.89 10.23 25.01 C 10.03 25.13 9.89 25.30 9.83 25.52 L 9.55 26.54 C 9.51 26.63 9.50 26.70 9.50 26.75 Z"/> c0.07-0.21,0.05-0.41-0.07-0.62c-0.12-0.21-0.29-0.35-0.51-0.42c-0.25-0.06-0.47-0.03-0.67,0.08s-0.32,0.3-0.37,0.53l-0.28,0.99
<path d="M 8.28 18.86 C 8.28 19.24 8.49 19.50 8.92 19.65 C 9.14 19.73 9.35 19.71 9.56 19.60 C 9.77 19.49 9.90 19.31 9.97 19.07 L 10.21 18.04 C 10.28 17.83 10.26 17.63 10.14 17.42 C 10.03 17.21 9.86 17.07 9.63 17.00 C 9.39 16.94 9.16 16.96 8.96 17.08 C 8.76 17.20 8.64 17.37 8.59 17.60 L 8.29 18.62 C 8.29 18.70 8.28 18.78 8.28 18.86 Z"/> C6.98,23.42,6.97,23.49,6.97,23.58z M8.28,18.86c0,0.38,0.21,0.64,0.64,0.79c0.22,0.08,0.43,0.06,0.64-0.05
<path d="M 6.97 23.58 C 6.97 23.76 7.02 23.94 7.13 24.11 C 7.24 24.29 7.39 24.40 7.58 24.47 C 7.77 24.54 7.98 24.52 8.19 24.41 C 8.41 24.30 8.55 24.12 8.63 23.86 L 8.88 22.81 C 8.95 22.60 8.93 22.40 8.81 22.19 C 8.69 21.98 8.52 21.84 8.30 21.77 C 8.05 21.71 7.83 21.74 7.63 21.85 C 7.43 21.96 7.31 22.15 7.26 22.38 L 6.98 23.37 C 6.98 23.42 6.97 23.49 6.97 23.58 Z"/> c0.21-0.11,0.34-0.29,0.41-0.53l0.24-1.03c0.07-0.21,0.05-0.41-0.07-0.62c-0.11-0.21-0.28-0.35-0.51-0.42
</g> c-0.24-0.06-0.47-0.04-0.67,0.08s-0.32,0.29-0.37,0.52l-0.3,1.02C8.29,18.7,8.28,18.78,8.28,18.86z M9.5,26.75
c0,0.16,0.06,0.33,0.17,0.5c0.11,0.17,0.28,0.29,0.49,0.36c0.01,0,0.04,0,0.1,0.01c0.06,0.01,0.11,0.01,0.15,0.01
c0.14,0,0.26-0.02,0.37-0.07c0.19-0.08,0.33-0.27,0.41-0.58l0.27-0.99c0.07-0.23,0.05-0.45-0.07-0.65c-0.12-0.2-0.29-0.34-0.51-0.4
c-0.23-0.07-0.45-0.05-0.65,0.07c-0.2,0.12-0.34,0.29-0.4,0.51l-0.28,1.02C9.51,26.63,9.5,26.7,9.5,26.75z M9.96,4.68
c0,0.25,0.08,0.46,0.25,0.62l0.66,0.65c0.34,0.34,0.73,0.34,1.17,0c0.16-0.17,0.24-0.38,0.24-0.61c0-0.23-0.08-0.43-0.24-0.61
l-0.63-0.66c-0.16-0.16-0.36-0.24-0.6-0.24c-0.23,0-0.43,0.08-0.6,0.25C10.04,4.24,9.96,4.44,9.96,4.68z M10.85,21.96
c0,0.17,0.05,0.34,0.16,0.51c0.11,0.17,0.26,0.28,0.47,0.35c0.23,0.07,0.44,0.05,0.64-0.05c0.19-0.1,0.33-0.29,0.4-0.56l0.24-1.01
c0.07-0.23,0.05-0.45-0.06-0.65c-0.11-0.2-0.28-0.34-0.5-0.41c-0.25-0.07-0.48-0.04-0.68,0.08c-0.2,0.12-0.33,0.3-0.37,0.53
l-0.28,1.03C10.85,21.81,10.85,21.87,10.85,21.96z M13.63,23.68c0.02,0.38,0.23,0.65,0.63,0.83l0.25,0.04
c0.16,0,0.32-0.05,0.47-0.16c0.15-0.11,0.26-0.27,0.32-0.5l0.29-1.01c0.06-0.24,0.03-0.46-0.09-0.66c-0.12-0.2-0.3-0.33-0.53-0.37
c-0.21-0.07-0.41-0.05-0.62,0.07s-0.34,0.29-0.41,0.51l-0.27,1.02c-0.01,0.02-0.01,0.05-0.02,0.08s-0.01,0.06-0.02,0.08
S13.63,23.66,13.63,23.68z M15.03,18.92c0,0.16,0.05,0.32,0.15,0.48c0.1,0.16,0.25,0.27,0.45,0.32l0.25,0.03
c0.19,0,0.37-0.06,0.52-0.18s0.24-0.28,0.28-0.47l0.27-0.99c0.07-0.24,0.05-0.45-0.07-0.65c-0.11-0.2-0.28-0.33-0.51-0.39
c-0.23-0.07-0.45-0.05-0.64,0.06c-0.2,0.11-0.33,0.28-0.39,0.5l-0.3,1.06C15.04,18.77,15.03,18.85,15.03,18.92z M15.36,9.06
c0.66-0.64,1.46-0.96,2.4-0.96c0.98,0,1.82,0.35,2.51,1.04c0.69,0.69,1.04,1.53,1.04,2.51c0,0.56-0.16,1.15-0.47,1.76
c-0.96-0.96-2.11-1.43-3.47-1.43h-0.34C16.77,10.84,16.21,9.87,15.36,9.06z M16.9,3.83c0,0.25,0.08,0.45,0.24,0.61
c0.16,0.16,0.36,0.24,0.61,0.24s0.45-0.08,0.61-0.24c0.16-0.16,0.24-0.36,0.24-0.61V1.81c0-0.25-0.08-0.46-0.24-0.62
c-0.16-0.16-0.36-0.24-0.61-0.24s-0.45,0.08-0.61,0.24c-0.16,0.16-0.24,0.37-0.24,0.62V3.83z M22.45,6.12
c0,0.25,0.08,0.45,0.23,0.61c0.21,0.17,0.41,0.25,0.62,0.25c0.19,0,0.38-0.08,0.59-0.25l1.43-1.43c0.16-0.18,0.24-0.39,0.24-0.63
c0-0.24-0.08-0.44-0.24-0.6c-0.16-0.16-0.36-0.24-0.59-0.24s-0.43,0.08-0.61,0.24L22.68,5.5C22.53,5.68,22.45,5.88,22.45,6.12z
M23.24,17.95c0,0.23,0.09,0.44,0.26,0.63l0.62,0.64c0.21,0.21,0.41,0.31,0.62,0.31c0.19,0,0.39-0.1,0.58-0.31
c0.18-0.18,0.27-0.39,0.26-0.61c-0.01-0.23-0.09-0.43-0.26-0.6l-0.65-0.66c-0.16-0.16-0.35-0.24-0.57-0.24
c-0.24,0-0.44,0.08-0.61,0.25C23.33,17.52,23.24,17.72,23.24,17.95z M24.71,11.64c0,0.22,0.08,0.42,0.24,0.58
c0.16,0.16,0.36,0.24,0.58,0.24h2.04c0.26,0,0.47-0.08,0.63-0.23c0.16-0.16,0.24-0.35,0.24-0.59c0-0.25-0.08-0.46-0.25-0.62
c-0.17-0.16-0.37-0.24-0.62-0.24h-2.04c-0.23,0-0.43,0.08-0.59,0.25C24.79,11.2,24.71,11.41,24.71,11.64z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

@@ -1,20 +1,40 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 2.64 13.85 C 3.35 12.96 4.26 12.38 5.38 12.10 C 5.69 10.75 6.38 9.63 7.47 8.76 C 8.56 7.89 9.80 7.45 11.21 7.45 C 12.19 7.45 13.09 7.67 13.90 8.11 C 13.93 8.08 15.31 9.05 15.30 9.06 C 16.12 9.85 16.68 10.83 16.98 12.00 L 17.30 12.00 C 18.66 12.00 19.82 12.48 20.77 13.44 C 20.82 13.36 22.01 14.68 21.85 14.88 C 22.14 15.48 22.28 16.15 22.28 16.91 C 22.28 18.23 21.82 19.36 20.89 20.32 C 19.96 21.28 18.84 21.78 17.51 21.82 C 17.38 21.82 17.32 21.76 17.32 21.65 L 17.32 20.32 C 17.32 20.19 17.39 20.13 17.51 20.13 C 18.35 20.08 19.08 19.74 19.68 19.11 C 20.28 18.47 20.58 17.74 20.58 16.90 C 20.58 16.01 20.26 15.25 19.62 14.61 C 18.98 13.97 18.21 13.65 17.31 13.65 L 15.70 13.65 C 15.59 13.65 15.53 13.59 15.53 13.48 L 15.46 12.90 C 15.36 11.83 14.90 10.93 14.08 10.20 C 13.27 9.47 12.32 9.11 11.23 9.11 C 10.13 9.11 9.18 9.47 8.38 10.20 C 7.58 10.93 7.13 11.84 7.02 12.93 L 6.94 13.44 C 6.94 13.57 6.88 13.63 6.76 13.63 L 6.23 13.69 C 5.39 13.79 4.70 14.15 4.13 14.76 C 3.56 15.38 3.28 16.10 3.28 16.92 C 3.28 17.76 3.58 18.49 4.18 19.13 C 4.78 19.77 5.51 20.11 6.36 20.15 C 6.47 20.15 6.53 20.22 6.53 20.34 L 6.53 21.67 C 6.53 21.78 6.47 21.84 6.36 21.84 C 5.50 21.82 4.69 21.58 3.96 21.13 C 3.22 20.68 2.64 20.08 2.22 19.34 C 1.79 18.60 1.58 17.79 1.58 16.93 C 1.58 15.77 1.93 14.75 2.64 13.85 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<g id="sun"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<path d="M 17.77 6.38 C 18.71 6.38 19.59 6.61 20.39 7.08 C 21.19 7.55 21.83 8.19 22.30 8.99 C 22.77 9.79 23.00 10.66 23.00 11.60 C 23.00 12.58 22.65 13.82 21.87 14.96 C 21.53 15.47 20.78 13.48 20.78 13.48 C 21.03 12.96 21.28 12.14 21.28 11.60 C 21.28 10.64 20.94 9.80 20.25 9.11 C 19.57 8.42 18.74 8.07 17.77 8.07 C 16.83 8.07 15.99 8.45 15.30 9.09 L 13.94 8.12 C 14.97 7.03 16.27 6.38 17.77 6.38 Z"/> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M 24.67 11.60 C 24.67 11.84 24.76 12.03 24.93 12.19 C 25.10 12.37 25.31 12.46 25.55 12.46 L 27.57 12.46 C 27.80 12.46 28.00 12.38 28.17 12.21 C 28.34 12.04 28.42 11.84 28.42 11.60 C 28.42 11.36 28.34 11.16 28.17 11.00 C 28.00 10.84 27.80 10.75 27.57 10.75 L 25.55 10.75 C 25.31 10.75 25.11 10.83 24.93 11.00 C 24.75 11.17 24.67 11.37 24.67 11.60 Z"/> <path d="M1.58,16.93c0,0.86,0.21,1.67,0.64,2.41c0.42,0.74,1,1.34,1.74,1.79c0.73,0.45,1.54,0.69,2.4,0.71
<path d="M 23.22 17.91 C 23.22 18.16 23.30 18.37 23.46 18.53 L 24.10 19.16 C 24.34 19.32 24.56 19.40 24.74 19.40 C 24.95 19.40 25.13 19.31 25.30 19.14 C 25.47 18.97 25.55 18.76 25.55 18.53 C 25.55 18.30 25.46 18.11 25.29 17.95 L 24.67 17.30 C 24.49 17.14 24.29 17.06 24.06 17.06 C 23.83 17.06 23.63 17.14 23.47 17.31 C 23.30 17.47 23.22 17.67 23.22 17.91 Z"/> c0.11,0,0.17-0.06,0.17-0.17v-1.33c0-0.12-0.06-0.19-0.17-0.19c-0.85-0.04-1.58-0.38-2.18-1.02s-0.9-1.37-0.9-2.21
<path d="M 22.42 6.11 C 22.42 6.34 22.50 6.54 22.67 6.70 C 22.82 6.86 23.01 6.94 23.23 6.96 C 23.45 6.98 23.66 6.89 23.85 6.70 L 25.28 5.27 C 25.46 5.09 25.54 4.89 25.54 4.66 C 25.54 4.42 25.45 4.22 25.28 4.05 C 25.11 3.88 24.91 3.80 24.68 3.80 C 24.46 3.80 24.27 3.88 24.10 4.05 L 22.67 5.51 C 22.50 5.67 22.42 5.87 22.42 6.11 Z"/> c0-0.82,0.28-1.54,0.85-2.16c0.57-0.61,1.26-0.97,2.1-1.07l0.53-0.06c0.12,0,0.18-0.06,0.18-0.19l0.08-0.51
<path d="M 16.90 3.84 C 16.90 4.07 16.98 4.27 17.15 4.42 C 17.32 4.57 17.52 4.65 17.76 4.65 C 18.00 4.65 18.19 4.57 18.35 4.42 C 18.51 4.26 18.58 4.07 18.58 3.84 L 18.58 1.80 C 18.58 1.56 18.50 1.36 18.34 1.19 C 18.18 1.02 18.00 0.94 17.77 0.94 C 17.54 0.94 17.34 1.03 17.17 1.20 C 17.00 1.37 16.91 1.57 16.91 1.80 L 16.91 3.84 L 16.90 3.84 Z"/> c0.11-1.09,0.56-2,1.36-2.73c0.8-0.73,1.75-1.09,2.85-1.09c1.09,0,2.04,0.36,2.85,1.09c0.82,0.73,1.28,1.63,1.38,2.7l0.07,0.58
<path d="M 9.97 4.68 C 9.97 4.92 10.05 5.12 10.21 5.27 L 10.87 5.93 C 11.03 6.09 11.21 6.18 11.40 6.18 C 11.61 6.21 11.81 6.14 12.01 5.96 C 12.21 5.78 12.31 5.57 12.31 5.33 C 12.31 5.09 12.23 4.87 12.07 4.69 L 11.43 4.08 C 11.28 3.91 11.09 3.83 10.85 3.83 C 10.60 3.83 10.39 3.91 10.22 4.08 C 10.05 4.24 9.97 4.44 9.97 4.68 Z"/> c0,0.11,0.06,0.17,0.17,0.17h1.61c0.9,0,1.67,0.32,2.31,0.96c0.64,0.64,0.96,1.4,0.96,2.29c0,0.84-0.3,1.57-0.9,2.21
</g> c-0.6,0.63-1.33,0.97-2.17,1.02c-0.12,0-0.19,0.06-0.19,0.19v1.33c0,0.11,0.06,0.17,0.19,0.17c1.33-0.04,2.45-0.54,3.38-1.5
<g id="snow"> c0.93-0.96,1.39-2.09,1.39-3.41c0-0.76-0.14-1.43-0.43-2.03C22.6,13.95,23,12.85,23,11.6c0-0.94-0.23-1.81-0.7-2.61
<path d="M 14.32 24.61 C 14.32 24.82 14.40 25.01 14.55 25.18 C 14.73 25.34 14.93 25.42 15.15 25.42 C 15.39 25.42 15.58 25.34 15.74 25.19 C 15.90 25.03 15.97 24.84 15.97 24.61 C 15.97 24.37 15.89 24.18 15.73 24.02 C 15.57 23.86 15.38 23.79 15.14 23.79 C 14.90 23.79 14.70 23.87 14.54 24.03 C 14.40 24.18 14.32 24.38 14.32 24.61 Z"/> c-0.47-0.8-1.11-1.44-1.91-1.91s-1.68-0.7-2.62-0.7c-1.54,0-2.83,0.58-3.87,1.73c-0.81-0.44-1.71-0.66-2.69-0.66
<path d="M 14.32 20.98 C 14.32 21.22 14.40 21.42 14.56 21.59 C 14.72 21.76 14.92 21.84 15.15 21.84 C 15.38 21.84 15.58 21.76 15.74 21.59 C 15.90 21.42 15.98 21.22 15.98 20.98 C 15.98 20.75 15.90 20.56 15.74 20.40 C 15.58 20.24 15.39 20.16 15.15 20.16 C 14.91 20.16 14.72 20.24 14.56 20.40 C 14.40 20.56 14.32 20.76 14.32 20.98 Z"/> c-1.41,0-2.65,0.44-3.74,1.31s-1.78,1.99-2.09,3.34c-1.12,0.28-2.03,0.86-2.74,1.75C1.93,14.75,1.58,15.77,1.58,16.93z M7.92,20.98
<path d="M 11.10 26.56 C 11.10 26.78 11.18 26.97 11.34 27.13 C 11.51 27.30 11.70 27.38 11.92 27.38 C 12.16 27.38 12.36 27.30 12.52 27.15 C 12.69 26.99 12.77 26.80 12.77 26.56 C 12.77 26.32 12.69 26.12 12.52 25.96 C 12.35 25.79 12.15 25.71 11.92 25.71 C 11.70 25.71 11.51 25.79 11.34 25.96 C 11.18 26.13 11.10 26.33 11.10 26.56 Z"/> c0,0.24,0.08,0.44,0.24,0.61c0.16,0.17,0.35,0.25,0.59,0.25c0.23,0,0.43-0.08,0.59-0.25c0.16-0.17,0.24-0.37,0.24-0.61
<path d="M 11.10 19.30 C 11.10 19.53 11.18 19.72 11.34 19.88 C 11.50 20.04 11.70 20.12 11.92 20.12 C 12.16 20.12 12.36 20.04 12.52 19.88 C 12.69 19.72 12.77 19.53 12.77 19.29 C 12.77 19.06 12.69 18.86 12.52 18.70 C 12.35 18.54 12.15 18.46 11.92 18.46 C 11.69 18.46 11.50 18.54 11.34 18.70 C 11.18 18.86 11.10 19.07 11.10 19.30 Z"/> c0-0.23-0.08-0.42-0.24-0.58s-0.35-0.24-0.59-0.24c-0.23,0-0.43,0.08-0.59,0.24S7.92,20.76,7.92,20.98z M7.92,24.61
<path d="M 11.10 22.90 C 11.10 23.12 11.18 23.32 11.34 23.50 C 11.50 23.66 11.70 23.74 11.92 23.74 C 12.16 23.74 12.36 23.66 12.52 23.50 C 12.68 23.34 12.77 23.14 12.77 22.90 C 12.77 22.67 12.69 22.47 12.52 22.30 C 12.35 22.13 12.15 22.05 11.92 22.05 C 11.69 22.05 11.50 22.13 11.34 22.30 C 11.18 22.47 11.10 22.67 11.10 22.90 Z"/> c0,0.21,0.08,0.4,0.24,0.57c0.18,0.16,0.37,0.24,0.58,0.24c0.24,0,0.43-0.08,0.59-0.23c0.16-0.16,0.23-0.35,0.23-0.58
<path d="M 7.92 24.61 C 7.92 24.82 8.00 25.01 8.16 25.18 C 8.34 25.34 8.53 25.42 8.74 25.42 C 8.98 25.42 9.17 25.34 9.33 25.19 C 9.49 25.03 9.56 24.84 9.56 24.61 C 9.56 24.37 9.48 24.18 9.32 24.02 C 9.16 23.86 8.97 23.79 8.73 23.79 C 8.50 23.79 8.30 23.87 8.14 24.02 C 8.00 24.17 7.92 24.37 7.92 24.61 Z"/> c0-0.24-0.08-0.43-0.24-0.59c-0.16-0.16-0.35-0.23-0.59-0.23c-0.23,0-0.43,0.08-0.59,0.23C8,24.17,7.92,24.37,7.92,24.61z
<path d="M 7.92 20.98 C 7.92 21.22 8.00 21.42 8.16 21.59 C 8.32 21.76 8.51 21.84 8.75 21.84 C 8.98 21.84 9.18 21.76 9.34 21.59 C 9.50 21.42 9.58 21.22 9.58 20.98 C 9.58 20.75 9.50 20.56 9.34 20.40 C 9.18 20.24 8.99 20.16 8.75 20.16 C 8.52 20.16 8.32 20.24 8.16 20.40 C 8.00 20.56 7.92 20.76 7.92 20.98 Z"/> M9.97,4.68c0,0.24,0.08,0.44,0.24,0.59l0.66,0.66c0.16,0.16,0.34,0.25,0.53,0.25c0.21,0.03,0.41-0.04,0.61-0.22
</g> c0.2-0.18,0.3-0.39,0.3-0.63c0-0.24-0.08-0.46-0.24-0.64l-0.64-0.61c-0.15-0.17-0.34-0.25-0.58-0.25c-0.25,0-0.46,0.08-0.63,0.25
C10.05,4.24,9.97,4.44,9.97,4.68z M11.1,22.9c0,0.22,0.08,0.42,0.24,0.6c0.16,0.16,0.36,0.24,0.58,0.24c0.24,0,0.44-0.08,0.6-0.24
s0.25-0.36,0.25-0.6c0-0.23-0.08-0.43-0.25-0.6s-0.37-0.25-0.6-0.25c-0.23,0-0.42,0.08-0.58,0.25S11.1,22.67,11.1,22.9z M11.1,19.3
c0,0.23,0.08,0.42,0.24,0.58s0.36,0.24,0.58,0.24c0.24,0,0.44-0.08,0.6-0.24c0.17-0.16,0.25-0.35,0.25-0.59
c0-0.23-0.08-0.43-0.25-0.59s-0.37-0.24-0.6-0.24c-0.23,0-0.42,0.08-0.58,0.24S11.1,19.07,11.1,19.3z M11.1,26.56
c0,0.22,0.08,0.41,0.24,0.57c0.17,0.17,0.36,0.25,0.58,0.25c0.24,0,0.44-0.08,0.6-0.23c0.17-0.16,0.25-0.35,0.25-0.59
s-0.08-0.44-0.25-0.6c-0.17-0.17-0.37-0.25-0.6-0.25c-0.22,0-0.41,0.08-0.58,0.25C11.18,26.13,11.1,26.33,11.1,26.56z M14.32,20.98
c0,0.24,0.08,0.44,0.24,0.61c0.16,0.17,0.36,0.25,0.59,0.25s0.43-0.08,0.59-0.25c0.16-0.17,0.24-0.37,0.24-0.61
c0-0.23-0.08-0.42-0.24-0.58s-0.35-0.24-0.59-0.24s-0.43,0.08-0.59,0.24S14.32,20.76,14.32,20.98z M14.32,24.61
c0,0.21,0.08,0.4,0.23,0.57c0.18,0.16,0.38,0.24,0.6,0.24c0.24,0,0.43-0.08,0.59-0.23c0.16-0.16,0.23-0.35,0.23-0.58
c0-0.24-0.08-0.43-0.24-0.59c-0.16-0.16-0.35-0.23-0.59-0.23c-0.24,0-0.44,0.08-0.6,0.24C14.4,24.18,14.32,24.38,14.32,24.61z
M15.3,9.06c0.69-0.66,1.51-0.99,2.47-0.99c0.97,0,1.8,0.35,2.48,1.04c0.69,0.69,1.03,1.53,1.03,2.49c0,0.62-0.17,1.24-0.51,1.84
C19.82,12.48,18.66,12,17.3,12h-0.32C16.68,10.83,16.12,9.85,15.3,9.06z M16.9,3.84c0,0.23,0.08,0.43,0.25,0.58s0.37,0.23,0.61,0.23
s0.43-0.08,0.59-0.23c0.16-0.16,0.23-0.35,0.23-0.58V1.8c0-0.24-0.08-0.44-0.24-0.61S18,0.94,17.77,0.94s-0.43,0.09-0.6,0.26
c-0.17,0.17-0.26,0.37-0.26,0.6V3.84z M22.42,6.11c0,0.23,0.08,0.43,0.25,0.59c0.15,0.16,0.34,0.24,0.56,0.26s0.43-0.07,0.62-0.26
l1.43-1.43c0.18-0.18,0.26-0.38,0.26-0.61c0-0.24-0.09-0.44-0.26-0.61c-0.17-0.17-0.37-0.25-0.6-0.25c-0.22,0-0.41,0.08-0.58,0.25
l-1.43,1.46C22.5,5.67,22.42,5.87,22.42,6.11z M23.22,17.91c0,0.25,0.08,0.46,0.24,0.62l0.64,0.63c0.24,0.16,0.46,0.24,0.64,0.24
c0.21,0,0.39-0.09,0.56-0.26c0.17-0.17,0.25-0.38,0.25-0.61c0-0.23-0.09-0.42-0.26-0.58l-0.62-0.65c-0.18-0.16-0.38-0.24-0.61-0.24
s-0.43,0.08-0.59,0.25C23.3,17.47,23.22,17.67,23.22,17.91z M24.67,11.6c0,0.24,0.09,0.43,0.26,0.59c0.17,0.18,0.38,0.27,0.62,0.27
h2.02c0.23,0,0.43-0.08,0.6-0.25s0.25-0.37,0.25-0.61c0-0.24-0.08-0.44-0.25-0.6s-0.37-0.25-0.6-0.25h-2.02
c-0.24,0-0.44,0.08-0.62,0.25S24.67,11.37,24.67,11.6z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

@@ -1,18 +1,38 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 2.56 13.78 C 3.28 12.88 4.19 12.30 5.30 12.04 C 5.60 10.67 6.31 9.55 7.40 8.67 C 8.49 7.79 9.75 7.35 11.17 7.35 C 12.18 7.35 13.08 7.57 13.89 8.00 C 13.95 7.94 15.36 8.98 15.31 9.02 C 16.15 9.78 16.72 10.76 17.01 11.95 L 17.32 11.95 C 18.71 11.95 19.88 12.43 20.84 13.39 C 20.88 13.32 22.04 14.66 21.88 14.86 C 22.17 15.48 22.31 16.15 22.31 16.88 C 22.31 17.76 22.10 18.58 21.67 19.33 C 21.24 20.08 20.66 20.69 19.93 21.14 C 19.20 21.60 18.39 21.84 17.51 21.86 C 17.38 21.86 17.31 21.80 17.31 21.69 L 17.31 20.35 C 17.31 20.23 17.38 20.17 17.51 20.17 C 18.37 20.12 19.09 19.78 19.69 19.14 C 20.29 18.50 20.59 17.75 20.59 16.88 C 20.59 15.99 20.27 15.23 19.62 14.59 C 18.97 13.95 18.20 13.63 17.31 13.63 L 15.70 13.63 C 15.58 13.63 15.52 13.57 15.52 13.46 L 15.44 12.87 C 15.33 11.79 14.86 10.88 14.04 10.15 C 13.22 9.42 12.27 9.05 11.18 9.05 C 10.08 9.05 9.13 9.42 8.32 10.15 C 7.51 10.88 7.06 11.79 6.95 12.87 L 6.88 13.46 C 6.85 13.55 6.78 13.60 6.66 13.60 L 6.15 13.63 C 5.31 13.73 4.60 14.09 4.04 14.70 C 3.48 15.31 3.20 16.04 3.20 16.88 C 3.20 17.64 3.43 18.31 3.90 18.90 C 4.31 19.44 5.07 19.86 5.69 20.05 L 5.07 21.67 C 4.10 21.36 3.12 20.71 2.49 19.88 C 1.82 19.00 1.49 18.00 1.49 16.88 C 1.49 15.73 1.85 14.70 2.56 13.78 L 2.56 13.78 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<path id="lightning" d="M 5.68 20.06 L 6.75 17.18 C 6.81 17.08 6.89 17.03 6.98 17.03 L 9.94 17.03 C 10.11 17.03 10.15 17.11 10.08 17.25 L 7.59 21.90 L 9.78 21.90 C 9.85 21.90 9.90 21.92 9.92 21.97 C 9.94 22.02 9.94 22.07 9.90 22.11 L 5.54 27.77 L 5.25 27.77 L 6.68 23.56 L 4.55 23.56 C 4.41 23.56 4.36 23.48 4.41 23.34 L 5.07 21.64 C 5.01 21.62 5.60 20.04 5.68 20.06 L 5.68 20.06 Z"/> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<g id="rain"> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M 15.21 18.86 C 15.21 19.04 15.26 19.20 15.37 19.36 C 15.48 19.52 15.64 19.63 15.86 19.69 C 16.03 19.75 16.23 19.73 16.47 19.64 C 16.67 19.55 16.81 19.36 16.90 19.07 L 17.17 18.07 C 17.23 17.82 17.21 17.60 17.09 17.40 C 16.97 17.20 16.80 17.08 16.56 17.03 C 16.33 16.96 16.12 16.98 15.92 17.09 C 15.72 17.20 15.59 17.37 15.52 17.59 L 15.23 18.65 C 15.22 18.79 15.21 18.86 15.21 18.86 Z"/> <path d="M1.49,16.88c0,1.12,0.33,2.12,1,3s1.53,1.47,2.58,1.76l-0.66,1.7c-0.05,0.14,0,0.22,0.14,0.22h2.13l-1.43,4.21h0.29
<path d="M 13.84 23.68 C 13.84 23.82 13.87 23.96 13.94 24.07 C 14.07 24.28 14.25 24.43 14.48 24.50 C 14.59 24.54 14.69 24.56 14.76 24.56 C 14.89 24.56 14.99 24.54 15.07 24.48 C 15.27 24.41 15.42 24.21 15.52 23.88 L 15.77 22.87 C 15.84 22.63 15.82 22.42 15.70 22.22 C 15.59 22.02 15.42 21.89 15.19 21.83 C 14.96 21.76 14.74 21.78 14.54 21.90 C 14.34 22.01 14.20 22.18 14.13 22.41 L 13.85 23.45 C 13.85 23.53 13.84 23.61 13.84 23.68 Z"/> l4.36-5.66c0.04-0.04,0.04-0.09,0.02-0.14C9.9,21.92,9.85,21.9,9.78,21.9H7.59l2.49-4.65c0.07-0.14,0.03-0.22-0.14-0.22H6.98
<path d="M 11.01 22.00 C 11.00 22.16 11.05 22.32 11.15 22.47 C 11.25 22.62 11.41 22.73 11.63 22.79 C 11.84 22.86 12.05 22.84 12.25 22.73 C 12.45 22.62 12.59 22.43 12.67 22.17 L 12.97 21.14 C 13.04 20.92 13.01 20.71 12.89 20.51 C 12.77 20.31 12.59 20.17 12.35 20.10 C 12.12 20.03 11.91 20.05 11.71 20.17 C 11.51 20.29 11.37 20.46 11.30 20.70 L 11.06 21.75 C 11.03 21.90 11.01 21.98 11.01 22.00 Z"/> c-0.09,0-0.17,0.05-0.23,0.15l-1.07,2.88C4.96,19.88,4.36,19.5,3.9,18.9c-0.47-0.59-0.7-1.26-0.7-2.02c0-0.84,0.28-1.57,0.84-2.18
<path d="M 9.67 26.80 C 9.67 26.95 9.72 27.11 9.83 27.27 C 9.94 27.43 10.09 27.54 10.29 27.61 C 10.40 27.64 10.49 27.65 10.54 27.65 C 10.69 27.65 10.82 27.62 10.92 27.57 C 11.13 27.49 11.28 27.30 11.35 27.00 L 11.62 25.97 C 11.68 25.72 11.65 25.50 11.54 25.30 C 11.43 25.10 11.24 24.98 11.01 24.93 C 10.80 24.86 10.60 24.89 10.39 25.00 C 10.18 25.12 10.04 25.29 9.97 25.52 L 9.72 26.56 C 9.69 26.70 9.67 26.78 9.67 26.80 Z"/> c0.56-0.61,1.27-0.97,2.11-1.07l0.51-0.03c0.12,0,0.19-0.05,0.22-0.14l0.07-0.59c0.11-1.08,0.56-1.99,1.37-2.72s1.76-1.1,2.86-1.1
</g> c1.09,0,2.04,0.37,2.86,1.1s1.29,1.64,1.4,2.72l0.08,0.59c0,0.11,0.06,0.17,0.18,0.17h1.61c0.89,0,1.66,0.32,2.31,0.96
<g id="sun"> s0.97,1.4,0.97,2.29c0,0.87-0.3,1.62-0.9,2.26s-1.32,0.98-2.18,1.03c-0.13,0-0.2,0.06-0.2,0.18v1.34c0,0.11,0.07,0.17,0.2,0.17
<path d="M 15.68 6.72 C 16.36 6.42 17.06 6.27 17.78 6.27 C 18.73 6.27 19.61 6.51 20.42 6.98 C 21.23 7.45 21.87 8.09 22.34 8.90 C 22.81 9.71 23.05 10.59 23.05 11.54 C 23.05 12.51 22.34 14.04 21.86 14.84 L 20.81 13.46 C 21.05 12.97 21.34 12.12 21.34 11.55 C 21.34 10.57 20.99 9.73 20.30 9.05 C 19.61 8.36 18.77 8.02 17.79 8.02 C 16.89 8.02 15.93 8.45 15.29 9.00 L 13.87 7.98 C 14.33 7.54 15.08 6.98 15.69 6.72 L 15.68 6.72 Z"/> c0.88-0.02,1.69-0.26,2.42-0.72c0.73-0.45,1.31-1.06,1.74-1.81s0.64-1.57,0.64-2.45c0-0.73-0.14-1.4-0.43-2.02
<path d="M 24.73 11.58 C 24.73 11.82 24.82 12.02 24.99 12.17 C 25.15 12.35 25.35 12.43 25.59 12.43 L 27.65 12.43 C 27.89 12.43 28.09 12.35 28.26 12.18 C 28.43 12.01 28.51 11.81 28.51 11.58 C 28.51 11.35 28.43 11.14 28.26 10.98 C 28.09 10.82 27.89 10.74 27.65 10.74 L 25.59 10.74 C 25.35 10.74 25.14 10.82 24.98 10.98 C 24.81 11.14 24.73 11.34 24.73 11.58 Z"/> c0.76-0.96,1.14-2.06,1.14-3.29c0-0.95-0.24-1.83-0.71-2.64c-0.47-0.81-1.11-1.45-1.92-1.92c-0.81-0.47-1.69-0.71-2.64-0.71
<path d="M 23.26 17.95 C 23.26 18.18 23.34 18.38 23.51 18.55 L 24.16 19.18 C 24.34 19.35 24.55 19.43 24.78 19.43 L 24.80 19.45 C 25.02 19.45 25.20 19.36 25.34 19.18 C 25.52 19.02 25.60 18.82 25.60 18.58 C 25.60 18.35 25.51 18.15 25.34 17.97 L 24.72 17.35 C 24.54 17.17 24.34 17.08 24.11 17.08 C 23.87 17.08 23.67 17.17 23.51 17.34 C 23.35 17.51 23.26 17.72 23.26 17.95 Z"/> c-0.72,0-1.42,0.15-2.1,0.45c-0.68,0.3-1.26,0.72-1.76,1.25c-0.81-0.43-1.71-0.65-2.72-0.65c-1.42,0-2.68,0.44-3.77,1.32
<path d="M 22.49 6.04 C 22.49 6.28 22.57 6.48 22.72 6.64 C 22.86 6.80 23.04 6.88 23.27 6.90 C 23.50 6.92 23.71 6.83 23.90 6.64 L 25.34 5.20 C 25.52 5.04 25.60 4.84 25.60 4.60 C 25.60 4.36 25.51 4.16 25.34 4.00 C 25.18 3.82 24.98 3.74 24.74 3.74 C 24.51 3.74 24.32 3.83 24.16 4.00 L 22.72 5.44 C 22.56 5.59 22.49 5.79 22.49 6.04 Z"/> s-1.8,2-2.1,3.37c-1.11,0.26-2.02,0.84-2.74,1.74C1.85,14.7,1.49,15.73,1.49,16.88z M9.67,26.8c0,0.15,0.05,0.31,0.16,0.47
<path d="M 16.91 3.75 C 16.91 3.99 16.99 4.19 17.16 4.36 C 17.33 4.53 17.53 4.61 17.76 4.61 C 18.00 4.61 18.20 4.53 18.36 4.36 C 18.52 4.19 18.60 3.99 18.60 3.75 L 18.60 1.69 C 18.60 1.45 18.52 1.24 18.36 1.08 C 18.20 0.91 18.00 0.82 17.76 0.82 C 17.52 0.82 17.32 0.90 17.16 1.07 C 17.00 1.24 16.91 1.44 16.91 1.68 L 16.91 3.75 Z"/> c0.11,0.16,0.26,0.27,0.46,0.34c0.11,0.03,0.2,0.04,0.25,0.04c0.15,0,0.28-0.03,0.38-0.08c0.21-0.08,0.36-0.27,0.43-0.57l0.27-1.03
<path d="M 9.90 4.59 C 9.90 4.82 9.98 5.02 10.15 5.19 L 10.80 5.85 C 10.96 6.01 11.14 6.09 11.35 6.11 C 11.56 6.14 11.76 6.07 11.96 5.88 C 12.16 5.70 12.26 5.49 12.26 5.24 C 12.26 5.01 12.18 4.81 12.01 4.64 L 11.38 3.98 C 11.22 3.82 11.02 3.74 10.78 3.74 C 10.53 3.74 10.32 3.82 10.15 3.98 C 9.99 4.16 9.90 4.36 9.90 4.59 Z"/> c0.06-0.25,0.03-0.47-0.08-0.67s-0.3-0.32-0.53-0.37c-0.21-0.07-0.41-0.04-0.62,0.07c-0.21,0.12-0.35,0.29-0.42,0.52l-0.25,1.04
</g> C9.69,26.7,9.67,26.78,9.67,26.8z M9.9,4.59c0,0.23,0.08,0.43,0.25,0.6l0.65,0.66c0.16,0.16,0.34,0.24,0.55,0.26
c0.21,0.03,0.41-0.04,0.61-0.23c0.2-0.18,0.3-0.39,0.3-0.64c0-0.23-0.08-0.43-0.25-0.6l-0.63-0.66c-0.16-0.16-0.36-0.24-0.6-0.24
c-0.25,0-0.46,0.08-0.63,0.24C9.99,4.16,9.9,4.36,9.9,4.59z M11.01,22c-0.01,0.16,0.04,0.32,0.14,0.47c0.1,0.15,0.26,0.26,0.48,0.32
c0.21,0.07,0.42,0.05,0.62-0.06c0.2-0.11,0.34-0.3,0.42-0.56l0.3-1.03c0.07-0.22,0.04-0.43-0.08-0.63s-0.3-0.34-0.54-0.41
c-0.23-0.07-0.44-0.05-0.64,0.07c-0.2,0.12-0.34,0.29-0.41,0.53l-0.24,1.05C11.03,21.9,11.01,21.98,11.01,22z M13.84,23.68
c0,0.14,0.03,0.28,0.1,0.39c0.13,0.21,0.31,0.36,0.54,0.43c0.11,0.04,0.21,0.06,0.28,0.06c0.13,0,0.23-0.02,0.31-0.08
c0.2-0.07,0.35-0.27,0.45-0.6l0.25-1.01c0.07-0.24,0.05-0.45-0.07-0.65c-0.11-0.2-0.28-0.33-0.51-0.39
c-0.23-0.07-0.45-0.05-0.65,0.07c-0.2,0.11-0.34,0.28-0.41,0.51l-0.28,1.04C13.85,23.53,13.84,23.61,13.84,23.68z M15.21,18.86
c0,0.18,0.05,0.34,0.16,0.5c0.11,0.16,0.27,0.27,0.49,0.33c0.17,0.06,0.37,0.04,0.61-0.05c0.2-0.09,0.34-0.28,0.43-0.57l0.27-1
c0.06-0.25,0.04-0.47-0.08-0.67s-0.29-0.32-0.53-0.37c-0.23-0.07-0.44-0.05-0.64,0.06c-0.2,0.11-0.33,0.28-0.4,0.5l-0.29,1.06
C15.22,18.79,15.21,18.86,15.21,18.86z M15.31,9.02c0.67-0.64,1.48-0.97,2.45-0.97c0.98,0,1.82,0.34,2.51,1.03
c0.69,0.68,1.04,1.52,1.04,2.5c0,0.66-0.16,1.26-0.47,1.81c-0.96-0.96-2.13-1.44-3.52-1.44h-0.31C16.72,10.76,16.15,9.78,15.31,9.02
z M16.91,3.75c0,0.24,0.08,0.44,0.25,0.61s0.37,0.25,0.6,0.25c0.24,0,0.44-0.08,0.6-0.25c0.16-0.17,0.24-0.37,0.24-0.61V1.69
c0-0.24-0.08-0.45-0.24-0.61C18.2,0.91,18,0.82,17.76,0.82c-0.24,0-0.44,0.08-0.6,0.25s-0.25,0.37-0.25,0.61V3.75z M22.49,6.04
c0,0.24,0.08,0.44,0.23,0.6c0.14,0.16,0.32,0.24,0.55,0.26c0.23,0.02,0.44-0.07,0.63-0.26l1.44-1.44c0.18-0.16,0.26-0.36,0.26-0.6
s-0.09-0.44-0.26-0.6c-0.16-0.18-0.36-0.26-0.6-0.26c-0.23,0-0.42,0.09-0.58,0.26l-1.44,1.44C22.56,5.59,22.49,5.79,22.49,6.04z
M23.26,17.95c0,0.23,0.08,0.43,0.25,0.6l0.65,0.63c0.18,0.17,0.39,0.25,0.62,0.25l0.02,0.02c0.22,0,0.4-0.09,0.54-0.27
c0.18-0.16,0.26-0.36,0.26-0.6c0-0.23-0.09-0.43-0.26-0.61l-0.62-0.62c-0.18-0.18-0.38-0.27-0.61-0.27c-0.24,0-0.44,0.09-0.6,0.26
C23.35,17.51,23.26,17.72,23.26,17.95z M24.73,11.58c0,0.24,0.09,0.44,0.26,0.59c0.16,0.18,0.36,0.26,0.6,0.26h2.06
c0.24,0,0.44-0.08,0.61-0.25c0.17-0.17,0.25-0.37,0.25-0.6s-0.08-0.44-0.25-0.6c-0.17-0.16-0.37-0.24-0.61-0.24h-2.06
c-0.24,0-0.45,0.08-0.61,0.24C24.81,11.14,24.73,11.34,24.73,11.58z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

@@ -1,3 +1,27 @@
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve"> <?xml version="1.0" encoding="utf-8"?>
<path id="sun" d="M4.37,14.62c0-0.24,0.08-0.45,0.25-0.62c0.17-0.16,0.38-0.24,0.6-0.24h2.04c0.23,0,0.42,0.08,0.58,0.25 c0.15,0.17,0.23,0.37,0.23,0.61S8,15.06,7.85,15.23c-0.15,0.17-0.35,0.25-0.58,0.25H5.23c-0.23,0-0.43-0.08-0.6-0.25 C4.46,15.06,4.37,14.86,4.37,14.62z M7.23,21.55c0-0.23,0.08-0.43,0.23-0.61l1.47-1.43c0.15-0.16,0.35-0.23,0.59-0.23 c0.24,0,0.44,0.08,0.6,0.23s0.24,0.34,0.24,0.57c0,0.24-0.08,0.46-0.24,0.64L8.7,22.14c-0.41,0.32-0.82,0.32-1.23,0 C7.31,21.98,7.23,21.78,7.23,21.55z M7.23,7.71c0-0.23,0.08-0.43,0.23-0.61C7.66,6.93,7.87,6.85,8.1,6.85 c0.22,0,0.42,0.08,0.59,0.24l1.43,1.47c0.16,0.15,0.24,0.35,0.24,0.59c0,0.24-0.08,0.44-0.24,0.6s-0.36,0.24-0.6,0.24 c-0.24,0-0.44-0.08-0.59-0.24L7.47,8.32C7.31,8.16,7.23,7.95,7.23,7.71z M9.78,14.62c0-0.93,0.23-1.8,0.7-2.6s1.1-1.44,1.91-1.91 s1.67-0.7,2.6-0.7c0.7,0,1.37,0.14,2.02,0.42c0.64,0.28,1.2,0.65,1.66,1.12c0.47,0.47,0.84,1.02,1.11,1.66 c0.27,0.64,0.41,1.32,0.41,2.02c0,0.94-0.23,1.81-0.7,2.61c-0.47,0.8-1.1,1.43-1.9,1.9c-0.8,0.47-1.67,0.7-2.61,0.7 s-1.81-0.23-2.61-0.7c-0.8-0.47-1.43-1.1-1.9-1.9C10.02,16.43,9.78,15.56,9.78,14.62z M11.48,14.62c0,0.98,0.34,1.81,1.03,2.5 c0.68,0.69,1.51,1.04,2.49,1.04s1.81-0.35,2.5-1.04s1.04-1.52,1.04-2.5c0-0.96-0.35-1.78-1.04-2.47c-0.69-0.68-1.52-1.02-2.5-1.02 c-0.97,0-1.8,0.34-2.48,1.02C11.82,12.84,11.48,13.66,11.48,14.62z M14.14,22.4c0-0.24,0.08-0.44,0.25-0.6s0.37-0.24,0.6-0.24 c0.24,0,0.45,0.08,0.61,0.24s0.24,0.36,0.24,0.6v1.99c0,0.24-0.08,0.45-0.25,0.62c-0.17,0.17-0.37,0.25-0.6,0.25 s-0.44-0.08-0.6-0.25c-0.17-0.17-0.25-0.38-0.25-0.62V22.4z M14.14,6.9V4.86c0-0.23,0.08-0.43,0.25-0.6C14.56,4.09,14.76,4,15,4 s0.43,0.08,0.6,0.25c0.17,0.17,0.25,0.37,0.25,0.6V6.9c0,0.23-0.08,0.42-0.25,0.58S15.23,7.71,15,7.71s-0.44-0.08-0.6-0.23 S14.14,7.13,14.14,6.9z M19.66,20.08c0-0.23,0.08-0.42,0.23-0.56c0.15-0.16,0.34-0.23,0.56-0.23c0.24,0,0.44,0.08,0.6,0.23 l1.46,1.43c0.16,0.17,0.24,0.38,0.24,0.61c0,0.23-0.08,0.43-0.24,0.59c-0.4,0.31-0.8,0.31-1.2,0l-1.42-1.42 C19.74,20.55,19.66,20.34,19.66,20.08z M19.66,9.16c0-0.25,0.08-0.45,0.23-0.59l1.42-1.47c0.17-0.16,0.37-0.24,0.59-0.24 c0.24,0,0.44,0.08,0.6,0.25c0.17,0.17,0.25,0.37,0.25,0.6c0,0.25-0.08,0.46-0.24,0.62l-1.46,1.43c-0.18,0.16-0.38,0.24-0.6,0.24 c-0.23,0-0.41-0.08-0.56-0.24S19.66,9.4,19.66,9.16z M21.92,14.62c0-0.24,0.08-0.44,0.24-0.62c0.16-0.16,0.35-0.24,0.57-0.24h2.02 c0.23,0,0.43,0.09,0.6,0.26c0.17,0.17,0.26,0.37,0.26,0.6s-0.09,0.43-0.26,0.6c-0.17,0.17-0.37,0.25-0.6,0.25h-2.02 c-0.23,0-0.43-0.08-0.58-0.25S21.92,14.86,21.92,14.62z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M4.37,14.62c0-0.24,0.08-0.45,0.25-0.62c0.17-0.16,0.38-0.24,0.6-0.24h2.04c0.23,0,0.42,0.08,0.58,0.25
c0.15,0.17,0.23,0.37,0.23,0.61S8,15.06,7.85,15.23c-0.15,0.17-0.35,0.25-0.58,0.25H5.23c-0.23,0-0.43-0.08-0.6-0.25
C4.46,15.06,4.37,14.86,4.37,14.62z M7.23,21.55c0-0.23,0.08-0.43,0.23-0.61l1.47-1.43c0.15-0.16,0.35-0.23,0.59-0.23
c0.24,0,0.44,0.08,0.6,0.23s0.24,0.34,0.24,0.57c0,0.24-0.08,0.46-0.24,0.64L8.7,22.14c-0.41,0.32-0.82,0.32-1.23,0
C7.31,21.98,7.23,21.78,7.23,21.55z M7.23,7.71c0-0.23,0.08-0.43,0.23-0.61C7.66,6.93,7.87,6.85,8.1,6.85
c0.22,0,0.42,0.08,0.59,0.24l1.43,1.47c0.16,0.15,0.24,0.35,0.24,0.59c0,0.24-0.08,0.44-0.24,0.6s-0.36,0.24-0.6,0.24
c-0.24,0-0.44-0.08-0.59-0.24L7.47,8.32C7.31,8.16,7.23,7.95,7.23,7.71z M9.78,14.62c0-0.93,0.23-1.8,0.7-2.6s1.1-1.44,1.91-1.91
s1.67-0.7,2.6-0.7c0.7,0,1.37,0.14,2.02,0.42c0.64,0.28,1.2,0.65,1.66,1.12c0.47,0.47,0.84,1.02,1.11,1.66
c0.27,0.64,0.41,1.32,0.41,2.02c0,0.94-0.23,1.81-0.7,2.61c-0.47,0.8-1.1,1.43-1.9,1.9c-0.8,0.47-1.67,0.7-2.61,0.7
s-1.81-0.23-2.61-0.7c-0.8-0.47-1.43-1.1-1.9-1.9C10.02,16.43,9.78,15.56,9.78,14.62z M11.48,14.62c0,0.98,0.34,1.81,1.03,2.5
c0.68,0.69,1.51,1.04,2.49,1.04s1.81-0.35,2.5-1.04s1.04-1.52,1.04-2.5c0-0.96-0.35-1.78-1.04-2.47c-0.69-0.68-1.52-1.02-2.5-1.02
c-0.97,0-1.8,0.34-2.48,1.02C11.82,12.84,11.48,13.66,11.48,14.62z M14.14,22.4c0-0.24,0.08-0.44,0.25-0.6s0.37-0.24,0.6-0.24
c0.24,0,0.45,0.08,0.61,0.24s0.24,0.36,0.24,0.6v1.99c0,0.24-0.08,0.45-0.25,0.62c-0.17,0.17-0.37,0.25-0.6,0.25
s-0.44-0.08-0.6-0.25c-0.17-0.17-0.25-0.38-0.25-0.62V22.4z M14.14,6.9V4.86c0-0.23,0.08-0.43,0.25-0.6C14.56,4.09,14.76,4,15,4
s0.43,0.08,0.6,0.25c0.17,0.17,0.25,0.37,0.25,0.6V6.9c0,0.23-0.08,0.42-0.25,0.58S15.23,7.71,15,7.71s-0.44-0.08-0.6-0.23
S14.14,7.13,14.14,6.9z M19.66,20.08c0-0.23,0.08-0.42,0.23-0.56c0.15-0.16,0.34-0.23,0.56-0.23c0.24,0,0.44,0.08,0.6,0.23
l1.46,1.43c0.16,0.17,0.24,0.38,0.24,0.61c0,0.23-0.08,0.43-0.24,0.59c-0.4,0.31-0.8,0.31-1.2,0l-1.42-1.42
C19.74,20.55,19.66,20.34,19.66,20.08z M19.66,9.16c0-0.25,0.08-0.45,0.23-0.59l1.42-1.47c0.17-0.16,0.37-0.24,0.59-0.24
c0.24,0,0.44,0.08,0.6,0.25c0.17,0.17,0.25,0.37,0.25,0.6c0,0.25-0.08,0.46-0.24,0.62l-1.46,1.43c-0.18,0.16-0.38,0.24-0.6,0.24
c-0.23,0-0.41-0.08-0.56-0.24S19.66,9.4,19.66,9.16z M21.92,14.62c0-0.24,0.08-0.44,0.24-0.62c0.16-0.16,0.35-0.24,0.57-0.24h2.02
c0.23,0,0.43,0.09,0.6,0.26c0.17,0.17,0.26,0.37,0.26,0.6s-0.09,0.43-0.26,0.6c-0.17,0.17-0.37,0.25-0.6,0.25h-2.02
c-0.23,0-0.43-0.08-0.58-0.25S21.92,14.86,21.92,14.62z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

@@ -1,16 +1,34 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 2.61 13.81 C 3.32 12.91 4.23 12.34 5.34 12.08 C 5.65 10.71 6.35 9.59 7.44 8.72 C 8.53 7.85 9.79 7.41 11.20 7.41 C 12.19 7.41 13.09 7.63 13.90 8.06 C 13.93 8.02 15.32 9.02 15.30 9.04 C 16.11 9.81 16.68 10.78 16.99 11.95 L 17.30 11.95 C 18.64 11.95 19.81 12.44 20.80 13.42 C 20.84 13.35 22.02 14.69 21.85 14.90 C 22.14 15.50 22.28 16.17 22.28 16.91 C 22.28 18.25 21.82 19.40 20.89 20.36 C 19.96 21.32 18.83 21.83 17.50 21.87 C 17.37 21.87 17.30 21.81 17.30 21.70 L 17.30 20.33 C 17.30 20.21 17.37 20.15 17.50 20.15 C 18.37 20.08 19.10 19.73 19.69 19.11 C 20.28 18.49 20.58 17.75 20.58 16.90 C 20.58 16.00 20.26 15.24 19.62 14.61 C 18.98 13.98 18.21 13.66 17.30 13.66 L 15.69 13.66 C 15.57 13.66 15.51 13.60 15.51 13.49 L 15.45 12.91 C 15.33 11.83 14.86 10.92 14.05 10.19 C 13.24 9.46 12.29 9.09 11.20 9.09 C 10.11 9.09 9.15 9.46 8.34 10.19 C 7.53 10.92 7.07 11.83 6.96 12.91 L 6.90 13.42 C 6.90 13.54 6.83 13.60 6.70 13.60 L 6.18 13.66 C 5.35 13.76 4.65 14.11 4.08 14.73 C 3.51 15.35 3.23 16.07 3.23 16.90 C 3.23 17.65 3.46 18.32 3.93 18.91 C 4.37 19.46 5.03 19.89 5.68 20.08 L 5.07 21.72 C 4.07 21.40 3.12 20.70 2.50 19.86 C 1.85 18.99 1.52 18.01 1.52 16.90 C 1.52 15.75 1.90 14.71 2.61 13.81 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<path id="lightning" d="M 5.70 20.07 L 6.77 17.19 C 6.83 17.10 6.91 17.05 7.00 17.05 L 9.94 17.05 C 10.10 17.05 10.15 17.13 10.08 17.27 L 7.61 21.90 L 9.78 21.90 C 9.85 21.90 9.90 21.92 9.92 21.97 C 9.95 22.02 9.95 22.07 9.91 22.11 L 5.74 27.50 L 5.45 27.50 L 6.70 23.55 L 4.57 23.55 C 4.43 23.55 4.39 23.48 4.43 23.34 L 5.07 21.64 C 5.03 21.63 5.65 20.06 5.70 20.07 Z"/> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<g id="sun"> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M 17.78 6.33 C 18.72 6.33 19.59 6.57 20.40 7.04 C 21.21 7.51 21.85 8.15 22.32 8.96 C 22.79 9.77 23.03 10.64 23.03 11.58 C 23.03 12.56 22.49 14.34 21.87 14.98 L 20.82 13.44 C 21.09 12.90 21.32 12.12 21.32 11.57 C 21.32 10.60 20.97 9.77 20.28 9.09 C 19.59 8.41 18.75 8.07 17.78 8.07 C 16.82 8.07 15.98 8.50 15.32 9.10 L 13.86 8.09 C 14.88 7.01 16.29 6.33 17.78 6.33 Z"/> <path d="M1.52,16.9c0,1.11,0.33,2.09,0.98,2.96s1.51,1.46,2.57,1.78l-0.64,1.7c-0.04,0.14,0,0.21,0.14,0.21H6.7L5.45,27.5h0.29
<path d="M 24.70 11.58 C 24.70 11.81 24.79 12.01 24.97 12.18 C 25.15 12.36 25.35 12.45 25.58 12.45 L 27.61 12.45 C 27.84 12.45 28.04 12.36 28.21 12.19 C 28.38 12.02 28.47 11.81 28.47 11.58 C 28.47 11.35 28.39 11.15 28.22 10.99 C 28.05 10.83 27.85 10.75 27.61 10.75 L 25.58 10.75 C 25.33 10.75 25.12 10.83 24.95 10.99 C 24.78 11.15 24.70 11.35 24.70 11.58 Z"/> l4.17-5.39c0.04-0.04,0.04-0.09,0.01-0.14C9.9,21.92,9.85,21.9,9.78,21.9H7.61l2.47-4.63c0.07-0.14,0.02-0.22-0.14-0.22H7
<path d="M 23.25 17.93 C 23.25 18.15 23.33 18.35 23.49 18.53 L 24.15 19.16 C 24.27 19.30 24.46 19.39 24.69 19.40 L 24.70 19.41 C 24.71 19.41 24.73 19.41 24.75 19.41 C 24.77 19.41 24.78 19.41 24.80 19.41 C 24.99 19.41 25.16 19.32 25.33 19.15 C 25.50 18.99 25.59 18.79 25.59 18.55 C 25.59 18.32 25.50 18.12 25.33 17.94 L 24.68 17.33 C 24.52 17.15 24.32 17.06 24.10 17.06 C 23.87 17.06 23.67 17.14 23.50 17.31 C 23.33 17.49 23.25 17.70 23.25 17.93 Z"/> c-0.09,0-0.17,0.05-0.23,0.14L5.7,20.07c-0.71-0.18-1.3-0.57-1.77-1.16c-0.47-0.59-0.7-1.26-0.7-2.01c0-0.83,0.28-1.55,0.85-2.17
<path d="M 22.44 6.07 C 22.44 6.31 22.53 6.51 22.70 6.67 C 22.84 6.84 23.03 6.92 23.27 6.92 C 23.51 6.92 23.71 6.84 23.87 6.67 L 25.31 5.22 C 25.48 5.06 25.57 4.87 25.57 4.63 C 25.57 4.39 25.49 4.19 25.32 4.02 C 25.15 3.85 24.95 3.77 24.71 3.77 C 24.49 3.77 24.30 3.86 24.14 4.03 L 22.70 5.47 C 22.53 5.63 22.44 5.83 22.44 6.07 Z"/> s1.27-0.97,2.1-1.07L6.7,13.6c0.13,0,0.2-0.06,0.2-0.18l0.06-0.51c0.11-1.08,0.57-1.99,1.38-2.72c0.81-0.73,1.77-1.1,2.86-1.1
<path d="M 16.91 3.79 C 16.91 4.02 17.00 4.22 17.17 4.39 C 17.34 4.56 17.54 4.65 17.77 4.65 C 18.01 4.65 18.20 4.57 18.36 4.40 C 18.52 4.23 18.59 4.03 18.59 3.79 L 18.59 1.73 C 18.59 1.49 18.51 1.29 18.36 1.12 C 18.21 0.95 18.01 0.87 17.77 0.87 C 17.54 0.87 17.34 0.95 17.17 1.12 C 17.00 1.29 16.91 1.49 16.91 1.73 L 16.91 3.79 Z"/> c1.09,0,2.04,0.37,2.85,1.1s1.28,1.64,1.4,2.72l0.06,0.58c0,0.11,0.06,0.17,0.18,0.17h1.61c0.91,0,1.68,0.32,2.32,0.95
<path d="M 9.94 4.63 C 9.94 4.87 10.02 5.06 10.19 5.22 L 10.83 5.88 C 11.00 6.05 11.20 6.13 11.44 6.14 C 11.68 6.14 11.87 6.06 12.01 5.88 C 12.20 5.73 12.29 5.53 12.29 5.28 C 12.29 5.04 12.21 4.85 12.04 4.69 L 11.41 4.03 C 11.24 3.87 11.03 3.79 10.80 3.79 C 10.55 3.79 10.34 3.87 10.18 4.03 C 10.02 4.19 9.94 4.39 9.94 4.63 Z"/> c0.64,0.63,0.96,1.39,0.96,2.29c0,0.85-0.3,1.59-0.89,2.21c-0.59,0.62-1.32,0.97-2.19,1.04c-0.13,0-0.2,0.06-0.2,0.18v1.37
</g> c0,0.11,0.07,0.17,0.2,0.17c1.33-0.04,2.46-0.55,3.39-1.51c0.93-0.96,1.39-2.11,1.39-3.45c0-0.74-0.14-1.41-0.43-2.01
<g id="rain"> c0.79-0.96,1.18-2.06,1.18-3.32c0-0.94-0.24-1.81-0.71-2.62c-0.47-0.81-1.11-1.45-1.92-1.92c-0.81-0.47-1.68-0.71-2.62-0.71
<path d="M 13.77 23.43 C 13.77 23.55 13.81 23.67 13.88 23.81 C 14.01 24.01 14.17 24.15 14.38 24.24 C 14.45 24.27 14.55 24.29 14.68 24.29 C 14.83 24.29 14.94 24.27 15.01 24.23 C 15.21 24.15 15.35 23.95 15.42 23.65 L 16.91 18.10 C 16.97 17.86 16.95 17.65 16.84 17.45 C 16.73 17.26 16.56 17.13 16.33 17.06 C 16.10 16.99 15.88 17.01 15.69 17.13 C 15.49 17.24 15.36 17.41 15.30 17.64 L 13.80 23.20 C 13.80 23.22 13.79 23.26 13.78 23.31 C 13.77 23.37 13.77 23.40 13.77 23.43 Z"/> c-1.54,0-2.84,0.58-3.88,1.73c-0.81-0.43-1.71-0.65-2.7-0.65c-1.41,0-2.67,0.44-3.76,1.31s-1.79,1.99-2.1,3.36
<path d="M 9.61 26.48 C 9.60 26.63 9.64 26.78 9.75 26.92 C 9.86 27.06 10.01 27.17 10.21 27.25 C 10.28 27.27 10.35 27.28 10.42 27.28 C 10.59 27.28 10.76 27.23 10.93 27.13 C 11.10 27.03 11.21 26.87 11.27 26.66 L 13.56 18.09 C 13.62 17.86 13.60 17.64 13.49 17.45 C 13.38 17.25 13.22 17.12 13.00 17.05 C 12.77 16.98 12.55 17.00 12.35 17.12 C 12.15 17.23 12.01 17.40 11.95 17.63 L 9.64 26.23 C 9.62 26.30 9.61 26.39 9.61 26.48 Z"/> c-1.11,0.26-2.02,0.83-2.73,1.73S1.52,15.75,1.52,16.9z M9.61,26.48c-0.01,0.15,0.03,0.3,0.14,0.44s0.26,0.25,0.46,0.33
</g> c0.07,0.02,0.14,0.03,0.21,0.03c0.17,0,0.34-0.05,0.51-0.15s0.28-0.26,0.34-0.47l2.29-8.57c0.06-0.23,0.04-0.45-0.07-0.64
c-0.11-0.2-0.27-0.33-0.49-0.4c-0.23-0.07-0.45-0.05-0.65,0.07c-0.2,0.11-0.34,0.28-0.4,0.51l-2.31,8.6
C9.62,26.3,9.61,26.39,9.61,26.48z M9.94,4.63c0,0.24,0.08,0.43,0.25,0.59l0.64,0.66C11,6.05,11.2,6.13,11.44,6.14
c0.24,0,0.43-0.08,0.57-0.26c0.19-0.15,0.28-0.35,0.28-0.6c0-0.24-0.08-0.43-0.25-0.59l-0.63-0.66c-0.17-0.16-0.38-0.24-0.61-0.24
c-0.25,0-0.46,0.08-0.62,0.24C10.02,4.19,9.94,4.39,9.94,4.63z M13.77,23.43c0,0.12,0.04,0.24,0.11,0.38
c0.13,0.2,0.29,0.34,0.5,0.43c0.07,0.03,0.17,0.05,0.3,0.05c0.15,0,0.26-0.02,0.33-0.06c0.2-0.08,0.34-0.28,0.41-0.58l1.49-5.55
c0.06-0.24,0.04-0.45-0.07-0.65c-0.11-0.19-0.28-0.32-0.51-0.39c-0.23-0.07-0.45-0.05-0.64,0.07c-0.2,0.11-0.33,0.28-0.39,0.51
L13.8,23.2c0,0.02-0.01,0.06-0.02,0.11C13.77,23.37,13.77,23.4,13.77,23.43z M15.3,9.04c0.67-0.64,1.49-0.97,2.48-0.97
c0.97,0,1.81,0.34,2.5,1.02c0.69,0.68,1.04,1.51,1.04,2.48c0,0.62-0.17,1.24-0.52,1.85c-0.99-0.98-2.16-1.47-3.5-1.47h-0.31
C16.68,10.78,16.11,9.81,15.3,9.04z M16.91,3.79c0,0.23,0.09,0.43,0.26,0.6s0.37,0.26,0.6,0.26c0.24,0,0.43-0.08,0.59-0.25
c0.16-0.17,0.23-0.37,0.23-0.61V1.73c0-0.24-0.08-0.44-0.23-0.61s-0.35-0.25-0.59-0.25c-0.23,0-0.43,0.08-0.6,0.25
s-0.26,0.37-0.26,0.61V3.79z M22.44,6.07c0,0.24,0.09,0.44,0.26,0.6c0.14,0.17,0.33,0.25,0.57,0.25s0.44-0.08,0.6-0.25l1.44-1.45
c0.17-0.16,0.26-0.35,0.26-0.59c0-0.24-0.08-0.44-0.25-0.61c-0.17-0.17-0.37-0.25-0.61-0.25c-0.22,0-0.41,0.09-0.57,0.26L22.7,5.47
C22.53,5.63,22.44,5.83,22.44,6.07z M23.25,17.93c0,0.22,0.08,0.42,0.24,0.6l0.66,0.63c0.12,0.14,0.31,0.23,0.54,0.24l0.01,0.01
c0.01,0,0.03,0,0.05,0c0.02,0,0.03,0,0.05,0c0.19,0,0.36-0.09,0.53-0.26c0.17-0.16,0.26-0.36,0.26-0.6c0-0.23-0.09-0.43-0.26-0.61
l-0.65-0.61c-0.16-0.18-0.36-0.27-0.58-0.27c-0.23,0-0.43,0.08-0.6,0.25C23.33,17.49,23.25,17.7,23.25,17.93z M24.7,11.58
c0,0.23,0.09,0.43,0.27,0.6c0.18,0.18,0.38,0.27,0.61,0.27h2.03c0.23,0,0.43-0.09,0.6-0.26s0.26-0.38,0.26-0.61
c0-0.23-0.08-0.43-0.25-0.59c-0.17-0.16-0.37-0.24-0.61-0.24h-2.03c-0.25,0-0.46,0.08-0.63,0.24C24.78,11.15,24.7,11.35,24.7,11.58z
"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

+29 -10
View File
@@ -1,11 +1,30 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 4.64 16.90 C 4.64 18.23 5.10 19.37 6.03 20.33 C 6.96 21.29 8.09 21.80 9.43 21.86 C 9.54 21.86 9.60 21.80 9.60 21.69 L 9.60 20.35 C 9.60 20.24 9.54 20.18 9.43 20.18 C 8.57 20.14 7.85 19.80 7.25 19.16 C 6.65 18.52 6.35 17.77 6.35 16.90 C 6.35 16.07 6.63 15.36 7.19 14.74 C 7.75 14.13 8.45 13.77 9.28 13.67 L 9.81 13.64 C 9.94 13.64 10.01 13.58 10.01 13.45 L 10.07 12.92 C 10.18 11.84 10.63 10.93 11.44 10.21 C 12.25 9.48 13.20 9.12 14.29 9.12 C 15.38 9.12 16.33 9.48 17.14 10.21 C 17.95 10.94 18.41 11.84 18.53 12.92 L 18.61 13.50 C 18.61 13.61 18.67 13.67 18.79 13.67 L 20.40 13.67 C 21.29 13.67 22.06 13.99 22.71 14.63 C 23.36 15.27 23.69 16.02 23.69 16.90 C 23.69 17.77 23.39 18.52 22.79 19.16 C 22.19 19.80 21.46 20.14 20.61 20.18 C 20.48 20.18 20.41 20.24 20.41 20.35 L 20.41 21.69 C 20.41 21.80 20.48 21.86 20.61 21.86 C 21.48 21.84 22.28 21.60 23.01 21.15 C 23.74 20.70 24.32 20.10 24.74 19.35 C 25.16 18.60 25.37 17.78 25.37 16.91 C 25.37 16.02 25.15 15.19 24.70 14.44 C 24.26 13.69 23.65 13.09 22.89 12.66 C 22.13 12.23 21.29 12.00 20.40 12.00 L 20.08 12.00 C 19.76 10.66 19.05 9.57 17.98 8.72 C 16.91 7.87 15.68 7.44 14.30 7.44 C 12.89 7.44 11.64 7.88 10.55 8.75 C 9.46 9.62 8.76 10.74 8.45 12.10 C 7.34 12.36 6.43 12.93 5.72 13.83 C 5.01 14.73 4.64 15.75 4.64 16.90 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<g id="rain"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<path d="M 17.47 21.23 C 17.47 21.37 17.52 21.52 17.63 21.68 C 17.74 21.84 17.89 21.95 18.08 22.01 C 18.24 22.04 18.33 22.06 18.35 22.06 C 18.44 22.06 18.57 22.03 18.72 21.96 C 18.92 21.87 19.05 21.69 19.12 21.44 L 20.02 18.10 C 20.04 17.93 20.05 17.84 20.05 17.84 C 20.05 17.68 20.00 17.53 19.90 17.38 C 19.80 17.23 19.65 17.13 19.45 17.07 C 19.36 17.05 19.27 17.04 19.19 17.04 C 19.03 17.04 18.87 17.09 18.72 17.19 C 18.57 17.29 18.47 17.44 18.41 17.64 L 17.51 21.00 L 17.47 21.23 Z"/> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M 16.74 23.80 C 16.74 23.92 16.76 24.03 16.82 24.12 C 16.90 24.31 17.05 24.46 17.26 24.56 C 17.37 24.60 17.49 24.63 17.61 24.63 C 17.67 24.63 17.77 24.61 17.91 24.57 C 18.12 24.49 18.28 24.34 18.37 24.13 C 18.44 23.91 18.44 23.70 18.36 23.50 C 18.28 23.30 18.14 23.15 17.94 23.05 C 17.71 22.94 17.50 22.93 17.29 23.02 C 17.08 23.11 16.93 23.26 16.83 23.49 C 16.77 23.59 16.74 23.69 16.74 23.80 Z"/> <path d="M4.64,16.9c0,1.33,0.46,2.47,1.39,3.43c0.93,0.96,2.06,1.47,3.4,1.53c0.11,0,0.17-0.06,0.17-0.17v-1.34
<path d="M 13.31 24.26 C 13.31 24.63 13.52 24.87 13.94 24.99 C 14.05 25.02 14.13 25.03 14.18 25.03 C 14.33 25.03 14.46 25.00 14.56 24.95 C 14.77 24.87 14.91 24.68 14.98 24.38 L 16.65 18.09 C 16.71 17.85 16.69 17.64 16.59 17.44 C 16.49 17.25 16.32 17.12 16.10 17.06 C 16.02 17.04 15.93 17.03 15.83 17.03 C 15.67 17.03 15.51 17.08 15.35 17.18 C 15.19 17.28 15.09 17.43 15.05 17.62 L 13.34 23.96 C 13.32 24.10 13.31 24.20 13.31 24.26 Z"/> c0-0.11-0.06-0.17-0.17-0.17c-0.86-0.04-1.58-0.38-2.18-1.02c-0.6-0.64-0.9-1.39-0.9-2.26c0-0.83,0.28-1.54,0.84-2.16
<path d="M 12.58 26.87 C 12.58 26.99 12.60 27.09 12.64 27.16 C 12.73 27.38 12.88 27.53 13.09 27.61 C 13.18 27.66 13.29 27.69 13.42 27.69 C 13.48 27.69 13.58 27.67 13.72 27.63 C 13.94 27.55 14.10 27.40 14.19 27.18 C 14.29 26.96 14.29 26.74 14.19 26.52 C 14.09 26.30 13.94 26.15 13.74 26.06 C 13.54 25.97 13.34 25.97 13.12 26.06 C 12.93 26.14 12.80 26.26 12.71 26.42 C 12.62 26.58 12.58 26.73 12.58 26.87 Z"/> c0.56-0.61,1.26-0.97,2.09-1.07l0.53-0.03c0.13,0,0.2-0.06,0.2-0.19l0.06-0.53c0.11-1.08,0.56-1.99,1.37-2.71
<path d="M 10.72 21.28 C 10.72 21.44 10.77 21.59 10.87 21.73 C 10.97 21.88 11.13 21.98 11.33 22.05 C 11.52 22.16 11.73 22.17 11.95 22.06 C 12.17 21.96 12.32 21.76 12.39 21.46 L 13.29 18.08 C 13.35 17.83 13.33 17.61 13.21 17.41 C 13.09 17.21 12.92 17.09 12.68 17.05 C 12.60 17.03 12.52 17.02 12.44 17.02 C 12.28 17.02 12.12 17.07 11.97 17.17 C 11.82 17.27 11.71 17.42 11.65 17.61 L 10.77 21.00 C 10.73 21.16 10.72 21.25 10.72 21.28 Z"/> c0.81-0.73,1.76-1.09,2.85-1.09c1.09,0,2.04,0.36,2.85,1.09c0.81,0.73,1.27,1.63,1.39,2.71l0.08,0.58c0,0.11,0.06,0.17,0.18,0.17
<path d="M 10.09 24.10 C 10.18 24.31 10.34 24.47 10.55 24.56 C 10.75 24.66 10.96 24.67 11.17 24.58 C 11.39 24.49 11.53 24.34 11.62 24.13 C 11.72 23.91 11.73 23.70 11.64 23.49 C 11.56 23.28 11.40 23.14 11.19 23.05 C 10.99 22.94 10.79 22.93 10.58 23.02 C 10.37 23.11 10.22 23.26 10.12 23.49 C 10.01 23.66 10.01 23.86 10.09 24.10 Z"/> h1.61c0.89,0,1.66,0.32,2.31,0.96c0.65,0.64,0.98,1.39,0.98,2.27c0,0.87-0.3,1.62-0.9,2.26c-0.6,0.64-1.33,0.98-2.18,1.02
</g> c-0.13,0-0.2,0.06-0.2,0.17v1.34c0,0.11,0.07,0.17,0.2,0.17c0.87-0.02,1.67-0.26,2.4-0.71c0.73-0.45,1.31-1.05,1.73-1.8
c0.42-0.75,0.63-1.57,0.63-2.44c0-0.89-0.22-1.72-0.67-2.47c-0.44-0.75-1.05-1.35-1.81-1.78S21.29,12,20.4,12h-0.32
c-0.32-1.34-1.03-2.43-2.1-3.28s-2.3-1.28-3.68-1.28c-1.41,0-2.66,0.44-3.75,1.31c-1.09,0.87-1.79,1.99-2.1,3.35
c-1.11,0.26-2.02,0.83-2.73,1.73S4.64,15.75,4.64,16.9z M10.09,24.1c0.09,0.21,0.25,0.37,0.46,0.46c0.2,0.1,0.41,0.11,0.62,0.02
c0.22-0.09,0.36-0.24,0.45-0.45c0.1-0.22,0.11-0.43,0.02-0.64c-0.08-0.21-0.24-0.35-0.45-0.44c-0.2-0.11-0.4-0.12-0.61-0.03
c-0.21,0.09-0.36,0.24-0.46,0.47C10.01,23.66,10.01,23.86,10.09,24.1z M10.72,21.28c0,0.16,0.05,0.31,0.15,0.45
c0.1,0.15,0.26,0.25,0.46,0.32c0.19,0.11,0.4,0.12,0.62,0.01c0.22-0.1,0.37-0.3,0.44-0.6l0.9-3.38c0.06-0.25,0.04-0.47-0.08-0.67
c-0.12-0.2-0.29-0.32-0.53-0.36c-0.08-0.02-0.16-0.03-0.24-0.03c-0.16,0-0.32,0.05-0.47,0.15c-0.15,0.1-0.26,0.25-0.32,0.44
l-0.88,3.39C10.73,21.16,10.72,21.25,10.72,21.28z M12.58,26.87c0,0.12,0.02,0.22,0.06,0.29c0.09,0.22,0.24,0.37,0.45,0.45
c0.09,0.05,0.2,0.08,0.33,0.08c0.06,0,0.16-0.02,0.3-0.06c0.22-0.08,0.38-0.23,0.47-0.45c0.1-0.22,0.1-0.44,0-0.66
c-0.1-0.22-0.25-0.37-0.45-0.46c-0.2-0.09-0.4-0.09-0.62,0c-0.19,0.08-0.32,0.2-0.41,0.36C12.62,26.58,12.58,26.73,12.58,26.87z
M13.31,24.26c0,0.37,0.21,0.61,0.63,0.73c0.11,0.03,0.19,0.04,0.24,0.04c0.15,0,0.28-0.03,0.38-0.08c0.21-0.08,0.35-0.27,0.42-0.57
l1.67-6.29c0.06-0.24,0.04-0.45-0.06-0.65c-0.1-0.19-0.27-0.32-0.49-0.38c-0.08-0.02-0.17-0.03-0.27-0.03
c-0.16,0-0.32,0.05-0.48,0.15c-0.16,0.1-0.26,0.25-0.3,0.44l-1.71,6.34C13.32,24.1,13.31,24.2,13.31,24.26z M16.74,23.8
c0,0.12,0.02,0.23,0.08,0.32c0.08,0.19,0.23,0.34,0.44,0.44c0.11,0.04,0.23,0.07,0.35,0.07c0.06,0,0.16-0.02,0.3-0.06
c0.21-0.08,0.37-0.23,0.46-0.44c0.07-0.22,0.07-0.43-0.01-0.63c-0.08-0.2-0.22-0.35-0.42-0.45c-0.23-0.11-0.44-0.12-0.65-0.03
c-0.21,0.09-0.36,0.24-0.46,0.47C16.77,23.59,16.74,23.69,16.74,23.8z M17.47,21.23c0,0.14,0.05,0.29,0.16,0.45
c0.11,0.16,0.26,0.27,0.45,0.33c0.16,0.03,0.25,0.05,0.27,0.05c0.09,0,0.22-0.03,0.37-0.1c0.2-0.09,0.33-0.27,0.4-0.52l0.9-3.34
c0.02-0.17,0.03-0.26,0.03-0.26c0-0.16-0.05-0.31-0.15-0.46c-0.1-0.15-0.25-0.25-0.45-0.31c-0.09-0.02-0.18-0.03-0.26-0.03
c-0.16,0-0.32,0.05-0.47,0.15s-0.25,0.25-0.31,0.45l-0.9,3.36L17.47,21.23z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

@@ -1,3 +1,9 @@
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve"> <?xml version="1.0" encoding="utf-8"?>
<path id="lightning" d="M7.96,24.51h0.39l6.88-10.18c0.09-0.18,0.04-0.27-0.15-0.27h-2.84l2.99-5.45c0.09-0.18,0.02-0.27-0.2-0.27h-3.81 c-0.11,0-0.2,0.06-0.29,0.18l-2.78,7.4c-0.02,0.18,0.04,0.27,0.19,0.27h2.75L7.96,24.51z M16.46,18.18h0.27l5.22-7.67 c0.05-0.08,0.06-0.15,0.04-0.2s-0.08-0.07-0.17-0.07h-2.1l2.18-4.03c0.12-0.2,0.06-0.3-0.18-0.3h-2.74c-0.13,0-0.23,0.06-0.3,0.19 l-2.08,5.48c-0.03,0.09-0.03,0.16,0.01,0.21c0.04,0.05,0.1,0.07,0.19,0.07h2.04L16.46,18.18z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M7.96,24.51h0.39l6.88-10.18c0.09-0.18,0.04-0.27-0.15-0.27h-2.84l2.99-5.45c0.09-0.18,0.02-0.27-0.2-0.27h-3.81
c-0.11,0-0.2,0.06-0.29,0.18l-2.78,7.4c-0.02,0.18,0.04,0.27,0.19,0.27h2.75L7.96,24.51z M16.46,18.18h0.27l5.22-7.67
c0.05-0.08,0.06-0.15,0.04-0.2s-0.08-0.07-0.17-0.07h-2.1l2.18-4.03c0.12-0.2,0.06-0.3-0.18-0.3h-2.74c-0.13,0-0.23,0.06-0.3,0.19
l-2.08,5.48c-0.03,0.09-0.03,0.16,0.01,0.21c0.04,0.05,0.1,0.07,0.19,0.07h2.04L16.46,18.18z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 778 B

After

Width:  |  Height:  |  Size: 806 B

@@ -1,4 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 4.14 16.90 C 4.14 15.74 4.49 14.72 5.20 13.82 C 5.91 12.92 6.82 12.35 7.94 12.10 C 8.17 11.07 8.64 10.17 9.34 9.40 C 10.04 8.63 10.89 8.08 11.87 7.75 C 12.49 7.54 13.13 7.43 13.80 7.43 C 14.61 7.43 15.40 7.59 16.15 7.91 C 16.18 7.86 17.60 8.79 17.60 8.79 C 18.66 9.70 19.32 10.76 19.57 11.97 L 19.89 11.97 C 21.13 11.97 22.19 12.36 23.06 13.15 C 23.11 13.11 24.31 14.31 24.17 14.43 C 24.57 15.13 24.79 15.88 24.82 16.67 C 24.83 16.72 24.83 16.79 24.83 16.90 C 24.83 17.79 24.61 18.62 24.16 19.38 C 23.72 20.14 23.11 20.74 22.36 21.18 C 21.60 21.62 20.77 21.85 19.88 21.85 L 9.07 21.85 C 8.18 21.85 7.35 21.63 6.59 21.18 C 5.83 20.73 5.24 20.13 4.80 19.38 C 4.36 18.63 4.14 17.80 4.14 16.90 L 4.14 16.90 Z M 5.85 16.90 C 5.85 17.79 6.17 18.56 6.81 19.21 C 7.45 19.86 8.20 20.19 9.07 20.19 L 19.88 20.19 C 20.77 20.19 21.53 19.87 22.16 19.22 C 22.79 18.57 23.11 17.80 23.11 16.90 C 23.11 16.02 22.79 15.27 22.15 14.64 C 21.51 14.01 20.75 13.69 19.87 13.69 L 18.09 13.69 L 17.99 12.94 C 17.89 11.93 17.47 11.06 16.73 10.35 C 15.99 9.64 15.11 9.24 14.10 9.15 C 14.07 9.15 14.02 9.15 13.95 9.14 C 13.88 9.13 13.84 9.13 13.80 9.13 C 13.29 9.13 12.78 9.23 12.26 9.42 L 12.26 9.40 C 11.53 9.68 10.91 10.14 10.42 10.77 C 9.92 11.40 9.62 12.12 9.52 12.94 L 9.45 13.66 L 8.77 13.69 C 7.93 13.79 7.23 14.14 6.67 14.75 C 6.11 15.36 5.85 16.07 5.85 16.90 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<path id="moon" d="M 17.16 6.67 C 17.54 6.33 17.93 6.06 18.33 5.88 C 18.73 5.70 19.13 5.56 19.51 5.47 C 19.89 5.38 20.27 5.34 20.63 5.34 C 21.01 5.34 21.42 5.39 21.86 5.50 L 22.68 5.75 C 22.82 5.81 22.86 5.88 22.82 5.97 L 22.68 6.57 C 22.61 6.88 22.58 7.17 22.58 7.43 C 22.58 7.74 22.63 8.06 22.73 8.38 C 22.83 8.70 22.97 9.01 23.17 9.32 C 23.36 9.63 23.63 9.90 23.97 10.15 C 24.31 10.40 24.69 10.59 25.12 10.72 L 25.74 10.94 C 25.84 10.97 25.89 11.02 25.89 11.10 C 25.89 11.12 25.88 11.14 25.87 11.17 L 25.69 11.84 C 25.47 12.72 24.70 13.84 24.18 14.42 L 23.09 13.17 C 23.35 12.89 23.68 12.40 23.84 12.06 C 22.93 11.63 22.21 10.97 21.68 10.09 C 21.16 9.21 20.89 8.28 20.89 7.31 L 20.89 7.07 C 20.84 7.06 20.76 7.06 20.65 7.06 C 20.07 7.05 19.50 7.19 18.95 7.50 C 18.40 7.80 17.93 8.26 17.60 8.80 L 16.15 7.92 C 16.41 7.51 16.82 6.97 17.16 6.67 L 17.16 6.67 Z"/> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M4.14,16.9c0-1.16,0.35-2.18,1.06-3.08s1.62-1.47,2.74-1.72c0.23-1.03,0.7-1.93,1.4-2.7c0.7-0.77,1.55-1.32,2.53-1.65
c0.62-0.21,1.26-0.32,1.93-0.32c0.81,0,1.6,0.16,2.35,0.48c0.28-0.47,0.61-0.88,0.99-1.22c0.38-0.34,0.77-0.61,1.17-0.79
c0.4-0.18,0.8-0.32,1.18-0.41s0.76-0.13,1.12-0.13c0.38,0,0.79,0.05,1.23,0.16l0.82,0.25c0.14,0.06,0.18,0.13,0.14,0.22l-0.14,0.6
c-0.07,0.31-0.1,0.6-0.1,0.86c0,0.31,0.05,0.63,0.15,0.95c0.1,0.32,0.24,0.63,0.44,0.94c0.19,0.31,0.46,0.58,0.8,0.83
c0.34,0.25,0.72,0.44,1.15,0.57l0.62,0.22c0.1,0.03,0.15,0.08,0.15,0.16c0,0.02-0.01,0.04-0.02,0.07l-0.18,0.67
c-0.27,1.08-0.78,1.93-1.5,2.57c0.4,0.7,0.62,1.45,0.65,2.24c0.01,0.05,0.01,0.12,0.01,0.23c0,0.89-0.22,1.72-0.67,2.48
c-0.44,0.76-1.05,1.36-1.8,1.8c-0.76,0.44-1.59,0.67-2.48,0.67H9.07c-0.89,0-1.72-0.22-2.48-0.67s-1.35-1.05-1.79-1.8
S4.14,17.8,4.14,16.9z M5.85,16.9c0,0.89,0.32,1.66,0.96,2.31c0.64,0.65,1.39,0.98,2.26,0.98h10.81c0.89,0,1.65-0.32,2.28-0.97
s0.95-1.42,0.95-2.32c0-0.88-0.32-1.63-0.96-2.26c-0.64-0.63-1.4-0.95-2.28-0.95h-1.78l-0.1-0.75c-0.1-1.01-0.52-1.88-1.26-2.59
s-1.62-1.11-2.63-1.2c-0.03,0-0.08,0-0.15-0.01c-0.07-0.01-0.11-0.01-0.15-0.01c-0.51,0-1.02,0.1-1.54,0.29V9.4
c-0.73,0.28-1.35,0.74-1.84,1.37c-0.5,0.63-0.8,1.35-0.9,2.17l-0.07,0.72l-0.68,0.03c-0.84,0.1-1.54,0.45-2.1,1.06
S5.85,16.07,5.85,16.9z M17.6,8.79c1.06,0.91,1.72,1.97,1.97,3.18h0.32c1.24,0,2.3,0.39,3.17,1.18c0.33-0.31,0.58-0.67,0.76-1.07
c-0.91-0.43-1.63-1.09-2.16-1.97c-0.52-0.88-0.79-1.81-0.79-2.78V7.09c-0.05-0.01-0.13-0.01-0.24-0.01
c-0.58-0.01-1.15,0.13-1.7,0.44C18.38,7.82,17.93,8.24,17.6,8.79z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

@@ -1,12 +1,34 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 5.19 13.80 C 5.91 12.90 6.82 12.33 7.93 12.07 C 8.24 10.70 8.94 9.58 10.03 8.71 C 11.12 7.84 12.38 7.40 13.79 7.40 C 14.62 7.40 15.41 7.57 16.16 7.89 C 16.20 7.82 17.63 8.81 17.62 8.83 C 18.66 9.69 19.30 10.75 19.56 12.00 L 19.88 12.00 C 21.17 12.00 22.25 12.39 23.13 13.18 C 23.17 13.15 24.34 14.37 24.21 14.49 C 24.64 15.24 24.86 16.04 24.86 16.90 C 24.86 18.24 24.40 19.39 23.47 20.35 C 22.55 21.31 21.42 21.82 20.09 21.86 C 19.96 21.86 19.89 21.80 19.89 21.69 L 19.89 20.35 C 19.89 20.24 19.96 20.18 20.09 20.18 C 20.94 20.14 21.67 19.80 22.27 19.16 C 22.87 18.52 23.17 17.77 23.17 16.90 C 23.17 16.03 22.84 15.27 22.19 14.63 C 21.54 13.99 20.77 13.67 19.88 13.67 L 18.27 13.67 C 18.16 13.67 18.10 13.61 18.10 13.50 L 18.02 12.92 C 17.90 11.84 17.44 10.93 16.62 10.20 C 15.80 9.47 14.85 9.10 13.77 9.10 C 12.68 9.10 11.73 9.47 10.92 10.20 C 10.11 10.93 9.66 11.84 9.55 12.92 L 9.48 13.46 C 9.48 13.58 9.41 13.64 9.28 13.64 L 8.75 13.67 C 7.91 13.77 7.21 14.13 6.65 14.74 C 6.09 15.36 5.81 16.08 5.81 16.91 C 5.81 17.78 6.11 18.53 6.71 19.17 C 7.31 19.81 8.03 20.15 8.89 20.19 C 9.01 20.19 9.07 20.25 9.07 20.36 L 9.07 21.70 C 9.07 21.81 9.01 21.87 8.89 21.87 C 7.55 21.81 6.42 21.29 5.49 20.34 C 4.56 19.39 4.10 18.24 4.10 16.91 C 4.10 15.76 4.47 14.70 5.19 13.80 L 5.19 13.80 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<path id="moon" d="M 17.16 6.67 C 17.55 6.32 17.94 6.05 18.35 5.87 C 18.76 5.69 19.15 5.56 19.52 5.47 C 19.89 5.38 20.25 5.34 20.60 5.34 C 21.05 5.34 21.49 5.41 21.91 5.53 L 22.71 5.78 C 22.83 5.84 22.88 5.91 22.85 6.00 L 22.71 6.58 C 22.65 6.86 22.62 7.13 22.63 7.37 C 22.63 7.82 22.71 8.26 22.88 8.69 C 23.05 9.13 23.34 9.54 23.74 9.94 C 24.15 10.34 24.63 10.62 25.20 10.79 L 25.76 10.96 C 25.87 10.99 25.92 11.05 25.92 11.12 C 25.92 11.16 25.91 11.18 25.89 11.19 L 25.76 11.87 C 25.55 12.71 24.90 13.91 24.23 14.50 L 23.15 13.22 C 23.41 12.96 23.71 12.50 23.88 12.11 C 22.96 11.67 22.23 11.02 21.71 10.16 C 21.19 9.30 20.93 8.39 20.93 7.41 L 20.93 7.10 C 20.88 7.09 20.79 7.08 20.68 7.08 C 20.06 7.07 19.47 7.22 18.92 7.52 C 18.39 7.81 17.93 8.29 17.62 8.82 L 16.16 7.92 C 16.41 7.53 16.83 6.97 17.16 6.67 L 17.16 6.67 Z"/> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<g id="rain"> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M 16.97 21.08 C 16.97 21.24 17.02 21.40 17.12 21.54 C 17.22 21.68 17.37 21.79 17.57 21.85 C 17.74 21.87 17.83 21.88 17.84 21.88 C 18.25 21.88 18.50 21.68 18.61 21.27 L 19.48 18.10 C 19.54 17.86 19.52 17.65 19.41 17.45 C 19.30 17.26 19.13 17.13 18.91 17.06 C 18.68 16.99 18.46 17.01 18.27 17.13 C 18.07 17.24 17.94 17.41 17.87 17.64 L 17.00 20.81 C 16.98 20.90 16.97 20.99 16.97 21.08 Z"/> <path d="M4.1,16.91c0,1.33,0.46,2.48,1.39,3.43s2.06,1.47,3.4,1.53c0.12,0,0.18-0.06,0.18-0.17v-1.34c0-0.11-0.06-0.17-0.18-0.17
<path d="M 16.25 23.64 C 16.25 23.77 16.27 23.87 16.32 23.95 C 16.40 24.15 16.55 24.30 16.76 24.39 C 16.88 24.44 16.99 24.47 17.11 24.47 C 17.17 24.47 17.27 24.45 17.41 24.41 C 17.63 24.32 17.78 24.18 17.86 23.97 C 17.94 23.75 17.94 23.54 17.86 23.34 C 17.78 23.14 17.64 22.99 17.44 22.89 C 17.22 22.79 17.00 22.78 16.79 22.87 C 16.57 22.95 16.42 23.11 16.32 23.33 C 16.27 23.41 16.25 23.51 16.25 23.64 Z"/> c-0.86-0.04-1.58-0.38-2.18-1.02s-0.9-1.39-0.9-2.26c0-0.83,0.28-1.55,0.84-2.17c0.56-0.61,1.26-0.97,2.1-1.07l0.53-0.03
<path d="M 12.81 24.06 C 12.81 24.44 13.02 24.70 13.45 24.84 C 13.54 24.87 13.62 24.89 13.68 24.89 C 13.79 24.89 13.91 24.86 14.03 24.81 C 14.26 24.73 14.42 24.54 14.50 24.24 L 16.15 18.12 C 16.21 17.88 16.19 17.67 16.08 17.47 C 15.97 17.28 15.80 17.15 15.58 17.08 C 15.35 17.01 15.13 17.03 14.93 17.15 C 14.73 17.26 14.59 17.43 14.53 17.66 L 12.85 23.83 C 12.82 23.92 12.81 24.00 12.81 24.06 Z"/> c0.13,0,0.2-0.06,0.2-0.18l0.07-0.54c0.11-1.08,0.56-1.99,1.37-2.72c0.81-0.73,1.76-1.1,2.85-1.1c1.08,0,2.03,0.37,2.85,1.1
<path d="M 12.07 26.71 C 12.07 26.83 12.09 26.93 12.13 27.00 C 12.22 27.22 12.37 27.37 12.58 27.45 C 12.67 27.50 12.78 27.52 12.91 27.52 C 12.97 27.52 13.07 27.50 13.21 27.46 C 13.44 27.38 13.60 27.23 13.69 27.01 C 13.79 26.79 13.79 26.57 13.69 26.35 C 13.59 26.13 13.44 25.98 13.24 25.89 C 13.04 25.80 12.84 25.80 12.63 25.89 C 12.44 25.97 12.30 26.09 12.21 26.25 C 12.11 26.42 12.07 26.57 12.07 26.71 Z"/> c0.82,0.73,1.28,1.64,1.4,2.72l0.08,0.58c0,0.11,0.06,0.17,0.17,0.17h1.61c0.89,0,1.66,0.32,2.31,0.96c0.65,0.64,0.98,1.4,0.98,2.27
<path d="M 10.20 21.11 C 10.20 21.26 10.25 21.41 10.36 21.56 C 10.47 21.71 10.62 21.82 10.82 21.88 C 11.08 21.98 11.30 21.98 11.49 21.88 C 11.68 21.78 11.81 21.59 11.89 21.31 L 12.77 18.10 C 12.84 17.85 12.81 17.63 12.69 17.43 C 12.57 17.23 12.39 17.11 12.15 17.06 C 11.93 16.99 11.72 17.01 11.52 17.13 C 11.32 17.24 11.19 17.41 11.12 17.64 L 10.24 20.86 C 10.24 20.88 10.23 20.92 10.22 20.98 C 10.21 21.03 10.20 21.08 10.20 21.11 Z"/> c0,0.87-0.3,1.62-0.9,2.26c-0.6,0.64-1.33,0.98-2.18,1.02c-0.13,0-0.2,0.06-0.2,0.17v1.34c0,0.11,0.07,0.17,0.2,0.17
<path d="M 9.58 23.94 C 9.67 24.15 9.82 24.30 10.04 24.39 C 10.23 24.49 10.44 24.50 10.66 24.41 C 10.88 24.33 11.03 24.18 11.11 23.96 C 11.21 23.74 11.22 23.53 11.13 23.31 C 11.05 23.10 10.90 22.95 10.68 22.87 C 10.48 22.77 10.27 22.76 10.06 22.85 C 9.85 22.94 9.69 23.09 9.59 23.31 C 9.50 23.48 9.49 23.69 9.58 23.94 Z"/> c1.33-0.04,2.46-0.55,3.38-1.51c0.93-0.96,1.39-2.11,1.39-3.45c0-0.86-0.22-1.66-0.65-2.41c0.79-0.74,1.3-1.62,1.55-2.62l0.13-0.68
</g> c0.02-0.01,0.03-0.03,0.03-0.07c0-0.07-0.05-0.13-0.16-0.16l-0.56-0.17c-0.57-0.17-1.05-0.45-1.46-0.85
c-0.4-0.4-0.69-0.81-0.86-1.25c-0.17-0.43-0.25-0.87-0.25-1.32c-0.01-0.24,0.02-0.51,0.08-0.79l0.14-0.58
c0.03-0.09-0.02-0.16-0.14-0.22l-0.8-0.25c-0.42-0.12-0.86-0.19-1.31-0.19c-0.35,0-0.71,0.04-1.08,0.13s-0.76,0.22-1.17,0.4
c-0.41,0.18-0.8,0.45-1.19,0.8c-0.38,0.35-0.72,0.75-1,1.22c-0.75-0.32-1.54-0.49-2.37-0.49c-1.41,0-2.67,0.44-3.76,1.31
s-1.79,1.99-2.1,3.36c-1.11,0.26-2.02,0.83-2.74,1.73S4.1,15.76,4.1,16.91z M9.58,23.94c0.09,0.21,0.24,0.36,0.46,0.45
c0.19,0.1,0.4,0.11,0.62,0.02c0.22-0.08,0.37-0.23,0.45-0.45c0.1-0.22,0.11-0.43,0.02-0.65c-0.08-0.21-0.23-0.36-0.45-0.44
c-0.2-0.1-0.41-0.11-0.62-0.02c-0.21,0.09-0.37,0.24-0.47,0.46C9.5,23.48,9.49,23.69,9.58,23.94z M10.2,21.11
c0,0.15,0.05,0.3,0.16,0.45s0.26,0.26,0.46,0.32c0.26,0.1,0.48,0.1,0.67,0c0.19-0.1,0.32-0.29,0.4-0.57l0.88-3.21
c0.07-0.25,0.04-0.47-0.08-0.67c-0.12-0.2-0.3-0.32-0.54-0.37c-0.22-0.07-0.43-0.05-0.63,0.07c-0.2,0.11-0.33,0.28-0.4,0.51
l-0.88,3.22c0,0.02-0.01,0.06-0.02,0.12C10.21,21.03,10.2,21.08,10.2,21.11z M12.07,26.71c0,0.12,0.02,0.22,0.06,0.29
c0.09,0.22,0.24,0.37,0.45,0.45c0.09,0.05,0.2,0.07,0.33,0.07c0.06,0,0.16-0.02,0.3-0.06c0.23-0.08,0.39-0.23,0.48-0.45
c0.1-0.22,0.1-0.44,0-0.66c-0.1-0.22-0.25-0.37-0.45-0.46c-0.2-0.09-0.4-0.09-0.61,0c-0.19,0.08-0.33,0.2-0.42,0.36
C12.11,26.42,12.07,26.57,12.07,26.71z M12.81,24.06c0,0.38,0.21,0.64,0.64,0.78c0.09,0.03,0.17,0.05,0.23,0.05
c0.11,0,0.23-0.03,0.35-0.08c0.23-0.08,0.39-0.27,0.47-0.57l1.65-6.12c0.06-0.24,0.04-0.45-0.07-0.65c-0.11-0.19-0.28-0.32-0.5-0.39
c-0.23-0.07-0.45-0.05-0.65,0.07c-0.2,0.11-0.34,0.28-0.4,0.51l-1.68,6.17C12.82,23.92,12.81,24,12.81,24.06z M16.25,23.64
c0,0.13,0.02,0.23,0.07,0.31c0.08,0.2,0.23,0.35,0.44,0.44c0.12,0.05,0.23,0.08,0.35,0.08c0.06,0,0.16-0.02,0.3-0.06
c0.22-0.09,0.37-0.23,0.45-0.44c0.08-0.22,0.08-0.43,0-0.63c-0.08-0.2-0.22-0.35-0.42-0.45c-0.22-0.1-0.44-0.11-0.65-0.02
c-0.22,0.08-0.37,0.24-0.47,0.46C16.27,23.41,16.25,23.51,16.25,23.64z M16.97,21.08c0,0.16,0.05,0.32,0.15,0.46
c0.1,0.14,0.25,0.25,0.45,0.31c0.17,0.02,0.26,0.03,0.27,0.03c0.41,0,0.66-0.2,0.77-0.61l0.87-3.17c0.06-0.24,0.04-0.45-0.07-0.65
c-0.11-0.19-0.28-0.32-0.5-0.39c-0.23-0.07-0.45-0.05-0.64,0.07c-0.2,0.11-0.33,0.28-0.4,0.51L17,20.81
C16.98,20.9,16.97,20.99,16.97,21.08z M17.62,8.83c0.31-0.57,0.75-1.01,1.3-1.31c0.55-0.3,1.14-0.45,1.76-0.44
c0.11,0,0.2,0.01,0.25,0.02v0.31c0,0.98,0.26,1.89,0.78,2.75c0.52,0.86,1.25,1.51,2.17,1.95c-0.19,0.44-0.44,0.79-0.75,1.07
C22.25,12.39,21.17,12,19.88,12h-0.32C19.3,10.75,18.66,9.69,17.62,8.83z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

@@ -1,5 +1,21 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 5.23 13.85 C 5.95 12.95 6.86 12.37 7.96 12.11 C 8.27 10.75 8.97 9.63 10.06 8.76 C 11.15 7.89 12.40 7.45 13.81 7.45 C 14.66 7.45 15.43 7.60 16.14 7.90 C 16.18 7.83 17.61 8.79 17.60 8.81 C 18.63 9.66 19.29 10.71 19.58 11.97 L 19.90 11.97 C 21.13 11.97 22.20 12.36 23.12 13.15 C 23.16 13.11 24.32 14.31 24.18 14.44 C 24.63 15.20 24.86 16.03 24.86 16.92 C 24.86 18.26 24.40 19.41 23.48 20.37 C 22.56 21.33 21.43 21.84 20.10 21.88 C 19.97 21.88 19.90 21.82 19.90 21.71 L 19.90 20.34 C 19.90 20.22 19.97 20.16 20.10 20.16 C 20.97 20.09 21.70 19.74 22.29 19.12 C 22.88 18.50 23.18 17.76 23.18 16.91 C 23.18 16.02 22.86 15.26 22.22 14.63 C 21.58 14.00 20.81 13.68 19.90 13.68 L 18.29 13.68 C 18.17 13.68 18.11 13.62 18.11 13.50 L 18.04 12.92 C 17.92 11.83 17.46 10.92 16.65 10.20 C 15.84 9.47 14.89 9.11 13.80 9.11 C 12.71 9.11 11.76 9.47 10.95 10.20 C 10.14 10.92 9.69 11.83 9.58 12.91 L 9.51 13.43 C 9.51 13.54 9.44 13.60 9.31 13.60 L 8.78 13.67 C 7.94 13.74 7.25 14.09 6.68 14.71 C 6.11 15.33 5.83 16.06 5.83 16.90 C 5.83 17.75 6.13 18.49 6.72 19.11 C 7.31 19.74 8.04 20.08 8.91 20.15 C 9.02 20.15 9.08 20.21 9.08 20.33 L 9.08 21.70 C 9.08 21.81 9.02 21.87 8.91 21.87 C 7.57 21.81 6.44 21.29 5.51 20.34 C 4.58 19.39 4.12 18.24 4.12 16.91 C 4.12 15.76 4.48 14.74 5.23 13.85 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<path id="moon" d="M 17.14 6.68 C 17.53 6.33 17.93 6.06 18.34 5.88 C 18.75 5.69 19.15 5.56 19.53 5.47 C 19.92 5.38 20.29 5.34 20.65 5.34 C 21.05 5.34 21.46 5.39 21.90 5.50 L 22.69 5.74 C 22.81 5.79 22.86 5.87 22.83 5.96 L 22.69 6.58 C 22.63 6.86 22.60 7.13 22.60 7.37 C 22.60 7.82 22.68 8.26 22.85 8.69 C 23.02 9.12 23.30 9.53 23.70 9.92 C 24.10 10.30 24.58 10.58 25.15 10.74 L 25.73 10.91 C 25.84 10.94 25.89 11.00 25.89 11.07 C 25.89 11.11 25.89 11.13 25.88 11.14 L 25.73 11.86 C 25.54 12.69 24.83 13.98 24.17 14.49 L 23.16 13.27 C 23.48 12.99 23.73 12.40 23.87 12.08 C 22.94 11.63 22.22 10.98 21.70 10.12 C 21.18 9.26 20.92 8.35 20.92 7.39 L 20.92 7.08 C 20.87 7.07 20.78 7.06 20.65 7.06 C 20.06 7.06 19.48 7.21 18.93 7.51 C 18.39 7.80 17.93 8.29 17.60 8.82 L 16.17 7.92 C 16.42 7.53 16.81 6.98 17.14 6.68 Z"/> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<path id="lightning" d="M 11.79 21.56 C 11.74 21.70 11.79 21.78 11.93 21.78 L 14.09 21.78 L 12.78 25.92 L 13.08 25.92 L 17.25 20.33 C 17.29 20.29 17.30 20.24 17.28 20.19 C 17.26 20.14 17.22 20.12 17.15 20.12 L 14.95 20.12 L 17.26 15.91 C 17.33 15.77 17.28 15.69 17.12 15.69 L 14.18 15.69 C 14.10 15.69 14.03 15.74 13.96 15.83 L 11.79 21.56 Z"/> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M4.12,16.91c0,1.33,0.46,2.48,1.39,3.43s2.06,1.47,3.4,1.53c0.11,0,0.17-0.06,0.17-0.17v-1.37c0-0.12-0.06-0.18-0.17-0.18
c-0.87-0.07-1.6-0.41-2.19-1.04c-0.59-0.62-0.89-1.36-0.89-2.21c0-0.84,0.28-1.57,0.85-2.19c0.57-0.62,1.26-0.97,2.1-1.04l0.53-0.07
c0.13,0,0.2-0.06,0.2-0.17l0.07-0.52c0.11-1.08,0.56-1.99,1.37-2.71c0.81-0.73,1.76-1.09,2.85-1.09c1.09,0,2.04,0.36,2.85,1.09
c0.81,0.72,1.27,1.63,1.39,2.72l0.07,0.58c0,0.12,0.06,0.18,0.18,0.18h1.61c0.91,0,1.68,0.32,2.32,0.95
c0.64,0.63,0.96,1.39,0.96,2.28c0,0.85-0.3,1.59-0.89,2.21c-0.59,0.62-1.32,0.97-2.19,1.04c-0.13,0-0.2,0.06-0.2,0.18v1.37
c0,0.11,0.07,0.17,0.2,0.17c1.33-0.04,2.46-0.55,3.38-1.51s1.38-2.11,1.38-3.45c0-0.89-0.23-1.72-0.68-2.48
c0.8-0.72,1.32-1.58,1.55-2.58l0.15-0.72c0.01-0.01,0.01-0.03,0.01-0.07c0-0.07-0.05-0.13-0.16-0.16l-0.58-0.17
c-0.57-0.16-1.05-0.44-1.45-0.82c-0.4-0.39-0.68-0.8-0.85-1.23c-0.17-0.43-0.25-0.87-0.25-1.32c0-0.24,0.03-0.51,0.09-0.79
l0.14-0.62c0.03-0.09-0.02-0.17-0.14-0.22l-0.79-0.24c-0.44-0.11-0.85-0.16-1.25-0.16c-0.36,0-0.73,0.04-1.12,0.13
c-0.38,0.09-0.78,0.22-1.19,0.41c-0.41,0.18-0.81,0.45-1.2,0.8c-0.39,0.35-0.72,0.75-1,1.22c-0.71-0.3-1.48-0.45-2.33-0.45
c-1.41,0-2.66,0.44-3.75,1.31c-1.09,0.87-1.79,1.99-2.1,3.35c-1.1,0.26-2.01,0.84-2.73,1.74C4.48,14.74,4.12,15.76,4.12,16.91z
M11.79,21.56c-0.05,0.14,0,0.22,0.14,0.22h2.16l-1.31,4.14h0.3l4.17-5.59c0.04-0.04,0.05-0.09,0.03-0.14
c-0.02-0.05-0.06-0.07-0.13-0.07h-2.2l2.31-4.21c0.07-0.14,0.02-0.22-0.14-0.22h-2.94c-0.08,0-0.15,0.05-0.22,0.14L11.79,21.56z
M17.6,8.81c0.33-0.57,0.77-1,1.33-1.3c0.55-0.3,1.13-0.45,1.72-0.45c0.13,0,0.22,0.01,0.27,0.02v0.31c0,0.96,0.26,1.87,0.78,2.73
c0.52,0.86,1.24,1.51,2.17,1.96c-0.16,0.37-0.41,0.73-0.75,1.07c-0.92-0.79-1.99-1.18-3.22-1.18h-0.32
C19.29,10.71,18.63,9.66,17.6,8.81z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

@@ -1,15 +1,42 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 5.13 13.87 C 5.84 12.98 6.76 12.39 7.88 12.10 C 8.19 10.73 8.90 9.61 9.99 8.73 C 11.08 7.85 12.34 7.41 13.75 7.41 C 14.50 7.41 15.29 7.56 16.10 7.87 C 16.15 7.78 17.61 8.73 17.59 8.76 C 18.61 9.59 19.27 10.66 19.58 11.97 L 19.89 11.97 C 21.12 11.97 22.20 12.35 23.12 13.11 C 23.14 13.09 24.30 14.32 24.18 14.43 C 24.63 15.22 24.86 16.06 24.86 16.94 C 24.86 17.81 24.65 18.62 24.23 19.37 C 23.81 20.12 23.23 20.72 22.50 21.17 C 21.77 21.62 20.96 21.86 20.08 21.88 C 19.95 21.88 19.88 21.82 19.88 21.71 L 19.88 20.37 C 19.88 20.26 19.95 20.20 20.08 20.20 C 20.64 20.17 21.16 20.00 21.64 19.69 C 22.12 19.38 22.50 18.98 22.77 18.49 C 23.04 18.00 23.18 17.48 23.18 16.93 C 23.18 16.03 22.86 15.26 22.21 14.62 C 21.56 13.97 20.79 13.65 19.88 13.65 L 18.26 13.65 C 18.15 13.65 18.09 13.58 18.09 13.46 L 18.02 12.89 C 17.91 11.81 17.44 10.90 16.62 10.17 C 15.80 9.44 14.85 9.07 13.76 9.07 C 12.66 9.07 11.71 9.44 10.90 10.17 C 10.09 10.90 9.64 11.82 9.53 12.92 L 9.46 13.43 C 9.46 13.55 9.39 13.61 9.26 13.61 L 8.73 13.68 C 7.90 13.75 7.20 14.10 6.63 14.72 C 6.06 15.34 5.78 16.08 5.78 16.93 C 5.78 17.77 6.09 18.52 6.69 19.16 C 7.29 19.80 8.02 20.15 8.87 20.19 C 8.99 20.19 9.05 20.25 9.05 20.36 L 9.05 21.70 C 9.05 21.81 8.99 21.87 8.87 21.87 C 7.54 21.83 6.40 21.32 5.47 20.36 C 4.54 19.40 4.07 18.26 4.07 16.93 C 4.07 15.77 4.42 14.74 5.13 13.87 L 5.13 13.87 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<path id="moon" d="M 17.10 6.64 C 17.49 6.29 17.89 6.02 18.30 5.83 C 18.71 5.64 19.11 5.51 19.49 5.42 C 19.87 5.33 20.25 5.29 20.61 5.29 C 21.06 5.29 21.49 5.35 21.90 5.46 L 22.70 5.70 C 22.83 5.75 22.87 5.83 22.83 5.93 L 22.70 6.51 C 22.62 6.84 22.59 7.12 22.61 7.33 C 22.61 7.76 22.70 8.19 22.87 8.62 C 23.04 9.06 23.33 9.47 23.74 9.87 C 24.14 10.27 24.64 10.55 25.21 10.72 L 25.76 10.90 C 25.87 10.95 25.93 11.00 25.93 11.06 C 25.93 11.09 25.92 11.11 25.90 11.13 L 25.76 11.81 C 25.57 12.66 24.90 13.83 24.21 14.43 L 23.09 13.16 C 23.40 12.85 23.74 12.38 23.92 12.00 C 22.97 11.56 22.23 10.92 21.70 10.06 C 21.18 9.20 20.92 8.28 20.93 7.30 L 20.93 6.99 C 20.82 6.97 20.72 6.96 20.63 6.96 C 20.03 6.95 19.46 7.10 18.90 7.42 C 18.38 7.72 17.89 8.20 17.57 8.74 L 16.15 7.85 C 16.35 7.47 16.79 6.92 17.10 6.64 L 17.10 6.64 Z"/> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<g id="rain"> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M 17.52 18.81 C 17.52 18.98 17.57 19.14 17.68 19.29 C 17.79 19.44 17.95 19.55 18.17 19.61 C 18.19 19.61 18.23 19.62 18.29 19.63 C 18.35 19.64 18.40 19.65 18.43 19.65 C 18.53 19.65 18.65 19.62 18.79 19.56 C 19.00 19.45 19.14 19.27 19.20 19.04 L 19.44 18.14 C 19.50 17.91 19.48 17.70 19.36 17.51 C 19.25 17.31 19.08 17.18 18.85 17.11 C 18.62 17.04 18.41 17.06 18.21 17.17 C 18.01 17.28 17.89 17.44 17.82 17.68 L 17.54 18.59 C 17.54 18.61 17.53 18.65 17.52 18.71 C 17.53 18.74 17.52 18.78 17.52 18.81 Z"/> <path d="M4.07,16.93c0,1.33,0.47,2.47,1.4,3.43s2.07,1.47,3.4,1.51c0.12,0,0.18-0.06,0.18-0.17v-1.34c0-0.11-0.06-0.17-0.18-0.17
<path d="M 16.91 21.12 C 16.91 21.34 16.99 21.54 17.16 21.69 C 17.31 21.85 17.50 21.93 17.73 21.93 C 17.97 21.93 18.16 21.85 18.32 21.70 C 18.48 21.55 18.55 21.35 18.55 21.12 C 18.55 20.88 18.47 20.69 18.32 20.53 C 18.17 20.37 17.97 20.30 17.73 20.30 C 17.49 20.30 17.30 20.38 17.14 20.53 C 16.98 20.68 16.91 20.88 16.91 21.12 Z"/> c-0.85-0.04-1.58-0.39-2.18-1.03s-0.91-1.39-0.91-2.23c0-0.85,0.28-1.59,0.85-2.21c0.57-0.62,1.27-0.97,2.1-1.04l0.53-0.07
<path d="M 16.17 24.08 C 16.17 24.24 16.22 24.40 16.32 24.56 C 16.42 24.72 16.58 24.83 16.78 24.89 C 16.81 24.89 16.86 24.90 16.92 24.91 C 16.98 24.92 17.02 24.93 17.06 24.93 C 17.47 24.93 17.72 24.71 17.82 24.27 L 17.96 23.67 C 18.03 23.46 18.01 23.25 17.89 23.04 C 17.78 22.83 17.61 22.70 17.38 22.63 C 17.13 22.57 16.90 22.59 16.70 22.71 C 16.50 22.83 16.36 23.00 16.29 23.24 L 16.20 23.83 C 16.20 23.85 16.19 23.90 16.18 23.95 C 16.18 24.00 16.17 24.04 16.17 24.08 Z"/> c0.13,0,0.2-0.06,0.2-0.18l0.07-0.51c0.11-1.1,0.56-2.02,1.37-2.75c0.81-0.73,1.76-1.1,2.86-1.1c1.09,0,2.04,0.37,2.86,1.1
<path d="M 13.42 21.93 C 13.41 22.08 13.45 22.24 13.55 22.40 C 13.65 22.56 13.80 22.66 14.00 22.70 C 14.23 22.76 14.44 22.74 14.64 22.64 C 14.83 22.54 14.97 22.35 15.05 22.08 L 15.32 21.18 C 15.39 20.96 15.37 20.75 15.25 20.55 C 15.13 20.35 14.96 20.22 14.72 20.15 C 14.50 20.08 14.29 20.11 14.08 20.23 C 13.87 20.35 13.74 20.53 13.67 20.76 L 13.45 21.66 C 13.43 21.74 13.42 21.83 13.42 21.93 Z"/> c0.82,0.73,1.29,1.64,1.4,2.72l0.07,0.57c0,0.12,0.06,0.19,0.17,0.19h1.62c0.91,0,1.68,0.32,2.33,0.97
<path d="M 12.79 24.20 C 12.79 24.42 12.87 24.61 13.04 24.78 C 13.20 24.94 13.39 25.02 13.61 25.02 C 13.85 25.02 14.04 24.94 14.20 24.79 C 14.36 24.63 14.43 24.44 14.43 24.20 C 14.43 23.97 14.35 23.78 14.20 23.62 C 14.05 23.46 13.85 23.39 13.61 23.39 C 13.37 23.39 13.18 23.47 13.02 23.62 C 12.87 23.77 12.79 23.97 12.79 24.20 Z"/> c0.65,0.64,0.97,1.41,0.97,2.31c0,0.55-0.14,1.07-0.41,1.56s-0.65,0.89-1.13,1.2c-0.48,0.31-1,0.48-1.56,0.51
<path d="M 12.01 27.10 C 12.01 27.28 12.06 27.44 12.16 27.60 C 12.26 27.76 12.42 27.87 12.64 27.93 C 12.72 27.95 12.81 27.96 12.89 27.96 C 13.32 27.96 13.58 27.76 13.68 27.35 L 13.82 26.76 C 13.88 26.50 13.85 26.28 13.74 26.08 C 13.63 25.88 13.45 25.76 13.22 25.71 C 13.01 25.64 12.80 25.66 12.59 25.78 C 12.38 25.90 12.25 26.07 12.18 26.29 L 12.04 26.88 C 12.02 26.97 12.01 27.04 12.01 27.10 Z"/> c-0.13,0-0.2,0.06-0.2,0.17v1.34c0,0.11,0.07,0.17,0.2,0.17c0.88-0.02,1.69-0.26,2.42-0.71c0.73-0.45,1.31-1.05,1.73-1.8
<path d="M 10.85 18.81 C 10.84 18.97 10.88 19.12 10.99 19.26 C 11.09 19.41 11.25 19.51 11.47 19.58 C 11.68 19.64 11.88 19.62 12.09 19.51 C 12.30 19.40 12.43 19.23 12.50 19.00 L 12.78 18.10 C 12.85 17.86 12.83 17.64 12.71 17.45 C 12.59 17.26 12.41 17.13 12.17 17.06 C 11.95 16.99 11.74 17.01 11.54 17.13 C 11.34 17.24 11.20 17.41 11.13 17.63 L 10.89 18.55 C 10.89 18.57 10.88 18.61 10.87 18.67 C 10.85 18.72 10.85 18.77 10.85 18.81 Z"/> c0.42-0.75,0.63-1.56,0.63-2.43c0-0.88-0.23-1.72-0.68-2.51c0.83-0.74,1.36-1.62,1.58-2.62l0.14-0.68c0.02-0.02,0.03-0.04,0.03-0.07
<path d="M 10.24 21.08 C 10.24 21.29 10.32 21.48 10.49 21.65 C 10.65 21.82 10.83 21.90 11.05 21.90 C 11.29 21.90 11.49 21.82 11.65 21.66 C 11.81 21.50 11.89 21.31 11.89 21.07 C 11.89 20.84 11.81 20.64 11.65 20.48 C 11.49 20.32 11.29 20.24 11.05 20.24 C 10.82 20.24 10.62 20.32 10.47 20.47 C 10.32 20.62 10.24 20.85 10.24 21.08 Z"/> c0-0.06-0.06-0.11-0.17-0.16l-0.55-0.18c-0.57-0.17-1.07-0.45-1.47-0.85c-0.41-0.4-0.7-0.81-0.87-1.25
<path d="M 9.48 23.98 C 9.48 24.15 9.53 24.32 9.64 24.49 C 9.75 24.66 9.91 24.77 10.11 24.84 C 10.34 24.91 10.55 24.90 10.75 24.80 C 10.95 24.70 11.07 24.52 11.14 24.24 L 11.28 23.63 C 11.33 23.40 11.30 23.19 11.19 23.00 C 11.08 22.80 10.91 22.67 10.67 22.60 C 10.44 22.53 10.23 22.56 10.03 22.68 C 9.83 22.80 9.69 22.98 9.63 23.21 L 9.50 23.79 C 9.48 23.83 9.48 23.89 9.48 23.98 Z"/> c-0.17-0.43-0.26-0.86-0.26-1.29c-0.02-0.21,0.01-0.49,0.09-0.82l0.13-0.58c0.04-0.1,0-0.18-0.13-0.23l-0.8-0.24
</g> c-0.41-0.11-0.84-0.17-1.29-0.17c-0.36,0-0.74,0.04-1.12,0.13c-0.38,0.09-0.78,0.22-1.19,0.41s-0.81,0.46-1.2,0.81
c-0.39,0.35-0.72,0.76-1,1.23c-0.81-0.31-1.6-0.46-2.35-0.46c-1.41,0-2.67,0.44-3.76,1.32s-1.8,2-2.11,3.37
c-1.12,0.29-2.04,0.88-2.75,1.77C4.42,14.74,4.07,15.77,4.07,16.93z M9.48,23.98c0,0.17,0.05,0.34,0.16,0.51
c0.11,0.17,0.27,0.28,0.47,0.35c0.23,0.07,0.44,0.06,0.64-0.04s0.32-0.28,0.39-0.56l0.14-0.61c0.05-0.23,0.02-0.44-0.09-0.63
c-0.11-0.2-0.28-0.33-0.52-0.4c-0.23-0.07-0.44-0.04-0.64,0.08s-0.34,0.3-0.4,0.53L9.5,23.79C9.48,23.83,9.48,23.89,9.48,23.98z
M10.24,21.08c0,0.21,0.08,0.4,0.25,0.57c0.16,0.17,0.34,0.25,0.56,0.25c0.24,0,0.44-0.08,0.6-0.24c0.16-0.16,0.24-0.35,0.24-0.59
c0-0.23-0.08-0.43-0.24-0.59c-0.16-0.16-0.36-0.24-0.6-0.24c-0.23,0-0.43,0.08-0.58,0.23S10.24,20.85,10.24,21.08z M10.85,18.81
c-0.01,0.16,0.03,0.31,0.14,0.45c0.1,0.15,0.26,0.25,0.48,0.32c0.21,0.06,0.41,0.04,0.62-0.07c0.21-0.11,0.34-0.28,0.41-0.51
l0.28-0.9c0.07-0.24,0.05-0.46-0.07-0.65c-0.12-0.19-0.3-0.32-0.54-0.39c-0.22-0.07-0.43-0.05-0.63,0.07
c-0.2,0.11-0.34,0.28-0.41,0.5l-0.24,0.92c0,0.02-0.01,0.06-0.02,0.12C10.85,18.72,10.85,18.77,10.85,18.81z M12.01,27.1
c0,0.18,0.05,0.34,0.15,0.5c0.1,0.16,0.26,0.27,0.48,0.33c0.08,0.02,0.17,0.03,0.25,0.03c0.43,0,0.69-0.2,0.79-0.61l0.14-0.59
c0.06-0.26,0.03-0.48-0.08-0.68s-0.29-0.32-0.52-0.37c-0.21-0.07-0.42-0.05-0.63,0.07c-0.21,0.12-0.34,0.29-0.41,0.51l-0.14,0.59
C12.02,26.97,12.01,27.04,12.01,27.1z M12.79,24.2c0,0.22,0.08,0.41,0.25,0.58c0.16,0.16,0.35,0.24,0.57,0.24
c0.24,0,0.43-0.08,0.59-0.23c0.16-0.16,0.23-0.35,0.23-0.59c0-0.23-0.08-0.42-0.23-0.58s-0.35-0.23-0.59-0.23s-0.43,0.08-0.59,0.23
C12.87,23.77,12.79,23.97,12.79,24.2z M13.42,21.93c-0.01,0.15,0.03,0.31,0.13,0.47s0.25,0.26,0.45,0.3
c0.23,0.06,0.44,0.04,0.64-0.06c0.19-0.1,0.33-0.29,0.41-0.56l0.27-0.9c0.07-0.22,0.05-0.43-0.07-0.63c-0.12-0.2-0.29-0.33-0.53-0.4
c-0.22-0.07-0.43-0.04-0.64,0.08s-0.34,0.3-0.41,0.53l-0.22,0.9C13.43,21.74,13.42,21.83,13.42,21.93z M16.17,24.08
c0,0.16,0.05,0.32,0.15,0.48s0.26,0.27,0.46,0.33c0.03,0,0.08,0.01,0.14,0.02c0.06,0.01,0.1,0.02,0.14,0.02
c0.41,0,0.66-0.22,0.76-0.66l0.14-0.6c0.07-0.21,0.05-0.42-0.07-0.63c-0.11-0.21-0.28-0.34-0.51-0.41
c-0.25-0.06-0.48-0.04-0.68,0.08s-0.34,0.29-0.41,0.53l-0.09,0.59c0,0.02-0.01,0.07-0.02,0.12C16.18,24,16.17,24.04,16.17,24.08z
M16.91,21.12c0,0.22,0.08,0.42,0.25,0.57c0.15,0.16,0.34,0.24,0.57,0.24c0.24,0,0.43-0.08,0.59-0.23s0.23-0.35,0.23-0.58
c0-0.24-0.08-0.43-0.23-0.59s-0.35-0.23-0.59-0.23c-0.24,0-0.43,0.08-0.59,0.23S16.91,20.88,16.91,21.12z M17.52,18.81
c0,0.17,0.05,0.33,0.16,0.48s0.27,0.26,0.49,0.32c0.02,0,0.06,0.01,0.12,0.02c0.06,0.01,0.11,0.02,0.14,0.02
c0.1,0,0.22-0.03,0.36-0.09c0.21-0.11,0.35-0.29,0.41-0.52l0.24-0.9c0.06-0.23,0.04-0.44-0.08-0.63c-0.11-0.2-0.28-0.33-0.51-0.4
c-0.23-0.07-0.44-0.05-0.64,0.06s-0.32,0.27-0.39,0.51l-0.28,0.91c0,0.02-0.01,0.06-0.02,0.12C17.53,18.74,17.52,18.78,17.52,18.81z
M17.59,8.76c0.32-0.58,0.76-1.02,1.31-1.34c0.56-0.32,1.13-0.47,1.73-0.46c0.09,0,0.19,0.01,0.3,0.03V7.3
c-0.01,0.98,0.25,1.9,0.77,2.76c0.53,0.86,1.27,1.5,2.22,1.94c-0.19,0.41-0.46,0.78-0.8,1.11c-0.92-0.76-2-1.14-3.23-1.14h-0.31
C19.27,10.66,18.61,9.59,17.59,8.76z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

@@ -1,9 +1,27 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 5.17 13.83 C 5.89 12.93 6.80 12.36 7.91 12.10 C 8.22 10.73 8.93 9.61 10.02 8.73 C 11.11 7.85 12.37 7.41 13.78 7.41 C 14.51 7.41 15.29 7.56 16.11 7.86 C 16.16 7.77 17.60 8.74 17.58 8.77 C 18.64 9.64 19.30 10.70 19.57 11.97 L 19.88 11.97 C 21.12 11.97 22.19 12.34 23.11 13.10 C 23.13 13.08 24.32 14.34 24.20 14.45 C 24.65 15.21 24.88 16.03 24.88 16.91 C 24.88 18.24 24.42 19.39 23.49 20.36 C 22.57 21.32 21.44 21.83 20.11 21.87 C 19.97 21.87 19.90 21.81 19.90 21.70 L 19.90 20.36 C 19.90 20.25 19.97 20.19 20.11 20.19 C 20.97 20.14 21.70 19.80 22.30 19.16 C 22.90 18.52 23.20 17.77 23.20 16.90 C 23.20 16.02 22.87 15.26 22.22 14.62 C 21.57 13.98 20.79 13.66 19.90 13.66 L 18.28 13.66 C 18.17 13.66 18.11 13.60 18.11 13.48 L 18.03 12.91 C 17.91 11.83 17.45 10.92 16.63 10.19 C 15.81 9.46 14.86 9.09 13.77 9.09 C 12.68 9.09 11.72 9.46 10.91 10.19 C 10.10 10.92 9.64 11.83 9.53 12.91 L 9.46 13.45 C 9.46 13.56 9.39 13.62 9.26 13.62 L 8.73 13.66 C 7.90 13.76 7.20 14.11 6.63 14.73 C 6.06 15.35 5.78 16.07 5.78 16.90 C 5.78 17.77 6.08 18.52 6.68 19.16 C 7.28 19.80 8.01 20.14 8.87 20.19 C 8.99 20.19 9.05 20.25 9.05 20.36 L 9.05 21.70 C 9.05 21.81 8.99 21.87 8.87 21.87 C 7.54 21.81 6.40 21.30 5.47 20.34 C 4.54 19.38 4.07 18.23 4.07 16.90 C 4.07 15.75 4.43 14.72 5.17 13.83 L 5.17 13.83 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<path id="moon" d="M 17.11 6.64 C 17.50 6.29 17.90 6.02 18.31 5.84 C 18.72 5.65 19.12 5.52 19.51 5.43 C 19.89 5.34 20.27 5.30 20.65 5.30 C 21.05 5.30 21.47 5.35 21.92 5.45 L 22.71 5.69 C 22.85 5.75 22.89 5.83 22.85 5.93 L 22.71 6.54 C 22.64 6.86 22.61 7.14 22.63 7.36 C 22.63 7.78 22.72 8.21 22.89 8.64 C 23.06 9.07 23.35 9.48 23.76 9.87 C 24.16 10.26 24.65 10.54 25.22 10.70 L 25.78 10.88 C 25.89 10.91 25.94 10.97 25.94 11.04 C 25.94 11.08 25.93 11.10 25.92 11.11 L 25.78 11.83 C 25.57 12.70 24.89 13.81 24.23 14.43 L 23.08 13.16 C 23.35 12.91 23.70 12.45 23.90 12.03 C 22.95 11.58 22.21 10.92 21.69 10.06 C 21.16 9.19 20.91 8.28 20.92 7.31 L 20.92 7.01 C 20.86 7.00 20.77 7.00 20.65 7.00 C 20.03 6.99 19.44 7.14 18.89 7.44 C 18.36 7.73 17.90 8.26 17.58 8.79 L 16.06 7.84 C 16.31 7.49 16.79 6.92 17.11 6.64 L 17.11 6.64 Z"/> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<g id="rain"> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M 16.40 23.82 C 16.40 24.18 16.61 24.42 17.03 24.56 C 17.17 24.60 17.27 24.62 17.33 24.62 C 17.44 24.62 17.56 24.60 17.68 24.55 C 17.89 24.47 18.02 24.27 18.07 23.97 L 19.50 18.10 C 19.56 17.86 19.54 17.65 19.42 17.45 C 19.31 17.26 19.14 17.13 18.91 17.06 C 18.68 16.99 18.46 17.01 18.25 17.13 C 18.04 17.24 17.92 17.41 17.87 17.64 L 16.44 23.54 C 16.42 23.70 16.40 23.80 16.40 23.82 Z"/> <path d="M4.07,16.9c0,1.33,0.47,2.48,1.4,3.44s2.07,1.47,3.4,1.53c0.12,0,0.18-0.06,0.18-0.17v-1.34c0-0.11-0.06-0.17-0.18-0.17
<path d="M 12.24 26.81 C 12.24 26.97 12.29 27.12 12.39 27.27 C 12.49 27.42 12.64 27.52 12.84 27.58 C 12.95 27.61 13.03 27.62 13.08 27.62 C 13.52 27.62 13.79 27.42 13.90 27.03 L 16.15 18.10 C 16.21 17.86 16.19 17.64 16.08 17.45 C 15.97 17.26 15.80 17.13 15.58 17.06 C 15.35 16.99 15.13 17.01 14.92 17.13 C 14.71 17.25 14.58 17.41 14.53 17.63 L 12.27 26.55 C 12.27 26.56 12.27 26.60 12.26 26.67 C 12.24 26.73 12.24 26.78 12.24 26.81 Z"/> c-0.86-0.05-1.59-0.39-2.19-1.03c-0.6-0.64-0.9-1.39-0.9-2.26c0-0.83,0.28-1.55,0.85-2.17c0.57-0.62,1.27-0.97,2.1-1.07l0.53-0.04
<path d="M 9.63 23.74 C 9.63 23.91 9.68 24.07 9.79 24.23 C 9.90 24.39 10.06 24.50 10.28 24.56 C 10.51 24.63 10.73 24.61 10.92 24.52 C 11.12 24.42 11.25 24.24 11.32 23.96 L 12.75 18.09 C 12.81 17.84 12.78 17.61 12.67 17.42 C 12.55 17.22 12.38 17.10 12.15 17.05 C 11.93 16.98 11.72 17.00 11.52 17.12 C 11.32 17.23 11.18 17.40 11.11 17.63 L 9.67 23.53 C 9.67 23.54 9.66 23.57 9.65 23.62 C 9.64 23.67 9.63 23.71 9.63 23.74 Z"/> c0.13,0,0.2-0.06,0.2-0.17l0.07-0.54c0.11-1.08,0.57-1.99,1.38-2.72c0.81-0.73,1.77-1.1,2.86-1.1c1.09,0,2.04,0.37,2.86,1.1
</g> c0.82,0.73,1.28,1.64,1.4,2.72l0.08,0.57c0,0.12,0.06,0.18,0.17,0.18h1.62c0.89,0,1.67,0.32,2.32,0.96c0.65,0.64,0.98,1.4,0.98,2.28
c0,0.87-0.3,1.62-0.9,2.26c-0.6,0.64-1.33,0.98-2.19,1.03c-0.14,0-0.21,0.06-0.21,0.17v1.34c0,0.11,0.07,0.17,0.21,0.17
c1.33-0.04,2.46-0.55,3.38-1.51c0.93-0.97,1.39-2.12,1.39-3.45c0-0.88-0.23-1.7-0.68-2.46c0.81-0.73,1.33-1.6,1.58-2.62l0.14-0.72
c0.01-0.01,0.02-0.03,0.02-0.07c0-0.07-0.05-0.13-0.16-0.16l-0.56-0.18c-0.57-0.16-1.06-0.44-1.46-0.83
c-0.41-0.39-0.7-0.8-0.87-1.23c-0.17-0.43-0.26-0.86-0.26-1.28c-0.02-0.22,0.01-0.5,0.08-0.82l0.14-0.61c0.04-0.1,0-0.18-0.14-0.24
l-0.79-0.24c-0.45-0.1-0.87-0.15-1.27-0.15c-0.38,0-0.76,0.04-1.14,0.13c-0.39,0.09-0.79,0.22-1.2,0.41
c-0.41,0.18-0.81,0.45-1.2,0.8c-0.39,0.35-0.72,0.75-1,1.22c-0.82-0.3-1.6-0.45-2.33-0.45c-1.41,0-2.67,0.44-3.76,1.32
s-1.8,2-2.11,3.37c-1.11,0.26-2.02,0.83-2.74,1.73C4.43,14.72,4.07,15.75,4.07,16.9z M9.63,23.74c0,0.17,0.05,0.33,0.16,0.49
c0.11,0.16,0.27,0.27,0.49,0.33c0.23,0.07,0.45,0.05,0.64-0.04c0.2-0.1,0.33-0.28,0.4-0.56l1.43-5.87c0.06-0.25,0.03-0.48-0.08-0.67
c-0.12-0.2-0.29-0.32-0.52-0.37c-0.22-0.07-0.43-0.05-0.63,0.07c-0.2,0.11-0.34,0.28-0.41,0.51l-1.44,5.9
c0,0.01-0.01,0.04-0.02,0.09C9.64,23.67,9.63,23.71,9.63,23.74z M12.24,26.81c0,0.16,0.05,0.31,0.15,0.46
c0.1,0.15,0.25,0.25,0.45,0.31c0.11,0.03,0.19,0.04,0.24,0.04c0.44,0,0.71-0.2,0.82-0.59l2.25-8.93c0.06-0.24,0.04-0.46-0.07-0.65
c-0.11-0.19-0.28-0.32-0.5-0.39c-0.23-0.07-0.45-0.05-0.66,0.07s-0.34,0.28-0.39,0.5l-2.26,8.92c0,0.01,0,0.05-0.01,0.12
C12.24,26.73,12.24,26.78,12.24,26.81z M16.4,23.82c0,0.36,0.21,0.6,0.63,0.74c0.14,0.04,0.24,0.06,0.3,0.06
c0.11,0,0.23-0.02,0.35-0.07c0.21-0.08,0.34-0.28,0.39-0.58l1.43-5.87c0.06-0.24,0.04-0.45-0.08-0.65
c-0.11-0.19-0.28-0.32-0.51-0.39c-0.23-0.07-0.45-0.05-0.66,0.07c-0.21,0.11-0.33,0.28-0.38,0.51l-1.43,5.9
C16.42,23.7,16.4,23.8,16.4,23.82z M17.58,8.77c0.32-0.58,0.75-1.02,1.31-1.33c0.55-0.3,1.14-0.45,1.76-0.44
c0.12,0,0.21,0,0.27,0.01v0.3c-0.01,0.97,0.24,1.88,0.77,2.75c0.52,0.86,1.26,1.52,2.21,1.97c-0.22,0.46-0.49,0.81-0.79,1.07
c-0.92-0.76-1.99-1.13-3.23-1.13h-0.31C19.3,10.7,18.64,9.64,17.58,8.77z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

@@ -1,12 +1,34 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 5.16 13.82 C 5.88 12.93 6.81 12.36 7.93 12.10 C 8.23 10.73 8.91 9.61 10.00 8.74 C 11.09 7.87 12.34 7.43 13.75 7.43 C 14.58 7.43 15.37 7.59 16.11 7.92 C 16.16 7.84 17.59 8.79 17.58 8.81 C 18.63 9.73 19.27 10.78 19.52 11.97 L 19.84 11.97 C 21.07 11.97 22.16 12.37 23.09 13.18 C 23.13 13.14 24.30 14.37 24.17 14.49 C 24.60 15.24 24.82 16.05 24.82 16.92 C 24.82 18.26 24.36 19.41 23.44 20.37 C 22.52 21.33 21.39 21.84 20.06 21.88 C 19.93 21.88 19.86 21.82 19.86 21.71 L 19.86 20.34 C 19.86 20.22 19.93 20.16 20.06 20.16 C 20.92 20.09 21.66 19.74 22.25 19.12 C 22.84 18.50 23.14 17.76 23.14 16.91 C 23.14 16.02 22.81 15.26 22.17 14.63 C 21.52 14.00 20.75 13.68 19.85 13.68 L 18.24 13.68 C 18.12 13.68 18.06 13.62 18.06 13.50 L 17.98 12.92 C 17.87 11.83 17.40 10.92 16.59 10.20 C 15.78 9.47 14.83 9.11 13.74 9.11 C 12.65 9.11 11.70 9.47 10.89 10.20 C 10.08 10.92 9.63 11.83 9.52 12.91 L 9.45 13.43 C 9.45 13.54 9.38 13.60 9.25 13.60 L 8.72 13.67 C 7.88 13.77 7.18 14.12 6.62 14.74 C 6.06 15.36 5.78 16.07 5.78 16.90 C 5.78 17.75 6.08 18.49 6.67 19.11 C 7.26 19.74 7.99 20.08 8.86 20.15 C 8.97 20.15 9.03 20.21 9.03 20.33 L 9.03 21.70 C 9.03 21.81 8.97 21.87 8.86 21.87 C 7.52 21.81 6.39 21.29 5.46 20.34 C 4.53 19.39 4.07 18.24 4.07 16.91 C 4.07 15.76 4.43 14.73 5.16 13.82 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<path id="moon" d="M 17.11 6.69 C 17.49 6.34 17.89 6.08 18.31 5.89 C 18.72 5.70 19.12 5.57 19.51 5.48 C 19.89 5.39 20.27 5.35 20.65 5.35 C 21.02 5.35 21.43 5.40 21.90 5.49 L 22.05 5.53 L 22.90 5.78 L 22.70 6.58 C 22.65 6.84 22.62 7.10 22.62 7.36 C 22.62 8.05 22.84 8.73 23.29 9.39 C 23.74 10.04 24.37 10.50 25.18 10.74 L 25.94 10.95 L 25.75 11.74 L 25.75 11.87 C 25.55 12.72 24.89 14.00 24.21 14.54 L 23.07 13.20 C 23.32 12.92 23.68 12.46 23.87 12.08 C 22.95 11.63 22.22 10.98 21.70 10.12 C 21.18 9.26 20.92 8.36 20.92 7.41 C 20.92 7.24 20.92 7.12 20.93 7.03 L 20.72 7.03 C 20.08 7.03 19.48 7.19 18.91 7.50 C 18.37 7.80 17.90 8.29 17.58 8.82 L 16.07 7.91 C 16.32 7.54 16.80 6.98 17.11 6.69 Z"/> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<g id="rain"> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M 17.55 18.98 C 17.55 19.14 17.60 19.29 17.70 19.44 C 17.80 19.59 17.96 19.70 18.16 19.76 C 18.30 19.79 18.38 19.81 18.39 19.81 C 18.48 19.81 18.60 19.78 18.77 19.71 C 18.98 19.63 19.12 19.44 19.21 19.16 L 19.49 18.12 C 19.55 17.90 19.52 17.69 19.41 17.49 C 19.30 17.29 19.11 17.16 18.88 17.09 C 18.66 17.02 18.45 17.04 18.25 17.16 C 18.05 17.28 17.92 17.45 17.85 17.68 L 17.59 18.74 C 17.56 18.83 17.55 18.92 17.55 18.98 Z"/> <path d="M4.07,16.91c0,1.33,0.46,2.48,1.39,3.43s2.06,1.47,3.4,1.53c0.11,0,0.17-0.06,0.17-0.17v-1.37c0-0.12-0.06-0.18-0.17-0.18
<path d="M 16.16 23.79 C 16.16 24.17 16.37 24.41 16.80 24.54 C 16.89 24.56 16.97 24.57 17.04 24.57 C 17.19 24.57 17.31 24.55 17.41 24.50 C 17.62 24.42 17.77 24.23 17.85 23.93 L 18.12 22.91 C 18.18 22.66 18.16 22.44 18.04 22.24 C 17.92 22.04 17.75 21.92 17.51 21.87 C 17.28 21.80 17.06 21.82 16.87 21.94 C 16.68 22.06 16.54 22.23 16.47 22.45 L 16.20 23.49 C 16.20 23.51 16.19 23.56 16.18 23.64 C 16.16 23.71 16.16 23.76 16.16 23.79 Z"/> c-0.87-0.07-1.6-0.41-2.19-1.04c-0.59-0.62-0.89-1.36-0.89-2.21c0-0.83,0.28-1.54,0.84-2.16s1.26-0.97,2.1-1.07l0.53-0.07
<path d="M 13.35 22.03 C 13.35 22.18 13.40 22.33 13.50 22.48 C 13.60 22.63 13.75 22.74 13.96 22.81 C 14.18 22.88 14.40 22.86 14.60 22.75 C 14.80 22.64 14.93 22.47 15.00 22.23 L 15.27 21.19 C 15.34 20.98 15.32 20.77 15.21 20.57 C 15.10 20.37 14.94 20.23 14.72 20.16 C 14.48 20.10 14.25 20.13 14.04 20.24 C 13.83 20.35 13.69 20.54 13.62 20.77 L 13.38 21.77 L 13.35 22.03 Z"/> c0.13,0,0.2-0.06,0.2-0.17l0.07-0.52c0.11-1.08,0.56-1.99,1.37-2.71c0.81-0.73,1.76-1.09,2.85-1.09c1.09,0,2.04,0.36,2.85,1.09
<path d="M 12.02 26.80 C 12.02 26.97 12.07 27.13 12.17 27.29 C 12.27 27.45 12.42 27.56 12.62 27.62 C 12.73 27.65 12.80 27.67 12.85 27.67 C 12.94 27.67 13.06 27.64 13.23 27.57 C 13.43 27.49 13.57 27.30 13.66 27.02 L 13.96 25.97 C 14.03 25.76 14.01 25.55 13.89 25.34 C 13.77 25.13 13.60 25.00 13.38 24.93 C 13.14 24.87 12.91 24.89 12.71 25.01 C 12.51 25.13 12.37 25.30 12.30 25.54 L 12.05 26.55 C 12.03 26.63 12.02 26.72 12.02 26.80 Z"/> c0.81,0.72,1.28,1.63,1.39,2.72l0.08,0.58c0,0.12,0.06,0.18,0.18,0.18h1.61c0.9,0,1.67,0.32,2.32,0.95
<path d="M 10.77 18.95 C 10.77 19.06 10.80 19.18 10.87 19.31 C 10.94 19.48 11.12 19.61 11.40 19.69 C 11.64 19.75 11.86 19.73 12.06 19.63 C 12.25 19.53 12.39 19.35 12.46 19.11 L 12.74 18.08 C 12.81 17.85 12.79 17.63 12.67 17.44 C 12.55 17.24 12.38 17.11 12.16 17.05 C 11.92 16.99 11.69 17.01 11.49 17.12 C 11.29 17.23 11.16 17.40 11.09 17.64 L 10.82 18.65 C 10.79 18.78 10.77 18.88 10.77 18.95 Z"/> c0.64,0.63,0.97,1.39,0.97,2.28c0,0.85-0.3,1.59-0.89,2.21c-0.59,0.62-1.33,0.97-2.19,1.04c-0.13,0-0.2,0.06-0.2,0.18v1.37
<path d="M 9.47 23.68 C 9.47 23.83 9.52 23.98 9.62 24.13 C 9.72 24.28 9.87 24.39 10.07 24.46 C 10.29 24.53 10.50 24.52 10.71 24.41 C 10.92 24.30 11.05 24.13 11.12 23.90 L 11.40 22.84 C 11.47 22.63 11.45 22.43 11.33 22.22 C 11.21 22.01 11.04 21.88 10.82 21.81 C 10.59 21.75 10.37 21.78 10.17 21.89 C 9.97 22.00 9.83 22.19 9.75 22.42 L 9.52 23.41 C 9.49 23.57 9.47 23.66 9.47 23.68 Z"/> c0,0.11,0.07,0.17,0.2,0.17c1.33-0.04,2.46-0.55,3.38-1.51c0.92-0.96,1.38-2.11,1.38-3.45c0-0.87-0.22-1.68-0.65-2.43
</g> c0.81-0.73,1.34-1.6,1.58-2.62v-0.13l0.19-0.79l-0.76-0.21c-0.81-0.24-1.44-0.7-1.89-1.35c-0.45-0.66-0.67-1.34-0.67-2.03
c0-0.26,0.03-0.52,0.08-0.78l0.2-0.8l-0.85-0.25L21.9,5.49c-0.47-0.09-0.88-0.14-1.25-0.14c-0.38,0-0.76,0.04-1.14,0.13
c-0.39,0.09-0.79,0.22-1.2,0.41c-0.42,0.19-0.82,0.45-1.2,0.8c-0.38,0.35-0.72,0.76-1,1.23c-0.74-0.33-1.53-0.49-2.36-0.49
c-1.41,0-2.66,0.44-3.75,1.31s-1.77,1.99-2.07,3.36c-1.12,0.26-2.05,0.83-2.77,1.72C4.43,14.73,4.07,15.76,4.07,16.91z M9.47,23.68
c0,0.15,0.05,0.3,0.15,0.45c0.1,0.15,0.25,0.26,0.45,0.33c0.22,0.07,0.43,0.06,0.64-0.05s0.34-0.28,0.41-0.51l0.28-1.06
c0.07-0.21,0.05-0.41-0.07-0.62c-0.12-0.21-0.29-0.34-0.51-0.41c-0.23-0.06-0.45-0.03-0.65,0.08s-0.34,0.3-0.42,0.53l-0.23,0.99
C9.49,23.57,9.47,23.66,9.47,23.68z M10.77,18.95c0,0.11,0.03,0.23,0.1,0.36c0.07,0.17,0.25,0.3,0.53,0.38
c0.24,0.06,0.46,0.04,0.66-0.06c0.19-0.1,0.33-0.28,0.4-0.52l0.28-1.03c0.07-0.23,0.05-0.45-0.07-0.64
c-0.12-0.2-0.29-0.33-0.51-0.39c-0.24-0.06-0.47-0.04-0.67,0.07c-0.2,0.11-0.33,0.28-0.4,0.52l-0.27,1.01
C10.79,18.78,10.77,18.88,10.77,18.95z M12.02,26.8c0,0.17,0.05,0.33,0.15,0.49c0.1,0.16,0.25,0.27,0.45,0.33
c0.11,0.03,0.18,0.05,0.23,0.05c0.09,0,0.21-0.03,0.38-0.1c0.2-0.08,0.34-0.27,0.43-0.55l0.3-1.05c0.07-0.21,0.05-0.42-0.07-0.63
c-0.12-0.21-0.29-0.34-0.51-0.41c-0.24-0.06-0.47-0.04-0.67,0.08c-0.2,0.12-0.34,0.29-0.41,0.53l-0.25,1.01
C12.03,26.63,12.02,26.72,12.02,26.8z M13.35,22.03c0,0.15,0.05,0.3,0.15,0.45s0.25,0.26,0.46,0.33c0.22,0.07,0.44,0.05,0.64-0.06
c0.2-0.11,0.33-0.28,0.4-0.52l0.27-1.04c0.07-0.21,0.05-0.42-0.06-0.62c-0.11-0.2-0.27-0.34-0.49-0.41
c-0.24-0.06-0.47-0.03-0.68,0.08s-0.35,0.3-0.42,0.53l-0.24,1L13.35,22.03z M16.16,23.79c0,0.38,0.21,0.62,0.64,0.75
c0.09,0.02,0.17,0.03,0.24,0.03c0.15,0,0.27-0.02,0.37-0.07c0.21-0.08,0.36-0.27,0.44-0.57l0.27-1.02c0.06-0.25,0.04-0.47-0.08-0.67
s-0.29-0.32-0.53-0.37c-0.23-0.07-0.45-0.05-0.64,0.07s-0.33,0.29-0.4,0.51l-0.27,1.04c0,0.02-0.01,0.07-0.02,0.15
C16.16,23.71,16.16,23.76,16.16,23.79z M17.55,18.98c0,0.16,0.05,0.31,0.15,0.46c0.1,0.15,0.26,0.26,0.46,0.32
c0.14,0.03,0.22,0.05,0.23,0.05c0.09,0,0.21-0.03,0.38-0.1c0.21-0.08,0.35-0.27,0.44-0.55l0.28-1.04c0.06-0.22,0.03-0.43-0.08-0.63
s-0.3-0.33-0.53-0.4c-0.22-0.07-0.43-0.05-0.63,0.07s-0.33,0.29-0.4,0.52l-0.26,1.06C17.56,18.83,17.55,18.92,17.55,18.98z
M17.58,8.81c0.32-0.56,0.76-1,1.33-1.31c0.57-0.31,1.17-0.47,1.81-0.47h0.21c-0.01,0.09-0.01,0.21-0.01,0.38
c0,0.95,0.26,1.85,0.78,2.71c0.52,0.86,1.25,1.51,2.17,1.96c-0.22,0.43-0.48,0.8-0.78,1.1c-0.93-0.81-2.02-1.21-3.25-1.21h-0.32
C19.27,10.78,18.63,9.73,17.58,8.81z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

@@ -1,13 +1,32 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 5.14 13.84 C 5.85 12.95 6.77 12.36 7.89 12.08 C 8.20 10.71 8.91 9.59 10.00 8.71 C 11.09 7.83 12.35 7.39 13.76 7.39 C 14.54 7.39 15.33 7.56 16.14 7.89 C 16.21 7.76 17.62 8.71 17.58 8.77 C 18.64 9.68 19.30 10.74 19.57 11.97 L 19.88 11.97 C 21.15 11.97 22.22 12.36 23.11 13.15 C 23.14 13.12 24.34 14.35 24.22 14.45 C 24.65 15.19 24.87 16.02 24.87 16.93 C 24.87 17.80 24.66 18.61 24.24 19.36 C 23.82 20.11 23.24 20.71 22.51 21.16 C 21.78 21.61 20.98 21.85 20.10 21.87 C 19.96 21.87 19.89 21.81 19.89 21.70 L 19.89 20.36 C 19.89 20.25 19.96 20.19 20.10 20.19 C 20.95 20.14 21.67 19.80 22.28 19.16 C 22.89 18.52 23.19 17.77 23.19 16.92 C 23.19 16.02 22.87 15.25 22.22 14.61 C 21.57 13.96 20.80 13.64 19.89 13.64 L 18.27 13.64 C 18.16 13.64 18.10 13.58 18.10 13.46 L 18.02 12.89 C 17.90 11.81 17.44 10.90 16.62 10.17 C 15.80 9.44 14.85 9.07 13.76 9.07 C 12.66 9.07 11.71 9.44 10.90 10.18 C 10.09 10.92 9.64 11.84 9.53 12.93 L 9.46 13.45 C 9.46 13.56 9.39 13.62 9.26 13.62 L 8.73 13.69 C 7.90 13.76 7.20 14.10 6.63 14.72 C 6.06 15.34 5.78 16.07 5.78 16.92 C 5.78 17.77 6.08 18.52 6.69 19.16 C 7.29 19.80 8.02 20.15 8.87 20.19 C 8.99 20.19 9.05 20.25 9.05 20.36 L 9.05 21.70 C 9.05 21.81 8.99 21.87 8.87 21.87 C 7.54 21.83 6.40 21.32 5.47 20.36 C 4.54 19.40 4.07 18.26 4.07 16.93 C 4.07 15.77 4.43 14.74 5.14 13.84 L 5.14 13.84 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<path id="moon" d="M 17.13 6.67 C 17.51 6.32 17.90 6.06 18.31 5.87 C 18.72 5.68 19.11 5.55 19.49 5.46 C 19.87 5.37 20.24 5.33 20.61 5.33 C 21.01 5.33 21.42 5.38 21.86 5.49 L 22.66 5.73 C 22.78 5.78 22.82 5.86 22.80 5.95 L 22.69 6.57 C 22.62 6.87 22.59 7.16 22.59 7.43 C 22.59 7.74 22.64 8.06 22.74 8.38 C 22.84 8.71 22.98 9.02 23.18 9.33 C 23.38 9.64 23.65 9.92 23.99 10.17 C 24.33 10.42 24.72 10.61 25.16 10.74 L 25.77 10.91 C 25.88 10.94 25.93 11.00 25.93 11.07 C 25.93 11.11 25.92 11.14 25.91 11.15 L 25.74 11.87 C 25.50 12.76 24.87 13.96 24.23 14.49 L 23.13 13.19 C 23.43 12.87 23.73 12.40 23.87 12.08 C 22.95 11.63 22.22 10.98 21.70 10.12 C 21.18 9.26 20.92 8.35 20.92 7.38 L 20.92 7.07 C 20.85 7.06 20.74 7.05 20.59 7.05 C 20.00 7.06 19.43 7.21 18.88 7.51 C 18.39 7.78 17.87 8.32 17.57 8.77 L 16.16 7.89 C 16.38 7.57 16.85 6.93 17.13 6.67 L 17.13 6.67 Z"/> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<g id="snow"> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M 16.90 24.66 C 16.90 24.89 16.98 25.08 17.14 25.24 C 17.30 25.40 17.50 25.48 17.74 25.48 C 17.98 25.48 18.17 25.40 18.33 25.24 C 18.49 25.08 18.56 24.89 18.56 24.65 C 18.56 24.41 18.48 24.22 18.33 24.06 C 18.17 23.90 17.98 23.83 17.74 23.83 C 17.50 23.83 17.30 23.91 17.14 24.06 C 16.98 24.22 16.90 24.42 16.90 24.66 Z"/> <path d="M4.07,16.93c0,1.33,0.47,2.47,1.4,3.43s2.07,1.47,3.4,1.51c0.12,0,0.18-0.06,0.18-0.17v-1.34c0-0.11-0.06-0.17-0.18-0.17
<path d="M 16.90 21.02 C 16.90 21.26 16.98 21.46 17.15 21.62 C 17.32 21.78 17.51 21.87 17.75 21.87 C 17.99 21.87 18.18 21.79 18.34 21.62 C 18.50 21.45 18.58 21.25 18.58 21.02 C 18.58 20.80 18.50 20.60 18.34 20.44 C 18.18 20.28 17.99 20.20 17.75 20.20 C 17.51 20.20 17.32 20.28 17.15 20.44 C 16.98 20.60 16.90 20.79 16.90 21.02 Z"/> c-0.85-0.04-1.58-0.39-2.18-1.03c-0.61-0.64-0.91-1.39-0.91-2.24c0-0.85,0.28-1.58,0.85-2.2c0.57-0.62,1.27-0.96,2.1-1.03l0.53-0.07
<path d="M 13.66 26.63 C 13.66 26.85 13.74 27.04 13.90 27.20 C 14.07 27.37 14.26 27.45 14.48 27.45 C 14.72 27.45 14.92 27.37 15.09 27.21 C 15.26 27.05 15.34 26.86 15.34 26.62 C 15.34 26.38 15.26 26.18 15.09 26.01 C 14.92 25.84 14.72 25.75 14.48 25.75 C 14.26 25.75 14.07 25.84 13.90 26.01 C 13.75 26.19 13.66 26.40 13.66 26.63 Z"/> c0.13,0,0.2-0.06,0.2-0.17l0.07-0.52c0.11-1.09,0.56-2.01,1.37-2.75s1.76-1.11,2.86-1.11c1.09,0,2.04,0.37,2.86,1.1
<path d="M 13.66 19.32 C 13.66 19.56 13.74 19.75 13.90 19.90 C 14.06 20.06 14.26 20.14 14.48 20.14 C 14.72 20.14 14.93 20.06 15.09 19.91 C 15.25 19.76 15.34 19.56 15.34 19.32 C 15.34 19.09 15.26 18.89 15.09 18.72 C 14.92 18.55 14.72 18.47 14.48 18.47 C 14.26 18.47 14.06 18.55 13.90 18.72 C 13.74 18.89 13.66 19.09 13.66 19.32 Z"/> c0.82,0.73,1.28,1.64,1.4,2.72l0.08,0.57c0,0.12,0.06,0.18,0.17,0.18h1.62c0.91,0,1.68,0.32,2.33,0.97
<path d="M 13.66 22.96 C 13.66 23.20 13.74 23.40 13.90 23.55 C 14.06 23.71 14.26 23.79 14.48 23.79 C 14.72 23.79 14.92 23.71 15.09 23.55 C 15.26 23.39 15.34 23.19 15.34 22.96 C 15.34 22.72 15.26 22.52 15.09 22.35 C 14.92 22.18 14.72 22.09 14.48 22.09 C 14.26 22.09 14.07 22.18 13.90 22.35 C 13.73 22.52 13.66 22.72 13.66 22.96 Z"/> c0.65,0.64,0.97,1.41,0.97,2.31c0,0.85-0.3,1.6-0.91,2.24c-0.61,0.64-1.33,0.98-2.18,1.03c-0.14,0-0.21,0.06-0.21,0.17v1.34
<path d="M 10.46 24.66 C 10.46 24.89 10.54 25.08 10.70 25.24 C 10.86 25.40 11.06 25.48 11.28 25.48 C 11.52 25.48 11.72 25.40 11.88 25.25 C 12.04 25.09 12.12 24.90 12.12 24.66 C 12.12 24.42 12.04 24.23 11.88 24.07 C 11.72 23.91 11.52 23.84 11.28 23.84 C 11.04 23.84 10.85 23.92 10.69 24.07 C 10.54 24.22 10.46 24.42 10.46 24.66 Z"/> c0,0.11,0.07,0.17,0.21,0.17c0.88-0.02,1.68-0.26,2.41-0.71c0.73-0.45,1.31-1.05,1.73-1.8s0.63-1.56,0.63-2.43
<path d="M 10.46 21.02 C 10.46 21.26 10.54 21.46 10.70 21.62 C 10.86 21.79 11.05 21.87 11.29 21.87 C 11.53 21.87 11.73 21.79 11.89 21.62 C 12.05 21.45 12.13 21.25 12.13 21.02 C 12.13 20.80 12.05 20.60 11.89 20.44 C 11.73 20.28 11.53 20.20 11.29 20.20 C 11.06 20.20 10.86 20.28 10.70 20.44 C 10.54 20.60 10.46 20.79 10.46 21.02 Z"/> c0-0.91-0.22-1.74-0.65-2.48c0.74-0.66,1.24-1.52,1.52-2.58l0.17-0.72c0.01-0.01,0.02-0.04,0.02-0.08c0-0.07-0.05-0.13-0.16-0.16
</g> l-0.61-0.17c-0.44-0.13-0.83-0.32-1.17-0.57s-0.61-0.53-0.81-0.84c-0.2-0.31-0.34-0.62-0.44-0.95c-0.1-0.32-0.15-0.64-0.15-0.95
c0-0.27,0.03-0.56,0.1-0.86l0.11-0.62c0.02-0.09-0.02-0.17-0.14-0.22l-0.8-0.24c-0.44-0.11-0.85-0.16-1.25-0.16
c-0.37,0-0.74,0.04-1.12,0.13c-0.38,0.09-0.77,0.22-1.18,0.41c-0.41,0.19-0.8,0.45-1.18,0.8c-0.38,0.35-0.71,0.75-0.99,1.22
c-0.81-0.33-1.6-0.5-2.38-0.5c-1.41,0-2.67,0.44-3.76,1.32s-1.8,2-2.11,3.37c-1.12,0.28-2.04,0.87-2.75,1.76
C4.43,14.74,4.07,15.77,4.07,16.93z M10.46,21.02c0,0.24,0.08,0.44,0.24,0.6c0.16,0.17,0.35,0.25,0.59,0.25
c0.24,0,0.44-0.08,0.6-0.25s0.24-0.37,0.24-0.6c0-0.22-0.08-0.42-0.24-0.58s-0.36-0.24-0.6-0.24c-0.23,0-0.43,0.08-0.59,0.24
C10.54,20.6,10.46,20.79,10.46,21.02z M10.46,24.66c0,0.23,0.08,0.42,0.24,0.58c0.16,0.16,0.36,0.24,0.58,0.24
c0.24,0,0.44-0.08,0.6-0.23c0.16-0.16,0.24-0.35,0.24-0.59c0-0.24-0.08-0.43-0.24-0.59c-0.16-0.16-0.36-0.23-0.6-0.23
c-0.24,0-0.43,0.08-0.59,0.23C10.54,24.22,10.46,24.42,10.46,24.66z M13.66,22.96c0,0.24,0.08,0.44,0.24,0.59
c0.16,0.16,0.36,0.24,0.58,0.24c0.24,0,0.44-0.08,0.61-0.24s0.25-0.36,0.25-0.59c0-0.24-0.08-0.44-0.25-0.61s-0.37-0.26-0.61-0.26
c-0.22,0-0.41,0.09-0.58,0.26S13.66,22.72,13.66,22.96z M13.66,19.32c0,0.24,0.08,0.43,0.24,0.58c0.16,0.16,0.36,0.24,0.58,0.24
c0.24,0,0.45-0.08,0.61-0.23s0.25-0.35,0.25-0.59c0-0.23-0.08-0.43-0.25-0.6s-0.37-0.25-0.61-0.25c-0.22,0-0.42,0.08-0.58,0.25
S13.66,19.09,13.66,19.32z M13.66,26.63c0,0.22,0.08,0.41,0.24,0.57c0.17,0.17,0.36,0.25,0.58,0.25c0.24,0,0.44-0.08,0.61-0.24
c0.17-0.16,0.25-0.35,0.25-0.59c0-0.24-0.08-0.44-0.25-0.61c-0.17-0.17-0.37-0.26-0.61-0.26c-0.22,0-0.41,0.09-0.58,0.26
C13.75,26.19,13.66,26.4,13.66,26.63z M16.9,21.02c0,0.24,0.08,0.44,0.25,0.6s0.36,0.25,0.6,0.25s0.43-0.08,0.59-0.25
s0.24-0.37,0.24-0.6c0-0.22-0.08-0.42-0.24-0.58s-0.35-0.24-0.59-0.24s-0.43,0.08-0.6,0.24S16.9,20.79,16.9,21.02z M16.9,24.66
c0,0.23,0.08,0.42,0.24,0.58c0.16,0.16,0.36,0.24,0.6,0.24s0.43-0.08,0.59-0.24c0.16-0.16,0.23-0.35,0.23-0.59
c0-0.24-0.08-0.43-0.23-0.59c-0.16-0.16-0.35-0.23-0.59-0.23s-0.44,0.08-0.6,0.23C16.98,24.22,16.9,24.42,16.9,24.66z M17.58,8.77
c0.31-0.54,0.75-0.96,1.3-1.26S20,7.06,20.59,7.05c0.15,0,0.26,0.01,0.33,0.02v0.31c0,0.97,0.26,1.88,0.78,2.74s1.25,1.51,2.17,1.96
c-0.16,0.36-0.41,0.72-0.76,1.07c-0.89-0.79-1.96-1.18-3.23-1.18h-0.31C19.3,10.74,18.64,9.68,17.58,8.77z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

@@ -1,11 +1,31 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 5.16 13.82 C 5.88 12.92 6.79 12.34 7.90 12.08 C 8.21 10.72 8.92 9.60 10.01 8.72 C 11.10 7.84 12.36 7.40 13.77 7.40 C 14.51 7.40 15.30 7.55 16.13 7.86 C 16.18 7.77 17.61 8.73 17.59 8.77 C 18.62 9.62 19.28 10.68 19.57 11.94 L 19.90 11.94 C 21.14 11.94 22.21 12.33 23.12 13.11 C 23.15 13.08 24.32 14.32 24.20 14.44 C 24.64 15.21 24.86 16.02 24.86 16.89 C 24.86 18.22 24.40 19.37 23.47 20.34 C 22.54 21.30 21.41 21.81 20.08 21.85 C 19.95 21.85 19.89 21.79 19.89 21.67 L 19.89 20.31 C 19.89 20.18 19.96 20.12 20.08 20.12 C 20.95 20.06 21.68 19.71 22.28 19.09 C 22.88 18.47 23.18 17.73 23.18 16.88 C 23.18 16.00 22.86 15.23 22.21 14.60 C 21.56 13.97 20.79 13.65 19.88 13.65 L 18.26 13.65 C 18.15 13.65 18.09 13.58 18.09 13.46 L 18.02 12.89 C 17.90 11.82 17.44 10.91 16.62 10.18 C 15.80 9.45 14.85 9.08 13.76 9.08 C 12.67 9.08 11.72 9.45 10.91 10.18 C 10.10 10.91 9.65 11.82 9.54 12.90 L 9.47 13.41 C 9.47 13.53 9.40 13.59 9.27 13.59 L 8.74 13.66 C 7.91 13.76 7.21 14.12 6.64 14.73 C 6.07 15.35 5.79 16.07 5.79 16.90 C 5.79 17.64 6.02 18.31 6.50 18.91 C 6.93 19.45 7.63 19.92 8.25 20.12 L 7.67 21.70 C 6.70 21.37 5.70 20.68 5.08 19.86 C 4.42 18.99 4.09 18.00 4.09 16.89 C 4.09 15.74 4.45 14.71 5.16 13.82 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<path id="moon" d="M 17.12 6.66 C 17.50 6.32 17.89 6.05 18.30 5.87 C 18.71 5.69 19.11 5.55 19.49 5.47 C 19.87 5.38 20.25 5.34 20.62 5.35 C 20.98 5.35 21.39 5.40 21.86 5.49 L 22.66 5.73 C 22.78 5.78 22.82 5.86 22.80 5.96 L 22.69 6.57 C 22.62 6.86 22.59 7.14 22.59 7.42 C 22.58 7.84 22.66 8.26 22.83 8.68 C 23.00 9.10 23.28 9.51 23.68 9.90 C 24.08 10.29 24.57 10.57 25.14 10.74 L 25.76 10.91 C 25.86 10.94 25.91 10.99 25.91 11.07 C 25.91 11.11 25.91 11.13 25.90 11.14 L 25.71 11.82 C 25.51 12.67 24.91 13.81 24.21 14.41 L 23.07 13.13 C 23.36 12.84 23.73 12.42 23.88 12.08 C 23.26 11.78 22.72 11.38 22.27 10.87 C 21.81 10.36 21.48 9.81 21.25 9.21 C 21.02 8.61 20.91 7.99 20.91 7.35 L 20.91 7.03 L 20.69 7.03 C 20.08 7.03 19.49 7.18 18.93 7.48 C 18.40 7.76 17.93 8.26 17.61 8.77 L 16.15 7.84 C 16.39 7.48 16.81 6.93 17.12 6.66 Z"/> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<path id="lightning" d="M 8.28 20.08 L 9.35 17.20 C 9.41 17.10 9.48 17.05 9.57 17.05 L 12.53 17.05 C 12.69 17.05 12.73 17.13 12.66 17.27 L 10.19 21.91 L 12.37 21.91 C 12.44 21.91 12.48 21.93 12.51 21.98 C 12.53 22.03 12.53 22.08 12.49 22.12 L 8.26 27.74 L 7.98 27.74 L 9.27 23.56 L 7.15 23.56 C 7.01 23.56 6.97 23.49 7.01 23.35 L 7.66 21.65 C 7.59 21.63 8.21 20.06 8.28 20.08 Z"/> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<g id="rain"> <path d="M4.09,16.89c0,1.11,0.33,2.1,0.99,2.97c0.66,0.87,1.52,1.47,2.58,1.79l-0.65,1.7c-0.04,0.14,0,0.21,0.14,0.21h2.12
<path d="M 17.78 18.87 C 17.78 19.30 18.00 19.58 18.43 19.69 C 18.57 19.71 18.67 19.73 18.73 19.73 C 19.09 19.73 19.34 19.51 19.47 19.08 L 19.75 18.04 C 19.76 17.99 19.76 17.92 19.76 17.82 C 19.77 17.65 19.73 17.49 19.62 17.33 C 19.51 17.17 19.35 17.06 19.13 17.00 C 19.12 17.00 19.08 17.00 19.03 16.99 C 18.98 16.98 18.93 16.98 18.90 16.98 C 18.74 16.98 18.58 17.03 18.42 17.13 C 18.26 17.23 18.15 17.39 18.09 17.60 L 17.80 18.62 C 17.80 18.63 17.80 18.66 17.79 18.72 C 17.79 18.79 17.78 18.84 17.78 18.87 Z"/> l-1.29,4.18h0.28l4.23-5.62c0.04-0.04,0.04-0.09,0.02-0.14c-0.03-0.05-0.07-0.07-0.14-0.07h-2.18l2.47-4.64
<path d="M 16.41 23.67 C 16.42 23.84 16.48 24.00 16.59 24.15 C 16.70 24.30 16.86 24.42 17.07 24.49 C 17.23 24.53 17.34 24.55 17.40 24.55 C 17.74 24.55 17.98 24.32 18.11 23.87 L 18.35 22.85 C 18.42 22.62 18.40 22.40 18.29 22.19 C 18.18 21.98 18.01 21.85 17.79 21.78 C 17.54 21.72 17.31 21.75 17.11 21.86 C 16.91 21.98 16.78 22.16 16.74 22.39 L 16.45 23.42 C 16.45 23.44 16.44 23.48 16.43 23.54 C 16.41 23.61 16.41 23.65 16.41 23.67 Z"/> c0.07-0.14,0.03-0.22-0.13-0.22H9.57c-0.09,0-0.16,0.05-0.22,0.15l-1.07,2.88c-0.71-0.18-1.3-0.57-1.78-1.17s-0.71-1.27-0.71-2.01
<path d="M 13.60 22.00 C 13.60 22.43 13.80 22.68 14.21 22.75 C 14.35 22.78 14.44 22.80 14.48 22.80 C 14.86 22.80 15.11 22.59 15.25 22.17 L 15.55 21.15 C 15.61 20.93 15.58 20.72 15.47 20.52 C 15.36 20.32 15.17 20.18 14.94 20.11 C 14.72 20.04 14.50 20.06 14.30 20.18 C 14.10 20.30 13.96 20.47 13.89 20.71 L 13.64 21.72 C 13.61 21.81 13.60 21.90 13.60 22.00 Z"/> c0-0.83,0.28-1.55,0.85-2.17c0.57-0.61,1.27-0.97,2.1-1.07l0.53-0.07c0.13,0,0.2-0.06,0.2-0.18l0.07-0.51
<path d="M 12.26 26.76 C 12.26 26.92 12.31 27.07 12.41 27.23 C 12.51 27.39 12.66 27.50 12.86 27.56 C 13.02 27.59 13.11 27.61 13.13 27.61 C 13.22 27.61 13.35 27.58 13.50 27.51 C 13.71 27.41 13.85 27.24 13.92 26.98 L 14.20 25.93 C 14.26 25.71 14.24 25.50 14.12 25.30 C 14.00 25.10 13.83 24.96 13.59 24.89 C 13.37 24.83 13.16 24.86 12.96 24.97 C 12.76 25.09 12.62 25.27 12.55 25.50 L 12.28 26.50 L 12.26 26.76 Z"/> c0.11-1.08,0.56-1.99,1.37-2.72c0.81-0.73,1.76-1.1,2.85-1.1c1.09,0,2.04,0.37,2.86,1.1c0.82,0.73,1.28,1.64,1.4,2.71l0.07,0.57
</g> c0,0.12,0.06,0.19,0.17,0.19h1.62c0.91,0,1.68,0.32,2.33,0.95s0.97,1.4,0.97,2.28c0,0.85-0.3,1.59-0.9,2.21
c-0.6,0.62-1.33,0.97-2.2,1.03c-0.12,0-0.19,0.06-0.19,0.19v1.36c0,0.12,0.06,0.18,0.19,0.18c1.33-0.04,2.46-0.55,3.39-1.51
c0.93-0.97,1.39-2.12,1.39-3.45c0-0.87-0.22-1.68-0.66-2.45c0.76-0.74,1.27-1.61,1.51-2.62l0.19-0.68c0.01-0.01,0.01-0.03,0.01-0.07
c0-0.08-0.05-0.13-0.15-0.16l-0.62-0.17c-0.57-0.17-1.06-0.45-1.46-0.84c-0.4-0.39-0.68-0.8-0.85-1.22s-0.25-0.84-0.24-1.26
c0-0.28,0.03-0.56,0.1-0.85l0.11-0.61c0.02-0.1-0.02-0.18-0.14-0.23l-0.8-0.24c-0.47-0.09-0.88-0.14-1.24-0.14
c-0.37-0.01-0.75,0.03-1.13,0.12c-0.38,0.08-0.78,0.22-1.19,0.4c-0.41,0.18-0.8,0.45-1.18,0.79c-0.38,0.34-0.71,0.74-0.99,1.2
C15.3,7.55,14.51,7.4,13.77,7.4c-1.41,0-2.67,0.44-3.76,1.32s-1.8,2-2.11,3.36c-1.11,0.26-2.02,0.84-2.74,1.74
C4.45,14.71,4.09,15.74,4.09,16.89z M12.26,26.76c0,0.16,0.05,0.31,0.15,0.47c0.1,0.16,0.25,0.27,0.45,0.33
c0.16,0.03,0.25,0.05,0.27,0.05c0.09,0,0.22-0.03,0.37-0.1c0.21-0.1,0.35-0.27,0.42-0.53l0.28-1.05c0.06-0.22,0.04-0.43-0.08-0.63
s-0.29-0.34-0.53-0.41c-0.22-0.06-0.43-0.03-0.63,0.08c-0.2,0.12-0.34,0.3-0.41,0.53l-0.27,1L12.26,26.76z M13.6,22
c0,0.43,0.2,0.68,0.61,0.75c0.14,0.03,0.23,0.05,0.27,0.05c0.38,0,0.63-0.21,0.77-0.63l0.3-1.02c0.06-0.22,0.03-0.43-0.08-0.63
s-0.3-0.34-0.53-0.41c-0.22-0.07-0.44-0.05-0.64,0.07c-0.2,0.12-0.34,0.29-0.41,0.53l-0.25,1.01C13.61,21.81,13.6,21.9,13.6,22z
M16.41,23.67c0.01,0.17,0.07,0.33,0.18,0.48s0.27,0.27,0.48,0.34c0.16,0.04,0.27,0.06,0.33,0.06c0.34,0,0.58-0.23,0.71-0.68
l0.24-1.02c0.07-0.23,0.05-0.45-0.06-0.66c-0.11-0.21-0.28-0.34-0.5-0.41c-0.25-0.06-0.48-0.03-0.68,0.08
c-0.2,0.12-0.33,0.3-0.37,0.53l-0.29,1.03c0,0.02-0.01,0.06-0.02,0.12C16.41,23.61,16.41,23.65,16.41,23.67z M17.59,8.77
c0.33-0.56,0.78-0.99,1.34-1.29s1.15-0.45,1.76-0.45h0.22v0.32c0,0.64,0.11,1.26,0.34,1.86c0.23,0.6,0.56,1.15,1.02,1.66
c0.45,0.51,0.99,0.91,1.61,1.21c-0.17,0.38-0.42,0.72-0.76,1.03c-0.91-0.78-1.98-1.17-3.22-1.17h-0.33
C19.28,10.68,18.62,9.62,17.59,8.77z M17.78,18.87c0,0.43,0.22,0.71,0.65,0.82c0.14,0.02,0.24,0.04,0.3,0.04
c0.36,0,0.61-0.22,0.74-0.65l0.28-1.04c0.01-0.05,0.01-0.12,0.01-0.22c0.01-0.17-0.03-0.33-0.14-0.49
c-0.11-0.16-0.27-0.27-0.49-0.33c-0.01,0-0.05,0-0.1-0.01c-0.05-0.01-0.1-0.01-0.13-0.01c-0.16,0-0.32,0.05-0.48,0.15
s-0.27,0.26-0.33,0.47l-0.29,1.02c0,0.01,0,0.04-0.01,0.1C17.79,18.79,17.78,18.84,17.78,18.87z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

@@ -1,9 +1,25 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 5.12 13.81 C 5.84 12.91 6.75 12.33 7.86 12.07 C 8.17 10.70 8.88 9.58 9.97 8.71 C 11.06 7.84 12.32 7.40 13.73 7.40 C 14.49 7.40 15.29 7.55 16.11 7.85 C 16.18 7.74 17.62 8.70 17.59 8.75 C 18.63 9.61 19.29 10.66 19.57 11.92 L 19.89 11.92 C 21.12 11.92 22.19 12.31 23.11 13.10 C 23.15 13.06 24.31 14.30 24.18 14.43 C 24.62 15.20 24.84 16.01 24.84 16.88 C 24.84 17.76 24.63 18.58 24.21 19.33 C 23.79 20.08 23.21 20.68 22.48 21.13 C 21.75 21.58 20.95 21.82 20.07 21.85 C 19.94 21.85 19.88 21.79 19.88 21.67 L 19.88 20.29 C 19.88 20.18 19.95 20.12 20.07 20.12 C 20.94 20.05 21.67 19.70 22.27 19.08 C 22.87 18.46 23.17 17.72 23.17 16.87 C 23.17 15.98 22.85 15.21 22.20 14.58 C 21.55 13.95 20.78 13.63 19.87 13.63 L 18.25 13.63 C 18.13 13.63 18.07 13.57 18.07 13.46 L 18.00 12.87 C 17.88 11.80 17.41 10.89 16.59 10.16 C 15.77 9.43 14.82 9.06 13.74 9.06 C 12.65 9.06 11.70 9.43 10.89 10.16 C 10.08 10.89 9.63 11.80 9.52 12.88 L 9.45 13.40 C 9.45 13.51 9.38 13.57 9.25 13.57 L 8.73 13.65 C 7.90 13.75 7.20 14.10 6.63 14.72 C 6.06 15.34 5.78 16.06 5.78 16.89 C 5.78 17.63 6.01 18.30 6.48 18.90 C 6.92 19.46 7.60 19.87 8.25 20.07 L 7.65 21.66 C 6.66 21.33 5.70 20.70 5.07 19.86 C 4.41 18.98 4.08 17.99 4.08 16.88 C 4.08 15.72 4.44 14.69 5.12 13.81 L 5.12 13.81 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<path id="lightning" d="M 8.26 20.07 L 9.33 17.19 C 9.40 17.10 9.47 17.05 9.56 17.05 L 12.52 17.05 C 12.68 17.05 12.72 17.13 12.65 17.27 L 10.17 21.90 L 12.35 21.90 C 12.42 21.90 12.47 21.92 12.50 21.97 C 12.53 22.02 12.53 22.07 12.49 22.12 L 8.58 27.06 L 8.29 27.06 L 9.26 23.55 L 7.14 23.55 C 7.01 23.55 6.96 23.48 6.99 23.34 L 7.65 21.65 C 7.60 21.64 8.21 20.06 8.26 20.07 Z"/> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<path id="moon" d="M 17.11 6.63 C 17.50 6.28 17.90 6.01 18.31 5.83 C 18.72 5.64 19.12 5.51 19.50 5.42 C 19.89 5.33 20.26 5.29 20.62 5.29 C 21.00 5.29 21.38 5.33 21.77 5.42 C 22.16 5.51 22.46 5.59 22.67 5.68 C 22.81 5.73 22.85 5.81 22.81 5.91 L 22.67 6.52 C 22.62 6.79 22.59 7.06 22.59 7.32 C 22.59 7.76 22.68 8.20 22.85 8.64 C 23.02 9.07 23.31 9.49 23.72 9.87 C 24.12 10.25 24.61 10.53 25.18 10.69 L 25.74 10.87 C 25.85 10.90 25.90 10.95 25.90 11.02 C 25.90 11.05 25.89 11.08 25.88 11.09 L 25.74 11.81 C 25.53 12.63 24.84 13.88 24.18 14.49 L 23.09 13.13 C 23.38 12.86 23.74 12.40 23.90 12.03 C 22.98 11.57 22.25 10.92 21.73 10.06 C 21.21 9.20 20.95 8.29 20.95 7.33 L 20.95 7.01 C 20.90 7.00 20.80 7.00 20.68 7.00 C 20.06 7.00 19.47 7.15 18.92 7.45 C 18.41 7.72 17.89 8.26 17.58 8.75 L 16.09 7.84 C 16.26 7.48 16.82 6.89 17.11 6.63 L 17.11 6.63 Z"/> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<g id="rain"> <path d="M4.08,16.88c0,1.11,0.33,2.1,0.99,2.98s1.52,1.47,2.58,1.79l-0.66,1.69c-0.03,0.14,0.02,0.21,0.15,0.21h2.12l-0.97,3.51
<path d="M 16.35 23.68 C 16.35 23.84 16.40 24.00 16.50 24.14 C 16.60 24.28 16.75 24.39 16.96 24.45 C 16.99 24.45 17.04 24.45 17.11 24.46 C 17.18 24.47 17.24 24.47 17.27 24.47 C 17.65 24.47 17.89 24.26 17.99 23.84 L 19.49 18.07 C 19.55 17.83 19.53 17.61 19.41 17.41 C 19.30 17.22 19.13 17.09 18.90 17.03 C 18.67 16.96 18.45 16.98 18.25 17.09 C 18.05 17.20 17.92 17.36 17.86 17.59 L 16.36 23.41 C 16.36 23.51 16.35 23.60 16.35 23.68 Z"/> h0.29l3.91-4.94c0.04-0.05,0.04-0.1,0.01-0.15c-0.03-0.05-0.08-0.07-0.15-0.07h-2.18l2.48-4.63c0.07-0.14,0.03-0.22-0.13-0.22H9.56
<path d="M 12.18 26.70 C 12.18 26.86 12.23 27.02 12.33 27.16 C 12.43 27.31 12.58 27.41 12.78 27.46 C 12.89 27.48 12.99 27.49 13.08 27.49 C 13.49 27.49 13.74 27.28 13.84 26.86 L 16.16 18.07 C 16.22 17.83 16.20 17.62 16.09 17.42 C 15.98 17.22 15.81 17.09 15.59 17.03 C 15.36 16.96 15.14 16.98 14.94 17.09 C 14.74 17.20 14.60 17.36 14.54 17.58 L 12.22 26.42 C 12.19 26.52 12.18 26.61 12.18 26.70 Z"/> c-0.09,0-0.16,0.05-0.23,0.14l-1.07,2.88c-0.72-0.18-1.31-0.57-1.78-1.17c-0.47-0.6-0.7-1.27-0.7-2.01c0-0.83,0.28-1.55,0.85-2.17
</g> c0.57-0.62,1.27-0.97,2.1-1.07l0.52-0.08c0.13,0,0.2-0.06,0.2-0.17l0.07-0.52c0.11-1.08,0.56-1.99,1.37-2.72s1.76-1.1,2.85-1.1
c1.08,0,2.03,0.37,2.85,1.1s1.29,1.64,1.41,2.71l0.07,0.59c0,0.11,0.06,0.17,0.18,0.17h1.62c0.91,0,1.68,0.32,2.33,0.95
s0.97,1.4,0.97,2.29c0,0.85-0.3,1.59-0.9,2.21c-0.6,0.62-1.33,0.97-2.2,1.04c-0.12,0-0.19,0.06-0.19,0.17v1.38
c0,0.12,0.06,0.18,0.19,0.18c0.88-0.03,1.68-0.27,2.41-0.72c0.73-0.45,1.31-1.05,1.73-1.8c0.42-0.75,0.63-1.57,0.63-2.45
c0-0.87-0.22-1.68-0.66-2.45c0.79-0.76,1.31-1.63,1.56-2.62l0.14-0.72c0.01-0.01,0.02-0.04,0.02-0.07c0-0.07-0.05-0.12-0.16-0.15
l-0.56-0.18c-0.57-0.16-1.06-0.44-1.46-0.82c-0.41-0.38-0.7-0.8-0.87-1.23c-0.17-0.44-0.26-0.88-0.26-1.32
c0-0.26,0.03-0.53,0.08-0.8l0.14-0.61c0.04-0.1,0-0.18-0.14-0.23c-0.21-0.09-0.51-0.17-0.9-0.26c-0.39-0.09-0.77-0.13-1.15-0.13
c-0.36,0-0.73,0.04-1.12,0.13c-0.38,0.09-0.78,0.22-1.19,0.41c-0.41,0.18-0.81,0.45-1.2,0.8c-0.39,0.35-0.72,0.75-1,1.22
c-0.82-0.3-1.62-0.45-2.38-0.45c-1.41,0-2.67,0.44-3.76,1.31s-1.8,1.99-2.11,3.36c-1.11,0.26-2.02,0.84-2.74,1.74
C4.44,14.69,4.08,15.72,4.08,16.88z M12.18,26.7c0,0.16,0.05,0.32,0.15,0.46c0.1,0.15,0.25,0.25,0.45,0.3
c0.11,0.02,0.21,0.03,0.3,0.03c0.41,0,0.66-0.21,0.76-0.63l2.32-8.79c0.06-0.24,0.04-0.45-0.07-0.65c-0.11-0.2-0.28-0.33-0.5-0.39
c-0.23-0.07-0.45-0.05-0.65,0.06c-0.2,0.11-0.34,0.27-0.4,0.49l-2.32,8.84C12.19,26.52,12.18,26.61,12.18,26.7z M16.35,23.68
c0,0.16,0.05,0.32,0.15,0.46c0.1,0.14,0.25,0.25,0.46,0.31c0.03,0,0.08,0,0.15,0.01c0.07,0.01,0.13,0.01,0.16,0.01
c0.38,0,0.62-0.21,0.72-0.63l1.5-5.77c0.06-0.24,0.04-0.46-0.08-0.66c-0.11-0.19-0.28-0.32-0.51-0.38
c-0.23-0.07-0.45-0.05-0.65,0.06c-0.2,0.11-0.33,0.27-0.39,0.5l-1.5,5.82C16.36,23.51,16.35,23.6,16.35,23.68z M17.59,8.75
c0.33-0.57,0.77-1,1.33-1.3c0.55-0.3,1.14-0.45,1.76-0.45c0.12,0,0.22,0,0.27,0.01v0.32c0,0.96,0.26,1.87,0.78,2.73
s1.25,1.51,2.17,1.97c-0.18,0.42-0.44,0.77-0.79,1.07c-0.92-0.79-1.99-1.18-3.22-1.18h-0.32C19.29,10.66,18.63,9.61,17.59,8.75z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

@@ -1,3 +1,13 @@
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve"> <?xml version="1.0" encoding="utf-8"?>
<path id="moon" d="M7.91,14.48c0-0.96,0.19-1.87,0.56-2.75s0.88-1.63,1.51-2.26c0.63-0.63,1.39-1.14,2.27-1.52c0.88-0.38,1.8-0.57,2.75-0.57 h1.14c0.16,0.04,0.23,0.14,0.23,0.28l0.05,0.88c0.04,1.27,0.49,2.35,1.37,3.24c0.88,0.89,1.94,1.37,3.19,1.42l0.82,0.07 c0.16,0,0.24,0.08,0.24,0.23v0.98c0.01,1.28-0.3,2.47-0.93,3.56c-0.63,1.09-1.48,1.95-2.57,2.59c-1.08,0.63-2.27,0.95-3.55,0.95 c-0.97,0-1.9-0.19-2.78-0.56s-1.63-0.88-2.26-1.51c-0.63-0.63-1.13-1.39-1.5-2.26C8.1,16.37,7.91,15.45,7.91,14.48z M9.74,14.48 c0,0.76,0.15,1.48,0.45,2.16c0.3,0.67,0.7,1.24,1.19,1.7c0.49,0.46,1.05,0.82,1.69,1.08c0.63,0.27,1.28,0.4,1.94,0.4 c0.58,0,1.17-0.11,1.76-0.34c0.59-0.23,1.14-0.55,1.65-0.96c0.51-0.41,0.94-0.93,1.31-1.57c0.37-0.64,0.6-1.33,0.71-2.09 c-1.63-0.34-2.94-1.04-3.92-2.1s-1.55-2.3-1.7-3.74C13.86,9.08,13,9.37,12.21,9.9c-0.78,0.53-1.39,1.2-1.82,2.02 C9.96,12.74,9.74,13.59,9.74,14.48z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M7.91,14.48c0-0.96,0.19-1.87,0.56-2.75s0.88-1.63,1.51-2.26c0.63-0.63,1.39-1.14,2.27-1.52c0.88-0.38,1.8-0.57,2.75-0.57
h1.14c0.16,0.04,0.23,0.14,0.23,0.28l0.05,0.88c0.04,1.27,0.49,2.35,1.37,3.24c0.88,0.89,1.94,1.37,3.19,1.42l0.82,0.07
c0.16,0,0.24,0.08,0.24,0.23v0.98c0.01,1.28-0.3,2.47-0.93,3.56c-0.63,1.09-1.48,1.95-2.57,2.59c-1.08,0.63-2.27,0.95-3.55,0.95
c-0.97,0-1.9-0.19-2.78-0.56s-1.63-0.88-2.26-1.51c-0.63-0.63-1.13-1.39-1.5-2.26C8.1,16.37,7.91,15.45,7.91,14.48z M9.74,14.48
c0,0.76,0.15,1.48,0.45,2.16c0.3,0.67,0.7,1.24,1.19,1.7c0.49,0.46,1.05,0.82,1.69,1.08c0.63,0.27,1.28,0.4,1.94,0.4
c0.58,0,1.17-0.11,1.76-0.34c0.59-0.23,1.14-0.55,1.65-0.96c0.51-0.41,0.94-0.93,1.31-1.57c0.37-0.64,0.6-1.33,0.71-2.09
c-1.63-0.34-2.94-1.04-3.92-2.1s-1.55-2.3-1.7-3.74C13.86,9.08,13,9.37,12.21,9.9c-0.78,0.53-1.39,1.2-1.82,2.02
C9.96,12.74,9.74,13.59,9.74,14.48z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -1,14 +1,37 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 4.65 16.96 C 4.65 18.28 5.12 19.42 6.05 20.37 C 6.98 21.33 8.11 21.83 9.43 21.87 C 9.55 21.87 9.61 21.81 9.61 21.70 L 9.61 20.37 C 9.61 20.25 9.55 20.19 9.43 20.19 C 8.59 20.15 7.86 19.81 7.26 19.17 C 6.66 18.53 6.35 17.80 6.35 16.95 C 6.35 16.11 6.63 15.38 7.20 14.76 C 7.77 14.14 8.46 13.79 9.30 13.72 L 9.83 13.65 C 9.95 13.65 10.02 13.59 10.02 13.47 L 10.09 12.97 C 10.19 11.88 10.64 10.96 11.45 10.22 C 12.26 9.48 13.21 9.11 14.31 9.11 C 15.39 9.11 16.34 9.48 17.15 10.21 C 17.96 10.94 18.43 11.84 18.55 12.92 L 18.62 13.50 C 18.62 13.62 18.68 13.68 18.81 13.68 L 20.41 13.68 C 21.31 13.68 22.08 14.00 22.73 14.65 C 23.37 15.29 23.70 16.06 23.70 16.95 C 23.70 17.79 23.40 18.53 22.80 19.17 C 22.20 19.80 21.47 20.14 20.62 20.19 C 20.49 20.19 20.42 20.25 20.42 20.37 L 20.42 21.70 C 20.42 21.81 20.49 21.87 20.62 21.87 C 21.95 21.83 23.08 21.33 24.00 20.37 C 24.92 19.41 25.38 18.28 25.38 16.95 C 25.38 16.06 25.16 15.23 24.71 14.47 C 24.27 13.71 23.66 13.11 22.90 12.67 C 22.14 12.23 21.31 12.01 20.42 12.01 L 20.11 12.01 C 19.78 10.67 19.08 9.58 18.00 8.72 C 16.93 7.87 15.70 7.44 14.32 7.44 C 12.91 7.44 11.66 7.88 10.57 8.75 C 9.48 9.62 8.78 10.74 8.47 12.10 C 7.34 12.39 6.43 12.98 5.72 13.87 C 5.01 14.76 4.65 15.80 4.65 16.96 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<g id="rain"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<path d="M 18.10 18.81 C 18.10 18.98 18.15 19.14 18.26 19.29 C 18.37 19.44 18.53 19.55 18.75 19.61 C 18.77 19.61 18.81 19.62 18.87 19.63 C 18.93 19.64 18.98 19.65 19.01 19.65 C 19.11 19.65 19.23 19.62 19.37 19.56 C 19.58 19.45 19.72 19.27 19.78 19.04 L 20.02 18.14 C 20.08 17.91 20.06 17.70 19.94 17.51 C 19.83 17.31 19.66 17.18 19.43 17.11 C 19.20 17.04 18.99 17.06 18.79 17.17 C 18.60 17.28 18.46 17.44 18.40 17.68 L 18.12 18.59 C 18.12 18.61 18.11 18.65 18.10 18.71 C 18.10 18.74 18.10 18.78 18.10 18.81 Z"/> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M 17.49 21.12 C 17.49 21.34 17.57 21.54 17.74 21.69 C 17.89 21.85 18.08 21.93 18.31 21.93 C 18.55 21.93 18.74 21.85 18.90 21.70 C 19.06 21.55 19.13 21.35 19.13 21.12 C 19.13 20.88 19.05 20.69 18.90 20.53 C 18.75 20.37 18.55 20.30 18.31 20.30 C 18.07 20.30 17.88 20.38 17.72 20.53 C 17.57 20.69 17.49 20.88 17.49 21.12 Z"/> <path d="M4.65,16.96c0,1.32,0.47,2.46,1.4,3.41c0.93,0.96,2.06,1.46,3.38,1.5c0.12,0,0.18-0.06,0.18-0.17v-1.33
<path d="M 16.75 24.08 C 16.75 24.24 16.80 24.40 16.90 24.56 C 17.00 24.72 17.16 24.83 17.36 24.89 C 17.39 24.89 17.44 24.90 17.50 24.91 C 17.56 24.92 17.60 24.93 17.64 24.93 C 18.05 24.93 18.30 24.71 18.40 24.27 L 18.54 23.67 C 18.61 23.46 18.59 23.25 18.47 23.04 C 18.36 22.83 18.19 22.70 17.96 22.63 C 17.71 22.57 17.48 22.59 17.28 22.71 C 17.08 22.83 16.94 23.00 16.87 23.24 L 16.78 23.83 C 16.78 23.85 16.77 23.90 16.76 23.95 C 16.75 24.00 16.75 24.04 16.75 24.08 Z"/> c0-0.12-0.06-0.18-0.18-0.18c-0.84-0.04-1.57-0.38-2.17-1.02s-0.91-1.37-0.91-2.22c0-0.84,0.28-1.57,0.85-2.19
<path d="M 13.99 21.93 C 13.98 22.08 14.02 22.24 14.12 22.40 C 14.22 22.56 14.37 22.66 14.57 22.70 C 14.80 22.76 15.01 22.74 15.21 22.64 C 15.41 22.54 15.54 22.35 15.62 22.08 L 15.89 21.18 C 15.96 20.96 15.94 20.75 15.82 20.55 C 15.70 20.35 15.53 20.22 15.29 20.15 C 15.07 20.08 14.86 20.11 14.65 20.23 C 14.44 20.35 14.31 20.53 14.24 20.76 L 14.01 21.66 C 14.00 21.74 13.99 21.83 13.99 21.93 Z"/> c0.57-0.62,1.26-0.97,2.1-1.04l0.53-0.07c0.12,0,0.19-0.06,0.19-0.18l0.07-0.5c0.1-1.09,0.55-2.01,1.36-2.75s1.76-1.11,2.86-1.11
<path d="M 13.36 24.20 C 13.36 24.42 13.44 24.61 13.61 24.78 C 13.77 24.94 13.96 25.02 14.18 25.02 C 14.42 25.02 14.61 24.94 14.77 24.79 C 14.93 24.63 15.00 24.44 15.00 24.20 C 15.00 23.97 14.92 23.78 14.77 23.62 C 14.61 23.46 14.42 23.39 14.18 23.39 C 13.94 23.39 13.75 23.47 13.59 23.62 C 13.43 23.77 13.36 23.97 13.36 24.20 Z"/> c1.08,0,2.03,0.37,2.84,1.1c0.81,0.73,1.28,1.63,1.4,2.71l0.07,0.58c0,0.12,0.06,0.18,0.19,0.18h1.6c0.9,0,1.67,0.32,2.32,0.97
<path d="M 12.59 27.10 C 12.59 27.28 12.64 27.44 12.74 27.60 C 12.84 27.76 13.00 27.87 13.22 27.93 C 13.30 27.95 13.39 27.96 13.47 27.96 C 13.90 27.96 14.16 27.76 14.26 27.35 L 14.40 26.76 C 14.46 26.50 14.43 26.28 14.32 26.08 C 14.20 25.88 14.03 25.76 13.80 25.71 C 13.59 25.64 13.38 25.66 13.17 25.78 C 12.96 25.90 12.83 26.07 12.76 26.29 L 12.62 26.88 C 12.60 26.97 12.59 27.04 12.59 27.10 Z"/> c0.64,0.64,0.97,1.41,0.97,2.3c0,0.84-0.3,1.58-0.9,2.22c-0.6,0.63-1.33,0.97-2.18,1.02c-0.13,0-0.2,0.06-0.2,0.18v1.33
<path d="M 11.42 18.81 C 11.41 18.97 11.45 19.12 11.56 19.26 C 11.66 19.41 11.82 19.51 12.04 19.58 C 12.25 19.64 12.45 19.62 12.66 19.51 C 12.87 19.40 13.00 19.23 13.07 19.00 L 13.35 18.10 C 13.42 17.86 13.40 17.64 13.28 17.45 C 13.16 17.26 12.98 17.13 12.74 17.06 C 12.52 16.99 12.31 17.01 12.11 17.13 C 11.91 17.24 11.77 17.41 11.70 17.63 L 11.46 18.55 C 11.46 18.57 11.45 18.61 11.44 18.67 C 11.43 18.72 11.42 18.77 11.42 18.81 Z"/> c0,0.11,0.07,0.17,0.2,0.17c1.33-0.04,2.46-0.54,3.38-1.5s1.38-2.09,1.38-3.42c0-0.89-0.22-1.72-0.67-2.48
<path d="M 10.81 21.08 C 10.81 21.29 10.89 21.48 11.06 21.65 C 11.22 21.82 11.40 21.90 11.62 21.90 C 11.86 21.90 12.06 21.82 12.22 21.66 C 12.38 21.50 12.46 21.31 12.46 21.07 C 12.46 20.84 12.38 20.64 12.22 20.48 C 12.06 20.32 11.86 20.24 11.62 20.24 C 11.39 20.24 11.20 20.32 11.04 20.47 C 10.89 20.65 10.81 20.85 10.81 21.08 Z"/> c-0.44-0.76-1.05-1.36-1.81-1.8c-0.76-0.44-1.59-0.66-2.48-0.66h-0.31c-0.33-1.34-1.03-2.43-2.11-3.29
<path d="M 10.05 23.98 C 10.05 24.15 10.10 24.32 10.21 24.49 C 10.32 24.66 10.48 24.77 10.68 24.84 C 10.91 24.91 11.12 24.90 11.32 24.80 C 11.51 24.71 11.65 24.52 11.71 24.24 L 11.85 23.63 C 11.90 23.40 11.87 23.19 11.76 23.00 C 11.65 22.81 11.48 22.67 11.24 22.60 C 11.02 22.53 10.80 22.56 10.60 22.68 C 10.40 22.80 10.26 22.98 10.20 23.21 L 10.06 23.80 C 10.06 23.83 10.05 23.89 10.05 23.98 Z"/> c-1.07-0.85-2.3-1.28-3.68-1.28c-1.41,0-2.66,0.44-3.75,1.31s-1.79,1.99-2.1,3.35c-1.13,0.29-2.04,0.88-2.75,1.77
</g> S4.65,15.8,4.65,16.96z M10.05,23.98c0,0.17,0.05,0.34,0.16,0.51c0.11,0.17,0.27,0.28,0.47,0.35c0.23,0.07,0.44,0.06,0.64-0.04
c0.19-0.09,0.33-0.28,0.39-0.56l0.14-0.61c0.05-0.23,0.02-0.44-0.09-0.63s-0.28-0.33-0.52-0.4c-0.22-0.07-0.44-0.04-0.64,0.08
s-0.34,0.3-0.4,0.53l-0.14,0.59C10.06,23.83,10.05,23.89,10.05,23.98z M10.81,21.08c0,0.21,0.08,0.4,0.25,0.57
c0.16,0.17,0.34,0.25,0.56,0.25c0.24,0,0.44-0.08,0.6-0.24c0.16-0.16,0.24-0.35,0.24-0.59c0-0.23-0.08-0.43-0.24-0.59
c-0.16-0.16-0.36-0.24-0.6-0.24c-0.23,0-0.42,0.08-0.58,0.23C10.89,20.65,10.81,20.85,10.81,21.08z M11.42,18.81
c-0.01,0.16,0.03,0.31,0.14,0.45c0.1,0.15,0.26,0.25,0.48,0.32c0.21,0.06,0.41,0.04,0.62-0.07S13,19.23,13.07,19l0.28-0.9
c0.07-0.24,0.05-0.46-0.07-0.65c-0.12-0.19-0.3-0.32-0.54-0.39c-0.22-0.07-0.43-0.05-0.63,0.07c-0.2,0.11-0.34,0.28-0.41,0.5
l-0.24,0.92c0,0.02-0.01,0.06-0.02,0.12C11.43,18.72,11.42,18.77,11.42,18.81z M12.59,27.1c0,0.18,0.05,0.34,0.15,0.5
c0.1,0.16,0.26,0.27,0.48,0.33c0.08,0.02,0.17,0.03,0.25,0.03c0.43,0,0.69-0.2,0.79-0.61l0.14-0.59c0.06-0.26,0.03-0.48-0.08-0.68
c-0.12-0.2-0.29-0.32-0.52-0.37c-0.21-0.07-0.42-0.05-0.63,0.07c-0.21,0.12-0.34,0.29-0.41,0.51l-0.14,0.59
C12.6,26.97,12.59,27.04,12.59,27.1z M13.36,24.2c0,0.22,0.08,0.41,0.25,0.58c0.16,0.16,0.35,0.24,0.57,0.24
c0.24,0,0.43-0.08,0.59-0.23c0.16-0.16,0.23-0.35,0.23-0.59c0-0.23-0.08-0.42-0.23-0.58c-0.16-0.16-0.35-0.23-0.59-0.23
c-0.24,0-0.43,0.08-0.59,0.23S13.36,23.97,13.36,24.2z M13.99,21.93c-0.01,0.15,0.03,0.31,0.13,0.47c0.1,0.16,0.25,0.26,0.45,0.3
c0.23,0.06,0.44,0.04,0.64-0.06s0.33-0.29,0.41-0.56l0.27-0.9c0.07-0.22,0.05-0.43-0.07-0.63c-0.12-0.2-0.29-0.33-0.53-0.4
c-0.22-0.07-0.43-0.04-0.64,0.08c-0.21,0.12-0.34,0.3-0.41,0.53l-0.23,0.9C14,21.74,13.99,21.83,13.99,21.93z M16.75,24.08
c0,0.16,0.05,0.32,0.15,0.48c0.1,0.16,0.26,0.27,0.46,0.33c0.03,0,0.08,0.01,0.14,0.02c0.06,0.01,0.1,0.02,0.14,0.02
c0.41,0,0.66-0.22,0.76-0.66l0.14-0.6c0.07-0.21,0.05-0.42-0.07-0.63c-0.11-0.21-0.28-0.34-0.51-0.41
c-0.25-0.06-0.48-0.04-0.68,0.08s-0.34,0.29-0.41,0.53l-0.09,0.59c0,0.02-0.01,0.07-0.02,0.12S16.75,24.04,16.75,24.08z
M17.49,21.12c0,0.22,0.08,0.42,0.25,0.57c0.15,0.16,0.34,0.24,0.57,0.24c0.24,0,0.43-0.08,0.59-0.23s0.23-0.35,0.23-0.58
c0-0.24-0.08-0.43-0.23-0.59s-0.35-0.23-0.59-0.23c-0.24,0-0.43,0.08-0.59,0.23C17.57,20.69,17.49,20.88,17.49,21.12z M18.1,18.81
c0,0.17,0.05,0.33,0.16,0.48c0.11,0.15,0.27,0.26,0.49,0.32c0.02,0,0.06,0.01,0.12,0.02s0.11,0.02,0.14,0.02
c0.1,0,0.22-0.03,0.36-0.09c0.21-0.11,0.35-0.29,0.41-0.52l0.24-0.9c0.06-0.23,0.04-0.44-0.08-0.63c-0.11-0.2-0.28-0.33-0.51-0.4
c-0.23-0.07-0.44-0.05-0.64,0.06c-0.19,0.11-0.33,0.27-0.39,0.51l-0.28,0.91c0,0.02-0.01,0.06-0.02,0.12
C18.1,18.74,18.1,18.78,18.1,18.81z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

+22 -7
View File
@@ -1,8 +1,23 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 4.64 16.91 C 4.64 15.76 5.00 14.74 5.72 13.84 C 6.44 12.94 7.35 12.37 8.45 12.11 C 8.76 10.75 9.47 9.63 10.56 8.75 C 11.65 7.87 12.90 7.44 14.31 7.44 C 15.69 7.44 16.91 7.87 17.99 8.72 C 19.07 9.57 19.77 10.67 20.09 12.01 L 20.41 12.01 C 21.30 12.01 22.13 12.23 22.89 12.66 C 23.65 13.09 24.26 13.69 24.70 14.44 C 25.14 15.19 25.37 16.02 25.37 16.91 C 25.37 17.79 25.16 18.60 24.74 19.35 C 24.32 20.10 23.74 20.70 23.01 21.15 C 22.28 21.60 21.48 21.84 20.61 21.86 C 20.48 21.86 20.41 21.80 20.41 21.69 L 20.41 20.36 C 20.41 20.24 20.48 20.18 20.61 20.18 C 21.46 20.14 22.19 19.80 22.79 19.16 C 23.39 18.52 23.69 17.77 23.69 16.90 C 23.69 16.03 23.36 15.28 22.71 14.64 C 22.06 14.00 21.29 13.68 20.40 13.68 L 18.79 13.68 C 18.67 13.68 18.61 13.62 18.61 13.51 L 18.53 12.93 C 18.42 11.85 17.95 10.94 17.14 10.22 C 16.32 9.49 15.38 9.13 14.29 9.13 C 13.20 9.13 12.24 9.49 11.44 10.22 C 10.63 10.95 10.18 11.85 10.08 12.93 L 10.01 13.46 C 10.01 13.58 9.94 13.65 9.81 13.65 L 9.28 13.68 C 8.45 13.78 7.75 14.14 7.18 14.75 C 6.61 15.36 6.33 16.08 6.33 16.91 C 6.33 17.78 6.63 18.53 7.23 19.17 C 7.83 19.81 8.56 20.15 9.41 20.19 C 9.52 20.19 9.58 20.25 9.58 20.37 L 9.58 21.70 C 9.58 21.81 9.52 21.87 9.41 21.87 C 8.07 21.81 6.94 21.30 6.01 20.34 C 5.08 19.38 4.64 18.24 4.64 16.91 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<g id="rain"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<path d="M 16.74 23.62 C 16.74 23.58 16.75 23.51 16.78 23.39 L 18.41 17.62 C 18.47 17.43 18.57 17.28 18.71 17.18 C 18.86 17.08 19.01 17.03 19.17 17.03 C 19.25 17.03 19.34 17.04 19.43 17.06 C 19.64 17.12 19.79 17.22 19.89 17.37 C 19.99 17.52 20.04 17.68 20.04 17.84 C 20.04 17.87 20.03 17.92 20.02 17.98 C 20.01 18.04 20.00 18.08 20.00 18.10 L 18.37 23.83 C 18.33 24.02 18.24 24.18 18.09 24.29 C 17.94 24.40 17.77 24.46 17.58 24.46 L 17.34 24.41 C 17.14 24.35 16.99 24.25 16.88 24.09 C 16.79 23.94 16.74 23.78 16.74 23.62 Z"/> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M 12.61 26.41 L 15.05 17.64 C 15.09 17.45 15.19 17.30 15.35 17.20 C 15.51 17.10 15.67 17.05 15.84 17.05 C 15.93 17.05 16.02 17.06 16.11 17.08 C 16.33 17.14 16.49 17.27 16.60 17.47 C 16.71 17.67 16.73 17.88 16.67 18.11 L 14.24 26.89 C 14.20 27.06 14.11 27.20 13.95 27.32 C 13.79 27.44 13.63 27.50 13.44 27.50 C 13.35 27.50 13.26 27.48 13.19 27.45 C 12.99 27.40 12.82 27.27 12.67 27.06 C 12.56 26.88 12.54 26.67 12.61 26.41 Z"/> <path d="M4.64,16.91c0-1.15,0.36-2.17,1.08-3.07c0.72-0.9,1.63-1.47,2.73-1.73c0.31-1.36,1.02-2.48,2.11-3.36s2.34-1.31,3.75-1.31
<path d="M 9.99 23.60 C 9.99 23.56 10.00 23.49 10.03 23.40 L 11.66 17.63 C 11.72 17.44 11.83 17.29 11.98 17.19 C 12.13 17.09 12.29 17.04 12.44 17.04 C 12.51 17.04 12.59 17.05 12.68 17.07 C 12.92 17.11 13.10 17.24 13.22 17.44 C 13.34 17.64 13.37 17.86 13.30 18.11 L 11.67 23.84 C 11.55 24.27 11.27 24.48 10.85 24.48 C 10.81 24.48 10.78 24.47 10.74 24.46 C 10.68 24.44 10.65 24.43 10.64 24.43 C 10.42 24.37 10.26 24.26 10.15 24.10 C 10.04 23.93 9.99 23.77 9.99 23.60 Z"/> c1.38,0,2.6,0.43,3.68,1.28c1.08,0.85,1.78,1.95,2.1,3.29h0.32c0.89,0,1.72,0.22,2.48,0.65s1.37,1.03,1.81,1.78
</g> c0.44,0.75,0.67,1.58,0.67,2.47c0,0.88-0.21,1.69-0.63,2.44c-0.42,0.75-1,1.35-1.73,1.8c-0.73,0.45-1.53,0.69-2.4,0.71
c-0.13,0-0.2-0.06-0.2-0.17v-1.33c0-0.12,0.07-0.18,0.2-0.18c0.85-0.04,1.58-0.38,2.18-1.02s0.9-1.39,0.9-2.26s-0.33-1.62-0.98-2.26
s-1.42-0.96-2.31-0.96h-1.61c-0.12,0-0.18-0.06-0.18-0.17l-0.08-0.58c-0.11-1.08-0.58-1.99-1.39-2.71
c-0.82-0.73-1.76-1.09-2.85-1.09c-1.09,0-2.05,0.36-2.85,1.09c-0.81,0.73-1.26,1.63-1.36,2.71l-0.07,0.53c0,0.12-0.07,0.19-0.2,0.19
l-0.53,0.03c-0.83,0.1-1.53,0.46-2.1,1.07s-0.85,1.33-0.85,2.16c0,0.87,0.3,1.62,0.9,2.26s1.33,0.98,2.18,1.02
c0.11,0,0.17,0.06,0.17,0.18v1.33c0,0.11-0.06,0.17-0.17,0.17c-1.34-0.06-2.47-0.57-3.4-1.53S4.64,18.24,4.64,16.91z M9.99,23.6
c0-0.04,0.01-0.11,0.04-0.2l1.63-5.77c0.06-0.19,0.17-0.34,0.32-0.44c0.15-0.1,0.31-0.15,0.46-0.15c0.07,0,0.15,0.01,0.24,0.03
c0.24,0.04,0.42,0.17,0.54,0.37c0.12,0.2,0.15,0.42,0.08,0.67l-1.63,5.73c-0.12,0.43-0.4,0.64-0.82,0.64
c-0.04,0-0.07-0.01-0.11-0.02c-0.06-0.02-0.09-0.03-0.1-0.03c-0.22-0.06-0.38-0.17-0.49-0.33C10.04,23.93,9.99,23.77,9.99,23.6z
M12.61,26.41l2.44-8.77c0.04-0.19,0.14-0.34,0.3-0.44c0.16-0.1,0.32-0.15,0.49-0.15c0.09,0,0.18,0.01,0.27,0.03
c0.22,0.06,0.38,0.19,0.49,0.39c0.11,0.2,0.13,0.41,0.07,0.64l-2.43,8.78c-0.04,0.17-0.13,0.31-0.29,0.43
c-0.16,0.12-0.32,0.18-0.51,0.18c-0.09,0-0.18-0.02-0.25-0.05c-0.2-0.05-0.37-0.18-0.52-0.39C12.56,26.88,12.54,26.67,12.61,26.41z
M16.74,23.62c0-0.04,0.01-0.11,0.04-0.23l1.63-5.77c0.06-0.19,0.16-0.34,0.3-0.44c0.15-0.1,0.3-0.15,0.46-0.15
c0.08,0,0.17,0.01,0.26,0.03c0.21,0.06,0.36,0.16,0.46,0.31c0.1,0.15,0.15,0.31,0.15,0.47c0,0.03-0.01,0.08-0.02,0.14
s-0.02,0.1-0.02,0.12l-1.63,5.73c-0.04,0.19-0.13,0.35-0.28,0.46s-0.32,0.17-0.51,0.17l-0.24-0.05c-0.2-0.06-0.35-0.16-0.46-0.32
C16.79,23.94,16.74,23.78,16.74,23.62z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

@@ -1,11 +1,31 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;"> <?xml version="1.0" encoding="utf-8"?>
<path id="cloud" d="M 4.60 16.93 C 4.60 15.77 4.96 14.75 5.69 13.85 C 6.41 12.95 7.34 12.37 8.47 12.12 C 8.76 10.74 9.45 9.62 10.54 8.73 C 11.63 7.84 12.88 7.40 14.30 7.40 C 15.69 7.40 16.93 7.83 18.02 8.68 C 19.10 9.53 19.81 10.63 20.14 11.98 L 20.48 11.98 C 21.38 11.98 22.21 12.20 22.96 12.64 C 23.72 13.08 24.31 13.68 24.75 14.44 C 25.18 15.20 25.40 16.03 25.40 16.93 C 25.40 18.27 24.94 19.41 24.03 20.37 C 23.11 21.33 21.99 21.83 20.66 21.87 C 20.54 21.87 20.48 21.81 20.48 21.70 L 20.48 20.36 C 20.48 20.25 20.54 20.19 20.66 20.19 C 21.50 20.12 22.23 19.77 22.83 19.14 C 23.43 18.51 23.73 17.77 23.73 16.92 C 23.73 16.03 23.41 15.26 22.77 14.61 C 22.13 13.97 21.37 13.64 20.48 13.64 L 18.85 13.64 C 18.73 13.64 18.66 13.58 18.63 13.46 L 18.56 12.89 C 18.49 12.18 18.26 11.53 17.86 10.95 C 17.46 10.37 16.95 9.92 16.33 9.59 C 15.71 9.26 15.03 9.10 14.31 9.10 C 13.21 9.10 12.26 9.46 11.45 10.19 C 10.64 10.92 10.18 11.83 10.08 12.91 L 10.01 13.45 C 10.01 13.54 9.96 13.59 9.85 13.59 L 9.31 13.70 C 8.47 13.77 7.76 14.11 7.20 14.73 C 6.63 15.35 6.35 16.08 6.35 16.93 C 6.35 17.80 6.65 18.55 7.24 19.18 C 7.83 19.81 8.55 20.15 9.41 20.20 C 9.53 20.20 9.59 20.26 9.59 20.37 L 9.59 21.71 C 9.59 21.82 9.53 21.88 9.41 21.88 C 8.75 21.85 8.13 21.70 7.53 21.43 C 6.93 21.16 6.42 20.80 6.00 20.36 C 5.57 19.92 5.23 19.41 4.98 18.81 C 4.73 18.21 4.60 17.59 4.60 16.93 Z"/> <!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<g id="rain"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<path d="M 18.11 18.98 C 18.11 18.95 18.13 18.86 18.16 18.72 L 18.46 17.69 C 18.50 17.48 18.59 17.32 18.75 17.22 C 18.91 17.12 19.07 17.07 19.24 17.08 C 19.28 17.07 19.37 17.08 19.48 17.11 C 19.70 17.16 19.87 17.29 20.00 17.49 C 20.12 17.66 20.14 17.87 20.07 18.14 L 19.83 19.17 C 19.70 19.60 19.45 19.82 19.07 19.82 C 19.01 19.82 18.90 19.80 18.73 19.76 C 18.52 19.70 18.37 19.59 18.27 19.45 C 18.16 19.29 18.11 19.14 18.11 18.98 Z"/> viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<path d="M 16.73 23.74 C 16.73 23.67 16.74 23.59 16.76 23.50 L 17.04 22.51 C 17.11 22.27 17.24 22.09 17.45 21.97 C 17.66 21.85 17.86 21.82 18.08 21.88 C 18.31 21.95 18.49 22.08 18.61 22.29 C 18.73 22.49 18.76 22.70 18.70 22.92 L 18.41 23.98 C 18.31 24.39 18.05 24.59 17.62 24.59 C 17.53 24.59 17.44 24.58 17.36 24.56 C 17.16 24.52 17.01 24.42 16.90 24.26 C 16.80 24.08 16.74 23.91 16.73 23.74 Z"/> <path d="M4.6,16.93c0-1.16,0.36-2.18,1.09-3.08c0.72-0.9,1.65-1.48,2.78-1.73c0.29-1.38,0.98-2.5,2.07-3.39S12.88,7.4,14.3,7.4
<path d="M 13.91 22.06 C 13.91 22.00 13.92 21.92 13.95 21.81 L 14.22 20.78 C 14.29 20.55 14.42 20.38 14.63 20.27 C 14.83 20.15 15.05 20.13 15.28 20.20 C 15.51 20.26 15.67 20.39 15.79 20.59 C 15.90 20.79 15.92 21.00 15.85 21.24 L 15.61 22.23 C 15.48 22.68 15.24 22.91 14.89 22.91 C 14.85 22.91 14.74 22.89 14.58 22.85 C 14.36 22.81 14.20 22.71 14.09 22.55 C 13.97 22.40 13.91 22.23 13.91 22.06 Z"/> c1.39,0,2.63,0.43,3.72,1.28c1.08,0.85,1.79,1.95,2.12,3.3h0.34c0.9,0,1.73,0.22,2.48,0.66c0.76,0.44,1.35,1.04,1.79,1.8
<path d="M 12.57 26.83 C 12.57 26.80 12.58 26.76 12.59 26.70 C 12.60 26.64 12.61 26.61 12.61 26.58 L 12.90 25.59 C 12.96 25.35 13.10 25.17 13.30 25.05 C 13.50 24.93 13.72 24.90 13.95 24.97 C 14.18 25.04 14.34 25.17 14.46 25.38 C 14.58 25.59 14.59 25.80 14.53 26.03 L 14.28 27.07 C 14.17 27.48 13.91 27.68 13.48 27.68 C 13.43 27.68 13.35 27.67 13.24 27.64 C 13.02 27.60 12.86 27.50 12.75 27.34 C 12.63 27.18 12.57 27.01 12.57 26.83 Z"/> c0.43,0.76,0.65,1.59,0.65,2.49c0,1.34-0.46,2.48-1.37,3.44c-0.92,0.96-2.04,1.46-3.37,1.5c-0.12,0-0.18-0.06-0.18-0.17v-1.34
<path d="M 11.34 18.88 C 11.34 18.86 11.34 18.82 11.35 18.77 C 11.36 18.72 11.36 18.69 11.36 18.68 L 11.66 17.63 C 11.72 17.44 11.83 17.29 11.98 17.18 C 12.13 17.08 12.29 17.03 12.45 17.03 C 12.47 17.03 12.50 17.03 12.53 17.03 C 12.56 17.03 12.59 17.04 12.62 17.04 C 12.65 17.05 12.68 17.05 12.70 17.05 C 12.93 17.12 13.10 17.25 13.21 17.45 C 13.33 17.65 13.35 17.86 13.28 18.09 L 13.04 19.09 C 12.97 19.37 12.84 19.56 12.64 19.68 C 12.44 19.80 12.22 19.80 11.99 19.70 C 11.77 19.64 11.61 19.53 11.50 19.36 C 11.39 19.19 11.34 19.04 11.34 18.88 Z"/> c0-0.11,0.06-0.17,0.18-0.17c0.84-0.07,1.57-0.42,2.17-1.05s0.9-1.37,0.9-2.22c0-0.89-0.32-1.66-0.96-2.31
<path d="M 10.02 23.70 C 10.02 23.67 10.03 23.62 10.04 23.57 C 10.05 23.52 10.06 23.48 10.06 23.46 L 10.33 22.43 C 10.40 22.21 10.53 22.03 10.73 21.92 C 10.93 21.80 11.14 21.78 11.37 21.85 C 11.60 21.92 11.77 22.05 11.89 22.25 C 12.01 22.45 12.03 22.66 11.96 22.89 L 11.72 23.90 C 11.59 24.34 11.34 24.56 10.96 24.56 C 10.93 24.56 10.91 24.56 10.87 24.56 C 10.84 24.56 10.80 24.55 10.76 24.55 C 10.72 24.54 10.69 24.54 10.66 24.54 C 10.45 24.48 10.29 24.36 10.18 24.20 C 10.07 24.04 10.02 23.86 10.02 23.70 Z"/> c-0.64-0.64-1.4-0.97-2.29-0.97h-1.63c-0.12,0-0.19-0.06-0.22-0.18l-0.07-0.57c-0.07-0.71-0.3-1.36-0.7-1.94s-0.91-1.03-1.53-1.36
</g> c-0.62-0.33-1.3-0.49-2.02-0.49c-1.1,0-2.05,0.36-2.86,1.09c-0.81,0.73-1.27,1.64-1.37,2.72l-0.07,0.54c0,0.09-0.05,0.14-0.16,0.14
L9.31,13.7c-0.84,0.07-1.55,0.41-2.11,1.03c-0.57,0.62-0.85,1.35-0.85,2.2c0,0.87,0.3,1.62,0.89,2.25c0.59,0.63,1.31,0.97,2.17,1.02
c0.12,0,0.18,0.06,0.18,0.17v1.34c0,0.11-0.06,0.17-0.18,0.17c-0.66-0.03-1.28-0.18-1.88-0.45S6.42,20.8,6,20.36
c-0.43-0.44-0.77-0.95-1.02-1.55S4.6,17.59,4.6,16.93z M10.02,23.7c0-0.03,0.01-0.08,0.02-0.13s0.02-0.09,0.02-0.11l0.27-1.03
c0.07-0.22,0.2-0.4,0.4-0.51c0.2-0.12,0.41-0.14,0.64-0.07c0.23,0.07,0.4,0.2,0.52,0.4c0.12,0.2,0.14,0.41,0.07,0.64l-0.24,1.01
c-0.13,0.44-0.38,0.66-0.76,0.66c-0.03,0-0.05,0-0.09,0c-0.03,0-0.07-0.01-0.11-0.01c-0.04-0.01-0.07-0.01-0.1-0.01
c-0.21-0.06-0.37-0.18-0.48-0.34S10.02,23.86,10.02,23.7z M11.34,18.88c0-0.02,0-0.06,0.01-0.11c0.01-0.05,0.01-0.08,0.01-0.09
l0.3-1.05c0.06-0.19,0.17-0.34,0.32-0.45c0.15-0.1,0.31-0.15,0.47-0.15c0.02,0,0.05,0,0.08,0c0.03,0,0.06,0.01,0.09,0.01
c0.03,0.01,0.06,0.01,0.08,0.01c0.23,0.07,0.4,0.2,0.51,0.4c0.12,0.2,0.14,0.41,0.07,0.64l-0.24,1c-0.07,0.28-0.2,0.47-0.4,0.59
s-0.42,0.12-0.65,0.02c-0.22-0.06-0.38-0.17-0.49-0.34S11.34,19.04,11.34,18.88z M12.57,26.83c0-0.03,0.01-0.07,0.02-0.13
s0.02-0.09,0.02-0.12l0.29-0.99c0.06-0.24,0.2-0.42,0.4-0.54c0.2-0.12,0.42-0.15,0.65-0.08c0.23,0.07,0.39,0.2,0.51,0.41
s0.13,0.42,0.07,0.65l-0.25,1.04c-0.11,0.41-0.37,0.61-0.8,0.61c-0.05,0-0.13-0.01-0.24-0.04c-0.22-0.04-0.38-0.14-0.49-0.3
C12.63,27.18,12.57,27.01,12.57,26.83z M13.91,22.06c0-0.06,0.01-0.14,0.04-0.25l0.27-1.03c0.07-0.23,0.2-0.4,0.41-0.51
c0.2-0.12,0.42-0.14,0.65-0.07c0.23,0.06,0.39,0.19,0.51,0.39c0.11,0.2,0.13,0.41,0.06,0.65l-0.24,0.99
c-0.13,0.45-0.37,0.68-0.72,0.68c-0.04,0-0.15-0.02-0.31-0.06c-0.22-0.04-0.38-0.14-0.49-0.3C13.97,22.4,13.91,22.23,13.91,22.06z
M16.73,23.74c0-0.07,0.01-0.15,0.03-0.24l0.28-0.99c0.07-0.24,0.2-0.42,0.41-0.54s0.41-0.15,0.63-0.09
c0.23,0.07,0.41,0.2,0.53,0.41c0.12,0.2,0.15,0.41,0.09,0.63l-0.29,1.06c-0.1,0.41-0.36,0.61-0.79,0.61c-0.09,0-0.18-0.01-0.26-0.03
c-0.2-0.04-0.35-0.14-0.46-0.3C16.8,24.08,16.74,23.91,16.73,23.74z M18.11,18.98c0-0.03,0.02-0.12,0.05-0.26l0.3-1.03
c0.04-0.21,0.13-0.37,0.29-0.47c0.16-0.1,0.32-0.15,0.49-0.14c0.04-0.01,0.13,0,0.24,0.03c0.22,0.05,0.39,0.18,0.52,0.38
c0.12,0.17,0.14,0.38,0.07,0.65l-0.24,1.03c-0.13,0.43-0.38,0.65-0.76,0.65c-0.06,0-0.17-0.02-0.34-0.06
c-0.21-0.06-0.36-0.17-0.46-0.31C18.16,19.29,18.11,19.14,18.11,18.98z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Some files were not shown because too many files have changed in this diff Show More