mirror of
https://github.com/Queer-Lexikon/regenbogenkarte
synced 2024-12-11 21:22:30 +00:00
chore: initial fork of the closed-source project
This commit includes all data from the current map, excluding: - the actual data - the deployment script to the server We've added a comprehensive README for newcomers, so that they can understand what's going on. Co-authored-by: xenia <xhartmann@posteo.de>
This commit is contained in:
commit
e98c3de747
32 changed files with 4010 additions and 0 deletions
16
.github/ISSUE_TEMPLATE/feature-wunsch.md
vendored
Normal file
16
.github/ISSUE_TEMPLATE/feature-wunsch.md
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
name: Feature-Wunsch
|
||||
about: Ne Idee wie Dinge besser gemacht werden können? Her damit!
|
||||
title: ""
|
||||
labels: enhancement
|
||||
assignees: ""
|
||||
---
|
||||
|
||||
**Bezieht sich deine Anfrage auf ein Problem? Falls ja, beschreibe dieses.**
|
||||
Eine klare und prägnante Beschreibung des Problems. Beispiel: Ich bin immer frustriert, wenn [...]
|
||||
|
||||
**Beschreibe die Lösung, die du dir wünschst**
|
||||
Eine klare und prägnante Beschreibung dessen, was du dir wünscht.
|
||||
|
||||
**Weitere Informationen**
|
||||
Füge hier weitere Informationen oder Screenshots zur Anfrage hinzu.
|
41
.github/ISSUE_TEMPLATE/fehler-melden.md
vendored
Normal file
41
.github/ISSUE_TEMPLATE/fehler-melden.md
vendored
Normal file
|
@ -0,0 +1,41 @@
|
|||
---
|
||||
name: Fehler melden
|
||||
about: Bugs und Fehlerchen sollten nicht sein, diese können hier gemeldet werden.
|
||||
title: ""
|
||||
labels: bug
|
||||
assignees: ""
|
||||
---
|
||||
|
||||
**Fehlerbeschreibung**
|
||||
Eine klare und präzise Beschreibung, was der Fehler ist.
|
||||
|
||||
**Wie kann der Fehler reproduziert werden?**
|
||||
|
||||
Schritte, um das Verhalten zu reproduzieren:
|
||||
|
||||
1. Gehe zu '...'
|
||||
2. Klicke auf '....'.
|
||||
3. Blättere nach unten zu '....'.
|
||||
4. Siehe Fehler
|
||||
|
||||
**Erwartetes Verhalten**
|
||||
Eine klare und prägnante Beschreibung dessen, was du erwartest hast.
|
||||
|
||||
**Screenshots**
|
||||
Füge gegebenenfalls Screenshots hinzu, um das Problem zu erklären.
|
||||
|
||||
**Desktop (bitte fülle die folgenden Informationen aus):**
|
||||
|
||||
- Betriebssystem: [z. B. iOS]
|
||||
- Browser [z. B. Chrome, Safari]
|
||||
- Version [z.B. 22]
|
||||
|
||||
**Smartphone (bitte fülle die folgenden Informationen aus):**
|
||||
|
||||
- Gerät: [z.B. iPhone6]
|
||||
- Betriebssystem: [z.B. iOS8.1]
|
||||
- Browser [z.B. Standardbrowser, Safari]
|
||||
- Version [z.B. 22]
|
||||
|
||||
**Zusätzliche Infos**
|
||||
Füge hier weitere Informationen über das Problem hinzu.
|
BIN
.github/assets/map.png
vendored
Normal file
BIN
.github/assets/map.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 MiB |
27
.github/workflows/playwright.yml
vendored
Normal file
27
.github/workflows/playwright.yml
vendored
Normal file
|
@ -0,0 +1,27 @@
|
|||
name: Playwright Tests
|
||||
on:
|
||||
push:
|
||||
branches: [main, master]
|
||||
pull_request:
|
||||
branches: [main, master]
|
||||
jobs:
|
||||
test:
|
||||
timeout-minutes: 60
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: "14.x"
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
- name: Install Playwright Browsers
|
||||
run: npx playwright install --with-deps
|
||||
- name: Run Playwright tests
|
||||
run: npx playwright test
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: always()
|
||||
with:
|
||||
name: playwright-report
|
||||
path: playwright-report/
|
||||
retention-days: 30
|
34
.github/workflows/pr.yml
vendored
Normal file
34
.github/workflows/pr.yml
vendored
Normal file
|
@ -0,0 +1,34 @@
|
|||
name: Code quality verification
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types:
|
||||
- "opened"
|
||||
- "synchronize"
|
||||
|
||||
jobs:
|
||||
format:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Format files using prettier
|
||||
run: npm run format
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v4
|
||||
name: Commit possible changes
|
||||
with:
|
||||
commit_message: "style: format files using prettier"
|
||||
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Build the project
|
||||
run: npm run build
|
147
.gitignore
vendored
Normal file
147
.gitignore
vendored
Normal file
|
@ -0,0 +1,147 @@
|
|||
# Created by https://www.toptal.com/developers/gitignore/api/node
|
||||
# Edit at https://www.toptal.com/developers/gitignore?templates=node
|
||||
|
||||
### Node ###
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
lerna-debug.log*
|
||||
.pnpm-debug.log*
|
||||
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# Snowpack dependency directory (https://snowpack.dev/)
|
||||
web_modules/
|
||||
|
||||
# TypeScript cache
|
||||
*.tsbuildinfo
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional stylelint cache
|
||||
.stylelintcache
|
||||
|
||||
# Microbundle cache
|
||||
.rpt2_cache/
|
||||
.rts2_cache_cjs/
|
||||
.rts2_cache_es/
|
||||
.rts2_cache_umd/
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variable files
|
||||
.env
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.env.local
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
.parcel-cache
|
||||
|
||||
# Next.js build output
|
||||
.next
|
||||
out
|
||||
|
||||
# Nuxt.js build / generate output
|
||||
.nuxt
|
||||
dist
|
||||
|
||||
# Gatsby files
|
||||
.cache/
|
||||
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||
# public
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# vuepress v2.x temp and cache directory
|
||||
.temp
|
||||
|
||||
# Docusaurus cache and generated files
|
||||
.docusaurus
|
||||
|
||||
# Serverless directories
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
# DynamoDB Local files
|
||||
.dynamodb/
|
||||
|
||||
# TernJS port file
|
||||
.tern-port
|
||||
|
||||
# Stores VSCode versions used for testing VSCode extensions
|
||||
.vscode-test
|
||||
|
||||
# yarn v2
|
||||
.yarn/cache
|
||||
.yarn/unplugged
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.*
|
||||
|
||||
### Node Patch ###
|
||||
# Serverless Webpack directories
|
||||
.webpack/
|
||||
|
||||
# Optional stylelint cache
|
||||
|
||||
# SvelteKit build / generate output
|
||||
.svelte-kit
|
||||
|
||||
# End of https://www.toptal.com/developers/gitignore/api/node
|
||||
/test-results/
|
||||
/playwright-report/
|
||||
/playwright/.cache/
|
6
.prettierrc
Normal file
6
.prettierrc
Normal file
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"useTabs": true,
|
||||
"singleQuote": false,
|
||||
"trailingComma": "all",
|
||||
"printWidth": 100
|
||||
}
|
8
.vscode/extensions.json
vendored
Normal file
8
.vscode/extensions.json
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"recommendations": [
|
||||
"ms-playwright.playwright",
|
||||
"csstools.postcss",
|
||||
"esbenp.prettier-vscode",
|
||||
"bradlc.vscode-tailwindcss"
|
||||
]
|
||||
}
|
4
.vscode/settings.json
vendored
Normal file
4
.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"spellright.language": ["de_DE"],
|
||||
"spellright.documentTypes": ["markdown", "latex", "plaintext"]
|
||||
}
|
77
README.md
Normal file
77
README.md
Normal file
|
@ -0,0 +1,77 @@
|
|||
# Regenbogenkarte
|
||||
|
||||
Die Regenbogenkarte ist eine interaktive Karte für das Anzeigen und Entdecken von queeren (Jugend)-Gruppen.
|
||||
Die Idee dahinter war, insbesondere Jugendlichen einen Anlaufpunkt zu geben, um sich mit Gleichgesinnten austauschen zu können.
|
||||
|
||||
<p align="center">
|
||||
<img src="./.github/assets/map.png" alt="Screenshot der Karte mit Jugendgruppen" width="738">
|
||||
</p>
|
||||
|
||||
Der aktuelle Stand ist online vorzufinden: https://karte.queer-lexikon.net/
|
||||
|
||||
## Wo sind die Daten?
|
||||
|
||||
Wir haben uns bewusst dagegen entschieden, die dahinter liegenden Daten zu veröffentlichen.
|
||||
Dennoch wollen wir den Code der Karte teilen, damit:
|
||||
|
||||
1. transparent wird, wie die Karte funktioniert.
|
||||
2. Änderungen und Verbesserungen aus der Community ergänzt werden können.
|
||||
|
||||
Für Ergänzungen und Korrekturen ist der E-Mail-Kontakt unter karte@queer-lexikon.net vorzuziehen.
|
||||
|
||||
## Wie funktioniert die Karte?
|
||||
|
||||
1. Beim Aufruf wird die Karte und eventuelle Elemente (Suchfeld, Menü, etc.) geladen. Für das
|
||||
Kartenmaterial nutzen wir den [deutschen OpenStreetMap-Server](https://openstreetmap.de/) des FOSSGIS e.V.
|
||||
Das Material steht unter einer CC-BY-SA 2.0 Lizenz.
|
||||
2. Der aktuelle Ort wird abgefragt. Der Browser übermittelt uns die (ungefähren) Standortdaten.
|
||||
Zu diesen Koordinaten wird anschließend navigiert.
|
||||
|
||||
## Kompilieren
|
||||
|
||||
Die Karte ist rein JavaScript basiert. Wir nutzen aber für ein bisschen Komfort TypeScript, das macht
|
||||
Refactorings deutlich leichter. Anschließend wird [Vite](https://vitejs.dev/) als Bundler genutzt und
|
||||
die finalen, komprimierten Assets erzeugt. Verwaltet wird alles über `npm`. Also:
|
||||
|
||||
```shell
|
||||
npm install # installiert alle Abhängigkeiten
|
||||
npm run build # kompiliert den Code
|
||||
```
|
||||
|
||||
### Code-Format
|
||||
|
||||
Prettier wird für ein einheitliches Format der Daten verwendet. Mit
|
||||
|
||||
```shell
|
||||
npm run format
|
||||
```
|
||||
|
||||
werden alle Dateien formatiert. Außerdem wird bei Pull Requests eingehender Code automatisch formatiert,
|
||||
also falls es mal vergessen wurde, kein Problem.
|
||||
|
||||
### Warum nutzt ihr kein Framework wie Vue, React, Svelte, etc.?
|
||||
|
||||
Das hat mehrere Gründe. Zum Einen sind die benannten Frameworks stets im Wandel. Die Karte soll aber
|
||||
eine fire-and-forget Lösung sein. Das heißt, einmal aufgesetzt und deployed, soll die erst mal bis in
|
||||
alle Ewigkeiten laufen. Die stetigen Änderungen und der damit einhergehende Wartungsaufwand bei
|
||||
den bekannten Frameworks ist nicht ohne. Natürlich achten diese darauf, dass die _breaking changes_
|
||||
so klein wie möglich ausfallen, dennoch ist ein stetiges Weiterentwickeln der Karte notwendig.
|
||||
|
||||
Zum anderen ist die Funktionalität der Karte gering. Bis auf die Karte, ein Suchfeld und das mobile
|
||||
Menü sind quasi keine interaktiven Elemente vorhanden. Es ist für Menschen, die nicht im JavaScript-
|
||||
Universum unterwegs sind, deutlich einfacher, den sehr explizit geschriebenen Code der Karte zu verstehen,
|
||||
anstatt erst einmal das benutzte Framework zu verstehen.
|
||||
|
||||
Sofern sich aber die Funktionalitäten der Karte in Zukunft erweitern, schließen wir nicht aus, Schritt
|
||||
für Schritt die Karte auf eines der Frameworks umzubauen. Nur aktuell besteht kein Bedarf.
|
||||
|
||||
## Lizenzen
|
||||
|
||||
- Code: OSL-3.0
|
||||
- Icons: ???
|
||||
- Kartenmaterial: CC-BY-SA 2.0
|
||||
|
||||
## Dankeschön ❤️
|
||||
|
||||
Ein großes Dankeschön geht an all die lieben Vereine und Organisationen, die wir auf unserer Karte anzeigen dürfen.
|
||||
Ein weiteres Dankeschön geht raus an den FOSSGIS e.V. für die Bereitstellung der Infrastruktur, auf dem die Karte aufbaut.
|
138
assets/default.svg
Normal file
138
assets/default.svg
Normal file
|
@ -0,0 +1,138 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50.96 50.96">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: none;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: #65aa72;
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: #2f75a6;
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
fill: #c24747;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
fill: #d67f48;
|
||||
}
|
||||
|
||||
.cls-7 {
|
||||
fill: #dbd175;
|
||||
}
|
||||
|
||||
.cls-8 {
|
||||
fill: #620043;
|
||||
}
|
||||
|
||||
.cls-9 {
|
||||
fill: #795ea0;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path class="cls-2" d="M46.32,22.26c-.15-1.84-.54-3.66-1.18-5.41-.23-.64-.49-1.26-.78-1.86-.86-1.8-1.96-3.46-3.28-4.94l-.05-.06c-.61-.67-1.21-1.27-1.83-1.81-.32-.28-.62-.52-.92-.75-.14-.11-.27-.21-.41-.31-.45-.33-.89-.63-1.33-.9l-.05-.03c-.23-.14-.46-.29-.7-.42-.24-.14-.49-.27-.74-.4-.33-.17-.66-.33-.99-.48l-.12-.06c-.18-.08-.36-.16-.54-.24-.45-.19-.93-.36-1.42-.52-.19-.06-.38-.12-.57-.18-.56-.16-1.06-.29-1.55-.4h-.05s-.1-.04-.15-.05c-.54-.11-1.13-.2-1.81-.28-.16-.02-.32-.03-.47-.05-.72-.07-1.33-.1-1.9-.1-.64,0-1.29,.03-2.01,.1h-.06s-.13,.02-.13,.02c-.56,.06-1.15,.15-1.8,.28l-.11,.02c-.08,.01-.16,.03-.24,.05-.5,.11-1.02,.24-1.6,.41-.17,.05-.33,.1-.49,.15-.45,.15-.91,.31-1.4,.51-.21,.09-.43,.18-.64,.27-.4,.18-.8,.37-1.18,.57-.26,.14-.51,.28-.77,.43-.18,.1-.35,.21-.52,.32l-.05,.03c-.44,.27-.87,.56-1.27,.85l-.19,.14-.07,.05c-.51,.38-1,.78-1.46,1.21l-.08,.07c-.96,.88-1.85,1.85-2.63,2.89h0s-.04,.05-.04,.05c-.36,.48-.69,.97-1,1.46l-.04,.07c-.34,.56-.62,1.05-.87,1.55l-.04,.08c-.62,1.24-1.1,2.51-1.46,3.81h0s-.01,.05-.01,.05c-.19,.71-.35,1.46-.47,2.23-.06,.41-.14,.95-.19,1.53-.05,.55-.09,1.14-.09,1.73,0,.49,.02,1.01,.07,1.65,.04,.47,.1,.97,.19,1.56,.06,.38,.13,.76,.21,1.13l.02,.1c.16,.71,.34,1.37,.54,2.02l.03,.08,.06,.17c.33,.98,.74,1.95,1.22,2.87,.07,.13,.14,.26,.21,.39,1.31,2.41,3.05,4.51,5.16,6.23,.05,.04,.1,.08,.15,.12l.08,.06c.44,.35,.88,.67,1.31,.96,.12,.08,.25,.16,.37,.24l.07,.04c.4,.26,.81,.5,1.21,.72,.18,.1,.37,.2,.56,.3,.37,.19,.76,.37,1.21,.56l.15,.07c.15,.07,.31,.13,.46,.19,.37,.15,.78,.29,1.31,.46l.19,.06c.13,.04,.25,.09,.38,.12,.62,.18,1.2,.32,1.77,.43,.02,.04,.06,.09,.1,.16,.05,.1,.1,.2,.16,.32,.18,.39,.36,.9,.55,1.43,.72,2.01,1.47,4.09,3.18,4.09s2.4-2.05,3.13-4.03c.2-.55,.4-1.08,.58-1.48,.05-.12,.11-.22,.16-.32,.05-.08,.08-.14,.11-.17,.07-.01,.13-.03,.2-.05,.06-.02,.13-.03,.19-.05h.03s0,0,0,0c3.66-.79,7.06-2.55,9.82-5.12,.4-.37,.77-.74,1.13-1.13,.8-.86,1.52-1.79,2.16-2.77l.13-.2c.58-.91,1.09-1.87,1.52-2.85,.08-.18,.15-.35,.22-.53,.11-.28,.23-.56,.33-.85,.14-.39,.27-.79,.38-1.18,.09-.31,.16-.62,.24-.93v-.05s.03-.08,.03-.08c.05-.2,.09-.39,.13-.59,.06-.28,.11-.57,.15-.86,.05-.31,.09-.62,.13-.94l.02-.16c.02-.17,.04-.34,.05-.51,.05-.64,.08-1.18,.08-1.7,0-.59-.04-1.16-.08-1.69Zm-17.12,1.74c0,2.05-1.67,3.72-3.72,3.72s-3.72-1.67-3.72-3.72,1.67-3.72,3.72-3.72,3.72,1.67,3.72,3.72Z"/>
|
||||
<g>
|
||||
<path class="cls-1" d="M21.16,20.26s0,0,0,0c0,0,0,0,0,0Z"/>
|
||||
<path class="cls-1" d="M19.8,23.35c0-.06,.02-.13,.03-.19,0,.06-.02,.13-.03,.19Z"/>
|
||||
<path class="cls-1" d="M20.41,26.65s-.02-.03-.02-.05c0,.02,.02,.03,.02,.05Z"/>
|
||||
<path class="cls-1" d="M19.91,22.71c.02-.07,.03-.13,.05-.2-.02,.07-.04,.13-.05,.2Z"/>
|
||||
<path class="cls-1" d="M20.1,22.07c.02-.05,.04-.11,.06-.16-.02,.05-.04,.11-.06,.16Z"/>
|
||||
<path class="cls-1" d="M20.39,21.4s.02-.03,.02-.05c0,.02-.02,.03-.02,.05Z"/>
|
||||
<path class="cls-1" d="M24.5,18.38c.05,0,.1-.02,.15-.02-.05,0-.1,.01-.15,.02Z"/>
|
||||
<path class="cls-1" d="M21.61,19.8s.02-.01,.02-.02c0,0-.02,.01-.02,.02Z"/>
|
||||
<path class="cls-1" d="M26.09,18.32c.06,0,.11,.02,.17,.03-.06,0-.11-.02-.17-.03Z"/>
|
||||
<path class="cls-1" d="M22.88,18.91s0,0,0,0c0,0,0,0,0,0Z"/>
|
||||
<path class="cls-1" d="M23.67,18.58s.02,0,.03-.01c0,0-.02,0-.03,.01Z"/>
|
||||
<path class="cls-1" d="M27.66,29.29s-.03,0-.04,.01c.01,0,.03,0,.04-.01Z"/>
|
||||
<path class="cls-1" d="M26.69,18.42c.06,.01,.11,.03,.17,.04-.06-.01-.11-.03-.17-.04Z"/>
|
||||
<path class="cls-1" d="M28.33,28.95s-.03,.02-.05,.03c.02,0,.03-.02,.05-.03Z"/>
|
||||
<path class="cls-1" d="M28.93,28.56s-.04,.03-.06,.05c.02-.02,.04-.03,.06-.05Z"/>
|
||||
<path class="cls-1" d="M27.04,29.5c-.06,.02-.12,.03-.18,.05,.06-.02,.12-.03,.18-.05Z"/>
|
||||
<path class="cls-1" d="M24.46,29.62s-.05,0-.08-.01c.03,0,.05,0,.08,.01Z"/>
|
||||
<path class="cls-1" d="M26.36,29.65c-.07,.01-.13,.02-.2,.03,.07,0,.13-.02,.2-.03Z"/>
|
||||
<path class="cls-1" d="M21.7,28.29s-.06-.06-.09-.08c.03,.03,.06,.06,.09,.08Z"/>
|
||||
<path class="cls-1" d="M22.54,28.9s-.08-.04-.11-.07c.04,.02,.07,.05,.11,.07Z"/>
|
||||
<path class="cls-1" d="M20.99,27.53s-.04-.05-.06-.08c.02,.03,.04,.05,.06,.08Z"/>
|
||||
<path class="cls-1" d="M23.47,29.35s-.08-.03-.11-.04c.04,.01,.08,.03,.11,.04Z"/>
|
||||
<path class="cls-1" d="M28.36,19.07s.05,.03,.08,.05c-.03-.02-.05-.03-.08-.05Z"/>
|
||||
<path class="cls-1" d="M30.8,21.92s.02,.05,.03,.07c0-.02-.02-.05-.03-.07Z"/>
|
||||
<path class="cls-1" d="M31.14,24.74c0,.06-.02,.11-.03,.17,0-.06,.02-.11,.03-.17Z"/>
|
||||
<path class="cls-1" d="M27.27,18.57s.1,.04,.15,.05c-.05-.02-.1-.04-.15-.05Z"/>
|
||||
<path class="cls-1" d="M30.98,25.55s0,.04-.01,.05c0-.02,0-.04,.01-.05Z"/>
|
||||
<polygon class="cls-1" points="30.34 27.01 30.34 27.01 30.34 27.01 30.34 27.01"/>
|
||||
<path class="cls-1" d="M30.2,24c0-2.6-2.12-4.72-4.72-4.72s-4.72,2.12-4.72,4.72,2.12,4.72,4.72,4.72,4.72-2.12,4.72-4.72Z"/>
|
||||
<path class="cls-1" d="M31.09,22.92s0,.05,.01,.08c0-.03,0-.05-.01-.08Z"/>
|
||||
<path class="cls-1" d="M30.35,21.02s.01,.02,.02,.03c0-.01-.01-.02-.02-.03Z"/>
|
||||
<path class="cls-1" d="M28.87,19.4s.03,.02,.05,.04c-.02-.01-.03-.02-.05-.04Z"/>
|
||||
<path class="cls-1" d="M27.83,18.79s.08,.04,.12,.06c-.04-.02-.08-.04-.12-.06Z"/>
|
||||
<path class="cls-1" d="M29.33,19.79s.01,.01,.02,.02c0,0-.01-.01-.02-.02Z"/>
|
||||
<polygon class="cls-1" points="29.76 20.22 29.76 20.22 29.76 20.22 29.76 20.22"/>
|
||||
<path class="cls-5" d="M33.65,5.79c.32,.14,.64,.3,.95,.46-.31-.16-.63-.31-.95-.46Z"/>
|
||||
<path class="cls-5" d="M25.48,4.02c.61,0,1.21,.04,1.81,.09-.6-.05-1.2-.09-1.81-.09Z"/>
|
||||
<path class="cls-5" d="M27.74,4.16c.58,.07,1.16,.15,1.72,.26-.56-.11-1.14-.2-1.72-.26Z"/>
|
||||
<path class="cls-5" d="M29.65,4.47c.5,.11,.99,.24,1.47,.38-.48-.14-.97-.27-1.47-.38Z"/>
|
||||
<path class="cls-5" d="M31.66,5.01c.46,.15,.91,.31,1.35,.5-.44-.18-.89-.35-1.35-.5Z"/>
|
||||
<path class="cls-5" d="M16.28,6.28c.37-.19,.74-.37,1.13-.54-.38,.17-.76,.35-1.13,.54Z"/>
|
||||
<path class="cls-5" d="M13.55,8.02c.08-.06,.16-.12,.24-.18-.08,.06-.16,.12-.24,.18Z"/>
|
||||
<path class="cls-5" d="M23.57,4.12c.63-.06,1.27-.1,1.91-.1-.65,0-1.28,.04-1.91,.1Z"/>
|
||||
<path class="cls-5" d="M15,7.03c.18-.11,.36-.23,.55-.33-.19,.11-.37,.22-.55,.33Z"/>
|
||||
<path class="cls-5" d="M21.67,4.4c.57-.11,1.14-.2,1.72-.26-.58,.06-1.15,.15-1.72,.26Z"/>
|
||||
<path class="cls-5" d="M19.81,4.85c.5-.15,1.01-.28,1.53-.39-.52,.11-1.02,.24-1.53,.39Z"/>
|
||||
<path class="cls-5" d="M18.01,5.48c.44-.18,.88-.34,1.33-.49-.45,.15-.89,.31-1.33,.49Z"/>
|
||||
<path class="cls-5" d="M35.3,6.62c.24,.14,.48,.29,.72,.44-.24-.15-.47-.3-.72-.44Z"/>
|
||||
<path class="cls-5" d="M14.06,11.3l1.66,.29,.83,.14,.83,.13,1.65,.25c.55,.08,1.11,.15,1.66,.22l.83,.11c.27,.03,.55,.06,.82,.09l1.65,.19,.21,.03,.2,.02,.41,.04,.83,.09c.55,.06,1.1,.12,1.65,.17l1.65,.15c.28,.03,.55,.04,.82,.07l.82,.06,.82,.06,.41,.03,.41,.03,1.64,.09,.41,.03h.41s.82,.05,.82,.05l.82,.03h.41s.41,.02,.41,.02c1.21,.03,2.43,.03,3.64,.03-3.31-4.93-8.94-8.18-15.31-8.18-5.11,0-9.74,2.09-13.08,5.46h0s1.66,.31,1.66,.31Z"/>
|
||||
<path class="cls-5" d="M12.08,9.24s.05-.05,.08-.07c-.03,.02-.05,.05-.08,.07Z"/>
|
||||
<path class="cls-5" d="M37.25,7.9c.14,.1,.28,.21,.42,.31-.14-.11-.28-.21-.42-.31Z"/>
|
||||
<path class="cls-5" d="M38.51,8.9s.02,.02,.03,.03c-.01,0-.02-.02-.03-.03Z"/>
|
||||
<path class="cls-5" d="M40.26,10.62s.05,.06,.08,.09c-.03-.03-.05-.06-.08-.09Z"/>
|
||||
<path class="cls-6" d="M43.46,15.41s0,0,0,0c0,0,0,0,0,0Z"/>
|
||||
<path class="cls-6" d="M8.52,13.53s.04-.07,.06-.1c-.02,.03-.04,.07-.06,.1Z"/>
|
||||
<path class="cls-6" d="M7.65,15.08s.04-.07,.05-.11c-.02,.04-.04,.07-.05,.11Z"/>
|
||||
<path class="cls-6" d="M11.1,17.54c.32,.07,.63,.13,.95,.19s.63,.12,.95,.18c2.55,.48,5.1,.91,7.66,1.27,.49,.07,.99,.13,1.48,.19,.23-.17,.48-.32,.74-.46,0,0,0,0,0,0,.25-.13,.52-.24,.79-.33,0,0,.02,0,.03-.01,.26-.08,.52-.15,.79-.2,.05,0,.1-.02,.15-.02,.27-.04,.55-.07,.83-.07,.21,0,.41,.01,.61,.03,.06,0,.11,.02,.17,.03,.15,.02,.29,.04,.43,.07,.06,.01,.11,.03,.17,.04,.14,.03,.28,.07,.41,.11,.05,.02,.1,.04,.15,.05,.14,.05,.28,.1,.41,.16,.04,.02,.08,.04,.12,.06,.14,.07,.28,.14,.42,.22,.03,.02,.05,.03,.08,.05,.15,.09,.29,.18,.42,.28,.02,.01,.03,.02,.05,.04,.15,.11,.29,.23,.42,.35,0,0,.01,.01,.02,.02,.14,.13,.28,.27,.41,.42h0c.79,.07,1.59,.15,2.38,.21,1.27,.1,2.55,.18,3.82,.25,2.55,.14,5.09,.24,7.62,.28,.02,0,.04,0,.06,0-.43-2.65-1.42-5.11-2.85-7.26-1.21,0-2.42,0-3.64-.03h-.41s-.41-.02-.41-.02l-.82-.03-.82-.03h-.41s-.41-.04-.41-.04l-1.64-.09-.41-.03-.41-.03-.82-.06-.82-.06c-.27-.02-.55-.04-.82-.07l-1.65-.15c-.55-.05-1.1-.11-1.65-.17l-.83-.09-.41-.04-.2-.02-.21-.03-1.65-.19c-.27-.03-.55-.06-.82-.09l-.83-.11c-.55-.07-1.1-.14-1.66-.22l-1.65-.25-.83-.13-.83-.14-1.66-.29-1.66-.31h0c-1.69,1.7-3.04,3.73-3.96,5.97,.25,.06,.51,.12,.76,.17,.63,.14,1.27,.28,1.9,.41Z"/>
|
||||
<path class="cls-6" d="M44.2,17.19s0,0,0,0c0,0,0,0,0,0Z"/>
|
||||
<path class="cls-6" d="M9.54,12.03s.02-.03,.04-.05c-.01,.02-.02,.03-.04,.05Z"/>
|
||||
<path class="cls-7" d="M6.27,18.71s0-.03,.01-.04c0,.01,0,.03-.01,.04Z"/>
|
||||
<path class="cls-7" d="M19.8,24.63c-.02-.21-.04-.42-.04-.63s.02-.44,.04-.65c0-.06,.02-.13,.03-.19,.02-.15,.05-.3,.08-.45,.02-.07,.03-.13,.05-.2,.04-.15,.09-.29,.14-.44,.02-.05,.04-.11,.06-.16,.07-.17,.15-.34,.23-.51,0-.02,.02-.03,.02-.05,.21-.39,.46-.75,.74-1.09,0,0,0,0,0,0,.14-.16,.29-.32,.45-.46,0,0,.02-.01,.02-.02,.16-.15,.33-.28,.5-.41-.49-.07-.99-.12-1.48-.19-2.56-.36-5.11-.78-7.66-1.27-.32-.06-.63-.12-.95-.18s-.63-.12-.95-.19c-.63-.13-1.27-.27-1.9-.41-.25-.06-.51-.12-.76-.17-.56,1.36-.95,2.81-1.17,4.32,.41,.13,.83,.25,1.24,.37,3.76,1.08,7.52,2.06,11.29,2.98Z"/>
|
||||
<path class="cls-7" d="M45.41,23.95c0,.55-.03,1.08-.07,1.62,.04-.53,.07-1.07,.07-1.62Z"/>
|
||||
<path class="cls-7" d="M45.26,26.22c-.03,.3-.07,.6-.12,.9,.05-.3,.09-.6,.12-.9Z"/>
|
||||
<path class="cls-7" d="M45,27.93c-.04,.21-.09,.43-.14,.64,.05-.21,.1-.42,.14-.64Z"/>
|
||||
<path class="cls-7" d="M45.33,22.34c.04,.53,.08,1.07,.08,1.61,0-.54-.03-1.08-.08-1.61Z"/>
|
||||
<path class="cls-7" d="M35.96,20.68c-1.27-.08-2.55-.16-3.82-.25-.79-.06-1.59-.14-2.38-.21h0c.22,.25,.42,.51,.59,.8,0,.01,.01,.02,.02,.03,.17,.28,.31,.56,.43,.87,0,.02,.02,.05,.03,.07,.11,.3,.2,.61,.27,.93,0,.03,0,.05,.01,.08,.06,.33,.09,.66,.09,1.01,0,.25-.02,.5-.05,.74,0,.06-.02,.11-.03,.17-.03,.22-.08,.43-.14,.64,0,.02,0,.04-.01,.05-.15,.5-.36,.97-.63,1.4,0,0,0,0,0,0,2.02,.41,4.04,.81,6.05,1.16,2.24,.4,4.48,.76,6.72,1.09,.51-1.69,.79-3.47,.79-5.31,0-1.02-.1-2.01-.26-2.99-.02,0-.04,0-.06,0-2.54-.04-5.08-.14-7.62-.28Z"/>
|
||||
<path class="cls-3" d="M5.55,23.95c0-.56,.04-1.11,.08-1.65-.05,.54-.08,1.09-.08,1.65Z"/>
|
||||
<path class="cls-3" d="M44.61,29.5c-.11,.38-.23,.75-.36,1.12,.13-.37,.25-.74,.36-1.12Z"/>
|
||||
<path class="cls-3" d="M43.94,31.43c-.07,.17-.14,.34-.21,.51,.07-.17,.14-.34,.21-.51Z"/>
|
||||
<path class="cls-3" d="M5.62,25.53c-.04-.52-.07-1.04-.07-1.58,0,.53,.03,1.06,.07,1.58Z"/>
|
||||
<polygon class="cls-3" points="5.8 27.02 5.8 27.02 5.8 27.02 5.8 27.02"/>
|
||||
<path class="cls-3" d="M22,32.52c4.76,1.48,9.53,2.82,14.3,4.03,.71,.18,1.41,.35,2.11,.52,2.17-2.15,3.8-4.83,4.69-7.8-2.24-.33-4.48-.69-6.72-1.09-2.02-.36-4.03-.75-6.05-1.16,0,0,0,0,0,0-.37,.6-.85,1.12-1.41,1.55-.02,.02-.04,.03-.06,.05-.17,.13-.35,.24-.53,.35-.02,0-.03,.02-.05,.03-.2,.11-.41,.22-.63,.31-.01,0-.03,0-.04,.01-.19,.08-.38,.14-.58,.2-.06,.02-.12,.03-.18,.05-.16,.04-.33,.07-.49,.1-.07,.01-.13,.02-.2,.03-.23,.03-.45,.05-.69,.05-.35,0-.69-.04-1.02-.1-.03,0-.05,0-.08-.01-.32-.06-.62-.15-.91-.26-.04-.01-.08-.03-.11-.04-.29-.11-.56-.25-.82-.41-.04-.02-.08-.04-.11-.07-.26-.16-.5-.34-.72-.54-.03-.03-.06-.06-.09-.08-.22-.21-.43-.43-.62-.67-.02-.03-.04-.05-.06-.08-.19-.25-.36-.52-.51-.8,0-.02-.02-.03-.02-.05-.31-.6-.52-1.27-.59-1.97-3.77-.92-7.53-1.91-11.29-2.98-.41-.12-.83-.25-1.24-.37-.13,.88-.22,1.76-.22,2.67,0,1.25,.14,2.48,.38,3.67,.11,.04,.22,.08,.34,.12,4.73,1.72,9.47,3.31,14.24,4.77Z"/>
|
||||
<polygon class="cls-3" points="5.82 20.84 5.82 20.84 5.82 20.84 5.82 20.84"/>
|
||||
<path class="cls-3" d="M42.28,34.64c-.04,.06-.08,.13-.12,.19,.04-.06,.08-.13,.12-.19Z"/>
|
||||
<polygon class="cls-3" points="40.09 37.47 40.09 37.47 40.09 37.47 40.09 37.47"/>
|
||||
<path class="cls-4" d="M7.98,33.45c-.07-.12-.13-.25-.2-.37,.06,.12,.13,.25,.2,.37Z"/>
|
||||
<polygon class="cls-4" points="5.8 27.02 5.8 27.02 5.8 27.02 5.8 27.02"/>
|
||||
<path class="cls-4" d="M27.7,42.72c.31-.33,.67-.56,1.14-.65,3.74-.69,7.04-2.48,9.59-5.01-.7-.17-1.41-.34-2.11-.52-4.77-1.21-9.54-2.55-14.3-4.03-4.76-1.46-9.51-3.06-14.24-4.77-.11-.04-.22-.08-.34-.12,.67,3.32,2.24,6.33,4.46,8.76,1.1,.48,2.19,.97,3.3,1.43,4.16,1.75,8.33,3.39,12.51,4.91Z"/>
|
||||
<path class="cls-4" d="M6.03,28.22s-.02-.09-.03-.13c0,.04,.02,.09,.03,.13Z"/>
|
||||
<polygon class="cls-4" points="29.64 43.43 29.64 43.43 29.64 43.43 29.64 43.43"/>
|
||||
<path class="cls-4" d="M39.03,38.54s0,0-.01,0c0,0,0,0,.01,0Z"/>
|
||||
<polygon class="cls-4" points="40.09 37.47 40.09 37.47 40.09 37.47 40.09 37.47"/>
|
||||
<path class="cls-4" d="M6.62,30.34c-.03-.08-.05-.16-.08-.24,.03,.08,.05,.16,.08,.24Z"/>
|
||||
<path class="cls-9" d="M15.19,37.82c-1.1-.46-2.2-.95-3.3-1.43,2.63,2.88,6.17,4.94,10.23,5.69,1.36,.25,1.88,1.68,2.53,3.49,.2,.55,.51,1.43,.8,2,.29-.57,.6-1.43,.8-1.96,.45-1.21,.83-2.24,1.44-2.88-4.18-1.52-8.35-3.16-12.51-4.91Z"/>
|
||||
<path class="cls-9" d="M21.85,43.55s0,0,0,0c0,0,0,0,0,0,.29,.05,.56,.45,.81,1.02-.26-.57-.52-.97-.81-1.02Z"/>
|
||||
<path class="cls-9" d="M29.1,43.55c-.29,.05-.56,.45-.82,1.02,.26-.57,.53-.97,.82-1.02,.18-.03,.36-.09,.54-.12,0,0,0,0,0,0-.18,.04-.35,.09-.54,.12Z"/>
|
||||
<path class="cls-9" d="M16.47,41.71c-.18-.09-.36-.19-.53-.28,.18,.1,.35,.19,.53,.28Z"/>
|
||||
<path class="cls-9" d="M18.21,42.5c-.2-.08-.39-.16-.58-.25,.19,.08,.39,.17,.58,.25Z"/>
|
||||
<path class="cls-9" d="M14.78,40.75c-.14-.09-.28-.18-.42-.27,.14,.09,.28,.18,.42,.27Z"/>
|
||||
<path class="cls-9" d="M13.11,39.56c-.07-.06-.15-.11-.22-.17,.07,.06,.15,.11,.22,.17Z"/>
|
||||
<path class="cls-9" d="M20,43.11c-.19-.05-.37-.12-.55-.18,.18,.06,.36,.13,.55,.18Z"/>
|
||||
<path class="cls-8" d="M40.09,37.47c.76-.82,1.45-1.7,2.06-2.64,.04-.06,.08-.13,.12-.19,.55-.86,1.03-1.77,1.45-2.71,.07-.17,.14-.34,.21-.51,.11-.27,.22-.53,.31-.8,.13-.37,.25-.74,.36-1.12,.09-.31,.16-.62,.24-.94,.05-.21,.1-.42,.14-.64,.05-.27,.1-.54,.15-.81,.05-.3,.09-.59,.12-.9,.02-.21,.05-.43,.07-.64,.04-.53,.07-1.07,.07-1.62s-.04-1.08-.08-1.61c-.14-1.8-.53-3.52-1.12-5.15,0,0,0,0,0,0-.22-.61-.46-1.2-.74-1.77,0,0,0,0,0,0-.82-1.72-1.87-3.3-3.12-4.7-.03-.03-.05-.06-.08-.09-.54-.6-1.11-1.16-1.72-1.69-.01,0-.02-.02-.03-.03-.27-.24-.55-.46-.84-.69-.14-.11-.28-.21-.42-.31-.4-.3-.81-.58-1.24-.84-.24-.15-.47-.3-.72-.44-.23-.13-.47-.26-.7-.38-.31-.16-.63-.31-.95-.46-.21-.09-.42-.19-.63-.28-.44-.18-.89-.35-1.35-.5-.18-.06-.36-.11-.54-.17-.48-.14-.97-.27-1.47-.38-.06-.01-.13-.03-.19-.05-.56-.11-1.14-.2-1.72-.26-.15-.02-.3-.03-.45-.05-.6-.05-1.2-.09-1.81-.09-.65,0-1.28,.04-1.91,.1-.06,0-.12,0-.18,.01-.58,.06-1.15,.15-1.72,.26-.11,.02-.22,.04-.33,.06-.52,.11-1.02,.24-1.53,.39-.16,.05-.31,.09-.47,.14-.45,.15-.89,.31-1.33,.49-.2,.08-.4,.17-.61,.26-.38,.17-.76,.35-1.13,.54-.25,.13-.49,.27-.73,.41-.19,.11-.37,.22-.55,.33-.41,.26-.82,.53-1.21,.81-.08,.06-.16,.12-.24,.18-.48,.36-.95,.74-1.4,1.15-.03,.02-.05,.05-.08,.07-.92,.84-1.76,1.76-2.5,2.75-.01,.02-.02,.03-.04,.05-.34,.45-.65,.91-.95,1.39-.02,.03-.04,.07-.06,.1-.29,.47-.56,.95-.81,1.44-.02,.04-.04,.07-.05,.11-.57,1.14-1.03,2.34-1.37,3.59,0,.01,0,.03-.01,.04-.19,.7-.34,1.41-.45,2.13h0s0,0,0,0c-.08,.48-.14,.97-.18,1.46-.04,.55-.08,1.09-.08,1.65s.03,1.06,.07,1.58c.04,.5,.1,1,.18,1.49,0,0,0,0,0,0,0,0,0,0,0,0,.06,.36,.12,.72,.2,1.07,0,.04,.02,.09,.03,.13,.14,.64,.31,1.26,.51,1.88,.03,.08,.05,.16,.08,.24,.32,.95,.71,1.86,1.16,2.74,.06,.12,.13,.25,.2,.37,1.24,2.29,2.91,4.3,4.91,5.94,.07,.06,.15,.11,.22,.17,.4,.32,.82,.63,1.25,.92,.14,.09,.28,.18,.42,.27,.38,.24,.76,.47,1.15,.68,.18,.1,.35,.19,.53,.28,.38,.19,.76,.37,1.15,.54,.19,.08,.39,.17,.58,.25,.41,.16,.83,.3,1.25,.43,.18,.06,.36,.13,.55,.18,.6,.17,1.22,.32,1.84,.44,0,0,0,0,0,0,.29,.05,.56,.45,.81,1.02,.77,1.7,1.47,4.93,2.81,4.93s2.02-3.23,2.8-4.93c.26-.57,.53-.97,.82-1.02,.18-.03,.36-.09,.54-.12,0,0,0,0,0,0,3.58-.76,6.79-2.48,9.37-4.88,0,0,0,0,.01,0,.37-.34,.72-.7,1.06-1.06,0,0,0,0,0,0,0,0,0,0,0,0Zm-13.83,8.14c-.2,.54-.51,1.39-.8,1.96-.29-.58-.61-1.45-.8-2-.65-1.81-1.17-3.24-2.53-3.49-4.07-.75-7.6-2.81-10.23-5.69-2.22-2.43-3.79-5.44-4.46-8.76-.24-1.19-.38-2.42-.38-3.67,0-.91,.09-1.8,.22-2.67,.22-1.5,.61-2.95,1.17-4.32,.93-2.25,2.28-4.27,3.96-5.97,3.34-3.37,7.97-5.46,13.08-5.46,6.37,0,12,3.25,15.31,8.18,1.44,2.14,2.42,4.61,2.85,7.26,.16,.97,.26,1.97,.26,2.99,0,1.84-.29,3.62-.79,5.31-.9,2.98-2.52,5.66-4.69,7.8-2.55,2.52-5.85,4.32-9.59,5.01-.46,.09-.83,.32-1.14,.65-.6,.64-.99,1.67-1.44,2.88Z"/>
|
||||
<path class="cls-8" d="M30.97,25.61s0-.04,.01-.05c.06-.21,.1-.42,.14-.64,0-.06,.02-.11,.03-.17,.03-.24,.05-.49,.05-.74,0-.34-.04-.68-.09-1.01,0-.03,0-.05-.01-.08-.06-.32-.15-.63-.27-.93,0-.02-.02-.05-.03-.07-.12-.3-.26-.59-.43-.87,0-.01-.01-.02-.02-.03-.17-.28-.37-.55-.59-.8h0c-.13-.15-.26-.28-.41-.42,0,0-.01-.01-.02-.02-.13-.12-.27-.24-.42-.35-.02-.01-.03-.02-.05-.04-.14-.1-.28-.19-.42-.28-.03-.02-.05-.03-.08-.05-.14-.08-.28-.15-.42-.22-.04-.02-.08-.04-.12-.06-.13-.06-.27-.11-.41-.16-.05-.02-.1-.04-.15-.05-.13-.04-.27-.08-.41-.11-.06-.01-.11-.03-.17-.04-.14-.03-.29-.05-.43-.07-.06,0-.11-.02-.17-.03-.2-.02-.4-.03-.61-.03-.28,0-.56,.03-.83,.07-.05,0-.1,.01-.15,.02-.27,.05-.54,.11-.79,.2,0,0-.02,0-.03,.01-.27,.09-.54,.2-.79,.33,0,0,0,0,0,0-.26,.13-.51,.29-.74,.46-.18,.13-.34,.26-.5,.41,0,0-.02,.01-.02,.02-.16,.15-.31,.3-.45,.46,0,0,0,0,0,0-.29,.33-.54,.69-.74,1.09,0,.02-.02,.03-.02,.05-.08,.17-.16,.34-.23,.51-.02,.05-.04,.11-.06,.16-.05,.14-.1,.29-.14,.44-.02,.07-.04,.13-.05,.2-.03,.15-.06,.3-.08,.45,0,.06-.02,.13-.03,.19-.02,.21-.04,.43-.04,.65s.01,.42,.04,.63c.08,.7,.28,1.37,.59,1.97,0,.02,.02,.03,.02,.05,.15,.28,.32,.55,.51,.8,.02,.03,.04,.05,.06,.08,.19,.24,.4,.46,.62,.67,.03,.03,.06,.06,.09,.08,.23,.2,.47,.38,.72,.54,.04,.02,.07,.05,.11,.07,.26,.16,.53,.3,.82,.41,.04,.01,.08,.03,.11,.04,.29,.11,.6,.2,.91,.26,.03,0,.05,0,.08,.01,.33,.06,.67,.1,1.02,.1,.23,0,.46-.02,.69-.05,.07,0,.13-.02,.2-.03,.17-.03,.33-.06,.49-.1,.06-.02,.12-.03,.18-.05,.2-.06,.39-.12,.58-.2,.01,0,.03,0,.04-.01,.22-.09,.42-.19,.63-.31,.02,0,.03-.02,.05-.03,.18-.11,.36-.22,.53-.35,.02-.02,.04-.03,.06-.05,.56-.42,1.04-.95,1.41-1.55,0,0,0,0,0,0,.27-.43,.48-.9,.63-1.4Zm-10.2-1.6c0-2.6,2.12-4.72,4.72-4.72s4.72,2.12,4.72,4.72-2.12,4.72-4.72,4.72-4.72-2.12-4.72-4.72Z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 18 KiB |
143
assets/limited.svg
Normal file
143
assets/limited.svg
Normal file
|
@ -0,0 +1,143 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50.96 50.96">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: none;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #f7a61d;
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: #65aa72;
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
fill: #2f75a6;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
fill: #c24747;
|
||||
}
|
||||
|
||||
.cls-7 {
|
||||
fill: #d67f48;
|
||||
}
|
||||
|
||||
.cls-8 {
|
||||
fill: #dbd175;
|
||||
}
|
||||
|
||||
.cls-9 {
|
||||
fill: #620043;
|
||||
}
|
||||
|
||||
.cls-10 {
|
||||
fill: #795ea0;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path class="cls-3" d="M49.97,24.7c-.29-1.43-1.28-2.64-2.61-3.23-.34-.77-.83-1.48-1.45-2.09-.18-.79-.43-1.62-.76-2.54-.23-.64-.49-1.26-.78-1.86-.86-1.8-1.96-3.46-3.28-4.94l-.05-.06c-.61-.67-1.21-1.27-1.83-1.81-.32-.28-.62-.52-.92-.75-.14-.11-.27-.21-.41-.31-.45-.33-.89-.63-1.33-.9l-.05-.03c-.23-.14-.46-.29-.7-.42-.24-.14-.49-.27-.74-.4-.33-.17-.66-.33-.99-.48l-.12-.06c-.18-.08-.36-.16-.54-.24-.45-.19-.93-.36-1.42-.52-.19-.06-.38-.12-.57-.18-.56-.16-1.06-.29-1.55-.4h-.05s-.1-.04-.15-.05c-.54-.11-1.13-.2-1.81-.28-.16-.02-.32-.03-.47-.05-.72-.07-1.33-.1-1.9-.1-.64,0-1.29,.03-2.01,.1h-.06s-.13,.02-.13,.02c-.56,.06-1.15,.15-1.8,.28l-.11,.02c-.08,.01-.16,.03-.24,.05-.5,.11-1.02,.24-1.6,.41-.17,.05-.33,.1-.49,.15-.45,.15-.91,.31-1.4,.51-.21,.09-.43,.18-.64,.27-.4,.18-.8,.37-1.18,.57-.26,.14-.51,.28-.77,.43-.18,.1-.35,.21-.52,.32l-.05,.03c-.44,.27-.87,.56-1.27,.85l-.19,.14-.07,.05c-.51,.38-1,.78-1.46,1.21l-.08,.07c-.96,.88-1.85,1.85-2.63,2.89h0s-.04,.05-.04,.05c-.36,.48-.69,.97-1,1.46l-.04,.07c-.34,.56-.62,1.05-.88,1.55l-.04,.08c-.62,1.24-1.1,2.51-1.46,3.81-.21,.76-.37,1.51-.49,2.28-.06,.41-.14,.96-.19,1.53-.05,.55-.09,1.14-.09,1.73,0,.49,.02,1.01,.07,1.65,.04,.46,.09,.95,.18,1.53h0s0,.06,0,.06c.05,.36,.12,.73,.2,1.1l.02,.09c.16,.71,.34,1.37,.55,2.02l.03,.08,.05,.17c.33,.98,.74,1.95,1.22,2.88,.07,.13,.14,.26,.21,.39,1.31,2.41,3.05,4.51,5.16,6.23,.05,.04,.1,.08,.15,.12l.08,.06c.44,.35,.88,.67,1.31,.96,.12,.08,.24,.16,.37,.24l.07,.05c.4,.26,.81,.5,1.22,.72,.18,.1,.37,.2,.56,.3,.37,.19,.77,.37,1.21,.56l.15,.07c.15,.07,.3,.13,.46,.19,.38,.15,.78,.29,1.31,.46l.19,.06c.13,.04,.25,.09,.38,.12,.62,.18,1.2,.32,1.77,.43,.05,.07,.14,.21,.25,.48,.1,.22,.21,.5,.35,.89l.2,.54,.19,.54c.19,.52,.42,1.13,.69,1.66,.23,.47,.95,1.89,2.29,1.89s2-1.37,2.25-1.89c.26-.53,.5-1.13,.69-1.65l.18-.49c.07-.2,.15-.4,.22-.59,.15-.39,.26-.67,.36-.89,.13-.28,.22-.42,.27-.49,.07-.01,.13-.03,.2-.05,.06-.02,.13-.03,.19-.05,3.68-.78,7.08-2.55,9.85-5.12,.75-.7,1.45-1.45,2.09-2.24,2.78-.15,4.82-1.49,6.07-2.62,.94-.85,1.6-1.95,1.93-3.17,.36-1.37,.52-2.78,.47-4.19-.03-.79-.12-1.59-.28-2.36Zm-20.77-.7c0,2.05-1.67,3.72-3.72,3.72s-3.72-1.67-3.72-3.72,1.67-3.72,3.72-3.72,3.72,1.67,3.72,3.72Z"/>
|
||||
<g>
|
||||
<path class="cls-1" d="M28.33,28.95s-.03,.02-.05,.03c.02,0,.03-.02,.05-.03Z"/>
|
||||
<path class="cls-1" d="M28.93,28.56s-.04,.03-.06,.05c.02-.02,.04-.03,.06-.05Z"/>
|
||||
<path class="cls-1" d="M27.66,29.29s-.03,0-.04,.01c.01,0,.03,0,.04-.01Z"/>
|
||||
<polygon class="cls-1" points="30.34 27.01 30.34 27.01 30.34 27.01 30.34 27.01"/>
|
||||
<path class="cls-1" d="M31.09,22.92s0,.05,.01,.08c0-.03,0-.05-.01-.08Z"/>
|
||||
<path class="cls-1" d="M31.14,24.74c0,.06-.02,.11-.03,.17,0-.06,.02-.11,.03-.17Z"/>
|
||||
<path class="cls-1" d="M27.04,29.5c-.06,.02-.12,.03-.18,.05,.06-.02,.12-.03,.18-.05Z"/>
|
||||
<path class="cls-1" d="M30.98,25.55s0,.04-.01,.05c0-.02,0-.04,.01-.05Z"/>
|
||||
<path class="cls-1" d="M22.54,28.9s-.08-.04-.11-.07c.04,.02,.07,.05,.11,.07Z"/>
|
||||
<path class="cls-1" d="M21.7,28.29s-.06-.06-.09-.08c.03,.03,.06,.06,.09,.08Z"/>
|
||||
<path class="cls-1" d="M20.99,27.53s-.04-.05-.06-.08c.02,.03,.04,.05,.06,.08Z"/>
|
||||
<path class="cls-1" d="M24.46,29.62s-.05,0-.08-.01c.03,0,.05,0,.08,.01Z"/>
|
||||
<path class="cls-1" d="M23.47,29.35s-.08-.03-.11-.04c.04,.01,.08,.03,.11,.04Z"/>
|
||||
<path class="cls-1" d="M26.36,29.65c-.07,.01-.13,.02-.2,.03,.07,0,.13-.02,.2-.03Z"/>
|
||||
<path class="cls-1" d="M24.5,18.38c.05,0,.1-.02,.15-.02-.05,0-.1,.01-.15,.02Z"/>
|
||||
<path class="cls-1" d="M30.8,21.92s.02,.05,.03,.07c0-.02-.02-.05-.03-.07Z"/>
|
||||
<path class="cls-1" d="M26.69,18.42c.06,.01,.11,.03,.17,.04-.06-.01-.11-.03-.17-.04Z"/>
|
||||
<path class="cls-1" d="M26.09,18.32c.06,0,.11,.02,.17,.03-.06,0-.11-.02-.17-.03Z"/>
|
||||
<path class="cls-1" d="M22.88,18.92s0,0,0,0c0,0,0,0,0,0Z"/>
|
||||
<path class="cls-1" d="M20.41,26.65s-.02-.03-.02-.05c0,.02,.02,.03,.02,.05Z"/>
|
||||
<path class="cls-1" d="M23.67,18.58s.02,0,.03-.01c-.01,0-.02,0-.03,.01Z"/>
|
||||
<polygon class="cls-1" points="29.76 20.22 29.76 20.22 29.76 20.22 29.76 20.22"/>
|
||||
<path class="cls-1" d="M30.35,21.02s.01,.02,.02,.03c0-.01-.01-.02-.02-.03Z"/>
|
||||
<path class="cls-1" d="M29.33,19.79s.01,.01,.02,.02c0,0-.01-.01-.02-.02Z"/>
|
||||
<path class="cls-1" d="M27.27,18.57c.05,.02,.1,.04,.15,.05-.05-.02-.1-.04-.15-.05Z"/>
|
||||
<path class="cls-1" d="M28.36,19.07s.06,.03,.08,.05c-.03-.02-.06-.03-.08-.05Z"/>
|
||||
<path class="cls-1" d="M27.82,18.79s.08,.04,.12,.06c-.04-.02-.08-.04-.12-.06Z"/>
|
||||
<path class="cls-1" d="M28.86,19.4s.03,.03,.05,.04c-.02-.01-.03-.03-.05-.04Z"/>
|
||||
<path class="cls-1" d="M21.61,19.8s.02-.01,.02-.02c0,0-.02,.01-.02,.02Z"/>
|
||||
<circle class="cls-1" cx="25.48" cy="24" r="4.72" transform="translate(-3.52 4.39) rotate(-9.22)"/>
|
||||
<path class="cls-1" d="M21.16,20.26s0,0,0,0c0,0,0,0,0,0Z"/>
|
||||
<path class="cls-1" d="M19.8,23.35c0-.06,.02-.13,.03-.19,0,.06-.02,.13-.03,.19Z"/>
|
||||
<path class="cls-1" d="M20.39,21.4s.02-.03,.02-.05c0,.02-.02,.03-.02,.05Z"/>
|
||||
<path class="cls-1" d="M20.1,22.07c.02-.05,.04-.11,.06-.16-.02,.05-.04,.11-.06,.16Z"/>
|
||||
<path class="cls-1" d="M19.91,22.71c.02-.07,.03-.13,.05-.2-.02,.07-.04,.13-.05,.2Z"/>
|
||||
<path class="cls-6" d="M23.57,4.12c.63-.06,1.27-.1,1.91-.1-.65,0-1.28,.04-1.91,.1Z"/>
|
||||
<path class="cls-6" d="M19.81,4.85c.5-.15,1.01-.28,1.53-.39-.52,.11-1.02,.24-1.53,.39Z"/>
|
||||
<path class="cls-6" d="M31.66,5.01c.46,.15,.91,.31,1.35,.5-.44-.18-.89-.35-1.35-.5Z"/>
|
||||
<path class="cls-6" d="M27.74,4.16c.58,.07,1.16,.15,1.72,.26-.56-.11-1.14-.2-1.72-.26Z"/>
|
||||
<path class="cls-6" d="M29.65,4.47c.5,.11,.99,.24,1.47,.38-.48-.14-.97-.27-1.47-.38Z"/>
|
||||
<path class="cls-6" d="M21.67,4.4c.57-.11,1.14-.2,1.72-.26-.58,.06-1.15,.15-1.72,.26Z"/>
|
||||
<path class="cls-6" d="M18.01,5.48c.44-.18,.88-.34,1.33-.49-.45,.15-.89,.31-1.33,.49Z"/>
|
||||
<path class="cls-6" d="M12.08,9.24s.05-.05,.08-.07c-.03,.02-.05,.05-.08,.07Z"/>
|
||||
<path class="cls-6" d="M13.55,8.02c.08-.06,.16-.12,.24-.18-.08,.06-.16,.12-.24,.18Z"/>
|
||||
<path class="cls-6" d="M16.28,6.28c.37-.19,.74-.37,1.13-.54-.38,.17-.76,.35-1.13,.54Z"/>
|
||||
<path class="cls-6" d="M15,7.03c.18-.11,.36-.23,.55-.33-.19,.11-.37,.22-.55,.33Z"/>
|
||||
<path class="cls-6" d="M25.48,4.02c.61,0,1.21,.04,1.81,.09-.6-.05-1.2-.09-1.81-.09Z"/>
|
||||
<path class="cls-6" d="M33.65,5.79c.32,.14,.64,.3,.95,.46-.31-.16-.63-.31-.95-.46Z"/>
|
||||
<path class="cls-6" d="M38.51,8.9s.02,.02,.03,.03c-.01,0-.02-.02-.03-.03Z"/>
|
||||
<path class="cls-6" d="M14.06,11.3l1.66,.29,.83,.14,.83,.13,1.65,.25c.55,.08,1.11,.15,1.66,.22l.83,.11c.27,.03,.55,.06,.82,.09l1.65,.19,.21,.03,.2,.02,.41,.04,.83,.09c.55,.06,1.1,.12,1.65,.17l1.65,.15c.28,.03,.55,.04,.82,.07l.82,.06,.82,.06,.41,.03,.41,.03,1.64,.09,.41,.03h.41s.82,.05,.82,.05l.82,.03h.41s.41,.02,.41,.02c1.21,.03,2.43,.03,3.64,.03-3.31-4.93-8.94-8.18-15.31-8.18-5.11,0-9.74,2.09-13.08,5.46h0s1.66,.31,1.66,.31Z"/>
|
||||
<path class="cls-6" d="M40.26,10.62s.05,.06,.08,.09c-.03-.03-.05-.06-.08-.09Z"/>
|
||||
<path class="cls-6" d="M35.3,6.62c.24,.14,.48,.29,.72,.44-.24-.15-.47-.3-.72-.44Z"/>
|
||||
<path class="cls-6" d="M37.25,7.9c.14,.1,.28,.21,.42,.31-.14-.11-.28-.21-.42-.31Z"/>
|
||||
<path class="cls-7" d="M9.54,12.03s.02-.03,.04-.05c-.01,.02-.02,.03-.04,.05Z"/>
|
||||
<path class="cls-7" d="M43.46,15.41s0,0,0,0c0,0,0,0,0,0Z"/>
|
||||
<path class="cls-7" d="M44.2,17.19s0,0,0,0c0,0,0,0,0,0Z"/>
|
||||
<path class="cls-7" d="M37.15,13.67h-.41s-.41-.02-.41-.02l-.82-.03-.82-.03h-.41s-.41-.04-.41-.04l-1.64-.09-.41-.03-.41-.03-.82-.06-.82-.06c-.27-.02-.55-.04-.82-.07l-1.65-.15c-.55-.05-1.1-.11-1.65-.17l-.83-.09-.41-.04-.2-.02-.21-.03-1.65-.19c-.27-.03-.55-.06-.82-.09l-.83-.11c-.55-.07-1.1-.14-1.66-.22l-1.65-.25-.83-.13-.83-.14-1.66-.29-1.66-.31h0c-1.69,1.7-3.04,3.73-3.96,5.97,.25,.06,.51,.12,.76,.17,.63,.14,1.27,.28,1.9,.41,.32,.07,.63,.13,.95,.19s.63,.12,.95,.18c2.55,.48,5.1,.91,7.66,1.27,.49,.07,.99,.13,1.48,.19,.23-.17,.48-.32,.74-.45,0,0,0,0,0,0,.25-.13,.51-.24,.79-.33,.01,0,.02,0,.03-.01,.26-.08,.52-.15,.79-.19,.05,0,.1-.02,.15-.02,.27-.04,.55-.07,.83-.07,.21,0,.41,.01,.61,.03,.06,0,.11,.02,.17,.03,.14,.02,.29,.04,.43,.07,.06,.01,.11,.03,.17,.04,.14,.03,.27,.07,.41,.11,.05,.02,.1,.04,.15,.05,.14,.05,.28,.1,.41,.16,.04,.02,.08,.04,.12,.06,.14,.07,.28,.14,.42,.22,.03,.02,.06,.03,.08,.05,.14,.09,.29,.18,.42,.28,.02,.01,.03,.03,.05,.04,.15,.11,.29,.23,.42,.35,0,0,.01,.01,.02,.02,.14,.13,.28,.27,.41,.41h0c.79,.07,1.59,.15,2.38,.21,1.27,.1,2.55,.18,3.82,.25,.3,.02,.59,.03,.89,.04,1.03-1.37,2.66-2.24,4.46-2.24,.65,0,1.27,.12,1.85,.33-.53-1.83-1.33-3.55-2.38-5.1-1.21,0-2.42,0-3.64-.03Z"/>
|
||||
<path class="cls-7" d="M8.52,13.53s.04-.07,.06-.1c-.02,.03-.04,.07-.06,.1Z"/>
|
||||
<path class="cls-7" d="M7.65,15.08s.04-.07,.05-.11c-.02,.04-.04,.07-.05,.11Z"/>
|
||||
<path class="cls-8" d="M6.27,18.71s0-.03,.01-.04c0,.01,0,.03-.01,.04Z"/>
|
||||
<path class="cls-8" d="M19.8,24.63c-.02-.21-.04-.42-.04-.63s.02-.44,.04-.65c0-.06,.02-.13,.03-.19,.02-.15,.05-.3,.08-.45,.02-.07,.03-.13,.05-.2,.04-.15,.09-.29,.14-.44,.02-.05,.04-.11,.06-.16,.07-.17,.15-.34,.23-.51,0-.02,.02-.03,.02-.05,.21-.39,.46-.75,.74-1.09,0,0,0,0,0,0,.14-.16,.29-.32,.45-.46,0,0,.02-.01,.02-.02,.16-.15,.33-.28,.5-.41-.49-.07-.99-.12-1.48-.19-2.56-.36-5.11-.78-7.66-1.27-.32-.06-.63-.12-.95-.18s-.63-.12-.95-.19c-.63-.13-1.27-.27-1.9-.41-.25-.06-.51-.12-.76-.17-.56,1.36-.95,2.81-1.17,4.32,.41,.13,.83,.25,1.24,.37,3.76,1.08,7.52,2.06,11.29,2.98Z"/>
|
||||
<path class="cls-8" d="M38.31,22.96c.13-.35,.32-.67,.55-.95-.24,.28-.42,.6-.55,.95Z"/>
|
||||
<path class="cls-8" d="M32.14,20.43c-.79-.06-1.59-.14-2.38-.21h0c.22,.25,.42,.51,.59,.8,0,.01,.01,.02,.02,.03,.17,.28,.31,.56,.43,.87,0,.02,.02,.05,.03,.07,.11,.3,.2,.61,.27,.93,0,.03,0,.05,.01,.08,.06,.33,.09,.66,.09,1.01,0,.25-.02,.5-.05,.74,0,.06-.02,.11-.03,.17-.03,.22-.08,.43-.14,.64,0,.02,0,.04-.01,.05-.15,.5-.36,.97-.63,1.4,0,0,0,0,0,0,1.01,.21,2.02,.39,3.03,.58,0-.16,0-.32,0-.48,.02-.69,.09-1.38,.21-2.06,.24-1.36,1.21-2.42,2.46-2.81,.19-.55,.47-1.06,.81-1.51-.3-.02-.59-.02-.89-.04-1.27-.08-2.55-.16-3.82-.25Z"/>
|
||||
<path class="cls-8" d="M41.31,21.62c-.86,0-1.63,.44-2.07,1.13h4.13c-.44-.69-1.21-1.13-2.07-1.13Z"/>
|
||||
<path class="cls-8" d="M38.31,22.96c-.07,.17-.12,.36-.15,.54h0c.03-.19,.08-.37,.15-.54Z"/>
|
||||
<path class="cls-4" d="M5.55,23.95c0-.56,.04-1.11,.08-1.65-.05,.54-.08,1.09-.08,1.65Z"/>
|
||||
<polygon class="cls-4" points="5.8 27.02 5.8 27.02 5.8 27.02 5.8 27.02"/>
|
||||
<polygon class="cls-4" points="5.82 20.84 5.82 20.84 5.82 20.84 5.82 20.84"/>
|
||||
<path class="cls-4" d="M30.34,27.01c-.37,.6-.85,1.12-1.41,1.55-.02,.02-.04,.03-.06,.05-.17,.13-.35,.24-.53,.35-.02,0-.03,.02-.05,.03-.2,.11-.41,.22-.63,.31-.01,0-.03,0-.04,.01-.19,.08-.38,.14-.58,.2-.06,.02-.12,.03-.18,.05-.16,.04-.33,.07-.49,.1-.07,.01-.13,.02-.2,.03-.23,.03-.45,.05-.69,.05-.35,0-.69-.04-1.02-.1-.03,0-.05,0-.08-.01-.32-.06-.62-.15-.91-.26-.04-.01-.08-.03-.11-.04-.29-.11-.56-.25-.82-.41-.04-.02-.08-.04-.11-.07-.26-.16-.5-.34-.72-.54-.03-.03-.06-.06-.09-.08-.22-.21-.43-.43-.62-.67-.02-.03-.04-.05-.06-.08-.19-.25-.36-.52-.51-.8,0-.02-.02-.03-.02-.05-.31-.6-.52-1.27-.59-1.97-3.77-.92-7.53-1.91-11.29-2.98-.41-.12-.83-.25-1.24-.37-.13,.88-.22,1.76-.22,2.67,0,1.25,.14,2.48,.38,3.67,.11,.04,.22,.08,.34,.12,4.73,1.72,9.47,3.31,14.24,4.77,4.76,1.48,9.53,2.82,14.3,4.03,.71,.18,1.41,.35,2.11,.52,.39-.38,.76-.78,1.11-1.2-1.87-.39-3.27-1.34-4.17-2.16-.81-.74-1.37-1.71-1.63-2.81-.25-1.09-.37-2.2-.37-3.31-1.01-.2-2.02-.38-3.03-.58,0,0,0,0,0,0Z"/>
|
||||
<path class="cls-4" d="M5.62,25.53c-.04-.52-.07-1.04-.07-1.58,0,.53,.03,1.06,.07,1.58Z"/>
|
||||
<path class="cls-5" d="M7.97,33.45c-.07-.12-.13-.25-.2-.37,.06,.12,.13,.25,.2,.37Z"/>
|
||||
<path class="cls-5" d="M39.03,38.54s0,0,0,0c0,0,0,0,0,0Z"/>
|
||||
<path class="cls-5" d="M6.03,28.22s-.02-.09-.03-.13c0,.04,.02,.09,.03,.13Z"/>
|
||||
<path class="cls-5" d="M6.62,30.34c-.03-.08-.05-.16-.08-.24,.03,.08,.05,.16,.08,.24Z"/>
|
||||
<polygon class="cls-5" points="5.8 27.02 5.8 27.02 5.8 27.02 5.8 27.02"/>
|
||||
<path class="cls-5" d="M22,32.52c-4.76-1.46-9.51-3.06-14.24-4.77-.11-.04-.22-.08-.34-.12,.67,3.32,2.24,6.33,4.46,8.76,1.1,.48,2.19,.97,3.3,1.43,4.16,1.75,8.33,3.39,12.51,4.91,.31-.33,.67-.56,1.14-.65,3.74-.69,7.04-2.48,9.59-5.01-.7-.17-1.41-.34-2.11-.52-4.77-1.21-9.54-2.55-14.3-4.03Z"/>
|
||||
<path class="cls-10" d="M27.89,45.53c-.13,.35-.26,.71-.4,1.08,.14-.37,.27-.73,.4-1.08Z"/>
|
||||
<path class="cls-10" d="M28.28,44.57c-.13,.28-.26,.61-.39,.96,.13-.35,.26-.67,.39-.96Z"/>
|
||||
<path class="cls-10" d="M29.1,43.55c.18-.03,.36-.09,.54-.12h0c-.18,.04-.35,.09-.54,.12Z"/>
|
||||
<path class="cls-10" d="M13.11,39.56c-.07-.06-.15-.11-.22-.17,.07,.06,.15,.11,.22,.17Z"/>
|
||||
<path class="cls-10" d="M14.78,40.75c-.14-.09-.28-.18-.42-.27,.14,.09,.28,.18,.42,.27Z"/>
|
||||
<path class="cls-10" d="M16.47,41.71c-.18-.09-.35-.19-.53-.28,.18,.1,.35,.19,.53,.28Z"/>
|
||||
<path class="cls-10" d="M11.89,36.39c2.63,2.88,6.17,4.94,10.23,5.69,1.36,.25,1.88,1.68,2.53,3.49,.2,.55,.51,1.43,.8,2,.29-.57,.6-1.43,.8-1.96,.45-1.21,.83-2.24,1.44-2.88-4.18-1.52-8.35-3.16-12.51-4.91-1.1-.46-2.2-.95-3.3-1.43Z"/>
|
||||
<path class="cls-10" d="M20,43.11c-.18-.05-.36-.12-.55-.18,.18,.06,.36,.12,.55,.18Z"/>
|
||||
<path class="cls-10" d="M18.21,42.5c-.2-.08-.39-.16-.58-.25,.19,.08,.39,.17,.58,.25Z"/>
|
||||
<path class="cls-10" d="M23.05,45.53c-.13-.35-.25-.67-.38-.96,.13,.28,.25,.61,.38,.96Z"/>
|
||||
<path class="cls-10" d="M23.44,46.61c-.13-.37-.26-.73-.39-1.08,.13,.35,.26,.71,.39,1.08Z"/>
|
||||
<path class="cls-10" d="M27.49,46.61c-.2,.55-.42,1.09-.65,1.56,.23-.47,.45-1.01,.65-1.56Z"/>
|
||||
<path class="cls-10" d="M24.08,48.17c-.23-.47-.45-1.01-.65-1.56,.2,.55,.41,1.09,.65,1.56Z"/>
|
||||
<path class="cls-9" d="M21.61,19.8c-.16,.15-.31,.3-.45,.46,0,0,0,0,0,0-.29,.33-.54,.69-.74,1.09,0,.02-.02,.03-.02,.05-.08,.17-.16,.34-.23,.51-.02,.05-.04,.11-.06,.16-.05,.14-.1,.29-.14,.44-.02,.07-.04,.13-.05,.2-.03,.15-.06,.3-.08,.45,0,.06-.02,.13-.03,.19-.02,.21-.04,.43-.04,.65s.01,.42,.04,.63c.08,.7,.28,1.37,.59,1.97,0,.02,.02,.03,.02,.05,.15,.28,.32,.55,.51,.8,.02,.03,.04,.05,.06,.08,.19,.24,.4,.46,.62,.67,.03,.03,.06,.06,.09,.08,.23,.2,.47,.38,.72,.54,.04,.02,.07,.05,.11,.07,.26,.16,.53,.3,.82,.41,.04,.01,.08,.03,.11,.04,.29,.11,.6,.2,.91,.26,.03,0,.05,0,.08,.01,.33,.06,.67,.1,1.02,.1,.23,0,.46-.02,.69-.05,.07,0,.13-.02,.2-.03,.17-.03,.33-.06,.49-.1,.06-.02,.12-.03,.18-.05,.2-.06,.39-.12,.58-.2,.01,0,.03,0,.04-.01,.22-.09,.42-.19,.63-.31,.02,0,.03-.02,.05-.03,.18-.11,.36-.22,.53-.35,.02-.02,.04-.03,.06-.05,.56-.42,1.04-.95,1.41-1.55,0,0,0,0,0,0,.27-.43,.48-.9,.63-1.4,0-.02,0-.04,.01-.05,.06-.21,.1-.42,.14-.64,0-.06,.02-.11,.03-.17,.03-.24,.05-.49,.05-.74,0-.34-.04-.68-.09-1.01,0-.03,0-.05-.01-.08-.06-.32-.15-.63-.27-.93,0-.02-.02-.05-.03-.07-.12-.3-.26-.59-.43-.87,0-.01-.01-.02-.02-.03-.17-.28-.37-.55-.59-.8h0c-.13-.15-.26-.28-.41-.41,0,0-.01-.01-.02-.02-.13-.12-.27-.24-.42-.35-.02-.01-.03-.03-.05-.04-.14-.1-.28-.19-.42-.28-.03-.02-.06-.03-.08-.05-.14-.08-.27-.15-.42-.22-.04-.02-.08-.04-.12-.06-.13-.06-.27-.11-.41-.16-.05-.02-.1-.04-.15-.05-.13-.04-.27-.08-.41-.11-.06-.01-.11-.03-.17-.04-.14-.03-.28-.05-.43-.07-.06,0-.11-.02-.17-.03-.2-.02-.4-.03-.61-.03-.28,0-.56,.03-.83,.07-.05,0-.1,.01-.15,.02-.27,.05-.54,.11-.79,.19-.01,0-.02,0-.03,.01-.27,.09-.53,.2-.79,.33,0,0,0,0,0,0-.26,.13-.51,.29-.74,.45-.18,.13-.34,.26-.5,.41,0,0-.02,.01-.02,.02Zm8.59,4.2c0,2.6-2.12,4.72-4.72,4.72s-4.72-2.12-4.72-4.72,2.12-4.72,4.72-4.72,4.72,2.12,4.72,4.72Z"/>
|
||||
<path class="cls-2" d="M45.48,23.5h-.06c-.29-2.03-2.01-3.59-4.11-3.59s-3.83,1.56-4.11,3.59h-.08c-1.05,0-1.94,.76-2.12,1.79-.1,.56-.17,1.19-.19,1.86-.04,1.33,.12,2.49,.33,3.42,.18,.8,.59,1.52,1.2,2.07,.91,.83,2.48,1.89,4.66,1.97,.09,0,.18,0,.27,0,2.31,0,4.01-1.14,4.96-2,.59-.53,1-1.22,1.21-1.99,.24-.92,.44-2.1,.39-3.48-.03-.72-.12-1.38-.24-1.96-.2-.99-1.09-1.69-2.1-1.69Zm-7.18-.54c.13-.35,.32-.67,.55-.95,.59-.7,1.47-1.14,2.45-1.14,1.57,0,2.88,1.13,3.15,2.63h-6.31c.03-.19,.08-.37,.15-.54Zm3.2,9.07c-.48,0-.87-.12-1.14-.23-.17-.07-.26-.25-.23-.43l.45-2.5c-.4-.3-.66-.77-.66-1.3,0-.9,.73-1.62,1.62-1.62s1.62,.73,1.62,1.62c0,.54-.26,1.01-.66,1.3l.45,2.5c.03,.18-.06,.36-.23,.43-.29,.12-.7,.24-1.21,.23Z"/>
|
||||
<path class="cls-9" d="M48.99,24.91c-.26-1.27-1.2-2.27-2.4-2.66-.32-.92-.88-1.72-1.59-2.34-.19-.93-.47-1.83-.79-2.71,0,0,0,0,0,0-.22-.61-.46-1.2-.74-1.77,0,0,0,0,0,0-.82-1.72-1.87-3.3-3.12-4.7-.03-.03-.05-.06-.08-.09-.54-.6-1.11-1.16-1.72-1.69-.01,0-.02-.02-.03-.03-.27-.24-.55-.46-.84-.69-.14-.11-.28-.21-.42-.31-.4-.3-.81-.58-1.24-.84-.24-.15-.47-.3-.72-.44-.23-.13-.47-.26-.7-.38-.31-.16-.63-.31-.95-.46-.21-.09-.42-.19-.63-.28-.44-.18-.89-.35-1.35-.5-.18-.06-.36-.11-.54-.17-.48-.14-.97-.27-1.47-.38-.06-.01-.13-.03-.19-.05-.56-.11-1.14-.2-1.72-.26-.15-.02-.3-.03-.45-.05-.6-.05-1.2-.09-1.81-.09-.65,0-1.28,.04-1.91,.1-.06,0-.12,0-.18,.01-.58,.06-1.15,.15-1.72,.26-.11,.02-.22,.04-.33,.06-.52,.11-1.02,.24-1.53,.39-.16,.05-.31,.09-.47,.14-.45,.15-.89,.31-1.33,.49-.2,.08-.4,.17-.61,.26-.38,.17-.76,.35-1.13,.54-.25,.13-.49,.27-.73,.41-.19,.11-.37,.22-.55,.33-.41,.26-.82,.53-1.21,.81-.08,.06-.16,.12-.24,.18-.48,.36-.95,.74-1.4,1.15-.03,.02-.05,.05-.08,.07-.92,.84-1.76,1.76-2.5,2.75-.01,.02-.02,.03-.04,.05-.34,.45-.65,.91-.95,1.39-.02,.03-.04,.07-.06,.1-.29,.47-.56,.95-.81,1.44-.02,.04-.04,.07-.05,.11-.57,1.14-1.03,2.34-1.37,3.59,0,.01,0,.03-.01,.04-.19,.7-.34,1.41-.45,2.13h0s0,0,0,0c-.08,.48-.14,.97-.18,1.46-.04,.55-.08,1.09-.08,1.65s.03,1.06,.07,1.58c.04,.5,.1,1,.18,1.49,0,0,0,0,0,0,0,0,0,0,0,0,.06,.36,.12,.72,.2,1.07,0,.04,.02,.09,.03,.13,.14,.64,.31,1.27,.51,1.88,.03,.08,.05,.16,.08,.24,.32,.95,.71,1.86,1.16,2.74,.06,.12,.13,.25,.2,.37,1.24,2.29,2.91,4.3,4.92,5.94,.07,.06,.15,.11,.22,.17,.41,.32,.82,.63,1.25,.92,.14,.09,.28,.18,.42,.27,.38,.24,.76,.47,1.16,.69,.18,.1,.35,.19,.53,.28,.38,.19,.76,.37,1.15,.54,.19,.08,.39,.17,.58,.25,.41,.16,.83,.3,1.25,.44,.18,.06,.36,.12,.55,.18,.61,.17,1.22,.32,1.85,.44,.29,.05,.56,.45,.81,1.02,.13,.28,.25,.61,.38,.96s.26,.71,.39,1.08c.2,.55,.41,1.09,.65,1.56,.39,.78,.84,1.34,1.4,1.34s.97-.56,1.36-1.34c.23-.47,.45-1.01,.65-1.56,.14-.37,.27-.73,.4-1.08s.26-.67,.39-.96c.26-.57,.53-.97,.82-1.02,.18-.03,.36-.09,.54-.12h0c3.58-.76,6.79-2.48,9.38-4.88,0,0,0,0,0,0,.82-.76,1.58-1.6,2.26-2.49,2.72,0,4.71-1.29,5.9-2.37,.79-.72,1.36-1.65,1.63-2.68,.34-1.27,.48-2.59,.43-3.9-.03-.74-.12-1.48-.26-2.2Zm-10.56,12.16c-2.55,2.52-5.85,4.32-9.59,5.01-.46,.09-.83,.32-1.14,.65-.6,.64-.99,1.67-1.44,2.88-.2,.54-.51,1.39-.8,1.96-.29-.58-.61-1.45-.8-2-.65-1.81-1.17-3.24-2.53-3.49-4.07-.75-7.6-2.81-10.23-5.69-2.22-2.43-3.79-5.44-4.46-8.76-.24-1.19-.38-2.42-.38-3.67,0-.91,.09-1.8,.22-2.67,.22-1.5,.61-2.95,1.17-4.32,.93-2.25,2.28-4.27,3.96-5.97,3.34-3.37,7.97-5.46,13.08-5.46,6.37,0,12,3.25,15.31,8.18,1.04,1.55,1.84,3.27,2.38,5.1-.58-.21-1.21-.33-1.85-.33-1.8,0-3.43,.88-4.46,2.24-.34,.45-.62,.96-.81,1.51-1.25,.39-2.22,1.46-2.46,2.81-.12,.68-.19,1.37-.21,2.06,0,.16,0,.32,0,.48,0,1.11,.12,2.22,.37,3.31,.25,1.09,.81,2.06,1.63,2.81,.9,.82,2.3,1.77,4.17,2.16-.35,.42-.73,.82-1.11,1.2Zm9.01-6.43c-.2,.77-.62,1.45-1.21,1.99-.95,.86-2.65,2-4.96,2-.09,0-.18,0-.27,0-2.18-.08-3.75-1.14-4.66-1.97-.6-.55-1.01-1.27-1.2-2.07-.21-.93-.38-2.09-.33-3.42,.02-.67,.09-1.3,.19-1.86,.18-1.03,1.07-1.79,2.12-1.79h.08c.29-2.03,2.01-3.59,4.11-3.59s3.83,1.56,4.11,3.59h.06c1.01,0,1.9,.7,2.1,1.69,.12,.58,.21,1.24,.24,1.96,.05,1.38-.15,2.56-.39,3.48Z"/>
|
||||
<path class="cls-9" d="M44.46,23.5c-.27-1.5-1.58-2.63-3.15-2.63-.98,0-1.86,.44-2.45,1.14-.24,.28-.42,.6-.55,.95-.07,.17-.12,.36-.15,.54h6.31Zm-3.15-1.88c.86,0,1.63,.44,2.07,1.13h-4.13c.44-.69,1.21-1.13,2.07-1.13Z"/>
|
||||
<path class="cls-9" d="M42.94,31.36l-.45-2.5c.4-.3,.66-.77,.66-1.3,0-.9-.73-1.62-1.62-1.62s-1.62,.73-1.62,1.62c0,.54,.26,1.01,.66,1.3l-.45,2.5c-.03,.18,.06,.36,.23,.43,.28,.11,.67,.23,1.14,.23,.51,0,.92-.11,1.21-.23,.17-.07,.26-.25,.23-.43Z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 20 KiB |
72
assets/support.svg
Normal file
72
assets/support.svg
Normal file
|
@ -0,0 +1,72 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50.96 50.96">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: none;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: #65aa72;
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: #2f75a6;
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
fill: #c24747;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
fill: #d67f48;
|
||||
}
|
||||
|
||||
.cls-7 {
|
||||
fill: #dbd175;
|
||||
}
|
||||
|
||||
.cls-8 {
|
||||
fill: #e0b9d9;
|
||||
}
|
||||
|
||||
.cls-9 {
|
||||
fill: #620043;
|
||||
}
|
||||
|
||||
.cls-10 {
|
||||
fill: #795ea0;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path class="cls-2" d="M50.12,28.45l-.52-.95c.26-.41,.41-.9,.41-1.4v-4.83c0-1.45-1.18-2.64-2.64-2.64h-1.67c-.15-.58-.34-1.16-.56-1.78-.23-.64-.49-1.26-.78-1.86-.86-1.8-1.96-3.46-3.28-4.94l-.05-.06c-.61-.67-1.21-1.27-1.83-1.81-.32-.28-.62-.52-.92-.75-.14-.11-.27-.21-.41-.31-.45-.33-.89-.63-1.32-.9l-.05-.03c-.23-.14-.46-.29-.7-.42-.24-.14-.49-.27-.74-.4-.33-.17-.66-.33-.99-.48l-.12-.06c-.18-.08-.36-.16-.54-.24-.45-.19-.93-.36-1.42-.52-.19-.06-.38-.12-.57-.18-.56-.16-1.06-.29-1.55-.4h-.05s-.1-.04-.15-.05c-.54-.11-1.13-.2-1.81-.28-.16-.02-.32-.03-.47-.05-.72-.07-1.33-.1-1.9-.1-.64,0-1.29,.03-2.01,.1h-.06s-.13,.02-.13,.02c-.56,.06-1.15,.15-1.8,.28l-.11,.02c-.08,.01-.16,.03-.24,.05-.5,.11-1.02,.24-1.6,.41-.17,.05-.33,.1-.49,.15-.45,.15-.91,.31-1.4,.51-.21,.09-.43,.18-.64,.27-.4,.18-.8,.37-1.18,.57-.26,.14-.51,.28-.77,.43-.18,.1-.35,.21-.52,.32l-.05,.03c-.44,.27-.87,.56-1.27,.85l-.19,.14-.07,.05c-.51,.38-1,.78-1.46,1.21l-.08,.07c-.96,.88-1.85,1.85-2.63,2.89h0s-.04,.05-.04,.05c-.36,.48-.69,.97-1,1.46l-.04,.07c-.34,.56-.62,1.05-.88,1.55l-.04,.08c-.62,1.24-1.1,2.51-1.46,3.81h0s-.01,.05-.01,.05c-.19,.71-.35,1.46-.47,2.23-.06,.41-.14,.96-.19,1.53-.05,.55-.09,1.14-.09,1.73,0,.49,.02,1.01,.07,1.65,.04,.47,.1,.97,.19,1.56,.06,.38,.13,.76,.21,1.13l.02,.1c.16,.71,.34,1.37,.54,2.02l.03,.08,.06,.17c.33,.98,.74,1.95,1.22,2.87,.07,.13,.14,.26,.21,.39,1.31,2.41,3.05,4.51,5.16,6.23,.05,.04,.1,.08,.15,.12l.08,.06c.44,.35,.88,.67,1.31,.96,.12,.08,.25,.16,.37,.24l.07,.04c.4,.26,.81,.5,1.21,.72,.18,.1,.37,.2,.56,.3,.37,.19,.76,.37,1.21,.56l.15,.07c.15,.07,.31,.13,.46,.19,.37,.15,.78,.29,1.31,.46l.19,.06c.13,.04,.25,.09,.38,.12,.62,.18,1.2,.32,1.77,.43,.02,.04,.06,.09,.1,.16,.05,.1,.1,.2,.16,.32,.18,.39,.36,.9,.55,1.43,.72,2.01,1.47,4.09,3.18,4.09,.24,0,.47-.05,.7-.14,1.18-.5,1.79-2.14,2.43-3.89l.02-.07c.17-.47,.37-1.01,.56-1.42,.05-.12,.11-.22,.16-.32,.05-.08,.08-.14,.11-.17,.07-.01,.13-.03,.2-.05,.06-.02,.13-.03,.19-.05h.03s0,0,0,0c3.66-.79,7.06-2.55,9.82-5.12,.4-.37,.77-.74,1.13-1.13,.8-.86,1.52-1.79,2.16-2.77l.13-.2c.46-.72,.88-1.47,1.24-2.22,1.03-.37,1.75-1.34,1.75-2.48v-.53l1.72,.88c.23,.12,.5,.19,.78,.19,.47,0,.92-.19,1.24-.52,.53-.55,.64-1.39,.27-2.05Zm-.99,1.35c-.22,.23-.58,.28-.85,.14l-3.17-1.62v2.17c0,.84-.64,1.53-1.46,1.62-.4,.88-.86,1.73-1.37,2.54-.04,.06-.08,.13-.12,.19-.61,.94-1.3,1.82-2.06,2.64,0,0,0,0,0,0h0c-.34,.37-.7,.72-1.06,1.07,0,0,0,0-.01,0-2.58,2.4-5.8,4.12-9.37,4.88,0,0,0,0,0,0-.18,.04-.35,.09-.54,.12-.22,.04-.43,.28-.63,.63-.07,.12-.13,.25-.2,.39-.2,.43-.39,.95-.59,1.49-.53,1.45-1.11,3.04-1.9,3.38-.1,.04-.2,.06-.31,.06-1.34,0-2.05-3.23-2.81-4.93-.06-.14-.13-.27-.19-.39-.2-.35-.4-.59-.62-.63,0,0,0,0,0,0-.63-.12-1.24-.27-1.84-.44-.19-.05-.37-.12-.55-.18-.42-.13-.84-.27-1.25-.43-.2-.08-.39-.16-.58-.25-.39-.17-.78-.34-1.15-.54-.18-.09-.36-.19-.53-.28-.39-.22-.78-.44-1.15-.68-.14-.09-.28-.18-.42-.27-.43-.29-.84-.6-1.25-.92-.07-.06-.15-.11-.22-.17-2-1.63-3.67-3.65-4.91-5.94-.07-.12-.13-.25-.2-.37-.45-.88-.84-1.79-1.16-2.74-.03-.08-.05-.16-.08-.24-.2-.61-.37-1.24-.51-1.88,0-.04-.02-.09-.03-.13-.07-.35-.14-.71-.2-1.07,0,0,0,0,0,0,0,0,0,0,0,0-.08-.49-.14-.99-.18-1.49-.04-.52-.07-1.04-.07-1.58,0-.56,.04-1.11,.08-1.65,.04-.49,.11-.98,.18-1.46,0,0,0,0,0,0h0c.11-.72,.26-1.43,.45-2.13,0-.01,0-.03,.01-.04,.34-1.25,.8-2.45,1.37-3.59,.02-.04,.04-.07,.05-.11,.25-.49,.52-.97,.81-1.44,.02-.03,.04-.07,.06-.1,.3-.48,.62-.94,.95-1.39,.01-.02,.02-.03,.04-.05,.75-.99,1.59-1.91,2.5-2.75,.03-.02,.05-.05,.08-.07,.45-.4,.91-.79,1.4-1.15,.08-.06,.16-.12,.24-.18,.39-.29,.8-.56,1.21-.81,.18-.11,.36-.23,.55-.33,.24-.14,.48-.28,.73-.41,.37-.19,.74-.37,1.13-.54,.2-.09,.4-.18,.61-.26,.44-.18,.88-.34,1.33-.49,.16-.05,.31-.1,.47-.14,.5-.15,1.01-.28,1.53-.39,.11-.02,.22-.04,.33-.06,.57-.11,1.14-.2,1.72-.26,.06,0,.12,0,.18-.01,.63-.06,1.27-.1,1.91-.1,.61,0,1.21,.04,1.81,.09,.15,.01,.3,.03,.45,.05,.58,.07,1.16,.15,1.72,.26,.06,.01,.13,.03,.19,.05,.5,.11,.99,.24,1.47,.38,.18,.05,.36,.11,.54,.17,.46,.15,.91,.31,1.35,.5,.21,.09,.42,.18,.63,.28,.32,.14,.64,.3,.95,.46,.24,.12,.47,.25,.7,.38,.24,.14,.48,.29,.72,.44,.42,.27,.84,.55,1.24,.84,.14,.1,.28,.21,.42,.31,.29,.22,.57,.45,.84,.69,.01,0,.02,.02,.03,.03,.61,.53,1.18,1.1,1.72,1.69,.03,.03,.05,.06,.08,.09,1.25,1.4,2.3,2.98,3.12,4.7,0,0,0,0,0,0,.27,.58,.52,1.17,.74,1.77,0,0,0,0,0,0,.29,.79,.53,1.6,.72,2.44h2.45c.9,0,1.64,.74,1.64,1.64v4.83c0,.51-.24,.97-.62,1.27l.86,1.57c.16,.28,.11,.63-.11,.86Z"/>
|
||||
<path class="cls-1" d="M25.48,20.28c-2.05,0-3.72,1.67-3.72,3.72s1.67,3.72,3.72,3.72,3.72-1.67,3.72-3.72-1.67-3.72-3.72-3.72Z"/>
|
||||
<path class="cls-2" d="M25.48,19.28c-2.6,0-4.72,2.12-4.72,4.72s2.12,4.72,4.72,4.72,4.72-2.12,4.72-4.72-2.12-4.72-4.72-4.72Zm0,8.44c-2.05,0-3.72-1.67-3.72-3.72s1.67-3.72,3.72-3.72,3.72,1.67,3.72,3.72-1.67,3.72-3.72,3.72Z"/>
|
||||
<polygon class="cls-2" points="30.34 27.01 30.34 27.01 30.34 27.01 30.34 27.01"/>
|
||||
<path class="cls-5" d="M14.06,11.3l1.66,.29,.83,.14,.83,.13,1.65,.25c.55,.08,1.11,.15,1.66,.22l.83,.11c.27,.03,.55,.06,.82,.09l1.65,.19,.21,.03,.2,.02,.41,.04,.83,.09c.55,.06,1.1,.12,1.65,.17l1.65,.15c.28,.03,.55,.04,.82,.07l.82,.06,.82,.06,.41,.03,.41,.03,1.64,.09,.41,.03h.41s.82,.05,.82,.05l.82,.03h.41s.41,.02,.41,.02c1.21,.03,2.43,.03,3.64,.03-3.31-4.93-8.94-8.18-15.31-8.18-5.11,0-9.74,2.09-13.08,5.46h0s1.66,.31,1.66,.31Z"/>
|
||||
<path class="cls-6" d="M11.1,17.54c.32,.07,.63,.13,.95,.19s.63,.12,.95,.18c2.55,.48,5.1,.91,7.66,1.27,.49,.07,.99,.13,1.48,.19,.23-.17,.48-.32,.74-.46,0,0,0,0,0,0,.25-.13,.52-.24,.79-.33,0,0,.02,0,.03-.01,.26-.08,.52-.15,.79-.2,.05,0,.1-.02,.15-.02,.27-.04,.55-.07,.83-.07,.21,0,.41,.01,.61,.03,.06,0,.11,.02,.17,.03,.15,.02,.29,.04,.43,.07,.06,.01,.11,.03,.17,.04,.14,.03,.28,.07,.41,.11,.05,.02,.1,.04,.15,.05,.14,.05,.28,.1,.41,.16,.04,.02,.08,.04,.12,.06,.14,.07,.28,.14,.42,.22,.03,.02,.05,.03,.08,.05,.15,.09,.29,.18,.42,.28,.02,.01,.03,.02,.05,.04,.15,.11,.29,.23,.42,.35,0,0,.01,.01,.02,.02,.14,.13,.28,.27,.41,.42h0c.79,.07,1.59,.15,2.38,.21,1.19,.09,2.39,.17,3.58,.24,.24-.61,.83-1.04,1.52-1.04h6.13c-.52-2.14-1.39-4.14-2.59-5.92-1.21,0-2.42,0-3.64-.03h-.41s-.41-.02-.41-.02l-.82-.03-.82-.03h-.41s-.41-.04-.41-.04l-1.64-.09-.41-.03-.41-.03-.82-.06-.82-.06c-.27-.02-.55-.04-.82-.07l-1.65-.15c-.55-.05-1.1-.11-1.65-.17l-.83-.09-.41-.04-.2-.02-.21-.03-1.65-.19c-.27-.03-.55-.06-.82-.09l-.83-.11c-.55-.07-1.1-.14-1.66-.22l-1.65-.25-.83-.13-.83-.14-1.66-.29-1.66-.31h0c-1.69,1.7-3.04,3.73-3.96,5.97,.25,.06,.51,.12,.76,.17,.63,.14,1.27,.28,1.9,.41Z"/>
|
||||
<path class="cls-7" d="M19.8,24.63c-.02-.21-.04-.42-.04-.63s.02-.44,.04-.65c0-.06,.02-.13,.03-.19,.02-.15,.05-.3,.08-.45,.02-.07,.03-.13,.05-.2,.04-.15,.09-.29,.14-.44,.02-.05,.04-.11,.06-.16,.07-.17,.15-.34,.23-.51,0-.02,.02-.03,.02-.05,.21-.39,.46-.75,.74-1.09,0,0,0,0,0,0,.14-.16,.29-.32,.45-.46,0,0,.02-.01,.02-.02,.16-.15,.33-.28,.5-.41-.49-.07-.99-.12-1.48-.19-2.56-.36-5.11-.78-7.66-1.27-.32-.06-.63-.12-.95-.18s-.63-.12-.95-.19c-.63-.13-1.27-.27-1.9-.41-.25-.06-.51-.12-.76-.17-.56,1.36-.95,2.81-1.17,4.32,.41,.13,.83,.25,1.24,.37,3.76,1.08,7.52,2.06,11.29,2.98Z"/>
|
||||
<path class="cls-7" d="M29.76,20.22c.22,.25,.42,.51,.59,.8,0,.01,.01,.02,.02,.03,.17,.28,.31,.56,.43,.87,0,.02,.02,.05,.03,.07,.11,.3,.2,.61,.27,.93,0,.03,0,.05,.01,.08,.06,.33,.09,.66,.09,1.01,0,.25-.02,.5-.05,.74,0,.06-.02,.11-.03,.17-.03,.22-.08,.43-.14,.64,0,.02,0,.04-.01,.05-.15,.5-.36,.97-.63,1.4,0,0,0,0,0,0,.46,.09,.91,.17,1.37,.26v-1.62c0-.9,.74-1.64,1.64-1.64h2.26v-2.75c0-.21,.04-.41,.12-.6-1.19-.07-2.39-.15-3.58-.24-.79-.06-1.59-.14-2.38-.21Z"/>
|
||||
<polygon class="cls-3" points="5.8 27.02 5.8 27.02 5.8 27.02 5.8 27.02"/>
|
||||
<path class="cls-3" d="M32.43,34.33c-.1,.05-.22,.08-.33,.08-.2,0-.38-.08-.52-.22-.22-.23-.27-.58-.11-.86l.86-1.57c-.39-.3-.62-.76-.62-1.27v-3.22c-.46-.09-.91-.17-1.37-.26,0,0,0,0,0,0-.37,.6-.85,1.12-1.41,1.55-.02,.02-.04,.03-.06,.05-.17,.13-.35,.24-.53,.35-.02,0-.03,.02-.05,.03-.2,.11-.41,.22-.63,.31-.01,0-.03,0-.04,.01-.19,.08-.38,.14-.58,.2-.06,.02-.12,.03-.18,.05-.16,.04-.33,.07-.49,.1-.07,.01-.13,.02-.2,.03-.23,.03-.45,.05-.69,.05-.35,0-.69-.04-1.02-.1-.03,0-.05,0-.08-.01-.32-.06-.62-.15-.91-.26-.04-.01-.08-.03-.11-.04-.29-.11-.56-.25-.82-.41-.04-.02-.08-.04-.11-.07-.26-.16-.5-.34-.72-.54-.03-.03-.06-.06-.09-.08-.22-.21-.43-.43-.62-.67-.02-.03-.04-.05-.06-.08-.19-.25-.36-.52-.51-.8,0-.02-.02-.03-.02-.05-.31-.6-.52-1.27-.59-1.97-3.77-.92-7.53-1.91-11.29-2.98-.41-.12-.83-.25-1.24-.37-.13,.88-.22,1.76-.22,2.67,0,1.25,.14,2.48,.38,3.67,.11,.04,.22,.08,.34,.12,4.73,1.72,9.47,3.31,14.24,4.77,4.76,1.48,9.53,2.82,14.3,4.03,.71,.18,1.41,.35,2.11,.52,1.45-1.43,2.65-3.1,3.56-4.94h-5.25l-4.3,2.2Z"/>
|
||||
<polygon class="cls-3" points="40.09 37.47 40.09 37.47 40.09 37.47 40.09 37.47"/>
|
||||
<polygon class="cls-4" points="29.64 43.43 29.64 43.43 29.64 43.43 29.64 43.43"/>
|
||||
<polygon class="cls-4" points="40.09 37.47 40.09 37.47 40.09 37.47 40.09 37.47"/>
|
||||
<polygon class="cls-4" points="5.8 27.02 5.8 27.02 5.8 27.02 5.8 27.02"/>
|
||||
<path class="cls-4" d="M22,32.52c-4.76-1.46-9.51-3.06-14.24-4.77-.11-.04-.22-.08-.34-.12,.67,3.32,2.24,6.33,4.46,8.76,1.1,.48,2.19,.97,3.3,1.43,4.16,1.75,8.33,3.39,12.51,4.91,.31-.33,.67-.56,1.14-.65,3.74-.69,7.04-2.48,9.59-5.01-.7-.17-1.41-.34-2.11-.52-4.77-1.21-9.54-2.55-14.3-4.03Z"/>
|
||||
<path class="cls-10" d="M29.1,43.55c-.22,.04-.43,.28-.63,.63,.2-.35,.4-.59,.63-.63,.18-.03,.36-.09,.54-.12,0,0,0,0,0,0-.18,.04-.35,.09-.54,.12Z"/>
|
||||
<path class="cls-10" d="M21.85,43.55s0,0,0,0c0,0,0,0,0,0,.22,.04,.42,.28,.62,.63-.2-.35-.4-.59-.62-.63Z"/>
|
||||
<path class="cls-10" d="M11.89,36.39c2.63,2.88,6.17,4.94,10.23,5.69,1.36,.25,1.88,1.68,2.53,3.49,.2,.55,.51,1.43,.8,2,.29-.57,.6-1.43,.8-1.96,.45-1.21,.83-2.24,1.44-2.88-4.18-1.52-8.35-3.16-12.51-4.91-1.1-.46-2.2-.95-3.3-1.43Z"/>
|
||||
<path class="cls-9" d="M30.97,25.61s0-.04,.01-.05c.06-.21,.1-.42,.14-.64,0-.06,.02-.11,.03-.17,.03-.24,.05-.49,.05-.74,0-.34-.04-.68-.09-1.01,0-.03,0-.05-.01-.08-.06-.32-.15-.63-.27-.93,0-.02-.02-.05-.03-.07-.12-.3-.26-.59-.43-.87,0-.01-.01-.02-.02-.03-.17-.28-.37-.55-.59-.8h0c-.13-.15-.26-.28-.41-.42,0,0-.01-.01-.02-.02-.13-.12-.27-.24-.42-.35-.02-.01-.03-.02-.05-.04-.14-.1-.28-.19-.42-.28-.03-.02-.05-.03-.08-.05-.14-.08-.28-.15-.42-.22-.04-.02-.08-.04-.12-.06-.13-.06-.27-.11-.41-.16-.05-.02-.1-.04-.15-.05-.13-.04-.27-.08-.41-.11-.06-.01-.11-.03-.17-.04-.14-.03-.29-.05-.43-.07-.06,0-.11-.02-.17-.03-.2-.02-.4-.03-.61-.03-.28,0-.56,.03-.83,.07-.05,0-.1,.01-.15,.02-.27,.05-.54,.11-.79,.2,0,0-.02,0-.03,.01-.27,.09-.54,.2-.79,.33,0,0,0,0,0,0-.26,.13-.51,.29-.74,.46-.18,.13-.34,.26-.5,.41,0,0-.02,.01-.02,.02-.16,.15-.31,.3-.45,.46,0,0,0,0,0,0-.29,.33-.54,.69-.74,1.09,0,.02-.02,.03-.02,.05-.08,.17-.16,.34-.23,.51-.02,.05-.04,.11-.06,.16-.05,.14-.1,.29-.14,.44-.02,.07-.04,.13-.05,.2-.03,.15-.06,.3-.08,.45,0,.06-.02,.13-.03,.19-.02,.21-.04,.43-.04,.65s.01,.42,.04,.63c.08,.7,.28,1.37,.59,1.97,0,.02,.02,.03,.02,.05,.15,.28,.32,.55,.51,.8,.02,.03,.04,.05,.06,.08,.19,.24,.4,.46,.62,.67,.03,.03,.06,.06,.09,.08,.23,.2,.47,.38,.72,.54,.04,.02,.07,.05,.11,.07,.26,.16,.53,.3,.82,.41,.04,.01,.08,.03,.11,.04,.29,.11,.6,.2,.91,.26,.03,0,.05,0,.08,.01,.33,.06,.67,.1,1.02,.1,.23,0,.46-.02,.69-.05,.07,0,.13-.02,.2-.03,.17-.03,.33-.06,.49-.1,.06-.02,.12-.03,.18-.05,.2-.06,.39-.12,.58-.2,.01,0,.03,0,.04-.01,.22-.09,.42-.19,.63-.31,.02,0,.03-.02,.05-.03,.18-.11,.36-.22,.53-.35,.02-.02,.04-.03,.06-.05,.56-.42,1.04-.95,1.41-1.55,0,0,0,0,0,0,.27-.43,.48-.9,.63-1.4Zm-5.49,3.12c-2.6,0-4.72-2.12-4.72-4.72s2.12-4.72,4.72-4.72,4.72,2.12,4.72,4.72-2.12,4.72-4.72,4.72Z"/>
|
||||
<path class="cls-8" d="M47.37,20.63h-10.13c-.35,0-.64,.29-.64,.64v3.25h6.86c.63,0,1.14,.51,1.14,1.14v1.29l3.34,1.71-.97-1.77,.58-.18c.27-.09,.45-.32,.45-.59v-4.83c0-.35-.29-.64-.64-.64Z"/>
|
||||
<path class="cls-2" d="M43.47,25.01h-10.13c-.35,0-.64,.29-.64,.64v4.84c0,.27,.18,.51,.45,.59l.58,.18-.29,.53-.68,1.24,3.62-1.85,.11-.05h6.97c.35,0,.64-.29,.64-.64v-4.84c0-.35-.29-.64-.64-.64Zm-7.78,3.83c-.18,.15-.39,.23-.62,.23s-.44-.08-.62-.23-.27-.37-.27-.66,.09-.51,.27-.66c.18-.15,.39-.23,.62-.23s.44,.08,.62,.23c.18,.15,.27,.37,.27,.66s-.09,.51-.27,.66Zm3.33,0c-.18,.15-.39,.23-.62,.23s-.44-.08-.62-.23-.27-.37-.27-.66,.09-.51,.27-.66c.18-.15,.39-.23,.62-.23s.44,.08,.62,.23c.18,.15,.27,.37,.27,.66s-.09,.51-.27,.66Zm3.33,0c-.18,.15-.39,.23-.62,.23s-.44-.08-.62-.23-.27-.37-.27-.66,.09-.51,.27-.66c.18-.15,.39-.23,.62-.23s.44,.08,.62,.23c.18,.15,.27,.37,.27,.66s-.09,.51-.27,.66Z"/>
|
||||
<path class="cls-9" d="M48.39,27.37c.39-.3,.62-.76,.62-1.27v-4.83c0-.9-.73-1.64-1.64-1.64h-2.45c-.19-.84-.43-1.65-.72-2.44,0,0,0,0,0,0-.22-.61-.46-1.2-.74-1.77,0,0,0,0,0,0-.82-1.72-1.87-3.3-3.12-4.7-.03-.03-.05-.06-.08-.09-.54-.6-1.11-1.16-1.72-1.69-.01,0-.02-.02-.03-.03-.27-.24-.55-.46-.84-.69-.14-.11-.28-.21-.42-.31-.4-.3-.81-.58-1.24-.84-.24-.15-.47-.3-.72-.44-.23-.13-.47-.26-.7-.38-.31-.16-.63-.31-.95-.46-.21-.09-.42-.19-.63-.28-.44-.18-.89-.35-1.35-.5-.18-.06-.36-.11-.54-.17-.48-.14-.97-.27-1.47-.38-.06-.01-.13-.03-.19-.05-.56-.11-1.14-.2-1.72-.26-.15-.02-.3-.03-.45-.05-.6-.05-1.2-.09-1.81-.09-.65,0-1.28,.04-1.91,.1-.06,0-.12,0-.18,.01-.58,.06-1.15,.15-1.72,.26-.11,.02-.22,.04-.33,.06-.52,.11-1.02,.24-1.53,.39-.16,.05-.31,.09-.47,.14-.45,.15-.89,.31-1.33,.49-.2,.08-.4,.17-.61,.26-.38,.17-.76,.35-1.13,.54-.25,.13-.49,.27-.73,.41-.19,.11-.37,.22-.55,.33-.41,.26-.82,.53-1.21,.81-.08,.06-.16,.12-.24,.18-.48,.36-.95,.74-1.4,1.15-.03,.02-.05,.05-.08,.07-.92,.84-1.76,1.76-2.5,2.75-.01,.02-.02,.03-.04,.05-.34,.45-.65,.91-.95,1.39-.02,.03-.04,.07-.06,.1-.29,.47-.56,.95-.81,1.44-.02,.04-.04,.07-.05,.11-.57,1.14-1.03,2.34-1.37,3.59,0,.01,0,.03-.01,.04-.19,.7-.34,1.41-.45,2.13h0s0,0,0,0c-.08,.48-.14,.97-.18,1.46-.05,.54-.08,1.09-.08,1.65s.03,1.06,.07,1.58c.04,.5,.1,1,.18,1.49,0,0,0,0,0,0,0,0,0,0,0,0,.06,.36,.12,.72,.2,1.07,0,.04,.02,.09,.03,.13,.14,.64,.31,1.26,.51,1.88,.03,.08,.05,.16,.08,.24,.32,.95,.71,1.86,1.16,2.74,.06,.12,.13,.25,.2,.37,1.24,2.29,2.91,4.3,4.91,5.94,.07,.06,.15,.11,.22,.17,.4,.32,.82,.63,1.25,.92,.14,.09,.28,.18,.42,.27,.38,.24,.76,.47,1.15,.68,.18,.1,.35,.19,.53,.28,.38,.19,.76,.37,1.15,.54,.19,.08,.39,.17,.58,.25,.41,.16,.83,.3,1.25,.43,.18,.06,.36,.13,.55,.18,.6,.17,1.22,.32,1.84,.44,0,0,0,0,0,0,.22,.04,.42,.28,.62,.63,.07,.12,.13,.25,.19,.39,.77,1.7,1.47,4.93,2.81,4.93,.11,0,.21-.02,.31-.06,.79-.34,1.37-1.93,1.9-3.38,.2-.54,.39-1.06,.59-1.49,.07-.14,.13-.27,.2-.39,.2-.35,.4-.59,.63-.63,.18-.03,.36-.09,.54-.12,0,0,0,0,0,0,3.58-.76,6.79-2.48,9.37-4.88,0,0,0,0,.01,0,.37-.34,.72-.7,1.06-1.06,0,0,0,0,0,0,0,0,0,0,0,0,.76-.82,1.45-1.7,2.06-2.64,.04-.06,.08-.13,.12-.19,.52-.81,.98-1.65,1.37-2.54,.82-.09,1.46-.78,1.46-1.62v-2.17l3.17,1.62c.27,.14,.63,.08,.85-.14,.22-.23,.27-.58,.11-.86l-.86-1.57Zm-9.97,9.69c-2.55,2.52-5.85,4.32-9.59,5.01-.46,.09-.83,.32-1.14,.65-.6,.64-.99,1.67-1.44,2.88-.2,.54-.51,1.39-.8,1.96-.29-.58-.61-1.45-.8-2-.65-1.81-1.17-3.24-2.53-3.49-4.07-.75-7.6-2.81-10.23-5.69-2.22-2.43-3.79-5.44-4.46-8.76-.24-1.19-.38-2.42-.38-3.67,0-.91,.09-1.8,.22-2.67,.22-1.5,.61-2.95,1.17-4.32,.93-2.25,2.28-4.27,3.96-5.97,3.34-3.37,7.97-5.46,13.08-5.46,6.37,0,12,3.25,15.31,8.18,1.19,1.78,2.07,3.78,2.59,5.92h-6.13c-.69,0-1.28,.43-1.52,1.04-.07,.19-.12,.39-.12,.6v2.75h-2.26c-.9,0-1.64,.73-1.64,1.64v4.84c0,.51,.24,.97,.62,1.27l-.86,1.57c-.16,.28-.11,.63,.11,.86,.14,.14,.32,.22,.52,.22,.11,0,.23-.03,.33-.08l4.3-2.2h5.25c-.91,1.84-2.11,3.51-3.56,4.94Zm5.69-6.58c0,.35-.29,.64-.64,.64h-6.97l-.11,.05-3.62,1.85,.68-1.24,.29-.53-.58-.18c-.27-.09-.45-.32-.45-.59v-4.84c0-.35,.29-.64,.64-.64h10.13c.35,0,.64,.29,.64,.64v4.84Zm3.9-4.39c0,.27-.18,.51-.45,.59l-.58,.18,.97,1.77-3.34-1.71v-1.29c0-.63-.51-1.14-1.14-1.14h-6.86v-3.25c0-.35,.29-.64,.64-.64h10.13c.35,0,.64,.29,.64,.64v4.83Z"/>
|
||||
<path class="cls-9" d="M5.55,23.95c0-.56,.03-1.11,.08-1.65-.04,.55-.08,1.09-.08,1.65Z"/>
|
||||
<path class="cls-9" d="M41.74,27.3c-.23,0-.44,.08-.62,.23-.18,.15-.27,.37-.27,.66s.09,.51,.27,.66,.39,.23,.62,.23,.44-.08,.62-.23,.27-.37,.27-.66-.09-.51-.27-.66c-.18-.15-.39-.23-.62-.23Z"/>
|
||||
<path class="cls-9" d="M35.07,27.3c-.23,0-.44,.08-.62,.23-.18,.15-.27,.37-.27,.66s.09,.51,.27,.66,.39,.23,.62,.23,.44-.08,.62-.23,.27-.37,.27-.66-.09-.51-.27-.66c-.18-.15-.39-.23-.62-.23Z"/>
|
||||
<path class="cls-9" d="M38.4,27.3c-.23,0-.44,.08-.62,.23-.18,.15-.27,.37-.27,.66s.09,.51,.27,.66,.39,.23,.62,.23,.44-.08,.62-.23,.27-.37,.27-.66-.09-.51-.27-.66c-.18-.15-.39-.23-.62-.23Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 16 KiB |
16
data/orgas.json
Normal file
16
data/orgas.json
Normal file
|
@ -0,0 +1,16 @@
|
|||
[
|
||||
{
|
||||
"country": "Deutschland",
|
||||
"state": "Niedersachsen",
|
||||
"name": "Einhornhöhle",
|
||||
"email": "pferd@mail.gay",
|
||||
"website": "http://localhost",
|
||||
"location": {
|
||||
"address": "Einhornhöhle, August Großkopf-Weg, Herzberg",
|
||||
"lon": 51.635,
|
||||
"lat": 10.40416
|
||||
},
|
||||
"activities": "Weltherrschaft übernehmen",
|
||||
"identities": "nur Einhörner"
|
||||
}
|
||||
]
|
244
index.html
Normal file
244
index.html
Normal file
|
@ -0,0 +1,244 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="theme-color" content="#faedfa" />
|
||||
<title>tra-la-card</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<script type="module" src="./main.ts"></script>
|
||||
</head>
|
||||
<body class="bg-ql-pink">
|
||||
<!-- MOBILE HEADER START -->
|
||||
<header class="lg:hidden border-b border-b-ql-purple">
|
||||
<section class="p-4 pt-6 text-neutral-700 flex flex-row">
|
||||
<div class="flex-grow">
|
||||
<h1 class="font-semibold text-lg mb-1">tra-la-card</h1>
|
||||
<p>Ein Dienst vom <i>Queer Lexikon e.V.</i></p>
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
class="p-2"
|
||||
id="open-menu-btn"
|
||||
aria-expanded="false"
|
||||
aria-controls="menu"
|
||||
>
|
||||
<span class="sr-only">Menü öffnen</span>
|
||||
<!-- Heroicon: menu -->
|
||||
<svg
|
||||
class="w-6 h-6"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
viewBox="0 0 24 24"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M4 6h16M4 12h16M4 18h16"
|
||||
></path>
|
||||
</svg>
|
||||
</button>
|
||||
</section>
|
||||
<section class="p-4 bg-ql-purple text-white" aria-labelledby="search-for-city-header-mobile">
|
||||
<h2 id="search-for-city-header-mobile" class="sr-only">
|
||||
Suche deine Stadt oder Postleitzahl
|
||||
</h2>
|
||||
<form method="get" class="flex flex-row">
|
||||
<div class="max-w-xl">
|
||||
<label for="city-mobile" class="block text-sm font-medium"
|
||||
>Name deiner Stadt / Postleitzahl</label
|
||||
>
|
||||
<div class="flex flex-row mt-1 space-x-4">
|
||||
<input
|
||||
type="text"
|
||||
name="city"
|
||||
id="city-mobile"
|
||||
autocomplete="address-level2"
|
||||
class="focus:ring-accent-300 focus:border-accent-500 block w-full sm:text-sm border-gray-300 rounded text-neutral-900"
|
||||
placeholder="Entenhausen"
|
||||
/>
|
||||
<button
|
||||
type="submit"
|
||||
class="inline-flex items-center px-4 py-2 border border-white text-sm font-medium rounded text-white bg-accent-800 hover:bg-accent-900 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-accent-600"
|
||||
>
|
||||
Suchen
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
</header>
|
||||
<!-- MOBILE HEADER END -->
|
||||
|
||||
<!-- DESKTOP HEADER START -->
|
||||
<header class="hidden lg:grid grid-flow-col gap-8 border-b border-b-ql-purple">
|
||||
<section class="mx-4 md:mx-8 lg:mx-12 my-8 text-neutral-700">
|
||||
<h1 class="font-semibold text-lg mb-1">tra-la-carte</h1>
|
||||
<p>
|
||||
Eine Übersichtskarte über queere Jugendgruppen in Deutschland, Österreich und der Schweiz.
|
||||
Betrieben und gewartet vom
|
||||
<a href="https://queer-lexikon.net/">Queer Lexikon e.V.</a>
|
||||
</p>
|
||||
<p>
|
||||
Du möchtest einen Eintrag ergänzen, korrigieren oder entfernen?
|
||||
<a class="underline" href="mailto:karte@queer-lexikon.de"
|
||||
>Dann meld dich bei uns per Mail!</a
|
||||
>
|
||||
Bitte beachte, dass wir Meldungen nur von Gruppenleitungen annehmen können.
|
||||
</p>
|
||||
<nav>
|
||||
<ul class="flex gap-4 underline mt-4 text-sm">
|
||||
<li>
|
||||
<a href="https://queer-lexikon.net/impressum/">Impressum</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://queer-lexikon.net/datenschutz/">Datenschutz</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</section>
|
||||
<section
|
||||
class="px-8 lg:px-12 py-8 bg-ql-purple text-white"
|
||||
aria-labelledby="search-own-city-desktop"
|
||||
>
|
||||
<h2 class="sr-only" id="search-own-city-desktop">Suche deine Stadt oder Postleitzahl</h2>
|
||||
<form method="get" class="flex flex-row">
|
||||
<div class="max-w-xl">
|
||||
<label for="city" class="block text-sm font-medium"
|
||||
>Name deiner Stadt oder Postleitzahl</label
|
||||
>
|
||||
<div class="flex flex-row mt-1 space-x-4">
|
||||
<input
|
||||
type="text"
|
||||
name="city"
|
||||
id="city"
|
||||
autocomplete="address-level2"
|
||||
class="focus:ring-accent-300 focus:border-accent-500 block w-full sm:text-sm border-gray-300 rounded text-neutral-900"
|
||||
placeholder="Entenhausen"
|
||||
aria-describedby="city-description"
|
||||
/>
|
||||
<button
|
||||
type="submit"
|
||||
class="inline-flex items-center px-4 py-2 border border-white text-sm font-medium rounded text-white bg-accent-800 hover:bg-accent-900 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-accent-600"
|
||||
>
|
||||
Suchen
|
||||
</button>
|
||||
</div>
|
||||
<p class="mt-2 text-sm text-white" id="city-description">
|
||||
Dein Ort oder deine Postleitzahl wird zu keinem Zeitpunkt von uns gespeichert. Wir
|
||||
nutzen die OpenStreetMap API, um die Koordinaten zu finden. Du kannst aber auch
|
||||
einfach auf der Karte nach Orten in deiner Nähe suchen.
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
</header>
|
||||
<!-- DESKTOP HEADER END -->
|
||||
|
||||
<template id="legend-list-entry">
|
||||
<li class="flex flex-col lg:flex-row items-center mb-2 last:mb-0">
|
||||
<img src="to_be_set" alt="" class="w-12 h-12 mr-4" />
|
||||
<span class="text-sm">description</span>
|
||||
</li>
|
||||
</template>
|
||||
<section class="flex-grow z-0 relative" aria-labelledby="map-header">
|
||||
<h2 id="map-header" class="sr-only">Karte</h2>
|
||||
<div id="map" aria-label="Karte mit vielen queeren Jugendverbänden" class="h-full"></div>
|
||||
|
||||
<section
|
||||
aria-labelledby="legend-header"
|
||||
id="legend"
|
||||
class="z-[5000] hidden absolute top-0 inset-x-0 lg:right-4 lg:top-4 lg:left-auto bg-ql-pink shadow-lg lg:rounded border-white lg:border lg:px-6 p-4 md:flex flex-row items-center lg:flex-col"
|
||||
>
|
||||
<h2 id="legend-header" class="font-semibold text-center mb-4 mr-8">Legende:</h2>
|
||||
<ul
|
||||
data-id="legend-list"
|
||||
class="flex flex-row lg:flex-col items-baseline gap-8 lg:gap-4"
|
||||
></ul>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<!-- HAMBURGER MENU START -->
|
||||
<div class="relative z-40 lg:hidden menu" id="menu" role="dialog" aria-modal="true">
|
||||
<!-- backdrop -->
|
||||
<div class="fixed inset-0 bg-neutral-600 bg-opacity-75 backdrop-blur-sm"></div>
|
||||
|
||||
<div class="fixed inset-0 flex z-40">
|
||||
<div class="flex-shrink-0 w-14 flex-grow" aria-hidden="true">
|
||||
<!-- Dummy element to force sidebar to shrink to fit close icon -->
|
||||
</div>
|
||||
<div class="relative flex-1 flex flex-col max-w-sm w-full pt-6 bg-ql-pink">
|
||||
<!-- close button-->
|
||||
<div class="absolute top-0 left-0 -ml-12 pt-2">
|
||||
<button
|
||||
type="button"
|
||||
id="close-menu-btn"
|
||||
class="mr-2 flex items-center justify-center h-10 w-10 rounded-full focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white"
|
||||
>
|
||||
<span class="sr-only">Menü schließen</span>
|
||||
<!-- Heroicon name: outline/x -->
|
||||
<svg
|
||||
class="h-6 w-6 text-white"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="flex-1 px-4 space-y-4">
|
||||
<p class="font-semibold text-neutral-700 text-lg mb-1">tra-la-carte</p>
|
||||
<p>
|
||||
Eine Übersichtskarte über queere Jugendverbände in Deutschland, Österreich und der
|
||||
Schweiz. Betrieben und gewartet vom Queer Lexikon e.V.
|
||||
</p>
|
||||
<p>
|
||||
Du möchtest einen Eintrag ergänzen, korrigieren oder entfernen?
|
||||
<a class="underline" href="mailto:karte@queer-lexikon.de"
|
||||
>Dann meld dich bei uns per Mail!</a
|
||||
>
|
||||
Bitte beachte, dass wir Meldungen nur von Gruppenleitungen annehmen können.
|
||||
</p>
|
||||
<p>
|
||||
Dein Ort wird zu keinem Zeitpunkt von uns gespeichert. Wir nutzen die OpenStreetMap
|
||||
API, um die Koordinaten zu finden. Du kannst aber auch einfach auf der Karte nach
|
||||
Orten in deiner Nähe suchen.
|
||||
</p>
|
||||
<div>
|
||||
<h2 class="font-semibold text-center mb-4">Legende:</h2>
|
||||
<ul data-id="legend-list" class="flex flex-row gap-4"></ul>
|
||||
</div>
|
||||
|
||||
<nav>
|
||||
<ul class="flex gap-4 underline mt-4 text-sm">
|
||||
<li>
|
||||
<a href="https://queer-lexikon.net/impressum/">Impressum</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://queer-lexikon.net/datenschutz/">Datenschutz</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- HAMBURGER MENU END -->
|
||||
|
||||
<!-- #region Emergency button -->
|
||||
<button
|
||||
id="emergency-button"
|
||||
class="bg-red-800 bottom-0 sticky text-white px-4 py-3 z-[1000] md:absolute md:right-2 md:bottom-6 md:rounded-full"
|
||||
>
|
||||
Notausgang
|
||||
</button>
|
||||
<!-- #endregion -->
|
||||
</body>
|
||||
</html>
|
172
license.txt
Normal file
172
license.txt
Normal file
|
@ -0,0 +1,172 @@
|
|||
Open Software License ("OSL") v. 3.0
|
||||
|
||||
This Open Software License (the "License") applies to any original work of
|
||||
authorship (the "Original Work") whose owner (the "Licensor") has placed the
|
||||
following licensing notice adjacent to the copyright notice for the Original
|
||||
Work:
|
||||
|
||||
Licensed under the Open Software License version 3.0
|
||||
|
||||
1) Grant of Copyright License. Licensor grants You a worldwide, royalty-free,
|
||||
non-exclusive, sublicensable license, for the duration of the copyright, to do
|
||||
the following:
|
||||
|
||||
a) to reproduce the Original Work in copies, either alone or as part of a
|
||||
collective work;
|
||||
|
||||
b) to translate, adapt, alter, transform, modify, or arrange the Original
|
||||
Work, thereby creating derivative works ("Derivative Works") based upon the
|
||||
Original Work;
|
||||
|
||||
c) to distribute or communicate copies of the Original Work and Derivative
|
||||
Works to the public, with the proviso that copies of Original Work or
|
||||
Derivative Works that You distribute or communicate shall be licensed under
|
||||
this Open Software License;
|
||||
|
||||
d) to perform the Original Work publicly; and
|
||||
|
||||
e) to display the Original Work publicly.
|
||||
|
||||
2) Grant of Patent License. Licensor grants You a worldwide, royalty-free,
|
||||
non-exclusive, sublicensable license, under patent claims owned or controlled
|
||||
by the Licensor that are embodied in the Original Work as furnished by the
|
||||
Licensor, for the duration of the patents, to make, use, sell, offer for sale,
|
||||
have made, and import the Original Work and Derivative Works.
|
||||
|
||||
3) Grant of Source Code License. The term "Source Code" means the preferred
|
||||
form of the Original Work for making modifications to it and all available
|
||||
documentation describing how to modify the Original Work. Licensor agrees to
|
||||
provide a machine-readable copy of the Source Code of the Original Work along
|
||||
with each copy of the Original Work that Licensor distributes. Licensor
|
||||
reserves the right to satisfy this obligation by placing a machine-readable
|
||||
copy of the Source Code in an information repository reasonably calculated to
|
||||
permit inexpensive and convenient access by You for as long as Licensor
|
||||
continues to distribute the Original Work.
|
||||
|
||||
4) Exclusions From License Grant. Neither the names of Licensor, nor the names
|
||||
of any contributors to the Original Work, nor any of their trademarks or
|
||||
service marks, may be used to endorse or promote products derived from this
|
||||
Original Work without express prior permission of the Licensor. Except as
|
||||
expressly stated herein, nothing in this License grants any license to
|
||||
Licensor's trademarks, copyrights, patents, trade secrets or any other
|
||||
intellectual property. No patent license is granted to make, use, sell, offer
|
||||
for sale, have made, or import embodiments of any patent claims other than the
|
||||
licensed claims defined in Section 2. No license is granted to the trademarks
|
||||
of Licensor even if such marks are included in the Original Work. Nothing in
|
||||
this License shall be interpreted to prohibit Licensor from licensing under
|
||||
terms different from this License any Original Work that Licensor otherwise
|
||||
would have a right to license.
|
||||
|
||||
5) External Deployment. The term "External Deployment" means the use,
|
||||
distribution, or communication of the Original Work or Derivative Works in any
|
||||
way such that the Original Work or Derivative Works may be used by anyone
|
||||
other than You, whether those works are distributed or communicated to those
|
||||
persons or made available as an application intended for use over a network.
|
||||
As an express condition for the grants of license hereunder, You must treat
|
||||
any External Deployment by You of the Original Work or a Derivative Work as a
|
||||
distribution under section 1(c).
|
||||
|
||||
6) Attribution Rights. You must retain, in the Source Code of any Derivative
|
||||
Works that You create, all copyright, patent, or trademark notices from the
|
||||
Source Code of the Original Work, as well as any notices of licensing and any
|
||||
descriptive text identified therein as an "Attribution Notice." You must cause
|
||||
the Source Code for any Derivative Works that You create to carry a prominent
|
||||
Attribution Notice reasonably calculated to inform recipients that You have
|
||||
modified the Original Work.
|
||||
|
||||
7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that
|
||||
the copyright in and to the Original Work and the patent rights granted herein
|
||||
by Licensor are owned by the Licensor or are sublicensed to You under the
|
||||
terms of this License with the permission of the contributor(s) of those
|
||||
copyrights and patent rights. Except as expressly stated in the immediately
|
||||
preceding sentence, the Original Work is provided under this License on an "AS
|
||||
IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without
|
||||
limitation, the warranties of non-infringement, merchantability or fitness for
|
||||
a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK
|
||||
IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this
|
||||
License. No license to the Original Work is granted by this License except
|
||||
under this disclaimer.
|
||||
|
||||
8) Limitation of Liability. Under no circumstances and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise, shall the
|
||||
Licensor be liable to anyone for any indirect, special, incidental, or
|
||||
consequential damages of any character arising as a result of this License or
|
||||
the use of the Original Work including, without limitation, damages for loss
|
||||
of goodwill, work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses. This limitation of liability shall not
|
||||
apply to the extent applicable law prohibits such limitation.
|
||||
|
||||
9) Acceptance and Termination. If, at any time, You expressly assented to this
|
||||
License, that assent indicates your clear and irrevocable acceptance of this
|
||||
License and all of its terms and conditions. If You distribute or communicate
|
||||
copies of the Original Work or a Derivative Work, You must make a reasonable
|
||||
effort under the circumstances to obtain the express assent of recipients to
|
||||
the terms of this License. This License conditions your rights to undertake
|
||||
the activities listed in Section 1, including your right to create Derivative
|
||||
Works based upon the Original Work, and doing so without honoring these terms
|
||||
and conditions is prohibited by copyright law and international treaty.
|
||||
Nothing in this License is intended to affect copyright exceptions and
|
||||
limitations (including "fair use" or "fair dealing"). This License shall
|
||||
terminate immediately and You may no longer exercise any of the rights granted
|
||||
to You by this License upon your failure to honor the conditions in Section
|
||||
1(c).
|
||||
|
||||
10) Termination for Patent Action. This License shall terminate automatically
|
||||
and You may no longer exercise any of the rights granted to You by this
|
||||
License as of the date You commence an action, including a cross-claim or
|
||||
counterclaim, against Licensor or any licensee alleging that the Original Work
|
||||
infringes a patent. This termination provision shall not apply for an action
|
||||
alleging patent infringement by combinations of the Original Work with other
|
||||
software or hardware.
|
||||
|
||||
11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this
|
||||
License may be brought only in the courts of a jurisdiction wherein the
|
||||
Licensor resides or in which Licensor conducts its primary business, and under
|
||||
the laws of that jurisdiction excluding its conflict-of-law provisions. The
|
||||
application of the United Nations Convention on Contracts for the
|
||||
International Sale of Goods is expressly excluded. Any use of the Original
|
||||
Work outside the scope of this License or after its termination shall be
|
||||
subject to the requirements and penalties of copyright or patent law in the
|
||||
appropriate jurisdiction. This section shall survive the termination of this
|
||||
License.
|
||||
|
||||
12) Attorneys' Fees. In any action to enforce the terms of this License or
|
||||
seeking damages relating thereto, the prevailing party shall be entitled to
|
||||
recover its costs and expenses, including, without limitation, reasonable
|
||||
attorneys' fees and costs incurred in connection with such action, including
|
||||
any appeal of such action. This section shall survive the termination of this
|
||||
License.
|
||||
|
||||
13) Miscellaneous. If any provision of this License is held to be
|
||||
unenforceable, such provision shall be reformed only to the extent necessary
|
||||
to make it enforceable.
|
||||
|
||||
14) Definition of "You" in This License. "You" throughout this License,
|
||||
whether in upper or lower case, means an individual or a legal entity
|
||||
exercising rights under, and complying with all of the terms of, this License.
|
||||
For legal entities, "You" includes any entity that controls, is controlled by,
|
||||
or is under common control with you. For purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the direction or
|
||||
management of such entity, whether by contract or otherwise, or (ii) ownership
|
||||
of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial
|
||||
ownership of such entity.
|
||||
|
||||
15) Right to Use. You may use the Original Work in all ways not otherwise
|
||||
restricted or conditioned by this License or by law, and Licensor promises not
|
||||
to interfere with or be responsible for such uses by You.
|
||||
|
||||
16) Modification of This License. This License is Copyright © 2005 Lawrence
|
||||
Rosen. Permission is granted to copy, distribute, or communicate this License
|
||||
without modification. Nothing in this License permits You to modify this
|
||||
License as applied to the Original Work or to Derivative Works. However, You
|
||||
may modify the text of this License and copy, distribute or communicate your
|
||||
modified version (the "Modified License") and apply it to other original works
|
||||
of authorship subject to the following conditions: (i) You may not indicate in
|
||||
any way that your Modified License is the "Open Software License" or "OSL" and
|
||||
you may not use those names in the name of your Modified License; (ii) You
|
||||
must replace the notice specified in the first paragraph above with the notice
|
||||
"Licensed under <insert your license name here>" or with a notice of your own
|
||||
that is not confusingly similar to the notice in this License; and (iii) You
|
||||
may not claim that your original works are open source software unless your
|
||||
Modified License has been approved by Open Source Initiative (OSI) and You
|
||||
comply with its license review and certification process.
|
28
main.css
Normal file
28
main.css
Normal file
|
@ -0,0 +1,28 @@
|
|||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
body {
|
||||
@apply m-0 p-0 h-screen w-screen font-sans;
|
||||
@apply flex flex-col;
|
||||
}
|
||||
|
||||
.menu:not(.open) {
|
||||
@apply hidden;
|
||||
}
|
||||
|
||||
.map-popup .leaflet-popup-content-wrapper {
|
||||
@apply font-sans;
|
||||
@apply px-6 py-4 rounded shadow-xl;
|
||||
}
|
||||
.map-popup .leaflet-popup-content {
|
||||
@apply m-0;
|
||||
@apply leading-relaxed;
|
||||
@apply text-sm;
|
||||
}
|
||||
.map-popup .leaflet-container a.leaflet-popup-close-button {
|
||||
@apply w-6 h-6 text-xl;
|
||||
}
|
||||
.map-popup .leaflet-popup-content p {
|
||||
@apply m-0 mb-1;
|
||||
}
|
15
main.ts
Normal file
15
main.ts
Normal file
|
@ -0,0 +1,15 @@
|
|||
import "./main.css";
|
||||
import { initializeForms } from "./ts/form";
|
||||
import { setupHamburger } from "./ts/hamburger";
|
||||
import { initializeMap } from "./ts/map";
|
||||
import "@fontsource/ubuntu/latin.css";
|
||||
import { setupLegend } from "./ts/legend";
|
||||
import { setupEmergencyButton } from "./ts/emergency-button";
|
||||
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
initializeMap();
|
||||
initializeForms();
|
||||
setupHamburger();
|
||||
setupLegend();
|
||||
setupEmergencyButton();
|
||||
});
|
2354
package-lock.json
generated
Normal file
2354
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
40
package.json
Normal file
40
package.json
Normal file
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "regenbogenkarte",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
"dev": "vite dev",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview",
|
||||
"lint": "prettier --ignore-path .gitignore --check --plugin-search-dir=. .",
|
||||
"format": "prettier --ignore-path .gitignore --write --plugin-search-dir=. .",
|
||||
"test": "playwright test"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/Queer-Lexikon/regenbogenkarte.git"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"bugs": {
|
||||
"url": "https://github.com/Queer-Lexikon/regenbogenkarte/issues"
|
||||
},
|
||||
"homepage": "https://github.com/Queer-Lexikon/regenbogenkarte#readme",
|
||||
"devDependencies": {
|
||||
"@playwright/test": "^1.25.1",
|
||||
"@tailwindcss/forms": "^0.5.2",
|
||||
"@types/leaflet": "^1.7.11",
|
||||
"@types/leaflet.markercluster": "^1.5.1",
|
||||
"autoprefixer": "^10.4.8",
|
||||
"postcss": "^8.4.14",
|
||||
"prettier": "^2.7.1",
|
||||
"tailwindcss": "^3.1.7",
|
||||
"vite": "^3.0.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"@fontsource/ubuntu": "^4.5.10",
|
||||
"leaflet": "^1.8.0",
|
||||
"leaflet.markercluster": "^1.5.3"
|
||||
}
|
||||
}
|
107
playwright.config.ts
Normal file
107
playwright.config.ts
Normal file
|
@ -0,0 +1,107 @@
|
|||
import type { PlaywrightTestConfig } from "@playwright/test";
|
||||
import { devices } from "@playwright/test";
|
||||
|
||||
/**
|
||||
* Read environment variables from file.
|
||||
* https://github.com/motdotla/dotenv
|
||||
*/
|
||||
// require('dotenv').config();
|
||||
|
||||
/**
|
||||
* See https://playwright.dev/docs/test-configuration.
|
||||
*/
|
||||
const config: PlaywrightTestConfig = {
|
||||
testDir: "./tests",
|
||||
/* Maximum time one test can run for. */
|
||||
timeout: 30 * 1000,
|
||||
expect: {
|
||||
/**
|
||||
* Maximum time expect() should wait for the condition to be met.
|
||||
* For example in `await expect(locator).toHaveText();`
|
||||
*/
|
||||
timeout: 5000,
|
||||
},
|
||||
/* Run tests in files in parallel */
|
||||
fullyParallel: true,
|
||||
/* Fail the build on CI if you accidentally left test.only in the source code. */
|
||||
forbidOnly: !!process.env.CI,
|
||||
/* Retry on CI only */
|
||||
retries: process.env.CI ? 2 : 0,
|
||||
/* Opt out of parallel tests on CI. */
|
||||
workers: process.env.CI ? 1 : undefined,
|
||||
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
|
||||
reporter: "html",
|
||||
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
|
||||
use: {
|
||||
/* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */
|
||||
actionTimeout: 0,
|
||||
/* Base URL to use in actions like `await page.goto('/')`. */
|
||||
// baseURL: 'http://localhost:3000',
|
||||
|
||||
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
||||
trace: "on-first-retry",
|
||||
},
|
||||
|
||||
/* Configure projects for major browsers */
|
||||
projects: [
|
||||
{
|
||||
name: "chromium",
|
||||
use: {
|
||||
...devices["Desktop Chrome"],
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
name: "firefox",
|
||||
use: {
|
||||
...devices["Desktop Firefox"],
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
name: "webkit",
|
||||
use: {
|
||||
...devices["Desktop Safari"],
|
||||
},
|
||||
},
|
||||
|
||||
/* Test against mobile viewports. */
|
||||
// {
|
||||
// name: 'Mobile Chrome',
|
||||
// use: {
|
||||
// ...devices['Pixel 5'],
|
||||
// },
|
||||
// },
|
||||
// {
|
||||
// name: 'Mobile Safari',
|
||||
// use: {
|
||||
// ...devices['iPhone 12'],
|
||||
// },
|
||||
// },
|
||||
|
||||
/* Test against branded browsers. */
|
||||
// {
|
||||
// name: 'Microsoft Edge',
|
||||
// use: {
|
||||
// channel: 'msedge',
|
||||
// },
|
||||
// },
|
||||
// {
|
||||
// name: 'Google Chrome',
|
||||
// use: {
|
||||
// channel: 'chrome',
|
||||
// },
|
||||
// },
|
||||
],
|
||||
|
||||
/* Folder for test artifacts such as screenshots, videos, traces, etc. */
|
||||
// outputDir: 'test-results/',
|
||||
|
||||
/* Run your local dev server before starting the tests */
|
||||
webServer: {
|
||||
command: "npx vite --port 3000",
|
||||
port: 3000,
|
||||
},
|
||||
};
|
||||
|
||||
export default config;
|
6
postcss.config.js
Normal file
6
postcss.config.js
Normal file
|
@ -0,0 +1,6 @@
|
|||
module.exports = {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
autoprefixer: {},
|
||||
},
|
||||
};
|
24
tailwind.config.js
Normal file
24
tailwind.config.js
Normal file
|
@ -0,0 +1,24 @@
|
|||
const colors = require("tailwindcss/colors");
|
||||
const defaultTheme = require("tailwindcss/defaultTheme");
|
||||
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
module.exports = {
|
||||
content: ["**/*.{ts,svg,html}"],
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
ql: {
|
||||
pink: "#faedfa",
|
||||
purple: "#5f4e7a",
|
||||
darkRed: "#620043",
|
||||
},
|
||||
accent: colors.pink,
|
||||
neutral: colors.neutral,
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ["Ubuntu", ...defaultTheme.fontFamily.sans],
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [require("@tailwindcss/forms")],
|
||||
};
|
23
tests/start.spec.ts
Normal file
23
tests/start.spec.ts
Normal file
|
@ -0,0 +1,23 @@
|
|||
import { test, expect } from "@playwright/test";
|
||||
|
||||
test.describe("exit button", () => {
|
||||
test.beforeEach(async ({ page, baseURL }) => {
|
||||
test.fail(baseURL === undefined, "baseURL should be set");
|
||||
await page.goto(baseURL!);
|
||||
});
|
||||
test("should open new tab with wikipedia", async ({ page }) => {
|
||||
const [wikipedia] = await Promise.all([
|
||||
page.waitForEvent("popup"),
|
||||
page.locator("text=Notausgang").click(),
|
||||
]);
|
||||
await expect(wikipedia).toHaveURL("https://de.wikipedia.org/wiki/Wikipedia:Hauptseite");
|
||||
});
|
||||
test("should navigate to google", async ({ page }) => {
|
||||
await Promise.all([page.waitForEvent("popup"), page.locator("text=Notausgang").click()]);
|
||||
await expect(page).toHaveURL(/google\.com/);
|
||||
});
|
||||
test("should open two tabs in total", async ({ page }) => {
|
||||
await Promise.all([page.waitForEvent("popup"), page.locator("text=Notausgang").click()]);
|
||||
await expect(page.context().pages()).toHaveLength(2);
|
||||
});
|
||||
});
|
16
ts/config.ts
Normal file
16
ts/config.ts
Normal file
|
@ -0,0 +1,16 @@
|
|||
import defaultImage from "../assets/default.svg";
|
||||
import limitedImage from "../assets/limited.svg";
|
||||
import supportImage from "../assets/support.svg";
|
||||
|
||||
export const ICON_SIZE: L.PointExpression = [56, 56];
|
||||
export const DEFAULT_ZOOM_LEVEL = 11;
|
||||
export const MAX_ZOOM_LEVEL = 17;
|
||||
export const MIN_ZOOM_LEVEL = 6;
|
||||
|
||||
export const NAVIGATE_TO_URI = "https://www.google.com/search?&q=wikipedia";
|
||||
export const NEW_TAB_URI = "https://de.wikipedia.org/wiki/Wikipedia:Hauptseite";
|
||||
|
||||
export const LEGEND_MAPPING = new Map<string, [string, string]>();
|
||||
LEGEND_MAPPING.set("default", [defaultImage, "Allgemeines"]);
|
||||
LEGEND_MAPPING.set("support", [supportImage, "Unterstützung und Beratung"]);
|
||||
LEGEND_MAPPING.set("limited", [limitedImage, "eingeschränkte Zielgruppe"]);
|
11
ts/emergency-button.ts
Normal file
11
ts/emergency-button.ts
Normal file
|
@ -0,0 +1,11 @@
|
|||
import { NAVIGATE_TO_URI, NEW_TAB_URI } from "./config";
|
||||
|
||||
export const setupEmergencyButton = () => {
|
||||
const btn = <HTMLButtonElement>document.getElementById("emergency-button");
|
||||
btn?.addEventListener("click", () => {
|
||||
// The order of these statements below matter. If we replace the location before opening
|
||||
// the other URL, the "window.open" line would have no effect.
|
||||
window.open(NEW_TAB_URI, "_blank");
|
||||
location.replace(NAVIGATE_TO_URI);
|
||||
});
|
||||
};
|
43
ts/form.ts
Normal file
43
ts/form.ts
Normal file
|
@ -0,0 +1,43 @@
|
|||
import { DEFAULT_ZOOM_LEVEL } from "./config";
|
||||
import { getMap } from "./map";
|
||||
|
||||
export const initializeForms = () => {
|
||||
const forms = document.querySelectorAll("form");
|
||||
forms.forEach((f) => initializeForm(f));
|
||||
};
|
||||
|
||||
function initializeForm(form: HTMLFormElement) {
|
||||
form.addEventListener("submit", async (e) => {
|
||||
const val = form.querySelector<HTMLInputElement>("input[name=city]")!.value;
|
||||
e.preventDefault();
|
||||
|
||||
// Documentation: https://nominatim.org/release-docs/latest/api/Search/#result-limitation
|
||||
const u = new URL("https://nominatim.openstreetmap.org/search");
|
||||
u.search = new URLSearchParams({
|
||||
q: val,
|
||||
format: "json",
|
||||
countrycodes: "de,at,ch", // comma-separated list of supported countries.
|
||||
limit: "1", // only interested for first entry
|
||||
}).toString();
|
||||
|
||||
try {
|
||||
const resp = await fetch(u);
|
||||
const json = await resp.json();
|
||||
|
||||
if (!json || !Array.isArray(json)) {
|
||||
console.error("expected array as JSON, got: ", json);
|
||||
return;
|
||||
}
|
||||
|
||||
if (json.length === 0) {
|
||||
// TODO: report no results to user!
|
||||
return;
|
||||
}
|
||||
|
||||
const first = json[0];
|
||||
getMap().setView([first.lat, first.lon], DEFAULT_ZOOM_LEVEL);
|
||||
} catch (error) {
|
||||
console.error("fetching information for search input failed:", error);
|
||||
}
|
||||
});
|
||||
}
|
28
ts/hamburger.ts
Normal file
28
ts/hamburger.ts
Normal file
|
@ -0,0 +1,28 @@
|
|||
const openClass = "open";
|
||||
|
||||
export const setupHamburger = () => {
|
||||
const menu = document.getElementById("menu")!;
|
||||
const openBtn = document.getElementById("open-menu-btn")!;
|
||||
const closeBtn = document.getElementById("close-menu-btn")!;
|
||||
|
||||
const elems = [menu, document.body];
|
||||
let isOpen = false;
|
||||
const openMenu = () => {
|
||||
isOpen = true;
|
||||
elems.forEach((e) => e.classList.add(openClass));
|
||||
openBtn.setAttribute("aria-expanded", "true");
|
||||
closeBtn.focus(); // a11y: focus the element that can close the menu
|
||||
};
|
||||
const closeMenu = () => {
|
||||
isOpen = false;
|
||||
elems.forEach((e) => e.classList.remove(openClass));
|
||||
openBtn.setAttribute("aria-expanded", "false");
|
||||
openBtn.focus(); // a11y: focus the element that can opened the menu
|
||||
};
|
||||
|
||||
openBtn.addEventListener("click", () => openMenu());
|
||||
closeBtn.addEventListener("click", () => closeMenu());
|
||||
document.body.addEventListener("keydown", (e) => {
|
||||
if (e.key === "Escape" && isOpen) closeMenu();
|
||||
});
|
||||
};
|
19
ts/legend.ts
Normal file
19
ts/legend.ts
Normal file
|
@ -0,0 +1,19 @@
|
|||
import { LEGEND_MAPPING } from "./config";
|
||||
|
||||
export const setupLegend = () => {
|
||||
const template = <HTMLTemplateElement>document.getElementById("legend-list-entry");
|
||||
const lists = document.querySelectorAll<HTMLElement>("[data-id=legend-list]");
|
||||
|
||||
lists.forEach((l) => {
|
||||
for (const [_, [icon, text]] of LEGEND_MAPPING) {
|
||||
const copy = <HTMLElement>template.content.cloneNode(true);
|
||||
const img = copy.querySelector("img")!;
|
||||
img.src = icon;
|
||||
|
||||
const description = copy.querySelector("span")!;
|
||||
description.innerText = text;
|
||||
|
||||
l.appendChild(copy);
|
||||
}
|
||||
});
|
||||
};
|
138
ts/map.ts
Normal file
138
ts/map.ts
Normal file
|
@ -0,0 +1,138 @@
|
|||
import * as L from "leaflet";
|
||||
import "leaflet.markercluster";
|
||||
|
||||
import "leaflet/dist/leaflet.css";
|
||||
import data from "../data/orgas.json";
|
||||
|
||||
import defaultImage from "../assets/default.svg";
|
||||
import limitedImage from "../assets/limited.svg";
|
||||
import supportImage from "../assets/support.svg";
|
||||
import { DEFAULT_ZOOM_LEVEL, ICON_SIZE, MAX_ZOOM_LEVEL, MIN_ZOOM_LEVEL } from "./config";
|
||||
|
||||
type Organisation = {
|
||||
country: string;
|
||||
state: string;
|
||||
name: string;
|
||||
email?: string;
|
||||
website?: string;
|
||||
phone?: string;
|
||||
location: {
|
||||
address?: string;
|
||||
lon: number;
|
||||
lat: number;
|
||||
approx?: boolean;
|
||||
};
|
||||
activities?: string;
|
||||
identities?: string;
|
||||
age_restriction?: string;
|
||||
};
|
||||
|
||||
let map: L.Map;
|
||||
export function initializeMap() {
|
||||
map = L.map("map").setView([51.351, 10.454], MIN_ZOOM_LEVEL); // focus on germany
|
||||
map.locate({ setView: true, maxZoom: DEFAULT_ZOOM_LEVEL });
|
||||
|
||||
L.tileLayer("https://{s}.tile.openstreetmap.de/{z}/{x}/{y}.png", {
|
||||
maxZoom: MAX_ZOOM_LEVEL,
|
||||
minZoom: MIN_ZOOM_LEVEL,
|
||||
attribution: "© OpenStreetMap",
|
||||
}).addTo(map);
|
||||
|
||||
var markers = L.markerClusterGroup({
|
||||
// Displaying the areas of each cluster is not intended. It might confuse our users
|
||||
// and provides no benefit.
|
||||
showCoverageOnHover: false,
|
||||
|
||||
// The default lines are barely visible, especially on the German map. Therefore, thicker
|
||||
// and more visible lines are placed.
|
||||
spiderLegPolylineOptions: {
|
||||
color: "black",
|
||||
opacity: 0.8,
|
||||
weight: 2,
|
||||
},
|
||||
|
||||
// Our icons are too large for the default multiplier, this increases the distance between the elements.
|
||||
// Maybe we should even increase it further to improve the usability on mobile devices.
|
||||
spiderfyDistanceMultiplier: 2,
|
||||
|
||||
// Reduce the cluster radius from 80px to 20px. This creates more and smaller clusters.
|
||||
maxClusterRadius: 20,
|
||||
|
||||
// Let's use the default icon for our clusters and place a white circle inside of it.
|
||||
iconCreateFunction: (cluster) => {
|
||||
return new L.DivIcon({
|
||||
html: `<div>
|
||||
<img src="${defaultImage}" alt=""/>
|
||||
<span class="rounded-full bg-white absolute top-[10px] bottom-[13px] inset-x-3 flex justify-center items-center font-semibold text-sm">${cluster.getChildCount()}</span></div>`,
|
||||
className: "", // empty className, so leaflet does not set any defaults.
|
||||
iconSize: ICON_SIZE,
|
||||
});
|
||||
},
|
||||
});
|
||||
data.forEach((row) => {
|
||||
const marker = createMarker(row);
|
||||
if (marker) markers.addLayer(marker);
|
||||
});
|
||||
map.addLayer(markers);
|
||||
}
|
||||
|
||||
const defaultIcon = L.icon({
|
||||
iconUrl: defaultImage,
|
||||
iconSize: ICON_SIZE,
|
||||
});
|
||||
const limitedIcon = L.icon({
|
||||
iconUrl: limitedImage,
|
||||
iconSize: ICON_SIZE,
|
||||
});
|
||||
const supportIcon = L.icon({
|
||||
iconUrl: supportImage,
|
||||
iconSize: ICON_SIZE,
|
||||
});
|
||||
|
||||
const createMarker = (e: Organisation): L.Marker | undefined => {
|
||||
const marker = L.marker([e.location.lon, e.location.lat], { alt: e.name }).bindPopup(
|
||||
buildContent(e),
|
||||
{ className: "map-popup" },
|
||||
);
|
||||
|
||||
if (e.identities && e.identities !== "") {
|
||||
marker.setIcon(limitedIcon);
|
||||
} else if (e.activities && e.activities.toLowerCase().includes("beratung")) {
|
||||
marker.setIcon(supportIcon);
|
||||
} else {
|
||||
marker.setIcon(defaultIcon);
|
||||
}
|
||||
|
||||
return marker;
|
||||
};
|
||||
|
||||
const buildContent = (o: Organisation): string => {
|
||||
let result = `
|
||||
<h3 class="font-semibold text-base">${o.name}</h3>
|
||||
<address class="inline">${o.location.address ?? "auf Nachfrage"}</address>
|
||||
<ul class="list-disc my-4 pl-2 list-inside">`;
|
||||
|
||||
if (o.website) result += `<li><a href="${o.website}">Zur Webseite</a></li>`;
|
||||
if (o.email) result += `<li><a href="mailto:${o.email}">E-Mail</a></li>`;
|
||||
if (o.phone) result += `<li>Telefon: <a href="tel:${o.phone}">${o.phone}</a></li>`;
|
||||
result += `</ul>`;
|
||||
|
||||
if (o.activities && o.activities !== "")
|
||||
result += `<h4 class="font-semibold">Aktivitäten</h4>
|
||||
<p>${o.activities}</p>`;
|
||||
|
||||
if (o.identities && o.identities !== "")
|
||||
result += `<h4 class="font-semibold">Identitäten</h4>
|
||||
<p>${o.identities}</p>`;
|
||||
|
||||
if (o.age_restriction && o.age_restriction !== "")
|
||||
result += `<h4 class="font-semibold">Altersbeschränkung</h4><p>vorhanden: ${o.age_restriction}</p>`;
|
||||
|
||||
if (o.location.approx) {
|
||||
result += `<p class="text-xs !mt-2">Bei den Daten handelt es sich um eine ungefähre Ortsangabe. Die genaue Adresse erfährst du auf Nachfrage.</p>`;
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
export const getMap = (): L.Map => map;
|
12
tsconfig.json
Normal file
12
tsconfig.json
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"exclude": ["/dist"],
|
||||
"compilerOptions": {
|
||||
"module": "ES2015",
|
||||
"strict": true,
|
||||
"lib": ["DOM", "ES2015"],
|
||||
"target": "ES2015",
|
||||
"moduleResolution": "node",
|
||||
"resolveJsonModule": true,
|
||||
"allowSyntheticDefaultImports": true
|
||||
}
|
||||
}
|
1
vite.config.js
Normal file
1
vite.config.js
Normal file
|
@ -0,0 +1 @@
|
|||
export default {};
|
Loading…
Reference in a new issue