Icon updates
88
README.md
|
@ -2,4 +2,90 @@
|
|||
|
||||
# selfh.st/icons
|
||||
|
||||
This repository is a data store for the collection of icons found at [selfh.st/icons](https://selfh.st/icons). For more information, please see the project's [About](https://selfh.st/icons-about/) page.
|
||||
[selfh.st/icons](https://selfh.st/icons) is a collection of 4,400+ logos and icons for self-hosted (and non-self-hosted) software.
|
||||
|
||||
The collection is available for browsing via the directory at [selfh.st/icons](https://selfh.st/icons) and served to users directly from this repo using the jsDelivr content delivery network.
|
||||
|
||||
To self-host the collection, users can clone, download, or sync the repository with a tool like [git-sync](https://github.com/AkashRajpurohit/git-sync) and serve it with a web server of their choosing (Caddy, NGINX, etc.).
|
||||
|
||||
|
||||
### Color Options
|
||||
|
||||
By default, most SVG icons are available in three color formats:
|
||||
|
||||
* **Standard**: The standard colors of an icon without any modifications.
|
||||
* **Dark**: A modified version of an icon displayed entirely in black (```#000000```).
|
||||
* **Light**: A modified version of an icon displayed entirely in white (```#FFFFFF```).
|
||||
|
||||
(Toggles to view icons by color type are available in the [directory hosted on the selfh.st website](https://selfh.st/icons).)
|
||||
|
||||
### Custom Colors
|
||||
|
||||
Because the dark and light versions of each icon are monochromatic, CSS can theoretically be leveraged to apply custom colors to the icons.
|
||||
|
||||
This only works, however, when the SVG code is embedded directly onto a webpage. Unfortunately, most [integrations](https://selfh.st/apps/?tag=selfh-st-icons) link to the icons via an `<img>` tag, which prevents styling from being overridden via CSS.
|
||||
|
||||
As a workaround, a lightweight self-hosted server has been published via Docker that utilizes a URL parameter for color conversion on the fly. Continue reading for further instructions.
|
||||
|
||||
|
||||
#### Deploying the Custom Color Container
|
||||
|
||||
* Introduction
|
||||
* Deploying the container
|
||||
* Configuring a reverse proxy (optional)
|
||||
* Linking to a custom icon
|
||||
* Changelog
|
||||
|
||||
##### Introduction
|
||||
|
||||
The Docker image below allows users to host a local server that acts as a proxy between requests and jsDelivr. When a color parameter is detected in the URL, the server will intercept the requests, fill the SVG file with that color, and serve it to the user.
|
||||
|
||||
Once deployed, users can append ```?color=eeeeee``` to the end of a URL to specify a custom color (replacing ```eeeeee``` with any [hex color code](https://htmlcolorcodes.com/)).
|
||||
|
||||
##### Deployment
|
||||
|
||||
The container can be easily deployed via docker-compose with the following snippet:
|
||||
|
||||
```
|
||||
selfhst-icons:
|
||||
image: ghcr.io/selfhst/icons:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 4050:4050
|
||||
```
|
||||
|
||||
No volume mounts or environment variables are currently required.
|
||||
|
||||
##### Reverse Proxy
|
||||
|
||||
While out of the scope of this guide, many applications will require users to leverage HTTPS when linking to icons served from the container.
|
||||
|
||||
The process to proxy the container and icons is straightforward. A sample Caddyfile configuration has been provided for reference:
|
||||
|
||||
```
|
||||
icons.selfh.st {
|
||||
reverse_proxy selfhst-icons:4050
|
||||
}
|
||||
```
|
||||
|
||||
##### Linking
|
||||
|
||||
After the container has been deployed, users can easily link to any existing icon within the collection:
|
||||
|
||||
* ```https://icons.selfh.st/bookstack.svg```
|
||||
* ```https://icons.selfh.st/bookstack.png```
|
||||
* ```https://icons.selfh.st/bookstack-dark.webp```
|
||||
|
||||
To customize the color, users **must** link to the *standard* version of an SVG icon that has available monochromatic (dark/light) versions. To do so, append a custom URL parameter referencing any [hex color code](https://htmlcolorcodes.com/):
|
||||
|
||||
* ```https://icons.selfh.st/bookstack.svg?color=eeeeee```
|
||||
* ```https://icons.selfh.st/bookstack.svg?color=439b68```
|
||||
|
||||
**Note the following:**
|
||||
|
||||
* Only the standard icons accept URL parameters (for example, ```bookstack-light.svg?color=fff000``` will not yield a different color.
|
||||
* Only append the alpha-numeric portion of the hex color code to the URL. The server will append the ```#``` in the backend before passing it on for styling.
|
||||
|
||||
##### Changelog
|
||||
|
||||
* 2025-04-30: Initial release
|
11
build/dockerfile
Executable file
|
@ -0,0 +1,11 @@
|
|||
FROM node:18-alpine
|
||||
WORKDIR /app
|
||||
|
||||
COPY package.json ./
|
||||
RUN npm install
|
||||
|
||||
COPY server.js .
|
||||
|
||||
EXPOSE 4050
|
||||
|
||||
CMD ["node", "server.js"]
|
13
build/package.json
Executable file
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"name": "test-repo",
|
||||
"version": "1.0.0",
|
||||
"main": "server.js",
|
||||
"scripts": {
|
||||
"start": "node server.js"
|
||||
},
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"express": "^4.18.2",
|
||||
"node-fetch": "^3.3.0"
|
||||
}
|
||||
}
|
89
build/server.js
Executable file
|
@ -0,0 +1,89 @@
|
|||
import express from 'express'
|
||||
import fetch from 'node-fetch'
|
||||
import path from 'path'
|
||||
|
||||
const app = express()
|
||||
const PORT = 4050
|
||||
const CDN_ROOT = 'https://cdn.jsdelivr.net/gh/selfhst/icons'
|
||||
const CDN_PATH = 'svg'
|
||||
|
||||
async function fileExists(url) {
|
||||
try {
|
||||
const resp = await fetch(url, { method: 'HEAD' });
|
||||
return resp.ok;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async function fetchAndPipe(url, res) {
|
||||
const response = await fetch(url);
|
||||
if (!response.ok) return res.status(404).send('File not found');
|
||||
res.type(path.extname(url).slice(1));
|
||||
response.body.pipe(res);
|
||||
}
|
||||
|
||||
app.get('/*', async (req, res) => {
|
||||
const urlPath = req.path;
|
||||
const extMatch = urlPath.match(/\.(\w+)$/);
|
||||
if (!extMatch)
|
||||
return res.status(404).send('File extension missing');
|
||||
|
||||
const ext = extMatch[1].toLowerCase();
|
||||
if (!['png', 'webp', 'svg'].includes(ext))
|
||||
return res.status(404).send('Format not supported');
|
||||
|
||||
const filename = urlPath.slice(1);
|
||||
const lowerFilename = filename.toLowerCase();
|
||||
|
||||
const isSuffix = lowerFilename.endsWith('-light.svg') || lowerFilename.endsWith('-dark.svg');
|
||||
|
||||
if (isSuffix) {
|
||||
return fetchAndPipe(`${CDN_ROOT}/${CDN_PATH}/${filename}`, res);
|
||||
}
|
||||
|
||||
let mainUrl;
|
||||
if (ext === 'png') {
|
||||
mainUrl = `${CDN_ROOT}/png/${filename}`;
|
||||
} else if (ext === 'webp') {
|
||||
mainUrl = `${CDN_ROOT}/webp/${filename}`;
|
||||
} else if (ext === 'svg') {
|
||||
mainUrl = `${CDN_ROOT}/svg/${filename}`;
|
||||
} else {
|
||||
mainUrl = null;
|
||||
}
|
||||
|
||||
const hasColor = !!req.query['color'] && req.query['color'].trim() !== '';
|
||||
|
||||
if (ext === 'svg') {
|
||||
if (hasColor) {
|
||||
const baseName = filename.replace(/\.(png|webp|svg)$/, '');
|
||||
const suffixUrl = `${CDN_ROOT}/${CDN_PATH}/${baseName}-light.svg`;
|
||||
if (await fileExists(suffixUrl)) {
|
||||
let svgContent = await fetch(suffixUrl).then(r => r.text());
|
||||
const color = req.query['color'].startsWith('#') ? req.query['color'] : `#${req.query['color']}`;
|
||||
svgContent = svgContent
|
||||
.replace(/style="[^"]*fill:\s*#fff[^"]*"/gi, (match) => {
|
||||
console.log('Replacing style fill:', match);
|
||||
return match.replace(/fill:\s*#fff/gi, `fill:${color}`);
|
||||
})
|
||||
.replace(/fill="#fff"/gi, `fill="${color}"`);
|
||||
return res.type('image/svg+xml').send(svgContent);
|
||||
} else {
|
||||
return fetchAndPipe(mainUrl, res);
|
||||
}
|
||||
} else {
|
||||
return fetchAndPipe(mainUrl, res);
|
||||
}
|
||||
} else {
|
||||
// PNG/WebP: serve directly
|
||||
return fetchAndPipe(mainUrl, res);
|
||||
}
|
||||
});
|
||||
|
||||
app.get('/', (req, res) => {
|
||||
res.send('Self-hosted icon server');
|
||||
});
|
||||
app.listen(PORT, () => {
|
||||
console.log(`Listening on port ${PORT}`);
|
||||
});
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 965 B After Width: | Height: | Size: 965 B |
Before Width: | Height: | Size: 983 B After Width: | Height: | Size: 983 B |
Before Width: | Height: | Size: 987 B After Width: | Height: | Size: 987 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><path d="M212.2 309.2c9-2.1 17.4.1 26.1 2.5 10 2.7 20.6 3.4 30.8 5.6 18.2 3.9 36.6 7.3 54.4 12.6 15.1 4.4 29.6 10.9 44.1 17.1 4.6 1.9 8.7 5.4 12.4 8.9 5.9 5.7 5.5 10.6-1.6 14.4-16.7 8.9-33.4 17.9-50.6 25.6-16.6 7.5-33.7 14.2-50.9 20.3-28.8 10.2-57.9 19.4-89.1 17.8-15.8-.8-31.7-.6-47.2-3-10.6-1.6-21.1-5.9-30.9-10.5-20.9-9.8-42.9-17.8-61.6-32.1-22-16.8-38.7-37.4-47.2-64.1-2.3-7-.7-10.2 6.4-11.8 23-5.1 45.7-12.1 69.8-10 10.9 1 21.8 1.1 32.7 1.2 2 0 3.9-1.7 5.9-2.7 6.2 7.6 12.3 15.2 18.6 22.6 12.5 14.8 25.1 29.4 37.8 44.1 2.7 3.1 6.4 5.6 8.6 9 9.2 13.9 21 25.1 35.3 33.6 2.4 1.5 5.9 1.9 8.8 1.7 4-.3 6.4-2.7 5.1-7.3-4.8-18.2-10.3-36.2-14-54.7-2.5-13.3-2.5-27.1-3.7-40.8M512 409.5c-4.7-1.8-7.7-2.5-10.2-4-28.6-16.1-57.1-32.4-85.8-48.4-5.3-3-11.5-4.4-17.3-6.5-2.1-.8-4.3-1.3-6.2-2.4-10.5-6.3-21-12.8-31.4-19.2-1.1-.7-2.3-1.4-3.4-2.1-.7-.2-1.3-.3-2-.5l-2.7-1.2c-1.8-.5-3.6-1.1-5.4-1.6-2.7-.8-5.3-1.7-8-2.5l-2.7-.6c-2.2-.7-4.5-1.4-6.7-2.1.4-.3.8-.5 1.1-.7-.4.2-.7.4-1.1.7l-2.7-.6c-20.1-4.3-40.2-8.6-60.3-12.8l-2.7-.3-12-2.4-2.7-.3c-4.5-.8-8.9-1.5-13.4-2.3l-2.7-.3c-1.8-.4-3.6-.7-5.3-1.1-.9-.2-1.8-.4-2.7-.5-3.1-.7-6.2-1.5-9.3-2.2-.9-.1-1.8-.2-2.7-.4-6.6 4.1-1.9 9.2-1.3 14 1.2 13.6 1.3 27.5 3.9 40.8 3.6 18.4 9.2 36.5 14 54.7 1.2 4.7-1.1 7-5.1 7.3-2.9.2-6.4-.2-8.8-1.7-14.2-8.5-26-19.7-35.3-33.6-2.3-3.4-5.9-5.9-8.6-9q-19.05-21.9-37.8-44.1c-6.3-7.4-12.4-15.1-18.6-22.6-3.8-8.3-11.6-8.4-19-9.4 2.7-.9 5.4-1.5 7.9-1.5-2.5-.1-5.2.5-7.9 1.5l-8.1-.3c-4-.3-8-.7-12-1-.9 0-1.8-.1-2.7-.1-9 .4-17.9.8-26.9 1.2l-2.7.3c-4.5.8-8.9 1.6-13.4 2.4-.9.1-1.8.3-2.7.4-.9.3-1.8.5-2.7.8-.9.2-1.8.3-2.7.5-2.7.6-5.4 1.3-8 1.9-.9.2-1.8.4-2.7.7-3.1 0-6.1.1-9.2.1-.6-3.4-1.9-7-1.5-10.3 2.5-20.6 3.8-41.5 8.9-61.4 3.4-13.2 12.3-25.1 19.1-37.3 14.5-25.8 33.8-47.8 55.6-67.5 18.6-16.7 41.1-26.8 65.7-31.3 12.5-2.3 25.2-2.9 37.9-4 19.5-1.7 38.2 1.5 56.5 8.4 18.2 6.8 36.6 13 54.7 19.9 6 2.3 11.3 6.5 17.4 8.3 13.2 3.9 26.6 8.6 40.1 9.7 11 .9 22.3-3.2 33.6-4.7 24.6-3.4 47.5-12.5 69.5-23.3 13.6-6.6 26.2-15.2 39.3-23 2.2-1.3 4.5-2.7 6.7-4.1.6.3 1.3.5 1.9.8-.6 3-.5 6.3-1.8 8.8-9.6 18.4-18.4 37.3-29.6 54.6-9.8 15.1-22.2 28.5-33.8 42.3-8.9 10.6-18.3 20.7-28 30.7-4.1 4.2-9.2 7.6-14.2 11-4.6 3.1-6.4 6.4-3.5 11.8 2 3.7 3.1 7.9 5.1 11.6 2.4 4.5 4.9 9.1 8.1 13 16.1 19.3 33.1 38 48.7 57.8 19.5 24.7 34.7 52.3 49.2 80.1.7 2.2 1.4 4.7 3.1 9.1m-404.5-145c0-2.7-.8-5.2-2.3-7.3-1-1.4-2.2-2.6-3.6-3.5-.4-.2-.7-.5-1.1-.7-1.1-.6-2.3-1-3.6-1.3-.9-.2-1.7-.2-2.6-.2-5.1.1-10 3-12.9 7.1-1.7 2.4-2.7 5.3-2.7 8.2 0 1.2.3 2.4.7 3.5.3.7.6 1.4 1.1 2.1q.9 1.5 2.4 2.7c.6.5 1.3 1 2 1.4 2.2 1.3 4.8 2 7.5 2 6.3 0 12.3-4.5 14.3-10 .5-1.3.8-2.6.8-4"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><path d="M508.4 400.3c-14.5-27.9-29.7-55.4-49.2-80.1-15.6-19.8-32.6-38.4-48.7-57.8-3.2-3.9-5.7-8.5-8.1-13-2-3.7-3.1-7.9-5.1-11.6-2.9-5.3-1-8.7 3.5-11.8 4.9-3.4 10-6.7 14.2-11 9.6-9.9 19.1-20.1 28-30.7 11.7-13.8 24.1-27.2 33.8-42.3 11.2-17.3 20-36.3 29.6-54.6 1.3-2.6 1.2-5.9 1.8-8.8-.6-.3-1.3-.5-1.9-.8-2.2 1.4-4.4 2.8-6.7 4.1-13.1 7.7-25.7 16.3-39.3 23-22.1 10.8-44.9 19.9-69.5 23.3-11.2 1.6-22.6 5.6-33.6 4.7-13.6-1.1-26.9-5.8-40.1-9.7-6.1-1.8-11.4-6.1-17.4-8.3-18.1-6.9-36.5-13.1-54.7-19.9-18.3-6.8-37-10.1-56.5-8.4-12.6 1.1-25.4 1.8-37.9 4-24.6 4.5-47.2 14.6-65.7 31.3-21.8 19.6-41.2 41.6-55.6 67.5-6.9 12.2-15.7 24.1-19.1 37.3-5.1 19.9-6.3 40.9-8.9 61.4-.4 3.3 1 6.9 1.5 10.3 3.1 0 6.1-.1 9.2-.1.9-.2 1.8-.4 2.7-.7 2.7-.6 5.4-1.3 8-1.9.9-.2 1.8-.3 2.7-.5.9-.3 1.8-.5 2.7-.8.9-.1 1.8-.3 2.7-.4 4.5-.8 8.9-1.6 13.4-2.4l2.7-.3c9-.4 17.9-.8 26.9-1.2.9 0 1.8.1 2.7.1 4 .3 8 .7 12 1l8.1.3c3.6-1.2 7.1-1.9 10.4-1.1-3.2-.7-6.7-.1-10.4 1.1 7.4 1 15.2 1 19 9.4 6.2 7.6 12.3 15.2 18.6 22.6 12.5 14.8 25.1 29.4 37.8 44.1 2.7 3.1 6.4 5.6 8.6 9 9.2 13.9 21 25.1 35.3 33.6 2.4 1.5 5.9 1.9 8.8 1.7 4-.3 6.4-2.7 5.1-7.3-4.8-18.2-10.3-36.2-14-54.7-2.6-13.3-2.7-27.2-3.9-40.8-.7-4.8-5.4-9.9 1.3-14 .9.1 1.8.2 2.7.4 3.1.7 6.2 1.5 9.3 2.2.9.2 1.8.4 2.7.5 1.8.4 3.6.7 5.3 1.1l2.7.3c4.5.8 8.9 1.5 13.4 2.3l2.7.3 12 2.4 2.7.3c20.1 4.3 40.2 8.6 60.3 12.8l2.7.6c2.2.7 4.5 1.4 6.7 2.1l2.7.6c2.7.8 5.3 1.7 8 2.5 1.8.5 3.6 1.1 5.4 1.6l2.7 1.2c.7.2 1.3.3 2 .5 1.1.7 2.3 1.4 3.4 2.1 10.5 6.4 20.9 12.9 31.4 19.2 1.9 1.1 4.1 1.7 6.2 2.4 5.8 2.1 12 3.5 17.3 6.5 28.7 15.9 57.2 32.3 85.8 48.4 2.5 1.4 5.5 2.2 10.2 4-1.2-4.3-1.9-6.8-3.1-9.1m-416-121.8c-7.4 0-13.5-5.2-13.7-11.7-.2-7.7 7.3-15.1 15.5-15.2 7.1-.1 13.3 5.9 13.2 13 .1 7.1-7.2 13.9-15 13.9M380 355.9c5.9 5.7 5.5 10.6-1.6 14.4-16.7 8.9-33.4 17.9-50.6 25.6-16.6 7.5-33.7 14.2-50.9 20.3-28.8 10.2-57.9 19.4-89.1 17.8-15.8-.8-31.7-.6-47.2-3-10.6-1.6-21.1-5.9-30.9-10.5-20.9-9.8-42.9-17.8-61.6-32.1-22-16.8-38.7-37.4-47.2-64.1-2.3-7-.7-10.2 6.4-11.8 23-5.1 45.7-12.1 69.8-10 9.9.9 19.9 1.1 29.8 1.2.2.3.4.6.5.9l.5 1.1.7.9c1.3 1.6 2.7 3.3 4 4.9 4.8 5.9 9.7 12 14.7 17.8 12.2 14.5 24.4 28.6 37.9 44.2 1.4 1.6 2.9 3 4.2 4.2 1.5 1.4 2.9 2.7 3.6 3.8 9.9 14.9 22.7 27.1 38.1 36.3 5 3.1 11 3.2 14.1 3 4.9-.4 8.9-2.5 11.4-6 2.4-3.5 3.1-8 1.8-12.6-1.4-5.1-2.8-10.3-4.2-15.3-3.5-12.7-7.1-25.8-9.7-38.8-1.7-8.7-2.3-17.6-2.9-27.1-.3-4.2-.5-8.4-.9-12.7 5.9.2 11.6 1.7 17.4 3.3 10 2.7 20.6 3.4 30.8 5.6 18.2 3.9 36.6 7.3 54.4 12.6 15.1 4.4 29.6 10.9 44.1 17.1 4.8 2 8.9 5.5 12.6 9"/></svg>
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.5 KiB |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><path d="M212.2 309.2c9-2.1 17.4.1 26.1 2.5 10 2.7 20.6 3.4 30.8 5.6 18.2 3.9 36.6 7.3 54.4 12.6 15.1 4.4 29.6 10.9 44.1 17.1 4.6 1.9 8.7 5.4 12.4 8.9 5.9 5.7 5.5 10.6-1.6 14.4-16.7 8.9-33.4 17.9-50.6 25.6-16.6 7.5-33.7 14.2-50.9 20.3-28.8 10.2-57.9 19.4-89.1 17.8-15.8-.8-31.7-.6-47.2-3-10.6-1.6-21.1-5.9-30.9-10.5-20.9-9.8-42.9-17.8-61.6-32.1-22-16.8-38.7-37.4-47.2-64.1-2.3-7-.7-10.2 6.4-11.8 23-5.1 45.7-12.1 69.8-10 10.9 1 21.8 1.1 32.7 1.2 2 0 3.9-1.7 5.9-2.7 6.2 7.6 12.3 15.2 18.6 22.6 12.5 14.8 25.1 29.4 37.8 44.1 2.7 3.1 6.4 5.6 8.6 9 9.2 13.9 21 25.1 35.3 33.6 2.4 1.5 5.9 1.9 8.8 1.7 4-.3 6.4-2.7 5.1-7.3-4.8-18.2-10.3-36.2-14-54.7-2.5-13.3-2.5-27.1-3.7-40.8M512 409.5c-4.7-1.8-7.7-2.5-10.2-4-28.6-16.1-57.1-32.4-85.8-48.4-5.3-3-11.5-4.4-17.3-6.5-2.1-.8-4.3-1.3-6.2-2.4-10.5-6.3-21-12.8-31.4-19.2-1.1-.7-2.3-1.4-3.4-2.1-.7-.2-1.3-.3-2-.5l-2.7-1.2c-1.8-.5-3.6-1.1-5.4-1.6-2.7-.8-5.3-1.7-8-2.5l-2.7-.6c-2.2-.7-4.5-1.4-6.7-2.1.4-.3.8-.5 1.1-.7-.4.2-.7.4-1.1.7l-2.7-.6c-20.1-4.3-40.2-8.6-60.3-12.8l-2.7-.3-12-2.4-2.7-.3c-4.5-.8-8.9-1.5-13.4-2.3l-2.7-.3c-1.8-.4-3.6-.7-5.3-1.1-.9-.2-1.8-.4-2.7-.5-3.1-.7-6.2-1.5-9.3-2.2-.9-.1-1.8-.2-2.7-.4-6.6 4.1-1.9 9.2-1.3 14 1.2 13.6 1.3 27.5 3.9 40.8 3.6 18.4 9.2 36.5 14 54.7 1.2 4.7-1.1 7-5.1 7.3-2.9.2-6.4-.2-8.8-1.7-14.2-8.5-26-19.7-35.3-33.6-2.3-3.4-5.9-5.9-8.6-9q-19.05-21.9-37.8-44.1c-6.3-7.4-12.4-15.1-18.6-22.6-3.8-8.3-11.6-8.4-19-9.4 2.7-.9 5.4-1.5 7.9-1.5-2.5-.1-5.2.5-7.9 1.5l-8.1-.3c-4-.3-8-.7-12-1-.9 0-1.8-.1-2.7-.1-9 .4-17.9.8-26.9 1.2l-2.7.3c-4.5.8-8.9 1.6-13.4 2.4-.9.1-1.8.3-2.7.4-.9.3-1.8.5-2.7.8-.9.2-1.8.3-2.7.5-2.7.6-5.4 1.3-8 1.9-.9.2-1.8.4-2.7.7-3.1 0-6.1.1-9.2.1-.6-3.4-1.9-7-1.5-10.3 2.5-20.6 3.8-41.5 8.9-61.4 3.4-13.2 12.3-25.1 19.1-37.3 14.5-25.8 33.8-47.8 55.6-67.5 18.6-16.7 41.1-26.8 65.7-31.3 12.5-2.3 25.2-2.9 37.9-4 19.5-1.7 38.2 1.5 56.5 8.4 18.2 6.8 36.6 13 54.7 19.9 6 2.3 11.3 6.5 17.4 8.3 13.2 3.9 26.6 8.6 40.1 9.7 11 .9 22.3-3.2 33.6-4.7 24.6-3.4 47.5-12.5 69.5-23.3 13.6-6.6 26.2-15.2 39.3-23 2.2-1.3 4.5-2.7 6.7-4.1.6.3 1.3.5 1.9.8-.6 3-.5 6.3-1.8 8.8-9.6 18.4-18.4 37.3-29.6 54.6-9.8 15.1-22.2 28.5-33.8 42.3-8.9 10.6-18.3 20.7-28 30.7-4.1 4.2-9.2 7.6-14.2 11-4.6 3.1-6.4 6.4-3.5 11.8 2 3.7 3.1 7.9 5.1 11.6 2.4 4.5 4.9 9.1 8.1 13 16.1 19.3 33.1 38 48.7 57.8 19.5 24.7 34.7 52.3 49.2 80.1.7 2.2 1.4 4.7 3.1 9.1m-404.5-145c0-2.7-.8-5.2-2.3-7.3-1-1.4-2.2-2.6-3.6-3.5-.4-.2-.7-.5-1.1-.7-1.1-.6-2.3-1-3.6-1.3-.9-.2-1.7-.2-2.6-.2-5.1.1-10 3-12.9 7.1-1.7 2.4-2.7 5.3-2.7 8.2 0 1.2.3 2.4.7 3.5.3.7.6 1.4 1.1 2.1q.9 1.5 2.4 2.7c.6.5 1.3 1 2 1.4 2.2 1.3 4.8 2 7.5 2 6.3 0 12.3-4.5 14.3-10 .5-1.3.8-2.6.8-4" style="fill:#fff"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><path d="M508.4 400.3c-14.5-27.9-29.7-55.4-49.2-80.1-15.6-19.8-32.6-38.4-48.7-57.8-3.2-3.9-5.7-8.5-8.1-13-2-3.7-3.1-7.9-5.1-11.6-2.9-5.3-1-8.7 3.5-11.8 4.9-3.4 10-6.7 14.2-11 9.6-9.9 19.1-20.1 28-30.7 11.7-13.8 24.1-27.2 33.8-42.3 11.2-17.3 20-36.3 29.6-54.6 1.3-2.6 1.2-5.9 1.8-8.8-.6-.3-1.3-.5-1.9-.8-2.2 1.4-4.4 2.8-6.7 4.1-13.1 7.7-25.7 16.3-39.3 23-22.1 10.8-44.9 19.9-69.5 23.3-11.2 1.6-22.6 5.6-33.6 4.7-13.6-1.1-26.9-5.8-40.1-9.7-6.1-1.8-11.4-6.1-17.4-8.3-18.1-6.9-36.5-13.1-54.7-19.9-18.3-6.8-37-10.1-56.5-8.4-12.6 1.1-25.4 1.8-37.9 4-24.6 4.5-47.2 14.6-65.7 31.3-21.8 19.6-41.2 41.6-55.6 67.5-6.9 12.2-15.7 24.1-19.1 37.3-5.1 19.9-6.3 40.9-8.9 61.4-.4 3.3 1 6.9 1.5 10.3 3.1 0 6.1-.1 9.2-.1.9-.2 1.8-.4 2.7-.7 2.7-.6 5.4-1.3 8-1.9.9-.2 1.8-.3 2.7-.5.9-.3 1.8-.5 2.7-.8.9-.1 1.8-.3 2.7-.4 4.5-.8 8.9-1.6 13.4-2.4l2.7-.3c9-.4 17.9-.8 26.9-1.2.9 0 1.8.1 2.7.1 4 .3 8 .7 12 1l8.1.3c3.6-1.2 7.1-1.9 10.4-1.1-3.2-.7-6.7-.1-10.4 1.1 7.4 1 15.2 1 19 9.4 6.2 7.6 12.3 15.2 18.6 22.6 12.5 14.8 25.1 29.4 37.8 44.1 2.7 3.1 6.4 5.6 8.6 9 9.2 13.9 21 25.1 35.3 33.6 2.4 1.5 5.9 1.9 8.8 1.7 4-.3 6.4-2.7 5.1-7.3-4.8-18.2-10.3-36.2-14-54.7-2.6-13.3-2.7-27.2-3.9-40.8-.7-4.8-5.4-9.9 1.3-14 .9.1 1.8.2 2.7.4 3.1.7 6.2 1.5 9.3 2.2.9.2 1.8.4 2.7.5 1.8.4 3.6.7 5.3 1.1l2.7.3c4.5.8 8.9 1.5 13.4 2.3l2.7.3 12 2.4 2.7.3c20.1 4.3 40.2 8.6 60.3 12.8l2.7.6c2.2.7 4.5 1.4 6.7 2.1l2.7.6c2.7.8 5.3 1.7 8 2.5 1.8.5 3.6 1.1 5.4 1.6l2.7 1.2c.7.2 1.3.3 2 .5 1.1.7 2.3 1.4 3.4 2.1 10.5 6.4 20.9 12.9 31.4 19.2 1.9 1.1 4.1 1.7 6.2 2.4 5.8 2.1 12 3.5 17.3 6.5 28.7 15.9 57.2 32.3 85.8 48.4 2.5 1.4 5.5 2.2 10.2 4-1.2-4.3-1.9-6.8-3.1-9.1m-416-121.8c-7.4 0-13.5-5.2-13.7-11.7-.2-7.7 7.3-15.1 15.5-15.2 7.1-.1 13.3 5.9 13.2 13 .1 7.1-7.2 13.9-15 13.9M380 355.9c5.9 5.7 5.5 10.6-1.6 14.4-16.7 8.9-33.4 17.9-50.6 25.6-16.6 7.5-33.7 14.2-50.9 20.3-28.8 10.2-57.9 19.4-89.1 17.8-15.8-.8-31.7-.6-47.2-3-10.6-1.6-21.1-5.9-30.9-10.5-20.9-9.8-42.9-17.8-61.6-32.1-22-16.8-38.7-37.4-47.2-64.1-2.3-7-.7-10.2 6.4-11.8 23-5.1 45.7-12.1 69.8-10 9.9.9 19.9 1.1 29.8 1.2.2.3.4.6.5.9l.5 1.1.7.9c1.3 1.6 2.7 3.3 4 4.9 4.8 5.9 9.7 12 14.7 17.8 12.2 14.5 24.4 28.6 37.9 44.2 1.4 1.6 2.9 3 4.2 4.2 1.5 1.4 2.9 2.7 3.6 3.8 9.9 14.9 22.7 27.1 38.1 36.3 5 3.1 11 3.2 14.1 3 4.9-.4 8.9-2.5 11.4-6 2.4-3.5 3.1-8 1.8-12.6-1.4-5.1-2.8-10.3-4.2-15.3-3.5-12.7-7.1-25.8-9.7-38.8-1.7-8.7-2.3-17.6-2.9-27.1-.3-4.2-.5-8.4-.9-12.7 5.9.2 11.6 1.7 17.4 3.3 10 2.7 20.6 3.4 30.8 5.6 18.2 3.9 36.6 7.3 54.4 12.6 15.1 4.4 29.6 10.9 44.1 17.1 4.8 2 8.9 5.5 12.6 9" style="fill:#fff"/></svg>
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 6 KiB After Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 7.3 KiB |