3 Commits

Author SHA1 Message Date
vcoppe fe8896e870 get styles from github 2026-05-27 20:17:49 +02:00
vcoppe c99517572e update images 2026-05-27 19:40:09 +02:00
vcoppe 0b7f30a7c4 remove maptiler layers 2026-05-27 18:52:15 +02:00
22 changed files with 42 additions and 5711 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 339 KiB

After

Width:  |  Height:  |  Size: 313 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 729 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 525 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 710 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 348 KiB

+5 -22
View File
@@ -27,18 +27,12 @@ import ignFrTopo from './custom/ign-fr-topo.json';
import ignFrPlan from './custom/ign-fr-plan.json'; import ignFrPlan from './custom/ign-fr-plan.json';
import ignFrSatellite from './custom/ign-fr-satellite.json'; import ignFrSatellite from './custom/ign-fr-satellite.json';
import bikerouterGravel from './custom/bikerouter-gravel.json'; import bikerouterGravel from './custom/bikerouter-gravel.json';
import topo from './custom/topo.json';
import satellite from './custom/satellite.json';
export const maptilerKeyPlaceHolder = 'MAPTILER_KEY'; export const maptilerKeyPlaceHolder = 'MAPTILER_KEY';
export const basemaps: { [key: string]: string | StyleSpecification } = { export const basemaps: { [key: string]: string | StyleSpecification } = {
topo: topo as StyleSpecification, topo: 'https://raw.githubusercontent.com/gpxstudio/styles/refs/heads/main/topo.json',
satellite: satellite as StyleSpecification, satellite: 'https://raw.githubusercontent.com/gpxstudio/styles/refs/heads/main/satellite.json',
maptilerStreets: `https://api.maptiler.com/maps/streets-v4/style.json?key=${maptilerKeyPlaceHolder}`,
maptilerTopo: `https://api.maptiler.com/maps/topo-v4/style.json?key=${maptilerKeyPlaceHolder}`,
maptilerOutdoors: `https://api.maptiler.com/maps/outdoor-v4/style.json?key=${maptilerKeyPlaceHolder}`,
maptilerSatellite: `https://api.maptiler.com/maps/hybrid-v4/style.json?key=${maptilerKeyPlaceHolder}`,
esriSatellite: { esriSatellite: {
version: 8, version: 8,
sources: { sources: {
@@ -805,10 +799,6 @@ export const basemapTree: LayerTreeType = {
world: { world: {
topo: true, topo: true,
satellite: true, satellite: true,
maptilerStreets: true,
maptilerTopo: true,
maptilerOutdoors: true,
maptilerSatellite: true,
esriSatellite: true, esriSatellite: true,
openStreetMap: true, openStreetMap: true,
openTopoMap: true, openTopoMap: true,
@@ -1033,10 +1023,6 @@ export const defaultBasemapTree: LayerTreeType = {
world: { world: {
topo: true, topo: true,
satellite: true, satellite: true,
maptilerStreets: true,
maptilerTopo: true,
maptilerOutdoors: true,
maptilerSatellite: true,
esriSatellite: false, esriSatellite: false,
openStreetMap: true, openStreetMap: true,
openTopoMap: true, openTopoMap: true,
@@ -1495,14 +1481,11 @@ export const overpassQueryData: Record<string, OverpassQueryData> = {
}; };
export const terrainSources: { [key: string]: RasterDEMSourceSpecification } = { export const terrainSources: { [key: string]: RasterDEMSourceSpecification } = {
'maptiler-dem': {
type: 'raster-dem',
url: `https://api.maptiler.com/tiles/terrain-rgb-v2/tiles.json?key=${maptilerKeyPlaceHolder}`,
},
mapterhorn: { mapterhorn: {
type: 'raster-dem', type: 'raster-dem',
url: 'https://tiles.mapterhorn.com/tilejson.json', url: 'https://tiles.gpx.studio/mapterhorn.json',
encoding: 'terrarium',
}, },
}; };
export const defaultTerrainSource = 'maptiler-dem'; export const defaultTerrainSource = 'mapterhorn';
+1 -7
View File
@@ -8,7 +8,7 @@
...others ...others
}: { }: {
iconOnly?: boolean; iconOnly?: boolean;
company?: 'gpx.studio' | 'maptiler' | 'github' | 'crowdin' | 'facebook' | 'reddit'; company?: 'gpx.studio' | 'github' | 'crowdin' | 'facebook' | 'reddit';
[key: string]: any; [key: string]: any;
} = $props(); } = $props();
</script> </script>
@@ -19,12 +19,6 @@
alt="Logo of gpx.studio." alt="Logo of gpx.studio."
{...others} {...others}
/> />
{:else if company === 'maptiler'}
<img
src="{base}/maptiler-logo{mode.current === 'dark' ? '-dark' : ''}.svg"
alt="Logo of Maptiler."
{...others}
/>
{:else if company === 'github'} {:else if company === 'github'}
<svg <svg
role="img" role="img"
@@ -1,10 +1,10 @@
<script lang="ts"> <script lang="ts">
import maptilerTopoMap from '$lib/assets/img/home/maptiler-topo.png?enhanced'; import topoMap from '$lib/assets/img/docs/maps/topo.png?enhanced';
import waymarkedMap from '$lib/assets/img/home/waymarked.png?enhanced'; import waymarkedMap from '$lib/assets/img/docs/maps/waymarked.png?enhanced';
</script> </script>
<div class="relative h-80 aspect-square rounded-2xl shadow-xl overflow-clip"> <div class="relative h-80 aspect-square rounded-2xl shadow-xl overflow-clip">
<enhanced:img src={maptilerTopoMap} alt="MapTiler Topo map screenshot." class="absolute" /> <enhanced:img src={topoMap} alt="Topo map screenshot." class="absolute" />
<enhanced:img <enhanced:img
src={waymarkedMap} src={waymarkedMap}
alt="Waymarked Trails map screenshot." alt="Waymarked Trails map screenshot."
@@ -29,7 +29,7 @@ export const defaultEmbeddingOptions = {
key: '', key: '',
files: [], files: [],
ids: [], ids: [],
basemap: 'maptilerStreets', basemap: 'topo',
elevation: { elevation: {
show: true, show: true,
height: 170, height: 170,
@@ -125,9 +125,7 @@ export function convertOldEmbeddingOptions(options: URLSearchParams): any {
} }
if (options.has('source')) { if (options.has('source')) {
let basemap = options.get('source')!; let basemap = options.get('source')!;
if (basemap === 'satellite') { if (basemap === 'otm') {
newOptions.basemap = 'maptilerSatellite';
} else if (basemap === 'otm') {
newOptions.basemap = 'openTopoMap'; newOptions.basemap = 'openTopoMap';
} else if (basemap === 'ohm') { } else if (basemap === 'ohm') {
newOptions.basemap = 'openHikingMap'; newOptions.basemap = 'openHikingMap';
+12 -22
View File
@@ -91,16 +91,26 @@ export class StyleManager {
let basemapStyle = basemaps.openStreetMap as maplibregl.StyleSpecification; let basemapStyle = basemaps.openStreetMap as maplibregl.StyleSpecification;
try { try {
basemapStyle = await this.get(basemapInfo); basemapStyle = await this.get(basemapInfo);
for (const source in basemapStyle.sources) {
const src = basemapStyle.sources[source];
if (
src &&
typeof src === 'object' &&
'url' in src &&
typeof src.url === 'string' &&
src.url.includes(maptilerKeyPlaceHolder)
) {
src.url = src.url.replace(maptilerKeyPlaceHolder, this._maptilerKey);
}
}
} catch (e) { } catch (e) {
console.error(e.message); console.error(e.message);
} }
this.merge(style, basemapStyle); this.merge(style, basemapStyle);
if (this._maptilerKey !== '') {
const terrain = this.getCurrentTerrain(); const terrain = this.getCurrentTerrain();
style.sources[terrain.source] = terrainSources[terrain.source]; style.sources[terrain.source] = terrainSources[terrain.source];
style.terrain = terrain.exaggeration > 0 ? terrain : undefined; style.terrain = terrain.exaggeration > 0 ? terrain : undefined;
}
style.layers.push(...anchorLayers); style.layers.push(...anchorLayers);
@@ -172,7 +182,6 @@ export class StyleManager {
} }
updateTerrain() { updateTerrain() {
if (this._maptilerKey === '') return;
const map_ = get(this._map); const map_ = get(this._map);
if (!map_) return; if (!map_) return;
@@ -195,9 +204,6 @@ export class StyleManager {
): Promise<maplibregl.StyleSpecification> { ): Promise<maplibregl.StyleSpecification> {
if (typeof styleInfo === 'string') { if (typeof styleInfo === 'string') {
let styleUrl = styleInfo as string; let styleUrl = styleInfo as string;
if (styleUrl.includes(maptilerKeyPlaceHolder)) {
styleUrl = styleUrl.replace(maptilerKeyPlaceHolder, this._maptilerKey);
}
const response = await fetch(styleUrl, { cache: 'force-cache' }); const response = await fetch(styleUrl, { cache: 'force-cache' });
if (!response.ok) { if (!response.ok) {
throw new Error(`HTTP error fetching style "${styleInfo}": ${response.status}`); throw new Error(`HTTP error fetching style "${styleInfo}": ${response.status}`);
@@ -205,18 +211,6 @@ export class StyleManager {
const style = await response.json(); const style = await response.json();
return style; return style;
} else { } else {
for (const source in styleInfo.sources) {
const src = styleInfo.sources[source];
if (
src &&
typeof src === 'object' &&
'url' in src &&
typeof src.url === 'string' &&
src.url.includes(maptilerKeyPlaceHolder)
) {
src.url = src.url.replace(maptilerKeyPlaceHolder, this._maptilerKey);
}
}
return styleInfo; return styleInfo;
} }
} }
@@ -260,10 +254,6 @@ export class StyleManager {
getCurrentTerrain() { getCurrentTerrain() {
const terrain = get(terrainSource); const terrain = get(terrainSource);
const source = terrainSources[terrain];
if (source.url && source.url.includes(maptilerKeyPlaceHolder)) {
source.url = source.url.replace(maptilerKeyPlaceHolder, this._maptilerKey);
}
const map_ = get(this._map); const map_ = get(this._map);
return { return {
source: terrain, source: terrain,
+1 -1
View File
@@ -59,7 +59,7 @@ Only one basemap can be displayed at a time.
<DocsLayers /> <DocsLayers />
<span class="text-sm text-center mt-2"> <span class="text-sm text-center mt-2">
Hover over the map to show the <a href="https://hiking.waymarkedtrails.org" target="_blank">Waymarked Trails hiking</a> overlay on top of the <a href="https://www.maptiler.com/maps/outdoor-topo/" target="_blank">MapTiler Topo</a> basemap. Hover over the map to show the <a href="https://hiking.waymarkedtrails.org" target="_blank">Waymarked Trails hiking</a> overlay on top of the topographic basemap.
</span> </span>
</div> </div>
@@ -18,7 +18,7 @@ This tool allows you to add elevation data to traces and [points of interest](..
<DocsNote> <DocsNote>
Elevation data is provided by <a href="https://maptiler.com" target="_blank">MapTiler</a>. Elevation data is provided by <a href="https://mapterhorn.com" target="_blank">Mapterhorn</a>.
You can learn more about its origin and accuracy in the <a href="https://docs.maptiler.com/guides/map-tiling-hosting/data-hosting/rgb-terrain-by-maptiler/" target="_blank">documentation</a>. You can learn more about its origin and accuracy in the <a href="https://mapterhorn.com/attribution/" target="_blank">documentation</a>.
</DocsNote> </DocsNote>
+2 -2
View File
@@ -210,7 +210,7 @@ type RoutingProfile =
| 'motorcycle' | 'motorcycle'
| 'water' | 'water'
| 'railway'; | 'railway';
type TerrainSource = 'maptiler-dem' | 'mapterhorn'; type TerrainSource = 'mapterhorn';
type StreetViewSource = 'mapillary' | 'google'; type StreetViewSource = 'mapillary' | 'google';
export const settings = { export const settings = {
@@ -308,7 +308,7 @@ export const settings = {
terrainSource: new Setting<TerrainSource>( terrainSource: new Setting<TerrainSource>(
'terrainSource', 'terrainSource',
defaultTerrainSource, defaultTerrainSource,
getValueValidator(['maptiler-dem', 'mapterhorn'], defaultTerrainSource) getValueValidator(['mapterhorn'], defaultTerrainSource)
), ),
directionMarkers: new Setting('directionMarkers', false), directionMarkers: new Setting('directionMarkers', false),
distanceMarkers: new Setting('distanceMarkers', false), distanceMarkers: new Setting('distanceMarkers', false),
+8 -10
View File
@@ -7,7 +7,6 @@ import maplibregl from 'maplibre-gl';
import { pointToTile, pointToTileFraction } from '@mapbox/tilebelt'; import { pointToTile, pointToTileFraction } from '@mapbox/tilebelt';
import type { GPXStatisticsTree } from '$lib/logic/statistics-tree'; import type { GPXStatisticsTree } from '$lib/logic/statistics-tree';
import { ListTrackSegmentItem } from '$lib/components/file-list/file-list'; import { ListTrackSegmentItem } from '$lib/components/file-list/file-list';
import { PUBLIC_MAPTILER_KEY } from '$env/static/public';
export function cn(...inputs: ClassValue[]) { export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs)); return twMerge(clsx(inputs));
@@ -101,7 +100,7 @@ export function getClosestTrackSegments(
export function getElevation( export function getElevation(
points: (TrackPoint | Waypoint | Coordinates)[], points: (TrackPoint | Waypoint | Coordinates)[],
ELEVATION_ZOOM: number = 13, ELEVATION_ZOOM: number = 12,
tileSize = 512 tileSize = 512
): Promise<number[]> { ): Promise<number[]> {
let coordinates = points.map((point) => let coordinates = points.map((point) =>
@@ -122,10 +121,9 @@ export function getElevation(
}; };
let promises = uniqueTiles.map((tile) => let promises = uniqueTiles.map((tile) =>
fetch( fetch(`https://tiles.gpx.studio/mapterhorn/${ELEVATION_ZOOM}/${tile[0]}/${tile[1]}.webp`, {
`https://api.maptiler.com/tiles/terrain-rgb-v2/${ELEVATION_ZOOM}/${tile[0]}/${tile[1]}.webp?key=${PUBLIC_MAPTILER_KEY}`, cache: 'force-cache',
{ cache: 'force-cache' } })
)
.then((response) => response.blob()) .then((response) => response.blob())
.then( .then(
(blob) => (blob) =>
@@ -180,10 +178,10 @@ export function getElevation(
_y + (_y + 1 == tileSize ? 0 : 1) _y + (_y + 1 == tileSize ? 0 : 1)
); );
let ele00 = -10000 + (p00[0] * 256 * 256 + p00[1] * 256 + p00[2]) * 0.1; let ele00 = -32768 + p00[0] * 256 + p00[1] + p00[2] / 256;
let ele01 = -10000 + (p01[0] * 256 * 256 + p01[1] * 256 + p01[2]) * 0.1; let ele01 = -32768 + p01[0] * 256 + p01[1] + p01[2] / 256;
let ele10 = -10000 + (p10[0] * 256 * 256 + p10[1] * 256 + p10[2]) * 0.1; let ele10 = -32768 + p10[0] * 256 + p10[1] + p10[2] / 256;
let ele11 = -10000 + (p11[0] * 256 * 256 + p11[1] * 256 + p11[2]) * 0.1; let ele11 = -32768 + p11[0] * 256 + p11[1] + p11[2] / 256;
return ( return (
ele00 * (1 - dx) * (1 - dy) + ele00 * (1 - dx) * (1 - dy) +
+1 -6
View File
@@ -235,7 +235,7 @@
}, },
"elevation": { "elevation": {
"button": "Request elevation data", "button": "Request elevation data",
"help": "Requesting elevation data will erase the existing elevation data, if any, and replace it with data from MapTiler.", "help": "Requesting elevation data will erase the existing elevation data, if any, and replace it with data from Mapterhorn.",
"help_no_selection": "Select a file item to request elevation data." "help_no_selection": "Select a file item to request elevation data."
}, },
"waypoint": { "waypoint": {
@@ -306,10 +306,6 @@
"united_states": "United States", "united_states": "United States",
"topo": "Topo", "topo": "Topo",
"satellite": "Satellite", "satellite": "Satellite",
"maptilerStreets": "MapTiler Streets",
"maptilerTopo": "MapTiler Topo",
"maptilerOutdoors": "MapTiler Outdoors",
"maptilerSatellite": "MapTiler Satellite",
"esriSatellite": "Esri Satellite", "esriSatellite": "Esri Satellite",
"openStreetMap": "OpenStreetMap", "openStreetMap": "OpenStreetMap",
"openTopoMap": "OpenTopoMap", "openTopoMap": "OpenTopoMap",
@@ -390,7 +386,6 @@
"tram-stop": "Tram Stop", "tram-stop": "Tram Stop",
"bus-stop": "Bus Stop", "bus-stop": "Bus Stop",
"ferry": "Ferry", "ferry": "Ferry",
"maptiler-dem": "MapTiler DEM",
"mapterhorn": "Mapterhorn" "mapterhorn": "Mapterhorn"
} }
}, },
@@ -19,8 +19,8 @@
return; return;
} }
embeddingOptions = getMergedEmbeddingOptions(options); embeddingOptions = getMergedEmbeddingOptions(options);
if (embeddingOptions.key === '' && embeddingOptions.basemap.startsWith('maptiler')) { if (embeddingOptions.key === '' && embeddingOptions.basemap === 'satellite') {
embeddingOptions.basemap = 'openStreetMap'; embeddingOptions.basemap = 'topo';
} }
}); });
</script> </script>
-47
View File
@@ -1,47 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 812 212" style="enable-background:new 0 0 812 212;" xml:space="preserve">
<style type="text/css">
.st0{fill:#3A1888;}
.st1{fill:#03A1C4;}
.st2{fill:#05D0DF;}
.st3{fill:#761FE8;}
.st4{fill:#FFAA01;}
.st5{fill:#F1175D;}
.st6{fill:#FB3A1B;}
.st7{fill:#FBC935;}
.st8{fill:#FFFFFF;}
</style>
<g>
<path class="st0" d="M94.3,164.2c9.2,9.2,33.8,34.3,33.8,34.3c-0.1,0.2,24.4-24.5,34.2-34.2l-34.1-34.1L94.3,164.2z"/>
<path class="st1" d="M128.3,130.2l34.1,34.1c0.1-0.1,0.1-0.1,0.2-0.2l34-34L162.5,96L128.3,130.2z"/>
<path class="st2" d="M196.6,130.1L196.6,130.1c18.9-18.9,18.9-49.4,0.1-68.3L162.5,96L196.6,130.1z"/>
<path class="st3" d="M94.1,96l-34,34c0,0,0,0,0,0l34.1,34.1c0,0,0,0,0.1,0.1l34-34L94.1,96z"/>
<path class="st4" d="M128.3,61.8L162.5,96l34.2-34.2c0,0,0,0-0.1-0.1l-34.1-34.1c0,0,0,0,0,0L128.3,61.8z"/>
<path class="st5" d="M60,61.9c-18.7,18.9-18.6,49.3,0.1,68.1l34-34L60,61.9z"/>
<path class="st6" d="M128.3,61.8L94.2,27.7l-34,34c-0.1,0.1-0.1,0.1-0.2,0.2L94.1,96L128.3,61.8z"/>
<path class="st7" d="M162.5,27.6c-18.9-18.8-49.4-18.8-68.2,0l-0.1,0.1l34.1,34.1L162.5,27.6z"/>
</g>
<path class="st8" d="M303.8,138.6v-34.9c0-8.6-4.5-16.4-13.3-16.4c-8.7,0-13.9,7.8-13.9,16.4v34.9h-16.1V73.4h14.9l1.2,7.9
c3.4-6.6,11-9,17.2-9c7.8,0,15.6,3.2,19.3,12.2c5.8-9.2,13.3-11.9,21.8-11.9c18.5,0,27.6,11.4,27.6,30.9v35.1h-16.1v-35.1
c0-8.6-3.6-15.9-12.3-15.9c-8.7,0-14.1,7.5-14.1,16.1v34.9H303.8z"/>
<path class="st8" d="M430.5,73.5h15.5v65.1h-15.2l-0.8-9.5c-3.7,7.7-13.9,11.4-21.1,11.5c-19.3,0.1-33.6-11.8-33.6-34.6
c0-22.5,14.9-34.2,34-34.1c8.7,0,17,4.1,20.7,10.6L430.5,73.5z M391.4,106c0,12.4,8.6,19.8,19.3,19.8c25.4,0,25.4-39.5,0-39.5
C399.9,86.3,391.4,93.6,391.4,106z"/>
<path class="st8" d="M459.5,165.8V73.5h15.1l1.1,9c5-7.3,13.7-10.4,21.1-10.4c20.1,0,33.4,14.9,33.4,34.1c0,19-12,34.1-32.9,34.1
c-6.9,0-17-2.1-21.7-9.3v34.9H459.5z M514.1,106.1c0-10.2-6.9-18.5-18.5-18.5c-11.6,0-18.5,8.3-18.5,18.5c0,10.2,7.5,18.5,18.5,18.5
C506.6,124.6,514.1,116.3,514.1,106.1z"/>
<path class="st8" d="M559,53.7v19.7h22.2v5.4H559v39.8c0,8.8,1.9,15.1,12,15.1c3.2,0,6.7-1.1,10-2.6l2.2,5.3
c-4.1,2-8.2,3.3-12.3,3.3c-13.9,0-18.4-8.2-18.4-21V78.8h-13.9v-5.4h13.9v-19L559,53.7z"/>
<path class="st8" d="M604.7,52.1c0,6.9-10.4,6.9-10.4,0C594.3,45.2,604.7,45.2,604.7,52.1z M596.1,73.1v65.5h6.5V73.1H596.1z"/>
<path class="st8" d="M627.6,46.2v92.5h-6.5V46.2H627.6z"/>
<path class="st8" d="M730.2,73.4l0.3,11.6c4.1-8.9,13.3-12.3,21.7-12.3c4.9-0.1,9.6,1.2,14,3.8l-2.9,5.3c-3.4-2.1-7.3-3-11.1-3
c-12.2,0.1-21.5,9.9-21.5,21.8v38h-6.5V73.4H730.2z"/>
<g>
<path class="st8" d="M675.1,134.7c-11.5,0-21.4-7.2-25.5-17.4l0,0l0,0c0,0,0,0,0,0l52.8-14c0,0,0,0,0,0.1l5.6-1.5
c-2.3-16.5-16.2-29.3-33-29.3c-18.4,0-33.3,15.2-33.3,34c0,18.8,14.9,34,33.3,34c13.8,0,25.6-8.5,30.6-20.7l-5.3-2.3
C696.2,127.6,686.4,134.7,675.1,134.7z M647.5,106.6c0-15.5,12.3-28.1,27.5-28.1c11.9,0,22,7.7,25.9,18.5L647.9,111
C647.6,109.5,647.5,108.1,647.5,106.6z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

-45
View File
@@ -1,45 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 812 212" style="enable-background:new 0 0 812 212;" xml:space="preserve">
<style type="text/css">
.st0{fill:#3A1888;}
.st1{fill:#03A1C4;}
.st2{fill:#05D0DF;}
.st3{fill:#761FE8;}
.st4{fill:#FFAA01;}
.st5{fill:#F1175D;}
.st6{fill:#FB3A1B;}
.st7{fill:#FBC935;}
.st8{fill:#333359;}
</style>
<path class="st0" d="M94.3,164.2c9.2,9.2,33.8,34.3,33.8,34.3c-0.1,0.2,24.4-24.5,34.2-34.2l-34.1-34.1L94.3,164.2z"/>
<path class="st1" d="M128.3,130.2l34.1,34.1c0.1-0.1,0.1-0.1,0.2-0.2l34-34L162.5,96L128.3,130.2z"/>
<path class="st2" d="M196.6,130.1L196.6,130.1c18.9-18.9,18.9-49.4,0.1-68.3L162.5,96L196.6,130.1z"/>
<path class="st3" d="M94.1,96l-34,34c0,0,0,0,0,0l34.1,34.1c0,0,0,0,0.1,0.1l34-34L94.1,96z"/>
<path class="st4" d="M128.3,61.8L162.5,96l34.2-34.2c0,0,0,0-0.1-0.1l-34.1-34.1c0,0,0,0,0,0L128.3,61.8z"/>
<path class="st5" d="M60,61.9c-18.7,18.9-18.6,49.3,0.1,68.1l34-34L60,61.9z"/>
<path class="st6" d="M128.3,61.8L94.2,27.7l-34,34c-0.1,0.1-0.1,0.1-0.2,0.2L94.1,96L128.3,61.8z"/>
<path class="st7" d="M162.5,27.6c-18.9-18.8-49.4-18.8-68.2,0l-0.1,0.1l34.1,34.1L162.5,27.6z"/>
<path class="st8" d="M303.7,138.6v-34.9c0-8.6-4.5-16.4-13.3-16.4c-8.7,0-13.9,7.8-13.9,16.4v34.9h-16.1V73.4h14.9l1.2,7.9
c3.4-6.6,11-9,17.2-9c7.8,0,15.6,3.2,19.3,12.2c5.8-9.2,13.3-11.9,21.8-11.9c18.5,0,27.6,11.4,27.6,30.9v35.1h-16.1v-35.1
c0-8.6-3.6-15.9-12.3-15.9c-8.7,0-14.1,7.5-14.1,16.1v34.9H303.7z"/>
<path class="st8" d="M430.3,73.5h15.5v65.1h-15.2l-0.8-9.5c-3.7,7.7-13.9,11.4-21.1,11.5c-19.3,0.1-33.6-11.8-33.6-34.6
c0-22.5,14.9-34.2,34-34.1c8.7,0,17,4.1,20.7,10.6L430.3,73.5z M391.2,106c0,12.4,8.6,19.8,19.3,19.8c25.4,0,25.4-39.5,0-39.5
C399.8,86.3,391.2,93.6,391.2,106z"/>
<path class="st8" d="M459.4,165.8V73.5h15.1l1.1,9c5-7.3,13.7-10.4,21.1-10.4c20.1,0,33.4,14.9,33.4,34.1c0,19-12,34.1-32.9,34.1
c-6.9,0-17-2.1-21.7-9.3v34.9H459.4z M514,106.1c0-10.2-6.9-18.5-18.5-18.5c-11.6,0-18.5,8.3-18.5,18.5c0,10.2,7.5,18.5,18.5,18.5
C506.4,124.6,514,116.3,514,106.1z"/>
<path class="st8" d="M558.9,53.7v19.7h22.2v5.4h-22.2v39.8c0,8.8,1.9,15.1,12,15.1c3.2,0,6.7-1.1,10-2.6l2.2,5.3
c-4.1,2-8.2,3.3-12.3,3.3c-13.9,0-18.4-8.2-18.4-21V78.8h-13.9v-5.4h13.9v-19L558.9,53.7z"/>
<path class="st8" d="M604.6,52.1c0,6.9-10.4,6.9-10.4,0C594.1,45.2,604.6,45.2,604.6,52.1z M596,73.1v65.5h6.5V73.1H596z"/>
<path class="st8" d="M627.4,46.2v92.5H621V46.2H627.4z"/>
<path class="st8" d="M730.1,73.4l0.3,11.6c4.1-8.9,13.3-12.3,21.7-12.3c4.9-0.1,9.6,1.2,14,3.8l-2.9,5.3c-3.4-2.1-7.3-3-11.1-3
c-12.2,0.1-21.5,9.9-21.5,21.8v38H724V73.4H730.1z"/>
<g>
<path class="st8" d="M674.9,134.7c-11.5,0-21.4-7.2-25.5-17.4l0,0l0,0c0,0,0,0,0,0l52.8-14c0,0,0,0,0,0.1l5.6-1.5
c-2.3-16.5-16.2-29.3-33-29.3c-18.4,0-33.3,15.2-33.3,34c0,18.8,14.9,34,33.3,34c13.8,0,25.6-8.5,30.6-20.7l-5.3-2.3
C696.1,127.6,686.3,134.7,674.9,134.7z M647.4,106.6c0-15.5,12.3-28.1,27.5-28.1c11.9,0,22,7.7,25.9,18.5L647.7,111
C647.5,109.5,647.4,108.1,647.4,106.6z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB