From 73aae4251193fd674c1b6bc9c00025ab3bafabcc Mon Sep 17 00:00:00 2001 From: Zallom Date: Thu, 21 May 2026 21:11:24 +0200 Subject: [PATCH 01/36] feat: move docs under /docs and prepare landing for Webflow migration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Étape 1 de la migration depuis Webflow : la documentation passe sous `/docs` pour libérer la racine, qui accueille une landing minimale servie depuis Docusaurus. Les pages Webflow (legal/terms/privacy/cookies) seront portées en MDX dans une PR suivante. - routeBasePath docs: '/' → '/docs' - url: docs.raidprotect.bot → raidprotect.bot - customFields.urls.main pointe vers les chemins internes Docusaurus - announcementBar, JSON-LD, sitemap.createSitemapItems mis à jour - 424 liens absolus internes préfixés par /docs/ dans blog + i18n - Nouvelle landing placeholder en src/pages/index.tsx (avec ) - Plugin Docusaurus pages réactivé - LICENSE-CONTENT.md couvre désormais /src/pages --- LICENSE-CONTENT.md | 1 + blog/3.1.0/3.1.0-interactions-update.md | 144 +++++++++--------- blog/3.1.1/3.1.1-tag-role.md | 6 +- blog/3.2.0/3.2.0-protection-update.md | 14 +- blog/3.2.1/3.2.1-discord-sanctions.md | 14 +- blog/3.3.0/3.3.0-moderation-update.md | 30 ++-- blog/3.3.1/3.3.1-jail-and-mute.md | 34 ++--- blog/3.3.1/scamlens-early-activation.mdx | 2 +- blog/3.3.2/3.3.2-authentication-manager.md | 16 +- blog/3.3.2/premium-launch.md | 8 +- blog/3.3.3/3.3.3-modview.md | 32 ++-- docusaurus.config.ts | 40 ++--- .../3.1.0/3.1.0-interactions-update.md | 8 +- .../3.1.1/3.1.1-tag-role.md | 6 +- .../3.2.0/3.2.0-protection-update.md | 14 +- .../3.2.1/3.2.1-discord-sanctions.md | 14 +- .../3.3.0/3.3.0-moderation-update.md | 30 ++-- .../3.3.1/3.3.1-jail-and-mute.md | 34 ++--- .../3.3.1/scamlens-early-activation.mdx | 2 +- .../3.3.2/3.3.2-authentication-manager.md | 16 +- .../3.3.2/premium-launch.md | 8 +- .../3.3.3/3.3.3-modview.md | 32 ++-- .../3.1.0/3.1.0-interactions-update.md | 8 +- .../3.1.1/3.1.1-tag-role.md | 6 +- .../3.2.0/3.2.0-protection-update.md | 14 +- .../3.2.1/3.2.1-discord-sanctions.md | 14 +- .../3.3.0/3.3.0-moderation-update.md | 30 ++-- .../3.3.1/3.3.1-jail-and-mute.md | 34 ++--- .../3.3.1/scamlens-early-activation.mdx | 2 +- .../3.3.2/3.3.2-authentication-manager.md | 16 +- .../3.3.2/premium-launch.md | 8 +- .../3.3.3/3.3.3-modview.md | 32 ++-- .../3.1.0/3.1.0-interactions-update.md | 8 +- .../3.1.1/3.1.1-tag-role.md | 6 +- .../3.2.0/3.2.0-protection-update.md | 14 +- .../3.2.1/3.2.1-discord-sanctions.md | 14 +- .../3.3.0/3.3.0-moderation-update.md | 30 ++-- .../3.3.1/3.3.1-jail-and-mute.md | 34 ++--- .../3.3.1/scamlens-early-activation.mdx | 2 +- .../3.3.2/3.3.2-authentication-manager.md | 16 +- .../3.3.2/premium-launch.md | 8 +- .../3.3.3/3.3.3-modview.md | 32 ++-- .../3.1.0/3.1.0-interactions-update.md | 8 +- .../3.1.1/3.1.1-tag-role.md | 6 +- .../3.2.0/3.2.0-protection-update.md | 14 +- .../3.2.1/3.2.1-discord-sanctions.md | 14 +- .../3.3.0/3.3.0-moderation-update.md | 30 ++-- .../3.3.1/3.3.1-jail-and-mute.md | 34 ++--- .../3.3.1/scamlens-early-activation.mdx | 2 +- .../3.3.2/3.3.2-authentication-manager.md | 16 +- .../3.3.2/premium-launch.md | 8 +- .../3.3.3/3.3.3-modview.md | 32 ++-- src/pages/index.tsx | 31 ++++ 53 files changed, 532 insertions(+), 496 deletions(-) create mode 100644 src/pages/index.tsx diff --git a/LICENSE-CONTENT.md b/LICENSE-CONTENT.md index 777e279..48348d4 100644 --- a/LICENSE-CONTENT.md +++ b/LICENSE-CONTENT.md @@ -8,6 +8,7 @@ This license applies to all editorial content in this repository, including but - `/blog` - `/i18n` - `/versioned_docs` +- `/src/pages` (landing page, legal, terms, privacy, cookies, premium, and any other public-facing page — including their source code, layout, visual design, and embedded copy) ## All Rights Reserved diff --git a/blog/3.1.0/3.1.0-interactions-update.md b/blog/3.1.0/3.1.0-interactions-update.md index f697165..05777c8 100644 --- a/blog/3.1.0/3.1.0-interactions-update.md +++ b/blog/3.1.0/3.1.0-interactions-update.md @@ -1,73 +1,73 @@ ---- -title: 'Interactions Update (3.1.0)' -tags: [release, language] -authors: [derrios, zallom, ichii, dawoox] -image: ./assets/rp-interactions-update.webp -slug: 3.1.0-interactions-update -date: 2025-03-12 ---- - -Cela faisait un moment que nous n'avions pas proposé de mise à jour majeure pour RaidProtect et nous tenons à nous excuser pour cette longue attente. Ces derniers mois, nous avons travaillé dur pour moderniser et améliorer l'expérience du bot ; aujourd'hui, nous sommes ravis de vous présenter l'**Interactions Update** ! - -![RaidProtect Interactions Update blog post social card](./assets/rp-interactions-update.webp) - - - -## ✨ Ce qui change (et ça change beaucoup) {#new} - -Cette mise à jour marque un tournant dans le fonctionnement de RaidProtect en mettant l'accent sur **l'interaction et l'ergonomie**, notamment avec l'ajout des **commandes slash** et une **refonte de la configuration**. De plus, nous avons écouté vos retours et idées, cette mise à jour intègre de nombreuses fonctionnalités que vous nous avez demandées ! Vous pouvez d'ailleurs [consulter le changelog](/changelog) pour voir les suggestions réalisées. - -### Commandes Slash {#slash-commands} - -Oui, vous les attendiez depuis longtemps... Nous aussi. Fini les commandes textuelles d’une autre époque, place aux commandes slash ! Plus simples, plus rapides, elles rendent RaidProtect enfin digne de l’année 2021 (oui, nous sommes au courant, c'est déjà 2025). - -Pas d’inquiétude pour les habitués, les commandes textuelles restent disponibles et maintenant vous pouvez même configurer le préfixe de votre choix ! - -### Internationalisation (RP devient bilingue) {#internationalization} - -Nous avons posé les bases d’un [**système multilingue**](/language) et avons ajouté l’anglais en tant que seconde langue officielle ! D’autres langues viendront à l’avenir. - -### Une commande de signalement {#report} - -Une fonctionnalité demandée depuis longtemps : [**un système de signalement**](/features/reports) permettant à votre communauté de rapporter facilement des incidents sur votre serveur. - -![Capture d'écran menu de report](./assets/rp-report-message.webp) - -### Nouvelles commandes de configuration {#configuration} - -On sait que configurer un bot peut vite devenir un casse-tête, alors on a simplifié tout ça : -- **Un panneau interactif avec [`/settings`](/setup#settings)** pour gérer RaidProtect en un clin d’œil. -- **Un nouveau [`/setup`](/setup#install)** qui vous guide dès l’installation. -- **Des options plus flexibles** pour une configuration aux petits oignons. - -![Capture d'écran menu de configuration](./assets/rp-configuration-menu.webp) - -### Une meilleure expérience utilisateur {#ux} - -En plus des nouveautés, nous avons travaillé sur l’ergonomie : -- Un captcha plus intelligent et mieux intégré. -- Une détection automatique des erreurs de permissions. -- Des messages plus clairs et uniformisés. - -### Mise à jour du site web et de la documentation {#web} - -En plus des améliorations du bot, nous avons également mis à jour **le site web et la documentation** pour rendre l'accès aux informations plus clair et structuré. N'hésitez pas à y jeter un œil ! - - -## 🔎 Et après ? {#next} - -Cette mise à jour est une première étape vers une version encore plus complète de RaidProtect. D'autres améliorations sont en cours de réflexion et nous avons hâte de vous en dire plus ! - -Pour connaître les prochaines évolutions prévues, jetez un œil à notre roadmap. - -:::tip Rejoignez la conversation ! -Vous voulez suivre l’évolution de RaidProtect en temps réel, donner votre avis sur les futures fonctionnalités ou simplement discuter avec la communauté ? Rejoignez notre serveur Discord ! -::: - ---- - -## ❤️ Merci pour votre patience (vraiment) {#thanks} - -On le sait, cette mise à jour s’est fait attendre. Merci à tous ceux qui nous ont soutenus et attendus patiemment (ou pas 😆). - +--- +title: 'Interactions Update (3.1.0)' +tags: [release, language] +authors: [derrios, zallom, ichii, dawoox] +image: ./assets/rp-interactions-update.webp +slug: 3.1.0-interactions-update +date: 2025-03-12 +--- + +Cela faisait un moment que nous n'avions pas proposé de mise à jour majeure pour RaidProtect et nous tenons à nous excuser pour cette longue attente. Ces derniers mois, nous avons travaillé dur pour moderniser et améliorer l'expérience du bot ; aujourd'hui, nous sommes ravis de vous présenter l'**Interactions Update** ! + +![RaidProtect Interactions Update blog post social card](./assets/rp-interactions-update.webp) + + + +## ✨ Ce qui change (et ça change beaucoup) {#new} + +Cette mise à jour marque un tournant dans le fonctionnement de RaidProtect en mettant l'accent sur **l'interaction et l'ergonomie**, notamment avec l'ajout des **commandes slash** et une **refonte de la configuration**. De plus, nous avons écouté vos retours et idées, cette mise à jour intègre de nombreuses fonctionnalités que vous nous avez demandées ! Vous pouvez d'ailleurs [consulter le changelog](/docs/changelog) pour voir les suggestions réalisées. + +### Commandes Slash {#slash-commands} + +Oui, vous les attendiez depuis longtemps... Nous aussi. Fini les commandes textuelles d’une autre époque, place aux commandes slash ! Plus simples, plus rapides, elles rendent RaidProtect enfin digne de l’année 2021 (oui, nous sommes au courant, c'est déjà 2025). + +Pas d’inquiétude pour les habitués, les commandes textuelles restent disponibles et maintenant vous pouvez même configurer le préfixe de votre choix ! + +### Internationalisation (RP devient bilingue) {#internationalization} + +Nous avons posé les bases d’un [**système multilingue**](/docs/language) et avons ajouté l’anglais en tant que seconde langue officielle ! D’autres langues viendront à l’avenir. + +### Une commande de signalement {#report} + +Une fonctionnalité demandée depuis longtemps : [**un système de signalement**](/features/reports) permettant à votre communauté de rapporter facilement des incidents sur votre serveur. + +![Capture d'écran menu de report](./assets/rp-report-message.webp) + +### Nouvelles commandes de configuration {#configuration} + +On sait que configurer un bot peut vite devenir un casse-tête, alors on a simplifié tout ça : +- **Un panneau interactif avec [`/settings`](/docs/setup#settings)** pour gérer RaidProtect en un clin d’œil. +- **Un nouveau [`/setup`](/docs/setup#install)** qui vous guide dès l’installation. +- **Des options plus flexibles** pour une configuration aux petits oignons. + +![Capture d'écran menu de configuration](./assets/rp-configuration-menu.webp) + +### Une meilleure expérience utilisateur {#ux} + +En plus des nouveautés, nous avons travaillé sur l’ergonomie : +- Un captcha plus intelligent et mieux intégré. +- Une détection automatique des erreurs de permissions. +- Des messages plus clairs et uniformisés. + +### Mise à jour du site web et de la documentation {#web} + +En plus des améliorations du bot, nous avons également mis à jour **le site web et la documentation** pour rendre l'accès aux informations plus clair et structuré. N'hésitez pas à y jeter un œil ! + + +## 🔎 Et après ? {#next} + +Cette mise à jour est une première étape vers une version encore plus complète de RaidProtect. D'autres améliorations sont en cours de réflexion et nous avons hâte de vous en dire plus ! + +Pour connaître les prochaines évolutions prévues, jetez un œil à notre roadmap. + +:::tip Rejoignez la conversation ! +Vous voulez suivre l’évolution de RaidProtect en temps réel, donner votre avis sur les futures fonctionnalités ou simplement discuter avec la communauté ? Rejoignez notre serveur Discord ! +::: + +--- + +## ❤️ Merci pour votre patience (vraiment) {#thanks} + +On le sait, cette mise à jour s’est fait attendre. Merci à tous ceux qui nous ont soutenus et attendus patiemment (ou pas 😆). + Encore merci à tous ceux qui ont partagé leurs idées et suggestions, elles nous ont été précieuses pour façonner cette mise à jour ! Continuez à nous faire part de vos retours et on promet d’être plus rapides la prochaine fois (enfin, on va essayer). \ No newline at end of file diff --git a/blog/3.1.1/3.1.1-tag-role.md b/blog/3.1.1/3.1.1-tag-role.md index 24129b5..e6abcbb 100644 --- a/blog/3.1.1/3.1.1-tag-role.md +++ b/blog/3.1.1/3.1.1-tag-role.md @@ -24,7 +24,7 @@ Cette fonctionnalité permet notamment de : 💡 **Fonctionnement :** Dès qu’un utilisateur ajoute le **tag de guild** à son profil, le bot RaidProtect lui attribue automatiquement le rôle défini dans votre configuration. Et inversement, si le tag est retiré, le rôle l’est aussi. -➡️ Plus de détails dans [notre documentation](/features/tag-role). +➡️ Plus de détails dans [notre documentation](/docs/features/tag-role). --- @@ -32,7 +32,7 @@ Dès qu’un utilisateur ajoute le **tag de guild** à son profil, le bot RaidPr En plus du **rôle Discord guild tag**, cette version introduit d’autres améliorations importantes : -- **Nouvelle commande de modération [`/timeout`](/features/moderation#timeout)** +- **Nouvelle commande de modération [`/timeout`](/docs/features/moderation#timeout)** Permet d'exclure un membre sans avoir à le bannir, pour mieux gérer les comportements inappropriés temporaires. La commande vous permet de choisir une durée plus précise et plus longue (28 jours maximum) que ce que permet Discord par défaut. - **Suivi automatique des mises à jour** @@ -40,7 +40,7 @@ En plus du **rôle Discord guild tag**, cette version introduit d’autres amél - **Optimisations et corrections diverses** De nombreuses améliorations internes ont été apportées pour garantir performance et stabilité. - ➕ Consultez le [changelog complet](/changelog#3-1-1) pour tous les détails. + ➕ Consultez le [changelog complet](/docs/changelog#3-1-1) pour tous les détails. --- diff --git a/blog/3.2.0/3.2.0-protection-update.md b/blog/3.2.0/3.2.0-protection-update.md index 0c8cdff..ee4cc01 100644 --- a/blog/3.2.0/3.2.0-protection-update.md +++ b/blog/3.2.0/3.2.0-protection-update.md @@ -15,7 +15,7 @@ La version 3.2.0 marque une étape majeure pour la sécurité de votre communaut ## 🛡️ Fini le scam par message privé ! {#new} -Protégez vos membres en bloquant automatiquement la réception de messages privés avec la [Fermeture des MP](/features/dm-lock). Cas d’usage typiques : +Protégez vos membres en bloquant automatiquement la réception de messages privés avec la [Fermeture des MP](/docs/features/dm-lock). Cas d’usage typiques : - Les vagues de spams automatisés lors d’événements (lancements, concours, périodes de forte affluence). - Les tentatives de scam ciblant les membres, en particulier sur les serveurs publics à fort trafic. @@ -28,16 +28,16 @@ Tout cela de façon automatisée, sans risque d’oubli manuel, assurant une pro ## ✨ Autres nouveautés de la 3.2.0 {#changelog} -- **Choix des [sanctions anti-spam](/features/anti-spam#triggers)** : Définissez précisément comment RaidProtect réagit face aux différents types de spams (kick, ban...), pour une modération parfaitement adaptée à votre communauté. -- **Nouvelles [logs d’anti-spam](/features/anti-spam#logs)** : Plus de visibilité sur ce qui est détecté et quand, pour garder le contrôle en un coup d’œil. -- **[Âge minimum](/features/raid-mode#minage) du compte sans captcha** : Filtrez directement les nouveaux membres trop récents, même si le captcha n’est pas activé. -- **Commande [`/bypass minage`](/features/raid-mode#bypass-minage)** : Admettez manuellement un membre qui n’a pas l’âge de compte requis, pratique pour les cas exceptionnels. -- **Refonte complète de [`/userinfo`](/features/utilities#userinfo)** : Interface améliorée, informations complètes et plus claires. +- **Choix des [sanctions anti-spam](/docs/features/anti-spam#triggers)** : Définissez précisément comment RaidProtect réagit face aux différents types de spams (kick, ban...), pour une modération parfaitement adaptée à votre communauté. +- **Nouvelles [logs d’anti-spam](/docs/features/anti-spam#logs)** : Plus de visibilité sur ce qui est détecté et quand, pour garder le contrôle en un coup d’œil. +- **[Âge minimum](/docs/features/raid-mode#minage) du compte sans captcha** : Filtrez directement les nouveaux membres trop récents, même si le captcha n’est pas activé. +- **Commande [`/bypass minage`](/docs/features/raid-mode#bypass-minage)** : Admettez manuellement un membre qui n’a pas l’âge de compte requis, pratique pour les cas exceptionnels. +- **Refonte complète de [`/userinfo`](/docs/features/utilities#userinfo)** : Interface améliorée, informations complètes et plus claires. - **Logs de configuration** : Traçabilité accrue à chaque changement majeur sur la configuration du bot. --- -Pour la liste exhaustive des nouveautés, correctifs et détails techniques, consultez [le changelog](/changelog#3-2-0). +Pour la liste exhaustive des nouveautés, correctifs et détails techniques, consultez [le changelog](/docs/changelog#3-2-0). :::tip 📚 Ressources utiles - 🔗 [Ajouter RaidProtect à votre serveur](https://raidprotect.bot/invite) diff --git a/blog/3.2.1/3.2.1-discord-sanctions.md b/blog/3.2.1/3.2.1-discord-sanctions.md index 480d71a..42f1449 100644 --- a/blog/3.2.1/3.2.1-discord-sanctions.md +++ b/blog/3.2.1/3.2.1-discord-sanctions.md @@ -15,7 +15,7 @@ La version **3.2.1** de RaidProtect met l’accent sur la **modération au quoti ## ⚖️ Visualiser les sanctions émises par Discord {#new} -Grande nouveauté de cette mise à jour : la [commande `/ds`](/features/utilities#discord-sanctions). Elle vous permet de consulter directement les **sanctions officielles émises par Discord** à l’encontre d’un utilisateur. +Grande nouveauté de cette mise à jour : la [commande `/ds`](/docs/features/utilities#discord-sanctions). Elle vous permet de consulter directement les **sanctions officielles émises par Discord** à l’encontre d’un utilisateur. ### 📋 Ce que vous pouvez voir @@ -30,7 +30,7 @@ Grande nouveauté de cette mise à jour : la [commande `/ds`](/features/utiliti L’anti-spam bénéficie de deux évolutions majeures : - Blocage du **spam de Commandes Slash**, souvent utilisé pour perturber les salons. -- Nouveau déclencheur dédié : le [**spam de commandes externes**](/features/anti-spam#triggers). +- Nouveau déclencheur dédié : le [**spam de commandes externes**](/docs/features/anti-spam#triggers). Ces ajouts permettent d’anticiper de nouvelles formes d’abus et d’assurer une expérience plus fluide à vos membres. @@ -40,15 +40,15 @@ Ces ajouts permettent d’anticiper de nouvelles formes d’abus et d’assurer Cette mise à jour introduit plusieurs commandes très attendues pour simplifier la vie de vos équipes de modération : -- **[`/slowmode`](/features/moderation#slowmode)** : activez ou modifiez plus précisément le mode lent d’un salon en un seul geste. -- **[`/unban`](/features/moderation#unban)** : débannir un utilisateur plus rapidement, en précisant une raison. -- **[`/bypass captcha`](/features/captcha#bypass)** : permet d’autoriser manuellement un utilisateur légitime qui échoue au captcha. +- **[`/slowmode`](/docs/features/moderation#slowmode)** : activez ou modifiez plus précisément le mode lent d’un salon en un seul geste. +- **[`/unban`](/docs/features/moderation#unban)** : débannir un utilisateur plus rapidement, en précisant une raison. +- **[`/bypass captcha`](/docs/features/captcha#bypass)** : permet d’autoriser manuellement un utilisateur légitime qui échoue au captcha. -De plus, les commandes [`/lock`](/features/channel-lock#lock) et [`/unlock`](/features/channel-lock#unlock) peuvent désormais inclure une **raison**, améliorant la clarté et le suivi des actions de modération. +De plus, les commandes [`/lock`](/docs/features/channel-lock#lock) et [`/unlock`](/docs/features/channel-lock#unlock) peuvent désormais inclure une **raison**, améliorant la clarté et le suivi des actions de modération. --- -Pour consulter la liste complète et détaillée, rendez-vous sur [le changelog](/changelog#3-2-1). +Pour consulter la liste complète et détaillée, rendez-vous sur [le changelog](/docs/changelog#3-2-1). :::tip 📚 Ressources utiles - 🔗 [Ajouter RaidProtect à votre serveur](https://raidprotect.bot/invite) diff --git a/blog/3.3.0/3.3.0-moderation-update.md b/blog/3.3.0/3.3.0-moderation-update.md index d463b6f..d82b036 100644 --- a/blog/3.3.0/3.3.0-moderation-update.md +++ b/blog/3.3.0/3.3.0-moderation-update.md @@ -15,14 +15,14 @@ La version 3.3.0 refaçonne la gestion des sanctions sur votre serveur Discord a ## 📋 Un historique complet pour chaque sanction {#new} -Gardez une trace de toutes les actions de modération avec le nouvel [Historique des sanctions](/features/sanctions). Plus jamais de doute sur qui a été sanctionné, quand et pourquoi : +Gardez une trace de toutes les actions de modération avec le nouvel [Historique des sanctions](/docs/features/sanctions). Plus jamais de doute sur qui a été sanctionné, quand et pourquoi : - **Centralisation automatique** : Bannissements, expulsions, timeouts et sanctions de l'automod sont automatiquement enregistrés. -- **Recherche avancée** avec [`/sanctions search`](/features/sanctions#search) : Retrouvez instantanément l'historique d'un membre. -- **Détails complets** avec [`/sanctions info`](/features/sanctions#info) : Consultez tous les détails d'une sanction spécifique. -- **Modification flexible** avec [`/sanctions edit`](/features/sanctions#edit) : Corrigez une raison ou ajustez une sanction existante. -- **Suppression ou annulation** avec [`/sanctions delete`](/features/sanctions#delete) : Annulez une sanction ou effacez la de l'historique si nécessaire. -- **[Gestion intelligente des statuts des sanctions](/features/sanctions#status)** +- **Recherche avancée** avec [`/sanctions search`](/docs/features/sanctions#search) : Retrouvez instantanément l'historique d'un membre. +- **Détails complets** avec [`/sanctions info`](/docs/features/sanctions#info) : Consultez tous les détails d'une sanction spécifique. +- **Modification flexible** avec [`/sanctions edit`](/docs/features/sanctions#edit) : Corrigez une raison ou ajustez une sanction existante. +- **Suppression ou annulation** avec [`/sanctions delete`](/docs/features/sanctions#delete) : Annulez une sanction ou effacez la de l'historique si nécessaire. +- **[Gestion intelligente des statuts des sanctions](/docs/features/sanctions#status)** Chaque sanction génère désormais un accusé de réception confirmant si le membre a bien reçu la notification en message privé. @@ -32,9 +32,9 @@ Chaque sanction génère désormais un accusé de réception confirmant si le me Cette mise à jour enrichit également votre arsenal de modération avec trois nouvelles commandes essentielles : -- **[`/tempban`](/features/moderation#tempban)** : Bannissez temporairement un membre pour une durée définie. -- **[`/warn`](/features/moderation#warn)** : Avertissez un membre avec traçabilité complète dans l'historique. -- **[`/untimeout`](/features/moderation#untimeout)** : Retirez un timeout avant son expiration prévue. +- **[`/tempban`](/docs/features/moderation#tempban)** : Bannissez temporairement un membre pour une durée définie. +- **[`/warn`](/docs/features/moderation#warn)** : Avertissez un membre avec traçabilité complète dans l'historique. +- **[`/untimeout`](/docs/features/moderation#untimeout)** : Retirez un timeout avant son expiration prévue. --- @@ -42,22 +42,22 @@ Cette mise à jour enrichit également votre arsenal de modération avec trois n Le système anti-raid gagne en intelligence et en flexibilité : -- **Désactivation automatique** : Le [RaidMode](/features/raid-mode#raid-mode) et l'[Auto RaidMode](/features/raid-mode#duration) se désactivent automatiquement après un certain temps – fini les oublis ! -- **Paramètre de durée** : Définissez directement la durée lors de l'activation avec [`/raidmode`](/features/raid-mode#raid-mode). -- **Nouvelle commande [`/joinlock`](/features/join-lock)** : Fermez les invitations indéfiniment pour un contrôle total sur les nouveaux arrivants. -- **Accusé de réception pour l'[Âge minimum](/features/raid-mode#minage)** : Recevez un accusé de réception confirmant si le membre a bien reçu le message d'explication. +- **Désactivation automatique** : Le [RaidMode](/docs/features/raid-mode#raid-mode) et l'[Auto RaidMode](/docs/features/raid-mode#duration) se désactivent automatiquement après un certain temps – fini les oublis ! +- **Paramètre de durée** : Définissez directement la durée lors de l'activation avec [`/raidmode`](/docs/features/raid-mode#raid-mode). +- **Nouvelle commande [`/joinlock`](/docs/features/join-lock)** : Fermez les invitations indéfiniment pour un contrôle total sur les nouveaux arrivants. +- **Accusé de réception pour l'[Âge minimum](/docs/features/raid-mode#minage)** : Recevez un accusé de réception confirmant si le membre a bien reçu le message d'explication. --- ## ✨ Autres nouveautés de la 3.3.0 {#changelog} - **Logs dédiés aux sanctions** : Configurez un salon spécifique pour centraliser tous les logs de sanctions. -- **[`/channel duplicate`](/features/utilities#channel-duplicate)** : Dupliquez strictement un salon avec tous ses paramètres. +- **[`/channel duplicate`](/docs/features/utilities#channel-duplicate)** : Dupliquez strictement un salon avec tous ses paramètres. - **Commande `/changelog`** : Consultez le changelog directement depuis Discord, également accessible via `/settings` et `/about`. --- -Pour la liste exhaustive des nouveautés, correctifs et détails techniques, consultez [le changelog](/changelog#3-3-0). +Pour la liste exhaustive des nouveautés, correctifs et détails techniques, consultez [le changelog](/docs/changelog#3-3-0). :::tip 📚 Ressources utiles - 🔗 [Ajouter RaidProtect à votre serveur](https://raidprotect.bot/invite) diff --git a/blog/3.3.1/3.3.1-jail-and-mute.md b/blog/3.3.1/3.3.1-jail-and-mute.md index efeec9e..88610a5 100644 --- a/blog/3.3.1/3.3.1-jail-and-mute.md +++ b/blog/3.3.1/3.3.1-jail-and-mute.md @@ -15,11 +15,11 @@ La version 3.3.1 offre plus de granularité dans la modération avec la **Jail** ## 🔒 Nouvelle sanction "Jail" {#jail} -Isolez un membre perturbateur sans le bannir grâce au nouveau système de [Jail "Prison"](/features/sanctions#jail). Le membre est confiné dans un salon dédié, sans accès au reste du serveur : +Isolez un membre perturbateur sans le bannir grâce au nouveau système de [Jail "Prison"](/docs/features/sanctions#jail). Le membre est confiné dans un salon dédié, sans accès au reste du serveur : -- **[`/jail`](/features/moderation#jail)** : Emprisonnez un membre immédiatement. -- **[`/tempjail`](/features/moderation#tempjail)** : Emprisonnez temporairement un membre pour une durée définie. -- **[`/unjail`](/features/moderation#unjail)** : Libérez un membre à tout moment. +- **[`/jail`](/docs/features/moderation#jail)** : Emprisonnez un membre immédiatement. +- **[`/tempjail`](/docs/features/moderation#tempjail)** : Emprisonnez temporairement un membre pour une durée définie. +- **[`/unjail`](/docs/features/moderation#unjail)** : Libérez un membre à tout moment. - **Configuration flexible** : Définissez le rôle Jail et le salon d'information directement via `/settings`. La Jail permet de gérer les situations délicates tout en laissant la possibilité d'échanger avec le membre concerné avant de prendre une décision définitive. @@ -30,10 +30,10 @@ La Jail permet de gérer les situations délicates tout en laissant la possibili Le timeout Discord est pratique, mais contraignant : il **bloque toutes les interactions** du membre, y compris les boutons et les menus. Impossible pour un membre en timeout de consulter ses sanctions, d'ouvrir un ticket ou d'interagir avec le moindre élément du serveur. Et sa durée est limitée à 28 jours. -Le nouveau [Mute par rôle](/features/sanctions#mute) résout ces problèmes : +Le nouveau [Mute par rôle](/docs/features/sanctions#mute) résout ces problèmes : -- Au-delà d'un [seuil configurable](/features/sanctions#mute-threshold), le bot attribue automatiquement un **rôle Mute** au lieu du timeout Discord. Le membre ne peut plus écrire, mais conserve la possibilité d'utiliser les boutons et menus. -- Les commandes `/timeout` et `/untimeout` deviennent [`/mute`](/features/moderation#timeout) et [`/unmute`](/features/moderation#untimeout) avec un fonctionnement intelligent : **en dessous du seuil, le timeout Discord classique est utilisé**. +- Au-delà d'un [seuil configurable](/docs/features/sanctions#mute-threshold), le bot attribue automatiquement un **rôle Mute** au lieu du timeout Discord. Le membre ne peut plus écrire, mais conserve la possibilité d'utiliser les boutons et menus. +- Les commandes `/timeout` et `/untimeout` deviennent [`/mute`](/docs/features/moderation#timeout) et [`/unmute`](/docs/features/moderation#untimeout) avec un fonctionnement intelligent : **en dessous du seuil, le timeout Discord classique est utilisé**. - Nouveau paramètre `[force_timeout]` pour forcer le timeout Discord quelle que soit la durée. --- @@ -42,17 +42,17 @@ Le nouveau [Mute par rôle](/features/sanctions#mute) résout ces problèmes : Cette mise à jour apporte de nouveaux outils pour le quotidien de vos modérateurs et de vos membres : -- **[Menu contextuel](/features/moderation#context-menu)** : Sanctionnez un membre d'un simple clic droit sur son profil, sans taper de commande. -- **[`/my-sanctions`](/features/utilities#my-sanctions)** : Permettez à vos membres de consulter leurs propres sanctions, avec un [paramètre de confidentialité](/features/sanctions#sanctions-privacy) pour en contrôler l'accès. -- **[Affichage des médias](/features/sanctions#show-medias)** dans les raisons de sanctions : les preuves visuelles sont directement visibles. -- **Refonte des filtres** dans [`/sanctions search`](/features/sanctions#search) avec un nouveau filtre par [type de modérateur](/features/sanctions#search). -- **[Import / Export](/features/sanctions#import-export)** des sanctions via le bot support. +- **[Menu contextuel](/docs/features/moderation#context-menu)** : Sanctionnez un membre d'un simple clic droit sur son profil, sans taper de commande. +- **[`/my-sanctions`](/docs/features/utilities#my-sanctions)** : Permettez à vos membres de consulter leurs propres sanctions, avec un [paramètre de confidentialité](/docs/features/sanctions#sanctions-privacy) pour en contrôler l'accès. +- **[Affichage des médias](/docs/features/sanctions#show-medias)** dans les raisons de sanctions : les preuves visuelles sont directement visibles. +- **Refonte des filtres** dans [`/sanctions search`](/docs/features/sanctions#search) avec un nouveau filtre par [type de modérateur](/docs/features/sanctions#search). +- **[Import / Export](/docs/features/sanctions#import-export)** des sanctions via le bot support. --- ## 🌍 RaidProtect parle 3 nouvelles langues {#i18n} -Le bot et sa documentation sont désormais disponibles en **[5 langues](/language)** : +Le bot et sa documentation sont désormais disponibles en **[5 langues](/docs/language)** : - Allemand - Espagnol @@ -65,15 +65,15 @@ Ces langues viennent s'ajouter au français et à l'anglais déjà disponibles. ## ✨ Autres nouveautés de la 3.3.1 {#changelog} - **[Panneaux d'information](/features/display)** : Affichez des panneaux d'information dans vos salons avec `/display public`. RaidProtect génère des messages traduits dans toutes les langues supportées par Discord pour expliquer son fonctionnement à vos membres : signalements, accès aux sanctions, prison... -- **[Blocage de membres](/features/utilities#block)** : Bloquez l'accès de certains membres à des fonctionnalités spécifiques de RaidProtect avec [`/block add`](/features/utilities#block-add), [`/block remove`](/features/utilities#block-remove) et [`/block list`](/features/utilities#block-list). -- **[`/prune`](/features/utilities#prune)** : Congédiez les membres inactifs avec des conditions plus précises. -- **[`/channel clear`](/features/utilities#channel-clear)** : Supprimez et recréez un salon en une commande. +- **[Blocage de membres](/docs/features/utilities#block)** : Bloquez l'accès de certains membres à des fonctionnalités spécifiques de RaidProtect avec [`/block add`](/docs/features/utilities#block-add), [`/block remove`](/docs/features/utilities#block-remove) et [`/block list`](/docs/features/utilities#block-list). +- **[`/prune`](/docs/features/utilities#prune)** : Congédiez les membres inactifs avec des conditions plus précises. +- **[`/channel clear`](/docs/features/utilities#channel-clear)** : Supprimez et recréez un salon en une commande. - **Logs pour `/bypass`** : Traçabilité complète des commandes `/bypass`. - **Anti-Scam** : Nouveau module de détection des tentatives de scam. --- -Pour la liste exhaustive des nouveautés, correctifs et détails techniques, consultez [le changelog](/changelog#3-3-1). +Pour la liste exhaustive des nouveautés, correctifs et détails techniques, consultez [le changelog](/docs/changelog#3-3-1). :::tip 📚 Ressources utiles - 🔗 [Ajouter RaidProtect à votre serveur](https://raidprotect.bot/invite) diff --git a/blog/3.3.1/scamlens-early-activation.mdx b/blog/3.3.1/scamlens-early-activation.mdx index 909d854..e6e1c8a 100644 --- a/blog/3.3.1/scamlens-early-activation.mdx +++ b/blog/3.3.1/scamlens-early-activation.mdx @@ -56,7 +56,7 @@ Pour des raisons de sécurité, nous ne communiquons et ne communiquerons pas su Il suffit d'[ajouter RaidProtect](https://raidprotect.bot/invite). ScamLens détectera et supprimera automatiquement les images frauduleuses. #### Comment empêcher les bots de spam sur mon serveur Discord ? {#anti-spam-bots} -En plus de ScamLens, activez le [captcha](/features/captcha) de RaidProtect pour empêcher les comptes automatisés de rejoindre votre serveur. +En plus de ScamLens, activez le [captcha](/docs/features/captcha) de RaidProtect pour empêcher les comptes automatisés de rejoindre votre serveur. --- diff --git a/blog/3.3.2/3.3.2-authentication-manager.md b/blog/3.3.2/3.3.2-authentication-manager.md index 53134aa..deb6fc8 100644 --- a/blog/3.3.2/3.3.2-authentication-manager.md +++ b/blog/3.3.2/3.3.2-authentication-manager.md @@ -23,7 +23,7 @@ Un seul salon supprimé par le hack d'un compte admin, c'est déjà trop. ## 🔐 La solution : l'Authentication Manager {#solution} -Avec l'[Authentication Manager](/features/authentication-manager) (AM), les rôles à permissions sensibles ne sont plus attribués en permanence, ils sont attribués uniquement après une couche supplémentaire d'authentification. Combiné à des sessions temporaires qui expirent automatiquement, la fenêtre d'exposition est drastiquement réduite : les rôles sont retirés automatiquement à la fin de la session. +Avec l'[Authentication Manager](/docs/features/authentication-manager) (AM), les rôles à permissions sensibles ne sont plus attribués en permanence, ils sont attribués uniquement après une couche supplémentaire d'authentification. Combiné à des sessions temporaires qui expirent automatiquement, la fenêtre d'exposition est drastiquement réduite : les rôles sont retirés automatiquement à la fin de la session. Même si un attaquant vole un compte Discord, il ne peut pas utiliser les permissions destructives du serveur : le rôle n'est tout simplement pas là, et l'obtenir nécessite une authentification qu'il ne possède pas. @@ -31,7 +31,7 @@ Même si un attaquant vole un compte Discord, il ne peut pas utiliser les permis ## ✨ Ce que ça inclut {#features} -### 🛡️ [4 méthodes d'authentification](/features/authentication-manager#methods) +### 🛡️ [4 méthodes d'authentification](/docs/features/authentication-manager#methods) | **Méthode** | **Description** | **Grade** | | --- | --- | --- | @@ -40,29 +40,29 @@ Même si un attaquant vole un compte Discord, il ne peut pas utiliser les permis | OTP (2FA) | Code à 6 chiffres temporaires via Google Authenticator, Authy, 1Password... | A | | Passkey (WebAuthn) | Empreinte digitale, reconnaissance faciale ou clé physique (YubiKey) | S | -### 🔑 [Grades de sécurité](/features/authentication-manager#grades) +### 🔑 [Grades de sécurité](/docs/features/authentication-manager#grades) Chaque méthode correspond à un grade (E à S). Vous choisissez le grade minimum requis par rôle : un accès interne peut se contenter d'un PIN, un rôle admin exigera une passkey. -### ⏱️ [Sessions temporaires](/features/authentication-manager#sessions) +### ⏱️ [Sessions temporaires](/docs/features/authentication-manager#sessions) Les rôles ne sont plus permanents. Chaque authentification ouvre une session à durée limitée (configurable jusqu'à 8 heures). À l'expiration, le rôle est retiré automatiquement. -### ⚙️ [Système de managers](/features/authentication-manager#users-tab) +### ⚙️ [Système de managers](/docs/features/authentication-manager#users-tab) Donnez des permissions admin à un membre sans qu'il puisse toucher au système d'authentification. Les managers doivent eux-mêmes s'authentifier et ne peuvent gérer que les rôles inférieurs à leur plafond, ce qui empêche la création de backdoors et l'élévation de privilèges. -### 📋 [Logs d'audit et sessions](/features/authentication-manager#logs-tab) +### 📋 [Logs d'audit et sessions](/docs/features/authentication-manager#logs-tab) Chaque authentification, attribution de rôle et action est enregistrée directement dans le bot. Contrairement aux logs Discord, personne ne peut les supprimer : même un admin compromis ne peut pas effacer ses traces. -### 🚫 [Protection anti brute-force](/features/authentication-manager#auth-security) +### 🚫 [Protection anti brute-force](/docs/features/authentication-manager#auth-security) 5 échecs : verrouillage d'une heure. 10 échecs : réinitialisation complète du compte. --- -Pour la liste complète des nouveautés de la 3.3.2, consultez [le changelog](/changelog#3-3-2). +Pour la liste complète des nouveautés de la 3.3.2, consultez [le changelog](/docs/changelog#3-3-2). :::tip Ressources utiles - [Ajouter RaidProtect à votre serveur](https://raidprotect.bot/invite) diff --git a/blog/3.3.2/premium-launch.md b/blog/3.3.2/premium-launch.md index 40e81b0..1eb5174 100644 --- a/blog/3.3.2/premium-launch.md +++ b/blog/3.3.2/premium-launch.md @@ -39,11 +39,11 @@ Utilisez `/settings` sur votre serveur Discord et cliquez sur "Premium" ou rende ## ✨ Ce que le Premium offre aujourd'hui {#features} -### 🏷️ [Noms de sanctions personnalisables](/features/sanctions#custom-names) +### 🏷️ [Noms de sanctions personnalisables](/docs/features/sanctions#custom-names) Renommez chaque type de sanction pour correspondre au vocabulaire de votre serveur. Le nom affiché, le verbe utilisé dans les messages et la formulation du message privé envoyé au membre sanctionné sont tous configurables librement. -### 🔐 [Authentication Manager : limites étendues](/features/authentication-manager) +### 🔐 [Authentication Manager : limites étendues](/docs/features/authentication-manager) En version gratuite, l'Authentication Manager est limité à 3 rôles protégés, 20 utilisateurs et des sessions de 8 heures maximum. Le Premium repousse ces plafonds : @@ -53,7 +53,7 @@ En version gratuite, l'Authentication Manager est limité à 3 rôles protégés | Utilisateurs | 20 | 50 | | Durée de session max. | 8h | 24h | -### 📋 [Panneaux d'informatio : limites étendues](/features/display) +### 📋 [Panneaux d'informatio : limites étendues](/docs/features/display) Passez de 2 à 4 panneaux d'information publics (+ le slot réservé au Jail), pour couvrir davantage de contenu sur votre serveur. @@ -63,7 +63,7 @@ Accédez en avant-première à certaines fonctionnalités expérimentales avant --- -Pour la liste complète des nouveautés, consultez [le changelog](/changelog). +Pour la liste complète des nouveautés, consultez [le changelog](/docs/changelog). :::tip Ressources utiles - [Ajouter RaidProtect à votre serveur](https://raidprotect.bot/invite) diff --git a/blog/3.3.3/3.3.3-modview.md b/blog/3.3.3/3.3.3-modview.md index 0d743cc..4cc15f9 100644 --- a/blog/3.3.3/3.3.3-modview.md +++ b/blog/3.3.3/3.3.3-modview.md @@ -15,18 +15,18 @@ La version 3.3.3 complète la **boîte à outils du modérateur** : une nouvelle ## 🔍 ModView : tout sur un membre, en une commande {#modview} -Plus besoin de jongler entre plusieurs commandes pour comprendre la situation d’un membre. La nouvelle commande [`/modview`](/features/moderation#modview) ouvre une **vue de modération centralisée** : un récap complet du membre, et toutes les actions rapides accessibles directement. +Plus besoin de jongler entre plusieurs commandes pour comprendre la situation d’un membre. La nouvelle commande [`/modview`](/docs/features/moderation#modview) ouvre une **vue de modération centralisée** : un récap complet du membre, et toutes les actions rapides accessibles directement. -- L’**[historique de ses sanctions](/features/sanctions)**, avec les statuts à jour. -- La **[note de modération interne](/features/moderation#note)** partagée par le staff. -- Son **[dernier message supprimé](/features/moderation#snipe)** sur la dernière heure, s’il y en a un. +- L’**[historique de ses sanctions](/docs/features/sanctions)**, avec les statuts à jour. +- La **[note de modération interne](/docs/features/moderation#note)** partagée par le staff. +- Son **[dernier message supprimé](/docs/features/moderation#snipe)** sur la dernière heure, s’il y en a un. Et surtout, **les actions rapides** : sanctionnez directement le membre depuis la vue (ban, kick, mute, jail, warn…) ou modifiez sa note, sans avoir à retaper une commande ni à changer de fenêtre. Deux commandes complémentaires arrivent avec la ModView : -- **[`/note`](/features/moderation#note)** : ajoutez une note privée à un membre, visible uniquement par le staff. Idéal pour transmettre du contexte entre modérateurs sans encombrer l’historique des sanctions. -- **[`/snipe`](/features/moderation#snipe)** : récupérez les derniers messages supprimés d’un salon ou d’un membre sur la dernière heure. +- **[`/note`](/docs/features/moderation#note)** : ajoutez une note privée à un membre, visible uniquement par le staff. Idéal pour transmettre du contexte entre modérateurs sans encombrer l’historique des sanctions. +- **[`/snipe`](/docs/features/moderation#snipe)** : récupérez les derniers messages supprimés d’un salon ou d’un membre sur la dernière heure. :::tip La ModView est aussi accessible via le menu contextuel : clic droit sur un profil → **Applications** → **Ouvrir Modview**. @@ -38,28 +38,28 @@ La ModView est aussi accessible via le menu contextuel : clic droit sur un profi Plusieurs ajouts viennent affiner la gestion quotidienne des sanctions : -- **Nouvelle commande [`/softban`](/features/moderation#softban)** : bannit puis débannit un membre. Ses messages sont supprimés, mais il peut revenir. Parfait pour faire le ménage après un compte piraté. -- **[Option `silent`](/features/moderation)** sur toutes les commandes de sanction : empêche RaidProtect d’envoyer un message privé à la cible, quand vous voulez gérer la situation à part. -- **[Paramètre `delete-messages`](/features/moderation#ban)** sur `/ban` et `/tempban` : choisissez directement la durée d’historique à supprimer au moment du bannissement. -- **[Mode « Remplacer par le rôle Jail »](/features/sanctions#jail-roles)** : la sanction Jail peut désormais retirer tous les rôles du membre pendant l’emprisonnement et les restaurer automatiquement à sa libération. -- **Conversion AutoMod → mute par rôle** *(beta publique Premium)* : les timeouts appliqués par l’AutoMod de Discord au-delà du [seuil configuré](/features/sanctions#mute-threshold) sont automatiquement convertis en [mute par rôle](/features/sanctions#mute), pour une cohérence totale avec le système de RaidProtect. +- **Nouvelle commande [`/softban`](/docs/features/moderation#softban)** : bannit puis débannit un membre. Ses messages sont supprimés, mais il peut revenir. Parfait pour faire le ménage après un compte piraté. +- **[Option `silent`](/docs/features/moderation)** sur toutes les commandes de sanction : empêche RaidProtect d’envoyer un message privé à la cible, quand vous voulez gérer la situation à part. +- **[Paramètre `delete-messages`](/docs/features/moderation#ban)** sur `/ban` et `/tempban` : choisissez directement la durée d’historique à supprimer au moment du bannissement. +- **[Mode « Remplacer par le rôle Jail »](/docs/features/sanctions#jail-roles)** : la sanction Jail peut désormais retirer tous les rôles du membre pendant l’emprisonnement et les restaurer automatiquement à sa libération. +- **Conversion AutoMod → mute par rôle** *(beta publique Premium)* : les timeouts appliqués par l’AutoMod de Discord au-delà du [seuil configuré](/docs/features/sanctions#mute-threshold) sont automatiquement convertis en [mute par rôle](/docs/features/sanctions#mute), pour une cohérence totale avec le système de RaidProtect. -D’autres améliorations plus discrètes : meilleur **suivi de l’accusé de réception** des MP de sanction (reçu, MP fermés, expiré, silent), **bouton d’invitation au serveur** dans les MP de notification après un kick, softban ou ban temporaire, possibilité d’**ajouter une raison à `/sanctions delete`**, et de **[désactiver complètement les sanctions](/features/sanctions#disable)** sur un serveur. +D’autres améliorations plus discrètes : meilleur **suivi de l’accusé de réception** des MP de sanction (reçu, MP fermés, expiré, silent), **bouton d’invitation au serveur** dans les MP de notification après un kick, softban ou ban temporaire, possibilité d’**ajouter une raison à `/sanctions delete`**, et de **[désactiver complètement les sanctions](/docs/features/sanctions#disable)** sur un serveur. --- ## ✨ Autres nouveautés {#other} - **Personnalisation du profil de RaidProtect** *(Premium)* : avatar, bannière et style d’écriture du pseudo, pour que le bot s’intègre à l’identité visuelle de votre serveur. -- **[Durée pour les sanctions de l'anti-spam](/features/anti-spam#duration)** : choisissez une durée pour toutes les sanctions appliquées par l’anti-spam. +- **[Durée pour les sanctions de l'anti-spam](/docs/features/anti-spam#duration)** : choisissez une durée pour toutes les sanctions appliquées par l’anti-spam. - **Nouveau parsing des commandes par messages** : interprétation plus stricte et cohérente avec les slash commands. -- **[Fermeture automatique des MP](/features/raid-mode#close-dm)** à l’activation de l’auto raid mode, pour couper court aux vagues de DM hostiles pendant un raid. +- **[Fermeture automatique des MP](/docs/features/raid-mode#close-dm)** à l’activation de l’auto raid mode, pour couper court aux vagues de DM hostiles pendant un raid. - **Autocomplete dans les paramètres `duration`** des slash commands. -- **Paramètre `[duration]`** sur [`/lock`](/features/channel-lock#lock-duration) et [`/slowmode`](/features/moderation#slowmode) pour appliquer la modification temporairement, sans avoir à revenir la lever à la main. +- **Paramètre `[duration]`** sur [`/lock`](/docs/features/channel-lock#lock-duration) et [`/slowmode`](/docs/features/moderation#slowmode) pour appliquer la modification temporairement, sans avoir à revenir la lever à la main. --- -Pour la liste exhaustive des nouveautés, correctifs et détails techniques, consultez [le changelog](/changelog#3-3-3). +Pour la liste exhaustive des nouveautés, correctifs et détails techniques, consultez [le changelog](/docs/changelog#3-3-3). :::tip 📚 Ressources utiles - 🔗 [Ajouter RaidProtect à votre serveur](https://raidprotect.bot/invite) diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 41b7c53..b683829 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -23,7 +23,7 @@ export default async function createConfigAsync() { title: 'RaidProtect', tagline: 'Sécurisez votre serveur Discord', favicon: 'img/favicon.ico', - url: 'https://docs.raidprotect.bot', + url: 'https://raidprotect.bot', baseUrl: '/', organizationName: 'rapidprotect', projectName: 'raidprotect', @@ -63,11 +63,11 @@ export default async function createConfigAsync() { customFields: { urls: { main: { - fr: 'https://raidprotect.bot', - en: 'https://raidprotect.bot/en', - de: 'https://raidprotect.bot/de', - es: 'https://raidprotect.bot/es', - pt: 'https://raidprotect.bot/pt' + fr: '/', + en: '/en/', + de: '/de/', + es: '/es/', + pt: '/pt/' }, legal: { fr: 'https://raidprotect.bot/legal', @@ -114,11 +114,11 @@ export default async function createConfigAsync() { pt: 'RaidProtect é um bot do Discord que protege seu servidor de usuários maliciosos graças ao seu anti-spam e captcha. E justo lá, um pequeno gerânio. ' }, announcementBar: { - fr: 'La mise à jour Vue de modération centralisée (3.3.3) est disponible !', - en: 'The Centralized Moderation View (3.3.3) update is now live!', - de: 'Das Update Zentrale Moderationsansicht (3.3.3) ist jetzt verfügbar!', - es: '¡La actualización Vista de moderación centralizada (3.3.3) ya está disponible!', - pt: 'A atualização Vista de moderação centralizada (3.3.3) já está disponível!' + fr: 'La mise à jour Vue de modération centralisée (3.3.3) est disponible !', + en: 'The Centralized Moderation View (3.3.3) update is now live!', + de: 'Das Update Zentrale Moderationsansicht (3.3.3) ist jetzt verfügbar!', + es: '¡La actualización Vista de moderación centralizada (3.3.3) ya está disponible!', + pt: 'A atualização Vista de moderação centralizada (3.3.3) já está disponível!' } }, excludedCanonical: [] @@ -148,7 +148,7 @@ export default async function createConfigAsync() { 'classic', { docs: { - routeBasePath: '/', + routeBasePath: '/docs', sidebarPath: './sidebars.ts', editUrl: 'https://github.com/raidprotect/docs/tree/master/', lastVersion: lastStableVersion, @@ -183,7 +183,11 @@ export default async function createConfigAsync() { blogSidebarTitle: 'Blog', routeBasePath: '/blog' }, - pages: false, + pages: { + path: 'src/pages', + routeBasePath: '/', + include: ['**/*.{js,jsx,ts,tsx,md,mdx}'], + }, sitemap: { lastmod: 'date', ignorePatterns: ['**/beta/**'], @@ -193,7 +197,7 @@ export default async function createConfigAsync() { const items = await params.defaultCreateSitemapItems(params) return items.map(i => ({ ...i, - priority: urlPriorities[i.url.replace(new RegExp('https://docs.raidprotect.bot/(en/)?'), '')] ?? 0.5 + priority: urlPriorities[i.url.replace(new RegExp('https://raidprotect.bot/(en/|de/|es/|pt/)?docs/'), '')] ?? 0.5 })) }, }, @@ -215,9 +219,9 @@ export default async function createConfigAsync() { { "@type": "Organization", "@id": "https://raidprotect.bot/#organization" }, { "@type": "WebSite", - "@id": "https://docs.raidprotect.bot/#website", - "url": "https://docs.raidprotect.bot/", - "name": "RaidProtect Docs", + "@id": "https://raidprotect.bot/#website", + "url": "https://raidprotect.bot/", + "name": "RaidProtect", "publisher": { "@id": "https://raidprotect.bot/#organization" }, "inLanguage": ["fr", "en", "de", "es", "pt"] } @@ -238,7 +242,7 @@ export default async function createConfigAsync() { }, announcementBar: { id: '3.3.3', - content: 'The Centralized Moderation View (3.3.3) update is now live!', + content: 'The Centralized Moderation View (3.3.3) update is now live!', backgroundColor: '#BD5454', textColor: '#FFFFFF', isCloseable: false diff --git a/i18n/de/docusaurus-plugin-content-blog/3.1.0/3.1.0-interactions-update.md b/i18n/de/docusaurus-plugin-content-blog/3.1.0/3.1.0-interactions-update.md index aa1be13..b3ce499 100644 --- a/i18n/de/docusaurus-plugin-content-blog/3.1.0/3.1.0-interactions-update.md +++ b/i18n/de/docusaurus-plugin-content-blog/3.1.0/3.1.0-interactions-update.md @@ -17,7 +17,7 @@ Es ist schon eine Weile her, seit wir das letzte große Update für RaidProtect Dieses Update stellt einen Wendepunkt für RaidProtect dar und legt den Fokus auf **Interaktion und Benutzerfreundlichkeit**, insbesondere durch die Einführung von **Slash‑Befehlen** und ein **überarbeitetes Konfigurationssystem**. -Außerdem haben wir euer Feedback und eure Ideen umgesetzt und viele gewünschte Funktionen eingebaut! Im [Changelog](/changelog) könnt ihr nachlesen, welche Vorschläge übernommen wurden. +Außerdem haben wir euer Feedback und eure Ideen umgesetzt und viele gewünschte Funktionen eingebaut! Im [Changelog](/docs/changelog) könnt ihr nachlesen, welche Vorschläge übernommen wurden. ### Slash‑Befehle {#slash-commands} @@ -27,7 +27,7 @@ Keine Sorge für alle, die Textbefehle gewohnt sind – sie bleiben weiterhin ve ### Internationalisierung (RP wird zweisprachig) {#internationalization} -Wir haben den Grundstein für ein [**mehrsprachiges System**](/language) gelegt und Englisch als zweite offizielle Sprache hinzugefügt! Weitere Sprachen folgen. +Wir haben den Grundstein für ein [**mehrsprachiges System**](/docs/language) gelegt und Englisch als zweite offizielle Sprache hinzugefügt! Weitere Sprachen folgen. ### Ein Reporting‑Befehl {#report} @@ -38,8 +38,8 @@ Eine oft gewünschte Funktion: [**ein Meldesystem**](/features/reports), mit dem ### Neue Konfigurationsbefehle {#configuration} Wir wissen, dass die Einrichtung eines Bots schnell zur Herausforderung werden kann; deshalb haben wir es deutlich vereinfacht: -- **Ein interaktives Panel mit [`/settings`](/setup#settings)**, um RaidProtect im Blick zu behalten. -- **Ein komplett neues [`/setup`](/setup#install)**, das euch schon bei der Installation begleitet. +- **Ein interaktives Panel mit [`/settings`](/docs/setup#settings)**, um RaidProtect im Blick zu behalten. +- **Ein komplett neues [`/setup`](/docs/setup#install)**, das euch schon bei der Installation begleitet. - **Flexiblere Optionen** für eine fein abgestimmte Konfiguration. ![Screenshot of the configuration menu](../../../en/docusaurus-plugin-content-blog/3.1.0/assets/rp-configuration-menu.webp) diff --git a/i18n/de/docusaurus-plugin-content-blog/3.1.1/3.1.1-tag-role.md b/i18n/de/docusaurus-plugin-content-blog/3.1.1/3.1.1-tag-role.md index bbbf5c6..6f36f2c 100644 --- a/i18n/de/docusaurus-plugin-content-blog/3.1.1/3.1.1-tag-role.md +++ b/i18n/de/docusaurus-plugin-content-blog/3.1.1/3.1.1-tag-role.md @@ -24,7 +24,7 @@ Diese Funktion ermöglicht es dir: 💡 **So funktioniert's:** Sobald ein Nutzer den **Server-Tag** zu seinem Profil hinzufügt, weist RaidProtect automatisch die konfigurierte Rolle zu. Entfernt er den Tag, wird die Rolle ebenfalls entfernt. -➡️ Mehr Details findest du in [unserer Dokumentation](/features/tag-role). +➡️ Mehr Details findest du in [unserer Dokumentation](/docs/features/tag-role). --- @@ -32,13 +32,13 @@ Sobald ein Nutzer den **Server-Tag** zu seinem Profil hinzufügt, weist RaidProt Neben der **Tag-Rolle** bringt diese Version weitere wichtige Verbesserungen: -- **Neuer Moderationsbefehl [`/timeout`](/features/moderation#timeout)** +- **Neuer Moderationsbefehl [`/timeout`](/docs/features/moderation#timeout)** Ermöglicht es, ein Mitglied zeitweise auszuschließen, ohne es zu bannen – ideal für kurzfristiges Fehlverhalten. Die Dauer kann genauer und länger (bis zu 28 Tage) gewählt werden als bei den Discord-Standardoptionen. - **Automatische Update-Benachrichtigungen** Erhalte Meldungen direkt im Log-Kanal (Updates, Vorfälle, Fixes). Mehr Reaktionsfähigkeit und Übersicht. - **Diverse Optimierungen und Fehlerbehebungen** Zahlreiche interne Verbesserungen sorgen für mehr Leistung und Stabilität. - ➕ Sieh dir das [vollständige Changelog](/changelog#3-1-1) für alle Details an. + ➕ Sieh dir das [vollständige Changelog](/docs/changelog#3-1-1) für alle Details an. --- diff --git a/i18n/de/docusaurus-plugin-content-blog/3.2.0/3.2.0-protection-update.md b/i18n/de/docusaurus-plugin-content-blog/3.2.0/3.2.0-protection-update.md index 9bcbc57..bba7ea4 100644 --- a/i18n/de/docusaurus-plugin-content-blog/3.2.0/3.2.0-protection-update.md +++ b/i18n/de/docusaurus-plugin-content-blog/3.2.0/3.2.0-protection-update.md @@ -15,7 +15,7 @@ Version 3.2.0 stellt einen wichtigen Meilenstein für die Sicherheit deiner Disc ## 🛡️ Keine privaten Nachrichten mehr von Scammern! {#new} -Schütze deine Mitglieder, indem du mit [DM Lock](/features/dm-lock) den Empfang privater Nachrichten automatisch blockierst. Typische Einsatzszenarien: +Schütze deine Mitglieder, indem du mit [DM Lock](/docs/features/dm-lock) den Empfang privater Nachrichten automatisch blockierst. Typische Einsatzszenarien: - Automatisierte Spam-Wellen während Events (Launches, Giveaways, Hochbetrieb). - Betrugsversuche, besonders auf großen öffentlichen Servern. - Unangemessenes Verhalten gegenüber Minderjährigen oder sensiblen Communitys. @@ -27,16 +27,16 @@ Alles vollautomatisch, ohne manuelle Schritte zu vergessen – so bleibt dein Se ## ✨ Weitere Neuerungen in 3.2.0 {#changelog} -- **Auswahl der [Anti-Spam-Sanktionen](/features/anti-spam#triggers)**: Lege genau fest, wie RaidProtect auf unterschiedliche Spam-Arten reagiert (Kick, Ban ...), um die Moderation optimal an deine Community anzupassen. -- **Neue [Anti-Spam-Logs](/features/anti-spam#logs)**: Mehr Überblick darüber, was wann erkannt wurde – so behältst du die Kontrolle. -- **[Mindestaccountalter](/features/raid-mode#minage) ohne Captcha**: Sortiere brandneue Accounts direkt aus, auch wenn kein Captcha aktiviert ist. -- **[`/bypass minage`](/features/raid-mode#bypass-minage) Befehl**: Lässt dich Mitglieder manuell zulassen, die das geforderte Alter nicht erfüllen – praktisch für Ausnahmen. -- **Kompletter Neuentwurf von [`/userinfo`](/features/utilities#userinfo)**: Verbesserte Oberfläche, klarere und umfassendere Informationen. +- **Auswahl der [Anti-Spam-Sanktionen](/docs/features/anti-spam#triggers)**: Lege genau fest, wie RaidProtect auf unterschiedliche Spam-Arten reagiert (Kick, Ban ...), um die Moderation optimal an deine Community anzupassen. +- **Neue [Anti-Spam-Logs](/docs/features/anti-spam#logs)**: Mehr Überblick darüber, was wann erkannt wurde – so behältst du die Kontrolle. +- **[Mindestaccountalter](/docs/features/raid-mode#minage) ohne Captcha**: Sortiere brandneue Accounts direkt aus, auch wenn kein Captcha aktiviert ist. +- **[`/bypass minage`](/docs/features/raid-mode#bypass-minage) Befehl**: Lässt dich Mitglieder manuell zulassen, die das geforderte Alter nicht erfüllen – praktisch für Ausnahmen. +- **Kompletter Neuentwurf von [`/userinfo`](/docs/features/utilities#userinfo)**: Verbesserte Oberfläche, klarere und umfassendere Informationen. - **Konfigurations-Logs**: Bessere Nachverfolgbarkeit aller wichtigen Änderungen an den Bot-Einstellungen. --- -Die vollständige Liste aller Neuerungen, Fehlerbehebungen und technischen Details findest du [im Changelog](/changelog#3-2-0). +Die vollständige Liste aller Neuerungen, Fehlerbehebungen und technischen Details findest du [im Changelog](/docs/changelog#3-2-0). :::tip 📚 Nützliche Ressourcen - 🔗 [RaidProtect zu deinem Server hinzufügen](https://raidprotect.bot/invite) diff --git a/i18n/de/docusaurus-plugin-content-blog/3.2.1/3.2.1-discord-sanctions.md b/i18n/de/docusaurus-plugin-content-blog/3.2.1/3.2.1-discord-sanctions.md index b521450..50a1129 100644 --- a/i18n/de/docusaurus-plugin-content-blog/3.2.1/3.2.1-discord-sanctions.md +++ b/i18n/de/docusaurus-plugin-content-blog/3.2.1/3.2.1-discord-sanctions.md @@ -15,7 +15,7 @@ Die Version **3.2.1** von RaidProtect legt den Schwerpunkt auf die **alltäglich ## ⚖️ Von Discord verhängte Sanktionen einsehen {#new} -Die große Neuerung dieses Updates: der [`/ds`](/features/utilities#discord-sanctions)-Befehl. Damit können Sie direkt die **offiziellen von Discord verhängten Sanktionen** gegen einen Nutzer einsehen. +Die große Neuerung dieses Updates: der [`/ds`](/docs/features/utilities#discord-sanctions)-Befehl. Damit können Sie direkt die **offiziellen von Discord verhängten Sanktionen** gegen einen Nutzer einsehen. ### 📋 Was Sie sehen können @@ -30,7 +30,7 @@ Die große Neuerung dieses Updates: der [`/ds`](/features/utilities#discord-sanc Das Anti-Spam-System profitiert von zwei wesentlichen Verbesserungen: - Blockierung von **Slash-Command-Spam**, der oft zur Störung von Kanälen genutzt wird. -- Neuer spezieller Auslöser: [**Spam durch externe Befehle**](/features/anti-spam#triggers). +- Neuer spezieller Auslöser: [**Spam durch externe Befehle**](/docs/features/anti-spam#triggers). Diese Ergänzungen helfen, neue Formen von Missbrauch vorherzusehen und sorgen für ein reibungsloseres Erlebnis für Ihre Mitglieder. @@ -40,15 +40,15 @@ Diese Ergänzungen helfen, neue Formen von Missbrauch vorherzusehen und sorgen f Dieses Update bringt mehrere lange erwartete Befehle, um die Arbeit der Moderationsteams zu erleichtern: -- **[`/slowmode`](/features/moderation#slowmode)**: aktivieren oder genauer anpassen des Slowmode eines Kanals in einem einzigen Schritt. -- **[`/unban`](/features/moderation#unban)**: schnelleres Entsperren eines Nutzers mit Angabe eines Grundes. -- **[`/bypass captcha`](/features/captcha#bypass)**: manuelles Zulassen eines legitimen Nutzers, der beim Captcha scheitert. +- **[`/slowmode`](/docs/features/moderation#slowmode)**: aktivieren oder genauer anpassen des Slowmode eines Kanals in einem einzigen Schritt. +- **[`/unban`](/docs/features/moderation#unban)**: schnelleres Entsperren eines Nutzers mit Angabe eines Grundes. +- **[`/bypass captcha`](/docs/features/captcha#bypass)**: manuelles Zulassen eines legitimen Nutzers, der beim Captcha scheitert. -Außerdem können die Befehle [`/lock`](/features/channel-lock#lock) und [`/unlock`](/features/channel-lock#unlock) nun einen **Grund** enthalten, was die Nachvollziehbarkeit und Klarheit der Moderationsmaßnahmen verbessert. +Außerdem können die Befehle [`/lock`](/docs/features/channel-lock#lock) und [`/unlock`](/docs/features/channel-lock#unlock) nun einen **Grund** enthalten, was die Nachvollziehbarkeit und Klarheit der Moderationsmaßnahmen verbessert. --- -Die vollständige und detaillierte Liste finden Sie [im Changelog](/changelog#3-2-1). +Die vollständige und detaillierte Liste finden Sie [im Changelog](/docs/changelog#3-2-1). :::tip 📚 Nützliche Ressourcen - 🔗 [RaidProtect zu Ihrem Server hinzufügen](https://raidprotect.bot/invite) diff --git a/i18n/de/docusaurus-plugin-content-blog/3.3.0/3.3.0-moderation-update.md b/i18n/de/docusaurus-plugin-content-blog/3.3.0/3.3.0-moderation-update.md index 6c369da..6680880 100644 --- a/i18n/de/docusaurus-plugin-content-blog/3.3.0/3.3.0-moderation-update.md +++ b/i18n/de/docusaurus-plugin-content-blog/3.3.0/3.3.0-moderation-update.md @@ -15,14 +15,14 @@ Version 3.3.0 überarbeitet die Verwaltung von Sanktionen auf deinem Discord-Ser ## 📋 Vollständiger Verlauf für jede Sanktion {#new} -Behalte den Überblick über alle Moderationsaktionen mit dem neuen [Sanktionenverlauf](/features/sanctions). Nie wieder Zweifel, wer wann und warum sanktioniert wurde: +Behalte den Überblick über alle Moderationsaktionen mit dem neuen [Sanktionenverlauf](/docs/features/sanctions). Nie wieder Zweifel, wer wann und warum sanktioniert wurde: - **Automatische Zentralisierung** : Banns, Kicks, Timeouts und Automod-Sanktionen werden automatisch erfasst. -- **Erweiterte Suche** mit [`/sanctions search`](/features/sanctions#search) : Finde die Historie eines Mitglieds sofort. -- **Umfassende Details** mit [`/sanctions info`](/features/sanctions#info) : Sieh alle Details einer bestimmten Sanktion ein. -- **Flexible Bearbeitung** mit [`/sanctions edit`](/features/sanctions#edit) : Korrigiere einen Grund oder passe eine bestehende Sanktion an. -- **Löschen oder Aufheben** mit [`/sanctions delete`](/features/sanctions#delete) : Hebe eine Sanktion auf oder entferne sie aus dem Verlauf bei Bedarf. -- **[Intelligente Verwaltung des Sanktionenstatus](/features/sanctions#status)** +- **Erweiterte Suche** mit [`/sanctions search`](/docs/features/sanctions#search) : Finde die Historie eines Mitglieds sofort. +- **Umfassende Details** mit [`/sanctions info`](/docs/features/sanctions#info) : Sieh alle Details einer bestimmten Sanktion ein. +- **Flexible Bearbeitung** mit [`/sanctions edit`](/docs/features/sanctions#edit) : Korrigiere einen Grund oder passe eine bestehende Sanktion an. +- **Löschen oder Aufheben** mit [`/sanctions delete`](/docs/features/sanctions#delete) : Hebe eine Sanktion auf oder entferne sie aus dem Verlauf bei Bedarf. +- **[Intelligente Verwaltung des Sanktionenstatus](/docs/features/sanctions#status)** Jede Sanktion erzeugt nun eine Bestätigung, die anzeigt, ob das Mitglied die Benachrichtigung per DM erhalten hat. @@ -32,9 +32,9 @@ Jede Sanktion erzeugt nun eine Bestätigung, die anzeigt, ob das Mitglied die Be Dieses Update erweitert dein Moderationsarsenal um drei neue zentrale Befehle: -- **[`/tempban`](/features/moderation#tempban)** : Banne ein Mitglied vorübergehend für eine definierte Dauer. -- **[`/warn`](/features/moderation#warn)** : Verwarnung eines Mitglieds mit vollständiger Nachverfolgung im Verlauf. -- **[`/untimeout`](/features/moderation#untimeout)** : Entferne ein Timeout vor Ablauf der vorgesehenen Zeit. +- **[`/tempban`](/docs/features/moderation#tempban)** : Banne ein Mitglied vorübergehend für eine definierte Dauer. +- **[`/warn`](/docs/features/moderation#warn)** : Verwarnung eines Mitglieds mit vollständiger Nachverfolgung im Verlauf. +- **[`/untimeout`](/docs/features/moderation#untimeout)** : Entferne ein Timeout vor Ablauf der vorgesehenen Zeit. --- @@ -42,22 +42,22 @@ Dieses Update erweitert dein Moderationsarsenal um drei neue zentrale Befehle: Das Anti-Raid-System wird intelligenter und flexibler: -- **Automatische Deaktivierung** : [RaidMode](/features/raid-mode#raid-mode) und [Auto RaidMode](/features/raid-mode#duration) deaktivieren sich nach einer bestimmten Zeit automatisch – keine vergessenen Einstellungen mehr! -- **Dauer-Einstellung** : Lege die Dauer direkt bei der Aktivierung mit [`/raidmode`](/features/raid-mode#raid-mode) fest. -- **Neuer Befehl [`/joinlock`](/features/join-lock)** : Schließe Einladungen unbegrenzt für volle Kontrolle über neue Mitglieder. -- **Bestätigung für [Mindestalter](/features/raid-mode#minage)** : Erhalte eine Rückmeldung, ob das Mitglied die Erklärung erhalten hat. +- **Automatische Deaktivierung** : [RaidMode](/docs/features/raid-mode#raid-mode) und [Auto RaidMode](/docs/features/raid-mode#duration) deaktivieren sich nach einer bestimmten Zeit automatisch – keine vergessenen Einstellungen mehr! +- **Dauer-Einstellung** : Lege die Dauer direkt bei der Aktivierung mit [`/raidmode`](/docs/features/raid-mode#raid-mode) fest. +- **Neuer Befehl [`/joinlock`](/docs/features/join-lock)** : Schließe Einladungen unbegrenzt für volle Kontrolle über neue Mitglieder. +- **Bestätigung für [Mindestalter](/docs/features/raid-mode#minage)** : Erhalte eine Rückmeldung, ob das Mitglied die Erklärung erhalten hat. --- ## ✨ Weitere Neuerungen in 3.3.0 {#changelog} - **Dedizierte Sanktionen-Logs** : Richte einen speziellen Kanal ein, um alle Sanktionen-Logs zu zentralisieren. -- **[`/channel duplicate`](/features/utilities#channel-duplicate)** : Dupliziere einen Kanal exakt mit allen Einstellungen. +- **[`/channel duplicate`](/docs/features/utilities#channel-duplicate)** : Dupliziere einen Kanal exakt mit allen Einstellungen. - **Befehl `/changelog`** : Sieh das Changelog direkt in Discord ein, auch über `/settings` und `/about` zugänglich. --- -Für die vollständige Liste der Neuerungen, Bugfixes und technischen Details siehe [Changelog](/changelog#3-3-0). +Für die vollständige Liste der Neuerungen, Bugfixes und technischen Details siehe [Changelog](/docs/changelog#3-3-0). :::tip 📚 Nützliche Ressourcen - 🔗 [RaidProtect auf deinem Server hinzufügen](https://raidprotect.bot/invite) diff --git a/i18n/de/docusaurus-plugin-content-blog/3.3.1/3.3.1-jail-and-mute.md b/i18n/de/docusaurus-plugin-content-blog/3.3.1/3.3.1-jail-and-mute.md index 761c13e..b15e0bf 100644 --- a/i18n/de/docusaurus-plugin-content-blog/3.3.1/3.3.1-jail-and-mute.md +++ b/i18n/de/docusaurus-plugin-content-blog/3.3.1/3.3.1-jail-and-mute.md @@ -15,11 +15,11 @@ Version 3.3.1 bietet mehr Granularität in der Moderation mit **Jail**, **rollen ## 🔒 Neue Sanktion "Jail" {#jail} -Isoliere ein störendes Mitglied, ohne es zu bannen, mit dem neuen [Jail-"Gefängnis"-System](/features/sanctions#jail). Das Mitglied wird in einen dedizierten Kanal eingesperrt, ohne Zugang zum Rest des Servers: +Isoliere ein störendes Mitglied, ohne es zu bannen, mit dem neuen [Jail-"Gefängnis"-System](/docs/features/sanctions#jail). Das Mitglied wird in einen dedizierten Kanal eingesperrt, ohne Zugang zum Rest des Servers: -- **[`/jail`](/features/moderation#jail)** : Sperre ein Mitglied sofort ein. -- **[`/tempjail`](/features/moderation#tempjail)** : Sperre ein Mitglied vorübergehend für eine bestimmte Dauer ein. -- **[`/unjail`](/features/moderation#unjail)** : Lasse ein Mitglied jederzeit frei. +- **[`/jail`](/docs/features/moderation#jail)** : Sperre ein Mitglied sofort ein. +- **[`/tempjail`](/docs/features/moderation#tempjail)** : Sperre ein Mitglied vorübergehend für eine bestimmte Dauer ein. +- **[`/unjail`](/docs/features/moderation#unjail)** : Lasse ein Mitglied jederzeit frei. - **Flexible Konfiguration** : Lege die Jail-Rolle und den Informationskanal direkt über `/settings` fest. Jail ermöglicht es, heikle Situationen zu bewältigen und gleichzeitig mit dem betroffenen Mitglied zu kommunizieren, bevor eine endgültige Entscheidung getroffen wird. @@ -30,10 +30,10 @@ Jail ermöglicht es, heikle Situationen zu bewältigen und gleichzeitig mit dem Das Discord-Timeout ist praktisch, aber einschränkend: Es **blockiert alle Interaktionen** des Mitglieds, einschließlich Buttons und Menüs. Ein Mitglied im Timeout kann seine Sanktionen nicht einsehen, kein Ticket öffnen oder mit irgendeinem Element des Servers interagieren. Und die Dauer ist auf 28 Tage begrenzt. -Das neue [rollenbasierte Mute](/features/sanctions#mute) löst diese Probleme: +Das neue [rollenbasierte Mute](/docs/features/sanctions#mute) löst diese Probleme: -- Über einem [konfigurierbaren Schwellenwert](/features/sanctions#mute-threshold) weist der Bot automatisch eine **Mute-Rolle** anstelle des Discord-Timeouts zu. Das Mitglied kann nicht mehr schreiben, behält aber die Möglichkeit, Buttons und Menüs zu verwenden. -- Die Befehle `/timeout` und `/untimeout` werden zu [`/mute`](/features/moderation#timeout) und [`/unmute`](/features/moderation#untimeout) mit intelligentem Verhalten: **Unterhalb des Schwellenwerts wird das klassische Discord-Timeout verwendet**. +- Über einem [konfigurierbaren Schwellenwert](/docs/features/sanctions#mute-threshold) weist der Bot automatisch eine **Mute-Rolle** anstelle des Discord-Timeouts zu. Das Mitglied kann nicht mehr schreiben, behält aber die Möglichkeit, Buttons und Menüs zu verwenden. +- Die Befehle `/timeout` und `/untimeout` werden zu [`/mute`](/docs/features/moderation#timeout) und [`/unmute`](/docs/features/moderation#untimeout) mit intelligentem Verhalten: **Unterhalb des Schwellenwerts wird das klassische Discord-Timeout verwendet**. - Neuer Parameter `[force_timeout]`, um das Discord-Timeout unabhängig von der Dauer zu erzwingen. --- @@ -42,17 +42,17 @@ Das neue [rollenbasierte Mute](/features/sanctions#mute) löst diese Probleme: Dieses Update bringt neue Werkzeuge für den Alltag deiner Moderatoren und Mitglieder: -- **[Kontextmenü](/features/moderation#context-menu)** : Sanktioniere ein Mitglied mit einem einfachen Rechtsklick auf sein Profil, ohne einen Befehl einzugeben. -- **[`/my-sanctions`](/features/utilities#my-sanctions)** : Ermögliche deinen Mitgliedern, ihre eigenen Sanktionen einzusehen, mit einer [Datenschutz-Einstellung](/features/sanctions#sanctions-privacy) zur Zugriffskontrolle. -- **[Medienanzeige](/features/sanctions#show-medias)** in Sanktionsbegründungen: visuelle Beweise sind direkt sichtbar. -- **Überarbeitete Filter** in [`/sanctions search`](/features/sanctions#search) mit einem neuen Filter nach [Moderatortyp](/features/sanctions#search). -- **[Import / Export](/features/sanctions#import-export)** von Sanktionen über den Support-Bot. +- **[Kontextmenü](/docs/features/moderation#context-menu)** : Sanktioniere ein Mitglied mit einem einfachen Rechtsklick auf sein Profil, ohne einen Befehl einzugeben. +- **[`/my-sanctions`](/docs/features/utilities#my-sanctions)** : Ermögliche deinen Mitgliedern, ihre eigenen Sanktionen einzusehen, mit einer [Datenschutz-Einstellung](/docs/features/sanctions#sanctions-privacy) zur Zugriffskontrolle. +- **[Medienanzeige](/docs/features/sanctions#show-medias)** in Sanktionsbegründungen: visuelle Beweise sind direkt sichtbar. +- **Überarbeitete Filter** in [`/sanctions search`](/docs/features/sanctions#search) mit einem neuen Filter nach [Moderatortyp](/docs/features/sanctions#search). +- **[Import / Export](/docs/features/sanctions#import-export)** von Sanktionen über den Support-Bot. --- ## 🌍 RaidProtect spricht 3 neue Sprachen {#i18n} -Der Bot und seine Dokumentation sind jetzt in **[5 Sprachen](/language)** verfügbar: +Der Bot und seine Dokumentation sind jetzt in **[5 Sprachen](/docs/language)** verfügbar: - Deutsch - Spanisch @@ -70,15 +70,15 @@ Zeige [Informationstafeln](/features/display) in deinen Kanälen mit `/display p ## ✨ Weitere Neuerungen in 3.3.1 {#changelog} -- **[Mitgliedersperrung](/features/utilities#block)** : Sperre bestimmten Mitgliedern den Zugang zu bestimmten RaidProtect-Funktionen mit [`/block add`](/features/utilities#block-add), [`/block remove`](/features/utilities#block-remove) und [`/block list`](/features/utilities#block-list). -- **[`/prune`](/features/utilities#prune)** : Entlasse inaktive Mitglieder mit präziseren Bedingungen. -- **[`/channel clear`](/features/utilities#channel-clear)** : Lösche und erstelle einen Kanal in einem Befehl neu. +- **[Mitgliedersperrung](/docs/features/utilities#block)** : Sperre bestimmten Mitgliedern den Zugang zu bestimmten RaidProtect-Funktionen mit [`/block add`](/docs/features/utilities#block-add), [`/block remove`](/docs/features/utilities#block-remove) und [`/block list`](/docs/features/utilities#block-list). +- **[`/prune`](/docs/features/utilities#prune)** : Entlasse inaktive Mitglieder mit präziseren Bedingungen. +- **[`/channel clear`](/docs/features/utilities#channel-clear)** : Lösche und erstelle einen Kanal in einem Befehl neu. - **Logs für `/bypass`** : Vollständige Nachverfolgung der `/bypass`-Befehle. - **Anti-Scam** : Neues Modul zur Erkennung von Scam-Versuchen. --- -Für die vollständige Liste der Neuerungen, Bugfixes und technischen Details siehe [Changelog](/changelog#3-3-1). +Für die vollständige Liste der Neuerungen, Bugfixes und technischen Details siehe [Changelog](/docs/changelog#3-3-1). :::tip 📚 Nützliche Ressourcen - 🔗 [RaidProtect auf deinem Server hinzufügen](https://raidprotect.bot/invite) diff --git a/i18n/de/docusaurus-plugin-content-blog/3.3.1/scamlens-early-activation.mdx b/i18n/de/docusaurus-plugin-content-blog/3.3.1/scamlens-early-activation.mdx index 0c4103b..e726009 100644 --- a/i18n/de/docusaurus-plugin-content-blog/3.3.1/scamlens-early-activation.mdx +++ b/i18n/de/docusaurus-plugin-content-blog/3.3.1/scamlens-early-activation.mdx @@ -56,7 +56,7 @@ Aus Sicherheitsgründen kommunizieren wir nicht und werden nicht über die von S Einfach [RaidProtect hinzufügen](https://raidprotect.bot/invite). ScamLens erkennt und löscht betrügerische Bilder automatisch. #### Wie verhindert man Spam-Bots auf meinem Discord-Server? {#anti-spam-bots} -Zusätzlich zu ScamLens aktiviere das [Captcha](/features/captcha) von RaidProtect, um automatisierte Konten am Beitritt zu deinem Server zu hindern. +Zusätzlich zu ScamLens aktiviere das [Captcha](/docs/features/captcha) von RaidProtect, um automatisierte Konten am Beitritt zu deinem Server zu hindern. --- diff --git a/i18n/de/docusaurus-plugin-content-blog/3.3.2/3.3.2-authentication-manager.md b/i18n/de/docusaurus-plugin-content-blog/3.3.2/3.3.2-authentication-manager.md index 95b56d7..aeeaa19 100644 --- a/i18n/de/docusaurus-plugin-content-blog/3.3.2/3.3.2-authentication-manager.md +++ b/i18n/de/docusaurus-plugin-content-blog/3.3.2/3.3.2-authentication-manager.md @@ -23,7 +23,7 @@ Ein einziger Kanal, der durch den Hack eines Admin-Kontos gelöscht wird, ist be ## 🔐 Die Lösung: Authentication Manager {#solution} -Mit dem [Authentication Manager](/features/authentication-manager) (AM) werden Rollen mit sensiblen Berechtigungen nicht mehr dauerhaft vergeben — sie werden erst nach einer zusätzlichen Authentifizierungsschicht zugewiesen. Kombiniert mit temporären Sitzungen, die automatisch ablaufen, wird das Zeitfenster drastisch reduziert: Rollen werden am Ende der Sitzung automatisch entzogen. +Mit dem [Authentication Manager](/docs/features/authentication-manager) (AM) werden Rollen mit sensiblen Berechtigungen nicht mehr dauerhaft vergeben — sie werden erst nach einer zusätzlichen Authentifizierungsschicht zugewiesen. Kombiniert mit temporären Sitzungen, die automatisch ablaufen, wird das Zeitfenster drastisch reduziert: Rollen werden am Ende der Sitzung automatisch entzogen. Selbst wenn ein Angreifer ein Discord-Konto stiehlt, kann er die destruktiven Berechtigungen des Servers nicht nutzen: Die Rolle ist schlicht nicht da, und sie zu erhalten erfordert eine Authentifizierung, die er nicht besitzt. @@ -31,7 +31,7 @@ Selbst wenn ein Angreifer ein Discord-Konto stiehlt, kann er die destruktiven Be ## ✨ Was enthalten ist {#features} -### 🛡️ [4 Authentifizierungsmethoden](/features/authentication-manager#methods) +### 🛡️ [4 Authentifizierungsmethoden](/docs/features/authentication-manager#methods) | **Methode** | **Beschreibung** | **Grad** | | --- | --- | --- | @@ -40,29 +40,29 @@ Selbst wenn ein Angreifer ein Discord-Konto stiehlt, kann er die destruktiven Be | OTP (2FA) | Temporärer 6-stelliger Code über Google Authenticator, Authy, 1Password... | A | | Passkey (WebAuthn) | Fingerabdruck, Gesichtserkennung oder physischer Schlüssel (YubiKey) | S | -### 🔑 [Sicherheitsgrade](/features/authentication-manager#grades) +### 🔑 [Sicherheitsgrade](/docs/features/authentication-manager#grades) Jede Methode entspricht einem Grad (E bis S). Ihr wählt den Mindestgrad pro Rolle: Ein interner Zugang kann sich mit einem PIN begnügen, eine Admin-Rolle wird einen Passkey erfordern. -### ⏱️ [Temporäre Sitzungen](/features/authentication-manager#sessions) +### ⏱️ [Temporäre Sitzungen](/docs/features/authentication-manager#sessions) Rollen sind nicht mehr permanent. Jede Authentifizierung eröffnet eine zeitlich begrenzte Sitzung (konfigurierbar bis zu 8 Stunden). Nach Ablauf wird die Rolle automatisch entzogen. -### ⚙️ [Manager-System](/features/authentication-manager#users-tab) +### ⚙️ [Manager-System](/docs/features/authentication-manager#users-tab) Gebt einem Mitglied Admin-Berechtigungen, ohne ihm Zugriff auf das Authentifizierungssystem zu geben. Manager müssen sich selbst authentifizieren und können nur Rollen unterhalb ihrer Obergrenze verwalten, was die Erstellung von Backdoors und Rechteeskalation verhindert. -### 📋 [Audit-Logs und Sitzungen](/features/authentication-manager#logs-tab) +### 📋 [Audit-Logs und Sitzungen](/docs/features/authentication-manager#logs-tab) Jede Authentifizierung, Rollenzuweisung und Aktion wird direkt im Bot gespeichert. Im Gegensatz zu Discord-Logs kann sie niemand löschen — selbst ein kompromittierter Admin kann seine Spuren nicht verwischen. -### 🚫 [Brute-Force-Schutz](/features/authentication-manager#auth-security) +### 🚫 [Brute-Force-Schutz](/docs/features/authentication-manager#auth-security) 5 Fehlversuche: eine Stunde Sperre. 10 Fehlversuche: vollständiger Konto-Reset. --- -Die vollständige Liste der Neuerungen in 3.3.2 findet ihr im [Changelog](/changelog#3-3-2). +Die vollständige Liste der Neuerungen in 3.3.2 findet ihr im [Changelog](/docs/changelog#3-3-2). :::tip Nützliche Ressourcen - [RaidProtect zu eurem Server hinzufügen](https://raidprotect.bot/invite) diff --git a/i18n/de/docusaurus-plugin-content-blog/3.3.2/premium-launch.md b/i18n/de/docusaurus-plugin-content-blog/3.3.2/premium-launch.md index 025866b..7d9176c 100644 --- a/i18n/de/docusaurus-plugin-content-blog/3.3.2/premium-launch.md +++ b/i18n/de/docusaurus-plugin-content-blog/3.3.2/premium-launch.md @@ -39,11 +39,11 @@ Nutzt `/settings` auf eurem Discord-Server und klickt auf "Premium", oder geht d ## ✨ Was Premium heute bietet {#features} -### 🏷️ [Anpassbare Sanktionsnamen](/features/sanctions#custom-names) +### 🏷️ [Anpassbare Sanktionsnamen](/docs/features/sanctions#custom-names) Benennt jeden Sanktionstyp nach dem Vokabular eures Servers um. Der angezeigte Name, das in Nachrichten verwendete Verb und die Formulierung der privaten Nachricht an das bestrafte Mitglied sind alle frei konfigurierbar. -### 🔐 [Authentication Manager: erweiterte Limits](/features/authentication-manager) +### 🔐 [Authentication Manager: erweiterte Limits](/docs/features/authentication-manager) In der kostenlosen Version ist der Authentication Manager auf 3 geschützte Rollen, 20 Nutzer und Sitzungen von maximal 8 Stunden begrenzt. Premium hebt diese Grenzen an: @@ -53,7 +53,7 @@ In der kostenlosen Version ist der Authentication Manager auf 3 geschützte Roll | Nutzer | 20 | 50 | | Max. Sitzungsdauer | 8h | 24h | -### 📋 [Informationspanels: erweiterte Limits](/features/display) +### 📋 [Informationspanels: erweiterte Limits](/docs/features/display) Von 2 auf 4 öffentliche Informationspanels (+ den für Jail reservierten Slot), um mehr Inhalte auf eurem Server abzudecken. @@ -63,7 +63,7 @@ Erhaltet frühzeitigen Zugang zu bestimmten experimentellen Funktionen vor ihrer --- -Die vollständige Liste der Änderungen findet ihr im [Changelog](/changelog). +Die vollständige Liste der Änderungen findet ihr im [Changelog](/docs/changelog). :::tip Nützliche Links - [RaidProtect zu eurem Server hinzufügen](https://raidprotect.bot/invite) diff --git a/i18n/de/docusaurus-plugin-content-blog/3.3.3/3.3.3-modview.md b/i18n/de/docusaurus-plugin-content-blog/3.3.3/3.3.3-modview.md index 31b5e05..4e3a7cf 100644 --- a/i18n/de/docusaurus-plugin-content-blog/3.3.3/3.3.3-modview.md +++ b/i18n/de/docusaurus-plugin-content-blog/3.3.3/3.3.3-modview.md @@ -15,18 +15,18 @@ Version 3.3.3 vervollständigt den **Werkzeugkasten der Moderatoren**: eine neue ## 🔍 ModView: alles über ein Mitglied, in einem Befehl {#modview} -Schluss mit dem Hin- und Herschalten zwischen mehreren Befehlen, um die Situation eines Mitglieds zu verstehen. Der neue Befehl [`/modview`](/de/features/moderation#modview) öffnet eine **zentrale Moderationsansicht**: eine vollständige Übersicht über das Mitglied und alle Schnellaktionen, die direkt zugänglich sind. +Schluss mit dem Hin- und Herschalten zwischen mehreren Befehlen, um die Situation eines Mitglieds zu verstehen. Der neue Befehl [`/modview`](/de/docs/features/moderation#modview) öffnet eine **zentrale Moderationsansicht**: eine vollständige Übersicht über das Mitglied und alle Schnellaktionen, die direkt zugänglich sind. -- Der **[Sanktionsverlauf](/de/features/sanctions)** mit aktuellen Status. -- Die **[interne Moderationsnotiz](/de/features/moderation#note)**, die das Staff-Team teilt. -- Die **[zuletzt gelöschte Nachricht](/de/features/moderation#snipe)** der letzten Stunde, falls vorhanden. +- Der **[Sanktionsverlauf](/de/docs/features/sanctions)** mit aktuellen Status. +- Die **[interne Moderationsnotiz](/de/docs/features/moderation#note)**, die das Staff-Team teilt. +- Die **[zuletzt gelöschte Nachricht](/de/docs/features/moderation#snipe)** der letzten Stunde, falls vorhanden. Und vor allem **die Schnellaktionen**: Sanktioniert das Mitglied direkt aus der Ansicht heraus (Ban, Kick, Mute, Jail, Warn …) oder bearbeitet seine Notiz, ohne einen Befehl neu eintippen oder das Fenster wechseln zu müssen. Zwei ergänzende Befehle kommen mit der ModView: -- **[`/note`](/de/features/moderation#note)**: Fügt einem Mitglied eine private Notiz hinzu, die nur für das Staff-Team sichtbar ist. Ideal, um Kontext zwischen Moderatoren weiterzugeben, ohne den Sanktionsverlauf zu überladen. -- **[`/snipe`](/de/features/moderation#snipe)**: Ruft die zuletzt gelöschten Nachrichten eines Kanals oder eines Mitglieds aus der letzten Stunde ab. +- **[`/note`](/de/docs/features/moderation#note)**: Fügt einem Mitglied eine private Notiz hinzu, die nur für das Staff-Team sichtbar ist. Ideal, um Kontext zwischen Moderatoren weiterzugeben, ohne den Sanktionsverlauf zu überladen. +- **[`/snipe`](/de/docs/features/moderation#snipe)**: Ruft die zuletzt gelöschten Nachrichten eines Kanals oder eines Mitglieds aus der letzten Stunde ab. :::tip Die ModView ist auch über das Kontextmenü erreichbar: Rechtsklick auf ein Profil → **Anwendungen** → **Modview öffnen**. @@ -38,28 +38,28 @@ Die ModView ist auch über das Kontextmenü erreichbar: Rechtsklick auf ein Prof Mehrere Ergänzungen verfeinern die tägliche Verwaltung der Sanktionen: -- **Neuer Befehl [`/softban`](/de/features/moderation#softban)**: Bannt ein Mitglied und entbannt es sofort wieder. Seine Nachrichten werden gelöscht, aber er kann zurückkehren. Perfekt, um nach einem gehackten Konto aufzuräumen. -- **[Option `silent`](/de/features/moderation)** auf allen Sanktionsbefehlen: Verhindert, dass RaidProtect der Zielperson eine private Nachricht sendet, wenn ihr die Situation separat regeln wollt. -- **[Parameter `delete-messages`](/de/features/moderation#ban)** auf `/ban` und `/tempban`: Wählt direkt die Dauer des zu löschenden Nachrichtenverlaufs zum Zeitpunkt der Verbannung. -- **[Modus „Durch die Jail-Rolle ersetzen"](/de/features/sanctions#jail-roles)**: Die Jail-Sanktion kann jetzt während der Inhaftierung alle Rollen des Mitglieds entfernen und sie bei der Freilassung automatisch wiederherstellen. -- **AutoMod → rollenbasiertes Mute** *(öffentliche Beta Premium)*: Timeouts, die von Discords AutoMod über dem [konfigurierten Schwellenwert](/de/features/sanctions#mute-threshold) verhängt werden, werden automatisch in [rollenbasierte Mutes](/de/features/sanctions#mute) umgewandelt, für vollständige Konsistenz mit dem RaidProtect-System. +- **Neuer Befehl [`/softban`](/de/docs/features/moderation#softban)**: Bannt ein Mitglied und entbannt es sofort wieder. Seine Nachrichten werden gelöscht, aber er kann zurückkehren. Perfekt, um nach einem gehackten Konto aufzuräumen. +- **[Option `silent`](/de/docs/features/moderation)** auf allen Sanktionsbefehlen: Verhindert, dass RaidProtect der Zielperson eine private Nachricht sendet, wenn ihr die Situation separat regeln wollt. +- **[Parameter `delete-messages`](/de/docs/features/moderation#ban)** auf `/ban` und `/tempban`: Wählt direkt die Dauer des zu löschenden Nachrichtenverlaufs zum Zeitpunkt der Verbannung. +- **[Modus „Durch die Jail-Rolle ersetzen"](/de/docs/features/sanctions#jail-roles)**: Die Jail-Sanktion kann jetzt während der Inhaftierung alle Rollen des Mitglieds entfernen und sie bei der Freilassung automatisch wiederherstellen. +- **AutoMod → rollenbasiertes Mute** *(öffentliche Beta Premium)*: Timeouts, die von Discords AutoMod über dem [konfigurierten Schwellenwert](/de/docs/features/sanctions#mute-threshold) verhängt werden, werden automatisch in [rollenbasierte Mutes](/de/docs/features/sanctions#mute) umgewandelt, für vollständige Konsistenz mit dem RaidProtect-System. -Weitere, dezentere Verbesserungen: bessere **Zustellbestätigung** der Sanktions-DMs (empfangen, DMs geschlossen, abgelaufen, silent), **Server-Einladungs-Button** in den Benachrichtigungs-DMs nach einem Kick, Softban oder temporären Ban, Möglichkeit, **eine Begründung zu `/sanctions delete` hinzuzufügen** und **[das Sanktionssystem komplett zu deaktivieren](/de/features/sanctions#disable)** auf einem Server. +Weitere, dezentere Verbesserungen: bessere **Zustellbestätigung** der Sanktions-DMs (empfangen, DMs geschlossen, abgelaufen, silent), **Server-Einladungs-Button** in den Benachrichtigungs-DMs nach einem Kick, Softban oder temporären Ban, Möglichkeit, **eine Begründung zu `/sanctions delete` hinzuzufügen** und **[das Sanktionssystem komplett zu deaktivieren](/de/docs/features/sanctions#disable)** auf einem Server. --- ## ✨ Weitere Neuerungen {#other} - **Profilanpassung von RaidProtect** *(Premium)*: Avatar, Banner und Schreibstil des Pseudonyms, damit der Bot sich in das visuelle Erscheinungsbild eures Servers einfügt. -- **[Dauer für Anti-Spam-Sanktionen](/de/features/anti-spam#duration)**: Wählt eine Dauer für alle vom Anti-Spam verhängten Sanktionen. +- **[Dauer für Anti-Spam-Sanktionen](/de/docs/features/anti-spam#duration)**: Wählt eine Dauer für alle vom Anti-Spam verhängten Sanktionen. - **Neues Parsing der Nachrichtenbefehle**: strengere und konsistentere Interpretation, die mit den Slash-Befehlen übereinstimmt. -- **[Automatisches Schließen der DMs](/de/features/raid-mode#close-dm)** bei Aktivierung des Auto-Raid-Modus, um Wellen feindlicher DMs während eines Raids abzubrechen. +- **[Automatisches Schließen der DMs](/de/docs/features/raid-mode#close-dm)** bei Aktivierung des Auto-Raid-Modus, um Wellen feindlicher DMs während eines Raids abzubrechen. - **Autocomplete in den `duration`-Parametern** der Slash-Befehle. -- **Parameter `[duration]`** auf [`/lock`](/de/features/channel-lock#lock-duration) und [`/slowmode`](/de/features/moderation#slowmode), um die Änderung temporär anzuwenden, ohne sie manuell wieder aufheben zu müssen. +- **Parameter `[duration]`** auf [`/lock`](/de/docs/features/channel-lock#lock-duration) und [`/slowmode`](/de/docs/features/moderation#slowmode), um die Änderung temporär anzuwenden, ohne sie manuell wieder aufheben zu müssen. --- -Für die vollständige Liste der Neuerungen, Korrekturen und technischen Details, schaut in das [Changelog](/de/changelog#3-3-3). +Für die vollständige Liste der Neuerungen, Korrekturen und technischen Details, schaut in das [Changelog](/de/docs/changelog#3-3-3). :::tip 📚 Nützliche Ressourcen - 🔗 [RaidProtect zu eurem Server hinzufügen](https://raidprotect.bot/invite) diff --git a/i18n/en/docusaurus-plugin-content-blog/3.1.0/3.1.0-interactions-update.md b/i18n/en/docusaurus-plugin-content-blog/3.1.0/3.1.0-interactions-update.md index 97de031..4d9550b 100644 --- a/i18n/en/docusaurus-plugin-content-blog/3.1.0/3.1.0-interactions-update.md +++ b/i18n/en/docusaurus-plugin-content-blog/3.1.0/3.1.0-interactions-update.md @@ -17,7 +17,7 @@ It’s been a while since we last released a major update for RaidProtect, and w This update marks a turning point in the way RaidProtect works, focusing on **interaction and user-friendliness**, especially with the introduction of **slash commands** and a **revamped configuration system**. -Additionally, we’ve listened to your feedback and ideas, and this update includes many features you requested! You can also [check out the changelog](/changelog) to see which suggestions have been implemented. +Additionally, we’ve listened to your feedback and ideas, and this update includes many features you requested! You can also [check out the changelog](/docs/changelog) to see which suggestions have been implemented. ### Slash Commands {#slash-commands} @@ -27,7 +27,7 @@ No worries for long-time users—text commands are still available, and now you ### Internationalization (RP Goes Bilingual) {#internationalization} -We’ve laid the groundwork for a [**multilingual system**](/language) and added English as the second official language! More languages will be added in the future. +We’ve laid the groundwork for a [**multilingual system**](/docs/language) and added English as the second official language! More languages will be added in the future. ### A Reporting Command {#report} @@ -38,8 +38,8 @@ A long-requested feature: [**a reporting system**](/features/reports) that allow ### New Configuration Commands {#configuration} We know that setting up a bot can quickly become a headache, so we’ve made it much simpler: -- **An interactive panel with [`/settings`](/setup#settings)** to manage RaidProtect at a glance. -- **A brand-new [`/setup`](/setup#install)** to guide you right from the installation process. +- **An interactive panel with [`/settings`](/docs/setup#settings)** to manage RaidProtect at a glance. +- **A brand-new [`/setup`](/docs/setup#install)** to guide you right from the installation process. - **More flexible options** for fine-tuned configuration. ![Screenshot of the configuration menu](./assets/rp-configuration-menu.webp) diff --git a/i18n/en/docusaurus-plugin-content-blog/3.1.1/3.1.1-tag-role.md b/i18n/en/docusaurus-plugin-content-blog/3.1.1/3.1.1-tag-role.md index 847992f..5b98148 100644 --- a/i18n/en/docusaurus-plugin-content-blog/3.1.1/3.1.1-tag-role.md +++ b/i18n/en/docusaurus-plugin-content-blog/3.1.1/3.1.1-tag-role.md @@ -24,7 +24,7 @@ This feature allows you to: 💡 **How it works:** As soon as a user adds the **guild tag** to their profile, the RaidProtect bot automatically assigns them the role you've configured. And conversely, if the tag is removed, the role is too. -➡️ More details in [our documentation](/features/tag-role). +➡️ More details in [our documentation](/docs/features/tag-role). --- @@ -32,7 +32,7 @@ As soon as a user adds the **guild tag** to their profile, the RaidProtect bot a Besides the **Discord guild tag role**, this version brings other key improvements: -- **New moderation command [`/timeout`](/features/moderation#timeout)** +- **New moderation command [`/timeout`](/docs/features/moderation#timeout)** Lets you temporarily exclude a member without banning them—ideal for managing short-term inappropriate behavior. The command lets you choose a more precise and longer duration (up to 28 days) than Discord's default options. - **Automatic update tracking** @@ -40,7 +40,7 @@ Besides the **Discord guild tag role**, this version brings other key improvemen - **Various optimizations and fixes** Numerous internal improvements ensure better performance and stability. - ➕ Check the [full changelog](/changelog#3-1-1) for all the details. + ➕ Check the [full changelog](/docs/changelog#3-1-1) for all the details. --- diff --git a/i18n/en/docusaurus-plugin-content-blog/3.2.0/3.2.0-protection-update.md b/i18n/en/docusaurus-plugin-content-blog/3.2.0/3.2.0-protection-update.md index 1b246fe..2a07551 100644 --- a/i18n/en/docusaurus-plugin-content-blog/3.2.0/3.2.0-protection-update.md +++ b/i18n/en/docusaurus-plugin-content-blog/3.2.0/3.2.0-protection-update.md @@ -15,7 +15,7 @@ Version 3.2.0 marks a major milestone for the security of your Discord community ## 🛡️ No more private message scams! {#new} -Protect your members by automatically blocking the receipt of private messages with [DM Lock](/features/dm-lock). Typical use cases: +Protect your members by automatically blocking the receipt of private messages with [DM Lock](/docs/features/dm-lock). Typical use cases: - Automated spam waves during events (launches, giveaways, high-traffic periods). - Scam attempts targeting members, especially on large public servers. @@ -28,16 +28,16 @@ All fully automated, with no risk of forgetting manual steps, ensuring continuou ## ✨ Other new features in 3.2.0 {#changelog} -- **Choice of [anti-spam sanctions](/features/anti-spam#triggers)**: Precisely define how RaidProtect responds to different types of spam (kick, ban...), for moderation perfectly tailored to your community. -- **New [anti-spam logs](/features/anti-spam#logs)**: More visibility on what is detected and when, keeping you in control at a glance. -- **[Minimum account age](/features/raid-mode#minage) without captcha**: Directly filter out brand-new members even if captcha is not enabled. -- **[`/bypass minage`](/features/raid-mode#bypass-minage) command**: Manually admit a member who doesn’t meet the required account age, handy for exceptional cases. -- **Complete redesign of [`/userinfo`](/features/utilities#userinfo)**: Improved interface, clearer and more complete information. +- **Choice of [anti-spam sanctions](/docs/features/anti-spam#triggers)**: Precisely define how RaidProtect responds to different types of spam (kick, ban...), for moderation perfectly tailored to your community. +- **New [anti-spam logs](/docs/features/anti-spam#logs)**: More visibility on what is detected and when, keeping you in control at a glance. +- **[Minimum account age](/docs/features/raid-mode#minage) without captcha**: Directly filter out brand-new members even if captcha is not enabled. +- **[`/bypass minage`](/docs/features/raid-mode#bypass-minage) command**: Manually admit a member who doesn’t meet the required account age, handy for exceptional cases. +- **Complete redesign of [`/userinfo`](/docs/features/utilities#userinfo)**: Improved interface, clearer and more complete information. - **Configuration logs**: Increased traceability for every major change to the bot’s settings. --- -For the full list of new features, fixes, and technical details, see [the changelog](/changelog#3-2-0). +For the full list of new features, fixes, and technical details, see [the changelog](/docs/changelog#3-2-0). :::tip 📚 Useful resources - 🔗 [Add RaidProtect to your server](https://raidprotect.bot/invite) diff --git a/i18n/en/docusaurus-plugin-content-blog/3.2.1/3.2.1-discord-sanctions.md b/i18n/en/docusaurus-plugin-content-blog/3.2.1/3.2.1-discord-sanctions.md index db6fd2a..3ba5fe2 100644 --- a/i18n/en/docusaurus-plugin-content-blog/3.2.1/3.2.1-discord-sanctions.md +++ b/i18n/en/docusaurus-plugin-content-blog/3.2.1/3.2.1-discord-sanctions.md @@ -15,7 +15,7 @@ Version **3.2.1** of RaidProtect focuses on **everyday moderation** with new use ## ⚖️ View sanctions issued by Discord {#new} -The big new feature of this update: the [`/ds`](/features/utilities#discord-sanctions) command. It allows you to directly view the **official sanctions issued by Discord** against a user. +The big new feature of this update: the [`/ds`](/docs/features/utilities#discord-sanctions) command. It allows you to directly view the **official sanctions issued by Discord** against a user. ### 📋 What you can see @@ -30,7 +30,7 @@ The big new feature of this update: the [`/ds`](/features/utilities#discord-sanc The anti-spam system benefits from two major improvements: - Blocking **Slash Command spam**, often used to disrupt channels. -- New dedicated trigger: [**external command spam**](/features/anti-spam#triggers). +- New dedicated trigger: [**external command spam**](/docs/features/anti-spam#triggers). These additions help anticipate new forms of abuse and ensure a smoother experience for your members. @@ -40,15 +40,15 @@ These additions help anticipate new forms of abuse and ensure a smoother experie This update introduces several highly requested commands to make moderation teams’ work easier: -- **[`/slowmode`](/features/moderation#slowmode)**: enable or adjust a channel’s slow mode more precisely in one step. -- **[`/unban`](/features/moderation#unban)**: unban a user faster, with a specified reason. -- **[`/bypass captcha`](/features/captcha#bypass)**: manually allow a legitimate user who fails the captcha. +- **[`/slowmode`](/docs/features/moderation#slowmode)**: enable or adjust a channel’s slow mode more precisely in one step. +- **[`/unban`](/docs/features/moderation#unban)**: unban a user faster, with a specified reason. +- **[`/bypass captcha`](/docs/features/captcha#bypass)**: manually allow a legitimate user who fails the captcha. -Additionally, the [`/lock`](/features/channel-lock#lock) and [`/unlock`](/features/channel-lock#unlock) commands can now include a **reason**, improving clarity and moderation tracking. +Additionally, the [`/lock`](/docs/features/channel-lock#lock) and [`/unlock`](/docs/features/channel-lock#unlock) commands can now include a **reason**, improving clarity and moderation tracking. --- -To view the complete detailed list, check out [the changelog](/changelog#3-2-1). +To view the complete detailed list, check out [the changelog](/docs/changelog#3-2-1). :::tip 📚 Useful resources - 🔗 [Add RaidProtect to your server](https://raidprotect.bot/invite) diff --git a/i18n/en/docusaurus-plugin-content-blog/3.3.0/3.3.0-moderation-update.md b/i18n/en/docusaurus-plugin-content-blog/3.3.0/3.3.0-moderation-update.md index e0ed115..c470093 100644 --- a/i18n/en/docusaurus-plugin-content-blog/3.3.0/3.3.0-moderation-update.md +++ b/i18n/en/docusaurus-plugin-content-blog/3.3.0/3.3.0-moderation-update.md @@ -15,14 +15,14 @@ Version 3.3.0 revamps how sanctions are handled on your Discord server with the ## 📋 A Complete Record for Every Sanction {#new} -Keep track of every moderation action with the new [Sanctions History](/features/sanctions). Never wonder again who was sanctioned, when, or why: +Keep track of every moderation action with the new [Sanctions History](/docs/features/sanctions). Never wonder again who was sanctioned, when, or why: - **Automatic centralization**: Bans, kicks, timeouts, and automod sanctions are recorded automatically. -- **Advanced search** with [`/sanctions search`](/features/sanctions#search): Instantly retrieve a member’s history. -- **Full details** with [`/sanctions info`](/features/sanctions#info): View all information on a specific sanction. -- **Flexible editing** with [`/sanctions edit`](/features/sanctions#edit): Correct a reason or adjust an existing sanction. -- **Deletion or reversal** with [`/sanctions delete`](/features/sanctions#delete): Undo a sanction or remove it from history if needed. -- **[Smart sanction status management](/features/sanctions#status)** +- **Advanced search** with [`/sanctions search`](/docs/features/sanctions#search): Instantly retrieve a member’s history. +- **Full details** with [`/sanctions info`](/docs/features/sanctions#info): View all information on a specific sanction. +- **Flexible editing** with [`/sanctions edit`](/docs/features/sanctions#edit): Correct a reason or adjust an existing sanction. +- **Deletion or reversal** with [`/sanctions delete`](/docs/features/sanctions#delete): Undo a sanction or remove it from history if needed. +- **[Smart sanction status management](/docs/features/sanctions#status)** Every sanction now generates a confirmation indicating whether the member received the notification via DM. @@ -32,9 +32,9 @@ Every sanction now generates a confirmation indicating whether the member receiv This update also expands your moderation toolkit with three essential new commands: -- **[`/tempban`](/features/moderation#tempban)**: Temporarily ban a member for a set duration. -- **[`/warn`](/features/moderation#warn)**: Warn a member with full traceability in the history. -- **[`/untimeout`](/features/moderation#untimeout)**: Remove a timeout before it expires. +- **[`/tempban`](/docs/features/moderation#tempban)**: Temporarily ban a member for a set duration. +- **[`/warn`](/docs/features/moderation#warn)**: Warn a member with full traceability in the history. +- **[`/untimeout`](/docs/features/moderation#untimeout)**: Remove a timeout before it expires. --- @@ -42,22 +42,22 @@ This update also expands your moderation toolkit with three essential new comman The anti-raid system is now smarter and more flexible: -- **Automatic deactivation**: [RaidMode](/features/raid-mode#raid-mode) and [Auto RaidMode](/features/raid-mode#duration) turn off automatically after a set time – no more forgotten settings! -- **Duration setting**: Set the duration directly when activating with [`/raidmode`](/features/raid-mode#raid-mode). -- **New [`/joinlock`](/features/join-lock) command**: Close invites indefinitely for full control over new arrivals. -- **Acknowledgment for [Minimum Age](/features/raid-mode#minage)**: Receive confirmation that the member received the explanatory message. +- **Automatic deactivation**: [RaidMode](/docs/features/raid-mode#raid-mode) and [Auto RaidMode](/docs/features/raid-mode#duration) turn off automatically after a set time – no more forgotten settings! +- **Duration setting**: Set the duration directly when activating with [`/raidmode`](/docs/features/raid-mode#raid-mode). +- **New [`/joinlock`](/docs/features/join-lock) command**: Close invites indefinitely for full control over new arrivals. +- **Acknowledgment for [Minimum Age](/docs/features/raid-mode#minage)**: Receive confirmation that the member received the explanatory message. --- ## ✨ Other 3.3.0 Updates {#changelog} - **Dedicated sanction logs**: Set up a channel to centralize all sanction logs. -- **[`/channel duplicate`](/features/utilities#channel-duplicate)**: Strictly duplicate a channel with all its settings. +- **[`/channel duplicate`](/docs/features/utilities#channel-duplicate)**: Strictly duplicate a channel with all its settings. - **`/changelog` command**: View the changelog directly in Discord, also accessible via `/settings` and `/about`. --- -For the full list of updates, fixes, and technical details, check out the [changelog](/changelog#3-3-0). +For the full list of updates, fixes, and technical details, check out the [changelog](/docs/changelog#3-3-0). :::tip 📚 Useful Resources - 🔗 [Add RaidProtect to your server](https://raidprotect.bot/invite) diff --git a/i18n/en/docusaurus-plugin-content-blog/3.3.1/3.3.1-jail-and-mute.md b/i18n/en/docusaurus-plugin-content-blog/3.3.1/3.3.1-jail-and-mute.md index 648ef0b..a70cfad 100644 --- a/i18n/en/docusaurus-plugin-content-blog/3.3.1/3.3.1-jail-and-mute.md +++ b/i18n/en/docusaurus-plugin-content-blog/3.3.1/3.3.1-jail-and-mute.md @@ -15,11 +15,11 @@ Version 3.3.1 brings more granularity to moderation with **Jail**, **Role-based ## 🔒 New "Jail" Sanction {#jail} -Isolate a disruptive member without banning them with the new [Jail "Prison"](/features/sanctions#jail) system. The member is confined to a dedicated channel, with no access to the rest of the server: +Isolate a disruptive member without banning them with the new [Jail "Prison"](/docs/features/sanctions#jail) system. The member is confined to a dedicated channel, with no access to the rest of the server: -- **[`/jail`](/features/moderation#jail)**: Jail a member immediately. -- **[`/tempjail`](/features/moderation#tempjail)**: Temporarily jail a member for a set duration. -- **[`/unjail`](/features/moderation#unjail)**: Release a member at any time. +- **[`/jail`](/docs/features/moderation#jail)**: Jail a member immediately. +- **[`/tempjail`](/docs/features/moderation#tempjail)**: Temporarily jail a member for a set duration. +- **[`/unjail`](/docs/features/moderation#unjail)**: Release a member at any time. - **Flexible configuration**: Set the Jail role and information channel directly via `/settings`. Jail lets you handle sensitive situations while still being able to communicate with the member before making a final decision. @@ -30,10 +30,10 @@ Jail lets you handle sensitive situations while still being able to communicate Discord timeout is convenient, but restrictive: it **blocks all interactions** for the member, including buttons and menus. A timed-out member cannot view their sanctions, open a ticket, or interact with anything on the server. And its duration is limited to 28 days. -The new [Role-based Mute](/features/sanctions#mute) solves these issues: +The new [Role-based Mute](/docs/features/sanctions#mute) solves these issues: -- Beyond a [configurable threshold](/features/sanctions#mute-threshold), the bot automatically assigns a **Mute role** instead of Discord timeout. The member can no longer write, but retains the ability to use buttons and menus. -- The `/timeout` and `/untimeout` commands become [`/mute`](/features/moderation#timeout) and [`/unmute`](/features/moderation#untimeout) with smart behavior: **below the threshold, classic Discord timeout is used**. +- Beyond a [configurable threshold](/docs/features/sanctions#mute-threshold), the bot automatically assigns a **Mute role** instead of Discord timeout. The member can no longer write, but retains the ability to use buttons and menus. +- The `/timeout` and `/untimeout` commands become [`/mute`](/docs/features/moderation#timeout) and [`/unmute`](/docs/features/moderation#untimeout) with smart behavior: **below the threshold, classic Discord timeout is used**. - New `[force_timeout]` parameter to force Discord timeout regardless of the duration. --- @@ -42,17 +42,17 @@ The new [Role-based Mute](/features/sanctions#mute) solves these issues: This update brings new tools for your moderators and members: -- **[Context menu](/features/moderation#context-menu)**: Sanction a member with a simple right-click on their profile, no command needed. -- **[`/my-sanctions`](/features/utilities#my-sanctions)**: Allow your members to view their own sanctions, with a [privacy setting](/features/sanctions#sanctions-privacy) to control access. -- **[Media display](/features/sanctions#show-medias)** in sanction reasons: visual evidence is directly visible. -- **Filter redesign** in [`/sanctions search`](/features/sanctions#search) with a new [moderator type](/features/sanctions#search) filter. -- **[Import / Export](/features/sanctions#import-export)** sanctions via the support bot. +- **[Context menu](/docs/features/moderation#context-menu)**: Sanction a member with a simple right-click on their profile, no command needed. +- **[`/my-sanctions`](/docs/features/utilities#my-sanctions)**: Allow your members to view their own sanctions, with a [privacy setting](/docs/features/sanctions#sanctions-privacy) to control access. +- **[Media display](/docs/features/sanctions#show-medias)** in sanction reasons: visual evidence is directly visible. +- **Filter redesign** in [`/sanctions search`](/docs/features/sanctions#search) with a new [moderator type](/docs/features/sanctions#search) filter. +- **[Import / Export](/docs/features/sanctions#import-export)** sanctions via the support bot. --- ## 🌍 RaidProtect Speaks 3 New Languages {#i18n} -The bot and its documentation are now available in **[5 languages](/language)**: +The bot and its documentation are now available in **[5 languages](/docs/language)**: - German - Spanish @@ -70,15 +70,15 @@ Display [information panels](/features/display) in your channels with `/display ## ✨ Other 3.3.1 Updates {#changelog} -- **[Member blocking](/features/utilities#block)**: Block certain members from specific RaidProtect features with [`/block add`](/features/utilities#block-add), [`/block remove`](/features/utilities#block-remove) and [`/block list`](/features/utilities#block-list). -- **[`/prune`](/features/utilities#prune)**: Kick inactive members with more precise conditions. -- **[`/channel clear`](/features/utilities#channel-clear)**: Delete and recreate a channel in one command. +- **[Member blocking](/docs/features/utilities#block)**: Block certain members from specific RaidProtect features with [`/block add`](/docs/features/utilities#block-add), [`/block remove`](/docs/features/utilities#block-remove) and [`/block list`](/docs/features/utilities#block-list). +- **[`/prune`](/docs/features/utilities#prune)**: Kick inactive members with more precise conditions. +- **[`/channel clear`](/docs/features/utilities#channel-clear)**: Delete and recreate a channel in one command. - **Logs for `/bypass`**: Full traceability of `/bypass` commands. - **Anti-Scam**: New scam detection module. --- -For the full list of updates, fixes, and technical details, check out the [changelog](/changelog#3-3-1). +For the full list of updates, fixes, and technical details, check out the [changelog](/docs/changelog#3-3-1). :::tip 📚 Useful Resources - 🔗 [Add RaidProtect to your server](https://raidprotect.bot/invite) diff --git a/i18n/en/docusaurus-plugin-content-blog/3.3.1/scamlens-early-activation.mdx b/i18n/en/docusaurus-plugin-content-blog/3.3.1/scamlens-early-activation.mdx index 05e26b3..0958c96 100644 --- a/i18n/en/docusaurus-plugin-content-blog/3.3.1/scamlens-early-activation.mdx +++ b/i18n/en/docusaurus-plugin-content-blog/3.3.1/scamlens-early-activation.mdx @@ -56,7 +56,7 @@ For security reasons, we do not and will not disclose the detection methods used Simply [add RaidProtect](https://raidprotect.bot/invite). ScamLens will automatically detect and delete fraudulent images. #### How to prevent spam bots on my Discord server? {#anti-spam-bots} -In addition to ScamLens, enable RaidProtect's [captcha](/features/captcha) to prevent automated accounts from joining your server. +In addition to ScamLens, enable RaidProtect's [captcha](/docs/features/captcha) to prevent automated accounts from joining your server. --- diff --git a/i18n/en/docusaurus-plugin-content-blog/3.3.2/3.3.2-authentication-manager.md b/i18n/en/docusaurus-plugin-content-blog/3.3.2/3.3.2-authentication-manager.md index 149f39d..8f544e1 100644 --- a/i18n/en/docusaurus-plugin-content-blog/3.3.2/3.3.2-authentication-manager.md +++ b/i18n/en/docusaurus-plugin-content-blog/3.3.2/3.3.2-authentication-manager.md @@ -23,7 +23,7 @@ A single channel deleted through an admin account hack is already too many. ## 🔐 The Solution: Authentication Manager {#solution} -With [Authentication Manager](/features/authentication-manager) (AM), roles with sensitive permissions are no longer permanently assigned — they are granted only after an additional layer of authentication. Combined with temporary sessions that expire automatically, the exposure window is drastically reduced: roles are automatically removed at the end of the session. +With [Authentication Manager](/docs/features/authentication-manager) (AM), roles with sensitive permissions are no longer permanently assigned — they are granted only after an additional layer of authentication. Combined with temporary sessions that expire automatically, the exposure window is drastically reduced: roles are automatically removed at the end of the session. Even if an attacker steals a Discord account, they cannot use the server's destructive permissions: the role simply isn't there, and obtaining it requires an authentication they don't have. @@ -31,7 +31,7 @@ Even if an attacker steals a Discord account, they cannot use the server's destr ## ✨ What's Included {#features} -### 🛡️ [4 Authentication Methods](/features/authentication-manager#methods) +### 🛡️ [4 Authentication Methods](/docs/features/authentication-manager#methods) | **Method** | **Description** | **Grade** | | --- | --- | --- | @@ -40,29 +40,29 @@ Even if an attacker steals a Discord account, they cannot use the server's destr | OTP (2FA) | Temporary 6-digit code via Google Authenticator, Authy, 1Password... | A | | Passkey (WebAuthn) | Fingerprint, facial recognition, or physical key (YubiKey) | S | -### 🔑 [Security Grades](/features/authentication-manager#grades) +### 🔑 [Security Grades](/docs/features/authentication-manager#grades) Each method corresponds to a grade (E to S). You choose the minimum grade required per role: an internal channel can settle for a PIN, while an admin role will require a passkey. -### ⏱️ [Temporary Sessions](/features/authentication-manager#sessions) +### ⏱️ [Temporary Sessions](/docs/features/authentication-manager#sessions) Roles are no longer permanent. Each authentication opens a time-limited session (configurable up to 8 hours). When it expires, the role is automatically removed. -### ⚙️ [Manager System](/features/authentication-manager#users-tab) +### ⚙️ [Manager System](/docs/features/authentication-manager#users-tab) Grant admin permissions to a member without giving them access to the authentication system. Managers must authenticate themselves and can only manage roles below their ceiling, preventing backdoor creation and privilege escalation. -### 📋 [Audit Logs and Sessions](/features/authentication-manager#logs-tab) +### 📋 [Audit Logs and Sessions](/docs/features/authentication-manager#logs-tab) Every authentication, role assignment, and action is recorded directly in the bot. Unlike Discord logs, no one can delete them — even a compromised admin cannot erase their tracks. -### 🚫 [Brute-force Protection](/features/authentication-manager#auth-security) +### 🚫 [Brute-force Protection](/docs/features/authentication-manager#auth-security) 5 failures: one-hour lockout. 10 failures: full account reset. --- -For the full list of 3.3.2 updates, check out the [changelog](/changelog#3-3-2). +For the full list of 3.3.2 updates, check out the [changelog](/docs/changelog#3-3-2). :::tip Useful Resources - [Add RaidProtect to your server](https://raidprotect.bot/invite) diff --git a/i18n/en/docusaurus-plugin-content-blog/3.3.2/premium-launch.md b/i18n/en/docusaurus-plugin-content-blog/3.3.2/premium-launch.md index 25c465e..a0bcd9f 100644 --- a/i18n/en/docusaurus-plugin-content-blog/3.3.2/premium-launch.md +++ b/i18n/en/docusaurus-plugin-content-blog/3.3.2/premium-launch.md @@ -39,11 +39,11 @@ Use `/settings` on your Discord server and click "Premium", or go directly to th ## ✨ What Premium offers today {#features} -### 🏷️ [Customizable sanction names](/features/sanctions#custom-names) +### 🏷️ [Customizable sanction names](/docs/features/sanctions#custom-names) Rename each sanction type to match your server's vocabulary. The displayed name, the verb used in messages, and the wording of the private message sent to the sanctioned member are all freely configurable. -### 🔐 [Authentication Manager: extended limits](/features/authentication-manager) +### 🔐 [Authentication Manager: extended limits](/docs/features/authentication-manager) In the free version, the Authentication Manager is limited to 3 protected roles, 20 users, and sessions of 8 hours maximum. Premium raises these limits: @@ -53,7 +53,7 @@ In the free version, the Authentication Manager is limited to 3 protected roles, | Users | 20 | 50 | | Max. session duration | 8h | 24h | -### 📋 [Information Panels: extended limits](/features/display) +### 📋 [Information Panels: extended limits](/docs/features/display) Go from 2 to 4 public information panels (+ the slot reserved for Jail), to cover more content on your server. @@ -63,7 +63,7 @@ Get early access to certain experimental features before their official release. --- -For the full list of changes, check out [the changelog](/changelog). +For the full list of changes, check out [the changelog](/docs/changelog). :::tip Useful resources - [Add RaidProtect to your server](https://raidprotect.bot/invite) diff --git a/i18n/en/docusaurus-plugin-content-blog/3.3.3/3.3.3-modview.md b/i18n/en/docusaurus-plugin-content-blog/3.3.3/3.3.3-modview.md index a1849c0..b6af3c3 100644 --- a/i18n/en/docusaurus-plugin-content-blog/3.3.3/3.3.3-modview.md +++ b/i18n/en/docusaurus-plugin-content-blog/3.3.3/3.3.3-modview.md @@ -15,18 +15,18 @@ Version 3.3.3 rounds out the **moderator's toolbox**: a new **centralized modera ## 🔍 ModView: everything about a member, in a single command {#modview} -No more juggling between multiple commands to figure out a member's situation. The new [`/modview`](/features/moderation#modview) command opens a **centralized moderation view**: a complete recap of the member, with all the quick actions accessible directly. +No more juggling between multiple commands to figure out a member's situation. The new [`/modview`](/docs/features/moderation#modview) command opens a **centralized moderation view**: a complete recap of the member, with all the quick actions accessible directly. -- Their **[sanction history](/features/sanctions)**, with up-to-date statuses. -- The **[internal moderation note](/features/moderation#note)** shared by the staff. -- Their **[last deleted message](/features/moderation#snipe)** from the past hour, if any. +- Their **[sanction history](/docs/features/sanctions)**, with up-to-date statuses. +- The **[internal moderation note](/docs/features/moderation#note)** shared by the staff. +- Their **[last deleted message](/docs/features/moderation#snipe)** from the past hour, if any. And above all, **quick actions**: sanction the member directly from the view (ban, kick, mute, jail, warn…) or edit their note, without having to retype a command or switch windows. Two complementary commands ship alongside ModView: -- **[`/note`](/features/moderation#note)**: add a private note to a member, visible only to staff. Perfect for sharing context between moderators without cluttering the sanction history. -- **[`/snipe`](/features/moderation#snipe)**: retrieve the most recent deleted messages of a channel or a member from the past hour. +- **[`/note`](/docs/features/moderation#note)**: add a private note to a member, visible only to staff. Perfect for sharing context between moderators without cluttering the sanction history. +- **[`/snipe`](/docs/features/moderation#snipe)**: retrieve the most recent deleted messages of a channel or a member from the past hour. :::tip ModView is also accessible via the context menu: right-click on a profile → **Apps** → **Open Modview**. @@ -38,28 +38,28 @@ ModView is also accessible via the context menu: right-click on a profile → ** Several additions refine day-to-day sanction handling: -- **New [`/softban`](/features/moderation#softban) command**: bans then unbans a member. Their messages are deleted, but they can come back. Perfect for cleaning up after a hacked account. -- **[`silent` option](/features/moderation)** on every sanction command: prevents RaidProtect from sending a private message to the target, when you want to handle the situation separately. -- **[`delete-messages` parameter](/features/moderation#ban)** on `/ban` and `/tempban`: pick directly the duration of message history to delete at the time of the ban. -- **["Replace with the Jail role" mode](/features/sanctions#jail-roles)**: the Jail sanction can now remove all of a member's roles during the jail and automatically restore them on release. -- **AutoMod → role-based mute conversion** *(Premium public beta)*: timeouts applied by Discord's AutoMod beyond the [configured threshold](/features/sanctions#mute-threshold) are automatically converted to a [role-based mute](/features/sanctions#mute), for full consistency with RaidProtect's system. +- **New [`/softban`](/docs/features/moderation#softban) command**: bans then unbans a member. Their messages are deleted, but they can come back. Perfect for cleaning up after a hacked account. +- **[`silent` option](/docs/features/moderation)** on every sanction command: prevents RaidProtect from sending a private message to the target, when you want to handle the situation separately. +- **[`delete-messages` parameter](/docs/features/moderation#ban)** on `/ban` and `/tempban`: pick directly the duration of message history to delete at the time of the ban. +- **["Replace with the Jail role" mode](/docs/features/sanctions#jail-roles)**: the Jail sanction can now remove all of a member's roles during the jail and automatically restore them on release. +- **AutoMod → role-based mute conversion** *(Premium public beta)*: timeouts applied by Discord's AutoMod beyond the [configured threshold](/docs/features/sanctions#mute-threshold) are automatically converted to a [role-based mute](/docs/features/sanctions#mute), for full consistency with RaidProtect's system. -Other quieter improvements: better **acknowledgment tracking** for sanction DMs (received, DMs closed, expired, silent), **server invite button** in the notification DMs after a kick, softban or temporary ban, the ability to **add a reason to `/sanctions delete`**, and to **[fully disable sanctions](/features/sanctions#disable)** on a server. +Other quieter improvements: better **acknowledgment tracking** for sanction DMs (received, DMs closed, expired, silent), **server invite button** in the notification DMs after a kick, softban or temporary ban, the ability to **add a reason to `/sanctions delete`**, and to **[fully disable sanctions](/docs/features/sanctions#disable)** on a server. --- ## ✨ Other additions {#other} - **RaidProtect profile customization** *(Premium)*: avatar, banner and nickname writing style, so the bot blends into your server's visual identity. -- **[Duration for anti-spam sanctions](/features/anti-spam#duration)**: pick a single duration for every sanction applied by the anti-spam. +- **[Duration for anti-spam sanctions](/docs/features/anti-spam#duration)**: pick a single duration for every sanction applied by the anti-spam. - **New parsing for message commands**: stricter and more consistent with slash commands. -- **[Automatic DM closure](/features/raid-mode#close-dm)** when auto raid mode kicks in, to cut off hostile DM waves during a raid. +- **[Automatic DM closure](/docs/features/raid-mode#close-dm)** when auto raid mode kicks in, to cut off hostile DM waves during a raid. - **Autocomplete on `duration` parameters** of slash commands. -- **`[duration]` parameter** on [`/lock`](/features/channel-lock#lock-duration) and [`/slowmode`](/features/moderation#slowmode) to apply the change temporarily, without having to manually undo it later. +- **`[duration]` parameter** on [`/lock`](/docs/features/channel-lock#lock-duration) and [`/slowmode`](/docs/features/moderation#slowmode) to apply the change temporarily, without having to manually undo it later. --- -For the full list of additions, fixes and technical details, see [the changelog](/changelog#3-3-3). +For the full list of additions, fixes and technical details, see [the changelog](/docs/changelog#3-3-3). :::tip 📚 Useful resources - 🔗 [Add RaidProtect to your server](https://raidprotect.bot/invite) diff --git a/i18n/es/docusaurus-plugin-content-blog/3.1.0/3.1.0-interactions-update.md b/i18n/es/docusaurus-plugin-content-blog/3.1.0/3.1.0-interactions-update.md index c1764dc..d4124c8 100644 --- a/i18n/es/docusaurus-plugin-content-blog/3.1.0/3.1.0-interactions-update.md +++ b/i18n/es/docusaurus-plugin-content-blog/3.1.0/3.1.0-interactions-update.md @@ -17,7 +17,7 @@ Ha pasado un tiempo desde nuestra última actualización importante de RaidProte Esta actualización marca un punto de inflexión en la forma en que funciona RaidProtect, enfocándose en la **interacción y la facilidad de uso**, especialmente con la introducción de los **comandos slash** y un **sistema de configuración renovado**. -Además, hemos escuchado sus comentarios e ideas, ¡y esta actualización incluye muchas funciones que solicitaron! También pueden [consultar el registro de cambios](/changelog) para ver qué sugerencias se han implementado. +Además, hemos escuchado sus comentarios e ideas, ¡y esta actualización incluye muchas funciones que solicitaron! También pueden [consultar el registro de cambios](/docs/changelog) para ver qué sugerencias se han implementado. ### Comandos Slash {#slash-commands} @@ -27,7 +27,7 @@ No se preocupen los usuarios de siempre: los comandos de texto siguen disponible ### Internacionalización (RP se vuelve bilingüe) {#internationalization} -Hemos sentado las bases de un [**sistema multilingüe**](/language) ¡y hemos añadido el inglés como segundo idioma oficial! Se agregarán más idiomas en el futuro. +Hemos sentado las bases de un [**sistema multilingüe**](/docs/language) ¡y hemos añadido el inglés como segundo idioma oficial! Se agregarán más idiomas en el futuro. ### Un comando de reportes {#report} @@ -38,8 +38,8 @@ Una función muy solicitada: [**un sistema de reportes**](/features/reports) que ### Nuevos comandos de configuración {#configuration} Sabemos que configurar un bot puede volverse un dolor de cabeza rápidamente, así que lo hemos simplificado mucho: -- **Un panel interactivo con [`/settings`](/setup#settings)** para gestionar RaidProtect de un vistazo. -- **Un nuevo [`/setup`](/setup#install)** para guiarte desde el proceso de instalación. +- **Un panel interactivo con [`/settings`](/docs/setup#settings)** para gestionar RaidProtect de un vistazo. +- **Un nuevo [`/setup`](/docs/setup#install)** para guiarte desde el proceso de instalación. - **Opciones más flexibles** para una configuración más detallada. ![Screenshot of the configuration menu](../../../en/docusaurus-plugin-content-blog/3.1.0/assets/rp-configuration-menu.webp) diff --git a/i18n/es/docusaurus-plugin-content-blog/3.1.1/3.1.1-tag-role.md b/i18n/es/docusaurus-plugin-content-blog/3.1.1/3.1.1-tag-role.md index 5211ca2..0f0d0d2 100644 --- a/i18n/es/docusaurus-plugin-content-blog/3.1.1/3.1.1-tag-role.md +++ b/i18n/es/docusaurus-plugin-content-blog/3.1.1/3.1.1-tag-role.md @@ -24,7 +24,7 @@ Esta función te permite: 💡 **Cómo funciona:** En cuanto un usuario añade la **etiqueta del servidor** a su perfil, el bot RaidProtect le asigna automáticamente el rol que hayas configurado. Y a la inversa, si la etiqueta se elimina, el rol también. -➡️ Más detalles en [nuestra documentación](/features/tag-role). +➡️ Más detalles en [nuestra documentación](/docs/features/tag-role). --- @@ -32,7 +32,7 @@ En cuanto un usuario añade la **etiqueta del servidor** a su perfil, el bot Rai Además del **rol de etiqueta del servidor de Discord**, esta versión trae otras mejoras importantes: -- **Nuevo comando de moderación [`/timeout`](/features/moderation#timeout)** +- **Nuevo comando de moderación [`/timeout`](/docs/features/moderation#timeout)** Permite excluir temporalmente a un miembro sin banearlo, ideal para gestionar comportamientos inapropiados a corto plazo. El comando te permite elegir una duración más precisa y más larga (hasta 28 días) que las opciones predeterminadas de Discord. - **Seguimiento automático de actualizaciones** @@ -40,7 +40,7 @@ Además del **rol de etiqueta del servidor de Discord**, esta versión trae otra - **Diversas optimizaciones y correcciones** Numerosas mejoras internas garantizan un mejor rendimiento y estabilidad. - ➕ Consulta el [registro de cambios completo](/changelog#3-1-1) para todos los detalles. + ➕ Consulta el [registro de cambios completo](/docs/changelog#3-1-1) para todos los detalles. --- diff --git a/i18n/es/docusaurus-plugin-content-blog/3.2.0/3.2.0-protection-update.md b/i18n/es/docusaurus-plugin-content-blog/3.2.0/3.2.0-protection-update.md index b0a0f60..61e9289 100644 --- a/i18n/es/docusaurus-plugin-content-blog/3.2.0/3.2.0-protection-update.md +++ b/i18n/es/docusaurus-plugin-content-blog/3.2.0/3.2.0-protection-update.md @@ -15,7 +15,7 @@ La versión 3.2.0 marca un hito importante para la seguridad de tu comunidad de ## 🛡️ ¡Se acabaron las estafas por mensaje privado! {#new} -Protege a tus miembros bloqueando automáticamente la recepción de mensajes privados con [DM Lock](/features/dm-lock). Casos de uso típicos: +Protege a tus miembros bloqueando automáticamente la recepción de mensajes privados con [DM Lock](/docs/features/dm-lock). Casos de uso típicos: - Oleadas de spam automatizado durante eventos (lanzamientos, sorteos, periodos de alto tráfico). - Intentos de estafa dirigidos a miembros, especialmente en servidores públicos grandes. @@ -28,16 +28,16 @@ Todo completamente automatizado, sin riesgo de olvidar pasos manuales, garantiza ## ✨ Otras novedades de la 3.2.0 {#changelog} -- **Elección de [sanciones anti-spam](/features/anti-spam#triggers)**: Define con precisión cómo responde RaidProtect a diferentes tipos de spam (kick, ban...), para una moderación perfectamente adaptada a tu comunidad. -- **Nuevos [registros anti-spam](/features/anti-spam#logs)**: Más visibilidad sobre lo que se detecta y cuándo, manteniéndote en control de un vistazo. -- **[Antigüedad mínima de cuenta](/features/raid-mode#minage) sin captcha**: Filtra directamente a los miembros con cuentas nuevas incluso si el captcha no está activado. -- **Comando [`/bypass minage`](/features/raid-mode#bypass-minage)**: Admite manualmente a un miembro que no cumple con la antigüedad de cuenta requerida, útil para casos excepcionales. -- **Rediseño completo de [`/userinfo`](/features/utilities#userinfo)**: Interfaz mejorada, información más clara y completa. +- **Elección de [sanciones anti-spam](/docs/features/anti-spam#triggers)**: Define con precisión cómo responde RaidProtect a diferentes tipos de spam (kick, ban...), para una moderación perfectamente adaptada a tu comunidad. +- **Nuevos [registros anti-spam](/docs/features/anti-spam#logs)**: Más visibilidad sobre lo que se detecta y cuándo, manteniéndote en control de un vistazo. +- **[Antigüedad mínima de cuenta](/docs/features/raid-mode#minage) sin captcha**: Filtra directamente a los miembros con cuentas nuevas incluso si el captcha no está activado. +- **Comando [`/bypass minage`](/docs/features/raid-mode#bypass-minage)**: Admite manualmente a un miembro que no cumple con la antigüedad de cuenta requerida, útil para casos excepcionales. +- **Rediseño completo de [`/userinfo`](/docs/features/utilities#userinfo)**: Interfaz mejorada, información más clara y completa. - **Registros de configuración**: Mayor trazabilidad para cada cambio importante en la configuración del bot. --- -Para la lista completa de novedades, correcciones y detalles técnicos, consulta [el registro de cambios](/changelog#3-2-0). +Para la lista completa de novedades, correcciones y detalles técnicos, consulta [el registro de cambios](/docs/changelog#3-2-0). :::tip 📚 Recursos útiles - 🔗 [Añade RaidProtect a tu servidor](https://raidprotect.bot/invite) diff --git a/i18n/es/docusaurus-plugin-content-blog/3.2.1/3.2.1-discord-sanctions.md b/i18n/es/docusaurus-plugin-content-blog/3.2.1/3.2.1-discord-sanctions.md index af487ef..af53a90 100644 --- a/i18n/es/docusaurus-plugin-content-blog/3.2.1/3.2.1-discord-sanctions.md +++ b/i18n/es/docusaurus-plugin-content-blog/3.2.1/3.2.1-discord-sanctions.md @@ -15,7 +15,7 @@ La versión **3.2.1** de RaidProtect se centra en la **moderación del día a d ## ⚖️ Ver las sanciones emitidas por Discord {#new} -La gran novedad de esta actualización: el comando [`/ds`](/features/utilities#discord-sanctions). Permite ver directamente las **sanciones oficiales emitidas por Discord** contra un usuario. +La gran novedad de esta actualización: el comando [`/ds`](/docs/features/utilities#discord-sanctions). Permite ver directamente las **sanciones oficiales emitidas por Discord** contra un usuario. ### 📋 Qué puedes ver @@ -30,7 +30,7 @@ La gran novedad de esta actualización: el comando [`/ds`](/features/utilities#d El sistema anti-spam se beneficia de dos mejoras importantes: - Bloqueo del **spam de comandos slash**, usado frecuentemente para interrumpir canales. -- Nuevo activador dedicado: [**spam de comandos externos**](/features/anti-spam#triggers). +- Nuevo activador dedicado: [**spam de comandos externos**](/docs/features/anti-spam#triggers). Estas mejoras ayudan a anticipar nuevas formas de abuso y garantizan una experiencia más fluida para tus miembros. @@ -40,15 +40,15 @@ Estas mejoras ayudan a anticipar nuevas formas de abuso y garantizan una experie Esta actualización introduce varios comandos muy solicitados para facilitar el trabajo de los equipos de moderación: -- **[`/slowmode`](/features/moderation#slowmode)**: activa o ajusta el modo lento de un canal con mayor precisión en un solo paso. -- **[`/unban`](/features/moderation#unban)**: desbanea a un usuario más rápido, con un motivo especificado. -- **[`/bypass captcha`](/features/captcha#bypass)**: permite manualmente el acceso a un usuario legítimo que no pasa el captcha. +- **[`/slowmode`](/docs/features/moderation#slowmode)**: activa o ajusta el modo lento de un canal con mayor precisión en un solo paso. +- **[`/unban`](/docs/features/moderation#unban)**: desbanea a un usuario más rápido, con un motivo especificado. +- **[`/bypass captcha`](/docs/features/captcha#bypass)**: permite manualmente el acceso a un usuario legítimo que no pasa el captcha. -Además, los comandos [`/lock`](/features/channel-lock#lock) y [`/unlock`](/features/channel-lock#unlock) ahora pueden incluir un **motivo**, mejorando la claridad y el seguimiento de la moderación. +Además, los comandos [`/lock`](/docs/features/channel-lock#lock) y [`/unlock`](/docs/features/channel-lock#unlock) ahora pueden incluir un **motivo**, mejorando la claridad y el seguimiento de la moderación. --- -Para ver la lista completa y detallada, consulta [el registro de cambios](/changelog#3-2-1). +Para ver la lista completa y detallada, consulta [el registro de cambios](/docs/changelog#3-2-1). :::tip 📚 Recursos útiles - 🔗 [Añade RaidProtect a tu servidor](https://raidprotect.bot/invite) diff --git a/i18n/es/docusaurus-plugin-content-blog/3.3.0/3.3.0-moderation-update.md b/i18n/es/docusaurus-plugin-content-blog/3.3.0/3.3.0-moderation-update.md index 5a5eb8e..40bc594 100644 --- a/i18n/es/docusaurus-plugin-content-blog/3.3.0/3.3.0-moderation-update.md +++ b/i18n/es/docusaurus-plugin-content-blog/3.3.0/3.3.0-moderation-update.md @@ -15,14 +15,14 @@ La versión 3.3.0 renueva la forma en que se gestionan las sanciones en tu servi ## 📋 Un registro completo para cada sanción {#new} -Lleva el control de cada acción de moderación con el nuevo [Historial de Sanciones](/features/sanctions). Nunca más te preguntarás quién fue sancionado, cuándo o por qué: +Lleva el control de cada acción de moderación con el nuevo [Historial de Sanciones](/docs/features/sanctions). Nunca más te preguntarás quién fue sancionado, cuándo o por qué: - **Centralización automática**: Baneos, expulsiones, timeouts y sanciones del automod se registran automáticamente. -- **Búsqueda avanzada** con [`/sanctions search`](/features/sanctions#search): Recupera al instante el historial de un miembro. -- **Detalles completos** con [`/sanctions info`](/features/sanctions#info): Consulta toda la información de una sanción específica. -- **Edición flexible** con [`/sanctions edit`](/features/sanctions#edit): Corrige un motivo o ajusta una sanción existente. -- **Eliminación o reversión** con [`/sanctions delete`](/features/sanctions#delete): Revierte una sanción o elimínala del historial si es necesario. -- **[Gestión inteligente del estado de las sanciones](/features/sanctions#status)** +- **Búsqueda avanzada** con [`/sanctions search`](/docs/features/sanctions#search): Recupera al instante el historial de un miembro. +- **Detalles completos** con [`/sanctions info`](/docs/features/sanctions#info): Consulta toda la información de una sanción específica. +- **Edición flexible** con [`/sanctions edit`](/docs/features/sanctions#edit): Corrige un motivo o ajusta una sanción existente. +- **Eliminación o reversión** con [`/sanctions delete`](/docs/features/sanctions#delete): Revierte una sanción o elimínala del historial si es necesario. +- **[Gestión inteligente del estado de las sanciones](/docs/features/sanctions#status)** Cada sanción genera ahora una confirmación indicando si el miembro recibió la notificación por MD. @@ -32,9 +32,9 @@ Cada sanción genera ahora una confirmación indicando si el miembro recibió la Esta actualización también amplía tu kit de herramientas de moderación con tres nuevos comandos esenciales: -- **[`/tempban`](/features/moderation#tempban)**: Banea temporalmente a un miembro durante un periodo determinado. -- **[`/warn`](/features/moderation#warn)**: Advierte a un miembro con trazabilidad completa en el historial. -- **[`/untimeout`](/features/moderation#untimeout)**: Elimina un timeout antes de que expire. +- **[`/tempban`](/docs/features/moderation#tempban)**: Banea temporalmente a un miembro durante un periodo determinado. +- **[`/warn`](/docs/features/moderation#warn)**: Advierte a un miembro con trazabilidad completa en el historial. +- **[`/untimeout`](/docs/features/moderation#untimeout)**: Elimina un timeout antes de que expire. --- @@ -42,22 +42,22 @@ Esta actualización también amplía tu kit de herramientas de moderación con t El sistema anti-raid es ahora más inteligente y flexible: -- **Desactivación automática**: [RaidMode](/features/raid-mode#raid-mode) y [Auto RaidMode](/features/raid-mode#duration) se desactivan automáticamente después de un tiempo establecido, ¡no más configuraciones olvidadas! -- **Configuración de duración**: Establece la duración directamente al activar con [`/raidmode`](/features/raid-mode#raid-mode). -- **Nuevo comando [`/joinlock`](/features/join-lock)**: Cierra las invitaciones indefinidamente para un control total sobre los nuevos ingresos. -- **Confirmación de [Antigüedad mínima](/features/raid-mode#minage)**: Recibe confirmación de que el miembro recibió el mensaje explicativo. +- **Desactivación automática**: [RaidMode](/docs/features/raid-mode#raid-mode) y [Auto RaidMode](/docs/features/raid-mode#duration) se desactivan automáticamente después de un tiempo establecido, ¡no más configuraciones olvidadas! +- **Configuración de duración**: Establece la duración directamente al activar con [`/raidmode`](/docs/features/raid-mode#raid-mode). +- **Nuevo comando [`/joinlock`](/docs/features/join-lock)**: Cierra las invitaciones indefinidamente para un control total sobre los nuevos ingresos. +- **Confirmación de [Antigüedad mínima](/docs/features/raid-mode#minage)**: Recibe confirmación de que el miembro recibió el mensaje explicativo. --- ## ✨ Otras novedades de la 3.3.0 {#changelog} - **Registros de sanciones dedicados**: Configura un canal para centralizar todos los registros de sanciones. -- **[`/channel duplicate`](/features/utilities#channel-duplicate)**: Duplica un canal exactamente con todas sus configuraciones. +- **[`/channel duplicate`](/docs/features/utilities#channel-duplicate)**: Duplica un canal exactamente con todas sus configuraciones. - **Comando `/changelog`**: Consulta el registro de cambios directamente en Discord, también accesible desde `/settings` y `/about`. --- -Para la lista completa de novedades, correcciones y detalles técnicos, consulta el [registro de cambios](/changelog#3-3-0). +Para la lista completa de novedades, correcciones y detalles técnicos, consulta el [registro de cambios](/docs/changelog#3-3-0). :::tip 📚 Recursos útiles - 🔗 [Añade RaidProtect a tu servidor](https://raidprotect.bot/invite) diff --git a/i18n/es/docusaurus-plugin-content-blog/3.3.1/3.3.1-jail-and-mute.md b/i18n/es/docusaurus-plugin-content-blog/3.3.1/3.3.1-jail-and-mute.md index d7fbfc5..8b2a41a 100644 --- a/i18n/es/docusaurus-plugin-content-blog/3.3.1/3.3.1-jail-and-mute.md +++ b/i18n/es/docusaurus-plugin-content-blog/3.3.1/3.3.1-jail-and-mute.md @@ -15,11 +15,11 @@ La versión 3.3.1 ofrece más granularidad en la moderación con **Jail**, **Mut ## 🔒 Nueva sanción "Jail" {#jail} -Aísla a un miembro problemático sin banearlo gracias al nuevo sistema de [Jail "Prisión"](/features/sanctions#jail). El miembro queda confinado en un canal dedicado, sin acceso al resto del servidor: +Aísla a un miembro problemático sin banearlo gracias al nuevo sistema de [Jail "Prisión"](/docs/features/sanctions#jail). El miembro queda confinado en un canal dedicado, sin acceso al resto del servidor: -- **[`/jail`](/features/moderation#jail)**: Encarcela a un miembro inmediatamente. -- **[`/tempjail`](/features/moderation#tempjail)**: Encarcela temporalmente a un miembro por un periodo definido. -- **[`/unjail`](/features/moderation#unjail)**: Libera a un miembro en cualquier momento. +- **[`/jail`](/docs/features/moderation#jail)**: Encarcela a un miembro inmediatamente. +- **[`/tempjail`](/docs/features/moderation#tempjail)**: Encarcela temporalmente a un miembro por un periodo definido. +- **[`/unjail`](/docs/features/moderation#unjail)**: Libera a un miembro en cualquier momento. - **Configuración flexible**: Define el rol de Jail y el canal de información directamente desde `/settings`. La Jail permite gestionar situaciones delicadas dejando la posibilidad de comunicarse con el miembro afectado antes de tomar una decisión definitiva. @@ -30,10 +30,10 @@ La Jail permite gestionar situaciones delicadas dejando la posibilidad de comuni El timeout de Discord es práctico, pero restrictivo: **bloquea todas las interacciones** del miembro, incluidos los botones y menús. Un miembro en timeout no puede consultar sus sanciones, abrir un ticket ni interactuar con ningún elemento del servidor. Y su duración está limitada a 28 días. -El nuevo [Mute basado en rol](/features/sanctions#mute) resuelve estos problemas: +El nuevo [Mute basado en rol](/docs/features/sanctions#mute) resuelve estos problemas: -- Por encima de un [umbral configurable](/features/sanctions#mute-threshold), el bot asigna automáticamente un **rol de Mute** en lugar del timeout de Discord. El miembro ya no puede escribir, pero conserva la posibilidad de usar botones y menús. -- Los comandos `/timeout` y `/untimeout` pasan a ser [`/mute`](/features/moderation#timeout) y [`/unmute`](/features/moderation#untimeout) con un funcionamiento inteligente: **por debajo del umbral, se utiliza el timeout clásico de Discord**. +- Por encima de un [umbral configurable](/docs/features/sanctions#mute-threshold), el bot asigna automáticamente un **rol de Mute** en lugar del timeout de Discord. El miembro ya no puede escribir, pero conserva la posibilidad de usar botones y menús. +- Los comandos `/timeout` y `/untimeout` pasan a ser [`/mute`](/docs/features/moderation#timeout) y [`/unmute`](/docs/features/moderation#untimeout) con un funcionamiento inteligente: **por debajo del umbral, se utiliza el timeout clásico de Discord**. - Nuevo parámetro `[force_timeout]` para forzar el timeout de Discord independientemente de la duración. --- @@ -42,17 +42,17 @@ El nuevo [Mute basado en rol](/features/sanctions#mute) resuelve estos problemas Esta actualización aporta nuevas herramientas para el día a día de tus moderadores y miembros: -- **[Menú contextual](/features/moderation#context-menu)**: Sanciona a un miembro con un simple clic derecho en su perfil, sin necesidad de escribir un comando. -- **[`/my-sanctions`](/features/utilities#my-sanctions)**: Permite a tus miembros consultar sus propias sanciones, con un [parámetro de privacidad](/features/sanctions#sanctions-privacy) para controlar el acceso. -- **[Visualización de medios](/features/sanctions#show-medias)** en las razones de sanciones: las pruebas visuales son directamente visibles. -- **Rediseño de los filtros** en [`/sanctions search`](/features/sanctions#search) con un nuevo filtro por [tipo de moderador](/features/sanctions#search). -- **[Importar / Exportar](/features/sanctions#import-export)** sanciones mediante el bot de soporte. +- **[Menú contextual](/docs/features/moderation#context-menu)**: Sanciona a un miembro con un simple clic derecho en su perfil, sin necesidad de escribir un comando. +- **[`/my-sanctions`](/docs/features/utilities#my-sanctions)**: Permite a tus miembros consultar sus propias sanciones, con un [parámetro de privacidad](/docs/features/sanctions#sanctions-privacy) para controlar el acceso. +- **[Visualización de medios](/docs/features/sanctions#show-medias)** en las razones de sanciones: las pruebas visuales son directamente visibles. +- **Rediseño de los filtros** en [`/sanctions search`](/docs/features/sanctions#search) con un nuevo filtro por [tipo de moderador](/docs/features/sanctions#search). +- **[Importar / Exportar](/docs/features/sanctions#import-export)** sanciones mediante el bot de soporte. --- ## 🌍 RaidProtect habla 3 nuevos idiomas {#i18n} -El bot y su documentación están ahora disponibles en **[5 idiomas](/language)**: +El bot y su documentación están ahora disponibles en **[5 idiomas](/docs/language)**: - Alemán - Español @@ -70,15 +70,15 @@ Muestra [paneles de información](/features/display) en tus canales con `/displa ## ✨ Otras novedades de la 3.3.1 {#changelog} -- **[Bloqueo de miembros](/features/utilities#block)**: Bloquea el acceso de ciertos miembros a funciones específicas de RaidProtect con [`/block add`](/features/utilities#block-add), [`/block remove`](/features/utilities#block-remove) y [`/block list`](/features/utilities#block-list). -- **[`/prune`](/features/utilities#prune)**: Expulsa miembros inactivos con condiciones más precisas. -- **[`/channel clear`](/features/utilities#channel-clear)**: Elimina y recrea un canal en un solo comando. +- **[Bloqueo de miembros](/docs/features/utilities#block)**: Bloquea el acceso de ciertos miembros a funciones específicas de RaidProtect con [`/block add`](/docs/features/utilities#block-add), [`/block remove`](/docs/features/utilities#block-remove) y [`/block list`](/docs/features/utilities#block-list). +- **[`/prune`](/docs/features/utilities#prune)**: Expulsa miembros inactivos con condiciones más precisas. +- **[`/channel clear`](/docs/features/utilities#channel-clear)**: Elimina y recrea un canal en un solo comando. - **Registros para `/bypass`**: Trazabilidad completa de los comandos `/bypass`. - **Anti-Scam**: Nuevo módulo de detección de intentos de estafa. --- -Para la lista completa de novedades, correcciones y detalles técnicos, consulta el [registro de cambios](/changelog#3-3-1). +Para la lista completa de novedades, correcciones y detalles técnicos, consulta el [registro de cambios](/docs/changelog#3-3-1). :::tip 📚 Recursos útiles - 🔗 [Añade RaidProtect a tu servidor](https://raidprotect.bot/invite) diff --git a/i18n/es/docusaurus-plugin-content-blog/3.3.1/scamlens-early-activation.mdx b/i18n/es/docusaurus-plugin-content-blog/3.3.1/scamlens-early-activation.mdx index 4faefc6..50293b1 100644 --- a/i18n/es/docusaurus-plugin-content-blog/3.3.1/scamlens-early-activation.mdx +++ b/i18n/es/docusaurus-plugin-content-blog/3.3.1/scamlens-early-activation.mdx @@ -56,7 +56,7 @@ Por razones de seguridad, no comunicamos ni comunicaremos los métodos de detecc Basta con [añadir RaidProtect](https://raidprotect.bot/invite). ScamLens detectará y eliminará automáticamente las imágenes fraudulentas. #### ¿Cómo evitar los bots de spam en mi servidor de Discord? {#anti-spam-bots} -Además de ScamLens, activa el [captcha](/features/captcha) de RaidProtect para impedir que cuentas automatizadas se unan a tu servidor. +Además de ScamLens, activa el [captcha](/docs/features/captcha) de RaidProtect para impedir que cuentas automatizadas se unan a tu servidor. --- diff --git a/i18n/es/docusaurus-plugin-content-blog/3.3.2/3.3.2-authentication-manager.md b/i18n/es/docusaurus-plugin-content-blog/3.3.2/3.3.2-authentication-manager.md index a198f08..fcd7ea7 100644 --- a/i18n/es/docusaurus-plugin-content-blog/3.3.2/3.3.2-authentication-manager.md +++ b/i18n/es/docusaurus-plugin-content-blog/3.3.2/3.3.2-authentication-manager.md @@ -23,7 +23,7 @@ Un solo canal eliminado por el hackeo de una cuenta admin ya es demasiado. ## 🔐 La solución: Authentication Manager {#solution} -Con [Authentication Manager](/features/authentication-manager) (AM), los roles con permisos sensibles ya no se asignan de forma permanente, sino únicamente tras una capa adicional de autenticación. Combinado con sesiones temporales que expiran automáticamente, la ventana de exposición se reduce drásticamente: los roles se retiran automáticamente al final de la sesión. +Con [Authentication Manager](/docs/features/authentication-manager) (AM), los roles con permisos sensibles ya no se asignan de forma permanente, sino únicamente tras una capa adicional de autenticación. Combinado con sesiones temporales que expiran automáticamente, la ventana de exposición se reduce drásticamente: los roles se retiran automáticamente al final de la sesión. Incluso si un atacante roba una cuenta de Discord, no puede usar los permisos destructivos del servidor: el rol simplemente no está ahí, y obtenerlo requiere una autenticación que no posee. @@ -31,7 +31,7 @@ Incluso si un atacante roba una cuenta de Discord, no puede usar los permisos de ## ✨ Qué incluye {#features} -### 🛡️ [4 métodos de autenticación](/features/authentication-manager#methods) +### 🛡️ [4 métodos de autenticación](/docs/features/authentication-manager#methods) | **Método** | **Descripción** | **Grado** | | --- | --- | --- | @@ -40,29 +40,29 @@ Incluso si un atacante roba una cuenta de Discord, no puede usar los permisos de | OTP (2FA) | Código temporal de 6 dígitos vía Google Authenticator, Authy, 1Password... | A | | Passkey (WebAuthn) | Huella digital, reconocimiento facial o llave física (YubiKey) | S | -### 🔑 [Grados de seguridad](/features/authentication-manager#grades) +### 🔑 [Grados de seguridad](/docs/features/authentication-manager#grades) Cada método corresponde a un grado (E a S). Tú eliges el grado mínimo requerido por rol: un acceso interno puede conformarse con un PIN, un rol admin exigirá una passkey. -### ⏱️ [Sesiones temporales](/features/authentication-manager#sessions) +### ⏱️ [Sesiones temporales](/docs/features/authentication-manager#sessions) Los roles ya no son permanentes. Cada autenticación abre una sesión de duración limitada (configurable hasta 8 horas). Al expirar, el rol se retira automáticamente. -### ⚙️ [Sistema de managers](/features/authentication-manager#users-tab) +### ⚙️ [Sistema de managers](/docs/features/authentication-manager#users-tab) Otorga permisos de admin a un miembro sin darle acceso al sistema de autenticación. Los managers deben autenticarse ellos mismos y solo pueden gestionar roles inferiores a su techo, lo que impide la creación de puertas traseras y la escalada de privilegios. -### 📋 [Logs de auditoría y sesiones](/features/authentication-manager#logs-tab) +### 📋 [Logs de auditoría y sesiones](/docs/features/authentication-manager#logs-tab) Cada autenticación, asignación de rol y acción se registra directamente en el bot. A diferencia de los logs de Discord, nadie puede eliminarlos: ni siquiera un admin comprometido puede borrar sus huellas. -### 🚫 [Protección anti fuerza bruta](/features/authentication-manager#auth-security) +### 🚫 [Protección anti fuerza bruta](/docs/features/authentication-manager#auth-security) 5 fallos: bloqueo de una hora. 10 fallos: reinicio completo de la cuenta. --- -Para la lista completa de novedades de la 3.3.2, consulta el [changelog](/changelog#3-3-2). +Para la lista completa de novedades de la 3.3.2, consulta el [changelog](/docs/changelog#3-3-2). :::tip Recursos útiles - [Añadir RaidProtect a tu servidor](https://raidprotect.bot/invite) diff --git a/i18n/es/docusaurus-plugin-content-blog/3.3.2/premium-launch.md b/i18n/es/docusaurus-plugin-content-blog/3.3.2/premium-launch.md index f011c69..ff77424 100644 --- a/i18n/es/docusaurus-plugin-content-blog/3.3.2/premium-launch.md +++ b/i18n/es/docusaurus-plugin-content-blog/3.3.2/premium-launch.md @@ -39,11 +39,11 @@ Usa `/settings` en tu servidor de Discord y haz clic en "Premium", o ve directam ## ✨ Lo que Premium ofrece hoy {#features} -### 🏷️ [Nombres de sanciones personalizables](/features/sanctions#custom-names) +### 🏷️ [Nombres de sanciones personalizables](/docs/features/sanctions#custom-names) Renombra cada tipo de sanción para adaptarlo al vocabulario de tu servidor. El nombre mostrado, el verbo usado en los mensajes y la redacción del mensaje privado enviado al miembro sancionado son todos configurables libremente. -### 🔐 [Authentication Manager: límites ampliados](/features/authentication-manager) +### 🔐 [Authentication Manager: límites ampliados](/docs/features/authentication-manager) En la versión gratuita, el Authentication Manager está limitado a 3 roles protegidos, 20 usuarios y sesiones de 8 horas máximo. Premium eleva estos límites: @@ -53,7 +53,7 @@ En la versión gratuita, el Authentication Manager está limitado a 3 roles prot | Usuarios | 20 | 50 | | Duración máx. de sesión | 8h | 24h | -### 📋 [Paneles de información: límites ampliados](/features/display) +### 📋 [Paneles de información: límites ampliados](/docs/features/display) Pasa de 2 a 4 paneles de información públicos (+ el slot reservado para Jail), para cubrir más contenido en tu servidor. @@ -63,7 +63,7 @@ Obtén acceso anticipado a ciertas funciones experimentales antes de su lanzamie --- -Para la lista completa de cambios, consulta [el changelog](/changelog). +Para la lista completa de cambios, consulta [el changelog](/docs/changelog). :::tip Recursos útiles - [Añadir RaidProtect a tu servidor](https://raidprotect.bot/invite) diff --git a/i18n/es/docusaurus-plugin-content-blog/3.3.3/3.3.3-modview.md b/i18n/es/docusaurus-plugin-content-blog/3.3.3/3.3.3-modview.md index fb16966..019015e 100644 --- a/i18n/es/docusaurus-plugin-content-blog/3.3.3/3.3.3-modview.md +++ b/i18n/es/docusaurus-plugin-content-blog/3.3.3/3.3.3-modview.md @@ -15,18 +15,18 @@ La versión 3.3.3 completa la **caja de herramientas del moderador**: una nueva ## 🔍 ModView: todo sobre un miembro, en un solo comando {#modview} -Ya no hace falta hacer malabares con varios comandos para entender la situación de un miembro. El nuevo comando [`/modview`](/features/moderation#modview) abre una **vista de moderación centralizada**: un resumen completo del miembro y todas las acciones rápidas accesibles directamente. +Ya no hace falta hacer malabares con varios comandos para entender la situación de un miembro. El nuevo comando [`/modview`](/docs/features/moderation#modview) abre una **vista de moderación centralizada**: un resumen completo del miembro y todas las acciones rápidas accesibles directamente. -- El **[historial de sus sanciones](/features/sanctions)**, con los estados al día. -- La **[nota de moderación interna](/features/moderation#note)** compartida por el staff. -- Su **[último mensaje eliminado](/features/moderation#snipe)** en la última hora, si lo hay. +- El **[historial de sus sanciones](/docs/features/sanctions)**, con los estados al día. +- La **[nota de moderación interna](/docs/features/moderation#note)** compartida por el staff. +- Su **[último mensaje eliminado](/docs/features/moderation#snipe)** en la última hora, si lo hay. Y sobre todo, **las acciones rápidas**: sanciona directamente al miembro desde la vista (ban, kick, mute, jail, warn…) o modifica su nota, sin tener que reescribir un comando ni cambiar de ventana. Con la ModView llegan dos comandos complementarios: -- **[`/note`](/features/moderation#note)**: añade una nota privada a un miembro, visible únicamente por el staff. Ideal para compartir contexto entre moderadores sin saturar el historial de sanciones. -- **[`/snipe`](/features/moderation#snipe)**: recupera los últimos mensajes eliminados de un canal o de un miembro durante la última hora. +- **[`/note`](/docs/features/moderation#note)**: añade una nota privada a un miembro, visible únicamente por el staff. Ideal para compartir contexto entre moderadores sin saturar el historial de sanciones. +- **[`/snipe`](/docs/features/moderation#snipe)**: recupera los últimos mensajes eliminados de un canal o de un miembro durante la última hora. :::tip La ModView también es accesible desde el menú contextual: clic derecho en un perfil → **Aplicaciones** → **Abrir Modview**. @@ -38,28 +38,28 @@ La ModView también es accesible desde el menú contextual: clic derecho en un p Varias incorporaciones afinan la gestión diaria de las sanciones: -- **Nuevo comando [`/softban`](/features/moderation#softban)**: banea y desbanea inmediatamente a un miembro. Sus mensajes se eliminan, pero puede volver. Perfecto para limpiar tras una cuenta hackeada. -- **[Opción `silent`](/features/moderation)** en todos los comandos de sanción: impide que RaidProtect envíe un mensaje privado al objetivo, cuando prefieres gestionar la situación aparte. -- **[Parámetro `delete-messages`](/features/moderation#ban)** en `/ban` y `/tempban`: elige directamente la duración del historial a eliminar al banear. -- **[Modo «Reemplazar por el rol Jail»](/features/sanctions#jail-roles)**: la sanción Jail puede ahora retirar todos los roles del miembro durante el encarcelamiento y restaurarlos automáticamente al liberarlo. -- **Conversión AutoMod → mute por rol** *(beta pública Premium)*: los timeouts aplicados por el AutoMod de Discord que superan el [umbral configurado](/features/sanctions#mute-threshold) se convierten automáticamente en [mute por rol](/features/sanctions#mute), para una coherencia total con el sistema de RaidProtect. +- **Nuevo comando [`/softban`](/docs/features/moderation#softban)**: banea y desbanea inmediatamente a un miembro. Sus mensajes se eliminan, pero puede volver. Perfecto para limpiar tras una cuenta hackeada. +- **[Opción `silent`](/docs/features/moderation)** en todos los comandos de sanción: impide que RaidProtect envíe un mensaje privado al objetivo, cuando prefieres gestionar la situación aparte. +- **[Parámetro `delete-messages`](/docs/features/moderation#ban)** en `/ban` y `/tempban`: elige directamente la duración del historial a eliminar al banear. +- **[Modo «Reemplazar por el rol Jail»](/docs/features/sanctions#jail-roles)**: la sanción Jail puede ahora retirar todos los roles del miembro durante el encarcelamiento y restaurarlos automáticamente al liberarlo. +- **Conversión AutoMod → mute por rol** *(beta pública Premium)*: los timeouts aplicados por el AutoMod de Discord que superan el [umbral configurado](/docs/features/sanctions#mute-threshold) se convierten automáticamente en [mute por rol](/docs/features/sanctions#mute), para una coherencia total con el sistema de RaidProtect. -Otras mejoras más discretas: mejor **seguimiento del acuse de recibo** de los MD de sanción (recibido, MD cerrados, expirado, silent), **botón de invitación al servidor** en los MD de notificación tras un kick, softban o ban temporal, posibilidad de **añadir una razón a `/sanctions delete`**, y de **[desactivar completamente las sanciones](/features/sanctions#disable)** en un servidor. +Otras mejoras más discretas: mejor **seguimiento del acuse de recibo** de los MD de sanción (recibido, MD cerrados, expirado, silent), **botón de invitación al servidor** en los MD de notificación tras un kick, softban o ban temporal, posibilidad de **añadir una razón a `/sanctions delete`**, y de **[desactivar completamente las sanciones](/docs/features/sanctions#disable)** en un servidor. --- ## ✨ Otras novedades {#other} - **Personalización del perfil de RaidProtect** *(Premium)*: avatar, banner y estilo de escritura del nick, para que el bot se integre en la identidad visual de tu servidor. -- **[Duración para las sanciones del anti-spam](/features/anti-spam#duration)**: elige una duración para todas las sanciones aplicadas por el anti-spam. +- **[Duración para las sanciones del anti-spam](/docs/features/anti-spam#duration)**: elige una duración para todas las sanciones aplicadas por el anti-spam. - **Nuevo parsing de los comandos por mensaje**: interpretación más estricta y coherente con los slash commands. -- **[Cierre automático de los MD](/features/raid-mode#close-dm)** al activarse el auto raid mode, para cortar de raíz las oleadas de DM hostiles durante un raid. +- **[Cierre automático de los MD](/docs/features/raid-mode#close-dm)** al activarse el auto raid mode, para cortar de raíz las oleadas de DM hostiles durante un raid. - **Autocomplete en los parámetros `duration`** de los slash commands. -- **Parámetro `[duration]`** en [`/lock`](/features/channel-lock#lock-duration) y [`/slowmode`](/features/moderation#slowmode) para aplicar la modificación temporalmente, sin tener que volver a quitarla a mano. +- **Parámetro `[duration]`** en [`/lock`](/docs/features/channel-lock#lock-duration) y [`/slowmode`](/docs/features/moderation#slowmode) para aplicar la modificación temporalmente, sin tener que volver a quitarla a mano. --- -Para la lista exhaustiva de novedades, correcciones y detalles técnicos, consulta [el changelog](/changelog#3-3-3). +Para la lista exhaustiva de novedades, correcciones y detalles técnicos, consulta [el changelog](/docs/changelog#3-3-3). :::tip 📚 Recursos útiles - 🔗 [Añadir RaidProtect a tu servidor](https://raidprotect.bot/invite) diff --git a/i18n/pt/docusaurus-plugin-content-blog/3.1.0/3.1.0-interactions-update.md b/i18n/pt/docusaurus-plugin-content-blog/3.1.0/3.1.0-interactions-update.md index 13cb20c..5a43a4b 100644 --- a/i18n/pt/docusaurus-plugin-content-blog/3.1.0/3.1.0-interactions-update.md +++ b/i18n/pt/docusaurus-plugin-content-blog/3.1.0/3.1.0-interactions-update.md @@ -17,7 +17,7 @@ Já passou algum tempo desde a nossa última grande atualização do RaidProtect Esta atualização marca um ponto de viragem na forma como o RaidProtect funciona, com foco na **interação e facilidade de utilização**, especialmente com a introdução dos **comandos slash** e de um **sistema de configuração renovado**. -Além disso, ouvimos os vossos comentários e ideias, e esta atualização inclui muitas funcionalidades que pediram! Podem também [consultar o registo de alterações](/changelog) para ver quais sugestões foram implementadas. +Além disso, ouvimos os vossos comentários e ideias, e esta atualização inclui muitas funcionalidades que pediram! Podem também [consultar o registo de alterações](/docs/changelog) para ver quais sugestões foram implementadas. ### Comandos Slash {#slash-commands} @@ -27,7 +27,7 @@ Não se preocupem, utilizadores de longa data — os comandos de texto continuam ### Internacionalização (o RP torna-se bilingue) {#internationalization} -Lançámos as bases de um [**sistema multilingue**](/language) e adicionámos o inglês como segundo idioma oficial! Mais idiomas serão adicionados no futuro. +Lançámos as bases de um [**sistema multilingue**](/docs/language) e adicionámos o inglês como segundo idioma oficial! Mais idiomas serão adicionados no futuro. ### Um comando de denúncias {#report} @@ -38,8 +38,8 @@ Uma funcionalidade muito pedida: [**um sistema de denúncias**](/features/report ### Novos comandos de configuração {#configuration} Sabemos que configurar um bot pode rapidamente tornar-se uma dor de cabeça, por isso simplificámos bastante o processo: -- **Um painel interativo com [`/settings`](/setup#settings)** para gerir o RaidProtect num instante. -- **Um novo [`/setup`](/setup#install)** para te guiar logo desde o processo de instalação. +- **Um painel interativo com [`/settings`](/docs/setup#settings)** para gerir o RaidProtect num instante. +- **Um novo [`/setup`](/docs/setup#install)** para te guiar logo desde o processo de instalação. - **Opções mais flexíveis** para uma configuração mais detalhada. ![Screenshot of the configuration menu](../../../en/docusaurus-plugin-content-blog/3.1.0/assets/rp-configuration-menu.webp) diff --git a/i18n/pt/docusaurus-plugin-content-blog/3.1.1/3.1.1-tag-role.md b/i18n/pt/docusaurus-plugin-content-blog/3.1.1/3.1.1-tag-role.md index c9a5060..fa5071b 100644 --- a/i18n/pt/docusaurus-plugin-content-blog/3.1.1/3.1.1-tag-role.md +++ b/i18n/pt/docusaurus-plugin-content-blog/3.1.1/3.1.1-tag-role.md @@ -24,7 +24,7 @@ Esta funcionalidade permite-te: 💡 **Como funciona:** Assim que um utilizador adiciona a **etiqueta do servidor** ao seu perfil, o bot RaidProtect atribui-lhe automaticamente o cargo que configuraste. E inversamente, se a etiqueta for removida, o cargo também é. -➡️ Mais detalhes na [nossa documentação](/features/tag-role). +➡️ Mais detalhes na [nossa documentação](/docs/features/tag-role). --- @@ -32,7 +32,7 @@ Assim que um utilizador adiciona a **etiqueta do servidor** ao seu perfil, o bot Para além do **cargo de etiqueta do servidor Discord**, esta versão traz outras melhorias importantes: -- **Novo comando de moderação [`/timeout`](/features/moderation#timeout)** +- **Novo comando de moderação [`/timeout`](/docs/features/moderation#timeout)** Permite excluir temporariamente um membro sem o banir — ideal para gerir comportamentos inadequados a curto prazo. O comando permite-te escolher uma duração mais precisa e mais longa (até 28 dias) do que as opções predefinidas do Discord. - **Seguimento automático de atualizações** @@ -40,7 +40,7 @@ Para além do **cargo de etiqueta do servidor Discord**, esta versão traz outra - **Diversas otimizações e correções** Numerosas melhorias internas garantem um melhor desempenho e estabilidade. - ➕ Consulta o [registo de alterações completo](/changelog#3-1-1) para todos os detalhes. + ➕ Consulta o [registo de alterações completo](/docs/changelog#3-1-1) para todos os detalhes. --- diff --git a/i18n/pt/docusaurus-plugin-content-blog/3.2.0/3.2.0-protection-update.md b/i18n/pt/docusaurus-plugin-content-blog/3.2.0/3.2.0-protection-update.md index 68a9ecc..854d8a2 100644 --- a/i18n/pt/docusaurus-plugin-content-blog/3.2.0/3.2.0-protection-update.md +++ b/i18n/pt/docusaurus-plugin-content-blog/3.2.0/3.2.0-protection-update.md @@ -15,7 +15,7 @@ A versão 3.2.0 marca um marco importante para a segurança da tua comunidade Di ## 🛡️ Acabaram-se as burlas por mensagem privada! {#new} -Protege os teus membros bloqueando automaticamente a receção de mensagens privadas com o [DM Lock](/features/dm-lock). Casos de utilização típicos: +Protege os teus membros bloqueando automaticamente a receção de mensagens privadas com o [DM Lock](/docs/features/dm-lock). Casos de utilização típicos: - Vagas de spam automatizado durante eventos (lançamentos, sorteios, períodos de grande tráfego). - Tentativas de burla dirigidas a membros, especialmente em servidores públicos de grande dimensão. @@ -28,16 +28,16 @@ Tudo totalmente automatizado, sem risco de esquecer passos manuais, garantindo u ## ✨ Outras novidades da 3.2.0 {#changelog} -- **Escolha de [sanções anti-spam](/features/anti-spam#triggers)**: Define com precisão como o RaidProtect responde a diferentes tipos de spam (kick, ban...), para uma moderação perfeitamente adaptada à tua comunidade. -- **Novos [registos anti-spam](/features/anti-spam#logs)**: Mais visibilidade sobre o que é detetado e quando, mantendo-te no controlo num instante. -- **[Idade mínima da conta](/features/raid-mode#minage) sem captcha**: Filtra diretamente os membros com contas recentes mesmo que o captcha não esteja ativado. -- **Comando [`/bypass minage`](/features/raid-mode#bypass-minage)**: Admite manualmente um membro que não cumpre a idade mínima de conta exigida, útil para casos excecionais. -- **Reformulação completa do [`/userinfo`](/features/utilities#userinfo)**: Interface melhorada, informação mais clara e completa. +- **Escolha de [sanções anti-spam](/docs/features/anti-spam#triggers)**: Define com precisão como o RaidProtect responde a diferentes tipos de spam (kick, ban...), para uma moderação perfeitamente adaptada à tua comunidade. +- **Novos [registos anti-spam](/docs/features/anti-spam#logs)**: Mais visibilidade sobre o que é detetado e quando, mantendo-te no controlo num instante. +- **[Idade mínima da conta](/docs/features/raid-mode#minage) sem captcha**: Filtra diretamente os membros com contas recentes mesmo que o captcha não esteja ativado. +- **Comando [`/bypass minage`](/docs/features/raid-mode#bypass-minage)**: Admite manualmente um membro que não cumpre a idade mínima de conta exigida, útil para casos excecionais. +- **Reformulação completa do [`/userinfo`](/docs/features/utilities#userinfo)**: Interface melhorada, informação mais clara e completa. - **Registos de configuração**: Maior rastreabilidade para cada alteração importante nas definições do bot. --- -Para a lista completa de novidades, correções e detalhes técnicos, consulta [o registo de alterações](/changelog#3-2-0). +Para a lista completa de novidades, correções e detalhes técnicos, consulta [o registo de alterações](/docs/changelog#3-2-0). :::tip 📚 Recursos úteis - 🔗 [Adiciona o RaidProtect ao teu servidor](https://raidprotect.bot/invite) diff --git a/i18n/pt/docusaurus-plugin-content-blog/3.2.1/3.2.1-discord-sanctions.md b/i18n/pt/docusaurus-plugin-content-blog/3.2.1/3.2.1-discord-sanctions.md index 40adc17..f1cdf74 100644 --- a/i18n/pt/docusaurus-plugin-content-blog/3.2.1/3.2.1-discord-sanctions.md +++ b/i18n/pt/docusaurus-plugin-content-blog/3.2.1/3.2.1-discord-sanctions.md @@ -15,7 +15,7 @@ A versão **3.2.1** do RaidProtect foca-se na **moderação do dia a dia** com n ## ⚖️ Ver as sanções aplicadas pelo Discord {#new} -A grande novidade desta atualização: o comando [`/ds`](/features/utilities#discord-sanctions). Permite ver diretamente as **sanções oficiais aplicadas pelo Discord** contra um utilizador. +A grande novidade desta atualização: o comando [`/ds`](/docs/features/utilities#discord-sanctions). Permite ver diretamente as **sanções oficiais aplicadas pelo Discord** contra um utilizador. ### 📋 O que podes ver @@ -30,7 +30,7 @@ A grande novidade desta atualização: o comando [`/ds`](/features/utilities#dis O sistema anti-spam beneficia de duas melhorias importantes: - Bloqueio de **spam de comandos slash**, frequentemente usado para perturbar canais. -- Novo acionador dedicado: [**spam de comandos externos**](/features/anti-spam#triggers). +- Novo acionador dedicado: [**spam de comandos externos**](/docs/features/anti-spam#triggers). Estas melhorias ajudam a antecipar novas formas de abuso e garantem uma experiência mais fluida para os teus membros. @@ -40,15 +40,15 @@ Estas melhorias ajudam a antecipar novas formas de abuso e garantem uma experiê Esta atualização introduz vários comandos muito pedidos para facilitar o trabalho das equipas de moderação: -- **[`/slowmode`](/features/moderation#slowmode)**: ativa ou ajusta o modo lento de um canal com maior precisão num só passo. -- **[`/unban`](/features/moderation#unban)**: desbanir um utilizador mais rapidamente, com um motivo especificado. -- **[`/bypass captcha`](/features/captcha#bypass)**: permite manualmente o acesso a um utilizador legítimo que falha no captcha. +- **[`/slowmode`](/docs/features/moderation#slowmode)**: ativa ou ajusta o modo lento de um canal com maior precisão num só passo. +- **[`/unban`](/docs/features/moderation#unban)**: desbanir um utilizador mais rapidamente, com um motivo especificado. +- **[`/bypass captcha`](/docs/features/captcha#bypass)**: permite manualmente o acesso a um utilizador legítimo que falha no captcha. -Além disso, os comandos [`/lock`](/features/channel-lock#lock) e [`/unlock`](/features/channel-lock#unlock) podem agora incluir um **motivo**, melhorando a clareza e o acompanhamento da moderação. +Além disso, os comandos [`/lock`](/docs/features/channel-lock#lock) e [`/unlock`](/docs/features/channel-lock#unlock) podem agora incluir um **motivo**, melhorando a clareza e o acompanhamento da moderação. --- -Para ver a lista completa e detalhada, consulta [o registo de alterações](/changelog#3-2-1). +Para ver a lista completa e detalhada, consulta [o registo de alterações](/docs/changelog#3-2-1). :::tip 📚 Recursos úteis - 🔗 [Adiciona o RaidProtect ao teu servidor](https://raidprotect.bot/invite) diff --git a/i18n/pt/docusaurus-plugin-content-blog/3.3.0/3.3.0-moderation-update.md b/i18n/pt/docusaurus-plugin-content-blog/3.3.0/3.3.0-moderation-update.md index 28f04aa..c05bdac 100644 --- a/i18n/pt/docusaurus-plugin-content-blog/3.3.0/3.3.0-moderation-update.md +++ b/i18n/pt/docusaurus-plugin-content-blog/3.3.0/3.3.0-moderation-update.md @@ -15,14 +15,14 @@ A versão 3.3.0 renova a forma como as sanções são geridas no teu servidor Di ## 📋 Um registo completo para cada sanção {#new} -Mantém o controlo de cada ação de moderação com o novo [Histórico de Sanções](/features/sanctions). Nunca mais terás dúvidas sobre quem foi sancionado, quando ou porquê: +Mantém o controlo de cada ação de moderação com o novo [Histórico de Sanções](/docs/features/sanctions). Nunca mais terás dúvidas sobre quem foi sancionado, quando ou porquê: - **Centralização automática**: Banimentos, expulsões, timeouts e sanções do automod são registados automaticamente. -- **Pesquisa avançada** com [`/sanctions search`](/features/sanctions#search): Recupera instantaneamente o histórico de um membro. -- **Detalhes completos** com [`/sanctions info`](/features/sanctions#info): Consulta toda a informação de uma sanção específica. -- **Edição flexível** com [`/sanctions edit`](/features/sanctions#edit): Corrige um motivo ou ajusta uma sanção existente. -- **Eliminação ou reversão** com [`/sanctions delete`](/features/sanctions#delete): Reverte uma sanção ou remove-a do histórico, se necessário. -- **[Gestão inteligente do estado das sanções](/features/sanctions#status)** +- **Pesquisa avançada** com [`/sanctions search`](/docs/features/sanctions#search): Recupera instantaneamente o histórico de um membro. +- **Detalhes completos** com [`/sanctions info`](/docs/features/sanctions#info): Consulta toda a informação de uma sanção específica. +- **Edição flexível** com [`/sanctions edit`](/docs/features/sanctions#edit): Corrige um motivo ou ajusta uma sanção existente. +- **Eliminação ou reversão** com [`/sanctions delete`](/docs/features/sanctions#delete): Reverte uma sanção ou remove-a do histórico, se necessário. +- **[Gestão inteligente do estado das sanções](/docs/features/sanctions#status)** Cada sanção gera agora uma confirmação indicando se o membro recebeu a notificação por MD. @@ -32,9 +32,9 @@ Cada sanção gera agora uma confirmação indicando se o membro recebeu a notif Esta atualização também expande o teu kit de ferramentas de moderação com três novos comandos essenciais: -- **[`/tempban`](/features/moderation#tempban)**: Bane temporariamente um membro durante um período definido. -- **[`/warn`](/features/moderation#warn)**: Avisa um membro com rastreabilidade completa no histórico. -- **[`/untimeout`](/features/moderation#untimeout)**: Remove um timeout antes de expirar. +- **[`/tempban`](/docs/features/moderation#tempban)**: Bane temporariamente um membro durante um período definido. +- **[`/warn`](/docs/features/moderation#warn)**: Avisa um membro com rastreabilidade completa no histórico. +- **[`/untimeout`](/docs/features/moderation#untimeout)**: Remove um timeout antes de expirar. --- @@ -42,22 +42,22 @@ Esta atualização também expande o teu kit de ferramentas de moderação com t O sistema anti-raid é agora mais inteligente e flexível: -- **Desativação automática**: O [RaidMode](/features/raid-mode#raid-mode) e o [Auto RaidMode](/features/raid-mode#duration) desativam-se automaticamente após um tempo definido — acabaram-se as definições esquecidas! -- **Definição de duração**: Define a duração diretamente ao ativar com [`/raidmode`](/features/raid-mode#raid-mode). -- **Novo comando [`/joinlock`](/features/join-lock)**: Fecha os convites indefinidamente para um controlo total sobre os novos membros. -- **Confirmação de [Idade mínima](/features/raid-mode#minage)**: Recebe confirmação de que o membro recebeu a mensagem explicativa. +- **Desativação automática**: O [RaidMode](/docs/features/raid-mode#raid-mode) e o [Auto RaidMode](/docs/features/raid-mode#duration) desativam-se automaticamente após um tempo definido — acabaram-se as definições esquecidas! +- **Definição de duração**: Define a duração diretamente ao ativar com [`/raidmode`](/docs/features/raid-mode#raid-mode). +- **Novo comando [`/joinlock`](/docs/features/join-lock)**: Fecha os convites indefinidamente para um controlo total sobre os novos membros. +- **Confirmação de [Idade mínima](/docs/features/raid-mode#minage)**: Recebe confirmação de que o membro recebeu a mensagem explicativa. --- ## ✨ Outras novidades da 3.3.0 {#changelog} - **Registos de sanções dedicados**: Configura um canal para centralizar todos os registos de sanções. -- **[`/channel duplicate`](/features/utilities#channel-duplicate)**: Duplica um canal com todas as suas definições. +- **[`/channel duplicate`](/docs/features/utilities#channel-duplicate)**: Duplica um canal com todas as suas definições. - **Comando `/changelog`**: Consulta o registo de alterações diretamente no Discord, também acessível através de `/settings` e `/about`. --- -Para a lista completa de novidades, correções e detalhes técnicos, consulta o [registo de alterações](/changelog#3-3-0). +Para a lista completa de novidades, correções e detalhes técnicos, consulta o [registo de alterações](/docs/changelog#3-3-0). :::tip 📚 Recursos úteis - 🔗 [Adiciona o RaidProtect ao teu servidor](https://raidprotect.bot/invite) diff --git a/i18n/pt/docusaurus-plugin-content-blog/3.3.1/3.3.1-jail-and-mute.md b/i18n/pt/docusaurus-plugin-content-blog/3.3.1/3.3.1-jail-and-mute.md index 3400d43..d0502a4 100644 --- a/i18n/pt/docusaurus-plugin-content-blog/3.3.1/3.3.1-jail-and-mute.md +++ b/i18n/pt/docusaurus-plugin-content-blog/3.3.1/3.3.1-jail-and-mute.md @@ -15,11 +15,11 @@ A versão 3.3.1 oferece mais granularidade na moderação com **Jail**, **Mute b ## 🔒 Nova sanção "Jail" {#jail} -Isola um membro perturbador sem o banir graças ao novo sistema de [Jail "Prisão"](/features/sanctions#jail). O membro fica confinado num canal dedicado, sem acesso ao resto do servidor: +Isola um membro perturbador sem o banir graças ao novo sistema de [Jail "Prisão"](/docs/features/sanctions#jail). O membro fica confinado num canal dedicado, sem acesso ao resto do servidor: -- **[`/jail`](/features/moderation#jail)** : Prende um membro imediatamente. -- **[`/tempjail`](/features/moderation#tempjail)** : Prende temporariamente um membro por uma duração definida. -- **[`/unjail`](/features/moderation#unjail)** : Liberta um membro a qualquer momento. +- **[`/jail`](/docs/features/moderation#jail)** : Prende um membro imediatamente. +- **[`/tempjail`](/docs/features/moderation#tempjail)** : Prende temporariamente um membro por uma duração definida. +- **[`/unjail`](/docs/features/moderation#unjail)** : Liberta um membro a qualquer momento. - **Configuração flexível** : Define o cargo de Jail e o canal de informação diretamente via `/settings`. A Jail permite gerir situações delicadas mantendo a possibilidade de comunicar com o membro em causa antes de tomar uma decisão definitiva. @@ -30,10 +30,10 @@ A Jail permite gerir situações delicadas mantendo a possibilidade de comunicar O timeout do Discord é prático, mas restritivo: **bloqueia todas as interações** do membro, incluindo botões e menus. Um membro em timeout não consegue consultar as suas sanções, abrir um ticket ou interagir com qualquer elemento do servidor. E a sua duração está limitada a 28 dias. -O novo [Mute baseado em cargo](/features/sanctions#mute) resolve estes problemas: +O novo [Mute baseado em cargo](/docs/features/sanctions#mute) resolve estes problemas: -- Acima de um [limiar configurável](/features/sanctions#mute-threshold), o bot atribui automaticamente um **cargo de Mute** em vez do timeout do Discord. O membro já não pode escrever, mas mantém a possibilidade de utilizar botões e menus. -- Os comandos `/timeout` e `/untimeout` passam a ser [`/mute`](/features/moderation#timeout) e [`/unmute`](/features/moderation#untimeout) com um funcionamento inteligente: **abaixo do limiar, o timeout clássico do Discord é utilizado**. +- Acima de um [limiar configurável](/docs/features/sanctions#mute-threshold), o bot atribui automaticamente um **cargo de Mute** em vez do timeout do Discord. O membro já não pode escrever, mas mantém a possibilidade de utilizar botões e menus. +- Os comandos `/timeout` e `/untimeout` passam a ser [`/mute`](/docs/features/moderation#timeout) e [`/unmute`](/docs/features/moderation#untimeout) com um funcionamento inteligente: **abaixo do limiar, o timeout clássico do Discord é utilizado**. - Novo parâmetro `[force_timeout]` para forçar o timeout do Discord independentemente da duração. --- @@ -42,17 +42,17 @@ O novo [Mute baseado em cargo](/features/sanctions#mute) resolve estes problemas Esta atualização traz novas ferramentas para o dia a dia dos teus moderadores e membros: -- **[Menu de contexto](/features/moderation#context-menu)** : Sanciona um membro com um simples clique direito no seu perfil, sem precisar de escrever um comando. -- **[`/my-sanctions`](/features/utilities#my-sanctions)** : Permite que os teus membros consultem as suas próprias sanções, com uma [definição de privacidade](/features/sanctions#sanctions-privacy) para controlar o acesso. -- **[Visualização de multimédia](/features/sanctions#show-medias)** nas razões das sanções: as provas visuais são diretamente visíveis. -- **Redesenho dos filtros** em [`/sanctions search`](/features/sanctions#search) com um novo filtro por [tipo de moderador](/features/sanctions#search). -- **[Importar / Exportar](/features/sanctions#import-export)** sanções através do bot de suporte. +- **[Menu de contexto](/docs/features/moderation#context-menu)** : Sanciona um membro com um simples clique direito no seu perfil, sem precisar de escrever um comando. +- **[`/my-sanctions`](/docs/features/utilities#my-sanctions)** : Permite que os teus membros consultem as suas próprias sanções, com uma [definição de privacidade](/docs/features/sanctions#sanctions-privacy) para controlar o acesso. +- **[Visualização de multimédia](/docs/features/sanctions#show-medias)** nas razões das sanções: as provas visuais são diretamente visíveis. +- **Redesenho dos filtros** em [`/sanctions search`](/docs/features/sanctions#search) com um novo filtro por [tipo de moderador](/docs/features/sanctions#search). +- **[Importar / Exportar](/docs/features/sanctions#import-export)** sanções através do bot de suporte. --- ## 🌍 RaidProtect fala 3 novos idiomas {#i18n} -O bot e a sua documentação estão agora disponíveis em **[5 idiomas](/language)**: +O bot e a sua documentação estão agora disponíveis em **[5 idiomas](/docs/language)**: - Alemão - Espanhol @@ -70,15 +70,15 @@ Apresenta [painéis de informação](/features/display) nos teus canais com `/di ## ✨ Outras novidades da 3.3.1 {#changelog} -- **[Bloqueio de membros](/features/utilities#block)** : Bloqueia o acesso de certos membros a funcionalidades específicas do RaidProtect com [`/block add`](/features/utilities#block-add), [`/block remove`](/features/utilities#block-remove) e [`/block list`](/features/utilities#block-list). -- **[`/prune`](/features/utilities#prune)** : Expulsa membros inativos com condições mais precisas. -- **[`/channel clear`](/features/utilities#channel-clear)** : Elimina e recria um canal num único comando. +- **[Bloqueio de membros](/docs/features/utilities#block)** : Bloqueia o acesso de certos membros a funcionalidades específicas do RaidProtect com [`/block add`](/docs/features/utilities#block-add), [`/block remove`](/docs/features/utilities#block-remove) e [`/block list`](/docs/features/utilities#block-list). +- **[`/prune`](/docs/features/utilities#prune)** : Expulsa membros inativos com condições mais precisas. +- **[`/channel clear`](/docs/features/utilities#channel-clear)** : Elimina e recria um canal num único comando. - **Registos para `/bypass`** : Rastreabilidade completa dos comandos `/bypass`. - **Anti-Scam** : Novo módulo de deteção de tentativas de burla. --- -Para a lista completa de novidades, correções e detalhes técnicos, consulta o [registo de alterações](/changelog#3-3-1). +Para a lista completa de novidades, correções e detalhes técnicos, consulta o [registo de alterações](/docs/changelog#3-3-1). :::tip 📚 Recursos úteis - 🔗 [Adiciona o RaidProtect ao teu servidor](https://raidprotect.bot/invite) diff --git a/i18n/pt/docusaurus-plugin-content-blog/3.3.1/scamlens-early-activation.mdx b/i18n/pt/docusaurus-plugin-content-blog/3.3.1/scamlens-early-activation.mdx index 5afb52d..374b779 100644 --- a/i18n/pt/docusaurus-plugin-content-blog/3.3.1/scamlens-early-activation.mdx +++ b/i18n/pt/docusaurus-plugin-content-blog/3.3.1/scamlens-early-activation.mdx @@ -56,7 +56,7 @@ Por razões de segurança, não comunicamos nem comunicaremos os métodos de det Basta [adicionar o RaidProtect](https://raidprotect.bot/invite). O ScamLens detetará e eliminará automaticamente as imagens fraudulentas. #### Como evitar bots de spam no meu servidor Discord? {#anti-spam-bots} -Além do ScamLens, ative o [captcha](/features/captcha) do RaidProtect para impedir que contas automatizadas entrem no seu servidor. +Além do ScamLens, ative o [captcha](/docs/features/captcha) do RaidProtect para impedir que contas automatizadas entrem no seu servidor. --- diff --git a/i18n/pt/docusaurus-plugin-content-blog/3.3.2/3.3.2-authentication-manager.md b/i18n/pt/docusaurus-plugin-content-blog/3.3.2/3.3.2-authentication-manager.md index 7d6a9cc..70bb4b7 100644 --- a/i18n/pt/docusaurus-plugin-content-blog/3.3.2/3.3.2-authentication-manager.md +++ b/i18n/pt/docusaurus-plugin-content-blog/3.3.2/3.3.2-authentication-manager.md @@ -23,7 +23,7 @@ Um único canal eliminado pelo hack de uma conta admin já é demais. ## 🔐 A solução: Authentication Manager {#solution} -Com o [Authentication Manager](/features/authentication-manager) (AM), os cargos com permissões sensíveis já não são atribuídos permanentemente — são atribuídos apenas após uma camada adicional de autenticação. Combinado com sessões temporárias que expiram automaticamente, a janela de exposição é drasticamente reduzida: os cargos são removidos automaticamente no final da sessão. +Com o [Authentication Manager](/docs/features/authentication-manager) (AM), os cargos com permissões sensíveis já não são atribuídos permanentemente — são atribuídos apenas após uma camada adicional de autenticação. Combinado com sessões temporárias que expiram automaticamente, a janela de exposição é drasticamente reduzida: os cargos são removidos automaticamente no final da sessão. Mesmo que um atacante roube uma conta Discord, não pode usar as permissões destrutivas do servidor: o cargo simplesmente não está lá, e obtê-lo requer uma autenticação que ele não possui. @@ -31,7 +31,7 @@ Mesmo que um atacante roube uma conta Discord, não pode usar as permissões des ## ✨ O que inclui {#features} -### 🛡️ [4 métodos de autenticação](/features/authentication-manager#methods) +### 🛡️ [4 métodos de autenticação](/docs/features/authentication-manager#methods) | **Método** | **Descrição** | **Grau** | | --- | --- | --- | @@ -40,29 +40,29 @@ Mesmo que um atacante roube uma conta Discord, não pode usar as permissões des | OTP (2FA) | Código temporário de 6 dígitos via Google Authenticator, Authy, 1Password... | A | | Passkey (WebAuthn) | Impressão digital, reconhecimento facial ou chave física (YubiKey) | S | -### 🔑 [Graus de segurança](/features/authentication-manager#grades) +### 🔑 [Graus de segurança](/docs/features/authentication-manager#grades) Cada método corresponde a um grau (E a S). Você escolhe o grau mínimo exigido por cargo: um acesso interno pode se contentar com um PIN, um cargo admin exigirá uma passkey. -### ⏱️ [Sessões temporárias](/features/authentication-manager#sessions) +### ⏱️ [Sessões temporárias](/docs/features/authentication-manager#sessions) Os cargos já não são permanentes. Cada autenticação abre uma sessão de duração limitada (configurável até 8 horas). Ao expirar, o cargo é removido automaticamente. -### ⚙️ [Sistema de managers](/features/authentication-manager#users-tab) +### ⚙️ [Sistema de managers](/docs/features/authentication-manager#users-tab) Conceda permissões de admin a um membro sem dar-lhe acesso ao sistema de autenticação. Os managers devem autenticar-se eles próprios e só podem gerir cargos inferiores ao seu teto, impedindo a criação de backdoors e a escalada de privilégios. -### 📋 [Logs de auditoria e sessões](/features/authentication-manager#logs-tab) +### 📋 [Logs de auditoria e sessões](/docs/features/authentication-manager#logs-tab) Cada autenticação, atribuição de cargo e ação é registada diretamente no bot. Ao contrário dos logs do Discord, ninguém pode eliminá-los: mesmo um admin comprometido não pode apagar os seus rastos. -### 🚫 [Proteção anti força bruta](/features/authentication-manager#auth-security) +### 🚫 [Proteção anti força bruta](/docs/features/authentication-manager#auth-security) 5 falhas: bloqueio de uma hora. 10 falhas: reinicialização completa da conta. --- -Para a lista completa das novidades da 3.3.2, consulte o [changelog](/changelog#3-3-2). +Para a lista completa das novidades da 3.3.2, consulte o [changelog](/docs/changelog#3-3-2). :::tip Recursos úteis - [Adicionar RaidProtect ao seu servidor](https://raidprotect.bot/invite) diff --git a/i18n/pt/docusaurus-plugin-content-blog/3.3.2/premium-launch.md b/i18n/pt/docusaurus-plugin-content-blog/3.3.2/premium-launch.md index c266b16..6b9e556 100644 --- a/i18n/pt/docusaurus-plugin-content-blog/3.3.2/premium-launch.md +++ b/i18n/pt/docusaurus-plugin-content-blog/3.3.2/premium-launch.md @@ -39,11 +39,11 @@ Usa `/settings` no teu servidor Discord e clica em "Premium", ou vai diretamente ## ✨ O que o Premium oferece hoje {#features} -### 🏷️ [Nomes de sanções personalizáveis](/features/sanctions#custom-names) +### 🏷️ [Nomes de sanções personalizáveis](/docs/features/sanctions#custom-names) Renomeia cada tipo de sanção para corresponder ao vocabulário do teu servidor. O nome apresentado, o verbo utilizado nas mensagens e a formulação da mensagem privada enviada ao membro sancionado são todos configuráveis livremente. -### 🔐 [Authentication Manager: limites alargados](/features/authentication-manager) +### 🔐 [Authentication Manager: limites alargados](/docs/features/authentication-manager) Na versão gratuita, o Authentication Manager está limitado a 3 funções protegidas, 20 utilizadores e sessões de 8 horas no máximo. O Premium eleva estes limites: @@ -53,7 +53,7 @@ Na versão gratuita, o Authentication Manager está limitado a 3 funções prote | Utilizadores | 20 | 50 | | Duração máx. de sessão | 8h | 24h | -### 📋 [Painéis de informação: limites alargados](/features/display) +### 📋 [Painéis de informação: limites alargados](/docs/features/display) Passa de 2 para 4 painéis de informação públicos (+ o slot reservado para o Jail), para cobrir mais conteúdo no teu servidor. @@ -63,7 +63,7 @@ Obtém acesso antecipado a certas funcionalidades experimentais antes do seu lan --- -Para a lista completa de alterações, consulta [o changelog](/changelog). +Para a lista completa de alterações, consulta [o changelog](/docs/changelog). :::tip Recursos úteis - [Adicionar o RaidProtect ao teu servidor](https://raidprotect.bot/invite) diff --git a/i18n/pt/docusaurus-plugin-content-blog/3.3.3/3.3.3-modview.md b/i18n/pt/docusaurus-plugin-content-blog/3.3.3/3.3.3-modview.md index fba76f6..4e1bc82 100644 --- a/i18n/pt/docusaurus-plugin-content-blog/3.3.3/3.3.3-modview.md +++ b/i18n/pt/docusaurus-plugin-content-blog/3.3.3/3.3.3-modview.md @@ -15,18 +15,18 @@ A versão 3.3.3 completa a **caixa de ferramentas do moderador**: uma nova **vis ## 🔍 ModView: tudo sobre um membro, num único comando {#modview} -Já não precisa de alternar entre vários comandos para perceber a situação de um membro. O novo comando [`/modview`](/pt/features/moderation#modview) abre uma **vista de moderação centralizada**: um resumo completo do membro, com todas as ações rápidas acessíveis diretamente. +Já não precisa de alternar entre vários comandos para perceber a situação de um membro. O novo comando [`/modview`](/pt/docs/features/moderation#modview) abre uma **vista de moderação centralizada**: um resumo completo do membro, com todas as ações rápidas acessíveis diretamente. -- O **[histórico das suas sanções](/pt/features/sanctions)**, com os estados atualizados. -- A **[nota de moderação interna](/pt/features/moderation#note)** partilhada pela equipa. -- A **[sua última mensagem eliminada](/pt/features/moderation#snipe)** na última hora, se existir. +- O **[histórico das suas sanções](/pt/docs/features/sanctions)**, com os estados atualizados. +- A **[nota de moderação interna](/pt/docs/features/moderation#note)** partilhada pela equipa. +- A **[sua última mensagem eliminada](/pt/docs/features/moderation#snipe)** na última hora, se existir. E sobretudo, **as ações rápidas**: sancione diretamente o membro a partir da vista (ban, kick, mute, jail, warn…) ou modifique a sua nota, sem ter de voltar a escrever um comando nem mudar de janela. Dois comandos complementares chegam com a ModView: -- **[`/note`](/pt/features/moderation#note)**: adicione uma nota privada a um membro, visível apenas para a equipa. Ideal para transmitir contexto entre moderadores sem sobrecarregar o histórico de sanções. -- **[`/snipe`](/pt/features/moderation#snipe)**: recupere as últimas mensagens eliminadas de um canal ou de um membro na última hora. +- **[`/note`](/pt/docs/features/moderation#note)**: adicione uma nota privada a um membro, visível apenas para a equipa. Ideal para transmitir contexto entre moderadores sem sobrecarregar o histórico de sanções. +- **[`/snipe`](/pt/docs/features/moderation#snipe)**: recupere as últimas mensagens eliminadas de um canal ou de um membro na última hora. :::tip A ModView também é acessível através do menu de contexto: clique direito num perfil → **Aplicações** → **Abrir Modview**. @@ -38,28 +38,28 @@ A ModView também é acessível através do menu de contexto: clique direito num Vários acrescentos vêm afinar a gestão diária das sanções: -- **Novo comando [`/softban`](/pt/features/moderation#softban)**: bane e depois desbane um membro. As suas mensagens são eliminadas, mas pode regressar. Perfeito para fazer limpeza após uma conta pirateada. -- **[Opção `silent`](/pt/features/moderation)** em todos os comandos de sanção: impede o RaidProtect de enviar uma mensagem privada ao alvo, quando pretende gerir a situação à parte. -- **[Parâmetro `delete-messages`](/pt/features/moderation#ban)** em `/ban` e `/tempban`: escolha diretamente a duração do histórico a eliminar no momento do banimento. -- **[Modo «Substituir pelo cargo Jail»](/pt/features/sanctions#jail-roles)**: a sanção Jail pode agora retirar todos os cargos do membro durante a prisão e restaurá-los automaticamente quando for libertado. -- **Conversão AutoMod → mute por cargo** *(beta pública Premium)*: os timeouts aplicados pelo AutoMod do Discord acima do [limiar configurado](/pt/features/sanctions#mute-threshold) são automaticamente convertidos em [mute por cargo](/pt/features/sanctions#mute), para uma coerência total com o sistema do RaidProtect. +- **Novo comando [`/softban`](/pt/docs/features/moderation#softban)**: bane e depois desbane um membro. As suas mensagens são eliminadas, mas pode regressar. Perfeito para fazer limpeza após uma conta pirateada. +- **[Opção `silent`](/pt/docs/features/moderation)** em todos os comandos de sanção: impede o RaidProtect de enviar uma mensagem privada ao alvo, quando pretende gerir a situação à parte. +- **[Parâmetro `delete-messages`](/pt/docs/features/moderation#ban)** em `/ban` e `/tempban`: escolha diretamente a duração do histórico a eliminar no momento do banimento. +- **[Modo «Substituir pelo cargo Jail»](/pt/docs/features/sanctions#jail-roles)**: a sanção Jail pode agora retirar todos os cargos do membro durante a prisão e restaurá-los automaticamente quando for libertado. +- **Conversão AutoMod → mute por cargo** *(beta pública Premium)*: os timeouts aplicados pelo AutoMod do Discord acima do [limiar configurado](/pt/docs/features/sanctions#mute-threshold) são automaticamente convertidos em [mute por cargo](/pt/docs/features/sanctions#mute), para uma coerência total com o sistema do RaidProtect. -Outras melhorias mais discretas: melhor **acompanhamento do aviso de receção** das MP de sanção (recebida, MP fechadas, expirada, silent), **botão de convite para o servidor** nas MP de notificação após um kick, softban ou ban temporário, possibilidade de **adicionar uma razão a `/sanctions delete`** e de **[desativar completamente as sanções](/pt/features/sanctions#disable)** num servidor. +Outras melhorias mais discretas: melhor **acompanhamento do aviso de receção** das MP de sanção (recebida, MP fechadas, expirada, silent), **botão de convite para o servidor** nas MP de notificação após um kick, softban ou ban temporário, possibilidade de **adicionar uma razão a `/sanctions delete`** e de **[desativar completamente as sanções](/pt/docs/features/sanctions#disable)** num servidor. --- ## ✨ Outras novidades {#other} - **Personalização do perfil do RaidProtect** *(Premium)*: avatar, banner e estilo de escrita do nome, para que o bot se integre na identidade visual do seu servidor. -- **[Duração para as sanções do anti-spam](/pt/features/anti-spam#duration)**: escolha uma duração para todas as sanções aplicadas pelo anti-spam. +- **[Duração para as sanções do anti-spam](/pt/docs/features/anti-spam#duration)**: escolha uma duração para todas as sanções aplicadas pelo anti-spam. - **Novo parsing dos comandos por mensagens**: interpretação mais rigorosa e coerente com os slash commands. -- **[Fecho automático das MP](/pt/features/raid-mode#close-dm)** ao ativar o auto raid mode, para cortar à raiz as ondas de DM hostis durante um raid. +- **[Fecho automático das MP](/pt/docs/features/raid-mode#close-dm)** ao ativar o auto raid mode, para cortar à raiz as ondas de DM hostis durante um raid. - **Autocomplete nos parâmetros `duration`** dos slash commands. -- **Parâmetro `[duration]`** em [`/lock`](/pt/features/channel-lock#lock-duration) e [`/slowmode`](/pt/features/moderation#slowmode) para aplicar a alteração temporariamente, sem ter de voltar para a remover manualmente. +- **Parâmetro `[duration]`** em [`/lock`](/pt/docs/features/channel-lock#lock-duration) e [`/slowmode`](/pt/docs/features/moderation#slowmode) para aplicar a alteração temporariamente, sem ter de voltar para a remover manualmente. --- -Para a lista exaustiva de novidades, correções e detalhes técnicos, consulte [o changelog](/pt/changelog#3-3-3). +Para a lista exaustiva de novidades, correções e detalhes técnicos, consulte [o changelog](/pt/docs/changelog#3-3-3). :::tip 📚 Recursos úteis - 🔗 [Adicionar o RaidProtect ao seu servidor](https://raidprotect.bot/invite) diff --git a/src/pages/index.tsx b/src/pages/index.tsx new file mode 100644 index 0000000..64dc99a --- /dev/null +++ b/src/pages/index.tsx @@ -0,0 +1,31 @@ +import React, {type ReactNode} from 'react'; +import Layout from '@theme/Layout'; +import Link from '@docusaurus/Link'; +import Translate, {translate} from '@docusaurus/Translate'; + +export default function Home(): ReactNode { + return ( + +
+

+ RaidProtect +

+

+ + La nouvelle page d'accueil arrive bientôt. En attendant, retrouvez toute la documentation ci-dessous. + +

+
+ + Accéder à la documentation + +
+
+
+ ); +} From f00fb6fdbb2b5256b96e3c407d9755b47ac6f1f7 Mon Sep 17 00:00:00 2001 From: Zallom Date: Thu, 21 May 2026 23:43:13 +0200 Subject: [PATCH 02/36] feat(legal-pages): port Webflow legal pages to MDX MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Nouveau composant LegalLayout (hero + nav inter-pages + Layout Docusaurus) - Pages MDX FR : legal, terms, privacy, cookies (depuis src Webflow FR) - Traductions EN/DE/ES depuis Webflow + PT traduit depuis FR (Webflow n'a pas de PT) - customFields.urls.{legal,terms,privacy,cookies} pointent désormais en interne - Clés du menu ajoutées dans i18n/{locale}/code.json Note : les fichiers Webflow DE et ES contenaient des placeholders EN/DE pour plusieurs pages. Les traductions concernées ont été régénérées depuis le FR (à valider par les natifs). --- docusaurus.config.ts | 40 ++++----- i18n/de/code.json | 16 ++++ .../cookies.mdx | 35 ++++++++ .../docusaurus-plugin-content-pages/legal.mdx | 41 +++++++++ .../privacy.mdx | 87 +++++++++++++++++++ .../docusaurus-plugin-content-pages/terms.mdx | 51 +++++++++++ i18n/en/code.json | 16 ++++ .../cookies.mdx | 35 ++++++++ .../docusaurus-plugin-content-pages/legal.mdx | 41 +++++++++ .../privacy.mdx | 87 +++++++++++++++++++ .../docusaurus-plugin-content-pages/terms.mdx | 51 +++++++++++ i18n/es/code.json | 16 ++++ .../cookies.mdx | 35 ++++++++ .../docusaurus-plugin-content-pages/legal.mdx | 41 +++++++++ .../privacy.mdx | 87 +++++++++++++++++++ .../docusaurus-plugin-content-pages/terms.mdx | 51 +++++++++++ i18n/fr/code.json | 16 ++++ i18n/pt/code.json | 16 ++++ .../cookies.mdx | 35 ++++++++ .../docusaurus-plugin-content-pages/legal.mdx | 41 +++++++++ .../privacy.mdx | 87 +++++++++++++++++++ .../docusaurus-plugin-content-pages/terms.mdx | 51 +++++++++++ src/components/LegalLayout/index.tsx | 74 ++++++++++++++++ src/components/LegalLayout/styles.module.css | 78 +++++++++++++++++ src/pages/cookies.mdx | 35 ++++++++ src/pages/legal.mdx | 41 +++++++++ src/pages/privacy.mdx | 87 +++++++++++++++++++ src/pages/terms.mdx | 51 +++++++++++ 28 files changed, 1322 insertions(+), 20 deletions(-) create mode 100644 i18n/de/docusaurus-plugin-content-pages/cookies.mdx create mode 100644 i18n/de/docusaurus-plugin-content-pages/legal.mdx create mode 100644 i18n/de/docusaurus-plugin-content-pages/privacy.mdx create mode 100644 i18n/de/docusaurus-plugin-content-pages/terms.mdx create mode 100644 i18n/en/docusaurus-plugin-content-pages/cookies.mdx create mode 100644 i18n/en/docusaurus-plugin-content-pages/legal.mdx create mode 100644 i18n/en/docusaurus-plugin-content-pages/privacy.mdx create mode 100644 i18n/en/docusaurus-plugin-content-pages/terms.mdx create mode 100644 i18n/es/docusaurus-plugin-content-pages/cookies.mdx create mode 100644 i18n/es/docusaurus-plugin-content-pages/legal.mdx create mode 100644 i18n/es/docusaurus-plugin-content-pages/privacy.mdx create mode 100644 i18n/es/docusaurus-plugin-content-pages/terms.mdx create mode 100644 i18n/pt/docusaurus-plugin-content-pages/cookies.mdx create mode 100644 i18n/pt/docusaurus-plugin-content-pages/legal.mdx create mode 100644 i18n/pt/docusaurus-plugin-content-pages/privacy.mdx create mode 100644 i18n/pt/docusaurus-plugin-content-pages/terms.mdx create mode 100644 src/components/LegalLayout/index.tsx create mode 100644 src/components/LegalLayout/styles.module.css create mode 100644 src/pages/cookies.mdx create mode 100644 src/pages/legal.mdx create mode 100644 src/pages/privacy.mdx create mode 100644 src/pages/terms.mdx diff --git a/docusaurus.config.ts b/docusaurus.config.ts index b683829..dd9e2a7 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -70,32 +70,32 @@ export default async function createConfigAsync() { pt: '/pt/' }, legal: { - fr: 'https://raidprotect.bot/legal', - en: 'https://raidprotect.bot/en/legal', - de: 'https://raidprotect.bot/de/legal', - es: 'https://raidprotect.bot/es/legal', - pt: 'https://raidprotect.bot/pt/legal' + fr: '/legal', + en: '/en/legal', + de: '/de/legal', + es: '/es/legal', + pt: '/pt/legal' }, terms: { - fr: 'https://raidprotect.bot/terms', - en: 'https://raidprotect.bot/en/terms', - de: 'https://raidprotect.bot/de/terms', - es: 'https://raidprotect.bot/es/terms', - pt: 'https://raidprotect.bot/pt/terms' + fr: '/terms', + en: '/en/terms', + de: '/de/terms', + es: '/es/terms', + pt: '/pt/terms' }, privacy: { - fr: 'https://raidprotect.bot/privacy', - en: 'https://raidprotect.bot/en/privacy', - de: 'https://raidprotect.bot/de/privacy', - es: 'https://raidprotect.bot/es/privacy', - pt: 'https://raidprotect.bot/pt/privacy' + fr: '/privacy', + en: '/en/privacy', + de: '/de/privacy', + es: '/es/privacy', + pt: '/pt/privacy' }, cookies: { - fr: 'https://raidprotect.bot/cookies', - en: 'https://raidprotect.bot/en/cookies', - de: 'https://raidprotect.bot/de/cookies', - es: 'https://raidprotect.bot/es/cookies', - pt: 'https://raidprotect.bot/pt/cookies' + fr: '/cookies', + en: '/en/cookies', + de: '/de/cookies', + es: '/es/cookies', + pt: '/pt/cookies' }, geranium: { fr: 'https://i.dfr.gg/geranium.webm', diff --git a/i18n/de/code.json b/i18n/de/code.json index 24aa53b..1d1a999 100644 --- a/i18n/de/code.json +++ b/i18n/de/code.json @@ -1,4 +1,20 @@ { + "legal.menu.legal": { + "message": "Impressum", + "description": "Legal pages menu — link to the Legal notice page" + }, + "legal.menu.terms": { + "message": "Nutzungsbedingungen", + "description": "Legal pages menu — link to the Terms of Service page" + }, + "legal.menu.privacy": { + "message": "Datenschutzerklärung", + "description": "Legal pages menu — link to the Privacy policy page" + }, + "legal.menu.cookies": { + "message": "Cookie-Richtlinie", + "description": "Legal pages menu — link to the Cookie policy page" + }, "theme.ErrorPageContent.title": { "message": "Diese Seite ist abgestürzt.", "description": "The title of the fallback page when the page crashed" diff --git a/i18n/de/docusaurus-plugin-content-pages/cookies.mdx b/i18n/de/docusaurus-plugin-content-pages/cookies.mdx new file mode 100644 index 0000000..fe24a1c --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-pages/cookies.mdx @@ -0,0 +1,35 @@ +--- +title: Cookie-Richtlinie | RaidProtect +description: Erfahren Sie, wie RaidProtect Ihre Privatsphäre schützt, indem keine Cookies verwendet werden – für ein sicheres und privates Surferlebnis. Lesen Sie unsere Richtlinie. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + + + +Bei RaidProtect setzen wir uns dafür ein, die Privatsphäre und die Daten unserer Nutzer zu schützen. Im Rahmen dieses Engagements informieren wir Sie über unsere Richtlinie zur Verwendung von Cookies auf unserer Website. + +## 1. Verwendung von Cookies + +Wir möchten transparent über die von uns eingesetzten Technologien informieren. Daher teilen wir Ihnen mit, dass unsere Website **keine Cookies verwendet**. Cookies sind kleine Textdateien, die von Websites verwendet werden können, um das Nutzererlebnis effizienter zu gestalten. Um jedoch die Vertraulichkeit unserer Nutzer bestmöglich zu wahren, haben wir uns entschieden, sie auf unserer Plattform nicht einzusetzen. + +## 2. Was bedeutet das für Sie? + +Die Nichtverwendung von Cookies bedeutet, dass Sie auf unserer Website surfen können, ohne dass Informationen über Ihren Besuch aufgezeichnet oder analysiert werden. Dieses Vorgehen soll allen unseren Nutzern ein privates und sicheres Surferlebnis gewährleisten. + +## 3. Wie schützen wir Ihre Privatsphäre? + +Neben unserer Richtlinie der Nichtverwendung von Cookies ergreifen wir weitere Maßnahmen, um Ihre Privatsphäre und Ihre personenbezogenen Daten zu schützen. Wir halten die geltenden Datenschutzgesetze und -vorschriften strikt ein und setzen modernste Informationssicherheitspraktiken um, um jeden unbefugten Zugriff, jede Änderung, Offenlegung oder Zerstörung Ihrer personenbezogenen Daten zu verhindern. + +## 4. Änderungen der Cookie-Richtlinie + +Wir behalten uns das Recht vor, diese Cookie-Richtlinie jederzeit zu ändern. Jede Änderung tritt unmittelbar nach ihrer Veröffentlichung auf unserer Website in Kraft. Wir empfehlen Ihnen, diese Seite regelmäßig zu besuchen, um über unsere Cookie-Richtlinie auf dem Laufenden zu bleiben. + +## 5. Kontakt + +Wenn Sie Fragen oder Bedenken zu unserer Cookie-Richtlinie oder zur Art und Weise haben, wie wir Ihre personenbezogenen Daten schützen, kontaktieren Sie uns gerne unter [dpo@raidprotect.bot](mailto:dpo@raidprotect.bot). + + diff --git a/i18n/de/docusaurus-plugin-content-pages/legal.mdx b/i18n/de/docusaurus-plugin-content-pages/legal.mdx new file mode 100644 index 0000000..b22907a --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-pages/legal.mdx @@ -0,0 +1,41 @@ +--- +title: Impressum | RaidProtect +description: Finden Sie das Impressum des Discord-Bots RaidProtect (RP), Herausgeber der Website raidprotect.bot. Allgemeine Informationen und rechtliche Nutzungsbedingungen. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + + + +Die unter den Adressen **„raidprotect.bot"** und **„docs.raidprotect.bot"** erreichbare Website von RaidProtect (im Folgenden als die **„Website"** bezeichnet) sowie die über Discord unter der ID **„466578580449525760"** zugängliche RaidProtect-Anwendung (im Folgenden als die **„Anwendung"** bezeichnet) werden von der **SAS French Community Agency** veröffentlicht. Die auf der Website bereitgestellten Informationen dienen ausschließlich allgemeinen Informationszwecken und erheben keinen Anspruch auf Vollständigkeit. Trotz aller Sorgfalt und regelmäßiger Aktualisierung der Website können sich Fehler in den präsentierten Informationen eingeschlichen haben. Die Nutzer der Website sind daher angehalten, alle notwendigen Überprüfungen selbst vorzunehmen und tragen die alleinige Verantwortung für die Verwendung der bereitgestellten Informationen. + +**Verantwortlicher Herausgeber:** Arthur Battais + +--- + +## Unternehmen + +**SAS French Community Agency** +**Abkürzung: FCA** +**Mit einem Stammkapital von 10.000 €** +[16 Esplanade du Champ de Mars, 35000 Rennes, Frankreich](https://www.google.com/maps/place/16+Esp.+du+Champ+de+Mars,+35000+Rennes/@48.1044838,-1.675702,17z/data=!3m1!4b1!4m6!3m5!1s0x480edfca43c9b53b:0xdea9cc38f95f9839!8m2!3d48.1044838!4d-1.675702!16s%2Fg%2F11csm9r096?sa=X&ved=2ahUKEwiZ0ICZyYSEAxWpUqQEHTq1BdcQ8gF6BAgdEAA&entry=tts) + ++33 (0)9 72 14 95 51 +[hello@fca.gg](mailto:hello@fca.gg) + +SIRET: [983 856 253 00023](https://annuaire-entreprises.data.gouv.fr/etablissement/98385625300023) +USt-IdNr.: [FR03983856253](https://ec.europa.eu/taxation_customs/vies/#/vat-validation) + +**Eingetragene Marke**: RaidProtect +[contact@raidprotect.bot](mailto:contact@raidprotect.bot) + +--- + +## Hosting + +Die Website wird gehostet von Hetzner (Hetzner Online GmbH), mit Sitz in Industriestr. 25 - 91710 Gunzenhausen - Germany, E-Mail: info@hetzner.com und Telefon: +49 (0)9831 505-0. + + diff --git a/i18n/de/docusaurus-plugin-content-pages/privacy.mdx b/i18n/de/docusaurus-plugin-content-pages/privacy.mdx new file mode 100644 index 0000000..85527bc --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-pages/privacy.mdx @@ -0,0 +1,87 @@ +--- +title: Datenschutzerklärung | RaidProtect +description: Erfahren Sie, wie RaidProtect Ihre personenbezogenen Daten schützt und die Sicherheit Ihrer Privatsphäre bei der Nutzung unserer Dienste gewährleistet. Detaillierte Datenschutzerklärung. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + + + +Die vorliegende Datenschutzerklärung beschreibt die Modalitäten der Erhebung, Nutzung und des Schutzes personenbezogener Daten im Rahmen der Dienste, die von der Discord-Anwendung **RaidProtect** und der zugehörigen Website angeboten werden. + +Durch die Nutzung dieser Dienste akzeptieren Sie die in dieser Datenschutzerklärung beschriebenen Praktiken. **SAS French Community Agency**, **RaidProtect**, verpflichtet sich, Ihre Privatsphäre im Einklang mit der geltenden Gesetzgebung zu respektieren und zu schützen, insbesondere mit der Datenschutz-Grundverordnung (DSGVO) und dem **französischen Datenschutzgesetz (*loi informatique et libertés*)**. + +## 1. Erhobene Daten + +Um den Betrieb der angebotenen Dienste zu gewährleisten, erheben und verarbeiten die Discord-Anwendung **RaidProtect** und die Website die folgenden Datenkategorien: + +### 1.1. Von der Anwendung erhobene Daten + +- **Konfiguration der Discord-Server**: Informationen zu den Einstellungen der Server, die **RaidProtect** verwenden (z. B. Rollen, Berechtigungen, konfigurierte Kanäle). +- **Textnachrichten**: Jede von einem Nutzer gesendete Nachricht kann im Rahmen der Moderationsdienste vorübergehend erfasst werden. +- **Discord-Ereignisse**: von Discord übermittelte Ereignisse wie das Erscheinen oder Verlassen neuer Mitglieder, Rollenänderungen oder das Löschen von Nachrichten. + +### 1.2. Von der Website erhobene Daten + +- **Identifikationsdaten**: Informationen, die von Nutzern bei der Registrierung oder bei der Nutzung der Online-Dienste bereitgestellt werden (z. B. E-Mail-Adresse, Discord-Kennungen). +- **Navigationsdaten**: Informationen zur Interaktion mit der Website wie IP-Adresse, Browsertyp oder Cookies. + +## 2. Zwecke der Verarbeitung + +Die erhobenen Daten werden ausschließlich verwendet, um: + +1. den ordnungsgemäßen Betrieb der angebotenen Dienste sicherzustellen (zum Beispiel: Moderation der Discord-Server, Analyse von Ereignissen im Zusammenhang mit der Community). +2. ein optimales und personalisiertes Nutzererlebnis zu gewährleisten. +3. Discord-Server abzusichern, indem die von den Administratoren festgelegten Regeln angewendet werden. +4. die Dienste durch die Analyse der Nutzung zu erhalten und zu verbessern. + +Die Daten werden nicht zu kommerziellen oder werblichen Zwecken verwendet. + +## 3. Aufbewahrung der Daten + +Die erhobenen personenbezogenen Daten werden nur so lange aufbewahrt, wie es zur Verwirklichung der oben genannten Zwecke erforderlich ist. Nach Ablauf dieser Frist werden sie gelöscht oder anonymisiert. + +- **Textnachrichten**: vorübergehend zur Verarbeitung aufbewahrt, anschließend endgültig gelöscht. +- **Server-Konfigurationsdaten**: aufbewahrt, solange der Server die Dienste von **RaidProtect** nutzt. +- **Navigationsdaten**: in Übereinstimmung mit den geltenden gesetzlichen Bestimmungen aufbewahrt. + +## 4. Weitergabe der Daten + +Die erhobenen Daten werden **niemals an Dritte weitergegeben**, außer in folgenden Fällen: + +1. **Technische Partner**: Partner, die zur Erbringung der Dienste erforderlich sind (zum Beispiel Hosting- oder Cloud-Anbieter). +2. **Gesetzliche Verpflichtungen**: wenn die Offenlegung der Daten gesetzlich, durch eine Justiz- oder Aufsichtsbehörde vorgeschrieben ist. + +## 5. Datensicherheit + +**RaidProtect** ergreift alle technischen und organisatorischen Maßnahmen, die erforderlich sind, um personenbezogene Daten gegen unbefugten Zugriff, Verlust, Zerstörung oder Veränderung zu schützen. Zu den wichtigsten Maßnahmen gehören: + +- die Verschlüsselung sensibler Daten. +- eine strenge Zugriffskontrolle (Authentifizierung und Protokollierung). +- eine auf sicheren Servern gehostete Infrastruktur. + +## 6. Rechte der Nutzer + +Im Einklang mit der DSGVO haben die Nutzer die folgenden Rechte in Bezug auf ihre personenbezogenen Daten: + +- **Recht auf Auskunft**: eine Kopie der verarbeiteten personenbezogenen Daten zu erhalten. +- **Recht auf Berichtigung**: unrichtige oder unvollständige Daten zu korrigieren. +- **Recht auf Löschung**: unter bestimmten Voraussetzungen die Löschung der Daten zu verlangen. +- **Recht auf Einschränkung**: die Verarbeitung ihrer Daten einzuschränken. +- **Widerspruchsrecht**: die Verarbeitung ihrer Daten aus berechtigten Gründen abzulehnen. +- **Recht auf Datenübertragbarkeit**: die personenbezogenen Daten in einem strukturierten Format zu erhalten. + +Zur Ausübung dieser Rechte oder bei Fragen zur Datenverwaltung können sich die Nutzer an den Datenschutzbeauftragten (DSB) unter [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot) wenden. + +## 7. Änderung der Datenschutzerklärung + +Die vorliegende Datenschutzerklärung kann jederzeit aktualisiert werden, um Änderungen der Dienste oder der geltenden Vorschriften widerzuspiegeln. Jede Änderung wird auf der Website veröffentlicht und, falls erforderlich, über die Anwendung mitgeteilt. Durch die fortgesetzte Nutzung der Dienste nach einer Aktualisierung der Erklärung akzeptieren die Nutzer die vorgenommenen Änderungen. + +## 8. Kontakt + +Wenn Sie Fragen oder Bedenken zu unserer Datenschutzerklärung oder zur Art und Weise haben, wie wir Ihre personenbezogenen Daten schützen, kontaktieren Sie uns gerne unter [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot). + + diff --git a/i18n/de/docusaurus-plugin-content-pages/terms.mdx b/i18n/de/docusaurus-plugin-content-pages/terms.mdx new file mode 100644 index 0000000..dccfbcb --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-pages/terms.mdx @@ -0,0 +1,51 @@ +--- +title: Nutzungsbedingungen | RaidProtect +description: Lesen Sie unsere Nutzungsbedingungen, um mehr über unsere Rechte am geistigen Eigentum, Hyperlinks, den Umgang mit personenbezogenen Daten sowie unsere Haftung für die Website und den Bot von RaidProtect zu erfahren. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + + + +Indem Sie RaidProtect zu Ihrem Discord-Server hinzufügen, bestätigen Sie, dass Sie die Nutzungsbedingungen gelesen und akzeptiert haben. Wenn Sie eine dieser Bedingungen nicht akzeptieren, müssen Sie die Nutzung unserer Dienste einstellen. + +## 1. Geistiges Eigentum + +Diese Website, ihre allgemeine Struktur, die Marke RaidProtect sowie die Texte, Bilder, Animationen, Logos und alle weiteren sie ausmachenden Elemente sind ausschließliches Eigentum der SAS French Community Agency oder ihrer Partner und durch die französischen und internationalen Gesetze zum Schutz des geistigen Eigentums geschützt. Jede Vervielfältigung, Darstellung, Nutzung oder Anpassung in welcher Form auch immer, ganz oder teilweise, dieser Elemente, einschließlich der Software, ohne die vorherige schriftliche Genehmigung der SAS French Community Agency ist strengstens untersagt und stellt eine Urheberrechtsverletzung dar. + +Dieselben Bestimmungen gelten für die Funktionen und den Quellcode der Anwendung, die ebenfalls durch Rechte am geistigen Eigentum geschützt sind. Jeder Versuch der Vervielfältigung, Veränderung oder unbefugten Nutzung der Funktionen der Anwendung ist untersagt und kann rechtlich verfolgt werden. + +## 2. Hyperlinks + +Jede Verlinkung zur Website bedarf der vorherigen schriftlichen Genehmigung der **SAS French Community Agency**. In jedem Fall behält sich die **SAS French Community Agency** das Recht vor, diese Genehmigung jederzeit zu widerrufen, wenn ihr der zur Website hergestellte Link geeignet erscheint, die Interessen der Website zu beeinträchtigen. + +Es wird darüber hinaus darauf hingewiesen, dass Websites, die einen Hyperlink zur vorliegenden Website aufweisen (Hyperlinks, die auf die Website verweisen oder von dieser ausgehen), nicht der Kontrolle der **SAS French Community Agency**, von **RaidProtect** und ihrer verbundenen Gesellschaften unterliegen, die jede Verantwortung für deren Inhalt ablehnen. + +## 3. Nutzung des Dienstes + +Unsere Dienste, einschließlich der Anwendung, können kostenlos für persönliche oder gewerbliche Zwecke genutzt werden. Wir behalten uns das Recht vor, die Nutzung unserer Dienste zu untersagen, sofern wir die Nutzung als unangemessen einstufen oder wenn sie anderen Nutzern schaden könnte. + +## 4. Haftung + +### 4.1. Website + +Die **SAS French Community Agency**, **RaidProtect** und ihre verbundenen Gesellschaften können nicht für direkte oder indirekte Schäden haftbar gemacht werden, die sich aus der Nutzung der Website oder der darin enthaltenen Informationen ergeben. Die **SAS French Community Agency** garantiert nicht die Richtigkeit oder Vollständigkeit der auf der Website dargestellten Informationen und behält sich das Recht vor, diese jederzeit und ohne Vorankündigung zu ändern oder zu löschen. + +### 4.2. Anwendung + +Die Anwendung **RaidProtect** wird ohne ausdrückliche oder stillschweigende Gewährleistung jeglicher Art bereitgestellt. Die **SAS French Community Agency** kann nicht für die Folgen einer fehlerhaften oder missbräuchlichen Nutzung der Anwendung verantwortlich gemacht werden, ebenso wenig für etwaige Schäden, die aus einer vorübergehenden oder dauerhaften Funktionsstörung resultieren. + +Die Administratoren von Discord-Servern, die **RaidProtect** verwenden, sind allein verantwortlich für die vorgenommenen Konfigurationen und die Entscheidungen, die infolge der automatisierten Aktionen der Anwendung getroffen werden (zum Beispiel Sperren oder Löschen von Nachrichten). Im Falle eines Verstoßes gegen die Nutzungsbedingungen von Discord oder das geltende Recht tragen die Administratoren des betroffenen Servers die volle Verantwortung. + +## 5. Änderung der Nutzungsbedingungen + +Die vorliegenden Allgemeinen Nutzungsbedingungen können jederzeit geändert werden, um Änderungen der Dienste oder der geltenden Vorschriften widerzuspiegeln. Jede Änderung wird auf der Website veröffentlicht und, falls erforderlich, über die Anwendung mitgeteilt. Durch die fortgesetzte Nutzung der Dienste nach einer Aktualisierung der Nutzungsbedingungen akzeptieren die Nutzer die vorgenommenen Änderungen. + +## 6. Anwendbares Recht und Gerichtsstand + +Die vorliegenden Nutzungsbedingungen unterliegen dem französischen Recht. Im Streitfall und nach einem Versuch der gütlichen Einigung sind, sofern gesetzliche Vorschriften nicht entgegenstehen, ausschließlich die zuständigen Gerichte von Paris zuständig. + + diff --git a/i18n/en/code.json b/i18n/en/code.json index de5a8e1..a8ea12d 100644 --- a/i18n/en/code.json +++ b/i18n/en/code.json @@ -1,4 +1,20 @@ { + "legal.menu.legal": { + "message": "Legal notice", + "description": "Legal pages menu — link to the Legal notice page" + }, + "legal.menu.terms": { + "message": "Terms of Service", + "description": "Legal pages menu — link to the Terms of Service page" + }, + "legal.menu.privacy": { + "message": "Privacy Policy", + "description": "Legal pages menu — link to the Privacy policy page" + }, + "legal.menu.cookies": { + "message": "Cookie Policy", + "description": "Legal pages menu — link to the Cookie policy page" + }, "theme.ErrorPageContent.title": { "message": "This page crashed.", "description": "The title of the fallback page when the page crashed" diff --git a/i18n/en/docusaurus-plugin-content-pages/cookies.mdx b/i18n/en/docusaurus-plugin-content-pages/cookies.mdx new file mode 100644 index 0000000..0fcdda5 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-pages/cookies.mdx @@ -0,0 +1,35 @@ +--- +title: Cookie Policy | RaidProtect +description: Learn how RaidProtect protects your privacy by not using cookies for secure and private browsing. See our policy. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + + + +At RaidProtect, we are committed to protecting the privacy and data of our users. As part of this commitment, we would like to inform you of our policy regarding the use of cookies on our website. + +## 1. Use of cookies + +We want to be transparent about the technologies we use. To this end, we would like to inform you that our website **does not use cookies**. Cookies are small text files that can be used by websites to make the user experience more efficient. However, in order to protect the privacy of our users as much as possible, we have chosen not to use cookies on our platform. + +## 2. What does this mean for you? + +The absence of cookies means that you can browse our website without any information about your visit being recorded or analyzed. This is to ensure a private and secure browsing experience for all our users. + +## 3. How do we protect your privacy? + +In addition to our no cookie policy, we take other measures to protect your privacy and personal data. We comply strictly with applicable data protection laws and regulations, and implement state-of-the-art information security practices to prevent unauthorized access, modification, disclosure or destruction of your personal information. + +## 4. Changes to the cookie policy + +We reserve the right to modify this cookie policy at any time. Any changes will be effective immediately upon posting on our website. We encourage you to visit this page regularly to stay informed about our cookie policy. + +## 5. Contact + +If you have any questions or concerns about our cookie policy or how we protect your personal data, please contact us at [dpo@raidprotect.bot](mailto:dpo@raidprotect.bot). + + diff --git a/i18n/en/docusaurus-plugin-content-pages/legal.mdx b/i18n/en/docusaurus-plugin-content-pages/legal.mdx new file mode 100644 index 0000000..41f2a24 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-pages/legal.mdx @@ -0,0 +1,41 @@ +--- +title: Legal notice | RaidProtect +description: Find the legal notice of the bot Discord RaidProtect (RP), editor of the site raidprotect.bot. General information and legal terms of use. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + + + +The RaidProtect website accessible at "raidprotect.bot" and "docs.raidprotect.bot" (hereinafter referred to as the "Site") and the RaidProtect application accessible from the Discord "466578580449525760" (hereinafter referred to as the "Application") are published by SAS French Community Agency. The information provided on the Site is presented for general information purposes only and does not claim to be exhaustive. Despite all the care and rigor taken in creating the Site and updating it regularly, errors may have crept into the information presented. Users of the Site should therefore make all necessary checks and are solely responsible for their use of the information provided. + +Publishing manager: Arthur Battais + +--- + +## Company + +**SAS French Community Agency** +**Acronym: FCA** +**With a share capital of €10,000** +[16 Esplanade du Champ de Mars, 35000 Rennes](https://www.google.com/maps/place/16+Esp.+du+Champ+de+Mars,+35000+Rennes/@48.1044838,-1.675702,17z/data=!3m1!4b1!4m6!3m5!1s0x480edfca43c9b53b:0xdea9cc38f95f9839!8m2!3d48.1044838!4d-1.675702!16s%2Fg%2F11csm9r096?sa=X&ved=2ahUKEwiZ0ICZyYSEAxWpUqQEHTq1BdcQ8gF6BAgdEAA&entry=tts) + ++33 (0)9 72 14 95 51 +[hello@fca.gg](mailto:hello@fca.gg) + +SIRET: [983 856 253 00023](https://annuaire-entreprises.data.gouv.fr/etablissement/98385625300023) +VAT: [FR03983856253](https://ec.europa.eu/taxation_customs/vies/#/vat-validation) + +Trademark: **RaidProtect** +[contact@raidprotect.bot](mailto:contact@raidprotect.bot) + +--- + +## Hosting + +The Site is hosted by Hetzner (Hetzner Online GmbH), headquartered at Industriestr. 25 - 91710 Gunzenhausen - Germany, e-mail: info@hetzner.com and phone: +49 (0)9831 505-0. + + diff --git a/i18n/en/docusaurus-plugin-content-pages/privacy.mdx b/i18n/en/docusaurus-plugin-content-pages/privacy.mdx new file mode 100644 index 0000000..485b45d --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-pages/privacy.mdx @@ -0,0 +1,87 @@ +--- +title: Privacy Policy | RaidProtect +description: Learn how RaidProtect protects your personal data and ensures the security of your privacy by using our services. Detailed privacy policy. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + + + +The present Privacy Policy describes the methods of collection, use and protection of personal data within the framework of the services offered by the Discord **RaidProtect** application and the associated website. + +By using these services, you accept the practices described in this Privacy Policy. **SAS French Community Agency**, **RaidProtect**, is committed to respecting and protecting your privacy in accordance with applicable law, including the General Data Protection Regulation (GDPR) and the French Data Protection Act (*loi informatique et libertés*). + +## 1. Collected data + +In order to ensure the operation of the services offered, the Discord **RaidProtect** application and website collect and process the following categories of data: + +### 1.1. Data collected by the Application + +- **Discord server configuration**: information on the settings of servers using **RaidProtect** (e.g. roles, permissions, configured channels). +- **Text messages**: any message sent by a user can be collected temporarily, as part of moderation services. +- **Discord events**: events transmitted by Discord, such as the arrival or departure of new members, role modifications or message deletions. + +### 1.2. Data collected by the website + +- **Identification data**: information provided by users when registering or using online services (e.g. e-mail address, Discord identifiers). +- **Browsing data**: information on interaction with the website, such as IP address, browser type or cookies. + +## 2. Purposes of processing + +The data collected is used exclusively for: + +1. Ensuring the smooth operation of our services (e.g. moderation of Discord servers, analysis of community events). +2. Guaranteeing an optimal, personalized user experience. +3. Securing Discord servers by applying administrator-defined rules. +4. Maintaining and improving services by analyzing usage. + +Data is not used for commercial or advertising purposes. + +## 3. Data retention + +The personal data collected is kept only for as long as is necessary to achieve the purposes defined above. Once this period has elapsed, it is deleted or anonymized. + +- **Text messages**: retained temporarily for processing, then permanently deleted. +- **Server configuration data**: retained for as long as the server uses **RaidProtect** services. +- **Navigation data**: stored in accordance with applicable legal provisions. + +## 4. Data sharing + +The data collected is **never shared with third parties**, except in the following cases: + +1. **Technical partners**: partners required to provide services (e.g. hosting or cloud service providers). +2. **Legal obligations**: if the disclosure of data is required by law or by a judicial or regulatory authority. + +## 5. Data security + +**RaidProtect** implements all technical and organizational measures necessary to protect personal data against unauthorized access, loss, destruction or alteration. The main measures include: + +- Encryption of sensitive data. +- Strict control of data access (authentication and logging). +- An infrastructure hosted on secure servers. + +## 6. User rights + +In accordance with the GDPR, users have the following rights over their personal data: + +- **Right of access**: obtain a copy of processed personal data. +- **Right of rectification**: correct inaccurate or incomplete data. +- **Right to erasure**: request the deletion of data under certain conditions. +- **Right to restriction**: limit the processing of their data. +- **Right to object**: to refuse the processing of their data for legitimate reasons. +- **Right to portability**: receive personal data in a structured format. + +To exercise these rights or ask questions about data management, users can contact the Data Protection Officer (DPO) at [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot). + +## 7. Modification of the Privacy Policy + +This Privacy Policy may be updated at any time to reflect changes in the Services or in applicable regulations. Any changes will be published on the website and, if necessary, communicated via the Application. By continuing to use the services after the policy has been updated, users accept the changes made. + +## 8. Contact + +If you have any questions or concerns about our privacy policy or how we protect your personal data, please feel free to contact us at [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot). + + diff --git a/i18n/en/docusaurus-plugin-content-pages/terms.mdx b/i18n/en/docusaurus-plugin-content-pages/terms.mdx new file mode 100644 index 0000000..63516db --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-pages/terms.mdx @@ -0,0 +1,51 @@ +--- +title: Terms of Service | RaidProtect +description: See our terms of use to understand our intellectual property rights, hypertext links, personal data management and our responsibility for the RaidProtect site and bot. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + + + +By adding RaidProtect to your Discord server, you acknowledge that you have read and agree to the Terms of Service. If you do not agree to any of these terms, you must stop using our services. + +## 1. Intellectual property + +This website, its general structure, the RaidProtect trademark, as well as the texts, images, animations, logos and any other element composing it, are the exclusive property of SAS French Community Agency or its partners and are protected by French and international laws relating to intellectual property. Any reproduction, representation, use or adaptation, in any form whatsoever, of all or part of these elements, including software, without the prior written authorization of SAS French Community Agency, is strictly prohibited and would constitute an infringement. + +The same provisions apply to the functionalities and source code of the Application, which are also protected by intellectual property rights. Any attempt to reproduce, modify or make unauthorized use of the Application's functionalities is prohibited and liable to legal action. + +## 2. Hyperlinks + +Any link to the Site must be authorized in writing in advance by **SAS French Community Agency**. In any event, **SAS French Community Agency** reserves the right to terminate this authorization at any time if it considers that the link established with the Site is likely to harm the interests of the latter. + +It is furthermore specified that sites presenting a hypertext link with the present Site (hypertext links targeting the Site or established from the Site) are not under the control of **SAS French Community Agency**, **RaidProtect** and its affiliates, who decline all responsibility for their content. + +## 3. Using the service + +Our services, including the Application, are free to use for personal or commercial purposes. We reserve the right to prohibit the use of our services in the event of use that we deem inappropriate or that may harm other Users. + +## 4. Liability + +### 4.1. Website + +**SAS French Community Agency**, **RaidProtect** and its affiliates shall not be liable for any direct or indirect damages resulting from the use of the Website or the information contained therein. **SAS French Community Agency** does not guarantee the accuracy or completeness of the information presented on the Site and reserves the right to modify or delete it at any time, without notice. + +### 4.2. Application + +The **RaidProtect** Application is provided as is, without warranty of any kind, either express or implied. **SAS French Community Agency** cannot be held responsible for the consequences of incorrect or improper use of the Application, nor for any damage resulting from temporary or permanent malfunction. + +Administrators of Discord servers using **RaidProtect** are solely responsible for configurations made and decisions taken as a result of the Application's automated actions (e.g. banning or deleting messages). In the event of any violation of Discord's terms of service or applicable laws, the administrators of the server concerned bear full responsibility. + +## 5. Modification of the Terms of Service + +These Terms of Service may be modified at any time to reflect changes in services or applicable regulations. Any changes will be published on the website and, if necessary, communicated via the Application. By continuing to use the services after the TOS has been updated, users accept the changes made. + +## 6. Applicable law and jurisdiction + +These Terms of Service are governed by French law. In the event of dispute, and after an attempt at amicable resolution, jurisdiction is attributed to the competent courts of Paris, unless otherwise provided by law. + + diff --git a/i18n/es/code.json b/i18n/es/code.json index c5e3912..889a66e 100644 --- a/i18n/es/code.json +++ b/i18n/es/code.json @@ -1,4 +1,20 @@ { + "legal.menu.legal": { + "message": "Aviso legal", + "description": "Legal pages menu — link to the Legal notice page" + }, + "legal.menu.terms": { + "message": "Términos de uso", + "description": "Legal pages menu — link to the Terms of Service page" + }, + "legal.menu.privacy": { + "message": "Política de privacidad", + "description": "Legal pages menu — link to the Privacy policy page" + }, + "legal.menu.cookies": { + "message": "Política de cookies", + "description": "Legal pages menu — link to the Cookie policy page" + }, "theme.ErrorPageContent.title": { "message": "Esta página ha fallado.", "description": "The title of the fallback page when the page crashed" diff --git a/i18n/es/docusaurus-plugin-content-pages/cookies.mdx b/i18n/es/docusaurus-plugin-content-pages/cookies.mdx new file mode 100644 index 0000000..5c7c580 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-pages/cookies.mdx @@ -0,0 +1,35 @@ +--- +title: Política de cookies | RaidProtect +description: Descubre cómo RaidProtect protege tu privacidad al no utilizar cookies, garantizando una navegación segura y privada. Consulta nuestra política. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + + + +En RaidProtect, nos comprometemos a proteger la privacidad y los datos de nuestros usuarios. En el marco de este compromiso, te informamos sobre nuestra política relativa al uso de cookies en nuestro sitio web. + +## 1. Uso de cookies + +Queremos ser transparentes sobre las tecnologías que utilizamos. A tal efecto, te informamos de que nuestro sitio web **no utiliza cookies**. Las cookies son pequeños archivos de texto que los sitios web pueden utilizar para hacer más eficiente la experiencia del usuario. Sin embargo, con el fin de preservar al máximo la confidencialidad de nuestros usuarios, hemos optado por no emplearlas en nuestra plataforma. + +## 2. ¿Qué significa esto para ti? + +La ausencia de cookies significa que puedes navegar por nuestro sitio web sin que se registre ni analice ninguna información sobre tu visita. Esta práctica busca garantizar una experiencia de navegación privada y segura para todos nuestros usuarios. + +## 3. ¿Cómo protegemos tu privacidad? + +Además de nuestra política de no utilizar cookies, adoptamos otras medidas para proteger tu privacidad y tus datos personales. Cumplimos estrictamente las leyes y reglamentos vigentes sobre protección de datos y aplicamos prácticas de seguridad de la información de última generación para impedir cualquier acceso no autorizado, modificación, divulgación o destrucción de tu información personal. + +## 4. Modificaciones de la política de cookies + +Nos reservamos el derecho de modificar esta política de cookies en cualquier momento. Toda modificación entrará en vigor inmediatamente después de su publicación en nuestro sitio web. Te animamos a consultar esta página con regularidad para estar al tanto de nuestra política en materia de cookies. + +## 5. Contacto + +Si tienes preguntas o preocupaciones sobre nuestra política de cookies o sobre la forma en que protegemos tus datos personales, no dudes en contactarnos en [dpo@raidprotect.bot](mailto:dpo@raidprotect.bot). + + diff --git a/i18n/es/docusaurus-plugin-content-pages/legal.mdx b/i18n/es/docusaurus-plugin-content-pages/legal.mdx new file mode 100644 index 0000000..0ae3518 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-pages/legal.mdx @@ -0,0 +1,41 @@ +--- +title: Aviso legal | RaidProtect +description: Encuentra los avisos legales del bot de Discord RaidProtect (RP), editor del sitio raidprotect.bot. Información general y marco legal de uso. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + + + +El sitio **RaidProtect**, accesible en las direcciones «raidprotect.bot» y «docs.raidprotect.bot» (en lo sucesivo, el «Sitio»), y la aplicación RaidProtect, accesible desde Discord con el ID «466578580449525760» (en lo sucesivo, la «Aplicación»), son editados por la **SAS French Community Agency**. La información facilitada en el Sitio se presenta con carácter meramente indicativo y general y no pretende ser exhaustiva. A pesar de todo el cuidado y rigor empleados en la elaboración del Sitio y en su actualización periódica, es posible que se hayan deslizado errores en la información presentada. Por consiguiente, los usuarios del Sitio realizarán todas las comprobaciones que consideren oportunas y serán los únicos responsables del uso que hagan de la información accesible. + +Responsable de la publicación: Arthur Battais + +--- + +## Empresa + +**SAS French Community Agency** +**Siglas: FCA** +**Con un capital social de 10 000 €** +[16 Esplanade du Champ de Mars, 35000 Rennes](https://www.google.com/maps/place/16+Esp.+du+Champ+de+Mars,+35000+Rennes/@48.1044838,-1.675702,17z/data=!3m1!4b1!4m6!3m5!1s0x480edfca43c9b53b:0xdea9cc38f95f9839!8m2!3d48.1044838!4d-1.675702!16s%2Fg%2F11csm9r096?sa=X&ved=2ahUKEwiZ0ICZyYSEAxWpUqQEHTq1BdcQ8gF6BAgdEAA&entry=tts) + ++33 (0)9 72 14 95 51 +[hello@fca.gg](mailto:hello@fca.gg) + +SIRET: [983 856 253 00023](https://annuaire-entreprises.data.gouv.fr/etablissement/98385625300023) +IVA: [FR03983856253](https://ec.europa.eu/taxation_customs/vies/#/vat-validation) + +Marca comercial: **RaidProtect** +[contact@raidprotect.bot](mailto:contact@raidprotect.bot) + +--- + +## Alojamiento + +El alojamiento del Sitio corre a cargo de la empresa Hetzner (Hetzner Online GmbH), cuya sede social se encuentra en Industriestr. 25 - 91710 Gunzenhausen - Germany, correo electrónico: info@hetzner.com y teléfono: +49 (0)9831 505-0. + + diff --git a/i18n/es/docusaurus-plugin-content-pages/privacy.mdx b/i18n/es/docusaurus-plugin-content-pages/privacy.mdx new file mode 100644 index 0000000..86bec8f --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-pages/privacy.mdx @@ -0,0 +1,87 @@ +--- +title: Política de privacidad | RaidProtect +description: Descubre cómo RaidProtect protege tus datos personales y garantiza la seguridad de tu privacidad al utilizar nuestros servicios. Política de privacidad detallada. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + + + +La presente Política de Privacidad describe las modalidades de recopilación, uso y protección de los datos personales en el marco de los servicios ofrecidos por la aplicación de Discord **RaidProtect** y el sitio web asociado. + +Al utilizar estos servicios, aceptas las prácticas descritas en esta Política de Privacidad. **SAS French Community Agency**, **RaidProtect**, se compromete a respetar y proteger tu privacidad de conformidad con la legislación vigente, en particular el Reglamento General de Protección de Datos (RGPD) y la **ley francesa de informática y libertades**. + +## 1. Datos recopilados + +Con el fin de garantizar el funcionamiento de los servicios ofrecidos, la aplicación de Discord **RaidProtect** y el sitio web recopilan y tratan las siguientes categorías de datos: + +### 1.1. Datos recopilados por la Aplicación + +- **Configuración de los servidores de Discord**: información sobre los parámetros de los servidores que utilizan **RaidProtect** (por ejemplo: roles, permisos, canales configurados). +- **Mensajes de texto**: cualquier mensaje enviado por un usuario puede recopilarse temporalmente, en el marco de los servicios de moderación. +- **Eventos de Discord**: eventos transmitidos por Discord, tales como la entrada o salida de nuevos miembros, las modificaciones de roles o la eliminación de mensajes. + +### 1.2. Datos recopilados por el sitio web + +- **Datos de identificación**: información facilitada por los usuarios al registrarse o al utilizar los servicios en línea (por ejemplo: dirección de correo electrónico, identificadores de Discord). +- **Datos de navegación**: información sobre la interacción con el sitio web, tales como la dirección IP, el tipo de navegador o las cookies. + +## 2. Finalidades del tratamiento + +Los datos recopilados se utilizan exclusivamente para: + +1. Garantizar el correcto funcionamiento de los servicios ofrecidos (por ejemplo: moderación de los servidores de Discord, análisis de los eventos relacionados con la comunidad). +2. Garantizar una experiencia de usuario óptima y personalizada. +3. Proteger los servidores de Discord aplicando las normas definidas por los administradores. +4. Mantener y mejorar los servicios mediante el análisis del uso. + +Los datos no se utilizan con fines comerciales o publicitarios. + +## 3. Conservación de los datos + +Los datos personales recopilados se conservan únicamente durante el tiempo necesario para alcanzar las finalidades definidas anteriormente. Una vez transcurrido este periodo, se eliminan o se anonimizan. + +- **Mensajes de texto**: conservados temporalmente para su tratamiento y, a continuación, eliminados de forma definitiva. +- **Datos de configuración de los servidores**: conservados mientras el servidor utilice los servicios de **RaidProtect**. +- **Datos de navegación**: conservados de conformidad con las disposiciones legales aplicables. + +## 4. Compartición de los datos + +Los datos recopilados **nunca se comparten con terceros**, salvo en los siguientes casos: + +1. **Socios técnicos**: los socios necesarios para la prestación de los servicios (por ejemplo, los proveedores de alojamiento o de servicios en la nube). +2. **Obligaciones legales**: si la divulgación de los datos es requerida por la ley, por una autoridad judicial o reglamentaria. + +## 5. Seguridad de los datos + +**RaidProtect** implementa todas las medidas técnicas y organizativas necesarias para proteger los datos personales frente a accesos no autorizados, pérdidas, destrucciones o alteraciones. Las principales medidas incluyen: + +- El cifrado de los datos sensibles. +- Un control estricto del acceso a los datos (autenticación y registro). +- Una infraestructura alojada en servidores seguros. + +## 6. Derechos de los usuarios + +De conformidad con el RGPD, los usuarios disponen de los siguientes derechos sobre sus datos personales: + +- **Derecho de acceso**: obtener una copia de los datos personales tratados. +- **Derecho de rectificación**: corregir datos inexactos o incompletos. +- **Derecho de supresión**: solicitar la eliminación de los datos en determinadas condiciones. +- **Derecho de limitación**: limitar el tratamiento de sus datos. +- **Derecho de oposición**: oponerse al tratamiento de sus datos por motivos legítimos. +- **Derecho a la portabilidad**: recibir los datos personales en un formato estructurado. + +Para ejercer estos derechos o plantear preguntas sobre la gestión de los datos, los usuarios pueden ponerse en contacto con el delegado de protección de datos (DPO) en [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot). + +## 7. Modificación de la Política de Privacidad + +La presente Política de Privacidad puede actualizarse en cualquier momento para reflejar cambios en los servicios o en la normativa aplicable. Toda modificación se publicará en el sitio web y, en caso necesario, se comunicará a través de la Aplicación. Al continuar utilizando los servicios después de la actualización de la política, los usuarios aceptan las modificaciones realizadas. + +## 8. Contacto + +Si tienes preguntas o preocupaciones sobre nuestra política de privacidad o sobre la forma en que protegemos tus datos personales, no dudes en contactarnos en [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot). + + diff --git a/i18n/es/docusaurus-plugin-content-pages/terms.mdx b/i18n/es/docusaurus-plugin-content-pages/terms.mdx new file mode 100644 index 0000000..6d5095f --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-pages/terms.mdx @@ -0,0 +1,51 @@ +--- +title: Términos de uso | RaidProtect +description: Consulta nuestros términos de uso para conocer los derechos de propiedad intelectual, los enlaces hipertexto, la gestión de los datos personales y nuestra responsabilidad sobre el sitio y el bot RaidProtect. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + + + +Al añadir RaidProtect a tu servidor de Discord, reconoces haber leído y aceptado las Condiciones de Uso. Si no aceptas alguna de estas condiciones, deberás dejar de utilizar nuestros servicios. + +## 1. Propiedad intelectual + +El presente sitio web, su estructura general, la marca comercial RaidProtect, así como los textos, imágenes, animaciones, logotipos y cualquier otro elemento que lo compone, son propiedad exclusiva de SAS French Community Agency o de sus socios y están protegidos por las leyes francesas e internacionales relativas a la propiedad intelectual. Cualquier reproducción, representación, uso o adaptación, bajo cualquier forma que sea, de la totalidad o parte de estos elementos, incluido el software, sin la autorización escrita previa de SAS French Community Agency, está estrictamente prohibida y constituiría una falsificación. + +Las mismas disposiciones se aplican a las funcionalidades y al código fuente de la Aplicación, también protegidos por los derechos de propiedad intelectual. Cualquier intento de reproducir, modificar o utilizar sin autorización las funcionalidades de la Aplicación queda prohibido y podrá ser objeto de acciones legales. + +## 2. Enlaces hipertexto + +Cualquier enlace al Sitio deberá contar con una autorización escrita y previa de **SAS French Community Agency**. En cualquier caso, **SAS French Community Agency** se reserva el derecho de poner fin a dicha autorización en cualquier momento si considera que el enlace establecido con el Sitio puede perjudicar sus intereses. + +Asimismo, se precisa que los sitios que incluyan un enlace hipertexto al presente Sitio (enlaces hipertexto dirigidos al Sitio o establecidos desde él) no se encuentran bajo el control de **SAS French Community Agency**, **RaidProtect** ni de sus empresas afiliadas, que declinan cualquier responsabilidad en cuanto a su contenido. + +## 3. Uso del servicio + +Nuestros servicios, incluida la Aplicación, son de libre uso con fines personales o comerciales. Nos reservamos el derecho de prohibir el uso de nuestros servicios en caso de un uso que consideremos inadecuado o que pueda perjudicar a otros Usuarios. + +## 4. Responsabilidad + +### 4.1. Sitio web + +**SAS French Community Agency**, **RaidProtect** y sus empresas afiliadas no podrán ser consideradas responsables de los daños directos o indirectos que se deriven del uso del Sitio web o de la información que contiene. **SAS French Community Agency** no garantiza la exactitud ni la exhaustividad de la información presentada en el Sitio y se reserva el derecho de modificarla o suprimirla en cualquier momento, sin previo aviso. + +### 4.2. Aplicación + +La Aplicación **RaidProtect** se proporciona tal cual, sin garantía de ningún tipo, expresa o implícita. **SAS French Community Agency** no se responsabiliza de las consecuencias de un uso incorrecto o abusivo de la Aplicación, ni de los posibles daños derivados de un funcionamiento incorrecto temporal o permanente. + +Los administradores de servidores de Discord que utilicen **RaidProtect** son los únicos responsables de las configuraciones realizadas y de las decisiones adoptadas a raíz de las acciones automatizadas de la Aplicación (por ejemplo, expulsiones o eliminación de mensajes). En caso de incumplimiento de las condiciones de uso de Discord o de las leyes vigentes, los administradores del servidor afectado asumirán la responsabilidad íntegra. + +## 5. Modificación de los Términos de Uso + +Los presentes Términos de Uso pueden ser modificados en cualquier momento para reflejar cambios en los servicios o en la normativa aplicable. Toda modificación se publicará en el sitio web y, en caso necesario, se comunicará a través de la Aplicación. Al seguir utilizando los servicios después de la actualización de los Términos de Uso, los usuarios aceptan las modificaciones realizadas. + +## 6. Ley aplicable y jurisdicción + +Los presentes Términos de Uso se rigen por el derecho francés. En caso de litigio, y tras un intento de resolución amistosa, será competente la jurisdicción de los tribunales correspondientes de París, salvo disposición legal en contrario. + + diff --git a/i18n/fr/code.json b/i18n/fr/code.json index 25539cd..d78af15 100644 --- a/i18n/fr/code.json +++ b/i18n/fr/code.json @@ -1,4 +1,20 @@ { + "legal.menu.legal": { + "message": "Mentions légales", + "description": "Legal pages menu — link to the Legal notice page" + }, + "legal.menu.terms": { + "message": "Conditions générales d'utilisation", + "description": "Legal pages menu — link to the Terms of Service page" + }, + "legal.menu.privacy": { + "message": "Politique de confidentialité", + "description": "Legal pages menu — link to the Privacy policy page" + }, + "legal.menu.cookies": { + "message": "Politique des cookies", + "description": "Legal pages menu — link to the Cookie policy page" + }, "theme.ErrorPageContent.title": { "message": "Cette page a planté.", "description": "The title of the fallback page when the page crashed" diff --git a/i18n/pt/code.json b/i18n/pt/code.json index 59bb413..50a083a 100644 --- a/i18n/pt/code.json +++ b/i18n/pt/code.json @@ -1,4 +1,20 @@ { + "legal.menu.legal": { + "message": "Aviso legal", + "description": "Legal pages menu — link to the Legal notice page" + }, + "legal.menu.terms": { + "message": "Termos de utilização", + "description": "Legal pages menu — link to the Terms of Service page" + }, + "legal.menu.privacy": { + "message": "Política de privacidade", + "description": "Legal pages menu — link to the Privacy policy page" + }, + "legal.menu.cookies": { + "message": "Política de cookies", + "description": "Legal pages menu — link to the Cookie policy page" + }, "theme.ErrorPageContent.title": { "message": "Esta página falhou.", "description": "The title of the fallback page when the page crashed" diff --git a/i18n/pt/docusaurus-plugin-content-pages/cookies.mdx b/i18n/pt/docusaurus-plugin-content-pages/cookies.mdx new file mode 100644 index 0000000..a3fef53 --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-pages/cookies.mdx @@ -0,0 +1,35 @@ +--- +title: Política de cookies | RaidProtect +description: Descubra como o RaidProtect protege a sua privacidade ao não utilizar cookies, garantindo uma navegação segura e privada. Consulte a nossa política. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + + + +Na RaidProtect, comprometemo-nos a proteger a privacidade e os dados dos nossos utilizadores. No âmbito deste compromisso, informamo-lo da nossa política relativa à utilização de cookies no nosso site. + +## 1. Utilização de cookies + +Pretendemos ser transparentes quanto às tecnologias que utilizamos. Para o efeito, informamo-lo de que o nosso site **não utiliza cookies**. Os cookies são pequenos ficheiros de texto que podem ser utilizados pelos sites para tornar a experiência do utilizador mais eficiente. Contudo, com o objetivo de preservar ao máximo a confidencialidade dos nossos utilizadores, optámos por não os utilizar na nossa plataforma. + +## 2. O que significa isto para si? + +A ausência de cookies significa que pode navegar no nosso site sem que qualquer informação relativa à sua visita seja registada ou analisada. Esta abordagem visa garantir uma experiência de navegação privada e segura para todos os nossos utilizadores. + +## 3. Como protegemos a sua privacidade? + +Para além da nossa política de não utilização de cookies, tomamos outras medidas para proteger a sua privacidade e os seus dados pessoais. Cumprimos rigorosamente as leis e regulamentos em vigor sobre a proteção dos dados e implementamos práticas de segurança da informação de última geração para prevenir qualquer acesso não autorizado, modificação, divulgação ou destruição das suas informações pessoais. + +## 4. Alterações à política de utilização de cookies + +Reservamo-nos o direito de modificar esta política de cookies a qualquer momento. Qualquer alteração entrará em vigor imediatamente após a sua publicação no nosso site. Recomendamos que consulte esta página regularmente para se manter informado sobre a nossa política em matéria de cookies. + +## 5. Contacto + +Se tiver questões ou preocupações relativamente à nossa política de cookies ou à forma como protegemos os seus dados pessoais, não hesite em contactar-nos em [dpo@raidprotect.bot](mailto:dpo@raidprotect.bot). + + diff --git a/i18n/pt/docusaurus-plugin-content-pages/legal.mdx b/i18n/pt/docusaurus-plugin-content-pages/legal.mdx new file mode 100644 index 0000000..dbe34fb --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-pages/legal.mdx @@ -0,0 +1,41 @@ +--- +title: Aviso legal | RaidProtect +description: Consulte o aviso legal do bot de Discord RaidProtect (RP), editor do site raidprotect.bot. Informações gerais e enquadramento legal de utilização. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + + + +O site **RaidProtect**, acessível através dos endereços «raidprotect.bot» e «docs.raidprotect.bot» (doravante designado por «Site»), e a aplicação RaidProtect, acessível a partir do Discord «466578580449525760» (doravante designada por «Aplicação»), são editados pela **SAS French Community Agency**. As informações disponibilizadas no Site são apresentadas a título indicativo e geral e não pretendem ser exaustivas. Apesar de todo o cuidado e rigor empregues na elaboração do Site e na sua atualização regular, podem ter-se introduzido erros nas informações apresentadas. Os utilizadores do Site deverão, por isso, efetuar todas as verificações necessárias e são os únicos responsáveis pela utilização que fazem das informações acessíveis. + +Responsável pela publicação: Arthur Battais + +--- + +## Sociedade + +**SAS French Community Agency** +**Sigla: FCA** +**Com um capital social de 10 000 €** +[16 Esplanade du Champ de Mars, 35000 Rennes](https://www.google.com/maps/place/16+Esp.+du+Champ+de+Mars,+35000+Rennes/@48.1044838,-1.675702,17z/data=!3m1!4b1!4m6!3m5!1s0x480edfca43c9b53b:0xdea9cc38f95f9839!8m2!3d48.1044838!4d-1.675702!16s%2Fg%2F11csm9r096?sa=X&ved=2ahUKEwiZ0ICZyYSEAxWpUqQEHTq1BdcQ8gF6BAgdEAA&entry=tts) + ++33 (0)9 72 14 95 51 +[hello@fca.gg](mailto:hello@fca.gg) + +SIRET: [983 856 253 00023](https://annuaire-entreprises.data.gouv.fr/etablissement/98385625300023) +IVA: [FR03983856253](https://ec.europa.eu/taxation_customs/vies/#/vat-validation) + +Marca comercial: **RaidProtect** +[contact@raidprotect.bot](mailto:contact@raidprotect.bot) + +--- + +## Alojamento + +O Site é alojado pela empresa Hetzner (Hetzner Online GmbH), com sede em Industriestr. 25 - 91710 Gunzenhausen - Germany, e-mail: info@hetzner.com e telefone: +49 (0)9831 505-0. + + diff --git a/i18n/pt/docusaurus-plugin-content-pages/privacy.mdx b/i18n/pt/docusaurus-plugin-content-pages/privacy.mdx new file mode 100644 index 0000000..9bae863 --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-pages/privacy.mdx @@ -0,0 +1,87 @@ +--- +title: Política de privacidade | RaidProtect +description: Descubra como o RaidProtect protege os seus dados pessoais e assegura a segurança da sua privacidade quando utiliza os nossos serviços. Política de privacidade detalhada. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + + + +A presente Política de Privacidade descreve as modalidades de recolha, utilização e proteção dos dados pessoais no âmbito dos serviços propostos pela aplicação Discord **RaidProtect** e pelo site associado. + +Ao utilizar estes serviços, aceita as práticas descritas nesta Política de Privacidade. A **SAS French Community Agency**, **RaidProtect**, compromete-se a respeitar e a proteger a sua privacidade em conformidade com a legislação em vigor, nomeadamente o Regulamento Geral sobre a Proteção de Dados (RGPD) e a **lei francesa sobre informática e liberdades**. + +## 1. Dados recolhidos + +Para assegurar o funcionamento dos serviços propostos, a aplicação Discord **RaidProtect** e o site recolhem e tratam as seguintes categorias de dados: + +### 1.1. Dados recolhidos pela Aplicação + +- **Configuração dos servidores Discord**: informações sobre os parâmetros dos servidores que utilizam o **RaidProtect** (por exemplo: cargos, permissões, canais configurados). +- **Mensagens de texto**: qualquer mensagem enviada por um utilizador pode ser recolhida temporariamente, no âmbito dos serviços de moderação. +- **Eventos do Discord**: eventos transmitidos pelo Discord, tais como a chegada ou saída de novos membros, as alterações de cargos ou a eliminação de mensagens. + +### 1.2. Dados recolhidos pelo site + +- **Dados de identificação**: informações fornecidas pelos utilizadores no momento da inscrição ou da utilização dos serviços em linha (por exemplo: endereço de e-mail, identificadores Discord). +- **Dados de navegação**: informações sobre a interação com o site, tais como o endereço IP, o tipo de navegador ou os cookies. + +## 2. Finalidades do tratamento + +Os dados recolhidos são utilizados exclusivamente para: + +1. Assegurar o bom funcionamento dos serviços propostos (por exemplo: moderação dos servidores Discord, análise dos eventos relacionados com a comunidade). +2. Garantir uma experiência de utilizador otimizada e personalizada. +3. Proteger os servidores Discord aplicando as regras definidas pelos administradores. +4. Manter e melhorar os serviços analisando a sua utilização. + +Os dados não são utilizados para fins comerciais ou publicitários. + +## 3. Conservação dos dados + +Os dados pessoais recolhidos são conservados apenas durante o tempo necessário à realização das finalidades definidas acima. Decorrido este período, são eliminados ou anonimizados. + +- **Mensagens de texto**: conservadas temporariamente para tratamento e, em seguida, eliminadas de forma definitiva. +- **Dados de configuração dos servidores**: conservados enquanto o servidor utilizar os serviços do **RaidProtect**. +- **Dados de navegação**: conservados em conformidade com as disposições legais aplicáveis. + +## 4. Partilha dos dados + +Os dados recolhidos **nunca são partilhados com terceiros**, exceto nos seguintes casos: + +1. **Parceiros técnicos**: parceiros necessários ao fornecimento dos serviços (por exemplo, fornecedores de alojamento ou de serviços em nuvem). +2. **Obrigações legais**: se a divulgação dos dados for exigida pela lei, por uma autoridade judicial ou regulamentar. + +## 5. Segurança dos dados + +O **RaidProtect** implementa todas as medidas técnicas e organizacionais necessárias para proteger os dados pessoais contra acessos não autorizados, perdas, destruições ou alterações. As principais medidas incluem: + +- A cifragem dos dados sensíveis. +- Um controlo estrito dos acessos aos dados (autenticação e registo de operações). +- Uma infraestrutura alojada em servidores seguros. + +## 6. Direitos dos utilizadores + +Em conformidade com o RGPD, os utilizadores dispõem dos seguintes direitos sobre os seus dados pessoais: + +- **Direito de acesso**: obter uma cópia dos dados pessoais tratados. +- **Direito de retificação**: corrigir dados inexatos ou incompletos. +- **Direito ao apagamento**: solicitar a eliminação dos dados em determinadas condições. +- **Direito à limitação**: limitar o tratamento dos seus dados. +- **Direito de oposição**: recusar o tratamento dos seus dados por motivos legítimos. +- **Direito à portabilidade**: receber os dados pessoais num formato estruturado. + +Para exercer estes direitos ou colocar questões sobre a gestão dos dados, os utilizadores podem contactar o encarregado da proteção de dados (DPO) em [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot). + +## 7. Modificação da Política de Privacidade + +A presente Política de Privacidade pode ser atualizada a qualquer momento para refletir alterações nos serviços ou na regulamentação aplicável. Qualquer alteração será publicada no site e, se necessário, comunicada através da Aplicação. Ao continuarem a utilizar os serviços após a atualização da política, os utilizadores aceitam as alterações introduzidas. + +## 8. Contacto + +Se tiver questões ou preocupações relativamente à nossa política de privacidade ou à forma como protegemos os seus dados pessoais, não hesite em contactar-nos em [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot). + + diff --git a/i18n/pt/docusaurus-plugin-content-pages/terms.mdx b/i18n/pt/docusaurus-plugin-content-pages/terms.mdx new file mode 100644 index 0000000..7b2471e --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-pages/terms.mdx @@ -0,0 +1,51 @@ +--- +title: Termos de utilização | RaidProtect +description: Consulte as nossas condições de utilização para compreender os direitos de propriedade intelectual, hiperligações, gestão dos dados pessoais e a nossa responsabilidade sobre o site e o bot RaidProtect. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + + + +Ao adicionar o RaidProtect ao seu servidor Discord, reconhece ter lido e aceitado os Termos de Utilização. Se não aceitar alguma destas condições, deverá deixar de utilizar os nossos serviços. + +## 1. Propriedade intelectual + +O presente site, a sua estrutura geral, a marca comercial RaidProtect, bem como os textos, imagens, animações, logótipos e qualquer outro elemento que o compõe, são propriedade exclusiva da SAS French Community Agency ou dos seus parceiros e estão protegidos pelas leis francesas e internacionais relativas à propriedade intelectual. Qualquer reprodução, representação, utilização ou adaptação, sob qualquer forma, da totalidade ou de parte destes elementos, incluindo o software, sem a autorização escrita prévia da SAS French Community Agency, é estritamente proibida e constituiria uma contrafação. + +As mesmas disposições aplicam-se às funcionalidades e ao código-fonte da Aplicação, igualmente protegidos pelos direitos de propriedade intelectual. Qualquer tentativa de reproduzir, modificar ou utilizar sem autorização as funcionalidades da Aplicação é proibida e suscetível de procedimento judicial. + +## 2. Hiperligações + +Qualquer ligação ao Site está sujeita a autorização escrita e prévia da **SAS French Community Agency**. Em qualquer caso, a **SAS French Community Agency** reserva-se o direito de pôr termo a esta autorização em qualquer momento se considerar que a ligação estabelecida com o Site é suscetível de prejudicar os interesses deste último. + +Esclarece-se ainda que os sites que apresentem uma hiperligação ao presente Site (hiperligações que apontem para o Site ou estabelecidas a partir dele) não estão sob o controlo da **SAS French Community Agency**, do **RaidProtect** nem das suas sociedades afiliadas, que declinam toda a responsabilidade quanto ao seu conteúdo. + +## 3. Utilização do serviço + +Os nossos serviços, incluindo a Aplicação, são de utilização livre para fins pessoais ou comerciais. Reservamo-nos o direito de proibir a utilização dos nossos serviços em caso de utilização que consideremos inadequada ou suscetível de prejudicar outros Utilizadores. + +## 4. Responsabilidade + +### 4.1. Site + +A **SAS French Community Agency**, o **RaidProtect** e as suas sociedades afiliadas não poderão ser responsabilizados por quaisquer danos diretos ou indiretos resultantes da utilização do Site ou das informações nele contidas. A **SAS French Community Agency** não garante a exatidão nem a exaustividade das informações apresentadas no Site e reserva-se o direito de as modificar ou eliminar a qualquer momento, sem aviso prévio. + +### 4.2. Aplicação + +A Aplicação **RaidProtect** é fornecida tal como está, sem qualquer garantia, expressa ou implícita. A **SAS French Community Agency** não pode ser responsabilizada pelas consequências de uma utilização incorreta ou abusiva da Aplicação, nem pelos eventuais danos resultantes de um funcionamento incorreto temporário ou permanente. + +Os administradores de servidores Discord que utilizam o **RaidProtect** são os únicos responsáveis pelas configurações efetuadas e pelas decisões tomadas na sequência das ações automatizadas da Aplicação (por exemplo, banimentos ou eliminação de mensagens). Em caso de violação das condições de utilização do Discord ou da legislação em vigor, os administradores do servidor em causa assumem a inteira responsabilidade. + +## 5. Modificação dos Termos de Utilização + +Os presentes Termos de Utilização podem ser alterados a qualquer momento para refletir alterações nos serviços ou na regulamentação aplicável. Qualquer alteração será publicada no site e, se necessário, comunicada através da Aplicação. Ao continuarem a utilizar os serviços após a atualização dos Termos, os utilizadores aceitam as alterações introduzidas. + +## 6. Lei aplicável e jurisdição + +Os presentes Termos de Utilização regem-se pelo direito francês. Em caso de litígio, e após uma tentativa de resolução amigável, é atribuída competência aos tribunais competentes do foro de Paris, salvo disposição legal em contrário. + + diff --git a/src/components/LegalLayout/index.tsx b/src/components/LegalLayout/index.tsx new file mode 100644 index 0000000..b0b0b34 --- /dev/null +++ b/src/components/LegalLayout/index.tsx @@ -0,0 +1,74 @@ +import React, {type ReactNode} from 'react'; +import clsx from 'clsx'; +import Layout from '@theme/Layout'; +import Link from '@docusaurus/Link'; +import Translate from '@docusaurus/Translate'; +import {useLocation} from '@docusaurus/router'; +import styles from './styles.module.css'; + +type LegalLayoutProps = { + /** Title shown in the hero H1 and used as the page . */ + title: string; + /** + * Already-localized "last updated" string (e.g. "1 février 2025"). + * Rendered verbatim under the H1. + */ + lastUpdated: string; + /** Optional meta description for the page. */ + description?: string; + children: ReactNode; +}; + +type MenuItem = { + to: string; + id: string; + defaultMessage: string; +}; + +const MENU: readonly MenuItem[] = [ + {to: '/legal', id: 'legal.menu.legal', defaultMessage: 'Mentions légales'}, + {to: '/terms', id: 'legal.menu.terms', defaultMessage: "Conditions générales d'utilisation"}, + {to: '/privacy', id: 'legal.menu.privacy', defaultMessage: 'Politique de confidentialité'}, + {to: '/cookies', id: 'legal.menu.cookies', defaultMessage: 'Politique des cookies'}, +]; + +function stripLocale(pathname: string): string { + // Remove any locale prefix like /en, /de, /es, /pt (default fr has no prefix). + return pathname.replace(/^\/(en|de|es|pt)(?=\/|$)/, '') || '/'; +} + +export default function LegalLayout({ + title, + lastUpdated, + description, + children, +}: LegalLayoutProps): ReactNode { + const {pathname} = useLocation(); + const currentPath = stripLocale(pathname).replace(/\/$/, '') || '/'; + + return ( + <Layout title={title} description={description}> + <header className={styles.hero}> + <div className={styles.heroInner}> + <h1 className={styles.title}>{title}</h1> + <p className={styles.lastUpdated}>{lastUpdated}</p> + <nav className={styles.menu} aria-label={title}> + {MENU.map((item) => { + const isActive = currentPath === item.to; + return ( + <Link + key={item.to} + to={item.to} + className={clsx(styles.menuLink, isActive && styles.menuLinkActive)} + aria-current={isActive ? 'page' : undefined}> + <Translate id={item.id}>{item.defaultMessage}</Translate> + </Link> + ); + })} + </nav> + </div> + </header> + <main className={styles.container}>{children}</main> + </Layout> + ); +} diff --git a/src/components/LegalLayout/styles.module.css b/src/components/LegalLayout/styles.module.css new file mode 100644 index 0000000..741653f --- /dev/null +++ b/src/components/LegalLayout/styles.module.css @@ -0,0 +1,78 @@ +.hero { + background-color: var(--ifm-color-emphasis-100); + border-bottom: 1px solid var(--ifm-color-emphasis-200); + padding: 3rem 1rem 2rem; +} + +.heroInner { + max-width: 880px; + margin: 0 auto; + display: flex; + flex-direction: column; + gap: 1.5rem; +} + +.title { + margin: 0; + font-size: 2.25rem; + line-height: 1.2; +} + +.lastUpdated { + margin: 0; + color: var(--ifm-color-emphasis-700); + font-size: 0.95rem; +} + +.menu { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + margin-top: 0.5rem; +} + +.menuLink { + display: inline-flex; + align-items: center; + padding: 0.45rem 0.9rem; + border-radius: 999px; + border: 1px solid var(--ifm-color-emphasis-300); + background-color: var(--ifm-background-color); + color: var(--ifm-font-color-base); + font-size: 0.9rem; + font-weight: 500; + text-decoration: none; + transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease; +} + +.menuLink:hover { + background-color: var(--ifm-color-emphasis-200); + color: var(--ifm-font-color-base); + text-decoration: none; +} + +.menuLinkActive { + background-color: var(--ifm-color-primary); + border-color: var(--ifm-color-primary); + color: var(--ifm-color-white); +} + +.menuLinkActive:hover { + background-color: var(--ifm-color-primary-dark); + border-color: var(--ifm-color-primary-dark); + color: var(--ifm-color-white); +} + +.container { + max-width: 780px; + margin: 0 auto; + padding: 3rem 1rem 4rem; +} + +.container h2 { + margin-top: 2.5rem; +} + +.container h3 { + margin-top: 1.75rem; +} diff --git a/src/pages/cookies.mdx b/src/pages/cookies.mdx new file mode 100644 index 0000000..0e03985 --- /dev/null +++ b/src/pages/cookies.mdx @@ -0,0 +1,35 @@ +--- +title: Politique des cookies | RaidProtect +description: Découvrez comment RaidProtect protège votre vie privée en n'utilisant pas de cookies pour une navigation sécurisée et privée. Consultez notre politique. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + +<LegalLayout + title="Politique d'utilisation des cookies" + lastUpdated="Dernière mise à jour : 1 février 2025" + description="Découvrez comment RaidProtect protège votre vie privée en n'utilisant pas de cookies pour une navigation sécurisée et privée. Consultez notre politique."> + +Chez RaidProtect, nous nous engageons à protéger la vie privée et les données de nos utilisateurs. Dans le cadre de cet engagement, nous vous informons de notre politique concernant l'utilisation des cookies sur notre site web. + +## 1. Utilisation des cookies + +Nous tenons à être transparents concernant les technologies que nous utilisons. À cet effet, nous vous informons que notre site web **n'utilise pas de cookies**. Les cookies sont de petits fichiers texte qui peuvent être utilisés par les sites web pour rendre l'expérience utilisateur plus efficace. Cependant, dans le souci de préserver au maximum la confidentialité de nos utilisateurs, nous avons choisi de ne pas les employer sur notre plateforme. + +## 2. Qu'est-ce que cela signifie pour vous ? + +L'absence d'utilisation de cookies signifie que vous pouvez naviguer sur notre site web sans qu'aucune information concernant votre visite ne soit enregistrée ou analysée. Cette démarche vise à assurer une expérience de navigation privée et sécurisée pour tous nos utilisateurs. + +## 3. Comment nous protégeons votre vie privée ? + +Outre notre politique de non-utilisation de cookies, nous prenons d'autres mesures pour protéger votre vie privée et vos données personnelles. Nous nous conformons strictement aux lois et réglementations en vigueur sur la protection des données et mettons en œuvre des pratiques de sécurité de l'information de pointe pour prévenir tout accès non autorisé, modification, divulgation ou destruction de vos informations personnelles. + +## 4. Modifications de la politique d'utilisation des cookies + +Nous nous réservons le droit de modifier cette politique d'utilisation des cookies à tout moment. Toute modification entrera en vigueur immédiatement après sa publication sur notre site web. Nous vous encourageons à consulter régulièrement cette page pour rester informés de notre politique en matière de cookies. + +## 5. Contact + +Si vous avez des questions ou des préoccupations concernant notre politique d'utilisation des cookies ou la manière dont nous protégeons vos données personnelles, n'hésitez pas à nous contacter à [dpo@raidprotect.bot](mailto:dpo@raidprotect.bot). + +</LegalLayout> diff --git a/src/pages/legal.mdx b/src/pages/legal.mdx new file mode 100644 index 0000000..32c690b --- /dev/null +++ b/src/pages/legal.mdx @@ -0,0 +1,41 @@ +--- +title: Mentions légales | RaidProtect +description: Retrouvez les mentions légales du bot Discord RaidProtect (RP), éditeur du site raidprotect.bot. Informations générales et cadre légal d'utilisation. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + +<LegalLayout + title="Mentions légales" + lastUpdated="Dernière mise à jour : 1 février 2025" + description="Retrouvez les mentions légales du bot Discord RaidProtect (RP), éditeur du site raidprotect.bot. Informations générales et cadre légal d'utilisation."> + +Le site **RaidProtect** accessible aux adresses « raidprotect.bot » et « docs.raidprotect.bot » (ci-après dénommé « Site ») et l'application RaidProtect accessible depuis Discord « 466578580449525760 » (ci-après dénommé « Application ») sont édités par la **SAS French Community Agency**. Les informations communiquées sur le Site sont présentées à titre indicatif et général et ne prétendent aucunement à l'exhaustivité. Malgré tous les soins et la rigueur apportés à la réalisation du Site et à son actualisation régulière, des erreurs peuvent s'être glissées dans les informations présentées. Les utilisateurs du Site procéderont donc à toutes vérifications utiles et sont seuls responsables de l'utilisation qu'ils font des informations accessibles. + +Responsable publication : Arthur Battais + +--- + +## Société + +**SAS French Community Agency** +**Sigle : FCA** +**Au capital social de 10 000 €** +[16 Esplanade du Champ de Mars, 35000 Rennes](https://www.google.com/maps/place/16+Esp.+du+Champ+de+Mars,+35000+Rennes/@48.1044838,-1.675702,17z/data=!3m1!4b1!4m6!3m5!1s0x480edfca43c9b53b:0xdea9cc38f95f9839!8m2!3d48.1044838!4d-1.675702!16s%2Fg%2F11csm9r096?sa=X&ved=2ahUKEwiZ0ICZyYSEAxWpUqQEHTq1BdcQ8gF6BAgdEAA&entry=tts) + ++33 (0)9 72 14 95 51 +[hello@fca.gg](mailto:hello@fca.gg) + +SIRET : [983 856 253 00023](https://annuaire-entreprises.data.gouv.fr/etablissement/98385625300023) +TVA : [FR03983856253](https://ec.europa.eu/taxation_customs/vies/#/vat-validation) + +Marque commerciale : **RaidProtect** +[contact@raidprotect.bot](mailto:contact@raidprotect.bot) + +--- + +## Hébergement + +L'hébergeur du Site est la société Hetzner (Hetzner Online GmbH), dont le siège social est situé au Industriestr. 25 - 91710 Gunzenhausen - Germany, avec le mail : info@hetzner.com et tél : +49 (0)9831 505-0. + +</LegalLayout> diff --git a/src/pages/privacy.mdx b/src/pages/privacy.mdx new file mode 100644 index 0000000..b479b13 --- /dev/null +++ b/src/pages/privacy.mdx @@ -0,0 +1,87 @@ +--- +title: Politique de confidentialité | RaidProtect +description: Découvrez comment RaidProtect protège vos données personnelles et assure la sécurité de votre vie privée en utilisant nos services. Politique de confidentialité détaillée. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + +<LegalLayout + title="Politique de confidentialité" + lastUpdated="Dernière mise à jour : 1 février 2025" + description="Découvrez comment RaidProtect protège vos données personnelles et assure la sécurité de votre vie privée en utilisant nos services. Politique de confidentialité détaillée."> + +La présente Politique de Confidentialité décrit les modalités de collecte, d'utilisation, et de protection des données personnelles dans le cadre des services proposés par l'application Discord **RaidProtect** et le site web associé. + +En utilisant ces services, vous acceptez les pratiques décrites dans cette Politique de Confidentialité. **SAS French Community Agency**, **RaidProtect**, s'engage à respecter et à protéger votre vie privée conformément à la législation en vigueur, notamment le Règlement Général sur la Protection des Données (RGPD) et la **loi informatique et libertés**. + +## 1. Données collectées + +Afin d'assurer le fonctionnement des services proposés, l'application Discord **RaidProtect** et le site web collectent et traitent les catégories de données suivantes : + +### 1.1. Données collectées par l'Application + +- **Configuration des serveurs Discord** : informations sur les paramètres des serveurs utilisant **RaidProtect** (ex : rôles, permissions, canaux configurés). +- **Messages textuels** : tout message envoyé par un utilisateur peut être collecté temporairement, dans le cadre des services de modération. +- **Événements Discord** : événements transmis par Discord, tels que l'arrivée ou le départ de nouveaux membres, les modifications de rôles ou les suppressions de messages. + +### 1.2. Données collectées par le site web + +- **Données d'identification** : informations fournies par les utilisateurs lors de l'inscription ou de l'utilisation des services en ligne (ex : adresse e-mail, identifiants Discord). +- **Données de navigation** : informations sur l'interaction avec le site web, telles que l'adresse IP, le type de navigateur ou les cookies. + +## 2. Finalités du traitement + +Les données collectées sont exclusivement utilisées pour : + +1. Assurer le bon fonctionnement des services proposés (par exemple : modération des serveurs Discord, analyse des événements liés à la communauté). +2. Garantir une expérience utilisateur optimale et personnalisée. +3. Sécuriser les serveurs Discord en appliquant des règles définies par les administrateurs. +4. Maintenir et améliorer les services en analysant l'utilisation. + +Les données ne sont pas utilisées à des fins commerciales ou publicitaires. + +## 3. Conservation des données + +Les données personnelles collectées sont conservées uniquement pendant la durée nécessaire à la réalisation des finalités définies ci-dessus. Une fois cette période écoulée, elles sont supprimées ou anonymisées. + +- **Messages textuels** : conservés temporairement pour traitement, puis supprimés de manière définitive. +- **Données de configuration des serveurs** : conservées aussi longtemps que le serveur utilise les services de **RaidProtect**. +- **Données de navigation** : conservées conformément aux dispositions légales applicables. + +## 4. Partage des données + +Les données collectées ne sont **jamais partagées avec des tiers**, sauf dans les cas suivants : + +1. **Partenaires techniques** : les partenaires nécessaires à la fourniture des services (par exemple, les hébergeurs ou fournisseurs de services cloud). +2. **Obligations légales** : si la divulgation des données est requise par la loi, une autorité judiciaire ou réglementaire. + +## 5. Sécurité des données + +**RaidProtect** met en œuvre toutes les mesures techniques et organisationnelles nécessaires pour protéger les données personnelles contre les accès non autorisés, les pertes, les destructions ou les altérations. Les principales mesures incluent : + +- Le chiffrement des données sensibles. +- Un contrôle strict des accès aux données (authentification et journalisation). +- Une infrastructure hébergée sur des serveurs sécurisés. + +## 6. Droits des utilisateurs + +Conformément au RGPD, les utilisateurs disposent des droits suivants sur leurs données personnelles : + +- **Droit d'accès** : obtenir une copie des données personnelles traitées. +- **Droit de rectification** : corriger des données inexactes ou incomplètes. +- **Droit à l'effacement** : demander la suppression des données dans certaines conditions. +- **Droit à la limitation** : limiter le traitement de leurs données. +- **Droit d'opposition** : refuser le traitement de leurs données pour des motifs légitimes. +- **Droit à la portabilité** : recevoir les données personnelles dans un format structuré. + +Pour exercer ces droits ou poser des questions sur la gestion des données, les utilisateurs peuvent contacter le délégué à la protection des données (DPO) à [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot). + +## 7. Modification de la Politique de Confidentialité + +La présente Politique de Confidentialité peut être mise à jour à tout moment afin de refléter des changements dans les services ou dans la réglementation applicable. Toute modification sera publiée sur le site web et, si nécessaire, communiquée via l'Application. En continuant d'utiliser les services après la mise à jour de la politique, les utilisateurs acceptent les modifications apportées. + +## 8. Contact + +Si vous avez des questions ou des préoccupations concernant notre politique de confidentialité ou la manière dont nous protégeons vos données personnelles, n'hésitez pas à nous contacter à [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot). + +</LegalLayout> diff --git a/src/pages/terms.mdx b/src/pages/terms.mdx new file mode 100644 index 0000000..3de8f2d --- /dev/null +++ b/src/pages/terms.mdx @@ -0,0 +1,51 @@ +--- +title: Conditions générales d'utilisation | RaidProtect +description: Consultez nos conditions d'utilisation pour comprendre les droits de propriété intellectuelle, liens hypertextes, gestion des données personnelles et notre responsabilité sur le site et le bot RaidProtect. +--- + +import LegalLayout from '@site/src/components/LegalLayout'; + +<LegalLayout + title="Conditions générales d'utilisation" + lastUpdated="Dernière mise à jour : 1 février 2025" + description="Consultez nos conditions d'utilisation pour comprendre les droits de propriété intellectuelle, liens hypertextes, gestion des données personnelles et notre responsabilité sur le site et le bot RaidProtect."> + +En ajoutant RaidProtect sur votre serveur Discord, vous reconnaissez avoir lu et accepté les Conditions d'Utilisation. Si vous n'acceptez pas l'une de ces conditions, vous devez arrêter d'utiliser nos services. + +## 1. Propriété intellectuelle + +Le présent site internet, sa structure générale, la marque commerciale RaidProtect, ainsi que les textes, images, animations, logos et tout autre élément le composant, sont la propriété exclusive de SAS French Community Agency ou de ses partenaires et sont protégés par les lois françaises et internationales relatives à la propriété intellectuelle. Toute reproduction, représentation, utilisation ou adaptation, sous quelque forme que ce soit, de tout ou partie de ces éléments, y compris les logiciels, sans l'autorisation écrite préalable de SAS French Community Agency, est strictement interdite et constituerait une contrefaçon. + +Les mêmes dispositions s'appliquent aux fonctionnalités et au code source de l'Application, qui sont également protégés par les droits de propriété intellectuelle. Toute tentative de reproduction, modification ou utilisation non autorisée des fonctionnalités de l'Application est interdite et susceptible de poursuites judiciaires. + +## 2. Liens hypertextes + +Tout lien avec le Site doit faire l'objet d'une autorisation écrite et préalable de **SAS French Community Agency**. En tout état de cause, **SAS French Community Agency** se réserve le droit de mettre fin à cette autorisation à tout moment s'il lui paraît que le lien établi avec le Site est de nature à porter atteinte aux intérêts de ce dernier. + +Il est par ailleurs précisé que les sites présentant un lien hypertexte avec le présent Site (liens hypertextes ciblant le Site ou établis au départ de celui-ci) ne sont pas sous le contrôle de **SAS French Community Agency**, **RaidProtect** et ses sociétés affiliées, qui déclinent toute responsabilité quant à leur contenu. + +## 3. Utilisation du service + +Nos services, incluant l'Application, sont libres d'utilisation dans un but personnel ou commercial. Nous nous réservons le droit d'interdire l'utilisation de nos services en cas d'usage que nous jugeons inapproprié ou pouvant nuire aux autres Utilisateurs. + +## 4. Responsabilité + +### 4.1. Site internet + +**SAS French Community Agency**, **RaidProtect** et ses sociétés affiliées ne sauraient être tenues responsables de tout dommage direct ou indirect résultant de l'utilisation du Site internet ou des informations qu'il contient. **SAS French Community Agency** ne garantit pas l'exactitude ou l'exhaustivité des informations présentées sur le Site et se réserve le droit de les modifier ou de les supprimer à tout moment, sans préavis. + +### 4.2. Application + +L'Application **RaidProtect** est fournie en l'état, sans garantie d'aucune sorte, expresse ou implicite. **SAS French Community Agency** ne peut être tenue responsable des conséquences d'une utilisation incorrecte ou abusive de l'Application, ni des éventuels dommages résultants d'un dysfonctionnement temporaire ou permanent. + +Les administrateurs de serveurs Discord utilisant **RaidProtect** sont seuls responsables des configurations effectuées et des décisions prises suite aux actions automatisées de l'Application (par exemple, bannissements ou suppressions de messages). En cas de violation des conditions d'utilisation de Discord ou des lois en vigueur, les administrateurs du serveur concerné en portent l'entière responsabilité. + +## 5. Modification des CGU + +Les présentes Conditions Générales d'Utilisation peuvent être modifiées à tout moment afin de refléter des changements dans les services ou dans la réglementation applicable. Toute modification sera publiée sur le site web et, si nécessaire, communiquée via l'Application. En continuant d'utiliser les services après la mise à jour des CGU, les utilisateurs acceptent les modifications apportées. + +## 6. Loi applicable et juridiction + +Les présentes CGU sont régies par le droit français. En cas de litige, et après une tentative de résolution amiable, compétence est attribuée aux tribunaux compétents du ressort de Paris, sauf disposition légale contraire. + +</LegalLayout> From fc9cde4d9dc45f3d43ec5e6637d2404398c8c5d6 Mon Sep 17 00:00:00 2001 From: Zallom <matthias@fca.gg> Date: Fri, 22 May 2026 00:12:21 +0200 Subject: [PATCH 03/36] fix(legal-pages): convert MDX to TSX to remove double Layout + TOC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les pages MDX dans src/pages/ sont automatiquement enveloppées par MDXPageLayout (qui inclut déjà <Layout>), ce qui doublait navbar et footer puisque LegalLayout en remettait un. Les MDX généraient aussi une TOC indésirable à droite. Conversion en TSX : LegalLayout reste l'unique fournisseur de <Layout>, pas de TOC, contenu structuré en JSX (<section>, <h2>, <hr />, <p>, etc.). --- .../cookies.mdx | 35 ---- .../cookies.tsx | 66 ++++++ .../docusaurus-plugin-content-pages/legal.mdx | 41 ---- .../docusaurus-plugin-content-pages/legal.tsx | 84 ++++++++ .../privacy.mdx | 87 -------- .../privacy.tsx | 198 ++++++++++++++++++ .../docusaurus-plugin-content-pages/terms.mdx | 51 ----- .../docusaurus-plugin-content-pages/terms.tsx | 112 ++++++++++ .../cookies.mdx | 35 ---- .../cookies.tsx | 62 ++++++ .../docusaurus-plugin-content-pages/legal.mdx | 41 ---- .../docusaurus-plugin-content-pages/legal.tsx | 79 +++++++ .../privacy.mdx | 87 -------- .../privacy.tsx | 181 ++++++++++++++++ .../docusaurus-plugin-content-pages/terms.mdx | 51 ----- .../docusaurus-plugin-content-pages/terms.tsx | 104 +++++++++ .../cookies.mdx | 35 ---- .../cookies.tsx | 65 ++++++ .../docusaurus-plugin-content-pages/legal.mdx | 41 ---- .../docusaurus-plugin-content-pages/legal.tsx | 81 +++++++ .../privacy.mdx | 87 -------- .../privacy.tsx | 192 +++++++++++++++++ .../docusaurus-plugin-content-pages/terms.mdx | 51 ----- .../docusaurus-plugin-content-pages/terms.tsx | 108 ++++++++++ .../cookies.mdx | 35 ---- .../cookies.tsx | 66 ++++++ .../docusaurus-plugin-content-pages/legal.mdx | 41 ---- .../docusaurus-plugin-content-pages/legal.tsx | 80 +++++++ .../privacy.mdx | 87 -------- .../privacy.tsx | 188 +++++++++++++++++ .../docusaurus-plugin-content-pages/terms.mdx | 51 ----- .../docusaurus-plugin-content-pages/terms.tsx | 109 ++++++++++ src/pages/cookies.mdx | 35 ---- src/pages/cookies.tsx | 67 ++++++ src/pages/legal.mdx | 41 ---- src/pages/legal.tsx | 80 +++++++ src/pages/privacy.mdx | 87 -------- src/pages/privacy.tsx | 194 +++++++++++++++++ src/pages/terms.mdx | 51 ----- src/pages/terms.tsx | 108 ++++++++++ 40 files changed, 2224 insertions(+), 1070 deletions(-) delete mode 100644 i18n/de/docusaurus-plugin-content-pages/cookies.mdx create mode 100644 i18n/de/docusaurus-plugin-content-pages/cookies.tsx delete mode 100644 i18n/de/docusaurus-plugin-content-pages/legal.mdx create mode 100644 i18n/de/docusaurus-plugin-content-pages/legal.tsx delete mode 100644 i18n/de/docusaurus-plugin-content-pages/privacy.mdx create mode 100644 i18n/de/docusaurus-plugin-content-pages/privacy.tsx delete mode 100644 i18n/de/docusaurus-plugin-content-pages/terms.mdx create mode 100644 i18n/de/docusaurus-plugin-content-pages/terms.tsx delete mode 100644 i18n/en/docusaurus-plugin-content-pages/cookies.mdx create mode 100644 i18n/en/docusaurus-plugin-content-pages/cookies.tsx delete mode 100644 i18n/en/docusaurus-plugin-content-pages/legal.mdx create mode 100644 i18n/en/docusaurus-plugin-content-pages/legal.tsx delete mode 100644 i18n/en/docusaurus-plugin-content-pages/privacy.mdx create mode 100644 i18n/en/docusaurus-plugin-content-pages/privacy.tsx delete mode 100644 i18n/en/docusaurus-plugin-content-pages/terms.mdx create mode 100644 i18n/en/docusaurus-plugin-content-pages/terms.tsx delete mode 100644 i18n/es/docusaurus-plugin-content-pages/cookies.mdx create mode 100644 i18n/es/docusaurus-plugin-content-pages/cookies.tsx delete mode 100644 i18n/es/docusaurus-plugin-content-pages/legal.mdx create mode 100644 i18n/es/docusaurus-plugin-content-pages/legal.tsx delete mode 100644 i18n/es/docusaurus-plugin-content-pages/privacy.mdx create mode 100644 i18n/es/docusaurus-plugin-content-pages/privacy.tsx delete mode 100644 i18n/es/docusaurus-plugin-content-pages/terms.mdx create mode 100644 i18n/es/docusaurus-plugin-content-pages/terms.tsx delete mode 100644 i18n/pt/docusaurus-plugin-content-pages/cookies.mdx create mode 100644 i18n/pt/docusaurus-plugin-content-pages/cookies.tsx delete mode 100644 i18n/pt/docusaurus-plugin-content-pages/legal.mdx create mode 100644 i18n/pt/docusaurus-plugin-content-pages/legal.tsx delete mode 100644 i18n/pt/docusaurus-plugin-content-pages/privacy.mdx create mode 100644 i18n/pt/docusaurus-plugin-content-pages/privacy.tsx delete mode 100644 i18n/pt/docusaurus-plugin-content-pages/terms.mdx create mode 100644 i18n/pt/docusaurus-plugin-content-pages/terms.tsx delete mode 100644 src/pages/cookies.mdx create mode 100644 src/pages/cookies.tsx delete mode 100644 src/pages/legal.mdx create mode 100644 src/pages/legal.tsx delete mode 100644 src/pages/privacy.mdx create mode 100644 src/pages/privacy.tsx delete mode 100644 src/pages/terms.mdx create mode 100644 src/pages/terms.tsx diff --git a/i18n/de/docusaurus-plugin-content-pages/cookies.mdx b/i18n/de/docusaurus-plugin-content-pages/cookies.mdx deleted file mode 100644 index fe24a1c..0000000 --- a/i18n/de/docusaurus-plugin-content-pages/cookies.mdx +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Cookie-Richtlinie | RaidProtect -description: Erfahren Sie, wie RaidProtect Ihre Privatsphäre schützt, indem keine Cookies verwendet werden – für ein sicheres und privates Surferlebnis. Lesen Sie unsere Richtlinie. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Cookie-Richtlinie" - lastUpdated="Letzte Aktualisierung: 1. Februar 2025" - description="Erfahren Sie, wie RaidProtect Ihre Privatsphäre schützt, indem keine Cookies verwendet werden – für ein sicheres und privates Surferlebnis. Lesen Sie unsere Richtlinie."> - -Bei RaidProtect setzen wir uns dafür ein, die Privatsphäre und die Daten unserer Nutzer zu schützen. Im Rahmen dieses Engagements informieren wir Sie über unsere Richtlinie zur Verwendung von Cookies auf unserer Website. - -## 1. Verwendung von Cookies - -Wir möchten transparent über die von uns eingesetzten Technologien informieren. Daher teilen wir Ihnen mit, dass unsere Website **keine Cookies verwendet**. Cookies sind kleine Textdateien, die von Websites verwendet werden können, um das Nutzererlebnis effizienter zu gestalten. Um jedoch die Vertraulichkeit unserer Nutzer bestmöglich zu wahren, haben wir uns entschieden, sie auf unserer Plattform nicht einzusetzen. - -## 2. Was bedeutet das für Sie? - -Die Nichtverwendung von Cookies bedeutet, dass Sie auf unserer Website surfen können, ohne dass Informationen über Ihren Besuch aufgezeichnet oder analysiert werden. Dieses Vorgehen soll allen unseren Nutzern ein privates und sicheres Surferlebnis gewährleisten. - -## 3. Wie schützen wir Ihre Privatsphäre? - -Neben unserer Richtlinie der Nichtverwendung von Cookies ergreifen wir weitere Maßnahmen, um Ihre Privatsphäre und Ihre personenbezogenen Daten zu schützen. Wir halten die geltenden Datenschutzgesetze und -vorschriften strikt ein und setzen modernste Informationssicherheitspraktiken um, um jeden unbefugten Zugriff, jede Änderung, Offenlegung oder Zerstörung Ihrer personenbezogenen Daten zu verhindern. - -## 4. Änderungen der Cookie-Richtlinie - -Wir behalten uns das Recht vor, diese Cookie-Richtlinie jederzeit zu ändern. Jede Änderung tritt unmittelbar nach ihrer Veröffentlichung auf unserer Website in Kraft. Wir empfehlen Ihnen, diese Seite regelmäßig zu besuchen, um über unsere Cookie-Richtlinie auf dem Laufenden zu bleiben. - -## 5. Kontakt - -Wenn Sie Fragen oder Bedenken zu unserer Cookie-Richtlinie oder zur Art und Weise haben, wie wir Ihre personenbezogenen Daten schützen, kontaktieren Sie uns gerne unter [dpo@raidprotect.bot](mailto:dpo@raidprotect.bot). - -</LegalLayout> diff --git a/i18n/de/docusaurus-plugin-content-pages/cookies.tsx b/i18n/de/docusaurus-plugin-content-pages/cookies.tsx new file mode 100644 index 0000000..28694dc --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-pages/cookies.tsx @@ -0,0 +1,66 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +export default function Cookies(): ReactNode { + return ( + <LegalLayout + title="Cookie-Richtlinie" + lastUpdated="Letzte Aktualisierung: 1. Februar 2025" + description="Erfahren Sie, wie RaidProtect Ihre Privatsphäre schützt, indem keine Cookies verwendet werden – für ein sicheres und privates Surferlebnis. Lesen Sie unsere Richtlinie."> + <section> + <p> + Bei RaidProtect setzen wir uns dafür ein, die Privatsphäre und die Daten unserer Nutzer + zu schützen. Im Rahmen dieses Engagements informieren wir Sie über unsere Richtlinie zur + Verwendung von Cookies auf unserer Website. + </p> + </section> + <section> + <h2>1. Verwendung von Cookies</h2> + <p> + Wir möchten transparent über die von uns eingesetzten Technologien informieren. Daher + teilen wir Ihnen mit, dass unsere Website <strong>keine Cookies verwendet</strong>. + Cookies sind kleine Textdateien, die von Websites verwendet werden können, um das + Nutzererlebnis effizienter zu gestalten. Um jedoch die Vertraulichkeit unserer Nutzer + bestmöglich zu wahren, haben wir uns entschieden, sie auf unserer Plattform nicht + einzusetzen. + </p> + </section> + <section> + <h2>2. Was bedeutet das für Sie?</h2> + <p> + Die Nichtverwendung von Cookies bedeutet, dass Sie auf unserer Website surfen können, + ohne dass Informationen über Ihren Besuch aufgezeichnet oder analysiert werden. Dieses + Vorgehen soll allen unseren Nutzern ein privates und sicheres Surferlebnis + gewährleisten. + </p> + </section> + <section> + <h2>3. Wie schützen wir Ihre Privatsphäre?</h2> + <p> + Neben unserer Richtlinie der Nichtverwendung von Cookies ergreifen wir weitere Maßnahmen, + um Ihre Privatsphäre und Ihre personenbezogenen Daten zu schützen. Wir halten die + geltenden Datenschutzgesetze und -vorschriften strikt ein und setzen modernste + Informationssicherheitspraktiken um, um jeden unbefugten Zugriff, jede Änderung, + Offenlegung oder Zerstörung Ihrer personenbezogenen Daten zu verhindern. + </p> + </section> + <section> + <h2>4. Änderungen der Cookie-Richtlinie</h2> + <p> + Wir behalten uns das Recht vor, diese Cookie-Richtlinie jederzeit zu ändern. Jede + Änderung tritt unmittelbar nach ihrer Veröffentlichung auf unserer Website in Kraft. Wir + empfehlen Ihnen, diese Seite regelmäßig zu besuchen, um über unsere Cookie-Richtlinie auf + dem Laufenden zu bleiben. + </p> + </section> + <section> + <h2>5. Kontakt</h2> + <p> + Wenn Sie Fragen oder Bedenken zu unserer Cookie-Richtlinie oder zur Art und Weise haben, + wie wir Ihre personenbezogenen Daten schützen, kontaktieren Sie uns gerne unter{' '} + <a href="mailto:dpo@raidprotect.bot">dpo@raidprotect.bot</a>. + </p> + </section> + </LegalLayout> + ); +} diff --git a/i18n/de/docusaurus-plugin-content-pages/legal.mdx b/i18n/de/docusaurus-plugin-content-pages/legal.mdx deleted file mode 100644 index b22907a..0000000 --- a/i18n/de/docusaurus-plugin-content-pages/legal.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Impressum | RaidProtect -description: Finden Sie das Impressum des Discord-Bots RaidProtect (RP), Herausgeber der Website raidprotect.bot. Allgemeine Informationen und rechtliche Nutzungsbedingungen. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Impressum" - lastUpdated="Letzte Aktualisierung: 1. Februar 2025" - description="Finden Sie das Impressum des Discord-Bots RaidProtect (RP), Herausgeber der Website raidprotect.bot. Allgemeine Informationen und rechtliche Nutzungsbedingungen."> - -Die unter den Adressen **„raidprotect.bot"** und **„docs.raidprotect.bot"** erreichbare Website von RaidProtect (im Folgenden als die **„Website"** bezeichnet) sowie die über Discord unter der ID **„466578580449525760"** zugängliche RaidProtect-Anwendung (im Folgenden als die **„Anwendung"** bezeichnet) werden von der **SAS French Community Agency** veröffentlicht. Die auf der Website bereitgestellten Informationen dienen ausschließlich allgemeinen Informationszwecken und erheben keinen Anspruch auf Vollständigkeit. Trotz aller Sorgfalt und regelmäßiger Aktualisierung der Website können sich Fehler in den präsentierten Informationen eingeschlichen haben. Die Nutzer der Website sind daher angehalten, alle notwendigen Überprüfungen selbst vorzunehmen und tragen die alleinige Verantwortung für die Verwendung der bereitgestellten Informationen. - -**Verantwortlicher Herausgeber:** Arthur Battais - ---- - -## Unternehmen - -**SAS French Community Agency** -**Abkürzung: FCA** -**Mit einem Stammkapital von 10.000 €** -[16 Esplanade du Champ de Mars, 35000 Rennes, Frankreich](https://www.google.com/maps/place/16+Esp.+du+Champ+de+Mars,+35000+Rennes/@48.1044838,-1.675702,17z/data=!3m1!4b1!4m6!3m5!1s0x480edfca43c9b53b:0xdea9cc38f95f9839!8m2!3d48.1044838!4d-1.675702!16s%2Fg%2F11csm9r096?sa=X&ved=2ahUKEwiZ0ICZyYSEAxWpUqQEHTq1BdcQ8gF6BAgdEAA&entry=tts) - -+33 (0)9 72 14 95 51 -[hello@fca.gg](mailto:hello@fca.gg) - -SIRET: [983 856 253 00023](https://annuaire-entreprises.data.gouv.fr/etablissement/98385625300023) -USt-IdNr.: [FR03983856253](https://ec.europa.eu/taxation_customs/vies/#/vat-validation) - -**Eingetragene Marke**: RaidProtect -[contact@raidprotect.bot](mailto:contact@raidprotect.bot) - ---- - -## Hosting - -Die Website wird gehostet von Hetzner (Hetzner Online GmbH), mit Sitz in Industriestr. 25 - 91710 Gunzenhausen - Germany, E-Mail: info@hetzner.com und Telefon: +49 (0)9831 505-0. - -</LegalLayout> diff --git a/i18n/de/docusaurus-plugin-content-pages/legal.tsx b/i18n/de/docusaurus-plugin-content-pages/legal.tsx new file mode 100644 index 0000000..a32540f --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-pages/legal.tsx @@ -0,0 +1,84 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +const GOOGLE_MAPS_URL = + 'https://www.google.com/maps/place/16+Esp.+du+Champ+de+Mars,+35000+Rennes/@48.1044838,-1.675702,17z/data=!3m1!4b1!4m6!3m5!1s0x480edfca43c9b53b:0xdea9cc38f95f9839!8m2!3d48.1044838!4d-1.675702!16s%2Fg%2F11csm9r096?sa=X&ved=2ahUKEwiZ0ICZyYSEAxWpUqQEHTq1BdcQ8gF6BAgdEAA&entry=tts'; + +export default function Legal(): ReactNode { + return ( + <LegalLayout + title="Impressum" + lastUpdated="Letzte Aktualisierung: 1. Februar 2025" + description="Finden Sie das Impressum des Discord-Bots RaidProtect (RP), Herausgeber der Website raidprotect.bot. Allgemeine Informationen und rechtliche Nutzungsbedingungen."> + <section> + <p> + Die unter den Adressen <strong>„raidprotect.bot"</strong> und{' '} + <strong>„docs.raidprotect.bot"</strong> erreichbare Website von RaidProtect (im Folgenden + als die <strong>„Website"</strong> bezeichnet) sowie die über Discord unter der ID{' '} + <strong>„466578580449525760"</strong> zugängliche RaidProtect-Anwendung (im Folgenden als + die <strong>„Anwendung"</strong> bezeichnet) werden von der{' '} + <strong>SAS French Community Agency</strong> veröffentlicht. Die auf der Website + bereitgestellten Informationen dienen ausschließlich allgemeinen Informationszwecken und + erheben keinen Anspruch auf Vollständigkeit. Trotz aller Sorgfalt und regelmäßiger + Aktualisierung der Website können sich Fehler in den präsentierten Informationen + eingeschlichen haben. Die Nutzer der Website sind daher angehalten, alle notwendigen + Überprüfungen selbst vorzunehmen und tragen die alleinige Verantwortung für die + Verwendung der bereitgestellten Informationen. + </p> + <p> + <strong>Verantwortlicher Herausgeber:</strong> Arthur Battais + </p> + </section> + <hr /> + <section> + <h2>Unternehmen</h2> + <p> + <strong>SAS French Community Agency</strong> + <br /> + <strong>Abkürzung: FCA</strong> + <br /> + <strong>Mit einem Stammkapital von 10.000 €</strong> + <br /> + <a href={GOOGLE_MAPS_URL} target="_blank" rel="noopener noreferrer"> + 16 Esplanade du Champ de Mars, 35000 Rennes, Frankreich + </a> + </p> + <p> + +33 (0)9 72 14 95 51 + <br /> + <a href="mailto:hello@fca.gg">hello@fca.gg</a> + </p> + <p> + SIRET:{' '} + <a + href="https://annuaire-entreprises.data.gouv.fr/etablissement/98385625300023" + target="_blank" + rel="noopener noreferrer"> + 983 856 253 00023 + </a> + <br /> + USt-IdNr.:{' '} + <a + href="https://ec.europa.eu/taxation_customs/vies/#/vat-validation" + target="_blank" + rel="noopener noreferrer"> + FR03983856253 + </a> + </p> + <p> + <strong>Eingetragene Marke</strong>: RaidProtect + <br /> + <a href="mailto:contact@raidprotect.bot">contact@raidprotect.bot</a> + </p> + </section> + <hr /> + <section> + <h2>Hosting</h2> + <p> + Die Website wird gehostet von Hetzner (Hetzner Online GmbH), mit Sitz in Industriestr. 25 + - 91710 Gunzenhausen - Germany, E-Mail: info@hetzner.com und Telefon: +49 (0)9831 505-0. + </p> + </section> + </LegalLayout> + ); +} diff --git a/i18n/de/docusaurus-plugin-content-pages/privacy.mdx b/i18n/de/docusaurus-plugin-content-pages/privacy.mdx deleted file mode 100644 index 85527bc..0000000 --- a/i18n/de/docusaurus-plugin-content-pages/privacy.mdx +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Datenschutzerklärung | RaidProtect -description: Erfahren Sie, wie RaidProtect Ihre personenbezogenen Daten schützt und die Sicherheit Ihrer Privatsphäre bei der Nutzung unserer Dienste gewährleistet. Detaillierte Datenschutzerklärung. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Datenschutzerklärung" - lastUpdated="Letzte Aktualisierung: 1. Februar 2025" - description="Erfahren Sie, wie RaidProtect Ihre personenbezogenen Daten schützt und die Sicherheit Ihrer Privatsphäre bei der Nutzung unserer Dienste gewährleistet. Detaillierte Datenschutzerklärung."> - -Die vorliegende Datenschutzerklärung beschreibt die Modalitäten der Erhebung, Nutzung und des Schutzes personenbezogener Daten im Rahmen der Dienste, die von der Discord-Anwendung **RaidProtect** und der zugehörigen Website angeboten werden. - -Durch die Nutzung dieser Dienste akzeptieren Sie die in dieser Datenschutzerklärung beschriebenen Praktiken. **SAS French Community Agency**, **RaidProtect**, verpflichtet sich, Ihre Privatsphäre im Einklang mit der geltenden Gesetzgebung zu respektieren und zu schützen, insbesondere mit der Datenschutz-Grundverordnung (DSGVO) und dem **französischen Datenschutzgesetz (*loi informatique et libertés*)**. - -## 1. Erhobene Daten - -Um den Betrieb der angebotenen Dienste zu gewährleisten, erheben und verarbeiten die Discord-Anwendung **RaidProtect** und die Website die folgenden Datenkategorien: - -### 1.1. Von der Anwendung erhobene Daten - -- **Konfiguration der Discord-Server**: Informationen zu den Einstellungen der Server, die **RaidProtect** verwenden (z. B. Rollen, Berechtigungen, konfigurierte Kanäle). -- **Textnachrichten**: Jede von einem Nutzer gesendete Nachricht kann im Rahmen der Moderationsdienste vorübergehend erfasst werden. -- **Discord-Ereignisse**: von Discord übermittelte Ereignisse wie das Erscheinen oder Verlassen neuer Mitglieder, Rollenänderungen oder das Löschen von Nachrichten. - -### 1.2. Von der Website erhobene Daten - -- **Identifikationsdaten**: Informationen, die von Nutzern bei der Registrierung oder bei der Nutzung der Online-Dienste bereitgestellt werden (z. B. E-Mail-Adresse, Discord-Kennungen). -- **Navigationsdaten**: Informationen zur Interaktion mit der Website wie IP-Adresse, Browsertyp oder Cookies. - -## 2. Zwecke der Verarbeitung - -Die erhobenen Daten werden ausschließlich verwendet, um: - -1. den ordnungsgemäßen Betrieb der angebotenen Dienste sicherzustellen (zum Beispiel: Moderation der Discord-Server, Analyse von Ereignissen im Zusammenhang mit der Community). -2. ein optimales und personalisiertes Nutzererlebnis zu gewährleisten. -3. Discord-Server abzusichern, indem die von den Administratoren festgelegten Regeln angewendet werden. -4. die Dienste durch die Analyse der Nutzung zu erhalten und zu verbessern. - -Die Daten werden nicht zu kommerziellen oder werblichen Zwecken verwendet. - -## 3. Aufbewahrung der Daten - -Die erhobenen personenbezogenen Daten werden nur so lange aufbewahrt, wie es zur Verwirklichung der oben genannten Zwecke erforderlich ist. Nach Ablauf dieser Frist werden sie gelöscht oder anonymisiert. - -- **Textnachrichten**: vorübergehend zur Verarbeitung aufbewahrt, anschließend endgültig gelöscht. -- **Server-Konfigurationsdaten**: aufbewahrt, solange der Server die Dienste von **RaidProtect** nutzt. -- **Navigationsdaten**: in Übereinstimmung mit den geltenden gesetzlichen Bestimmungen aufbewahrt. - -## 4. Weitergabe der Daten - -Die erhobenen Daten werden **niemals an Dritte weitergegeben**, außer in folgenden Fällen: - -1. **Technische Partner**: Partner, die zur Erbringung der Dienste erforderlich sind (zum Beispiel Hosting- oder Cloud-Anbieter). -2. **Gesetzliche Verpflichtungen**: wenn die Offenlegung der Daten gesetzlich, durch eine Justiz- oder Aufsichtsbehörde vorgeschrieben ist. - -## 5. Datensicherheit - -**RaidProtect** ergreift alle technischen und organisatorischen Maßnahmen, die erforderlich sind, um personenbezogene Daten gegen unbefugten Zugriff, Verlust, Zerstörung oder Veränderung zu schützen. Zu den wichtigsten Maßnahmen gehören: - -- die Verschlüsselung sensibler Daten. -- eine strenge Zugriffskontrolle (Authentifizierung und Protokollierung). -- eine auf sicheren Servern gehostete Infrastruktur. - -## 6. Rechte der Nutzer - -Im Einklang mit der DSGVO haben die Nutzer die folgenden Rechte in Bezug auf ihre personenbezogenen Daten: - -- **Recht auf Auskunft**: eine Kopie der verarbeiteten personenbezogenen Daten zu erhalten. -- **Recht auf Berichtigung**: unrichtige oder unvollständige Daten zu korrigieren. -- **Recht auf Löschung**: unter bestimmten Voraussetzungen die Löschung der Daten zu verlangen. -- **Recht auf Einschränkung**: die Verarbeitung ihrer Daten einzuschränken. -- **Widerspruchsrecht**: die Verarbeitung ihrer Daten aus berechtigten Gründen abzulehnen. -- **Recht auf Datenübertragbarkeit**: die personenbezogenen Daten in einem strukturierten Format zu erhalten. - -Zur Ausübung dieser Rechte oder bei Fragen zur Datenverwaltung können sich die Nutzer an den Datenschutzbeauftragten (DSB) unter [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot) wenden. - -## 7. Änderung der Datenschutzerklärung - -Die vorliegende Datenschutzerklärung kann jederzeit aktualisiert werden, um Änderungen der Dienste oder der geltenden Vorschriften widerzuspiegeln. Jede Änderung wird auf der Website veröffentlicht und, falls erforderlich, über die Anwendung mitgeteilt. Durch die fortgesetzte Nutzung der Dienste nach einer Aktualisierung der Erklärung akzeptieren die Nutzer die vorgenommenen Änderungen. - -## 8. Kontakt - -Wenn Sie Fragen oder Bedenken zu unserer Datenschutzerklärung oder zur Art und Weise haben, wie wir Ihre personenbezogenen Daten schützen, kontaktieren Sie uns gerne unter [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot). - -</LegalLayout> diff --git a/i18n/de/docusaurus-plugin-content-pages/privacy.tsx b/i18n/de/docusaurus-plugin-content-pages/privacy.tsx new file mode 100644 index 0000000..94ebc4e --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-pages/privacy.tsx @@ -0,0 +1,198 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +export default function Privacy(): ReactNode { + return ( + <LegalLayout + title="Datenschutzerklärung" + lastUpdated="Letzte Aktualisierung: 1. Februar 2025" + description="Erfahren Sie, wie RaidProtect Ihre personenbezogenen Daten schützt und die Sicherheit Ihrer Privatsphäre bei der Nutzung unserer Dienste gewährleistet. Detaillierte Datenschutzerklärung."> + <section> + <p> + Die vorliegende Datenschutzerklärung beschreibt die Modalitäten der Erhebung, Nutzung und + des Schutzes personenbezogener Daten im Rahmen der Dienste, die von der Discord-Anwendung{' '} + <strong>RaidProtect</strong> und der zugehörigen Website angeboten werden. + </p> + <p> + Durch die Nutzung dieser Dienste akzeptieren Sie die in dieser Datenschutzerklärung + beschriebenen Praktiken. <strong>SAS French Community Agency</strong>,{' '} + <strong>RaidProtect</strong>, verpflichtet sich, Ihre Privatsphäre im Einklang mit der + geltenden Gesetzgebung zu respektieren und zu schützen, insbesondere mit der + Datenschutz-Grundverordnung (DSGVO) und dem{' '} + <strong> + französischen Datenschutzgesetz (<em>loi informatique et libertés</em>) + </strong> + . + </p> + </section> + <section> + <h2>1. Erhobene Daten</h2> + <p> + Um den Betrieb der angebotenen Dienste zu gewährleisten, erheben und verarbeiten die + Discord-Anwendung <strong>RaidProtect</strong> und die Website die folgenden + Datenkategorien: + </p> + <h3>1.1. Von der Anwendung erhobene Daten</h3> + <ul> + <li> + <strong>Konfiguration der Discord-Server</strong>: Informationen zu den Einstellungen + der Server, die <strong>RaidProtect</strong> verwenden (z. B. Rollen, Berechtigungen, + konfigurierte Kanäle). + </li> + <li> + <strong>Textnachrichten</strong>: Jede von einem Nutzer gesendete Nachricht kann im + Rahmen der Moderationsdienste vorübergehend erfasst werden. + </li> + <li> + <strong>Discord-Ereignisse</strong>: von Discord übermittelte Ereignisse wie das + Erscheinen oder Verlassen neuer Mitglieder, Rollenänderungen oder das Löschen von + Nachrichten. + </li> + </ul> + <h3>1.2. Von der Website erhobene Daten</h3> + <ul> + <li> + <strong>Identifikationsdaten</strong>: Informationen, die von Nutzern bei der + Registrierung oder bei der Nutzung der Online-Dienste bereitgestellt werden (z. B. + E-Mail-Adresse, Discord-Kennungen). + </li> + <li> + <strong>Navigationsdaten</strong>: Informationen zur Interaktion mit der Website wie + IP-Adresse, Browsertyp oder Cookies. + </li> + </ul> + </section> + <section> + <h2>2. Zwecke der Verarbeitung</h2> + <p>Die erhobenen Daten werden ausschließlich verwendet, um:</p> + <ol> + <li> + den ordnungsgemäßen Betrieb der angebotenen Dienste sicherzustellen (zum Beispiel: + Moderation der Discord-Server, Analyse von Ereignissen im Zusammenhang mit der + Community). + </li> + <li>ein optimales und personalisiertes Nutzererlebnis zu gewährleisten.</li> + <li> + Discord-Server abzusichern, indem die von den Administratoren festgelegten Regeln + angewendet werden. + </li> + <li>die Dienste durch die Analyse der Nutzung zu erhalten und zu verbessern.</li> + </ol> + <p>Die Daten werden nicht zu kommerziellen oder werblichen Zwecken verwendet.</p> + </section> + <section> + <h2>3. Aufbewahrung der Daten</h2> + <p> + Die erhobenen personenbezogenen Daten werden nur so lange aufbewahrt, wie es zur + Verwirklichung der oben genannten Zwecke erforderlich ist. Nach Ablauf dieser Frist + werden sie gelöscht oder anonymisiert. + </p> + <ul> + <li> + <strong>Textnachrichten</strong>: vorübergehend zur Verarbeitung aufbewahrt, + anschließend endgültig gelöscht. + </li> + <li> + <strong>Server-Konfigurationsdaten</strong>: aufbewahrt, solange der Server die Dienste + von <strong>RaidProtect</strong> nutzt. + </li> + <li> + <strong>Navigationsdaten</strong>: in Übereinstimmung mit den geltenden gesetzlichen + Bestimmungen aufbewahrt. + </li> + </ul> + </section> + <section> + <h2>4. Weitergabe der Daten</h2> + <p> + Die erhobenen Daten werden <strong>niemals an Dritte weitergegeben</strong>, außer in + folgenden Fällen: + </p> + <ol> + <li> + <strong>Technische Partner</strong>: Partner, die zur Erbringung der Dienste + erforderlich sind (zum Beispiel Hosting- oder Cloud-Anbieter). + </li> + <li> + <strong>Gesetzliche Verpflichtungen</strong>: wenn die Offenlegung der Daten + gesetzlich, durch eine Justiz- oder Aufsichtsbehörde vorgeschrieben ist. + </li> + </ol> + </section> + <section> + <h2>5. Datensicherheit</h2> + <p> + <strong>RaidProtect</strong> ergreift alle technischen und organisatorischen Maßnahmen, + die erforderlich sind, um personenbezogene Daten gegen unbefugten Zugriff, Verlust, + Zerstörung oder Veränderung zu schützen. Zu den wichtigsten Maßnahmen gehören: + </p> + <ul> + <li>die Verschlüsselung sensibler Daten.</li> + <li>eine strenge Zugriffskontrolle (Authentifizierung und Protokollierung).</li> + <li>eine auf sicheren Servern gehostete Infrastruktur.</li> + </ul> + </section> + <section> + <h2>6. Rechte der Nutzer</h2> + <p> + Im Einklang mit der DSGVO haben die Nutzer die folgenden Rechte in Bezug auf ihre + personenbezogenen Daten: + </p> + <ul> + <li> + <strong>Recht auf Auskunft</strong>: eine Kopie der verarbeiteten personenbezogenen + Daten zu erhalten. + </li> + <li> + <strong>Recht auf Berichtigung</strong>: unrichtige oder unvollständige Daten zu + korrigieren. + </li> + <li> + <strong>Recht auf Löschung</strong>: unter bestimmten Voraussetzungen die Löschung der + Daten zu verlangen. + </li> + <li> + <strong>Recht auf Einschränkung</strong>: die Verarbeitung ihrer Daten einzuschränken. + </li> + <li> + <strong>Widerspruchsrecht</strong>: die Verarbeitung ihrer Daten aus berechtigten + Gründen abzulehnen. + </li> + <li> + <strong>Recht auf Datenübertragbarkeit</strong>: die personenbezogenen Daten in einem + strukturierten Format zu erhalten. + </li> + </ul> + <p> + Zur Ausübung dieser Rechte oder bei Fragen zur Datenverwaltung können sich die Nutzer an + den Datenschutzbeauftragten (DSB) unter{' '} + <a href="mailto:dpo@raidprotect.bot"> + <strong>dpo@raidprotect.bot</strong> + </a>{' '} + wenden. + </p> + </section> + <section> + <h2>7. Änderung der Datenschutzerklärung</h2> + <p> + Die vorliegende Datenschutzerklärung kann jederzeit aktualisiert werden, um Änderungen + der Dienste oder der geltenden Vorschriften widerzuspiegeln. Jede Änderung wird auf der + Website veröffentlicht und, falls erforderlich, über die Anwendung mitgeteilt. Durch die + fortgesetzte Nutzung der Dienste nach einer Aktualisierung der Erklärung akzeptieren die + Nutzer die vorgenommenen Änderungen. + </p> + </section> + <section> + <h2>8. Kontakt</h2> + <p> + Wenn Sie Fragen oder Bedenken zu unserer Datenschutzerklärung oder zur Art und Weise + haben, wie wir Ihre personenbezogenen Daten schützen, kontaktieren Sie uns gerne unter{' '} + <a href="mailto:dpo@raidprotect.bot"> + <strong>dpo@raidprotect.bot</strong> + </a> + . + </p> + </section> + </LegalLayout> + ); +} diff --git a/i18n/de/docusaurus-plugin-content-pages/terms.mdx b/i18n/de/docusaurus-plugin-content-pages/terms.mdx deleted file mode 100644 index dccfbcb..0000000 --- a/i18n/de/docusaurus-plugin-content-pages/terms.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Nutzungsbedingungen | RaidProtect -description: Lesen Sie unsere Nutzungsbedingungen, um mehr über unsere Rechte am geistigen Eigentum, Hyperlinks, den Umgang mit personenbezogenen Daten sowie unsere Haftung für die Website und den Bot von RaidProtect zu erfahren. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Nutzungsbedingungen" - lastUpdated="Letzte Aktualisierung: 1. Februar 2025" - description="Lesen Sie unsere Nutzungsbedingungen, um mehr über unsere Rechte am geistigen Eigentum, Hyperlinks, den Umgang mit personenbezogenen Daten sowie unsere Haftung für die Website und den Bot von RaidProtect zu erfahren."> - -Indem Sie RaidProtect zu Ihrem Discord-Server hinzufügen, bestätigen Sie, dass Sie die Nutzungsbedingungen gelesen und akzeptiert haben. Wenn Sie eine dieser Bedingungen nicht akzeptieren, müssen Sie die Nutzung unserer Dienste einstellen. - -## 1. Geistiges Eigentum - -Diese Website, ihre allgemeine Struktur, die Marke RaidProtect sowie die Texte, Bilder, Animationen, Logos und alle weiteren sie ausmachenden Elemente sind ausschließliches Eigentum der SAS French Community Agency oder ihrer Partner und durch die französischen und internationalen Gesetze zum Schutz des geistigen Eigentums geschützt. Jede Vervielfältigung, Darstellung, Nutzung oder Anpassung in welcher Form auch immer, ganz oder teilweise, dieser Elemente, einschließlich der Software, ohne die vorherige schriftliche Genehmigung der SAS French Community Agency ist strengstens untersagt und stellt eine Urheberrechtsverletzung dar. - -Dieselben Bestimmungen gelten für die Funktionen und den Quellcode der Anwendung, die ebenfalls durch Rechte am geistigen Eigentum geschützt sind. Jeder Versuch der Vervielfältigung, Veränderung oder unbefugten Nutzung der Funktionen der Anwendung ist untersagt und kann rechtlich verfolgt werden. - -## 2. Hyperlinks - -Jede Verlinkung zur Website bedarf der vorherigen schriftlichen Genehmigung der **SAS French Community Agency**. In jedem Fall behält sich die **SAS French Community Agency** das Recht vor, diese Genehmigung jederzeit zu widerrufen, wenn ihr der zur Website hergestellte Link geeignet erscheint, die Interessen der Website zu beeinträchtigen. - -Es wird darüber hinaus darauf hingewiesen, dass Websites, die einen Hyperlink zur vorliegenden Website aufweisen (Hyperlinks, die auf die Website verweisen oder von dieser ausgehen), nicht der Kontrolle der **SAS French Community Agency**, von **RaidProtect** und ihrer verbundenen Gesellschaften unterliegen, die jede Verantwortung für deren Inhalt ablehnen. - -## 3. Nutzung des Dienstes - -Unsere Dienste, einschließlich der Anwendung, können kostenlos für persönliche oder gewerbliche Zwecke genutzt werden. Wir behalten uns das Recht vor, die Nutzung unserer Dienste zu untersagen, sofern wir die Nutzung als unangemessen einstufen oder wenn sie anderen Nutzern schaden könnte. - -## 4. Haftung - -### 4.1. Website - -Die **SAS French Community Agency**, **RaidProtect** und ihre verbundenen Gesellschaften können nicht für direkte oder indirekte Schäden haftbar gemacht werden, die sich aus der Nutzung der Website oder der darin enthaltenen Informationen ergeben. Die **SAS French Community Agency** garantiert nicht die Richtigkeit oder Vollständigkeit der auf der Website dargestellten Informationen und behält sich das Recht vor, diese jederzeit und ohne Vorankündigung zu ändern oder zu löschen. - -### 4.2. Anwendung - -Die Anwendung **RaidProtect** wird ohne ausdrückliche oder stillschweigende Gewährleistung jeglicher Art bereitgestellt. Die **SAS French Community Agency** kann nicht für die Folgen einer fehlerhaften oder missbräuchlichen Nutzung der Anwendung verantwortlich gemacht werden, ebenso wenig für etwaige Schäden, die aus einer vorübergehenden oder dauerhaften Funktionsstörung resultieren. - -Die Administratoren von Discord-Servern, die **RaidProtect** verwenden, sind allein verantwortlich für die vorgenommenen Konfigurationen und die Entscheidungen, die infolge der automatisierten Aktionen der Anwendung getroffen werden (zum Beispiel Sperren oder Löschen von Nachrichten). Im Falle eines Verstoßes gegen die Nutzungsbedingungen von Discord oder das geltende Recht tragen die Administratoren des betroffenen Servers die volle Verantwortung. - -## 5. Änderung der Nutzungsbedingungen - -Die vorliegenden Allgemeinen Nutzungsbedingungen können jederzeit geändert werden, um Änderungen der Dienste oder der geltenden Vorschriften widerzuspiegeln. Jede Änderung wird auf der Website veröffentlicht und, falls erforderlich, über die Anwendung mitgeteilt. Durch die fortgesetzte Nutzung der Dienste nach einer Aktualisierung der Nutzungsbedingungen akzeptieren die Nutzer die vorgenommenen Änderungen. - -## 6. Anwendbares Recht und Gerichtsstand - -Die vorliegenden Nutzungsbedingungen unterliegen dem französischen Recht. Im Streitfall und nach einem Versuch der gütlichen Einigung sind, sofern gesetzliche Vorschriften nicht entgegenstehen, ausschließlich die zuständigen Gerichte von Paris zuständig. - -</LegalLayout> diff --git a/i18n/de/docusaurus-plugin-content-pages/terms.tsx b/i18n/de/docusaurus-plugin-content-pages/terms.tsx new file mode 100644 index 0000000..d2c9582 --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-pages/terms.tsx @@ -0,0 +1,112 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +export default function Terms(): ReactNode { + return ( + <LegalLayout + title="Nutzungsbedingungen" + lastUpdated="Letzte Aktualisierung: 1. Februar 2025" + description="Lesen Sie unsere Nutzungsbedingungen, um mehr über unsere Rechte am geistigen Eigentum, Hyperlinks, den Umgang mit personenbezogenen Daten sowie unsere Haftung für die Website und den Bot von RaidProtect zu erfahren."> + <section> + <p> + Indem Sie RaidProtect zu Ihrem Discord-Server hinzufügen, bestätigen Sie, dass Sie die + Nutzungsbedingungen gelesen und akzeptiert haben. Wenn Sie eine dieser Bedingungen nicht + akzeptieren, müssen Sie die Nutzung unserer Dienste einstellen. + </p> + </section> + <section> + <h2>1. Geistiges Eigentum</h2> + <p> + Diese Website, ihre allgemeine Struktur, die Marke RaidProtect sowie die Texte, Bilder, + Animationen, Logos und alle weiteren sie ausmachenden Elemente sind ausschließliches + Eigentum der SAS French Community Agency oder ihrer Partner und durch die französischen + und internationalen Gesetze zum Schutz des geistigen Eigentums geschützt. Jede + Vervielfältigung, Darstellung, Nutzung oder Anpassung in welcher Form auch immer, ganz + oder teilweise, dieser Elemente, einschließlich der Software, ohne die vorherige + schriftliche Genehmigung der SAS French Community Agency ist strengstens untersagt und + stellt eine Urheberrechtsverletzung dar. + </p> + <p> + Dieselben Bestimmungen gelten für die Funktionen und den Quellcode der Anwendung, die + ebenfalls durch Rechte am geistigen Eigentum geschützt sind. Jeder Versuch der + Vervielfältigung, Veränderung oder unbefugten Nutzung der Funktionen der Anwendung ist + untersagt und kann rechtlich verfolgt werden. + </p> + </section> + <section> + <h2>2. Hyperlinks</h2> + <p> + Jede Verlinkung zur Website bedarf der vorherigen schriftlichen Genehmigung der{' '} + <strong>SAS French Community Agency</strong>. In jedem Fall behält sich die{' '} + <strong>SAS French Community Agency</strong> das Recht vor, diese Genehmigung jederzeit + zu widerrufen, wenn ihr der zur Website hergestellte Link geeignet erscheint, die + Interessen der Website zu beeinträchtigen. + </p> + <p> + Es wird darüber hinaus darauf hingewiesen, dass Websites, die einen Hyperlink zur + vorliegenden Website aufweisen (Hyperlinks, die auf die Website verweisen oder von dieser + ausgehen), nicht der Kontrolle der <strong>SAS French Community Agency</strong>, von{' '} + <strong>RaidProtect</strong> und ihrer verbundenen Gesellschaften unterliegen, die jede + Verantwortung für deren Inhalt ablehnen. + </p> + </section> + <section> + <h2>3. Nutzung des Dienstes</h2> + <p> + Unsere Dienste, einschließlich der Anwendung, können kostenlos für persönliche oder + gewerbliche Zwecke genutzt werden. Wir behalten uns das Recht vor, die Nutzung unserer + Dienste zu untersagen, sofern wir die Nutzung als unangemessen einstufen oder wenn sie + anderen Nutzern schaden könnte. + </p> + </section> + <section> + <h2>4. Haftung</h2> + <h3>4.1. Website</h3> + <p> + Die <strong>SAS French Community Agency</strong>, <strong>RaidProtect</strong> und ihre + verbundenen Gesellschaften können nicht für direkte oder indirekte Schäden haftbar + gemacht werden, die sich aus der Nutzung der Website oder der darin enthaltenen + Informationen ergeben. Die <strong>SAS French Community Agency</strong> garantiert nicht + die Richtigkeit oder Vollständigkeit der auf der Website dargestellten Informationen und + behält sich das Recht vor, diese jederzeit und ohne Vorankündigung zu ändern oder zu + löschen. + </p> + <h3>4.2. Anwendung</h3> + <p> + Die Anwendung <strong>RaidProtect</strong> wird ohne ausdrückliche oder stillschweigende + Gewährleistung jeglicher Art bereitgestellt. Die{' '} + <strong>SAS French Community Agency</strong> kann nicht für die Folgen einer fehlerhaften + oder missbräuchlichen Nutzung der Anwendung verantwortlich gemacht werden, ebenso wenig + für etwaige Schäden, die aus einer vorübergehenden oder dauerhaften Funktionsstörung + resultieren. + </p> + <p> + Die Administratoren von Discord-Servern, die <strong>RaidProtect</strong> verwenden, sind + allein verantwortlich für die vorgenommenen Konfigurationen und die Entscheidungen, die + infolge der automatisierten Aktionen der Anwendung getroffen werden (zum Beispiel + Sperren oder Löschen von Nachrichten). Im Falle eines Verstoßes gegen die + Nutzungsbedingungen von Discord oder das geltende Recht tragen die Administratoren des + betroffenen Servers die volle Verantwortung. + </p> + </section> + <section> + <h2>5. Änderung der Nutzungsbedingungen</h2> + <p> + Die vorliegenden Allgemeinen Nutzungsbedingungen können jederzeit geändert werden, um + Änderungen der Dienste oder der geltenden Vorschriften widerzuspiegeln. Jede Änderung + wird auf der Website veröffentlicht und, falls erforderlich, über die Anwendung + mitgeteilt. Durch die fortgesetzte Nutzung der Dienste nach einer Aktualisierung der + Nutzungsbedingungen akzeptieren die Nutzer die vorgenommenen Änderungen. + </p> + </section> + <section> + <h2>6. Anwendbares Recht und Gerichtsstand</h2> + <p> + Die vorliegenden Nutzungsbedingungen unterliegen dem französischen Recht. Im Streitfall + und nach einem Versuch der gütlichen Einigung sind, sofern gesetzliche Vorschriften nicht + entgegenstehen, ausschließlich die zuständigen Gerichte von Paris zuständig. + </p> + </section> + </LegalLayout> + ); +} diff --git a/i18n/en/docusaurus-plugin-content-pages/cookies.mdx b/i18n/en/docusaurus-plugin-content-pages/cookies.mdx deleted file mode 100644 index 0fcdda5..0000000 --- a/i18n/en/docusaurus-plugin-content-pages/cookies.mdx +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Cookie Policy | RaidProtect -description: Learn how RaidProtect protects your privacy by not using cookies for secure and private browsing. See our policy. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Cookie Policy" - lastUpdated="Last update: February 1, 2025" - description="Learn how RaidProtect protects your privacy by not using cookies for secure and private browsing. See our policy."> - -At RaidProtect, we are committed to protecting the privacy and data of our users. As part of this commitment, we would like to inform you of our policy regarding the use of cookies on our website. - -## 1. Use of cookies - -We want to be transparent about the technologies we use. To this end, we would like to inform you that our website **does not use cookies**. Cookies are small text files that can be used by websites to make the user experience more efficient. However, in order to protect the privacy of our users as much as possible, we have chosen not to use cookies on our platform. - -## 2. What does this mean for you? - -The absence of cookies means that you can browse our website without any information about your visit being recorded or analyzed. This is to ensure a private and secure browsing experience for all our users. - -## 3. How do we protect your privacy? - -In addition to our no cookie policy, we take other measures to protect your privacy and personal data. We comply strictly with applicable data protection laws and regulations, and implement state-of-the-art information security practices to prevent unauthorized access, modification, disclosure or destruction of your personal information. - -## 4. Changes to the cookie policy - -We reserve the right to modify this cookie policy at any time. Any changes will be effective immediately upon posting on our website. We encourage you to visit this page regularly to stay informed about our cookie policy. - -## 5. Contact - -If you have any questions or concerns about our cookie policy or how we protect your personal data, please contact us at [dpo@raidprotect.bot](mailto:dpo@raidprotect.bot). - -</LegalLayout> diff --git a/i18n/en/docusaurus-plugin-content-pages/cookies.tsx b/i18n/en/docusaurus-plugin-content-pages/cookies.tsx new file mode 100644 index 0000000..e74485f --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-pages/cookies.tsx @@ -0,0 +1,62 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +export default function Cookies(): ReactNode { + return ( + <LegalLayout + title="Cookie Policy" + lastUpdated="Last update: February 1, 2025" + description="Learn how RaidProtect protects your privacy by not using cookies for secure and private browsing. See our policy."> + <section> + <p> + At RaidProtect, we are committed to protecting the privacy and data of our users. As + part of this commitment, we would like to inform you of our policy regarding the use of + cookies on our website. + </p> + </section> + <section> + <h2>1. Use of cookies</h2> + <p> + We want to be transparent about the technologies we use. To this end, we would like to + inform you that our website <strong>does not use cookies</strong>. Cookies are small + text files that can be used by websites to make the user experience more efficient. + However, in order to protect the privacy of our users as much as possible, we have + chosen not to use cookies on our platform. + </p> + </section> + <section> + <h2>2. What does this mean for you?</h2> + <p> + The absence of cookies means that you can browse our website without any information + about your visit being recorded or analyzed. This is to ensure a private and secure + browsing experience for all our users. + </p> + </section> + <section> + <h2>3. How do we protect your privacy?</h2> + <p> + In addition to our no cookie policy, we take other measures to protect your privacy and + personal data. We comply strictly with applicable data protection laws and regulations, + and implement state-of-the-art information security practices to prevent unauthorized + access, modification, disclosure or destruction of your personal information. + </p> + </section> + <section> + <h2>4. Changes to the cookie policy</h2> + <p> + We reserve the right to modify this cookie policy at any time. Any changes will be + effective immediately upon posting on our website. We encourage you to visit this page + regularly to stay informed about our cookie policy. + </p> + </section> + <section> + <h2>5. Contact</h2> + <p> + If you have any questions or concerns about our cookie policy or how we protect your + personal data, please contact us at{' '} + <a href="mailto:dpo@raidprotect.bot">dpo@raidprotect.bot</a>. + </p> + </section> + </LegalLayout> + ); +} diff --git a/i18n/en/docusaurus-plugin-content-pages/legal.mdx b/i18n/en/docusaurus-plugin-content-pages/legal.mdx deleted file mode 100644 index 41f2a24..0000000 --- a/i18n/en/docusaurus-plugin-content-pages/legal.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Legal notice | RaidProtect -description: Find the legal notice of the bot Discord RaidProtect (RP), editor of the site raidprotect.bot. General information and legal terms of use. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Legal notice" - lastUpdated="Last update: February 1, 2025" - description="Find the legal notice of the bot Discord RaidProtect (RP), editor of the site raidprotect.bot. General information and legal terms of use."> - -The RaidProtect website accessible at "raidprotect.bot" and "docs.raidprotect.bot" (hereinafter referred to as the "Site") and the RaidProtect application accessible from the Discord "466578580449525760" (hereinafter referred to as the "Application") are published by SAS French Community Agency. The information provided on the Site is presented for general information purposes only and does not claim to be exhaustive. Despite all the care and rigor taken in creating the Site and updating it regularly, errors may have crept into the information presented. Users of the Site should therefore make all necessary checks and are solely responsible for their use of the information provided. - -Publishing manager: Arthur Battais - ---- - -## Company - -**SAS French Community Agency** -**Acronym: FCA** -**With a share capital of €10,000** -[16 Esplanade du Champ de Mars, 35000 Rennes](https://www.google.com/maps/place/16+Esp.+du+Champ+de+Mars,+35000+Rennes/@48.1044838,-1.675702,17z/data=!3m1!4b1!4m6!3m5!1s0x480edfca43c9b53b:0xdea9cc38f95f9839!8m2!3d48.1044838!4d-1.675702!16s%2Fg%2F11csm9r096?sa=X&ved=2ahUKEwiZ0ICZyYSEAxWpUqQEHTq1BdcQ8gF6BAgdEAA&entry=tts) - -+33 (0)9 72 14 95 51 -[hello@fca.gg](mailto:hello@fca.gg) - -SIRET: [983 856 253 00023](https://annuaire-entreprises.data.gouv.fr/etablissement/98385625300023) -VAT: [FR03983856253](https://ec.europa.eu/taxation_customs/vies/#/vat-validation) - -Trademark: **RaidProtect** -[contact@raidprotect.bot](mailto:contact@raidprotect.bot) - ---- - -## Hosting - -The Site is hosted by Hetzner (Hetzner Online GmbH), headquartered at Industriestr. 25 - 91710 Gunzenhausen - Germany, e-mail: info@hetzner.com and phone: +49 (0)9831 505-0. - -</LegalLayout> diff --git a/i18n/en/docusaurus-plugin-content-pages/legal.tsx b/i18n/en/docusaurus-plugin-content-pages/legal.tsx new file mode 100644 index 0000000..8c14b95 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-pages/legal.tsx @@ -0,0 +1,79 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +const GOOGLE_MAPS_URL = + 'https://www.google.com/maps/place/16+Esp.+du+Champ+de+Mars,+35000+Rennes/@48.1044838,-1.675702,17z/data=!3m1!4b1!4m6!3m5!1s0x480edfca43c9b53b:0xdea9cc38f95f9839!8m2!3d48.1044838!4d-1.675702!16s%2Fg%2F11csm9r096?sa=X&ved=2ahUKEwiZ0ICZyYSEAxWpUqQEHTq1BdcQ8gF6BAgdEAA&entry=tts'; + +export default function Legal(): ReactNode { + return ( + <LegalLayout + title="Legal notice" + lastUpdated="Last update: February 1, 2025" + description="Find the legal notice of the bot Discord RaidProtect (RP), editor of the site raidprotect.bot. General information and legal terms of use."> + <section> + <p> + The RaidProtect website accessible at "raidprotect.bot" and "docs.raidprotect.bot" + (hereinafter referred to as the "Site") and the RaidProtect application accessible from + the Discord "466578580449525760" (hereinafter referred to as the "Application") are + published by SAS French Community Agency. The information provided on the Site is + presented for general information purposes only and does not claim to be exhaustive. + Despite all the care and rigor taken in creating the Site and updating it regularly, + errors may have crept into the information presented. Users of the Site should therefore + make all necessary checks and are solely responsible for their use of the information + provided. + </p> + <p>Publishing manager: Arthur Battais</p> + </section> + <hr /> + <section> + <h2>Company</h2> + <p> + <strong>SAS French Community Agency</strong> + <br /> + <strong>Acronym: FCA</strong> + <br /> + <strong>With a share capital of €10,000</strong> + <br /> + <a href={GOOGLE_MAPS_URL} target="_blank" rel="noopener noreferrer"> + 16 Esplanade du Champ de Mars, 35000 Rennes + </a> + </p> + <p> + +33 (0)9 72 14 95 51 + <br /> + <a href="mailto:hello@fca.gg">hello@fca.gg</a> + </p> + <p> + SIRET:{' '} + <a + href="https://annuaire-entreprises.data.gouv.fr/etablissement/98385625300023" + target="_blank" + rel="noopener noreferrer"> + 983 856 253 00023 + </a> + <br /> + VAT:{' '} + <a + href="https://ec.europa.eu/taxation_customs/vies/#/vat-validation" + target="_blank" + rel="noopener noreferrer"> + FR03983856253 + </a> + </p> + <p> + Trademark: <strong>RaidProtect</strong> + <br /> + <a href="mailto:contact@raidprotect.bot">contact@raidprotect.bot</a> + </p> + </section> + <hr /> + <section> + <h2>Hosting</h2> + <p> + The Site is hosted by Hetzner (Hetzner Online GmbH), headquartered at Industriestr. 25 - + 91710 Gunzenhausen - Germany, e-mail: info@hetzner.com and phone: +49 (0)9831 505-0. + </p> + </section> + </LegalLayout> + ); +} diff --git a/i18n/en/docusaurus-plugin-content-pages/privacy.mdx b/i18n/en/docusaurus-plugin-content-pages/privacy.mdx deleted file mode 100644 index 485b45d..0000000 --- a/i18n/en/docusaurus-plugin-content-pages/privacy.mdx +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Privacy Policy | RaidProtect -description: Learn how RaidProtect protects your personal data and ensures the security of your privacy by using our services. Detailed privacy policy. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Privacy Policy" - lastUpdated="Last update: February 1, 2025" - description="Learn how RaidProtect protects your personal data and ensures the security of your privacy by using our services. Detailed privacy policy."> - -The present Privacy Policy describes the methods of collection, use and protection of personal data within the framework of the services offered by the Discord **RaidProtect** application and the associated website. - -By using these services, you accept the practices described in this Privacy Policy. **SAS French Community Agency**, **RaidProtect**, is committed to respecting and protecting your privacy in accordance with applicable law, including the General Data Protection Regulation (GDPR) and the French Data Protection Act (*loi informatique et libertés*). - -## 1. Collected data - -In order to ensure the operation of the services offered, the Discord **RaidProtect** application and website collect and process the following categories of data: - -### 1.1. Data collected by the Application - -- **Discord server configuration**: information on the settings of servers using **RaidProtect** (e.g. roles, permissions, configured channels). -- **Text messages**: any message sent by a user can be collected temporarily, as part of moderation services. -- **Discord events**: events transmitted by Discord, such as the arrival or departure of new members, role modifications or message deletions. - -### 1.2. Data collected by the website - -- **Identification data**: information provided by users when registering or using online services (e.g. e-mail address, Discord identifiers). -- **Browsing data**: information on interaction with the website, such as IP address, browser type or cookies. - -## 2. Purposes of processing - -The data collected is used exclusively for: - -1. Ensuring the smooth operation of our services (e.g. moderation of Discord servers, analysis of community events). -2. Guaranteeing an optimal, personalized user experience. -3. Securing Discord servers by applying administrator-defined rules. -4. Maintaining and improving services by analyzing usage. - -Data is not used for commercial or advertising purposes. - -## 3. Data retention - -The personal data collected is kept only for as long as is necessary to achieve the purposes defined above. Once this period has elapsed, it is deleted or anonymized. - -- **Text messages**: retained temporarily for processing, then permanently deleted. -- **Server configuration data**: retained for as long as the server uses **RaidProtect** services. -- **Navigation data**: stored in accordance with applicable legal provisions. - -## 4. Data sharing - -The data collected is **never shared with third parties**, except in the following cases: - -1. **Technical partners**: partners required to provide services (e.g. hosting or cloud service providers). -2. **Legal obligations**: if the disclosure of data is required by law or by a judicial or regulatory authority. - -## 5. Data security - -**RaidProtect** implements all technical and organizational measures necessary to protect personal data against unauthorized access, loss, destruction or alteration. The main measures include: - -- Encryption of sensitive data. -- Strict control of data access (authentication and logging). -- An infrastructure hosted on secure servers. - -## 6. User rights - -In accordance with the GDPR, users have the following rights over their personal data: - -- **Right of access**: obtain a copy of processed personal data. -- **Right of rectification**: correct inaccurate or incomplete data. -- **Right to erasure**: request the deletion of data under certain conditions. -- **Right to restriction**: limit the processing of their data. -- **Right to object**: to refuse the processing of their data for legitimate reasons. -- **Right to portability**: receive personal data in a structured format. - -To exercise these rights or ask questions about data management, users can contact the Data Protection Officer (DPO) at [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot). - -## 7. Modification of the Privacy Policy - -This Privacy Policy may be updated at any time to reflect changes in the Services or in applicable regulations. Any changes will be published on the website and, if necessary, communicated via the Application. By continuing to use the services after the policy has been updated, users accept the changes made. - -## 8. Contact - -If you have any questions or concerns about our privacy policy or how we protect your personal data, please feel free to contact us at [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot). - -</LegalLayout> diff --git a/i18n/en/docusaurus-plugin-content-pages/privacy.tsx b/i18n/en/docusaurus-plugin-content-pages/privacy.tsx new file mode 100644 index 0000000..1b5dd7a --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-pages/privacy.tsx @@ -0,0 +1,181 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +export default function Privacy(): ReactNode { + return ( + <LegalLayout + title="Privacy Policy" + lastUpdated="Last update: February 1, 2025" + description="Learn how RaidProtect protects your personal data and ensures the security of your privacy by using our services. Detailed privacy policy."> + <section> + <p> + The present Privacy Policy describes the methods of collection, use and protection of + personal data within the framework of the services offered by the Discord{' '} + <strong>RaidProtect</strong> application and the associated website. + </p> + <p> + By using these services, you accept the practices described in this Privacy Policy.{' '} + <strong>SAS French Community Agency</strong>, <strong>RaidProtect</strong>, is committed + to respecting and protecting your privacy in accordance with applicable law, including + the General Data Protection Regulation (GDPR) and the French Data Protection Act ( + <em>loi informatique et libertés</em>). + </p> + </section> + <section> + <h2>1. Collected data</h2> + <p> + In order to ensure the operation of the services offered, the Discord{' '} + <strong>RaidProtect</strong> application and website collect and process the following + categories of data: + </p> + <h3>1.1. Data collected by the Application</h3> + <ul> + <li> + <strong>Discord server configuration</strong>: information on the settings of servers + using <strong>RaidProtect</strong> (e.g. roles, permissions, configured channels). + </li> + <li> + <strong>Text messages</strong>: any message sent by a user can be collected + temporarily, as part of moderation services. + </li> + <li> + <strong>Discord events</strong>: events transmitted by Discord, such as the arrival or + departure of new members, role modifications or message deletions. + </li> + </ul> + <h3>1.2. Data collected by the website</h3> + <ul> + <li> + <strong>Identification data</strong>: information provided by users when registering or + using online services (e.g. e-mail address, Discord identifiers). + </li> + <li> + <strong>Browsing data</strong>: information on interaction with the website, such as IP + address, browser type or cookies. + </li> + </ul> + </section> + <section> + <h2>2. Purposes of processing</h2> + <p>The data collected is used exclusively for:</p> + <ol> + <li> + Ensuring the smooth operation of our services (e.g. moderation of Discord servers, + analysis of community events). + </li> + <li>Guaranteeing an optimal, personalized user experience.</li> + <li>Securing Discord servers by applying administrator-defined rules.</li> + <li>Maintaining and improving services by analyzing usage.</li> + </ol> + <p>Data is not used for commercial or advertising purposes.</p> + </section> + <section> + <h2>3. Data retention</h2> + <p> + The personal data collected is kept only for as long as is necessary to achieve the + purposes defined above. Once this period has elapsed, it is deleted or anonymized. + </p> + <ul> + <li> + <strong>Text messages</strong>: retained temporarily for processing, then permanently + deleted. + </li> + <li> + <strong>Server configuration data</strong>: retained for as long as the server uses{' '} + <strong>RaidProtect</strong> services. + </li> + <li> + <strong>Navigation data</strong>: stored in accordance with applicable legal + provisions. + </li> + </ul> + </section> + <section> + <h2>4. Data sharing</h2> + <p> + The data collected is <strong>never shared with third parties</strong>, except in the + following cases: + </p> + <ol> + <li> + <strong>Technical partners</strong>: partners required to provide services (e.g. + hosting or cloud service providers). + </li> + <li> + <strong>Legal obligations</strong>: if the disclosure of data is required by law or by + a judicial or regulatory authority. + </li> + </ol> + </section> + <section> + <h2>5. Data security</h2> + <p> + <strong>RaidProtect</strong> implements all technical and organizational measures + necessary to protect personal data against unauthorized access, loss, destruction or + alteration. The main measures include: + </p> + <ul> + <li>Encryption of sensitive data.</li> + <li>Strict control of data access (authentication and logging).</li> + <li>An infrastructure hosted on secure servers.</li> + </ul> + </section> + <section> + <h2>6. User rights</h2> + <p> + In accordance with the GDPR, users have the following rights over their personal data: + </p> + <ul> + <li> + <strong>Right of access</strong>: obtain a copy of processed personal data. + </li> + <li> + <strong>Right of rectification</strong>: correct inaccurate or incomplete data. + </li> + <li> + <strong>Right to erasure</strong>: request the deletion of data under certain + conditions. + </li> + <li> + <strong>Right to restriction</strong>: limit the processing of their data. + </li> + <li> + <strong>Right to object</strong>: to refuse the processing of their data for legitimate + reasons. + </li> + <li> + <strong>Right to portability</strong>: receive personal data in a structured format. + </li> + </ul> + <p> + To exercise these rights or ask questions about data management, users can contact the + Data Protection Officer (DPO) at{' '} + <a href="mailto:dpo@raidprotect.bot"> + <strong>dpo@raidprotect.bot</strong> + </a> + . + </p> + </section> + <section> + <h2>7. Modification of the Privacy Policy</h2> + <p> + This Privacy Policy may be updated at any time to reflect changes in the Services or in + applicable regulations. Any changes will be published on the website and, if necessary, + communicated via the Application. By continuing to use the services after the policy has + been updated, users accept the changes made. + </p> + </section> + <section> + <h2>8. Contact</h2> + <p> + If you have any questions or concerns about our privacy policy or how we protect your + personal data, please feel free to contact us at{' '} + <a href="mailto:dpo@raidprotect.bot"> + <strong>dpo@raidprotect.bot</strong> + </a> + . + </p> + </section> + </LegalLayout> + ); +} diff --git a/i18n/en/docusaurus-plugin-content-pages/terms.mdx b/i18n/en/docusaurus-plugin-content-pages/terms.mdx deleted file mode 100644 index 63516db..0000000 --- a/i18n/en/docusaurus-plugin-content-pages/terms.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Terms of Service | RaidProtect -description: See our terms of use to understand our intellectual property rights, hypertext links, personal data management and our responsibility for the RaidProtect site and bot. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Terms of Service" - lastUpdated="Last update: February 1, 2025" - description="See our terms of use to understand our intellectual property rights, hypertext links, personal data management and our responsibility for the RaidProtect site and bot."> - -By adding RaidProtect to your Discord server, you acknowledge that you have read and agree to the Terms of Service. If you do not agree to any of these terms, you must stop using our services. - -## 1. Intellectual property - -This website, its general structure, the RaidProtect trademark, as well as the texts, images, animations, logos and any other element composing it, are the exclusive property of SAS French Community Agency or its partners and are protected by French and international laws relating to intellectual property. Any reproduction, representation, use or adaptation, in any form whatsoever, of all or part of these elements, including software, without the prior written authorization of SAS French Community Agency, is strictly prohibited and would constitute an infringement. - -The same provisions apply to the functionalities and source code of the Application, which are also protected by intellectual property rights. Any attempt to reproduce, modify or make unauthorized use of the Application's functionalities is prohibited and liable to legal action. - -## 2. Hyperlinks - -Any link to the Site must be authorized in writing in advance by **SAS French Community Agency**. In any event, **SAS French Community Agency** reserves the right to terminate this authorization at any time if it considers that the link established with the Site is likely to harm the interests of the latter. - -It is furthermore specified that sites presenting a hypertext link with the present Site (hypertext links targeting the Site or established from the Site) are not under the control of **SAS French Community Agency**, **RaidProtect** and its affiliates, who decline all responsibility for their content. - -## 3. Using the service - -Our services, including the Application, are free to use for personal or commercial purposes. We reserve the right to prohibit the use of our services in the event of use that we deem inappropriate or that may harm other Users. - -## 4. Liability - -### 4.1. Website - -**SAS French Community Agency**, **RaidProtect** and its affiliates shall not be liable for any direct or indirect damages resulting from the use of the Website or the information contained therein. **SAS French Community Agency** does not guarantee the accuracy or completeness of the information presented on the Site and reserves the right to modify or delete it at any time, without notice. - -### 4.2. Application - -The **RaidProtect** Application is provided as is, without warranty of any kind, either express or implied. **SAS French Community Agency** cannot be held responsible for the consequences of incorrect or improper use of the Application, nor for any damage resulting from temporary or permanent malfunction. - -Administrators of Discord servers using **RaidProtect** are solely responsible for configurations made and decisions taken as a result of the Application's automated actions (e.g. banning or deleting messages). In the event of any violation of Discord's terms of service or applicable laws, the administrators of the server concerned bear full responsibility. - -## 5. Modification of the Terms of Service - -These Terms of Service may be modified at any time to reflect changes in services or applicable regulations. Any changes will be published on the website and, if necessary, communicated via the Application. By continuing to use the services after the TOS has been updated, users accept the changes made. - -## 6. Applicable law and jurisdiction - -These Terms of Service are governed by French law. In the event of dispute, and after an attempt at amicable resolution, jurisdiction is attributed to the competent courts of Paris, unless otherwise provided by law. - -</LegalLayout> diff --git a/i18n/en/docusaurus-plugin-content-pages/terms.tsx b/i18n/en/docusaurus-plugin-content-pages/terms.tsx new file mode 100644 index 0000000..7715ab3 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-pages/terms.tsx @@ -0,0 +1,104 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +export default function Terms(): ReactNode { + return ( + <LegalLayout + title="Terms of Service" + lastUpdated="Last update: February 1, 2025" + description="See our terms of use to understand our intellectual property rights, hypertext links, personal data management and our responsibility for the RaidProtect site and bot."> + <section> + <p> + By adding RaidProtect to your Discord server, you acknowledge that you have read and + agree to the Terms of Service. If you do not agree to any of these terms, you must stop + using our services. + </p> + </section> + <section> + <h2>1. Intellectual property</h2> + <p> + This website, its general structure, the RaidProtect trademark, as well as the texts, + images, animations, logos and any other element composing it, are the exclusive property + of SAS French Community Agency or its partners and are protected by French and + international laws relating to intellectual property. Any reproduction, representation, + use or adaptation, in any form whatsoever, of all or part of these elements, including + software, without the prior written authorization of SAS French Community Agency, is + strictly prohibited and would constitute an infringement. + </p> + <p> + The same provisions apply to the functionalities and source code of the Application, + which are also protected by intellectual property rights. Any attempt to reproduce, + modify or make unauthorized use of the Application's functionalities is prohibited and + liable to legal action. + </p> + </section> + <section> + <h2>2. Hyperlinks</h2> + <p> + Any link to the Site must be authorized in writing in advance by{' '} + <strong>SAS French Community Agency</strong>. In any event,{' '} + <strong>SAS French Community Agency</strong> reserves the right to terminate this + authorization at any time if it considers that the link established with the Site is + likely to harm the interests of the latter. + </p> + <p> + It is furthermore specified that sites presenting a hypertext link with the present Site + (hypertext links targeting the Site or established from the Site) are not under the + control of <strong>SAS French Community Agency</strong>, <strong>RaidProtect</strong> and + its affiliates, who decline all responsibility for their content. + </p> + </section> + <section> + <h2>3. Using the service</h2> + <p> + Our services, including the Application, are free to use for personal or commercial + purposes. We reserve the right to prohibit the use of our services in the event of use + that we deem inappropriate or that may harm other Users. + </p> + </section> + <section> + <h2>4. Liability</h2> + <h3>4.1. Website</h3> + <p> + <strong>SAS French Community Agency</strong>, <strong>RaidProtect</strong> and its + affiliates shall not be liable for any direct or indirect damages resulting from the use + of the Website or the information contained therein.{' '} + <strong>SAS French Community Agency</strong> does not guarantee the accuracy or + completeness of the information presented on the Site and reserves the right to modify + or delete it at any time, without notice. + </p> + <h3>4.2. Application</h3> + <p> + The <strong>RaidProtect</strong> Application is provided as is, without warranty of any + kind, either express or implied. <strong>SAS French Community Agency</strong> cannot be + held responsible for the consequences of incorrect or improper use of the Application, + nor for any damage resulting from temporary or permanent malfunction. + </p> + <p> + Administrators of Discord servers using <strong>RaidProtect</strong> are solely + responsible for configurations made and decisions taken as a result of the Application's + automated actions (e.g. banning or deleting messages). In the event of any violation of + Discord's terms of service or applicable laws, the administrators of the server + concerned bear full responsibility. + </p> + </section> + <section> + <h2>5. Modification of the Terms of Service</h2> + <p> + These Terms of Service may be modified at any time to reflect changes in services or + applicable regulations. Any changes will be published on the website and, if necessary, + communicated via the Application. By continuing to use the services after the TOS has + been updated, users accept the changes made. + </p> + </section> + <section> + <h2>6. Applicable law and jurisdiction</h2> + <p> + These Terms of Service are governed by French law. In the event of dispute, and after an + attempt at amicable resolution, jurisdiction is attributed to the competent courts of + Paris, unless otherwise provided by law. + </p> + </section> + </LegalLayout> + ); +} diff --git a/i18n/es/docusaurus-plugin-content-pages/cookies.mdx b/i18n/es/docusaurus-plugin-content-pages/cookies.mdx deleted file mode 100644 index 5c7c580..0000000 --- a/i18n/es/docusaurus-plugin-content-pages/cookies.mdx +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Política de cookies | RaidProtect -description: Descubre cómo RaidProtect protege tu privacidad al no utilizar cookies, garantizando una navegación segura y privada. Consulta nuestra política. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Política de cookies" - lastUpdated="Última actualización: 1 de febrero de 2025" - description="Descubre cómo RaidProtect protege tu privacidad al no utilizar cookies, garantizando una navegación segura y privada. Consulta nuestra política."> - -En RaidProtect, nos comprometemos a proteger la privacidad y los datos de nuestros usuarios. En el marco de este compromiso, te informamos sobre nuestra política relativa al uso de cookies en nuestro sitio web. - -## 1. Uso de cookies - -Queremos ser transparentes sobre las tecnologías que utilizamos. A tal efecto, te informamos de que nuestro sitio web **no utiliza cookies**. Las cookies son pequeños archivos de texto que los sitios web pueden utilizar para hacer más eficiente la experiencia del usuario. Sin embargo, con el fin de preservar al máximo la confidencialidad de nuestros usuarios, hemos optado por no emplearlas en nuestra plataforma. - -## 2. ¿Qué significa esto para ti? - -La ausencia de cookies significa que puedes navegar por nuestro sitio web sin que se registre ni analice ninguna información sobre tu visita. Esta práctica busca garantizar una experiencia de navegación privada y segura para todos nuestros usuarios. - -## 3. ¿Cómo protegemos tu privacidad? - -Además de nuestra política de no utilizar cookies, adoptamos otras medidas para proteger tu privacidad y tus datos personales. Cumplimos estrictamente las leyes y reglamentos vigentes sobre protección de datos y aplicamos prácticas de seguridad de la información de última generación para impedir cualquier acceso no autorizado, modificación, divulgación o destrucción de tu información personal. - -## 4. Modificaciones de la política de cookies - -Nos reservamos el derecho de modificar esta política de cookies en cualquier momento. Toda modificación entrará en vigor inmediatamente después de su publicación en nuestro sitio web. Te animamos a consultar esta página con regularidad para estar al tanto de nuestra política en materia de cookies. - -## 5. Contacto - -Si tienes preguntas o preocupaciones sobre nuestra política de cookies o sobre la forma en que protegemos tus datos personales, no dudes en contactarnos en [dpo@raidprotect.bot](mailto:dpo@raidprotect.bot). - -</LegalLayout> diff --git a/i18n/es/docusaurus-plugin-content-pages/cookies.tsx b/i18n/es/docusaurus-plugin-content-pages/cookies.tsx new file mode 100644 index 0000000..c601067 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-pages/cookies.tsx @@ -0,0 +1,65 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +export default function Cookies(): ReactNode { + return ( + <LegalLayout + title="Política de cookies" + lastUpdated="Última actualización: 1 de febrero de 2025" + description="Descubre cómo RaidProtect protege tu privacidad al no utilizar cookies, garantizando una navegación segura y privada. Consulta nuestra política."> + <section> + <p> + En RaidProtect, nos comprometemos a proteger la privacidad y los datos de nuestros + usuarios. En el marco de este compromiso, te informamos sobre nuestra política relativa + al uso de cookies en nuestro sitio web. + </p> + </section> + <section> + <h2>1. Uso de cookies</h2> + <p> + Queremos ser transparentes sobre las tecnologías que utilizamos. A tal efecto, te + informamos de que nuestro sitio web <strong>no utiliza cookies</strong>. Las cookies son + pequeños archivos de texto que los sitios web pueden utilizar para hacer más eficiente + la experiencia del usuario. Sin embargo, con el fin de preservar al máximo la + confidencialidad de nuestros usuarios, hemos optado por no emplearlas en nuestra + plataforma. + </p> + </section> + <section> + <h2>2. ¿Qué significa esto para ti?</h2> + <p> + La ausencia de cookies significa que puedes navegar por nuestro sitio web sin que se + registre ni analice ninguna información sobre tu visita. Esta práctica busca garantizar + una experiencia de navegación privada y segura para todos nuestros usuarios. + </p> + </section> + <section> + <h2>3. ¿Cómo protegemos tu privacidad?</h2> + <p> + Además de nuestra política de no utilizar cookies, adoptamos otras medidas para proteger + tu privacidad y tus datos personales. Cumplimos estrictamente las leyes y reglamentos + vigentes sobre protección de datos y aplicamos prácticas de seguridad de la información + de última generación para impedir cualquier acceso no autorizado, modificación, + divulgación o destrucción de tu información personal. + </p> + </section> + <section> + <h2>4. Modificaciones de la política de cookies</h2> + <p> + Nos reservamos el derecho de modificar esta política de cookies en cualquier momento. + Toda modificación entrará en vigor inmediatamente después de su publicación en nuestro + sitio web. Te animamos a consultar esta página con regularidad para estar al tanto de + nuestra política en materia de cookies. + </p> + </section> + <section> + <h2>5. Contacto</h2> + <p> + Si tienes preguntas o preocupaciones sobre nuestra política de cookies o sobre la forma + en que protegemos tus datos personales, no dudes en contactarnos en{' '} + <a href="mailto:dpo@raidprotect.bot">dpo@raidprotect.bot</a>. + </p> + </section> + </LegalLayout> + ); +} diff --git a/i18n/es/docusaurus-plugin-content-pages/legal.mdx b/i18n/es/docusaurus-plugin-content-pages/legal.mdx deleted file mode 100644 index 0ae3518..0000000 --- a/i18n/es/docusaurus-plugin-content-pages/legal.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Aviso legal | RaidProtect -description: Encuentra los avisos legales del bot de Discord RaidProtect (RP), editor del sitio raidprotect.bot. Información general y marco legal de uso. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Aviso legal" - lastUpdated="Última actualización: 1 de febrero de 2025" - description="Encuentra los avisos legales del bot de Discord RaidProtect (RP), editor del sitio raidprotect.bot. Información general y marco legal de uso."> - -El sitio **RaidProtect**, accesible en las direcciones «raidprotect.bot» y «docs.raidprotect.bot» (en lo sucesivo, el «Sitio»), y la aplicación RaidProtect, accesible desde Discord con el ID «466578580449525760» (en lo sucesivo, la «Aplicación»), son editados por la **SAS French Community Agency**. La información facilitada en el Sitio se presenta con carácter meramente indicativo y general y no pretende ser exhaustiva. A pesar de todo el cuidado y rigor empleados en la elaboración del Sitio y en su actualización periódica, es posible que se hayan deslizado errores en la información presentada. Por consiguiente, los usuarios del Sitio realizarán todas las comprobaciones que consideren oportunas y serán los únicos responsables del uso que hagan de la información accesible. - -Responsable de la publicación: Arthur Battais - ---- - -## Empresa - -**SAS French Community Agency** -**Siglas: FCA** -**Con un capital social de 10 000 €** -[16 Esplanade du Champ de Mars, 35000 Rennes](https://www.google.com/maps/place/16+Esp.+du+Champ+de+Mars,+35000+Rennes/@48.1044838,-1.675702,17z/data=!3m1!4b1!4m6!3m5!1s0x480edfca43c9b53b:0xdea9cc38f95f9839!8m2!3d48.1044838!4d-1.675702!16s%2Fg%2F11csm9r096?sa=X&ved=2ahUKEwiZ0ICZyYSEAxWpUqQEHTq1BdcQ8gF6BAgdEAA&entry=tts) - -+33 (0)9 72 14 95 51 -[hello@fca.gg](mailto:hello@fca.gg) - -SIRET: [983 856 253 00023](https://annuaire-entreprises.data.gouv.fr/etablissement/98385625300023) -IVA: [FR03983856253](https://ec.europa.eu/taxation_customs/vies/#/vat-validation) - -Marca comercial: **RaidProtect** -[contact@raidprotect.bot](mailto:contact@raidprotect.bot) - ---- - -## Alojamiento - -El alojamiento del Sitio corre a cargo de la empresa Hetzner (Hetzner Online GmbH), cuya sede social se encuentra en Industriestr. 25 - 91710 Gunzenhausen - Germany, correo electrónico: info@hetzner.com y teléfono: +49 (0)9831 505-0. - -</LegalLayout> diff --git a/i18n/es/docusaurus-plugin-content-pages/legal.tsx b/i18n/es/docusaurus-plugin-content-pages/legal.tsx new file mode 100644 index 0000000..4e5cc1c --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-pages/legal.tsx @@ -0,0 +1,81 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +const GOOGLE_MAPS_URL = + 'https://www.google.com/maps/place/16+Esp.+du+Champ+de+Mars,+35000+Rennes/@48.1044838,-1.675702,17z/data=!3m1!4b1!4m6!3m5!1s0x480edfca43c9b53b:0xdea9cc38f95f9839!8m2!3d48.1044838!4d-1.675702!16s%2Fg%2F11csm9r096?sa=X&ved=2ahUKEwiZ0ICZyYSEAxWpUqQEHTq1BdcQ8gF6BAgdEAA&entry=tts'; + +export default function Legal(): ReactNode { + return ( + <LegalLayout + title="Aviso legal" + lastUpdated="Última actualización: 1 de febrero de 2025" + description="Encuentra los avisos legales del bot de Discord RaidProtect (RP), editor del sitio raidprotect.bot. Información general y marco legal de uso."> + <section> + <p> + El sitio <strong>RaidProtect</strong>, accesible en las direcciones «raidprotect.bot» y + «docs.raidprotect.bot» (en lo sucesivo, el «Sitio»), y la aplicación RaidProtect, + accesible desde Discord con el ID «466578580449525760» (en lo sucesivo, la «Aplicación»), + son editados por la <strong>SAS French Community Agency</strong>. La información + facilitada en el Sitio se presenta con carácter meramente indicativo y general y no + pretende ser exhaustiva. A pesar de todo el cuidado y rigor empleados en la elaboración + del Sitio y en su actualización periódica, es posible que se hayan deslizado errores en + la información presentada. Por consiguiente, los usuarios del Sitio realizarán todas las + comprobaciones que consideren oportunas y serán los únicos responsables del uso que + hagan de la información accesible. + </p> + <p>Responsable de la publicación: Arthur Battais</p> + </section> + <hr /> + <section> + <h2>Empresa</h2> + <p> + <strong>SAS French Community Agency</strong> + <br /> + <strong>Siglas: FCA</strong> + <br /> + <strong>Con un capital social de 10 000 €</strong> + <br /> + <a href={GOOGLE_MAPS_URL} target="_blank" rel="noopener noreferrer"> + 16 Esplanade du Champ de Mars, 35000 Rennes + </a> + </p> + <p> + +33 (0)9 72 14 95 51 + <br /> + <a href="mailto:hello@fca.gg">hello@fca.gg</a> + </p> + <p> + SIRET:{' '} + <a + href="https://annuaire-entreprises.data.gouv.fr/etablissement/98385625300023" + target="_blank" + rel="noopener noreferrer"> + 983 856 253 00023 + </a> + <br /> + IVA:{' '} + <a + href="https://ec.europa.eu/taxation_customs/vies/#/vat-validation" + target="_blank" + rel="noopener noreferrer"> + FR03983856253 + </a> + </p> + <p> + Marca comercial: <strong>RaidProtect</strong> + <br /> + <a href="mailto:contact@raidprotect.bot">contact@raidprotect.bot</a> + </p> + </section> + <hr /> + <section> + <h2>Alojamiento</h2> + <p> + El alojamiento del Sitio corre a cargo de la empresa Hetzner (Hetzner Online GmbH), cuya + sede social se encuentra en Industriestr. 25 - 91710 Gunzenhausen - Germany, correo + electrónico: info@hetzner.com y teléfono: +49 (0)9831 505-0. + </p> + </section> + </LegalLayout> + ); +} diff --git a/i18n/es/docusaurus-plugin-content-pages/privacy.mdx b/i18n/es/docusaurus-plugin-content-pages/privacy.mdx deleted file mode 100644 index 86bec8f..0000000 --- a/i18n/es/docusaurus-plugin-content-pages/privacy.mdx +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Política de privacidad | RaidProtect -description: Descubre cómo RaidProtect protege tus datos personales y garantiza la seguridad de tu privacidad al utilizar nuestros servicios. Política de privacidad detallada. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Política de privacidad" - lastUpdated="Última actualización: 1 de febrero de 2025" - description="Descubre cómo RaidProtect protege tus datos personales y garantiza la seguridad de tu privacidad al utilizar nuestros servicios. Política de privacidad detallada."> - -La presente Política de Privacidad describe las modalidades de recopilación, uso y protección de los datos personales en el marco de los servicios ofrecidos por la aplicación de Discord **RaidProtect** y el sitio web asociado. - -Al utilizar estos servicios, aceptas las prácticas descritas en esta Política de Privacidad. **SAS French Community Agency**, **RaidProtect**, se compromete a respetar y proteger tu privacidad de conformidad con la legislación vigente, en particular el Reglamento General de Protección de Datos (RGPD) y la **ley francesa de informática y libertades**. - -## 1. Datos recopilados - -Con el fin de garantizar el funcionamiento de los servicios ofrecidos, la aplicación de Discord **RaidProtect** y el sitio web recopilan y tratan las siguientes categorías de datos: - -### 1.1. Datos recopilados por la Aplicación - -- **Configuración de los servidores de Discord**: información sobre los parámetros de los servidores que utilizan **RaidProtect** (por ejemplo: roles, permisos, canales configurados). -- **Mensajes de texto**: cualquier mensaje enviado por un usuario puede recopilarse temporalmente, en el marco de los servicios de moderación. -- **Eventos de Discord**: eventos transmitidos por Discord, tales como la entrada o salida de nuevos miembros, las modificaciones de roles o la eliminación de mensajes. - -### 1.2. Datos recopilados por el sitio web - -- **Datos de identificación**: información facilitada por los usuarios al registrarse o al utilizar los servicios en línea (por ejemplo: dirección de correo electrónico, identificadores de Discord). -- **Datos de navegación**: información sobre la interacción con el sitio web, tales como la dirección IP, el tipo de navegador o las cookies. - -## 2. Finalidades del tratamiento - -Los datos recopilados se utilizan exclusivamente para: - -1. Garantizar el correcto funcionamiento de los servicios ofrecidos (por ejemplo: moderación de los servidores de Discord, análisis de los eventos relacionados con la comunidad). -2. Garantizar una experiencia de usuario óptima y personalizada. -3. Proteger los servidores de Discord aplicando las normas definidas por los administradores. -4. Mantener y mejorar los servicios mediante el análisis del uso. - -Los datos no se utilizan con fines comerciales o publicitarios. - -## 3. Conservación de los datos - -Los datos personales recopilados se conservan únicamente durante el tiempo necesario para alcanzar las finalidades definidas anteriormente. Una vez transcurrido este periodo, se eliminan o se anonimizan. - -- **Mensajes de texto**: conservados temporalmente para su tratamiento y, a continuación, eliminados de forma definitiva. -- **Datos de configuración de los servidores**: conservados mientras el servidor utilice los servicios de **RaidProtect**. -- **Datos de navegación**: conservados de conformidad con las disposiciones legales aplicables. - -## 4. Compartición de los datos - -Los datos recopilados **nunca se comparten con terceros**, salvo en los siguientes casos: - -1. **Socios técnicos**: los socios necesarios para la prestación de los servicios (por ejemplo, los proveedores de alojamiento o de servicios en la nube). -2. **Obligaciones legales**: si la divulgación de los datos es requerida por la ley, por una autoridad judicial o reglamentaria. - -## 5. Seguridad de los datos - -**RaidProtect** implementa todas las medidas técnicas y organizativas necesarias para proteger los datos personales frente a accesos no autorizados, pérdidas, destrucciones o alteraciones. Las principales medidas incluyen: - -- El cifrado de los datos sensibles. -- Un control estricto del acceso a los datos (autenticación y registro). -- Una infraestructura alojada en servidores seguros. - -## 6. Derechos de los usuarios - -De conformidad con el RGPD, los usuarios disponen de los siguientes derechos sobre sus datos personales: - -- **Derecho de acceso**: obtener una copia de los datos personales tratados. -- **Derecho de rectificación**: corregir datos inexactos o incompletos. -- **Derecho de supresión**: solicitar la eliminación de los datos en determinadas condiciones. -- **Derecho de limitación**: limitar el tratamiento de sus datos. -- **Derecho de oposición**: oponerse al tratamiento de sus datos por motivos legítimos. -- **Derecho a la portabilidad**: recibir los datos personales en un formato estructurado. - -Para ejercer estos derechos o plantear preguntas sobre la gestión de los datos, los usuarios pueden ponerse en contacto con el delegado de protección de datos (DPO) en [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot). - -## 7. Modificación de la Política de Privacidad - -La presente Política de Privacidad puede actualizarse en cualquier momento para reflejar cambios en los servicios o en la normativa aplicable. Toda modificación se publicará en el sitio web y, en caso necesario, se comunicará a través de la Aplicación. Al continuar utilizando los servicios después de la actualización de la política, los usuarios aceptan las modificaciones realizadas. - -## 8. Contacto - -Si tienes preguntas o preocupaciones sobre nuestra política de privacidad o sobre la forma en que protegemos tus datos personales, no dudes en contactarnos en [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot). - -</LegalLayout> diff --git a/i18n/es/docusaurus-plugin-content-pages/privacy.tsx b/i18n/es/docusaurus-plugin-content-pages/privacy.tsx new file mode 100644 index 0000000..a19d1be --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-pages/privacy.tsx @@ -0,0 +1,192 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +export default function Privacy(): ReactNode { + return ( + <LegalLayout + title="Política de privacidad" + lastUpdated="Última actualización: 1 de febrero de 2025" + description="Descubre cómo RaidProtect protege tus datos personales y garantiza la seguridad de tu privacidad al utilizar nuestros servicios. Política de privacidad detallada."> + <section> + <p> + La presente Política de Privacidad describe las modalidades de recopilación, uso y + protección de los datos personales en el marco de los servicios ofrecidos por la + aplicación de Discord <strong>RaidProtect</strong> y el sitio web asociado. + </p> + <p> + Al utilizar estos servicios, aceptas las prácticas descritas en esta Política de + Privacidad. <strong>SAS French Community Agency</strong>, <strong>RaidProtect</strong>, + se compromete a respetar y proteger tu privacidad de conformidad con la legislación + vigente, en particular el Reglamento General de Protección de Datos (RGPD) y la{' '} + <strong>ley francesa de informática y libertades</strong>. + </p> + </section> + <section> + <h2>1. Datos recopilados</h2> + <p> + Con el fin de garantizar el funcionamiento de los servicios ofrecidos, la aplicación de + Discord <strong>RaidProtect</strong> y el sitio web recopilan y tratan las siguientes + categorías de datos: + </p> + <h3>1.1. Datos recopilados por la Aplicación</h3> + <ul> + <li> + <strong>Configuración de los servidores de Discord</strong>: información sobre los + parámetros de los servidores que utilizan <strong>RaidProtect</strong> (por ejemplo: + roles, permisos, canales configurados). + </li> + <li> + <strong>Mensajes de texto</strong>: cualquier mensaje enviado por un usuario puede + recopilarse temporalmente, en el marco de los servicios de moderación. + </li> + <li> + <strong>Eventos de Discord</strong>: eventos transmitidos por Discord, tales como la + entrada o salida de nuevos miembros, las modificaciones de roles o la eliminación de + mensajes. + </li> + </ul> + <h3>1.2. Datos recopilados por el sitio web</h3> + <ul> + <li> + <strong>Datos de identificación</strong>: información facilitada por los usuarios al + registrarse o al utilizar los servicios en línea (por ejemplo: dirección de correo + electrónico, identificadores de Discord). + </li> + <li> + <strong>Datos de navegación</strong>: información sobre la interacción con el sitio + web, tales como la dirección IP, el tipo de navegador o las cookies. + </li> + </ul> + </section> + <section> + <h2>2. Finalidades del tratamiento</h2> + <p>Los datos recopilados se utilizan exclusivamente para:</p> + <ol> + <li> + Garantizar el correcto funcionamiento de los servicios ofrecidos (por ejemplo: + moderación de los servidores de Discord, análisis de los eventos relacionados con la + comunidad). + </li> + <li>Garantizar una experiencia de usuario óptima y personalizada.</li> + <li> + Proteger los servidores de Discord aplicando las normas definidas por los + administradores. + </li> + <li>Mantener y mejorar los servicios mediante el análisis del uso.</li> + </ol> + <p>Los datos no se utilizan con fines comerciales o publicitarios.</p> + </section> + <section> + <h2>3. Conservación de los datos</h2> + <p> + Los datos personales recopilados se conservan únicamente durante el tiempo necesario + para alcanzar las finalidades definidas anteriormente. Una vez transcurrido este + periodo, se eliminan o se anonimizan. + </p> + <ul> + <li> + <strong>Mensajes de texto</strong>: conservados temporalmente para su tratamiento y, a + continuación, eliminados de forma definitiva. + </li> + <li> + <strong>Datos de configuración de los servidores</strong>: conservados mientras el + servidor utilice los servicios de <strong>RaidProtect</strong>. + </li> + <li> + <strong>Datos de navegación</strong>: conservados de conformidad con las disposiciones + legales aplicables. + </li> + </ul> + </section> + <section> + <h2>4. Compartición de los datos</h2> + <p> + Los datos recopilados <strong>nunca se comparten con terceros</strong>, salvo en los + siguientes casos: + </p> + <ol> + <li> + <strong>Socios técnicos</strong>: los socios necesarios para la prestación de los + servicios (por ejemplo, los proveedores de alojamiento o de servicios en la nube). + </li> + <li> + <strong>Obligaciones legales</strong>: si la divulgación de los datos es requerida por + la ley, por una autoridad judicial o reglamentaria. + </li> + </ol> + </section> + <section> + <h2>5. Seguridad de los datos</h2> + <p> + <strong>RaidProtect</strong> implementa todas las medidas técnicas y organizativas + necesarias para proteger los datos personales frente a accesos no autorizados, pérdidas, + destrucciones o alteraciones. Las principales medidas incluyen: + </p> + <ul> + <li>El cifrado de los datos sensibles.</li> + <li>Un control estricto del acceso a los datos (autenticación y registro).</li> + <li>Una infraestructura alojada en servidores seguros.</li> + </ul> + </section> + <section> + <h2>6. Derechos de los usuarios</h2> + <p> + De conformidad con el RGPD, los usuarios disponen de los siguientes derechos sobre sus + datos personales: + </p> + <ul> + <li> + <strong>Derecho de acceso</strong>: obtener una copia de los datos personales tratados. + </li> + <li> + <strong>Derecho de rectificación</strong>: corregir datos inexactos o incompletos. + </li> + <li> + <strong>Derecho de supresión</strong>: solicitar la eliminación de los datos en + determinadas condiciones. + </li> + <li> + <strong>Derecho de limitación</strong>: limitar el tratamiento de sus datos. + </li> + <li> + <strong>Derecho de oposición</strong>: oponerse al tratamiento de sus datos por motivos + legítimos. + </li> + <li> + <strong>Derecho a la portabilidad</strong>: recibir los datos personales en un formato + estructurado. + </li> + </ul> + <p> + Para ejercer estos derechos o plantear preguntas sobre la gestión de los datos, los + usuarios pueden ponerse en contacto con el delegado de protección de datos (DPO) en{' '} + <a href="mailto:dpo@raidprotect.bot"> + <strong>dpo@raidprotect.bot</strong> + </a> + . + </p> + </section> + <section> + <h2>7. Modificación de la Política de Privacidad</h2> + <p> + La presente Política de Privacidad puede actualizarse en cualquier momento para reflejar + cambios en los servicios o en la normativa aplicable. Toda modificación se publicará en + el sitio web y, en caso necesario, se comunicará a través de la Aplicación. Al continuar + utilizando los servicios después de la actualización de la política, los usuarios + aceptan las modificaciones realizadas. + </p> + </section> + <section> + <h2>8. Contacto</h2> + <p> + Si tienes preguntas o preocupaciones sobre nuestra política de privacidad o sobre la + forma en que protegemos tus datos personales, no dudes en contactarnos en{' '} + <a href="mailto:dpo@raidprotect.bot"> + <strong>dpo@raidprotect.bot</strong> + </a> + . + </p> + </section> + </LegalLayout> + ); +} diff --git a/i18n/es/docusaurus-plugin-content-pages/terms.mdx b/i18n/es/docusaurus-plugin-content-pages/terms.mdx deleted file mode 100644 index 6d5095f..0000000 --- a/i18n/es/docusaurus-plugin-content-pages/terms.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Términos de uso | RaidProtect -description: Consulta nuestros términos de uso para conocer los derechos de propiedad intelectual, los enlaces hipertexto, la gestión de los datos personales y nuestra responsabilidad sobre el sitio y el bot RaidProtect. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Términos de uso" - lastUpdated="Última actualización: 1 de febrero de 2025" - description="Consulta nuestros términos de uso para conocer los derechos de propiedad intelectual, los enlaces hipertexto, la gestión de los datos personales y nuestra responsabilidad sobre el sitio y el bot RaidProtect."> - -Al añadir RaidProtect a tu servidor de Discord, reconoces haber leído y aceptado las Condiciones de Uso. Si no aceptas alguna de estas condiciones, deberás dejar de utilizar nuestros servicios. - -## 1. Propiedad intelectual - -El presente sitio web, su estructura general, la marca comercial RaidProtect, así como los textos, imágenes, animaciones, logotipos y cualquier otro elemento que lo compone, son propiedad exclusiva de SAS French Community Agency o de sus socios y están protegidos por las leyes francesas e internacionales relativas a la propiedad intelectual. Cualquier reproducción, representación, uso o adaptación, bajo cualquier forma que sea, de la totalidad o parte de estos elementos, incluido el software, sin la autorización escrita previa de SAS French Community Agency, está estrictamente prohibida y constituiría una falsificación. - -Las mismas disposiciones se aplican a las funcionalidades y al código fuente de la Aplicación, también protegidos por los derechos de propiedad intelectual. Cualquier intento de reproducir, modificar o utilizar sin autorización las funcionalidades de la Aplicación queda prohibido y podrá ser objeto de acciones legales. - -## 2. Enlaces hipertexto - -Cualquier enlace al Sitio deberá contar con una autorización escrita y previa de **SAS French Community Agency**. En cualquier caso, **SAS French Community Agency** se reserva el derecho de poner fin a dicha autorización en cualquier momento si considera que el enlace establecido con el Sitio puede perjudicar sus intereses. - -Asimismo, se precisa que los sitios que incluyan un enlace hipertexto al presente Sitio (enlaces hipertexto dirigidos al Sitio o establecidos desde él) no se encuentran bajo el control de **SAS French Community Agency**, **RaidProtect** ni de sus empresas afiliadas, que declinan cualquier responsabilidad en cuanto a su contenido. - -## 3. Uso del servicio - -Nuestros servicios, incluida la Aplicación, son de libre uso con fines personales o comerciales. Nos reservamos el derecho de prohibir el uso de nuestros servicios en caso de un uso que consideremos inadecuado o que pueda perjudicar a otros Usuarios. - -## 4. Responsabilidad - -### 4.1. Sitio web - -**SAS French Community Agency**, **RaidProtect** y sus empresas afiliadas no podrán ser consideradas responsables de los daños directos o indirectos que se deriven del uso del Sitio web o de la información que contiene. **SAS French Community Agency** no garantiza la exactitud ni la exhaustividad de la información presentada en el Sitio y se reserva el derecho de modificarla o suprimirla en cualquier momento, sin previo aviso. - -### 4.2. Aplicación - -La Aplicación **RaidProtect** se proporciona tal cual, sin garantía de ningún tipo, expresa o implícita. **SAS French Community Agency** no se responsabiliza de las consecuencias de un uso incorrecto o abusivo de la Aplicación, ni de los posibles daños derivados de un funcionamiento incorrecto temporal o permanente. - -Los administradores de servidores de Discord que utilicen **RaidProtect** son los únicos responsables de las configuraciones realizadas y de las decisiones adoptadas a raíz de las acciones automatizadas de la Aplicación (por ejemplo, expulsiones o eliminación de mensajes). En caso de incumplimiento de las condiciones de uso de Discord o de las leyes vigentes, los administradores del servidor afectado asumirán la responsabilidad íntegra. - -## 5. Modificación de los Términos de Uso - -Los presentes Términos de Uso pueden ser modificados en cualquier momento para reflejar cambios en los servicios o en la normativa aplicable. Toda modificación se publicará en el sitio web y, en caso necesario, se comunicará a través de la Aplicación. Al seguir utilizando los servicios después de la actualización de los Términos de Uso, los usuarios aceptan las modificaciones realizadas. - -## 6. Ley aplicable y jurisdicción - -Los presentes Términos de Uso se rigen por el derecho francés. En caso de litigio, y tras un intento de resolución amistosa, será competente la jurisdicción de los tribunales correspondientes de París, salvo disposición legal en contrario. - -</LegalLayout> diff --git a/i18n/es/docusaurus-plugin-content-pages/terms.tsx b/i18n/es/docusaurus-plugin-content-pages/terms.tsx new file mode 100644 index 0000000..f7c9f43 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-pages/terms.tsx @@ -0,0 +1,108 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +export default function Terms(): ReactNode { + return ( + <LegalLayout + title="Términos de uso" + lastUpdated="Última actualización: 1 de febrero de 2025" + description="Consulta nuestros términos de uso para conocer los derechos de propiedad intelectual, los enlaces hipertexto, la gestión de los datos personales y nuestra responsabilidad sobre el sitio y el bot RaidProtect."> + <section> + <p> + Al añadir RaidProtect a tu servidor de Discord, reconoces haber leído y aceptado las + Condiciones de Uso. Si no aceptas alguna de estas condiciones, deberás dejar de utilizar + nuestros servicios. + </p> + </section> + <section> + <h2>1. Propiedad intelectual</h2> + <p> + El presente sitio web, su estructura general, la marca comercial RaidProtect, así como + los textos, imágenes, animaciones, logotipos y cualquier otro elemento que lo compone, + son propiedad exclusiva de SAS French Community Agency o de sus socios y están protegidos + por las leyes francesas e internacionales relativas a la propiedad intelectual. Cualquier + reproducción, representación, uso o adaptación, bajo cualquier forma que sea, de la + totalidad o parte de estos elementos, incluido el software, sin la autorización escrita + previa de SAS French Community Agency, está estrictamente prohibida y constituiría una + falsificación. + </p> + <p> + Las mismas disposiciones se aplican a las funcionalidades y al código fuente de la + Aplicación, también protegidos por los derechos de propiedad intelectual. Cualquier + intento de reproducir, modificar o utilizar sin autorización las funcionalidades de la + Aplicación queda prohibido y podrá ser objeto de acciones legales. + </p> + </section> + <section> + <h2>2. Enlaces hipertexto</h2> + <p> + Cualquier enlace al Sitio deberá contar con una autorización escrita y previa de{' '} + <strong>SAS French Community Agency</strong>. En cualquier caso,{' '} + <strong>SAS French Community Agency</strong> se reserva el derecho de poner fin a dicha + autorización en cualquier momento si considera que el enlace establecido con el Sitio + puede perjudicar sus intereses. + </p> + <p> + Asimismo, se precisa que los sitios que incluyan un enlace hipertexto al presente Sitio + (enlaces hipertexto dirigidos al Sitio o establecidos desde él) no se encuentran bajo el + control de <strong>SAS French Community Agency</strong>, <strong>RaidProtect</strong> ni + de sus empresas afiliadas, que declinan cualquier responsabilidad en cuanto a su + contenido. + </p> + </section> + <section> + <h2>3. Uso del servicio</h2> + <p> + Nuestros servicios, incluida la Aplicación, son de libre uso con fines personales o + comerciales. Nos reservamos el derecho de prohibir el uso de nuestros servicios en caso + de un uso que consideremos inadecuado o que pueda perjudicar a otros Usuarios. + </p> + </section> + <section> + <h2>4. Responsabilidad</h2> + <h3>4.1. Sitio web</h3> + <p> + <strong>SAS French Community Agency</strong>, <strong>RaidProtect</strong> y sus empresas + afiliadas no podrán ser consideradas responsables de los daños directos o indirectos que + se deriven del uso del Sitio web o de la información que contiene.{' '} + <strong>SAS French Community Agency</strong> no garantiza la exactitud ni la + exhaustividad de la información presentada en el Sitio y se reserva el derecho de + modificarla o suprimirla en cualquier momento, sin previo aviso. + </p> + <h3>4.2. Aplicación</h3> + <p> + La Aplicación <strong>RaidProtect</strong> se proporciona tal cual, sin garantía de + ningún tipo, expresa o implícita. <strong>SAS French Community Agency</strong> no se + responsabiliza de las consecuencias de un uso incorrecto o abusivo de la Aplicación, ni + de los posibles daños derivados de un funcionamiento incorrecto temporal o permanente. + </p> + <p> + Los administradores de servidores de Discord que utilicen <strong>RaidProtect</strong>{' '} + son los únicos responsables de las configuraciones realizadas y de las decisiones + adoptadas a raíz de las acciones automatizadas de la Aplicación (por ejemplo, expulsiones + o eliminación de mensajes). En caso de incumplimiento de las condiciones de uso de + Discord o de las leyes vigentes, los administradores del servidor afectado asumirán la + responsabilidad íntegra. + </p> + </section> + <section> + <h2>5. Modificación de los Términos de Uso</h2> + <p> + Los presentes Términos de Uso pueden ser modificados en cualquier momento para reflejar + cambios en los servicios o en la normativa aplicable. Toda modificación se publicará en + el sitio web y, en caso necesario, se comunicará a través de la Aplicación. Al seguir + utilizando los servicios después de la actualización de los Términos de Uso, los + usuarios aceptan las modificaciones realizadas. + </p> + </section> + <section> + <h2>6. Ley aplicable y jurisdicción</h2> + <p> + Los presentes Términos de Uso se rigen por el derecho francés. En caso de litigio, y tras + un intento de resolución amistosa, será competente la jurisdicción de los tribunales + correspondientes de París, salvo disposición legal en contrario. + </p> + </section> + </LegalLayout> + ); +} diff --git a/i18n/pt/docusaurus-plugin-content-pages/cookies.mdx b/i18n/pt/docusaurus-plugin-content-pages/cookies.mdx deleted file mode 100644 index a3fef53..0000000 --- a/i18n/pt/docusaurus-plugin-content-pages/cookies.mdx +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Política de cookies | RaidProtect -description: Descubra como o RaidProtect protege a sua privacidade ao não utilizar cookies, garantindo uma navegação segura e privada. Consulte a nossa política. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Política de cookies" - lastUpdated="Última atualização: 1 de fevereiro de 2025" - description="Descubra como o RaidProtect protege a sua privacidade ao não utilizar cookies, garantindo uma navegação segura e privada. Consulte a nossa política."> - -Na RaidProtect, comprometemo-nos a proteger a privacidade e os dados dos nossos utilizadores. No âmbito deste compromisso, informamo-lo da nossa política relativa à utilização de cookies no nosso site. - -## 1. Utilização de cookies - -Pretendemos ser transparentes quanto às tecnologias que utilizamos. Para o efeito, informamo-lo de que o nosso site **não utiliza cookies**. Os cookies são pequenos ficheiros de texto que podem ser utilizados pelos sites para tornar a experiência do utilizador mais eficiente. Contudo, com o objetivo de preservar ao máximo a confidencialidade dos nossos utilizadores, optámos por não os utilizar na nossa plataforma. - -## 2. O que significa isto para si? - -A ausência de cookies significa que pode navegar no nosso site sem que qualquer informação relativa à sua visita seja registada ou analisada. Esta abordagem visa garantir uma experiência de navegação privada e segura para todos os nossos utilizadores. - -## 3. Como protegemos a sua privacidade? - -Para além da nossa política de não utilização de cookies, tomamos outras medidas para proteger a sua privacidade e os seus dados pessoais. Cumprimos rigorosamente as leis e regulamentos em vigor sobre a proteção dos dados e implementamos práticas de segurança da informação de última geração para prevenir qualquer acesso não autorizado, modificação, divulgação ou destruição das suas informações pessoais. - -## 4. Alterações à política de utilização de cookies - -Reservamo-nos o direito de modificar esta política de cookies a qualquer momento. Qualquer alteração entrará em vigor imediatamente após a sua publicação no nosso site. Recomendamos que consulte esta página regularmente para se manter informado sobre a nossa política em matéria de cookies. - -## 5. Contacto - -Se tiver questões ou preocupações relativamente à nossa política de cookies ou à forma como protegemos os seus dados pessoais, não hesite em contactar-nos em [dpo@raidprotect.bot](mailto:dpo@raidprotect.bot). - -</LegalLayout> diff --git a/i18n/pt/docusaurus-plugin-content-pages/cookies.tsx b/i18n/pt/docusaurus-plugin-content-pages/cookies.tsx new file mode 100644 index 0000000..5d59253 --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-pages/cookies.tsx @@ -0,0 +1,66 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +export default function Cookies(): ReactNode { + return ( + <LegalLayout + title="Política de cookies" + lastUpdated="Última atualização: 1 de fevereiro de 2025" + description="Descubra como o RaidProtect protege a sua privacidade ao não utilizar cookies, garantindo uma navegação segura e privada. Consulte a nossa política."> + <section> + <p> + Na RaidProtect, comprometemo-nos a proteger a privacidade e os dados dos nossos + utilizadores. No âmbito deste compromisso, informamo-lo da nossa política relativa à + utilização de cookies no nosso site. + </p> + </section> + <section> + <h2>1. Utilização de cookies</h2> + <p> + Pretendemos ser transparentes quanto às tecnologias que utilizamos. Para o efeito, + informamo-lo de que o nosso site <strong>não utiliza cookies</strong>. Os cookies são + pequenos ficheiros de texto que podem ser utilizados pelos sites para tornar a + experiência do utilizador mais eficiente. Contudo, com o objetivo de preservar ao máximo + a confidencialidade dos nossos utilizadores, optámos por não os utilizar na nossa + plataforma. + </p> + </section> + <section> + <h2>2. O que significa isto para si?</h2> + <p> + A ausência de cookies significa que pode navegar no nosso site sem que qualquer + informação relativa à sua visita seja registada ou analisada. Esta abordagem visa + garantir uma experiência de navegação privada e segura para todos os nossos + utilizadores. + </p> + </section> + <section> + <h2>3. Como protegemos a sua privacidade?</h2> + <p> + Para além da nossa política de não utilização de cookies, tomamos outras medidas para + proteger a sua privacidade e os seus dados pessoais. Cumprimos rigorosamente as leis e + regulamentos em vigor sobre a proteção dos dados e implementamos práticas de segurança + da informação de última geração para prevenir qualquer acesso não autorizado, + modificação, divulgação ou destruição das suas informações pessoais. + </p> + </section> + <section> + <h2>4. Alterações à política de utilização de cookies</h2> + <p> + Reservamo-nos o direito de modificar esta política de cookies a qualquer momento. + Qualquer alteração entrará em vigor imediatamente após a sua publicação no nosso site. + Recomendamos que consulte esta página regularmente para se manter informado sobre a + nossa política em matéria de cookies. + </p> + </section> + <section> + <h2>5. Contacto</h2> + <p> + Se tiver questões ou preocupações relativamente à nossa política de cookies ou à forma + como protegemos os seus dados pessoais, não hesite em contactar-nos em{' '} + <a href="mailto:dpo@raidprotect.bot">dpo@raidprotect.bot</a>. + </p> + </section> + </LegalLayout> + ); +} diff --git a/i18n/pt/docusaurus-plugin-content-pages/legal.mdx b/i18n/pt/docusaurus-plugin-content-pages/legal.mdx deleted file mode 100644 index dbe34fb..0000000 --- a/i18n/pt/docusaurus-plugin-content-pages/legal.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Aviso legal | RaidProtect -description: Consulte o aviso legal do bot de Discord RaidProtect (RP), editor do site raidprotect.bot. Informações gerais e enquadramento legal de utilização. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Aviso legal" - lastUpdated="Última atualização: 1 de fevereiro de 2025" - description="Consulte o aviso legal do bot de Discord RaidProtect (RP), editor do site raidprotect.bot. Informações gerais e enquadramento legal de utilização."> - -O site **RaidProtect**, acessível através dos endereços «raidprotect.bot» e «docs.raidprotect.bot» (doravante designado por «Site»), e a aplicação RaidProtect, acessível a partir do Discord «466578580449525760» (doravante designada por «Aplicação»), são editados pela **SAS French Community Agency**. As informações disponibilizadas no Site são apresentadas a título indicativo e geral e não pretendem ser exaustivas. Apesar de todo o cuidado e rigor empregues na elaboração do Site e na sua atualização regular, podem ter-se introduzido erros nas informações apresentadas. Os utilizadores do Site deverão, por isso, efetuar todas as verificações necessárias e são os únicos responsáveis pela utilização que fazem das informações acessíveis. - -Responsável pela publicação: Arthur Battais - ---- - -## Sociedade - -**SAS French Community Agency** -**Sigla: FCA** -**Com um capital social de 10 000 €** -[16 Esplanade du Champ de Mars, 35000 Rennes](https://www.google.com/maps/place/16+Esp.+du+Champ+de+Mars,+35000+Rennes/@48.1044838,-1.675702,17z/data=!3m1!4b1!4m6!3m5!1s0x480edfca43c9b53b:0xdea9cc38f95f9839!8m2!3d48.1044838!4d-1.675702!16s%2Fg%2F11csm9r096?sa=X&ved=2ahUKEwiZ0ICZyYSEAxWpUqQEHTq1BdcQ8gF6BAgdEAA&entry=tts) - -+33 (0)9 72 14 95 51 -[hello@fca.gg](mailto:hello@fca.gg) - -SIRET: [983 856 253 00023](https://annuaire-entreprises.data.gouv.fr/etablissement/98385625300023) -IVA: [FR03983856253](https://ec.europa.eu/taxation_customs/vies/#/vat-validation) - -Marca comercial: **RaidProtect** -[contact@raidprotect.bot](mailto:contact@raidprotect.bot) - ---- - -## Alojamento - -O Site é alojado pela empresa Hetzner (Hetzner Online GmbH), com sede em Industriestr. 25 - 91710 Gunzenhausen - Germany, e-mail: info@hetzner.com e telefone: +49 (0)9831 505-0. - -</LegalLayout> diff --git a/i18n/pt/docusaurus-plugin-content-pages/legal.tsx b/i18n/pt/docusaurus-plugin-content-pages/legal.tsx new file mode 100644 index 0000000..21c95f5 --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-pages/legal.tsx @@ -0,0 +1,80 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +const GOOGLE_MAPS_URL = + 'https://www.google.com/maps/place/16+Esp.+du+Champ+de+Mars,+35000+Rennes/@48.1044838,-1.675702,17z/data=!3m1!4b1!4m6!3m5!1s0x480edfca43c9b53b:0xdea9cc38f95f9839!8m2!3d48.1044838!4d-1.675702!16s%2Fg%2F11csm9r096?sa=X&ved=2ahUKEwiZ0ICZyYSEAxWpUqQEHTq1BdcQ8gF6BAgdEAA&entry=tts'; + +export default function Legal(): ReactNode { + return ( + <LegalLayout + title="Aviso legal" + lastUpdated="Última atualização: 1 de fevereiro de 2025" + description="Consulte o aviso legal do bot de Discord RaidProtect (RP), editor do site raidprotect.bot. Informações gerais e enquadramento legal de utilização."> + <section> + <p> + O site <strong>RaidProtect</strong>, acessível através dos endereços «raidprotect.bot» e + «docs.raidprotect.bot» (doravante designado por «Site»), e a aplicação RaidProtect, + acessível a partir do Discord «466578580449525760» (doravante designada por «Aplicação»), + são editados pela <strong>SAS French Community Agency</strong>. As informações + disponibilizadas no Site são apresentadas a título indicativo e geral e não pretendem + ser exaustivas. Apesar de todo o cuidado e rigor empregues na elaboração do Site e na + sua atualização regular, podem ter-se introduzido erros nas informações apresentadas. Os + utilizadores do Site deverão, por isso, efetuar todas as verificações necessárias e são + os únicos responsáveis pela utilização que fazem das informações acessíveis. + </p> + <p>Responsável pela publicação: Arthur Battais</p> + </section> + <hr /> + <section> + <h2>Sociedade</h2> + <p> + <strong>SAS French Community Agency</strong> + <br /> + <strong>Sigla: FCA</strong> + <br /> + <strong>Com um capital social de 10 000 €</strong> + <br /> + <a href={GOOGLE_MAPS_URL} target="_blank" rel="noopener noreferrer"> + 16 Esplanade du Champ de Mars, 35000 Rennes + </a> + </p> + <p> + +33 (0)9 72 14 95 51 + <br /> + <a href="mailto:hello@fca.gg">hello@fca.gg</a> + </p> + <p> + SIRET:{' '} + <a + href="https://annuaire-entreprises.data.gouv.fr/etablissement/98385625300023" + target="_blank" + rel="noopener noreferrer"> + 983 856 253 00023 + </a> + <br /> + IVA:{' '} + <a + href="https://ec.europa.eu/taxation_customs/vies/#/vat-validation" + target="_blank" + rel="noopener noreferrer"> + FR03983856253 + </a> + </p> + <p> + Marca comercial: <strong>RaidProtect</strong> + <br /> + <a href="mailto:contact@raidprotect.bot">contact@raidprotect.bot</a> + </p> + </section> + <hr /> + <section> + <h2>Alojamento</h2> + <p> + O Site é alojado pela empresa Hetzner (Hetzner Online GmbH), com sede em Industriestr. + 25 - 91710 Gunzenhausen - Germany, e-mail: info@hetzner.com e telefone: +49 (0)9831 + 505-0. + </p> + </section> + </LegalLayout> + ); +} diff --git a/i18n/pt/docusaurus-plugin-content-pages/privacy.mdx b/i18n/pt/docusaurus-plugin-content-pages/privacy.mdx deleted file mode 100644 index 9bae863..0000000 --- a/i18n/pt/docusaurus-plugin-content-pages/privacy.mdx +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Política de privacidade | RaidProtect -description: Descubra como o RaidProtect protege os seus dados pessoais e assegura a segurança da sua privacidade quando utiliza os nossos serviços. Política de privacidade detalhada. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Política de privacidade" - lastUpdated="Última atualização: 1 de fevereiro de 2025" - description="Descubra como o RaidProtect protege os seus dados pessoais e assegura a segurança da sua privacidade quando utiliza os nossos serviços. Política de privacidade detalhada."> - -A presente Política de Privacidade descreve as modalidades de recolha, utilização e proteção dos dados pessoais no âmbito dos serviços propostos pela aplicação Discord **RaidProtect** e pelo site associado. - -Ao utilizar estes serviços, aceita as práticas descritas nesta Política de Privacidade. A **SAS French Community Agency**, **RaidProtect**, compromete-se a respeitar e a proteger a sua privacidade em conformidade com a legislação em vigor, nomeadamente o Regulamento Geral sobre a Proteção de Dados (RGPD) e a **lei francesa sobre informática e liberdades**. - -## 1. Dados recolhidos - -Para assegurar o funcionamento dos serviços propostos, a aplicação Discord **RaidProtect** e o site recolhem e tratam as seguintes categorias de dados: - -### 1.1. Dados recolhidos pela Aplicação - -- **Configuração dos servidores Discord**: informações sobre os parâmetros dos servidores que utilizam o **RaidProtect** (por exemplo: cargos, permissões, canais configurados). -- **Mensagens de texto**: qualquer mensagem enviada por um utilizador pode ser recolhida temporariamente, no âmbito dos serviços de moderação. -- **Eventos do Discord**: eventos transmitidos pelo Discord, tais como a chegada ou saída de novos membros, as alterações de cargos ou a eliminação de mensagens. - -### 1.2. Dados recolhidos pelo site - -- **Dados de identificação**: informações fornecidas pelos utilizadores no momento da inscrição ou da utilização dos serviços em linha (por exemplo: endereço de e-mail, identificadores Discord). -- **Dados de navegação**: informações sobre a interação com o site, tais como o endereço IP, o tipo de navegador ou os cookies. - -## 2. Finalidades do tratamento - -Os dados recolhidos são utilizados exclusivamente para: - -1. Assegurar o bom funcionamento dos serviços propostos (por exemplo: moderação dos servidores Discord, análise dos eventos relacionados com a comunidade). -2. Garantir uma experiência de utilizador otimizada e personalizada. -3. Proteger os servidores Discord aplicando as regras definidas pelos administradores. -4. Manter e melhorar os serviços analisando a sua utilização. - -Os dados não são utilizados para fins comerciais ou publicitários. - -## 3. Conservação dos dados - -Os dados pessoais recolhidos são conservados apenas durante o tempo necessário à realização das finalidades definidas acima. Decorrido este período, são eliminados ou anonimizados. - -- **Mensagens de texto**: conservadas temporariamente para tratamento e, em seguida, eliminadas de forma definitiva. -- **Dados de configuração dos servidores**: conservados enquanto o servidor utilizar os serviços do **RaidProtect**. -- **Dados de navegação**: conservados em conformidade com as disposições legais aplicáveis. - -## 4. Partilha dos dados - -Os dados recolhidos **nunca são partilhados com terceiros**, exceto nos seguintes casos: - -1. **Parceiros técnicos**: parceiros necessários ao fornecimento dos serviços (por exemplo, fornecedores de alojamento ou de serviços em nuvem). -2. **Obrigações legais**: se a divulgação dos dados for exigida pela lei, por uma autoridade judicial ou regulamentar. - -## 5. Segurança dos dados - -O **RaidProtect** implementa todas as medidas técnicas e organizacionais necessárias para proteger os dados pessoais contra acessos não autorizados, perdas, destruições ou alterações. As principais medidas incluem: - -- A cifragem dos dados sensíveis. -- Um controlo estrito dos acessos aos dados (autenticação e registo de operações). -- Uma infraestrutura alojada em servidores seguros. - -## 6. Direitos dos utilizadores - -Em conformidade com o RGPD, os utilizadores dispõem dos seguintes direitos sobre os seus dados pessoais: - -- **Direito de acesso**: obter uma cópia dos dados pessoais tratados. -- **Direito de retificação**: corrigir dados inexatos ou incompletos. -- **Direito ao apagamento**: solicitar a eliminação dos dados em determinadas condições. -- **Direito à limitação**: limitar o tratamento dos seus dados. -- **Direito de oposição**: recusar o tratamento dos seus dados por motivos legítimos. -- **Direito à portabilidade**: receber os dados pessoais num formato estruturado. - -Para exercer estes direitos ou colocar questões sobre a gestão dos dados, os utilizadores podem contactar o encarregado da proteção de dados (DPO) em [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot). - -## 7. Modificação da Política de Privacidade - -A presente Política de Privacidade pode ser atualizada a qualquer momento para refletir alterações nos serviços ou na regulamentação aplicável. Qualquer alteração será publicada no site e, se necessário, comunicada através da Aplicação. Ao continuarem a utilizar os serviços após a atualização da política, os utilizadores aceitam as alterações introduzidas. - -## 8. Contacto - -Se tiver questões ou preocupações relativamente à nossa política de privacidade ou à forma como protegemos os seus dados pessoais, não hesite em contactar-nos em [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot). - -</LegalLayout> diff --git a/i18n/pt/docusaurus-plugin-content-pages/privacy.tsx b/i18n/pt/docusaurus-plugin-content-pages/privacy.tsx new file mode 100644 index 0000000..b8ecd5d --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-pages/privacy.tsx @@ -0,0 +1,188 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +export default function Privacy(): ReactNode { + return ( + <LegalLayout + title="Política de privacidade" + lastUpdated="Última atualização: 1 de fevereiro de 2025" + description="Descubra como o RaidProtect protege os seus dados pessoais e assegura a segurança da sua privacidade quando utiliza os nossos serviços. Política de privacidade detalhada."> + <section> + <p> + A presente Política de Privacidade descreve as modalidades de recolha, utilização e + proteção dos dados pessoais no âmbito dos serviços propostos pela aplicação Discord{' '} + <strong>RaidProtect</strong> e pelo site associado. + </p> + <p> + Ao utilizar estes serviços, aceita as práticas descritas nesta Política de Privacidade. + A <strong>SAS French Community Agency</strong>, <strong>RaidProtect</strong>, + compromete-se a respeitar e a proteger a sua privacidade em conformidade com a + legislação em vigor, nomeadamente o Regulamento Geral sobre a Proteção de Dados (RGPD) + e a <strong>lei francesa sobre informática e liberdades</strong>. + </p> + </section> + <section> + <h2>1. Dados recolhidos</h2> + <p> + Para assegurar o funcionamento dos serviços propostos, a aplicação Discord{' '} + <strong>RaidProtect</strong> e o site recolhem e tratam as seguintes categorias de + dados: + </p> + <h3>1.1. Dados recolhidos pela Aplicação</h3> + <ul> + <li> + <strong>Configuração dos servidores Discord</strong>: informações sobre os parâmetros + dos servidores que utilizam o <strong>RaidProtect</strong> (por exemplo: cargos, + permissões, canais configurados). + </li> + <li> + <strong>Mensagens de texto</strong>: qualquer mensagem enviada por um utilizador pode + ser recolhida temporariamente, no âmbito dos serviços de moderação. + </li> + <li> + <strong>Eventos do Discord</strong>: eventos transmitidos pelo Discord, tais como a + chegada ou saída de novos membros, as alterações de cargos ou a eliminação de + mensagens. + </li> + </ul> + <h3>1.2. Dados recolhidos pelo site</h3> + <ul> + <li> + <strong>Dados de identificação</strong>: informações fornecidas pelos utilizadores no + momento da inscrição ou da utilização dos serviços em linha (por exemplo: endereço de + e-mail, identificadores Discord). + </li> + <li> + <strong>Dados de navegação</strong>: informações sobre a interação com o site, tais + como o endereço IP, o tipo de navegador ou os cookies. + </li> + </ul> + </section> + <section> + <h2>2. Finalidades do tratamento</h2> + <p>Os dados recolhidos são utilizados exclusivamente para:</p> + <ol> + <li> + Assegurar o bom funcionamento dos serviços propostos (por exemplo: moderação dos + servidores Discord, análise dos eventos relacionados com a comunidade). + </li> + <li>Garantir uma experiência de utilizador otimizada e personalizada.</li> + <li>Proteger os servidores Discord aplicando as regras definidas pelos administradores.</li> + <li>Manter e melhorar os serviços analisando a sua utilização.</li> + </ol> + <p>Os dados não são utilizados para fins comerciais ou publicitários.</p> + </section> + <section> + <h2>3. Conservação dos dados</h2> + <p> + Os dados pessoais recolhidos são conservados apenas durante o tempo necessário à + realização das finalidades definidas acima. Decorrido este período, são eliminados ou + anonimizados. + </p> + <ul> + <li> + <strong>Mensagens de texto</strong>: conservadas temporariamente para tratamento e, em + seguida, eliminadas de forma definitiva. + </li> + <li> + <strong>Dados de configuração dos servidores</strong>: conservados enquanto o servidor + utilizar os serviços do <strong>RaidProtect</strong>. + </li> + <li> + <strong>Dados de navegação</strong>: conservados em conformidade com as disposições + legais aplicáveis. + </li> + </ul> + </section> + <section> + <h2>4. Partilha dos dados</h2> + <p> + Os dados recolhidos <strong>nunca são partilhados com terceiros</strong>, exceto nos + seguintes casos: + </p> + <ol> + <li> + <strong>Parceiros técnicos</strong>: parceiros necessários ao fornecimento dos + serviços (por exemplo, fornecedores de alojamento ou de serviços em nuvem). + </li> + <li> + <strong>Obrigações legais</strong>: se a divulgação dos dados for exigida pela lei, + por uma autoridade judicial ou regulamentar. + </li> + </ol> + </section> + <section> + <h2>5. Segurança dos dados</h2> + <p> + O <strong>RaidProtect</strong> implementa todas as medidas técnicas e organizacionais + necessárias para proteger os dados pessoais contra acessos não autorizados, perdas, + destruições ou alterações. As principais medidas incluem: + </p> + <ul> + <li>A cifragem dos dados sensíveis.</li> + <li>Um controlo estrito dos acessos aos dados (autenticação e registo de operações).</li> + <li>Uma infraestrutura alojada em servidores seguros.</li> + </ul> + </section> + <section> + <h2>6. Direitos dos utilizadores</h2> + <p> + Em conformidade com o RGPD, os utilizadores dispõem dos seguintes direitos sobre os seus + dados pessoais: + </p> + <ul> + <li> + <strong>Direito de acesso</strong>: obter uma cópia dos dados pessoais tratados. + </li> + <li> + <strong>Direito de retificação</strong>: corrigir dados inexatos ou incompletos. + </li> + <li> + <strong>Direito ao apagamento</strong>: solicitar a eliminação dos dados em + determinadas condições. + </li> + <li> + <strong>Direito à limitação</strong>: limitar o tratamento dos seus dados. + </li> + <li> + <strong>Direito de oposição</strong>: recusar o tratamento dos seus dados por motivos + legítimos. + </li> + <li> + <strong>Direito à portabilidade</strong>: receber os dados pessoais num formato + estruturado. + </li> + </ul> + <p> + Para exercer estes direitos ou colocar questões sobre a gestão dos dados, os + utilizadores podem contactar o encarregado da proteção de dados (DPO) em{' '} + <a href="mailto:dpo@raidprotect.bot"> + <strong>dpo@raidprotect.bot</strong> + </a> + . + </p> + </section> + <section> + <h2>7. Modificação da Política de Privacidade</h2> + <p> + A presente Política de Privacidade pode ser atualizada a qualquer momento para refletir + alterações nos serviços ou na regulamentação aplicável. Qualquer alteração será + publicada no site e, se necessário, comunicada através da Aplicação. Ao continuarem a + utilizar os serviços após a atualização da política, os utilizadores aceitam as + alterações introduzidas. + </p> + </section> + <section> + <h2>8. Contacto</h2> + <p> + Se tiver questões ou preocupações relativamente à nossa política de privacidade ou à + forma como protegemos os seus dados pessoais, não hesite em contactar-nos em{' '} + <a href="mailto:dpo@raidprotect.bot"> + <strong>dpo@raidprotect.bot</strong> + </a> + . + </p> + </section> + </LegalLayout> + ); +} diff --git a/i18n/pt/docusaurus-plugin-content-pages/terms.mdx b/i18n/pt/docusaurus-plugin-content-pages/terms.mdx deleted file mode 100644 index 7b2471e..0000000 --- a/i18n/pt/docusaurus-plugin-content-pages/terms.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Termos de utilização | RaidProtect -description: Consulte as nossas condições de utilização para compreender os direitos de propriedade intelectual, hiperligações, gestão dos dados pessoais e a nossa responsabilidade sobre o site e o bot RaidProtect. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Termos de utilização" - lastUpdated="Última atualização: 1 de fevereiro de 2025" - description="Consulte as nossas condições de utilização para compreender os direitos de propriedade intelectual, hiperligações, gestão dos dados pessoais e a nossa responsabilidade sobre o site e o bot RaidProtect."> - -Ao adicionar o RaidProtect ao seu servidor Discord, reconhece ter lido e aceitado os Termos de Utilização. Se não aceitar alguma destas condições, deverá deixar de utilizar os nossos serviços. - -## 1. Propriedade intelectual - -O presente site, a sua estrutura geral, a marca comercial RaidProtect, bem como os textos, imagens, animações, logótipos e qualquer outro elemento que o compõe, são propriedade exclusiva da SAS French Community Agency ou dos seus parceiros e estão protegidos pelas leis francesas e internacionais relativas à propriedade intelectual. Qualquer reprodução, representação, utilização ou adaptação, sob qualquer forma, da totalidade ou de parte destes elementos, incluindo o software, sem a autorização escrita prévia da SAS French Community Agency, é estritamente proibida e constituiria uma contrafação. - -As mesmas disposições aplicam-se às funcionalidades e ao código-fonte da Aplicação, igualmente protegidos pelos direitos de propriedade intelectual. Qualquer tentativa de reproduzir, modificar ou utilizar sem autorização as funcionalidades da Aplicação é proibida e suscetível de procedimento judicial. - -## 2. Hiperligações - -Qualquer ligação ao Site está sujeita a autorização escrita e prévia da **SAS French Community Agency**. Em qualquer caso, a **SAS French Community Agency** reserva-se o direito de pôr termo a esta autorização em qualquer momento se considerar que a ligação estabelecida com o Site é suscetível de prejudicar os interesses deste último. - -Esclarece-se ainda que os sites que apresentem uma hiperligação ao presente Site (hiperligações que apontem para o Site ou estabelecidas a partir dele) não estão sob o controlo da **SAS French Community Agency**, do **RaidProtect** nem das suas sociedades afiliadas, que declinam toda a responsabilidade quanto ao seu conteúdo. - -## 3. Utilização do serviço - -Os nossos serviços, incluindo a Aplicação, são de utilização livre para fins pessoais ou comerciais. Reservamo-nos o direito de proibir a utilização dos nossos serviços em caso de utilização que consideremos inadequada ou suscetível de prejudicar outros Utilizadores. - -## 4. Responsabilidade - -### 4.1. Site - -A **SAS French Community Agency**, o **RaidProtect** e as suas sociedades afiliadas não poderão ser responsabilizados por quaisquer danos diretos ou indiretos resultantes da utilização do Site ou das informações nele contidas. A **SAS French Community Agency** não garante a exatidão nem a exaustividade das informações apresentadas no Site e reserva-se o direito de as modificar ou eliminar a qualquer momento, sem aviso prévio. - -### 4.2. Aplicação - -A Aplicação **RaidProtect** é fornecida tal como está, sem qualquer garantia, expressa ou implícita. A **SAS French Community Agency** não pode ser responsabilizada pelas consequências de uma utilização incorreta ou abusiva da Aplicação, nem pelos eventuais danos resultantes de um funcionamento incorreto temporário ou permanente. - -Os administradores de servidores Discord que utilizam o **RaidProtect** são os únicos responsáveis pelas configurações efetuadas e pelas decisões tomadas na sequência das ações automatizadas da Aplicação (por exemplo, banimentos ou eliminação de mensagens). Em caso de violação das condições de utilização do Discord ou da legislação em vigor, os administradores do servidor em causa assumem a inteira responsabilidade. - -## 5. Modificação dos Termos de Utilização - -Os presentes Termos de Utilização podem ser alterados a qualquer momento para refletir alterações nos serviços ou na regulamentação aplicável. Qualquer alteração será publicada no site e, se necessário, comunicada através da Aplicação. Ao continuarem a utilizar os serviços após a atualização dos Termos, os utilizadores aceitam as alterações introduzidas. - -## 6. Lei aplicável e jurisdição - -Os presentes Termos de Utilização regem-se pelo direito francês. Em caso de litígio, e após uma tentativa de resolução amigável, é atribuída competência aos tribunais competentes do foro de Paris, salvo disposição legal em contrário. - -</LegalLayout> diff --git a/i18n/pt/docusaurus-plugin-content-pages/terms.tsx b/i18n/pt/docusaurus-plugin-content-pages/terms.tsx new file mode 100644 index 0000000..c5fe99b --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-pages/terms.tsx @@ -0,0 +1,109 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +export default function Terms(): ReactNode { + return ( + <LegalLayout + title="Termos de utilização" + lastUpdated="Última atualização: 1 de fevereiro de 2025" + description="Consulte as nossas condições de utilização para compreender os direitos de propriedade intelectual, hiperligações, gestão dos dados pessoais e a nossa responsabilidade sobre o site e o bot RaidProtect."> + <section> + <p> + Ao adicionar o RaidProtect ao seu servidor Discord, reconhece ter lido e aceitado os + Termos de Utilização. Se não aceitar alguma destas condições, deverá deixar de utilizar + os nossos serviços. + </p> + </section> + <section> + <h2>1. Propriedade intelectual</h2> + <p> + O presente site, a sua estrutura geral, a marca comercial RaidProtect, bem como os + textos, imagens, animações, logótipos e qualquer outro elemento que o compõe, são + propriedade exclusiva da SAS French Community Agency ou dos seus parceiros e estão + protegidos pelas leis francesas e internacionais relativas à propriedade intelectual. + Qualquer reprodução, representação, utilização ou adaptação, sob qualquer forma, da + totalidade ou de parte destes elementos, incluindo o software, sem a autorização escrita + prévia da SAS French Community Agency, é estritamente proibida e constituiria uma + contrafação. + </p> + <p> + As mesmas disposições aplicam-se às funcionalidades e ao código-fonte da Aplicação, + igualmente protegidos pelos direitos de propriedade intelectual. Qualquer tentativa de + reproduzir, modificar ou utilizar sem autorização as funcionalidades da Aplicação é + proibida e suscetível de procedimento judicial. + </p> + </section> + <section> + <h2>2. Hiperligações</h2> + <p> + Qualquer ligação ao Site está sujeita a autorização escrita e prévia da{' '} + <strong>SAS French Community Agency</strong>. Em qualquer caso, a{' '} + <strong>SAS French Community Agency</strong> reserva-se o direito de pôr termo a esta + autorização em qualquer momento se considerar que a ligação estabelecida com o Site é + suscetível de prejudicar os interesses deste último. + </p> + <p> + Esclarece-se ainda que os sites que apresentem uma hiperligação ao presente Site + (hiperligações que apontem para o Site ou estabelecidas a partir dele) não estão sob o + controlo da <strong>SAS French Community Agency</strong>, do <strong>RaidProtect</strong>{' '} + nem das suas sociedades afiliadas, que declinam toda a responsabilidade quanto ao seu + conteúdo. + </p> + </section> + <section> + <h2>3. Utilização do serviço</h2> + <p> + Os nossos serviços, incluindo a Aplicação, são de utilização livre para fins pessoais ou + comerciais. Reservamo-nos o direito de proibir a utilização dos nossos serviços em caso + de utilização que consideremos inadequada ou suscetível de prejudicar outros + Utilizadores. + </p> + </section> + <section> + <h2>4. Responsabilidade</h2> + <h3>4.1. Site</h3> + <p> + A <strong>SAS French Community Agency</strong>, o <strong>RaidProtect</strong> e as suas + sociedades afiliadas não poderão ser responsabilizados por quaisquer danos diretos ou + indiretos resultantes da utilização do Site ou das informações nele contidas. A{' '} + <strong>SAS French Community Agency</strong> não garante a exatidão nem a exaustividade + das informações apresentadas no Site e reserva-se o direito de as modificar ou eliminar + a qualquer momento, sem aviso prévio. + </p> + <h3>4.2. Aplicação</h3> + <p> + A Aplicação <strong>RaidProtect</strong> é fornecida tal como está, sem qualquer + garantia, expressa ou implícita. A <strong>SAS French Community Agency</strong> não pode + ser responsabilizada pelas consequências de uma utilização incorreta ou abusiva da + Aplicação, nem pelos eventuais danos resultantes de um funcionamento incorreto temporário + ou permanente. + </p> + <p> + Os administradores de servidores Discord que utilizam o <strong>RaidProtect</strong> são + os únicos responsáveis pelas configurações efetuadas e pelas decisões tomadas na + sequência das ações automatizadas da Aplicação (por exemplo, banimentos ou eliminação de + mensagens). Em caso de violação das condições de utilização do Discord ou da legislação + em vigor, os administradores do servidor em causa assumem a inteira responsabilidade. + </p> + </section> + <section> + <h2>5. Modificação dos Termos de Utilização</h2> + <p> + Os presentes Termos de Utilização podem ser alterados a qualquer momento para refletir + alterações nos serviços ou na regulamentação aplicável. Qualquer alteração será + publicada no site e, se necessário, comunicada através da Aplicação. Ao continuarem a + utilizar os serviços após a atualização dos Termos, os utilizadores aceitam as + alterações introduzidas. + </p> + </section> + <section> + <h2>6. Lei aplicável e jurisdição</h2> + <p> + Os presentes Termos de Utilização regem-se pelo direito francês. Em caso de litígio, e + após uma tentativa de resolução amigável, é atribuída competência aos tribunais + competentes do foro de Paris, salvo disposição legal em contrário. + </p> + </section> + </LegalLayout> + ); +} diff --git a/src/pages/cookies.mdx b/src/pages/cookies.mdx deleted file mode 100644 index 0e03985..0000000 --- a/src/pages/cookies.mdx +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Politique des cookies | RaidProtect -description: Découvrez comment RaidProtect protège votre vie privée en n'utilisant pas de cookies pour une navigation sécurisée et privée. Consultez notre politique. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Politique d'utilisation des cookies" - lastUpdated="Dernière mise à jour : 1 février 2025" - description="Découvrez comment RaidProtect protège votre vie privée en n'utilisant pas de cookies pour une navigation sécurisée et privée. Consultez notre politique."> - -Chez RaidProtect, nous nous engageons à protéger la vie privée et les données de nos utilisateurs. Dans le cadre de cet engagement, nous vous informons de notre politique concernant l'utilisation des cookies sur notre site web. - -## 1. Utilisation des cookies - -Nous tenons à être transparents concernant les technologies que nous utilisons. À cet effet, nous vous informons que notre site web **n'utilise pas de cookies**. Les cookies sont de petits fichiers texte qui peuvent être utilisés par les sites web pour rendre l'expérience utilisateur plus efficace. Cependant, dans le souci de préserver au maximum la confidentialité de nos utilisateurs, nous avons choisi de ne pas les employer sur notre plateforme. - -## 2. Qu'est-ce que cela signifie pour vous ? - -L'absence d'utilisation de cookies signifie que vous pouvez naviguer sur notre site web sans qu'aucune information concernant votre visite ne soit enregistrée ou analysée. Cette démarche vise à assurer une expérience de navigation privée et sécurisée pour tous nos utilisateurs. - -## 3. Comment nous protégeons votre vie privée ? - -Outre notre politique de non-utilisation de cookies, nous prenons d'autres mesures pour protéger votre vie privée et vos données personnelles. Nous nous conformons strictement aux lois et réglementations en vigueur sur la protection des données et mettons en œuvre des pratiques de sécurité de l'information de pointe pour prévenir tout accès non autorisé, modification, divulgation ou destruction de vos informations personnelles. - -## 4. Modifications de la politique d'utilisation des cookies - -Nous nous réservons le droit de modifier cette politique d'utilisation des cookies à tout moment. Toute modification entrera en vigueur immédiatement après sa publication sur notre site web. Nous vous encourageons à consulter régulièrement cette page pour rester informés de notre politique en matière de cookies. - -## 5. Contact - -Si vous avez des questions ou des préoccupations concernant notre politique d'utilisation des cookies ou la manière dont nous protégeons vos données personnelles, n'hésitez pas à nous contacter à [dpo@raidprotect.bot](mailto:dpo@raidprotect.bot). - -</LegalLayout> diff --git a/src/pages/cookies.tsx b/src/pages/cookies.tsx new file mode 100644 index 0000000..2a5c78c --- /dev/null +++ b/src/pages/cookies.tsx @@ -0,0 +1,67 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +export default function Cookies(): ReactNode { + return ( + <LegalLayout + title="Politique d'utilisation des cookies" + lastUpdated="Dernière mise à jour : 1 février 2025" + description="Découvrez comment RaidProtect protège votre vie privée en n'utilisant pas de cookies pour une navigation sécurisée et privée. Consultez notre politique."> + <section> + <p> + Chez RaidProtect, nous nous engageons à protéger la vie privée et les données de nos + utilisateurs. Dans le cadre de cet engagement, nous vous informons de notre politique + concernant l'utilisation des cookies sur notre site web. + </p> + </section> + <section> + <h2>1. Utilisation des cookies</h2> + <p> + Nous tenons à être transparents concernant les technologies que nous utilisons. À cet + effet, nous vous informons que notre site web <strong>n'utilise pas de cookies</strong>. + Les cookies sont de petits fichiers texte qui peuvent être utilisés par les sites web + pour rendre l'expérience utilisateur plus efficace. Cependant, dans le souci de préserver + au maximum la confidentialité de nos utilisateurs, nous avons choisi de ne pas les + employer sur notre plateforme. + </p> + </section> + <section> + <h2>2. Qu'est-ce que cela signifie pour vous ?</h2> + <p> + L'absence d'utilisation de cookies signifie que vous pouvez naviguer sur notre site web + sans qu'aucune information concernant votre visite ne soit enregistrée ou analysée. Cette + démarche vise à assurer une expérience de navigation privée et sécurisée pour tous nos + utilisateurs. + </p> + </section> + <section> + <h2>3. Comment nous protégeons votre vie privée ?</h2> + <p> + Outre notre politique de non-utilisation de cookies, nous prenons d'autres mesures pour + protéger votre vie privée et vos données personnelles. Nous nous conformons strictement + aux lois et réglementations en vigueur sur la protection des données et mettons en œuvre + des pratiques de sécurité de l'information de pointe pour prévenir tout accès non + autorisé, modification, divulgation ou destruction de vos informations personnelles. + </p> + </section> + <section> + <h2>4. Modifications de la politique d'utilisation des cookies</h2> + <p> + Nous nous réservons le droit de modifier cette politique d'utilisation des cookies à tout + moment. Toute modification entrera en vigueur immédiatement après sa publication sur + notre site web. Nous vous encourageons à consulter régulièrement cette page pour rester + informés de notre politique en matière de cookies. + </p> + </section> + <section> + <h2>5. Contact</h2> + <p> + Si vous avez des questions ou des préoccupations concernant notre politique + d'utilisation des cookies ou la manière dont nous protégeons vos données personnelles, + n'hésitez pas à nous contacter à{' '} + <a href="mailto:dpo@raidprotect.bot">dpo@raidprotect.bot</a>. + </p> + </section> + </LegalLayout> + ); +} diff --git a/src/pages/legal.mdx b/src/pages/legal.mdx deleted file mode 100644 index 32c690b..0000000 --- a/src/pages/legal.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Mentions légales | RaidProtect -description: Retrouvez les mentions légales du bot Discord RaidProtect (RP), éditeur du site raidprotect.bot. Informations générales et cadre légal d'utilisation. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Mentions légales" - lastUpdated="Dernière mise à jour : 1 février 2025" - description="Retrouvez les mentions légales du bot Discord RaidProtect (RP), éditeur du site raidprotect.bot. Informations générales et cadre légal d'utilisation."> - -Le site **RaidProtect** accessible aux adresses « raidprotect.bot » et « docs.raidprotect.bot » (ci-après dénommé « Site ») et l'application RaidProtect accessible depuis Discord « 466578580449525760 » (ci-après dénommé « Application ») sont édités par la **SAS French Community Agency**. Les informations communiquées sur le Site sont présentées à titre indicatif et général et ne prétendent aucunement à l'exhaustivité. Malgré tous les soins et la rigueur apportés à la réalisation du Site et à son actualisation régulière, des erreurs peuvent s'être glissées dans les informations présentées. Les utilisateurs du Site procéderont donc à toutes vérifications utiles et sont seuls responsables de l'utilisation qu'ils font des informations accessibles. - -Responsable publication : Arthur Battais - ---- - -## Société - -**SAS French Community Agency** -**Sigle : FCA** -**Au capital social de 10 000 €** -[16 Esplanade du Champ de Mars, 35000 Rennes](https://www.google.com/maps/place/16+Esp.+du+Champ+de+Mars,+35000+Rennes/@48.1044838,-1.675702,17z/data=!3m1!4b1!4m6!3m5!1s0x480edfca43c9b53b:0xdea9cc38f95f9839!8m2!3d48.1044838!4d-1.675702!16s%2Fg%2F11csm9r096?sa=X&ved=2ahUKEwiZ0ICZyYSEAxWpUqQEHTq1BdcQ8gF6BAgdEAA&entry=tts) - -+33 (0)9 72 14 95 51 -[hello@fca.gg](mailto:hello@fca.gg) - -SIRET : [983 856 253 00023](https://annuaire-entreprises.data.gouv.fr/etablissement/98385625300023) -TVA : [FR03983856253](https://ec.europa.eu/taxation_customs/vies/#/vat-validation) - -Marque commerciale : **RaidProtect** -[contact@raidprotect.bot](mailto:contact@raidprotect.bot) - ---- - -## Hébergement - -L'hébergeur du Site est la société Hetzner (Hetzner Online GmbH), dont le siège social est situé au Industriestr. 25 - 91710 Gunzenhausen - Germany, avec le mail : info@hetzner.com et tél : +49 (0)9831 505-0. - -</LegalLayout> diff --git a/src/pages/legal.tsx b/src/pages/legal.tsx new file mode 100644 index 0000000..38c8113 --- /dev/null +++ b/src/pages/legal.tsx @@ -0,0 +1,80 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +const GOOGLE_MAPS_URL = + 'https://www.google.com/maps/place/16+Esp.+du+Champ+de+Mars,+35000+Rennes/@48.1044838,-1.675702,17z/data=!3m1!4b1!4m6!3m5!1s0x480edfca43c9b53b:0xdea9cc38f95f9839!8m2!3d48.1044838!4d-1.675702!16s%2Fg%2F11csm9r096?sa=X&ved=2ahUKEwiZ0ICZyYSEAxWpUqQEHTq1BdcQ8gF6BAgdEAA&entry=tts'; + +export default function Legal(): ReactNode { + return ( + <LegalLayout + title="Mentions légales" + lastUpdated="Dernière mise à jour : 1 février 2025" + description="Retrouvez les mentions légales du bot Discord RaidProtect (RP), éditeur du site raidprotect.bot. Informations générales et cadre légal d'utilisation."> + <section> + <p> + Le site <strong>RaidProtect</strong> accessible aux adresses « raidprotect.bot » et « + docs.raidprotect.bot » (ci-après dénommé « Site ») et l'application RaidProtect + accessible depuis Discord « 466578580449525760 » (ci-après dénommé « Application ») sont + édités par la <strong>SAS French Community Agency</strong>. Les informations communiquées + sur le Site sont présentées à titre indicatif et général et ne prétendent aucunement à + l'exhaustivité. Malgré tous les soins et la rigueur apportés à la réalisation du Site et + à son actualisation régulière, des erreurs peuvent s'être glissées dans les informations + présentées. Les utilisateurs du Site procéderont donc à toutes vérifications utiles et + sont seuls responsables de l'utilisation qu'ils font des informations accessibles. + </p> + <p>Responsable publication : Arthur Battais</p> + </section> + <hr /> + <section> + <h2>Société</h2> + <p> + <strong>SAS French Community Agency</strong> + <br /> + <strong>Sigle : FCA</strong> + <br /> + <strong>Au capital social de 10 000 €</strong> + <br /> + <a href={GOOGLE_MAPS_URL} target="_blank" rel="noopener noreferrer"> + 16 Esplanade du Champ de Mars, 35000 Rennes + </a> + </p> + <p> + +33 (0)9 72 14 95 51 + <br /> + <a href="mailto:hello@fca.gg">hello@fca.gg</a> + </p> + <p> + SIRET :{' '} + <a + href="https://annuaire-entreprises.data.gouv.fr/etablissement/98385625300023" + target="_blank" + rel="noopener noreferrer"> + 983 856 253 00023 + </a> + <br /> + TVA :{' '} + <a + href="https://ec.europa.eu/taxation_customs/vies/#/vat-validation" + target="_blank" + rel="noopener noreferrer"> + FR03983856253 + </a> + </p> + <p> + Marque commerciale : <strong>RaidProtect</strong> + <br /> + <a href="mailto:contact@raidprotect.bot">contact@raidprotect.bot</a> + </p> + </section> + <hr /> + <section> + <h2>Hébergement</h2> + <p> + L'hébergeur du Site est la société Hetzner (Hetzner Online GmbH), dont le siège social + est situé au Industriestr. 25 - 91710 Gunzenhausen - Germany, avec le mail : + info@hetzner.com et tél : +49 (0)9831 505-0. + </p> + </section> + </LegalLayout> + ); +} diff --git a/src/pages/privacy.mdx b/src/pages/privacy.mdx deleted file mode 100644 index b479b13..0000000 --- a/src/pages/privacy.mdx +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Politique de confidentialité | RaidProtect -description: Découvrez comment RaidProtect protège vos données personnelles et assure la sécurité de votre vie privée en utilisant nos services. Politique de confidentialité détaillée. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Politique de confidentialité" - lastUpdated="Dernière mise à jour : 1 février 2025" - description="Découvrez comment RaidProtect protège vos données personnelles et assure la sécurité de votre vie privée en utilisant nos services. Politique de confidentialité détaillée."> - -La présente Politique de Confidentialité décrit les modalités de collecte, d'utilisation, et de protection des données personnelles dans le cadre des services proposés par l'application Discord **RaidProtect** et le site web associé. - -En utilisant ces services, vous acceptez les pratiques décrites dans cette Politique de Confidentialité. **SAS French Community Agency**, **RaidProtect**, s'engage à respecter et à protéger votre vie privée conformément à la législation en vigueur, notamment le Règlement Général sur la Protection des Données (RGPD) et la **loi informatique et libertés**. - -## 1. Données collectées - -Afin d'assurer le fonctionnement des services proposés, l'application Discord **RaidProtect** et le site web collectent et traitent les catégories de données suivantes : - -### 1.1. Données collectées par l'Application - -- **Configuration des serveurs Discord** : informations sur les paramètres des serveurs utilisant **RaidProtect** (ex : rôles, permissions, canaux configurés). -- **Messages textuels** : tout message envoyé par un utilisateur peut être collecté temporairement, dans le cadre des services de modération. -- **Événements Discord** : événements transmis par Discord, tels que l'arrivée ou le départ de nouveaux membres, les modifications de rôles ou les suppressions de messages. - -### 1.2. Données collectées par le site web - -- **Données d'identification** : informations fournies par les utilisateurs lors de l'inscription ou de l'utilisation des services en ligne (ex : adresse e-mail, identifiants Discord). -- **Données de navigation** : informations sur l'interaction avec le site web, telles que l'adresse IP, le type de navigateur ou les cookies. - -## 2. Finalités du traitement - -Les données collectées sont exclusivement utilisées pour : - -1. Assurer le bon fonctionnement des services proposés (par exemple : modération des serveurs Discord, analyse des événements liés à la communauté). -2. Garantir une expérience utilisateur optimale et personnalisée. -3. Sécuriser les serveurs Discord en appliquant des règles définies par les administrateurs. -4. Maintenir et améliorer les services en analysant l'utilisation. - -Les données ne sont pas utilisées à des fins commerciales ou publicitaires. - -## 3. Conservation des données - -Les données personnelles collectées sont conservées uniquement pendant la durée nécessaire à la réalisation des finalités définies ci-dessus. Une fois cette période écoulée, elles sont supprimées ou anonymisées. - -- **Messages textuels** : conservés temporairement pour traitement, puis supprimés de manière définitive. -- **Données de configuration des serveurs** : conservées aussi longtemps que le serveur utilise les services de **RaidProtect**. -- **Données de navigation** : conservées conformément aux dispositions légales applicables. - -## 4. Partage des données - -Les données collectées ne sont **jamais partagées avec des tiers**, sauf dans les cas suivants : - -1. **Partenaires techniques** : les partenaires nécessaires à la fourniture des services (par exemple, les hébergeurs ou fournisseurs de services cloud). -2. **Obligations légales** : si la divulgation des données est requise par la loi, une autorité judiciaire ou réglementaire. - -## 5. Sécurité des données - -**RaidProtect** met en œuvre toutes les mesures techniques et organisationnelles nécessaires pour protéger les données personnelles contre les accès non autorisés, les pertes, les destructions ou les altérations. Les principales mesures incluent : - -- Le chiffrement des données sensibles. -- Un contrôle strict des accès aux données (authentification et journalisation). -- Une infrastructure hébergée sur des serveurs sécurisés. - -## 6. Droits des utilisateurs - -Conformément au RGPD, les utilisateurs disposent des droits suivants sur leurs données personnelles : - -- **Droit d'accès** : obtenir une copie des données personnelles traitées. -- **Droit de rectification** : corriger des données inexactes ou incomplètes. -- **Droit à l'effacement** : demander la suppression des données dans certaines conditions. -- **Droit à la limitation** : limiter le traitement de leurs données. -- **Droit d'opposition** : refuser le traitement de leurs données pour des motifs légitimes. -- **Droit à la portabilité** : recevoir les données personnelles dans un format structuré. - -Pour exercer ces droits ou poser des questions sur la gestion des données, les utilisateurs peuvent contacter le délégué à la protection des données (DPO) à [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot). - -## 7. Modification de la Politique de Confidentialité - -La présente Politique de Confidentialité peut être mise à jour à tout moment afin de refléter des changements dans les services ou dans la réglementation applicable. Toute modification sera publiée sur le site web et, si nécessaire, communiquée via l'Application. En continuant d'utiliser les services après la mise à jour de la politique, les utilisateurs acceptent les modifications apportées. - -## 8. Contact - -Si vous avez des questions ou des préoccupations concernant notre politique de confidentialité ou la manière dont nous protégeons vos données personnelles, n'hésitez pas à nous contacter à [**dpo@raidprotect.bot**](mailto:dpo@raidprotect.bot). - -</LegalLayout> diff --git a/src/pages/privacy.tsx b/src/pages/privacy.tsx new file mode 100644 index 0000000..37b0874 --- /dev/null +++ b/src/pages/privacy.tsx @@ -0,0 +1,194 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +export default function Privacy(): ReactNode { + return ( + <LegalLayout + title="Politique de confidentialité" + lastUpdated="Dernière mise à jour : 1 février 2025" + description="Découvrez comment RaidProtect protège vos données personnelles et assure la sécurité de votre vie privée en utilisant nos services. Politique de confidentialité détaillée."> + <section> + <p> + La présente Politique de Confidentialité décrit les modalités de collecte, d'utilisation, + et de protection des données personnelles dans le cadre des services proposés par + l'application Discord <strong>RaidProtect</strong> et le site web associé. + </p> + <p> + En utilisant ces services, vous acceptez les pratiques décrites dans cette Politique de + Confidentialité. <strong>SAS French Community Agency</strong>,{' '} + <strong>RaidProtect</strong>, s'engage à respecter et à protéger votre vie privée + conformément à la législation en vigueur, notamment le Règlement Général sur la + Protection des Données (RGPD) et la <strong>loi informatique et libertés</strong>. + </p> + </section> + <section> + <h2>1. Données collectées</h2> + <p> + Afin d'assurer le fonctionnement des services proposés, l'application Discord{' '} + <strong>RaidProtect</strong> et le site web collectent et traitent les catégories de + données suivantes : + </p> + <h3>1.1. Données collectées par l'Application</h3> + <ul> + <li> + <strong>Configuration des serveurs Discord</strong> : informations sur les paramètres + des serveurs utilisant <strong>RaidProtect</strong> (ex : rôles, permissions, canaux + configurés). + </li> + <li> + <strong>Messages textuels</strong> : tout message envoyé par un utilisateur peut être + collecté temporairement, dans le cadre des services de modération. + </li> + <li> + <strong>Événements Discord</strong> : événements transmis par Discord, tels que + l'arrivée ou le départ de nouveaux membres, les modifications de rôles ou les + suppressions de messages. + </li> + </ul> + <h3>1.2. Données collectées par le site web</h3> + <ul> + <li> + <strong>Données d'identification</strong> : informations fournies par les utilisateurs + lors de l'inscription ou de l'utilisation des services en ligne (ex : adresse e-mail, + identifiants Discord). + </li> + <li> + <strong>Données de navigation</strong> : informations sur l'interaction avec le site + web, telles que l'adresse IP, le type de navigateur ou les cookies. + </li> + </ul> + </section> + <section> + <h2>2. Finalités du traitement</h2> + <p>Les données collectées sont exclusivement utilisées pour :</p> + <ol> + <li> + Assurer le bon fonctionnement des services proposés (par exemple : modération des + serveurs Discord, analyse des événements liés à la communauté). + </li> + <li>Garantir une expérience utilisateur optimale et personnalisée.</li> + <li> + Sécuriser les serveurs Discord en appliquant des règles définies par les + administrateurs. + </li> + <li>Maintenir et améliorer les services en analysant l'utilisation.</li> + </ol> + <p>Les données ne sont pas utilisées à des fins commerciales ou publicitaires.</p> + </section> + <section> + <h2>3. Conservation des données</h2> + <p> + Les données personnelles collectées sont conservées uniquement pendant la durée + nécessaire à la réalisation des finalités définies ci-dessus. Une fois cette période + écoulée, elles sont supprimées ou anonymisées. + </p> + <ul> + <li> + <strong>Messages textuels</strong> : conservés temporairement pour traitement, puis + supprimés de manière définitive. + </li> + <li> + <strong>Données de configuration des serveurs</strong> : conservées aussi longtemps que + le serveur utilise les services de <strong>RaidProtect</strong>. + </li> + <li> + <strong>Données de navigation</strong> : conservées conformément aux dispositions + légales applicables. + </li> + </ul> + </section> + <section> + <h2>4. Partage des données</h2> + <p> + Les données collectées ne sont <strong>jamais partagées avec des tiers</strong>, sauf + dans les cas suivants : + </p> + <ol> + <li> + <strong>Partenaires techniques</strong> : les partenaires nécessaires à la fourniture + des services (par exemple, les hébergeurs ou fournisseurs de services cloud). + </li> + <li> + <strong>Obligations légales</strong> : si la divulgation des données est requise par la + loi, une autorité judiciaire ou réglementaire. + </li> + </ol> + </section> + <section> + <h2>5. Sécurité des données</h2> + <p> + <strong>RaidProtect</strong> met en œuvre toutes les mesures techniques et + organisationnelles nécessaires pour protéger les données personnelles contre les accès + non autorisés, les pertes, les destructions ou les altérations. Les principales mesures + incluent : + </p> + <ul> + <li>Le chiffrement des données sensibles.</li> + <li>Un contrôle strict des accès aux données (authentification et journalisation).</li> + <li>Une infrastructure hébergée sur des serveurs sécurisés.</li> + </ul> + </section> + <section> + <h2>6. Droits des utilisateurs</h2> + <p> + Conformément au RGPD, les utilisateurs disposent des droits suivants sur leurs données + personnelles : + </p> + <ul> + <li> + <strong>Droit d'accès</strong> : obtenir une copie des données personnelles traitées. + </li> + <li> + <strong>Droit de rectification</strong> : corriger des données inexactes ou + incomplètes. + </li> + <li> + <strong>Droit à l'effacement</strong> : demander la suppression des données dans + certaines conditions. + </li> + <li> + <strong>Droit à la limitation</strong> : limiter le traitement de leurs données. + </li> + <li> + <strong>Droit d'opposition</strong> : refuser le traitement de leurs données pour des + motifs légitimes. + </li> + <li> + <strong>Droit à la portabilité</strong> : recevoir les données personnelles dans un + format structuré. + </li> + </ul> + <p> + Pour exercer ces droits ou poser des questions sur la gestion des données, les + utilisateurs peuvent contacter le délégué à la protection des données (DPO) à{' '} + <a href="mailto:dpo@raidprotect.bot"> + <strong>dpo@raidprotect.bot</strong> + </a> + . + </p> + </section> + <section> + <h2>7. Modification de la Politique de Confidentialité</h2> + <p> + La présente Politique de Confidentialité peut être mise à jour à tout moment afin de + refléter des changements dans les services ou dans la réglementation applicable. Toute + modification sera publiée sur le site web et, si nécessaire, communiquée via + l'Application. En continuant d'utiliser les services après la mise à jour de la + politique, les utilisateurs acceptent les modifications apportées. + </p> + </section> + <section> + <h2>8. Contact</h2> + <p> + Si vous avez des questions ou des préoccupations concernant notre politique de + confidentialité ou la manière dont nous protégeons vos données personnelles, n'hésitez + pas à nous contacter à{' '} + <a href="mailto:dpo@raidprotect.bot"> + <strong>dpo@raidprotect.bot</strong> + </a> + . + </p> + </section> + </LegalLayout> + ); +} diff --git a/src/pages/terms.mdx b/src/pages/terms.mdx deleted file mode 100644 index 3de8f2d..0000000 --- a/src/pages/terms.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Conditions générales d'utilisation | RaidProtect -description: Consultez nos conditions d'utilisation pour comprendre les droits de propriété intellectuelle, liens hypertextes, gestion des données personnelles et notre responsabilité sur le site et le bot RaidProtect. ---- - -import LegalLayout from '@site/src/components/LegalLayout'; - -<LegalLayout - title="Conditions générales d'utilisation" - lastUpdated="Dernière mise à jour : 1 février 2025" - description="Consultez nos conditions d'utilisation pour comprendre les droits de propriété intellectuelle, liens hypertextes, gestion des données personnelles et notre responsabilité sur le site et le bot RaidProtect."> - -En ajoutant RaidProtect sur votre serveur Discord, vous reconnaissez avoir lu et accepté les Conditions d'Utilisation. Si vous n'acceptez pas l'une de ces conditions, vous devez arrêter d'utiliser nos services. - -## 1. Propriété intellectuelle - -Le présent site internet, sa structure générale, la marque commerciale RaidProtect, ainsi que les textes, images, animations, logos et tout autre élément le composant, sont la propriété exclusive de SAS French Community Agency ou de ses partenaires et sont protégés par les lois françaises et internationales relatives à la propriété intellectuelle. Toute reproduction, représentation, utilisation ou adaptation, sous quelque forme que ce soit, de tout ou partie de ces éléments, y compris les logiciels, sans l'autorisation écrite préalable de SAS French Community Agency, est strictement interdite et constituerait une contrefaçon. - -Les mêmes dispositions s'appliquent aux fonctionnalités et au code source de l'Application, qui sont également protégés par les droits de propriété intellectuelle. Toute tentative de reproduction, modification ou utilisation non autorisée des fonctionnalités de l'Application est interdite et susceptible de poursuites judiciaires. - -## 2. Liens hypertextes - -Tout lien avec le Site doit faire l'objet d'une autorisation écrite et préalable de **SAS French Community Agency**. En tout état de cause, **SAS French Community Agency** se réserve le droit de mettre fin à cette autorisation à tout moment s'il lui paraît que le lien établi avec le Site est de nature à porter atteinte aux intérêts de ce dernier. - -Il est par ailleurs précisé que les sites présentant un lien hypertexte avec le présent Site (liens hypertextes ciblant le Site ou établis au départ de celui-ci) ne sont pas sous le contrôle de **SAS French Community Agency**, **RaidProtect** et ses sociétés affiliées, qui déclinent toute responsabilité quant à leur contenu. - -## 3. Utilisation du service - -Nos services, incluant l'Application, sont libres d'utilisation dans un but personnel ou commercial. Nous nous réservons le droit d'interdire l'utilisation de nos services en cas d'usage que nous jugeons inapproprié ou pouvant nuire aux autres Utilisateurs. - -## 4. Responsabilité - -### 4.1. Site internet - -**SAS French Community Agency**, **RaidProtect** et ses sociétés affiliées ne sauraient être tenues responsables de tout dommage direct ou indirect résultant de l'utilisation du Site internet ou des informations qu'il contient. **SAS French Community Agency** ne garantit pas l'exactitude ou l'exhaustivité des informations présentées sur le Site et se réserve le droit de les modifier ou de les supprimer à tout moment, sans préavis. - -### 4.2. Application - -L'Application **RaidProtect** est fournie en l'état, sans garantie d'aucune sorte, expresse ou implicite. **SAS French Community Agency** ne peut être tenue responsable des conséquences d'une utilisation incorrecte ou abusive de l'Application, ni des éventuels dommages résultants d'un dysfonctionnement temporaire ou permanent. - -Les administrateurs de serveurs Discord utilisant **RaidProtect** sont seuls responsables des configurations effectuées et des décisions prises suite aux actions automatisées de l'Application (par exemple, bannissements ou suppressions de messages). En cas de violation des conditions d'utilisation de Discord ou des lois en vigueur, les administrateurs du serveur concerné en portent l'entière responsabilité. - -## 5. Modification des CGU - -Les présentes Conditions Générales d'Utilisation peuvent être modifiées à tout moment afin de refléter des changements dans les services ou dans la réglementation applicable. Toute modification sera publiée sur le site web et, si nécessaire, communiquée via l'Application. En continuant d'utiliser les services après la mise à jour des CGU, les utilisateurs acceptent les modifications apportées. - -## 6. Loi applicable et juridiction - -Les présentes CGU sont régies par le droit français. En cas de litige, et après une tentative de résolution amiable, compétence est attribuée aux tribunaux compétents du ressort de Paris, sauf disposition légale contraire. - -</LegalLayout> diff --git a/src/pages/terms.tsx b/src/pages/terms.tsx new file mode 100644 index 0000000..c99dedc --- /dev/null +++ b/src/pages/terms.tsx @@ -0,0 +1,108 @@ +import React, {type ReactNode} from 'react'; +import LegalLayout from '@site/src/components/LegalLayout'; + +export default function Terms(): ReactNode { + return ( + <LegalLayout + title="Conditions générales d'utilisation" + lastUpdated="Dernière mise à jour : 1 février 2025" + description="Consultez nos conditions d'utilisation pour comprendre les droits de propriété intellectuelle, liens hypertextes, gestion des données personnelles et notre responsabilité sur le site et le bot RaidProtect."> + <section> + <p> + En ajoutant RaidProtect sur votre serveur Discord, vous reconnaissez avoir lu et accepté + les Conditions d'Utilisation. Si vous n'acceptez pas l'une de ces conditions, vous devez + arrêter d'utiliser nos services. + </p> + </section> + <section> + <h2>1. Propriété intellectuelle</h2> + <p> + Le présent site internet, sa structure générale, la marque commerciale RaidProtect, ainsi + que les textes, images, animations, logos et tout autre élément le composant, sont la + propriété exclusive de SAS French Community Agency ou de ses partenaires et sont protégés + par les lois françaises et internationales relatives à la propriété intellectuelle. Toute + reproduction, représentation, utilisation ou adaptation, sous quelque forme que ce soit, + de tout ou partie de ces éléments, y compris les logiciels, sans l'autorisation écrite + préalable de SAS French Community Agency, est strictement interdite et constituerait une + contrefaçon. + </p> + <p> + Les mêmes dispositions s'appliquent aux fonctionnalités et au code source de + l'Application, qui sont également protégés par les droits de propriété intellectuelle. + Toute tentative de reproduction, modification ou utilisation non autorisée des + fonctionnalités de l'Application est interdite et susceptible de poursuites judiciaires. + </p> + </section> + <section> + <h2>2. Liens hypertextes</h2> + <p> + Tout lien avec le Site doit faire l'objet d'une autorisation écrite et préalable de{' '} + <strong>SAS French Community Agency</strong>. En tout état de cause,{' '} + <strong>SAS French Community Agency</strong> se réserve le droit de mettre fin à cette + autorisation à tout moment s'il lui paraît que le lien établi avec le Site est de nature + à porter atteinte aux intérêts de ce dernier. + </p> + <p> + Il est par ailleurs précisé que les sites présentant un lien hypertexte avec le présent + Site (liens hypertextes ciblant le Site ou établis au départ de celui-ci) ne sont pas + sous le contrôle de <strong>SAS French Community Agency</strong>,{' '} + <strong>RaidProtect</strong> et ses sociétés affiliées, qui déclinent toute + responsabilité quant à leur contenu. + </p> + </section> + <section> + <h2>3. Utilisation du service</h2> + <p> + Nos services, incluant l'Application, sont libres d'utilisation dans un but personnel ou + commercial. Nous nous réservons le droit d'interdire l'utilisation de nos services en cas + d'usage que nous jugeons inapproprié ou pouvant nuire aux autres Utilisateurs. + </p> + </section> + <section> + <h2>4. Responsabilité</h2> + <h3>4.1. Site internet</h3> + <p> + <strong>SAS French Community Agency</strong>, <strong>RaidProtect</strong> et ses + sociétés affiliées ne sauraient être tenues responsables de tout dommage direct ou + indirect résultant de l'utilisation du Site internet ou des informations qu'il contient.{' '} + <strong>SAS French Community Agency</strong> ne garantit pas l'exactitude ou + l'exhaustivité des informations présentées sur le Site et se réserve le droit de les + modifier ou de les supprimer à tout moment, sans préavis. + </p> + <h3>4.2. Application</h3> + <p> + L'Application <strong>RaidProtect</strong> est fournie en l'état, sans garantie d'aucune + sorte, expresse ou implicite. <strong>SAS French Community Agency</strong> ne peut être + tenue responsable des conséquences d'une utilisation incorrecte ou abusive de + l'Application, ni des éventuels dommages résultants d'un dysfonctionnement temporaire ou + permanent. + </p> + <p> + Les administrateurs de serveurs Discord utilisant <strong>RaidProtect</strong> sont seuls + responsables des configurations effectuées et des décisions prises suite aux actions + automatisées de l'Application (par exemple, bannissements ou suppressions de messages). + En cas de violation des conditions d'utilisation de Discord ou des lois en vigueur, les + administrateurs du serveur concerné en portent l'entière responsabilité. + </p> + </section> + <section> + <h2>5. Modification des CGU</h2> + <p> + Les présentes Conditions Générales d'Utilisation peuvent être modifiées à tout moment + afin de refléter des changements dans les services ou dans la réglementation applicable. + Toute modification sera publiée sur le site web et, si nécessaire, communiquée via + l'Application. En continuant d'utiliser les services après la mise à jour des CGU, les + utilisateurs acceptent les modifications apportées. + </p> + </section> + <section> + <h2>6. Loi applicable et juridiction</h2> + <p> + Les présentes CGU sont régies par le droit français. En cas de litige, et après une + tentative de résolution amiable, compétence est attribuée aux tribunaux compétents du + ressort de Paris, sauf disposition légale contraire. + </p> + </section> + </LegalLayout> + ); +} From 050055ae73f8498bb6f4641e72a746e43c69cf7d Mon Sep 17 00:00:00 2001 From: Zallom <matthias@fca.gg> Date: Fri, 22 May 2026 00:24:07 +0200 Subject: [PATCH 04/36] fix(legal-pages): match Webflow design for LegalLayout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Hero en card centrée sombre (#070417, border #242328, radius 20px, padding 50px) - Titre 62px en Nohemi (police heading déjà importée) - Menu badges en pill shape, fond #040114, bordure et état actif --ifm-color-primary-darker - Container narrow 740px pour le contenu, dividers 1px entre sections - Responsive aligné sur les breakpoints Webflow (991/767/479) --- src/components/LegalLayout/index.tsx | 40 ++--- src/components/LegalLayout/styles.module.css | 159 ++++++++++++++----- 2 files changed, 139 insertions(+), 60 deletions(-) diff --git a/src/components/LegalLayout/index.tsx b/src/components/LegalLayout/index.tsx index b0b0b34..6e73aef 100644 --- a/src/components/LegalLayout/index.tsx +++ b/src/components/LegalLayout/index.tsx @@ -48,26 +48,30 @@ export default function LegalLayout({ return ( <Layout title={title} description={description}> - <header className={styles.hero}> + <section className={styles.heroSection}> <div className={styles.heroInner}> - <h1 className={styles.title}>{title}</h1> - <p className={styles.lastUpdated}>{lastUpdated}</p> - <nav className={styles.menu} aria-label={title}> - {MENU.map((item) => { - const isActive = currentPath === item.to; - return ( - <Link - key={item.to} - to={item.to} - className={clsx(styles.menuLink, isActive && styles.menuLinkActive)} - aria-current={isActive ? 'page' : undefined}> - <Translate id={item.id}>{item.defaultMessage}</Translate> - </Link> - ); - })} - </nav> + <div className={styles.heroCard}> + <div className={styles.heroContent}> + <h1 className={styles.title}>{title}</h1> + <p className={styles.lastUpdated}>{lastUpdated}</p> + </div> + <nav className={styles.menu} aria-label={title}> + {MENU.map((item) => { + const isActive = currentPath === item.to; + return ( + <Link + key={item.to} + to={item.to} + className={clsx(styles.menuLink, isActive && styles.menuLinkActive)} + aria-current={isActive ? 'page' : undefined}> + <Translate id={item.id}>{item.defaultMessage}</Translate> + </Link> + ); + })} + </nav> + </div> </div> - </header> + </section> <main className={styles.container}>{children}</main> </Layout> ); diff --git a/src/components/LegalLayout/styles.module.css b/src/components/LegalLayout/styles.module.css index 741653f..644380f 100644 --- a/src/components/LegalLayout/styles.module.css +++ b/src/components/LegalLayout/styles.module.css @@ -1,78 +1,153 @@ -.hero { - background-color: var(--ifm-color-emphasis-100); - border-bottom: 1px solid var(--ifm-color-emphasis-200); - padding: 3rem 1rem 2rem; +/* Reproduction du design Webflow (raidprotectbot.webflow.css) pour les pages + légales : hero en carte centrée sombre + menu badges en pill + sections + espacées par des dividers. */ + +.heroSection { + padding: 30px 20px 0; } .heroInner { - max-width: 880px; + max-width: 1200px; margin: 0 auto; +} + +.heroCard { + position: relative; display: flex; flex-direction: column; - gap: 1.5rem; + align-items: center; + justify-content: center; + gap: 40px; + padding: 50px; + border: 1px solid #242328; + border-radius: 20px; + background-color: #070417; + text-align: center; + overflow: hidden; +} + +.heroContent { + position: relative; + z-index: 2; } .title { - margin: 0; - font-size: 2.25rem; + margin: 0 0 0; + font-family: var(--ifm-heading-font-family); + font-size: 62px; line-height: 1.2; + color: #fff; } .lastUpdated { - margin: 0; - color: var(--ifm-color-emphasis-700); - font-size: 0.95rem; + margin: 16px 0 0; + color: #e1e0e9; + font-size: 1rem; } .menu { + position: relative; + z-index: 2; display: flex; flex-wrap: wrap; - gap: 0.5rem; - margin-top: 0.5rem; + justify-content: center; + align-items: center; + gap: 16px; + max-width: 800px; + margin: 0; } .menuLink { - display: inline-flex; - align-items: center; - padding: 0.45rem 0.9rem; - border-radius: 999px; - border: 1px solid var(--ifm-color-emphasis-300); - background-color: var(--ifm-background-color); - color: var(--ifm-font-color-base); - font-size: 0.9rem; - font-weight: 500; + display: inline-block; + padding: 16px 22px 12px; + border: 1px solid var(--ifm-color-primary-darker); + border-radius: 40px; + background-color: #040114; + color: #fff; + font-size: 18px; + line-height: 1.111em; text-decoration: none; - transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease; + transition: background-color 0.3s, border-color 0.3s, color 0.3s; } -.menuLink:hover { - background-color: var(--ifm-color-emphasis-200); - color: var(--ifm-font-color-base); +.menuLink:hover, +.menuLinkActive { + background-color: var(--ifm-color-primary-darker); + border-color: var(--ifm-color-primary-darker); + color: #fff; text-decoration: none; } -.menuLinkActive { - background-color: var(--ifm-color-primary); - border-color: var(--ifm-color-primary); - color: var(--ifm-color-white); +.container { + max-width: 740px; + margin: 0 auto; + padding: 60px 20px 80px; } -.menuLinkActive:hover { - background-color: var(--ifm-color-primary-dark); - border-color: var(--ifm-color-primary-dark); - color: var(--ifm-color-white); +.container :global(section) + :global(hr) { + border: 0; + height: 1px; + background-color: #d5dff0; + margin: 80px 0; + opacity: 0.15; } -.container { - max-width: 780px; - margin: 0 auto; - padding: 3rem 1rem 4rem; +.container :global(h2) { + font-size: 32px; + line-height: 1.2; + margin: 0 0 24px; +} + +.container :global(p) { + margin: 0 0 16px; + line-height: 1.6; +} + +.container :global(a) { + color: var(--ifm-color-primary); + text-decoration: underline; +} + +.container :global(strong) { + color: #fff; +} + +/* Responsive — basé sur le @media du fichier Webflow original */ +@media (max-width: 991px) { + .title { + font-size: 50px; + } + .heroCard { + padding: 40px 30px; + gap: 32px; + } } -.container h2 { - margin-top: 2.5rem; +@media (max-width: 767px) { + .title { + font-size: 38px; + } + .heroCard { + padding: 32px 20px; + gap: 24px; + } + .menuLink { + font-size: 16px; + padding: 14px 18px 10px; + } + .container :global(h2) { + font-size: 26px; + } + .container :global(section) + :global(hr) { + margin: 50px 0; + } } -.container h3 { - margin-top: 1.75rem; +@media (max-width: 479px) { + .title { + font-size: 32px; + } + .heroSection { + padding: 20px 12px 0; + } } From 131d0c23bfa33601bbff7d8381f402e55af27024 Mon Sep 17 00:00:00 2001 From: Zallom <matthias@fca.gg> Date: Fri, 22 May 2026 00:30:20 +0200 Subject: [PATCH 05/36] fix(navbar): scope active state on 'Accueil' to landing route only MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le swizzle remplaçait to:'main' par le chemin local ("/" en FR, "/en/" en EN…) sans activeBaseRegex, donc le NavLink considérait toutes les routes comme actives. On dérive maintenant un activeBaseRegex strict du chemin local. --- src/theme/Navbar/Content/index.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/theme/Navbar/Content/index.tsx b/src/theme/Navbar/Content/index.tsx index 5b6eaee..31881c9 100644 --- a/src/theme/Navbar/Content/index.tsx +++ b/src/theme/Navbar/Content/index.tsx @@ -83,7 +83,13 @@ export default function NavbarContent(): ReactNode { {!mobileSidebar.disabled && <NavbarMobileSidebarToggle />} <NavbarLogo /> <NavbarItems items={leftItems.map(i => { - if (i['to'] && urls[i['to']]) i['to'] = urls[i['to']][currentLocale] ?? i['to'] + if (i['to'] && urls[i['to']]) { + const localizedPath = urls[i['to']][currentLocale] ?? i['to'] + i['to'] = localizedPath + // Sans cela, un to="/" matche toutes les routes et le bouton reste actif partout. + const escaped = localizedPath.replace(/\/$/, '').replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + i['activeBaseRegex'] = `^${escaped || ''}/?$` + } return i })} /> </> From 6499600f11f62a2748db5b9bde502fd85c8a70b7 Mon Sep 17 00:00:00 2001 From: Zallom <matthias@fca.gg> Date: Fri, 22 May 2026 00:54:35 +0200 Subject: [PATCH 06/36] feat(landing-fr): port Webflow homepage to TSX (FR only) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 5 sections décomposées en composants modulaires : - Hero (titre dégradé, pre-title pill, 2 CTAs) - Servers (marquee CSS-only de 15 serveurs Discord clients, sans JS Webflow) - About (4 KPI counters + fetch docs.raidprotect.bot/counts.json comme l'original) - Features (6 cartes vers /docs/features/*) - Pricing (3 tiers : Gratuit / Founder 2,99 $ / Business) 50 images Webflow copiées dans static/img/landing/. Page composée via un unique <Layout> dans src/pages/index.tsx. Traductions EN/DE/ES/PT à venir dans une sous-PR séparée. --- src/components/landing/About/index.tsx | 175 +++++++++++++++ .../landing/About/styles.module.css | 139 ++++++++++++ src/components/landing/Features/index.tsx | 104 +++++++++ .../landing/Features/styles.module.css | 160 +++++++++++++ src/components/landing/Hero/index.tsx | 43 ++++ src/components/landing/Hero/styles.module.css | 85 +++++++ src/components/landing/Pricing/index.tsx | 136 ++++++++++++ .../landing/Pricing/styles.module.css | 202 +++++++++++++++++ src/components/landing/Servers/index.tsx | 210 ++++++++++++++++++ .../landing/Servers/styles.module.css | 145 ++++++++++++ .../landing/styles/shared.module.css | 164 ++++++++++++++ src/pages/index.tsx | 34 ++- static/img/landing/411d8a698dd15ddf.webp | Bin 0 -> 1644 bytes static/img/landing/RP-embed-p-1080.webp | Bin 0 -> 7906 bytes static/img/landing/RP-embed-p-500.webp | Bin 0 -> 3770 bytes static/img/landing/RP-embed-p-800.webp | Bin 0 -> 6056 bytes static/img/landing/RP-embed.webp | Bin 0 -> 16550 bytes static/img/landing/favicon.png | Bin 0 -> 1130 bytes static/img/landing/icon-02.svg | 3 + static/img/landing/icon-geranium.svg | 25 +++ static/img/landing/iconAntiraidWhite.svg | 3 + static/img/landing/iconAntispamWhite.svg | 3 + static/img/landing/iconArtofWar3.webp | Bin 0 -> 3796 bytes static/img/landing/iconBloxFruitsFR.webp | Bin 0 -> 4800 bytes static/img/landing/iconCaptchaWhite.svg | 5 + static/img/landing/iconChatzone.webp | Bin 0 -> 5986 bytes static/img/landing/iconClashGG.webp | Bin 0 -> 1646 bytes static/img/landing/iconClashRoyaleFR.webp | Bin 0 -> 4066 bytes static/img/landing/iconCyrilmp4.webp | Bin 0 -> 2592 bytes static/img/landing/iconDiscord.svg | 3 + static/img/landing/iconDistrict10.webp | Bin 0 -> 3738 bytes static/img/landing/iconDmlockWhite.svg | 6 + static/img/landing/iconEclipse.webp | Bin 0 -> 2430 bytes static/img/landing/iconFlexingSeal.webp | Bin 0 -> 1076 bytes static/img/landing/iconFortniteHouse.webp | Bin 0 -> 6176 bytes static/img/landing/iconGenshinImpactFR.webp | Bin 0 -> 3292 bytes static/img/landing/iconGitHub.svg | 10 + static/img/landing/iconJobless.webp | Bin 0 -> 1036 bytes static/img/landing/iconLigue1.webp | Bin 0 -> 1662 bytes static/img/landing/iconLinkedIn.svg | 10 + static/img/landing/iconMastu.webp | Bin 0 -> 4784 bytes static/img/landing/iconMetaLock.webp | Bin 0 -> 4730 bytes static/img/landing/iconNationsGlory.webp | Bin 0 -> 1244 bytes static/img/landing/iconPUBGMobileFrance.webp | Bin 0 -> 2684 bytes static/img/landing/iconPUBGMobileUK.webp | Bin 0 -> 4848 bytes static/img/landing/iconReportWhite.svg | 3 + static/img/landing/iconRocketBaguette.webp | Bin 0 -> 4300 bytes .../img/landing/iconRocketLeagueFrance.webp | Bin 0 -> 5144 bytes static/img/landing/iconSlashFR.webp | Bin 0 -> 1722 bytes static/img/landing/iconTagWhite.svg | 5 + static/img/landing/iconTeamVitality.webp | Bin 0 -> 4714 bytes static/img/landing/iconTheForge.webp | Bin 0 -> 2528 bytes static/img/landing/iconWankilStudio.webp | Bin 0 -> 5190 bytes static/img/landing/iconWeWard.webp | Bin 0 -> 1522 bytes static/img/landing/iconX.svg | 3 + static/img/landing/iconYouTube.svg | 3 + static/img/landing/iconZetFar.webp | Bin 0 -> 3330 bytes static/img/landing/logoRaidProtect.svg | 22 ++ static/img/landing/pattern-01.svg | 1 + static/img/landing/serverBadgePartner.svg | 12 + static/img/landing/serverBadgeVerified.svg | 11 + static/img/landing/webclip.png | Bin 0 -> 9440 bytes 62 files changed, 1704 insertions(+), 21 deletions(-) create mode 100644 src/components/landing/About/index.tsx create mode 100644 src/components/landing/About/styles.module.css create mode 100644 src/components/landing/Features/index.tsx create mode 100644 src/components/landing/Features/styles.module.css create mode 100644 src/components/landing/Hero/index.tsx create mode 100644 src/components/landing/Hero/styles.module.css create mode 100644 src/components/landing/Pricing/index.tsx create mode 100644 src/components/landing/Pricing/styles.module.css create mode 100644 src/components/landing/Servers/index.tsx create mode 100644 src/components/landing/Servers/styles.module.css create mode 100644 src/components/landing/styles/shared.module.css create mode 100644 static/img/landing/411d8a698dd15ddf.webp create mode 100644 static/img/landing/RP-embed-p-1080.webp create mode 100644 static/img/landing/RP-embed-p-500.webp create mode 100644 static/img/landing/RP-embed-p-800.webp create mode 100644 static/img/landing/RP-embed.webp create mode 100644 static/img/landing/favicon.png create mode 100644 static/img/landing/icon-02.svg create mode 100644 static/img/landing/icon-geranium.svg create mode 100644 static/img/landing/iconAntiraidWhite.svg create mode 100644 static/img/landing/iconAntispamWhite.svg create mode 100644 static/img/landing/iconArtofWar3.webp create mode 100644 static/img/landing/iconBloxFruitsFR.webp create mode 100644 static/img/landing/iconCaptchaWhite.svg create mode 100644 static/img/landing/iconChatzone.webp create mode 100644 static/img/landing/iconClashGG.webp create mode 100644 static/img/landing/iconClashRoyaleFR.webp create mode 100644 static/img/landing/iconCyrilmp4.webp create mode 100644 static/img/landing/iconDiscord.svg create mode 100644 static/img/landing/iconDistrict10.webp create mode 100644 static/img/landing/iconDmlockWhite.svg create mode 100644 static/img/landing/iconEclipse.webp create mode 100644 static/img/landing/iconFlexingSeal.webp create mode 100644 static/img/landing/iconFortniteHouse.webp create mode 100644 static/img/landing/iconGenshinImpactFR.webp create mode 100644 static/img/landing/iconGitHub.svg create mode 100644 static/img/landing/iconJobless.webp create mode 100644 static/img/landing/iconLigue1.webp create mode 100644 static/img/landing/iconLinkedIn.svg create mode 100644 static/img/landing/iconMastu.webp create mode 100644 static/img/landing/iconMetaLock.webp create mode 100644 static/img/landing/iconNationsGlory.webp create mode 100644 static/img/landing/iconPUBGMobileFrance.webp create mode 100644 static/img/landing/iconPUBGMobileUK.webp create mode 100644 static/img/landing/iconReportWhite.svg create mode 100644 static/img/landing/iconRocketBaguette.webp create mode 100644 static/img/landing/iconRocketLeagueFrance.webp create mode 100644 static/img/landing/iconSlashFR.webp create mode 100644 static/img/landing/iconTagWhite.svg create mode 100644 static/img/landing/iconTeamVitality.webp create mode 100644 static/img/landing/iconTheForge.webp create mode 100644 static/img/landing/iconWankilStudio.webp create mode 100644 static/img/landing/iconWeWard.webp create mode 100644 static/img/landing/iconX.svg create mode 100644 static/img/landing/iconYouTube.svg create mode 100644 static/img/landing/iconZetFar.webp create mode 100644 static/img/landing/logoRaidProtect.svg create mode 100644 static/img/landing/pattern-01.svg create mode 100644 static/img/landing/serverBadgePartner.svg create mode 100644 static/img/landing/serverBadgeVerified.svg create mode 100644 static/img/landing/webclip.png diff --git a/src/components/landing/About/index.tsx b/src/components/landing/About/index.tsx new file mode 100644 index 0000000..432457e --- /dev/null +++ b/src/components/landing/About/index.tsx @@ -0,0 +1,175 @@ +import React, {type ReactNode, useEffect, useState} from 'react'; +import clsx from 'clsx'; +import shared from '../styles/shared.module.css'; +import styles from './styles.module.css'; + +type Counts = { + servers: number; + users: number; + captcha: number; + antispam: number; +}; + +type FormattedValue = { + value: string; + unit: string; +}; + +function formatValue(value: number): FormattedValue { + if (value >= 1_000_000) { + return {value: (value / 1_000_000).toFixed(1), unit: 'M'}; + } + return {value: (value / 1_000).toFixed(1), unit: 'k'}; +} + +function StatCounter({ + rawValue, + label, + fallback, +}: { + rawValue?: number; + label: string; + fallback: string; +}) { + if (rawValue == null) { + return ( + <div className={styles.counterItem}> + <div className={styles.counterTitle}> + <span>{fallback}</span> + </div> + <div className={styles.counterLabel}>{label}</div> + </div> + ); + } + const formatted = formatValue(rawValue); + return ( + <div className={styles.counterItem}> + <div className={styles.counterTitle}> + <span>{formatted.value}</span> + <span>{formatted.unit}</span> + </div> + <div className={styles.counterLabel}>{label}</div> + </div> + ); +} + +export default function About(): ReactNode { + const [counts, setCounts] = useState<Counts | null>(null); + + useEffect(() => { + let cancelled = false; + fetch('https://docs.raidprotect.bot/counts.json') + .then((res) => { + if (!res.ok) throw new Error('Erreur lors de la récupération des données'); + return res.json(); + }) + .then((data: Counts) => { + if (!cancelled) setCounts(data); + }) + .catch((err) => { + // Stats are best-effort; failure is non-blocking + // eslint-disable-next-line no-console + console.error('Erreur de mise à jour des statistiques :', err); + }); + return () => { + cancelled = true; + }; + }, []); + + return ( + <section className={clsx(shared.landing, shared.sectionSpacing, styles.section)}> + <div className={shared.container}> + <div className={styles.titleGrid}> + <h2 className={styles.title}> + Nos résultats ont un{' '} + <span className={shared.textGradient}>impact</span> + </h2> + </div> + <div className={styles.counterGrid}> + <div className={styles.imageWrap}> + <svg + className={styles.curve} + viewBox="0 0 900 280" + role="img" + aria-label="Croissance du nombre de serveurs"> + <defs> + <linearGradient id="rpStroke" x1="0" y1="1" x2="1" y2="0"> + <stop offset="0%" stopColor="#a561a3" /> + <stop offset="45%" stopColor="#726cb3" /> + <stop offset="100%" stopColor="#d35f5f" /> + </linearGradient> + <linearGradient id="rpFill" x1="0" y1="0" x2="0" y2="1"> + <stop offset="0%" stopColor="#726cb3" stopOpacity="0.35" /> + <stop offset="70%" stopColor="#d35f5f" stopOpacity="0.12" /> + <stop offset="100%" stopColor="#d35f5f" stopOpacity="0" /> + </linearGradient> + <filter id="rpGlow" x="-40%" y="-60%" width="180%" height="220%"> + <feGaussianBlur stdDeviation="10" result="blur" /> + <feMerge> + <feMergeNode in="blur" /> + <feMergeNode in="SourceGraphic" /> + </feMerge> + </filter> + <pattern id="rpGrid" width="80" height="80" patternUnits="userSpaceOnUse"> + <path + d="M80 0H0V80" + fill="none" + stroke="rgba(255,255,255,0.05)" + strokeWidth="1" + /> + </pattern> + </defs> + <rect x="0" y="0" width="900" height="280" fill="url(#rpGrid)" opacity="0.5" /> + <path + d="M 40 230 C 160 225, 220 215, 300 200 S 420 150, 520 140 S 640 110, 720 70 S 820 20, 860 28 L 860 260 L 40 260 Z" + fill="url(#rpFill)" + /> + <path + className={styles.curveLine} + d="M 40 230 C 160 225, 220 215, 300 200 S 420 150, 520 140 S 640 110, 720 70 S 820 30, 860 28" + fill="none" + stroke="url(#rpStroke)" + strokeWidth="7" + strokeLinecap="round" + strokeLinejoin="round" + filter="url(#rpGlow)" + /> + <circle cx="860" cy="28" r="7" fill="#d35f5f" /> + <circle + className={styles.curvePulse} + cx="860" + cy="28" + r="7" + fill="none" + stroke="#726cb3" + strokeWidth="2" + /> + </svg> + </div> + <div className={styles.stats}> + <StatCounter + rawValue={counts?.servers} + label="Serveurs sécurisés" + fallback="350k" + /> + <StatCounter + rawValue={counts?.captcha} + label="Captchas résolus" + fallback="—" + /> + <StatCounter + rawValue={counts?.antispam} + label="Spams bloqués" + fallback="—" + /> + <StatCounter + rawValue={counts?.users} + label="Utilisateurs protégés" + fallback="—" + /> + </div> + </div> + </div> + </section> + ); +} diff --git a/src/components/landing/About/styles.module.css b/src/components/landing/About/styles.module.css new file mode 100644 index 0000000..84b3210 --- /dev/null +++ b/src/components/landing/About/styles.module.css @@ -0,0 +1,139 @@ +.section { + overflow-x: clip; +} + +.titleGrid { + display: grid; + grid-template-rows: auto; + grid-template-columns: 1.25fr 1fr; + grid-column-gap: 100px; + grid-row-gap: 100px; + margin-bottom: 30px; +} + +.title { + font-family: var(--ifm-heading-font-family); + color: #fff; + font-size: 50px; + font-weight: 600; + line-height: 1.2em; + margin: 0; +} + +.counterGrid { + display: grid; + grid-template-rows: auto; + grid-template-columns: 1fr 1fr; + grid-column-gap: 100px; + grid-row-gap: 100px; + align-items: center; +} + +.imageWrap { + position: relative; +} + +.curve { + width: 100%; + height: auto; + display: block; +} + +.curveLine { + stroke-dasharray: 1400; + stroke-dashoffset: 1400; + animation: rpDraw 1.5s cubic-bezier(0.4, 0, 0.2, 1) forwards; +} + +@keyframes rpDraw { + to { + stroke-dashoffset: 0; + } +} + +.curvePulse { + transform-origin: 860px 28px; + animation: rpPulse 1.8s ease-out infinite; +} + +@keyframes rpPulse { + 0% { + transform: scale(1); + opacity: 0.9; + } + 70% { + transform: scale(2.8); + opacity: 0; + } + 100% { + transform: scale(2.8); + opacity: 0; + } +} + +@media (prefers-reduced-motion: reduce) { + .curveLine, + .curvePulse { + animation: none !important; + } + .curveLine { + stroke-dashoffset: 0; + } +} + +.stats { + display: grid; + grid-template-rows: auto auto; + grid-template-columns: 1fr 1fr; + grid-column-gap: 60px; + grid-row-gap: 60px; + align-items: start; +} + +.counterItem { + display: flex; + flex-flow: column; +} + +.counterTitle { + font-family: var(--ifm-heading-font-family); + margin-bottom: 0; + font-size: 44px; + font-weight: 600; + line-height: 1.3em; + color: #fff; +} + +.counterLabel { + color: #e1e0e9; + font-size: 18px; + margin-top: 4px; +} + +@media screen and (max-width: 991px) { + .titleGrid { + grid-template-columns: 1fr; + grid-column-gap: 10px; + grid-row-gap: 10px; + } + .counterGrid { + grid-template-columns: 1fr; + } + .stats { + grid-column-gap: 50px; + grid-row-gap: 50px; + } +} + +@media screen and (max-width: 767px) { + .title { + font-size: 42px; + } + .counterTitle { + font-size: 30px; + } + .stats { + grid-column-gap: 30px; + grid-row-gap: 30px; + } +} diff --git a/src/components/landing/Features/index.tsx b/src/components/landing/Features/index.tsx new file mode 100644 index 0000000..22cae77 --- /dev/null +++ b/src/components/landing/Features/index.tsx @@ -0,0 +1,104 @@ +import React, {type ReactNode} from 'react'; +import clsx from 'clsx'; +import shared from '../styles/shared.module.css'; +import styles from './styles.module.css'; + +type Feature = { + href: string; + icon: string; + iconAlt: string; + title: string; + description: string; +}; + +const FEATURES: Feature[] = [ + { + href: 'https://docs.raidprotect.bot/features/anti-spam', + icon: '/img/landing/iconAntispamWhite.svg', + iconAlt: 'RaidProtect icon Antispam', + title: 'Protection anti-spam', + description: + 'Sanctionnez instantanément les tentatives de spam, sans aucune intervention de votre part.', + }, + { + href: 'https://docs.raidprotect.bot/features/raid-mode', + icon: '/img/landing/iconAntiraidWhite.svg', + iconAlt: 'RaidProtect icon Antiraid', + title: 'Blocage des raids', + description: + "Vous craignez un raid ? Notre bot est capable de le détecter et de le bloquer avant même qu'il impacte votre serveur.", + }, + { + href: 'https://docs.raidprotect.bot/features/captcha', + icon: '/img/landing/iconCaptchaWhite.svg', + iconAlt: 'RaidProtect icon Captcha', + title: 'Protection contre les robots', + description: + "Grâce au captcha, vos membres doivent prouver qu'ils sont humains. Dites adieu aux comptes automatisés.", + }, + { + href: 'https://docs.raidprotect.bot/features/utilities', + icon: '/img/landing/iconReportWhite.svg', + iconAlt: 'RaidProtect icon Report', + title: 'Modération & administration', + description: + "Gérez votre serveur comme un pro avec nos diverses fonctionalités de modération et d'administration.", + }, + { + href: 'https://docs.raidprotect.bot/features/tag-role', + icon: '/img/landing/iconTagWhite.svg', + iconAlt: 'RaidProtect icon Tag', + title: 'Rôle de Tag', + description: + 'Le Rôle de Tag permet d’attribuer automatiquement un rôle aux membres qui ajoutent le tag de votre serveur.', + }, + { + href: 'https://docs.raidprotect.bot/features/dm-lock', + icon: '/img/landing/iconDmlockWhite.svg', + iconAlt: 'RaidProtect icon DM Lock', + title: 'Fermeture des MP', + description: + 'Un bouclier inédit contre le spam, le scam et les arnaques par message privé.', + }, +]; + +export default function Features(): ReactNode { + return ( + <section + id="features" + className={clsx(shared.landing, shared.sectionSpacing, styles.section)}> + <div className={shared.container}> + <div className={styles.titleWrap}> + <h2 className={styles.title}> + Nos <span className={shared.textGradient}>fonctionnalités</span> + </h2> + <p className={styles.subtitle}> + Découvrez ce qui fait de nous l'un des meilleurs bots pour protéger + votre serveur Discord des utilisateurs malintentionnés. + </p> + </div> + <div className={styles.grid}> + <div className={styles.decoration} aria-hidden="true" /> + {FEATURES.map((feature) => ( + <a key={feature.title} href={feature.href} className={styles.item}> + <div className={styles.iconWrap}> + <div className={styles.iconBg}> + <img + src={feature.icon} + alt={feature.iconAlt} + loading="eager" + className={styles.icon} + /> + </div> + </div> + <div> + <h3 className={styles.itemTitle}>{feature.title}</h3> + <p className={styles.itemDescription}>{feature.description}</p> + </div> + </a> + ))} + </div> + </div> + </section> + ); +} diff --git a/src/components/landing/Features/styles.module.css b/src/components/landing/Features/styles.module.css new file mode 100644 index 0000000..9d1d528 --- /dev/null +++ b/src/components/landing/Features/styles.module.css @@ -0,0 +1,160 @@ +.section { + position: relative; +} + +.titleWrap { + z-index: 2; + position: relative; + margin: 0 auto 70px auto; + width: 50%; + text-align: center; + display: flex; + flex-flow: column; +} + +.title { + margin: 0 0 10px 0; + font-family: var(--ifm-heading-font-family); + color: #fff; + font-size: 50px; + font-weight: 600; + line-height: 1.2em; +} + +.subtitle { + margin: 0; + color: #e1e0e9; + font-size: 18px; + font-weight: 400; +} + +.grid { + position: relative; + display: grid; + grid-template-rows: auto; + grid-template-columns: 1fr 1fr 1fr; + grid-column-gap: 50px; + grid-row-gap: 50px; +} + +.decoration { + background-image: linear-gradient(180deg, #d35f5f 40%, #a561a3); + opacity: 0.5; + filter: blur(140px); + width: 450px; + height: 100px; + margin: auto; + position: absolute; + inset: 0; + z-index: 0; + pointer-events: none; +} + +.item { + z-index: 2; + position: relative; + display: flex; + flex-flow: column; + align-items: center; + text-align: center; + text-decoration: none; + transition: transform 0.3s; + column-gap: 20px; + row-gap: 20px; + color: inherit; +} + +.item:hover { + transform: scale(1.04); + text-decoration: none; + color: inherit; +} + +.iconWrap { + flex: none; + display: flex; + align-items: center; + justify-content: center; + width: 80px; + height: 80px; + padding: 1px; + border-radius: 50%; + background-image: linear-gradient( + 135deg, + #726cb3, + #d35f5f 60%, + #a561a3 + ); +} + +.iconBg { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + border-radius: 50%; + background-color: #1b1a25; +} + +.icon { + width: 32px; + height: 32px; +} + +.itemTitle { + margin: 0 0 10px 0; + font-family: var(--ifm-heading-font-family); + color: #fff; + font-size: 26px; + font-weight: 600; + line-height: 1.3em; +} + +.itemDescription { + margin: 0; + color: #e1e0e9; + font-size: 18px; +} + +@media screen and (max-width: 1279px) { + .grid { + grid-column-gap: 50px; + grid-row-gap: 50px; + } +} + +@media screen and (min-width: 1280px) { + .grid { + grid-column-gap: 90px; + grid-row-gap: 100px; + } + .titleWrap { + width: 95%; + } +} + +@media screen and (max-width: 991px) { + .titleWrap { + width: 100%; + } + .grid { + grid-template-columns: 1fr 1fr; + } + .iconWrap { + width: 70px; + height: 70px; + } +} + +@media screen and (max-width: 767px) { + .title { + font-size: 42px; + } + .itemTitle { + font-size: 22px; + } + .grid { + grid-column-gap: 30px; + } +} diff --git a/src/components/landing/Hero/index.tsx b/src/components/landing/Hero/index.tsx new file mode 100644 index 0000000..1038c59 --- /dev/null +++ b/src/components/landing/Hero/index.tsx @@ -0,0 +1,43 @@ +import React, {type ReactNode} from 'react'; +import clsx from 'clsx'; +import shared from '../styles/shared.module.css'; +import styles from './styles.module.css'; + +export default function Hero(): ReactNode { + return ( + <section className={clsx(shared.landing, styles.section)}> + <div className={shared.container}> + <div className={styles.content}> + <div className={styles.preTitleWrap}> + <div className={styles.preTitleText}> + Utilisé par plus de 350 000 serveurs + </div> + </div> + <h1 className={styles.title}> + Le meilleur bot Discord de{' '} + <span className={shared.textGradient}>sécurité</span> + </h1> + <p className={styles.description}> + Empêchez les utilisateurs malintentionnés de nuire à votre serveur + Discord. + </p> + <div className={styles.buttonList}> + <a + href="https://raidprotect.bot/invite" + target="_blank" + rel="noopener noreferrer" + className={shared.btnPrimary}> + Ajouter à Discord + </a> + <a + href="#features" + rel="noopener noreferrer" + className={shared.btnSecondary}> + Voir les fonctionnalités + </a> + </div> + </div> + </div> + </section> + ); +} diff --git a/src/components/landing/Hero/styles.module.css b/src/components/landing/Hero/styles.module.css new file mode 100644 index 0000000..3015b24 --- /dev/null +++ b/src/components/landing/Hero/styles.module.css @@ -0,0 +1,85 @@ +.section { + padding-top: 90px; + padding-bottom: 150px; + position: relative; + overflow-x: clip; +} + +.content { + z-index: 2; + text-align: center; + display: flex; + flex-flow: column; + justify-content: space-between; + align-items: center; + position: relative; +} + +.preTitleWrap { + border-radius: 50px; + background-color: #1b1a25; + background-image: linear-gradient(180deg, #d35f5f 40%, #a561a3); + margin-bottom: 20px; + padding: 1px; + display: inline-block; + overflow: hidden; +} + +.preTitleText { + border-radius: 50px; + background-color: #1b1a25; + padding: 7px 14px 5px; + font-size: 16px; + font-weight: 400; + line-height: 1.5em; + color: #fff; + text-align: center; +} + +.title { + margin: 0 0 10px 0; + font-family: var(--ifm-heading-font-family); + color: #fff; + font-size: 68px; + font-weight: 600; + line-height: 1.2em; +} + +.description { + width: 75%; + font-family: var(--ifm-font-family-base); + margin-top: 0; + margin-bottom: 50px; + color: #e1e0e9; + font-size: 18px; +} + +.buttonList { + display: flex; + flex-flow: wrap; + justify-content: center; + align-items: center; + column-gap: 30px; + row-gap: 15px; +} + +@media screen and (max-width: 991px) { + .section { + padding-top: 50px; + padding-bottom: 100px; + } + .description { + width: 100%; + margin-bottom: 30px; + } +} + +@media screen and (max-width: 767px) { + .section { + padding-top: 30px; + padding-bottom: 80px; + } + .title { + font-size: 48px; + } +} diff --git a/src/components/landing/Pricing/index.tsx b/src/components/landing/Pricing/index.tsx new file mode 100644 index 0000000..257a2cd --- /dev/null +++ b/src/components/landing/Pricing/index.tsx @@ -0,0 +1,136 @@ +import React, {type ReactNode} from 'react'; +import clsx from 'clsx'; +import shared from '../styles/shared.module.css'; +import styles from './styles.module.css'; + +const CHECK_ICON = '/img/landing/icon-02.svg'; + +function FeatureItem({children}: {children: ReactNode}) { + return ( + <div className={styles.featureItem}> + <img + src={CHECK_ICON} + alt="" + loading="lazy" + className={styles.featureIcon} + /> + <div>{children}</div> + </div> + ); +} + +export default function Pricing(): ReactNode { + return ( + <section + id="pricing" + className={clsx(shared.landing, styles.section)}> + <div className={shared.container}> + <div className={styles.titleWrap}> + <div className={styles.titleInner}> + <h2 className={styles.title}> + Garder une longueur{' '} + <span className={shared.textGradient}>d'avance</span> + </h2> + <p className={styles.description}> + Ajoutez RaidProtect et commencez à protéger votre serveur dès + aujourd'hui. + </p> + </div> + <div className={styles.decoration} aria-hidden="true" /> + </div> + <div className={styles.grid}> + {/* Basic */} + <div className={styles.item}> + <div className={styles.preTitle}>Basic</div> + <div className={styles.priceWrap}> + <h2 className={styles.price}>Gratuit</h2> + </div> + <p className={styles.itemTagline}> + La sécurité essentielle assurée pour toujours + </p> + <div className={styles.featureList}> + <FeatureItem>Protections anti-spam</FeatureItem> + <FeatureItem>Blocage automatique des raids</FeatureItem> + <FeatureItem>Filtrage des bots malveillants</FeatureItem> + <FeatureItem>Modération & administration</FeatureItem> + <FeatureItem> + <strong>Et bien plus encore...</strong> + </FeatureItem> + </div> + <div className={styles.buttonList}> + <a + href="https://raidprotect.bot/invite" + target="_blank" + rel="noopener noreferrer" + className={shared.btnSecondary}> + Ajouter à Discord + </a> + </div> + </div> + + {/* Founder */} + <div className={clsx(styles.item, styles.itemCenter)}> + <div className={clsx(styles.preTitle, styles.preTitleFounder)}> + Founder + </div> + <div className={styles.priceWrap}> + <h2 className={styles.price}>Abonnement</h2> + <h2 className={clsx(styles.price, styles.priceCenter)}>2,99 $</h2> + </div> + <p className={styles.itemTagline}> + Offre de lancement réservée aux premiers abonnés + </p> + <div className={styles.featureList}> + <FeatureItem>Profil du bot personnalisable</FeatureItem> + <FeatureItem>Noms de sanctions custom</FeatureItem> + <FeatureItem>Accès avancé à l'Auth Manager</FeatureItem> + <FeatureItem>Accès étendu au Display Public</FeatureItem> + <FeatureItem>Accès à la Bêta publique</FeatureItem> + <FeatureItem>Rôle exclusif sur notre serveur</FeatureItem> + </div> + <div className={styles.buttonList}> + <a + href="https://raidprotect.bot/founder" + target="_blank" + rel="noopener noreferrer" + className={clsx(shared.btnPrimary, shared.btnPrimaryFounder)}> + S'abonner via Discord + </a> + </div> + </div> + + {/* Business */} + <div className={styles.item}> + <div className={clsx(styles.preTitle, styles.preTitleEnterprise)}> + Business + </div> + <div className={styles.priceWrap}> + <h2 className={styles.price}>Sur demande</h2> + </div> + <p className={styles.itemTagline}> + Pour les projets aux exigences de sécurité élevées + </p> + <div className={styles.featureList}> + <FeatureItem>Les fonctionnalités Founder</FeatureItem> + <FeatureItem>Instance dédiée et isolée</FeatureItem> + <FeatureItem>Audit initial de votre serveur</FeatureItem> + <FeatureItem>Intégration avec vos outils</FeatureItem> + <FeatureItem>Fonctionnalités sur mesure</FeatureItem> + <FeatureItem>Suivi régulier avec un expert</FeatureItem> + <FeatureItem>Support prioritaire</FeatureItem> + </div> + <div className={styles.buttonList}> + <a + href="https://raidprotect.bot/appointment" + target="_blank" + rel="noopener noreferrer" + className={clsx(shared.btnSecondary, shared.btnSecondaryEnterprise)}> + Prendre rendez-vous + </a> + </div> + </div> + </div> + </div> + </section> + ); +} diff --git a/src/components/landing/Pricing/styles.module.css b/src/components/landing/Pricing/styles.module.css new file mode 100644 index 0000000..d213038 --- /dev/null +++ b/src/components/landing/Pricing/styles.module.css @@ -0,0 +1,202 @@ +.section { + overflow-x: clip; + padding-top: 150px; + padding-bottom: 150px; +} + +.titleWrap { + text-align: center; + width: 60%; + margin: 0 auto 40px auto; + position: relative; +} + +.titleInner { + z-index: 2; + position: relative; +} + +.title { + margin: 0 0 10px 0; + font-family: var(--ifm-heading-font-family); + color: #fff; + font-size: 50px; + font-weight: 600; + line-height: 1.2em; +} + +.description { + margin: 0 0 40px 0; + color: #e1e0e9; + font-size: 18px; +} + +.decoration { + background-image: linear-gradient(180deg, #d35f5f 40%, #a561a3); + filter: blur(110px); + width: 50%; + height: 90px; + margin: 179px auto auto auto; + position: absolute; + inset: 0; + z-index: 0; + pointer-events: none; +} + +.grid { + z-index: 2; + position: relative; + display: grid; + grid-template-rows: auto; + grid-template-columns: 1fr 1fr 1fr; + grid-column-gap: 30px; + grid-row-gap: 30px; + margin-bottom: 30px; +} + +.item { + display: flex; + flex-flow: column; + justify-content: flex-start; + align-items: flex-start; + border: 1px solid #242328; + border-radius: 20px; + background-color: #070417; + padding: 30px; +} + +.itemCenter { + border-color: #d35f5f; + background-color: #1b1a25; +} + +.preTitle { + border: 1px solid #d35f5f; + border-radius: 50px; + background-color: #242328; + color: #fff; + text-align: center; + margin-bottom: 20px; + padding: 8px 20px; + font-size: 16px; + line-height: 1.3em; + font-family: var(--ifm-font-family-base); +} + +.preTitleFounder { + border-color: #ffab22; + background-color: #1b1a25; +} + +.preTitleEnterprise { + border-color: #5f6fd3; +} + +.priceWrap { + display: flex; + flex-flow: wrap; + justify-content: flex-start; + align-items: baseline; + width: 100%; + column-gap: 10px; + row-gap: 5px; + margin-bottom: 20px; +} + +.price { + margin: 0; + font-family: var(--ifm-heading-font-family); + color: #fff; + font-size: 30px; + font-weight: 600; + line-height: 1.2em; +} + +.priceCenter { + text-align: right; + background-image: linear-gradient(180deg, #d35f5f 40%, #a561a3); + -webkit-text-fill-color: transparent; + -webkit-background-clip: text; + background-clip: text; +} + +.itemTagline { + margin: 0; + color: #e1e0e9; + font-size: 18px; + line-height: 1.5em; +} + +.featureList { + display: flex; + flex-flow: column; + width: 100%; + margin-top: 50px; + margin-bottom: 50px; + column-gap: 15px; + row-gap: 15px; +} + +.featureItem { + display: flex; + align-items: flex-start; + justify-content: flex-start; + column-gap: 8px; + row-gap: 8px; + color: #e1e0e9; +} + +.featureIcon { + flex: none; + width: 18px; + height: 18px; + margin-top: 5px; +} + +.buttonList { + display: flex; + flex-flow: column; + align-items: stretch; + justify-content: flex-start; + width: 100%; + margin-top: auto; + text-align: center; + column-gap: 15px; + row-gap: 15px; +} + +@media screen and (max-width: 991px) { + .section { + padding-top: 100px; + padding-bottom: 100px; + } + .titleWrap { + width: 100%; + } + .grid { + grid-template-columns: 1fr 1fr; + } + .featureList { + margin-top: 30px; + margin-bottom: 30px; + } +} + +@media screen and (max-width: 767px) { + .section { + padding-top: 80px; + padding-bottom: 80px; + } + .title { + font-size: 42px; + } + .grid { + grid-template-columns: 1fr; + grid-column-gap: 20px; + grid-row-gap: 20px; + margin-bottom: 20px; + } + .item { + padding: 20px; + } +} diff --git a/src/components/landing/Servers/index.tsx b/src/components/landing/Servers/index.tsx new file mode 100644 index 0000000..4d8090a --- /dev/null +++ b/src/components/landing/Servers/index.tsx @@ -0,0 +1,210 @@ +import React, {type ReactNode} from 'react'; +import clsx from 'clsx'; +import shared from '../styles/shared.module.css'; +import styles from './styles.module.css'; + +type Badge = 'verified' | 'partner' | null; + +type Server = { + name: string; + icon: string; + alt: string; + href: string; + members: string; + badge: Badge; +}; + +const SERVERS: Server[] = [ + { + name: 'Wankil Studio', + icon: '/img/landing/iconWankilStudio.webp', + alt: 'Wankil Studio Discord server icon', + href: 'https://discord.com/invite/wankilstudio', + members: '40 000 membres', + badge: 'verified', + }, + { + name: 'Rocket League France', + icon: '/img/landing/iconRocketLeagueFrance.webp', + alt: 'Rocket League France Discord server icon', + href: 'https://discord.com/invite/rlfr', + members: '196 500 membres', + badge: 'partner', + }, + { + name: 'Slash FR', + icon: '/img/landing/iconSlashFR.webp', + alt: 'Slash FR Discord server icon', + href: 'https://discord.com/invite/fr', + members: '48 500 membres', + badge: null, + }, + { + name: "ZetFar's Family", + icon: '/img/landing/iconZetFar.webp', + alt: 'ZetFar Discord server icon', + href: 'https://discord.com/invite/zetfar', + members: '135 000 membres', + badge: 'verified', + }, + { + name: 'Ligue 1 McDonald’s', + icon: '/img/landing/iconLigue1.webp', + alt: 'Ligue 1 Discord server icon', + href: 'https://discord.com/invite/ligue1', + members: '15 000 membres', + badge: 'verified', + }, + { + name: 'Jobless', + icon: '/img/landing/iconJobless.webp', + alt: 'Jobless Discord server icon', + href: 'https://discord.com/invite/jobless', + members: '56 500 membres', + badge: 'partner', + }, + { + name: 'Blox Fruits FR', + icon: '/img/landing/iconBloxFruitsFR.webp', + alt: 'Blox Fruits FR Discord server icon', + href: 'https://discord.com/invite/bloxfruitsfr', + members: '124 000 membres', + badge: null, + }, + { + name: 'CYRILmp4', + icon: '/img/landing/iconCyrilmp4.webp', + alt: 'CYRILmp4 Discord server icon', + href: 'https://discord.com/invite/cyrilmp4', + members: '22 500 membres', + badge: 'partner', + }, + { + name: 'Fortnite House', + icon: '/img/landing/iconFortniteHouse.webp', + alt: 'Fortnite House Discord server icon', + href: 'https://discord.com/invite/officiel', + members: '66 500 membres', + badge: 'partner', + }, + { + name: 'PUBG MOBILE FRANCE', + icon: '/img/landing/iconPUBGMobileFrance.webp', + alt: 'PUBG MOBILE FRANCE Discord server icon', + href: 'https://discord.com/invite/pubgmfr', + members: '18 000 membres', + badge: 'verified', + }, + { + name: 'NationGlory', + icon: '/img/landing/iconNationsGlory.webp', + alt: 'NationsGlory server icon', + href: 'https://discord.com/invite/nationsglory', + members: '51 000 membres', + badge: 'partner', + }, + { + name: 'MASTU', + icon: '/img/landing/iconMastu.webp', + alt: 'MASTU Discord server icon', + href: 'https://discord.com/invite/mastu', + members: '17 000 membres', + badge: 'partner', + }, + { + name: 'Clash Royale FR', + icon: '/img/landing/iconClashRoyaleFR.webp', + alt: 'Clash Royale FR Discord server icon', + href: 'https://discord.com/invite/clashfr', + members: '34 000 membres', + badge: 'partner', + }, + { + name: 'TEAM VITALITY', + icon: '/img/landing/iconTeamVitality.webp', + alt: 'TEAM VITALITY Discord server icon', + href: 'https://discord.com/invite/teamvitality', + members: '19 500 membres', + badge: null, + }, + { + name: 'Genshin Impact FR', + icon: '/img/landing/iconGenshinImpactFR.webp', + alt: 'Genshin Impact FR Discord server icon', + href: 'https://discord.com/invite/genshinimpactfr', + members: '55 000 membres', + badge: 'partner', + }, +]; + +function BadgeImg({badge}: {badge: Badge}) { + if (!badge) return null; + const src = + badge === 'verified' + ? '/img/landing/serverBadgeVerified.svg' + : '/img/landing/serverBadgePartner.svg'; + const alt = + badge === 'verified' + ? 'Discord server badge verified' + : 'Discord server badge partner'; + return ( + <img + src={src} + width={20} + height={20} + alt={alt} + loading="lazy" + className={styles.badge} + /> + ); +} + +function ServerCard({server}: {server: Server}) { + return ( + <a + href={server.href} + target="_blank" + rel="noopener noreferrer" + className={styles.server}> + <div className={styles.avatarInfo}> + <img + src={server.icon} + alt={server.alt} + loading="lazy" + className={styles.avatar} + /> + <div className={styles.infos}> + <div className={styles.nameRow}> + <div className={styles.name}>{server.name}</div> + <BadgeImg badge={server.badge} /> + </div> + <div className={styles.memberCount}>{server.members}</div> + </div> + </div> + </a> + ); +} + +export default function Servers(): ReactNode { + return ( + <section className={clsx(shared.landing, styles.section)}> + <div className={shared.container}> + <p className={styles.title}>Nous protégeons les plus grands</p> + <div className={styles.marqueeWrap} aria-hidden={false}> + <div className={styles.track}> + <div className={styles.group}> + {SERVERS.map((server) => ( + <ServerCard key={`a-${server.name}`} server={server} /> + ))} + </div> + <div className={styles.group} aria-hidden="true"> + {SERVERS.map((server) => ( + <ServerCard key={`b-${server.name}`} server={server} /> + ))} + </div> + </div> + </div> + </div> + </section> + ); +} diff --git a/src/components/landing/Servers/styles.module.css b/src/components/landing/Servers/styles.module.css new file mode 100644 index 0000000..b3be400 --- /dev/null +++ b/src/components/landing/Servers/styles.module.css @@ -0,0 +1,145 @@ +.section { + z-index: 3; + position: relative; +} + +.title { + text-align: center; + margin: 0 0 20px 0; + color: #e1e0e9; + font-family: var(--ifm-font-family-base); + font-size: 18px; + font-weight: 400; +} + +.marqueeWrap { + position: relative; + width: 100%; + overflow: hidden; + display: flex; + align-items: center; + --marquee-fade-width: 80px; + -webkit-mask-image: linear-gradient( + 90deg, + transparent, + #000 var(--marquee-fade-width), + #000 calc(100% - var(--marquee-fade-width)), + transparent + ); + mask-image: linear-gradient( + 90deg, + transparent, + #000 var(--marquee-fade-width), + #000 calc(100% - var(--marquee-fade-width)), + transparent + ); +} + +.track { + display: flex; + flex: none; + align-items: center; + width: max-content; + color: #fff; + opacity: 0.85; + animation: marquee 60s linear infinite; +} + +.marqueeWrap:hover .track { + animation-play-state: paused; +} + +.group { + display: flex; + align-items: center; +} + +.server { + display: flex; + flex-flow: column; + align-items: flex-start; + justify-content: flex-start; + min-width: 275px; + margin-right: 30px; + padding: 30px; + border: 1px solid #444950; + border-radius: 0.8rem; + background-color: #242328; + color: #fff; + text-decoration: none; + transition: border-color 0.2s ease-in-out; +} + +.server:hover { + border-color: #d35f5f; + text-decoration: none; + color: #fff; +} + +.avatarInfo { + display: flex; + align-items: center; + column-gap: 15px; + row-gap: 15px; + font-size: 14px; + line-height: 1.5em; +} + +.avatar { + flex: none; + width: 50px; + height: 50px; + object-fit: cover; + border-radius: 50%; +} + +.infos { + display: flex; + flex-flow: column; + align-items: flex-start; + justify-content: center; + row-gap: 6px; +} + +.nameRow { + display: flex; + align-items: center; +} + +.name { + color: #fff; + font-size: 18px; + font-weight: 600; + font-family: var(--ifm-font-family-base); +} + +.badge { + margin-left: 10px; +} + +.memberCount { + color: #e1e0e9; + font-size: 14px; +} + +@keyframes marquee { + from { + transform: translate3d(0, 0, 0); + } + to { + transform: translate3d(-50%, 0, 0); + } +} + +@media (prefers-reduced-motion: reduce) { + .track { + animation: none; + } +} + +@media screen and (max-width: 767px) { + .server { + min-width: 240px; + padding: 20px; + } +} diff --git a/src/components/landing/styles/shared.module.css b/src/components/landing/styles/shared.module.css new file mode 100644 index 0000000..0a2a1cf --- /dev/null +++ b/src/components/landing/styles/shared.module.css @@ -0,0 +1,164 @@ +/* Shared landing-page tokens & utilities, mirroring the Webflow source */ + +.landing { + /* Colors from raidprotectbot.webflow.css */ + --color-black: #040114; + --color-gray-1: #070417; + --color-gray-2: #1b1a25; + --color-gray-3: #242328; + --color-gray-4: #e1e0e9; + --color-white: #ffffff; + --color-primary-1: #726cb3; + --color-primary-4: #a561a3; + --color-primary-rp: #d35f5f; + --color-darker-primary: #bd5454; + --color-border-doc: #444950; + --color-founder: #ffab22; + --color-enterprise: #5f6fd3; + + --radius-sm: 10px; + --radius-md: 20px; + --radius-lg: 50px; + --radius-doc: 0.8rem; + + --gradient-1: linear-gradient(180deg, var(--color-primary-rp) 40%, var(--color-primary-4)); + --gradient-feature-icon: linear-gradient( + 135deg, + var(--color-primary-1), + var(--color-primary-rp) 60%, + var(--color-primary-4) + ); + + color: var(--color-gray-4); + font-size: 18px; + line-height: 1.5em; + background-color: var(--color-black); +} + +.container { + max-width: 1360px; + margin-left: auto; + margin-right: auto; + padding-left: 30px; + padding-right: 30px; +} + +.sectionSpacing { + padding-top: 150px; + padding-bottom: 150px; +} + +.sectionSpacingTop { + padding-top: 150px; +} + +.sectionSpacingBottom { + padding-bottom: 150px; +} + +.textGradient { + background-image: var(--gradient-1); + -webkit-text-fill-color: transparent; + -webkit-background-clip: text; + background-clip: text; +} + +.btnPrimary { + display: inline-block; + border: 1px solid var(--color-darker-primary); + border-radius: var(--radius-lg); + background-color: var(--color-darker-primary); + color: #fff; + text-align: center; + padding: 20px 28px 18px; + font-size: 18px; + font-weight: 500; + line-height: 1.1em; + text-decoration: none; + transition: border-color 0.3s, background-color 0.3s, transform 0.3s, color 0.3s; +} + +.btnPrimary:hover { + text-decoration: none; + color: #fff; + border-color: var(--color-darker-primary); + background-color: var(--color-darker-primary); + transform: translate3d(0, -3px, 0.01px); +} + +.btnPrimaryFounder { + border-color: var(--color-founder); + background-color: var(--color-founder); + color: #fff; +} + +.btnPrimaryFounder:hover { + border-color: var(--color-founder); + background-color: var(--color-founder); +} + +.btnSecondary { + display: inline-block; + border: 1px solid var(--color-darker-primary); + border-radius: var(--radius-lg); + background-color: transparent; + color: var(--color-white); + text-align: center; + padding: 20px 28px 18px; + font-size: 18px; + line-height: 1.1em; + text-decoration: none; + transition: border-color 0.3s, transform 0.3s, background-color 0.3s, color 0.3s; +} + +.btnSecondary:hover { + text-decoration: none; + color: #fff; + border-color: var(--color-darker-primary); + background-color: var(--color-darker-primary); + transform: translate3d(0, -3px, 0.01px); +} + +.btnSecondaryEnterprise { + border-color: var(--color-enterprise); +} + +.btnSecondaryEnterprise:hover { + border-color: var(--color-enterprise); + background-color: var(--color-enterprise); +} + +@media screen and (max-width: 991px) { + .sectionSpacing { + padding-top: 100px; + padding-bottom: 100px; + } + .sectionSpacingTop { + padding-top: 100px; + } + .sectionSpacingBottom { + padding-bottom: 100px; + } +} + +@media screen and (max-width: 767px) { + .container { + padding-left: 20px; + padding-right: 20px; + } + .sectionSpacing { + padding-top: 80px; + padding-bottom: 80px; + } + .sectionSpacingTop { + padding-top: 80px; + } + .sectionSpacingBottom { + padding-bottom: 80px; + } + .btnPrimary, + .btnSecondary { + padding: 20px 26px 16px; + font-size: 16px; + } +} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 64dc99a..5c61249 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,30 +1,22 @@ import React, {type ReactNode} from 'react'; import Layout from '@theme/Layout'; -import Link from '@docusaurus/Link'; -import Translate, {translate} from '@docusaurus/Translate'; +import Hero from '@site/src/components/landing/Hero'; +import Servers from '@site/src/components/landing/Servers'; +import About from '@site/src/components/landing/About'; +import Features from '@site/src/components/landing/Features'; +import Pricing from '@site/src/components/landing/Pricing'; export default function Home(): ReactNode { return ( <Layout - title={translate({id: 'home.meta.title', message: 'RaidProtect — Bot Discord de protection'})} - description={translate({ - id: 'home.meta.description', - message: "Bot Discord qui protège votre serveur contre les utilisateurs malintentionnés grâce à un antispam et un captcha.", - })}> - <main style={{padding: '6rem 1rem', textAlign: 'center', maxWidth: '720px', margin: '0 auto'}}> - <h1> - <Translate id="home.title">RaidProtect</Translate> - </h1> - <p style={{fontSize: '1.2rem', marginTop: '1.5rem'}}> - <Translate id="home.intro"> - La nouvelle page d'accueil arrive bientôt. En attendant, retrouvez toute la documentation ci-dessous. - </Translate> - </p> - <div style={{marginTop: '2.5rem'}}> - <Link className="button button--primary button--lg" to="/docs"> - <Translate id="home.cta.docs">Accéder à la documentation</Translate> - </Link> - </div> + title="RaidProtect • Sécurisez votre serveur Discord" + description="RaidProtect est un bot Discord français ayant pour mission de protéger simplement votre serveur des utilisateurs malintentionnés."> + <main> + <Hero /> + <Servers /> + <About /> + <Features /> + <Pricing /> </main> </Layout> ); diff --git a/static/img/landing/411d8a698dd15ddf.webp b/static/img/landing/411d8a698dd15ddf.webp new file mode 100644 index 0000000000000000000000000000000000000000..db9fa672d58b622a3c0ecbea6ba42a7848b909c9 GIT binary patch literal 1644 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 literal 0 HcmV?d00001 diff --git a/static/img/landing/RP-embed-p-1080.webp b/static/img/landing/RP-embed-p-1080.webp new file mode 100644 index 0000000000000000000000000000000000000000..79efe3e5fa22b7e161abc11d0930f6939360fe40 GIT binary patch literal 7906 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 literal 0 HcmV?d00001 diff --git a/static/img/landing/RP-embed-p-500.webp b/static/img/landing/RP-embed-p-500.webp new file mode 100644 index 0000000000000000000000000000000000000000..e53508722bb7fe1b4281c81824322c16fb846045 GIT binary patch literal 3770 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∋Zn?y=S=Z{GE-)xf<sTs|*&J6;r}1AGuOVs(wCy<_1UXl7VA zs=_@V8Y@MgiAuh=_C_@mjl6lAb{RT!ri08|H+TrL04l_|NWCPhg;tVPet@^iH^?Ba zgx|_#c|B_fR#XamnH!bexeDK7M175#k??nVGEILy<g=q`gNZe}eis%kxwA^&r0rDP zw8prq){v5-s$L;Pz770YHI@ISkFM8!>ORP*U{5ka{#w+c-`RA{h=-m#jsq)^7d`Qf zckc0CCaS5UdhnF&S5E#N{>tczQpwLOfNA?%m1>VI7d?~iX1=+B)Zo_rRHHYuQY{rn zFCKn{Sz%Zu@xMNL1bg0x8xmIa=%`q?#*pxp0hdUD82m!%Kfly=zZGk4;rnC)=Ka2U z;~&NVgTn|&6KyA+i<ELngTv1uem26rqvN;BGDf}RABhNu`3c)^c^qXfC2URBsm6vX zF!-I*h5(OMU-uG~r_3GlLDjY){~WXZ<fLD^AiI+i`ts$W$Y|_RQ+3nTp01Re`R7vU zQMKKbbBQMq%laavEl=4i4vfrH<<~Fo*2wJVvduhgL7{*>K1E4Gi?_!9h5>vP`%tIv z1WuHpY|TfFyX!DAKW?)vRjO@iSYRkIT8YA0kk^za*^y@$p!>}>DByvxD0~OOmP|U0 z&}$osLp);Mpgl}M1m^6NjETQS$tp!Ko!&i-BGy1?>3-^gQdoYh1_CennO)pBi|JeX z6Jr`_BSeJP<d0Jrpa^%SA7jaKv~E;U#=lhf3MdY_M$3ANy0(A^G<xc8Q=?6Qi5t4E ZlO73~MlGo(<Jy3%$W(*>{`UXp{|0yDa9scZ literal 0 HcmV?d00001 diff --git a/static/img/landing/RP-embed-p-800.webp b/static/img/landing/RP-embed-p-800.webp new file mode 100644 index 0000000000000000000000000000000000000000..0b19aae76fb1b5da86484cb2662fa0b922d81000 GIT binary patch literal 6056 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 SF=0Qan+WUu@1yAdng0W>0>3u^ literal 0 HcmV?d00001 diff --git a/static/img/landing/RP-embed.webp b/static/img/landing/RP-embed.webp new file mode 100644 index 0000000000000000000000000000000000000000..88c8559d1700a57c5e2181f3940f23a691d954fa GIT binary patch literal 16550 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ⅈ@m~$&lx|%|!a& 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 L%uG!GIsJbC4Ba3R literal 0 HcmV?d00001 diff --git a/static/img/landing/favicon.png b/static/img/landing/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..6ab3afdcf73792c943542d89b66008f6afb13e30 GIT binary patch literal 1130 zcmV-w1eN=VP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH1OG`xK~#7Ft(QAY zR6!Jm&s-Mc3$sS!BPL|&v@q^ko2ZSgYir{ztN}YJ9vvl6Q!EXw)HF&$4H#pjFoB?` zQ4AXq)a5ar?{Wu*-Fugd@F&Z%b7#)~pU0e;Ya}BU!Z5!fQr@=qejrk`A_X1J$B(N< zWKqB8c8r;76Pf6!RH|9*n!_f%55t0zb}3=#5oR%5X)$KtR;99d$h>6W@tU=LI-y&R z0bM_IPKBgJBvC-@^{Y6{#|G)qXgo}cMo>TSE)0t&Ne-}uO>8$6faliQms!bM&YqS0 zy?a@vMk25chd;iT0&>1??QB-^b2o3wjpxth)aA?aV{%fyO-#u4#)h<acFOwvd^DB> z(xEj`ay5~258{F=WFfv%E=S)0(o2sXN!#7K@^yS%{wys;q5u(cb9jEHy&a(ib+k{1 zU&MlTL%(J1f=|TaKtCAcb6OW)P$R9e@!HCYd{M%`N{Ap*0r{uVQMvx~sch==)#+)u zsN)C#E=rN-#&l4WQ3SSk6&(PC9X&k_5g@!jXJ(|T#+@-pF^-o+hVb)^AOzQR4bOdS z?QZXGGpo7JS-YAPY6Rfvni66RVn><=B1c46hY$o1jRaKBYZP)V+FqL(#A8D3K&Y>l z_m?1u58-xEaq~$XVi-eA?VymTwdVru?N+h_qpl7>Yy3^b@ZPU}b_u@`KuYTbur=@J z^iNSv2<!$Y0HKI-yJcx)q;Y|@#o#16p4)Z+uStpXni^{0SMHoS!U=a6d=gg+L;w-B z<U-5`X~taT`d&2y1k1V|eNZcO#w+FYIwu9yG=q5Ia(Ed0a67n;n6eF{WkGzCNdzG! z0%;=ro<ITCM~lu0*vd(OJFv#QkrdE)KJ@mc8o+A@$PwXy_w)>+f}LaqW-ic1^jcB? zfja||u<EsA;77sbeIrFY*b$kET5*dWL`l1WR!sPRsgciGV72sI9soi(keI(XIGDOl zTk*x9r023RW-Ms}&4W7l?ww*;$-#0H(aKrjP7s}jdNK{^KV9{cAVq{T!g)@6b$i_3 z_v9Snwm4m!kn2stzbP^h32_5&!*EDjV}l3^>Aa=^gQNsO<oTMC;h}4{%wrs}A9c>} zgwE%=KYY7ViEi6_HzJKfzaA`){niYjUub;0BHPjbA$8&A8E3vbd{Vh}>#6ts-tT>A zK^9u;Zp7~TwV=gBn6JfzT)*4}g!@94yFx^+*YlEhJ#Tm~P!Yw}BixL$A|`*L<a2f7 zjYx{b36LM~+<TUew8A_ZyBVgwN=JD$^FcJUTlO1kpGkI9m3WNpUHadb(*z;;`2P4n w7v0gw6vTTySHeY2*__Uqs_E-_DdX$;Kb-7FtVE2^%m4rY07*qoM6N<$f^dWoZvX%Q literal 0 HcmV?d00001 diff --git a/static/img/landing/icon-02.svg b/static/img/landing/icon-02.svg new file mode 100644 index 0000000..2746652 --- /dev/null +++ b/static/img/landing/icon-02.svg @@ -0,0 +1,3 @@ +<svg width="20" height="21" viewBox="0 0 20 21" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M7 10.5L9 12.5L13 8.5M19 10.5C19 15.4706 14.9706 19.5 10 19.5C5.02944 19.5 1 15.4706 1 10.5C1 5.52944 5.02944 1.5 10 1.5C14.9706 1.5 19 5.52944 19 10.5Z" stroke="#E1E0E9" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> +</svg> diff --git a/static/img/landing/icon-geranium.svg b/static/img/landing/icon-geranium.svg new file mode 100644 index 0000000..e1a5ad8 --- /dev/null +++ b/static/img/landing/icon-geranium.svg @@ -0,0 +1,25 @@ +<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g clip-path="url(#clip0_3074_2383)"> +<path d="M13.5156 7.03516C13.5156 8.03906 14.1133 10.8828 10.0352 10.8828C8.19141 10.8828 6.84375 8.03516 6.84375 7.03516C6.84375 6.03125 8.33594 5.21875 10.1797 5.21875C12.0234 5.21875 13.5156 6.03125 13.5156 7.03516Z" fill="#33691E"/> +<path d="M16.5274 12.1406H3.53906V10.7734C3.53906 10.3945 3.84375 10.0898 4.22267 10.0898H15.8438C16.2227 10.0898 16.5274 10.3945 16.5274 10.7734V12.1406Z" fill="#FF7043"/> +<path d="M15.1602 18.9766H4.90627L3.53906 12.1406H16.5274L15.1602 18.9766Z" fill="#FF5722"/> +<path d="M16.1836 20H3.87891C3.3125 20 2.85547 19.543 2.85547 18.9766V18.6367H17.211V18.9766C17.211 19.543 16.7539 20 16.1875 20H16.1836Z" fill="#D84315"/> +<path d="M8.07424 1.37889C8.07424 1.37889 8.78517 0.593738 8.27345 0.296863C8.01174 0.144519 7.80861 0.374988 7.67189 0.640613C7.71486 0.421863 7.69533 0.1953 7.47658 0.113269C6.9922 -0.0703249 6.28127 0.312488 5.98049 0.597645C5.80861 0.761707 5.94142 1.01561 6.08595 1.20311C5.87502 1.01171 5.55861 0.835926 5.33986 1.22264C5.06642 1.70311 5.49611 1.82421 5.71095 1.85155C5.5508 1.84764 5.26564 1.88671 5.22658 2.23046C5.16799 2.71483 6.73439 2.47264 6.73439 2.47264C7.21486 2.42186 7.13283 2.1328 7.13283 2.1328C7.13283 2.1328 7.70314 2.31639 8.04689 1.96093C8.39064 1.60546 8.07424 1.37499 8.07424 1.37499V1.37889Z" fill="#E53935"/> +<path d="M15.1446 5.83204C15.1289 4.82032 14.2032 5.19141 14.2032 5.19141C14.2032 5.19141 14.8985 4.77735 14.1055 4.14845C13.3125 3.51952 13.0157 4.02735 13.0157 4.02735C13.0157 4.02735 13.1172 3.63671 12.5664 3.37109C12.0157 3.10546 11.2071 2.58984 11.3164 3.15624C11.3164 3.15624 11.5274 4.42579 11.8672 5.31642C12.2071 6.20704 12.1797 5.86329 12.5625 5.88673C12.9453 5.90626 13.5078 6.1836 13.7578 6.51954C14.0078 6.85548 14.125 6.06251 14.125 6.06251C14.125 6.06251 15.1641 6.84376 15.1485 5.83204H15.1446Z" fill="#B71C1C"/> +<path d="M12.6367 3.51172C12.6367 3.16797 12.5117 2.86328 12.3164 2.63672C12.1875 2.48828 12.125 2.28906 12.1797 2.10156C12.2305 1.93359 12.2578 1.75 12.2578 1.5625C12.2578 0.703125 11.7109 0.00390625 11.0352 0.00390625C10.7695 0.00390625 10.5234 0.113281 10.3203 0.300781C10.1602 0.449218 9.92969 0.519531 9.72656 0.4375C9.60938 0.390625 9.48828 0.363281 9.35938 0.363281C8.85156 0.363281 8.42187 0.757812 8.25781 1.3125C8.23047 1.30859 8.20703 1.30469 8.17969 1.30469C7.69922 1.30469 7.29687 1.6875 7.18359 2.20703C7.14844 2.36719 7.04297 2.49609 6.89844 2.57422C6.58203 2.75 6.36719 3.09766 6.36719 3.50391C6.36719 3.91408 6.58594 4.26564 6.90625 4.43752C7.05469 4.51564 7.16797 4.64064 7.22266 4.79689C7.39453 5.29689 7.87109 5.66017 8.4375 5.66017C8.60547 5.66017 8.76953 5.62892 8.91797 5.57033C9.20313 5.45705 9.53906 5.5508 9.67188 5.82814C9.91797 6.33986 10.3867 6.68752 10.9297 6.68752C11.7266 6.68752 12.375 5.94142 12.375 5.01955C12.375 4.89845 12.3633 4.78127 12.3398 4.66798C12.3086 4.51955 12.3516 4.37111 12.4336 4.2422C12.5625 4.03908 12.6406 3.78906 12.6406 3.51953L12.6367 3.51172Z" fill="#7CB342"/> +<path d="M19.0234 7.03906C18.914 6.73047 18.6601 6.47656 18.3476 6.37891C18.1094 6.30469 17.9922 6.32422 17.7578 5.98047C17.3906 5.44531 17.1758 5.02344 16.5273 5.02344C16.2695 5.02344 16.0273 5.10937 15.832 5.25C15.6758 5.36719 15.4648 5.34766 15.3242 5.21484C15.1328 5.03516 14.875 4.92188 14.5898 4.92188C13.9922 4.92188 12.6367 5.99609 12.9101 6.89453C13.0859 7.46484 13.2226 9.04297 13.2226 9.77344C13.2226 10.4297 13.6992 10.9727 14.3242 11.0781C14.4804 11.1055 14.6211 11.168 14.7461 11.2617C14.9765 11.4414 15.3633 11.6953 15.6679 11.6953C16.2304 11.6953 16.707 11.3516 16.9062 10.8633C17.0078 10.6133 17.207 10.4062 17.457 10.3047C17.9726 10.0977 18.3359 9.59375 18.3359 9.00391C18.3359 8.77734 18.2773 8.56641 18.1797 8.375C18.2812 8.32422 18.375 8.24609 18.4531 8.15625C18.5586 8.02734 18.7226 7.94922 18.9023 7.94922C18.9101 7.94922 18.9219 7.95313 18.9297 7.95313C19.082 7.69531 19.1406 7.37891 19.0195 7.03516L19.0234 7.03906Z" fill="#558B2F"/> +<path d="M14.1329 7.10546C13.9688 6.95312 13.4962 6.16405 13.3204 6.3164C13.0001 5.87499 12.254 7.24999 11.6407 7.32812C11.2032 7.38671 10.7891 7.58984 10.6016 7.98827C10.0704 9.10546 10.8712 10.1992 11.9258 10.1992C12.168 10.1992 12.3946 10.1406 12.5938 10.0391C12.7188 9.97655 12.8633 10.0117 12.9454 10.125C13.1446 10.4023 13.4258 10.5742 13.7344 10.5742C14.3438 10.5742 14.8399 9.90624 14.8399 9.08202C14.8399 8.2578 14.7891 7.71093 14.1368 7.10546H14.1329Z" fill="#7CB342"/> +<path d="M4.88282 7.89059C5.07423 7.67574 5.49219 7.85543 5.78516 7.70309C6.04688 7.56637 5.88282 7.12496 6.21094 6.7109C6.46485 6.38668 6.35157 5.89059 6.02735 5.63277C5.78516 5.43746 5.26172 5.36715 5.11329 5.3359C4.13672 5.14449 4.10938 5.18746 3.85158 5.50777C3.62111 5.79293 3.85158 6.10934 3.63674 6.65231C3.48439 7.03512 3.42971 7.44527 3.75002 7.70309C4.07032 7.9609 4.41798 8.41402 4.88282 7.89059Z" fill="#7CB342"/> +<path d="M4.4414 7.40238C4.19921 6.77738 3.40232 6.50395 2.66014 6.79301C2.44529 6.87895 2.2656 7.0391 2.12107 7.20707C2.01951 7.32426 1.8867 7.4102 1.73826 7.44926C1.39842 7.5391 0.976542 7.81254 0.921855 8.2227C0.867167 8.63285 1.04685 8.19926 1.71873 8.25004C2.54295 8.31254 5.15233 8.77348 5.47655 8.64848C6.21874 8.35942 4.68358 8.02348 4.4414 7.39848V7.40238Z" fill="#558B2F"/> +<path d="M7.82421 5.21871C7.64061 4.69137 7.33983 4.92574 7.33983 4.92574C7.33983 4.92574 7.66796 4.67574 7.01171 4.35152C6.35546 4.0273 6.28514 4.50387 6.28514 4.50387C6.28514 4.50387 5.82811 4.04683 5.31249 4.70308C4.79296 5.35933 5.41796 5.69918 5.41796 5.69918C5.41796 5.69918 5.14842 6.19918 5.47655 6.67574C5.80467 7.1523 6.46092 6.67183 6.46092 6.67183C6.46092 6.67183 7.12108 6.58199 7.50389 6.29683C7.88671 6.01168 8.01171 5.74215 7.82811 5.2148L7.82421 5.21871Z" fill="#C62828"/> +<path d="M10.5586 6.53517C10.5586 6.53517 11.6133 6.34376 11.1992 5.76173C10.8672 5.28908 10.5703 5.5547 10.4687 5.67189C10.5781 5.52345 10.8711 5.0547 10.4336 4.78126C9.91014 4.45314 9.69139 5.06642 9.69139 5.06642C9.69139 5.06642 9.15233 4.56642 8.65233 5.06642C8.15233 5.56642 8.83593 5.96486 8.83593 5.96486C8.49608 6.83204 9.49608 6.8047 9.49608 6.8047C9.28905 7.33204 9.43358 7.67189 9.8828 7.78908C10.332 7.90236 10.2461 7.26173 10.2461 7.26173C10.5312 7.8047 11.2695 7.53126 11.2969 7.07814C11.3203 6.62111 10.5586 6.54298 10.5586 6.54298V6.53517Z" fill="#D50000"/> +<path d="M6.25784 8.02346C6.25784 8.02346 6.03909 6.87893 5.84768 6.53518C5.65628 6.19143 4.98831 6.14456 4.7344 6.44534C4.47659 6.74612 3.78518 6.38284 3.76565 7.04299C3.74611 7.70315 4.293 8.08206 4.6055 8.19534C4.918 8.30862 5.24612 8.40237 5.22268 8.53518C5.19925 8.66799 4.69143 8.4219 4.49222 8.39846C4.293 8.37893 4.50784 8.7344 4.43362 9.13284C4.36331 9.53128 4.05081 9.97268 4.16409 10.3867C4.27737 10.8008 5.67581 10.1719 5.67581 10.1719C5.67581 10.1719 6.1719 10.7227 6.84378 10.5274C7.51175 10.3282 7.72659 9.26174 7.38675 8.6719C7.38675 8.6719 8.21097 8.08206 7.65628 7.71096C7.10159 7.33987 6.97268 7.67581 6.97268 7.67581C6.97268 7.67581 6.2305 7.02737 6.26175 8.02346H6.25784Z" fill="#B71C1C"/> +<path d="M10.7578 9.94533C10.7578 9.94533 11.625 8.97658 10.375 8.67189C10.375 8.67189 10.8281 7.9258 10.1172 7.53908C10.1172 7.53908 9.43358 6.6133 8.93358 7.2383C8.74998 7.46877 8.66795 7.68752 8.6367 7.87111C8.59373 7.68752 8.5117 7.53908 8.34764 7.57814C7.97655 7.67189 7.1367 8.09377 8.16405 8.66798C8.16405 8.66798 7.43748 8.21877 7.14061 8.53127C7.14061 8.53127 6.83983 8.10548 6.41405 8.81642C5.98827 9.52736 7.05467 9.54298 7.05467 9.54298C7.05467 9.54298 6.40233 9.75783 6.5078 10.2852C6.61327 10.8125 7.84373 10.5703 7.84373 10.5703C7.84373 10.5703 7.66405 10.8633 8.46483 10.8555C9.26561 10.8477 9.05858 10.2578 9.05858 10.2578C9.05858 10.2578 9.55858 11.2539 10.4258 10.7422C11.293 10.2305 10.7539 9.94533 10.7539 9.94533H10.7578Z" fill="#D50000"/> +<path d="M8.28123 7.14066C8.38279 7.07035 8.80857 6.08597 8.39451 5.83597C7.98044 5.58597 7.76951 6.2266 7.76951 6.2266C7.75388 5.39847 7.46873 4.96097 7.0156 5.21879C6.70701 5.39457 6.90232 5.84769 7.05857 6.12503C6.85544 5.83988 6.46873 5.4141 6.12888 5.73441C5.64451 6.19144 6.27732 6.59769 6.27732 6.59769C6.27732 6.59769 5.77341 6.53129 5.85935 7.07425C5.94529 7.61722 6.84373 7.6016 6.84373 7.6016C6.73044 8.02738 7.35544 8.01566 7.98435 7.67972C8.60935 7.34379 8.28123 7.14457 8.28123 7.14457V7.14066Z" fill="#D50000"/> +</g> +<defs> +<clipPath id="clip0_3074_2383"> +<rect width="20" height="20" fill="white"/> +</clipPath> +</defs> +</svg> diff --git a/static/img/landing/iconAntiraidWhite.svg b/static/img/landing/iconAntiraidWhite.svg new file mode 100644 index 0000000..df1d271 --- /dev/null +++ b/static/img/landing/iconAntiraidWhite.svg @@ -0,0 +1,3 @@ +<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M16.0001 29.1334C15.5342 29.1407 15.0745 29.0257 14.6668 28.8L14.2668 28.5734C11.1511 26.8106 8.55912 24.2526 6.7554 21.1606C4.95169 18.0685 4.00089 14.5531 4.00011 10.9734V10.7867C3.99588 10.3146 4.11709 9.84975 4.35135 9.4398C4.58561 9.02984 4.92452 8.68944 5.33344 8.45337L14.6668 3.20004C15.0722 2.96599 15.532 2.84277 16.0001 2.84277C16.4682 2.84277 16.9281 2.96599 17.3334 3.20004L26.6668 8.45337C27.0757 8.68944 27.4146 9.02984 27.6489 9.4398C27.8831 9.84975 28.0043 10.3146 28.0001 10.7867V10.9734C27.9967 14.5557 27.0418 18.0729 25.2333 21.1652C23.4247 24.2575 20.8274 26.8141 17.7068 28.5734L17.3068 28.8C16.907 29.0213 16.457 29.136 16.0001 29.1334ZM16.0001 5.53337L6.66677 10.7867V10.9734C6.66902 14.0815 7.49744 17.1332 9.06718 19.8158C10.6369 22.4984 12.8915 24.7155 15.6001 26.24L16.0001 26.4667L16.4001 26.24C19.1087 24.7155 21.3633 22.4984 22.933 19.8158C24.5028 17.1332 25.3312 14.0815 25.3334 10.9734V10.7867L16.0001 5.53337Z" fill="white"/> +</svg> diff --git a/static/img/landing/iconAntispamWhite.svg b/static/img/landing/iconAntispamWhite.svg new file mode 100644 index 0000000..4b3f4f4 --- /dev/null +++ b/static/img/landing/iconAntispamWhite.svg @@ -0,0 +1,3 @@ +<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M16.0003 2.66699C13.3632 2.66699 10.7854 3.44898 8.59273 4.91406C6.40007 6.37915 4.69111 8.46153 3.68194 10.8979C2.67277 13.3342 2.40872 16.0151 2.92319 18.6015C3.43766 21.1879 4.70754 23.5637 6.57224 25.4284C8.43694 27.2931 10.8127 28.563 13.3991 29.0775C15.9855 29.5919 18.6664 29.3279 21.1028 28.3187C23.5391 27.3096 25.6215 25.6006 27.0866 23.4079C28.5517 21.2153 29.3337 18.6374 29.3337 16.0003C29.3337 14.2494 28.9888 12.5156 28.3187 10.8979C27.6487 9.2802 26.6665 7.81035 25.4284 6.57224C24.1903 5.33412 22.7205 4.35199 21.1028 3.68193C19.4851 3.01187 17.7513 2.66699 16.0003 2.66699ZM26.667 16.0003C26.6699 18.3692 25.8763 20.6703 24.4137 22.5337L9.467 7.58699C11.3304 6.12435 13.6315 5.33071 16.0003 5.33366C18.8293 5.33366 21.5424 6.45747 23.5428 8.45785C25.5432 10.4582 26.667 13.1713 26.667 16.0003ZM5.33366 16.0003C5.33072 13.6315 6.12435 11.3304 7.587 9.46699L22.5337 24.4137C20.6703 25.8763 18.3692 26.6699 16.0003 26.667C13.1714 26.667 10.4582 25.5432 8.45786 23.5428C6.45747 21.5424 5.33366 18.8293 5.33366 16.0003Z" fill="white"/> +</svg> diff --git a/static/img/landing/iconArtofWar3.webp b/static/img/landing/iconArtofWar3.webp new file mode 100644 index 0000000000000000000000000000000000000000..12bb9f705b2132acea3a58f8df86b8384786c73e GIT binary patch literal 3796 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 Ka&{rCQ2+p$0bV2k literal 0 HcmV?d00001 diff --git a/static/img/landing/iconBloxFruitsFR.webp b/static/img/landing/iconBloxFruitsFR.webp new file mode 100644 index 0000000000000000000000000000000000000000..55d3cec5874c8b0de58a71b6d54ee566841ac48b GIT binary patch literal 4800 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 azaLSxXJ;^4@N!aWM+i93${uNl7ytlyNosxo literal 0 HcmV?d00001 diff --git a/static/img/landing/iconCaptchaWhite.svg b/static/img/landing/iconCaptchaWhite.svg new file mode 100644 index 0000000..2b52714 --- /dev/null +++ b/static/img/landing/iconCaptchaWhite.svg @@ -0,0 +1,5 @@ +<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M9.6422 10.9858C8.27974 12.6781 7.64399 14.8417 7.87437 17.002L5.57919 17.2763C5.27608 14.5072 6.08386 11.731 7.82528 9.55675C9.40846 7.54466 11.6638 6.1706 14.1779 5.68643L13.0535 4.40509C12.8486 4.16981 12.7455 3.86275 12.767 3.55147C12.7776 3.39734 12.8185 3.24682 12.8873 3.10849C12.9561 2.97016 13.0515 2.84673 13.168 2.74526C13.2845 2.64379 13.4198 2.56626 13.5663 2.51709C13.7127 2.46792 13.8674 2.44809 14.0216 2.45871C14.1757 2.46934 14.3262 2.51022 14.4646 2.57902C14.6029 2.64782 14.7263 2.74319 14.8278 2.85969L17.9257 6.39912C17.9681 6.46037 18.0061 6.52461 18.0392 6.59132C18.0398 6.66533 18.1048 6.65757 18.1307 6.73678C18.1566 6.81599 18.1286 6.92633 18.1741 6.96205L18.2097 7.12242C18.2082 7.21082 18.1937 7.29852 18.1667 7.3827C18.1691 7.42793 18.1633 7.47321 18.1498 7.51642C18.1078 7.64371 18.0441 7.76273 17.9613 7.86817L17.8399 8.0226L14.1744 11.3743C14.0626 11.4778 13.9315 11.5582 13.7885 11.6108C13.6456 11.6635 13.4936 11.6873 13.3414 11.681C13.1892 11.6747 13.0398 11.6384 12.9016 11.5742C12.7635 11.5099 12.6395 11.419 12.5366 11.3066C12.4331 11.1948 12.3527 11.0637 12.3001 10.9208C12.2475 10.7778 12.2236 10.6259 12.2299 10.4737C12.2362 10.3215 12.2725 10.172 12.3367 10.0339C12.401 9.89575 12.4919 9.7717 12.6043 9.66884L14.4818 7.95472C12.5639 8.36818 10.8514 9.44069 9.6422 10.9858Z" fill="white"/> +<path d="M23.0821 22.6354C22.8841 22.4034 22.6024 22.2591 22.2984 22.2338C21.9944 22.2086 21.6928 22.3046 21.4592 22.5009C20.1073 23.6223 18.4328 24.2831 16.6793 24.3871C14.9259 24.4911 13.185 24.0329 11.71 23.0792C9.85875 21.942 8.53407 20.117 8.02639 18.0046C7.51872 15.8921 7.86949 13.6645 9.00178 11.8103C10.1856 9.98857 12.0436 8.71064 14.1683 8.25675C16.2929 7.80287 18.5109 8.21007 20.3358 9.38907C21.9983 10.431 23.2431 12.0225 23.8539 13.8871L21.9537 12.1981C21.8397 12.097 21.7069 12.0195 21.5628 11.97C21.4188 11.9204 21.2664 11.8999 21.1143 11.9094C20.9623 11.919 20.8137 11.9585 20.677 12.0258C20.5403 12.093 20.4182 12.1866 20.3178 12.3011C20.2167 12.4151 20.1392 12.548 20.0897 12.692C20.0402 12.8361 20.0196 12.9885 20.0292 13.1405C20.0387 13.2926 20.0783 13.4412 20.1455 13.5779C20.2127 13.7146 20.3063 13.8367 20.4209 13.9371L24.1357 17.234L24.302 17.3387C24.4155 17.41 24.5405 17.4611 24.6714 17.4895C24.7158 17.4985 24.7614 17.4995 24.8062 17.4925C24.8927 17.5106 24.9814 17.5158 25.0695 17.5081L25.2253 17.456C25.2561 17.4071 25.3688 17.4235 25.4448 17.3894C25.5209 17.3554 25.5065 17.2916 25.58 17.2833C25.6429 17.2434 25.7028 17.199 25.7594 17.1505L28.9573 13.7011C29.0626 13.588 29.1446 13.4554 29.1986 13.3106C29.2527 13.1659 29.2777 13.0119 29.2722 12.8575C29.2667 12.7031 29.2309 12.5513 29.1668 12.4108C29.1026 12.2702 29.0114 12.1437 28.8984 12.0384C28.7853 11.9331 28.6527 11.851 28.5079 11.797C28.3632 11.743 28.2092 11.718 28.0548 11.7234C27.743 11.7345 27.4483 11.8689 27.2357 12.0972L26.0783 13.3488C25.3352 10.8987 23.7339 8.79859 21.568 7.43334C19.2244 5.92756 16.3792 5.413 13.6567 6.00256C10.9342 6.59212 8.55674 8.23765 7.04605 10.5781C5.58698 12.951 5.12886 15.8058 5.77221 18.5161C6.41556 21.2265 8.10783 23.5709 10.4777 25.0349C12.3691 26.2676 14.6064 26.8605 16.86 26.7262C19.1137 26.592 21.2647 25.7377 22.9964 24.2891C23.1124 24.1872 23.2068 24.0632 23.2741 23.9243C23.3413 23.7854 23.3801 23.6344 23.3881 23.4803C23.3961 23.3262 23.3731 23.172 23.3205 23.0269C23.268 22.8818 23.1869 22.7487 23.0821 22.6354Z" fill="white"/> +<path d="M7.80781 18.0147C8.33817 19.9037 9.51371 21.5471 11.1301 22.6592L9.81521 24.5604C7.70978 23.1036 6.19994 20.9369 5.56244 18.4572L4.35249 19.6581C4.13023 19.877 3.83008 19.9988 3.51807 19.9964C3.36358 19.9953 3.21082 19.9637 3.06853 19.9035C2.92624 19.8434 2.7972 19.7557 2.68877 19.6457C2.58034 19.5356 2.49465 19.4053 2.4366 19.2621C2.37854 19.119 2.34925 18.9657 2.3504 18.8113C2.35155 18.6568 2.38311 18.504 2.4433 18.3617C2.50348 18.2194 2.5911 18.0904 2.70115 17.982L6.04385 14.6727C6.10239 14.6266 6.16418 14.5848 6.22873 14.5476C6.30256 14.5425 6.29083 14.4782 6.3683 14.4474C6.44577 14.4167 6.55762 14.4378 6.5905 14.3903L6.74837 14.3449C6.83669 14.341 6.92512 14.35 7.0108 14.3718C7.0558 14.3667 7.10134 14.3697 7.14531 14.3805C7.27493 14.4146 7.39764 14.4709 7.50795 14.547L7.66955 14.6588L11.2398 18.1117C11.35 18.217 11.4382 18.3429 11.4996 18.4824C11.5609 18.6218 11.594 18.772 11.5971 18.9243C11.6001 19.0766 11.573 19.228 11.5174 19.3698C11.4617 19.5116 11.3786 19.641 11.2727 19.7506C11.1675 19.8608 11.0416 19.949 10.9021 20.0103C10.7627 20.0716 10.6125 20.1048 10.4602 20.1078C10.3079 20.1109 10.1565 20.0838 10.0147 20.0282C9.87285 19.9725 9.74345 19.8894 9.63389 19.7835L7.80781 18.0147Z" fill="white"/> +</svg> diff --git a/static/img/landing/iconChatzone.webp b/static/img/landing/iconChatzone.webp new file mode 100644 index 0000000000000000000000000000000000000000..62d5fa5dae7b1b0cbf36574ef7be2a535aeac2e1 GIT binary patch literal 5986 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 QAUSes3S-T?X6VX*0J=rhW&i*H literal 0 HcmV?d00001 diff --git a/static/img/landing/iconClashGG.webp b/static/img/landing/iconClashGG.webp new file mode 100644 index 0000000000000000000000000000000000000000..c58a38323fd3f5ee3bbc64b3a1526a54961d5e5d GIT binary patch literal 1646 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 literal 0 HcmV?d00001 diff --git a/static/img/landing/iconClashRoyaleFR.webp b/static/img/landing/iconClashRoyaleFR.webp new file mode 100644 index 0000000000000000000000000000000000000000..ade9f1e5a07c9f80b9260a257b71ae8a29be83d8 GIT binary patch literal 4066 zcmV<84;}DQNk&H64*&pHMM6+kP&gpY4*&r0J^-BoDu4ih06uLjl0~E<p_j=IU_b`M zwE$X>=)W`N^3k5l^1Ipc(f(tASmAdslK)v-c>K-zyn1Thck~+RgZ~TvR@ZNg|ElnJ z%vaC!Ey#an+K%_fonG4hUu9o^v;=ou&hcf61AdG3ivM%UkL>^OJ%s;YI^U-&Sl%}O zXmHXlg~2NKx8AoF!N8G5ds!8ZlRr%%dRM)^(LBOiRPe0GD=_J|f(4t|Os4aTwRif| zAKUf}m6UQA+Fc1Tv}P#O?Q9jy@IhA_i{l9m%fVOipcISzO%q$#nT4T|)NF;&&M(C} zV9hN6{1JPEST6P@0Rq!;Ge{#YdKO|5^ddMS=4P$~H3g#}jTL)Vq_N#tD72f-AEGq6 zn9>kn`;kaR<>#O!kwB!GCKXlg;-o4h5LlQ9;ksO%`vv);1lfbY8Q$k%%eb_W?KIgo z6~!)^AH?V(LL)uv-9BZDy+_J~P)~YDdKVX?rnBMws(VOLeCSGS#)|go+<lkOH^lcG zhrt87I4h$O2dU_zwappbX5Mw=phLl+0`PblV{kFR#G(OpW$^)_1n2G|z`fpmsTJ}I zni|-+zux7Xt=YvSl=FpQ{c$T3y8bmdu-X`6nMW@AMRlP1y(Zq~&LSizhq_z5onk6T zpbh`JlKkw*r>e{3rf1KZ#sI(o;(zqy(#y+if9vESP$1f!{{ATLgkjv|mKgt*01j#4 z&1whuSeshpCDz%4qrt7A-<<};jIdu1pwZb267HFt2%Nf|TG}8{k=5<!;F1HMG<(9g z&SQW)Z{PP)k|89*^S@z~jA@O#yMC689MQh-U_oY8Uz7NJsYWPzxi}}dS);^bQt+tC z+O3BfX*K_W&(8Sz#U2+CB$w@_?(wh<+r=gV9ew$sj5SFY@fd~X>wVxb%GABlS{k=C zcQzgK%t#jB;B)yG5k}+Ff;@7{Raf+Tdv`h)+}E@;UOYP?l%|S$Wi3p**#?>dh}@O? z9)Z&xkeD?N&0dz+HxkVh&0l9aRic?$A2vUl5q@_sLEoY<sd`Gc*?-pe3Jf2>nYXbH zpKQBF@C5^vi0R8PF|&Ede6=lxc=k9yae}fsR-|@T@BR6-YU356yp9i8NfIJD6%-2F zw#OX@?tO9#y4-&=w@M=6JSr*ccDCd1yU_tzO|~Sn>o2m9U#97HO_P5R?m)*{)9pz- z?*FIbv}ElOamhG)^PtC+IbDvr4Tzz5JZV@QHE+OC43Y(+SU`K`YA=k5e4W>K9bUe5 zvR3BOn7i|iabTVBN1-3C05OHd_cWfTwC1~OkZcdy!)KHl!Z<+`=^cE(o%l*<j{H+^ zPV#4lkkyjzK68*h+{?)!Gztr$Z}t<HQxPB-F26xzJWHt#TqA9gv|kygti{~Ax3B7A z8C|5ccUGlUhcUM1usjrjI)!P0<+`aOQ&nU}m?JF*AY767e-Wo6c?45dS$E%d9Pe+& z|3|4;E|K~?eB^$u@PMZ5<B1x-H#o1Dci(1W&S#CNHHKt~zqwSI?0lfIk$ot)4UQ!! zm7ceP1All|#9Gs@XM0Wi?L1=nMHju=8H%<UY`vao?GG%Tx@{$Gcw)xLcJZplm+*Ea zZdQWDR0xRubCI<vg*kvjY&{m$yL&A-<FkvG2+k+ld>eh774hG{?H(9<b*)PdRJ#vs zx8b6TUz5~znag;rBDQg%oO5D1&<B*K|Jd~ioEcH*2DIBa-4Qlu1LlAa6qL1I6SK0B z)}G|^gy9MpFKRm`<47<@x7fwt{~=fM?(JB;Pm@ZmhbokYcVAhfobZ}<$mA9rE1*Ju zJ*;f3hNXf_jPb`17dQ7;h<`IEecwC^!1W#o4?xb~I$t$Daw|O+kebX1B?%wK;Y!BM z(cK(do|9Yu4~J?tWY4ouh9FjsTXnT=P(X{R(C;M{v3;Z99mhd9JN>1cZ#JVu+4`WM zHd>2CULB}k8kb79w5zDRj89D{6~&4iEquxdmd&1#6kZ+)d28UPom6a>3~Ad3Mkf$$ zutAeyR(h+*r0jF<(^K=-YOt~!tQ|!t`D{TKj^~;SJK)N;sJJ;F9ns>@&Q84AmOt!m zuB+?|1w4L`@UN!r4~c3XduP*b5s*s>0T3JgR{V!lv2d@M9xMJj)vGv!oq#wIBfmeQ zOsu^l9NG8$TI{4gV7TH=Htr-v^`w6{GX}8^I9Vzgs=`ZmkXKE|BGbpCLF!U;KgE*t z#65Nw5W0s{>r^vp%US)+Eq}~RFedVh1l^U(j7e(jQJObHA-PKvi~oPo93Nr32ZR`- z4;hEmxR<@^ua8&z0ZuT>2@*$k+O;sVxcknvHqy<5m03jNK4dEG{k#}0Wcr_tZ&D2R zL&nImq?dwk3a}7(1gQMH*bQe?hbZ@R5$~$J#fqPJb#tAWrsfDx%Kw$=8-sr@{n~Bf zEQKN5)sNxKdd8KuH^6F^tj1w2jQh3LyvNe--bhvs{cpfb)^=b7m{^G{ov`HX!}3&B z_l$zQv;Wyu9cQH6&(I-x1<J2rYE;T}hBKD+Rc|rLQ_S7MKNLN_da^L+?RM=qp3Xu+ zGP%n|#4=9Uxbwhg$wm26DYp1VuL7diTO7u@(da=GP;#H)jd|H*9`k*lKVt6v5>b(W z3E{ash=VJ#(70ZDHv$_PYy1noq7D<M4fsSMgzzbU8~Az3C*_m$G(p6!o&6c?My7bM zx=60H{{p`ib>%Phx6;`0V5KmuX)_ZgJlxZAc{<E~I59@Q$X(Ve8f8h{AXd?A1+>Ev zBYF1b3!BFjCY*ELGB*w}%$=*I8`6>B&lQlB&9-GA&i>=lL(^#3#E}xVV2+>PaS{Hx zn4{|S3cQ6C`ynClfU%(j)JKu9KdFGgm}<hioG3+zd)#y>Pi?MC6*FPCJ?}6Sr4Kaq z_@DAF&73cWVrO8+kgJV(ws*|m8ChsaM@*jnJu?()ctrE0kDgOu%fZ{iPq>d)U-XMu zr^(boaGxX^`%kjJCdU7bqH&}^WoGWB_T43ZKH=(<2#F6iO|4oc3ZZ<byWaZc?4Ug3 zi-O)@>+q10l~=sN7|&?=EzBfi{S=2@7jM@ZG@x+6vocpwnw~cY-;Y|Z_kVl-tf~e! z=f|QJjc2PG`A}Ngc>I|@*EMh3NzBTz(h^3(xCg;ae25XKSEJeBWL6p3oF)3PL)gj2 zidz@sDqSiu7rJ1y&G}JBJ`zm0?=;|1795CVrMTNDaMU;9ofHYR0-#&zUxCY16CDm* zpQ{5Dzdy=MBp6VXy`k`>DKiSg;B)6ra3WZGosj%VjAd8=&A=SoItZl=PN+*QWIN<y zesoFDykmf!FsEt|%Oo18o@?-|#o3Eoo!d`cZhfiH5FX7oV=bo6fp)9vxKUxhgrh>? zRxr9a6%I>`!S|tB2RxOVjnFxy*nhkTLI~+ZdS31<y@wIq>At9AI+PQ-pIRGPxt~ZW z^!Sc>f+T-MovXxOntzdNx+))~NCy7hs<e}n_S$+1%=<mzH0w3QBW?I!s8pnSwNDYi zM(fk-)C@;s2rmq%|K*-vrp}3DyJ{!dVJw){S)zLa<ONqt*8NQ%gOWI)6VlKZHCa(1 z{FCrvdYM855L9(WBJiZ$+>wo>$KP!#Wxx%m`((BJ2ErYcG;Ca<R1Co0WWLVP_W8x- zHn>L&tW##~BNS$RS01}JNDDFYcOIy@r4i75RZZ!*kVnw(bKZuT@EPfkM#Ou~f>szF zU3z!4td`i5F`B$;O5+1vG@dG0E-sGILar`R!xSDh>*cCZ+7Q-Yg7H`{cO-}eYONgf zYeXavdyf7;d!10+D8{pXPyifPwWm@30b)KZiMqpI6*DbH_E$IJ4~JHPftLicVmJ3( zz8E*nOziC4ta}ekBq82Uh`h1aSb;7;lkoF4mA6hqE*Qag1#-~kk<4FGn|JHczQzP} z$iPQa9c4r*4jsk%R4BfG56rpIS+~J)rY?`ynTzw<PQ|Nl=1T(<@L7q$+W~Rv>@UT~ zU>?^@28#z?@L9jhCIjj)uN{~m-sBIRC%Yr<*^yd8Tgw?e_qynSMsR>0nYw^6i|762 zGb#@oRWcVL;KV%4b{0CjLjl`v*yZ%)n3o)o`G$-Nq^VrV`M<8LL0afPcwgL_nRX7p zTa+sXs<)VO!MjJ<FhT5fx!-3gi$feAo{fs<)dcm0Q<<j)MokZc`U!sLuJXP|W+x>d zh#gJnO#Q2J7YRr^CQhBMpmu?N`Md3du2U)p1l;zMLT58yMely2_*(i9m{(g&RME9P z!Npqy(xcIq=7a%gCV*LR^z_C<Y^`4Sm9pLIfbW!%wh#Jn5ZG81t*~#!vyv?un-!<_ zFtmaFxe2*?+$YZK?ZSYH^!`^&iF&+b7tYNM?1&Xs387i|%?cQE{zHs>2VNCcz+(hA z48dLI)}n`*3V?x%5IitFX|<LPk@ipk1BBoUxyB4Y?#l(IBU-{!Ot>1t97Z=9aS1hP z>rUBOO&@KL(#-BGYV~{hWzS}zMSj94;8uoX?ZJ&*@jd@Kx6jIpCgKg3G~HA&xXum~ z9V0LC;0l-Qw%7NT$U6GJA55;Ws}wX8i0AKM?<1@skiu&IR1KK)N3wkhii{YKGV@c1 zWQAZmmd#MXAG8t;dw%c*&nLh}l?kp*jqEZU;Zuek6*3Z?k;oMLN$efcXAEWWC@VI@ zrZsKOS#*^rkp33d(XHh6Pc9NAZrsp^D>m&alltt00jPe?f6?@`9r@_rvmwbD`g@?K z5yq(e&Mr&5@JD=hmq_my)52URoo)NqAcmpz)totd01xHK*zcML_cmjZBuU;uT%gFZ zAHeVKSgi4JuSHo}%yhDIe!?=ISx2PW{S7|}5dglg@Z2H*cZ)mJH25Y&N5jP$4m2rz z8;9Wn#Ga)bX`#yW+ly<d%Dnm2OpEE7>NoPb`!ojibW9d~w!wr-xktT@^z#SK=mxES zC>m@@5HJ0Qx@o>l^xK|NOiE>BYQ#SFF#RhaCu7|Thj#MZ<p0`^*r3#zfQ0~-L`|By zk_Gvx+f^joKam`>slB~a6J-l0Gz$>Dy5<twrkrW%Zvf)Q=XGk@n~82Qr244n%mJP| zmlrAl--N|-cPRVL|8K!ZPH=aGJdQaW$r$+YSzNEE_l&FC(8p@5XDI}-VqA}aL<lVT z1C-i=$TsSKy=io>A!F6U#cF>!#THEeI_k`r<6iB)G4!31k?En#vT<g1nh3xj)!!%E zs{f^~$g|L6W!n^_Di$)!!eyBL_1~;GALViA?ie!<Znn_knOQAkCl?)P8r?R&0}`2J U3Id4OFv}CA$W-A+Z@qP302?w7fdBvi literal 0 HcmV?d00001 diff --git a/static/img/landing/iconCyrilmp4.webp b/static/img/landing/iconCyrilmp4.webp new file mode 100644 index 0000000000000000000000000000000000000000..a31c0c41ad4bdcbcfe2addcb4787c6c7dbc724f0 GIT binary patch literal 2592 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 CNFzf4 literal 0 HcmV?d00001 diff --git a/static/img/landing/iconDiscord.svg b/static/img/landing/iconDiscord.svg new file mode 100644 index 0000000..8a937d5 --- /dev/null +++ b/static/img/landing/iconDiscord.svg @@ -0,0 +1,3 @@ +<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M15.2378 3.11668C14.0905 2.59027 12.8602 2.20243 11.5739 1.9803C11.5505 1.97601 11.5271 1.98673 11.515 2.00816C11.3568 2.28957 11.1815 2.65669 11.0588 2.94525C9.6753 2.73812 8.29889 2.73812 6.94374 2.94525C6.82099 2.65028 6.63936 2.28957 6.48043 2.00816C6.46836 1.98744 6.44496 1.97673 6.42154 1.9803C5.13593 2.20172 3.90567 2.58956 2.7577 3.11668C2.74776 3.12096 2.73925 3.12811 2.73359 3.13739C0.400044 6.62366 -0.239213 10.0242 0.0743851 13.3827C0.075804 13.3991 0.0850274 13.4148 0.0977985 13.4248C1.63741 14.5555 3.12878 15.2419 4.59246 15.6968C4.61588 15.704 4.6407 15.6954 4.65561 15.6761C5.00184 15.2033 5.31048 14.7048 5.57511 14.1805C5.59072 14.1498 5.57582 14.1133 5.5439 14.1012C5.05435 13.9155 4.5882 13.6891 4.1398 13.4319C4.10433 13.4112 4.10149 13.3605 4.13412 13.3362C4.22848 13.2655 4.32286 13.1919 4.41297 13.1177C4.42927 13.1041 4.45198 13.1012 4.47115 13.1098C7.41696 14.4548 10.6062 14.4548 13.5172 13.1098C13.5364 13.1005 13.5591 13.1034 13.5761 13.1169C13.6662 13.1912 13.7606 13.2655 13.8557 13.3362C13.8883 13.3605 13.8862 13.4112 13.8507 13.4319C13.4023 13.6941 12.9361 13.9155 12.4459 14.1005C12.414 14.1126 12.3998 14.1498 12.4154 14.1805C12.6857 14.704 12.9943 15.2026 13.3342 15.6754C13.3484 15.6954 13.3739 15.704 13.3973 15.6968C14.8681 15.2419 16.3595 14.5555 17.8991 13.4248C17.9126 13.4148 17.9211 13.3998 17.9225 13.3834C18.2978 9.50067 17.2939 6.12798 15.2612 3.1381C15.2562 3.12811 15.2477 3.12096 15.2378 3.11668ZM6.01502 11.3377C5.12812 11.3377 4.39735 10.5235 4.39735 9.52354C4.39735 8.52358 5.11395 7.70934 6.01502 7.70934C6.92315 7.70934 7.64686 8.53073 7.63266 9.52354C7.63266 10.5235 6.91606 11.3377 6.01502 11.3377ZM11.9961 11.3377C11.1092 11.3377 10.3784 10.5235 10.3784 9.52354C10.3784 8.52358 11.095 7.70934 11.9961 7.70934C12.9042 7.70934 13.6279 8.53073 13.6137 9.52354C13.6137 10.5235 12.9042 11.3377 11.9961 11.3377Z" fill="white"/> +</svg> diff --git a/static/img/landing/iconDistrict10.webp b/static/img/landing/iconDistrict10.webp new file mode 100644 index 0000000000000000000000000000000000000000..d9454266c1aea28b66ea7cf16230d16018d16d33 GIT binary patch literal 3738 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≪vh%UbmrBu-wS74gE8^KXCc)9rm~b7$G!Z zwh+DkCo81hmpd5nPc2b@wL0o4YESq0;D0PiQ597sneK1Cg5LfW50S~87o!5P&oGcG zG%0%z&u7`gG|3If{i8efcSq(6_(P^Kg<#Ibb&A_x;%ck{ffX|E`BJ?V%)vj?XMJ_5 zlyG8(vBmpOTU@-d;ia`9J8j}O@K0Pn*D&uV{9@1mt@;V5BU+BLwfmQ2a$|q%F}BIm zK?a7uBTKVzBm%ecN0-ZsX*!I@;_VUz-N$EX%)zp6#2gy5&;9Z7(U|q9Zip16T;eJc z%*I(*f#KhI5=xf&ma-aApxD2LmavSpzm0OS%DTvaSDOoZl~Q%_!nsJzyDTGCoI^2P z3_$d@DbYJ(Usbij>1?;kN_cvmUKcRiPSMa6tzQ3&Ns)rnxJRC2u~ucW5SfMy_(L)& zu1MC03+SVT>1)2GpQu1-kM2JX%8ILB)_XT<iVUUwUw#5lfg$%d3)hTlCeKUn9Tzw* zc+lPD;?*68WI_tVT7QBdQ&g^|uo>y-)wFBu^GiIAA3Et0##x{<@7Z}e9Am%FM)I>y zGPw>G_Hi4pO}qfu+BJtBr+;%htE|R-c32Erx|ayY`H7ok7}KJXoy|>c2Hl}bhlPK1 zF9JS>)s`dE<|=1Xf?U;MqS3-*T6y+?Hsow46`_e-sosuSp1)IXS;%@Ly|RyiKRr7| zte5nZb-}5i<M)1kVj|ch1~ceeg*KEGlLn(bFF1&bO~hu5TFuY!WZUz{WL$L}fLE2= zx;7<h(fpd^8U&aR41|n@m<{r3ikTSmwrY~{gp1wKDIv1<23&w#uJ8^cB!y9g5w7C8 zY`aO1ZrMSEkddPD@2F*_Uk3#7sWJCD7&`+?IYsJcm--gYwq1FKlvLY&dDQ=7(!sNV zgsg)M;0Jq*>^L|tJQ~Y}i-bT)9y!I231maS2x4pXbASJ{U;raPgOCGsC}2~6E&u=k E0A>DaIRF3v literal 0 HcmV?d00001 diff --git a/static/img/landing/iconDmlockWhite.svg b/static/img/landing/iconDmlockWhite.svg new file mode 100644 index 0000000..eaa8a8e --- /dev/null +++ b/static/img/landing/iconDmlockWhite.svg @@ -0,0 +1,6 @@ +<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M15.9998 17.3337C16.7362 17.3337 17.3332 16.7367 17.3332 16.0003C17.3332 15.2639 16.7362 14.667 15.9998 14.667C15.2635 14.667 14.6665 15.2639 14.6665 16.0003C14.6665 16.7367 15.2635 17.3337 15.9998 17.3337Z" fill="white"/> +<path d="M21.3333 17.3337C22.0697 17.3337 22.6667 16.7367 22.6667 16.0003C22.6667 15.2639 22.0697 14.667 21.3333 14.667C20.597 14.667 20 15.2639 20 16.0003C20 16.7367 20.597 17.3337 21.3333 17.3337Z" fill="white"/> +<path d="M10.6668 17.3337C11.4032 17.3337 12.0002 16.7367 12.0002 16.0003C12.0002 15.2639 11.4032 14.667 10.6668 14.667C9.93045 14.667 9.3335 15.2639 9.3335 16.0003C9.3335 16.7367 9.93045 17.3337 10.6668 17.3337Z" fill="white"/> +<path d="M25.4263 6.5732C23.2386 4.3712 20.3512 3.00148 17.2618 2.70019C14.1725 2.39889 11.0748 3.1849 8.50285 4.92271C5.9309 6.66051 4.04585 9.24121 3.17269 12.2199C2.29953 15.1986 2.49297 18.3885 3.71967 21.2399C3.84752 21.5049 3.88947 21.8032 3.83967 22.0932L2.66634 27.7332C2.62113 27.9494 2.63036 28.1735 2.6932 28.3853C2.75604 28.5971 2.87051 28.7899 3.02634 28.9465C3.15407 29.0733 3.30617 29.173 3.47345 29.2394C3.64073 29.3059 3.81973 29.3378 3.99967 29.3332H4.26634L9.973 28.1865C10.263 28.1517 10.5572 28.193 10.8263 28.3065C13.6777 29.5332 16.8677 29.7267 19.8463 28.8535C22.825 27.9804 25.4057 26.0953 27.1435 23.5234C28.8813 20.9514 29.6673 17.8537 29.366 14.7644C29.0647 11.675 27.695 8.78758 25.493 6.59987L25.4263 6.5732ZM26.533 17.7199C26.2723 19.3118 25.6539 20.824 24.7244 22.1424C23.7949 23.4609 22.5784 24.5513 21.1665 25.3317C19.7547 26.1121 18.1842 26.562 16.5733 26.6477C14.9624 26.7335 13.353 26.4527 11.8663 25.8265C11.3391 25.6023 10.7726 25.4844 10.1997 25.4799C9.94938 25.4816 9.69965 25.5039 9.453 25.5465L5.693 26.3065L6.453 22.5465C6.60437 21.7322 6.50679 20.8912 6.173 20.1332C5.54686 18.6465 5.26608 17.0371 5.35179 15.4262C5.43751 13.8153 5.88748 12.2449 6.66786 10.833C7.44824 9.42114 8.53868 8.20467 9.85713 7.27513C11.1756 6.3456 12.6877 5.72722 14.2797 5.46653C15.9507 5.19229 17.663 5.31983 19.275 5.83861C20.8869 6.3574 22.3522 7.25251 23.5496 8.44992C24.747 9.64732 25.6421 11.1126 26.1609 12.7246C26.6797 14.3365 26.8072 16.0488 26.533 17.7199Z" fill="white"/> +</svg> diff --git a/static/img/landing/iconEclipse.webp b/static/img/landing/iconEclipse.webp new file mode 100644 index 0000000000000000000000000000000000000000..b5ced10056d2413a192f9104bed804f2e2c0a5a4 GIT binary patch literal 2430 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 literal 0 HcmV?d00001 diff --git a/static/img/landing/iconFlexingSeal.webp b/static/img/landing/iconFlexingSeal.webp new file mode 100644 index 0000000000000000000000000000000000000000..72aa067d3baf9106c1ca2523643365f4f559d34d GIT binary patch literal 1076 zcmV-41k3wUNk&F21ONb6MM6+kP&gnU1ONcg8~~jGDu4ih06uLnl}IEaq9G}fxyXPG ziDv-LZ0^XgYT;0ewc@AQ8%sJtJm7og#+jJd??EE%Ns>V+PDQY()p}oV`hYs&VzrEd z^6Um4%P@=87tiXGJwC<%6z=ztZDe9wo~I#^_pKK_Adkm#fURG-O#)eXbSz(}E}LvP z<bd=tPo0Nb8u(ZIJHG+Rg$-9uR5b-bGxa7|3m^v)PWPH&<edL+jDw!OfHJ;qX7Z1! zysJ?j;*;28bn#SqR(i)nc|!^-zsqamco~9EtZnI?qBYQ89kpC<p>j<^0L-qIt(B&M zLEQ=80002~_`t#)NP*V?7R2(r9o3MpKmRoV7nK)@uk1#-J&Z|2dxp9`C@B?wfQ-E| zwec`%P}^QGQhMDjEH6T3qXa{($$adw216P6rmnS&FXNC^=Yt&HuGGe&ZQA;Qhv{MR z`kqQ<N8I-OQlAxpoSZpkrXe6Z64B0!!tWsURLq38W)sk5tcuXi=yRD5s?p)qbUyz} z0E{6UYW5B}jPADyFNz@GOl*Ck<dQ#>$4FuFxBbyTmUMLONH&DBhhi&6C^+C3^?=(6 zD+2RSN|=BS-YoZRq_`8r!LyWfUzOTTGRF+UMM$<$j6m-Gt7QO^h$QI6Xa%Jhk~k<w zT@`^{_cxG$_xdr&-Z-zN!X^GSMrCZDjP=iP*R?6y4e9FB_F~Q9iU?Vbc4g~ZHrKSX zfj0aUpf^^OoeUy~5dlm`Dq2Ne9_kce`)i0&n+OD&-*ITEr1mIv00Q-)k+`ZxN4wt+ zee3mC2kwU3o~sUBX1@{8oFUKWHB$yofrT8I-(MJ@Cy@3%M0-C~^42|FM5hQhv7X^h zLttR;NP5)Rk|~6yOn4+?y_1CqB7scud0*||5TMYjK7#H@$0IJzAFG;+`RI0lyEUZy z)l&=I7b(x#;G5*Txhj=2MGfR_J*R&L4-`jR_Q6u|i<40akSX<oaqIC{)+Gk<N9}o2 z&tI#Vb9R+x<(PzHZyd8WHB!E)B91^CSP=};*3_^4i$jq49a`&&{$ib{6jccCn+}3a zAnSqYb@fbpMxBsPydz%q@q5>8W$nG)W)gNQwq20m05x*`1SUw7?otNUyjp-~&MVT6 zhr7^!GfmQAzmFAS<eL^P7S}H{|EMcQf9_PsT^c?ao-8DAn-pHpk%@U#fof+;MWU!3 z{}LHBxutPx0`$cJcAq_G><@=itp2^+&6Lr#9d${IF^h18K_IE^Ze!q*XJp&!3dYLn zA~;g21oGp3!@HX>XplSsB>PLdyu6Ue(q`a1&B$5EN3oz0KP|WsU2&@PDhQk$zW*&N ua|$Gq9KqDBY))RIX^K<uaPlo@9GNV=buJ7<Kqd;L)2)(^b8RB-Ob`IoDGD_J literal 0 HcmV?d00001 diff --git a/static/img/landing/iconFortniteHouse.webp b/static/img/landing/iconFortniteHouse.webp new file mode 100644 index 0000000000000000000000000000000000000000..5f79842eb07341242aec8109195209067d0bd71a GIT binary patch literal 6176 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 literal 0 HcmV?d00001 diff --git a/static/img/landing/iconGenshinImpactFR.webp b/static/img/landing/iconGenshinImpactFR.webp new file mode 100644 index 0000000000000000000000000000000000000000..fdf60b969362823cfee04cbe937334564f64c6e7 GIT binary patch literal 3292 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 a;xFVN)e}D)fb8y&713xh8ba84us{H?mvATm literal 0 HcmV?d00001 diff --git a/static/img/landing/iconGitHub.svg b/static/img/landing/iconGitHub.svg new file mode 100644 index 0000000..80ac1a0 --- /dev/null +++ b/static/img/landing/iconGitHub.svg @@ -0,0 +1,10 @@ +<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g clip-path="url(#clip0_3813_1856)"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M9.00745 0C4.02656 0 0 4.05625 0 9.07437C0 13.0856 2.57996 16.4811 6.15904 17.6828C6.60652 17.7732 6.77043 17.4876 6.77043 17.2473C6.77043 17.037 6.75568 16.3159 6.75568 15.5646C4.25002 16.1055 3.72824 14.4828 3.72824 14.4828C3.32557 13.4312 2.72893 13.1609 2.72893 13.1609C1.90883 12.605 2.78867 12.605 2.78867 12.605C3.69837 12.6651 4.17572 13.5364 4.17572 13.5364C4.98089 14.9185 6.27833 14.528 6.8003 14.2876C6.87478 13.7016 7.11355 13.296 7.36706 13.0707C5.36863 12.8603 3.26602 12.0791 3.26602 8.59353C3.26602 7.60196 3.6237 6.79071 4.19047 6.15978C4.10105 5.93447 3.7878 5.00283 4.28008 3.7559C4.28008 3.7559 5.04062 3.51547 6.75549 4.68736C7.48969 4.48873 8.24686 4.38768 9.00745 4.38683C9.76799 4.38683 10.5433 4.49211 11.2592 4.68736C12.9743 3.51547 13.7348 3.7559 13.7348 3.7559C14.2271 5.00283 13.9137 5.93447 13.8242 6.15978C14.4059 6.79071 14.7489 7.60196 14.7489 8.59353C14.7489 12.0791 12.6463 12.8452 10.6329 13.0707C10.9611 13.3561 11.2443 13.8969 11.2443 14.7533C11.2443 15.9702 11.2295 16.9468 11.2295 17.2472C11.2295 17.4876 11.3936 17.7732 11.8409 17.683C15.42 16.4809 18 13.0856 18 9.07437C18.0147 4.05625 13.9734 0 9.00745 0Z" fill="white"/> +</g> +<defs> +<clipPath id="clip0_3813_1856"> +<rect width="18" height="18" fill="white"/> +</clipPath> +</defs> +</svg> diff --git a/static/img/landing/iconJobless.webp b/static/img/landing/iconJobless.webp new file mode 100644 index 0000000000000000000000000000000000000000..b9b660d38ea2582b9fc916026460cb568560c57e GIT binary patch literal 1036 zcmV+n1oQh+Nk&El1ONb6MM6+kP&gp?0{{Rp8UUREDu4ih06uLpmPaHbA|WV~%HV(v ziD?qx08J(TQtfyAm*HKMAJ+a`x!2ma`p4ss09Iez|NK7~|0=rrF}v!0{a@=}n$M)a z@q2;)F8;^=H?QyQpR%v+0kUD{)`a7zo;UpXe2qGXk#G2UH~0Nb*Ux1685{h@$xQeE zqBOI(s}v54Q(hhs`iI`r#ozgGGN5yvK2fB}>UPeOA+%O|>eTwKjT9|N1x|r6&mjSC ze&VouRRmpPGn;1r1gby<hu#I|vRE-!ORR)I7dCG)%skr7Kmh*ybr1>h6!Cc;PcueY zzZ)=1QZVb`jt@R#C6);Qbn`!YP~?G`6(`MDvK(n4bKzq0Mvy7g0sDuc1Q}6_NSYid zu8TNfhcrHF1?XNcw&ES==FvRc=#xYai(C#KVFDpxXAt`PRBmXc<DJTf3+zZjt-44n ze2IDhg+f;+GYkPNvSHNh#U#D1dt6)bz`@4xra@Qw(~*_<X`jVZZc;hV7DXUO@eP_B zjpNyp;62Oi0s|NmtnK0~R1Q|$1ZRF-$?P!6#r+H|gdBL%*zhk?;zK=ab$nt*DHm*v zNyfL9!iHiwjLzR|&$+=y&~o@I+<r~UXY_UaqyY87j%k^mWJ?NFT{R6FgE00D8Ahag zrgp_uTJS`fP~Z+F*;jo;hzA#-<QX7eVeeg_3<$Ff>}*nxblP(~r{AE$4)%~UXjYtM zvK4}K4N~;(hKR1poWiHdS8I)-HBb+s@~`&bIoVFc^^ccQqxfjb1+Ui}i7*jub_5AB zsDusAeOM>IgSvOG%!LnuL#I*?xo}=$K6X?hGE^M`6`JTINtjnDKO=Yc8W``8a}gi` z`W{vO{vDu9I&}_Xd6Sev&Q69mI|g2p<jxzvHh{%`e)+|_?~pHe5@4xvDNHU1-g0QA z{17gkO<g~`^EH57CaKva6CIgGvZ71t3|@E_b4qN4Y}j2X&j*)tg-HsK9eX+=bT1M& zAU040c^10;j;m`u>%urvY(#dvyz6O8TLSg0)7|;_(9BH`eHPxm24#XwJSYLoB;o8? z6lWErc_F|nz9y`W+3&X~$Z#SR8_tDmvWLmh7IzAlg4pujJOAMCUAcrgfbH51)UUhK zDn^qt{U3R{|IR5CF*n%$n#!k$*h(?>W7}d*?8i37^^c^E9mEoPi$8THBE<yroP2Ab zX}2j%NyP*1vQw9!Q4SU<$}O)&Bj_xQK}jZFiK8!H<kQL(+v-lbcd;Xr@NoLiL<~{> zD=fpEY{Yse#pK$Ksh{qYRaB+1erJL7Szu^22X(KYoE@<(p-$Vf_#c-CF#20|!&hJc G0002>S@2>2 literal 0 HcmV?d00001 diff --git a/static/img/landing/iconLigue1.webp b/static/img/landing/iconLigue1.webp new file mode 100644 index 0000000000000000000000000000000000000000..3aeef05691b9f62bc94a8506fc7bcebd0435b1fc GIT binary patch literal 1662 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 I000000BJf?>;M1& literal 0 HcmV?d00001 diff --git a/static/img/landing/iconLinkedIn.svg b/static/img/landing/iconLinkedIn.svg new file mode 100644 index 0000000..d730c0b --- /dev/null +++ b/static/img/landing/iconLinkedIn.svg @@ -0,0 +1,10 @@ +<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g clip-path="url(#clip0_3813_1859)"> +<path d="M16.6676 0H1.32891C0.594141 0 0 0.580078 0 1.29727V16.6992C0 17.4164 0.594141 18 1.32891 18H16.6676C17.4023 18 18 17.4164 18 16.7027V1.29727C18 0.580078 17.4023 0 16.6676 0ZM5.34023 15.3387H2.66836V6.74648H5.34023V15.3387ZM4.0043 5.57578C3.14648 5.57578 2.45391 4.8832 2.45391 4.02891C2.45391 3.17461 3.14648 2.48203 4.0043 2.48203C4.85859 2.48203 5.55117 3.17461 5.55117 4.02891C5.55117 4.87969 4.85859 5.57578 4.0043 5.57578ZM15.3387 15.3387H12.6703V11.1621C12.6703 10.1672 12.6527 8.88398 11.2816 8.88398C9.89297 8.88398 9.68203 9.97031 9.68203 11.0918V15.3387H7.01719V6.74648H9.57656V7.9207H9.61172C9.9668 7.2457 10.8387 6.53203 12.1359 6.53203C14.8395 6.53203 15.3387 8.31094 15.3387 10.6242V15.3387V15.3387Z" fill="white"/> +</g> +<defs> +<clipPath id="clip0_3813_1859"> +<rect width="18" height="18" fill="white"/> +</clipPath> +</defs> +</svg> diff --git a/static/img/landing/iconMastu.webp b/static/img/landing/iconMastu.webp new file mode 100644 index 0000000000000000000000000000000000000000..2152f05aee91ceb0a0690336816abdbc5aa0ae94 GIT binary patch literal 4784 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 Ka@s8xN&o<|!c#E- literal 0 HcmV?d00001 diff --git a/static/img/landing/iconMetaLock.webp b/static/img/landing/iconMetaLock.webp new file mode 100644 index 0000000000000000000000000000000000000000..ab75bb5262402ba3d71d0edc288a60a5dfa04633 GIT binary patch literal 4730 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 I2v7h30JOMEYXATM literal 0 HcmV?d00001 diff --git a/static/img/landing/iconNationsGlory.webp b/static/img/landing/iconNationsGlory.webp new file mode 100644 index 0000000000000000000000000000000000000000..2cde6d0ac49d6f1bb5e6eff1b57fea06d51e2247 GIT binary patch literal 1244 zcmV<21S9)WNk&H01ONb6MM6+kP&il$0000G0001g004gg06|PpND%-4009S3{fGzy zkP!a=S0ehK`Ue13P&go*1ONaK8~~jGDu4ih06uLplSiZ@A)zXh8aRLri9rqkN)oLL zm7mz>*e(eKe~OKh;#iRs(&)_M?J&UD&_tXYP@cQn1LtRs+-Zqa*p=vT>8Esoc=qSt zh`_=gp!1)_HokMyNk`=e3Iy6<b56f0-<l~(w<9Y1toC8|qXW#mmIlRbV`;K42XH$c zrSP-h^sCFPtJTdis7y-sU1h~-o7*;7hfGzd7OlvfEp^s>4+nv6=Dk0Dv%<gbL204U zz7Nw6#nGg`J={2Kn0MuzZj?m@YlH<_x8fa8U=S7R0Yk5~02Nee2R1P90RB(T|If7l z*+2CUR)6sQeO~>&<!n&i<<uKj{m8pQf6Kal&;Ym+ffwuxb26v6fvtT_0$QA3+dlCM z8Or$__|E5V#RAx0M=hS)rMC0V8<od*TN;M1l>lbHiG|Sw0+v<4uV~iwrt{(xBv7%# z5$0GJq3qP@UE{rKW8kU{B=`qF%<<)V#e{WcJZ!^K8EH^i%fQEU{{5?XltRZCcma}< ziPb<?s)jn%5}B)?*oooBQ+;^PeeWin-@i$pjK5ndSB<`6&ZC$wyJ->(U9Xjw(2YSv z{xKMOPa`^%0OQjV73GQclRMEBl}UD=_DvA6AQQVM)h^i9PWZ-<zbIL4^=iDpHG@|E z{D>nJEKT{0?lh9L_J}x~ITAp;%`2HH6xY6&%OUIG^gmguxQY-WwJ{cdP6N6At)Q1> zt=G-=MN0il_H1+;Q(#!YM>4jAN;nk$g&)7lEvepibEg^t3jSDv;xJextSJOi9f$kE zKquNuHt5%20*|*S<E?96jpyxpBuJO=(;q=iQ<1}Gi8kBP;-3Eq6VvCY>Z#fGcj|CT zEq_>g^F?Qa{caQe?z>4)+b8JJ++&9<)!opm%YNvnIz5p`XNPD3nQcwGMQ4ZV*$bn} z-D_uHz~q0e@}H|&T0aP8K%-I?65&IuRMot~TUmC^awv8C^uK+`qcMJWu<RJp=*mV- z#ZQ=o!qkLg55B$HJkeZckLd1)=*2D;rA@jkNF!EyEB>Q24LL-)+tIfNk2B}6;^k|u zvH`je4j&_RFq1-}B2tF)jskZyq4ZFmTCsUR@%hn%Gtiud*jx?O!Vtpl{Xo4`72W?l zMNuZi>~!=f%p(aWTRV4^azM^pxC|fQ`Jnxg4v@B=>S|h<GK_l~Lri!k@aCdE0{qye z-cQnwH-;__Nu5g9e0p6dk9?rl@&r-3K({R$KSt{Q=$lpk^W@Y4Y&h?a$4wTQ>iP5{ zYYNWyrI(FcljLOEIb8LdyTf`<cKTF@s|e0>@DH@c`NF(n9~$83_KMSbw?lWv`L>HD zAdbQigBv@WXz0XuZB|M0vLkR+T%wmzd&2gY*g9<6D8n!6ydIol4$nB;&uo~gcyN72 z_P*&$)v##a`}>)vbpQdnFH<3G2MbAjma?bF;s%VTGUQ5GK>E3D84JW83EvC1H2#HR z@H2?m;zM{IgQv`ANmUrlK@ru;|JxC3)9^gCk?Scp7Zv_4RE0((sO7~i2+z5enhTEr G0000h-)-Ok literal 0 HcmV?d00001 diff --git a/static/img/landing/iconPUBGMobileFrance.webp b/static/img/landing/iconPUBGMobileFrance.webp new file mode 100644 index 0000000000000000000000000000000000000000..832c71cd561b6f69109b416747775545cf9524a1 GIT binary patch literal 2684 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 literal 0 HcmV?d00001 diff --git a/static/img/landing/iconPUBGMobileUK.webp b/static/img/landing/iconPUBGMobileUK.webp new file mode 100644 index 0000000000000000000000000000000000000000..7712f12a73b10f8548dc02267b64d267cdb81a4f GIT binary patch literal 4848 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 Wf=cBmwxe`;jnM#PbqH->0002d1$-I+ literal 0 HcmV?d00001 diff --git a/static/img/landing/iconReportWhite.svg b/static/img/landing/iconReportWhite.svg new file mode 100644 index 0000000..825b4bc --- /dev/null +++ b/static/img/landing/iconReportWhite.svg @@ -0,0 +1,3 @@ +<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M25.693 6.24C25.3887 6.02068 25.0369 5.8762 24.6662 5.81829C24.2956 5.76037 23.9165 5.79065 23.5597 5.90667C22.6186 6.17131 21.6438 6.29709 20.6664 6.28C19.2218 6.20159 17.8054 5.84863 16.493 5.24C14.8717 4.49018 13.118 4.06874 11.333 4C7.4797 4 5.9997 5.33333 5.73303 5.52C5.60544 5.64506 5.50429 5.79448 5.43557 5.95939C5.36686 6.12431 5.33199 6.30135 5.33303 6.48V26.6667C5.33303 27.0203 5.47351 27.3594 5.72356 27.6095C5.9736 27.8595 6.31274 28 6.66636 28C7.01999 28 7.35912 27.8595 7.60917 27.6095C7.85922 27.3594 7.9997 27.0203 7.9997 26.6667V20.9333C9.06213 20.5266 10.1963 20.3406 11.333 20.3867C12.7776 20.4651 14.194 20.818 15.5064 21.4267C17.1277 22.1765 18.8814 22.5979 20.6664 22.6667C22.2737 22.7274 23.8727 22.4076 25.333 21.7333C25.7266 21.5484 26.0603 21.2566 26.2961 20.8912C26.5318 20.5258 26.6601 20.1015 26.6664 19.6667V8.14667C26.6659 7.77463 26.5775 7.40798 26.4083 7.07662C26.2392 6.74527 25.9941 6.4586 25.693 6.24ZM23.9997 19.4533C22.9369 19.8587 21.803 20.0446 20.6664 20C19.22 19.9234 17.8025 19.5656 16.493 18.9467C14.8686 18.2077 13.1162 17.7911 11.333 17.72C10.2097 17.7006 9.08877 17.8307 7.9997 18.1067V7.22667C9.05965 6.80978 10.195 6.61904 11.333 6.66667C12.7794 6.74331 14.1969 7.10109 15.5064 7.72C17.1308 8.459 18.8832 8.8756 20.6664 8.94667C21.7904 8.96326 22.9115 8.82873 23.9997 8.54667V19.4533Z" fill="white"/> +</svg> diff --git a/static/img/landing/iconRocketBaguette.webp b/static/img/landing/iconRocketBaguette.webp new file mode 100644 index 0000000000000000000000000000000000000000..56df15ff82ce4d223067d0f2de5c57b4addb8ec8 GIT binary patch literal 4300 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 literal 0 HcmV?d00001 diff --git a/static/img/landing/iconRocketLeagueFrance.webp b/static/img/landing/iconRocketLeagueFrance.webp new file mode 100644 index 0000000000000000000000000000000000000000..2d44604e4ed07f6716fb083c6a8274a33847cc25 GIT binary patch literal 5144 zcmV+z6zA(wNk&Ex6aWBMMM6+kP&il$0000G0001g004gg06|PpNQVUg00FRs{huLu z(l5K(&zNi5cHhP)duDChw(T9Py{G>7*tTuErn{7p8S#tX_wbAARK#_kh?oHSKTETv z$Gvp7!$0(;A0PdX)zi+s=;BK+y6Do2FFN<M)qfoQ<1c;a@ZDbexTP#oGdsNch_C$V z%-aVZ4g10EXa4CcN4$E6nTYhBb;x&4xYMHL_RbT&bI7xL-CJJy{Fa9Vot1~Se12uQ zJ2TJw*ogx~aB$+so;TBh-mAWSgGV&|4c~rMuU$|7()EJK%JpA*dTVC)UbBd@UE6!M z4U6x*9udF(or_J)zvB)>{*HIdH<9ggEfRR`K3Q!~{+}R;^1mn7lO5GZGW$nmHEi`q zK|<w^TUGln68qn3SElC5O4%K$xg)F6djNo>LI6C_t1{mQz^U*6`twy5Hk2fS0c<Q( zSsVZmBvJqj7OO0*D^7z~>kC!p`vAO2L+JtZ=c~*<2!JPPFbv?q*(%vx$|S-AxGSr4 z9RRpAFaTUviOy5QG)&ZaRC$XsX(-f|YJXIdg#5AE_tYpM->ddfHBLjWK3eS{WztZp zgQ~qw4bouL>#9AT0T@n!w*dI@)#m#Eyh%YR0Q&RQ=n4QbNdf>|K{fsZ0LIDqM;%{G z%NOg|SB;XfZynDN06E9cI{@;GI(iQS@RRtJ0Pt|H4mueC#)&wYYW=zz#;;IcuV?Q> zShaUOJCp#pjGYw#<qq}GWdLBJ2LP8*%|B3O><aaRy7p3q#7&&qtFEnv0HlbU1%TmJ zb<r9Cm;|g*?e9}X)WoUx)%O$&z?U&|0AQa|Uv?e<n3#EWURED{OcfHb;K!)Jr&s_| z#LFxDlqTp@05Fj|l^T7svK+18o15ACF#ss7brP+|wr+-gqX394OKS@sq2Ex$FOyK% zjR(Wgc$|yGLtfTYcJ}6`7L&=wc)XsEOX=R(SyOaiEz@O^k2l8S!I*s)Byb=#K6gtK z)1{b<27}RrTP052GS?h^unki=9}P!i+ZG4?L2BVv_gC{$S5VAwG|HtpVRipjZJ<wW zMw~4s%)T6#d0ytm`5J<DG8h?Y#zB9ITDi^r)0k0Fys?ua&&x^46|@}>#<o6Tb^kW) zppQ&pLH(YKJU7N|N}J&*ugO7wgj%|E+Y~g<g~<(X27nt5^BTNYw=K1WjtI5ZncNh9 z8UQyM6;&Mc5!Bk=`2lH*mNL%^HwAzl4tX;SeSWV!^m<k-Eecv=au)(*JS?V2fL~8- zK3c)GO>=H?uK*Or1swFz)aqRxQo<e3g)vS6TzbHYdT5t+(VGPTSh@kg<;Fu>=N$mZ zo2lh9YYMJ207@$WAPBC_w2hwHSKtl->@dCmRBHd51D?ACans&R9nAi&;C+`MKJ@pj z3$*=h3M>)0ZF}nGYmI{I5<{EUQdd793a&d2T0TIX&Hfk=?g~rbk6CwU`2q#c-EbcI zf@SLR6Yf+H-v#fX?|cGv`z7lNp4;a=^!iJv>w6dl=C(0In?0!ehdKr3b}>V{Ln(&u z^$P6U<Qdw(m*V(Qui&{o-b4G3QY=626})Q;duac0isy$|L0mhWK=X$vrtc^f#I`^z zg5^6XuKQ0EV5KQ>2u}8=*seShfb-3GM(~jpitqDp3c$N2*dut;^C`wVpB8{vsY{$7 zc-qbs=Y^k(0vy-l9fI=n1&Vd{mQeuS*5N#Yqqk%f@t0f|04!JW4&m!wLUG^f7zu!_ zY|1i%a?Dl~`|RL{1AukYoJ08GgELCtlU75Jk`-G)c=bt?#+kQ18UVOtE*arR-#SCd zeEdHo05Bsg|9Ctlb*~#j({I>|QoHoojm>O)c8L=F#G`G<9{og0^h;Mg;8$Nt312z= z^cCtj09H^qAYu*x0B}11odGI<0Du5KZ7!2Wq#~iADH+WOfDMUg0M;$+TV8hlL(Y=3 z{x|yX0g-yKXX<ac|Iqu=et<p*e$4vN`Y8Vo=^4~p&(rL){j>h|3O8$?-oGXM`|;D} zPiy(6^nZ$PzF)NSf4|?wzkBou{Ac->`d<tE$9j+XPx9WNUd{bq{m+Eg?*4-PZ~ss3 z0rsKh<NBrK-#`!LU)BHPdoce!|A+i9?I-*XYTus!jsL~|f8ZnePxSBkKi@s4eR=-X zdm;X^|J-ngu!pdQ{>^dhiTfA^cd4O}^v9$`VC|TBY_=8sfPwL)DWz4!)$v>*EmtqK zBhyO6?*Kp;IVK;zPeY|$yr}-ot&6M0Zx_gP`;SWx#sHO^a@K+puSZ?WsDiN9>+)#S zc`-}Yzr4s^ba?QYSm<rt-^?^H1!*QUWa$Z;=0%;RAA4AA9?Cv8%Pmg_`wk2knaz^= zRp+JSUG*WfM^B-tqqDglGjAGT3;{zuV=c8#=$dD-nHi@j*1-0iqoL%1G%tSaI;ta% zBG00m12P><_<N8vpcFtr$AtV%0l@I5JLBG=*7kWFJN0CHl{a_IxFDiAxq9p})2*c~ z?CpP(BwCTfZtX4P4~>ND8(mS|^Sy=KVK4zV0092}M}Pt^|L6t9V^<FXh$|0@Ms;MY zze<m{-TEa1kLMsAK3fRw`*}yw!trL`?8vO70D1k}o6n+GKzwJIIB}GU?Xx%++oPCM zGbG$4Rq;!9>%JH0w$xkm$d-4JDce|ItQ@f`NQ-<<;HiffO1}~$zH6jb;7~Ek5r>6) z++&o*a$ni;&k?DEdkBb*a@F_gD{l5y8+_Gm+$uEMS1@W0G~Iv!ZE*nH`$wU$_xiSA zlljZHX$Q|${y?OJO^SLk#uSW8uXFAN?H{sqpL6|`pF=cPLv4c>_;l%$)hi$aQoZU< z3Y#6HU_pJrTGj_XN>bfW+J+9j6OcQa&Jpm6m;-%3Jac)@Ku1`1d`&BVh5G^gB^H3C z2?h-cKb_h4D2mh1MfGqREoJEM`931vc+^4V5krk;_?M@Z5uS9Tz`Js@=B>BGq|kAL z$%<cKra6JF9b~|`ax*W9(Xr+v<JqHAc&5Wndm{P;*X-RL(KcpEOJ6q;{Mh;5S>Hc& zaQNGT=+E0%_7Vj6yX$T%t4ved!i$aHk+v2mixTCVl3LjcpqrS0ZaW+HmCzd)d8&T- z#@_QzZX(~8oa~|OkcA0yW3_yu1hZbD$m?}7mTw;B#lOP%iFH}rO^(HDiJD)fx=tk^ zKbeM&anGD#RCL}w)lKgR?T^$-I#ck=Y8djwKrtgGXrqcbkMA^G-mALCs4O=82-xC> zZ=%ztZ6v5upP4X9O`bAYOc&npDzY)@Pm0V+&siH-R)BkcazWLFuG>s^wru|haj3=9 zHL2HaAR3=WE+3!5^Q}^7ktx|OimgLH3NUjol|!7o@!Lw$nS6PiEkEV_$>St4ksL9u zz~YRzG@|PdM!=ADYi>;=g=~!TUOSx}w~^7=s;XNV0pZE8XiarmgcU0*M>c_fUyRnW zMvXFFiZw$}5>ZTPq`DY_mea;p6#k3p0+ygX^#m{-2Vlc<d;Y~;&m~;+tn&__C$rf> zrExhcq0d37CvUE)$!Y1K|F^Uqds5)cjkJN>1Qc3tub>3l8){g5*Mp8=Db4*PrBe3B zOgSDnwfnxfy@$D({+MFW5*HqR4Iymi8cdV04L2Yz5oHq*BlLJW%OpF9gm7$d9Q`OK zAit*%31GT~arD5nt6+oM+vEELGD8Pl83wX<uH+b|{5wCzJ-u9rpYxLEl}1)eI&1oW zQoqt&&uweX&Knij62=6fm@jrc^Y|`IA`-)khKt_Cm6r#spAtlF6VjYIH2elOrYerJ zd4P%;@dxR={i{vJAO~i}y&PX?dbhvZc%)RXk}`II!;6=)$_90qaa^;Q8zxTQ<dphn zv|0#fMKPp8X8T=K#3Yy(@UCK1RpBH@2F?{+w0YJQs^T)Vfbfsw?iGMC`&e)3bBNsj zri=bjARr&fzNaFRM0|tH^QDpFw^zYaDo#1@fn@4@E+4Xe^jWt3Fx~c(`2DoV3t3<^ z=lbWnH|2RUe^%ZhhE&V4=Y2yb`s>CgH1(XLP9d25&x(pv3`~m%1>F_A<%v`5Yn&-G zC)G&xEC)A8WN*^dVIOS2yU7qr{Q&p7(i4EMBsbWmnm|vtM_%(~eKd5polXC6mRi*f zt$bS4*7}YPoB4S_%k}&0ZxY>Y#U47hl@N+U{pi8wN00U;Q?oOWmAC1cNMJdPKvh92 z@fE&c4`431Y!a!tO9Sz24t*UdwXaE%?iGG+=+SPUe3A1$(x|6cTR!8x5x=hC?1Qoo z;iAh?s#Z3a{8ynnDEm;y^!~(7#8>Z~$a`5A%O2Q`o$pB?{p%(In<i!$Ry6Kw;6kn1 z|8y}oo2NpVVa%`vD~`W6WS<z=o_8-h<(5WeN`P^TrMEb{*$=|ys&|HSHt~$X4Wi=) z)pr0}_MCl4KASX%|BtGgNuE$sI{gVWRrLV1RNyo}(Sr9+odgi4T_%<l9fFMt1VvBK z%I~z;fm~TQ(}KYO%F4BCVe$4en}7cfWncq@PCYv}XRe1Lm<c8kAEMT^{+(b)IIe9p zjfhGZ)hN4w*Wd*P5TT+7fW$rr>K9BbeqTi#f=aCjKFa{M5&9*q75Sj=AH=VQTq9uL zo$flx-}I*cA$MIy5qx<j;H*xLLaBiHqUIeH)oNtV-w_~S2fbXbqLA_B&Cbpku3w`n zId`L{DTkhYq2lKL6nDg=nH;yf%D?M%)wb{&BOaHP@;7*S1H-PQT^&!h2{dXmJ=gv$ zpSYa2nj@?EwbFn1xjr=aHcpU=TvO~Tdo{R()W~%m=iN^y1qfS)JLN?UhCAYWo4&%H zdis%y_#?$++L$I6ugp+xUEfodYO)01cE-VvMLCjuE#^dA74heXAf8u$@QZ3bHQG=j zLZx9J^5AfI@6c$WqJU^F<WkKwU^}9sLE1iO*geb1GZkBbm~DG1;YC<4PIq=ee7Unv z5-M{I<?1IJ<pSH@wxvz7V8lJ`8FN@l)U}Bz?+W2NTz^K!A~jr2Ad)ql2O~MxVHmtT zS^3RqSM}iHFTZ5{RpKV)#>PWOPGupP5b5u9#xvcnR^D`XLqMiF{O*HI^EG_M*V|cV z&+q51a>|<VBN^`g`NK+W4DE(MjmMegy|X8q7<fJVW!JL11kqwc;@F&*mRDU{UZ0wA z%doqKg4n}Vg+}X7clinQscrW!(2}apl;IVQsckO$0o)uVP?e(jZNExeag20)v=>5R z?fTU>7AG#)wW1O75GD1GQ~e-_TBqiQ1VVh>bp@%|4mj=OB#7d5%w^Es?Z_ULUj4sA zL%v7$IIcQ8-0%`k%_h-^x9oubq+fLa>=Axw#r<Y}OTLT4H$N*RF1NQ9<5)`Dc$vKx ztsdeBjp7%yD>;W{^g=(lF+%$020p$xkgwAW_M$I7A+&U(13`!KSzk$;w$sC;SbM5B zh<lr4Hn1STK^fk9vx=MyIDQg~vqHzVX$3ES=+;=QK8OFx%Xw>qV??mx=WTa2ITj+{ z-HY6n){(tlv>=8!;oH5RSi*C<s`I~gPIyMLy4g)@Y%ywl6o{&)iC2s}YiJ^}25WYv zgkTYIy`b)^V~|i~pp*XKfkDUyyu4mN5^4WQK`8fNm8@P<FH|8s>B7Mu%4k+KYc{dI zrogc;pHwpL4>=0UCFm5FMI1x8n52Ma(_zAE4%ql+sA%}?`Tt7(&jpV59%4>P>j*|l z0ww=R$74#X)pySF_Z#Z4PNQ!Sj<znZ7U@34G!zDrum-JrPDEpq+T)ULe|-x$yU z{+KTWxN7AnXEb}(*EmXt=L-~!A3yIyf~EQdgN9J=t;hbq{#y;|gF3F@Xx7-+9Hm{x zV&|pN^UyW5p5vC6WCy{;n%t9BZWfBA$aJ<O(qSR#OU#8%_=envqL8i?)!^1%wXvr4 zxd`-zA1E1xNy8c+uUh$Y_rj^ASs??JFI^cL$y#aqV+nFF$UQ#|hvPeg!|~yXRZinC zrr#^^FUOVxfri<%K>q76xrdQvAbwBZG6I4^gtshF>VxEme~lsSnO<xfS1&4Y<LGYw ze}{MF(INlpA~*ha<D&e5_x>&tFH~~ocZ7$DP8)e_mA*8U>nGAon@uvhkqGz8M^z<r zA^Dc6Jmh`>^e2X|ay2F(|Gn@ItRVZp#ox?_rL?VE<@0v(Ss6H<4>iv%^egxs(nlY+ zi4oqAn@kt}7F~}&VN(3kVs?wOT=jrNX_Xv^Hf@$eCy!$q7v`0J<3xn))+|aODGm_k zy~@?cG^K%lI!fM_l+|#hU_v7Mtl_YopO|sz)PmmDj|!>@p#gXfqc&G%M@Q#KR=|UH znifa=*H_snBQ!0Lct<~`(9W<%D@!G`iLew4JKx{=ruafOD2fYqI9x+ZPs(y|)9np+ zl>wXEANAAE|9!OOZ;DrH$@G$9Z#&=cHxXC>7)e!;_?>xQ;&1@+@8QIMn~kzYq9zFB zy0~CufpUzTPw_eLgNXB!pQT_Tfe^ex+Hn4x{-BTx=}(=%c50S`PkWmyG#cg>?KuVH zsdue2Z-joCSzA|NZLd*4*b;;ye`4?<^l3Qn!rl{L_>fMgG49uPF`QVCYPOMLLqz!V zLq@aNx>tKk$ts(GLheIs`}JP#p^b_PzSOVZO5gKn{^-1Xw?OowPhhCO1k^t_-Z!2v z<D$%i^vRT{I9~(fH(3FXRTN%Ecf`NlyeAU2TG7!~6CZuDvs}iKH6Y6IKH#x{mH1&m G0001*{4c2h literal 0 HcmV?d00001 diff --git a/static/img/landing/iconSlashFR.webp b/static/img/landing/iconSlashFR.webp new file mode 100644 index 0000000000000000000000000000000000000000..88f56acbb7e695186ae4447f1de3fdf5f5fe15d2 GIT binary patch literal 1722 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 Q=}dUmYm5jMHFkgi03_*m%m4rY literal 0 HcmV?d00001 diff --git a/static/img/landing/iconTagWhite.svg b/static/img/landing/iconTagWhite.svg new file mode 100644 index 0000000..44e1c07 --- /dev/null +++ b/static/img/landing/iconTagWhite.svg @@ -0,0 +1,5 @@ +<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M27.2001 4.75C28.473 4.75001 29.6939 5.258 30.594 6.16215C31.4942 7.06633 32 8.29268 32 9.57139V22.4286C32 23.7073 31.4942 24.9337 30.594 25.8379C29.6939 26.742 28.473 27.25 27.2001 27.25H4.79995C3.52695 27.25 2.30614 26.742 1.40598 25.8379C0.505818 24.9337 1.03669e-05 23.7073 0 22.4286V9.57139C9.99725e-06 8.29268 0.505817 7.06633 1.40598 6.16215C2.30614 5.258 3.52695 4.75001 4.79995 4.75H27.2001ZM4.79995 7.4939C4.25342 7.49392 3.72857 7.71192 3.34108 8.1011C2.95346 8.49044 2.73505 9.01933 2.73504 9.57139V22.4286L2.73771 22.5318C2.76312 23.0462 2.97768 23.5339 3.34108 23.8989C3.72857 24.2881 4.25342 24.5061 4.79995 24.5061H27.2001L27.3021 24.5037C27.8115 24.4783 28.2956 24.2638 28.6589 23.8989C29.0223 23.5339 29.2369 23.0462 29.2623 22.5318L29.265 22.4286V9.57139L29.2623 9.46823C29.2369 8.95381 29.0223 8.46612 28.6589 8.1011C28.2714 7.71192 27.7466 7.49392 27.2001 7.4939H4.79995Z" fill="white"/> +<rect x="13.25" y="13.5" width="12.75" height="4.5" rx="2.25" fill="white"/> +<path d="M5.5 15.625C5.5 14.4514 6.45139 13.5 7.625 13.5V13.5C8.79861 13.5 9.75 14.4514 9.75 15.625V15.875C9.75 17.0486 8.79861 18 7.625 18V18C6.45139 18 5.5 17.0486 5.5 15.875V15.625Z" fill="white"/> +</svg> diff --git a/static/img/landing/iconTeamVitality.webp b/static/img/landing/iconTeamVitality.webp new file mode 100644 index 0000000000000000000000000000000000000000..fc58127cbfbad115d1d4284cbe0deb7ce06c9565 GIT binary patch literal 4714 zcmV-w5|!;zNk&Fu5&!^KMM6+kP&gn~5&!@YLI9lsDu4ih06u9dkwv5;p_o1m>_7&D zwJTAv>7C4<ImybyH3=oEPAjnAOd(+&wf=X`lIH$1hsv4rQ|FI9U+BGA`G9_~`Nev+ z^8x!y`vLBs{;T!N+`sp)P!H)}<~q*(06%7ZE&pwP4Zm`KZhfYI`e|=|Q^z0Gdg=1( z=#OeXJbbF~ozS0!{=@$+`(gU;V?CYl2>h4&ANel$4(Ct-`H%J=_&%qzR`4IN2kJlj zk1UT9KRxyW{&oGQ{zu*i$d~+|<-Gg-7yqyPzrbhnFYN#IeRjQ%e(3u|{^6;$SW8T# zpZ6pw*&ktmf^6etheKi@0WDOIMq2ie&tL@^-Rx7W1g6~!)96#uys07kQ3e9OSp10J zLf@bW+*dpQ4lOM>cAOl$)3I&tanXo<)yZ7efMY{rgWog4d|)r$pZ>tXTm<Z8d@ytm z9s;>dxZf()CxcXfDu(5b6h`7i^XvpUlJU&;W*dYo5Gv}OnI82F%-3B6F0+Y~`K{jF zIM?{gxx?~}txR8ABloi5Vy1nE+)`-#^-sHiq^Ul%4=C5Z9a-A#I5CBex?u5tBs5Q# zjnc<dLm#6+5<+~YjYyjR@^B4_LUKQ=3m21}T5AD3B^1JEw2`(ZROc>8kokT0(wbix zBa=pRa-)1RAMa1$=pN=U6q?;hgZv4Xg9(RsUmJ;$-tfS$GUEo_;NRW=0RH@t<|Qcf zr!iXA(9@@w*-Kw`_MiVjo&*6K)T=!&%}=d`)@o-ERH*O~Ok_9!D|!$6!j~!S<wXuq zC(c*9ilw%1OgZm1Oiw_tTl}>Sdc5}LFC8^Eym0EOVCBXaBceV{tCP%o%z}k@s=#%= zzvGp&MMTb+23c;YV>lo9jy?`DpXW$u`r_g@X1%X&W8ciUo>au*%Wl~J;R74)H4*_d zj`VWLlp(p%Kz>U6JEv_(6&+xV9lY(}AM5k9t(-9mi41mb3)Jojp~zP!%gYPbjR^z~ zIyC{FpfE>~rp`AlP1#HIF7sh`AfsDy1Hvtdv@%(!iscLsmXVauP#1$v@zrG>_Ifs= z>Kh|>wbWE;y`nkni@2hZIiEHdTIlWvYzq0n5N(!k)Zzrw|Knb&Wcw=%32{-aU&ArU z5QuskBL}G%E>(z)wq?kHBNeY*5ws0~4!R7HgnJm3$kS{$-kI{;l&Ac&Js!DRTNaoT z<=ot*Gt{cvb$+>0;eO7zRnpErh@0QAhERgauz_1ELtqI6XOu7NX6Uk9?EP5c6uT4# zFflyUyTKtSUO3$7%bV?APMmj~AE2YXoqx=9V(BIp4E2AizCacW!jB}I6>+|?MBBzw z0KJLG8up*@Q<^Lt4tsCE>RqrV5Dli<|0OK<J7P5@j12s^3@dO{5=m`_ldl2{H0@D| zd#{&jMn_u3<4cj;(?E>RO3ALwHIpyI3ab(dhbiDR!kJjdb+vuFF$0nbyjsV^Y}TRc zAr3DgA$gpgNn1-5lc3L;-c8V45)0}6e9P003mY#i);s#}i*}Hlpose%*&!_svI5TB z<DOe9&{F1CI(?rQRJ*s&dm4hsm=PRS+dW<K$V9XoA;P%Tl{W@7*Ky9F#+84r2RMwB zaRt1K7jEX@_{uE$7TsL4O{ymLa%&OKla5R3vv+s}f0QXlv?X9JH=IGuPK`%#Qt#*@ ztyvRt<ae?r3zi~?@YkkG8+&fXJD=dBkEIp%#gSa_rIhzEw(A(mube0Am@z!6jK+Md z7neEW!4`9mk14C0VKB4AJ-ZJ^59H(kgq~$XWVt`QJt<9wdEKD;L(?cFJou0HSr64; zZNTzhzK@Tqze&1=TnKXZW|zyo9={SLTvLSi>qE_a*qy*TQziT`pJG3;Y@p(zk6JC@ zh>D4AXrd6i?6mX{LFwP?BoEB$5Lvd&n*4q4BL0pzX6)A+*sANwQ;-n&c~qnSd=2~v zxl~7=)53<%?-qt(J`~L|hNAaRJrA<o<&F|XqWH7c%4F{!FlR^06kO@nLeTME)j5mf zpVPEry`k^4hx5ChHW%GulHT5Rr@k4NS<nCX5nn-RMh?%MWp|ZcFw-#pW5{cG$~%Q1 z%p2x0tTg4(4oeQ@PE_KcA-*xWW+9$la<`DL3U1rYKcBR-f0Q~?^(ykmW_TM$&kwJ9 z(-9_x&f6x91H$CDB<c<k^=xSTEC$-8<fn?SxEz05h>Y~**RueLl%YC)>VbS~Ulo}c zuf<}VP)<)l{grOzi;^_j=n5}C^g9-cHXcDB2TJzn;(A-zr9zs|ygeR2<INOdy|B|X z3*vUZ08kzugFgTd<s}AD?Zxvkey0K|T|QUygO}$h0zcu_>m8gM`o%{Ix_|F3@|z)h z<k&}wO&$e6nuZ=i)GCA}=TdX<uE8?rAE)iNW6)8}vV+DFtW|Ew-%N4IX&_q*Ji7SR z(B|0R>+H_g*IL5#)kb$6$CaC-IcWWEZ#ko>3ip0rjK@<_m}_KOtepSqJPvHV0{ScA zqOUX^+c}<8$=#U@p@Y_wqal?d=m??R7}o$>3f}PhT$&Q$&@WC%`z8)ulTucy#yBT6 z!1HcUP)4XW{U42g@VtDau=jI$d6p)(Fy(nj^5|nHdqZ$$k=Z=Pht2z*?#O-_)A7tt zVBpymi(X@DL>>8^OTOC?K|#1BrXQT+!JK_kShvpsgpt8_jpPa6gb-M9?{Se22)dN9 zxM6ouw%6u_-d<Vri2R1#@B=d<-q7Iq{h1U|CAeXP7MTNa8{LFPX5w7yfH;a`voa_j z%csS=R<O?%f-ENhj>=@_*oDj(U(DaW{MNK`O?@gJ0&JDNb1~Z&ANL<;=uE%8Rgbx$ z(3FSMt6B-86UX&emaX%%F6C0vbbMFP)oQ8VIEIBxtFrm5X5}NhTRlx@-!P8)An{;3 z1=0@=3ikhrI&z|s8)kf}&w{2|5dU_b(Aaj{*%mWU;63oWbJixL>#MK`b2)puGs1AK zWS8`$W#af{^EJ5(T)JM`>iKQcBI~N_n{5vsCLOl~ois9<9|#9uW2iPx*q6OYJ$_Rs z!+(s+cwPh07$an_a-)dYvrV1bzt%fPZ1S5@n4w_hdLtcZurE0~jlJ4NnX=|Hr`+DS zfDgN)e3{qG6{?Eeg@=Abgzx}*1%dvyG~)c4Lwd(CcDAKg2>}B58RYW`0P)UwPn<mk zC4mlyL2Z5#I?+U+Wbs?>=vcQ_zdmq>rJbLsdTeujnKz0RvPbb9FBO7ZBNeOAt@g$5 zW60H8`RQHuz3Wmt!b$VyvN%O3F&7^M9M-9g`yUx1Nyo42wE|>H8|rXmWjHI~B*Na4 zOVUyI6z2wapXkE1!!l_f8+>K|Dh$bPHQ`gGt@33%ji7`A6+J%dj?g&aW)EO%ni|qJ z2MJ_7lL~tU9IMpzuDRl32|1**b?(A|iX>P)gIDxI+l9gWrzV5$R91%>KbK3i{o(HQ z?g6cxc?UZ_9l%vjs9L0H-eMIj!#y(xM7QwUulyFIFU=+r<1^cZlgPKC8dC^*gZ_*a z4bI(gq^(WTZ3{Ch&15JHq5i4}E$fOudZ8w!KokNVmU(VR$c9?E?MQw3L}THiEzfQH zT1<b_U=yVqJH?RiGZ<v#=+VywgtTqn_$a>2i&OtV)3NskPWT>OBfhuT$N}1ZJi?`E zd*X;}t0qWmJlWfx5cKGPd7p43eQmUeB~`EO__^&s)&d$!Pr1B!mcW>=RkVTe+xI+c zvbBf8q)2+!RkQShm#Qs`ES=g(6)$(Ch^$G2Yy@@Hk&d_HU_<UkB-~=foR~%Zov~Ei zdAbNQ;As~Ibz3(^n=JZDz?#%HFnY_ltdfcbf7N^UVN8?;^yqk~FTN2o>!iv6$_Y-% zU(wBa43w)-HN$tZts?|`rk&hOSPCb9(amN9fKjX*jWs`T_6>`x0~AkO!LE1l*3G?s z*VXU1)t-(i__<(zEaBF|fR+~U_8~^{9Wz$jbxOf(%YsD1rVh3ryKSYj>_{%c%D}_N zp!b#nl|ikBpR?Yd%FQ?%l`DU^XxKE6ir{y2?f$?Z#TiYoF6eR*1p_}*nGd1^j`m4i z{CcKNp1=0*VtC_RTi}7C&#bs8dZ*T}?D^H$nD3uC63sD8s05nVt7*58KkT=u?l=3c zQ;^m|AgV<{tJDGv-9n%YpxGh#f4{v$Agd<GkurFHu|MS_qCG@O8ee3%canG`crK92 z>2dL+Mm%qj&ErQ$K3VJMnchmm&_sg453X2Xzrq4^CTmz5y<~1q?LsKCVOdTk`%-j7 z8e%8CsPevHf>+M$r{9T<mo@JaG4-6C%h!TzC{0TVJY`uQMBneu@UNYq-=3k~80v)a z{g-c|u%7oSq&ilS;M8Q>=szaffBXhZ-sL8AZg8mJi6p=d=p**MXsnI@n~4!-3B{a_ z@FEoOLfrxFBJRTcw9Uj3NgTy;aO!8!Z|7FRmA^l=)g~sXi?9HrX%DJTHkacdc;qSt z?*G)=_cEd!a@&2p+3Z(~4szd<sVJhkExF+T2PlB|xpQML(=u`oHGRP~?5<ANK=^ux z#Z+{1w{K-K{i2r-%HQrfQ+^g8feO|r7N&GgIM6?ZhlCo=>pT?rgJ+>$<qk7L`R8sB z{KKxf1Ov!>*A(~_AK-CoJc(mKV7b(f?Io;hv_QYlqg&!p)PC?AdixgL#1DW70ekTV z@+RlPf9&%OOOz?L9@~{sUF}r&01nOK1j=rWaX9$jkA!jya#Xm+<%t>=74YHYy!$OR zGT6o+o}$>7s#HJ+G6RB^#2q0?Ehv5~?p!0K9^LXLkjhXWpSX7eNi)vYg7!6V@8ZZH zM5nr|F)vk~YiZaun4Z2V=203DcgY#?lp!|5!nY@cOO=s=AkBAiZT@BHxOQrphjE$> z_tj7IZp{Oyd$y)`@_v(!;&Ebg1b@OJ;rHWC{Tlapx7>YXTa;;-@fi-=lH8flJ&7>X zG<Gdyo{yd(DxfZ$B^<zsjtlUJAaRQk$I{cKutyulu}Mf9N9P_K)Mn!|ouhVjIkLC} z<+VPf1v=Ju23e+mGg`s4dy(kE?Qm4@SrouZ>HGS^E5q}<BQDCXmY~}i`uU1s5MK?U z$_k&X9IM7bB1C_J-tqo`BQJ$V0TW~m2YXKCaSj>zuTQ>lzO&l4z8{)vdVbOu2giY_ zrpz3)u<228uy(~cI&K+MfE{ZTrJ)ZTg^8A;lj=^DA`qzLBCi>c(J!r@gY1(ta>U8q z=o`kTveO^YM@e;;ip{YF6hSssVP&u5#iU7LR}fh7CMq*Q4Upce6dJYTgrz8e>(TdD zCAkL69Fu<d;2=`chUozGOPjzYpZ|s`-04BuF1blli=gAG($1_|Sk3rsKT6WhITS>6 zOC<q)eK8l~9oYAG(zW0smDl?IRY?#TaghfFss`RGWE_B>d3Y*{x@BA^lkc~j?>z(i z&$f4-%)nct2}02toY_@}8;#!6M8*y6q>-9Fa|xKvzv-^t*@VN0C(vTWNIzTe4f&Bf zXL9~xv`rSjW1lMTk*b^7L!PmJ#sTtN>^L#L=7%I0er}{boKpxEo3nGxskn%MOAg1f z9kUztf#7)e0TCdyKYYuAV<2;@P=|AGOW;-7>1O17kalWv<-|e6(sI6Fsf&^4#4m(T zot5Ae@m;WmrlvM}M9Yu!N2o?e>02wJ3G*h0mRTBnOV5?{Sr@y?BYr)6aGYB~xye6| zQC6jyRI|sX=c{?k&0KUxt*X^vWi3N<G=9R{_+C#Sof8MagLUh7d5qlDizR$$p1I$| zXdzuBmyErl;l*#uk=-Cu8=Y2lw;uY>^M(m4#%t}tH17`KIJ4UzLRgIJ7k3K%?GN<0 z|Dx{hj4{m!oiO8BY7o*|f(NU=4`b|cu(j!p*$ci0!u*B!q&Ts5YDuuq6Tc`9tDR}R z{@e^NM;KwAx<73;J?Ok#QFMtFKD+RVKYPM1paSvhs>9eF0^$Lnl}z0jXf0>Ocv*FO ziE&ZjPDNxvy6vG*;tHtz&mCiSOM^hA1%O5;j%_JL77kY_F)**T8O8n0Fr_z+R>U;^ z7(qi@%T0;~XqWExu9Q2^<7cc92bs|lbeFrCOHWb9lXa~@M~HNRkO9rfz%DmhY~Fz5 s1s}7gSI2(;*9aH4>KCYac=r1N&9`biBGk6^(9W=qgGBvoCPyN`04NA$Bme*a literal 0 HcmV?d00001 diff --git a/static/img/landing/iconTheForge.webp b/static/img/landing/iconTheForge.webp new file mode 100644 index 0000000000000000000000000000000000000000..4f0e1962408b9fd3f1c1834c477a66f46b23ac51 GIT binary patch literal 2528 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 literal 0 HcmV?d00001 diff --git a/static/img/landing/iconWankilStudio.webp b/static/img/landing/iconWankilStudio.webp new file mode 100644 index 0000000000000000000000000000000000000000..59b21eb87d352b08a2edf2a9f8a18402bc02235d GIT binary patch literal 5190 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 AS^xk5 literal 0 HcmV?d00001 diff --git a/static/img/landing/iconWeWard.webp b/static/img/landing/iconWeWard.webp new file mode 100644 index 0000000000000000000000000000000000000000..dd4c76974775e5dccc5cd83f83b7d74c7ec088df GIT binary patch literal 1522 zcmV<O1r7RANk&HM1pok7MM6+kP&gpo1pojL9sr#IDu4ih06uLrl}4l^A|Wgk37CKl zi9i~d7dhJa4?0T|_s$?Yo6z^6e=rZz{*%6AJn8)(|Bv+m|6$Z;&(rL&{m1^zib-ZO zCL0X6G?`5U$G)LmCq{?n5{39PQe|{Vt2eMflzR&*GW8C<-9MAe`kngx9|-t`;J#O% zCav9f5U^k0=%XQ%IJ`;qbT<8nqV=;*pa<>wM0hi0#>z(lc_M*~UEQuY83U8eS(>D- z#%Z+3*7{?jv9fg5sj?dpXEN)~DI0nfZ7-=&fOW1Cwa;q>en@-H%6#G9t@r%|L{-%C zSSJuTUB^R^K+bF9?`DAj0RH)9#xt=`FA?`D0`Pmg`_(aq%oraQ$7UUI-Ct0jz5)e+ zC6q()7n{M=6PIL`on4oCc0u<NcmF2TOuR!Z3sT_+K>Gp&5c?(S<;U9Y%`Xuxfbazn zD#`!hgbdsp*aUXjJ%97bwzz_CtIr$i`flr3g;AzmQ_*8;>jWpLKrir#=;!0kYXQQS zs7tU3@f>CNmD#_b+^b>bov!|xZ--lCjuZPoX5U!w6^h$#KuFVts{!{>c|L?dcax}A zqQ>;4y8D}*>M(U!V&O<CZ^8w(s-H7Za>~G)9gH}BnsPJq=iL0;i#xais#PEk=4Waf zngd*rPygl(bS@<MA934hd|R+w{a}k*rH13%h1o0oxfVr<hBU*jV*4ncir<RH%KJqY zwm`)HI)!sH=I4Ua$CchAM|e@qDi(`GslD7)D`KfYjNAxPSL5O>5Z~rk1oy@15BpKj z#FWN&l!@teEYC8BD%L(%-i<+oM0Z*Mw@taK);yZNQ;-b3_h0%R+NQ7mj=P-=0MqZC zVbCDMQR77b1Mb}wnVI8Bf6-SweDp!47V7Ql$P8u630l}~w+ACo&G|}=ZAT^^M32Mb zf6mF7b#yW3AoK*=oGm6#a%r#TOqTyP_r>OqK_wA==RZFW)V{o{vKZsM5B&Ss4T0(< zv_Jn;W*)A$>0pb)p>oD6&DOxuU$vzdr{TptTdyzSdIV@lnjhABRLyy0ZkW0&6jD2j z#Mrl0{oK`<`mSREu8{w?bk!vW(9Q^xRn=4|N$4-44VqP-gIGJc_33UZn!`KTg6~y@ z!9(8iG}?Q);;FL63-i;(5rsQm+!YZe*m$QIr;qNRyU8QoLcj+<V5U{h4U&P;<DM0e z`{M{Ryy9n`0(8*zF)0PR?O!ob#uTD}PTJyQN+px$44uzbVxTG`DD^K}lg7I2xH2i( z4%_j67|TRp7+-_tE}z@yz5!>hDDQi#c<>?^uv;0!Eebx~^3{=FQ$V|UZRt1&vB8U) z=B7e4Nk2(bC*=9U00{wxmZ~;aU;!^Tn?IuN9a>cJf~{p*KuZOQE9&!QPk<l!IdsK7 zgS{C0l)*yrq+<P>Tl;YycWfehL&N?EhSoo8Nhzzx4fdEWtrgIrM>ZfX$cuERJ+5an zMkRBPCg;E`%uULzkN*;JAL-Ej$B@SD&i<!AoXKdS5j-zxrcc&kOGq4h>qMe4F+Hc9 zCrG<b^K6QEKc+;Uzb|J^e59?V!&^C^H>r;40UW;hI2GNoPaYOhXKf%dz=?C#u>*g8 z*s#zk5$X_AjSGLuPVCP3GsP+w6EPX;>|=9eRRjf1fEreuL5eGVSZ(brX#6cbOlzTQ zJ1TyZ>}j-GGJk*Qa=XJG0M${)Oa!!xn`d%NB31rFSuaVlJNxV|8_)ep#~Zl-2fie= z8RnMisp;GsPmr6bkjBp?D+_;(#XfcpJ~(H#AX*vsE0xmCx<}6}__gwUPgeY}9y)iI zfVX|ZfeqfD(NRDATWh6+x1DiyI>`l8zwft%4*hFA1z;Rz6jCvg;`2L({Xn($5nDRj z)?ZX9l-~-;4;nOlZ9v|x7Cu^az=blH(%y*P0#VALZX7{tz8dvbn{(co1z}%)8Kzkm Yc4|6t=0B4hP#=6{&;S4c000000AT3wMF0Q* literal 0 HcmV?d00001 diff --git a/static/img/landing/iconX.svg b/static/img/landing/iconX.svg new file mode 100644 index 0000000..9acfb6b --- /dev/null +++ b/static/img/landing/iconX.svg @@ -0,0 +1,3 @@ +<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M13.7447 1.42798H16.2748L10.7473 7.7456L17.25 16.3425H12.1584L8.17053 11.1285L3.60746 16.3425H1.07582L6.98808 9.58505L0.75 1.42798H5.97083L9.57555 6.19373L13.7447 1.42798ZM12.8567 14.8281H14.2587L5.20905 2.86283H3.7046L12.8567 14.8281Z" fill="white"/> +</svg> diff --git a/static/img/landing/iconYouTube.svg b/static/img/landing/iconYouTube.svg new file mode 100644 index 0000000..fcf1429 --- /dev/null +++ b/static/img/landing/iconYouTube.svg @@ -0,0 +1,3 @@ +<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M17.8207 5.39998C17.8207 5.39998 17.6449 4.15896 17.1035 3.61404C16.418 2.89685 15.6516 2.89333 15.3 2.85115C12.7828 2.66833 9.00352 2.66833 9.00352 2.66833H8.99648C8.99648 2.66833 5.21719 2.66833 2.7 2.85115C2.34844 2.89333 1.58203 2.89685 0.896484 3.61404C0.355078 4.15896 0.182812 5.39998 0.182812 5.39998C0.182812 5.39998 0 6.85896 0 8.31443V9.67849C0 11.134 0.179297 12.5929 0.179297 12.5929C0.179297 12.5929 0.355078 13.834 0.892969 14.3789C1.57852 15.0961 2.47852 15.0715 2.8793 15.1488C4.3207 15.2859 9 15.3281 9 15.3281C9 15.3281 12.7828 15.3211 15.3 15.1418C15.6516 15.0996 16.418 15.0961 17.1035 14.3789C17.6449 13.834 17.8207 12.5929 17.8207 12.5929C17.8207 12.5929 18 11.1375 18 9.67849V8.31443C18 6.85896 17.8207 5.39998 17.8207 5.39998ZM7.14023 11.3344V6.27537L12.0023 8.81365L7.14023 11.3344Z" fill="white"/> +</svg> diff --git a/static/img/landing/iconZetFar.webp b/static/img/landing/iconZetFar.webp new file mode 100644 index 0000000000000000000000000000000000000000..81694ec4b4cd6e9f0ed7b4bf645535a0595df263 GIT binary patch literal 3330 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 MlWj{Vp$jbl0G6_ISpWb4 literal 0 HcmV?d00001 diff --git a/static/img/landing/logoRaidProtect.svg b/static/img/landing/logoRaidProtect.svg new file mode 100644 index 0000000..174d47b --- /dev/null +++ b/static/img/landing/logoRaidProtect.svg @@ -0,0 +1,22 @@ +<svg width="290" height="37" viewBox="0 0 290 37" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M289.018 8.69389C288.686 8.82625 288.338 8.91572 287.983 8.96014C286.002 8.98731 284.02 8.96014 282.038 8.96014C280.862 8.96014 280.573 9.24813 280.573 10.3892C280.573 18.6774 280.573 26.962 280.573 35.243C280.573 36.3297 280.404 36.5145 279.267 36.5145C277.731 36.5145 276.201 36.5145 274.671 36.5145C273.762 36.5145 273.528 36.2808 273.528 35.3734C273.528 27.0852 273.528 18.8006 273.528 10.5196C273.528 9.55785 273.413 8.81343 272.526 8.16682C270.658 6.79753 268.894 5.28696 267.081 3.81986C266.401 3.27649 265.742 2.69508 265.034 2.09737H276.299C279.212 2.09737 282.125 2.15714 285.011 2.09737C286.851 2.04304 288.217 2.61357 288.974 4.34693L289.018 8.69389Z" fill="white"/> +<path d="M255.719 29.7332C257.966 29.7737 260.159 29.0386 261.926 27.6521C262.797 26.9837 263.385 26.9022 264.175 27.5977C265.26 28.586 266.289 29.6346 267.256 30.7384C267.461 31.0301 267.554 31.386 267.517 31.7405C267.48 32.0949 267.316 32.4241 267.055 32.6674C265.068 34.4152 262.671 35.6338 260.086 36.2101C258.674 36.5601 257.228 36.7533 255.773 36.7861C251.625 36.7209 247.83 35.5635 244.574 32.8521C242.124 30.8729 240.255 28.2712 239.162 25.321C238.757 24.0642 238.469 22.7727 238.302 21.4631C238.164 20.5827 238.113 19.6909 238.149 18.8006C238.224 14.9112 239.642 11.1669 242.162 8.1994C243.7 6.32715 245.595 4.77769 247.737 3.64052C249.557 2.68967 251.549 2.11316 253.596 1.9452C256.259 1.70463 258.943 2.01541 261.479 2.85806C263.5 3.57894 265.384 4.63324 267.055 5.97701C267.305 6.21796 267.464 6.53709 267.507 6.88118C267.549 7.22528 267.472 7.57355 267.289 7.86794C266.271 9.02827 265.194 10.1346 264.06 11.1825C263.407 11.7748 262.726 11.6389 261.98 11.063C260.729 10.1111 259.278 9.45479 257.736 9.14336C256.194 8.83192 254.602 8.87348 253.078 9.26491C251.555 9.65634 250.14 10.3875 248.941 11.4032C247.741 12.419 246.788 13.6931 246.153 15.1295C245.518 16.5659 245.218 18.1274 245.274 19.6963C245.331 21.2653 245.744 22.801 246.481 24.1879C247.219 25.5748 248.262 26.7767 249.532 27.7033C250.802 28.6299 252.266 29.257 253.813 29.5376C254.434 29.6136 255.077 29.6625 255.719 29.7332Z" fill="white"/> +<path d="M217.35 19.3277V3.60803C217.35 2.47238 217.834 1.97792 218.983 1.97792C224.885 1.97792 230.783 1.97792 236.678 1.97792C236.894 1.96454 237.111 1.99789 237.312 2.0757C237.514 2.1535 237.697 2.27392 237.848 2.42872C237.999 2.58351 238.115 2.76902 238.187 2.97256C238.26 3.17611 238.287 3.39287 238.268 3.60803C238.268 4.87951 238.268 6.15643 238.268 7.41162C238.3 7.62278 238.282 7.83846 238.215 8.04143C238.149 8.24439 238.036 8.42902 237.885 8.58054C237.734 8.73207 237.55 8.84631 237.347 8.91412C237.144 8.98193 236.928 9.00144 236.716 8.97109H226.099C224.907 8.97109 224.411 9.46013 224.411 10.6012C224.411 11.7423 224.411 13.0464 224.411 14.269C224.411 15.3068 224.814 15.7198 225.843 15.7198C228.174 15.7198 230.509 15.7198 232.845 15.7198C234.184 15.7198 234.881 16.2903 234.811 17.6759C234.751 18.8713 234.811 20.0722 234.811 21.2676C234.828 21.4662 234.801 21.6661 234.731 21.8531C234.662 22.04 234.552 22.2094 234.41 22.3491C234.267 22.4887 234.095 22.5952 233.907 22.6609C233.718 22.7267 233.517 22.75 233.319 22.7292C230.934 22.7292 228.549 22.7292 226.17 22.7292C224.923 22.7292 224.33 23.4791 224.4 24.4898C224.488 25.7069 224.4 26.9349 224.4 28.1575C224.4 29.0812 224.836 29.5051 225.778 29.5051C229.292 29.5051 232.805 29.5051 236.319 29.5051C237.642 29.5051 238.322 30.0919 238.263 31.4069C238.208 32.6294 238.263 33.852 238.263 35.0746C238.277 35.267 238.25 35.4602 238.183 35.6411C238.116 35.8221 238.011 35.9864 237.874 36.1231C237.738 36.2598 237.574 36.3655 237.392 36.433C237.211 36.5006 237.018 36.5284 236.825 36.5145C230.774 36.5145 224.727 36.5145 218.684 36.5145C217.763 36.5145 217.366 36.0853 217.366 35.1181C217.355 29.8583 217.35 24.5948 217.35 19.3277Z" fill="white"/> +<path d="M199.278 22.6151V10.661C199.278 9.49814 198.783 9.00368 197.596 8.99824C195.815 8.99824 194.035 8.99824 192.249 8.99824C191.253 8.99824 190.85 8.59615 190.844 7.61265C190.844 6.21075 190.844 4.81429 190.844 3.41783C190.822 3.24436 190.84 3.06807 190.897 2.90258C190.953 2.73709 191.047 2.58684 191.172 2.46342C191.296 2.34001 191.447 2.24674 191.613 2.19082C191.779 2.13489 191.956 2.11782 192.129 2.14091C199.229 2.14091 206.331 2.14091 213.434 2.14091C213.626 2.12331 213.82 2.14742 214.002 2.21158C214.184 2.27574 214.351 2.37843 214.489 2.51262C214.628 2.64681 214.736 2.80932 214.805 2.98901C214.875 3.1687 214.905 3.36132 214.893 3.55367C214.926 4.95013 214.921 6.35203 214.893 7.74849C214.892 7.92021 214.856 8.08989 214.787 8.24712C214.718 8.40435 214.617 8.54581 214.491 8.66284C214.365 8.77986 214.217 8.86998 214.054 8.92765C213.892 8.98533 213.72 9.00935 213.549 8.99824H208.284C206.944 8.99824 206.323 9.61225 206.318 10.9272V35.0094C206.318 36.1505 205.959 36.52 204.815 36.5254C203.509 36.5254 202.207 36.5254 200.901 36.5254C199.779 36.5254 199.267 36.0309 199.267 34.8953C199.267 30.9794 199.267 27.0599 199.267 23.1367L199.278 22.6151Z" fill="white"/> +<path d="M175.328 36.5253C165.74 36.8513 157.671 28.7333 157.703 19.0939C157.733 16.7073 158.246 14.3513 159.211 12.1675C160.176 9.98365 161.573 8.01704 163.319 6.38582C165.065 4.7546 167.123 3.49243 169.37 2.67517C171.617 1.8579 174.007 1.50239 176.395 1.63001C184.643 2.0321 193.415 9.38934 192.957 20.1046C192.614 28.6192 185.019 36.9002 175.328 36.5253ZM177.652 18.9364C180.228 16.5129 179.596 14.046 177.68 12.4159C176.848 11.7925 175.803 11.5216 174.772 11.662C173.741 11.8024 172.807 12.3429 172.173 13.166C171.539 13.9892 171.255 15.0288 171.384 16.0592C171.513 17.0896 172.044 18.0277 172.861 18.6701L170.683 26.913H180.789C179.721 24.2451 178.692 21.6097 177.652 18.9364Z" fill="white"/> +<path d="M132.565 19.018V3.01027C132.565 1.9996 132.609 1.96156 133.654 1.96156C137.221 1.96156 140.781 1.96156 144.348 1.96156C145.995 1.94657 147.628 2.26589 149.148 2.90012C150.668 3.53436 152.043 4.47027 153.19 5.65105C154.171 6.57416 154.948 7.69218 155.471 8.93312C155.993 10.1741 156.249 11.5104 156.222 12.8561C156.195 15.1329 156.097 17.3498 154.948 19.3766C153.996 21.0556 152.874 22.5988 151.028 23.4627C150.206 23.854 150.152 24.1746 150.669 24.9787C152.242 27.4076 153.832 29.8256 155.411 32.2545C155.956 33.0967 156.538 33.9226 157.045 34.7974C157.551 35.6723 157.181 36.3732 156.081 36.3786C154.148 36.3786 152.215 36.3786 150.282 36.3786C150.013 36.4018 149.743 36.3475 149.504 36.2224C149.264 36.0972 149.066 35.9063 148.932 35.6723C146.368 31.7165 143.771 27.788 141.19 23.8431C140.928 23.4464 140.673 23.0878 140.139 23.2073C139.605 23.3269 139.627 23.7507 139.627 24.1474C139.627 27.7445 139.627 31.3362 139.627 34.9279C139.627 36.145 139.404 36.3732 138.212 36.3732H133.692C132.843 36.3732 132.604 36.1178 132.604 35.2865L132.565 19.018ZM139.611 13.4919V17.1705C139.611 17.9584 139.927 18.2572 140.738 18.2572C141.827 18.2572 142.916 18.2572 144.048 18.2572C145.029 18.3022 146 18.0356 146.819 17.4957C147.639 16.9558 148.266 16.1704 148.611 15.2524C149.58 13.0789 148.464 10.286 146.46 9.46551C144.457 8.64502 142.426 8.78086 140.378 8.82433C139.899 8.82433 139.578 9.21556 139.6 9.8187C139.643 11.0685 139.611 12.291 139.611 13.5082V13.4919Z" fill="white"/> +<path d="M104.253 36.9763V36.1721C104.253 25.6687 104.253 15.1654 104.253 4.65661C104.305 3.94879 104.613 3.28381 105.118 2.78445C105.623 2.28508 106.293 1.98505 107.002 1.93976C110.89 1.99953 114.777 1.88542 118.665 1.98866C121.605 2.06473 124.436 2.68418 126.892 4.461C128.666 5.75187 129.879 7.67025 130.284 9.82406C130.714 11.5624 130.757 13.3736 130.412 15.1306C130.067 16.8877 129.341 18.5482 128.286 19.996C127.663 20.9364 126.836 21.7244 125.866 22.3012C124.896 22.8779 123.808 23.2285 122.683 23.3268C120.151 23.5224 117.609 23.5605 115.061 23.642C113.972 23.6746 113.574 24.0441 113.574 25.1145C113.574 28.5323 113.574 31.9501 113.574 35.3679C113.574 36.3568 113.1 37.0415 111.984 36.998C109.681 36.9111 107.367 36.998 105.064 36.998L104.253 36.9763Z" fill="white"/> +<path d="M70.998 36.6775V1.51603H71.8256C76.6931 1.51603 81.5661 1.40193 86.4282 1.54864C90.9037 1.67904 94.9436 3.11354 97.9545 6.60741C100.154 9.0209 101.591 12.0279 102.087 15.2524C102.373 17.087 102.47 18.946 102.376 20.8003C102.049 25.5765 100.198 29.7115 96.5062 32.8848C94.301 34.8028 91.5698 36.0161 88.6659 36.3678C87.3879 36.5414 86.1007 36.6394 84.8111 36.6612C80.4935 36.6993 76.1759 36.6612 71.8637 36.6612L70.998 36.6775ZM79.6768 19.2897C79.6768 21.2839 79.6768 23.278 79.6768 25.2668C79.6659 25.5651 79.7373 25.8607 79.8833 26.1214C80.0292 26.382 80.2441 26.5976 80.5044 26.7447C80.7464 26.8943 81.0291 26.9648 81.3132 26.9463C81.5972 26.9278 81.8684 26.8212 82.0888 26.6415C82.5135 26.3481 82.9817 26.1253 83.4336 25.8753C86.5697 24.0876 89.7168 22.3108 92.8474 20.5068C93.8275 19.9635 94.2086 18.5887 92.8474 17.79C91.6496 17.0727 90.4191 16.399 89.1995 15.7143C86.9291 14.4319 84.6423 13.1768 82.3991 11.8509C81.8057 11.4977 81.2122 11.2587 80.6351 11.5956C80.3206 11.7729 80.0628 12.0354 79.8914 12.3526C79.7199 12.6699 79.6417 13.029 79.6659 13.3887C79.6986 15.3557 79.6768 17.3227 79.6768 19.2951V19.2897Z" fill="#D35F5F"/> +<path d="M58.236 24.957C58.089 23.7018 58.1326 22.7835 59.0854 21.8815C62.2596 18.8713 65.9674 15.1166 69.0763 12.0248C69.207 13.2582 69.1798 14.1983 68.178 15.1546C65.0092 18.1377 58.236 24.957 58.236 24.957Z" fill="#D35F5F"/> +<path d="M58.2252 28.8639C58.0292 27.6956 58.4158 26.5763 59.2651 25.734C62.5319 22.5879 65.7334 19.344 69.1145 15.9534C69.1145 17.063 69.3159 17.8932 68.4502 18.7246L58.2252 28.8639Z" fill="#D35F5F"/> +<path d="M69.0219 3.95577C69.2887 5.33593 69.0546 6.22163 68.1399 7.09102C65.0038 10.0796 61.4236 13.6271 58.3364 16.6863C58.0805 15.5996 58.0346 14.9101 58.884 14.0788C62.1018 11.0033 65.8695 7.10189 69.0219 3.95577Z" fill="#D35F5F"/> +<path d="M58.2611 32.8838C58.1219 32.3719 58.1109 31.6686 58.2763 31.1646C58.4418 30.6605 58.6378 30.3937 59.1671 29.8854C62.4883 26.6958 65.7007 23.4139 69.0818 20.0721C69.2603 21.9599 69.2603 21.9599 68.4121 22.8379C65.1889 25.9188 61.4136 29.7376 58.2611 32.8838Z" fill="#D35F5F"/> +<path d="M69.1308 24.1039C69.1308 24.7505 69.1689 25.2233 69.1308 25.6851C69.1025 25.9677 68.9885 26.235 68.8041 26.4513C65.501 29.7622 61.733 33.5193 58.4118 36.8013C58.2671 36.3284 58.126 35.7651 58.2643 35.2903C58.4026 34.8154 58.6766 34.3912 59.0528 34.0693C62.2379 31.0047 65.9892 27.2229 69.1308 24.1039Z" fill="#D35F5F"/> +<path d="M69.4863 1.6298L68.8368 2.27675C65.4793 5.64203 61.7121 9.3007 58.3364 12.6442C58.1391 12.353 58.1511 11.9172 58.1511 11.5657C58.1511 11.2141 58.2565 10.8707 58.4538 10.5795L67.3123 1.82576C67.9987 1.16687 68.5069 1.01619 69.4863 1.61887V1.6298Z" fill="#D35F5F"/> +<path d="M60.7188 36.6449L69.109 28.3042C69.185 29.1169 69.377 29.9875 68.4829 30.8689C66.7742 32.5534 65.1921 34.0891 63.5501 35.7592C62.6306 36.6944 61.7152 36.7264 60.7188 36.6449Z" fill="#D35F5F"/> +<path d="M65.619 1.75512L58.2143 9.02541C58.187 7.79196 57.9598 6.9678 58.9438 5.99884L62.6244 2.35826C62.6244 2.35826 63.2102 1.77929 63.5943 1.6298C63.9784 1.4803 64.3963 1.43907 64.8023 1.5106C65.0227 1.54943 65.4181 1.6942 65.619 1.75512Z" fill="#D35F5F"/> +<path d="M69.0709 32.5534C69.0709 33.1098 69.3308 33.918 68.7496 34.5964C67.7536 35.7592 66.7678 37.3133 64.9384 36.6558L69.0709 32.5534Z" fill="#D35F5F"/> +<path d="M61.3286 1.56492L58.2469 4.63496C57.7188 2.61363 58.8731 1.08676 61.3286 1.56492Z" fill="#D35F5F"/> +<path d="M51.849 36.6775C50.5423 36.6775 49.2355 36.6775 47.9343 36.6775C47.8476 36.6946 47.7582 36.694 47.6718 36.6757C47.5853 36.6574 47.5034 36.6218 47.4311 36.571C47.3589 36.5202 47.2977 36.4553 47.2513 36.3802C47.2048 36.3051 47.1742 36.2214 47.1611 36.1341C46.6167 34.2269 46.0722 32.3305 45.5277 30.4233C45.3971 29.9451 45.2119 29.7876 44.7274 29.793C42.3154 29.793 39.9089 29.8202 37.4969 29.793C37.2956 29.7657 37.0914 29.8164 36.9264 29.9346C36.7613 30.0529 36.6479 30.2297 36.6094 30.4287C36.0649 32.3794 35.5205 34.3356 34.927 36.2754C34.8781 36.3732 34.8067 36.4581 34.7187 36.5233C34.6308 36.5884 34.5286 36.632 34.4207 36.6503C31.4805 36.6503 28.5459 36.6503 25.6112 36.6503C25.0667 36.6503 25.0232 36.3949 25.1702 35.9331C25.8344 33.8628 26.4769 31.7817 27.1139 29.7061C28.6965 24.5658 30.2755 19.4255 31.8508 14.2852C32.7981 11.2532 33.7727 8.20489 34.7201 5.14571C35.025 4.16765 35.2972 3.17871 35.6076 2.20065C35.7219 1.83659 35.7981 1.49426 36.3753 1.4997C39.8871 1.5323 43.3989 1.4997 46.9161 1.4997C47.3571 1.4997 47.4606 1.68988 47.6076 2.04307C49.0014 6.47697 50.4043 10.9145 51.8163 15.3556C53.2483 19.8765 54.6965 24.3919 56.0958 28.9399C56.3258 29.7668 56.4502 30.6194 56.466 31.4774C56.5259 32.9989 56.466 34.5203 56.466 36.0418C56.466 36.5254 56.3081 36.7101 55.8181 36.6992C54.506 36.6612 53.1775 36.6775 51.849 36.6775ZM39.1575 21.7837C39.2609 21.8326 39.3208 21.8924 39.3916 21.8924C40.5786 21.9413 41.7655 21.9902 42.9524 21.9902C43.0559 21.9902 43.2737 21.5827 43.2301 21.4468C42.6856 19.3875 42.0922 17.3389 41.515 15.2904L41.2047 15.2144C40.3281 17.2955 39.9197 19.5613 39.1575 21.7837Z" fill="#D35F5F"/> +<path d="M15.2335 0C15.8488 0.10324 16.464 0.228216 17.0793 0.309721C20.1119 0.711815 22.8887 1.63011 25.023 3.98291C26.1833 5.26578 26.9405 6.86042 27.2009 8.56895C27.661 10.9602 27.5321 13.4272 26.8252 15.7577C25.9595 18.442 24.1628 20.3112 21.7671 21.6859C21.5983 21.7837 21.4132 21.8652 21.2226 21.9576C21.1791 21.9576 21.1519 22.0282 21.0539 22.1423C21.6364 23.1965 22.2299 24.2832 22.8397 25.3591C23.553 26.6197 24.2934 27.8695 25.0176 29.1627C25.1153 29.3778 25.1327 29.6206 25.0666 29.8473C24.4295 31.9502 23.7544 34.0476 23.1283 36.1559C23.0965 36.3317 22.996 36.4877 22.849 36.5896C22.702 36.6914 22.5204 36.7309 22.3442 36.6992C19.709 36.6992 17.0738 36.6992 14.4386 36.6992C14.2732 36.7201 14.1058 36.6796 13.9683 36.5854C13.8308 36.4913 13.7327 36.35 13.6927 36.1885C12.6038 33.6781 11.4114 31.1895 10.2517 28.7008C10.1731 28.5475 10.0858 28.3987 9.99033 28.2553L9.76165 28.3585C9.71771 28.5992 9.68862 28.8424 9.67454 29.0866C9.67454 31.3362 9.64731 33.5803 9.67454 35.8244C9.67454 36.4602 9.53298 36.7101 8.84151 36.6938C7.03933 36.6449 5.2317 36.6938 3.39686 36.6938C2.44949 36.6938 1.50212 36.6232 0.565639 36.5254C0.369631 36.5254 0.15729 36.2156 0.0483969 35.982C-0.0604961 35.7483 0.0483969 35.5908 0.0483969 35.3897C0.0429522 24.4517 0.0647308 13.5299 0.0102843 2.59731C0.00483969 1.32039 0.342408 0.472732 1.50756 0H15.2335Z" fill="#D35F5F"/> +</svg> diff --git a/static/img/landing/pattern-01.svg b/static/img/landing/pattern-01.svg new file mode 100644 index 0000000..75e229c --- /dev/null +++ b/static/img/landing/pattern-01.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="801" height="480" fill="none" xmlns:v="https://vecta.io/nano"><g fill="#de8cc1"><path opacity=".982" d="M360.531.486c0-.031-.031-.031-.031-.031V.425h.031.031v.031.031h-.031zm.031-.031c-.031 0-.031 0 0 0z"/><path opacity=".718" d="M380.516.486c0-.031-.031-.031-.031-.031V.425h.031.031v.031.031h-.031z"/><path opacity=".357" d="M420.454.485c0-.03-.03-.03-.03-.03v-.03h.03.03v.03.03h-.03 0zm.03-.03c-.03 0-.03 0 0 0z"/><path opacity=".362" d="M260.638 20.518l-.031-.03v-.061-.061c0-.03.031-.03.031-.03h.06.061l.03.03v.061.061c0 .03-.03.03-.03.03h-.061-.06zm.091-.061v-.061-.061l-.031-.03c-.03 0-.03 0-.03.03v.061.061l.03.03.031-.03z"/><path opacity=".659" d="M280.743 20.185v.455h-.09v-.394h-.091v-.061h.181z"/><use href="#B" opacity=".779"/><path opacity=".268" d="M320.379 20.852c-.06-.03-.121-.091-.151-.182s-.061-.182-.061-.273a.71.71 0 0 1 .061-.273c.03-.091.091-.152.151-.182s.152-.061.213-.061c.091 0 .151.03.212.061s.121.091.151.182.061.182.061.273a.71.71 0 0 1-.061.273c-.03.091-.09.152-.151.182s-.152.061-.212.061c-.061.03-.152 0-.213-.061zm.395-.182a.61.61 0 0 0 .06-.273.61.61 0 0 0-.06-.273c-.031-.061-.091-.091-.182-.091-.061 0-.122.03-.182.091-.031.061-.061.151-.061.273s.03.212.061.273.091.091.182.091.151-.03.182-.091z"/><path opacity=".311" d="M340.334 20.943a1.32 1.32 0 0 1-.182-.212c-.03-.091-.061-.212-.061-.333s.031-.243.061-.333.091-.152.182-.212c.061-.061.152-.061.243-.061s.181.03.242.061a1.32 1.32 0 0 1 .182.212c.03.091.061.212.061.333s-.031.242-.061.333-.091.152-.182.212c-.061.061-.152.061-.242.061s-.182-.03-.243-.061zm.455-.212c.06-.061.06-.182.06-.303 0-.152-.03-.242-.06-.303-.061-.061-.122-.091-.212-.091s-.152.03-.213.091-.06.182-.06.303c0 .152.03.242.06.303.061.061.122.091.213.091s.151-.03.212-.091z"/><path opacity=".651" d="M360.258 21.003c-.091-.061-.152-.121-.213-.242-.06-.091-.06-.212-.06-.364a1.14 1.14 0 0 1 .06-.364c.061-.091.122-.182.213-.242a.49.49 0 0 1 .273-.091c.121 0 .212.03.273.091.091.061.151.121.212.242.061.091.061.212.061.364s-.031.273-.061.364c-.061.091-.121.182-.212.242a.49.49 0 0 1-.273.091.49.49 0 0 1-.273-.091zm.515-.242c.061-.091.091-.182.091-.364 0-.152-.03-.273-.091-.364s-.121-.121-.212-.121-.182.03-.212.121c-.061.091-.091.182-.091.364 0 .151.03.273.091.364s.121.121.212.121.152-.061.212-.121z"/><path opacity=".799" d="M380.242 21.033c-.091-.061-.151-.152-.212-.242-.061-.121-.091-.242-.091-.394s.03-.273.091-.394.121-.182.212-.242a.51.51 0 0 1 .303-.091c.122 0 .213.03.304.091s.151.151.212.242c.061.121.091.242.091.394s-.03.273-.091.394-.121.182-.212.242-.182.091-.304.091-.242-.03-.303-.091zm.516-.242c.06-.091.091-.212.091-.364s-.031-.303-.091-.364c-.061-.091-.152-.121-.243-.121s-.182.03-.242.121-.091.212-.091.364.03.303.091.364c.06.091.151.121.242.121.121 0 .182-.061.243-.121z"/><path opacity=".986" d="M400.197 21.033c-.091-.061-.152-.152-.212-.242-.061-.121-.091-.242-.091-.394s.03-.273.091-.394.121-.182.212-.242a.51.51 0 0 1 .303-.091.51.51 0 0 1 .303.091c.091.061.152.151.213.242.06.121.091.242.091.394s-.031.273-.091.394-.122.182-.213.242a.51.51 0 0 1-.303.091.51.51 0 0 1-.303-.091zm.546-.242c.06-.091.091-.212.091-.364s-.031-.303-.091-.364c-.061-.091-.152-.121-.243-.121s-.182.03-.243.121-.091.212-.091.364.031.303.091.364c.061.091.152.121.243.121.121 0 .182-.061.243-.121z"/><path opacity=".854" d="M420.181 21.033c-.091-.061-.151-.152-.212-.242-.061-.121-.091-.242-.091-.394s.03-.273.091-.394.121-.182.212-.242a.51.51 0 0 1 .303-.091c.122 0 .213.03.304.091s.151.151.212.242c.061.121.091.242.091.394s-.03.273-.091.394-.121.182-.212.242-.182.091-.304.091a.51.51 0 0 1-.303-.091zm.546-.242c.061-.091.091-.212.091-.364s-.03-.303-.091-.364c-.061-.091-.152-.121-.243-.121s-.182.03-.242.121-.091.212-.091.364.03.303.091.364c.06.091.151.121.242.121s.182-.061.243-.121z"/><path opacity=".135" d="M440.166 21.003c-.091-.061-.152-.121-.212-.242-.061-.091-.061-.212-.061-.364a1.11 1.11 0 0 1 .061-.364c.06-.091.121-.182.212-.242a.49.49 0 0 1 .273-.091c.121 0 .212.03.273.091.091.061.151.121.212.242s.061.212.061.364-.031.273-.061.364c-.061.091-.121.182-.212.242a.49.49 0 0 1-.273.091.49.49 0 0 1-.273-.091zm.516-.242c.06-.091.091-.182.091-.364 0-.152-.031-.273-.091-.364s-.122-.121-.213-.121-.182.03-.212.121c-.061.091-.091.182-.091.364 0 .151.03.273.091.364s.121.121.212.121.152-.061.213-.121z"/><use href="#C" opacity=".608"/><path opacity=".53" d="M480.62 19.882v1.031h-.182v-.849h-.212v-.152h.394v-.03z"/><path opacity=".693" d="M500.544 20.003v.788h-.151v-.667h-.152v-.121h.303z"/><path opacity=".121" d="M520.256 20.609c-.03-.03-.061-.061-.061-.091-.03-.03-.03-.091-.03-.121s0-.091.03-.121.031-.061.061-.091.061-.03.091-.03.061 0 .091.03.061.061.061.091c.03.03.03.091.03.121s0 .091-.03.121-.031.061-.061.091-.061.03-.091.03-.061 0-.091-.03zm.182-.091c.03-.03.03-.061.03-.121s0-.091-.03-.121-.061-.03-.091-.03-.061 0-.091.03-.03.061-.03.121 0 .091.03.121.061.03.091.03c.03.03.061 0 .091-.03z"/><path opacity=".225" d="M540.392 20.276v.242h-.03v-.182h-.061v-.03h.091v-.03z"/><path opacity=".423" d="M560.286 20.427c0-.03-.03-.03-.03-.03v-.03h.03.03v.03.03c0 .03.001.03-.03 0 .031.03 0 .03 0 0zm.03 0c0 .03-.03 0 0 0z"/><use href="#D" opacity=".562"/><path opacity=".103" d="M200.835 40.127v.485h-.091v-.394h-.091v-.061h.182v-.03z"/><use href="#E" opacity=".958"/><path opacity=".901" d="M240.411 41.006c-.091-.061-.152-.151-.213-.242-.06-.121-.091-.242-.091-.394s.031-.273.091-.394.122-.182.213-.242a.51.51 0 0 1 .303-.091.51.51 0 0 1 .303.091c.091.061.152.152.212.242.061.121.091.242.091.394s-.03.273-.091.394-.121.182-.212.242a.51.51 0 0 1-.303.091.51.51 0 0 1-.303-.091zm.546-.273c.06-.091.091-.212.091-.364s-.031-.303-.091-.364c-.061-.091-.152-.121-.243-.121s-.182.03-.243.121-.091.212-.091.364.031.303.091.364c.061.091.152.121.243.121s.182-.03.243-.121z"/><use href="#F" opacity=".507"/><use href="#G" opacity=".871"/><path opacity=".523" d="M301.153 39.066v2.576h-.486V39.46h-.545v-.394h1.031z"/><path opacity=".848" d="M321.168 38.915v2.909h-.546v-2.455h-.606v-.455h1.152z"/><use href="#H" opacity=".776"/><path opacity=".136" d="M359.863 41.824c-.212-.121-.363-.333-.485-.576s-.182-.546-.182-.879.061-.636.182-.879.273-.424.485-.576a1.33 1.33 0 0 1 .698-.182c.243 0 .485.061.697.182s.364.333.486.576.182.546.182.879-.061.636-.182.879a1.5 1.5 0 0 1-.486.576c-.212.121-.424.182-.697.182s-.485-.061-.698-.182zm1.244-.606c.121-.182.212-.485.212-.849s-.061-.667-.212-.849c-.122-.182-.303-.273-.546-.273a.69.69 0 0 0-.546.273c-.121.182-.212.485-.212.849s.06.667.212.849c.121.182.303.273.546.273a.69.69 0 0 0 .546-.273z"/><use href="#I" opacity=".471"/><use href="#J" opacity=".535"/><use href="#I" x="39.939" opacity=".866"/><path opacity=".151" d="M441.106 38.733v3.273h-.606v-2.788h-.698v-.515h1.304v.03z"/><use href="#H" x="119.847" opacity=".904"/><path opacity=".494" d="M479.772 41.673c-.182-.121-.334-.303-.425-.515s-.152-.485-.152-.788.061-.576.152-.788.243-.394.425-.515a1.09 1.09 0 0 1 .606-.182c.243 0 .425.061.637.182.182.121.333.303.424.515s.152.485.152.788-.061.576-.152.788-.242.394-.424.515a1.12 1.12 0 0 1-.637.182 1.09 1.09 0 0 1-.606-.182zm1.122-.545c.121-.182.182-.424.182-.758s-.061-.606-.182-.758a.52.52 0 0 0-.486-.242c-.212 0-.364.091-.485.242-.121.182-.182.424-.182.758s.061.606.182.758c.121.182.273.242.485.242.213.03.364-.061.486-.242z"/><path opacity=".763" d="M500.908 39.036v2.667h-.485V39.46h-.576v-.424h1.061z"/><path opacity=".219" d="M519.862 41.399c-.152-.091-.242-.212-.333-.394s-.122-.394-.122-.636.031-.455.122-.636.181-.303.333-.394.303-.152.485-.152a.92.92 0 0 1 .486.152c.151.091.242.212.333.394s.121.394.121.636-.03.455-.121.636-.182.303-.333.394a.92.92 0 0 1-.486.151c-.182-.03-.333-.061-.485-.151zm.88-.424c.091-.121.151-.333.151-.606s-.06-.455-.151-.606c-.091-.121-.213-.212-.395-.212-.151 0-.273.061-.394.212-.091.121-.152.333-.152.606s.061.455.152.606c.091.121.212.212.394.212.182-.03.304-.091.395-.212z"/><path opacity=".238" d="M539.938 41.218c-.122-.091-.213-.182-.273-.333s-.091-.333-.091-.515a1.3 1.3 0 0 1 .091-.515c.06-.151.151-.242.273-.333s.242-.121.394-.121.273.03.394.121.212.182.273.333.091.333.091.515a1.3 1.3 0 0 1-.091.515c-.061.151-.152.242-.273.333s-.242.121-.394.121-.273-.03-.394-.121zm.697-.364c.091-.121.121-.273.121-.485s-.03-.394-.121-.485c-.091-.121-.182-.152-.303-.152s-.243.061-.303.152c-.091.121-.122.273-.122.485s.031.394.122.485c.091.121.182.152.303.152.121.03.242-.03.303-.152z"/><use href="#K" opacity=".207"/><use href="#E" x="359.572" opacity=".736"/><path opacity=".467" d="M600.164 40.582c-.03-.03-.06-.061-.06-.091-.031-.03-.031-.091-.031-.121 0-.061 0-.091.031-.121s.03-.061.06-.091.061-.03.091-.03.061 0 .091.03.061.061.061.091c.03.03.03.091.03.121 0 .061 0 .091-.03.121s-.03.061-.061.091-.06.03-.091.03-.06 0-.091-.03zm.182-.091c.031-.03.03-.061.03-.121s.001-.091-.03-.121-.06-.03-.091-.03-.06 0-.091.03-.03.061-.03.121 0 .091.03.121.061.03.091.03.061 0 .091-.03z"/><path opacity=".211" d="M620.271 40.278v.152h-.031l.031-.152-.061.03v-.03h.061z"/><path opacity=".754" d="M140.882 60.22v.242h-.031v-.212h-.06v-.03h.091z"/><path opacity=".123" d="M160.654 60.644c-.03-.03-.091-.061-.091-.121-.03-.061-.03-.121-.03-.182s0-.151.03-.182c.03-.061.061-.091.091-.121s.091-.03.152-.03.121 0 .151.03.091.061.091.121c.031.061.031.121.031.182s0 .151-.031.182a.4.4 0 0 1-.091.121c-.03.03-.091.03-.151.03-.061.03-.122 0-.152-.03zm.273-.121c.03-.03.03-.091.03-.182s0-.151-.03-.182-.061-.061-.121-.061-.091.03-.122.061-.03.091-.03.182 0 .151.03.182.061.061.122.061.091-.03.121-.061z"/><use href="#L" opacity=".565"/><path opacity=".563" d="M200.32 61.251c-.121-.091-.243-.212-.303-.364s-.121-.333-.121-.576c0-.212.03-.394.121-.576.06-.151.182-.273.303-.364s.273-.121.425-.121.303.03.424.121.243.212.303.364.122.333.122.576a1.23 1.23 0 0 1-.122.576c-.06.152-.182.273-.303.364s-.273.121-.424.121-.304-.03-.425-.121zm.789-.394c.091-.121.121-.303.121-.546s-.03-.424-.121-.545a.42.42 0 0 0-.334-.182c-.152 0-.243.061-.334.182s-.121.303-.121.545.03.424.121.546a.42.42 0 0 0 .334.182.42.42 0 0 0 .334-.182z"/><path opacity=".691" d="M221.245 59.008v2.667h-.486v-2.243h-.576v-.424h1.062z"/><path opacity=".464" d="M241.321 58.766v3.122h-.577v-2.637h-.667v-.485h1.244z"/><use href="#M" opacity=".899"/><path opacity=".718" d="M279.804 62.13c-.243-.151-.455-.394-.607-.697s-.212-.667-.212-1.091.06-.788.212-1.091.334-.546.607-.697a1.63 1.63 0 0 1 .849-.242c.333 0 .606.091.849.242a1.72 1.72 0 0 1 .606.697c.152.303.213.667.213 1.091s-.061.788-.213 1.091-.333.546-.606.697c-.243.151-.546.242-.849.242-.334 0-.607-.061-.849-.242zm1.516-.758c.152-.242.243-.576.243-1.061 0-.455-.091-.818-.243-1.061a.76.76 0 0 0-.667-.364.76.76 0 0 0-.667.364c-.152.242-.243.576-.243 1.061 0 .455.091.818.243 1.061a.76.76 0 0 0 .667.364.76.76 0 0 0 .667-.364z"/><path opacity=".112" d="M301.517 58.129v4.395h-.819v-3.697h-.94v-.697h1.759z"/><path opacity=".812" d="M319.621 62.433c-.303-.182-.515-.455-.697-.818s-.243-.788-.243-1.273.091-.909.243-1.273c.182-.364.394-.637.697-.818s.607-.273 1.001-.273c.364 0 .697.091 1.001.273s.515.455.697.818.243.788.243 1.273-.091.909-.243 1.273c-.182.364-.394.636-.697.818a1.91 1.91 0 0 1-1.001.273c-.394 0-.728-.091-1.001-.273zm1.759-.879c.182-.273.273-.667.273-1.212s-.091-.94-.273-1.212-.455-.424-.788-.424-.577.151-.789.424c-.182.273-.273.667-.273 1.212s.091.939.273 1.212.455.424.789.424c.333-.03.606-.151.788-.424z"/><path opacity=".638" d="M341.547 57.917v4.849h-.91v-4.091h-1.031v-.758h1.941z"/><path opacity=".985" d="M361.562 57.826v5.001h-.941v-4.243h-1.061v-.788h2.002v.03z"/><use href="#N" opacity=".353"/><path opacity=".492" d="M399.408 62.675c-.334-.212-.576-.515-.758-.909s-.273-.879-.273-1.424.091-1.03.273-1.424.455-.697.758-.909c.334-.212.698-.303 1.122-.303s.789.091 1.122.303.576.515.758.909.273.879.273 1.424-.091 1.03-.273 1.424-.455.697-.758.909c-.333.212-.697.303-1.122.303-.455 0-.819-.091-1.122-.303zm1.971-.97c.212-.303.334-.758.334-1.364s-.122-1.061-.334-1.364-.515-.455-.879-.455a1.03 1.03 0 0 0-.88.455c-.212.303-.333.758-.333 1.364s.121 1.061.333 1.364a1.03 1.03 0 0 0 .88.455c.364 0 .667-.151.879-.455z"/><use href="#N" x="39.939" opacity=".234"/><path opacity=".786" d="M439.377 62.614a2.17 2.17 0 0 1-.758-.879c-.182-.394-.273-.849-.273-1.394s.091-1 .273-1.394.425-.697.758-.879c.304-.212.667-.303 1.062-.303s.758.091 1.091.303c.304.212.577.485.759.879s.272.849.272 1.394-.091 1-.272 1.394-.425.697-.759.879c-.303.212-.667.303-1.091.303a2.07 2.07 0 0 1-1.062-.303zm1.911-.97c.212-.303.303-.727.303-1.334 0-.576-.091-1.03-.303-1.333s-.485-.455-.849-.455-.637.152-.849.455-.304.727-.304 1.333c0 .576.091 1.03.304 1.334s.485.455.849.455.667-.151.849-.455z"/><path opacity=".798" d="M459.392 62.524c-.303-.182-.546-.485-.727-.849s-.273-.818-.273-1.334.091-.97.273-1.334.424-.667.727-.849.668-.303 1.031-.303c.395 0 .728.091 1.031.303.304.182.546.485.728.849s.273.818.273 1.334-.091.97-.273 1.334-.424.667-.728.849-.667.303-1.031.303c-.394 0-.727-.091-1.031-.303zm1.85-.909c.213-.273.303-.727.303-1.273 0-.576-.09-1-.303-1.273s-.485-.424-.819-.424-.606.152-.818.424-.304.727-.304 1.273c0 .576.091 1 .304 1.273s.485.424.818.424a.93.93 0 0 0 .819-.424z"/><path opacity=".728" d="M481.318 58.008v4.607h-.849v-3.91h-.97v-.727h1.819v.03z"/><path opacity=".99" d="M499.453 62.311a1.67 1.67 0 0 1-.637-.788c-.152-.333-.243-.758-.243-1.212s.091-.879.243-1.212.364-.606.637-.788.576-.273.94-.273.667.091.94.273.485.424.667.788c.152.333.243.758.243 1.212s-.091.879-.243 1.212-.364.606-.667.788c-.273.182-.607.273-.94.273-.364 0-.667-.091-.94-.273zm1.668-.818c.182-.273.273-.636.273-1.152s-.091-.909-.273-1.152a.82.82 0 0 0-.728-.394.82.82 0 0 0-.728.394c-.182.273-.273.636-.273 1.152s.091.909.273 1.152a.82.82 0 0 0 .728.394c.303 0 .546-.152.728-.394z"/><path opacity=".868" d="M519.498 62.13c-.243-.151-.455-.394-.607-.697s-.212-.667-.212-1.091.061-.788.212-1.091.334-.546.607-.697c.243-.151.546-.242.849-.242a1.55 1.55 0 0 1 .849.242c.243.151.455.394.607.697s.212.667.212 1.091-.061.788-.212 1.091-.334.546-.607.697a1.63 1.63 0 0 1-.849.242c-.303 0-.606-.061-.849-.242zm1.547-.758c.151-.242.242-.576.242-1.061 0-.455-.091-.818-.242-1.061s-.395-.364-.668-.364a.76.76 0 0 0-.667.364c-.151.242-.242.576-.242 1.061 0 .455.091.818.242 1.061a.76.76 0 0 0 .667.364c.273 0 .486-.121.668-.364z"/><path opacity=".956" d="M541.06 58.523v3.607h-.668v-3.031h-.758v-.576h1.426z"/><path opacity=".616" d="M560.953 58.735v3.212h-.606v-2.697h-.667v-.485h1.273v-.03z"/><path opacity=".214" d="M580.817 59.008v2.667h-.485v-2.243h-.577v-.424h1.062z"/><path opacity=".676" d="M599.801 61.281a.89.89 0 0 1-.304-.364c-.091-.151-.121-.364-.121-.576s.03-.424.121-.576.182-.303.304-.364c.121-.091.273-.121.454-.121s.334.03.455.121a.89.89 0 0 1 .304.364c.091.151.121.364.121.576s-.03.424-.121.576-.182.303-.304.364c-.121.091-.273.121-.455.121s-.333-.03-.454-.121zm.818-.394c.091-.121.122-.303.122-.545s-.031-.424-.122-.546a.43.43 0 0 0-.364-.182.43.43 0 0 0-.363.182c-.091.121-.122.303-.122.546s.031.424.122.545a.43.43 0 0 0 .363.182.43.43 0 0 0 .364-.182z"/><path opacity=".244" d="M620.543 59.584v1.485h-.272v-1.242h-.304v-.242h.576z"/><path opacity=".453" d="M640.043 60.675c-.061-.03-.091-.091-.122-.151s-.03-.121-.03-.212 0-.151.03-.212.061-.121.122-.152.091-.061.182-.061c.06 0 .121.03.182.061s.091.091.121.152.03.121.03.212 0 .151-.03.212-.061.121-.121.151-.091.061-.182.061-.122-.03-.182-.061zm.303-.151c.03-.061.061-.121.061-.212s-.031-.151-.061-.212-.091-.061-.121-.061c-.061 0-.091.03-.122.061-.03.061-.06.121-.06.212s.03.151.06.212.091.061.122.061c.03.03.091 0 .121-.061z"/><path opacity=".721" d="M660.239 60.22v.242h-.03v-.212h-.061v-.03h.091z"/><path opacity=".55" d="M100.912 80.223v.151h-.03l.03-.151-.06.03v-.03h.06z"/><path opacity=".974" d="M120.988 79.95v.697h-.122v-.606h-.151v-.121h.273v.03z"/><use href="#K" x="-419.465" y="39.945" opacity=".713"/><path opacity=".789" d="M160.32 81.314c-.152-.091-.242-.212-.333-.394s-.122-.394-.122-.636.031-.455.122-.636.181-.303.333-.394.303-.151.485-.151a.92.92 0 0 1 .486.151c.151.091.242.212.333.394s.121.394.121.636-.03.455-.121.636-.182.303-.333.394a.92.92 0 0 1-.486.151c-.182 0-.333-.061-.485-.151zm.88-.424c.091-.121.151-.333.151-.606s-.06-.455-.151-.606c-.091-.121-.213-.212-.395-.212-.151 0-.273.061-.394.212-.091.121-.152.333-.152.606s.061.455.152.606c.091.121.212.212.394.212.152 0 .273-.061.395-.212z"/><path opacity=".834" d="M181.366 78.798v2.97h-.546v-2.516h-.636v-.455h1.182z"/><use href="#M" x="-59.924" y="19.972" opacity=".657"/><path opacity=".666" d="M219.85 82.162c-.273-.182-.455-.424-.607-.727-.152-.333-.212-.697-.212-1.152s.06-.818.212-1.152.364-.576.607-.727c.272-.182.545-.242.879-.242s.637.091.879.242c.273.182.455.424.607.727.152.333.212.697.212 1.152s-.06.818-.212 1.152-.364.576-.607.727c-.272.182-.545.243-.879.243-.334.03-.637-.061-.879-.243zm1.576-.758c.182-.242.273-.606.273-1.091s-.091-.849-.273-1.091-.394-.364-.697-.364-.516.121-.697.364-.273.606-.273 1.091.091.849.273 1.091.394.364.697.364.516-.121.697-.364z"/><path opacity=".431" d="M239.683 82.435c-.303-.182-.516-.455-.698-.818s-.242-.788-.242-1.303.091-.939.242-1.303c.182-.364.395-.636.698-.818a1.91 1.91 0 0 1 1.001-.273 1.91 1.91 0 0 1 1 .273c.304.182.546.455.698.818.182.364.242.788.242 1.303s-.091.94-.242 1.303c-.182.364-.394.636-.698.818s-.637.273-1 .273a1.91 1.91 0 0 1-1.001-.273zm1.819-.909c.182-.273.304-.697.304-1.242s-.091-.97-.304-1.243c-.182-.273-.455-.424-.788-.424s-.607.151-.789.424-.303.697-.303 1.243.091.97.303 1.242c.182.273.455.424.789.424s.576-.151.788-.424z"/><use href="#O" opacity=".353"/><path opacity=".726" d="M279.47 82.829c-.364-.212-.637-.546-.819-.97-.212-.424-.303-.94-.303-1.546s.091-1.091.303-1.546c.213-.424.486-.758.819-.97.364-.212.758-.333 1.183-.333.455 0 .849.121 1.183.333.364.212.636.546.818.97.213.424.304.939.304 1.546s-.091 1.091-.304 1.546c-.212.424-.485.758-.818.97-.364.212-.759.333-1.183.333-.455 0-.849-.121-1.183-.333zm2.123-1.061c.243-.333.334-.818.334-1.455s-.122-1.152-.334-1.455c-.243-.333-.546-.485-.94-.485s-.698.152-.94.485-.334.818-.334 1.455.122 1.152.334 1.455c.242.333.546.485.94.485s.697-.151.94-.485z"/><path opacity=".238" d="M301.82 77.313v5.94h-1.092v-5.031h-1.273v-.909h2.365z"/><path opacity=".888" d="M319.258 83.132c-.395-.242-.698-.636-.941-1.121-.212-.485-.333-1.061-.333-1.727s.121-1.243.333-1.728a2.64 2.64 0 0 1 .941-1.121c.394-.242.849-.394 1.334-.394.515 0 .94.121 1.334.394.394.243.698.636.94 1.121.213.485.334 1.061.334 1.728s-.121 1.242-.334 1.727-.546.849-.94 1.121c-.394.243-.849.394-1.334.394s-.94-.151-1.334-.394zm2.395-1.182c.273-.364.395-.909.395-1.667 0-.727-.122-1.273-.395-1.667a1.24 1.24 0 0 0-1.061-.546c-.455 0-.789.182-1.062.546s-.394.909-.394 1.667c0 .727.122 1.273.394 1.667.273.364.607.546 1.062.546s.819-.182 1.061-.546z"/><path opacity=".737" d="M341.85 77.071v6.425h-1.183v-5.425h-1.364v-1h2.547z"/><use href="#P" opacity=".706"/><use href="#Q" opacity=".113"/><path opacity=".805" d="M401.834 76.92v6.728h-1.243V77.95h-1.425v-1.061h2.668v.03z"/><use href="#Q" x="39.939" opacity=".162"/><path opacity=".413" d="M439.014 83.314c-.425-.273-.759-.667-1.001-1.182s-.364-1.121-.364-1.849c0-.697.121-1.334.364-1.849s.576-.909 1.001-1.182.879-.394 1.425-.394 1.001.121 1.425.394.758.667 1.001 1.182.364 1.121.364 1.849c0 .697-.121 1.334-.364 1.849s-.576.909-1.001 1.182-.91.394-1.425.394-1.001-.121-1.425-.394zm2.577-1.273c.273-.394.425-.97.425-1.758s-.152-1.364-.425-1.758-.637-.576-1.122-.576c-.455 0-.849.182-1.122.576s-.424.97-.424 1.758.151 1.364.424 1.758.637.576 1.122.576c.455.03.849-.182 1.122-.576z"/><path opacity=".967" d="M461.728 77.041v6.486h-1.213v-5.486h-1.365v-1h2.578z"/><path opacity=".203" d="M479.074 83.132c-.394-.242-.698-.636-.94-1.121s-.334-1.061-.334-1.727.122-1.243.334-1.728.546-.849.94-1.121c.394-.242.849-.394 1.334-.394.516 0 .94.121 1.335.394.394.243.697.636.94 1.121.212.485.333 1.061.333 1.728s-.121 1.242-.333 1.727-.546.849-.94 1.121c-.395.243-.849.394-1.335.394-.515 0-.94-.151-1.334-.394zm2.396-1.182c.273-.364.394-.909.394-1.667 0-.727-.121-1.273-.394-1.667-.273-.364-.607-.546-1.062-.546a1.24 1.24 0 0 0-1.061.546c-.273.364-.394.909-.394 1.667 0 .727.121 1.273.394 1.667a1.24 1.24 0 0 0 1.061.546c.455 0 .789-.182 1.062-.546z"/><path opacity=".99" d="M501.575 77.313v5.94h-1.091v-5.031h-1.274v-.909h2.365z"/><path opacity=".821" d="M521.469 77.465v5.637h-1.061v-4.758h-1.183v-.879h2.244z"/><use href="#R" opacity=".439"/><path opacity=".398" d="M561.257 77.919v4.788h-.88v-4.031h-1.001v-.758h1.881z"/><path opacity=".456" d="M581.12 78.192v4.213h-.788v-3.576h-.88v-.667h1.668v.03z"/><path opacity=".976" d="M599.497 81.92a1.89 1.89 0 0 1-.545-.636c-.122-.273-.182-.606-.182-1s.06-.727.182-1a1.4 1.4 0 0 1 .545-.636c.213-.151.486-.212.759-.212s.545.061.788.212.394.364.546.636c.121.273.182.606.182 1s-.061.727-.182 1a1.4 1.4 0 0 1-1.334.849c-.273 0-.546-.061-.759-.212zm1.365-.667c.152-.212.212-.515.212-.94s-.06-.727-.212-.939-.364-.333-.606-.333-.455.121-.607.333-.212.515-.212.939.06.727.212.94.364.333.607.333c.272-.03.454-.121.606-.333z"/><path opacity=".421" d="M619.603 81.647c-.182-.121-.333-.303-.455-.515-.121-.243-.151-.515-.151-.818s.06-.606.151-.818c.122-.243.243-.394.455-.515a1.12 1.12 0 0 1 .637-.182c.242 0 .455.061.637.182s.333.303.455.515c.121.242.151.515.151.818a2.19 2.19 0 0 1-.151.818c-.122.242-.243.394-.455.515-.182.121-.395.182-.637.182a1.12 1.12 0 0 1-.637-.182zm1.122-.576c.121-.182.182-.424.182-.788 0-.333-.061-.606-.182-.788s-.303-.273-.515-.273-.364.091-.486.273-.182.424-.182.788.061.606.182.788.304.273.486.273a.56.56 0 0 0 .515-.273z"/><use href="#G" x="359.541" y="39.914" opacity=".184"/><path opacity=".604" d="M659.845 81.01a.71.71 0 0 1-.242-.273c-.061-.121-.091-.273-.091-.424 0-.182.03-.303.091-.424s.121-.212.242-.273c.091-.061.213-.091.334-.091s.243.03.333.091a.72.72 0 0 1 .243.273c.061.121.091.273.091.424 0 .182-.03.303-.091.424s-.121.212-.243.273c-.09.061-.212.091-.333.091s-.243-.03-.334-.091zm.607-.303c.06-.091.091-.243.091-.424s-.031-.333-.091-.424-.152-.152-.273-.152-.212.061-.273.152-.091.242-.091.424.03.333.091.424a.32.32 0 0 0 .273.151.32.32 0 0 0 .273-.151z"/><use href="#B" x="379.526" y="59.886" opacity=".5"/><path opacity=".789" d="M700.087 80.374c0-.03 0-.03 0 0-.03-.03-.03-.061-.03-.061v-.03s0-.03.03-.03h.031.03l.03.03v.03.03s0 .03-.03.03h-.03-.031zm.061-.03v-.03-.03h-.03-.031v.03.03h.061z"/><path opacity=".736" d="M80.958 100.104v.303h-.061v-.273h-.061v-.06h.121v.03z"/><path opacity=".313" d="M100.639 100.801c-.061-.061-.121-.121-.182-.212-.03-.091-.061-.212-.061-.333s.031-.243.061-.334.091-.152.182-.212c.061-.061.152-.061.243-.061s.182.03.242.061a1.27 1.27 0 0 1 .182.212c.031.091.061.212.061.334a1.07 1.07 0 0 1-.061.333c-.03.091-.091.151-.182.212-.06.061-.151.061-.242.061a.58.58 0 0 1-.243-.061zm.425-.242c.06-.061.06-.182.06-.303 0-.152-.03-.243-.06-.303-.061-.061-.122-.091-.213-.091s-.151.03-.212.091-.061.181-.061.303c0 .151.031.242.061.303.061.06.121.091.212.091.122.03.182 0 .213-.091z"/><path opacity=".559" d="M121.261 99.225v2.031h-.395v-1.728h-.424v-.303h.819z"/><path opacity=".239" d="M140.214 101.528c-.182-.121-.303-.272-.424-.485a2.02 2.02 0 0 1-.152-.787c0-.304.061-.546.152-.788.091-.212.242-.394.424-.485.182-.121.364-.182.607-.182.212 0 .424.061.606.182s.334.273.425.485.152.485.152.788-.061.545-.152.787c-.091.213-.243.394-.425.485-.182.122-.394.182-.606.182a1.09 1.09 0 0 1-.607-.182zm1.092-.515c.121-.151.182-.424.182-.757s-.061-.576-.182-.758c-.121-.151-.273-.242-.485-.242s-.364.091-.485.242-.182.424-.182.758.06.575.182.757c.121.152.273.243.485.243s.364-.091.485-.243z"/><path opacity=".643" d="M160.017 101.892c-.212-.152-.394-.364-.546-.636-.121-.273-.182-.607-.182-1.001s.061-.727.182-1a1.4 1.4 0 0 1 .546-.636c.212-.152.485-.212.758-.212.303 0 .546.061.788.212s.395.364.546.636c.122.273.182.606.182 1s-.06.728-.182 1.001-.303.484-.546.636-.485.212-.788.212c-.273 0-.516-.06-.758-.212zm1.395-.697c.151-.212.212-.515.212-.94s-.061-.727-.212-.939-.364-.333-.607-.333-.455.121-.606.333-.212.515-.212.939.06.728.212.94.364.333.606.333.455-.121.607-.333z"/><path opacity=".22" d="M179.85 102.195a1.75 1.75 0 0 1-.637-.758c-.151-.333-.242-.727-.242-1.182a2.84 2.84 0 0 1 .242-1.182c.152-.333.364-.576.637-.758s.576-.273.91-.273.667.091.94.273.485.424.637.758a2.84 2.84 0 0 1 .242 1.182c0 .455-.091.849-.242 1.182a1.75 1.75 0 0 1-.637.758c-.273.182-.576.273-.94.273-.334 0-.637-.091-.91-.273zm1.668-.788c.182-.242.273-.636.273-1.152s-.091-.879-.273-1.151c-.182-.242-.424-.394-.728-.394a.82.82 0 0 0-.728.394c-.182.242-.272.636-.272 1.151s.09.879.272 1.152c.182.242.425.394.728.394a.98.98 0 0 0 .728-.394z"/><path opacity=".237" d="M199.683 102.528a2.17 2.17 0 0 1-.758-.879c-.182-.394-.273-.848-.273-1.394s.091-1 .273-1.394.424-.697.758-.879c.303-.212.667-.303 1.061-.303a1.98 1.98 0 0 1 1.092.303 2.17 2.17 0 0 1 .758.879c.182.394.273.849.273 1.394s-.091 1-.273 1.394-.424.697-.758.879c-.303.212-.667.303-1.092.303-.394 0-.758-.091-1.061-.303zm1.91-.939c.213-.303.304-.728.304-1.334 0-.576-.091-1.03-.304-1.333s-.485-.455-.849-.455-.637.151-.849.455-.303.727-.303 1.333c0 .576.091 1.031.303 1.334s.485.454.849.454c.364-.03.637-.181.849-.454z"/><path opacity=".163" d="M219.546 102.771c-.364-.212-.636-.545-.818-.97-.213-.424-.304-.939-.304-1.545s.091-1.091.304-1.546c.212-.424.485-.758.818-.97.364-.212.759-.333 1.183-.333.455 0 .849.121 1.183.333.364.212.637.546.819.97.212.424.303.939.303 1.546s-.091 1.091-.303 1.545c-.213.425-.486.758-.819.97-.364.212-.758.333-1.183.333-.455 0-.849-.09-1.183-.333zm2.123-1.061c.243-.333.334-.818.334-1.454s-.122-1.152-.334-1.455c-.242-.333-.546-.485-.94-.485s-.697.152-.94.485-.334.818-.334 1.455.122 1.151.334 1.454c.243.334.546.485.94.485.394.031.698-.151.94-.485z"/><path opacity=".73" d="M239.38 103.013c-.395-.242-.698-.606-.91-1.091s-.334-1.03-.334-1.697c0-.636.122-1.212.334-1.697s.515-.849.91-1.091.818-.364 1.304-.364.94.121 1.304.364c.394.243.697.606.909 1.091s.334 1.03.334 1.697-.121 1.212-.334 1.697-.515.849-.909 1.091-.819.364-1.304.364a1.99 1.99 0 0 1-1.304-.364zm2.365-1.151c.243-.364.394-.909.394-1.607 0-.727-.121-1.242-.394-1.606a1.19 1.19 0 0 0-1.031-.545c-.425 0-.758.182-1.031.545-.243.364-.394.909-.394 1.606 0 .728.121 1.243.394 1.607a1.19 1.19 0 0 0 1.031.545c.424 0 .758-.182 1.031-.545z"/><path opacity=".47" d="M259.273 103.226c-.424-.273-.728-.667-.97-1.152-.243-.515-.364-1.121-.364-1.818s.121-1.303.364-1.819.576-.909.97-1.152c.425-.273.88-.394 1.426-.394.515 0 1 .121 1.425.394s.758.667.97 1.152c.243.515.364 1.121.364 1.819s-.121 1.303-.364 1.818-.576.909-.97 1.152a2.53 2.53 0 0 1-1.425.394 2.26 2.26 0 0 1-1.426-.394zm2.517-1.243c.273-.394.395-.97.395-1.727s-.152-1.364-.395-1.728c-.273-.394-.637-.576-1.122-.576a1.25 1.25 0 0 0-1.091.576c-.273.394-.395.97-.395 1.728s.122 1.363.395 1.727a1.25 1.25 0 0 0 1.091.576c.485.03.849-.182 1.122-.576z"/><path opacity=".994" d="M282.048 96.74v7.031h-1.304v-5.94h-1.486V96.74h2.79z"/><path opacity=".719" d="M299.06 103.589c-.455-.303-.819-.727-1.092-1.303s-.394-1.242-.394-2.03.122-1.455.394-2.031.637-1 1.092-1.303 1.001-.455 1.577-.455 1.122.151 1.577.455.819.727 1.092 1.303.394 1.243.394 2.031-.121 1.454-.394 2.03-.637 1-1.092 1.303-1.001.455-1.577.455c-.606 0-1.122-.152-1.577-.455zm2.82-1.394c.304-.424.455-1.091.455-1.939s-.151-1.516-.455-1.94-.727-.667-1.243-.667-.94.212-1.243.667c-.303.424-.455 1.091-.455 1.94s.152 1.515.455 1.939.728.667 1.243.667.94-.212 1.243-.667z"/><path opacity=".979" d="M322.138 96.407v7.667h-1.425v-6.455h-1.638v-1.212h3.063z"/><path opacity=".508" d="M338.878 103.832c-.485-.334-.879-.788-1.182-1.394-.273-.607-.425-1.334-.425-2.183s.152-1.575.425-2.182.667-1.091 1.182-1.394c.485-.333 1.062-.485 1.699-.485s1.213.152 1.698.485c.515.333.91.788 1.182 1.394s.425 1.333.425 2.182-.152 1.576-.425 2.183-.667 1.091-1.182 1.394c-.516.333-1.062.485-1.698.485s-1.214-.152-1.699-.485zm3.033-1.485c.333-.455.485-1.152.485-2.092s-.152-1.636-.485-2.091-.789-.697-1.334-.697-1.001.242-1.335.697-.485 1.152-.485 2.091.152 1.637.485 2.092.758.697 1.335.697 1-.243 1.334-.697z"/><use href="#S" opacity=".853"/><path opacity=".339" d="M378.787 103.953c-.516-.333-.91-.818-1.213-1.455s-.455-1.394-.455-2.242c0-.879.151-1.607.455-2.243s.697-1.121 1.213-1.455 1.091-.485 1.758-.485c.637 0 1.244.152 1.759.485s.91.818 1.213 1.455.455 1.394.455 2.243c0 .878-.151 1.606-.455 2.242s-.697 1.122-1.213 1.455-1.091.485-1.759.485-1.243-.152-1.758-.485zm3.123-1.546c.334-.485.516-1.212.516-2.151s-.182-1.667-.516-2.152a1.57 1.57 0 0 0-1.365-.727c-.576 0-1.031.242-1.364.727s-.516 1.212-.516 2.152.182 1.666.516 2.151a1.57 1.57 0 0 0 1.364.728 1.57 1.57 0 0 0 1.365-.728z"/><path opacity=".205" d="M398.741 103.983c-.515-.333-.91-.818-1.213-1.454s-.455-1.394-.455-2.273.152-1.637.455-2.273.698-1.121 1.213-1.455 1.092-.485 1.759-.485 1.243.151 1.759.485.94.818 1.213 1.455c.303.636.455 1.394.455 2.273s-.152 1.636-.455 2.273-.698 1.121-1.213 1.454-1.122.485-1.759.485c-.667.031-1.243-.151-1.759-.485zm3.154-1.545c.334-.485.516-1.213.516-2.182s-.182-1.698-.516-2.183-.819-.727-1.395-.727-1.031.242-1.395.727c-.334.485-.515 1.212-.515 2.183s.181 1.697.515 2.182.789.727 1.395.727a1.62 1.62 0 0 0 1.395-.727z"/><use href="#T" opacity=".647"/><use href="#S" x="79.878" opacity=".885"/><path opacity=".422" d="M462.001 96.315v7.91h-1.456v-6.667h-1.668v-1.243h3.124z"/><path opacity=".606" d="M478.771 103.741c-.485-.303-.849-.758-1.153-1.364-.273-.606-.424-1.303-.424-2.122s.151-1.515.424-2.121.668-1.061 1.153-1.364 1.031-.455 1.637-.455 1.153.152 1.638.455.879.758 1.152 1.364.425 1.303.425 2.121-.152 1.516-.425 2.122-.667 1.061-1.152 1.364-1.031.454-1.638.454-1.182-.151-1.637-.454zm2.941-1.455c.304-.455.486-1.121.486-2.031s-.152-1.576-.486-2.03c-.303-.455-.758-.667-1.304-.667a1.43 1.43 0 0 0-1.273.667c-.304.455-.486 1.121-.486 2.03s.152 1.576.486 2.031c.303.454.758.667 1.273.667.546 0 .971-.213 1.304-.667z"/><path opacity=".217" d="M498.786 103.62c-.455-.303-.849-.728-1.092-1.303-.273-.576-.394-1.273-.394-2.061s.121-1.485.394-2.061.637-1.03 1.092-1.303c.455-.303 1-.455 1.607-.455a2.92 2.92 0 0 1 1.607.455c.486.303.849.727 1.122 1.303s.395 1.273.395 2.061-.122 1.485-.395 2.061-.636 1.03-1.122 1.303a2.92 2.92 0 0 1-1.607.454c-.607 0-1.152-.151-1.607-.454zm2.85-1.394c.304-.425.455-1.091.455-1.97s-.151-1.516-.455-1.97c-.303-.424-.727-.667-1.273-.667-.516 0-.94.212-1.244.667-.303.424-.455 1.091-.455 1.97s.152 1.515.455 1.97c.304.424.728.666 1.244.666.546 0 .97-.242 1.273-.666z"/><path opacity=".245" d="M518.831 103.438c-.455-.273-.789-.697-1.062-1.243-.242-.545-.394-1.182-.394-1.94s.121-1.394.394-1.939c.243-.545.607-.97 1.062-1.243a2.85 2.85 0 0 1 1.516-.424 2.85 2.85 0 0 1 1.516.424c.455.273.789.697 1.062 1.243.242.546.394 1.182.394 1.939s-.121 1.395-.394 1.94c-.243.546-.607.97-1.062 1.243s-.94.424-1.516.424c-.546.03-1.061-.121-1.516-.424zm2.729-1.334c.303-.424.424-1.03.424-1.849s-.151-1.454-.424-1.848c-.303-.424-.698-.636-1.183-.636s-.879.212-1.182.636-.425 1.031-.425 1.848.152 1.455.425 1.849c.303.424.697.637 1.182.637s.88-.213 1.183-.637z"/><path opacity=".357" d="M538.907 103.286c-.425-.273-.759-.667-1.001-1.182s-.364-1.121-.364-1.849c0-.697.121-1.333.364-1.849s.576-.909 1.001-1.182.879-.394 1.425-.394 1.001.121 1.425.394.758.667 1.001 1.182.364 1.121.364 1.849c0 .697-.121 1.334-.364 1.849s-.576.909-1.001 1.182-.91.394-1.425.394c-.546 0-1.001-.152-1.425-.394zm2.547-1.273c.273-.394.425-.97.425-1.758s-.152-1.364-.425-1.758-.637-.576-1.122-.576c-.455 0-.849.182-1.122.576s-.425.97-.425 1.758.152 1.364.425 1.758.637.576 1.122.576.849-.182 1.122-.576z"/><path opacity=".834" d="M558.982 103.074c-.394-.243-.697-.606-.91-1.091a4.24 4.24 0 0 1-.333-1.697c0-.667.121-1.243.333-1.698.213-.485.516-.849.91-1.091s.819-.364 1.334-.364a2.52 2.52 0 0 1 1.335.364c.394.242.697.606.91 1.091a4.24 4.24 0 0 1 .333 1.698c0 .666-.121 1.242-.333 1.697a2.53 2.53 0 0 1-.91 1.091c-.394.242-.849.364-1.335.364a2.45 2.45 0 0 1-1.334-.364zm2.366-1.182c.242-.364.394-.909.394-1.637s-.122-1.272-.394-1.636c-.243-.364-.607-.545-1.062-.545a1.19 1.19 0 0 0-1.031.545c-.243.364-.394.909-.394 1.636s.121 1.273.394 1.637a1.19 1.19 0 0 0 1.031.545c.455 0 .819-.181 1.062-.545z"/><path opacity=".135" d="M579.058 102.801c-.364-.242-.637-.575-.849-1s-.304-.97-.304-1.545c0-.606.091-1.122.304-1.546s.485-.758.849-1 .758-.333 1.213-.333a2.35 2.35 0 0 1 1.213.333c.364.242.637.576.849 1s.303.97.303 1.546c0 .606-.091 1.121-.303 1.545s-.485.758-.849 1-.758.334-1.213.334a1.89 1.89 0 0 1-1.213-.334zm2.183-1.06c.243-.334.364-.819.364-1.485s-.121-1.152-.364-1.485-.546-.485-.94-.485-.728.151-.94.485c-.243.333-.364.818-.364 1.485s.121 1.151.364 1.485.546.485.94.485c.394.03.697-.152.94-.485z"/><path opacity=".521" d="M601.256 97.74v5.031h-.94v-4.243h-1.061v-.788h2.001z"/><path opacity=".834" d="M621.119 98.073v4.395h-.819V98.77h-.94v-.697h1.759z"/><path opacity=".401" d="M639.406 101.922a1.33 1.33 0 0 1-.546-.666c-.122-.273-.213-.637-.213-1.031s.061-.727.213-1.03c.121-.273.303-.515.546-.667s.485-.212.788-.212.546.061.789.212.424.364.545.667a2.58 2.58 0 0 1 .213 1.03c0 .394-.061.728-.213 1.031-.121.272-.303.515-.545.666a1.4 1.4 0 0 1-.789.213c-.273 0-.546-.061-.788-.213zm1.425-.697c.152-.212.243-.545.243-.969s-.091-.758-.243-.97a.75.75 0 0 0-.637-.333c-.273 0-.455.121-.606.333s-.243.546-.243.97.091.757.243.969.363.334.606.334a.75.75 0 0 0 .637-.334z"/><path opacity=".198" d="M659.572 101.559a1.18 1.18 0 0 1-.424-.515 2.03 2.03 0 0 1-.152-.788c0-.303.061-.576.152-.788s.242-.394.424-.515.394-.182.607-.182c.242 0 .424.061.637.182.182.121.333.303.424.515s.152.485.152.788a2.03 2.03 0 0 1-.152.788 1.18 1.18 0 0 1-.424.515c-.182.121-.395.182-.637.182s-.425-.061-.607-.182zm1.092-.546c.121-.182.182-.424.182-.757s-.061-.607-.182-.758c-.121-.182-.273-.243-.485-.243s-.364.091-.485.243c-.122.182-.182.424-.182.758s.06.606.182.757c.121.182.272.243.485.243.212.03.364-.061.485-.243z"/><path opacity=".151" d="M679.709 101.225c-.122-.091-.243-.212-.303-.363-.091-.152-.122-.364-.122-.576s.031-.424.122-.576.181-.303.303-.364c.121-.091.273-.121.455-.121s.333.03.455.121.242.212.303.364c.091.152.121.364.121.576s-.03.424-.121.576-.182.303-.303.363c-.122.091-.273.122-.455.122a1 1 0 0 1-.455-.122zm.819-.424c.091-.121.121-.303.121-.545s-.03-.425-.121-.546-.213-.182-.364-.182a.43.43 0 0 0-.364.182c-.091.121-.122.303-.122.546s.031.424.122.545.212.182.364.182c.151.03.273-.03.364-.182z"/><path opacity=".565" d="M699.875 100.831c-.091-.06-.151-.121-.182-.212a1.1 1.1 0 0 1-.06-.333 1.1 1.1 0 0 1 .06-.334c.031-.091.122-.182.182-.212a.49.49 0 0 1 .273-.091.49.49 0 0 1 .273.091c.091.061.152.121.182.212a1.07 1.07 0 0 1 .061.334 1.07 1.07 0 0 1-.061.333c-.03.091-.121.182-.182.212-.091.061-.182.091-.273.091a1.36 1.36 0 0 1-.273-.091zm.486-.242c.06-.061.091-.182.091-.333s-.031-.243-.091-.334c-.061-.061-.122-.121-.213-.121s-.151.03-.212.121c-.061.061-.091.182-.091.334a.54.54 0 0 0 .091.333c.061.061.121.121.212.121.061 0 .152-.06.213-.121z"/><path opacity=".891" d="M720.194 100.074v.394h-.061v-.334h-.091v-.06h.152z"/><path opacity=".746" d="M61.034 119.985v.455h-.091v-.394h-.121v-.061h.212z"/><path opacity=".584" d="M80.594 120.864c-.091-.06-.152-.151-.212-.242a.84.84 0 0 1-.091-.394c0-.152.03-.273.091-.394s.121-.182.212-.243.182-.091.303-.091.212.031.303.091.152.152.212.243c.061.121.091.242.091.394a.84.84 0 0 1-.091.394c-.061.121-.121.182-.212.242a.51.51 0 0 1-.303.091.51.51 0 0 1-.303-.091zm.546-.272c.061-.091.091-.213.091-.364s-.03-.303-.091-.364c-.061-.091-.152-.121-.243-.121s-.182.03-.243.121-.091.212-.091.364.03.303.091.364c.061.09.152.121.243.121.121 0 .182-.031.243-.121z"/><use href="#U" opacity=".799"/><path opacity=".66" d="M121.503 118.622v3.212h-.606v-2.697h-.668v-.485h1.274v-.03z"/><path opacity=".783" d="M139.941 122.077c-.242-.152-.455-.394-.606-.728-.152-.303-.212-.697-.212-1.121s.06-.818.212-1.121.364-.546.606-.728c.243-.151.546-.242.88-.242s.606.091.879.242.455.394.607.728c.151.303.212.697.212 1.121s-.061.818-.212 1.121a2.06 2.06 0 0 1-.607.728c-.273.151-.546.242-.879.242s-.607-.091-.88-.242zm1.577-.788c.182-.243.243-.607.243-1.091s-.091-.849-.243-1.061c-.182-.243-.394-.364-.697-.364a.85.85 0 0 0-.698.364c-.182.242-.242.606-.242 1.061 0 .484.091.848.242 1.091.182.242.395.363.698.363a.81.81 0 0 0 .697-.363z"/><path opacity=".415" d="M159.774 122.41c-.303-.182-.546-.485-.728-.849s-.273-.818-.273-1.333.091-.97.273-1.334.425-.666.728-.848.667-.303 1.031-.303c.394 0 .728.091 1.031.303.304.182.546.485.728.848s.273.819.273 1.334-.091.97-.273 1.333-.424.667-.728.849-.667.303-1.031.303c-.394 0-.728-.091-1.031-.303zm1.85-.909c.212-.273.303-.728.303-1.273 0-.576-.091-1-.303-1.273s-.485-.424-.819-.424-.606.151-.819.424-.303.727-.303 1.273c0 .576.091 1 .303 1.273s.486.424.819.424.607-.152.819-.424z"/><path opacity=".93" d="M181.882 117.439v5.547h-1.031v-4.698h-1.183v-.879h2.214v.03z"/><path opacity=".916" d="M201.988 117.136v6.183h-1.153v-5.213h-1.304v-.97h2.457z"/><path opacity=".422" d="M219.273 123.319c-.424-.273-.758-.667-1-1.212-.243-.516-.364-1.152-.364-1.879s.121-1.364.364-1.88.576-.939 1-1.212.91-.424 1.456-.424 1.031.151 1.456.424.758.667 1.031 1.212c.242.516.364 1.152.364 1.88s-.122 1.363-.364 1.879-.577.939-1.031 1.212c-.425.273-.91.424-1.456.424-.546-.03-1.031-.151-1.456-.424zm2.608-1.303c.273-.394.425-1.001.425-1.788s-.152-1.395-.425-1.789-.667-.606-1.152-.606-.849.212-1.152.606c-.273.394-.425 1.001-.425 1.789s.152 1.394.425 1.788.667.606 1.152.606.879-.212 1.152-.606z"/><path opacity=".985" d="M239.137 123.562c-.455-.304-.819-.728-1.092-1.304s-.394-1.242-.394-2.03.121-1.455.394-2.031.637-1 1.092-1.303 1.001-.455 1.577-.455 1.122.152 1.577.455.819.727 1.091 1.303.395 1.243.395 2.031-.122 1.455-.395 2.03-.636 1-1.091 1.304-1.001.454-1.577.454c-.607 0-1.122-.151-1.577-.454zm2.82-1.395c.303-.424.455-1.091.455-1.939s-.152-1.516-.455-1.94-.728-.667-1.243-.667a1.42 1.42 0 0 0-1.244.667c-.303.424-.454 1.091-.454 1.94s.151 1.515.454 1.939.728.667 1.244.667c.515-.03.94-.242 1.243-.667z"/><path opacity=".504" d="M258.97 123.804c-.486-.334-.88-.788-1.183-1.394s-.425-1.334-.425-2.182.152-1.576.425-2.182.667-1.092 1.183-1.395c.485-.333 1.061-.484 1.698-.484s1.213.151 1.698.484c.516.334.91.788 1.183 1.395s.424 1.333.424 2.182-.151 1.576-.424 2.182-.667 1.091-1.183 1.394c-.515.333-1.061.485-1.698.485s-1.183-.152-1.698-.485zm3.032-1.485c.334-.455.485-1.152.485-2.091s-.151-1.637-.485-2.092-.788-.697-1.334-.697-1.001.243-1.335.697-.485 1.152-.485 2.092.152 1.636.485 2.091.759.697 1.335.697 1.031-.243 1.334-.697z"/><path opacity=".966" d="M282.29 116.076v8.304h-1.546v-7.001h-1.759v-1.303h3.305z"/><path opacity=".627" d="M298.757 124.167c-.546-.363-.97-.878-1.304-1.545-.303-.667-.485-1.485-.485-2.394 0-.94.151-1.728.485-2.395.303-.666.758-1.182 1.304-1.545s1.183-.516 1.85-.516c.697 0 1.304.182 1.88.516.546.363.97.879 1.304 1.545.303.667.485 1.485.485 2.395 0 .939-.151 1.727-.485 2.394-.303.667-.758 1.182-1.304 1.545s-1.183.516-1.88.516c-.667 0-1.304-.182-1.85-.516zm3.336-1.666c.364-.516.546-1.273.546-2.304s-.182-1.788-.546-2.303-.849-.758-1.486-.758c-.607 0-1.092.243-1.456.758s-.546 1.273-.546 2.303.182 1.788.546 2.304a1.68 1.68 0 0 0 1.456.757c.637.031 1.122-.242 1.486-.757z"/><path opacity=".58" d="M318.681 124.289c-.576-.364-1-.909-1.334-1.606s-.485-1.516-.485-2.486.151-1.788.485-2.485.758-1.242 1.334-1.606 1.213-.545 1.941-.545 1.365.181 1.941.545 1.031.909 1.334 1.606c.334.697.486 1.516.486 2.485s-.152 1.789-.486 2.486-.788 1.242-1.334 1.606c-.576.364-1.213.545-1.941.545-.758 0-1.395-.181-1.941-.545zm3.457-1.697c.364-.546.546-1.334.546-2.395s-.182-1.848-.546-2.394-.879-.788-1.516-.788-1.152.273-1.516.788c-.364.546-.546 1.334-.546 2.394s.182 1.849.546 2.395.879.788 1.516.788c.607.03 1.122-.243 1.516-.788z"/><path opacity=".806" d="M342.426 115.591v9.243h-1.728v-7.788h-1.941v-1.425h3.669v-.03z"/><path opacity=".491" d="M358.529 124.47c-.576-.393-1.061-.939-1.395-1.666s-.515-1.607-.515-2.607.182-1.879.515-2.606.819-1.273 1.395-1.667 1.274-.576 2.002-.576c.758 0 1.425.182 2.031.576s1.062.939 1.395 1.667.516 1.606.516 2.606-.182 1.879-.516 2.607a3.99 3.99 0 0 1-1.395 1.666c-.606.394-1.273.576-2.031.576-.728 0-1.395-.182-2.002-.576zm3.609-1.757c.394-.546.576-1.394.576-2.485s-.182-1.94-.576-2.486-.91-.818-1.577-.818-1.183.273-1.577.818-.576 1.394-.576 2.486.182 1.939.576 2.485.91.818 1.577.818 1.183-.273 1.577-.818z"/><use href="#V" opacity=".916"/><path opacity=".704" d="M398.438 124.561c-.607-.394-1.061-.939-1.425-1.697-.334-.727-.516-1.606-.516-2.636s.182-1.91.516-2.637.818-1.303 1.425-1.697 1.274-.576 2.062-.576c.758 0 1.456.182 2.062.576s1.092.939 1.426 1.697c.333.727.515 1.636.515 2.637 0 1.03-.182 1.909-.515 2.636s-.819 1.303-1.426 1.697-1.304.576-2.062.576-1.456-.212-2.062-.576zm3.669-1.818c.395-.576.607-1.394.607-2.515s-.212-1.97-.607-2.516c-.394-.576-.94-.848-1.607-.848s-1.213.272-1.607.848-.607 1.394-.607 2.516.213 1.97.607 2.515c.394.576.94.849 1.607.849a1.81 1.81 0 0 0 1.607-.849z"/><path opacity=".636" d="M418.453 124.501c-.607-.394-1.062-.94-1.395-1.667s-.516-1.606-.516-2.606.182-1.88.516-2.607.818-1.303 1.395-1.667c.606-.394 1.273-.576 2.031-.576s1.426.182 2.032.576 1.062.94 1.425 1.667c.334.727.516 1.606.516 2.607s-.182 1.879-.516 2.606-.818 1.303-1.425 1.667c-.606.394-1.274.576-2.032.576s-1.455-.182-2.031-.576zm3.639-1.788c.394-.546.576-1.394.576-2.516s-.182-1.939-.576-2.515c-.395-.546-.941-.849-1.608-.849s-1.213.273-1.577.849c-.394.545-.576 1.394-.576 2.515s.182 1.94.576 2.516c.395.545.91.848 1.577.848a1.85 1.85 0 0 0 1.608-.848z"/><use href="#W" opacity=".176"/><path opacity=".617" d="M458.452 124.41c-.576-.363-1.031-.909-1.364-1.636s-.516-1.576-.516-2.546.182-1.849.516-2.546c.333-.727.788-1.273 1.364-1.636s1.244-.576 1.972-.576 1.395.182 2.001.576c.576.363 1.031.909 1.395 1.636.334.727.516 1.576.516 2.546 0 1-.182 1.849-.516 2.546-.333.727-.788 1.273-1.395 1.636-.576.364-1.243.576-2.001.576-.728-.03-1.395-.212-1.972-.576zm3.549-1.758c.394-.545.576-1.363.576-2.454s-.182-1.91-.576-2.455-.91-.819-1.577-.819c-.637 0-1.183.273-1.547.819-.394.545-.576 1.364-.576 2.455s.182 1.909.576 2.454.91.819 1.547.819c.667 0 1.182-.273 1.577-.819z"/><use href="#X" opacity=".682"/><path opacity=".17" d="M502.121 115.863v8.698h-1.607v-7.334h-1.85v-1.364h3.457z"/><use href="#Y" opacity=".527"/><path opacity=".722" d="M541.909 116.257v7.91h-1.456V117.5h-1.668v-1.243h3.124z"/><path opacity=".444" d="M558.709 123.592c-.455-.303-.849-.727-1.092-1.303-.273-.576-.394-1.273-.394-2.061s.121-1.485.394-2.061.637-1.03 1.092-1.303c.455-.303 1.001-.455 1.607-.455a2.93 2.93 0 0 1 1.608.455c.485.303.849.727 1.122 1.303s.394 1.273.394 2.061-.121 1.485-.394 2.061-.637 1.03-1.122 1.303c-.486.303-1.001.454-1.608.454s-1.152-.151-1.607-.454zm2.851-1.394c.303-.425.455-1.091.455-1.97s-.152-1.516-.455-1.97c-.304-.424-.728-.667-1.274-.667-.516 0-.94.212-1.243.667-.304.424-.455 1.091-.455 1.97s.151 1.515.455 1.97c.303.424.727.667 1.243.667.546-.031.97-.243 1.274-.667z"/><path opacity=".293" d="M581.666 116.772v6.88h-1.274v-5.819h-1.455v-1.061h2.729z"/><path opacity=".112" d="M598.921 123.046c-.394-.242-.697-.636-.94-1.121s-.334-1.061-.334-1.728.122-1.242.334-1.727.546-.849.94-1.121a2.54 2.54 0 0 1 1.335-.394c.515 0 .94.121 1.334.394.394.242.697.636.94 1.121.212.485.333 1.061.333 1.727s-.121 1.243-.333 1.728-.546.848-.94 1.121a2.54 2.54 0 0 1-1.334.394c-.516 0-.941-.121-1.335-.394zm2.396-1.182c.273-.363.394-.909.394-1.667 0-.727-.121-1.272-.394-1.666-.273-.364-.607-.546-1.061-.546s-.789.182-1.062.546-.394.909-.394 1.666c0 .728.121 1.273.394 1.667.273.364.607.546 1.062.546.454.03.788-.152 1.061-.546z"/><path opacity=".237" d="M619.027 122.774c-.364-.243-.637-.576-.849-1.001s-.303-.969-.303-1.545c0-.606.09-1.122.303-1.546s.485-.758.849-1 .758-.333 1.213-.333a2.35 2.35 0 0 1 1.213.333c.364.242.637.576.849 1s.303.97.303 1.546c0 .606-.091 1.121-.303 1.545s-.485.758-.849 1.001-.758.333-1.213.333-.88-.091-1.213-.333zm2.153-1.061c.243-.334.364-.818.364-1.485s-.121-1.152-.364-1.485-.546-.485-.94-.485-.728.151-.94.485c-.243.333-.364.818-.364 1.485s.121 1.151.364 1.485.546.485.94.485.697-.152.94-.485z"/><path opacity=".362" d="M641.195 117.743v4.94h-.909v-4.152h-1.032v-.758h1.941v-.03z"/><path opacity=".519" d="M659.299 122.077c-.242-.152-.455-.394-.606-.728-.152-.303-.213-.697-.213-1.121s.061-.818.213-1.121.364-.546.606-.728c.243-.151.546-.242.88-.242s.606.091.879.242.455.394.607.728c.151.303.212.697.212 1.121s-.061.818-.212 1.121a2.06 2.06 0 0 1-.607.728c-.273.151-.546.242-.879.242s-.607-.091-.88-.242zm1.577-.788c.182-.243.243-.607.243-1.091s-.091-.849-.243-1.061c-.182-.243-.394-.364-.697-.364a.85.85 0 0 0-.698.364c-.182.242-.242.606-.242 1.061 0 .484.091.848.242 1.091a.81.81 0 0 0 .698.363.81.81 0 0 0 .697-.363z"/><path opacity=".266" d="M680.801 118.561v3.303h-.607v-2.788h-.697v-.515h1.304z"/><path opacity=".279" d="M699.602 121.318c-.151-.09-.273-.242-.364-.424s-.121-.424-.121-.667c0-.272.03-.484.121-.666s.213-.334.364-.425.334-.151.516-.151.364.06.515.151.273.243.364.425.122.424.122.666c0 .273-.031.485-.122.667s-.212.334-.364.424a1.02 1.02 0 0 1-.515.152c-.182 0-.364-.061-.516-.152zm.94-.454c.091-.152.152-.364.152-.637s-.061-.484-.152-.636-.242-.212-.424-.212-.303.06-.394.212-.152.364-.152.636.061.485.152.637.242.212.394.212c.182 0 .334-.061.424-.212z"/><path opacity=".894" d="M719.799 120.894c-.091-.06-.182-.151-.212-.273-.061-.121-.091-.242-.091-.424 0-.151.03-.303.091-.424s.121-.212.212-.273a.61.61 0 0 1 .334-.091c.121 0 .212.03.334.091.09.061.181.152.212.273.06.121.091.242.091.424 0 .152-.031.303-.091.424s-.122.213-.212.273a.61.61 0 0 1-.334.091.61.61 0 0 1-.334-.091zm.577-.273c.06-.09.091-.212.091-.394s-.031-.303-.091-.394-.152-.121-.243-.121-.182.031-.243.121-.091.213-.091.394.031.304.091.394.152.122.243.122.152-.031.243-.122z"/><path opacity=".867" d="M740.208 119.955v.546h-.091v-.455h-.121v-.091h.212z"/><path opacity=".372" d="M40.867 140.352l-.061-.061c0-.03-.03-.061-.03-.121 0-.031 0-.091.03-.122 0-.03.03-.06.061-.06.03-.03.061-.03.091-.03s.061 0 .091.03l.061.06c0 .031.03.061.03.122 0 .03 0 .091-.03.121 0 .03-.03.061-.061.061-.03.03-.061.03-.091.03s-.061 0-.091-.03zm.152-.061c.03-.03.03-.061.03-.091 0-.061 0-.091-.03-.091-.03-.03-.03-.03-.061-.03s-.061 0-.061.03c-.03.03-.03.061-.03.091 0 .061 0 .091.03.091.03.03.03.03.061.03s.03 0 .061-.03z"/><path opacity=".803" d="M60.64 140.806c-.091-.06-.152-.151-.212-.242a.84.84 0 0 1-.091-.394c0-.152.03-.273.091-.394s.121-.182.212-.243.182-.091.303-.091.212.031.303.091.152.152.212.243c.061.121.091.242.091.394a.84.84 0 0 1-.091.394c-.061.121-.121.182-.212.242a.51.51 0 0 1-.303.091c-.121 0-.243-.03-.303-.091zm.516-.242c.061-.091.091-.212.091-.364s-.03-.303-.091-.364c-.061-.091-.152-.121-.243-.121s-.182.03-.243.121-.091.213-.091.364.03.303.091.364c.061.091.152.121.243.121.121 0 .182-.061.243-.121z"/><path opacity=".788" d="M81.383 138.957v2.425h-.455v-2.061h-.516v-.364h.97z"/><path opacity=".928" d="M100.154 141.715c-.212-.121-.364-.333-.485-.606a2.26 2.26 0 0 1-.182-.94c0-.363.061-.666.182-.939s.303-.455.485-.606c.212-.152.455-.212.728-.212s.515.06.728.212c.212.121.394.333.515.606s.182.576.182.939-.061.667-.182.94-.303.455-.515.606c-.213.121-.455.212-.728.212s-.516-.091-.728-.212zm1.304-.636c.152-.213.212-.485.212-.879s-.06-.697-.212-.879c-.152-.212-.334-.303-.576-.303s-.425.091-.576.303-.213.485-.213.879.061.697.213.879c.151.212.333.303.576.303s.424-.122.576-.303z"/><path opacity=".694" d="M121.685 138.078v4.213h-.788v-3.576h-.879v-.667h1.667v.03z"/><path opacity=".532" d="M141.852 137.624v5.091h-.97v-4.303h-1.062v-.788h2.032z"/><path opacity=".217" d="M161.958 137.26v5.88h-1.092v-4.971h-1.243v-.909h2.335z"/><path opacity=".578" d="M179.365 143.17c-.425-.273-.728-.667-.971-1.152-.242-.515-.364-1.121-.364-1.818s.122-1.303.364-1.818.576-.91.971-1.152c.424-.273.879-.394 1.425-.394.515 0 1.001.121 1.425.394s.758.667.971 1.152c.242.515.364 1.121.364 1.818s-.122 1.303-.364 1.818-.577.91-.971 1.152c-.424.273-.879.394-1.425.394s-1.001-.121-1.425-.394zm2.517-1.243c.273-.394.394-.969.394-1.727s-.121-1.364-.394-1.727c-.273-.394-.637-.576-1.122-.576a1.25 1.25 0 0 0-1.092.576c-.273.393-.394.969-.394 1.727s.121 1.364.394 1.727a1.25 1.25 0 0 0 1.092.576c.485 0 .849-.182 1.122-.576z"/><path opacity=".444" d="M202.2 136.533v7.273h-1.364v-6.152h-1.547v-1.121h2.911z"/><path opacity=".252" d="M222.306 136.229v7.911h-1.455v-6.668h-1.668v-1.243h3.123z"/><path opacity=".392" d="M238.894 144.019c-.546-.334-.94-.849-1.243-1.485-.304-.667-.455-1.425-.455-2.334s.151-1.667.455-2.334.728-1.151 1.243-1.485a3.36 3.36 0 0 1 1.82-.515c.667 0 1.273.182 1.819.515s.971.849 1.274 1.485c.303.667.455 1.425.455 2.334s-.152 1.667-.455 2.334-.728 1.151-1.274 1.485-1.152.515-1.819.515c-.698 0-1.304-.182-1.82-.515zm3.245-1.607c.364-.484.515-1.242.515-2.242s-.182-1.728-.515-2.243c-.364-.485-.819-.758-1.425-.758s-1.062.243-1.426.758c-.364.485-.515 1.243-.515 2.243s.182 1.727.515 2.242c.364.485.819.758 1.426.758.576 0 1.061-.242 1.425-.758z"/><path opacity=".971" d="M258.758 144.261c-.577-.364-1.001-.909-1.335-1.606s-.485-1.516-.485-2.485.152-1.788.485-2.485.758-1.243 1.335-1.607a3.54 3.54 0 0 1 1.94-.545 3.54 3.54 0 0 1 1.941.545c.576.364 1.031.909 1.335 1.607.333.697.485 1.515.485 2.485s-.152 1.788-.485 2.485-.789 1.242-1.335 1.606c-.576.364-1.213.546-1.941.546-.758 0-1.395-.182-1.94-.546zm3.426-1.697c.364-.546.546-1.334.546-2.394s-.182-1.849-.546-2.395-.879-.788-1.516-.788-1.152.273-1.516.788c-.364.546-.546 1.334-.546 2.395s.182 1.848.546 2.394.879.788 1.516.788 1.152-.273 1.516-.788z"/><path opacity=".869" d="M282.533 135.472v9.395h-1.759v-7.94h-2.002v-1.455h3.761z"/><path opacity=".256" d="M302.578 135.29v9.789h-1.82v-8.274h-2.062v-1.515h3.882z"/><path opacity=".632" d="M318.439 144.776c-.637-.394-1.122-1-1.517-1.788-.364-.788-.546-1.727-.546-2.788 0-1.091.182-2 .546-2.788s.88-1.394 1.517-1.788c.636-.425 1.364-.606 2.153-.606.819 0 1.546.212 2.183.606s1.153 1 1.517 1.788.545 1.727.545 2.788c0 1.091-.182 2-.545 2.788s-.88 1.394-1.517 1.788-1.364.607-2.183.607c-.789 0-1.517-.213-2.153-.607zm3.881-1.939c.425-.606.637-1.485.637-2.667s-.212-2.061-.637-2.667-1-.909-1.698-.909-1.274.303-1.698.909-.637 1.485-.637 2.667.212 2.061.637 2.667.97.909 1.698.909c.698 0 1.274-.303 1.698-.909z"/><use href="#Z" opacity=".381"/><path opacity=".146" d="M358.286 144.988c-.667-.424-1.182-1.06-1.577-1.879s-.576-1.788-.576-2.909.182-2.091.576-2.91.91-1.454 1.577-1.879 1.426-.636 2.275-.636 1.607.212 2.274.636 1.183 1.061 1.577 1.879.576 1.788.576 2.91-.182 2.091-.576 2.909-.91 1.455-1.577 1.879-1.425.637-2.274.637-1.607-.212-2.275-.637zm4.064-2c.425-.636.667-1.546.667-2.788s-.212-2.182-.667-2.788c-.424-.637-1.031-.94-1.789-.94a2.06 2.06 0 0 0-1.789.94c-.425.636-.668 1.545-.668 2.788s.213 2.182.668 2.788c.424.636 1.031.94 1.789.94.758-.031 1.334-.334 1.789-.94z"/><use href="#a" opacity=".201"/><use href="#b" opacity=".617"/><path opacity=".608" d="M418.18 145.019c-.667-.425-1.183-1.061-1.577-1.879s-.576-1.819-.576-2.94.182-2.122.576-2.94.91-1.455 1.577-1.879 1.425-.636 2.274-.636 1.608.212 2.305.636c.667.424 1.213 1.061 1.577 1.879.394.818.576 1.819.576 2.94s-.182 2.121-.576 2.94-.91 1.454-1.577 1.879-1.425.636-2.305.636c-.818 0-1.607-.212-2.274-.636zm4.094-2.031c.455-.636.667-1.576.667-2.818s-.212-2.183-.667-2.819-1.031-.939-1.789-.939-1.335.303-1.79.939-.667 1.576-.667 2.819.213 2.182.667 2.818 1.032.94 1.79.94 1.364-.303 1.789-.94z"/><path opacity=".66" d="M438.195 144.988c-.668-.424-1.183-1.06-1.577-1.879s-.576-1.788-.576-2.909.181-2.091.576-2.91.909-1.454 1.577-1.879 1.425-.636 2.274-.636 1.607.212 2.274.636 1.183 1.061 1.577 1.879.577 1.788.577 2.91-.182 2.091-.577 2.909-.909 1.455-1.577 1.879-1.425.637-2.274.637c-.879 0-1.607-.212-2.274-.637zm4.033-2c.424-.636.667-1.546.667-2.788s-.212-2.182-.667-2.788c-.425-.637-1.031-.94-1.789-.94s-1.335.303-1.789.94c-.425.636-.668 1.545-.668 2.788s.213 2.182.668 2.788c.424.636 1.031.94 1.789.94.758-.031 1.364-.334 1.789-.94z"/><use href="#Z" x="119.877" opacity=".245"/><use href="#c" opacity=".726"/><path opacity=".532" d="M498.27 144.655c-.606-.394-1.122-.97-1.456-1.758-.364-.757-.545-1.667-.545-2.727s.181-1.97.545-2.728.85-1.333 1.456-1.758c.607-.394 1.334-.606 2.123-.606s1.486.212 2.123.606 1.122.97 1.486 1.758c.364.758.545 1.667.545 2.728s-.181 1.97-.545 2.727-.85 1.334-1.486 1.758c-.637.394-1.335.606-2.123.606-.819 0-1.516-.212-2.123-.606zm3.791-1.879c.394-.576.606-1.455.606-2.606s-.212-2.031-.606-2.607a1.94 1.94 0 0 0-1.668-.879c-.698 0-1.244.303-1.668.879-.394.576-.607 1.455-.607 2.607s.213 2.03.607 2.606a1.94 1.94 0 0 0 1.668.879c.697 0 1.243-.273 1.668-.879z"/><use href="#V" x="139.801" y="19.972" opacity=".164"/><use href="#X" x="59.923" y="19.972" opacity=".962"/><path opacity=".977" d="M558.466 144.049c-.546-.334-.97-.849-1.273-1.516s-.455-1.454-.455-2.364.151-1.697.455-2.364a3.5 3.5 0 0 1 1.273-1.515 3.44 3.44 0 0 1 1.82-.515c.697 0 1.304.182 1.85.515s.97.849 1.273 1.515.455 1.455.455 2.364-.151 1.698-.455 2.364-.727 1.152-1.273 1.516c-.546.333-1.153.515-1.85.515-.667 0-1.274-.152-1.82-.515zm3.276-1.607c.363-.515.515-1.242.515-2.242s-.182-1.758-.515-2.243c-.364-.515-.85-.758-1.456-.758s-1.092.243-1.425.758c-.364.515-.546 1.243-.546 2.243s.182 1.757.546 2.242c.364.516.818.758 1.425.758a1.68 1.68 0 0 0 1.456-.758z"/><use href="#d" opacity=".626"/><path opacity=".893" d="M598.678 143.534c-.454-.303-.818-.728-1.091-1.303s-.395-1.243-.395-2.031.122-1.455.395-2.031.637-1 1.091-1.303 1.001-.454 1.577-.454 1.122.151 1.577.454.819.728 1.092 1.303.394 1.243.394 2.031-.121 1.455-.394 2.031-.637 1-1.092 1.303-1.001.454-1.577.454c-.576-.03-1.122-.182-1.577-.454zm2.821-1.394c.303-.425.455-1.091.455-1.94s-.152-1.515-.455-1.94-.728-.666-1.244-.666-.94.212-1.243.666c-.303.425-.455 1.091-.455 1.94s.152 1.515.455 1.94.728.666 1.243.666c.516-.03.94-.242 1.244-.666z"/><use href="#e" opacity=".859"/><path opacity=".467" d="M641.377 137.199v5.94h-1.092v-5.031h-1.273v-.939h2.365v.03z"/><use href="#f" opacity=".411"/><path opacity=".916" d="M681.013 138.018v4.303h-.789v-3.637h-.91v-.666h1.699z"/><path opacity=".727" d="M699.39 141.745c-.212-.151-.394-.333-.516-.606s-.182-.576-.182-.939.061-.697.182-.94c.122-.273.304-.485.516-.606.212-.151.455-.212.728-.212s.515.061.728.212.394.333.515.606.182.576.182.94-.061.697-.182.939c-.121.273-.303.485-.515.606-.213.152-.455.212-.728.212s-.516-.06-.728-.212zm1.334-.666c.152-.213.213-.516.213-.91s-.061-.697-.213-.909-.333-.303-.576-.303-.424.091-.576.303-.212.515-.212.909.06.697.212.91.333.303.576.303c.243.03.425-.091.576-.303z"/><path opacity=".533" d="M719.587 141.291c-.152-.091-.273-.243-.364-.425s-.121-.424-.121-.666c0-.273.03-.485.121-.667s.212-.334.364-.424a1.02 1.02 0 0 1 .515-.152c.182 0 .364.061.516.152s.273.242.364.424.121.424.121.667c0 .272-.03.485-.121.666s-.213.334-.364.425-.334.151-.516.151-.364-.06-.515-.151zm.94-.455c.091-.151.151-.364.151-.636s-.06-.485-.151-.637-.243-.212-.425-.212a.41.41 0 0 0-.394.212c-.091.152-.152.364-.152.637s.061.485.152.636a.44.44 0 0 0 .394.212c.182 0 .304-.091.425-.212z"/><path opacity=".955" d="M739.753 140.866c-.091-.06-.181-.151-.212-.272a.89.89 0 0 1-.091-.425c0-.151.031-.303.091-.424s.121-.212.212-.273a.62.62 0 0 1 .334-.091c.121 0 .212.031.334.091.091.061.182.152.212.273.061.121.091.242.091.424 0 .152-.03.303-.091.425s-.121.212-.212.272a.61.61 0 0 1-.334.091.61.61 0 0 1-.334-.091zm.577-.303c.06-.091.091-.212.091-.394s-.031-.303-.091-.394-.152-.121-.243-.121-.182.03-.243.121-.091.212-.091.394.031.303.091.394.152.122.243.122c.091.03.182-.031.243-.122z"/><path opacity=".921" d="M760.163 139.958v.454h-.091v-.394h-.091v-.06h.182z"/><path opacity=".138" d="M20.913 160.263l-.03-.03v-.061-.061c0-.03.03-.03.03-.03h.061.061l.03.03v.061.061c0 .03-.03.03-.03.03h-.061-.061zm.091-.061v-.06-.061l-.03-.03c-.03 0-.03 0-.03.03v.061.06l.03.031c.03 0 .03 0 .03-.031z"/><path opacity=".933" d="M40.716 160.687c-.061-.06-.121-.121-.182-.212a1.09 1.09 0 0 1-.061-.333c0-.121.03-.243.061-.334s.091-.151.182-.212.152-.06.243-.06.182.03.243.06c.061.061.121.121.182.212.03.091.061.213.061.334a1.09 1.09 0 0 1-.061.333c-.03.091-.091.152-.182.212-.061.061-.152.061-.243.061a.56.56 0 0 1-.243-.061zm.425-.242c.061-.061.061-.182.061-.303 0-.152-.03-.243-.061-.303-.061-.061-.121-.091-.212-.091s-.152.03-.212.091-.061.182-.061.303c0 .151.03.242.061.303.061.06.121.091.212.091.121.03.182 0 .212-.091z"/><use href="#g" opacity=".717"/><path opacity=".614" d="M81.534 158.536v3.212h-.606v-2.697h-.667v-.515h1.274z"/><use href="#h" opacity=".71"/><path opacity=".373" d="M121.867 157.596v5.092h-.94v-4.304h-1.092v-.788h2.032z"/><path opacity=".432" d="M142.004 157.172v5.94h-1.092v-5.031h-1.274v-.939h2.366v.03z"/><path opacity=".798" d="M159.35 163.203c-.425-.273-.758-.667-1.001-1.182s-.364-1.152-.364-1.849c0-.727.122-1.333.364-1.848s.576-.91 1.001-1.182.91-.394 1.456-.394 1.031.121 1.455.394.758.666 1.001 1.182.364 1.151.364 1.848c0 .728-.121 1.334-.364 1.849s-.576.909-1.001 1.182-.909.394-1.455.394-1.031-.121-1.456-.394zm2.578-1.273c.273-.394.424-1 .424-1.788s-.151-1.394-.424-1.788-.667-.606-1.153-.606-.849.212-1.122.606-.424 1-.424 1.788.151 1.394.424 1.788.667.606 1.122.606c.516-.03.88-.212 1.153-.606z"/><use href="#i" opacity=".574"/><path opacity=".557" d="M199.016 163.839c-.515-.333-.91-.818-1.213-1.454s-.455-1.395-.455-2.243c0-.879.152-1.606.455-2.243s.698-1.121 1.213-1.455 1.092-.485 1.759-.485c.637 0 1.243.152 1.759.485s.91.819 1.213 1.455.455 1.394.455 2.243c0 .879-.152 1.606-.455 2.243s-.698 1.121-1.213 1.454-1.092.485-1.759.485-1.274-.151-1.759-.485zm3.124-1.545c.333-.485.515-1.213.515-2.152s-.182-1.667-.515-2.152a1.57 1.57 0 0 0-1.365-.727 1.57 1.57 0 0 0-1.365.727c-.333.485-.515 1.212-.515 2.152s.182 1.667.515 2.152a1.57 1.57 0 0 0 1.365.727c.546 0 1.031-.242 1.365-.727z"/><path opacity=".819" d="M218.849 164.112c-.546-.364-1.001-.879-1.304-1.546s-.485-1.485-.485-2.424.151-1.758.485-2.425c.303-.667.758-1.212 1.304-1.546.546-.363 1.182-.545 1.88-.545s1.334.182 1.88.545 1.001.879 1.304 1.546.485 1.485.485 2.425-.151 1.757-.485 2.424c-.303.667-.758 1.213-1.304 1.546-.546.364-1.183.545-1.88.545s-1.334-.181-1.88-.545zm3.366-1.637c.364-.515.546-1.303.546-2.303 0-1.03-.182-1.788-.546-2.303s-.849-.788-1.486-.788a1.76 1.76 0 0 0-1.486.788c-.364.515-.546 1.303-.546 2.303 0 1.03.182 1.788.546 2.303s.849.788 1.486.788c.606-.03 1.122-.272 1.486-.788z"/><path opacity=".655" d="M238.682 164.415c-.576-.394-1.061-.94-1.395-1.667s-.516-1.606-.516-2.606.182-1.879.516-2.607.819-1.273 1.395-1.667 1.274-.576 2.001-.576c.759 0 1.426.182 2.032.576s1.062.94 1.395 1.667.516 1.606.516 2.607-.182 1.879-.516 2.606a4 4 0 0 1-1.395 1.667c-.606.394-1.273.576-2.032.576-.727 0-1.394-.212-2.001-.576zm3.609-1.788c.394-.546.576-1.394.576-2.485s-.182-1.94-.576-2.486-.91-.818-1.577-.818-1.183.273-1.577.818-.576 1.395-.576 2.486.182 1.939.576 2.485.91.818 1.577.818 1.183-.273 1.577-.818z"/><path opacity=".949" d="M262.639 155.202v9.849h-1.819v-8.334h-2.093v-1.515h3.912z"/><path opacity=".816" d="M278.439 164.839c-.637-.424-1.153-1.03-1.547-1.818-.364-.788-.576-1.758-.576-2.849s.182-2.061.576-2.849c.364-.788.88-1.424 1.547-1.818.637-.425 1.395-.637 2.214-.637s1.576.212 2.213.637c.667.424 1.183 1.03 1.547 1.818s.576 1.758.576 2.849-.182 2.061-.576 2.849c-.364.788-.88 1.424-1.547 1.818-.667.424-1.395.637-2.213.637-.819-.031-1.577-.213-2.214-.637zm3.972-1.97c.425-.606.637-1.515.637-2.727s-.212-2.122-.637-2.728-1-.909-1.758-.909a2 2 0 0 0-1.729.909c-.425.606-.637 1.515-.637 2.728s.212 2.121.637 2.727a2 2 0 0 0 1.729.909c.727 0 1.304-.303 1.758-.909z"/><path opacity=".74" d="M298.332 165.021c-.667-.424-1.213-1.061-1.607-1.909-.394-.818-.576-1.819-.576-2.97s.182-2.122.576-2.97c.394-.819.91-1.455 1.607-1.91.668-.424 1.456-.636 2.305-.636s1.638.212 2.305.636 1.213 1.061 1.607 1.91c.394.818.576 1.818.576 2.97s-.182 2.121-.576 2.97c-.394.818-.91 1.455-1.607 1.909-.667.425-1.456.637-2.305.637-.879 0-1.637-.212-2.305-.637zm4.094-2.03c.455-.637.668-1.576.668-2.849 0-1.243-.213-2.213-.668-2.849s-1.061-.94-1.819-.94-1.365.304-1.789.94c-.455.636-.668 1.576-.668 2.849 0 1.242.213 2.212.668 2.849a2.06 2.06 0 0 0 1.789.939c.788 0 1.395-.303 1.819-.939z"/><path opacity=".866" d="M322.805 154.596v11.122h-2.062v-9.395h-2.365v-1.727h4.427z"/><path opacity=".254" d="M338.15 165.294c-.727-.455-1.273-1.121-1.698-2s-.606-1.94-.606-3.152.212-2.243.606-3.152c.425-.879.971-1.546 1.698-2a4.45 4.45 0 0 1 2.427-.698 4.55 4.55 0 0 1 2.456.698c.728.454 1.274 1.121 1.698 2s.607 1.939.607 3.152-.213 2.242-.607 3.152c-.424.879-.97 1.545-1.698 2a4.56 4.56 0 0 1-2.456.697c-.91 0-1.729-.243-2.427-.697zm4.337-2.152c.485-.667.698-1.667.698-3s-.243-2.334-.698-3.001c-.485-.666-1.122-1-1.91-1s-1.426.334-1.911 1-.697 1.667-.697 3.001.242 2.333.697 3c.485.667 1.092 1 1.911 1a2.18 2.18 0 0 0 1.91-1z"/><path opacity=".477" d="M362.836 154.383V165.9h-2.154v-9.729h-2.426v-1.788h4.58z"/><use href="#j" opacity=".27"/><use href="#j" x="19.985" opacity=".309"/><path opacity=".281" d="M417.967 165.445c-.727-.484-1.304-1.151-1.728-2.06s-.637-1.97-.637-3.213.212-2.334.637-3.212c.424-.91 1.001-1.607 1.728-2.061.728-.485 1.577-.697 2.487-.697.94 0 1.759.242 2.517.697.728.485 1.335 1.151 1.729 2.061.424.909.637 1.97.637 3.212s-.213 2.334-.637 3.213c-.425.909-1.001 1.606-1.729 2.06-.728.485-1.577.698-2.517.698-.91 0-1.759-.243-2.487-.698zm4.489-2.212c.485-.697.727-1.727.727-3.091s-.242-2.394-.727-3.092a2.28 2.28 0 0 0-1.972-1.03 2.28 2.28 0 0 0-1.971 1.03c-.485.698-.728 1.728-.728 3.092s.243 2.394.728 3.091 1.122 1.031 1.971 1.031a2.28 2.28 0 0 0 1.972-1.031z"/><path opacity=".52" d="M442.744 154.383V165.9h-2.153v-9.729h-2.426v-1.788h4.579z"/><path opacity=".105" d="M457.998 165.294c-.728-.455-1.274-1.121-1.699-2s-.606-1.94-.606-3.152.212-2.243.606-3.152c.425-.879.971-1.546 1.699-2s1.516-.698 2.426-.698a4.55 4.55 0 0 1 2.456.698c.728.454 1.274 1.121 1.698 2s.607 1.939.607 3.152-.212 2.242-.607 3.152c-.424.879-.97 1.545-1.698 2a4.56 4.56 0 0 1-2.456.697c-.91 0-1.729-.243-2.426-.697zm4.336-2.152c.485-.667.698-1.667.698-3s-.243-2.334-.698-3.001c-.485-.666-1.122-1-1.91-1s-1.426.334-1.911 1-.697 1.667-.697 3.001.242 2.333.697 3c.485.667 1.092 1 1.911 1a2.18 2.18 0 0 0 1.91-1z"/><path opacity=".558" d="M482.622 154.596v11.122h-2.062v-9.395h-2.366v-1.727h4.428z"/><path opacity=".751" d="M498.057 165.052c-.667-.425-1.213-1.061-1.607-1.91s-.576-1.848-.576-3 .182-2.152.576-3 .94-1.486 1.607-1.91a4.28 4.28 0 0 1 2.305-.667c.88 0 1.638.213 2.335.667.698.424 1.213 1.061 1.608 1.91s.576 1.848.576 3-.182 2.152-.576 3-.941 1.485-1.608 1.91c-.697.424-1.455.666-2.335.666-.849-.03-1.637-.242-2.305-.666zm4.155-2.061c.455-.637.667-1.576.667-2.849s-.212-2.213-.667-2.849-1.061-.97-1.819-.97-1.365.334-1.82.97-.667 1.576-.667 2.849.212 2.212.667 2.849 1.061.97 1.82.97 1.364-.334 1.819-.97z"/><path opacity=".106" d="M518.103 164.87c-.667-.425-1.182-1.031-1.546-1.849s-.577-1.758-.577-2.879.182-2.061.577-2.879c.364-.819.879-1.425 1.546-1.849s1.395-.637 2.244-.637a4.12 4.12 0 0 1 2.244.637c.668.424 1.183 1.03 1.547 1.849s.576 1.757.576 2.879-.182 2.061-.576 2.879c-.364.818-.91 1.424-1.547 1.849-.667.424-1.395.636-2.244.636-.818 0-1.577-.212-2.244-.636zm4.003-1.97c.425-.607.637-1.546.637-2.758s-.212-2.122-.637-2.758c-.424-.606-1.031-.909-1.759-.909s-1.304.303-1.759.909c-.424.606-.636 1.545-.636 2.758s.212 2.151.636 2.758 1.001.909 1.759.909 1.335-.303 1.759-.909z"/><path opacity=".887" d="M538.209 164.658c-.637-.394-1.122-1.001-1.486-1.758s-.546-1.697-.546-2.758.182-1.97.546-2.758c.364-.758.849-1.364 1.486-1.758a3.94 3.94 0 0 1 2.123-.606c.788 0 1.516.212 2.153.606s1.122 1 1.486 1.758.546 1.697.546 2.758-.182 1.97-.546 2.758c-.364.757-.849 1.364-1.486 1.758a3.97 3.97 0 0 1-2.153.606c-.789 0-1.516-.212-2.123-.606zm3.791-1.879c.424-.576.606-1.455.606-2.637 0-1.152-.212-2.031-.606-2.637-.425-.576-.971-.879-1.698-.879-.698 0-1.244.303-1.668.879s-.607 1.455-.607 2.637c0 1.152.212 2.03.607 2.637.424.575.97.878 1.668.878.727 0 1.304-.303 1.698-.878z"/><use href="#W" x="119.847" y="39.914" opacity=".531"/><path opacity=".467" d="M582.029 155.717v8.849h-1.637v-7.455h-1.88v-1.364h3.517v-.03z"/><path opacity=".204" d="M598.497 163.87c-.516-.334-.91-.819-1.214-1.455s-.454-1.394-.454-2.273.151-1.637.454-2.273.698-1.122 1.214-1.455 1.091-.485 1.758-.485 1.244.152 1.759.485.94.818 1.213 1.455c.304.636.455 1.394.455 2.273s-.151 1.636-.455 2.273-.697 1.121-1.213 1.455-1.122.484-1.759.484c-.667.031-1.243-.151-1.758-.484zm3.153-1.546c.334-.485.516-1.212.516-2.182s-.182-1.697-.516-2.182a1.62 1.62 0 0 0-1.395-.728c-.576 0-1.031.243-1.395.728-.333.485-.515 1.212-.515 2.182s.182 1.697.515 2.182.789.727 1.395.727a1.62 1.62 0 0 0 1.395-.727z"/><path opacity=".151" d="M618.602 163.567c-.485-.303-.849-.758-1.122-1.334s-.394-1.273-.394-2.091c0-.788.121-1.485.394-2.091.273-.576.637-1.031 1.122-1.334s1.001-.454 1.608-.454 1.152.151 1.607.454c.485.303.849.758 1.122 1.334s.394 1.273.394 2.091c0 .788-.121 1.485-.394 2.091-.273.576-.637 1.031-1.122 1.334s-1.001.454-1.607.454a3 3 0 0 1-1.608-.454zm2.911-1.425c.304-.454.455-1.091.455-2 0-.879-.151-1.546-.455-2s-.727-.667-1.273-.667c-.516 0-.94.212-1.274.667-.303.454-.455 1.091-.455 2 0 .879.152 1.546.455 2a1.43 1.43 0 0 0 1.274.667c.515 0 .94-.242 1.273-.667z"/><path opacity=".911" d="M638.739 163.233c-.425-.273-.758-.667-1.001-1.212-.243-.516-.364-1.152-.364-1.879s.121-1.364.364-1.879.576-.94 1.001-1.213a2.64 2.64 0 0 1 1.455-.424c.546 0 1.031.151 1.456.424s.758.667 1.031 1.213c.243.515.364 1.151.364 1.879s-.121 1.363-.364 1.879-.576.939-1.031 1.212c-.425.273-.91.424-1.456.424a2.64 2.64 0 0 1-1.455-.424zm2.608-1.303c.273-.394.424-1 .424-1.788s-.151-1.395-.424-1.789-.667-.606-1.153-.606-.849.212-1.152.606c-.273.394-.425 1.001-.425 1.789s.152 1.394.425 1.788.667.606 1.152.606.88-.182 1.153-.606z"/><path opacity=".295" d="M658.905 162.839c-.363-.243-.667-.606-.879-1.061s-.334-1-.334-1.636.122-1.182.334-1.637.516-.818.879-1.061.789-.363 1.274-.363.91.121 1.274.363.667.606.879 1.061.334 1 .334 1.637-.121 1.182-.334 1.636-.515.818-.879 1.061-.789.364-1.274.364-.91-.122-1.274-.364zm2.275-1.121c.242-.364.364-.879.364-1.576s-.122-1.213-.364-1.576-.576-.516-1.001-.516-.758.182-1.001.516c-.242.363-.364.878-.364 1.576s.122 1.212.364 1.576.577.515 1.001.515.758-.152 1.001-.515z"/><path opacity=".909" d="M679.041 162.475c-.333-.212-.576-.515-.758-.909s-.273-.879-.273-1.424.091-1.031.273-1.425.455-.697.758-.909c.334-.212.698-.303 1.122-.303s.789.091 1.122.303.577.515.759.909.272.879.272 1.425-.09 1.03-.272 1.424a2.26 2.26 0 0 1-.759.909c-.333.212-.697.303-1.122.303-.424.031-.788-.091-1.122-.303zm2.002-.97c.212-.303.333-.757.333-1.363s-.121-1.061-.333-1.364-.516-.455-.88-.455-.667.152-.879.455-.334.757-.334 1.364.122 1.06.334 1.363.516.455.879.455.668-.152.88-.455z"/><path opacity=".389" d="M699.238 162.051a1.74 1.74 0 0 1-.636-.758c-.152-.333-.243-.727-.243-1.182a2.83 2.83 0 0 1 .243-1.182 1.74 1.74 0 0 1 .636-.757c.273-.182.576-.243.91-.243a1.85 1.85 0 0 1 .91.243c.273.181.485.424.637.757s.242.728.242 1.182-.091.849-.242 1.182a1.75 1.75 0 0 1-.637.758c-.273.182-.576.242-.91.242-.364.031-.667-.06-.91-.242zm1.608-.788c.182-.243.272-.636.272-1.121s-.09-.879-.272-1.122-.425-.363-.728-.363-.546.121-.698.363c-.182.243-.273.637-.273 1.122s.091.878.273 1.121.425.364.698.364c.303 0 .546-.122.728-.364z"/><path opacity=".677" d="M719.405 161.627c-.212-.122-.364-.334-.485-.576s-.182-.546-.182-.909.06-.667.182-.91.273-.454.485-.576.455-.212.697-.212c.273 0 .486.061.698.212.212.122.364.334.485.576s.182.546.182.91-.061.666-.182.909-.273.454-.485.576-.455.212-.698.212c-.272 0-.485-.061-.697-.212zm1.274-.607c.121-.181.212-.485.212-.878s-.061-.667-.212-.879a.68.68 0 0 0-.546-.303c-.243 0-.425.09-.546.303-.121.181-.212.485-.212.879s.06.666.212.878c.121.182.334.303.546.303a.83.83 0 0 0 .546-.303z"/><path opacity=".99" d="M740.542 159.021v2.273h-.424v-1.91h-.486v-.363h.91z"/><use href="#k" opacity=".184"/><path opacity=".725" d="M780.087 160.021v.242h-.03v-.212h-.061v-.03h.091z"/><path opacity=".891" d="M20.822 180.417c-.03-.03-.091-.06-.091-.121-.03-.061-.03-.121-.03-.182s0-.151.03-.182a.42.42 0 0 1 .091-.121c.03-.03.091-.03.152-.03s.121 0 .152.03.091.061.091.121.03.122.03.182 0 .152-.03.182c-.03.061-.061.091-.091.121s-.091.031-.152.031c-.061.03-.091 0-.152-.031zm.273-.121c.03-.03.03-.091.03-.182s0-.151-.03-.182-.061-.06-.121-.06-.091.03-.121.06-.03.091-.03.182 0 .152.03.182.061.061.121.061.091-.031.121-.061z"/><path opacity=".991" d="M41.322 179.205v1.788h-.334v-1.516h-.394v-.272h.728z"/><path opacity=".399" d="M60.306 181.417c-.182-.121-.334-.303-.425-.515s-.152-.485-.152-.788.061-.576.152-.788.243-.394.425-.515.394-.182.607-.182c.243 0 .425.061.637.182.182.121.334.303.425.515s.152.485.152.788-.061.576-.152.788-.243.394-.425.515-.394.182-.637.182c-.212 0-.425-.061-.607-.182zm1.122-.545c.121-.182.182-.425.182-.758s-.061-.606-.182-.758c-.121-.182-.273-.242-.485-.242a.59.59 0 0 0-.485.242c-.121.182-.182.425-.182.758s.061.606.182.758a.59.59 0 0 0 .485.242c.182 0 .364-.061.485-.242z"/><path opacity=".102" d="M81.656 178.174v3.849h-.728v-3.243h-.819v-.606h1.547z"/><path opacity=".743" d="M99.821 182.296c-.303-.182-.546-.485-.728-.848s-.273-.819-.273-1.334.091-.97.273-1.333.425-.667.728-.849.667-.303 1.031-.303c.394 0 .727.091 1.031.303.303.182.546.485.728.849s.272.818.272 1.333-.091.97-.272 1.334-.425.666-.728.848-.667.303-1.031.303-.698-.091-1.031-.303zm1.88-.909c.212-.273.303-.727.303-1.273 0-.576-.091-1-.303-1.273s-.485-.424-.819-.424-.607.151-.819.424-.303.728-.303 1.273c0 .576.091 1 .303 1.273s.485.424.819.424a.93.93 0 0 0 .819-.424z"/><path opacity=".706" d="M119.623 182.69c-.364-.242-.637-.576-.849-1-.212-.455-.303-.97-.303-1.576s.091-1.121.303-1.576.485-.788.849-1c.364-.242.758-.333 1.213-.333s.88.121 1.243.333c.364.242.637.576.85 1 .212.455.303.97.303 1.576s-.091 1.121-.303 1.576-.486.788-.85 1c-.363.243-.758.334-1.243.334a1.89 1.89 0 0 1-1.213-.334zm2.184-1.061c.242-.333.363-.848.363-1.515s-.121-1.182-.363-1.515-.546-.516-.971-.516c-.394 0-.728.182-.97.516s-.364.848-.364 1.515.121 1.182.364 1.515.546.516.97.516c.425-.031.758-.182.971-.516z"/><use href="#e" x="-479.389" y="39.914" opacity=".723"/><path opacity=".678" d="M162.291 176.386v7.425h-1.395v-6.273h-1.577v-1.152h2.972z"/><path opacity=".136" d="M182.397 176.022v8.153h-1.516v-6.88h-1.729v-1.273h3.245z"/><path opacity=".409" d="M202.503 175.689v8.85h-1.637v-7.456h-1.881v-1.364h3.518v-.03z"/><path opacity=".635" d="M222.639 175.325v9.547h-1.789v-8.062h-2.032v-1.485h3.821z"/><path opacity=".621" d="M238.53 184.69c-.636-.394-1.122-1-1.516-1.788-.364-.788-.546-1.727-.546-2.788 0-1.091.182-2 .546-2.788s.88-1.394 1.516-1.788c.637-.425 1.365-.606 2.154-.606.818 0 1.546.212 2.183.606s1.152 1 1.516 1.788.546 1.727.546 2.788c0 1.091-.182 2-.546 2.788s-.879 1.394-1.516 1.788c-.637.425-1.365.607-2.183.607a4.05 4.05 0 0 1-2.154-.607zm3.882-1.909c.425-.606.637-1.485.637-2.667s-.212-2.061-.637-2.667-1.001-.909-1.698-.909-1.274.303-1.698.909-.637 1.485-.637 2.667.212 2.061.637 2.667.97.909 1.698.909c.697-.03 1.274-.303 1.698-.909z"/><path opacity=".999" d="M258.394 184.933c-.667-.425-1.183-1.061-1.577-1.879s-.576-1.819-.576-2.94.182-2.122.576-2.94.91-1.455 1.577-1.879 1.425-.636 2.274-.636 1.608.212 2.305.636c.667.424 1.213 1.061 1.577 1.879.394.818.576 1.819.576 2.94s-.182 2.121-.576 2.94-.91 1.454-1.577 1.879-1.425.636-2.305.636c-.849 0-1.607-.212-2.274-.636zm4.094-2.001c.455-.636.667-1.576.667-2.818s-.212-2.182-.667-2.819-1.031-.939-1.789-.939-1.335.303-1.79.939-.667 1.576-.667 2.819.212 2.182.667 2.818a2.06 2.06 0 0 0 1.79.94c.727 0 1.334-.333 1.789-.94z"/><path opacity=".967" d="M282.867 174.538v11.122h-2.063v-9.395h-2.365v-1.727h4.428z"/><path opacity=".69" d="M302.912 174.355v11.517h-2.153v-9.728h-2.426v-1.789h4.579z"/><path opacity=".114" d="M318.044 185.508c-.758-.485-1.334-1.182-1.759-2.121-.424-.909-.637-2.031-.637-3.304s.213-2.363.637-3.303c.425-.909 1.031-1.637 1.759-2.121.758-.485 1.607-.728 2.548-.728s1.819.243 2.547.728c.758.484 1.334 1.181 1.789 2.121.425.909.637 2.031.637 3.303s-.212 2.364-.637 3.304c-.424.909-1.031 1.636-1.789 2.121s-1.607.728-2.547.728-1.79-.243-2.548-.728zm4.579-2.242c.486-.697.728-1.758.728-3.152s-.242-2.455-.728-3.152-1.152-1.061-2.001-1.061-1.516.364-2.002 1.061-.727 1.758-.727 3.152.242 2.455.727 3.152a2.32 2.32 0 0 0 2.002 1.06 2.47 2.47 0 0 0 2.001-1.06z"/><path opacity=".901" d="M337.968 185.599c-.758-.485-1.365-1.212-1.789-2.151s-.667-2.061-.667-3.364.212-2.425.667-3.365 1.031-1.666 1.789-2.151 1.638-.728 2.608-.728 1.85.243 2.608.728 1.365 1.212 1.82 2.151c.424.94.667 2.061.667 3.365s-.212 2.424-.667 3.364c-.425.939-1.031 1.666-1.82 2.151-.758.485-1.637.728-2.608.728-.97.03-1.85-.212-2.608-.728zm4.67-2.273c.516-.727.758-1.788.758-3.212s-.242-2.485-.758-3.213-1.182-1.06-2.062-1.06c-.849 0-1.546.363-2.032 1.06-.515.728-.758 1.788-.758 3.213s.243 2.485.758 3.212 1.183 1.061 2.032 1.061 1.547-.364 2.062-1.061z"/><path opacity=".833" d="M363.017 173.931v12.365h-2.305v-10.455h-2.608v-1.94h4.913v.03z"/><use href="#l" opacity=".643"/><path opacity=".743" d="M397.801 185.781c-.789-.515-1.395-1.242-1.85-2.212s-.667-2.121-.667-3.455.212-2.485.667-3.455 1.061-1.697 1.85-2.212 1.668-.758 2.699-.758c1 0 1.91.242 2.699.758s1.425 1.242 1.88 2.212.667 2.122.667 3.455-.212 2.485-.667 3.455-1.092 1.697-1.88 2.212-1.699.758-2.699.758-1.911-.242-2.699-.758zm4.821-2.364c.516-.727.789-1.848.789-3.303s-.273-2.576-.789-3.303-1.213-1.122-2.122-1.122c-.88 0-1.577.364-2.093 1.122-.515.727-.788 1.848-.788 3.303s.273 2.576.788 3.303 1.213 1.122 2.093 1.122 1.607-.394 2.122-1.122z"/><use href="#l" x="39.939" opacity=".859"/><path opacity=".3" d="M437.801 185.721c-.789-.516-1.395-1.243-1.85-2.182-.455-.97-.667-2.092-.667-3.425s.212-2.455.667-3.425 1.061-1.697 1.85-2.182c.788-.515 1.668-.757 2.638-.757 1.001 0 1.88.242 2.669.757s1.395 1.243 1.85 2.182c.454.97.667 2.091.667 3.425s-.213 2.455-.667 3.425-1.062 1.697-1.85 2.182c-.789.515-1.668.757-2.669.757-.97 0-1.88-.272-2.638-.757zm4.731-2.334c.515-.727.758-1.818.758-3.273s-.243-2.546-.758-3.273a2.43 2.43 0 0 0-2.093-1.091 2.43 2.43 0 0 0-2.092 1.091c-.516.727-.759 1.818-.759 3.273s.243 2.546.759 3.273a2.43 2.43 0 0 0 2.092 1.091c.88 0 1.577-.364 2.093-1.091z"/><path opacity=".833" d="M457.816 185.599c-.758-.485-1.365-1.212-1.789-2.151s-.668-2.061-.668-3.364.213-2.425.668-3.365c.424-.939 1.031-1.666 1.789-2.151s1.637-.728 2.608-.728 1.85.243 2.608.728 1.364 1.212 1.819 2.151c.425.94.667 2.061.667 3.365s-.212 2.424-.667 3.364c-.424.939-1.031 1.666-1.819 2.151-.758.485-1.638.728-2.608.728-.971.03-1.85-.212-2.608-.728zm4.67-2.273c.515-.727.758-1.788.758-3.212s-.243-2.485-.758-3.213-1.183-1.06-2.062-1.06a2.37 2.37 0 0 0-2.032 1.06c-.516.728-.758 1.788-.758 3.213s.242 2.485.758 3.212 1.183 1.061 2.032 1.061c.879 0 1.546-.364 2.062-1.061z"/><path opacity=".499" d="M482.774 174.144v11.91h-2.214v-10.031h-2.517v-1.849h4.731v-.03z"/><path opacity=".226" d="M497.876 185.357c-.728-.455-1.304-1.152-1.729-2.061s-.637-1.97-.637-3.212.213-2.304.637-3.213 1.001-1.576 1.729-2.061c.727-.454 1.546-.697 2.486-.697s1.759.243 2.487.697 1.304 1.152 1.729 2.061.636 1.97.636 3.213-.212 2.303-.636 3.212-1.001 1.576-1.729 2.061c-.728.455-1.577.697-2.487.697s-1.759-.212-2.486-.697zm4.458-2.182c.485-.697.727-1.697.727-3.061s-.242-2.364-.727-3.061-1.123-1.03-1.972-1.03c-.818 0-1.455.333-1.94 1.03s-.728 1.697-.728 3.061.242 2.364.728 3.061 1.122 1.03 1.94 1.03c.849 0 1.486-.363 1.972-1.03z"/><path opacity=".174" d="M522.591 174.507v11.184h-2.092v-9.456h-2.366v-1.758h4.458v.03z"/><path opacity=".646" d="M538.027 184.963c-.667-.424-1.213-1.061-1.607-1.909-.394-.819-.576-1.819-.576-2.97s.182-2.122.576-2.97c.394-.819.91-1.455 1.607-1.91.667-.424 1.456-.636 2.305-.636s1.638.212 2.305.636 1.213 1.061 1.607 1.91c.394.818.576 1.818.576 2.97s-.182 2.121-.576 2.97c-.394.818-.91 1.455-1.607 1.909-.667.424-1.456.637-2.305.637-.88.03-1.638-.182-2.305-.637zm4.124-2.03c.455-.637.668-1.576.668-2.849 0-1.243-.213-2.213-.668-2.849a2.11 2.11 0 0 0-1.819-.94c-.758 0-1.365.303-1.789.94-.455.636-.667 1.576-.667 2.849 0 1.242.212 2.212.667 2.849s1.031.939 1.789.939c.758.03 1.365-.303 1.819-.939z"/><path opacity=".551" d="M558.133 184.721c-.637-.425-1.152-1-1.516-1.788s-.546-1.728-.546-2.819.182-2.03.546-2.818.879-1.395 1.516-1.788c.637-.425 1.365-.607 2.183-.607s1.547.213 2.184.607c.637.424 1.152 1 1.516 1.788s.546 1.727.546 2.818-.182 2.031-.546 2.819-.879 1.394-1.516 1.788c-.637.424-1.365.606-2.184.606s-1.546-.182-2.183-.606zm3.882-1.91c.424-.606.637-1.485.637-2.697 0-1.182-.213-2.091-.637-2.697s-1.001-.909-1.729-.909-1.274.303-1.698.909-.637 1.485-.637 2.697c0 1.182.212 2.091.637 2.697s1.001.91 1.698.91c.728-.031 1.304-.334 1.729-.91z"/><path opacity=".541" d="M578.239 184.448c-.607-.394-1.062-.94-1.426-1.697-.333-.728-.515-1.607-.515-2.637s.182-1.91.515-2.637.819-1.303 1.426-1.697 1.273-.576 2.062-.576c.758 0 1.455.182 2.062.576s1.092.939 1.425 1.697c.334.727.516 1.637.516 2.637 0 1.03-.182 1.909-.516 2.637s-.818 1.303-1.425 1.697-1.304.576-2.062.576c-.789 0-1.486-.213-2.062-.576zm3.669-1.819c.394-.576.607-1.394.607-2.515s-.213-1.97-.607-2.516c-.394-.575-.94-.848-1.607-.848s-1.213.273-1.607.848-.607 1.394-.607 2.516.212 1.97.607 2.515c.394.576.94.849 1.607.849s1.183-.273 1.607-.849z"/><path opacity=".449" d="M602.045 175.659v8.91h-1.668v-7.546h-1.88v-1.395h3.548v.031z"/><path opacity=".864" d="M621.878 175.992v8.213h-1.517v-6.94h-1.728v-1.273h3.245z"/><path opacity=".83" d="M638.617 183.478c-.455-.303-.849-.727-1.091-1.303-.273-.576-.395-1.273-.395-2.061s.122-1.485.395-2.061.636-1.03 1.091-1.303c.455-.303 1.001-.455 1.608-.455s1.122.152 1.607.455.849.727 1.122 1.303.394 1.273.394 2.061-.121 1.485-.394 2.061-.637 1.03-1.122 1.303c-.485.303-1.001.455-1.607.455s-1.153-.152-1.608-.455zm2.851-1.394c.303-.424.455-1.091.455-1.97s-.152-1.515-.455-1.97a1.5 1.5 0 0 0-1.274-.667c-.515 0-.94.213-1.243.667-.303.424-.455 1.091-.455 1.97s.152 1.515.455 1.97c.303.424.728.667 1.243.667.546-.031.971-.243 1.274-.667z"/><path opacity=".213" d="M658.754 183.115c-.425-.273-.758-.667-1.001-1.182s-.364-1.122-.364-1.849c0-.697.121-1.334.364-1.849s.576-.909 1.001-1.182.879-.394 1.425-.394 1.001.121 1.425.394.759.667 1.001 1.182.364 1.121.364 1.849c0 .697-.121 1.333-.364 1.849s-.576.909-1.001 1.182-.909.394-1.425.394c-.546.03-1.001-.122-1.425-.394zm2.547-1.243c.273-.394.425-.97.425-1.758s-.152-1.364-.425-1.758-.637-.575-1.122-.575c-.455 0-.849.181-1.122.575s-.424.97-.424 1.758.151 1.364.424 1.758.637.576 1.122.576.849-.182 1.122-.576z"/><use href="#m" opacity=".543"/><path opacity=".103" d="M699.087 182.357c-.304-.212-.546-.485-.728-.879s-.273-.849-.273-1.364.091-.97.273-1.364a2.11 2.11 0 0 1 .728-.879c.303-.212.667-.303 1.061-.303s.758.091 1.062.303.545.485.727.879.273.849.273 1.364-.091.97-.273 1.364-.424.667-.727.879-.668.303-1.062.303c-.424-.03-.758-.121-1.061-.303zm1.88-.94c.212-.303.303-.727.303-1.303s-.091-1-.303-1.303-.485-.424-.849-.424c-.334 0-.637.151-.819.424-.212.303-.303.727-.303 1.303s.091 1 .303 1.303a.93.93 0 0 0 .819.425 1.02 1.02 0 0 0 .849-.425z"/><path opacity=".572" d="M720.891 178.144v3.91h-.728v-3.304h-.819v-.606h1.547z"/><path opacity=".154" d="M739.45 181.447c-.182-.121-.333-.303-.455-.515-.121-.242-.151-.515-.151-.818s.06-.606.151-.818c.122-.243.243-.394.455-.516.182-.121.394-.181.637-.181s.455.06.637.181.334.304.455.516c.121.242.151.515.151.818s-.06.606-.151.818c-.121.243-.243.394-.455.515-.182.122-.394.182-.637.182s-.455-.06-.637-.182zm1.122-.545c.122-.182.182-.424.182-.788 0-.333-.06-.606-.182-.788s-.303-.273-.515-.273-.364.091-.485.273-.182.424-.182.788.06.606.182.788.303.273.485.273c.242-.031.394-.091.515-.273z"/><path opacity=".382" d="M759.647 180.962c-.121-.09-.212-.181-.273-.333s-.091-.333-.091-.515c0-.212.031-.364.091-.515s.152-.243.273-.334.243-.121.394-.121a.61.61 0 0 1 .395.121c.121.091.212.182.272.334s.091.333.091.515c0 .212-.03.364-.091.515s-.151.243-.272.333-.243.122-.395.122c-.121 0-.273-.061-.394-.122zm.728-.363c.091-.121.121-.273.121-.485s-.03-.394-.121-.485c-.091-.121-.182-.152-.303-.152s-.243.061-.304.152c-.091.121-.121.273-.121.485s.03.394.121.485c.091.121.182.151.304.151.121.031.212-.03.303-.151z"/><path opacity=".259" d="M779.874 180.447c-.06-.03-.091-.091-.121-.151s-.03-.122-.03-.213 0-.151.03-.212.061-.121.121-.151.091-.061.182-.061.122.03.182.061.091.091.121.151.031.122.031.212 0 .152-.031.213-.06.121-.121.151-.091.061-.182.061-.151 0-.182-.061zm.304-.121c.03-.061.06-.121.06-.212s-.03-.152-.06-.212-.091-.061-.122-.061c-.06 0-.091.03-.121.061-.03.06-.061.121-.061.212s.031.151.061.212.091.061.121.061.091-.031.122-.061z"/><use href="#n" opacity=".671"/><path opacity=".408" d="M20.731 200.601c-.061-.06-.121-.121-.182-.212a1.09 1.09 0 0 1-.061-.333c0-.121.03-.243.061-.334s.091-.151.182-.212c.061-.06.152-.06.243-.06s.182.03.243.06c.061.061.121.122.182.212.03.091.061.213.061.334a1.09 1.09 0 0 1-.061.333c-.03.091-.091.152-.182.212-.061.061-.152.061-.243.061s-.182 0-.243-.061zm.455-.212c.061-.06.061-.182.061-.303 0-.151-.03-.242-.061-.303-.061-.061-.121-.091-.212-.091s-.152.03-.212.091-.061.182-.061.303c0 .152.03.243.061.303.061.061.121.091.212.091s.152-.03.212-.091z"/><path opacity=".289" d="M41.413 198.935v2.273h-.425v-1.91h-.485v-.363h.91z"/><use href="#J" x="-339.557" y="159.717" opacity=".364"/><path opacity=".588" d="M79.987 202.026c-.273-.182-.485-.425-.637-.758s-.243-.727-.243-1.182.091-.849.243-1.182.364-.576.637-.758.576-.272.91-.272.667.09.94.272.485.425.637.758.243.727.243 1.182-.091.849-.243 1.182-.364.576-.637.758-.576.272-.94.272a1.61 1.61 0 0 1-.91-.272zm1.638-.819c.182-.242.273-.636.273-1.151s-.091-.879-.273-1.152c-.182-.242-.424-.394-.728-.394a.82.82 0 0 0-.728.394c-.182.242-.273.636-.273 1.152s.091.879.273 1.151c.182.243.425.394.728.394s.546-.151.728-.394z"/><path opacity=".693" d="M99.729 202.48a2.03 2.03 0 0 1-.788-.939c-.182-.424-.303-.909-.303-1.485s.091-1.061.303-1.485c.182-.425.455-.728.788-.94s.728-.333 1.153-.333.819.121 1.152.333.607.515.789.94.303.909.303 1.485-.091 1.061-.303 1.485c-.182.424-.455.727-.789.939s-.728.334-1.152.334a2.14 2.14 0 0 1-1.153-.334zm2.063-1c.212-.303.333-.788.333-1.394 0-.636-.121-1.091-.333-1.394a1.07 1.07 0 0 0-.91-.485.99.99 0 0 0-.88.485c-.212.303-.333.788-.333 1.394 0 .637.121 1.091.333 1.394s.516.485.88.485c.364-.03.667-.182.91-.485z"/><path opacity=".761" d="M119.502 202.905c-.395-.243-.698-.637-.94-1.122-.213-.485-.334-1.06-.334-1.727s.121-1.243.334-1.728a2.63 2.63 0 0 1 .94-1.121c.394-.242.849-.394 1.334-.394.516 0 .94.121 1.334.394.395.242.698.636.94 1.121.213.485.334 1.061.334 1.728s-.121 1.242-.334 1.727-.545.849-.94 1.122c-.394.242-.849.394-1.334.394s-.94-.122-1.334-.394zm2.395-1.182c.273-.364.395-.91.395-1.667 0-.728-.122-1.273-.395-1.667a1.24 1.24 0 0 0-1.061-.546 1.24 1.24 0 0 0-1.061.546c-.273.364-.395.909-.395 1.667 0 .727.122 1.273.395 1.667.273.363.606.545 1.061.545s.819-.182 1.061-.545z"/><path opacity=".967" d="M139.305 203.299c-.455-.303-.789-.697-1.062-1.273-.273-.546-.394-1.213-.394-1.97s.121-1.425.394-1.97.607-.97 1.062-1.273.97-.424 1.516-.424a2.96 2.96 0 0 1 1.547.424 2.77 2.77 0 0 1 1.061 1.273c.273.545.394 1.212.394 1.97s-.121 1.424-.394 1.97c-.243.545-.606.97-1.061 1.273s-.971.424-1.547.424-1.061-.121-1.516-.424zm2.729-1.334c.303-.424.455-1.061.455-1.879 0-.849-.152-1.455-.455-1.879s-.697-.636-1.213-.636a1.32 1.32 0 0 0-1.183.636c-.303.424-.455 1.061-.455 1.879 0 .849.152 1.455.455 1.879s.698.637 1.183.637c.516-.031.91-.243 1.213-.637z"/><path opacity=".151" d="M159.107 203.662c-.485-.333-.879-.788-1.182-1.394-.273-.606-.425-1.333-.425-2.182s.152-1.576.425-2.182.667-1.091 1.182-1.394c.485-.334 1.062-.485 1.699-.485s1.213.151 1.698.485c.515.333.91.788 1.182 1.394s.425 1.333.425 2.182-.152 1.576-.425 2.182-.667 1.091-1.182 1.394a3 3 0 0 1-1.698.485c-.637 0-1.214-.182-1.699-.485zm3.033-1.515c.333-.455.485-1.152.485-2.091s-.152-1.637-.485-2.091-.789-.698-1.334-.698-1.001.243-1.335.698-.485 1.151-.485 2.091.152 1.636.485 2.091.758.697 1.335.697c.545.03 1-.212 1.334-.697z"/><path opacity=".212" d="M178.91 204.026c-.546-.364-.971-.879-1.304-1.546-.303-.667-.485-1.485-.485-2.394 0-.94.151-1.728.485-2.394.303-.667.758-1.182 1.304-1.546s1.183-.515 1.85-.515c.697 0 1.304.182 1.88.515.546.364.97.879 1.304 1.546.303.666.485 1.485.485 2.394 0 .939-.152 1.727-.485 2.394-.303.667-.758 1.182-1.304 1.546s-1.183.515-1.88.515c-.667 0-1.304-.182-1.85-.515zm3.336-1.667c.364-.515.546-1.273.546-2.303s-.182-1.788-.546-2.304-.849-.757-1.486-.757a1.68 1.68 0 0 0-1.456.757c-.364.516-.546 1.273-.546 2.304s.182 1.788.546 2.303.849.758 1.456.758c.637.03 1.122-.243 1.486-.758z"/><path opacity=".999" d="M198.743 204.329c-.576-.394-1.061-.94-1.395-1.667s-.515-1.606-.515-2.606.181-1.879.515-2.607.819-1.273 1.395-1.667 1.274-.575 2.002-.575c.758 0 1.425.181 2.031.575s1.062.94 1.395 1.667.516 1.607.516 2.607-.182 1.879-.516 2.606a4 4 0 0 1-1.395 1.667c-.606.394-1.273.576-2.031.576s-1.426-.182-2.002-.576zm3.609-1.788c.394-.546.576-1.394.576-2.485s-.182-1.94-.576-2.486-.91-.818-1.577-.818-1.183.273-1.577.818-.576 1.395-.576 2.486.182 1.939.576 2.485.91.818 1.577.818c.637.03 1.183-.242 1.577-.818z"/><path opacity=".239" d="M218.576 204.602c-.637-.394-1.122-1-1.486-1.788s-.546-1.697-.546-2.758.182-2 .546-2.758c.364-.788.849-1.364 1.486-1.788a3.97 3.97 0 0 1 2.153-.606c.788 0 1.516.212 2.153.606s1.122 1 1.486 1.788.546 1.697.546 2.758-.182 2-.546 2.758c-.364.788-.849 1.364-1.486 1.788-.637.394-1.365.606-2.153.606a3.52 3.52 0 0 1-2.153-.606zm3.851-1.879c.425-.606.637-1.485.637-2.637 0-1.182-.212-2.061-.637-2.636a1.92 1.92 0 0 0-1.698-.879c-.698 0-1.274.303-1.698.879s-.637 1.485-.637 2.636c0 1.182.212 2.061.637 2.637a1.99 1.99 0 0 0 1.698.879 2.03 2.03 0 0 0 1.698-.879z"/><path opacity=".818" d="M238.409 204.905c-.667-.424-1.183-1.061-1.577-1.879s-.576-1.819-.576-2.94.182-2.121.576-2.94.91-1.454 1.577-1.879 1.425-.636 2.274-.636 1.608.212 2.305.636c.667.425 1.213 1.061 1.577 1.879.394.819.576 1.819.576 2.94s-.182 2.122-.576 2.94-.91 1.455-1.577 1.879-1.425.636-2.305.636c-.849 0-1.607-.212-2.274-.636zm4.094-2.031c.455-.636.667-1.576.667-2.818s-.212-2.182-.667-2.819-1.031-.939-1.789-.939a2.06 2.06 0 0 0-1.789.939c-.455.637-.668 1.576-.668 2.819s.213 2.182.668 2.818 1.031.94 1.789.94a2.06 2.06 0 0 0 1.789-.94z"/><path opacity=".646" d="M262.912 194.48v11.183h-2.092v-9.456h-2.366v-1.758h4.458v.031z"/><path opacity=".869" d="M282.988 194.237v11.668h-2.153v-9.85h-2.457v-1.818h4.61z"/><path opacity=".332" d="M303.033 193.995v12.122h-2.244v-10.243h-2.578v-1.879h4.822z"/><path opacity=".518" d="M317.923 205.723c-.789-.515-1.395-1.242-1.85-2.212s-.667-2.122-.667-3.455.212-2.485.667-3.455 1.061-1.697 1.85-2.212 1.668-.758 2.668-.758 1.881.242 2.669.758 1.395 1.242 1.85 2.212.667 2.121.667 3.455-.212 2.485-.667 3.455-1.061 1.697-1.85 2.212-1.668.758-2.669.758-1.88-.273-2.668-.758zm4.791-2.364c.516-.727.789-1.818.789-3.303 0-1.455-.273-2.546-.789-3.304-.515-.727-1.213-1.091-2.123-1.091-.879 0-1.576.364-2.092 1.091s-.788 1.819-.788 3.304c0 1.455.242 2.546.788 3.303a2.43 2.43 0 0 0 2.092 1.091c.91 0 1.608-.363 2.123-1.091z"/><path opacity=".486" d="M337.847 205.844c-.788-.515-1.425-1.273-1.91-2.273-.455-1-.698-2.152-.698-3.515s.243-2.546.698-3.516c.455-1 1.091-1.758 1.91-2.273.789-.515 1.729-.788 2.73-.788a5.06 5.06 0 0 1 2.759.788c.819.515 1.456 1.273 1.911 2.273s.697 2.152.697 3.516-.242 2.545-.697 3.515c-.455 1-1.092 1.758-1.911 2.273a5.06 5.06 0 0 1-2.759.788c-1.031 0-1.941-.273-2.73-.788zm4.883-2.394c.515-.758.788-1.879.788-3.364s-.273-2.606-.788-3.364-1.244-1.122-2.153-1.122-1.608.364-2.154 1.122c-.515.758-.788 1.879-.788 3.364s.273 2.606.788 3.364 1.244 1.121 2.154 1.121 1.637-.363 2.153-1.121z"/><path opacity=".659" d="M357.771 205.966c-.819-.516-1.455-1.304-1.941-2.304s-.697-2.212-.697-3.606.242-2.576.697-3.607c.486-1 1.122-1.788 1.941-2.303s1.759-.788 2.79-.788 1.971.273 2.79.788 1.486 1.303 1.941 2.303c.485 1 .697 2.213.697 3.607s-.242 2.576-.697 3.606c-.485 1-1.122 1.788-1.941 2.304s-1.759.788-2.79.788c-1.061 0-1.971-.273-2.79-.788zm4.974-2.455c.545-.758.818-1.91.818-3.425s-.273-2.667-.818-3.425-1.274-1.151-2.214-1.151c-.91 0-1.638.394-2.184 1.151s-.818 1.91-.818 3.425.272 2.667.818 3.425 1.274 1.151 2.184 1.151c.94 0 1.668-.394 2.214-1.151z"/><path opacity=".673" d="M377.725 205.996c-.819-.515-1.455-1.303-1.941-2.304s-.697-2.212-.697-3.606.242-2.606.697-3.607c.486-1 1.122-1.788 1.941-2.303s1.759-.788 2.79-.788c1.062 0 1.971.273 2.82.788.819.515 1.486 1.303 1.941 2.303.486 1.001.698 2.213.698 3.607s-.243 2.606-.698 3.606c-.485 1.001-1.122 1.789-1.941 2.304s-1.758.788-2.82.788c-1.031 0-1.971-.243-2.79-.788zm5.004-2.485c.546-.758.819-1.91.819-3.455s-.273-2.698-.819-3.455-1.274-1.152-2.214-1.152c-.91 0-1.668.394-2.183 1.152-.546.757-.819 1.909-.819 3.455s.273 2.697.819 3.455 1.273 1.151 2.183 1.151c.94.031 1.668-.363 2.214-1.151z"/><path opacity=".953" d="M397.679 206.026c-.818-.545-1.486-1.303-1.94-2.333-.486-1.031-.728-2.243-.728-3.637s.242-2.607.728-3.637 1.122-1.788 1.94-2.334 1.759-.788 2.821-.788 2.001.273 2.82.788c.819.546 1.486 1.304 1.971 2.334s.728 2.243.728 3.637-.243 2.606-.728 3.637-1.122 1.788-1.971 2.333c-.819.546-1.789.788-2.82.788-1.062.031-2.002-.242-2.821-.788zm5.034-2.485c.546-.788.819-1.94.819-3.485s-.273-2.698-.819-3.486-1.273-1.151-2.213-1.151-1.668.394-2.214 1.151c-.546.788-.819 1.94-.819 3.486s.273 2.697.819 3.485 1.274 1.152 2.214 1.152c.94.03 1.668-.364 2.213-1.152z"/><path opacity=".812" d="M423.092 193.54v13.062h-2.426v-11.031h-2.759v-2.031h5.185z"/><path opacity=".609" d="M443.047 193.57v13.002h-2.426v-10.971h-2.76v-2.031h5.186z"/><path opacity=".332" d="M462.971 193.691v12.76h-2.366v-10.759h-2.699v-2.001h5.065z"/><path opacity=".765" d="M477.709 205.754c-.788-.516-1.395-1.243-1.849-2.213s-.668-2.121-.668-3.455.213-2.485.668-3.455 1.061-1.697 1.849-2.212 1.668-.758 2.699-.758c1.001 0 1.911.243 2.699.758s1.426 1.242 1.881 2.212.667 2.122.667 3.455-.213 2.485-.667 3.455-1.092 1.697-1.881 2.213-1.698.757-2.699.757-1.91-.242-2.699-.757zm4.822-2.364c.516-.728.789-1.849.789-3.304s-.273-2.576-.789-3.303-1.213-1.122-2.123-1.122a2.39 2.39 0 0 0-2.092 1.122c-.516.727-.789 1.848-.789 3.303s.273 2.576.789 3.304 1.213 1.121 2.092 1.121c.88-.03 1.608-.394 2.123-1.121z"/><path opacity=".782" d="M502.789 193.995v12.122h-2.245v-10.243h-2.577v-1.879h4.822z"/><path opacity=".881" d="M522.682 194.207v11.728h-2.183v-9.91h-2.487v-1.818h4.67z"/><path opacity=".544" d="M537.936 205.147c-.697-.454-1.274-1.121-1.668-1.97-.394-.879-.606-1.909-.606-3.091s.212-2.212.606-3.091.971-1.516 1.668-1.97 1.516-.667 2.396-.667c.91 0 1.698.212 2.395.667s1.274 1.121 1.668 1.97c.395.879.607 1.909.607 3.091s-.212 2.212-.607 3.091-.97 1.516-1.668 1.97-1.516.667-2.395.667c-.91 0-1.698-.212-2.396-.667zm4.276-2.121c.455-.667.697-1.637.697-2.97 0-1.304-.242-2.304-.697-2.97a2.18 2.18 0 0 0-1.911-1.001c-.788 0-1.425.334-1.88 1.001s-.697 1.636-.697 2.97c0 1.303.242 2.303.697 2.97s1.092 1 1.88 1c.819 0 1.456-.334 1.911-1z"/><path opacity=".664" d="M562.439 194.722v10.728h-2.001v-9.061h-2.275v-1.667h4.276z"/><path opacity=".236" d="M582.303 195.025v10.092h-1.88v-8.516H578.3v-1.576h4.003z"/><use href="#V" x="219.709" y="79.858" opacity=".353"/><path opacity=".724" d="M621.968 195.722v8.698h-1.607v-7.335h-1.85v-1.363h3.457z"/><use href="#d" x="59.923" y="59.886" opacity=".213"/><path opacity=".279" d="M658.663 203.299c-.455-.303-.789-.697-1.062-1.273-.273-.546-.394-1.213-.394-1.97s.121-1.425.394-1.97.607-.97 1.062-1.273.97-.424 1.516-.424a2.96 2.96 0 0 1 1.547.424c.454.303.818.697 1.061 1.273.273.545.394 1.212.394 1.97s-.121 1.424-.394 1.97-.607.97-1.061 1.273-.971.424-1.547.424-1.092-.121-1.516-.424zm2.729-1.334c.303-.424.455-1.061.455-1.879 0-.849-.152-1.455-.455-1.879s-.698-.636-1.213-.636a1.32 1.32 0 0 0-1.183.636c-.303.424-.455 1.061-.455 1.879 0 .849.152 1.455.455 1.879s.698.637 1.183.637c.515-.031.91-.243 1.213-.637z"/><path opacity=".286" d="M678.799 202.905c-.394-.243-.697-.637-.94-1.122-.212-.485-.334-1.06-.334-1.727s.122-1.243.334-1.728.546-.848.94-1.121c.394-.242.849-.394 1.334-.394.516 0 .94.121 1.335.394.394.242.697.636.94 1.121.212.485.333 1.061.333 1.728s-.121 1.242-.333 1.727a2.64 2.64 0 0 1-.94 1.122c-.395.242-.849.394-1.335.394s-.94-.122-1.334-.394zm2.426-1.182c.273-.364.394-.91.394-1.667 0-.728-.121-1.273-.394-1.667a1.24 1.24 0 0 0-1.061-.546c-.455 0-.789.182-1.062.546s-.394.909-.394 1.667c0 .727.121 1.273.394 1.667.273.363.607.545 1.062.545.424 0 .788-.182 1.061-.545z"/><path opacity=".66" d="M701.21 197.358v5.425h-1.001v-4.546h-1.152v-.848h2.153v-.031z"/><use href="#o" opacity=".665"/><path opacity=".352" d="M740.754 198.358v3.455h-.637v-2.909h-.727v-.546h1.364z"/><use href="#U" x="659.19" y="79.858" opacity=".466"/><path opacity=".406" d="M779.753 200.632c-.091-.061-.151-.122-.182-.212s-.06-.213-.06-.334a1.1 1.1 0 0 1 .06-.333.43.43 0 0 1 .182-.212c.091-.061.182-.091.273-.091s.182.03.273.091.152.121.182.212a1.07 1.07 0 0 1 .061.333c0 .121-.03.243-.061.334a.43.43 0 0 1-.182.212c-.091.06-.182.091-.273.091s-.182-.031-.273-.091zm.486-.243c.06-.06.091-.182.091-.333a.55.55 0 0 0-.091-.334c-.061-.06-.122-.121-.213-.121s-.151.031-.212.121c-.061.061-.091.182-.091.334a.54.54 0 0 0 .091.333c.061.061.121.121.212.121s.182-.03.213-.121z"/><use href="#n" x="799.022" opacity=".756"/><path opacity=".638" d="M.928 220.18c-.03 0-.03-.031-.061-.061s-.03-.061-.03-.091 0-.061.03-.091c0-.03.03-.03.061-.06.03 0 .03-.031.061-.031s.061 0 .061.031c.03 0 .03.03.061.06 0 .03.03.061.03.091s0 .061-.03.091c0 .03-.03.03-.061.061-.03 0-.03.03-.061.03 0-.03-.03-.03-.061-.03zm.121-.061c0-.03.03-.061.03-.091s0-.061-.03-.091c0-.03-.03-.03-.061-.03s-.03 0-.061.03c0 .03-.03.061-.03.091s0 .061.03.091c0 .03.03.03.061.03s.061-.03.061-.03z"/><use href="#L" x="-159.816" y="159.717" opacity=".158"/><path opacity=".681" d="M41.444 218.785v2.516h-.455v-2.122h-.516v-.394h.971z"/><path opacity=".739" d="M61.641 218.24v3.606h-.667v-3.03h-.758v-.576h1.425z"/><path opacity=".241" d="M79.897 222.119c-.303-.182-.516-.454-.697-.818s-.243-.788-.243-1.273.091-.909.243-1.273.394-.636.697-.818.607-.273 1.001-.273c.364 0 .697.091 1.001.273s.516.454.698.818.243.788.243 1.273-.091.909-.243 1.273c-.182.364-.394.636-.698.818s-.637.273-1.001.273c-.364.03-.698-.091-1.001-.273zm1.789-.879c.182-.272.273-.666.273-1.212s-.091-.94-.273-1.212-.455-.425-.788-.425-.576.122-.788.425c-.182.272-.273.666-.273 1.212s.091.94.273 1.212.455.425.788.425.606-.152.788-.425z"/><path opacity=".484" d="M99.669 222.544c-.364-.213-.637-.546-.819-.97-.212-.425-.303-.94-.303-1.546s.091-1.091.303-1.546c.212-.424.485-.757.819-.969.364-.213.758-.334 1.183-.334.455 0 .849.121 1.182.334.364.212.637.545.819.969.212.425.303.94.303 1.546s-.091 1.091-.303 1.546c-.212.424-.485.757-.819.97-.364.212-.758.333-1.182.333s-.819-.091-1.183-.333zm2.153-1.031c.243-.333.334-.818.334-1.455s-.122-1.151-.334-1.454c-.243-.334-.546-.485-.94-.485s-.698.151-.94.485-.334.818-.334 1.454.121 1.152.334 1.455c.242.333.546.485.94.485s.697-.182.94-.485z"/><path opacity=".689" d="M119.441 222.968c-.394-.273-.728-.637-.97-1.152s-.364-1.091-.364-1.788.121-1.303.364-1.788c.242-.515.546-.879.97-1.152.394-.272.88-.394 1.395-.394s1.001.122 1.395.394c.425.273.728.637.971 1.152s.364 1.091.364 1.788-.122 1.303-.364 1.788c-.243.515-.546.879-.971 1.152s-.879.394-1.395.394-.97-.121-1.395-.394zm2.517-1.212c.273-.394.395-.97.395-1.728s-.122-1.333-.395-1.727a1.25 1.25 0 0 0-1.091-.576 1.25 1.25 0 0 0-1.092.576c-.273.394-.394.969-.394 1.727s.121 1.334.394 1.728a1.25 1.25 0 0 0 1.092.575c.454 0 .818-.212 1.091-.575z"/><path opacity=".672" d="M142.307 216.3v7.425h-1.395v-6.273h-1.547V216.3h2.942z"/><path opacity=".861" d="M162.443 215.937v8.213h-1.516v-6.941h-1.729v-1.272h3.245z"/><path opacity=".753" d="M178.849 224.119c-.576-.363-1-.909-1.334-1.606s-.485-1.515-.485-2.485.151-1.788.485-2.485.758-1.243 1.334-1.606 1.213-.546 1.941-.546 1.365.182 1.941.546 1.031.909 1.334 1.606c.334.697.486 1.515.486 2.485s-.152 1.788-.486 2.485-.788 1.243-1.334 1.606c-.576.364-1.213.546-1.941.546s-1.395-.182-1.941-.546zm3.457-1.697c.364-.545.546-1.333.546-2.394s-.182-1.849-.546-2.364c-.363-.545-.879-.788-1.516-.788s-1.152.273-1.516.788c-.364.546-.546 1.334-.546 2.364 0 1.061.182 1.849.546 2.394s.879.788 1.516.788 1.122-.272 1.516-.788z"/><path opacity=".649" d="M198.652 224.422c-.607-.393-1.092-.969-1.456-1.727s-.515-1.637-.515-2.697c0-1.031.182-1.94.515-2.698.364-.757.819-1.333 1.456-1.727.606-.394 1.304-.576 2.092-.576s1.486.182 2.093.576 1.092.97 1.455 1.727.516 1.637.516 2.698c0 1.03-.182 1.939-.516 2.697-.363.758-.849 1.334-1.455 1.727s-1.304.576-2.093.576c-.788.031-1.455-.182-2.092-.576zm3.73-1.818c.394-.576.606-1.424.606-2.576s-.212-2-.606-2.576-.94-.849-1.638-.849-1.213.273-1.637.849c-.395.576-.607 1.424-.607 2.576s.212 2 .607 2.576a1.86 1.86 0 0 0 1.637.849c.698 0 1.244-.273 1.638-.849z"/><path opacity=".132" d="M222.791 214.815v10.426h-1.941v-8.789h-2.213v-1.637h4.154z"/><path opacity=".104" d="M242.897 214.542v10.972h-2.032v-9.244h-2.335v-1.697h4.367v-.031z"/><path opacity=".658" d="M262.973 214.27v11.516h-2.153v-9.728h-2.426v-1.788h4.579z"/><path opacity=".583" d="M283.048 213.997v12.062h-2.244v-10.183h-2.547v-1.879h4.791z"/><use href="#p" opacity=".691"/><path opacity=".371" d="M323.169 213.603v12.85h-2.395v-10.85h-2.73v-2h5.125z"/><path opacity=".875" d="M337.756 225.998c-.819-.545-1.486-1.303-1.941-2.333-.485-1.031-.728-2.243-.728-3.637s.243-2.606.728-3.637 1.122-1.788 1.941-2.333 1.759-.788 2.82-.788 2.002.272 2.821.788c.818.545 1.486 1.303 1.971 2.333s.728 2.243.728 3.637-.243 2.606-.728 3.637-1.122 1.788-1.971 2.333c-.819.546-1.79.788-2.821.788-1.061 0-2.001-.242-2.82-.788zm5.034-2.485c.546-.788.819-1.939.819-3.485s-.273-2.697-.819-3.485-1.274-1.152-2.214-1.152-1.668.394-2.213 1.152c-.546.788-.819 1.939-.819 3.485s.273 2.697.819 3.485 1.273 1.152 2.213 1.152 1.668-.394 2.214-1.152z"/><path opacity=".823" d="M357.68 226.089c-.849-.545-1.516-1.333-2.001-2.363s-.728-2.273-.728-3.698.242-2.667.728-3.697 1.152-1.819 2.001-2.364 1.789-.819 2.881-.819c1.061 0 2.032.273 2.881.819s1.516 1.333 2.001 2.364.728 2.273.728 3.697-.242 2.667-.728 3.698-1.152 1.818-2.001 2.363-1.82.819-2.881.819c-1.092 0-2.032-.273-2.881-.819zm5.125-2.515c.546-.788.819-1.97.819-3.546s-.273-2.758-.819-3.546a2.61 2.61 0 0 0-2.274-1.182c-.94 0-1.699.394-2.244 1.182s-.819 1.97-.819 3.546.273 2.758.819 3.546 1.304 1.182 2.244 1.182a2.61 2.61 0 0 0 2.274-1.182z"/><path opacity=".302" d="M383.214 213.27v13.547h-2.517v-11.426h-2.85v-2.121h5.367z"/><path opacity=".338" d="M403.199 213.209v13.608h-2.517V215.33h-2.881v-2.121h5.398z"/><path opacity=".461" d="M423.184 213.27v13.547h-2.517v-11.426h-2.851v-2.121h5.368z"/><path opacity=".296" d="M443.108 213.33v13.396h-2.487v-11.305h-2.82v-2.091h5.307z"/><path opacity=".735" d="M457.603 225.998c-.819-.545-1.486-1.303-1.941-2.333-.485-1.031-.727-2.243-.727-3.637s.242-2.606.727-3.637 1.122-1.788 1.941-2.333 1.759-.788 2.821-.788 2.001.272 2.82.788c.819.545 1.486 1.303 1.971 2.333s.728 2.243.728 3.637-.243 2.606-.728 3.637-1.122 1.788-1.971 2.333c-.819.546-1.789.788-2.82.788-1.062 0-2.002-.242-2.821-.788zm5.034-2.485c.546-.788.819-1.939.819-3.485s-.273-2.697-.819-3.485-1.273-1.152-2.213-1.152-1.668.394-2.214 1.152c-.546.788-.819 1.939-.819 3.485s.273 2.697.819 3.485 1.273 1.152 2.214 1.152 1.667-.394 2.213-1.152z"/><path opacity=".396" d="M477.618 225.877c-.819-.515-1.455-1.273-1.91-2.273s-.698-2.182-.698-3.576c0-1.364.243-2.576.698-3.576s1.122-1.758 1.91-2.273c.819-.516 1.729-.788 2.76-.788s1.971.272 2.79.788 1.455 1.272 1.941 2.273c.455 1 .697 2.182.697 3.576 0 1.364-.242 2.576-.697 3.576s-1.122 1.758-1.941 2.273-1.759.788-2.79.788c-1.001 0-1.941-.242-2.76-.788zm4.974-2.425c.546-.757.788-1.909.788-3.424s-.273-2.637-.788-3.425c-.546-.758-1.274-1.152-2.184-1.152s-1.637.394-2.183 1.152-.789 1.909-.789 3.425.273 2.637.789 3.424c.546.758 1.243 1.152 2.183 1.152.91 0 1.638-.394 2.184-1.152z"/><path opacity=".712" d="M497.694 225.726c-.789-.515-1.395-1.243-1.85-2.213s-.667-2.121-.667-3.455.212-2.485.667-3.455 1.061-1.697 1.85-2.212 1.668-.758 2.699-.758c1.001 0 1.91.243 2.699.758s1.425 1.243 1.88 2.212.667 2.122.667 3.455-.212 2.486-.667 3.455-1.092 1.698-1.88 2.213-1.698.757-2.699.757c-1.031 0-1.911-.272-2.699-.757zm4.791-2.395c.516-.727.789-1.848.789-3.303s-.273-2.576-.789-3.303-1.213-1.122-2.123-1.122a2.39 2.39 0 0 0-2.092 1.122c-.516.727-.788 1.848-.788 3.303s.272 2.576.788 3.303 1.213 1.122 2.092 1.122c.91 0 1.608-.364 2.123-1.122z"/><path opacity=".743" d="M522.743 213.997v12.062h-2.244v-10.183h-2.548v-1.879h4.792z"/><path opacity=".136" d="M537.845 225.301c-.728-.454-1.304-1.151-1.729-2.06s-.637-1.97-.637-3.213.213-2.303.637-3.212 1.001-1.576 1.729-2.061c.728-.455 1.547-.697 2.487-.697s1.759.242 2.486.697 1.304 1.151 1.729 2.061.637 1.969.637 3.212-.213 2.303-.637 3.213-1.001 1.576-1.729 2.06a4.65 4.65 0 0 1-2.486.697c-.94 0-1.759-.242-2.487-.697zm4.427-2.212c.486-.697.728-1.697.728-3.061s-.242-2.364-.728-3.061a2.24 2.24 0 0 0-1.971-1.03c-.819 0-1.455.333-1.941 1.03s-.727 1.697-.727 3.061.242 2.364.727 3.061 1.122 1.03 1.941 1.03c.849 0 1.517-.333 1.971-1.03z"/><path opacity=".737" d="M562.5 214.512v11.032h-2.062v-9.304h-2.335v-1.728h4.397z"/><path opacity=".354" d="M578.057 224.756c-.667-.425-1.183-1.031-1.547-1.849s-.576-1.758-.576-2.879.182-2.061.576-2.879c.364-.819.88-1.425 1.547-1.849s1.395-.636 2.244-.636c.819 0 1.577.212 2.244.636s1.183 1.03 1.547 1.849.576 1.758.576 2.879-.182 2.061-.576 2.879c-.364.818-.91 1.424-1.547 1.849-.667.424-1.395.636-2.244.636s-1.607-.212-2.244-.636zm3.973-1.97c.424-.606.636-1.546.636-2.758s-.212-2.122-.636-2.758c-.425-.606-1.032-.909-1.759-.909s-1.304.303-1.759.909c-.425.606-.637 1.546-.637 2.758s.212 2.152.637 2.758 1.001.909 1.759.909 1.334-.303 1.759-.909z"/><path opacity=".343" d="M598.163 224.483c-.607-.394-1.092-.97-1.456-1.727s-.546-1.667-.546-2.698.182-1.939.546-2.697.849-1.334 1.456-1.728 1.304-.606 2.092-.606 1.486.212 2.093.606 1.122.97 1.455 1.728c.364.758.546 1.667.546 2.697s-.182 1.94-.546 2.698-.849 1.333-1.455 1.727-1.335.606-2.093.606c-.788-.03-1.486-.212-2.092-.606zm3.76-1.879c.394-.576.607-1.455.607-2.576 0-1.152-.213-2-.607-2.576a1.94 1.94 0 0 0-1.668-.879 1.89 1.89 0 0 0-1.638.879c-.394.576-.606 1.455-.606 2.576 0 1.152.212 2 .606 2.576a1.89 1.89 0 0 0 1.638.879c.698 0 1.243-.273 1.668-.879z"/><path opacity=".809" d="M618.269 224.15c-.576-.364-1.031-.909-1.365-1.606s-.485-1.546-.485-2.516.152-1.818.485-2.515.789-1.243 1.365-1.607a3.54 3.54 0 0 1 1.941-.545 3.54 3.54 0 0 1 1.94.545c.577.364 1.032.91 1.365 1.607s.485 1.545.485 2.515-.151 1.819-.485 2.516-.788 1.242-1.365 1.606a3.54 3.54 0 0 1-1.94.545c-.698 0-1.365-.182-1.941-.545zm3.487-1.728c.364-.545.576-1.333.576-2.394s-.182-1.849-.576-2.394c-.364-.546-.879-.818-1.546-.818-.637 0-1.153.272-1.517.818s-.576 1.333-.576 2.394.182 1.879.576 2.394c.364.546.88.819 1.517.819.667 0 1.182-.273 1.546-.819z"/><path opacity=".977" d="M638.435 223.786c-.515-.333-.94-.818-1.243-1.455s-.455-1.394-.455-2.303c0-.879.152-1.636.455-2.303.303-.637.698-1.122 1.243-1.455.516-.333 1.123-.515 1.79-.515a3.26 3.26 0 0 1 1.789.515c.515.333.94.818 1.243 1.455s.455 1.394.455 2.303c0 .879-.151 1.637-.455 2.303-.303.637-.728 1.122-1.243 1.455a3.25 3.25 0 0 1-1.789.515 3.18 3.18 0 0 1-1.79-.515zm3.185-1.545c.333-.485.515-1.213.515-2.183s-.182-1.697-.515-2.182a1.62 1.62 0 0 0-1.395-.727 1.62 1.62 0 0 0-1.395.727c-.334.485-.516 1.213-.516 2.182s.182 1.698.516 2.183.819.727 1.395.727 1.031-.243 1.395-.727z"/><path opacity=".737" d="M661.665 216.3v7.425h-1.395v-6.273h-1.577V216.3h2.972z"/><use href="#P" x="319.602" y="139.745" opacity=".187"/><path opacity=".728" d="M698.935 222.574c-.364-.243-.637-.576-.849-1s-.303-.97-.303-1.546c0-.606.091-1.121.303-1.546s.485-.757.849-1 .758-.333 1.213-.333a2.35 2.35 0 0 1 1.213.333c.364.243.637.576.849 1s.304.97.304 1.546c0 .606-.091 1.121-.304 1.546s-.485.757-.849 1-.758.333-1.213.333a1.84 1.84 0 0 1-1.213-.333zm2.153-1.061c.243-.333.364-.818.364-1.485s-.121-1.152-.364-1.485-.546-.485-.94-.485-.728.152-.94.485c-.243.333-.364.818-.364 1.485s.121 1.152.364 1.485.546.485.94.485c.394.03.698-.152.94-.485z"/><path opacity=".696" d="M721.043 217.694v4.698h-.88v-3.97h-1v-.728h1.88z"/><path opacity=".518" d="M739.299 221.695c-.243-.152-.425-.364-.546-.667-.122-.273-.212-.636-.212-1.03s.06-.728.212-1.031c.121-.272.303-.515.546-.666s.485-.213.788-.213a1.4 1.4 0 0 1 .789.213c.242.151.424.363.545.666.122.273.213.637.213 1.031s-.061.727-.213 1.03c-.121.273-.303.515-.545.667s-.486.212-.789.212c-.303.03-.576-.061-.788-.212zm1.395-.697c.151-.212.242-.546.242-.97s-.091-.758-.242-.97a.75.75 0 0 0-.637-.333c-.273 0-.455.121-.607.333s-.242.546-.242.97.091.758.242.97.364.333.607.333c.303 0 .485-.121.637-.333z"/><path opacity=".77" d="M760.587 218.755v2.576h-.485v-2.182h-.546v-.394h1.031z"/><path opacity=".662" d="M780.33 219.301v1.485h-.273v-1.243h-.304v-.242h.577z"/><use href="#q" opacity=".776"/><path opacity=".272" d="M.928 240.182l-.061-.061c0-.03-.03-.06-.03-.121 0-.03 0-.091.03-.121 0-.03.03-.061.061-.061.03-.03.061-.03.091-.03s.061 0 .091.03l.061.061c0 .03.03.061.03.121 0 .031 0 .091-.03.121 0 .031-.03.061-.061.061-.03.03-.061.03-.091.03-.061-.03-.091-.03-.091-.03zm.152-.091c.03-.03.03-.06.03-.091 0-.06 0-.091-.03-.091-.03-.03-.03-.03-.061-.03s-.061 0-.061.03c-.03.031-.03.061-.03.091 0 .061 0 .091.03.091.03.03.03.03.061.03 0 0 .03 0 .061-.03z"/><path opacity=".259" d="M20.64 240.697a.71.71 0 0 1-.243-.272c-.061-.122-.091-.273-.091-.425a.88.88 0 0 1 .091-.424c.061-.121.121-.212.243-.273.091-.06.212-.091.334-.091s.243.031.334.091a.72.72 0 0 1 .243.273c.061.121.091.273.091.424 0 .182-.03.303-.091.425s-.121.212-.243.272a.61.61 0 0 1-.334.091.61.61 0 0 1-.334-.091zm.607-.303c.061-.091.091-.242.091-.424s-.03-.333-.091-.424-.152-.152-.273-.152-.212.061-.273.152-.091.242-.091.424.03.333.091.424.152.152.273.152.212-.03.273-.152z"/><path opacity=".819" d="M41.474 238.667v2.666h-.485v-2.242h-.576v-.424h1.061z"/><path opacity=".432" d="M61.671 238.151v3.668h-.697v-3.122h-.788v-.576h1.486v.03z"/><path opacity=".149" d="M79.897 242.122c-.303-.182-.516-.455-.697-.819s-.243-.788-.243-1.303a3.33 3.33 0 0 1 .243-1.303c.182-.364.394-.636.697-.818a1.91 1.91 0 0 1 1.001-.273c.364 0 .697.091 1.001.273s.546.454.698.818c.182.364.243.788.243 1.303s-.091.94-.243 1.303c-.182.364-.394.637-.698.819s-.637.272-1.001.272c-.364.031-.698-.09-1.001-.272zm1.789-.879c.182-.273.303-.697.303-1.243s-.091-.97-.303-1.242c-.182-.273-.455-.425-.788-.425s-.607.152-.788.425-.303.697-.303 1.242.091.97.303 1.243c.182.273.455.424.788.424s.606-.151.788-.424z"/><path opacity=".49" d="M99.639 242.576c-.364-.242-.637-.575-.849-1-.212-.454-.303-.97-.303-1.576s.091-1.121.303-1.576.485-.788.849-1c.364-.242.758-.333 1.213-.333a2.46 2.46 0 0 1 1.243.333c.364.243.637.576.849 1 .212.455.303.97.303 1.576s-.091 1.122-.303 1.576-.485.788-.849 1c-.364.243-.758.334-1.243.334-.425.03-.849-.091-1.213-.334zm2.213-1.06c.243-.334.364-.849.364-1.516s-.121-1.182-.364-1.515-.545-.515-.97-.515c-.394 0-.728.182-.97.515s-.364.849-.364 1.515.121 1.182.364 1.516.545.515.97.515c.394-.03.728-.182.97-.515z"/><path opacity=".908" d="M119.411 243.001c-.425-.273-.758-.667-1.001-1.182s-.364-1.122-.364-1.849c0-.697.122-1.333.364-1.849s.576-.909 1.001-1.182.879-.394 1.425-.394 1.001.122 1.426.394.758.667 1 1.182.364 1.122.364 1.849c0 .697-.121 1.334-.364 1.849s-.576.909-1 1.182-.91.394-1.426.394c-.515.03-1-.121-1.425-.394zm2.578-1.243c.273-.394.424-.97.424-1.758s-.151-1.363-.424-1.757-.637-.576-1.122-.576c-.455 0-.849.182-1.122.576s-.425.969-.425 1.757.152 1.364.425 1.758.636.576 1.122.576c.455 0 .849-.182 1.122-.576z"/><path opacity=".604" d="M139.214 243.395c-.486-.303-.85-.758-1.123-1.334s-.394-1.273-.394-2.091c0-.788.122-1.485.394-2.091.273-.576.637-1.031 1.123-1.334a2.92 2.92 0 0 1 1.607-.454c.606 0 1.152.151 1.607.454.485.303.849.758 1.122 1.334s.394 1.273.394 2.091c0 .788-.121 1.485-.394 2.091-.273.576-.637 1.031-1.122 1.334s-1.001.454-1.607.454a2.92 2.92 0 0 1-1.607-.454zm2.88-1.425c.304-.454.455-1.091.455-2 0-.879-.151-1.546-.455-2s-.727-.667-1.273-.667c-.516 0-.94.212-1.274.667-.303.454-.455 1.091-.455 2 0 .879.152 1.546.455 2a1.43 1.43 0 0 0 1.274.667c.546 0 .97-.212 1.273-.667z"/><path opacity=".206" d="M159.016 243.758c-.515-.333-.94-.818-1.243-1.454s-.455-1.394-.455-2.304c0-.879.151-1.636.455-2.303.303-.636.697-1.121 1.243-1.455a3.26 3.26 0 0 1 1.789-.515c.667 0 1.274.182 1.79.515s.94.819 1.243 1.455.455 1.394.455 2.303c0 .879-.152 1.637-.455 2.304-.303.636-.728 1.121-1.243 1.454s-1.123.516-1.79.516-1.273-.182-1.789-.516zm3.184-1.576c.334-.485.516-1.212.516-2.182s-.182-1.697-.516-2.182a1.62 1.62 0 0 0-1.395-.727 1.62 1.62 0 0 0-1.395.727c-.333.485-.515 1.212-.515 2.182s.182 1.697.515 2.182.819.728 1.395.728a1.62 1.62 0 0 0 1.395-.728z"/><path opacity=".973" d="M182.579 235.454v9.092h-1.668v-7.667h-1.91v-1.425h3.578z"/><path opacity=".9" d="M202.685 235.09v9.789h-1.819v-8.273h-2.062v-1.516h3.881z"/><path opacity=".515" d="M218.485 244.758c-.667-.424-1.183-1.03-1.547-1.848-.394-.819-.576-1.789-.576-2.91s.182-2.091.576-2.909.91-1.425 1.547-1.849c.667-.424 1.395-.637 2.244-.637s1.577.213 2.244.637 1.183 1.03 1.577 1.849.576 1.788.576 2.909-.182 2.091-.576 2.91-.91 1.424-1.577 1.848-1.425.637-2.244.637c-.849 0-1.607-.212-2.244-.637zm4.003-2c.425-.606.667-1.546.667-2.758 0-1.243-.212-2.152-.667-2.758-.424-.606-1.031-.939-1.789-.939a2.01 2.01 0 0 0-1.759.939c-.425.606-.667 1.546-.667 2.758 0 1.243.212 2.152.667 2.758.425.606 1.031.94 1.759.94.788 0 1.365-.304 1.789-.94z"/><path opacity=".912" d="M238.318 245.031c-.698-.454-1.244-1.091-1.638-1.97-.394-.848-.606-1.879-.606-3.061s.212-2.212.606-3.061.94-1.515 1.638-1.97 1.486-.666 2.396-.666c.879 0 1.698.212 2.395.666s1.244 1.122 1.668 1.97c.394.849.607 1.879.607 3.061s-.213 2.213-.607 3.061-.97 1.516-1.668 1.97-1.516.667-2.395.667c-.91 0-1.699-.212-2.396-.667zm4.276-2.091c.455-.667.697-1.636.697-2.94s-.242-2.273-.697-2.939-1.092-.97-1.88-.97-1.395.333-1.881.97c-.455.666-.697 1.636-.697 2.939s.242 2.273.697 2.94 1.092.97 1.881.97 1.395-.333 1.88-.97z"/><path opacity=".33" d="M258.181 245.274c-.727-.485-1.304-1.152-1.728-2.061s-.637-1.97-.637-3.213.212-2.333.637-3.212c.424-.909 1.001-1.607 1.728-2.061.728-.485 1.577-.697 2.487-.697.94 0 1.759.242 2.517.697.728.485 1.334 1.152 1.729 2.061.424.909.636 1.97.636 3.212s-.212 2.334-.636 3.213c-.425.909-1.001 1.606-1.729 2.061-.728.485-1.577.697-2.517.697-.94.03-1.759-.212-2.487-.697zm4.458-2.182c.485-.698.728-1.728.728-3.092s-.243-2.394-.728-3.091-1.152-1.03-1.971-1.03-1.486.333-1.971 1.03-.728 1.727-.728 3.091.243 2.394.728 3.092a2.24 2.24 0 0 0 1.971 1.03c.849 0 1.486-.364 1.971-1.03z"/><use href="#r" opacity=".211"/><path opacity=".759" d="M297.908 245.698c-.788-.515-1.425-1.243-1.88-2.243-.455-.969-.697-2.151-.697-3.485s.242-2.515.697-3.485 1.092-1.728 1.88-2.243 1.698-.758 2.699-.758 1.911.243 2.699.758 1.426 1.243 1.88 2.243c.455.97.698 2.152.698 3.485s-.243 2.516-.698 3.485-1.091 1.728-1.88 2.243-1.698.758-2.699.758c-1.001.03-1.88-.243-2.699-.758zm4.852-2.364c.516-.758.789-1.849.789-3.334s-.273-2.576-.789-3.333a2.44 2.44 0 0 0-2.122-1.122 2.44 2.44 0 0 0-2.123 1.122c-.516.757-.789 1.848-.789 3.333s.273 2.576.789 3.334 1.213 1.121 2.123 1.121c.879 0 1.607-.394 2.122-1.121z"/><path opacity=".889" d="M317.802 245.88c-.819-.516-1.456-1.304-1.941-2.304s-.697-2.212-.697-3.606.242-2.576.697-3.607c.485-1 1.122-1.788 1.941-2.303s1.759-.788 2.79-.788 1.971.273 2.79.788 1.486 1.303 1.941 2.303c.485 1 .697 2.213.697 3.607s-.242 2.576-.697 3.606c-.486 1-1.122 1.788-1.941 2.304s-1.759.788-2.79.788-1.971-.243-2.79-.788zm5.004-2.455c.546-.758.818-1.91.818-3.425s-.272-2.667-.818-3.425-1.274-1.151-2.214-1.151c-.91 0-1.638.394-2.184 1.151s-.818 1.91-.818 3.425.273 2.667.818 3.425 1.274 1.151 2.184 1.151c.94 0 1.668-.394 2.214-1.151z"/><use href="#s" opacity=".764"/><path opacity=".675" d="M357.65 246.153c-.849-.546-1.517-1.334-2.002-2.395s-.728-2.303-.728-3.758.243-2.697.728-3.758 1.153-1.848 2.002-2.394 1.819-.818 2.911-.818 2.062.273 2.911.818 1.547 1.334 2.032 2.394.728 2.304.728 3.758-.243 2.698-.728 3.758-1.152 1.849-2.032 2.395c-.849.545-1.819.818-2.911.818s-2.062-.273-2.911-.818zm5.185-2.576c.546-.788.85-2.001.85-3.577s-.273-2.788-.85-3.576-1.334-1.212-2.304-1.212-1.699.394-2.275 1.212c-.576.788-.849 2-.849 3.576s.273 2.789.849 3.577 1.335 1.212 2.275 1.212a2.69 2.69 0 0 0 2.304-1.212z"/><path opacity=".618" d="M377.574 246.213c-.849-.546-1.547-1.364-2.032-2.425s-.758-2.333-.758-3.788.242-2.728.758-3.788c.485-1.061 1.183-1.879 2.032-2.425s1.849-.818 2.941-.818 2.093.273 2.942.818c.879.546 1.546 1.364 2.032 2.425s.758 2.333.758 3.788-.243 2.728-.758 3.788c-.486 1.061-1.183 1.879-2.032 2.425-.88.545-1.85.818-2.942.818s-2.062-.273-2.941-.818zm5.276-2.607c.577-.818.849-2.03.849-3.606 0-1.606-.272-2.819-.849-3.607-.576-.818-1.334-1.212-2.335-1.212-.97 0-1.728.394-2.305 1.212s-.849 2.031-.849 3.607c0 1.606.273 2.818.849 3.606.577.819 1.335 1.213 2.305 1.213s1.759-.394 2.335-1.213z"/><path opacity=".16" d="M397.528 246.243c-.88-.545-1.547-1.364-2.062-2.455-.486-1.06-.758-2.333-.758-3.818 0-1.455.242-2.728.758-3.819.485-1.061 1.182-1.879 2.062-2.455a5.47 5.47 0 0 1 2.941-.848c1.092 0 2.093.272 2.972.848.88.546 1.547 1.364 2.062 2.455.486 1.061.759 2.334.759 3.819s-.243 2.727-.759 3.818c-.485 1.061-1.182 1.879-2.062 2.455a5.49 5.49 0 0 1-2.972.849 5.54 5.54 0 0 1-2.941-.849zm5.307-2.606c.576-.818.849-2.031.849-3.637s-.273-2.818-.849-3.637a2.71 2.71 0 0 0-2.335-1.212c-.971 0-1.729.394-2.305 1.212s-.849 2.031-.849 3.637.273 2.819.849 3.637 1.334 1.212 2.305 1.212a2.71 2.71 0 0 0 2.335-1.212z"/><path opacity=".79" d="M417.543 246.213c-.849-.546-1.547-1.364-2.032-2.425s-.758-2.333-.758-3.788.243-2.728.758-3.788c.485-1.061 1.183-1.879 2.032-2.425s1.85-.818 2.941-.818 2.093.273 2.942.818c.88.546 1.547 1.364 2.032 2.425s.758 2.333.758 3.788-.243 2.728-.758 3.788c-.485 1.061-1.183 1.879-2.032 2.425-.879.545-1.85.818-2.942.818-1.122 0-2.092-.273-2.941-.818zm5.246-2.607c.576-.818.849-2.03.849-3.606 0-1.606-.273-2.819-.849-3.607-.576-.818-1.334-1.212-2.335-1.212-.97 0-1.728.394-2.305 1.212s-.849 2.031-.849 3.607c0 1.606.273 2.818.849 3.606.577.819 1.335 1.213 2.305 1.213a2.67 2.67 0 0 0 2.335-1.213z"/><path opacity=".231" d="M443.138 233.211v13.548h-2.517v-11.426h-2.851v-2.122h5.368z"/><use href="#s" x="119.847" opacity=".28"/><path opacity=".577" d="M477.618 245.88c-.818-.516-1.455-1.304-1.941-2.304s-.697-2.212-.697-3.606.243-2.576.697-3.607c.486-1 1.123-1.788 1.941-2.303s1.759-.788 2.79-.788 1.971.273 2.79.788 1.486 1.303 1.941 2.303c.485 1 .698 2.213.698 3.607s-.243 2.576-.698 3.606c-.485 1-1.122 1.788-1.941 2.304s-1.759.788-2.79.788c-1.061 0-1.971-.243-2.79-.788zm4.974-2.455c.546-.758.819-1.91.819-3.425s-.273-2.667-.819-3.425-1.274-1.151-2.214-1.151c-.91 0-1.638.394-2.183 1.151s-.819 1.91-.819 3.425.273 2.667.819 3.425 1.273 1.151 2.183 1.151c.94 0 1.668-.394 2.214-1.151z"/><path opacity=".601" d="M497.664 245.698c-.789-.515-1.426-1.243-1.881-2.243-.454-.969-.697-2.151-.697-3.485s.243-2.515.697-3.485 1.092-1.728 1.881-2.243 1.698-.758 2.699-.758 1.91.243 2.699.758 1.425 1.243 1.88 2.243c.455.97.697 2.152.697 3.485s-.242 2.516-.697 3.485-1.092 1.728-1.88 2.243-1.699.758-2.699.758c-1.001.03-1.911-.243-2.699-.758zm4.852-2.364c.515-.758.788-1.849.788-3.334s-.273-2.576-.788-3.333-1.244-1.122-2.123-1.122a2.44 2.44 0 0 0-2.123 1.122c-.515.757-.788 1.848-.788 3.333s.273 2.576.788 3.334 1.213 1.121 2.123 1.121c.879 0 1.607-.394 2.123-1.121z"/><path opacity=".693" d="M522.773 233.878v12.214h-2.274v-10.304h-2.578v-1.91h4.852z"/><path opacity=".166" d="M537.815 245.274c-.728-.485-1.304-1.152-1.729-2.061s-.637-1.97-.637-3.213.212-2.333.637-3.212c.425-.909 1.001-1.607 1.729-2.061.727-.485 1.577-.697 2.486-.697.94 0 1.759.242 2.517.697a4.66 4.66 0 0 1 1.729 2.061c.424.909.637 1.97.637 3.212s-.213 2.334-.637 3.213c-.425.909-1.001 1.606-1.729 2.061-.727.485-1.577.697-2.517.697-.909.03-1.759-.212-2.486-.697zm4.488-2.182c.485-.698.728-1.728.728-3.092s-.243-2.394-.728-3.091-1.153-1.03-1.971-1.03a2.28 2.28 0 0 0-1.972 1.03c-.485.697-.727 1.727-.727 3.091s.242 2.394.727 3.092 1.123 1.03 1.972 1.03c.818 0 1.486-.364 1.971-1.03z"/><path opacity=".912" d="M557.921 245.031c-.698-.454-1.243-1.091-1.638-1.97-.394-.848-.606-1.879-.606-3.061s.212-2.212.606-3.061.94-1.515 1.638-1.97 1.486-.666 2.396-.666c.879 0 1.698.212 2.395.666s1.244 1.122 1.668 1.97c.394.849.607 1.879.607 3.061s-.213 2.213-.607 3.061-.97 1.516-1.668 1.97-1.516.667-2.395.667c-.91 0-1.699-.212-2.396-.667zm4.276-2.091c.455-.667.697-1.636.697-2.94s-.242-2.273-.697-2.939-1.092-.97-1.88-.97-1.395.333-1.881.97c-.454.666-.697 1.636-.697 2.939s.243 2.273.697 2.94 1.092.97 1.881.97 1.395-.333 1.88-.97z"/><path opacity=".821" d="M578.027 244.758c-.668-.424-1.183-1.03-1.547-1.848-.394-.819-.576-1.789-.576-2.91s.182-2.091.576-2.909.91-1.425 1.547-1.849c.667-.424 1.395-.637 2.244-.637s1.577.213 2.244.637 1.183 1.03 1.577 1.849.576 1.788.576 2.909-.182 2.091-.576 2.91-.91 1.424-1.577 1.848-1.425.637-2.244.637c-.849 0-1.577-.212-2.244-.637zm4.033-2c.425-.606.667-1.546.667-2.758 0-1.243-.212-2.152-.667-2.758-.425-.606-1.031-.939-1.789-.939a2.01 2.01 0 0 0-1.759.939c-.425.606-.667 1.546-.667 2.758 0 1.243.212 2.152.667 2.758.424.606 1.031.94 1.759.94.758 0 1.334-.304 1.789-.94z"/><path opacity=".332" d="M598.132 244.455c-.606-.394-1.122-.969-1.455-1.757-.364-.758-.546-1.667-.546-2.728s.182-1.97.546-2.728.849-1.333 1.455-1.757a3.87 3.87 0 0 1 2.123-.607 3.94 3.94 0 0 1 2.123.607c.637.394 1.122.969 1.486 1.757.364.758.546 1.667.546 2.728s-.182 1.97-.546 2.728-.849 1.333-1.486 1.757a3.94 3.94 0 0 1-2.123.606c-.788 0-1.486-.181-2.123-.606zm3.791-1.848c.394-.576.607-1.455.607-2.607s-.213-2.03-.607-2.606a1.94 1.94 0 0 0-1.668-.879c-.697 0-1.243.303-1.668.879-.394.576-.606 1.455-.606 2.606s.212 2.031.606 2.607.971.879 1.668.879 1.244-.304 1.668-.879z"/><path opacity=".807" d="M622.059 235.424v9.152h-1.698v-7.728h-1.941v-1.424h3.639z"/><path opacity=".749" d="M641.862 235.818v8.365h-1.547v-7.062h-1.758v-1.303h3.305z"/><use href="#t" opacity=".117"/><path opacity=".934" d="M681.498 236.636v6.728h-1.244v-5.697h-1.425v-1.061h2.669v.03z"/><path opacity=".913" d="M701.271 237.091v5.788h-1.092V238h-1.213v-.909h2.305z"/><path opacity=".802" d="M719.072 242.152c-.304-.182-.546-.485-.698-.848-.182-.364-.273-.819-.273-1.334s.091-.939.273-1.333c.182-.364.425-.667.698-.849.303-.182.636-.303 1.031-.303s.727.091 1.031.303c.303.182.546.485.728.849s.272.818.272 1.333-.091.94-.272 1.334c-.182.363-.425.666-.728.848a1.96 1.96 0 0 1-1.031.303c-.364 0-.728-.091-1.031-.303zm1.849-.909c.213-.273.304-.697.304-1.273 0-.545-.091-.97-.304-1.273-.212-.273-.454-.424-.818-.424-.334 0-.607.151-.789.424-.212.273-.303.697-.303 1.273 0 .546.091.97.303 1.273.212.273.455.424.789.424a.93.93 0 0 0 .818-.424z"/><path opacity=".306" d="M740.845 238.121v3.758h-.697v-3.182h-.789v-.576h1.486z"/><path opacity=".956" d="M759.465 241.243c-.182-.122-.303-.273-.394-.485a1.87 1.87 0 0 1-.152-.758c0-.303.061-.545.152-.758s.243-.363.394-.485c.182-.121.364-.151.576-.151s.425.061.577.151c.182.122.303.273.394.485s.152.455.152.758a1.87 1.87 0 0 1-.152.758c-.091.212-.243.363-.394.485-.182.121-.364.151-.577.151s-.394-.03-.576-.151zm1.062-.516c.121-.151.182-.394.182-.727s-.061-.576-.182-.727-.273-.243-.455-.243-.334.091-.455.243-.182.394-.182.727.061.576.182.727.273.243.455.243.333-.091.455-.243z"/><path opacity=".659" d="M780.359 239.182v1.636h-.303v-1.394h-.333v-.242h.636z"/><path opacity=".275" d="M799.92 240.212c-.031-.03-.061-.06-.061-.091-.03-.03-.03-.09-.03-.121 0-.06 0-.091.03-.121s.03-.061.061-.091.06-.03.091-.03.06 0 .091.03.06.061.06.091c.031.03.031.091.031.121 0 .061 0 .091-.031.121s-.03.061-.06.091-.061.031-.091.031-.061-.031-.091-.031zm.182-.091c.03-.03.03-.06.03-.121s0-.091-.03-.121-.061-.03-.091-.03-.061 0-.091.03-.031.061-.031.121 0 .091.031.121.06.031.091.031.06 0 .091-.031z"/><path opacity=".151" d="M.928 260.094c-.03 0-.03-.031-.061-.061s-.03-.061-.03-.091 0-.061.03-.091c0-.03.03-.03.061-.06.03 0 .03-.031.061-.031s.061 0 .061.031c.03 0 .03.03.061.06 0 .03.03.061.03.091s0 .061-.03.091c0 .03-.03.03-.061.061-.03 0-.03.03-.061.03 0 0-.03 0-.061-.03zm.121-.061c0-.03.03-.061.03-.091s0-.061-.03-.091c0-.03-.03-.03-.061-.03s-.03 0-.061.03c0 .03-.03.061-.03.091s0 .061.03.091c0 .03.03.03.061.03s.061 0 .061-.03z"/><path opacity=".864" d="M20.67 260.609c-.091-.061-.152-.152-.212-.243-.061-.121-.091-.242-.091-.394s.03-.272.091-.393a.56.56 0 0 1 .212-.243.51.51 0 0 1 .303-.091.51.51 0 0 1 .303.091c.091.061.152.152.212.243.061.121.091.242.091.393s-.03.273-.091.394a.56.56 0 0 1-.212.243.51.51 0 0 1-.303.091l-.303-.091zm.546-.273c.061-.091.091-.212.091-.364s-.03-.303-.091-.363c-.061-.091-.152-.121-.243-.121s-.182.03-.243.121-.091.212-.091.363.03.304.091.364c.061.091.152.121.243.121s.182-.03.243-.121z"/><path opacity=".623" d="M40.413 261.124c-.152-.091-.303-.243-.394-.455a1.72 1.72 0 0 1-.152-.727 1.83 1.83 0 0 1 .152-.727c.091-.213.212-.364.394-.455.152-.091.334-.152.546-.152s.394.061.546.152a.98.98 0 0 1 .394.455 1.72 1.72 0 0 1 .152.727c0 .273-.061.515-.152.727s-.212.364-.394.455c-.152.091-.364.151-.546.151-.212 0-.394-.03-.546-.151zm.97-.485c.121-.152.152-.394.152-.697s-.061-.515-.152-.697-.243-.243-.425-.243-.334.091-.424.243c-.121.151-.152.394-.152.697s.061.545.152.697c.121.151.243.242.424.242s.334-.091.425-.242z"/><path opacity=".481" d="M60.155 261.579c-.212-.152-.394-.364-.546-.637-.121-.273-.182-.606-.182-1s.061-.727.182-1 .303-.485.546-.637c.212-.151.485-.212.758-.212.303 0 .546.061.788.212s.394.364.546.637c.121.273.182.606.182 1s-.061.727-.182 1-.303.485-.546.637-.485.212-.788.212a1.12 1.12 0 0 1-.758-.212zm1.395-.667c.152-.212.212-.515.212-.94s-.061-.727-.212-.939-.364-.334-.607-.334-.455.122-.606.334-.212.515-.212.939.061.728.212.94.364.333.606.333c.243-.03.455-.121.607-.333z"/><path opacity=".86" d="M79.897 262.063c-.303-.181-.516-.454-.697-.818s-.243-.788-.243-1.273.091-.909.243-1.273c.182-.363.394-.636.697-.818s.607-.273 1.001-.273c.364 0 .697.091 1.001.273s.516.455.698.818.243.788.243 1.273a3.28 3.28 0 0 1-.243 1.273c-.182.364-.394.637-.698.818s-.637.273-1.001.273a1.91 1.91 0 0 1-1.001-.273zm1.789-.878c.182-.273.273-.667.273-1.213s-.091-.939-.273-1.212-.455-.424-.788-.424-.576.121-.788.424c-.182.273-.273.667-.273 1.212s.091.94.273 1.213.455.394.788.394.606-.122.788-.394z"/><path opacity=".354" d="M102.004 257.154v5.637h-1.062v-4.758H99.76v-.879h2.244z"/><path opacity=".722" d="M122.171 256.669v6.577h-1.214v-5.547h-1.395v-1.03h2.609z"/><path opacity=".958" d="M142.307 256.245v7.425h-1.395v-6.274h-1.547v-1.151h2.942z"/><path opacity=".902" d="M159.047 263.7c-.516-.333-.91-.818-1.213-1.455s-.455-1.394-.455-2.273.152-1.636.455-2.273.697-1.121 1.213-1.454 1.092-.485 1.759-.485 1.243.151 1.759.485.94.818 1.213 1.454c.303.637.455 1.395.455 2.273s-.152 1.637-.455 2.273-.698 1.122-1.213 1.455-1.122.485-1.759.485c-.667 0-1.244-.151-1.759-.485zm3.154-1.576c.333-.485.515-1.212.515-2.182s-.182-1.697-.515-2.182a1.62 1.62 0 0 0-1.395-.727c-.576 0-1.031.242-1.395.727-.334.485-.516 1.212-.516 2.182s.182 1.697.516 2.182.788.728 1.395.728c.576 0 1.031-.243 1.395-.728z"/><path opacity=".949" d="M182.579 255.457v9.001h-1.668v-7.607h-1.91v-1.394h3.578z"/><path opacity=".362" d="M202.685 255.093v9.698h-1.789v-8.183h-2.062v-1.515h3.851z"/><path opacity=".886" d="M218.485 264.67c-.667-.424-1.183-1.031-1.547-1.849s-.576-1.758-.576-2.879.182-2.061.576-2.879c.364-.819.88-1.425 1.547-1.849s1.395-.636 2.244-.636c.819 0 1.577.212 2.244.636s1.183 1.03 1.547 1.849.576 1.758.576 2.879-.182 2.061-.576 2.879a4.27 4.27 0 0 1-1.547 1.849c-.667.424-1.395.636-2.244.636s-1.577-.212-2.244-.636zm4.003-1.97c.425-.606.637-1.546.637-2.758s-.212-2.122-.637-2.758c-.424-.606-1.031-.909-1.759-.909s-1.304.303-1.759.909c-.424.606-.637 1.546-.637 2.758s.213 2.152.637 2.758 1.001.909 1.759.909a1.92 1.92 0 0 0 1.759-.909z"/><path opacity=".439" d="M238.318 264.973c-.698-.455-1.244-1.091-1.638-1.97-.394-.849-.606-1.879-.606-3.061s.212-2.182.606-3.061c.394-.849.94-1.516 1.638-1.97s1.486-.667 2.365-.667 1.668.212 2.366.667 1.243 1.091 1.637 1.97c.394.848.607 1.879.607 3.061s-.213 2.182-.607 3.061c-.394.848-.94 1.515-1.637 1.97s-1.486.667-2.366.667-1.668-.243-2.365-.667zm4.245-2.091c.455-.667.698-1.637.698-2.91 0-1.303-.243-2.273-.698-2.909-.454-.667-1.091-.97-1.88-.97s-1.395.333-1.85.97c-.455.666-.697 1.636-.697 2.909 0 1.303.242 2.273.697 2.91.455.666 1.062.969 1.85.969s1.426-.333 1.88-.969z"/><path opacity=".883" d="M262.973 254.153v11.578h-2.153v-9.79h-2.457v-1.818h4.61v.03z"/><path opacity=".552" d="M283.048 253.941v12.063h-2.244V255.82h-2.547v-1.879h4.791z"/><path opacity=".135" d="M297.938 265.64c-.788-.515-1.395-1.243-1.849-2.213s-.668-2.121-.668-3.455.213-2.485.668-3.455 1.061-1.697 1.849-2.212 1.668-.758 2.699-.758c1.001 0 1.911.243 2.699.758s1.426 1.243 1.881 2.212.667 2.122.667 3.455-.213 2.486-.667 3.455-1.092 1.698-1.881 2.213-1.698.757-2.699.757c-1.031 0-1.91-.242-2.699-.757zm4.792-2.364c.515-.728.788-1.849.788-3.304s-.273-2.576-.788-3.303-1.213-1.121-2.123-1.121c-.879 0-1.577.363-2.092 1.121-.516.727-.789 1.849-.789 3.303s.273 2.576.789 3.304 1.213 1.121 2.092 1.121c.91-.03 1.607-.394 2.123-1.121z"/><path opacity=".196" d="M317.832 265.791c-.819-.515-1.456-1.273-1.91-2.273s-.698-2.182-.698-3.546.243-2.546.698-3.546 1.091-1.758 1.91-2.273 1.729-.788 2.76-.788 1.941.273 2.759.788 1.456 1.273 1.911 2.273.697 2.182.697 3.546-.242 2.546-.697 3.546-1.092 1.758-1.911 2.273-1.728.788-2.759.788c-1.031-.03-1.941-.273-2.76-.788zm4.943-2.455c.546-.758.789-1.879.789-3.394s-.273-2.637-.789-3.395c-.546-.757-1.243-1.151-2.183-1.151-.91 0-1.638.394-2.153 1.151-.546.758-.789 1.879-.789 3.395s.273 2.636.789 3.394c.546.758 1.243 1.152 2.153 1.152s1.637-.364 2.183-1.152z"/><path opacity=".236" d="M337.756 265.912c-.819-.545-1.486-1.303-1.941-2.333-.485-1.031-.728-2.243-.728-3.637s.243-2.606.728-3.637 1.122-1.788 1.941-2.333 1.759-.788 2.82-.788 2.002.272 2.821.788c.818.545 1.486 1.303 1.971 2.333s.728 2.243.728 3.637-.243 2.606-.728 3.637-1.122 1.788-1.971 2.333c-.819.546-1.79.788-2.821.788-1.061.031-2.001-.242-2.82-.788zm5.034-2.485c.546-.788.819-1.939.819-3.485s-.273-2.697-.819-3.485-1.274-1.152-2.214-1.152-1.668.394-2.213 1.152c-.546.788-.819 1.939-.819 3.485s.273 2.697.819 3.485 1.273 1.152 2.213 1.152c.94.03 1.668-.364 2.214-1.152z"/><path opacity=".208" d="M357.68 266.034c-.849-.546-1.516-1.334-2.001-2.364s-.728-2.273-.728-3.698.242-2.667.728-3.697 1.152-1.818 2.001-2.364 1.789-.818 2.881-.818c1.061 0 2.032.273 2.881.818s1.516 1.334 2.001 2.364.728 2.273.728 3.697-.242 2.667-.728 3.698-1.152 1.818-2.001 2.364-1.82.818-2.881.818c-1.092 0-2.032-.273-2.881-.818zm5.125-2.546c.546-.788.819-1.97.819-3.546s-.273-2.758-.819-3.546a2.61 2.61 0 0 0-2.274-1.182c-.94 0-1.699.394-2.244 1.182s-.819 1.97-.819 3.546.273 2.758.819 3.546 1.304 1.182 2.244 1.182a2.61 2.61 0 0 0 2.274-1.182z"/><path opacity=".17" d="M377.604 266.095c-.849-.546-1.516-1.334-2.002-2.395s-.727-2.303-.727-3.758.242-2.697.727-3.758 1.153-1.849 2.002-2.394 1.819-.818 2.911-.818 2.062.272 2.911.818 1.547 1.333 2.032 2.394.728 2.304.728 3.758-.243 2.698-.728 3.758-1.152 1.849-2.032 2.395c-.849.545-1.819.818-2.911.818a5.34 5.34 0 0 1-2.911-.818zm5.216-2.546c.546-.788.849-2 .849-3.576s-.273-2.789-.849-3.577-1.334-1.212-2.305-1.212-1.698.394-2.274 1.212c-.577.788-.849 2.001-.849 3.577s.272 2.788.849 3.576 1.334 1.212 2.274 1.212c.971-.03 1.729-.424 2.305-1.212z"/><path opacity=".666" d="M403.199 253.153v13.608h-2.517v-11.486h-2.881v-2.122h5.398z"/><path opacity=".567" d="M417.573 266.095c-.849-.546-1.516-1.334-2.001-2.395s-.728-2.303-.728-3.758.242-2.697.728-3.758 1.152-1.849 2.001-2.394 1.82-.818 2.911-.818 2.062.272 2.912.818 1.546 1.333 2.031 2.394.728 2.304.728 3.758-.242 2.698-.728 3.758-1.152 1.849-2.031 2.395c-.85.545-1.82.818-2.912.818s-2.062-.273-2.911-.818zm5.186-2.546c.546-.788.849-2 .849-3.576s-.273-2.789-.849-3.577-1.335-1.212-2.305-1.212a2.57 2.57 0 0 0-2.274 1.212c-.577.788-.85 2.001-.85 3.577s.273 2.788.85 3.576 1.334 1.212 2.274 1.212c1.001-.03 1.759-.424 2.305-1.212z"/><path opacity=".885" d="M437.588 266.034c-.849-.546-1.516-1.334-2.001-2.364s-.728-2.273-.728-3.698.242-2.667.728-3.697 1.152-1.818 2.001-2.364 1.789-.818 2.881-.818c1.062 0 2.032.273 2.881.818s1.516 1.334 2.002 2.364.727 2.273.727 3.697-.242 2.667-.727 3.698-1.153 1.818-2.002 2.364-1.819.818-2.881.818c-1.092 0-2.062-.273-2.881-.818zm5.125-2.546c.546-.788.819-1.97.819-3.546s-.273-2.758-.819-3.546a2.61 2.61 0 0 0-2.274-1.182c-.94 0-1.698.394-2.244 1.182s-.819 1.97-.819 3.546.273 2.758.819 3.546 1.304 1.182 2.244 1.182a2.61 2.61 0 0 0 2.274-1.182z"/><path opacity=".932" d="M463.062 253.335v13.244h-2.457v-11.183h-2.79v-2.061h5.247z"/><path opacity=".866" d="M477.618 265.821c-.819-.515-1.455-1.273-1.91-2.273s-.698-2.182-.698-3.576c0-1.364.243-2.576.698-3.576s1.122-1.758 1.91-2.273c.819-.515 1.729-.788 2.76-.788s1.971.273 2.79.788 1.455 1.273 1.941 2.273c.455 1 .697 2.182.697 3.576 0 1.364-.242 2.576-.697 3.576s-1.122 1.758-1.941 2.273-1.759.788-2.79.788a5.13 5.13 0 0 1-2.76-.788zm4.974-2.454c.546-.758.788-1.91.788-3.425s-.273-2.637-.788-3.425c-.546-.757-1.274-1.151-2.184-1.151s-1.637.394-2.183 1.151-.789 1.91-.789 3.425.273 2.637.789 3.425c.546.757 1.243 1.151 2.183 1.151.91 0 1.638-.394 2.184-1.151z"/><path opacity=".788" d="M497.694 265.64c-.789-.515-1.395-1.243-1.85-2.213s-.667-2.121-.667-3.455.212-2.485.667-3.455 1.061-1.697 1.85-2.212 1.668-.758 2.699-.758c1.001 0 1.91.243 2.699.758s1.425 1.243 1.88 2.212.667 2.122.667 3.455-.212 2.486-.667 3.455-1.092 1.698-1.88 2.213-1.698.757-2.699.757c-1.031 0-1.911-.242-2.699-.757zm4.791-2.364c.516-.728.789-1.849.789-3.304s-.273-2.576-.789-3.303-1.213-1.121-2.123-1.121a2.39 2.39 0 0 0-2.092 1.121c-.516.727-.788 1.849-.788 3.303s.272 2.576.788 3.304 1.213 1.121 2.092 1.121c.91-.03 1.608-.394 2.123-1.121z"/><path opacity=".47" d="M522.743 253.941v12.063h-2.244V255.82h-2.548v-1.879h4.792z"/><path opacity=".2" d="M542.636 254.153v11.578h-2.153v-9.79h-2.456v-1.818h4.609v.03z"/><path opacity=".762" d="M557.921 264.973c-.698-.455-1.243-1.091-1.638-1.97-.394-.849-.606-1.879-.606-3.061s.212-2.182.606-3.061c.395-.849.94-1.516 1.638-1.97s1.486-.667 2.365-.667 1.668.212 2.366.667 1.243 1.091 1.637 1.97c.394.848.607 1.879.607 3.061s-.213 2.182-.607 3.061c-.394.848-.94 1.515-1.637 1.97s-1.486.667-2.366.667-1.668-.243-2.365-.667zm4.245-2.091c.455-.667.698-1.637.698-2.91 0-1.303-.243-2.273-.698-2.909-.454-.667-1.091-.97-1.88-.97s-1.395.333-1.85.97c-.454.666-.697 1.636-.697 2.909 0 1.303.243 2.273.697 2.91.455.666 1.062.969 1.85.969s1.426-.333 1.88-.969z"/><path opacity=".518" d="M578.057 264.67c-.667-.424-1.183-1.031-1.547-1.849s-.576-1.758-.576-2.879.182-2.061.576-2.879c.364-.819.88-1.425 1.547-1.849s1.395-.636 2.244-.636c.819 0 1.577.212 2.244.636s1.183 1.03 1.547 1.849.576 1.758.576 2.879-.182 2.061-.576 2.879a4.27 4.27 0 0 1-1.547 1.849c-.667.424-1.395.636-2.244.636s-1.607-.212-2.244-.636zm3.973-1.97c.424-.606.636-1.546.636-2.758s-.212-2.122-.636-2.758c-.425-.606-1.032-.909-1.759-.909s-1.304.303-1.759.909c-.425.606-.637 1.546-.637 2.758s.212 2.152.637 2.758 1.001.909 1.759.909a1.89 1.89 0 0 0 1.759-.909z"/><path opacity=".868" d="M602.196 255.062v9.79h-1.819v-8.274h-2.063v-1.516h3.882z"/><path opacity=".595" d="M622.029 255.426v9.092h-1.698v-7.667h-1.911v-1.425h3.609z"/><path opacity=".244" d="M641.862 255.82v8.304h-1.547v-7h-1.758v-1.304h3.305z"/><path opacity=".99" d="M658.572 263.367c-.485-.303-.849-.758-1.122-1.334s-.394-1.272-.394-2.091c0-.788.121-1.485.394-2.091s.637-1.03 1.122-1.333 1.001-.455 1.607-.455 1.153.152 1.607.455c.486.303.85.757 1.122 1.333s.395 1.273.395 2.091c0 .788-.122 1.485-.395 2.091-.272.576-.636 1.031-1.122 1.334s-1 .455-1.607.455-1.152-.152-1.607-.455zm2.881-1.424c.303-.455.455-1.092.455-2.001 0-.879-.152-1.545-.455-2a1.43 1.43 0 0 0-1.274-.667c-.515 0-.94.212-1.274.667-.303.455-.454 1.091-.454 2 0 .879.151 1.546.454 2.001s.728.666 1.274.666.971-.212 1.274-.666z"/><path opacity=".321" d="M678.738 262.943c-.424-.273-.728-.667-.97-1.152-.243-.515-.364-1.121-.364-1.819s.121-1.303.364-1.818.576-.909.97-1.152a2.53 2.53 0 0 1 1.425-.394c.516 0 1.001.122 1.426.394s.758.667.97 1.152c.243.515.364 1.121.364 1.818s-.121 1.304-.364 1.819-.576.909-.97 1.152c-.425.272-.88.394-1.426.394a2.53 2.53 0 0 1-1.425-.394zm2.517-1.243c.273-.394.394-.97.394-1.728s-.151-1.363-.394-1.727c-.273-.394-.637-.576-1.122-.576a1.25 1.25 0 0 0-1.092.576c-.272.394-.394.97-.394 1.727s.122 1.364.394 1.728a1.25 1.25 0 0 0 1.092.576c.485 0 .849-.182 1.122-.576z"/><path opacity=".104" d="M698.905 262.549c-.364-.243-.637-.576-.849-1.001-.213-.454-.304-.969-.304-1.576s.091-1.121.304-1.576.485-.787.849-1c.364-.242.758-.333 1.213-.333a2.46 2.46 0 0 1 1.243.333c.364.243.637.576.849 1 .213.455.304.97.304 1.576s-.091 1.122-.304 1.576-.485.788-.849 1.001c-.364.242-.758.333-1.243.333-.455.03-.849-.091-1.213-.333zm2.183-1.092c.243-.333.364-.848.364-1.515s-.121-1.182-.364-1.515-.546-.515-.97-.515c-.394 0-.728.181-.971.515s-.364.848-.364 1.515.122 1.182.364 1.515.546.516.971.516.758-.182.97-.516z"/><path opacity=".599" d="M719.102 262.094c-.304-.182-.516-.455-.698-.818s-.242-.788-.242-1.304.091-.939.242-1.303c.182-.364.394-.636.698-.818s.637-.273 1-.273a1.91 1.91 0 0 1 1.001.273c.303.182.546.454.698.818.182.364.242.788.242 1.303s-.091.94-.242 1.304c-.182.363-.395.636-.698.818a1.91 1.91 0 0 1-1.001.273c-.363 0-.697-.091-1-.273zm1.789-.909c.182-.273.303-.697.303-1.243s-.091-.97-.303-1.243c-.182-.272-.455-.424-.789-.424s-.606.152-.788.424-.303.698-.303 1.243.091.97.303 1.243c.182.272.455.424.788.424s.607-.121.789-.424z"/><path opacity=".318" d="M739.299 261.639c-.243-.151-.425-.363-.546-.667-.122-.272-.212-.636-.212-1.03s.06-.727.212-1.03c.121-.273.303-.516.546-.667s.485-.212.788-.212a1.4 1.4 0 0 1 .789.212c.242.151.424.364.545.667.122.272.213.636.213 1.03s-.061.727-.213 1.03c-.121.273-.303.516-.545.667a1.4 1.4 0 0 1-.789.212c-.303 0-.576-.06-.788-.212zm1.395-.697c.151-.212.242-.545.242-.97s-.091-.757-.242-.969a.75.75 0 0 0-.637-.334c-.273 0-.455.121-.607.334s-.242.545-.242.969.091.758.242.97.364.334.607.334c.303-.031.485-.122.637-.334z"/><path opacity=".792" d="M759.496 261.154c-.182-.121-.304-.273-.395-.485s-.151-.454-.151-.727.06-.515.151-.727.243-.364.395-.485c.181-.122.363-.152.576-.152s.394.061.576.152c.182.121.303.272.394.485s.152.454.152.727-.061.515-.152.727a1.26 1.26 0 0 1-.394.485c-.182.121-.364.152-.576.152a.76.76 0 0 1-.576-.152zm1-.485c.122-.151.152-.394.152-.697s-.061-.545-.152-.697c-.121-.151-.273-.242-.455-.242s-.333.091-.454.242-.152.394-.152.697.061.546.152.697c.121.152.272.243.454.243.213 0 .364-.091.455-.243z"/><path opacity=".977" d="M780.359 259.185v1.576h-.303v-1.334h-.333v-.242h.636z"/><use href="#q" y="39.914" opacity=".461"/><path opacity=".214" d="M.959 280.005c0-.03 0-.03 0 0-.03-.03-.03-.061-.03-.061v-.03s0-.03.03-.03h.03.03l.03.03v.03.031s0 .03-.03.03h-.03s0 0-.03 0zm.061-.03v-.031-.03h-.03-.03v.03.031h.061z"/><path opacity=".143" d="M21.216 279.338v1.182h-.212v-1h-.243v-.182h.455z"/><path opacity=".299" d="M40.473 280.945c-.152-.091-.243-.212-.334-.394s-.121-.394-.121-.637.03-.454.121-.636.182-.303.334-.394.303-.152.485-.152.334.061.485.152.243.212.334.394.121.394.121.636-.03.455-.121.637-.182.303-.334.394-.303.151-.485.151a.84.84 0 0 1-.485-.151zm.849-.424c.091-.122.152-.334.152-.607s-.061-.454-.152-.606c-.091-.121-.212-.212-.394-.212-.152 0-.273.061-.394.212-.091.121-.152.334-.152.606s.061.455.152.607c.091.121.212.212.394.212s.303-.091.394-.212z"/><use href="#J" x="-339.557" y="239.576" opacity=".259"/><path opacity=".266" d="M79.957 281.914a1.67 1.67 0 0 1-.637-.788c-.152-.333-.243-.757-.243-1.212s.091-.879.243-1.212.364-.606.637-.788.576-.273.94-.273.667.091.94.273.485.424.667.788c.152.333.243.758.243 1.212s-.091.879-.243 1.212-.364.607-.667.788c-.273.182-.606.273-.94.273s-.667-.091-.94-.273zm1.698-.848c.182-.273.273-.637.273-1.152s-.091-.909-.273-1.152c-.182-.272-.424-.394-.728-.394s-.546.122-.728.394-.273.637-.273 1.152.091.909.273 1.152a.82.82 0 0 0 .728.394c.273 0 .546-.121.728-.394z"/><path opacity=".45" d="M101.943 277.217v5.394h-1.001v-4.546H99.79v-.848h2.153z"/><path opacity=".682" d="M122.11 276.792v6.274h-1.153v-5.273h-1.334v-.97h2.487v-.031z"/><path opacity=".872" d="M139.305 283.157c-.455-.303-.789-.697-1.062-1.273-.273-.545-.394-1.212-.394-1.97s.121-1.424.394-1.97.607-.97 1.062-1.273.97-.424 1.516-.424c.576 0 1.092.152 1.547.424a2.77 2.77 0 0 1 1.061 1.273c.273.546.394 1.213.394 1.97s-.121 1.425-.394 1.97c-.243.546-.606.97-1.061 1.273s-.971.424-1.547.424a2.85 2.85 0 0 1-1.516-.424zm2.729-1.364c.303-.424.455-1.061.455-1.879 0-.848-.152-1.455-.455-1.879s-.697-.636-1.213-.636a1.32 1.32 0 0 0-1.183.636c-.303.424-.455 1.061-.455 1.879 0 .849.152 1.455.455 1.879s.698.637 1.183.637c.516 0 .91-.212 1.213-.637z"/><path opacity=".448" d="M162.382 275.975v7.91h-1.486v-6.668h-1.667v-1.242h3.153z"/><path opacity=".383" d="M178.91 283.854c-.546-.364-.971-.879-1.304-1.546-.303-.666-.485-1.485-.485-2.394 0-.939.151-1.727.485-2.394.303-.667.758-1.182 1.304-1.546s1.183-.515 1.85-.515c.697 0 1.304.182 1.88.515.546.364.97.879 1.304 1.546.303.667.485 1.485.485 2.394 0 .94-.152 1.728-.485 2.394-.303.667-.758 1.182-1.304 1.546s-1.183.515-1.88.515c-.667.031-1.304-.151-1.85-.515zm3.336-1.637c.364-.515.546-1.272.546-2.303s-.182-1.788-.546-2.303-.849-.758-1.486-.758c-.607 0-1.092.243-1.456.758s-.546 1.273-.546 2.303.182 1.788.546 2.303a1.68 1.68 0 0 0 1.456.758c.637 0 1.122-.242 1.486-.758z"/><path opacity=".766" d="M202.625 275.187v9.486h-1.759v-8.001h-2.002v-1.485h3.761z"/><path opacity=".604" d="M222.731 274.883v10.093h-1.881v-8.547h-2.122v-1.576h4.003v.03z"/><path opacity=".591" d="M238.409 284.794c-.667-.425-1.213-1.061-1.607-1.91-.394-.818-.576-1.818-.576-2.97s.182-2.121.576-2.97c.394-.818.91-1.455 1.607-1.909.667-.424 1.456-.637 2.305-.637s1.637.213 2.305.637 1.213 1.061 1.607 1.909c.394.819.576 1.819.576 2.97s-.182 2.122-.576 2.97c-.394.819-.91 1.455-1.607 1.91-.668.424-1.456.636-2.305.636-.88 0-1.638-.212-2.305-.636zm4.094-2.031c.455-.636.667-1.576.667-2.849 0-1.242-.212-2.212-.667-2.849s-1.061-.939-1.82-.939-1.364.303-1.789.939c-.455.637-.667 1.576-.667 2.849 0 1.243.212 2.213.667 2.849a2.06 2.06 0 0 0 1.789.94c.789 0 1.395-.303 1.82-.94z"/><path opacity=".294" d="M258.242 285.036c-.697-.455-1.273-1.121-1.668-2s-.606-1.91-.606-3.122.212-2.243.606-3.121.971-1.546 1.668-2.001 1.516-.697 2.426-.697 1.698.243 2.426.697 1.274 1.122 1.699 2.001c.394.878.606 1.909.606 3.121s-.212 2.243-.606 3.122-.971 1.545-1.699 2-1.516.697-2.426.697-1.698-.242-2.426-.697zm4.337-2.121c.455-.667.697-1.667.697-2.971 0-1.333-.242-2.303-.697-2.97s-1.092-1-1.911-1c-.788 0-1.425.334-1.88 1s-.697 1.667-.697 2.97c0 1.334.242 2.304.697 2.971s1.092 1 1.88 1c.819-.031 1.456-.364 1.911-1z"/><path opacity=".384" d="M282.988 274.035v11.728h-2.184v-9.91h-2.487v-1.818h4.671z"/><use href="#r" x="19.954" y="39.914" opacity=".476"/><path opacity=".382" d="M323.109 273.671v12.517h-2.335v-10.577h-2.639v-1.94h4.974z"/><path opacity=".526" d="M337.816 285.733c-.818-.515-1.455-1.273-1.91-2.273s-.698-2.182-.698-3.546.243-2.546.698-3.546 1.092-1.758 1.91-2.273 1.729-.788 2.76-.788 1.941.273 2.76.788 1.455 1.273 1.91 2.273.698 2.182.698 3.546-.243 2.546-.698 3.546-1.091 1.758-1.91 2.273-1.729.788-2.76.788-1.941-.243-2.76-.788zm4.944-2.425c.545-.757.788-1.879.788-3.394s-.273-2.637-.788-3.394c-.546-.758-1.244-1.152-2.184-1.152-.91 0-1.637.394-2.153 1.152-.546.757-.788 1.879-.788 3.394s.272 2.637.788 3.394c.546.758 1.243 1.152 2.153 1.152s1.638-.394 2.184-1.152z"/><path opacity=".793" d="M357.771 285.824c-.819-.515-1.455-1.303-1.941-2.303s-.697-2.213-.697-3.607.242-2.576.697-3.606c.486-1.001 1.122-1.789 1.941-2.304s1.759-.788 2.79-.788 1.971.273 2.79.788 1.486 1.303 1.941 2.304c.485 1 .697 2.212.697 3.606s-.242 2.576-.697 3.607c-.485 1-1.122 1.788-1.941 2.303s-1.759.788-2.79.788c-1.061 0-1.971-.273-2.79-.788zm4.974-2.455c.545-.758.818-1.909.818-3.425s-.273-2.667-.818-3.424-1.274-1.152-2.214-1.152c-.91 0-1.638.394-2.184 1.152s-.818 1.909-.818 3.424.272 2.667.818 3.425 1.274 1.152 2.184 1.152c.94 0 1.668-.394 2.214-1.152z"/><path opacity=".365" d="M383.154 273.338v13.153h-2.457v-11.092h-2.79v-2.061h5.247z"/><path opacity=".315" d="M403.138 273.307v13.244h-2.456v-11.183h-2.79v-2.061h5.246z"/><path opacity=".914" d="M417.664 285.885c-.819-.546-1.486-1.304-1.941-2.334s-.727-2.243-.727-3.637.242-2.606.727-3.637 1.122-1.788 1.941-2.333 1.759-.788 2.821-.788 2.001.273 2.82.788c.819.545 1.486 1.303 1.971 2.333s.728 2.243.728 3.637-.243 2.607-.728 3.637-1.122 1.788-1.971 2.334c-.819.545-1.789.788-2.82.788-1.062 0-2.002-.243-2.821-.788zm5.034-2.486c.546-.788.819-1.939.819-3.485s-.273-2.697-.819-3.485-1.273-1.152-2.213-1.152-1.668.394-2.214 1.152c-.546.788-.819 1.94-.819 3.485s.273 2.697.819 3.485 1.273 1.152 2.214 1.152 1.667-.364 2.213-1.152z"/><path opacity=".598" d="M437.649 285.824c-.819-.515-1.456-1.303-1.941-2.303s-.697-2.213-.697-3.607.242-2.576.697-3.606c.485-1.001 1.122-1.789 1.941-2.304s1.759-.788 2.79-.788 1.971.273 2.79.788 1.486 1.303 1.941 2.304c.485 1 .697 2.212.697 3.606s-.242 2.576-.697 3.607c-.485 1-1.122 1.788-1.941 2.303s-1.759.788-2.79.788-1.971-.273-2.79-.788zm5.004-2.455c.546-.758.819-1.909.819-3.425s-.273-2.667-.819-3.424-1.274-1.152-2.214-1.152c-.91 0-1.638.394-2.183 1.152s-.819 1.909-.819 3.424.273 2.667.819 3.425 1.273 1.152 2.183 1.152c.94 0 1.668-.394 2.214-1.152z"/><path opacity=".466" d="M457.664 285.733c-.819-.515-1.456-1.273-1.911-2.273s-.697-2.182-.697-3.546.242-2.546.697-3.546 1.092-1.758 1.911-2.273 1.728-.788 2.759-.788 1.941.273 2.76.788 1.456 1.273 1.91 2.273.698 2.182.698 3.546-.243 2.546-.698 3.546-1.091 1.758-1.91 2.273-1.729.788-2.76.788-1.941-.243-2.759-.788zm4.943-2.425c.546-.757.788-1.879.788-3.394s-.273-2.637-.788-3.394c-.546-.758-1.244-1.152-2.184-1.152-.909 0-1.637.394-2.153 1.152-.546.757-.788 1.879-.788 3.394s.273 2.637.788 3.394c.546.758 1.244 1.152 2.153 1.152s1.638-.394 2.184-1.152z"/><path opacity=".864" d="M477.709 285.612c-.788-.515-1.395-1.243-1.849-2.212s-.668-2.122-.668-3.455.213-2.486.668-3.455 1.061-1.698 1.849-2.213 1.668-.757 2.699-.757c1.001 0 1.911.242 2.699.757s1.426 1.243 1.881 2.213.667 2.121.667 3.455-.213 2.485-.667 3.455-1.092 1.697-1.881 2.212-1.698.758-2.699.758-1.91-.273-2.699-.758zm4.822-2.394c.516-.728.789-1.849.789-3.304s-.273-2.576-.789-3.303-1.213-1.122-2.123-1.122a2.39 2.39 0 0 0-2.092 1.122c-.516.727-.789 1.849-.789 3.303s.273 2.576.789 3.304 1.213 1.121 2.092 1.121a2.44 2.44 0 0 0 2.123-1.121z"/><path opacity=".872" d="M497.785 285.43c-.758-.485-1.365-1.212-1.789-2.152s-.667-2.061-.667-3.364.212-2.424.667-3.364c.424-.939 1.031-1.667 1.789-2.152s1.638-.727 2.608-.727 1.85.242 2.608.727 1.365 1.213 1.82 2.152c.424.94.667 2.061.667 3.364s-.213 2.425-.667 3.364c-.425.94-1.032 1.667-1.82 2.152-.758.485-1.638.727-2.608.727-1.001 0-1.85-.242-2.608-.727zm4.64-2.303c.515-.728.758-1.788.758-3.213s-.243-2.485-.758-3.212-1.183-1.061-2.062-1.061a2.37 2.37 0 0 0-2.032 1.061c-.516.727-.758 1.788-.758 3.212s.242 2.485.758 3.213 1.183 1.06 2.032 1.06c.879 0 1.577-.333 2.062-1.06z"/><path opacity=".187" d="M517.83 285.248c-.728-.485-1.334-1.182-1.759-2.091s-.636-2-.636-3.243.212-2.333.636-3.242 1.001-1.607 1.759-2.092c.728-.485 1.577-.727 2.517-.727s1.79.242 2.517.727c.759.485 1.335 1.182 1.759 2.092s.637 2 .637 3.242-.212 2.334-.637 3.243-1 1.606-1.759 2.091-1.577.728-2.517.728c-.94-.031-1.789-.243-2.517-.728zm4.519-2.212c.485-.697.728-1.728.728-3.091s-.243-2.425-.728-3.092c-.485-.697-1.153-1.03-2.002-1.03-.818 0-1.486.333-1.971 1.03s-.728 1.728-.728 3.092.243 2.424.728 3.091c.485.697 1.153 1.03 1.971 1.03.849 0 1.517-.363 2.002-1.03z"/><path opacity=".538" d="M537.906 285.036c-.698-.455-1.274-1.121-1.668-2s-.607-1.91-.607-3.122.213-2.243.607-3.121.97-1.546 1.668-2.001 1.516-.697 2.426-.697 1.698.243 2.426.697 1.274 1.122 1.698 2.001c.394.878.607 1.909.607 3.121s-.213 2.243-.607 3.122-.97 1.545-1.698 2-1.516.697-2.426.697-1.729-.242-2.426-.697zm4.336-2.121c.455-.667.698-1.667.698-2.971 0-1.333-.243-2.303-.698-2.97a2.18 2.18 0 0 0-1.91-1c-.789 0-1.425.334-1.88 1s-.698 1.667-.698 2.97c0 1.334.243 2.304.698 2.971s1.091 1 1.88 1c.788-.031 1.425-.364 1.91-1z"/><path opacity=".298" d="M558.012 284.794c-.668-.425-1.213-1.061-1.608-1.91-.394-.818-.576-1.818-.576-2.97s.182-2.121.576-2.97c.395-.818.91-1.455 1.608-1.909.667-.424 1.455-.637 2.304-.637s1.638.213 2.305.637 1.213 1.061 1.607 1.909c.395.819.577 1.819.577 2.97s-.182 2.122-.577 2.97c-.394.819-.909 1.455-1.607 1.91-.667.424-1.456.636-2.305.636-.879 0-1.637-.212-2.304-.636zm4.094-2.031c.454-.636.667-1.576.667-2.849 0-1.242-.213-2.212-.667-2.849s-1.062-.939-1.82-.939-1.365.303-1.789.939c-.455.637-.667 1.576-.667 2.849 0 1.243.212 2.213.667 2.849a2.06 2.06 0 0 0 1.789.94c.788 0 1.395-.303 1.82-.94z"/><path opacity=".83" d="M582.303 274.883v10.093h-1.88v-8.547H578.3v-1.576h4.003v.03z"/><use href="#V" x="219.709" y="159.717" opacity=".915"/><path opacity=".578" d="M618.36 283.884c-.546-.363-1.001-.879-1.304-1.545s-.485-1.485-.485-2.425.151-1.758.485-2.424c.303-.667.758-1.213 1.304-1.546.546-.364 1.183-.546 1.88-.546s1.334.182 1.88.546 1.001.879 1.304 1.546.486 1.485.486 2.424-.152 1.758-.486 2.425c-.303.666-.758 1.212-1.304 1.545-.546.364-1.182.546-1.88.546-.728 0-1.334-.182-1.88-.546zm3.366-1.636c.364-.515.546-1.303.546-2.304 0-1.03-.182-1.788-.546-2.303s-.849-.788-1.486-.788c-.606 0-1.122.273-1.486.788s-.546 1.303-.546 2.303c0 1.031.182 1.789.546 2.304s.849.788 1.486.788c.607-.031 1.122-.273 1.486-.788z"/><path opacity=".117" d="M641.801 275.914v7.97h-1.486v-6.728h-1.698v-1.242h3.184z"/><path opacity=".837" d="M661.605 276.308v7.213h-1.335v-6.092h-1.516v-1.121h2.851z"/><use href="#u" opacity=".133"/><path opacity=".797" d="M701.21 277.217v5.394h-1.001v-4.546h-1.152v-.848h2.153z"/><use href="#v" opacity=".524"/><path opacity=".685" d="M739.329 281.49c-.212-.152-.394-.333-.515-.606s-.182-.576-.182-.94.06-.697.182-.939c.121-.273.303-.485.515-.606.213-.152.455-.212.728-.212s.516.06.728.212.394.333.515.606.182.576.182.939-.06.697-.182.94c-.121.273-.303.485-.515.606-.212.152-.455.212-.728.212-.242 0-.485-.091-.728-.212zm1.335-.667c.151-.212.212-.515.212-.909s-.061-.697-.212-.909-.334-.303-.577-.303-.424.091-.576.303-.212.515-.212.909.061.697.212.909.334.303.576.303.425-.091.577-.303z"/><use href="#U" x="659.19" y="159.686" opacity=".707"/><use href="#C" x="319.603" y="259.517" opacity=".958"/><path opacity=".311" d="M799.95 280.035l-.03-.03v-.061-.06c0-.03.03-.03.03-.03h.061.061l.03.03v.06.061c0 .03-.03.03-.03.03h-.061-.061zm.091-.06v-.061-.06l-.03-.031c-.03 0-.03 0-.03.031v.06.061l.03.03c.03 0 .03 0 .03-.03z"/><path opacity=".957" d="M20.822 300.25c-.061-.03-.091-.091-.121-.152s-.03-.121-.03-.212 0-.151.03-.212.061-.121.121-.151.091-.061.182-.061.121.03.182.061.091.09.121.151.03.121.03.212 0 .152-.03.212-.061.122-.121.152-.091.061-.182.061-.152-.031-.182-.061zm.303-.152c.03-.06.061-.121.061-.212s-.03-.151-.061-.212-.091-.061-.121-.061c-.061 0-.091.031-.121.061-.03.061-.061.121-.061.212s.03.152.061.212.091.061.121.061.061-.03.121-.061z"/><use href="#F" x="-219.74" y="259.517" opacity=".134"/><path opacity=".516" d="M60.306 301.19c-.182-.122-.334-.303-.425-.516s-.152-.485-.152-.788a2.03 2.03 0 0 1 .152-.788c.091-.212.243-.394.425-.515s.394-.182.607-.182c.243 0 .425.061.637.182.182.121.334.303.425.515a2.03 2.03 0 0 1 .152.788c0 .303-.061.576-.152.788s-.243.394-.425.516-.394.181-.637.181c-.212 0-.425-.06-.607-.181zm1.122-.546c.121-.182.182-.424.182-.758s-.061-.606-.182-.757c-.121-.182-.273-.243-.485-.243s-.364.091-.485.243c-.121.182-.182.424-.182.757s.061.607.182.758c.121.182.273.243.485.243.182.03.364-.061.485-.243z"/><path opacity=".668" d="M81.686 297.917v3.909h-.728v-3.303h-.819v-.606h1.547z"/><path opacity=".369" d="M101.852 297.432v4.94h-.909v-4.152h-1.031v-.758h1.94v-.03z"/><path opacity=".386" d="M122.019 296.977v5.789h-1.092v-4.88h-1.213v-.909h2.305z"/><path opacity=".546" d="M139.395 302.887c-.424-.273-.758-.667-1-1.182s-.364-1.121-.364-1.849c0-.697.121-1.333.364-1.848s.576-.91 1-1.182.88-.394 1.426-.394a2.52 2.52 0 0 1 1.425.394c.425.272.758.666 1.001 1.182s.364 1.121.364 1.848c0 .697-.122 1.334-.364 1.849s-.576.909-1.001 1.182-.91.394-1.425.394c-.516.03-1.001-.121-1.426-.394zm2.548-1.243c.273-.394.424-.969.424-1.757s-.151-1.364-.424-1.758-.637-.576-1.122-.576c-.455 0-.849.182-1.122.576s-.425.97-.425 1.758.152 1.363.425 1.757.637.576 1.122.576.849-.182 1.122-.576z"/><path opacity=".308" d="M162.291 296.159v7.425h-1.395v-6.274h-1.577v-1.151h2.972z"/><use href="#T" x="-239.694" y="199.631" opacity=".509"/><path opacity=".898" d="M202.533 295.431v8.91h-1.667v-7.546h-1.881v-1.394h3.548v.03z"/><path opacity=".801" d="M218.667 304.25c-.607-.394-1.092-.969-1.425-1.697-.364-.757-.516-1.636-.516-2.667s.182-1.909.516-2.667c.364-.757.818-1.303 1.425-1.697s1.304-.576 2.062-.576 1.456.182 2.062.576 1.092.97 1.426 1.697c.363.758.515 1.637.515 2.667s-.182 1.91-.515 2.667-.819 1.303-1.426 1.697-1.304.576-2.062.576c-.788 0-1.456-.182-2.062-.576zm3.7-1.818c.394-.576.606-1.424.606-2.546s-.212-1.97-.606-2.545-.94-.849-1.638-.849c-.667 0-1.213.273-1.607.849s-.607 1.424-.607 2.545.213 1.97.607 2.546.94.849 1.607.849 1.213-.273 1.638-.849z"/><use href="#c" x="-239.725" y="159.717" opacity=".311"/><path opacity=".736" d="M262.821 294.522v10.729h-2.001v-9.062h-2.275v-1.667h4.276z"/><path opacity=".528" d="M278.257 304.947c-.698-.454-1.274-1.121-1.668-1.97-.394-.878-.607-1.909-.607-3.091s.213-2.212.607-3.091.97-1.515 1.668-1.97 1.516-.667 2.396-.667c.909 0 1.698.212 2.395.667s1.274 1.121 1.668 1.97c.394.879.607 1.909.607 3.091s-.213 2.213-.607 3.091-.97 1.516-1.668 1.97-1.516.667-2.395.667c-.91.03-1.699-.212-2.396-.667zm4.276-2.091c.455-.666.697-1.636.697-2.97 0-1.303-.242-2.303-.697-2.97a2.18 2.18 0 0 0-1.911-1c-.788 0-1.425.333-1.88 1s-.697 1.637-.697 2.97c0 1.303.242 2.304.697 2.97s1.092 1 1.88 1c.819-.03 1.456-.363 1.911-1z"/><path opacity=".962" d="M298.151 305.13c-.728-.455-1.304-1.152-1.729-2.061s-.637-1.97-.637-3.213.212-2.303.637-3.212 1.001-1.576 1.729-2.061c.727-.455 1.546-.697 2.486-.697s1.759.242 2.487.697 1.304 1.151 1.729 2.061.636 1.97.636 3.212-.212 2.304-.636 3.213-1.001 1.576-1.729 2.061c-.728.454-1.577.697-2.487.697-.94.03-1.759-.213-2.486-.697zm4.427-2.183c.485-.697.728-1.697.728-3.06s-.243-2.364-.728-3.061a2.24 2.24 0 0 0-1.971-1.031c-.819 0-1.456.333-1.941 1.031s-.728 1.697-.728 3.061.243 2.363.728 3.06 1.122 1.031 1.941 1.031a2.24 2.24 0 0 0 1.971-1.031z"/><path opacity=".665" d="M318.044 305.312c-.758-.485-1.334-1.182-1.789-2.122-.425-.939-.637-2.03-.637-3.303s.212-2.395.637-3.304c.425-.939 1.031-1.636 1.789-2.121s1.607-.728 2.578-.728 1.819.243 2.578.728 1.364 1.182 1.789 2.121.637 2.031.637 3.304-.213 2.394-.637 3.303c-.425.94-1.031 1.637-1.789 2.122s-1.608.727-2.578.727-1.85-.243-2.578-.727zm4.579-2.273c.486-.697.759-1.758.759-3.152s-.243-2.455-.759-3.152a2.37 2.37 0 0 0-2.031-1.061 2.32 2.32 0 0 0-2.002 1.061c-.485.697-.758 1.758-.758 3.152s.243 2.455.758 3.152c.485.697 1.152 1.06 2.002 1.06s1.546-.333 2.031-1.06z"/><path opacity=".642" d="M337.968 305.432c-.758-.485-1.364-1.212-1.819-2.151s-.668-2.061-.668-3.364.213-2.425.668-3.365 1.061-1.666 1.819-2.151 1.638-.728 2.608-.728 1.85.243 2.639.728 1.394 1.212 1.819 2.151c.455.94.667 2.061.667 3.365s-.212 2.424-.667 3.364-1.061 1.666-1.819 2.151c-.789.485-1.638.728-2.639.728-.97 0-1.85-.243-2.608-.728zm4.67-2.333c.516-.728.758-1.788.758-3.243 0-1.425-.242-2.516-.758-3.213-.515-.727-1.182-1.091-2.062-1.091-.849 0-1.546.364-2.062 1.091s-.758 1.788-.758 3.213.242 2.515.758 3.243 1.183 1.091 2.062 1.091 1.547-.364 2.062-1.091z"/><use href="#p" x="59.924" y="79.858" opacity=".598"/><path opacity=".344" d="M377.847 305.554c-.789-.515-1.395-1.243-1.85-2.213s-.667-2.121-.667-3.455.212-2.485.667-3.455 1.061-1.697 1.85-2.212 1.668-.758 2.699-.758c1 0 1.91.243 2.699.758s1.425 1.243 1.88 2.212.667 2.122.667 3.455-.212 2.486-.667 3.455-1.092 1.698-1.88 2.213-1.699.758-2.699.758c-1.031 0-1.911-.243-2.699-.758zm4.791-2.364c.516-.727.789-1.849.789-3.304s-.273-2.576-.789-3.303-1.213-1.121-2.123-1.121c-.879 0-1.577.363-2.092 1.121-.516.727-.789 1.849-.789 3.303s.273 2.577.789 3.304 1.213 1.121 2.092 1.121c.91 0 1.608-.363 2.123-1.121z"/><path opacity=".63" d="M397.801 305.615c-.789-.516-1.425-1.243-1.88-2.243-.455-.97-.698-2.152-.698-3.485s.243-2.516.698-3.486 1.091-1.727 1.88-2.242 1.698-.758 2.699-.758 1.91.242 2.699.758 1.425 1.242 1.88 2.242c.455.97.698 2.152.698 3.486s-.243 2.515-.698 3.485-1.092 1.727-1.88 2.243-1.698.757-2.699.757a5.1 5.1 0 0 1-2.699-.757zm4.822-2.395c.515-.757.788-1.848.788-3.333s-.273-2.577-.788-3.334-1.244-1.122-2.123-1.122a2.44 2.44 0 0 0-2.123 1.122c-.516.757-.788 1.849-.788 3.334s.272 2.576.788 3.333 1.213 1.122 2.123 1.122 1.607-.394 2.123-1.122z"/><path opacity=".947" d="M422.971 293.613v12.517h-2.335v-10.578h-2.638v-1.939h4.973z"/><path opacity=".661" d="M442.926 293.673v12.456h-2.305v-10.516h-2.639v-1.94h4.944z"/><path opacity=".614" d="M462.85 293.765v12.213h-2.275v-10.304h-2.577v-1.909h4.852z"/><path opacity=".194" d="M482.773 293.886v11.971h-2.213v-10.123h-2.548v-1.879h4.761v.031z"/><path opacity=".424" d="M502.697 294.037v11.668h-2.153v-9.849h-2.456v-1.819h4.609z"/><path opacity=".686" d="M522.591 294.28v11.183h-2.092v-9.456h-2.366v-1.757h4.458v.03z"/><use href="#b" x="139.832" y="159.717" opacity=".379"/><path opacity=".34" d="M558.103 304.523c-.637-.424-1.153-1.03-1.517-1.818s-.545-1.728-.545-2.849c0-1.091.181-2.031.545-2.849.364-.788.88-1.394 1.517-1.818s1.364-.637 2.213-.637a4.01 4.01 0 0 1 2.214.637c.637.424 1.153 1.03 1.547 1.818.364.788.546 1.728.546 2.849 0 1.091-.182 2.031-.546 2.849-.364.788-.88 1.394-1.547 1.818-.637.424-1.395.637-2.214.637-.849 0-1.576-.213-2.213-.637zm3.942-1.939c.425-.607.637-1.516.637-2.698 0-1.212-.212-2.091-.637-2.697s-1.001-.909-1.729-.909a2 2 0 0 0-1.728.909c-.425.606-.637 1.515-.637 2.697 0 1.213.212 2.091.637 2.698a2 2 0 0 0 1.728.909c.728 0 1.304-.303 1.729-.909z"/><path opacity=".422" d="M578.208 304.25c-.606-.394-1.091-.969-1.425-1.697-.364-.757-.515-1.636-.515-2.667s.182-1.909.515-2.667c.364-.757.819-1.303 1.425-1.697s1.304-.576 2.063-.576 1.455.182 2.062.576 1.091.97 1.425 1.697c.364.758.516 1.637.516 2.667s-.182 1.91-.516 2.667-.819 1.303-1.425 1.697-1.304.576-2.062.576-1.456-.182-2.063-.576zm3.7-1.818c.394-.576.607-1.424.607-2.546s-.213-1.97-.607-2.545a1.86 1.86 0 0 0-1.637-.849c-.668 0-1.213.273-1.608.849s-.606 1.424-.606 2.545.212 1.97.606 2.546.94.849 1.608.849a1.86 1.86 0 0 0 1.637-.849z"/><use href="#X" x="119.847" y="179.659" opacity=".415"/><path opacity=".613" d="M621.878 295.734v8.304h-1.547v-7h-1.759v-1.304h3.306z"/><path opacity=".297" d="M638.587 303.281c-.485-.303-.849-.758-1.122-1.334s-.394-1.272-.394-2.091c0-.788.121-1.485.394-2.091.273-.576.637-1.03 1.122-1.333s1.001-.455 1.607-.455 1.153.152 1.608.455c.485.303.849.757 1.122 1.333s.394 1.273.394 2.091c0 .788-.121 1.485-.394 2.091-.273.576-.637 1.031-1.122 1.334a2.93 2.93 0 0 1-1.608.455c-.606 0-1.122-.152-1.607-.455zm2.881-1.424c.303-.455.455-1.091.455-2.001 0-.879-.152-1.545-.455-2a1.43 1.43 0 0 0-1.274-.667c-.515 0-.94.212-1.273.667-.304.455-.455 1.091-.455 2 0 .879.151 1.546.455 2.001s.728.666 1.273.666.971-.212 1.274-.666z"/><path opacity=".197" d="M658.724 302.948c-.425-.273-.759-.667-1.001-1.182s-.364-1.152-.364-1.849c0-.728.121-1.334.364-1.849s.576-.909 1.001-1.182.909-.394 1.455-.394 1.031.121 1.456.394.758.667 1.001 1.182.363 1.152.363 1.849c0 .727-.121 1.333-.363 1.849s-.577.909-1.001 1.182-.91.394-1.456.394-1.031-.122-1.455-.394zm2.608-1.273c.272-.394.424-1 .424-1.788s-.152-1.395-.424-1.789-.668-.606-1.153-.606-.849.212-1.122.606-.424 1.001-.424 1.789.151 1.394.424 1.788.667.606 1.122.606a1.47 1.47 0 0 0 1.153-.606z"/><path opacity=".578" d="M678.89 302.554a2.47 2.47 0 0 1-.88-1.031c-.212-.454-.333-1-.333-1.636s.121-1.182.333-1.637a2.46 2.46 0 0 1 .88-1.03c.364-.243.788-.364 1.273-.364.455 0 .88.121 1.274.364a2.46 2.46 0 0 1 .88 1.03c.212.455.333 1 .333 1.637s-.121 1.182-.333 1.636a2.47 2.47 0 0 1-.88 1.031c-.364.242-.788.363-1.274.363s-.909-.121-1.273-.363zm2.274-1.122c.243-.333.364-.879.364-1.545 0-.697-.121-1.213-.364-1.546a1.18 1.18 0 0 0-1.001-.515c-.424 0-.727.182-1 .515-.243.333-.364.879-.364 1.546 0 .697.121 1.212.364 1.545a1.18 1.18 0 0 0 1 .515c.425 0 .728-.151 1.001-.515z"/><path opacity=".759" d="M701.119 297.371v5.001h-.94v-4.243h-1.062v-.788h2.002v.03z"/><path opacity=".305" d="M720.891 297.886v4.001h-.728v-3.364h-.849v-.637h1.577z"/><path opacity=".901" d="M739.45 301.22c-.182-.121-.333-.303-.455-.515-.121-.243-.151-.515-.151-.819s.06-.606.151-.818c.122-.242.243-.394.455-.515.182-.121.394-.182.637-.182s.455.061.637.182.334.303.455.515c.121.243.151.515.151.818s-.06.607-.151.819c-.121.242-.243.394-.455.515-.182.121-.394.182-.637.182s-.455-.061-.637-.182zm1.122-.546c.122-.181.182-.424.182-.788 0-.333-.06-.606-.182-.788s-.303-.272-.515-.272-.364.091-.485.272-.182.425-.182.788.06.607.182.788.303.273.485.273a.56.56 0 0 0 .515-.273z"/><path opacity=".333" d="M760.436 298.917v1.969h-.364v-1.666h-.425v-.303h.789z"/><use href="#B" x="479.389" y="279.489" opacity=".903"/><path opacity=".55" d="M20.913 319.949l-.03-.03v-.06-.061c0-.03.03-.03.03-.03h.061.061l.03.03v.061.06c0 .03-.03.03-.03.03h-.061c0 .031-.03 0-.061 0zm.091-.03v-.06-.061l-.03-.03c-.03 0-.03 0-.03.03v.061.06l.03.03.03-.03z"/><path opacity=".997" d="M40.686 320.404c-.091-.06-.152-.121-.182-.212a1.09 1.09 0 0 1-.061-.333 1.09 1.09 0 0 1 .061-.334c.03-.091.121-.182.182-.212.091-.061.182-.091.273-.091s.182.03.273.091.152.121.182.212a1.09 1.09 0 0 1 .061.334 1.09 1.09 0 0 1-.061.333c-.03.091-.121.182-.182.212-.091.061-.182.091-.273.091s-.182-.03-.273-.091zm.485-.212c.061-.061.091-.182.091-.333s-.03-.243-.091-.334c-.061-.06-.121-.121-.212-.121s-.152.03-.212.121c-.061.061-.091.182-.091.334s.03.242.091.333c.061.061.121.121.212.121.091-.03.152-.06.212-.121z"/><use href="#G" x="-219.741" y="279.459" opacity=".636"/><path opacity=".609" d="M80.2 321.344c-.212-.121-.364-.334-.485-.576s-.182-.545-.182-.909.061-.667.182-.909.273-.455.485-.576.455-.212.698-.212c.273 0 .485.06.697.212.212.121.364.333.485.576s.182.545.182.909-.061.667-.182.909-.273.455-.485.576-.455.212-.697.212a1.71 1.71 0 0 1-.698-.212zm1.274-.637c.121-.181.212-.485.212-.879s-.061-.666-.212-.878c-.121-.182-.334-.303-.546-.303-.243 0-.425.09-.546.303-.121.181-.212.485-.212.878s.061.667.212.879c.121.182.334.303.546.303a.64.64 0 0 0 .546-.303z"/><path opacity=".523" d="M101.731 317.737v4.213h-.789v-3.576h-.879v-.667h1.668v.03z"/><use href="#f" x="-539.343" y="179.659" opacity=".548"/><path opacity=".102" d="M142.034 316.828v6.031h-1.122v-5.091h-1.274v-.94h2.396z"/><path opacity=".259" d="M159.35 322.95c-.425-.273-.758-.667-1.001-1.213-.242-.515-.364-1.151-.364-1.879s.122-1.363.364-1.879.576-.939 1.001-1.212.91-.424 1.456-.424a2.64 2.64 0 0 1 1.455.424c.425.273.758.667 1.031 1.212.243.516.364 1.152.364 1.879s-.121 1.364-.364 1.879-.576.94-1.031 1.213c-.424.272-.909.424-1.455.424-.546-.03-1.031-.152-1.456-.424zm2.608-1.304c.273-.394.425-1 .425-1.788s-.152-1.394-.425-1.788-.667-.606-1.152-.606-.849.212-1.153.606c-.273.394-.424 1-.424 1.788s.151 1.394.424 1.788.667.607 1.153.607.879-.213 1.152-.607z"/><use href="#t" x="-479.419" y="79.828" opacity=".5"/><path opacity=".674" d="M198.986 323.586c-.516-.333-.91-.818-1.213-1.454s-.455-1.394-.455-2.273.151-1.637.455-2.273.697-1.122 1.213-1.455 1.092-.485 1.759-.485 1.243.152 1.759.485a3.21 3.21 0 0 1 1.213 1.455c.303.636.454 1.394.454 2.273s-.151 1.636-.454 2.273-.698 1.121-1.213 1.454-1.122.485-1.759.485c-.667 0-1.244-.151-1.759-.485zm3.154-1.576c.333-.484.515-1.212.515-2.182s-.182-1.697-.515-2.182a1.62 1.62 0 0 0-1.395-.727c-.576 0-1.031.242-1.395.727-.334.485-.516 1.212-.516 2.182s.182 1.698.516 2.182.788.728 1.395.728 1.061-.243 1.395-.728z"/><path opacity=".164" d="M222.518 315.373v8.91h-1.668v-7.546h-1.88v-1.394h3.548v.03z"/><path opacity=".89" d="M238.682 324.132c-.607-.394-1.061-.939-1.395-1.667s-.516-1.606-.516-2.606.182-1.879.516-2.607.819-1.303 1.395-1.666c.607-.394 1.274-.576 2.032-.576s1.425.182 2.032.576 1.061.939 1.425 1.666c.334.728.515 1.607.515 2.607s-.181 1.879-.515 2.606-.819 1.303-1.425 1.667c-.607.394-1.274.576-2.032.576-.789 0-1.456-.182-2.032-.576zm3.609-1.788c.394-.546.576-1.394.576-2.515s-.182-1.94-.576-2.516c-.394-.545-.94-.849-1.608-.849s-1.213.273-1.576.849c-.395.546-.577 1.394-.577 2.516s.182 1.939.577 2.515c.394.546.909.849 1.576.849a1.81 1.81 0 0 0 1.608-.849z"/><path opacity=".611" d="M262.669 314.828v10.031h-1.849v-8.455h-2.123v-1.546h3.972v-.03z"/><path opacity=".917" d="M282.715 314.646v10.426h-1.941v-8.789h-2.214v-1.637h4.155z"/><path opacity=".86" d="M298.302 324.738c-.667-.424-1.213-1.061-1.607-1.909s-.576-1.849-.576-3.001.182-2.151.576-3 .94-1.485 1.607-1.909 1.456-.667 2.305-.667c.879 0 1.637.212 2.335.667.697.424 1.213 1.06 1.607 1.909s.576 1.849.576 3-.182 2.152-.576 3.001-.94 1.485-1.607 1.909a4.38 4.38 0 0 1-2.335.667c-.849 0-1.607-.212-2.305-.667zm4.155-2.03c.455-.637.667-1.576.667-2.849s-.212-2.213-.667-2.849-1.062-.97-1.82-.97-1.364.333-1.819.97-.668 1.576-.668 2.849.213 2.212.668 2.849 1.061.969 1.819.969c.758-.03 1.365-.333 1.82-.969z"/><path opacity=".575" d="M318.196 324.92c-.698-.455-1.274-1.121-1.668-1.97-.394-.879-.607-1.909-.607-3.091s.213-2.213.607-3.091.97-1.516 1.668-1.97 1.516-.667 2.396-.667c.909 0 1.698.212 2.395.667s1.274 1.121 1.668 1.97c.394.878.607 1.909.607 3.091s-.213 2.212-.607 3.091-.97 1.515-1.668 1.97-1.516.667-2.395.667a4.09 4.09 0 0 1-2.396-.667zm4.306-2.121c.455-.667.698-1.637.698-2.97 0-1.304-.243-2.304-.698-2.971s-1.092-1-1.91-1c-.789 0-1.426.334-1.881 1s-.697 1.637-.697 2.971c0 1.303.242 2.303.697 2.97s1.092 1 1.881 1c.818 0 1.425-.334 1.91-1z"/><path opacity=".285" d="M338.12 325.041c-.728-.455-1.273-1.152-1.698-2.031s-.607-1.939-.607-3.151.213-2.273.607-3.152c.425-.879.97-1.576 1.698-2.031a4.55 4.55 0 0 1 2.457-.697 4.55 4.55 0 0 1 2.456.697c.728.455 1.304 1.152 1.698 2.031.425.879.607 1.939.607 3.152s-.213 2.273-.607 3.151c-.424.879-.97 1.576-1.698 2.031a4.55 4.55 0 0 1-2.456.697 4.55 4.55 0 0 1-2.457-.697zm4.397-2.182c.486-.667.698-1.667.698-3.031 0-1.333-.243-2.333-.698-3.03-.485-.667-1.122-1.001-1.94-1.001a2.18 2.18 0 0 0-1.911 1.001c-.485.666-.697 1.666-.697 3.03 0 1.334.242 2.334.697 3.031.485.667 1.122 1 1.911 1 .818.03 1.455-.303 1.94-1z"/><path opacity=".822" d="M358.074 325.102c-.727-.455-1.304-1.152-1.728-2.061s-.637-1.97-.637-3.213.212-2.303.637-3.212 1.001-1.576 1.728-2.061c.728-.455 1.547-.697 2.487-.697s1.759.242 2.487.697 1.304 1.152 1.728 2.061.637 1.97.637 3.212-.212 2.304-.637 3.213-1 1.576-1.728 2.061c-.728.454-1.577.697-2.487.697-.94 0-1.759-.243-2.487-.697zm4.428-2.182c.485-.697.728-1.698.728-3.061s-.243-2.364-.728-3.061a2.24 2.24 0 0 0-1.971-1.031c-.819 0-1.456.334-1.941 1.031s-.728 1.697-.728 3.061.243 2.364.728 3.061 1.122 1.03 1.941 1.03c.849-.03 1.486-.364 1.971-1.03z"/><path opacity=".509" d="M382.85 313.979v11.729h-2.183v-9.911h-2.487v-1.818h4.67z"/><path opacity=".337" d="M397.983 325.162c-.728-.484-1.335-1.181-1.759-2.091s-.637-2-.637-3.243.212-2.333.637-3.242 1.001-1.607 1.759-2.092c.727-.484 1.577-.727 2.517-.727s1.789.243 2.517.727c.758.485 1.334 1.182 1.759 2.092s.636 2 .636 3.242-.212 2.334-.636 3.243-1.001 1.607-1.759 2.091-1.577.728-2.517.728-1.79-.243-2.517-.728zm4.518-2.212c.485-.697.728-1.727.728-3.091s-.243-2.425-.728-3.092a2.29 2.29 0 0 0-2.001-1.03 2.28 2.28 0 0 0-1.972 1.03c-.485.698-.727 1.728-.727 3.092s.242 2.424.727 3.091a2.28 2.28 0 0 0 1.972 1.031c.849 0 1.486-.334 2.001-1.031z"/><path opacity=".877" d="M417.967 325.162c-.727-.484-1.334-1.181-1.758-2.091s-.637-2-.637-3.243.212-2.333.637-3.242 1-1.607 1.758-2.092c.728-.484 1.577-.727 2.518-.727s1.789.243 2.517.727c.758.485 1.334 1.182 1.758 2.092s.637 2 .637 3.242-.212 2.334-.637 3.243-1 1.607-1.758 2.091a4.53 4.53 0 0 1-2.517.728c-.941 0-1.79-.243-2.518-.728zm4.489-2.212c.485-.697.728-1.727.728-3.091s-.243-2.425-.728-3.092c-.486-.697-1.153-1.03-2.002-1.03-.819 0-1.486.333-1.971 1.03s-.728 1.728-.728 3.092.243 2.424.728 3.091c.485.697 1.152 1.031 1.971 1.031.849 0 1.516-.334 2.002-1.031z"/><path opacity=".823" d="M437.952 325.132c-.728-.485-1.304-1.152-1.728-2.061s-.637-1.97-.637-3.212.212-2.334.637-3.213c.424-.909 1-1.606 1.728-2.061.728-.485 1.577-.697 2.487-.697.94 0 1.759.243 2.517.697.728.485 1.334 1.152 1.729 2.061.424.909.636 1.97.636 3.213s-.212 2.333-.636 3.212c-.425.909-1.001 1.606-1.729 2.061-.728.485-1.577.697-2.517.697a4.18 4.18 0 0 1-2.487-.697zm4.458-2.212c.485-.697.728-1.728.728-3.092s-.243-2.394-.728-3.091-1.152-1.03-1.971-1.03-1.486.333-1.971 1.03-.728 1.728-.728 3.091.243 2.395.728 3.092a2.24 2.24 0 0 0 1.971 1.03c.849 0 1.516-.333 1.971-1.03z"/><path opacity=".92" d="M457.967 325.041c-.727-.455-1.273-1.152-1.698-2.031s-.606-1.939-.606-3.151.212-2.273.606-3.152c.425-.879.971-1.576 1.698-2.031a4.55 4.55 0 0 1 2.457-.697 4.55 4.55 0 0 1 2.456.697c.728.455 1.304 1.152 1.698 2.031.425.879.607 1.939.607 3.152s-.212 2.273-.607 3.151c-.424.879-.97 1.576-1.698 2.031a4.55 4.55 0 0 1-2.456.697 4.55 4.55 0 0 1-2.457-.697zm4.398-2.182c.485-.667.697-1.667.697-3.031 0-1.333-.243-2.333-.697-3.03a2.27 2.27 0 0 0-1.941-1.001 2.18 2.18 0 0 0-1.911 1.001c-.485.666-.697 1.666-.697 3.03 0 1.334.242 2.334.697 3.031.485.667 1.122 1 1.911 1 .819.03 1.455-.303 1.941-1z"/><path opacity=".571" d="M482.622 314.252v11.183h-2.093v-9.456h-2.365v-1.757h4.458v.03z"/><path opacity=".673" d="M502.546 314.403v10.88h-2.032V316.1h-2.305v-1.697h4.337z"/><path opacity=".267" d="M518.103 324.617c-.667-.425-1.182-1.031-1.546-1.849-.395-.818-.577-1.788-.577-2.91s.182-2.091.577-2.909.909-1.424 1.546-1.849c.667-.424 1.395-.636 2.244-.636s1.577.212 2.244.636 1.183 1.031 1.577 1.849.577 1.788.577 2.909-.182 2.092-.577 2.91-.909 1.424-1.577 1.849-1.425.636-2.244.636c-.849 0-1.577-.212-2.244-.636zm4.034-2.001c.424-.606.667-1.545.667-2.758 0-1.242-.213-2.151-.667-2.757-.425-.607-1.031-.94-1.79-.94a2.01 2.01 0 0 0-1.759.94c-.424.606-.667 1.545-.667 2.757 0 1.243.213 2.152.667 2.758.425.607 1.032.94 1.759.94a2.06 2.06 0 0 0 1.79-.94z"/><path opacity=".368" d="M542.333 314.828v10.031h-1.85v-8.455h-2.123v-1.546h3.973v-.03z"/><path opacity=".948" d="M558.285 324.132c-.607-.394-1.062-.939-1.395-1.667s-.516-1.606-.516-2.606.182-1.879.516-2.607.818-1.303 1.395-1.666c.606-.394 1.273-.576 2.031-.576s1.426.182 2.032.576 1.062.939 1.426 1.666c.333.728.515 1.607.515 2.607s-.182 1.879-.515 2.606-.819 1.303-1.426 1.667c-.606.394-1.273.576-2.032.576-.788 0-1.455-.182-2.031-.576zm3.608-1.788c.395-.546.576-1.394.576-2.515s-.181-1.94-.576-2.516c-.394-.545-.94-.849-1.607-.849s-1.213.273-1.577.849c-.394.546-.576 1.394-.576 2.516s.182 1.939.576 2.515c.394.546.91.849 1.577.849a1.81 1.81 0 0 0 1.607-.849z"/><path opacity=".133" d="M578.36 323.889c-.576-.363-1.001-.879-1.334-1.576s-.485-1.515-.485-2.454.151-1.789.485-2.455c.333-.697.758-1.213 1.334-1.576s1.213-.546 1.911-.546c.727 0 1.364.182 1.91.546.576.363 1.001.879 1.334 1.576s.486 1.515.486 2.455-.152 1.788-.486 2.454c-.333.697-.758 1.213-1.334 1.576s-1.213.546-1.91.546-1.335-.182-1.911-.546zm3.427-1.697c.364-.515.546-1.303.546-2.364 0-1.03-.182-1.818-.546-2.364a1.78 1.78 0 0 0-1.516-.788c-.637 0-1.122.273-1.486.788s-.546 1.304-.546 2.364.182 1.819.546 2.364c.364.515.879.788 1.486.788.636 0 1.152-.242 1.516-.788z"/><use href="#Y" x="79.878" y="199.631" opacity=".435"/><path opacity=".5" d="M618.602 323.283c-.485-.303-.849-.757-1.122-1.333s-.424-1.303-.424-2.091c0-.819.151-1.516.424-2.091s.637-1.031 1.122-1.334a3.03 3.03 0 0 1 1.638-.455c.606 0 1.152.152 1.637.455s.85.758 1.123 1.334.424 1.303.424 2.091c0 .818-.152 1.515-.424 2.091s-.668 1.03-1.123 1.333c-.485.303-1.031.455-1.637.455a3.03 3.03 0 0 1-1.638-.455zm2.912-1.424c.303-.455.485-1.121.485-2s-.152-1.546-.485-2.001a1.47 1.47 0 0 0-1.274-.666c-.546 0-.971.212-1.274.666s-.485 1.122-.485 2.001.152 1.545.485 2a1.43 1.43 0 0 0 1.274.667c.546 0 .97-.212 1.274-.667z"/><path opacity=".181" d="M638.739 322.98c-.425-.273-.789-.697-1.031-1.212-.243-.546-.364-1.182-.364-1.91s.121-1.363.364-1.909.576-.939 1.031-1.212c.424-.273.94-.425 1.486-.425s1.031.152 1.486.425c.424.273.788.697 1.031 1.212.242.546.364 1.182.364 1.909s-.122 1.364-.364 1.91a2.74 2.74 0 0 1-1.031 1.212c-.425.273-.94.424-1.486.424-.576-.03-1.062-.151-1.486-.424zm2.638-1.303c.273-.394.425-1 .425-1.819s-.152-1.424-.425-1.818-.667-.606-1.152-.606-.88.212-1.153.606-.424 1-.424 1.818.151 1.425.424 1.819.667.606 1.153.606.849-.212 1.152-.606z"/><path opacity=".584" d="M658.875 322.587c-.394-.243-.667-.607-.91-1.061-.212-.455-.333-1.031-.333-1.667s.121-1.212.333-1.667.516-.818.91-1.061a2.42 2.42 0 0 1 1.304-.363 2.42 2.42 0 0 1 1.304.363c.394.243.698.606.91 1.061s.334 1.03.334 1.667-.122 1.212-.334 1.667-.516.818-.91 1.061a2.42 2.42 0 0 1-1.304.363 2.42 2.42 0 0 1-1.304-.363zm2.335-1.152c.243-.364.364-.879.364-1.606 0-.697-.121-1.243-.364-1.607s-.576-.545-1.031-.545c-.424 0-.758.182-1.001.545s-.363.879-.363 1.607c0 .697.121 1.242.363 1.606a1.14 1.14 0 0 0 1.001.545c.425 0 .758-.181 1.031-.545z"/><use href="#R" x="139.831" y="239.545" opacity=".135"/><path opacity=".711" d="M699.208 321.799c-.273-.182-.485-.425-.637-.758s-.242-.728-.242-1.182.091-.849.242-1.182.364-.576.637-.758.576-.273.91-.273.667.091.94.273.485.425.637.758.242.727.242 1.182-.091.848-.242 1.182-.364.576-.637.758-.576.272-.94.272a1.61 1.61 0 0 1-.91-.272zm1.638-.819c.182-.242.273-.636.273-1.151s-.091-.879-.273-1.152c-.182-.243-.425-.394-.728-.394a.82.82 0 0 0-.728.394c-.182.242-.273.636-.273 1.152s.091.878.273 1.151c.182.243.425.394.728.394.333 0 .576-.121.728-.394z"/><use href="#J" x="319.603" y="279.49" opacity=".553"/><path opacity=".719" d="M739.572 320.919c-.152-.09-.273-.242-.364-.424s-.122-.394-.122-.636.031-.455.122-.637.212-.333.364-.424.303-.152.515-.152c.182 0 .364.061.516.152s.273.242.364.424.121.394.121.637-.03.454-.121.636-.213.334-.364.424-.304.152-.516.152c-.182-.03-.364-.061-.515-.152zm.909-.454c.091-.152.152-.333.152-.606s-.061-.485-.152-.606a.44.44 0 0 0-.394-.213.44.44 0 0 0-.394.213 1.11 1.11 0 0 0-.152.606c0 .273.061.485.152.606.091.151.242.212.394.212s.303-.061.394-.212z"/><path opacity=".734" d="M759.769 320.465c-.091-.061-.152-.121-.213-.243-.06-.091-.06-.212-.06-.363a1.14 1.14 0 0 1 .06-.364c.061-.091.122-.182.213-.242s.182-.091.272-.091.213.03.273.091a.56.56 0 0 1 .213.242c.06.091.06.212.06.364a1.14 1.14 0 0 1-.06.363.83.83 0 0 1-.213.243c-.091.06-.182.091-.273.091s-.181-.061-.272-.091zm.515-.273a.58.58 0 0 0 .091-.364c0-.151-.03-.272-.091-.363s-.121-.122-.212-.122-.182.031-.212.122c-.061.091-.091.182-.091.363 0 .152.03.273.091.364s.121.121.212.121.151-.03.212-.121z"/><path opacity=".786" d="M780.087 319.677v.303h-.061v-.273h-.061v-.061h.122v.031z"/><path opacity=".106" d="M40.867 340.013c-.03-.031-.061-.061-.061-.091-.03-.031-.03-.091-.03-.121s0-.091.03-.122.03-.06.061-.091.061-.03.091-.03.061 0 .091.03.061.061.061.091c.03.031.03.091.03.122s0 .09-.03.121-.03.06-.061.091-.061.03-.091.03-.091 0-.091-.03zm.152-.091c.03-.031.03-.061.03-.121s0-.091-.03-.122-.061-.03-.091-.03-.061 0-.091.03-.03.061-.03.122 0 .09.03.121.061.03.091.03c.061.03.091 0 .091-.03z"/><path opacity=".218" d="M60.609 340.498c-.091-.061-.182-.152-.212-.273-.061-.121-.091-.242-.091-.424 0-.152.03-.303.091-.425s.121-.212.212-.272a.61.61 0 0 1 .334-.091c.121 0 .212.03.334.091.091.06.182.151.212.272.061.122.091.243.091.425 0 .151-.03.303-.091.424s-.121.212-.212.273-.212.091-.334.091-.243-.031-.334-.091zm.576-.303c.061-.091.091-.212.091-.394s-.03-.303-.091-.394-.152-.122-.243-.122-.182.031-.243.122-.091.212-.091.394.03.303.091.394.152.121.243.121c.091.03.182-.03.243-.121z"/><path opacity=".114" d="M80.351 340.952c-.152-.091-.273-.242-.364-.454-.091-.182-.121-.425-.121-.697s.03-.485.121-.697a1.34 1.34 0 0 1 .364-.455c.152-.091.334-.151.546-.151s.394.06.546.151.273.243.364.455c.091.182.121.424.121.697s-.03.485-.121.697c-.091.182-.212.333-.364.454-.152.091-.334.152-.546.152s-.364-.061-.546-.152zm.971-.484c.091-.152.152-.364.152-.667s-.061-.515-.152-.667-.243-.212-.425-.212a.49.49 0 0 0-.425.212c-.091.152-.152.364-.152.667s.061.515.152.667.243.212.425.212.334-.061.425-.212z"/><path opacity=".623" d="M100.124 341.377a1.46 1.46 0 0 1-.516-.606 2.26 2.26 0 0 1-.182-.94c0-.364.061-.697.182-.939.121-.273.303-.485.516-.607.212-.151.455-.212.728-.212s.515.061.727.212.395.334.516.607.182.575.182.939-.061.697-.182.94c-.121.272-.303.484-.516.606-.212.151-.454.212-.727.212-.243 0-.486-.091-.728-.212zm1.334-.667c.152-.212.212-.515.212-.909s-.06-.697-.212-.909-.333-.304-.576-.304-.425.091-.576.304-.213.515-.213.909.061.697.213.909.333.303.576.303.424-.091.576-.303z"/><path opacity=".795" d="M121.716 337.649v4.303h-.789v-3.636h-.909v-.667h1.698z"/><path opacity=".44" d="M139.729 342.165c-.333-.212-.576-.516-.758-.91s-.273-.878-.273-1.424.091-1.03.273-1.424.455-.697.758-.91c.334-.212.698-.303 1.122-.303s.789.091 1.122.303.577.516.759.91.272.878.272 1.424-.09 1.03-.272 1.424a2.26 2.26 0 0 1-.759.91c-.333.212-.697.303-1.122.303s-.818-.091-1.122-.303zm1.971-1c.213-.304.334-.758.334-1.364s-.121-1.061-.334-1.364-.515-.455-.879-.455-.667.152-.879.455-.334.758-.334 1.364.121 1.06.334 1.364.515.454.879.454.667-.151.879-.454z"/><path opacity=".502" d="M161.988 336.831v5.94h-1.091v-5.031h-1.274v-.94h2.365v.031z"/><path opacity=".736" d="M179.334 342.831c-.424-.272-.758-.666-1-1.182s-.364-1.121-.364-1.848c0-.697.121-1.334.364-1.849s.576-.909 1-1.182.88-.394 1.426-.394a2.52 2.52 0 0 1 1.425.394c.425.273.758.667 1.001 1.182s.364 1.121.364 1.849c0 .697-.122 1.333-.364 1.848s-.576.91-1.001 1.182-.91.394-1.425.394-1.001-.121-1.426-.394zm2.578-1.273c.273-.394.425-.969.425-1.757s-.152-1.364-.425-1.758-.637-.576-1.122-.576c-.455 0-.849.182-1.122.576s-.425.97-.425 1.758.152 1.363.425 1.757.637.576 1.122.576c.455.031.849-.182 1.122-.576z"/><path opacity=".178" d="M202.231 336.133v7.365h-1.365v-6.213h-1.547v-1.152h2.912z"/><path opacity=".705" d="M219 343.437c-.515-.333-.909-.788-1.182-1.424-.304-.606-.425-1.364-.425-2.213s.152-1.576.425-2.212c.303-.606.697-1.091 1.182-1.424.516-.334 1.062-.485 1.699-.485s1.213.151 1.728.485a3.07 3.07 0 0 1 1.183 1.424c.303.606.424 1.364.424 2.212s-.151 1.576-.424 2.213c-.303.606-.698 1.091-1.183 1.424-.515.334-1.092.485-1.728.485-.607 0-1.183-.182-1.699-.485zm3.063-1.515c.334-.485.485-1.182.485-2.122s-.151-1.636-.485-2.121-.788-.697-1.364-.697a1.56 1.56 0 0 0-1.335.697c-.333.485-.485 1.182-.485 2.121s.152 1.637.485 2.122.789.697 1.335.697c.606 0 1.061-.242 1.364-.697z"/><path opacity=".672" d="M238.864 343.68c-.546-.333-.971-.849-1.274-1.515s-.455-1.455-.455-2.364.152-1.697.455-2.364a3.5 3.5 0 0 1 1.274-1.516c.546-.333 1.152-.515 1.819-.515.698 0 1.304.182 1.85.515s.971.849 1.274 1.516.455 1.455.455 2.364-.152 1.697-.455 2.364-.728 1.151-1.274 1.515c-.546.333-1.152.515-1.85.515-.667 0-1.273-.182-1.819-.515zm3.275-1.606c.364-.515.516-1.243.516-2.243s-.182-1.758-.516-2.243a1.68 1.68 0 0 0-1.456-.757c-.606 0-1.091.242-1.425.757-.364.516-.546 1.243-.546 2.243s.182 1.758.546 2.243a1.63 1.63 0 0 0 1.425.757 1.68 1.68 0 0 0 1.456-.757z"/><path opacity=".467" d="M262.488 335.254v9.092h-1.699v-7.667h-1.91v-1.425h3.609z"/><path opacity=".38" d="M278.591 344.134c-.607-.394-1.062-.939-1.426-1.697-.333-.727-.515-1.606-.515-2.637s.182-1.909.515-2.636.819-1.304 1.426-1.698 1.273-.575 2.062-.575c.758 0 1.456.181 2.062.575s1.092.94 1.425 1.698c.334.727.516 1.636.516 2.636 0 1.031-.182 1.91-.516 2.637s-.818 1.303-1.425 1.697-1.304.576-2.062.576-1.456-.182-2.062-.576zm3.669-1.788c.394-.576.607-1.394.607-2.515s-.213-1.97-.607-2.516c-.394-.576-.94-.848-1.607-.848s-1.213.272-1.607.848-.607 1.394-.607 2.516.212 1.97.607 2.515c.394.576.94.849 1.607.849.667-.031 1.213-.303 1.607-.849z"/><path opacity=".82" d="M298.484 344.316c-.637-.394-1.122-1-1.486-1.758s-.546-1.697-.546-2.757.182-1.97.546-2.758c.364-.758.849-1.364 1.486-1.758a3.94 3.94 0 0 1 2.123-.606c.788 0 1.516.212 2.153.606s1.122 1 1.486 1.758.546 1.697.546 2.758-.182 1.97-.546 2.757c-.364.758-.849 1.364-1.486 1.758a3.97 3.97 0 0 1-2.153.606 3.94 3.94 0 0 1-2.123-.606zm3.821-1.879c.425-.576.607-1.454.607-2.636 0-1.152-.213-2.031-.607-2.637-.425-.576-.97-.879-1.698-.879-.698 0-1.244.303-1.668.879s-.607 1.455-.607 2.637c0 1.151.213 2.03.607 2.636.424.576.97.879 1.668.879.728 0 1.273-.303 1.698-.879z"/><path opacity=".167" d="M318.408 344.468c-.636-.424-1.152-1.03-1.516-1.818s-.546-1.728-.546-2.849c0-1.091.182-2.031.546-2.849.364-.788.88-1.394 1.516-1.818s1.365-.637 2.214-.637a4.01 4.01 0 0 1 2.214.637c.637.424 1.152 1.03 1.547 1.818.363.788.545 1.727.545 2.849 0 1.091-.182 2.03-.545 2.849-.364.788-.88 1.394-1.547 1.818-.637.424-1.395.636-2.214.636-.849-.03-1.577-.242-2.214-.636zm3.943-1.94c.424-.606.637-1.515.637-2.697 0-1.212-.213-2.091-.637-2.697s-1.001-.909-1.729-.909a2 2 0 0 0-1.728.909c-.425.606-.637 1.515-.637 2.697 0 1.212.212 2.091.637 2.697s1 .91 1.728.91c.698 0 1.274-.303 1.729-.91z"/><path opacity=".293" d="M342.669 334.558v10.486h-1.941v-8.85h-2.214v-1.636h4.155z"/><path opacity=".985" d="M358.256 344.65c-.667-.425-1.183-1.061-1.577-1.88s-.576-1.818-.576-2.939.182-2.122.576-2.94.91-1.455 1.577-1.879 1.425-.637 2.275-.637 1.607.213 2.304.637c.668.424 1.213 1.061 1.577 1.879.395.818.576 1.818.576 2.94s-.181 2.121-.576 2.939-.909 1.455-1.577 1.88-1.425.636-2.304.636c-.85 0-1.608-.212-2.275-.636zm4.094-2.031c.455-.636.667-1.576.667-2.819s-.212-2.182-.667-2.818a2.06 2.06 0 0 0-1.789-.94 2.06 2.06 0 0 0-1.789.94c-.455.636-.667 1.576-.667 2.818s.212 2.183.667 2.819 1.031.939 1.789.939 1.365-.303 1.789-.939z"/><path opacity=".259" d="M378.21 344.68c-.667-.424-1.213-1.061-1.607-1.909-.394-.819-.576-1.819-.576-2.971s.182-2.121.576-2.97c.394-.818.91-1.454 1.607-1.909.667-.424 1.456-.636 2.305-.636s1.638.212 2.305.636 1.213 1.061 1.607 1.909c.394.819.576 1.819.576 2.97s-.182 2.122-.576 2.971c-.394.818-.91 1.454-1.607 1.909-.667.424-1.456.636-2.305.636a4.33 4.33 0 0 1-2.305-.636zm4.125-2.031c.454-.636.667-1.576.667-2.849 0-1.242-.213-2.212-.667-2.848s-1.062-.94-1.82-.94-1.365.303-1.789.94c-.455.636-.667 1.576-.667 2.848 0 1.243.212 2.213.667 2.849a2.06 2.06 0 0 0 1.789.94c.789 0 1.395-.303 1.82-.94z"/><path opacity=".433" d="M402.653 334.406v10.789h-2.002v-9.122h-2.274v-1.698h4.276v.031z"/><path opacity=".658" d="M422.607 334.436v10.729h-2.001v-9.062h-2.274v-1.667h4.275z"/><use href="#a" x="59.923" y="199.631" opacity=".585"/><path opacity=".16" d="M458.179 344.559c-.667-.425-1.182-1.031-1.546-1.849-.394-.818-.576-1.788-.576-2.91s.182-2.091.576-2.909.91-1.425 1.546-1.849a4.05 4.05 0 0 1 2.245-.636c.849 0 1.576.212 2.244.636s1.182 1.031 1.577 1.849.576 1.788.576 2.909-.182 2.092-.576 2.91-.91 1.424-1.577 1.849-1.426.636-2.244.636a4.05 4.05 0 0 1-2.245-.636zm4.034-1.97c.424-.607.667-1.546.667-2.758 0-1.243-.212-2.152-.667-2.758-.425-.606-1.031-.94-1.789-.94a2.01 2.01 0 0 0-1.759.94c-.425.606-.668 1.545-.668 2.758 0 1.242.213 2.151.668 2.758.424.606 1.031.939 1.759.939a2.21 2.21 0 0 0 1.789-.939z"/><path opacity=".818" d="M482.44 334.679v10.243h-1.91v-8.667h-2.184v-1.607h4.094v.031z"/><path opacity=".121" d="M498.24 344.316c-.637-.394-1.122-1-1.486-1.758s-.546-1.697-.546-2.757.182-1.97.546-2.758c.364-.758.849-1.364 1.486-1.758a3.94 3.94 0 0 1 2.123-.606c.788 0 1.516.212 2.153.606s1.122 1 1.486 1.758.546 1.697.546 2.758-.182 1.97-.546 2.757c-.364.758-.849 1.364-1.486 1.758a3.97 3.97 0 0 1-2.153.606 3.94 3.94 0 0 1-2.123-.606zm3.821-1.879c.424-.576.606-1.454.606-2.636 0-1.152-.212-2.031-.606-2.637-.425-.576-.971-.879-1.698-.879-.698 0-1.244.303-1.668.879s-.607 1.455-.607 2.637c0 1.151.213 2.03.607 2.636.424.576.97.879 1.668.879.727 0 1.273-.303 1.698-.879z"/><path opacity=".664" d="M518.315 344.134c-.606-.394-1.061-.939-1.425-1.697-.334-.727-.515-1.606-.515-2.637s.181-1.909.515-2.636.819-1.304 1.425-1.698 1.274-.575 2.063-.575c.758 0 1.455.181 2.062.575a3.78 3.78 0 0 1 1.425 1.698c.334.727.516 1.636.516 2.636 0 1.031-.182 1.91-.516 2.637s-.819 1.303-1.425 1.697-1.304.576-2.062.576c-.789 0-1.486-.182-2.063-.576zm3.639-1.788c.395-.576.607-1.394.607-2.515s-.212-1.97-.607-2.516c-.394-.576-.94-.848-1.607-.848s-1.213.272-1.607.848-.607 1.394-.607 2.516.213 1.97.607 2.515c.394.576.94.849 1.607.849.698-.031 1.213-.303 1.607-.849z"/><path opacity=".346" d="M538.391 343.922c-.576-.363-1.031-.909-1.365-1.606s-.485-1.546-.485-2.515.152-1.819.485-2.516.789-1.242 1.365-1.606 1.213-.546 1.941-.546 1.364.182 1.941.546 1.031.909 1.364 1.606.485 1.546.485 2.516-.151 1.818-.485 2.515-.788 1.243-1.364 1.606-1.213.546-1.941.546-1.395-.182-1.941-.546zm3.487-1.727c.364-.546.577-1.334.577-2.394s-.182-1.849-.577-2.395a1.75 1.75 0 0 0-1.546-.818c-.637 0-1.153.273-1.517.818s-.576 1.334-.576 2.395.182 1.879.576 2.394c.364.545.88.818 1.517.818s1.152-.273 1.546-.818z"/><path opacity=".426" d="M558.466 343.71c-.546-.333-.97-.848-1.273-1.515s-.455-1.455-.455-2.394c0-.909.151-1.697.455-2.394.303-.667.727-1.182 1.273-1.516.546-.364 1.153-.515 1.85-.515s1.304.182 1.85.515.971.849 1.274 1.516.455 1.454.455 2.394c0 .909-.152 1.727-.455 2.394s-.728 1.182-1.274 1.515c-.546.364-1.152.516-1.85.516s-1.334-.152-1.85-.516zm3.306-1.636c.364-.515.546-1.273.546-2.273s-.182-1.758-.546-2.273-.849-.758-1.456-.758a1.68 1.68 0 0 0-1.455.758c-.364.515-.546 1.273-.546 2.273s.182 1.758.546 2.273a1.68 1.68 0 0 0 1.455.757c.607.031 1.092-.242 1.456-.757z"/><path opacity=".548" d="M581.878 335.77v8.061h-1.486v-6.789h-1.698V335.8h3.184v-.03z"/><path opacity=".527" d="M598.648 343.195c-.455-.303-.849-.727-1.092-1.303-.273-.576-.394-1.273-.394-2.061s.121-1.485.394-2.061.637-1.03 1.092-1.303c.455-.303 1.001-.455 1.607-.455a2.93 2.93 0 0 1 1.608.455c.485.303.849.727 1.122 1.303s.394 1.273.394 2.061-.121 1.485-.394 2.061-.637 1.03-1.122 1.303a2.93 2.93 0 0 1-1.608.455c-.606-.031-1.122-.152-1.607-.455zm2.851-1.424c.303-.425.455-1.092.455-1.97s-.152-1.516-.455-1.97a1.5 1.5 0 0 0-1.274-.667c-.516 0-.94.212-1.243.667-.304.424-.455 1.091-.455 1.97s.151 1.515.455 1.97c.303.424.727.666 1.243.666.546 0 .97-.212 1.274-.666z"/><path opacity=".221" d="M618.785 342.862c-.425-.273-.759-.667-1.001-1.182s-.364-1.152-.364-1.849c0-.727.121-1.334.364-1.849s.576-.909 1.001-1.182.909-.394 1.455-.394 1.031.121 1.456.394.758.667 1.001 1.182.364 1.152.364 1.849c0 .727-.122 1.333-.364 1.849s-.577.909-1.001 1.182-.91.394-1.456.394c-.546.03-1.031-.122-1.455-.394zm2.577-1.273c.273-.394.425-1 .425-1.788s-.152-1.395-.425-1.789-.667-.606-1.152-.606-.849.213-1.122.606-.425 1.001-.425 1.789.152 1.394.425 1.788.667.606 1.122.606c.485 0 .879-.212 1.152-.606z"/><path opacity=".18" d="M638.921 342.528c-.395-.243-.668-.606-.91-1.061-.212-.454-.334-1.03-.334-1.667s.122-1.212.334-1.667.515-.818.91-1.06a2.41 2.41 0 0 1 1.304-.364c.485 0 .909.121 1.304.364s.697.606.909 1.06.334 1.031.334 1.667-.121 1.213-.334 1.667-.515.818-.909 1.061a2.42 2.42 0 0 1-1.304.364c-.516.03-.94-.091-1.304-.364zm2.304-1.121c.243-.364.364-.879.364-1.607 0-.697-.121-1.242-.364-1.606s-.576-.546-1.031-.546c-.424 0-.758.182-1 .546s-.364.879-.364 1.606c0 .697.121 1.243.364 1.607a1.14 1.14 0 0 0 1 .545c.455-.03.789-.182 1.031-.545z"/><path opacity=".541" d="M661.24 337.194v5.243h-.97v-4.424h-1.122v-.819h2.092z"/><path opacity=".355" d="M679.224 341.801c-.273-.182-.486-.425-.637-.788-.152-.334-.243-.758-.243-1.213s.091-.879.243-1.212.364-.606.637-.788.576-.273.94-.273.667.091.94.273.485.424.667.788c.152.333.243.758.243 1.212s-.091.879-.243 1.213-.364.606-.667.788a1.71 1.71 0 0 1-.94.272c-.364 0-.667-.091-.94-.272zm1.668-.819c.182-.272.273-.636.273-1.151s-.091-.91-.273-1.152a.82.82 0 0 0-.728-.394.82.82 0 0 0-.728.394c-.182.273-.273.636-.273 1.152s.091.909.273 1.151a.82.82 0 0 0 .728.394c.303-.03.546-.151.728-.394z"/><path opacity=".272" d="M700.846 338.043v3.516h-.667v-2.971h-.759v-.545h1.426z"/><path opacity=".787" d="M719.557 340.982a.98.98 0 0 1-.395-.454c-.091-.212-.151-.425-.151-.728a1.72 1.72 0 0 1 .151-.727c.091-.212.213-.364.395-.455.151-.091.333-.151.545-.151s.395.06.546.151.304.243.395.455a1.72 1.72 0 0 1 .151.727c0 .303-.06.516-.151.728s-.213.363-.395.454-.364.152-.546.152c-.212 0-.394-.061-.545-.152zm1-.485c.122-.151.152-.394.152-.697s-.061-.515-.152-.697-.242-.242-.424-.242-.334.091-.425.242c-.121.152-.151.394-.151.697s.06.516.151.697c.122.152.243.243.425.243a.68.68 0 0 0 .424-.243z"/><use href="#w" opacity=".123"/><path opacity=".202" d="M759.95 340.043l-.091-.091c-.03-.03-.03-.091-.03-.151s0-.122.03-.152l.091-.091c.031-.03.061-.03.122-.03s.091 0 .121.03l.091.091c.03.03.03.091.03.152s0 .121-.03.151l-.091.091c-.03.03-.061.03-.121.03s-.091 0-.122-.03zm.213-.091c.03-.03.03-.091.03-.151s0-.122-.03-.152-.061-.061-.091-.061-.061.031-.091.061-.031.091-.031.152 0 .121.031.151.06.061.091.061.06-.031.091-.061z"/><path opacity=".409" d="M60.822 360.015l-.091-.091c-.03-.03-.03-.091-.03-.151s0-.121.03-.152l.091-.091c.03-.03.061-.03.121-.03.03 0 .091 0 .121.03l.091.091c.03.031.03.091.03.152s0 .121-.03.151l-.091.091c-.03.031-.061.031-.121.031s-.091 0-.121-.031zm.212-.091c.03-.03.03-.091.03-.151s0-.121-.03-.152-.061-.06-.091-.06-.061.03-.091.06-.03.091-.03.152 0 .121.03.151.061.061.091.061c.03-.03.061-.03.091-.061z"/><path opacity=".85" d="M81.201 359.015v1.485h-.273v-1.242h-.303v-.243h.576z"/><path opacity=".587" d="M100.367 360.864c-.152-.091-.273-.243-.364-.424s-.122-.425-.122-.667c0-.273.03-.485.122-.667s.212-.333.364-.424a1.02 1.02 0 0 1 .515-.152c.182 0 .364.061.516.152s.273.242.364.424.121.424.121.667c0 .273-.03.485-.121.667s-.213.333-.364.424-.334.151-.516.151c-.212 0-.364-.03-.515-.151zm.909-.455c.091-.151.152-.363.152-.636s-.061-.485-.152-.637-.242-.212-.424-.212a.41.41 0 0 0-.394.212c-.091.152-.152.364-.152.637s.061.485.152.636a.44.44 0 0 0 .394.212c.212 0 .333-.06.424-.212z"/><use href="#I" x="-259.679" y="319.404" opacity=".312"/><use href="#h" x="39.939" y="199.631" opacity=".875"/><use href="#x" opacity=".73"/><path opacity=".914" d="M179.577 362.318c-.364-.242-.637-.575-.849-1s-.303-.969-.303-1.545c0-.606.091-1.122.303-1.546s.485-.758.849-1 .758-.333 1.213-.333a2.35 2.35 0 0 1 1.213.333c.364.242.637.576.849 1s.304.97.304 1.546c0 .606-.091 1.121-.304 1.545s-.485.758-.849 1-.758.334-1.213.334a1.84 1.84 0 0 1-1.213-.334zm2.153-1.06c.243-.334.364-.819.364-1.485s-.121-1.152-.364-1.485-.546-.485-.94-.485-.728.151-.94.485c-.242.333-.364.818-.364 1.485s.122 1.151.364 1.485.546.485.94.485c.394.03.698-.152.94-.485z"/><path opacity=".474" d="M199.38 362.652c-.395-.243-.728-.637-.94-1.122-.243-.484-.334-1.091-.334-1.757s.121-1.273.334-1.758c.242-.485.545-.879.94-1.121s.849-.394 1.364-.394.971.121 1.365.394c.394.242.728.636.94 1.121.243.485.334 1.091.334 1.758s-.122 1.273-.334 1.757c-.243.485-.546.879-.94 1.122s-.849.394-1.365.394-.94-.152-1.364-.394zm2.456-1.212c.273-.364.394-.94.394-1.667 0-.758-.121-1.304-.394-1.667s-.606-.576-1.061-.576-.789.182-1.062.576c-.273.363-.394.939-.394 1.667 0 .757.121 1.303.394 1.667s.607.575 1.062.575c.424 0 .788-.181 1.061-.575z"/><use href="#y" opacity=".175"/><path opacity=".197" d="M239.076 363.167c-.485-.303-.849-.757-1.122-1.333s-.394-1.273-.394-2.091c0-.788.121-1.485.394-2.092.273-.575.637-1.03 1.122-1.333a2.93 2.93 0 0 1 1.608-.455c.606 0 1.152.152 1.607.455.485.303.849.758 1.122 1.333s.394 1.273.394 2.092c0 .788-.121 1.485-.394 2.091-.273.576-.637 1.03-1.122 1.333s-1.001.455-1.607.455a3 3 0 0 1-1.608-.455zm2.912-1.424c.303-.455.455-1.091.455-2 0-.879-.152-1.546-.455-2.001s-.728-.666-1.274-.666c-.516 0-.94.212-1.274.666-.303.455-.455 1.091-.455 2.001 0 .878.152 1.545.455 2s.728.667 1.274.667c.515 0 .94-.213 1.274-.667z"/><path opacity=".774" d="M258.97 363.379a3.07 3.07 0 0 1-1.183-1.424c-.303-.606-.425-1.364-.425-2.213s.152-1.576.425-2.212c.303-.606.697-1.091 1.183-1.424.515-.334 1.061-.485 1.698-.485s1.213.151 1.728.485.91.787 1.183 1.424c.303.606.425 1.364.425 2.212s-.152 1.576-.425 2.213c-.303.606-.697 1.091-1.183 1.424-.515.334-1.091.485-1.728.485s-1.213-.151-1.698-.485zm3.062-1.485c.334-.485.486-1.182.486-2.121s-.152-1.637-.486-2.122-.788-.697-1.364-.697-1.001.243-1.335.697c-.333.485-.485 1.182-.485 2.122s.152 1.636.485 2.121.789.697 1.335.697a1.61 1.61 0 0 0 1.364-.697z"/><path opacity=".184" d="M282.321 355.53v8.455h-1.577v-7.152h-1.789v-1.303h3.366z"/><path opacity=".231" d="M298.757 363.743c-.546-.364-1.001-.879-1.304-1.546s-.485-1.485-.485-2.424.151-1.758.485-2.425c.303-.667.758-1.212 1.304-1.546.546-.363 1.183-.545 1.88-.545s1.335.182 1.88.545 1.001.879 1.304 1.546.486 1.485.486 2.425-.152 1.757-.486 2.424c-.303.667-.758 1.212-1.304 1.546-.545.363-1.182.545-1.88.545-.728 0-1.334-.182-1.88-.545zm3.366-1.667c.364-.515.546-1.303.546-2.303 0-1.031-.182-1.789-.546-2.304s-.849-.788-1.486-.788c-.606 0-1.122.273-1.486.788s-.546 1.303-.546 2.304c0 1.03.182 1.788.546 2.303s.849.788 1.486.788c.607 0 1.122-.243 1.486-.788z"/><path opacity=".876" d="M322.411 355.227v9.092h-1.698v-7.668h-1.911v-1.424h3.609z"/><path opacity=".721" d="M342.426 355.105v9.305h-1.728v-7.88h-1.971v-1.455h3.699v.03z"/><path opacity=".943" d="M358.529 364.076c-.606-.394-1.061-.939-1.395-1.666s-.515-1.607-.515-2.607.182-1.879.515-2.606.819-1.303 1.395-1.667c.607-.394 1.274-.576 2.032-.576s1.425.182 2.032.576 1.061.939 1.425 1.667c.334.727.516 1.606.516 2.606s-.182 1.879-.516 2.607-.819 1.303-1.425 1.666c-.607.394-1.274.576-2.032.576a3.79 3.79 0 0 1-2.032-.576zm3.639-1.788c.394-.545.576-1.394.576-2.515s-.182-1.94-.576-2.516c-.394-.545-.94-.848-1.607-.848s-1.213.273-1.577.848c-.394.546-.576 1.395-.576 2.516s.182 1.94.576 2.515c.394.546.91.849 1.577.849.667-.03 1.213-.303 1.607-.849z"/><path opacity=".632" d="M382.456 354.954v9.638h-1.789v-8.123h-2.032v-1.485h3.821v-.03z"/><path opacity=".624" d="M402.441 354.924v9.698h-1.79v-8.183h-2.062v-1.515h3.852z"/><path opacity=".577" d="M418.422 364.137c-.606-.394-1.091-.97-1.425-1.697-.364-.758-.516-1.637-.516-2.667s.182-1.91.516-2.667c.364-.758.819-1.304 1.425-1.698s1.304-.575 2.062-.575 1.456.181 2.063.575 1.091.97 1.425 1.698c.364.757.515 1.636.515 2.667s-.182 1.909-.515 2.667-.819 1.303-1.425 1.697-1.304.576-2.063.576c-.788 0-1.455-.182-2.062-.576zm3.67-1.819c.394-.576.606-1.424.606-2.545s-.212-1.97-.606-2.546-.94-.849-1.638-.849c-.667 0-1.213.273-1.607.849s-.607 1.424-.607 2.546.213 1.969.607 2.545.94.849 1.607.849c.698 0 1.243-.273 1.638-.849z"/><path opacity=".755" d="M438.407 364.106c-.606-.394-1.061-.939-1.425-1.697-.334-.727-.516-1.606-.516-2.637s.182-1.909.516-2.636.819-1.303 1.425-1.697 1.274-.576 2.062-.576c.758 0 1.456.182 2.062.576s1.092.939 1.426 1.697c.333.727.515 1.636.515 2.636 0 1.031-.182 1.91-.515 2.637s-.819 1.303-1.426 1.697-1.304.576-2.062.576c-.788 0-1.455-.182-2.062-.576zm3.67-1.818c.394-.576.606-1.394.606-2.516s-.212-1.969-.606-2.515a1.85 1.85 0 0 0-1.608-.849c-.667 0-1.213.273-1.607.849s-.606 1.394-.606 2.515.212 1.97.606 2.516c.394.576.94.849 1.607.849a1.85 1.85 0 0 0 1.608-.849z"/><path opacity=".277" d="M458.422 363.986c-.576-.364-1.061-.94-1.395-1.637-.333-.727-.515-1.576-.515-2.576s.182-1.849.515-2.576.789-1.273 1.395-1.637c.576-.363 1.244-.576 2.002-.576s1.425.182 2.001.576c.576.364 1.062.94 1.395 1.637.334.727.516 1.576.516 2.576s-.182 1.849-.516 2.576-.788 1.273-1.395 1.637a3.69 3.69 0 0 1-2.001.575c-.758 0-1.395-.181-2.002-.575zm3.579-1.758c.394-.546.576-1.364.576-2.455s-.182-1.909-.576-2.455-.91-.818-1.577-.818-1.183.272-1.577.818-.576 1.364-.576 2.455.182 1.909.576 2.455.91.818 1.577.818 1.182-.273 1.577-.818z"/><path opacity=".748" d="M478.467 363.894c-.576-.363-1.031-.909-1.365-1.606s-.485-1.545-.485-2.515.152-1.819.485-2.516.789-1.242 1.365-1.606 1.213-.546 1.941-.546 1.365.182 1.941.546 1.031.909 1.364 1.606.486 1.546.486 2.516-.152 1.818-.486 2.515-.788 1.243-1.364 1.606-1.213.546-1.941.546-1.395-.182-1.941-.546zm3.457-1.727c.364-.546.576-1.334.576-2.394s-.182-1.849-.576-2.395a1.75 1.75 0 0 0-1.546-.818c-.637 0-1.153.273-1.517.818s-.576 1.334-.576 2.395.182 1.879.576 2.394c.364.545.88.818 1.517.818a1.75 1.75 0 0 0 1.546-.818z"/><path opacity=".146" d="M498.482 363.773a3.56 3.56 0 0 1-1.304-1.576c-.334-.697-.485-1.515-.485-2.455s.151-1.757.485-2.455.758-1.212 1.304-1.575 1.183-.546 1.911-.546c.697 0 1.334.182 1.91.546.546.363 1.001.878 1.334 1.575s.486 1.516.486 2.455-.152 1.758-.486 2.455-.758 1.212-1.334 1.576c-.546.364-1.183.546-1.91.546s-1.365-.182-1.911-.546zm3.397-1.667c.363-.515.545-1.303.545-2.333s-.182-1.819-.545-2.334-.88-.788-1.486-.788c-.637 0-1.122.273-1.486.788s-.546 1.303-.546 2.334.182 1.818.546 2.333.849.788 1.486.788c.606 0 1.122-.273 1.486-.788z"/><path opacity=".158" d="M518.527 363.592c-.545-.334-.94-.849-1.243-1.486-.303-.666-.455-1.424-.455-2.333s.152-1.667.455-2.334.728-1.151 1.243-1.485a3.36 3.36 0 0 1 1.82-.515c.667 0 1.274.182 1.819.515s.971.849 1.274 1.485c.303.667.455 1.425.455 2.334s-.152 1.667-.455 2.333-.728 1.152-1.274 1.486-1.152.515-1.819.515-1.274-.152-1.82-.515zm3.245-1.576c.364-.485.516-1.243.516-2.243s-.182-1.728-.516-2.243c-.364-.485-.819-.758-1.425-.758s-1.062.243-1.425.758c-.364.485-.516 1.243-.516 2.243s.182 1.727.516 2.243c.363.484.818.757 1.425.757.606-.03 1.092-.273 1.425-.757z"/><path opacity=".879" d="M538.603 363.44c-.515-.334-.909-.788-1.213-1.425s-.424-1.363-.424-2.242c0-.849.151-1.607.424-2.243.304-.637.698-1.091 1.213-1.424s1.092-.485 1.729-.485 1.213.151 1.729.485.909.787 1.213 1.424.424 1.364.424 2.243c0 .848-.151 1.606-.424 2.242-.304.637-.698 1.091-1.213 1.425s-1.092.485-1.729.485-1.213-.182-1.729-.485zm3.094-1.546c.333-.485.515-1.182.515-2.121s-.182-1.667-.515-2.122a1.57 1.57 0 0 0-1.365-.727 1.57 1.57 0 0 0-1.365.727c-.333.485-.515 1.182-.515 2.122s.182 1.666.515 2.121a1.57 1.57 0 0 0 1.365.727 1.57 1.57 0 0 0 1.365-.727z"/><use href="#i" x="379.527" y="199.631" opacity=".593"/><use href="#y" x="359.542" opacity=".522"/><use href="#u" x="-79.878" y="79.828" opacity=".845"/><path opacity=".939" d="M618.997 362.349c-.364-.243-.637-.576-.85-1-.212-.455-.303-.97-.303-1.576s.091-1.122.303-1.576.486-.788.85-1c.364-.243.758-.334 1.213-.334a2.46 2.46 0 0 1 1.243.334c.364.242.637.575.849 1 .212.454.303.97.303 1.576s-.091 1.151-.303 1.576c-.212.454-.485.788-.849 1-.364.242-.758.333-1.243.333-.425.03-.849-.091-1.213-.333zm2.213-1.061c.243-.333.364-.849.364-1.515s-.121-1.182-.364-1.516-.546-.515-.97-.515c-.394 0-.728.182-.97.515s-.364.849-.364 1.516.121 1.182.364 1.515.545.515.97.515c.394 0 .728-.182.97-.515z"/><path opacity=".423" d="M639.133 362.046a2.17 2.17 0 0 1-.758-.879c-.182-.394-.273-.849-.273-1.394s.091-1 .273-1.394.425-.697.758-.879c.303-.212.667-.303 1.061-.303a1.98 1.98 0 0 1 1.092.303c.304.212.576.485.758.879s.273.848.273 1.394-.091 1-.273 1.394-.424.697-.758.879c-.303.212-.667.303-1.092.303-.394 0-.758-.091-1.061-.303zm1.911-.94c.212-.303.303-.727.303-1.333 0-.576-.091-1.031-.303-1.334s-.486-.454-.85-.454-.636.151-.849.454-.303.728-.303 1.334c0 .576.091 1.03.303 1.333s.486.455.849.455c.364-.03.637-.182.85-.455z"/><path opacity=".246" d="M659.269 361.682c-.273-.182-.485-.424-.637-.757s-.242-.728-.242-1.182.091-.849.242-1.182a1.75 1.75 0 0 1 .637-.758c.273-.182.576-.242.91-.242a1.85 1.85 0 0 1 .91.242 1.74 1.74 0 0 1 .636.758c.152.333.243.727.243 1.182a2.83 2.83 0 0 1-.243 1.182c-.151.333-.363.575-.636.757s-.577.243-.91.243c-.334.03-.637-.061-.91-.243zm1.638-.788c.182-.242.273-.636.273-1.121s-.091-.879-.273-1.121-.425-.364-.728-.364-.546.121-.698.364c-.182.242-.273.636-.273 1.121s.091.879.273 1.121a.85.85 0 0 0 .698.364c.303 0 .546-.121.728-.364z"/><path opacity=".909" d="M679.436 361.288c-.213-.121-.364-.334-.516-.606-.121-.273-.182-.576-.182-.94a2.26 2.26 0 0 1 .182-.939c.121-.273.303-.455.516-.606.212-.122.455-.213.728-.213s.515.061.727.213c.213.121.395.333.516.606a2.26 2.26 0 0 1 .182.939c0 .364-.061.667-.182.94s-.303.454-.516.606c-.212.121-.454.212-.727.212s-.516-.061-.728-.212zm1.304-.637c.151-.212.212-.485.212-.879s-.061-.697-.212-.878c-.152-.213-.334-.303-.576-.303s-.425.09-.577.303-.212.484-.212.878.061.698.212.879c.152.213.334.303.577.303s.424-.09.576-.303z"/><use href="#z" opacity=".741"/><use href="#w" x="-19.984" y="19.972" opacity=".611"/><path opacity=".789" d="M739.936 360.046a.41.41 0 0 1-.091-.122c-.031-.06-.031-.121-.031-.181s0-.122.031-.182a.41.41 0 0 1 .091-.122c.03-.03.091-.03.121-.03.061 0 .091 0 .121.03s.061.061.091.122.031.121.031.182 0 .121-.031.181-.06.091-.091.122-.091.03-.121.03c-.03.03-.061 0-.121-.03zm.242-.122c.031-.03.031-.091.031-.151s0-.121-.031-.152-.06-.06-.091-.06-.091.03-.091.06c-.03.031-.03.091-.03.152s0 .121.03.151.061.061.091.061.091 0 .091-.061z"/><path opacity=".177" d="M80.988 379.533v.394h-.061v-.334h-.091v-.06h.152z"/><use href="#k" x="-659.19" y="219.603" opacity=".684"/><path opacity=".958" d="M120.412 380.684a.89.89 0 0 1-.303-.363c-.091-.152-.122-.364-.122-.576s.031-.424.122-.576.182-.303.303-.364c.121-.091.273-.121.455-.121s.333.03.455.121.242.212.303.364c.091.152.121.364.121.576s-.03.424-.121.576-.182.303-.303.363c-.122.091-.273.122-.455.122a.58.58 0 0 1-.455-.122zm.788-.394c.091-.121.122-.303.122-.545s-.031-.424-.122-.546-.212-.182-.364-.182a.43.43 0 0 0-.363.182c-.091.122-.122.303-.122.546s.031.424.122.545a.43.43 0 0 0 .363.182c.182 0 .273-.06.364-.182z"/><path opacity=".288" d="M140.184 381.078c-.182-.121-.333-.303-.455-.515-.121-.242-.151-.515-.151-.818s.06-.606.151-.818c.122-.243.243-.394.455-.516.182-.121.394-.182.637-.182s.455.061.637.182.333.303.455.516c.121.242.151.515.151.818s-.06.606-.151.818c-.122.243-.243.394-.455.515-.182.122-.394.182-.637.182s-.455-.06-.637-.182zm1.153-.545c.121-.182.181-.424.181-.788 0-.334-.06-.606-.181-.788s-.304-.273-.516-.273-.364.091-.485.273-.182.424-.182.788.06.606.182.788.303.273.485.273c.212-.031.394-.122.516-.273z"/><path opacity=".765" d="M161.564 377.866v3.758h-.698v-3.182h-.788v-.576h1.486z"/><path opacity=".918" d="M179.82 381.745a1.9 1.9 0 0 1-.667-.788c-.152-.333-.243-.758-.243-1.243s.091-.878.243-1.242a1.89 1.89 0 0 1 .667-.788 1.73 1.73 0 0 1 .97-.273c.364 0 .668.091.971.273a1.9 1.9 0 0 1 .667.788c.152.333.243.758.243 1.242s-.091.879-.243 1.243c-.152.333-.394.606-.667.788s-.607.273-.971.273a1.73 1.73 0 0 1-.97-.273zm1.698-.818c.182-.273.273-.667.273-1.182s-.091-.909-.273-1.182-.424-.394-.758-.394a.87.87 0 0 0-.758.394c-.182.273-.273.667-.273 1.182s.091.909.273 1.182.424.394.758.394.576-.152.758-.394z"/><path opacity=".78" d="M199.653 382.048c-.334-.212-.577-.515-.758-.909s-.273-.848-.273-1.394.091-1 .273-1.394.424-.697.758-.909.697-.303 1.091-.303a1.98 1.98 0 0 1 1.092.303c.334.212.576.515.758.909s.273.879.273 1.394c0 .546-.091 1-.273 1.394s-.424.697-.758.909-.697.303-1.092.303a1.97 1.97 0 0 1-1.091-.303zm1.971-.969c.212-.304.303-.758.303-1.334 0-.606-.091-1.03-.303-1.333s-.485-.455-.849-.455-.637.151-.849.455-.304.757-.304 1.333c0 .606.091 1.03.304 1.334s.485.454.849.454c.333 0 .637-.151.849-.454z"/><use href="#AA" opacity=".832"/><path opacity=".104" d="M239.349 382.563c-.394-.242-.698-.636-.94-1.121s-.334-1.061-.334-1.727.121-1.243.334-1.728.546-.849.94-1.121a2.54 2.54 0 0 1 1.334-.394c.516 0 .94.121 1.335.394.394.242.697.636.94 1.121.212.485.333 1.061.333 1.728s-.121 1.242-.333 1.727a2.64 2.64 0 0 1-.94 1.121c-.395.243-.85.394-1.335.394s-.94-.121-1.334-.394zm2.426-1.182c.273-.363.394-.909.394-1.666 0-.728-.121-1.273-.394-1.667-.273-.364-.607-.546-1.061-.546s-.789.182-1.062.546-.394.909-.394 1.667c0 .727.121 1.272.394 1.666.273.364.607.546 1.062.546.424.03.788-.182 1.061-.546z"/><path opacity=".77" d="M259.243 382.776c-.425-.273-.759-.667-1.001-1.182s-.364-1.152-.364-1.849c0-.727.121-1.333.364-1.849s.576-.909 1.001-1.182.909-.394 1.455-.394 1.031.122 1.456.394.758.667 1.001 1.182.364 1.152.364 1.849c0 .727-.122 1.333-.364 1.849s-.577.909-1.001 1.182-.91.394-1.456.394c-.576.03-1.031-.122-1.455-.394zm2.577-1.273c.273-.394.425-1 .425-1.788s-.152-1.394-.425-1.788-.667-.607-1.152-.607-.849.213-1.122.607-.425 1-.425 1.788.152 1.394.425 1.788.667.606 1.122.606c.485 0 .879-.212 1.152-.606z"/><path opacity=".861" d="M282.078 376.168v7.123h-1.334v-6.001h-1.516v-1.122h2.85z"/><use href="#i" x="119.847" y="219.603" opacity=".125"/><path opacity=".29" d="M318.924 383.291c-.486-.303-.88-.788-1.153-1.395s-.424-1.333-.424-2.151c0-.849.151-1.546.424-2.152s.667-1.061 1.153-1.394c.485-.303 1.061-.485 1.668-.485a3 3 0 0 1 1.698.485c.485.303.879.788 1.182 1.394.273.606.425 1.333.425 2.152 0 .848-.152 1.545-.425 2.151s-.667 1.061-1.182 1.395c-.485.303-1.062.484-1.698.484-.607 0-1.183-.181-1.668-.484zm3.002-1.485c.333-.455.485-1.152.485-2.061s-.152-1.607-.485-2.061-.758-.697-1.334-.697a1.51 1.51 0 0 0-1.304.697c-.334.454-.486 1.151-.486 2.061s.152 1.606.486 2.061.758.697 1.304.697c.576 0 1-.243 1.334-.697z"/><path opacity=".55" d="M342.184 375.714v8.061h-1.486v-6.819H339v-1.242h3.184z"/><path opacity=".712" d="M362.198 375.623v8.213h-1.516v-6.94h-1.728v-1.273h3.244z"/><path opacity=".907" d="M378.756 383.503c-.515-.333-.94-.818-1.243-1.455s-.455-1.394-.455-2.303c0-.879.152-1.637.455-2.303.303-.637.697-1.122 1.243-1.455a3.26 3.26 0 0 1 1.79-.515 3.26 3.26 0 0 1 1.789.515c.515.333.94.818 1.243 1.455s.455 1.394.455 2.303c0 .879-.152 1.636-.455 2.303-.303.637-.728 1.122-1.243 1.455a3.26 3.26 0 0 1-1.789.515c-.698-.03-1.274-.182-1.79-.515zm3.185-1.576c.333-.485.515-1.212.515-2.182s-.182-1.697-.515-2.182-.819-.728-1.395-.728a1.62 1.62 0 0 0-1.395.728c-.334.485-.516 1.212-.516 2.182s.182 1.697.516 2.182a1.62 1.62 0 0 0 1.395.727c.576 0 1.031-.242 1.395-.727z"/><path opacity=".399" d="M402.168 375.532v8.365h-1.547v-7.062h-1.759v-1.303h3.306z"/><use href="#Y" x="-99.893" y="259.517" opacity=".62"/><path opacity=".344" d="M438.68 383.473c-.515-.334-.91-.819-1.213-1.455s-.455-1.394-.455-2.273.152-1.637.455-2.273.698-1.121 1.213-1.455 1.092-.485 1.759-.485 1.243.152 1.759.485.94.818 1.213 1.455c.303.636.455 1.394.455 2.273s-.152 1.636-.455 2.273-.698 1.121-1.213 1.455-1.122.485-1.759.485-1.243-.152-1.759-.485zm3.154-1.576c.334-.485.516-1.213.516-2.182s-.182-1.698-.516-2.183-.819-.727-1.395-.727-1.031.243-1.395.727c-.334.485-.516 1.213-.516 2.183s.182 1.697.516 2.182.789.727 1.395.727 1.061-.242 1.395-.727z"/><path opacity=".882" d="M462.031 375.714v8.061h-1.486v-6.819h-1.698v-1.242h3.184z"/><path opacity=".111" d="M478.71 383.291c-.485-.303-.88-.788-1.153-1.395s-.424-1.333-.424-2.151c0-.849.151-1.546.424-2.152s.668-1.061 1.153-1.394c.485-.303 1.061-.485 1.668-.485a3 3 0 0 1 1.698.485c.485.303.879.788 1.183 1.394.273.606.424 1.333.424 2.152 0 .848-.151 1.545-.424 2.151s-.668 1.061-1.183 1.395c-.485.303-1.062.484-1.698.484-.607 0-1.153-.181-1.668-.484zm3.032-1.485c.334-.455.486-1.152.486-2.061s-.152-1.607-.486-2.061-.758-.697-1.334-.697a1.51 1.51 0 0 0-1.304.697c-.334.454-.485 1.151-.485 2.061s.151 1.606.485 2.061.758.697 1.304.697 1.001-.243 1.334-.697z"/><use href="#i" x="319.603" y="219.603" opacity=".296"/><path opacity=".898" d="M518.8 382.988c-.455-.303-.818-.728-1.061-1.273-.273-.546-.394-1.212-.394-2 0-.758.121-1.425.394-2.001.273-.545.606-.97 1.061-1.273s.971-.424 1.547-.424 1.092.152 1.547.424c.454.303.818.728 1.061 1.273.273.546.394 1.213.394 2.001 0 .757-.121 1.424-.394 2-.273.545-.607.97-1.061 1.273s-.971.424-1.547.424c-.576.03-1.092-.121-1.547-.424zm2.76-1.364c.303-.424.455-1.061.455-1.909s-.152-1.486-.455-1.91-.697-.636-1.213-.636-.91.212-1.213.636-.455 1.061-.455 1.91.152 1.485.455 1.909.697.636 1.213.636c.516.031.94-.212 1.213-.636z"/><path opacity=".113" d="M541.666 376.381v6.728h-1.243v-5.698h-1.425v-1.06h2.668v.03z"/><path opacity=".207" d="M561.56 376.593v6.273h-1.152v-5.273h-1.335v-.97h2.487v-.03z"/><path opacity=".502" d="M579.027 382.351c-.364-.242-.636-.575-.849-1.03s-.303-.97-.303-1.606c0-.606.091-1.152.303-1.607s.485-.788.849-1.03a2.22 2.22 0 0 1 1.244-.364c.455 0 .879.122 1.243.364s.667.576.88 1.03.303.97.303 1.607c0 .606-.091 1.151-.303 1.606s-.486.788-.88 1.03a2.21 2.21 0 0 1-1.243.364c-.455 0-.88-.121-1.244-.364zm2.244-1.091c.243-.333.364-.848.364-1.545 0-.667-.121-1.182-.364-1.546-.242-.333-.576-.515-.97-.515s-.728.182-.97.515-.364.849-.364 1.546c0 .666.121 1.182.364 1.545.242.334.576.516.97.516s.728-.182.97-.516z"/><use href="#O" x="339.587" y="299.432" opacity=".722"/><use href="#v" x="-99.863" y="99.8" opacity=".35"/><path opacity=".354" d="M639.406 381.442c-.243-.152-.425-.364-.546-.667s-.213-.636-.213-1.03.061-.758.213-1.031c.121-.303.333-.515.546-.666a1.52 1.52 0 0 1 .818-.243 1.52 1.52 0 0 1 .819.243c.243.151.425.363.576.666a2.7 2.7 0 0 1 .213 1.031c0 .394-.061.757-.213 1.03a1.39 1.39 0 0 1-.576.667 1.52 1.52 0 0 1-.819.242c-.333-.03-.576-.09-.818-.242zm1.425-.727c.152-.213.243-.546.243-1s-.091-.758-.243-1.001a.75.75 0 0 0-.637-.333.75.75 0 0 0-.637.333c-.151.213-.242.546-.242 1.001s.091.757.242 1 .364.333.637.333.485-.091.637-.333z"/><path opacity=".116" d="M659.542 381.109c-.182-.121-.334-.303-.455-.546s-.151-.515-.151-.848.06-.607.151-.849.273-.424.455-.545.425-.182.667-.182a1.29 1.29 0 0 1 .667.182 1.37 1.37 0 0 1 .455.545c.122.242.152.515.152.849s-.061.606-.152.848c-.121.243-.273.425-.455.546s-.424.182-.667.182c-.273 0-.485-.061-.667-.182zm1.152-.576c.122-.182.182-.455.182-.818s-.06-.637-.182-.819-.303-.272-.515-.272a.6.6 0 0 0-.516.272c-.121.182-.182.455-.182.819s.061.636.182.818.304.273.516.273.394-.091.515-.273z"/><use href="#g" x="619.22" y="219.573" opacity=".15"/><path opacity=".845" d="M699.845 380.351c-.091-.061-.151-.121-.212-.242-.061-.091-.061-.213-.061-.364a1.14 1.14 0 0 1 .061-.364c.061-.091.121-.182.212-.242s.182-.091.273-.091c.121 0 .212.03.273.091s.152.121.212.242c.061.091.061.212.061.364s-.03.273-.061.364c-.06.091-.121.181-.212.242s-.182.091-.273.091l-.273-.091zm.516-.273c.06-.091.091-.182.091-.363 0-.152-.031-.273-.091-.364s-.122-.121-.213-.121-.182.03-.212.121-.091.182-.091.364a.65.65 0 0 0 .091.363c.061.091.121.122.212.122a.23.23 0 0 0 .213-.122z"/><path opacity=".464" d="M720.011 379.957c-.03-.03-.06-.061-.06-.091-.031-.03-.031-.091-.031-.121 0-.061 0-.091.031-.121s.03-.061.06-.091.061-.031.091-.031.061 0 .091.031.061.06.061.091c.03.03.03.091.03.121 0 .061 0 .091-.03.121s-.03.061-.061.091-.06.03-.091.03-.06-.03-.091-.03zm.182-.091c.031-.03.031-.06.031-.121s0-.091-.031-.121-.06-.031-.091-.031-.06 0-.091.031-.03.06-.03.121 0 .091.03.121.061.03.091.03.061 0 .091-.03z"/><use href="#D" x="-79.908" y="359.348" opacity=".729"/><use href="#AB" opacity=".782"/><path opacity=".205" d="M140.487 400.445c-.091-.061-.182-.152-.242-.303a1.01 1.01 0 0 1-.091-.455 1.01 1.01 0 0 1 .091-.455c.06-.121.151-.212.242-.303.091-.06.213-.091.364-.091.122 0 .243.031.364.091a.64.64 0 0 1 .243.303c.06.122.091.273.091.455s-.031.333-.091.455a1.2 1.2 0 0 1-.243.303c-.091.06-.212.091-.364.091s-.273-.031-.364-.091zm.607-.303c.061-.091.091-.243.091-.425s-.03-.333-.091-.424a.32.32 0 0 0-.546 0c-.061.091-.091.242-.091.424s.03.334.091.425a.32.32 0 0 0 .273.151c.121-.03.212-.061.273-.151z"/><path opacity=".638" d="M161.291 398.475v2.424h-.455v-2.061h-.516v-.363h.971z"/><path opacity=".779" d="M181.397 398.171v3.061h-.577v-2.576h-.636v-.485h1.213z"/><path opacity=".798" d="M199.956 401.414c-.243-.151-.425-.364-.546-.667s-.212-.636-.212-1.03.06-.758.212-1.03c.121-.304.334-.516.546-.667.243-.152.515-.243.819-.243a1.52 1.52 0 0 1 .818.243c.243.151.425.363.577.667.121.303.212.636.212 1.03s-.061.758-.212 1.03c-.122.303-.334.516-.577.667a1.52 1.52 0 0 1-.818.243c-.334-.031-.607-.091-.819-.243zm1.425-.727c.152-.212.243-.546.243-1s-.091-.758-.243-1a.75.75 0 0 0-.637-.334c-.273 0-.485.121-.636.334s-.243.545-.243 1 .091.757.243 1c.151.212.363.333.636.333a.75.75 0 0 0 .637-.333z"/><path opacity=".766" d="M221.578 397.535v4.304h-.788v-3.637h-.91v-.667h1.698z"/><path opacity=".57" d="M239.652 401.899c-.303-.182-.546-.485-.728-.848s-.273-.819-.273-1.334.091-.97.273-1.333.425-.667.728-.849.667-.303 1.031-.303c.394 0 .728.091 1.031.303.304.182.546.485.728.849s.273.818.273 1.333-.091.97-.273 1.334-.424.666-.728.848-.667.303-1.031.303-.728-.121-1.031-.303zm1.88-.909c.213-.273.304-.727.304-1.273 0-.576-.091-1-.304-1.273s-.485-.424-.818-.424-.607.151-.819.424-.304.728-.304 1.273c0 .576.091 1 .304 1.273s.485.424.819.424.606-.151.818-.424z"/><path opacity=".959" d="M259.546 402.111c-.334-.212-.607-.515-.789-.939s-.303-.91-.303-1.485.091-1.061.303-1.485c.182-.425.455-.728.789-.94s.728-.333 1.152-.333a2.14 2.14 0 0 1 1.153.333 2.03 2.03 0 0 1 .788.94c.182.424.303.909.303 1.485s-.091 1.06-.303 1.485c-.182.424-.455.727-.788.939a2.14 2.14 0 0 1-1.153.334 2.06 2.06 0 0 1-1.152-.334zm2.032-1c.212-.303.333-.788.333-1.394 0-.636-.121-1.091-.333-1.394a1.07 1.07 0 0 0-.91-.485c-.364 0-.667.151-.88.485-.212.303-.333.788-.333 1.394 0 .636.121 1.091.333 1.394s.516.485.88.485c.394-.03.697-.182.91-.485z"/><use href="#AA" x="59.954" y="19.972" opacity=".92"/><path opacity=".72" d="M301.85 396.656v6.092h-1.122v-5.152h-1.304v-.94h2.426z"/><path opacity=".635" d="M321.865 396.535v6.334h-1.183v-5.364h-1.334v-1.001h2.517v.031z"/><path opacity=".971" d="M339.182 402.687c-.425-.273-.728-.667-.971-1.151-.243-.516-.364-1.122-.364-1.819s.121-1.303.364-1.818.576-.91.971-1.152c.424-.273.879-.394 1.425-.394.515 0 1.001.121 1.425.394s.758.667.971 1.152c.242.515.363 1.121.363 1.818s-.121 1.303-.363 1.819-.577.909-.971 1.151c-.424.273-.879.394-1.425.394s-1.031-.121-1.425-.394zm2.517-1.242c.272-.394.394-.97.394-1.728s-.152-1.364-.394-1.727c-.273-.394-.637-.576-1.123-.576a1.25 1.25 0 0 0-1.091.576c-.273.394-.394.969-.394 1.727s.121 1.364.394 1.728a1.25 1.25 0 0 0 1.091.575c.486 0 .85-.181 1.123-.575z"/><path opacity=".954" d="M361.895 396.323v6.728h-1.243v-5.698h-1.425v-1.061h2.668v.031z"/><path opacity=".179" d="M379.06 402.808c-.425-.273-.789-.697-1.032-1.212-.242-.546-.363-1.182-.363-1.909s.121-1.364.363-1.91.577-.939 1.032-1.212c.424-.273.94-.424 1.485-.424a2.82 2.82 0 0 1 1.486.424c.425.273.789.697 1.032 1.212.242.546.363 1.182.363 1.91s-.121 1.363-.363 1.909-.607.939-1.032 1.212-.94.424-1.486.424c-.576 0-1.061-.121-1.485-.424zm2.638-1.303c.273-.394.424-1 .424-1.818s-.151-1.425-.424-1.819-.667-.606-1.153-.606-.879.212-1.152.606-.424 1-.424 1.819.151 1.424.424 1.818.667.606 1.152.606c.486.03.85-.182 1.153-.606z"/><path opacity=".131" d="M399.014 402.808c-.424-.273-.788-.697-1.031-1.212-.243-.546-.364-1.182-.364-1.909s.121-1.364.364-1.91.576-.939 1.031-1.212c.425-.273.94-.424 1.486-.424s1.031.151 1.486.424c.425.273.789.697 1.031 1.212.243.546.364 1.182.364 1.91s-.121 1.363-.364 1.909a2.73 2.73 0 0 1-1.031 1.212c-.425.273-.94.424-1.486.424s-1.031-.121-1.486-.424zm2.669-1.303c.273-.394.424-1 .424-1.818s-.151-1.425-.424-1.819-.667-.606-1.153-.606-.879.212-1.152.606-.425 1-.425 1.819.152 1.424.425 1.818.667.606 1.152.606c.455.03.85-.182 1.153-.606z"/><path opacity=".521" d="M418.998 402.808c-.424-.273-.788-.697-1.031-1.212-.242-.546-.363-1.182-.363-1.909s.121-1.364.363-1.91.577-.939 1.031-1.212c.425-.273.941-.424 1.486-.424a2.82 2.82 0 0 1 1.486.424c.425.273.789.697 1.032 1.212.242.546.363 1.182.363 1.91s-.121 1.363-.363 1.909-.607.939-1.032 1.212-.94.424-1.486.424-1.061-.121-1.486-.424zm2.639-1.303c.273-.394.424-1 .424-1.818s-.151-1.425-.424-1.819-.667-.606-1.153-.606-.879.212-1.152.606-.424 1-.424 1.819.151 1.424.424 1.818.667.606 1.152.606c.486.03.88-.182 1.153-.606z"/><path opacity=".626" d="M438.983 402.778c-.424-.272-.758-.666-1-1.212-.243-.515-.364-1.152-.364-1.879s.121-1.364.364-1.879.576-.94 1-1.212.91-.425 1.456-.425 1.031.152 1.456.425.758.666 1.031 1.212c.242.515.364 1.152.364 1.879s-.122 1.364-.364 1.879-.577.94-1.031 1.212c-.425.273-.91.425-1.456.425s-1.031-.152-1.456-.425zm2.608-1.273c.273-.394.425-1 .425-1.788s-.152-1.394-.425-1.788-.667-.606-1.152-.606-.849.212-1.152.606c-.273.394-.425 1-.425 1.788s.152 1.394.425 1.788.667.607 1.152.607.879-.213 1.152-.607z"/><path opacity=".11" d="M459.029 402.687c-.425-.273-.728-.667-.971-1.151-.242-.516-.364-1.122-.364-1.819s.122-1.303.364-1.818.576-.91.971-1.152c.424-.273.879-.394 1.425-.394.516 0 1.001.121 1.425.394s.758.667.971 1.152c.242.515.364 1.121.364 1.818s-.122 1.303-.364 1.819-.576.909-.971 1.151c-.424.273-.879.394-1.425.394s-1.031-.121-1.425-.394zm2.517-1.242c.273-.394.394-.97.394-1.728s-.121-1.364-.394-1.727c-.273-.394-.637-.576-1.122-.576a1.25 1.25 0 0 0-1.092.576c-.273.394-.394.969-.394 1.727s.121 1.364.394 1.728a1.25 1.25 0 0 0 1.092.575c.485 0 .849-.181 1.122-.575z"/><path opacity=".293" d="M481.682 396.474v6.425h-1.183v-5.425h-1.365v-1h2.548z"/><path opacity=".828" d="M499.058 402.475c-.394-.243-.697-.606-.909-1.091s-.334-1.031-.334-1.697c0-.637.121-1.213.334-1.698s.515-.848.909-1.091a2.42 2.42 0 0 1 1.304-.363c.486 0 .94.121 1.304.363.395.243.698.606.91 1.091s.334 1.031.334 1.698-.122 1.212-.334 1.697-.515.848-.91 1.091-.818.363-1.304.363a2.42 2.42 0 0 1-1.304-.363zm2.366-1.152c.242-.364.394-.909.394-1.606 0-.727-.121-1.243-.394-1.606a1.19 1.19 0 0 0-1.031-.546c-.425 0-.759.182-1.031.546-.243.363-.395.909-.395 1.606 0 .727.122 1.242.395 1.606a1.19 1.19 0 0 0 1.031.546c.424-.031.758-.213 1.031-.546z"/><use href="#m" x="-159.816" y="219.603" opacity=".834"/><path opacity=".526" d="M539.18 402.111c-.334-.212-.607-.515-.789-.939s-.303-.91-.303-1.485.091-1.061.303-1.485c.182-.425.455-.728.789-.94s.727-.333 1.152-.333.819.121 1.152.333.607.515.789.94.303.909.303 1.485-.091 1.06-.303 1.485c-.182.424-.455.727-.789.939s-.727.334-1.152.334-.819-.122-1.152-.334zm2.062-1c.212-.303.333-.788.333-1.394 0-.636-.121-1.091-.333-1.394a1.07 1.07 0 0 0-.91-.485c-.364 0-.667.151-.879.485-.213.303-.334.788-.334 1.394 0 .636.121 1.091.334 1.394s.515.485.879.485c.364-.03.667-.182.91-.485z"/><use href="#x" x="399.511" y="39.914" opacity=".362"/><use href="#o" x="-139.832" y="199.631" opacity=".645"/><path opacity=".145" d="M599.437 401.414c-.243-.151-.425-.364-.546-.667s-.212-.636-.212-1.03.06-.758.212-1.03c.121-.304.334-.516.546-.667a1.52 1.52 0 0 1 .819-.243 1.52 1.52 0 0 1 .818.243c.243.151.425.363.577.667.121.303.212.636.212 1.03s-.061.758-.212 1.03c-.122.303-.334.516-.577.667a1.52 1.52 0 0 1-.818.243c-.304-.031-.577-.091-.819-.243zm1.455-.727c.152-.212.243-.546.243-1s-.091-.758-.243-1c-.151-.213-.363-.334-.636-.334a.75.75 0 0 0-.637.334c-.152.212-.243.545-.243 1s.091.757.243 1a.75.75 0 0 0 .637.333c.273 0 .485-.121.636-.333z"/><path opacity=".274" d="M619.573 401.111c-.182-.121-.364-.303-.455-.545-.121-.243-.182-.546-.182-.879s.061-.637.182-.879.273-.424.455-.546.424-.181.667-.181.485.06.667.181a1.02 1.02 0 0 1 .455.546c.121.242.182.545.182.879s-.061.636-.182.879a1.37 1.37 0 0 1-.455.545 1.3 1.3 0 0 1-.667.182c-.273 0-.485-.061-.667-.182zm1.183-.576c.121-.181.182-.454.182-.818s-.061-.636-.182-.818-.304-.273-.516-.273-.394.091-.515.273-.182.454-.182.818.06.637.182.818.303.273.515.273.394-.091.516-.273z"/><path opacity=".618" d="M639.679 400.808c-.152-.091-.273-.242-.364-.424s-.122-.424-.122-.667c0-.273.031-.485.122-.667s.212-.333.364-.424.333-.151.515-.151.364.06.516.151.273.243.364.424.121.425.121.667c0 .273-.03.485-.121.667s-.213.333-.364.424-.334.152-.516.152a1.02 1.02 0 0 1-.515-.152zm.94-.454c.091-.152.151-.364.151-.637s-.06-.485-.151-.636-.243-.212-.425-.212-.303.06-.394.212-.152.363-.152.636.061.485.152.637.242.212.394.212a.53.53 0 0 0 .425-.212z"/><path opacity=".166" d="M659.815 400.475c-.121-.061-.182-.182-.243-.303s-.091-.303-.091-.485a1.27 1.27 0 0 1 .091-.485c.061-.121.152-.242.243-.303.121-.061.243-.091.364-.091s.273.03.364.091c.121.061.182.182.242.303s.091.303.091.485a1.25 1.25 0 0 1-.091.485c-.06.121-.151.242-.242.303-.121.061-.243.091-.364.091s-.243-.03-.364-.091zm.667-.333c.061-.091.121-.243.121-.455s-.03-.364-.121-.455c-.061-.091-.182-.151-.303-.151s-.212.06-.303.151c-.061.091-.122.243-.122.455s.031.364.122.455c.06.09.182.151.303.151s.212-.03.303-.151z"/><path opacity=".648" d="M679.982 400.081c-.061-.031-.091-.091-.122-.152a.58.58 0 0 1-.06-.242.58.58 0 0 1 .06-.243c.031-.061.061-.121.122-.151s.121-.061.182-.061.121.03.182.061.091.09.121.151a.58.58 0 0 1 .061.243.58.58 0 0 1-.061.242c-.03.061-.061.121-.121.152s-.122.06-.182.06a.43.43 0 0 1-.182-.06zm.333-.152a.46.46 0 0 0 .061-.242c0-.122-.03-.182-.061-.243s-.091-.091-.151-.091-.122.03-.152.091-.061.121-.061.243.031.181.061.242.091.091.152.091c.06-.03.091-.03.151-.091z"/><path opacity=".287" d="M700.087 399.808l-.03-.03v-.061-.061c0-.03.03-.03.03-.03h.061.061l.03.03v.061.061c0 .03-.03.03-.03.03h-.061-.061zm.091-.061v-.06-.061l-.03-.03c-.03 0-.03 0-.03.03v.061.06l.03.031s.03 0 .03-.031z"/><path opacity=".654" d="M140.76 419.81c-.03 0-.03-.03-.06-.06s-.031-.061-.031-.091 0-.061.031-.091c0-.03.03-.03.06-.061.031 0 .031-.03.061-.03s.061 0 .061.03c.03 0 .03.031.06.061 0 .03.031.061.031.091s0 .061-.031.091l-.06.06c-.031 0-.031.031-.061.031-.03-.031-.03-.031-.061-.031zm.122-.06c0-.03.03-.061.03-.091s0-.061-.03-.091c0-.03-.031-.03-.061-.03s-.03 0-.061.03c0 .03-.03.061-.03.091s0 .061.03.091c0 .03.031.03.061.03s.061-.03.061-.03z"/><use href="#AB" x="39.969" y="19.972" opacity=".506"/><path opacity=".895" d="M181.093 418.871v1.576h-.303v-1.333h-.333v-.243h.636z"/><path opacity=".959" d="M200.289 420.659c-.151-.091-.242-.212-.333-.394s-.122-.364-.122-.606.031-.424.122-.606.182-.303.333-.394.304-.121.486-.121a.89.89 0 0 1 .485.121c.151.091.242.212.333.394s.122.363.122.606-.031.424-.122.606-.182.303-.333.394a.89.89 0 0 1-.485.121c-.182 0-.364-.03-.486-.121zm.849-.424c.091-.121.122-.334.122-.576s-.061-.455-.122-.576a.43.43 0 0 0-.363-.182c-.152 0-.273.061-.364.182s-.122.333-.122.576.031.455.122.576.212.182.364.182c.121.03.272-.061.363-.182z"/><path opacity=".521" d="M221.275 418.265v2.818h-.516v-2.394h-.606v-.424h1.122z"/><path opacity=".44" d="M241.35 418.022v3.274h-.606v-2.789h-.698v-.515h1.304v.03z"/><path opacity=".848" d="M259.88 421.356c-.243-.151-.425-.364-.546-.667s-.212-.636-.212-1.03.06-.758.212-1.031c.121-.303.333-.515.546-.666a1.52 1.52 0 0 1 .819-.243 1.52 1.52 0 0 1 .818.243c.243.151.425.363.576.666.122.304.213.637.213 1.031s-.061.758-.213 1.03c-.121.303-.333.516-.576.667a1.52 1.52 0 0 1-.818.243c-.334 0-.577-.091-.819-.243zm1.425-.697c.152-.212.243-.546.243-1s-.091-.758-.243-1a.75.75 0 0 0-.637-.334.75.75 0 0 0-.637.334c-.151.212-.242.545-.242 1s.091.758.242 1a.75.75 0 0 0 .637.333.75.75 0 0 0 .637-.333z"/><path opacity=".9" d="M279.773 421.538c-.273-.182-.454-.424-.606-.727-.152-.334-.212-.697-.212-1.152s.06-.818.212-1.152.364-.575.606-.727c.273-.182.546-.242.88-.242s.637.091.879.242c.273.182.455.424.607.727.151.334.212.697.212 1.152s-.061.818-.212 1.152-.364.576-.607.727c-.273.182-.546.243-.879.243s-.637-.061-.88-.243zm1.577-.788c.182-.242.273-.606.273-1.091s-.091-.849-.273-1.091a.81.81 0 0 0-.697-.364c-.303 0-.516.122-.698.364s-.273.606-.273 1.091.091.849.273 1.091a.81.81 0 0 0 .698.364c.303 0 .546-.121.697-.364z"/><path opacity=".198" d="M299.667 421.689c-.273-.181-.515-.454-.667-.788s-.243-.757-.243-1.242.091-.879.243-1.243c.152-.333.394-.606.667-.788s.607-.273.971-.273.667.091.97.273c.273.182.515.455.667.788s.243.758.243 1.243-.091.879-.243 1.242c-.152.334-.394.607-.667.788s-.607.273-.97.273-.698-.091-.971-.273zm1.729-.848c.182-.273.273-.667.273-1.182s-.091-.909-.273-1.182-.425-.394-.758-.394c-.304 0-.577.121-.759.394s-.273.667-.273 1.182.091.909.273 1.182.425.394.759.394a.87.87 0 0 0 .758-.394z"/><path opacity=".584" d="M319.591 421.811c-.303-.182-.546-.485-.697-.849a3.46 3.46 0 0 1-.273-1.333c0-.516.091-.94.273-1.334.181-.363.424-.667.697-.848.303-.182.637-.303 1.031-.303s.728.09 1.031.303c.303.181.546.485.728.848s.273.818.273 1.334-.091.939-.273 1.333c-.182.364-.425.667-.728.849s-.637.303-1.031.303-.758-.091-1.031-.303zm1.82-.879c.212-.273.303-.697.303-1.273 0-.546-.091-.97-.303-1.273-.213-.273-.455-.424-.819-.424-.334 0-.607.151-.789.424-.212.273-.303.697-.303 1.273 0 .546.091.97.303 1.273.213.273.455.424.789.424.364 0 .637-.151.819-.424z"/><path opacity=".147" d="M339.515 421.932a2.17 2.17 0 0 1-.758-.879c-.182-.394-.273-.848-.273-1.394s.091-1 .273-1.394.424-.697.758-.879c.303-.212.667-.303 1.061-.303a1.98 1.98 0 0 1 1.092.303 2.17 2.17 0 0 1 .758.879c.182.394.273.849.273 1.394s-.091 1-.273 1.394-.424.697-.758.879c-.303.212-.667.303-1.092.303-.394 0-.758-.091-1.061-.303zm1.911-.939c.212-.303.303-.728.303-1.334 0-.576-.091-1.03-.303-1.333s-.486-.455-.85-.455-.636.152-.849.455-.303.727-.303 1.333c0 .576.091 1.031.303 1.334s.485.454.849.454a1.14 1.14 0 0 0 .85-.454z"/><use href="#f" x="-299.618" y="279.49" opacity=".332"/><path opacity=".528" d="M381.577 417.022v5.244h-.971v-4.425h-1.122v-.819h2.093z"/><path opacity=".503" d="M401.561 416.992v5.334h-1v-4.485h-1.123v-.819h2.123v-.03z"/><path opacity=".239" d="M419.363 422.053c-.334-.212-.577-.515-.789-.939-.182-.394-.273-.879-.273-1.455 0-.546.091-1.031.273-1.455.182-.394.455-.727.789-.939s.697-.334 1.122-.334a2.03 2.03 0 0 1 1.122.334c.333.212.606.515.788.939.182.394.273.879.273 1.455 0 .545-.091 1.03-.273 1.455-.182.393-.455.727-.788.939s-.698.333-1.122.333c-.425-.03-.789-.121-1.122-.333zm2.001-1c.212-.303.334-.758.334-1.394 0-.606-.122-1.091-.334-1.394s-.515-.455-.879-.455a1.03 1.03 0 0 0-.88.455c-.212.303-.333.757-.333 1.394 0 .606.121 1.091.333 1.394s.516.454.88.454.667-.151.879-.454z"/><path opacity=".187" d="M441.47 417.083v5.152h-.971v-4.364h-1.091v-.818h2.062v.03z"/><path opacity=".178" d="M461.424 417.144v5h-.94v-4.243h-1.061v-.788h2.001v.031z"/><path opacity=".731" d="M481.348 417.265v4.788h-.879v-4.031h-1.001v-.757h1.88z"/><path opacity=".666" d="M501.272 417.386v4.546h-.849v-3.819h-.97v-.697h1.819v-.03z"/><path opacity=".164" d="M519.468 421.538c-.273-.182-.455-.424-.607-.727-.151-.334-.212-.697-.212-1.152s.061-.818.212-1.152.364-.575.607-.727c.273-.182.546-.242.879-.242s.637.091.88.242c.273.182.454.424.606.727.152.334.212.697.212 1.152s-.06.818-.212 1.152-.364.576-.606.727c-.273.182-.546.243-.88.243s-.606-.061-.879-.243zm1.577-.788c.182-.242.273-.606.273-1.091s-.091-.849-.273-1.091-.395-.364-.698-.364a.81.81 0 0 0-.697.364c-.182.242-.273.606-.273 1.091s.091.849.273 1.091.394.364.697.364.546-.121.698-.364z"/><path opacity=".751" d="M539.513 421.356c-.243-.151-.425-.364-.546-.667s-.212-.636-.212-1.03.061-.758.212-1.031a1.51 1.51 0 0 1 .546-.666c.243-.152.516-.243.819-.243s.576.091.819.243.424.363.576.666c.121.304.212.637.212 1.031s-.061.758-.212 1.03a1.39 1.39 0 0 1-.576.667c-.243.152-.516.243-.819.243s-.576-.091-.819-.243zm1.456-.697c.151-.212.242-.546.242-1s-.091-.758-.242-1a.75.75 0 0 0-.637-.334.75.75 0 0 0-.637.334c-.152.212-.243.545-.243 1s.091.758.243 1a.75.75 0 0 0 .637.333.75.75 0 0 0 .637-.333z"/><path opacity=".584" d="M559.589 421.144c-.213-.121-.364-.333-.486-.576s-.182-.545-.182-.909.061-.667.182-.909.273-.455.486-.576.454-.212.697-.212c.273 0 .485.061.698.212.212.121.363.333.485.576s.182.545.182.909-.061.667-.182.909-.273.455-.485.576-.455.212-.698.212-.485-.06-.697-.212zm1.273-.606c.122-.182.213-.485.213-.879s-.061-.667-.213-.879c-.121-.182-.333-.303-.546-.303-.242 0-.424.091-.545.303-.122.182-.213.485-.213.879s.061.667.213.879c.121.182.333.303.545.303.213-.03.425-.121.546-.303z"/><path opacity=".957" d="M579.664 420.932c-.182-.122-.303-.273-.424-.485-.091-.212-.152-.485-.152-.788s.061-.546.152-.788c.09-.212.242-.394.424-.485.182-.121.364-.182.607-.182.212 0 .424.061.606.182s.334.273.425.485.151.485.151.788-.06.545-.151.788c-.091.212-.243.394-.425.485-.182.121-.394.182-.606.182s-.425-.061-.607-.182zm1.092-.516c.121-.151.182-.424.182-.757s-.061-.576-.182-.758a.59.59 0 0 0-.485-.242.59.59 0 0 0-.486.242c-.121.152-.182.424-.182.758s.061.576.182.757a.59.59 0 0 0 .486.243c.212 0 .364-.091.485-.243z"/><path opacity=".301" d="M600.71 418.538v2.273h-.425v-1.91h-.485v-.363h.91z"/><path opacity=".222" d="M620.543 418.871v1.576h-.303v-1.333h-.334v-.243h.637z"/><path opacity=".156" d="M640.406 419.204v.94h-.181v-.788h-.213v-.152h.394z"/><path opacity=".223" d="M660.24 419.507v.303h-.061v-.272h-.061v-.061h.122v.03z"/><use href="#D" y="399.262" opacity=".331"/><path opacity=".32" d="M200.866 439.358v.546h-.091v-.455h-.122v-.091h.213z"/><path opacity=".976" d="M220.487 440.116c-.061-.03-.122-.121-.152-.182-.03-.091-.061-.182-.061-.303s.031-.212.061-.303.091-.152.152-.182a.57.57 0 0 1 .242-.061c.091 0 .152.031.243.061.061.03.121.121.152.182.03.091.06.182.06.303s-.03.212-.06.303-.091.152-.152.182a.58.58 0 0 1-.243.061c-.091 0-.151 0-.242-.061zm.424-.212c.031-.061.061-.152.061-.303s-.03-.212-.061-.303c-.03-.061-.121-.091-.182-.091-.091 0-.151.03-.182.091s-.06.151-.06.303.03.212.06.303c.031.06.122.091.182.091.091 0 .152-.031.182-.091z"/><path opacity=".503" d="M240.38 440.328c-.091-.06-.182-.151-.243-.272a.98.98 0 0 1-.091-.425c0-.182.031-.303.091-.424s.122-.212.243-.273c.091-.06.212-.091.334-.091s.242.031.333.091.182.152.243.273.091.273.091.424a.89.89 0 0 1-.091.425c-.061.121-.122.212-.243.272-.091.061-.212.091-.333.091s-.243-.03-.334-.091zm.576-.303c.061-.091.091-.242.091-.424s-.03-.333-.091-.424-.151-.152-.273-.152a.32.32 0 0 0-.273.152c-.06.091-.091.242-.091.424s.031.333.091.424a.32.32 0 0 0 .273.152c.122 0 .213-.061.273-.152z"/><path opacity=".474" d="M261.093 438.601v2.03h-.364v-1.727h-.425v-.303h.789z"/><path opacity=".819" d="M280.137 440.722c-.152-.091-.273-.242-.364-.424s-.121-.424-.121-.667c0-.273.03-.485.121-.666s.212-.334.364-.425.334-.151.516-.151.364.06.515.151.273.243.364.425.121.424.121.666c0 .273-.03.485-.121.667s-.212.333-.364.424a1.02 1.02 0 0 1-.515.152c-.182 0-.364-.061-.516-.152zm.94-.454c.091-.152.152-.364.152-.637s-.061-.485-.152-.636-.242-.212-.424-.212a.41.41 0 0 0-.395.212c-.091.151-.151.363-.151.636s.06.485.151.637.243.212.395.212a.49.49 0 0 0 .424-.212z"/><path opacity=".218" d="M301.183 438.268v2.727h-.515v-2.303h-.577v-.424h1.092z"/><use href="#AC" opacity=".555"/><path opacity=".622" d="M339.879 441.116c-.212-.121-.364-.333-.485-.576s-.182-.545-.182-.909.061-.666.182-.909.273-.455.485-.576.455-.212.698-.212a1.12 1.12 0 0 1 .697.212c.212.121.364.334.485.576s.182.546.182.909-.06.667-.182.909-.273.455-.485.576-.455.212-.697.212c-.273 0-.486-.09-.698-.212zm1.243-.636c.122-.182.213-.485.213-.879s-.061-.667-.213-.879c-.121-.182-.333-.303-.545-.303-.243 0-.425.091-.546.303-.122.182-.213.485-.213.879s.061.667.213.879c.121.182.333.303.546.303.242 0 .424-.091.545-.303z"/><path opacity=".982" d="M361.228 437.904v3.455h-.637v-2.91h-.728v-.545h1.365z"/><path opacity=".837" d="M381.243 437.874v3.515h-.667v-2.97h-.758v-.545h1.425z"/><path opacity=".543" d="M399.742 441.207a1.56 1.56 0 0 1-.516-.637c-.121-.272-.182-.606-.182-.969s.061-.697.182-.97a1.56 1.56 0 0 1 .516-.637c.212-.151.485-.212.758-.212s.546.061.758.212a1.56 1.56 0 0 1 .516.637c.121.273.182.606.182.97s-.061.697-.182.969a1.56 1.56 0 0 1-.516.637c-.212.151-.485.212-.758.212s-.515-.061-.758-.212zm1.365-.667c.151-.212.212-.515.212-.939s-.061-.728-.212-.94-.334-.303-.607-.303c-.243 0-.455.091-.606.303s-.213.515-.213.94.061.727.213.939a.67.67 0 0 0 .606.303c.243.031.455-.091.607-.303z"/><path opacity=".689" d="M419.726 441.207a1.55 1.55 0 0 1-.515-.637 2.39 2.39 0 0 1-.182-.969c0-.364.06-.697.182-.97a1.55 1.55 0 0 1 .515-.637c.213-.151.486-.212.758-.212s.546.061.759.212a1.55 1.55 0 0 1 .515.637c.121.273.182.606.182.97s-.061.697-.182.969a1.55 1.55 0 0 1-.515.637c-.213.151-.486.212-.759.212s-.545-.061-.758-.212zm1.365-.667c.152-.212.212-.515.212-.939s-.06-.728-.212-.94-.334-.303-.607-.303c-.242 0-.454.091-.606.303s-.212.515-.212.94.06.727.212.939.334.303.606.303c.243.031.455-.091.607-.303z"/><path opacity=".896" d="M439.711 441.177c-.212-.152-.394-.333-.515-.606s-.182-.576-.182-.94.06-.697.182-.939c.121-.273.303-.485.515-.606.212-.152.455-.212.728-.212s.516.06.728.212.394.333.515.606.182.576.182.939-.06.697-.182.94c-.121.273-.303.485-.515.606-.212.152-.455.212-.728.212s-.516-.06-.728-.212zm1.335-.636c.151-.213.212-.516.212-.91s-.061-.697-.212-.909-.334-.303-.577-.303-.424.091-.576.303-.212.515-.212.909.06.697.212.91.334.303.576.303.425-.122.577-.303z"/><path opacity=".134" d="M461.091 437.964v3.274h-.607v-2.789h-.697v-.515h1.304v.03z"/><use href="#AC" x="159.817" opacity=".705"/><path opacity=".864" d="M500.938 438.207v2.818h-.515v-2.394h-.607v-.424h1.122z"/><use href="#z" x="-179.771" y="79.828" opacity=".46"/><path opacity=".707" d="M540.756 438.57v2.122h-.394v-1.788h-.455v-.334h.849z"/><path opacity=".972" d="M559.953 440.359a.64.64 0 0 1-.243-.303 1.01 1.01 0 0 1-.091-.455 1.01 1.01 0 0 1 .091-.455c.061-.121.152-.212.243-.303.091-.06.212-.091.364-.091a.82.82 0 0 1 .364.091.64.64 0 0 1 .242.303 1.01 1.01 0 0 1 .091.455 1.01 1.01 0 0 1-.091.455c-.061.121-.151.212-.242.303-.091.06-.213.091-.364.091-.152.03-.273 0-.364-.091zm.637-.303c.06-.091.091-.243.091-.425s-.031-.333-.091-.424-.152-.151-.273-.151-.213.06-.273.151-.091.243-.091.424.03.334.091.425.151.151.273.151.212-.06.273-.151z"/><path opacity=".956" d="M580.513 439.085v1.092h-.212v-.94h-.242v-.182h.454v.03z"/><path opacity=".458" d="M600.134 439.904c-.03-.03-.061-.061-.091-.121s-.03-.121-.03-.182 0-.121.03-.182.061-.091.091-.121.091-.03.121-.03.091 0 .122.03.06.06.091.121.03.121.03.182 0 .121-.03.182a.44.44 0 0 1-.091.121c-.031.03-.091.03-.122.03s-.091 0-.121-.03zm.243-.121c.03-.031.03-.091.03-.152s0-.121-.03-.151-.061-.061-.122-.061c-.03 0-.091.03-.091.061-.03.03-.03.091-.03.151s0 .121.03.152.061.06.091.06c.061 0 .091-.03.122-.06z"/><path opacity=".901" d="M620.179 439.722l-.03-.03v-.061-.061c0-.03.03-.03.03-.03h.061.061l.03.03v.061.061c0 .03-.03.03-.03.03h-.061c-.03 0-.03.03-.061 0zm.091-.03v-.061-.061l-.03-.03c-.03 0-.03 0-.03.03v.061.061l.03.03c0-.03.03-.03.03-.03z"/><path opacity=".808" d="M240.744 459.512v.152h-.03l.03-.152-.06.031v-.031h.06z"/><path opacity=".255" d="M260.608 459.725c-.031 0-.031-.031-.061-.061s-.03-.061-.03-.091 0-.061.03-.091l.061-.061c.03 0 .03-.03.06-.03s.061 0 .061.03c.03 0 .03.031.061.061 0 .03.03.061.03.091s0 .061-.03.091c0 .03-.031.03-.061.061-.03 0-.03.03-.061.03 0 0-.03 0-.06-.03zm.121-.061c0-.03.03-.061.03-.091s0-.061-.03-.091c0-.03-.03-.03-.061-.03s-.03 0-.06.03-.031.061-.031.091 0 .061.031.091c0 .03.03.03.06.03s.061 0 .061-.03z"/><path opacity=".773" d="M280.774 459.27v.636h-.121v-.515h-.122v-.091h.243v-.03z"/><use href="#AB" x="179.771" y="59.886" opacity=".626"/><path opacity=".837" d="M320.349 460.118c-.061-.06-.121-.121-.182-.212-.03-.091-.061-.212-.061-.333s.031-.243.061-.333.091-.152.182-.213c.061-.06.152-.06.243-.06a.57.57 0 0 1 .242.06c.061.061.122.122.182.213.031.09.061.212.061.333a1.07 1.07 0 0 1-.061.333c-.03.091-.091.152-.182.212-.06.061-.151.061-.242.061s-.152 0-.243-.061zm.455-.212c.061-.06.061-.182.061-.303 0-.151-.031-.242-.061-.303-.061-.06-.121-.091-.212-.091a.28.28 0 0 0-.213.091c-.06.061-.06.182-.06.303 0 .152.03.243.06.303.061.061.122.091.213.091s.151-.03.212-.091z"/><path opacity=".706" d="M340.273 460.21c-.091-.061-.152-.152-.212-.243a.83.83 0 0 1-.091-.394c0-.151.03-.273.091-.394s.121-.182.212-.242a.51.51 0 0 1 .303-.091c.122 0 .213.03.303.091s.152.151.213.242c.06.121.091.243.091.394s-.031.273-.091.394a.57.57 0 0 1-.213.243.51.51 0 0 1-.303.09c-.121 0-.212-.03-.303-.09zm.546-.243c.061-.091.091-.212.091-.364s-.03-.303-.091-.363c-.061-.091-.152-.122-.243-.122s-.182.031-.242.122-.091.212-.091.363.03.303.091.364c.06.091.151.121.242.121s.182-.06.243-.121z"/><path opacity=".189" d="M360.227 460.3c-.091-.06-.182-.151-.242-.272s-.091-.273-.091-.425c0-.181.03-.303.091-.424s.121-.212.242-.273c.091-.06.212-.091.334-.091s.242.031.333.091.182.152.243.273.091.273.091.424a.88.88 0 0 1-.091.425c-.061.121-.121.212-.243.272s-.212.091-.333.091-.243-.03-.334-.091zm.607-.303c.06-.091.091-.242.091-.424s-.031-.333-.091-.424a.32.32 0 0 0-.273-.152c-.122 0-.213.061-.273.152s-.091.242-.091.424.03.333.091.424.151.152.273.152c.091 0 .182-.061.273-.152z"/><path opacity=".325" d="M380.182 460.331a.64.64 0 0 1-.243-.303c-.061-.121-.091-.273-.091-.455s.03-.333.091-.454.152-.213.243-.303c.091-.061.212-.091.364-.091.121 0 .242.03.364.091.091.06.182.151.242.303.061.121.091.272.091.454s-.03.334-.091.455-.151.212-.242.303c-.091.06-.213.091-.364.091s-.273-.031-.364-.091zm.637-.303c.06-.091.091-.243.091-.424s-.031-.334-.091-.425-.152-.151-.273-.151-.213.06-.273.151-.091.243-.091.425.03.333.091.424.151.151.273.151c.091 0 .182-.06.273-.151z"/><path opacity=".149" d="M400.834 458.755v1.636h-.304v-1.394h-.333v-.242h.637z"/><path opacity=".416" d="M420.121 460.331a.64.64 0 0 1-.243-.303c-.061-.121-.091-.273-.091-.455s.03-.333.091-.454.152-.213.243-.303c.091-.061.212-.091.364-.091.121 0 .242.03.364.091.09.06.181.151.242.303.061.121.091.272.091.454s-.03.334-.091.455-.152.212-.242.303c-.091.06-.213.091-.364.091-.122 0-.243-.031-.364-.091zm.637-.303c.06-.091.091-.243.091-.424s-.031-.334-.091-.425-.152-.151-.273-.151-.213.06-.273.151-.091.243-.091.425.03.333.091.424.151.151.273.151.212-.06.273-.151z"/><path opacity=".92" d="M440.773 458.815v1.576h-.304v-1.333h-.333v-.243h.637z"/><path opacity=".183" d="M460.12 460.21c-.091-.061-.151-.152-.212-.243a.83.83 0 0 1-.091-.394c0-.151.03-.273.091-.394a.56.56 0 0 1 .212-.242.51.51 0 0 1 .303-.091.51.51 0 0 1 .304.091c.091.06.151.151.212.242.061.121.091.243.091.394a.83.83 0 0 1-.091.394.57.57 0 0 1-.212.243c-.091.06-.182.09-.304.09a.59.59 0 0 1-.303-.09zm.546-.243c.061-.091.091-.212.091-.364s-.03-.303-.091-.363c-.061-.091-.152-.122-.243-.122s-.182.031-.242.122-.091.212-.091.363.03.303.091.364c.06.091.151.121.242.121.122 0 .182-.06.243-.121z"/><path opacity=".725" d="M480.165 460.118c-.06-.06-.121-.121-.182-.212a1.1 1.1 0 0 1-.06-.333c0-.121.03-.243.06-.333s.091-.152.182-.213c.061-.06.152-.06.243-.06a.58.58 0 0 1 .243.06c.06.061.121.122.182.213.03.09.06.212.06.333a1.1 1.1 0 0 1-.06.333c-.031.091-.091.152-.182.212-.061.061-.152.061-.243.061s-.182 0-.243-.061zm.455-.212c.061-.06.061-.182.061-.303 0-.151-.03-.242-.061-.303-.06-.06-.121-.091-.212-.091s-.152.031-.212.091-.061.182-.061.303c0 .152.03.243.061.303.06.061.121.091.212.091s.152-.03.212-.091z"/><use href="#E" x="279.664" y="419.235" opacity=".993"/><path opacity=".722" d="M520.226 459.876a.39.39 0 0 1-.091-.121c-.031-.061-.031-.121-.031-.182s0-.121.031-.182.06-.091.091-.121.091-.03.121-.03c.061 0 .091 0 .121.03s.061.061.091.121.031.122.031.182 0 .121-.031.182a.39.39 0 0 1-.091.121c-.03.031-.091.031-.121.031s-.091 0-.121-.031zm.242-.121c.031-.03.031-.091.031-.152s0-.121-.031-.151-.06-.061-.091-.061-.091.031-.091.061c-.03.03-.03.091-.03.151s0 .122.03.152.061.061.091.061.061-.031.091-.061z"/><path opacity=".767" d="M540.241 459.755l-.061-.061c0-.03-.03-.06-.03-.121 0-.03 0-.091.03-.121 0-.031.031-.061.061-.061.03-.03.061-.03.091-.03s.061 0 .091.03l.06.061c0 .03.031.06.031.121 0 .03 0 .091-.031.121 0 .031-.03.061-.06.061-.03.03-.061.03-.091.03s-.061 0-.091-.03zm.152-.061c.03-.03.03-.06.03-.091 0-.06 0-.091-.03-.091-.031-.03-.031-.03-.061-.03s-.061 0-.061.03-.03.061-.03.091c0 .061 0 .091.03.091s.031.031.061.031.061 0 .061-.031z"/><path opacity=".286" d="M560.347 459.512v.152h-.031l.031-.152-.061.031v-.031h.061z"/><path opacity=".928" d="M360.531 479.576c0-.031-.031-.031-.031-.031v-.03h.031.031v.03.031h-.031zm.031 0c-.031 0-.031-.031 0 0z"/><use href="#AD" opacity=".311"/><path opacity=".515" d="M420.454 479.575c0-.03-.03-.03-.03-.03v-.03h.03.03v.03.03h-.03 0zm.03 0c-.03 0-.03-.03 0 0z"/><use href="#AD" x="39.939" opacity=".662"/><path opacity=".802" d="M460.424 479.576c0-.031-.031-.031-.031-.031v-.03h.031.031v.03.031h-.031zm.031 0c-.031 0-.031-.031 0 0-.031 0-.031 0 0 0z"/></g><defs ><path id="B" d="M300.789 20.003v.788h-.152v-.667h-.151v-.121h.303z"/><path id="C" d="M460.666 19.791v1.243h-.243v-1.061h-.273v-.182h.516z"/><path id="D" d="M180.82 40.278v.152h-.03l.03-.152-.06.03v-.03h.06z"/><path id="E" d="M220.911 39.884v.939h-.182v-.788h-.212v-.151h.394z"/><path id="F" d="M261.062 39.43v1.879h-.364v-1.576h-.394v-.303h.758z"/><path id="G" d="M281.108 39.248v2.273h-.425v-1.909h-.485v-.364h.91z"/><path id="H" d="M341.213 38.794v3.122h-.576v-2.637h-.667v-.485h1.243z"/><path id="I" d="M381.213 38.672v3.364h-.637v-2.849h-.698v-.515h1.335z"/><path id="J" d="M401.167 38.672v3.364h-.637v-2.849h-.697v-.515h1.334z"/><path id="K" d="M560.589 39.611v1.485h-.273v-1.243h-.303v-.242h.576z"/><path id="L" d="M181.063 59.614v1.394h-.273v-1.182h-.303v-.212h.576z"/><path id="M" d="M261.396 58.523v3.607h-.667v-3.031h-.758v-.576h1.425z"/><path id="N" d="M381.546 57.795v5.092h-.94v-4.304h-1.091v-.788h2.031z"/><path id="O" d="M261.699 77.707v5.152h-.97v-4.334h-1.092v-.818h2.062z"/><path id="P" d="M361.865 77.01v6.576h-1.213v-5.546h-1.395v-1.03h2.608z"/><path id="Q" d="M381.88 76.92v6.728h-1.243V77.95h-1.426v-1.061h2.669v.03z"/><path id="R" d="M541.363 77.677v5.243h-.97v-4.425h-1.122v-.818h2.092z"/><path id="S" d="M362.168 96.225v8.061h-1.486v-6.819h-1.698v-1.243h3.184z"/><path id="T" d="M422.122 96.134v8.213h-1.516v-6.94h-1.729v-1.273h3.245z"/><path id="U" d="M101.337 119.046v2.334h-.425v-1.97h-.485v-.364h.91z"/><path id="V" d="M382.426 115.47v9.486h-1.759v-8.001h-2.001v-1.485h3.76z"/><path id="W" d="M442.319 115.53v9.395h-1.759v-7.94h-2.001v-1.455h3.76z"/><path id="X" d="M482.198 115.712v9.001h-1.668v-7.607h-1.911v-1.394h3.579z"/><path id="Y" d="M522.015 116.076v8.304h-1.547v-7.001h-1.759v-1.303h3.306z"/><path id="Z" d="M342.639 134.987v10.426h-1.941v-8.789h-2.214v-1.606h4.155v-.031z"/><path id="a" d="M382.638 134.866v10.637h-1.971v-9.001h-2.244v-1.667h4.215v.031z"/><path id="b" d="M402.623 134.805v10.729h-2.002v-9.062h-2.274v-1.667h4.276z"/><path id="c" d="M482.44 135.078v10.183h-1.88v-8.607h-2.153v-1.576h4.033z"/><path id="d" d="M581.878 136.199v7.971h-1.486v-6.728h-1.698v-1.243h3.184z"/><path id="e" d="M621.544 136.866v6.668h-1.243v-5.607h-1.395v-1.03h2.638v-.031z"/><path id="f" d="M661.21 137.593v5.152h-.97v-4.364h-1.092v-.818h2.062v.03z"/><path id="g" d="M61.368 159.051v2.182h-.394v-1.849h-.455v-.333h.849z"/><path id="h" d="M101.701 158.081v4.152h-.759v-3.516h-.879v-.636h1.638z"/><path id="i" d="M182.276 156.384v7.516h-1.395v-6.334h-1.577v-1.182h2.972z"/><path id="j" d="M382.85 154.323v11.668h-2.153v-9.85h-2.456v-1.818h4.609z"/><path id="k" d="M760.314 159.505v1.243h-.242v-1.061h-.273v-.182h.515z"/><path id="l" d="M383.002 173.871v12.456h-2.305V175.81h-2.638v-1.939h4.943z"/><path id="m" d="M681.316 177.205v5.788h-1.092v-4.879h-1.213v-.909h2.305z"/><path id="n" d="M1.019 199.995v.152h-.03l.03-.152-.061.03v-.03h.061z"/><path id="o" d="M720.982 197.874v4.394h-.819v-3.697h-.94v-.697h1.759z"/><path id="p" d="M303.093 213.815v12.456h-2.304v-10.516h-2.639v-1.94h4.943z"/><path id="q" d="M800.102 219.846v.394h-.061v-.333h-.091v-.061h.152z"/><path id="r" d="M283.079 233.939v12.123h-2.244v-10.244h-2.578v-1.879h4.822z"/><path id="s" d="M343.215 233.333v13.304h-2.487v-11.244h-2.82v-2.06h5.307z"/><path id="t" d="M661.695 236.212v7.607h-1.425v-6.425h-1.607v-1.182h3.032z"/><path id="u" d="M681.407 276.762v6.334h-1.183v-5.364h-1.334v-1h2.517v.03z"/><path id="v" d="M720.982 277.702v4.455h-.819v-3.758h-.94v-.697h1.759z"/><path id="w" d="M740.39 339.013v1.576h-.303v-1.334h-.334v-.242h.637z"/><path id="x" d="M161.776 357.318v4.94h-.91v-4.152h-1.031v-.758h1.941v-.03z"/><path id="y" d="M222.124 356.288v6.97h-1.304v-5.879h-1.486v-1.091h2.79z"/><path id="z" d="M700.633 358.53v2.516h-.454v-2.122h-.516v-.394h.97z"/><path id="AA" d="M221.851 376.866v5.728h-1.061v-4.819h-1.213v-.879h2.274v-.03z"/><path id="AB" d="M121.018 399.263v.848h-.151v-.727h-.182v-.121h.333z"/><path id="AC" d="M321.198 438.085v3.061h-.576v-2.576h-.637v-.485h1.213z"/><path id="AD" d="M400.501 479.576c0-.031-.031-.031-.031-.031v-.03h.031.03v.03.031h-.03zm.03 0c-.03 0-.03-.031 0 0-.03 0-.03 0 0 0z"/></defs></svg> \ No newline at end of file diff --git a/static/img/landing/serverBadgePartner.svg b/static/img/landing/serverBadgePartner.svg new file mode 100644 index 0000000..9960d7b --- /dev/null +++ b/static/img/landing/serverBadgePartner.svg @@ -0,0 +1,12 @@ +<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g clip-path="url(#clip0_173_2034)"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M20 9.54504C20 10.5313 18.4 11.2679 18.1 12.1544C17.8 13.0408 18.65 14.6513 18.1 15.388C17.55 16.1246 15.8 15.8249 15.025 16.3867C14.25 16.9486 14.0375 18.684 13.1 18.9961C12.1625 19.3082 11.0125 17.9973 10.0125 17.9973C9.0125 17.9973 7.825 19.2458 6.925 18.9961C6.025 18.7464 5.775 16.9486 5 16.3867C4.225 15.8249 2.5 16.162 1.925 15.388C1.35 14.6139 2.2125 13.0907 1.925 12.1544C1.6375 11.218 0 10.5313 0 9.54504C0 8.55873 1.6 7.82213 1.9 6.9357C2.2 6.04927 1.35 4.43873 1.9 3.70212C2.45 2.96551 4.2125 3.26515 5 2.70333C5.7875 2.14151 5.975 0.406113 6.9125 0.0565363C7.85 -0.29304 9 1.09278 10 1.09278C11 1.09278 12.1875 -0.155706 13.0875 0.0939909C13.9875 0.343688 14.225 2.14151 15 2.70333C15.775 3.26515 17.5 2.92806 18.075 3.70212C18.65 4.47618 17.7875 5.99933 18.075 6.9357C18.3625 7.87206 20 8.55873 20 9.54504Z" fill="#5865F2"/> +<path d="M16.6177 9.48651C16.6177 9.98473 16.3709 10.483 16.0008 10.7321L12.1761 13.2233C11.4358 13.7215 10.6955 13.9706 9.83187 13.9706C9.46175 13.9706 9.21501 13.9706 8.84485 13.846C7.85786 13.597 7.11758 13.0987 6.50069 12.3514C6.37731 12.1022 6.50069 11.8531 6.62407 11.7286L8.35135 10.6075C8.47473 10.483 8.72147 10.483 8.84485 10.6075C9.09163 10.7321 9.33838 10.8567 9.46175 10.9812C9.95529 10.9812 10.3254 10.9812 10.6955 10.7321L11.5592 10.2339L14.0267 8.49004L14.3969 8.24091C15.0138 7.86726 16.0008 7.99183 16.3709 8.6146C16.6177 8.9883 16.6177 9.23738 16.6177 9.48651Z" fill="white"/> +<path d="M13.5386 7.22619L11.7987 8.35389C11.5501 8.47919 11.4258 8.47919 11.1772 8.35389C11.053 8.22859 10.8044 8.10329 10.6801 7.97799C10.183 7.85269 9.81017 7.97799 9.4373 8.22859L8.81589 8.60449L5.70887 10.7346C4.96319 11.1105 4.09322 10.9852 3.72037 10.2334C3.22325 9.60689 3.47181 8.72979 4.09322 8.22859L7.82165 5.72256C8.81589 5.09605 10.0587 4.84545 11.1772 5.09605C12.1715 5.34666 12.9172 5.84786 13.5386 6.59967C13.7872 6.85029 13.6629 7.10089 13.5386 7.22619Z" fill="white"/> +</g> +<defs> +<clipPath id="clip0_173_2034"> +<rect width="20" height="20" fill="white"/> +</clipPath> +</defs> +</svg> diff --git a/static/img/landing/serverBadgeVerified.svg b/static/img/landing/serverBadgeVerified.svg new file mode 100644 index 0000000..f677182 --- /dev/null +++ b/static/img/landing/serverBadgeVerified.svg @@ -0,0 +1,11 @@ +<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g clip-path="url(#clip0_173_2039)"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M20 9.54503C20 10.5313 18.4 11.2679 18.1 12.1544C17.8 13.0408 18.65 14.6513 18.1 15.388C17.55 16.1246 15.8 15.8249 15.025 16.3867C14.25 16.9486 14.0375 18.684 13.1 18.9961C12.1625 19.3082 11.0125 17.9973 10.0125 17.9973C9.0125 17.9973 7.825 19.2458 6.925 18.9961C6.025 18.7464 5.775 16.9486 5 16.3867C4.225 15.8249 2.5 16.162 1.925 15.388C1.35 14.6139 2.2125 13.0907 1.925 12.1544C1.6375 11.218 0 10.5313 0 9.54503C0 8.55873 1.6 7.82212 1.9 6.9357C2.2 6.04927 1.35 4.43872 1.9 3.70212C2.45 2.96551 4.2125 3.26515 5 2.70333C5.7875 2.14151 5.975 0.406112 6.9125 0.0565363C7.85 -0.29304 9 1.09278 10 1.09278C11 1.09278 12.1875 -0.155706 13.0875 0.0939909C13.9875 0.343688 14.225 2.14151 15 2.70333C15.775 3.26515 17.5 2.92806 18.075 3.70212C18.65 4.47618 17.7875 5.99933 18.075 6.9357C18.3625 7.87206 20 8.55873 20 9.54503Z" fill="#3BA55C"/> +<path d="M9.43964 14.1176L5.22089 10.9272L6.46169 9.22565L8.94331 11.1399L13.4599 5.14698L15.1474 6.3981L9.43964 14.1176Z" fill="white"/> +</g> +<defs> +<clipPath id="clip0_173_2039"> +<rect width="20" height="20" fill="white"/> +</clipPath> +</defs> +</svg> diff --git a/static/img/landing/webclip.png b/static/img/landing/webclip.png new file mode 100644 index 0000000000000000000000000000000000000000..8eb16d3b8b05e29c472f2c63935c1a99fd56114a GIT binary patch literal 9440 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 JRiS|o`#&o6M{NKA literal 0 HcmV?d00001 From a08680fd628c48b875156e0d459e5bd5dc2d58ee Mon Sep 17 00:00:00 2001 From: Zallom <matthias@fca.gg> Date: Fri, 22 May 2026 01:03:20 +0200 Subject: [PATCH 07/36] =?UTF-8?q?fix(landing):=20pointer=20les=20liens=20f?= =?UTF-8?q?onctionnalit=C3=A9s=20vers=20/docs=20internes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les 6 liens de la section Features pointaient encore vers docs.raidprotect.bot (extérieur). On passe en <Link to="/docs/features/..."> Docusaurus interne qui respecte la migration vers /docs et évite le full reload. --- src/components/landing/Features/index.tsx | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/components/landing/Features/index.tsx b/src/components/landing/Features/index.tsx index 22cae77..752f0c7 100644 --- a/src/components/landing/Features/index.tsx +++ b/src/components/landing/Features/index.tsx @@ -1,10 +1,11 @@ import React, {type ReactNode} from 'react'; import clsx from 'clsx'; +import Link from '@docusaurus/Link'; import shared from '../styles/shared.module.css'; import styles from './styles.module.css'; type Feature = { - href: string; + to: string; icon: string; iconAlt: string; title: string; @@ -13,7 +14,7 @@ type Feature = { const FEATURES: Feature[] = [ { - href: 'https://docs.raidprotect.bot/features/anti-spam', + to: '/docs/features/anti-spam', icon: '/img/landing/iconAntispamWhite.svg', iconAlt: 'RaidProtect icon Antispam', title: 'Protection anti-spam', @@ -21,7 +22,7 @@ const FEATURES: Feature[] = [ 'Sanctionnez instantanément les tentatives de spam, sans aucune intervention de votre part.', }, { - href: 'https://docs.raidprotect.bot/features/raid-mode', + to: '/docs/features/raid-mode', icon: '/img/landing/iconAntiraidWhite.svg', iconAlt: 'RaidProtect icon Antiraid', title: 'Blocage des raids', @@ -29,7 +30,7 @@ const FEATURES: Feature[] = [ "Vous craignez un raid ? Notre bot est capable de le détecter et de le bloquer avant même qu'il impacte votre serveur.", }, { - href: 'https://docs.raidprotect.bot/features/captcha', + to: '/docs/features/captcha', icon: '/img/landing/iconCaptchaWhite.svg', iconAlt: 'RaidProtect icon Captcha', title: 'Protection contre les robots', @@ -37,7 +38,7 @@ const FEATURES: Feature[] = [ "Grâce au captcha, vos membres doivent prouver qu'ils sont humains. Dites adieu aux comptes automatisés.", }, { - href: 'https://docs.raidprotect.bot/features/utilities', + to: '/docs/features/utilities', icon: '/img/landing/iconReportWhite.svg', iconAlt: 'RaidProtect icon Report', title: 'Modération & administration', @@ -45,7 +46,7 @@ const FEATURES: Feature[] = [ "Gérez votre serveur comme un pro avec nos diverses fonctionalités de modération et d'administration.", }, { - href: 'https://docs.raidprotect.bot/features/tag-role', + to: '/docs/features/tag-role', icon: '/img/landing/iconTagWhite.svg', iconAlt: 'RaidProtect icon Tag', title: 'Rôle de Tag', @@ -53,7 +54,7 @@ const FEATURES: Feature[] = [ 'Le Rôle de Tag permet d’attribuer automatiquement un rôle aux membres qui ajoutent le tag de votre serveur.', }, { - href: 'https://docs.raidprotect.bot/features/dm-lock', + to: '/docs/features/dm-lock', icon: '/img/landing/iconDmlockWhite.svg', iconAlt: 'RaidProtect icon DM Lock', title: 'Fermeture des MP', @@ -80,7 +81,7 @@ export default function Features(): ReactNode { <div className={styles.grid}> <div className={styles.decoration} aria-hidden="true" /> {FEATURES.map((feature) => ( - <a key={feature.title} href={feature.href} className={styles.item}> + <Link key={feature.title} to={feature.to} className={styles.item}> <div className={styles.iconWrap}> <div className={styles.iconBg}> <img @@ -95,7 +96,7 @@ export default function Features(): ReactNode { <h3 className={styles.itemTitle}>{feature.title}</h3> <p className={styles.itemDescription}>{feature.description}</p> </div> - </a> + </Link> ))} </div> </div> From b8cecb44926ab97a236008addbe64f7edaa99843 Mon Sep 17 00:00:00 2001 From: Zallom <matthias@fca.gg> Date: Fri, 22 May 2026 01:04:26 +0200 Subject: [PATCH 08/36] fix(footer): pointer Documentation vers /docs Le lien Documentation du footer pointait vers /, qui est maintenant la landing depuis la migration vers routeBasePath /docs. --- docusaurus.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docusaurus.config.ts b/docusaurus.config.ts index b683829..09d5f2f 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -356,7 +356,7 @@ export default async function createConfigAsync() { }, { label: 'Documentation', - to: '/', + to: '/docs', target: '_self' }, { From 217daab29c23afee08f6924dd747139bb38af1c2 Mon Sep 17 00:00:00 2001 From: Zallom <matthias@fca.gg> Date: Fri, 22 May 2026 01:21:05 +0200 Subject: [PATCH 09/36] =?UTF-8?q?fix(footer):=20pointer=20les=20liens=20l?= =?UTF-8?q?=C3=A9gaux=20en=20interne=20et=20retirer=20urls.{legal,terms,pr?= =?UTF-8?q?ivacy,cookies}?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Maintenant que les pages existent dans le site Docusaurus, Link résout automatiquement /legal, /terms, /privacy, /cookies (avec préfixe locale en i18n). Le mapping customFields.urls.* n'est plus nécessaire pour ces pages. --- docusaurus.config.ts | 36 ++++-------------------------------- 1 file changed, 4 insertions(+), 32 deletions(-) diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 09d5f2f..9896d9f 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -69,34 +69,6 @@ export default async function createConfigAsync() { es: '/es/', pt: '/pt/' }, - legal: { - fr: 'https://raidprotect.bot/legal', - en: 'https://raidprotect.bot/en/legal', - de: 'https://raidprotect.bot/de/legal', - es: 'https://raidprotect.bot/es/legal', - pt: 'https://raidprotect.bot/pt/legal' - }, - terms: { - fr: 'https://raidprotect.bot/terms', - en: 'https://raidprotect.bot/en/terms', - de: 'https://raidprotect.bot/de/terms', - es: 'https://raidprotect.bot/es/terms', - pt: 'https://raidprotect.bot/pt/terms' - }, - privacy: { - fr: 'https://raidprotect.bot/privacy', - en: 'https://raidprotect.bot/en/privacy', - de: 'https://raidprotect.bot/de/privacy', - es: 'https://raidprotect.bot/es/privacy', - pt: 'https://raidprotect.bot/pt/privacy' - }, - cookies: { - fr: 'https://raidprotect.bot/cookies', - en: 'https://raidprotect.bot/en/cookies', - de: 'https://raidprotect.bot/de/cookies', - es: 'https://raidprotect.bot/es/cookies', - pt: 'https://raidprotect.bot/pt/cookies' - }, geranium: { fr: 'https://i.dfr.gg/geranium.webm', en: 'https://i.dfr.gg/en-geranium.webm', @@ -376,22 +348,22 @@ export default async function createConfigAsync() { items: [ { label: 'Mentions légales', - to: 'legal', + to: '/legal', target: '_self' }, { label: 'Conditions d\'utilisation', - to: 'terms', + to: '/terms', target: '_self' }, { label: 'Politique de confidentialité', - to: 'privacy', + to: '/privacy', target: '_self' }, { label: 'Politique des cookies', - to: 'cookies', + to: '/cookies', target: '_self' } ], From 3de46edcbb88acc6f4044a69e0368dd034bd42de Mon Sep 17 00:00:00 2001 From: Zallom <matthias@fca.gg> Date: Fri, 22 May 2026 11:18:36 +0200 Subject: [PATCH 10/36] refactor(landing): inline About/Features/Pricing dans index.tsx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Seuls Hero et Servers restent des composants extraits (ils seront réutilisés dans les pages /frame/* à venir). Les 3 autres sections étaient spécifiques à la landing sans plan de réutilisation : on évite le surdécoupage en les fondant dans la page (un seul index.tsx + index.module.css avec classes préfixées par section). --- src/components/landing/About/index.tsx | 175 ------ .../landing/About/styles.module.css | 139 ----- src/components/landing/Features/index.tsx | 105 ---- .../landing/Features/styles.module.css | 160 ------ src/components/landing/Pricing/index.tsx | 136 ----- .../landing/Pricing/styles.module.css | 202 ------- src/pages/index.module.css | 509 ++++++++++++++++++ src/pages/index.tsx | 425 ++++++++++++++- 8 files changed, 927 insertions(+), 924 deletions(-) delete mode 100644 src/components/landing/About/index.tsx delete mode 100644 src/components/landing/About/styles.module.css delete mode 100644 src/components/landing/Features/index.tsx delete mode 100644 src/components/landing/Features/styles.module.css delete mode 100644 src/components/landing/Pricing/index.tsx delete mode 100644 src/components/landing/Pricing/styles.module.css create mode 100644 src/pages/index.module.css diff --git a/src/components/landing/About/index.tsx b/src/components/landing/About/index.tsx deleted file mode 100644 index 432457e..0000000 --- a/src/components/landing/About/index.tsx +++ /dev/null @@ -1,175 +0,0 @@ -import React, {type ReactNode, useEffect, useState} from 'react'; -import clsx from 'clsx'; -import shared from '../styles/shared.module.css'; -import styles from './styles.module.css'; - -type Counts = { - servers: number; - users: number; - captcha: number; - antispam: number; -}; - -type FormattedValue = { - value: string; - unit: string; -}; - -function formatValue(value: number): FormattedValue { - if (value >= 1_000_000) { - return {value: (value / 1_000_000).toFixed(1), unit: 'M'}; - } - return {value: (value / 1_000).toFixed(1), unit: 'k'}; -} - -function StatCounter({ - rawValue, - label, - fallback, -}: { - rawValue?: number; - label: string; - fallback: string; -}) { - if (rawValue == null) { - return ( - <div className={styles.counterItem}> - <div className={styles.counterTitle}> - <span>{fallback}</span> - </div> - <div className={styles.counterLabel}>{label}</div> - </div> - ); - } - const formatted = formatValue(rawValue); - return ( - <div className={styles.counterItem}> - <div className={styles.counterTitle}> - <span>{formatted.value}</span> - <span>{formatted.unit}</span> - </div> - <div className={styles.counterLabel}>{label}</div> - </div> - ); -} - -export default function About(): ReactNode { - const [counts, setCounts] = useState<Counts | null>(null); - - useEffect(() => { - let cancelled = false; - fetch('https://docs.raidprotect.bot/counts.json') - .then((res) => { - if (!res.ok) throw new Error('Erreur lors de la récupération des données'); - return res.json(); - }) - .then((data: Counts) => { - if (!cancelled) setCounts(data); - }) - .catch((err) => { - // Stats are best-effort; failure is non-blocking - // eslint-disable-next-line no-console - console.error('Erreur de mise à jour des statistiques :', err); - }); - return () => { - cancelled = true; - }; - }, []); - - return ( - <section className={clsx(shared.landing, shared.sectionSpacing, styles.section)}> - <div className={shared.container}> - <div className={styles.titleGrid}> - <h2 className={styles.title}> - Nos résultats ont un{' '} - <span className={shared.textGradient}>impact</span> - </h2> - </div> - <div className={styles.counterGrid}> - <div className={styles.imageWrap}> - <svg - className={styles.curve} - viewBox="0 0 900 280" - role="img" - aria-label="Croissance du nombre de serveurs"> - <defs> - <linearGradient id="rpStroke" x1="0" y1="1" x2="1" y2="0"> - <stop offset="0%" stopColor="#a561a3" /> - <stop offset="45%" stopColor="#726cb3" /> - <stop offset="100%" stopColor="#d35f5f" /> - </linearGradient> - <linearGradient id="rpFill" x1="0" y1="0" x2="0" y2="1"> - <stop offset="0%" stopColor="#726cb3" stopOpacity="0.35" /> - <stop offset="70%" stopColor="#d35f5f" stopOpacity="0.12" /> - <stop offset="100%" stopColor="#d35f5f" stopOpacity="0" /> - </linearGradient> - <filter id="rpGlow" x="-40%" y="-60%" width="180%" height="220%"> - <feGaussianBlur stdDeviation="10" result="blur" /> - <feMerge> - <feMergeNode in="blur" /> - <feMergeNode in="SourceGraphic" /> - </feMerge> - </filter> - <pattern id="rpGrid" width="80" height="80" patternUnits="userSpaceOnUse"> - <path - d="M80 0H0V80" - fill="none" - stroke="rgba(255,255,255,0.05)" - strokeWidth="1" - /> - </pattern> - </defs> - <rect x="0" y="0" width="900" height="280" fill="url(#rpGrid)" opacity="0.5" /> - <path - d="M 40 230 C 160 225, 220 215, 300 200 S 420 150, 520 140 S 640 110, 720 70 S 820 20, 860 28 L 860 260 L 40 260 Z" - fill="url(#rpFill)" - /> - <path - className={styles.curveLine} - d="M 40 230 C 160 225, 220 215, 300 200 S 420 150, 520 140 S 640 110, 720 70 S 820 30, 860 28" - fill="none" - stroke="url(#rpStroke)" - strokeWidth="7" - strokeLinecap="round" - strokeLinejoin="round" - filter="url(#rpGlow)" - /> - <circle cx="860" cy="28" r="7" fill="#d35f5f" /> - <circle - className={styles.curvePulse} - cx="860" - cy="28" - r="7" - fill="none" - stroke="#726cb3" - strokeWidth="2" - /> - </svg> - </div> - <div className={styles.stats}> - <StatCounter - rawValue={counts?.servers} - label="Serveurs sécurisés" - fallback="350k" - /> - <StatCounter - rawValue={counts?.captcha} - label="Captchas résolus" - fallback="—" - /> - <StatCounter - rawValue={counts?.antispam} - label="Spams bloqués" - fallback="—" - /> - <StatCounter - rawValue={counts?.users} - label="Utilisateurs protégés" - fallback="—" - /> - </div> - </div> - </div> - </section> - ); -} diff --git a/src/components/landing/About/styles.module.css b/src/components/landing/About/styles.module.css deleted file mode 100644 index 84b3210..0000000 --- a/src/components/landing/About/styles.module.css +++ /dev/null @@ -1,139 +0,0 @@ -.section { - overflow-x: clip; -} - -.titleGrid { - display: grid; - grid-template-rows: auto; - grid-template-columns: 1.25fr 1fr; - grid-column-gap: 100px; - grid-row-gap: 100px; - margin-bottom: 30px; -} - -.title { - font-family: var(--ifm-heading-font-family); - color: #fff; - font-size: 50px; - font-weight: 600; - line-height: 1.2em; - margin: 0; -} - -.counterGrid { - display: grid; - grid-template-rows: auto; - grid-template-columns: 1fr 1fr; - grid-column-gap: 100px; - grid-row-gap: 100px; - align-items: center; -} - -.imageWrap { - position: relative; -} - -.curve { - width: 100%; - height: auto; - display: block; -} - -.curveLine { - stroke-dasharray: 1400; - stroke-dashoffset: 1400; - animation: rpDraw 1.5s cubic-bezier(0.4, 0, 0.2, 1) forwards; -} - -@keyframes rpDraw { - to { - stroke-dashoffset: 0; - } -} - -.curvePulse { - transform-origin: 860px 28px; - animation: rpPulse 1.8s ease-out infinite; -} - -@keyframes rpPulse { - 0% { - transform: scale(1); - opacity: 0.9; - } - 70% { - transform: scale(2.8); - opacity: 0; - } - 100% { - transform: scale(2.8); - opacity: 0; - } -} - -@media (prefers-reduced-motion: reduce) { - .curveLine, - .curvePulse { - animation: none !important; - } - .curveLine { - stroke-dashoffset: 0; - } -} - -.stats { - display: grid; - grid-template-rows: auto auto; - grid-template-columns: 1fr 1fr; - grid-column-gap: 60px; - grid-row-gap: 60px; - align-items: start; -} - -.counterItem { - display: flex; - flex-flow: column; -} - -.counterTitle { - font-family: var(--ifm-heading-font-family); - margin-bottom: 0; - font-size: 44px; - font-weight: 600; - line-height: 1.3em; - color: #fff; -} - -.counterLabel { - color: #e1e0e9; - font-size: 18px; - margin-top: 4px; -} - -@media screen and (max-width: 991px) { - .titleGrid { - grid-template-columns: 1fr; - grid-column-gap: 10px; - grid-row-gap: 10px; - } - .counterGrid { - grid-template-columns: 1fr; - } - .stats { - grid-column-gap: 50px; - grid-row-gap: 50px; - } -} - -@media screen and (max-width: 767px) { - .title { - font-size: 42px; - } - .counterTitle { - font-size: 30px; - } - .stats { - grid-column-gap: 30px; - grid-row-gap: 30px; - } -} diff --git a/src/components/landing/Features/index.tsx b/src/components/landing/Features/index.tsx deleted file mode 100644 index 752f0c7..0000000 --- a/src/components/landing/Features/index.tsx +++ /dev/null @@ -1,105 +0,0 @@ -import React, {type ReactNode} from 'react'; -import clsx from 'clsx'; -import Link from '@docusaurus/Link'; -import shared from '../styles/shared.module.css'; -import styles from './styles.module.css'; - -type Feature = { - to: string; - icon: string; - iconAlt: string; - title: string; - description: string; -}; - -const FEATURES: Feature[] = [ - { - to: '/docs/features/anti-spam', - icon: '/img/landing/iconAntispamWhite.svg', - iconAlt: 'RaidProtect icon Antispam', - title: 'Protection anti-spam', - description: - 'Sanctionnez instantanément les tentatives de spam, sans aucune intervention de votre part.', - }, - { - to: '/docs/features/raid-mode', - icon: '/img/landing/iconAntiraidWhite.svg', - iconAlt: 'RaidProtect icon Antiraid', - title: 'Blocage des raids', - description: - "Vous craignez un raid ? Notre bot est capable de le détecter et de le bloquer avant même qu'il impacte votre serveur.", - }, - { - to: '/docs/features/captcha', - icon: '/img/landing/iconCaptchaWhite.svg', - iconAlt: 'RaidProtect icon Captcha', - title: 'Protection contre les robots', - description: - "Grâce au captcha, vos membres doivent prouver qu'ils sont humains. Dites adieu aux comptes automatisés.", - }, - { - to: '/docs/features/utilities', - icon: '/img/landing/iconReportWhite.svg', - iconAlt: 'RaidProtect icon Report', - title: 'Modération & administration', - description: - "Gérez votre serveur comme un pro avec nos diverses fonctionalités de modération et d'administration.", - }, - { - to: '/docs/features/tag-role', - icon: '/img/landing/iconTagWhite.svg', - iconAlt: 'RaidProtect icon Tag', - title: 'Rôle de Tag', - description: - 'Le Rôle de Tag permet d’attribuer automatiquement un rôle aux membres qui ajoutent le tag de votre serveur.', - }, - { - to: '/docs/features/dm-lock', - icon: '/img/landing/iconDmlockWhite.svg', - iconAlt: 'RaidProtect icon DM Lock', - title: 'Fermeture des MP', - description: - 'Un bouclier inédit contre le spam, le scam et les arnaques par message privé.', - }, -]; - -export default function Features(): ReactNode { - return ( - <section - id="features" - className={clsx(shared.landing, shared.sectionSpacing, styles.section)}> - <div className={shared.container}> - <div className={styles.titleWrap}> - <h2 className={styles.title}> - Nos <span className={shared.textGradient}>fonctionnalités</span> - </h2> - <p className={styles.subtitle}> - Découvrez ce qui fait de nous l'un des meilleurs bots pour protéger - votre serveur Discord des utilisateurs malintentionnés. - </p> - </div> - <div className={styles.grid}> - <div className={styles.decoration} aria-hidden="true" /> - {FEATURES.map((feature) => ( - <Link key={feature.title} to={feature.to} className={styles.item}> - <div className={styles.iconWrap}> - <div className={styles.iconBg}> - <img - src={feature.icon} - alt={feature.iconAlt} - loading="eager" - className={styles.icon} - /> - </div> - </div> - <div> - <h3 className={styles.itemTitle}>{feature.title}</h3> - <p className={styles.itemDescription}>{feature.description}</p> - </div> - </Link> - ))} - </div> - </div> - </section> - ); -} diff --git a/src/components/landing/Features/styles.module.css b/src/components/landing/Features/styles.module.css deleted file mode 100644 index 9d1d528..0000000 --- a/src/components/landing/Features/styles.module.css +++ /dev/null @@ -1,160 +0,0 @@ -.section { - position: relative; -} - -.titleWrap { - z-index: 2; - position: relative; - margin: 0 auto 70px auto; - width: 50%; - text-align: center; - display: flex; - flex-flow: column; -} - -.title { - margin: 0 0 10px 0; - font-family: var(--ifm-heading-font-family); - color: #fff; - font-size: 50px; - font-weight: 600; - line-height: 1.2em; -} - -.subtitle { - margin: 0; - color: #e1e0e9; - font-size: 18px; - font-weight: 400; -} - -.grid { - position: relative; - display: grid; - grid-template-rows: auto; - grid-template-columns: 1fr 1fr 1fr; - grid-column-gap: 50px; - grid-row-gap: 50px; -} - -.decoration { - background-image: linear-gradient(180deg, #d35f5f 40%, #a561a3); - opacity: 0.5; - filter: blur(140px); - width: 450px; - height: 100px; - margin: auto; - position: absolute; - inset: 0; - z-index: 0; - pointer-events: none; -} - -.item { - z-index: 2; - position: relative; - display: flex; - flex-flow: column; - align-items: center; - text-align: center; - text-decoration: none; - transition: transform 0.3s; - column-gap: 20px; - row-gap: 20px; - color: inherit; -} - -.item:hover { - transform: scale(1.04); - text-decoration: none; - color: inherit; -} - -.iconWrap { - flex: none; - display: flex; - align-items: center; - justify-content: center; - width: 80px; - height: 80px; - padding: 1px; - border-radius: 50%; - background-image: linear-gradient( - 135deg, - #726cb3, - #d35f5f 60%, - #a561a3 - ); -} - -.iconBg { - display: flex; - align-items: center; - justify-content: center; - width: 100%; - height: 100%; - border-radius: 50%; - background-color: #1b1a25; -} - -.icon { - width: 32px; - height: 32px; -} - -.itemTitle { - margin: 0 0 10px 0; - font-family: var(--ifm-heading-font-family); - color: #fff; - font-size: 26px; - font-weight: 600; - line-height: 1.3em; -} - -.itemDescription { - margin: 0; - color: #e1e0e9; - font-size: 18px; -} - -@media screen and (max-width: 1279px) { - .grid { - grid-column-gap: 50px; - grid-row-gap: 50px; - } -} - -@media screen and (min-width: 1280px) { - .grid { - grid-column-gap: 90px; - grid-row-gap: 100px; - } - .titleWrap { - width: 95%; - } -} - -@media screen and (max-width: 991px) { - .titleWrap { - width: 100%; - } - .grid { - grid-template-columns: 1fr 1fr; - } - .iconWrap { - width: 70px; - height: 70px; - } -} - -@media screen and (max-width: 767px) { - .title { - font-size: 42px; - } - .itemTitle { - font-size: 22px; - } - .grid { - grid-column-gap: 30px; - } -} diff --git a/src/components/landing/Pricing/index.tsx b/src/components/landing/Pricing/index.tsx deleted file mode 100644 index 257a2cd..0000000 --- a/src/components/landing/Pricing/index.tsx +++ /dev/null @@ -1,136 +0,0 @@ -import React, {type ReactNode} from 'react'; -import clsx from 'clsx'; -import shared from '../styles/shared.module.css'; -import styles from './styles.module.css'; - -const CHECK_ICON = '/img/landing/icon-02.svg'; - -function FeatureItem({children}: {children: ReactNode}) { - return ( - <div className={styles.featureItem}> - <img - src={CHECK_ICON} - alt="" - loading="lazy" - className={styles.featureIcon} - /> - <div>{children}</div> - </div> - ); -} - -export default function Pricing(): ReactNode { - return ( - <section - id="pricing" - className={clsx(shared.landing, styles.section)}> - <div className={shared.container}> - <div className={styles.titleWrap}> - <div className={styles.titleInner}> - <h2 className={styles.title}> - Garder une longueur{' '} - <span className={shared.textGradient}>d'avance</span> - </h2> - <p className={styles.description}> - Ajoutez RaidProtect et commencez à protéger votre serveur dès - aujourd'hui. - </p> - </div> - <div className={styles.decoration} aria-hidden="true" /> - </div> - <div className={styles.grid}> - {/* Basic */} - <div className={styles.item}> - <div className={styles.preTitle}>Basic</div> - <div className={styles.priceWrap}> - <h2 className={styles.price}>Gratuit</h2> - </div> - <p className={styles.itemTagline}> - La sécurité essentielle assurée pour toujours - </p> - <div className={styles.featureList}> - <FeatureItem>Protections anti-spam</FeatureItem> - <FeatureItem>Blocage automatique des raids</FeatureItem> - <FeatureItem>Filtrage des bots malveillants</FeatureItem> - <FeatureItem>Modération & administration</FeatureItem> - <FeatureItem> - <strong>Et bien plus encore...</strong> - </FeatureItem> - </div> - <div className={styles.buttonList}> - <a - href="https://raidprotect.bot/invite" - target="_blank" - rel="noopener noreferrer" - className={shared.btnSecondary}> - Ajouter à Discord - </a> - </div> - </div> - - {/* Founder */} - <div className={clsx(styles.item, styles.itemCenter)}> - <div className={clsx(styles.preTitle, styles.preTitleFounder)}> - Founder - </div> - <div className={styles.priceWrap}> - <h2 className={styles.price}>Abonnement</h2> - <h2 className={clsx(styles.price, styles.priceCenter)}>2,99 $</h2> - </div> - <p className={styles.itemTagline}> - Offre de lancement réservée aux premiers abonnés - </p> - <div className={styles.featureList}> - <FeatureItem>Profil du bot personnalisable</FeatureItem> - <FeatureItem>Noms de sanctions custom</FeatureItem> - <FeatureItem>Accès avancé à l'Auth Manager</FeatureItem> - <FeatureItem>Accès étendu au Display Public</FeatureItem> - <FeatureItem>Accès à la Bêta publique</FeatureItem> - <FeatureItem>Rôle exclusif sur notre serveur</FeatureItem> - </div> - <div className={styles.buttonList}> - <a - href="https://raidprotect.bot/founder" - target="_blank" - rel="noopener noreferrer" - className={clsx(shared.btnPrimary, shared.btnPrimaryFounder)}> - S'abonner via Discord - </a> - </div> - </div> - - {/* Business */} - <div className={styles.item}> - <div className={clsx(styles.preTitle, styles.preTitleEnterprise)}> - Business - </div> - <div className={styles.priceWrap}> - <h2 className={styles.price}>Sur demande</h2> - </div> - <p className={styles.itemTagline}> - Pour les projets aux exigences de sécurité élevées - </p> - <div className={styles.featureList}> - <FeatureItem>Les fonctionnalités Founder</FeatureItem> - <FeatureItem>Instance dédiée et isolée</FeatureItem> - <FeatureItem>Audit initial de votre serveur</FeatureItem> - <FeatureItem>Intégration avec vos outils</FeatureItem> - <FeatureItem>Fonctionnalités sur mesure</FeatureItem> - <FeatureItem>Suivi régulier avec un expert</FeatureItem> - <FeatureItem>Support prioritaire</FeatureItem> - </div> - <div className={styles.buttonList}> - <a - href="https://raidprotect.bot/appointment" - target="_blank" - rel="noopener noreferrer" - className={clsx(shared.btnSecondary, shared.btnSecondaryEnterprise)}> - Prendre rendez-vous - </a> - </div> - </div> - </div> - </div> - </section> - ); -} diff --git a/src/components/landing/Pricing/styles.module.css b/src/components/landing/Pricing/styles.module.css deleted file mode 100644 index d213038..0000000 --- a/src/components/landing/Pricing/styles.module.css +++ /dev/null @@ -1,202 +0,0 @@ -.section { - overflow-x: clip; - padding-top: 150px; - padding-bottom: 150px; -} - -.titleWrap { - text-align: center; - width: 60%; - margin: 0 auto 40px auto; - position: relative; -} - -.titleInner { - z-index: 2; - position: relative; -} - -.title { - margin: 0 0 10px 0; - font-family: var(--ifm-heading-font-family); - color: #fff; - font-size: 50px; - font-weight: 600; - line-height: 1.2em; -} - -.description { - margin: 0 0 40px 0; - color: #e1e0e9; - font-size: 18px; -} - -.decoration { - background-image: linear-gradient(180deg, #d35f5f 40%, #a561a3); - filter: blur(110px); - width: 50%; - height: 90px; - margin: 179px auto auto auto; - position: absolute; - inset: 0; - z-index: 0; - pointer-events: none; -} - -.grid { - z-index: 2; - position: relative; - display: grid; - grid-template-rows: auto; - grid-template-columns: 1fr 1fr 1fr; - grid-column-gap: 30px; - grid-row-gap: 30px; - margin-bottom: 30px; -} - -.item { - display: flex; - flex-flow: column; - justify-content: flex-start; - align-items: flex-start; - border: 1px solid #242328; - border-radius: 20px; - background-color: #070417; - padding: 30px; -} - -.itemCenter { - border-color: #d35f5f; - background-color: #1b1a25; -} - -.preTitle { - border: 1px solid #d35f5f; - border-radius: 50px; - background-color: #242328; - color: #fff; - text-align: center; - margin-bottom: 20px; - padding: 8px 20px; - font-size: 16px; - line-height: 1.3em; - font-family: var(--ifm-font-family-base); -} - -.preTitleFounder { - border-color: #ffab22; - background-color: #1b1a25; -} - -.preTitleEnterprise { - border-color: #5f6fd3; -} - -.priceWrap { - display: flex; - flex-flow: wrap; - justify-content: flex-start; - align-items: baseline; - width: 100%; - column-gap: 10px; - row-gap: 5px; - margin-bottom: 20px; -} - -.price { - margin: 0; - font-family: var(--ifm-heading-font-family); - color: #fff; - font-size: 30px; - font-weight: 600; - line-height: 1.2em; -} - -.priceCenter { - text-align: right; - background-image: linear-gradient(180deg, #d35f5f 40%, #a561a3); - -webkit-text-fill-color: transparent; - -webkit-background-clip: text; - background-clip: text; -} - -.itemTagline { - margin: 0; - color: #e1e0e9; - font-size: 18px; - line-height: 1.5em; -} - -.featureList { - display: flex; - flex-flow: column; - width: 100%; - margin-top: 50px; - margin-bottom: 50px; - column-gap: 15px; - row-gap: 15px; -} - -.featureItem { - display: flex; - align-items: flex-start; - justify-content: flex-start; - column-gap: 8px; - row-gap: 8px; - color: #e1e0e9; -} - -.featureIcon { - flex: none; - width: 18px; - height: 18px; - margin-top: 5px; -} - -.buttonList { - display: flex; - flex-flow: column; - align-items: stretch; - justify-content: flex-start; - width: 100%; - margin-top: auto; - text-align: center; - column-gap: 15px; - row-gap: 15px; -} - -@media screen and (max-width: 991px) { - .section { - padding-top: 100px; - padding-bottom: 100px; - } - .titleWrap { - width: 100%; - } - .grid { - grid-template-columns: 1fr 1fr; - } - .featureList { - margin-top: 30px; - margin-bottom: 30px; - } -} - -@media screen and (max-width: 767px) { - .section { - padding-top: 80px; - padding-bottom: 80px; - } - .title { - font-size: 42px; - } - .grid { - grid-template-columns: 1fr; - grid-column-gap: 20px; - grid-row-gap: 20px; - margin-bottom: 20px; - } - .item { - padding: 20px; - } -} diff --git a/src/pages/index.module.css b/src/pages/index.module.css new file mode 100644 index 0000000..bec9b26 --- /dev/null +++ b/src/pages/index.module.css @@ -0,0 +1,509 @@ +/* ===== About section ===== */ + +.aboutSection { + overflow-x: clip; +} + +.aboutTitleGrid { + display: grid; + grid-template-rows: auto; + grid-template-columns: 1.25fr 1fr; + grid-column-gap: 100px; + grid-row-gap: 100px; + margin-bottom: 30px; +} + +.aboutTitle { + font-family: var(--ifm-heading-font-family); + color: #fff; + font-size: 50px; + font-weight: 600; + line-height: 1.2em; + margin: 0; +} + +.counterGrid { + display: grid; + grid-template-rows: auto; + grid-template-columns: 1fr 1fr; + grid-column-gap: 100px; + grid-row-gap: 100px; + align-items: center; +} + +.imageWrap { + position: relative; +} + +.curve { + width: 100%; + height: auto; + display: block; +} + +.curveLine { + stroke-dasharray: 1400; + stroke-dashoffset: 1400; + animation: rpDraw 1.5s cubic-bezier(0.4, 0, 0.2, 1) forwards; +} + +@keyframes rpDraw { + to { + stroke-dashoffset: 0; + } +} + +.curvePulse { + transform-origin: 860px 28px; + animation: rpPulse 1.8s ease-out infinite; +} + +@keyframes rpPulse { + 0% { + transform: scale(1); + opacity: 0.9; + } + 70% { + transform: scale(2.8); + opacity: 0; + } + 100% { + transform: scale(2.8); + opacity: 0; + } +} + +@media (prefers-reduced-motion: reduce) { + .curveLine, + .curvePulse { + animation: none !important; + } + .curveLine { + stroke-dashoffset: 0; + } +} + +.stats { + display: grid; + grid-template-rows: auto auto; + grid-template-columns: 1fr 1fr; + grid-column-gap: 60px; + grid-row-gap: 60px; + align-items: start; +} + +.counterItem { + display: flex; + flex-flow: column; +} + +.counterTitle { + font-family: var(--ifm-heading-font-family); + margin-bottom: 0; + font-size: 44px; + font-weight: 600; + line-height: 1.3em; + color: #fff; +} + +.counterLabel { + color: #e1e0e9; + font-size: 18px; + margin-top: 4px; +} + +@media screen and (max-width: 991px) { + .aboutTitleGrid { + grid-template-columns: 1fr; + grid-column-gap: 10px; + grid-row-gap: 10px; + } + .counterGrid { + grid-template-columns: 1fr; + } + .stats { + grid-column-gap: 50px; + grid-row-gap: 50px; + } +} + +@media screen and (max-width: 767px) { + .aboutTitle { + font-size: 42px; + } + .counterTitle { + font-size: 30px; + } + .stats { + grid-column-gap: 30px; + grid-row-gap: 30px; + } +} + +/* ===== Features section ===== */ + +.featuresSection { + position: relative; +} + +.featuresTitleWrap { + z-index: 2; + position: relative; + margin: 0 auto 70px auto; + width: 50%; + text-align: center; + display: flex; + flex-flow: column; +} + +.featuresTitle { + margin: 0 0 10px 0; + font-family: var(--ifm-heading-font-family); + color: #fff; + font-size: 50px; + font-weight: 600; + line-height: 1.2em; +} + +.featuresSubtitle { + margin: 0; + color: #e1e0e9; + font-size: 18px; + font-weight: 400; +} + +.featuresGrid { + position: relative; + display: grid; + grid-template-rows: auto; + grid-template-columns: 1fr 1fr 1fr; + grid-column-gap: 50px; + grid-row-gap: 50px; +} + +.featuresDecoration { + background-image: linear-gradient(180deg, #d35f5f 40%, #a561a3); + opacity: 0.5; + filter: blur(140px); + width: 450px; + height: 100px; + margin: auto; + position: absolute; + inset: 0; + z-index: 0; + pointer-events: none; +} + +.featuresItem { + z-index: 2; + position: relative; + display: flex; + flex-flow: column; + align-items: center; + text-align: center; + text-decoration: none; + transition: transform 0.3s; + column-gap: 20px; + row-gap: 20px; + color: inherit; +} + +.featuresItem:hover { + transform: scale(1.04); + text-decoration: none; + color: inherit; +} + +.featuresIconWrap { + flex: none; + display: flex; + align-items: center; + justify-content: center; + width: 80px; + height: 80px; + padding: 1px; + border-radius: 50%; + background-image: linear-gradient( + 135deg, + #726cb3, + #d35f5f 60%, + #a561a3 + ); +} + +.featuresIconBg { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + border-radius: 50%; + background-color: #1b1a25; +} + +.featuresIcon { + width: 32px; + height: 32px; +} + +.featuresItemTitle { + margin: 0 0 10px 0; + font-family: var(--ifm-heading-font-family); + color: #fff; + font-size: 26px; + font-weight: 600; + line-height: 1.3em; +} + +.featuresItemDescription { + margin: 0; + color: #e1e0e9; + font-size: 18px; +} + +@media screen and (max-width: 1279px) { + .featuresGrid { + grid-column-gap: 50px; + grid-row-gap: 50px; + } +} + +@media screen and (min-width: 1280px) { + .featuresGrid { + grid-column-gap: 90px; + grid-row-gap: 100px; + } + .featuresTitleWrap { + width: 95%; + } +} + +@media screen and (max-width: 991px) { + .featuresTitleWrap { + width: 100%; + } + .featuresGrid { + grid-template-columns: 1fr 1fr; + } + .featuresIconWrap { + width: 70px; + height: 70px; + } +} + +@media screen and (max-width: 767px) { + .featuresTitle { + font-size: 42px; + } + .featuresItemTitle { + font-size: 22px; + } + .featuresGrid { + grid-column-gap: 30px; + } +} + +/* ===== Pricing section ===== */ + +.pricingSection { + overflow-x: clip; + padding-top: 150px; + padding-bottom: 150px; +} + +.pricingTitleWrap { + text-align: center; + width: 60%; + margin: 0 auto 40px auto; + position: relative; +} + +.pricingTitleInner { + z-index: 2; + position: relative; +} + +.pricingTitle { + margin: 0 0 10px 0; + font-family: var(--ifm-heading-font-family); + color: #fff; + font-size: 50px; + font-weight: 600; + line-height: 1.2em; +} + +.pricingDescription { + margin: 0 0 40px 0; + color: #e1e0e9; + font-size: 18px; +} + +.pricingDecoration { + background-image: linear-gradient(180deg, #d35f5f 40%, #a561a3); + filter: blur(110px); + width: 50%; + height: 90px; + margin: 179px auto auto auto; + position: absolute; + inset: 0; + z-index: 0; + pointer-events: none; +} + +.pricingGrid { + z-index: 2; + position: relative; + display: grid; + grid-template-rows: auto; + grid-template-columns: 1fr 1fr 1fr; + grid-column-gap: 30px; + grid-row-gap: 30px; + margin-bottom: 30px; +} + +.pricingItem { + display: flex; + flex-flow: column; + justify-content: flex-start; + align-items: flex-start; + border: 1px solid #242328; + border-radius: 20px; + background-color: #070417; + padding: 30px; +} + +.pricingItemCenter { + border-color: #d35f5f; + background-color: #1b1a25; +} + +.preTitle { + border: 1px solid #d35f5f; + border-radius: 50px; + background-color: #242328; + color: #fff; + text-align: center; + margin-bottom: 20px; + padding: 8px 20px; + font-size: 16px; + line-height: 1.3em; + font-family: var(--ifm-font-family-base); +} + +.preTitleFounder { + border-color: #ffab22; + background-color: #1b1a25; +} + +.preTitleEnterprise { + border-color: #5f6fd3; +} + +.priceWrap { + display: flex; + flex-flow: wrap; + justify-content: flex-start; + align-items: baseline; + width: 100%; + column-gap: 10px; + row-gap: 5px; + margin-bottom: 20px; +} + +.price { + margin: 0; + font-family: var(--ifm-heading-font-family); + color: #fff; + font-size: 30px; + font-weight: 600; + line-height: 1.2em; +} + +.priceCenter { + text-align: right; + background-image: linear-gradient(180deg, #d35f5f 40%, #a561a3); + -webkit-text-fill-color: transparent; + -webkit-background-clip: text; + background-clip: text; +} + +.itemTagline { + margin: 0; + color: #e1e0e9; + font-size: 18px; + line-height: 1.5em; +} + +.featureList { + display: flex; + flex-flow: column; + width: 100%; + margin-top: 50px; + margin-bottom: 50px; + column-gap: 15px; + row-gap: 15px; +} + +.featureItem { + display: flex; + align-items: flex-start; + justify-content: flex-start; + column-gap: 8px; + row-gap: 8px; + color: #e1e0e9; +} + +.featureIcon { + flex: none; + width: 18px; + height: 18px; + margin-top: 5px; +} + +.buttonList { + display: flex; + flex-flow: column; + align-items: stretch; + justify-content: flex-start; + width: 100%; + margin-top: auto; + text-align: center; + column-gap: 15px; + row-gap: 15px; +} + +@media screen and (max-width: 991px) { + .pricingSection { + padding-top: 100px; + padding-bottom: 100px; + } + .pricingTitleWrap { + width: 100%; + } + .pricingGrid { + grid-template-columns: 1fr 1fr; + } + .featureList { + margin-top: 30px; + margin-bottom: 30px; + } +} + +@media screen and (max-width: 767px) { + .pricingSection { + padding-top: 80px; + padding-bottom: 80px; + } + .pricingTitle { + font-size: 42px; + } + .pricingGrid { + grid-template-columns: 1fr; + grid-column-gap: 20px; + grid-row-gap: 20px; + margin-bottom: 20px; + } + .pricingItem { + padding: 20px; + } +} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 5c61249..99249f2 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,12 +1,160 @@ -import React, {type ReactNode} from 'react'; +import React, {type ReactNode, useEffect, useState} from 'react'; +import clsx from 'clsx'; import Layout from '@theme/Layout'; +import Link from '@docusaurus/Link'; import Hero from '@site/src/components/landing/Hero'; import Servers from '@site/src/components/landing/Servers'; -import About from '@site/src/components/landing/About'; -import Features from '@site/src/components/landing/Features'; -import Pricing from '@site/src/components/landing/Pricing'; +import shared from '@site/src/components/landing/styles/shared.module.css'; +import styles from './index.module.css'; + +type Counts = { + servers: number; + users: number; + captcha: number; + antispam: number; +}; + +type FormattedValue = { + value: string; + unit: string; +}; + +function formatValue(value: number): FormattedValue { + if (value >= 1_000_000) { + return {value: (value / 1_000_000).toFixed(1), unit: 'M'}; + } + return {value: (value / 1_000).toFixed(1), unit: 'k'}; +} + +function StatCounter({ + rawValue, + label, + fallback, +}: { + rawValue?: number; + label: string; + fallback: string; +}) { + if (rawValue == null) { + return ( + <div className={styles.counterItem}> + <div className={styles.counterTitle}> + <span>{fallback}</span> + </div> + <div className={styles.counterLabel}>{label}</div> + </div> + ); + } + const formatted = formatValue(rawValue); + return ( + <div className={styles.counterItem}> + <div className={styles.counterTitle}> + <span>{formatted.value}</span> + <span>{formatted.unit}</span> + </div> + <div className={styles.counterLabel}>{label}</div> + </div> + ); +} + +const CHECK_ICON = '/img/landing/icon-02.svg'; + +function FeatureItem({children}: {children: ReactNode}) { + return ( + <div className={styles.featureItem}> + <img + src={CHECK_ICON} + alt="" + loading="lazy" + className={styles.featureIcon} + /> + <div>{children}</div> + </div> + ); +} + +type Feature = { + to: string; + icon: string; + iconAlt: string; + title: string; + description: string; +}; + +const FEATURES: Feature[] = [ + { + to: '/docs/features/anti-spam', + icon: '/img/landing/iconAntispamWhite.svg', + iconAlt: 'RaidProtect icon Antispam', + title: 'Protection anti-spam', + description: + 'Sanctionnez instantanément les tentatives de spam, sans aucune intervention de votre part.', + }, + { + to: '/docs/features/raid-mode', + icon: '/img/landing/iconAntiraidWhite.svg', + iconAlt: 'RaidProtect icon Antiraid', + title: 'Blocage des raids', + description: + "Vous craignez un raid ? Notre bot est capable de le détecter et de le bloquer avant même qu'il impacte votre serveur.", + }, + { + to: '/docs/features/captcha', + icon: '/img/landing/iconCaptchaWhite.svg', + iconAlt: 'RaidProtect icon Captcha', + title: 'Protection contre les robots', + description: + "Grâce au captcha, vos membres doivent prouver qu'ils sont humains. Dites adieu aux comptes automatisés.", + }, + { + to: '/docs/features/utilities', + icon: '/img/landing/iconReportWhite.svg', + iconAlt: 'RaidProtect icon Report', + title: 'Modération & administration', + description: + "Gérez votre serveur comme un pro avec nos diverses fonctionalités de modération et d'administration.", + }, + { + to: '/docs/features/tag-role', + icon: '/img/landing/iconTagWhite.svg', + iconAlt: 'RaidProtect icon Tag', + title: 'Rôle de Tag', + description: + 'Le Rôle de Tag permet d’attribuer automatiquement un rôle aux membres qui ajoutent le tag de votre serveur.', + }, + { + to: '/docs/features/dm-lock', + icon: '/img/landing/iconDmlockWhite.svg', + iconAlt: 'RaidProtect icon DM Lock', + title: 'Fermeture des MP', + description: + 'Un bouclier inédit contre le spam, le scam et les arnaques par message privé.', + }, +]; export default function Home(): ReactNode { + const [counts, setCounts] = useState<Counts | null>(null); + + useEffect(() => { + let cancelled = false; + fetch('https://docs.raidprotect.bot/counts.json') + .then((res) => { + if (!res.ok) throw new Error('Erreur lors de la récupération des données'); + return res.json(); + }) + .then((data: Counts) => { + if (!cancelled) setCounts(data); + }) + .catch((err) => { + // Stats are best-effort; failure is non-blocking + // eslint-disable-next-line no-console + console.error('Erreur de mise à jour des statistiques :', err); + }); + return () => { + cancelled = true; + }; + }, []); + return ( <Layout title="RaidProtect • Sécurisez votre serveur Discord" @@ -14,9 +162,272 @@ export default function Home(): ReactNode { <main> <Hero /> <Servers /> - <About /> - <Features /> - <Pricing /> + + {/* About */} + <section + className={clsx( + shared.landing, + shared.sectionSpacing, + styles.aboutSection, + )}> + <div className={shared.container}> + <div className={styles.aboutTitleGrid}> + <h2 className={styles.aboutTitle}> + Nos résultats ont un{' '} + <span className={shared.textGradient}>impact</span> + </h2> + </div> + <div className={styles.counterGrid}> + <div className={styles.imageWrap}> + <svg + className={styles.curve} + viewBox="0 0 900 280" + role="img" + aria-label="Croissance du nombre de serveurs"> + <defs> + <linearGradient id="rpStroke" x1="0" y1="1" x2="1" y2="0"> + <stop offset="0%" stopColor="#a561a3" /> + <stop offset="45%" stopColor="#726cb3" /> + <stop offset="100%" stopColor="#d35f5f" /> + </linearGradient> + <linearGradient id="rpFill" x1="0" y1="0" x2="0" y2="1"> + <stop offset="0%" stopColor="#726cb3" stopOpacity="0.35" /> + <stop offset="70%" stopColor="#d35f5f" stopOpacity="0.12" /> + <stop offset="100%" stopColor="#d35f5f" stopOpacity="0" /> + </linearGradient> + <filter id="rpGlow" x="-40%" y="-60%" width="180%" height="220%"> + <feGaussianBlur stdDeviation="10" result="blur" /> + <feMerge> + <feMergeNode in="blur" /> + <feMergeNode in="SourceGraphic" /> + </feMerge> + </filter> + <pattern id="rpGrid" width="80" height="80" patternUnits="userSpaceOnUse"> + <path + d="M80 0H0V80" + fill="none" + stroke="rgba(255,255,255,0.05)" + strokeWidth="1" + /> + </pattern> + </defs> + <rect x="0" y="0" width="900" height="280" fill="url(#rpGrid)" opacity="0.5" /> + <path + d="M 40 230 C 160 225, 220 215, 300 200 S 420 150, 520 140 S 640 110, 720 70 S 820 20, 860 28 L 860 260 L 40 260 Z" + fill="url(#rpFill)" + /> + <path + className={styles.curveLine} + d="M 40 230 C 160 225, 220 215, 300 200 S 420 150, 520 140 S 640 110, 720 70 S 820 30, 860 28" + fill="none" + stroke="url(#rpStroke)" + strokeWidth="7" + strokeLinecap="round" + strokeLinejoin="round" + filter="url(#rpGlow)" + /> + <circle cx="860" cy="28" r="7" fill="#d35f5f" /> + <circle + className={styles.curvePulse} + cx="860" + cy="28" + r="7" + fill="none" + stroke="#726cb3" + strokeWidth="2" + /> + </svg> + </div> + <div className={styles.stats}> + <StatCounter + rawValue={counts?.servers} + label="Serveurs sécurisés" + fallback="350k" + /> + <StatCounter + rawValue={counts?.captcha} + label="Captchas résolus" + fallback="—" + /> + <StatCounter + rawValue={counts?.antispam} + label="Spams bloqués" + fallback="—" + /> + <StatCounter + rawValue={counts?.users} + label="Utilisateurs protégés" + fallback="—" + /> + </div> + </div> + </div> + </section> + + {/* Features */} + <section + id="features" + className={clsx( + shared.landing, + shared.sectionSpacing, + styles.featuresSection, + )}> + <div className={shared.container}> + <div className={styles.featuresTitleWrap}> + <h2 className={styles.featuresTitle}> + Nos <span className={shared.textGradient}>fonctionnalités</span> + </h2> + <p className={styles.featuresSubtitle}> + Découvrez ce qui fait de nous l'un des meilleurs bots pour protéger + votre serveur Discord des utilisateurs malintentionnés. + </p> + </div> + <div className={styles.featuresGrid}> + <div className={styles.featuresDecoration} aria-hidden="true" /> + {FEATURES.map((feature) => ( + <Link + key={feature.title} + to={feature.to} + className={styles.featuresItem}> + <div className={styles.featuresIconWrap}> + <div className={styles.featuresIconBg}> + <img + src={feature.icon} + alt={feature.iconAlt} + loading="eager" + className={styles.featuresIcon} + /> + </div> + </div> + <div> + <h3 className={styles.featuresItemTitle}>{feature.title}</h3> + <p className={styles.featuresItemDescription}> + {feature.description} + </p> + </div> + </Link> + ))} + </div> + </div> + </section> + + {/* Pricing */} + <section + id="pricing" + className={clsx(shared.landing, styles.pricingSection)}> + <div className={shared.container}> + <div className={styles.pricingTitleWrap}> + <div className={styles.pricingTitleInner}> + <h2 className={styles.pricingTitle}> + Garder une longueur{' '} + <span className={shared.textGradient}>d'avance</span> + </h2> + <p className={styles.pricingDescription}> + Ajoutez RaidProtect et commencez à protéger votre serveur dès + aujourd'hui. + </p> + </div> + <div className={styles.pricingDecoration} aria-hidden="true" /> + </div> + <div className={styles.pricingGrid}> + {/* Basic */} + <div className={styles.pricingItem}> + <div className={styles.preTitle}>Basic</div> + <div className={styles.priceWrap}> + <h2 className={styles.price}>Gratuit</h2> + </div> + <p className={styles.itemTagline}> + La sécurité essentielle assurée pour toujours + </p> + <div className={styles.featureList}> + <FeatureItem>Protections anti-spam</FeatureItem> + <FeatureItem>Blocage automatique des raids</FeatureItem> + <FeatureItem>Filtrage des bots malveillants</FeatureItem> + <FeatureItem>Modération & administration</FeatureItem> + <FeatureItem> + <strong>Et bien plus encore...</strong> + </FeatureItem> + </div> + <div className={styles.buttonList}> + <a + href="https://raidprotect.bot/invite" + target="_blank" + rel="noopener noreferrer" + className={shared.btnSecondary}> + Ajouter à Discord + </a> + </div> + </div> + + {/* Founder */} + <div className={clsx(styles.pricingItem, styles.pricingItemCenter)}> + <div className={clsx(styles.preTitle, styles.preTitleFounder)}> + Founder + </div> + <div className={styles.priceWrap}> + <h2 className={styles.price}>Abonnement</h2> + <h2 className={clsx(styles.price, styles.priceCenter)}> + 2,99 $ + </h2> + </div> + <p className={styles.itemTagline}> + Offre de lancement réservée aux premiers abonnés + </p> + <div className={styles.featureList}> + <FeatureItem>Profil du bot personnalisable</FeatureItem> + <FeatureItem>Noms de sanctions custom</FeatureItem> + <FeatureItem>Accès avancé à l'Auth Manager</FeatureItem> + <FeatureItem>Accès étendu au Display Public</FeatureItem> + <FeatureItem>Accès à la Bêta publique</FeatureItem> + <FeatureItem>Rôle exclusif sur notre serveur</FeatureItem> + </div> + <div className={styles.buttonList}> + <a + href="https://raidprotect.bot/founder" + target="_blank" + rel="noopener noreferrer" + className={clsx(shared.btnPrimary, shared.btnPrimaryFounder)}> + S'abonner via Discord + </a> + </div> + </div> + + {/* Business */} + <div className={styles.pricingItem}> + <div className={clsx(styles.preTitle, styles.preTitleEnterprise)}> + Business + </div> + <div className={styles.priceWrap}> + <h2 className={styles.price}>Sur demande</h2> + </div> + <p className={styles.itemTagline}> + Pour les projets aux exigences de sécurité élevées + </p> + <div className={styles.featureList}> + <FeatureItem>Les fonctionnalités Founder</FeatureItem> + <FeatureItem>Instance dédiée et isolée</FeatureItem> + <FeatureItem>Audit initial de votre serveur</FeatureItem> + <FeatureItem>Intégration avec vos outils</FeatureItem> + <FeatureItem>Fonctionnalités sur mesure</FeatureItem> + <FeatureItem>Suivi régulier avec un expert</FeatureItem> + <FeatureItem>Support prioritaire</FeatureItem> + </div> + <div className={styles.buttonList}> + <a + href="https://raidprotect.bot/appointment" + target="_blank" + rel="noopener noreferrer" + className={clsx( + shared.btnSecondary, + shared.btnSecondaryEnterprise, + )}> + Prendre rendez-vous + </a> + </div> + </div> + </div> + </div> + </section> </main> </Layout> ); From 9742a6ad77c42eb1fcf31ea30a9feeda3af60363 Mon Sep 17 00:00:00 2001 From: Zallom <matthias@fca.gg> Date: Fri, 22 May 2026 11:39:07 +0200 Subject: [PATCH 11/36] feat(landing): Hero pre-title dynamique sur counts.servers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le Hero reçoit serverCount en prop et affiche un nombre arrondi au palier inférieur de 50 000 (Math.floor(count/50000)*50000) avec toLocaleString fr-FR. Effet checkpoint : 358 000 → 350 000, 401 000 → 400 000. Fallback 350 000 au SSR avant que le fetch côté client renvoie les vraies stats. --- src/components/landing/Hero/index.tsx | 19 +++++++++++++++++-- src/pages/index.tsx | 2 +- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/components/landing/Hero/index.tsx b/src/components/landing/Hero/index.tsx index 1038c59..912654b 100644 --- a/src/components/landing/Hero/index.tsx +++ b/src/components/landing/Hero/index.tsx @@ -3,14 +3,29 @@ import clsx from 'clsx'; import shared from '../styles/shared.module.css'; import styles from './styles.module.css'; -export default function Hero(): ReactNode { +type HeroProps = { + /** Nombre brut de serveurs, arrondi à la dizaine de milliers inférieure + * (pallier 50 000) pour produire un chiffre stable façon checkpoint. */ + serverCount?: number; +}; + +const PRE_TITLE_FALLBACK = 350_000; +const PRE_TITLE_STEP = 50_000; + +function roundedServerCount(raw: number | undefined): number { + if (raw == null || !Number.isFinite(raw)) return PRE_TITLE_FALLBACK; + return Math.floor(raw / PRE_TITLE_STEP) * PRE_TITLE_STEP; +} + +export default function Hero({serverCount}: HeroProps): ReactNode { + const formatted = roundedServerCount(serverCount).toLocaleString('fr-FR'); return ( <section className={clsx(shared.landing, styles.section)}> <div className={shared.container}> <div className={styles.content}> <div className={styles.preTitleWrap}> <div className={styles.preTitleText}> - Utilisé par plus de 350 000 serveurs + Utilisé par plus de {formatted} serveurs </div> </div> <h1 className={styles.title}> diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 99249f2..69d2115 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -160,7 +160,7 @@ export default function Home(): ReactNode { title="RaidProtect • Sécurisez votre serveur Discord" description="RaidProtect est un bot Discord français ayant pour mission de protéger simplement votre serveur des utilisateurs malintentionnés."> <main> - <Hero /> + <Hero serverCount={counts?.servers} /> <Servers /> {/* About */} From 06421d683c2873a91860d45e76a72dbd80877fda Mon Sep 17 00:00:00 2001 From: Zallom <matthias@fca.gg> Date: Fri, 22 May 2026 11:58:19 +0200 Subject: [PATCH 12/36] feat(landing): smooth scroll vers #features (et autres ancres) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit scroll-behavior: smooth global sur html, scopé par prefers-reduced-motion pour respecter les utilisateurs qui désactivent les animations. --- src/css/custom.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/css/custom.css b/src/css/custom.css index 21f433d..9b3423f 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -4,6 +4,12 @@ * work well for content-centric websites. */ +@media (prefers-reduced-motion: no-preference) { + html { + scroll-behavior: smooth; + } +} + /* You can override the default Infima variables here. */ html[data-theme='dark'] { --ifm-background-color: #040114; From dedba5d1be589bfe8331f6b7ac0973bad0cb0d17 Mon Sep 17 00:00:00 2001 From: Zallom <matthias@fca.gg> Date: Fri, 22 May 2026 12:15:20 +0200 Subject: [PATCH 13/36] feat(thank-you): port Webflow thank-you page to TSX MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Page invitée OAuth Discord : - Logo + texte de remerciement, card centrée style Webflow - Widget serveur dynamique : fetch Discord widget + invite à partir de ?guild_id, affiche carte avec icône + nom + membres + badge PARTNERED/VERIFIED - Warning permissions BigInt à partir de ?permissions : compare avec REQUIRED_PERMISSIONS et liste les permissions manquantes (ou avertit pour Administrateur seul) - 2 CTAs : Discord externe + <Link to="/docs"> interne Erreurs réseau silencieuses, aucun fetch côté SSR. --- src/pages/thank-you.module.css | 255 +++++++++++++++++++++++++++++ src/pages/thank-you.tsx | 287 +++++++++++++++++++++++++++++++++ 2 files changed, 542 insertions(+) create mode 100644 src/pages/thank-you.module.css create mode 100644 src/pages/thank-you.tsx diff --git a/src/pages/thank-you.module.css b/src/pages/thank-you.module.css new file mode 100644 index 0000000..69c4418 --- /dev/null +++ b/src/pages/thank-you.module.css @@ -0,0 +1,255 @@ +/* + * Thank-you page styles + * Mirrors the Webflow `.link-in-bio` layout. + * Colors reuse the same tokens already defined in src/components/landing/styles/shared.module.css + * so the look matches the rest of the site. + */ + +.page { + --color-black: #040114; + --color-gray-1: #070417; + --color-gray-2: #1b1a25; + --color-gray-3: #242328; + --color-gray-4: #e1e0e9; + --color-white: #ffffff; + --color-primary-rp: #d35f5f; + --color-darker-primary: #bd5454; + --color-border-doc: #444950; + + background-color: var(--color-black); + color: var(--color-gray-4); + font-size: 18px; + line-height: 1.5em; + min-height: 70vh; + padding: 50px 20px; + display: flex; + justify-content: center; + align-items: flex-start; +} + +.card { + z-index: 22; + border: 1px solid var(--color-gray-3); + border-radius: 20px; + background-color: var(--color-gray-1); + text-align: center; + flex-direction: column; + width: 100%; + max-width: 650px; + padding: 60px; + display: flex; + position: relative; +} + +.logoWrap { + justify-content: center; + align-items: center; + margin-bottom: 30px; + margin-left: auto; + margin-right: auto; + text-decoration: none; + display: flex; +} + +.logo { + height: 70px; + width: auto; +} + +.title { + color: var(--color-white); + font-family: var(--ifm-heading-font-family, inherit); + font-size: 28px; + line-height: 1.25em; + margin: 0 0 20px; +} + +.description { + color: var(--color-gray-4); + margin: 0 0 10px; +} + +.buttonRow { + grid-column-gap: 15px; + grid-row-gap: 15px; + flex-direction: column; + padding-top: 20px; + padding-bottom: 0; + display: flex; +} + +.btnPrimary { + display: inline-block; + border: 1px solid var(--color-darker-primary); + border-radius: 50px; + background-color: var(--color-darker-primary); + color: #fff; + text-align: center; + padding: 20px 28px 18px; + font-size: 18px; + font-weight: 500; + line-height: 1.1em; + text-decoration: none; + transition: border-color 0.3s, background-color 0.3s, transform 0.3s, color 0.3s; +} + +.btnPrimary:hover { + text-decoration: none; + color: #fff; + border-color: var(--color-darker-primary); + background-color: var(--color-darker-primary); + transform: translate3d(0, -3px, 0.01px); +} + +.btnSecondary { + display: inline-block; + border: 1px solid var(--color-darker-primary); + border-radius: 50px; + background-color: transparent; + color: var(--color-white); + text-align: center; + padding: 20px 28px 18px; + font-size: 18px; + line-height: 1.1em; + text-decoration: none; + transition: border-color 0.3s, transform 0.3s, background-color 0.3s, color 0.3s; +} + +.btnSecondary:hover { + text-decoration: none; + color: #fff; + border-color: var(--color-darker-primary); + background-color: var(--color-darker-primary); + transform: translate3d(0, -3px, 0.01px); +} + +/* Server card */ + +.centerServer { + margin: 0 auto 20px; +} + +.clientServer { + grid-column-gap: 15px; + grid-row-gap: 15px; + border: 1px solid var(--color-border-doc); + border-radius: 12px; + background-color: var(--color-gray-3); + width: auto; + min-width: 275px; + padding: 20px 24px; + text-decoration: none; + display: inline-flex; + align-items: center; + justify-content: flex-start; + transition: border-color 0.3s; +} + +.clientServer:hover { + border-color: var(--color-primary-rp); + text-decoration: none; +} + +.avatarInfo { + grid-column-gap: 15px; + grid-row-gap: 15px; + display: flex; + align-items: center; + font-size: 14px; + line-height: 1.5em; + text-align: left; +} + +.avatar { + object-fit: cover; + border-radius: 50%; + flex: none; + width: 50px; + height: 50px; +} + +.serverInfos { + grid-column-gap: 6px; + grid-row-gap: 6px; + flex-flow: column; + justify-content: center; + align-items: flex-start; + display: flex; +} + +.serverNameRow { + justify-content: flex-start; + align-items: center; + display: flex; +} + +.serverName { + color: var(--color-white); + margin: 0; + font-size: 18px; + font-weight: 600; +} + +.serverBadge { + margin-left: 10px; +} + +.serverMembers { + color: var(--color-gray-4); + font-size: 14px; +} + +/* Permission warning */ + +.permissionWarning { + padding: 15px; + border-radius: 8px; + text-align: center; + max-width: 600px; + margin: 20px auto; + padding-bottom: 1px; + color: var(--color-white); +} + +.success { + background: #003100; +} + +.adminWarning { + background: #193c47; +} + +.missingPermissions { + background: #4d3800; +} + +.permissionList { + list-style-type: none; + padding: 0; + margin-top: 10px; +} + +.permissionList li { + margin: 5px 0; +} + +.permissionList code { + background-color: rgba(255, 255, 255, 0.08); + padding: 2px 8px; + border-radius: 4px; + font-size: 0.95em; +} + +@media screen and (max-width: 767px) { + .card { + padding: 40px 24px; + } + .title { + font-size: 22px; + } + .btnPrimary, + .btnSecondary { + padding: 20px 26px 16px; + font-size: 16px; + } +} diff --git a/src/pages/thank-you.tsx b/src/pages/thank-you.tsx new file mode 100644 index 0000000..4f97722 --- /dev/null +++ b/src/pages/thank-you.tsx @@ -0,0 +1,287 @@ +import React, {type ReactNode, useEffect, useState} from 'react'; +import Layout from '@theme/Layout'; +import Link from '@docusaurus/Link'; +import styles from './thank-you.module.css'; + +type ServerBadge = 'partner' | 'verified' | null; + +type ServerInfo = { + name: string; + members: string; + inviteUrl: string; + iconUrl: string; + badge: ServerBadge; +}; + +type PermissionWarning = { + tone: 'admin' | 'missing'; + message: string; + missing: string[]; +}; + +const DEFAULT_ICON_URL = + 'https://cdn.prod.website-files.com/677fbd67c3c9318f7fb56659/67c33922eb3265808c183c50_411d8a698dd15ddf.webp'; + +const BADGE_SRC: Record<Exclude<ServerBadge, null>, string> = { + partner: '/img/landing/serverBadgePartner.svg', + verified: '/img/landing/serverBadgeVerified.svg', +}; + +const REQUIRED_PERMISSIONS = 1117660769534n; +const ADMIN_PERMISSION = 8n; + +// Order matches the Webflow source so the missing-permissions list reads the same. +const PERMISSION_MESSAGES: Array<[string, bigint]> = [ + ['Administrateur', ADMIN_PERMISSION], + ['Gérer le serveur', 32n], + ['Gérer les rôles', 268435456n], + ['Gérer les salons', 16n], + ['Expulser des membres', 2n], + ['Bannir des membres', 4n], + ['Gérer les pseudos', 134217728n], + ['Gérer les webhooks', 536870912n], + ['Voir les logs du serveur', 524288n], + ['Voir les salons', 1024n], + ['Modérer les membres', 1099511627776n], + ['Envoyer des messages', 2048n], + ['Gérer les messages', 8192n], + ['Gérer les fils', 17179869184n], + ['Intégrer des liens', 16384n], + ['Joindre des fichiers', 32768n], + ['Voir les anciens messages', 65536n], + ['Ajouter des réactions', 64n], + ['Utiliser des émojis externes', 262144n], + ['Rendre les membres muets', 4194304n], + ['Mettre en sourdine des membres', 8388608n], + ['Déplacer des membres', 16777216n], +]; + +async function fetchServerInfo(guildId: string): Promise<ServerInfo | null> { + try { + const widgetResponse = await fetch( + `https://discord.com/api/guilds/${guildId}/widget.json`, + ); + if (!widgetResponse.ok) { + throw new Error('Widget désactivé.'); + } + const widgetData = await widgetResponse.json(); + + const name: string = widgetData.name || 'Serveur inconnu'; + const members: string = + typeof widgetData.presence_count === 'number' + ? `${widgetData.presence_count} membres en ligne` + : 'Nombre de membres inconnu'; + const inviteUrl: string = widgetData.instant_invite || '#'; + + let iconUrl = DEFAULT_ICON_URL; + let badge: ServerBadge = null; + + const inviteCode: string | null = widgetData.instant_invite + ? widgetData.instant_invite.split('/').pop() || null + : null; + + if (inviteCode) { + const inviteResponse = await fetch( + `https://discord.com/api/invites/${inviteCode}?with_counts=true&with_expiration=true`, + ); + if (inviteResponse.ok) { + const inviteData = await inviteResponse.json(); + const server = inviteData.guild; + if (server?.icon) { + iconUrl = `https://cdn.discordapp.com/icons/${server.id}/${server.icon}.png`; + } + if (Array.isArray(server?.features)) { + if (server.features.includes('PARTNERED')) { + badge = 'partner'; + } else if (server.features.includes('VERIFIED')) { + badge = 'verified'; + } + } + } + } + + return {name, members, inviteUrl, iconUrl, badge}; + } catch (error) { + // Discord widget may be disabled or network may be unreachable. + // eslint-disable-next-line no-console + console.error(error); + return null; + } +} + +function computePermissionWarning( + permissionsParam: string, +): PermissionWarning | null { + let currentPermissions: bigint; + try { + currentPermissions = BigInt(permissionsParam); + } catch { + return null; + } + + const hasAdminPermission = + (currentPermissions & ADMIN_PERMISSION) === ADMIN_PERMISSION; + const missingPermissions = PERMISSION_MESSAGES.filter( + ([, value]) => + (REQUIRED_PERMISSIONS & value) === value && + (currentPermissions & value) !== value, + ).map(([name]) => name); + + if (hasAdminPermission || missingPermissions.length === 0) { + return null; + } + + if ( + missingPermissions.length === 1 && + missingPermissions[0] === 'Administrateur' + ) { + return { + tone: 'admin', + message: + '⚠️ Toutes les permissions spécifiques sont accordées, mais sans la permission Administrateur, le bot pourrait ne pas accéder à tous les salons.', + missing: [], + }; + } + + return { + tone: 'missing', + message: + "⚠️ Afin d'assurer le bon fonctionnement du bot, nous vous recommandons d'ajouter les permissions suivantes :", + missing: missingPermissions, + }; +} + +export default function ThankYou(): ReactNode { + const [serverInfo, setServerInfo] = useState<ServerInfo | null>(null); + const [permissionWarning, setPermissionWarning] = + useState<PermissionWarning | null>(null); + + useEffect(() => { + if (typeof window === 'undefined') return; + + const urlParams = new URLSearchParams(window.location.search); + + const guildId = urlParams.get('guild_id'); + if (guildId) { + let cancelled = false; + fetchServerInfo(guildId).then((info) => { + if (!cancelled && info) { + setServerInfo(info); + } + }); + // Permission check is synchronous, so we can compute it without guarding cancellation. + const permissionsParam = urlParams.get('permissions'); + if (permissionsParam) { + setPermissionWarning(computePermissionWarning(permissionsParam)); + } + return () => { + cancelled = true; + }; + } + + const permissionsParam = urlParams.get('permissions'); + if (permissionsParam) { + setPermissionWarning(computePermissionWarning(permissionsParam)); + } + return undefined; + }, []); + + return ( + <Layout + title="Merci | RaidProtect" + description="Merci d'avoir invité RaidProtect ! Pour bien débuter, nous vous recommandons de consulter notre documentation et de rejoindre notre serveur Discord."> + <main className={styles.page}> + <div className={styles.card}> + <Link to="/" className={styles.logoWrap}> + <img + src="/img/landing/logoRaidProtect.svg" + alt="RaidProtect title logo" + width={528} + height={70} + loading="eager" + fetchPriority="high" + className={styles.logo} + /> + </Link> + + <p className={styles.title}>Merci d'avoir invité RaidProtect !</p> + + {serverInfo && ( + <div className={styles.centerServer}> + <a + href={serverInfo.inviteUrl} + target="_blank" + rel="noopener noreferrer" + className={styles.clientServer}> + <div className={styles.avatarInfo}> + <img + src={serverInfo.iconUrl} + alt="Discord server icon" + loading="lazy" + className={styles.avatar} + /> + <div className={styles.serverInfos}> + <div className={styles.serverNameRow}> + <div className={styles.serverName}>{serverInfo.name}</div> + {serverInfo.badge && ( + <img + src={BADGE_SRC[serverInfo.badge]} + alt="Discord server badge" + loading="lazy" + width={20} + height={20} + className={styles.serverBadge} + /> + )} + </div> + <div className={styles.serverMembers}> + {serverInfo.members} + </div> + </div> + </div> + </a> + </div> + )} + + {permissionWarning && ( + <div + className={`${styles.permissionWarning} ${ + permissionWarning.tone === 'admin' + ? styles.adminWarning + : styles.missingPermissions + }`}> + <strong>{permissionWarning.message}</strong> + {permissionWarning.missing.length > 0 && ( + <ul className={styles.permissionList}> + {permissionWarning.missing.map((perm) => ( + <li key={perm}> + <code>{perm}</code> + </li> + ))} + </ul> + )} + </div> + )} + + <p className={styles.description}> + Pour bien débuter, nous vous recommandons de consulter notre + documentation et de rejoindre notre serveur. + </p> + + <div className={styles.buttonRow}> + <a + href="https://discord.com/invite/zcC8th6r8N" + target="_blank" + rel="noopener noreferrer" + className={styles.btnPrimary}> + Rejoindre notre serveur Discord + </a> + <Link to="/docs" className={styles.btnSecondary}> + Consulter la documentation + </Link> + </div> + </div> + </main> + </Layout> + ); +} From d17e0875a9a652256d468fe32563ec21846d12ed Mon Sep 17 00:00:00 2001 From: Zallom <matthias@fca.gg> Date: Fri, 22 May 2026 12:30:35 +0200 Subject: [PATCH 14/36] fix(thank-you): aligner les styles sur les classes Webflow source MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Écarts identifiés vs raidprotectbot.webflow.css : - .page : min-height 70vh→100vh, align-items center (link-in-bio-wrap) - .title : font-size 28px→18px, retirer font heading (un simple <p> Webflow) - .clientServer : gap 15→30, padding 20-24→30, border-radius 12px→0.8rem - .centerServer : margin-bottom 20→30 - .buttonRow : padding-bottom 0→20 Le 'Merci d'avoir invité RaidProtect' est en fait un <p> standard côté Webflow (pas un titre), donc fonte body et couleur grise héritée. --- src/pages/thank-you.module.css | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/pages/thank-you.module.css b/src/pages/thank-you.module.css index 69c4418..f73a68e 100644 --- a/src/pages/thank-you.module.css +++ b/src/pages/thank-you.module.css @@ -20,11 +20,11 @@ color: var(--color-gray-4); font-size: 18px; line-height: 1.5em; - min-height: 70vh; + min-height: 100vh; padding: 50px 20px; display: flex; justify-content: center; - align-items: flex-start; + align-items: center; } .card { @@ -57,10 +57,9 @@ } .title { - color: var(--color-white); - font-family: var(--ifm-heading-font-family, inherit); - font-size: 28px; - line-height: 1.25em; + color: var(--color-gray-4); + font-size: 18px; + line-height: 1.5em; margin: 0 0 20px; } @@ -74,7 +73,7 @@ grid-row-gap: 15px; flex-direction: column; padding-top: 20px; - padding-bottom: 0; + padding-bottom: 20px; display: flex; } @@ -126,18 +125,18 @@ /* Server card */ .centerServer { - margin: 0 auto 20px; + margin: 0 auto 30px; } .clientServer { - grid-column-gap: 15px; - grid-row-gap: 15px; + grid-column-gap: 30px; + grid-row-gap: 30px; border: 1px solid var(--color-border-doc); - border-radius: 12px; + border-radius: 0.8rem; background-color: var(--color-gray-3); width: auto; min-width: 275px; - padding: 20px 24px; + padding: 30px; text-decoration: none; display: inline-flex; align-items: center; From 59c2854e8b59c85742aac0565f7680e10576b86d Mon Sep 17 00:00:00 2001 From: Zallom <matthias@fca.gg> Date: Fri, 22 May 2026 12:48:02 +0200 Subject: [PATCH 15/36] fix(thank-you): retirer le Layout Docusaurus pour matcher l'utility page Webflow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plus de navbar/footer Docusaurus : la page est désormais plein écran (min-height 100vh sur .page) comme le Webflow .utility-page-wrap. On garde uniquement <Head> pour le titre et la description ; le data-theme dark est appliqué côté client par le script inline Docusaurus. --- src/pages/thank-you.tsx | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/pages/thank-you.tsx b/src/pages/thank-you.tsx index 4f97722..77a6dd5 100644 --- a/src/pages/thank-you.tsx +++ b/src/pages/thank-you.tsx @@ -1,5 +1,5 @@ import React, {type ReactNode, useEffect, useState} from 'react'; -import Layout from '@theme/Layout'; +import Head from '@docusaurus/Head'; import Link from '@docusaurus/Link'; import styles from './thank-you.module.css'; @@ -187,9 +187,14 @@ export default function ThankYou(): ReactNode { }, []); return ( - <Layout - title="Merci | RaidProtect" - description="Merci d'avoir invité RaidProtect ! Pour bien débuter, nous vous recommandons de consulter notre documentation et de rejoindre notre serveur Discord."> + <> + <Head> + <title>Merci | RaidProtect + +
@@ -282,6 +287,6 @@ export default function ThankYou(): ReactNode {
- + ); } From 771af71edc6ff0981e7881d19b5537879fe5475b Mon Sep 17 00:00:00 2001 From: Zallom Date: Fri, 22 May 2026 12:54:28 +0200 Subject: [PATCH 16/36] =?UTF-8?q?fix(thank-you):=20ajouter=20halo=20radial?= =?UTF-8?q?,=20dropdown=20langue,=20r=C3=A9seaux=20sociaux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reproduits du Webflow source : - .decoration : halo central (linear-gradient + blur 150px) derrière la card - .footerThank : grid 2 cols, dropdown langue à gauche + 4 socials à droite - .langDropdown : ouvert au hover/focus-within, items style .dropdown-link-3 - .socialWrap + .socialLink + .socialIcon : 4 icones (Discord/X/YouTube/GitHub) - .title margin-bottom 20→50px pour aérer entre 'Merci' et 'Pour bien débuter' --- src/pages/thank-you.module.css | 136 ++++++++++++++++++++++++++++++++- src/pages/thank-you.tsx | 105 +++++++++++++++++++++++++ 2 files changed, 239 insertions(+), 2 deletions(-) diff --git a/src/pages/thank-you.module.css b/src/pages/thank-you.module.css index f73a68e..f9abc1a 100644 --- a/src/pages/thank-you.module.css +++ b/src/pages/thank-you.module.css @@ -25,6 +25,23 @@ display: flex; justify-content: center; align-items: center; + position: relative; + overflow: hidden; +} + +/* Halo radial dégradé derrière la card (linear 180° + blur, + * comme Webflow .utility-page-content-decoration). */ +.decoration { + position: absolute; + inset: 0; + margin: auto; + width: 500px; + height: 50%; + background-image: linear-gradient(180deg, var(--color-primary-rp) 40%, #a561a3); + filter: blur(150px); + opacity: 0.5; + pointer-events: none; + z-index: 0; } .card { @@ -60,7 +77,7 @@ color: var(--color-gray-4); font-size: 18px; line-height: 1.5em; - margin: 0 0 20px; + margin: 0 0 50px; } .description { @@ -239,16 +256,131 @@ font-size: 0.95em; } +/* Footer (langue + réseaux sociaux) */ + +.footerThank { + display: grid; + grid-template-columns: 1fr 1fr; + grid-column-gap: 16px; + grid-row-gap: 16px; + justify-content: center; + align-items: center; + margin-top: 20px; +} + +.langDropdown { + position: relative; + display: inline-flex; + justify-content: center; + align-items: center; +} + +.langTrigger { + color: #fff; + display: inline-flex; + align-items: center; + padding: 1.15px 12px; + cursor: pointer; + user-select: none; +} + +.langTrigger:hover { + color: var(--color-primary-rp); +} + +.iconLanguage { + display: inline-block; + margin-right: 5px; + transform: translateY(4px); +} + +.currentLanguage { + font-family: var(--ifm-font-family-base, inherit); +} + +.langDropdownList { + position: absolute; + inset: auto auto 30px auto; + display: none; + flex-direction: column; + min-width: 10rem; + padding: 0.5rem; + border-radius: 10px; + background-color: var(--color-gray-2); + text-align: left; + z-index: 30; +} + +.langDropdown:hover .langDropdownList, +.langDropdown:focus-within .langDropdownList { + display: flex; +} + +.langDropdownItem { + color: var(--color-gray-4); + margin-top: 0.2rem; + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + text-decoration: none; + border-radius: 5px; +} + +.langDropdownItem:hover { + background-color: var(--color-gray-3); + color: var(--color-gray-4); + text-decoration: none; +} + +.langDropdownItemCurrent { + background-color: var(--color-gray-3); + color: var(--color-primary-rp); +} + +.socialWrap { + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center; + grid-column-gap: 20px; + grid-row-gap: 20px; + margin: 0; +} + +.socialLink { + display: block; + color: var(--color-white); + transition: transform 0.3s ease-in-out; +} + +.socialLink:hover { + transform: translateY(-3px); +} + +.socialIcon { + width: 18px; + height: 18px; + display: block; +} + @media screen and (max-width: 767px) { .card { padding: 40px 24px; } .title { - font-size: 22px; + font-size: 18px; + margin-bottom: 40px; } .btnPrimary, .btnSecondary { padding: 20px 26px 16px; font-size: 16px; } + .footerThank { + grid-template-columns: 1fr; + grid-row-gap: 20px; + } + .decoration { + width: 100%; + max-width: 400px; + } } diff --git a/src/pages/thank-you.tsx b/src/pages/thank-you.tsx index 77a6dd5..517f90c 100644 --- a/src/pages/thank-you.tsx +++ b/src/pages/thank-you.tsx @@ -285,7 +285,112 @@ export default function ThankYou(): ReactNode { Consulter la documentation + +
+
+
+ + Français +
+ +
+ + +
+ + -
{server.members}
+
+ + {'{count} membres'} + +
@@ -186,20 +207,37 @@ function ServerCard({server}: {server: Server}) { } export default function Servers(): ReactNode { + const { + i18n: {currentLocale}, + } = useDocusaurusContext(); return (
-

Nous protégeons les plus grands

+

+ + Nous protégeons les plus grands + +

{SERVERS.map((server) => ( - + ))}
diff --git a/src/pages/frame/cta.tsx b/src/pages/frame/cta.tsx index f80d9cd..407e80e 100644 --- a/src/pages/frame/cta.tsx +++ b/src/pages/frame/cta.tsx @@ -1,5 +1,6 @@ import React, {type ReactNode} from 'react'; import Head from '@docusaurus/Head'; +import Translate from '@docusaurus/Translate'; import clsx from 'clsx'; import shared from '@site/src/components/landing/styles/shared.module.css'; import frame from './frame.module.css'; @@ -19,12 +20,30 @@ export default function FrameCta(): ReactNode {

- Garder une longueur{' '} - d'avance + + + d'avance + + + ), + }}> + {'Garder une longueur {highlight}'} +

- Ajoutez RaidProtect et commencez à protéger votre serveur dès - aujourd'hui. + + Ajoutez RaidProtect et commencez à protéger votre serveur + dès aujourd'hui. +

diff --git a/src/pages/thank-you.tsx b/src/pages/thank-you.tsx index 6aa12f0..8dd630c 100644 --- a/src/pages/thank-you.tsx +++ b/src/pages/thank-you.tsx @@ -306,23 +306,23 @@ export default function ThankYou(): ReactNode { Français
From be7131b110bcbadd25c7146546ff4d12c1ec7701 Mon Sep 17 00:00:00 2001 From: Zallom Date: Fri, 22 May 2026 15:52:12 +0200 Subject: [PATCH 23/36] refactor(translations): tout en sur landing + thank-you, plus d'overlays MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Une seule source TSX par page, toutes les chaînes dans i18n/{locale}/code.json (~80 nouvelles clés × 5 locales). Une modif de structure = 1 fichier à toucher. - landing.{about,features,pricing}.* couvrent toutes les sections inline - thankYou.* + permission.* (22 noms Discord) pour la page invitée OAuth - FEATURES driven par un array slugé : anti-spam/raid/captcha/mod/tag/dm - PERMISSION_MESSAGES en tuples [id, defaultLabel, BigInt], discriminateur admin basé sur l'id et non la chaîne traduite (locale-safe) - Highlights via placeholders {highlight} (compatibles syntaxe FR/DE où le mot mis en évidence n'est pas toujours en fin de phrase) Supprime 8 overlays : i18n/{en,de,es,pt}/docusaurus-plugin-content-pages/{index,thank-you}.tsx. Conserve les overlays legal/terms/privacy/cookies (scope différent). Build OK FR + EN + DE + ES + PT. --- i18n/de/code.json | 380 +++++++++++++++ .../docusaurus-plugin-content-pages/index.tsx | 435 ----------------- .../thank-you.tsx | 400 ---------------- i18n/en/code.json | 380 +++++++++++++++ .../docusaurus-plugin-content-pages/index.tsx | 433 ----------------- .../thank-you.tsx | 398 ---------------- i18n/es/code.json | 380 +++++++++++++++ .../docusaurus-plugin-content-pages/index.tsx | 433 ----------------- .../thank-you.tsx | 398 ---------------- i18n/fr/code.json | 380 +++++++++++++++ i18n/pt/code.json | 380 +++++++++++++++ .../docusaurus-plugin-content-pages/index.tsx | 435 ----------------- .../thank-you.tsx | 398 ---------------- src/pages/index.tsx | 438 ++++++++++++++---- src/pages/thank-you.tsx | 230 ++++++--- 15 files changed, 2417 insertions(+), 3481 deletions(-) delete mode 100644 i18n/de/docusaurus-plugin-content-pages/index.tsx delete mode 100644 i18n/de/docusaurus-plugin-content-pages/thank-you.tsx delete mode 100644 i18n/en/docusaurus-plugin-content-pages/index.tsx delete mode 100644 i18n/en/docusaurus-plugin-content-pages/thank-you.tsx delete mode 100644 i18n/es/docusaurus-plugin-content-pages/index.tsx delete mode 100644 i18n/es/docusaurus-plugin-content-pages/thank-you.tsx delete mode 100644 i18n/pt/docusaurus-plugin-content-pages/index.tsx delete mode 100644 i18n/pt/docusaurus-plugin-content-pages/thank-you.tsx diff --git a/i18n/de/code.json b/i18n/de/code.json index 8b243cf..64dc367 100644 --- a/i18n/de/code.json +++ b/i18n/de/code.json @@ -467,5 +467,385 @@ "frame.cta.secondary": { "message": "Server beitreten", "description": "Frame CTA secondary button: join the Discord server" + }, + "landing.layout.title": { + "message": "RaidProtect • Sichern Sie Ihren Discord-Server", + "description": "Browser tab title for the landing page" + }, + "landing.layout.description": { + "message": "RaidProtect ist ein französischer Discord-Bot mit der Mission, Ihren Server einfach vor böswilligen Nutzern zu schützen.", + "description": "Meta description for the landing page" + }, + "landing.about.title": { + "message": "Unsere {highlight} sprechen für sich", + "description": "About section title; {highlight} renders the gradient-highlighted word" + }, + "landing.about.title.highlight": { + "message": "Ergebnisse", + "description": "Highlighted word inside the about section title" + }, + "landing.about.curve.ariaLabel": { + "message": "Zunahme der Serveranzahl", + "description": "ARIA label for the decorative SVG curve in the about section" + }, + "landing.about.counter.servers": { + "message": "Gesicherte Server", + "description": "About stat label: number of secured servers" + }, + "landing.about.counter.captcha": { + "message": "Gelöste Captchas", + "description": "About stat label: number of captchas solved" + }, + "landing.about.counter.antispam": { + "message": "Blockierte Spams", + "description": "About stat label: number of spam messages blocked" + }, + "landing.about.counter.users": { + "message": "Geschützte Nutzer", + "description": "About stat label: number of protected users" + }, + "landing.features.title": { + "message": "Unsere {highlight}", + "description": "Features section title; {highlight} renders the gradient-highlighted word" + }, + "landing.features.title.highlight": { + "message": "Funktionen", + "description": "Highlighted word inside the features section title" + }, + "landing.features.subtitle": { + "message": "Erfahren Sie, warum wir zu den besten Bots gehören, um Ihren Discord-Server vor böswilligen Nutzern zu schützen.", + "description": "Features section subtitle/description" + }, + "landing.features.anti-spam.title": { + "message": "Anti-Spam-Schutz", + "description": "Feature card title: anti-spam" + }, + "landing.features.anti-spam.description": { + "message": "Sanktionieren Sie Spam-Versuche sofort, ganz ohne Ihr Zutun.", + "description": "Feature card description: anti-spam" + }, + "landing.features.raid.title": { + "message": "Raid-Schutz", + "description": "Feature card title: raid" + }, + "landing.features.raid.description": { + "message": "Fürchten Sie einen Raid? Unser Bot erkennt und blockiert ihn, noch bevor er Ihren Server beeinträchtigt.", + "description": "Feature card description: raid" + }, + "landing.features.captcha.title": { + "message": "Bot-Schutz durch Captcha", + "description": "Feature card title: captcha" + }, + "landing.features.captcha.description": { + "message": "Dank Captcha müssen neue Mitglieder beweisen, dass sie menschlich sind. Verabschieden Sie sich von automatisierten Accounts.", + "description": "Feature card description: captcha" + }, + "landing.features.mod.title": { + "message": "Moderation & Verwaltung", + "description": "Feature card title: mod" + }, + "landing.features.mod.description": { + "message": "Verwalten Sie Ihren Server wie ein Profi mit unseren umfassenden Moderations- und Verwaltungsfunktionen.", + "description": "Feature card description: mod" + }, + "landing.features.tag.title": { + "message": "Tag-Rolle", + "description": "Feature card title: tag" + }, + "landing.features.tag.description": { + "message": "Die Tag-Rolle weist Mitgliedern automatisch eine Rolle zu, wenn sie den Tag Ihres Servers hinzufügen.", + "description": "Feature card description: tag" + }, + "landing.features.dm.title": { + "message": "Privatnachrichten sperren", + "description": "Feature card title: dm" + }, + "landing.features.dm.description": { + "message": "Ein einzigartiger Schutzschild gegen Spam, Betrug und Scam in Direktnachrichten.", + "description": "Feature card description: dm" + }, + "landing.pricing.title": { + "message": "Einen Schritt {highlight} bleiben", + "description": "Pricing section title; {highlight} renders the gradient-highlighted word" + }, + "landing.pricing.title.highlight": { + "message": "voraus", + "description": "Highlighted word inside the pricing section title" + }, + "landing.pricing.description": { + "message": "Fügen Sie RaidProtect hinzu und beginnen Sie noch heute damit, Ihren Server zu schützen.", + "description": "Pricing section description below the title" + }, + "landing.pricing.basic.preTitle": { + "message": "Basic", + "description": "Pricing card pre-title for the Basic tier" + }, + "landing.pricing.basic.price": { + "message": "Kostenlos", + "description": "Pricing card price label for the Basic tier (free)" + }, + "landing.pricing.basic.tagline": { + "message": "Wesentliche Sicherheit dauerhaft garantiert", + "description": "Pricing card tagline for the Basic tier" + }, + "landing.pricing.basic.feature.1": { + "message": "Anti-Spam-Schutz", + "description": "Basic tier feature 1" + }, + "landing.pricing.basic.feature.2": { + "message": "Automatische Raid-Blockierung", + "description": "Basic tier feature 2" + }, + "landing.pricing.basic.feature.3": { + "message": "Filterung böswilliger Bots", + "description": "Basic tier feature 3" + }, + "landing.pricing.basic.feature.4": { + "message": "Moderation & Verwaltung", + "description": "Basic tier feature 4" + }, + "landing.pricing.basic.feature.5": { + "message": "Und vieles mehr...", + "description": "Basic tier feature 5 (emphasis)" + }, + "landing.pricing.basic.button": { + "message": "Zu Discord hinzufügen", + "description": "Basic tier CTA button: invite the bot" + }, + "landing.pricing.founder.preTitle": { + "message": "Founder", + "description": "Pricing card pre-title for the Founder tier" + }, + "landing.pricing.founder.price.label": { + "message": "Abonnement", + "description": "Founder tier price label (subscription)" + }, + "landing.pricing.founder.price.amount": { + "message": "2,99 $", + "description": "Founder tier price amount; stays the same across locales" + }, + "landing.pricing.founder.tagline": { + "message": "Einführungsangebot für die ersten Abonnenten", + "description": "Pricing card tagline for the Founder tier" + }, + "landing.pricing.founder.feature.1": { + "message": "Anpassbares Bot-Profil", + "description": "Founder tier feature 1" + }, + "landing.pricing.founder.feature.2": { + "message": "Eigene Sanktionsnamen", + "description": "Founder tier feature 2" + }, + "landing.pricing.founder.feature.3": { + "message": "Erweiterter Zugriff auf Auth Manager", + "description": "Founder tier feature 3" + }, + "landing.pricing.founder.feature.4": { + "message": "Erweiterter Zugriff auf Display Public", + "description": "Founder tier feature 4" + }, + "landing.pricing.founder.feature.5": { + "message": "Zugang zur öffentlichen Beta", + "description": "Founder tier feature 5" + }, + "landing.pricing.founder.feature.6": { + "message": "Exklusive Rolle auf unserem Server", + "description": "Founder tier feature 6" + }, + "landing.pricing.founder.button": { + "message": "Über Discord abonnieren", + "description": "Founder tier CTA button: subscribe" + }, + "landing.pricing.business.preTitle": { + "message": "Business", + "description": "Pricing card pre-title for the Business tier" + }, + "landing.pricing.business.price": { + "message": "Auf Anfrage", + "description": "Pricing card price label for the Business tier (on request)" + }, + "landing.pricing.business.tagline": { + "message": "Für Projekte mit hohen Sicherheitsanforderungen", + "description": "Pricing card tagline for the Business tier" + }, + "landing.pricing.business.feature.1": { + "message": "Alle Founder-Funktionen", + "description": "Business tier feature 1" + }, + "landing.pricing.business.feature.2": { + "message": "Dedizierte, isolierte Instanz", + "description": "Business tier feature 2" + }, + "landing.pricing.business.feature.3": { + "message": "Initiales Audit Ihres Servers", + "description": "Business tier feature 3" + }, + "landing.pricing.business.feature.4": { + "message": "Integration mit Ihren Tools", + "description": "Business tier feature 4" + }, + "landing.pricing.business.feature.5": { + "message": "Maßgeschneiderte Funktionen", + "description": "Business tier feature 5" + }, + "landing.pricing.business.feature.6": { + "message": "Regelmäßige Termine mit einem Experten", + "description": "Business tier feature 6" + }, + "landing.pricing.business.feature.7": { + "message": "Priorisierter Support", + "description": "Business tier feature 7" + }, + "landing.pricing.business.button": { + "message": "Termin vereinbaren", + "description": "Business tier CTA button: book a meeting" + }, + "thankYou.head.title": { + "message": "Vielen Dank | RaidProtect", + "description": "Browser tab title for the thank-you page" + }, + "thankYou.head.description": { + "message": "Vielen Dank, dass Sie RaidProtect eingeladen haben! Zum Einstieg empfehlen wir, unsere Dokumentation zu konsultieren und unserem Discord-Server beizutreten.", + "description": "Meta description for the thank-you page" + }, + "thankYou.title": { + "message": "Vielen Dank, dass Sie RaidProtect eingeladen haben!", + "description": "Main heading of the thank-you page" + }, + "thankYou.description": { + "message": "Zum Einstieg empfehlen wir, unsere Dokumentation zu konsultieren und unserem Server beizutreten.", + "description": "Body description of the thank-you page" + }, + "thankYou.cta.joinDiscord": { + "message": "Unserem Discord-Server beitreten", + "description": "Primary CTA on the thank-you page: join the Discord server" + }, + "thankYou.cta.viewDocs": { + "message": "Dokumentation anzeigen", + "description": "Secondary CTA on the thank-you page: open the documentation" + }, + "thankYou.server.unknown": { + "message": "Unbekannter Server", + "description": "Fallback name shown when the Discord widget returns no server name" + }, + "thankYou.server.memberCountUnknown": { + "message": "Mitgliederzahl unbekannt", + "description": "Fallback shown when the Discord widget returns no member count" + }, + "thankYou.server.membersOnline": { + "message": "{count} Mitglieder online", + "description": "Number of members currently online on the invited server" + }, + "thankYou.permissions.adminOnlyWarning": { + "message": "⚠️ Alle spezifischen Berechtigungen sind erteilt, aber ohne die Administrator-Berechtigung kann der Bot möglicherweise nicht auf alle Kanäle zugreifen.", + "description": "Warning shown when the only missing permission is Administrator" + }, + "thankYou.permissions.missingWarning": { + "message": "⚠️ Damit der Bot ordnungsgemäß funktioniert, empfehlen wir, folgende Berechtigungen hinzuzufügen:", + "description": "Warning shown when some required permissions are missing" + }, + "thankYou.social.discord.ariaLabel": { + "message": "Discord", + "description": "ARIA label for the Discord social link" + }, + "thankYou.social.x.ariaLabel": { + "message": "X", + "description": "ARIA label for the X (Twitter) social link" + }, + "thankYou.social.youtube.ariaLabel": { + "message": "YouTube", + "description": "ARIA label for the YouTube social link" + }, + "thankYou.social.github.ariaLabel": { + "message": "GitHub", + "description": "ARIA label for the GitHub social link" + }, + "permission.administrator": { + "message": "Administrator", + "description": "Discord permission name" + }, + "permission.manageServer": { + "message": "Server verwalten", + "description": "Discord permission name" + }, + "permission.manageRoles": { + "message": "Rollen verwalten", + "description": "Discord permission name" + }, + "permission.manageChannels": { + "message": "Kanäle verwalten", + "description": "Discord permission name" + }, + "permission.kickMembers": { + "message": "Mitglieder kicken", + "description": "Discord permission name" + }, + "permission.banMembers": { + "message": "Mitglieder bannen", + "description": "Discord permission name" + }, + "permission.manageNicknames": { + "message": "Spitznamen verwalten", + "description": "Discord permission name" + }, + "permission.manageWebhooks": { + "message": "Webhooks verwalten", + "description": "Discord permission name" + }, + "permission.viewAuditLog": { + "message": "Audit-Log anzeigen", + "description": "Discord permission name" + }, + "permission.viewChannels": { + "message": "Kanäle anzeigen", + "description": "Discord permission name" + }, + "permission.moderateMembers": { + "message": "Mitglieder moderieren", + "description": "Discord permission name" + }, + "permission.sendMessages": { + "message": "Nachrichten senden", + "description": "Discord permission name" + }, + "permission.manageMessages": { + "message": "Nachrichten verwalten", + "description": "Discord permission name" + }, + "permission.manageThreads": { + "message": "Threads verwalten", + "description": "Discord permission name" + }, + "permission.embedLinks": { + "message": "Links einbetten", + "description": "Discord permission name" + }, + "permission.attachFiles": { + "message": "Dateien anhängen", + "description": "Discord permission name" + }, + "permission.readMessageHistory": { + "message": "Nachrichtenverlauf lesen", + "description": "Discord permission name" + }, + "permission.addReactions": { + "message": "Reaktionen hinzufügen", + "description": "Discord permission name" + }, + "permission.useExternalEmojis": { + "message": "Externe Emojis verwenden", + "description": "Discord permission name" + }, + "permission.muteMembers": { + "message": "Mitglieder stummschalten", + "description": "Discord permission name" + }, + "permission.deafenMembers": { + "message": "Mitglieder taub schalten", + "description": "Discord permission name" + }, + "permission.moveMembers": { + "message": "Mitglieder verschieben", + "description": "Discord permission name" } } diff --git a/i18n/de/docusaurus-plugin-content-pages/index.tsx b/i18n/de/docusaurus-plugin-content-pages/index.tsx deleted file mode 100644 index 3663819..0000000 --- a/i18n/de/docusaurus-plugin-content-pages/index.tsx +++ /dev/null @@ -1,435 +0,0 @@ -import React, {type ReactNode, useEffect, useState} from 'react'; -import clsx from 'clsx'; -import Layout from '@theme/Layout'; -import Link from '@docusaurus/Link'; -import Hero from '@site/src/components/landing/Hero'; -import Servers from '@site/src/components/landing/Servers'; -import shared from '@site/src/components/landing/styles/shared.module.css'; -import styles from '@site/src/pages/index.module.css'; - -type Counts = { - servers: number; - users: number; - captcha: number; - antispam: number; -}; - -type FormattedValue = { - value: string; - unit: string; -}; - -function formatValue(value: number): FormattedValue { - if (value >= 1_000_000) { - return {value: (value / 1_000_000).toFixed(1), unit: 'M'}; - } - return {value: (value / 1_000).toFixed(1), unit: 'k'}; -} - -function StatCounter({ - rawValue, - label, - fallback, -}: { - rawValue?: number; - label: string; - fallback: string; -}) { - if (rawValue == null) { - return ( -
-
- {fallback} -
-
{label}
-
- ); - } - const formatted = formatValue(rawValue); - return ( -
-
- {formatted.value} - {formatted.unit} -
-
{label}
-
- ); -} - -const CHECK_ICON = '/img/landing/icon-02.svg'; - -function FeatureItem({children}: {children: ReactNode}) { - return ( -
- -
{children}
-
- ); -} - -type Feature = { - to: string; - icon: string; - iconAlt: string; - title: string; - description: string; -}; - -const FEATURES: Feature[] = [ - { - to: '/docs/features/anti-spam', - icon: '/img/landing/iconAntispamWhite.svg', - iconAlt: 'RaidProtect icon Antispam', - title: 'Anti-Spam-Schutz', - description: - 'Sanktionieren Sie Spam-Versuche sofort, ganz ohne Ihr Zutun.', - }, - { - to: '/docs/features/raid-mode', - icon: '/img/landing/iconAntiraidWhite.svg', - iconAlt: 'RaidProtect icon Antiraid', - title: 'Raid-Schutz', - description: - 'Fürchten Sie einen Raid? Unser Bot erkennt und blockiert ihn, noch bevor er Ihren Server beeinträchtigt.', - }, - { - to: '/docs/features/captcha', - icon: '/img/landing/iconCaptchaWhite.svg', - iconAlt: 'RaidProtect icon Captcha', - title: 'Bot-Schutz durch Captcha', - description: - 'Dank Captcha müssen neue Mitglieder beweisen, dass sie menschlich sind. Verabschieden Sie sich von automatisierten Accounts.', - }, - { - to: '/docs/features/utilities', - icon: '/img/landing/iconReportWhite.svg', - iconAlt: 'RaidProtect icon Report', - title: 'Moderation & Verwaltung', - description: - 'Verwalten Sie Ihren Server wie ein Profi mit unseren umfassenden Moderations- und Verwaltungsfunktionen.', - }, - { - to: '/docs/features/tag-role', - icon: '/img/landing/iconTagWhite.svg', - iconAlt: 'RaidProtect icon Tag', - title: 'Tag-Rolle', - description: - 'Die Tag-Rolle weist Mitgliedern automatisch eine Rolle zu, wenn sie den Tag Ihres Servers hinzufügen.', - }, - { - to: '/docs/features/dm-lock', - icon: '/img/landing/iconDmlockWhite.svg', - iconAlt: 'RaidProtect icon DM Lock', - title: 'Privatnachrichten sperren', - description: - 'Ein einzigartiger Schutzschild gegen Spam, Betrug und Scam in Direktnachrichten.', - }, -]; - -export default function Home(): ReactNode { - const [counts, setCounts] = useState(null); - - useEffect(() => { - let cancelled = false; - fetch('https://docs.raidprotect.bot/counts.json') - .then((res) => { - if (!res.ok) throw new Error('Failed to fetch counts'); - return res.json(); - }) - .then((data: Counts) => { - if (!cancelled) setCounts(data); - }) - .catch((err) => { - // Stats are best-effort; failure is non-blocking - // eslint-disable-next-line no-console - console.error('Stats update error:', err); - }); - return () => { - cancelled = true; - }; - }, []); - - return ( - -
- - - - {/* About */} -
-
-
-

- Unsere{' '} - Ergebnisse sprechen - für sich -

-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
-
-
-
- - {/* Features */} -
-
-
-

- Unsere Funktionen -

-

- Erfahren Sie, warum wir zu den besten Bots gehören, um Ihren - Discord-Server vor böswilligen Nutzern zu schützen. -

-
-
- -
-
- - {/* Pricing */} -
-
-
-
-

- Einen Schritt{' '} - voraus bleiben -

-

- Fügen Sie RaidProtect hinzu und beginnen Sie noch heute damit, - Ihren Server zu schützen. -

-
- -
- {/* Basic */} -
-
Basic
-
-

Kostenlos

-
-

- Wesentliche Sicherheit dauerhaft garantiert -

-
- Anti-Spam-Schutz - Automatische Raid-Blockierung - Filterung böswilliger Bots - Moderation & Verwaltung - - Und vieles mehr... - -
- -
- - {/* Founder */} -
-
- Founder -
-
-

Abonnement

-

- 2,99 $ -

-
-

- Einführungsangebot für die ersten Abonnenten -

-
- Anpassbares Bot-Profil - Eigene Sanktionsnamen - Erweiterter Zugriff auf Auth Manager - Erweiterter Zugriff auf Display Public - Zugang zur öffentlichen Beta - Exklusive Rolle auf unserem Server -
- -
- - {/* Business */} -
-
- Business -
-
-

Auf Anfrage

-
-

- Für Projekte mit hohen Sicherheitsanforderungen -

-
- Alle Founder-Funktionen - Dedizierte, isolierte Instanz - Initiales Audit Ihres Servers - Integration mit Ihren Tools - Maßgeschneiderte Funktionen - Regelmäßige Termine mit einem Experten - Priorisierter Support -
- -
-
-
-
-
-
- ); -} diff --git a/i18n/de/docusaurus-plugin-content-pages/thank-you.tsx b/i18n/de/docusaurus-plugin-content-pages/thank-you.tsx deleted file mode 100644 index 660ae82..0000000 --- a/i18n/de/docusaurus-plugin-content-pages/thank-you.tsx +++ /dev/null @@ -1,400 +0,0 @@ -import React, {type ReactNode, useEffect, useState} from 'react'; -import Head from '@docusaurus/Head'; -import Link from '@docusaurus/Link'; -import styles from '@site/src/pages/thank-you.module.css'; - -type ServerBadge = 'partner' | 'verified' | null; - -type ServerInfo = { - name: string; - members: string; - inviteUrl: string; - iconUrl: string; - badge: ServerBadge; -}; - -type PermissionWarning = { - tone: 'admin' | 'missing'; - message: string; - missing: string[]; -}; - -const DEFAULT_ICON_URL = - 'https://cdn.prod.website-files.com/677fbd67c3c9318f7fb56659/67c33922eb3265808c183c50_411d8a698dd15ddf.webp'; - -const BADGE_SRC: Record, string> = { - partner: '/img/landing/serverBadgePartner.svg', - verified: '/img/landing/serverBadgeVerified.svg', -}; - -const REQUIRED_PERMISSIONS = 1117660769534n; -const ADMIN_PERMISSION = 8n; - -// Discord-style permission names (German). -const PERMISSION_MESSAGES: Array<[string, bigint]> = [ - ['Administrator', ADMIN_PERMISSION], - ['Server verwalten', 32n], - ['Rollen verwalten', 268435456n], - ['Kanäle verwalten', 16n], - ['Mitglieder kicken', 2n], - ['Mitglieder bannen', 4n], - ['Spitznamen verwalten', 134217728n], - ['Webhooks verwalten', 536870912n], - ['Audit-Log anzeigen', 524288n], - ['Kanäle anzeigen', 1024n], - ['Mitglieder moderieren', 1099511627776n], - ['Nachrichten senden', 2048n], - ['Nachrichten verwalten', 8192n], - ['Threads verwalten', 17179869184n], - ['Links einbetten', 16384n], - ['Dateien anhängen', 32768n], - ['Nachrichtenverlauf lesen', 65536n], - ['Reaktionen hinzufügen', 64n], - ['Externe Emojis verwenden', 262144n], - ['Mitglieder stummschalten', 4194304n], - ['Mitglieder taub schalten', 8388608n], - ['Mitglieder verschieben', 16777216n], -]; - -async function fetchServerInfo(guildId: string): Promise { - try { - const widgetResponse = await fetch( - `https://discord.com/api/guilds/${guildId}/widget.json`, - ); - if (!widgetResponse.ok) { - throw new Error('Widget deaktiviert.'); - } - const widgetData = await widgetResponse.json(); - - const name: string = widgetData.name || 'Unbekannter Server'; - const members: string = - typeof widgetData.presence_count === 'number' - ? `${widgetData.presence_count} Mitglieder online` - : 'Mitgliederzahl unbekannt'; - const inviteUrl: string = widgetData.instant_invite || '#'; - - let iconUrl = DEFAULT_ICON_URL; - let badge: ServerBadge = null; - - const inviteCode: string | null = widgetData.instant_invite - ? widgetData.instant_invite.split('/').pop() || null - : null; - - if (inviteCode) { - const inviteResponse = await fetch( - `https://discord.com/api/invites/${inviteCode}?with_counts=true&with_expiration=true`, - ); - if (inviteResponse.ok) { - const inviteData = await inviteResponse.json(); - const server = inviteData.guild; - if (server?.icon) { - iconUrl = `https://cdn.discordapp.com/icons/${server.id}/${server.icon}.png`; - } - if (Array.isArray(server?.features)) { - if (server.features.includes('PARTNERED')) { - badge = 'partner'; - } else if (server.features.includes('VERIFIED')) { - badge = 'verified'; - } - } - } - } - - return {name, members, inviteUrl, iconUrl, badge}; - } catch (error) { - // Discord widget may be disabled or network may be unreachable. - // eslint-disable-next-line no-console - console.error(error); - return null; - } -} - -function computePermissionWarning( - permissionsParam: string, -): PermissionWarning | null { - let currentPermissions: bigint; - try { - currentPermissions = BigInt(permissionsParam); - } catch { - return null; - } - - const hasAdminPermission = - (currentPermissions & ADMIN_PERMISSION) === ADMIN_PERMISSION; - const missingPermissions = PERMISSION_MESSAGES.filter( - ([, value]) => - (REQUIRED_PERMISSIONS & value) === value && - (currentPermissions & value) !== value, - ).map(([name]) => name); - - if (hasAdminPermission || missingPermissions.length === 0) { - return null; - } - - if ( - missingPermissions.length === 1 && - missingPermissions[0] === 'Administrator' - ) { - return { - tone: 'admin', - message: - '⚠️ Alle spezifischen Berechtigungen sind erteilt, aber ohne die Administrator-Berechtigung kann der Bot möglicherweise nicht auf alle Kanäle zugreifen.', - missing: [], - }; - } - - return { - tone: 'missing', - message: - '⚠️ Damit der Bot ordnungsgemäß funktioniert, empfehlen wir, folgende Berechtigungen hinzuzufügen:', - missing: missingPermissions, - }; -} - -export default function ThankYou(): ReactNode { - const [serverInfo, setServerInfo] = useState(null); - const [permissionWarning, setPermissionWarning] = - useState(null); - - useEffect(() => { - if (typeof window === 'undefined') return; - - const urlParams = new URLSearchParams(window.location.search); - - const guildId = urlParams.get('guild_id'); - let cancelled = false; - if (guildId) { - fetchServerInfo(guildId).then((info) => { - if (!cancelled && info) { - setServerInfo(info); - } - }); - } - - const permissionsParam = urlParams.get('permissions'); - if (permissionsParam) { - setPermissionWarning(computePermissionWarning(permissionsParam)); - } - - // Auto-redirect to Discord invite after 60s, matching the Webflow page. - const redirectTimer = window.setTimeout(() => { - window.location.href = 'https://discord.com/invite/HfMYDHbgqc'; - }, 60000); - - return () => { - cancelled = true; - window.clearTimeout(redirectTimer); - }; - }, []); - - return ( - <> - - Vielen Dank | RaidProtect - - -
-
- - RaidProtect title logo - - -

- Vielen Dank, dass Sie RaidProtect eingeladen haben! -

- - {serverInfo && ( - - )} - - {permissionWarning && ( -
- {permissionWarning.message} - {permissionWarning.missing.length > 0 && ( -
    - {permissionWarning.missing.map((perm) => ( -
  • - {perm} -
  • - ))} -
- )} -
- )} - -

- Zum Einstieg empfehlen wir, unsere Dokumentation zu konsultieren und - unserem Server beizutreten. -

- -
- - Unserem Discord-Server beitreten - - - Dokumentation anzeigen - -
- - -
- -
- - ); -} diff --git a/i18n/en/code.json b/i18n/en/code.json index 3455dcd..0020eca 100644 --- a/i18n/en/code.json +++ b/i18n/en/code.json @@ -467,5 +467,385 @@ "frame.cta.secondary": { "message": "Join the server", "description": "Frame CTA secondary button: join the Discord server" + }, + "landing.layout.title": { + "message": "RaidProtect • Secure your Discord server", + "description": "Browser tab title for the landing page" + }, + "landing.layout.description": { + "message": "RaidProtect is a French Discord bot whose mission is to easily protect your server from malicious users.", + "description": "Meta description for the landing page" + }, + "landing.about.title": { + "message": "Our results have an {highlight}", + "description": "About section title; {highlight} renders the gradient-highlighted word" + }, + "landing.about.title.highlight": { + "message": "impact", + "description": "Highlighted word inside the about section title" + }, + "landing.about.curve.ariaLabel": { + "message": "Growth in the number of servers", + "description": "ARIA label for the decorative SVG curve in the about section" + }, + "landing.about.counter.servers": { + "message": "Secure servers", + "description": "About stat label: number of secured servers" + }, + "landing.about.counter.captcha": { + "message": "Captchas solved", + "description": "About stat label: number of captchas solved" + }, + "landing.about.counter.antispam": { + "message": "Spam blocked", + "description": "About stat label: number of spam messages blocked" + }, + "landing.about.counter.users": { + "message": "Protected users", + "description": "About stat label: number of protected users" + }, + "landing.features.title": { + "message": "Our {highlight}", + "description": "Features section title; {highlight} renders the gradient-highlighted word" + }, + "landing.features.title.highlight": { + "message": "features", + "description": "Highlighted word inside the features section title" + }, + "landing.features.subtitle": { + "message": "Find out what makes us one of the best bots for protecting your Discord server from malicious users.", + "description": "Features section subtitle/description" + }, + "landing.features.anti-spam.title": { + "message": "Anti-spam protection", + "description": "Feature card title: anti-spam" + }, + "landing.features.anti-spam.description": { + "message": "Sanction spam attempts instantly, without any intervention on your part.", + "description": "Feature card description: anti-spam" + }, + "landing.features.raid.title": { + "message": "Blocking raids", + "description": "Feature card title: raid" + }, + "landing.features.raid.description": { + "message": "Worried about a raid? Our bot is capable of detecting and blocking it before it even impacts your server.", + "description": "Feature card description: raid" + }, + "landing.features.captcha.title": { + "message": "Protection against bots", + "description": "Feature card title: captcha" + }, + "landing.features.captcha.description": { + "message": "With captcha, your members have to prove they're human. Say goodbye to automated accounts.", + "description": "Feature card description: captcha" + }, + "landing.features.mod.title": { + "message": "Moderation & administration", + "description": "Feature card title: mod" + }, + "landing.features.mod.description": { + "message": "Manage your server like a pro with our various moderation and administration features.", + "description": "Feature card description: mod" + }, + "landing.features.tag.title": { + "message": "Tag Role", + "description": "Feature card title: tag" + }, + "landing.features.tag.description": { + "message": "Tag Role automatically assigns a role to members who add your server's tag.", + "description": "Feature card description: tag" + }, + "landing.features.dm.title": { + "message": "DM Lock", + "description": "Feature card title: dm" + }, + "landing.features.dm.description": { + "message": "An unprecedented shield against spam, scam and private message scams.", + "description": "Feature card description: dm" + }, + "landing.pricing.title": { + "message": "Keeping one step {highlight}", + "description": "Pricing section title; {highlight} renders the gradient-highlighted word" + }, + "landing.pricing.title.highlight": { + "message": "ahead", + "description": "Highlighted word inside the pricing section title" + }, + "landing.pricing.description": { + "message": "Add RaidProtect and start protecting your server today.", + "description": "Pricing section description below the title" + }, + "landing.pricing.basic.preTitle": { + "message": "Basic", + "description": "Pricing card pre-title for the Basic tier" + }, + "landing.pricing.basic.price": { + "message": "Free", + "description": "Pricing card price label for the Basic tier (free)" + }, + "landing.pricing.basic.tagline": { + "message": "Essential security guaranteed forever", + "description": "Pricing card tagline for the Basic tier" + }, + "landing.pricing.basic.feature.1": { + "message": "Anti-spam protections", + "description": "Basic tier feature 1" + }, + "landing.pricing.basic.feature.2": { + "message": "Automatic raid blocking", + "description": "Basic tier feature 2" + }, + "landing.pricing.basic.feature.3": { + "message": "Malicious bot filtering", + "description": "Basic tier feature 3" + }, + "landing.pricing.basic.feature.4": { + "message": "Moderation & administration", + "description": "Basic tier feature 4" + }, + "landing.pricing.basic.feature.5": { + "message": "And much more...", + "description": "Basic tier feature 5 (emphasis)" + }, + "landing.pricing.basic.button": { + "message": "Add to Discord", + "description": "Basic tier CTA button: invite the bot" + }, + "landing.pricing.founder.preTitle": { + "message": "Founder", + "description": "Pricing card pre-title for the Founder tier" + }, + "landing.pricing.founder.price.label": { + "message": "Subscription", + "description": "Founder tier price label (subscription)" + }, + "landing.pricing.founder.price.amount": { + "message": "$2.99", + "description": "Founder tier price amount; stays the same across locales" + }, + "landing.pricing.founder.tagline": { + "message": "Launch offer reserved for early subscribers", + "description": "Pricing card tagline for the Founder tier" + }, + "landing.pricing.founder.feature.1": { + "message": "Customisable bot profile", + "description": "Founder tier feature 1" + }, + "landing.pricing.founder.feature.2": { + "message": "Custom sanction names", + "description": "Founder tier feature 2" + }, + "landing.pricing.founder.feature.3": { + "message": "Advanced access to Auth Manager", + "description": "Founder tier feature 3" + }, + "landing.pricing.founder.feature.4": { + "message": "Extended access to Display Public", + "description": "Founder tier feature 4" + }, + "landing.pricing.founder.feature.5": { + "message": "Access to the public Beta", + "description": "Founder tier feature 5" + }, + "landing.pricing.founder.feature.6": { + "message": "Exclusive role on our server", + "description": "Founder tier feature 6" + }, + "landing.pricing.founder.button": { + "message": "Subscribe via Discord", + "description": "Founder tier CTA button: subscribe" + }, + "landing.pricing.business.preTitle": { + "message": "Business", + "description": "Pricing card pre-title for the Business tier" + }, + "landing.pricing.business.price": { + "message": "On request", + "description": "Pricing card price label for the Business tier (on request)" + }, + "landing.pricing.business.tagline": { + "message": "For projects with high security requirements", + "description": "Pricing card tagline for the Business tier" + }, + "landing.pricing.business.feature.1": { + "message": "All Founder features", + "description": "Business tier feature 1" + }, + "landing.pricing.business.feature.2": { + "message": "Dedicated, isolated instance", + "description": "Business tier feature 2" + }, + "landing.pricing.business.feature.3": { + "message": "Initial audit of your server", + "description": "Business tier feature 3" + }, + "landing.pricing.business.feature.4": { + "message": "Integration with your tools", + "description": "Business tier feature 4" + }, + "landing.pricing.business.feature.5": { + "message": "Custom features", + "description": "Business tier feature 5" + }, + "landing.pricing.business.feature.6": { + "message": "Regular check-ins with an expert", + "description": "Business tier feature 6" + }, + "landing.pricing.business.feature.7": { + "message": "Priority support", + "description": "Business tier feature 7" + }, + "landing.pricing.business.button": { + "message": "Book a meeting", + "description": "Business tier CTA button: book a meeting" + }, + "thankYou.head.title": { + "message": "Thank you | RaidProtect", + "description": "Browser tab title for the thank-you page" + }, + "thankYou.head.description": { + "message": "Thank you for inviting RaidProtect! To get started, we recommend checking out our documentation and joining our Discord server.", + "description": "Meta description for the thank-you page" + }, + "thankYou.title": { + "message": "Thank you for inviting RaidProtect!", + "description": "Main heading of the thank-you page" + }, + "thankYou.description": { + "message": "To get started, we recommend checking our documentation and joining our server.", + "description": "Body description of the thank-you page" + }, + "thankYou.cta.joinDiscord": { + "message": "Join our Discord server", + "description": "Primary CTA on the thank-you page: join the Discord server" + }, + "thankYou.cta.viewDocs": { + "message": "View documentation", + "description": "Secondary CTA on the thank-you page: open the documentation" + }, + "thankYou.server.unknown": { + "message": "Unknown server", + "description": "Fallback name shown when the Discord widget returns no server name" + }, + "thankYou.server.memberCountUnknown": { + "message": "Member count unknown", + "description": "Fallback shown when the Discord widget returns no member count" + }, + "thankYou.server.membersOnline": { + "message": "{count} members online", + "description": "Number of members currently online on the invited server" + }, + "thankYou.permissions.adminOnlyWarning": { + "message": "⚠️ All specific permissions are granted, but without the Administrator permission, the bot may not be able to access every channel.", + "description": "Warning shown when the only missing permission is Administrator" + }, + "thankYou.permissions.missingWarning": { + "message": "⚠️ To ensure the bot runs properly, we recommend adding the following permissions:", + "description": "Warning shown when some required permissions are missing" + }, + "thankYou.social.discord.ariaLabel": { + "message": "Discord", + "description": "ARIA label for the Discord social link" + }, + "thankYou.social.x.ariaLabel": { + "message": "X", + "description": "ARIA label for the X (Twitter) social link" + }, + "thankYou.social.youtube.ariaLabel": { + "message": "YouTube", + "description": "ARIA label for the YouTube social link" + }, + "thankYou.social.github.ariaLabel": { + "message": "GitHub", + "description": "ARIA label for the GitHub social link" + }, + "permission.administrator": { + "message": "Administrator", + "description": "Discord permission name" + }, + "permission.manageServer": { + "message": "Manage Server", + "description": "Discord permission name" + }, + "permission.manageRoles": { + "message": "Manage Roles", + "description": "Discord permission name" + }, + "permission.manageChannels": { + "message": "Manage Channels", + "description": "Discord permission name" + }, + "permission.kickMembers": { + "message": "Kick Members", + "description": "Discord permission name" + }, + "permission.banMembers": { + "message": "Ban Members", + "description": "Discord permission name" + }, + "permission.manageNicknames": { + "message": "Manage Nicknames", + "description": "Discord permission name" + }, + "permission.manageWebhooks": { + "message": "Manage Webhooks", + "description": "Discord permission name" + }, + "permission.viewAuditLog": { + "message": "View Audit Log", + "description": "Discord permission name" + }, + "permission.viewChannels": { + "message": "View Channels", + "description": "Discord permission name" + }, + "permission.moderateMembers": { + "message": "Moderate Members", + "description": "Discord permission name" + }, + "permission.sendMessages": { + "message": "Send Messages", + "description": "Discord permission name" + }, + "permission.manageMessages": { + "message": "Manage Messages", + "description": "Discord permission name" + }, + "permission.manageThreads": { + "message": "Manage Threads", + "description": "Discord permission name" + }, + "permission.embedLinks": { + "message": "Embed Links", + "description": "Discord permission name" + }, + "permission.attachFiles": { + "message": "Attach Files", + "description": "Discord permission name" + }, + "permission.readMessageHistory": { + "message": "Read Message History", + "description": "Discord permission name" + }, + "permission.addReactions": { + "message": "Add Reactions", + "description": "Discord permission name" + }, + "permission.useExternalEmojis": { + "message": "Use External Emojis", + "description": "Discord permission name" + }, + "permission.muteMembers": { + "message": "Mute Members", + "description": "Discord permission name" + }, + "permission.deafenMembers": { + "message": "Deafen Members", + "description": "Discord permission name" + }, + "permission.moveMembers": { + "message": "Move Members", + "description": "Discord permission name" } } diff --git a/i18n/en/docusaurus-plugin-content-pages/index.tsx b/i18n/en/docusaurus-plugin-content-pages/index.tsx deleted file mode 100644 index c92b354..0000000 --- a/i18n/en/docusaurus-plugin-content-pages/index.tsx +++ /dev/null @@ -1,433 +0,0 @@ -import React, {type ReactNode, useEffect, useState} from 'react'; -import clsx from 'clsx'; -import Layout from '@theme/Layout'; -import Link from '@docusaurus/Link'; -import Hero from '@site/src/components/landing/Hero'; -import Servers from '@site/src/components/landing/Servers'; -import shared from '@site/src/components/landing/styles/shared.module.css'; -import styles from '@site/src/pages/index.module.css'; - -type Counts = { - servers: number; - users: number; - captcha: number; - antispam: number; -}; - -type FormattedValue = { - value: string; - unit: string; -}; - -function formatValue(value: number): FormattedValue { - if (value >= 1_000_000) { - return {value: (value / 1_000_000).toFixed(1), unit: 'M'}; - } - return {value: (value / 1_000).toFixed(1), unit: 'k'}; -} - -function StatCounter({ - rawValue, - label, - fallback, -}: { - rawValue?: number; - label: string; - fallback: string; -}) { - if (rawValue == null) { - return ( -
-
- {fallback} -
-
{label}
-
- ); - } - const formatted = formatValue(rawValue); - return ( -
-
- {formatted.value} - {formatted.unit} -
-
{label}
-
- ); -} - -const CHECK_ICON = '/img/landing/icon-02.svg'; - -function FeatureItem({children}: {children: ReactNode}) { - return ( -
- -
{children}
-
- ); -} - -type Feature = { - to: string; - icon: string; - iconAlt: string; - title: string; - description: string; -}; - -const FEATURES: Feature[] = [ - { - to: '/docs/features/anti-spam', - icon: '/img/landing/iconAntispamWhite.svg', - iconAlt: 'RaidProtect icon Antispam', - title: 'Anti-spam protection', - description: - 'Sanction spam attempts instantly, without any intervention on your part.', - }, - { - to: '/docs/features/raid-mode', - icon: '/img/landing/iconAntiraidWhite.svg', - iconAlt: 'RaidProtect icon Antiraid', - title: 'Blocking raids', - description: - 'Worried about a raid? Our bot is capable of detecting and blocking it before it even impacts your server.', - }, - { - to: '/docs/features/captcha', - icon: '/img/landing/iconCaptchaWhite.svg', - iconAlt: 'RaidProtect icon Captcha', - title: 'Protection against bots', - description: - "With captcha, your members have to prove they're human. Say goodbye to automated accounts.", - }, - { - to: '/docs/features/utilities', - icon: '/img/landing/iconReportWhite.svg', - iconAlt: 'RaidProtect icon Report', - title: 'Moderation & administration', - description: - 'Manage your server like a pro with our various moderation and administration features.', - }, - { - to: '/docs/features/tag-role', - icon: '/img/landing/iconTagWhite.svg', - iconAlt: 'RaidProtect icon Tag', - title: 'Tag Role', - description: - "Tag Role automatically assigns a role to members who add your server's tag.", - }, - { - to: '/docs/features/dm-lock', - icon: '/img/landing/iconDmlockWhite.svg', - iconAlt: 'RaidProtect icon DM Lock', - title: 'DM Lock', - description: - 'An unprecedented shield against spam, scam and private message scams.', - }, -]; - -export default function Home(): ReactNode { - const [counts, setCounts] = useState(null); - - useEffect(() => { - let cancelled = false; - fetch('https://docs.raidprotect.bot/counts.json') - .then((res) => { - if (!res.ok) throw new Error('Failed to fetch counts'); - return res.json(); - }) - .then((data: Counts) => { - if (!cancelled) setCounts(data); - }) - .catch((err) => { - // Stats are best-effort; failure is non-blocking - // eslint-disable-next-line no-console - console.error('Stats update error:', err); - }); - return () => { - cancelled = true; - }; - }, []); - - return ( - -
- - - - {/* About */} -
-
-
-

- Our results have an{' '} - impact -

-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
-
-
-
- - {/* Features */} -
-
-
-

- Our features -

-

- Find out what makes us one of the best bots for protecting your - Discord server from malicious users. -

-
-
- -
-
- - {/* Pricing */} -
-
-
-
-

- Keeping one step{' '} - ahead -

-

- Add RaidProtect and start protecting your server today. -

-
- -
- {/* Basic */} -
-
Basic
-
-

Free

-
-

- Essential security guaranteed forever -

-
- Anti-spam protections - Automatic raid blocking - Malicious bot filtering - Moderation & administration - - And much more... - -
- -
- - {/* Founder */} -
-
- Founder -
-
-

Subscription

-

- $2.99 -

-
-

- Launch offer reserved for early subscribers -

-
- Customisable bot profile - Custom sanction names - Advanced access to Auth Manager - Extended access to Display Public - Access to the public Beta - Exclusive role on our server -
- -
- - {/* Business */} -
-
- Business -
-
-

On request

-
-

- For projects with high security requirements -

-
- All Founder features - Dedicated, isolated instance - Initial audit of your server - Integration with your tools - Custom features - Regular check-ins with an expert - Priority support -
- -
-
-
-
-
-
- ); -} diff --git a/i18n/en/docusaurus-plugin-content-pages/thank-you.tsx b/i18n/en/docusaurus-plugin-content-pages/thank-you.tsx deleted file mode 100644 index 4f87bcf..0000000 --- a/i18n/en/docusaurus-plugin-content-pages/thank-you.tsx +++ /dev/null @@ -1,398 +0,0 @@ -import React, {type ReactNode, useEffect, useState} from 'react'; -import Head from '@docusaurus/Head'; -import Link from '@docusaurus/Link'; -import styles from '@site/src/pages/thank-you.module.css'; - -type ServerBadge = 'partner' | 'verified' | null; - -type ServerInfo = { - name: string; - members: string; - inviteUrl: string; - iconUrl: string; - badge: ServerBadge; -}; - -type PermissionWarning = { - tone: 'admin' | 'missing'; - message: string; - missing: string[]; -}; - -const DEFAULT_ICON_URL = - 'https://cdn.prod.website-files.com/677fbd67c3c9318f7fb56659/67c33922eb3265808c183c50_411d8a698dd15ddf.webp'; - -const BADGE_SRC: Record, string> = { - partner: '/img/landing/serverBadgePartner.svg', - verified: '/img/landing/serverBadgeVerified.svg', -}; - -const REQUIRED_PERMISSIONS = 1117660769534n; -const ADMIN_PERMISSION = 8n; - -// Discord-style permission names (English). -const PERMISSION_MESSAGES: Array<[string, bigint]> = [ - ['Administrator', ADMIN_PERMISSION], - ['Manage Server', 32n], - ['Manage Roles', 268435456n], - ['Manage Channels', 16n], - ['Kick Members', 2n], - ['Ban Members', 4n], - ['Manage Nicknames', 134217728n], - ['Manage Webhooks', 536870912n], - ['View Audit Log', 524288n], - ['View Channels', 1024n], - ['Moderate Members', 1099511627776n], - ['Send Messages', 2048n], - ['Manage Messages', 8192n], - ['Manage Threads', 17179869184n], - ['Embed Links', 16384n], - ['Attach Files', 32768n], - ['Read Message History', 65536n], - ['Add Reactions', 64n], - ['Use External Emojis', 262144n], - ['Mute Members', 4194304n], - ['Deafen Members', 8388608n], - ['Move Members', 16777216n], -]; - -async function fetchServerInfo(guildId: string): Promise { - try { - const widgetResponse = await fetch( - `https://discord.com/api/guilds/${guildId}/widget.json`, - ); - if (!widgetResponse.ok) { - throw new Error('Widget disabled.'); - } - const widgetData = await widgetResponse.json(); - - const name: string = widgetData.name || 'Unknown server'; - const members: string = - typeof widgetData.presence_count === 'number' - ? `${widgetData.presence_count} members online` - : 'Member count unknown'; - const inviteUrl: string = widgetData.instant_invite || '#'; - - let iconUrl = DEFAULT_ICON_URL; - let badge: ServerBadge = null; - - const inviteCode: string | null = widgetData.instant_invite - ? widgetData.instant_invite.split('/').pop() || null - : null; - - if (inviteCode) { - const inviteResponse = await fetch( - `https://discord.com/api/invites/${inviteCode}?with_counts=true&with_expiration=true`, - ); - if (inviteResponse.ok) { - const inviteData = await inviteResponse.json(); - const server = inviteData.guild; - if (server?.icon) { - iconUrl = `https://cdn.discordapp.com/icons/${server.id}/${server.icon}.png`; - } - if (Array.isArray(server?.features)) { - if (server.features.includes('PARTNERED')) { - badge = 'partner'; - } else if (server.features.includes('VERIFIED')) { - badge = 'verified'; - } - } - } - } - - return {name, members, inviteUrl, iconUrl, badge}; - } catch (error) { - // Discord widget may be disabled or network may be unreachable. - // eslint-disable-next-line no-console - console.error(error); - return null; - } -} - -function computePermissionWarning( - permissionsParam: string, -): PermissionWarning | null { - let currentPermissions: bigint; - try { - currentPermissions = BigInt(permissionsParam); - } catch { - return null; - } - - const hasAdminPermission = - (currentPermissions & ADMIN_PERMISSION) === ADMIN_PERMISSION; - const missingPermissions = PERMISSION_MESSAGES.filter( - ([, value]) => - (REQUIRED_PERMISSIONS & value) === value && - (currentPermissions & value) !== value, - ).map(([name]) => name); - - if (hasAdminPermission || missingPermissions.length === 0) { - return null; - } - - if ( - missingPermissions.length === 1 && - missingPermissions[0] === 'Administrator' - ) { - return { - tone: 'admin', - message: - '⚠️ All specific permissions are granted, but without the Administrator permission, the bot may not be able to access every channel.', - missing: [], - }; - } - - return { - tone: 'missing', - message: - '⚠️ To ensure the bot runs properly, we recommend adding the following permissions:', - missing: missingPermissions, - }; -} - -export default function ThankYou(): ReactNode { - const [serverInfo, setServerInfo] = useState(null); - const [permissionWarning, setPermissionWarning] = - useState(null); - - useEffect(() => { - if (typeof window === 'undefined') return; - - const urlParams = new URLSearchParams(window.location.search); - - const guildId = urlParams.get('guild_id'); - let cancelled = false; - if (guildId) { - fetchServerInfo(guildId).then((info) => { - if (!cancelled && info) { - setServerInfo(info); - } - }); - } - - const permissionsParam = urlParams.get('permissions'); - if (permissionsParam) { - setPermissionWarning(computePermissionWarning(permissionsParam)); - } - - // Auto-redirect to Discord invite after 60s, matching the Webflow page. - const redirectTimer = window.setTimeout(() => { - window.location.href = 'https://discord.com/invite/HfMYDHbgqc'; - }, 60000); - - return () => { - cancelled = true; - window.clearTimeout(redirectTimer); - }; - }, []); - - return ( - <> - - Thank you | RaidProtect - - -
-
- - RaidProtect title logo - - -

Thank you for inviting RaidProtect!

- - {serverInfo && ( - - )} - - {permissionWarning && ( -
- {permissionWarning.message} - {permissionWarning.missing.length > 0 && ( -
    - {permissionWarning.missing.map((perm) => ( -
  • - {perm} -
  • - ))} -
- )} -
- )} - -

- To get started, we recommend checking our documentation and joining - our server. -

- -
- - Join our Discord server - - - View documentation - -
- - -
- -
- - ); -} diff --git a/i18n/es/code.json b/i18n/es/code.json index b990b1c..fa4b09d 100644 --- a/i18n/es/code.json +++ b/i18n/es/code.json @@ -467,5 +467,385 @@ "frame.cta.secondary": { "message": "Unirse al servidor", "description": "Frame CTA secondary button: join the Discord server" + }, + "landing.layout.title": { + "message": "RaidProtect • Protege tu servidor de Discord", + "description": "Browser tab title for the landing page" + }, + "landing.layout.description": { + "message": "RaidProtect es un bot de Discord francés cuya misión es proteger fácilmente tu servidor de usuarios malintencionados.", + "description": "Meta description for the landing page" + }, + "landing.about.title": { + "message": "Nuestros resultados tienen un {highlight}", + "description": "About section title; {highlight} renders the gradient-highlighted word" + }, + "landing.about.title.highlight": { + "message": "impacto", + "description": "Highlighted word inside the about section title" + }, + "landing.about.curve.ariaLabel": { + "message": "Crecimiento en el número de servidores", + "description": "ARIA label for the decorative SVG curve in the about section" + }, + "landing.about.counter.servers": { + "message": "Servidores protegidos", + "description": "About stat label: number of secured servers" + }, + "landing.about.counter.captcha": { + "message": "Captchas resueltos", + "description": "About stat label: number of captchas solved" + }, + "landing.about.counter.antispam": { + "message": "Spams bloqueados", + "description": "About stat label: number of spam messages blocked" + }, + "landing.about.counter.users": { + "message": "Usuarios protegidos", + "description": "About stat label: number of protected users" + }, + "landing.features.title": { + "message": "Nuestras {highlight}", + "description": "Features section title; {highlight} renders the gradient-highlighted word" + }, + "landing.features.title.highlight": { + "message": "funciones", + "description": "Highlighted word inside the features section title" + }, + "landing.features.subtitle": { + "message": "Descubre por qué somos uno de los mejores bots para proteger tu servidor de Discord contra usuarios malintencionados.", + "description": "Features section subtitle/description" + }, + "landing.features.anti-spam.title": { + "message": "Protección antispam", + "description": "Feature card title: anti-spam" + }, + "landing.features.anti-spam.description": { + "message": "Sanciona al instante los intentos de spam, sin necesidad de intervención por tu parte.", + "description": "Feature card description: anti-spam" + }, + "landing.features.raid.title": { + "message": "Bloqueo de raids", + "description": "Feature card title: raid" + }, + "landing.features.raid.description": { + "message": "¿Temes un raid? Nuestro bot puede detectarlo y bloquearlo antes de que afecte a tu servidor.", + "description": "Feature card description: raid" + }, + "landing.features.captcha.title": { + "message": "Protección contra bots", + "description": "Feature card title: captcha" + }, + "landing.features.captcha.description": { + "message": "Gracias al captcha, tus miembros deben demostrar que son humanos. Di adiós a las cuentas automatizadas.", + "description": "Feature card description: captcha" + }, + "landing.features.mod.title": { + "message": "Moderación y administración", + "description": "Feature card title: mod" + }, + "landing.features.mod.description": { + "message": "Administra tu servidor como un profesional con nuestras diversas funciones de moderación y administración.", + "description": "Feature card description: mod" + }, + "landing.features.tag.title": { + "message": "Rol por etiqueta", + "description": "Feature card title: tag" + }, + "landing.features.tag.description": { + "message": "El Rol por etiqueta asigna automáticamente un rol a los miembros que añaden la etiqueta de tu servidor.", + "description": "Feature card description: tag" + }, + "landing.features.dm.title": { + "message": "Bloqueo de MP", + "description": "Feature card title: dm" + }, + "landing.features.dm.description": { + "message": "Un escudo único contra el spam, el scam y las estafas por mensaje privado.", + "description": "Feature card description: dm" + }, + "landing.pricing.title": { + "message": "Mantente a la {highlight}", + "description": "Pricing section title; {highlight} renders the gradient-highlighted word" + }, + "landing.pricing.title.highlight": { + "message": "vanguardia", + "description": "Highlighted word inside the pricing section title" + }, + "landing.pricing.description": { + "message": "Añade RaidProtect y empieza a proteger tu servidor hoy mismo.", + "description": "Pricing section description below the title" + }, + "landing.pricing.basic.preTitle": { + "message": "Basic", + "description": "Pricing card pre-title for the Basic tier" + }, + "landing.pricing.basic.price": { + "message": "Gratis", + "description": "Pricing card price label for the Basic tier (free)" + }, + "landing.pricing.basic.tagline": { + "message": "La seguridad esencial garantizada para siempre", + "description": "Pricing card tagline for the Basic tier" + }, + "landing.pricing.basic.feature.1": { + "message": "Protecciones antispam", + "description": "Basic tier feature 1" + }, + "landing.pricing.basic.feature.2": { + "message": "Bloqueo automático de raids", + "description": "Basic tier feature 2" + }, + "landing.pricing.basic.feature.3": { + "message": "Filtrado de bots maliciosos", + "description": "Basic tier feature 3" + }, + "landing.pricing.basic.feature.4": { + "message": "Moderación y administración", + "description": "Basic tier feature 4" + }, + "landing.pricing.basic.feature.5": { + "message": "Y mucho más...", + "description": "Basic tier feature 5 (emphasis)" + }, + "landing.pricing.basic.button": { + "message": "Añadir a Discord", + "description": "Basic tier CTA button: invite the bot" + }, + "landing.pricing.founder.preTitle": { + "message": "Founder", + "description": "Pricing card pre-title for the Founder tier" + }, + "landing.pricing.founder.price.label": { + "message": "Suscripción", + "description": "Founder tier price label (subscription)" + }, + "landing.pricing.founder.price.amount": { + "message": "2,99 $", + "description": "Founder tier price amount; stays the same across locales" + }, + "landing.pricing.founder.tagline": { + "message": "Oferta de lanzamiento reservada a los primeros suscriptores", + "description": "Pricing card tagline for the Founder tier" + }, + "landing.pricing.founder.feature.1": { + "message": "Perfil del bot personalizable", + "description": "Founder tier feature 1" + }, + "landing.pricing.founder.feature.2": { + "message": "Nombres de sanciones personalizados", + "description": "Founder tier feature 2" + }, + "landing.pricing.founder.feature.3": { + "message": "Acceso avanzado al Auth Manager", + "description": "Founder tier feature 3" + }, + "landing.pricing.founder.feature.4": { + "message": "Acceso ampliado al Display Public", + "description": "Founder tier feature 4" + }, + "landing.pricing.founder.feature.5": { + "message": "Acceso a la Beta pública", + "description": "Founder tier feature 5" + }, + "landing.pricing.founder.feature.6": { + "message": "Rol exclusivo en nuestro servidor", + "description": "Founder tier feature 6" + }, + "landing.pricing.founder.button": { + "message": "Suscribirse vía Discord", + "description": "Founder tier CTA button: subscribe" + }, + "landing.pricing.business.preTitle": { + "message": "Business", + "description": "Pricing card pre-title for the Business tier" + }, + "landing.pricing.business.price": { + "message": "Bajo solicitud", + "description": "Pricing card price label for the Business tier (on request)" + }, + "landing.pricing.business.tagline": { + "message": "Para proyectos con altos requisitos de seguridad", + "description": "Pricing card tagline for the Business tier" + }, + "landing.pricing.business.feature.1": { + "message": "Todas las funciones Founder", + "description": "Business tier feature 1" + }, + "landing.pricing.business.feature.2": { + "message": "Instancia dedicada y aislada", + "description": "Business tier feature 2" + }, + "landing.pricing.business.feature.3": { + "message": "Auditoría inicial de tu servidor", + "description": "Business tier feature 3" + }, + "landing.pricing.business.feature.4": { + "message": "Integración con tus herramientas", + "description": "Business tier feature 4" + }, + "landing.pricing.business.feature.5": { + "message": "Funciones a medida", + "description": "Business tier feature 5" + }, + "landing.pricing.business.feature.6": { + "message": "Seguimiento regular con un experto", + "description": "Business tier feature 6" + }, + "landing.pricing.business.feature.7": { + "message": "Soporte prioritario", + "description": "Business tier feature 7" + }, + "landing.pricing.business.button": { + "message": "Pedir una cita", + "description": "Business tier CTA button: book a meeting" + }, + "thankYou.head.title": { + "message": "Gracias | RaidProtect", + "description": "Browser tab title for the thank-you page" + }, + "thankYou.head.description": { + "message": "¡Gracias por invitar a RaidProtect! Para empezar, te recomendamos consultar nuestra documentación y unirte a nuestro servidor de Discord.", + "description": "Meta description for the thank-you page" + }, + "thankYou.title": { + "message": "¡Gracias por invitar a RaidProtect!", + "description": "Main heading of the thank-you page" + }, + "thankYou.description": { + "message": "Para empezar con buen pie, te recomendamos consultar nuestra documentación y unirte a nuestro servidor.", + "description": "Body description of the thank-you page" + }, + "thankYou.cta.joinDiscord": { + "message": "Unirse a nuestro servidor de Discord", + "description": "Primary CTA on the thank-you page: join the Discord server" + }, + "thankYou.cta.viewDocs": { + "message": "Consultar la documentación", + "description": "Secondary CTA on the thank-you page: open the documentation" + }, + "thankYou.server.unknown": { + "message": "Servidor desconocido", + "description": "Fallback name shown when the Discord widget returns no server name" + }, + "thankYou.server.memberCountUnknown": { + "message": "Número de miembros desconocido", + "description": "Fallback shown when the Discord widget returns no member count" + }, + "thankYou.server.membersOnline": { + "message": "{count} miembros en línea", + "description": "Number of members currently online on the invited server" + }, + "thankYou.permissions.adminOnlyWarning": { + "message": "⚠️ Todos los permisos específicos están otorgados, pero sin el permiso de Administrador el bot podría no acceder a todos los canales.", + "description": "Warning shown when the only missing permission is Administrator" + }, + "thankYou.permissions.missingWarning": { + "message": "⚠️ Para que el bot funcione correctamente, recomendamos agregar los siguientes permisos:", + "description": "Warning shown when some required permissions are missing" + }, + "thankYou.social.discord.ariaLabel": { + "message": "Discord", + "description": "ARIA label for the Discord social link" + }, + "thankYou.social.x.ariaLabel": { + "message": "X", + "description": "ARIA label for the X (Twitter) social link" + }, + "thankYou.social.youtube.ariaLabel": { + "message": "YouTube", + "description": "ARIA label for the YouTube social link" + }, + "thankYou.social.github.ariaLabel": { + "message": "GitHub", + "description": "ARIA label for the GitHub social link" + }, + "permission.administrator": { + "message": "Administrador", + "description": "Discord permission name" + }, + "permission.manageServer": { + "message": "Gestionar servidor", + "description": "Discord permission name" + }, + "permission.manageRoles": { + "message": "Gestionar roles", + "description": "Discord permission name" + }, + "permission.manageChannels": { + "message": "Gestionar canales", + "description": "Discord permission name" + }, + "permission.kickMembers": { + "message": "Expulsar miembros", + "description": "Discord permission name" + }, + "permission.banMembers": { + "message": "Banear miembros", + "description": "Discord permission name" + }, + "permission.manageNicknames": { + "message": "Gestionar apodos", + "description": "Discord permission name" + }, + "permission.manageWebhooks": { + "message": "Gestionar webhooks", + "description": "Discord permission name" + }, + "permission.viewAuditLog": { + "message": "Ver registro de auditoría", + "description": "Discord permission name" + }, + "permission.viewChannels": { + "message": "Ver canales", + "description": "Discord permission name" + }, + "permission.moderateMembers": { + "message": "Moderar miembros", + "description": "Discord permission name" + }, + "permission.sendMessages": { + "message": "Enviar mensajes", + "description": "Discord permission name" + }, + "permission.manageMessages": { + "message": "Gestionar mensajes", + "description": "Discord permission name" + }, + "permission.manageThreads": { + "message": "Gestionar hilos", + "description": "Discord permission name" + }, + "permission.embedLinks": { + "message": "Insertar enlaces", + "description": "Discord permission name" + }, + "permission.attachFiles": { + "message": "Adjuntar archivos", + "description": "Discord permission name" + }, + "permission.readMessageHistory": { + "message": "Leer historial de mensajes", + "description": "Discord permission name" + }, + "permission.addReactions": { + "message": "Añadir reacciones", + "description": "Discord permission name" + }, + "permission.useExternalEmojis": { + "message": "Usar emojis externos", + "description": "Discord permission name" + }, + "permission.muteMembers": { + "message": "Silenciar miembros", + "description": "Discord permission name" + }, + "permission.deafenMembers": { + "message": "Ensordecer miembros", + "description": "Discord permission name" + }, + "permission.moveMembers": { + "message": "Mover miembros", + "description": "Discord permission name" } } diff --git a/i18n/es/docusaurus-plugin-content-pages/index.tsx b/i18n/es/docusaurus-plugin-content-pages/index.tsx deleted file mode 100644 index 1610b9c..0000000 --- a/i18n/es/docusaurus-plugin-content-pages/index.tsx +++ /dev/null @@ -1,433 +0,0 @@ -import React, {type ReactNode, useEffect, useState} from 'react'; -import clsx from 'clsx'; -import Layout from '@theme/Layout'; -import Link from '@docusaurus/Link'; -import Hero from '@site/src/components/landing/Hero'; -import Servers from '@site/src/components/landing/Servers'; -import shared from '@site/src/components/landing/styles/shared.module.css'; -import styles from '@site/src/pages/index.module.css'; - -type Counts = { - servers: number; - users: number; - captcha: number; - antispam: number; -}; - -type FormattedValue = { - value: string; - unit: string; -}; - -function formatValue(value: number): FormattedValue { - if (value >= 1_000_000) { - return {value: (value / 1_000_000).toFixed(1), unit: 'M'}; - } - return {value: (value / 1_000).toFixed(1), unit: 'k'}; -} - -function StatCounter({ - rawValue, - label, - fallback, -}: { - rawValue?: number; - label: string; - fallback: string; -}) { - if (rawValue == null) { - return ( -
-
- {fallback} -
-
{label}
-
- ); - } - const formatted = formatValue(rawValue); - return ( -
-
- {formatted.value} - {formatted.unit} -
-
{label}
-
- ); -} - -const CHECK_ICON = '/img/landing/icon-02.svg'; - -function FeatureItem({children}: {children: ReactNode}) { - return ( -
- -
{children}
-
- ); -} - -type Feature = { - to: string; - icon: string; - iconAlt: string; - title: string; - description: string; -}; - -const FEATURES: Feature[] = [ - { - to: '/docs/features/anti-spam', - icon: '/img/landing/iconAntispamWhite.svg', - iconAlt: 'RaidProtect icon Antispam', - title: 'Protección antispam', - description: - 'Sanciona al instante los intentos de spam, sin necesidad de intervención por tu parte.', - }, - { - to: '/docs/features/raid-mode', - icon: '/img/landing/iconAntiraidWhite.svg', - iconAlt: 'RaidProtect icon Antiraid', - title: 'Bloqueo de raids', - description: - '¿Temes un raid? Nuestro bot puede detectarlo y bloquearlo antes de que afecte a tu servidor.', - }, - { - to: '/docs/features/captcha', - icon: '/img/landing/iconCaptchaWhite.svg', - iconAlt: 'RaidProtect icon Captcha', - title: 'Protección contra bots', - description: - 'Gracias al captcha, tus miembros deben demostrar que son humanos. Di adiós a las cuentas automatizadas.', - }, - { - to: '/docs/features/utilities', - icon: '/img/landing/iconReportWhite.svg', - iconAlt: 'RaidProtect icon Report', - title: 'Moderación y administración', - description: - 'Administra tu servidor como un profesional con nuestras diversas funciones de moderación y administración.', - }, - { - to: '/docs/features/tag-role', - icon: '/img/landing/iconTagWhite.svg', - iconAlt: 'RaidProtect icon Tag', - title: 'Rol por etiqueta', - description: - 'El Rol por etiqueta asigna automáticamente un rol a los miembros que añaden la etiqueta de tu servidor.', - }, - { - to: '/docs/features/dm-lock', - icon: '/img/landing/iconDmlockWhite.svg', - iconAlt: 'RaidProtect icon DM Lock', - title: 'Bloqueo de MP', - description: - 'Un escudo único contra el spam, el scam y las estafas por mensaje privado.', - }, -]; - -export default function Home(): ReactNode { - const [counts, setCounts] = useState(null); - - useEffect(() => { - let cancelled = false; - fetch('https://docs.raidprotect.bot/counts.json') - .then((res) => { - if (!res.ok) throw new Error('Failed to fetch counts'); - return res.json(); - }) - .then((data: Counts) => { - if (!cancelled) setCounts(data); - }) - .catch((err) => { - // Stats are best-effort; failure is non-blocking - // eslint-disable-next-line no-console - console.error('Stats update error:', err); - }); - return () => { - cancelled = true; - }; - }, []); - - return ( - -
- - - - {/* About */} -
-
-
-

- Nuestros resultados tienen un{' '} - impacto -

-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
-
-
-
- - {/* Features */} -
-
-
-

- Nuestras funciones -

-

- Descubre por qué somos uno de los mejores bots para proteger tu - servidor de Discord contra usuarios malintencionados. -

-
-
- -
-
- - {/* Pricing */} -
-
-
-
-

- Mantente a la{' '} - vanguardia -

-

- Añade RaidProtect y empieza a proteger tu servidor hoy mismo. -

-
- -
- {/* Basic */} -
-
Basic
-
-

Gratis

-
-

- La seguridad esencial garantizada para siempre -

-
- Protecciones antispam - Bloqueo automático de raids - Filtrado de bots maliciosos - Moderación y administración - - Y mucho más... - -
- -
- - {/* Founder */} -
-
- Founder -
-
-

Suscripción

-

- 2,99 $ -

-
-

- Oferta de lanzamiento reservada a los primeros suscriptores -

-
- Perfil del bot personalizable - Nombres de sanciones personalizados - Acceso avanzado al Auth Manager - Acceso ampliado al Display Public - Acceso a la Beta pública - Rol exclusivo en nuestro servidor -
- -
- - {/* Business */} -
-
- Business -
-
-

Bajo solicitud

-
-

- Para proyectos con altos requisitos de seguridad -

-
- Todas las funciones Founder - Instancia dedicada y aislada - Auditoría inicial de tu servidor - Integración con tus herramientas - Funciones a medida - Seguimiento regular con un experto - Soporte prioritario -
- -
-
-
-
-
-
- ); -} diff --git a/i18n/es/docusaurus-plugin-content-pages/thank-you.tsx b/i18n/es/docusaurus-plugin-content-pages/thank-you.tsx deleted file mode 100644 index f502bc4..0000000 --- a/i18n/es/docusaurus-plugin-content-pages/thank-you.tsx +++ /dev/null @@ -1,398 +0,0 @@ -import React, {type ReactNode, useEffect, useState} from 'react'; -import Head from '@docusaurus/Head'; -import Link from '@docusaurus/Link'; -import styles from '@site/src/pages/thank-you.module.css'; - -type ServerBadge = 'partner' | 'verified' | null; - -type ServerInfo = { - name: string; - members: string; - inviteUrl: string; - iconUrl: string; - badge: ServerBadge; -}; - -type PermissionWarning = { - tone: 'admin' | 'missing'; - message: string; - missing: string[]; -}; - -const DEFAULT_ICON_URL = - 'https://cdn.prod.website-files.com/677fbd67c3c9318f7fb56659/67c33922eb3265808c183c50_411d8a698dd15ddf.webp'; - -const BADGE_SRC: Record, string> = { - partner: '/img/landing/serverBadgePartner.svg', - verified: '/img/landing/serverBadgeVerified.svg', -}; - -const REQUIRED_PERMISSIONS = 1117660769534n; -const ADMIN_PERMISSION = 8n; - -// Discord-style permission names (Spanish). -const PERMISSION_MESSAGES: Array<[string, bigint]> = [ - ['Administrador', ADMIN_PERMISSION], - ['Gestionar servidor', 32n], - ['Gestionar roles', 268435456n], - ['Gestionar canales', 16n], - ['Expulsar miembros', 2n], - ['Banear miembros', 4n], - ['Gestionar apodos', 134217728n], - ['Gestionar webhooks', 536870912n], - ['Ver registro de auditoría', 524288n], - ['Ver canales', 1024n], - ['Moderar miembros', 1099511627776n], - ['Enviar mensajes', 2048n], - ['Gestionar mensajes', 8192n], - ['Gestionar hilos', 17179869184n], - ['Insertar enlaces', 16384n], - ['Adjuntar archivos', 32768n], - ['Leer historial de mensajes', 65536n], - ['Añadir reacciones', 64n], - ['Usar emojis externos', 262144n], - ['Silenciar miembros', 4194304n], - ['Ensordecer miembros', 8388608n], - ['Mover miembros', 16777216n], -]; - -async function fetchServerInfo(guildId: string): Promise { - try { - const widgetResponse = await fetch( - `https://discord.com/api/guilds/${guildId}/widget.json`, - ); - if (!widgetResponse.ok) { - throw new Error('Widget desactivado.'); - } - const widgetData = await widgetResponse.json(); - - const name: string = widgetData.name || 'Servidor desconocido'; - const members: string = - typeof widgetData.presence_count === 'number' - ? `${widgetData.presence_count} miembros en línea` - : 'Número de miembros desconocido'; - const inviteUrl: string = widgetData.instant_invite || '#'; - - let iconUrl = DEFAULT_ICON_URL; - let badge: ServerBadge = null; - - const inviteCode: string | null = widgetData.instant_invite - ? widgetData.instant_invite.split('/').pop() || null - : null; - - if (inviteCode) { - const inviteResponse = await fetch( - `https://discord.com/api/invites/${inviteCode}?with_counts=true&with_expiration=true`, - ); - if (inviteResponse.ok) { - const inviteData = await inviteResponse.json(); - const server = inviteData.guild; - if (server?.icon) { - iconUrl = `https://cdn.discordapp.com/icons/${server.id}/${server.icon}.png`; - } - if (Array.isArray(server?.features)) { - if (server.features.includes('PARTNERED')) { - badge = 'partner'; - } else if (server.features.includes('VERIFIED')) { - badge = 'verified'; - } - } - } - } - - return {name, members, inviteUrl, iconUrl, badge}; - } catch (error) { - // Discord widget may be disabled or network may be unreachable. - // eslint-disable-next-line no-console - console.error(error); - return null; - } -} - -function computePermissionWarning( - permissionsParam: string, -): PermissionWarning | null { - let currentPermissions: bigint; - try { - currentPermissions = BigInt(permissionsParam); - } catch { - return null; - } - - const hasAdminPermission = - (currentPermissions & ADMIN_PERMISSION) === ADMIN_PERMISSION; - const missingPermissions = PERMISSION_MESSAGES.filter( - ([, value]) => - (REQUIRED_PERMISSIONS & value) === value && - (currentPermissions & value) !== value, - ).map(([name]) => name); - - if (hasAdminPermission || missingPermissions.length === 0) { - return null; - } - - if ( - missingPermissions.length === 1 && - missingPermissions[0] === 'Administrador' - ) { - return { - tone: 'admin', - message: - '⚠️ Todos los permisos específicos están otorgados, pero sin el permiso de Administrador el bot podría no acceder a todos los canales.', - missing: [], - }; - } - - return { - tone: 'missing', - message: - '⚠️ Para que el bot funcione correctamente, recomendamos agregar los siguientes permisos:', - missing: missingPermissions, - }; -} - -export default function ThankYou(): ReactNode { - const [serverInfo, setServerInfo] = useState(null); - const [permissionWarning, setPermissionWarning] = - useState(null); - - useEffect(() => { - if (typeof window === 'undefined') return; - - const urlParams = new URLSearchParams(window.location.search); - - const guildId = urlParams.get('guild_id'); - let cancelled = false; - if (guildId) { - fetchServerInfo(guildId).then((info) => { - if (!cancelled && info) { - setServerInfo(info); - } - }); - } - - const permissionsParam = urlParams.get('permissions'); - if (permissionsParam) { - setPermissionWarning(computePermissionWarning(permissionsParam)); - } - - // Auto-redirect to Discord invite after 60s, matching the Webflow page. - const redirectTimer = window.setTimeout(() => { - window.location.href = 'https://discord.com/invite/HfMYDHbgqc'; - }, 60000); - - return () => { - cancelled = true; - window.clearTimeout(redirectTimer); - }; - }, []); - - return ( - <> - - Gracias | RaidProtect - - -
-
- - RaidProtect title logo - - -

¡Gracias por invitar a RaidProtect!

- - {serverInfo && ( - - )} - - {permissionWarning && ( -
- {permissionWarning.message} - {permissionWarning.missing.length > 0 && ( -
    - {permissionWarning.missing.map((perm) => ( -
  • - {perm} -
  • - ))} -
- )} -
- )} - -

- Para empezar con buen pie, te recomendamos consultar nuestra - documentación y unirte a nuestro servidor. -

- -
- - Unirse a nuestro servidor de Discord - - - Consultar la documentación - -
- - -
- -
- - ); -} diff --git a/i18n/fr/code.json b/i18n/fr/code.json index 997cd1b..27cd03d 100644 --- a/i18n/fr/code.json +++ b/i18n/fr/code.json @@ -486,5 +486,385 @@ "frame.cta.secondary": { "message": "Rejoindre le serveur", "description": "Frame CTA secondary button: join the Discord server" + }, + "landing.layout.title": { + "message": "RaidProtect • Sécurisez votre serveur Discord", + "description": "Browser tab title for the landing page" + }, + "landing.layout.description": { + "message": "RaidProtect est un bot Discord français ayant pour mission de protéger simplement votre serveur des utilisateurs malintentionnés.", + "description": "Meta description for the landing page" + }, + "landing.about.title": { + "message": "Nos résultats ont un {highlight}", + "description": "About section title; {highlight} renders the gradient-highlighted word" + }, + "landing.about.title.highlight": { + "message": "impact", + "description": "Highlighted word inside the about section title" + }, + "landing.about.curve.ariaLabel": { + "message": "Croissance du nombre de serveurs", + "description": "ARIA label for the decorative SVG curve in the about section" + }, + "landing.about.counter.servers": { + "message": "Serveurs sécurisés", + "description": "About stat label: number of secured servers" + }, + "landing.about.counter.captcha": { + "message": "Captchas résolus", + "description": "About stat label: number of captchas solved" + }, + "landing.about.counter.antispam": { + "message": "Spams bloqués", + "description": "About stat label: number of spam messages blocked" + }, + "landing.about.counter.users": { + "message": "Utilisateurs protégés", + "description": "About stat label: number of protected users" + }, + "landing.features.title": { + "message": "Nos {highlight}", + "description": "Features section title; {highlight} renders the gradient-highlighted word" + }, + "landing.features.title.highlight": { + "message": "fonctionnalités", + "description": "Highlighted word inside the features section title" + }, + "landing.features.subtitle": { + "message": "Découvrez ce qui fait de nous l'un des meilleurs bots pour protéger votre serveur Discord des utilisateurs malintentionnés.", + "description": "Features section subtitle/description" + }, + "landing.features.anti-spam.title": { + "message": "Protection anti-spam", + "description": "Feature card title: anti-spam" + }, + "landing.features.anti-spam.description": { + "message": "Sanctionnez instantanément les tentatives de spam, sans aucune intervention de votre part.", + "description": "Feature card description: anti-spam" + }, + "landing.features.raid.title": { + "message": "Blocage des raids", + "description": "Feature card title: raid" + }, + "landing.features.raid.description": { + "message": "Vous craignez un raid ? Notre bot est capable de le détecter et de le bloquer avant même qu'il impacte votre serveur.", + "description": "Feature card description: raid" + }, + "landing.features.captcha.title": { + "message": "Protection contre les robots", + "description": "Feature card title: captcha" + }, + "landing.features.captcha.description": { + "message": "Grâce au captcha, vos membres doivent prouver qu'ils sont humains. Dites adieu aux comptes automatisés.", + "description": "Feature card description: captcha" + }, + "landing.features.mod.title": { + "message": "Modération & administration", + "description": "Feature card title: mod" + }, + "landing.features.mod.description": { + "message": "Gérez votre serveur comme un pro avec nos diverses fonctionalités de modération et d'administration.", + "description": "Feature card description: mod" + }, + "landing.features.tag.title": { + "message": "Rôle de Tag", + "description": "Feature card title: tag" + }, + "landing.features.tag.description": { + "message": "Le Rôle de Tag permet d’attribuer automatiquement un rôle aux membres qui ajoutent le tag de votre serveur.", + "description": "Feature card description: tag" + }, + "landing.features.dm.title": { + "message": "Fermeture des MP", + "description": "Feature card title: dm" + }, + "landing.features.dm.description": { + "message": "Un bouclier inédit contre le spam, le scam et les arnaques par message privé.", + "description": "Feature card description: dm" + }, + "landing.pricing.title": { + "message": "Garder une longueur {highlight}", + "description": "Pricing section title; {highlight} renders the gradient-highlighted word" + }, + "landing.pricing.title.highlight": { + "message": "d'avance", + "description": "Highlighted word inside the pricing section title" + }, + "landing.pricing.description": { + "message": "Ajoutez RaidProtect et commencez à protéger votre serveur dès aujourd'hui.", + "description": "Pricing section description below the title" + }, + "landing.pricing.basic.preTitle": { + "message": "Basic", + "description": "Pricing card pre-title for the Basic tier" + }, + "landing.pricing.basic.price": { + "message": "Gratuit", + "description": "Pricing card price label for the Basic tier (free)" + }, + "landing.pricing.basic.tagline": { + "message": "La sécurité essentielle assurée pour toujours", + "description": "Pricing card tagline for the Basic tier" + }, + "landing.pricing.basic.feature.1": { + "message": "Protections anti-spam", + "description": "Basic tier feature 1" + }, + "landing.pricing.basic.feature.2": { + "message": "Blocage automatique des raids", + "description": "Basic tier feature 2" + }, + "landing.pricing.basic.feature.3": { + "message": "Filtrage des bots malveillants", + "description": "Basic tier feature 3" + }, + "landing.pricing.basic.feature.4": { + "message": "Modération & administration", + "description": "Basic tier feature 4" + }, + "landing.pricing.basic.feature.5": { + "message": "Et bien plus encore...", + "description": "Basic tier feature 5 (emphasis)" + }, + "landing.pricing.basic.button": { + "message": "Ajouter à Discord", + "description": "Basic tier CTA button: invite the bot" + }, + "landing.pricing.founder.preTitle": { + "message": "Founder", + "description": "Pricing card pre-title for the Founder tier" + }, + "landing.pricing.founder.price.label": { + "message": "Abonnement", + "description": "Founder tier price label (subscription)" + }, + "landing.pricing.founder.price.amount": { + "message": "2,99 $", + "description": "Founder tier price amount; stays the same across locales" + }, + "landing.pricing.founder.tagline": { + "message": "Offre de lancement réservée aux premiers abonnés", + "description": "Pricing card tagline for the Founder tier" + }, + "landing.pricing.founder.feature.1": { + "message": "Profil du bot personnalisable", + "description": "Founder tier feature 1" + }, + "landing.pricing.founder.feature.2": { + "message": "Noms de sanctions custom", + "description": "Founder tier feature 2" + }, + "landing.pricing.founder.feature.3": { + "message": "Accès avancé à l'Auth Manager", + "description": "Founder tier feature 3" + }, + "landing.pricing.founder.feature.4": { + "message": "Accès étendu au Display Public", + "description": "Founder tier feature 4" + }, + "landing.pricing.founder.feature.5": { + "message": "Accès à la Bêta publique", + "description": "Founder tier feature 5" + }, + "landing.pricing.founder.feature.6": { + "message": "Rôle exclusif sur notre serveur", + "description": "Founder tier feature 6" + }, + "landing.pricing.founder.button": { + "message": "S'abonner via Discord", + "description": "Founder tier CTA button: subscribe" + }, + "landing.pricing.business.preTitle": { + "message": "Business", + "description": "Pricing card pre-title for the Business tier" + }, + "landing.pricing.business.price": { + "message": "Sur demande", + "description": "Pricing card price label for the Business tier (on request)" + }, + "landing.pricing.business.tagline": { + "message": "Pour les projets aux exigences de sécurité élevées", + "description": "Pricing card tagline for the Business tier" + }, + "landing.pricing.business.feature.1": { + "message": "Les fonctionnalités Founder", + "description": "Business tier feature 1" + }, + "landing.pricing.business.feature.2": { + "message": "Instance dédiée et isolée", + "description": "Business tier feature 2" + }, + "landing.pricing.business.feature.3": { + "message": "Audit initial de votre serveur", + "description": "Business tier feature 3" + }, + "landing.pricing.business.feature.4": { + "message": "Intégration avec vos outils", + "description": "Business tier feature 4" + }, + "landing.pricing.business.feature.5": { + "message": "Fonctionnalités sur mesure", + "description": "Business tier feature 5" + }, + "landing.pricing.business.feature.6": { + "message": "Suivi régulier avec un expert", + "description": "Business tier feature 6" + }, + "landing.pricing.business.feature.7": { + "message": "Support prioritaire", + "description": "Business tier feature 7" + }, + "landing.pricing.business.button": { + "message": "Prendre rendez-vous", + "description": "Business tier CTA button: book a meeting" + }, + "thankYou.head.title": { + "message": "Merci | RaidProtect", + "description": "Browser tab title for the thank-you page" + }, + "thankYou.head.description": { + "message": "Merci d'avoir invité RaidProtect ! Pour bien débuter, nous vous recommandons de consulter notre documentation et de rejoindre notre serveur Discord.", + "description": "Meta description for the thank-you page" + }, + "thankYou.title": { + "message": "Merci d'avoir invité RaidProtect !", + "description": "Main heading of the thank-you page" + }, + "thankYou.description": { + "message": "Pour bien débuter, nous vous recommandons de consulter notre documentation et de rejoindre notre serveur.", + "description": "Body description of the thank-you page" + }, + "thankYou.cta.joinDiscord": { + "message": "Rejoindre notre serveur Discord", + "description": "Primary CTA on the thank-you page: join the Discord server" + }, + "thankYou.cta.viewDocs": { + "message": "Consulter la documentation", + "description": "Secondary CTA on the thank-you page: open the documentation" + }, + "thankYou.server.unknown": { + "message": "Serveur inconnu", + "description": "Fallback name shown when the Discord widget returns no server name" + }, + "thankYou.server.memberCountUnknown": { + "message": "Nombre de membres inconnu", + "description": "Fallback shown when the Discord widget returns no member count" + }, + "thankYou.server.membersOnline": { + "message": "{count} membres en ligne", + "description": "Number of members currently online on the invited server" + }, + "thankYou.permissions.adminOnlyWarning": { + "message": "⚠️ Toutes les permissions spécifiques sont accordées, mais sans la permission Administrateur, le bot pourrait ne pas accéder à tous les salons.", + "description": "Warning shown when the only missing permission is Administrator" + }, + "thankYou.permissions.missingWarning": { + "message": "⚠️ Afin d'assurer le bon fonctionnement du bot, nous vous recommandons d'ajouter les permissions suivantes :", + "description": "Warning shown when some required permissions are missing" + }, + "thankYou.social.discord.ariaLabel": { + "message": "Discord", + "description": "ARIA label for the Discord social link" + }, + "thankYou.social.x.ariaLabel": { + "message": "X", + "description": "ARIA label for the X (Twitter) social link" + }, + "thankYou.social.youtube.ariaLabel": { + "message": "YouTube", + "description": "ARIA label for the YouTube social link" + }, + "thankYou.social.github.ariaLabel": { + "message": "GitHub", + "description": "ARIA label for the GitHub social link" + }, + "permission.administrator": { + "message": "Administrateur", + "description": "Discord permission name" + }, + "permission.manageServer": { + "message": "Gérer le serveur", + "description": "Discord permission name" + }, + "permission.manageRoles": { + "message": "Gérer les rôles", + "description": "Discord permission name" + }, + "permission.manageChannels": { + "message": "Gérer les salons", + "description": "Discord permission name" + }, + "permission.kickMembers": { + "message": "Expulser des membres", + "description": "Discord permission name" + }, + "permission.banMembers": { + "message": "Bannir des membres", + "description": "Discord permission name" + }, + "permission.manageNicknames": { + "message": "Gérer les pseudos", + "description": "Discord permission name" + }, + "permission.manageWebhooks": { + "message": "Gérer les webhooks", + "description": "Discord permission name" + }, + "permission.viewAuditLog": { + "message": "Voir les logs du serveur", + "description": "Discord permission name" + }, + "permission.viewChannels": { + "message": "Voir les salons", + "description": "Discord permission name" + }, + "permission.moderateMembers": { + "message": "Modérer les membres", + "description": "Discord permission name" + }, + "permission.sendMessages": { + "message": "Envoyer des messages", + "description": "Discord permission name" + }, + "permission.manageMessages": { + "message": "Gérer les messages", + "description": "Discord permission name" + }, + "permission.manageThreads": { + "message": "Gérer les fils", + "description": "Discord permission name" + }, + "permission.embedLinks": { + "message": "Intégrer des liens", + "description": "Discord permission name" + }, + "permission.attachFiles": { + "message": "Joindre des fichiers", + "description": "Discord permission name" + }, + "permission.readMessageHistory": { + "message": "Voir les anciens messages", + "description": "Discord permission name" + }, + "permission.addReactions": { + "message": "Ajouter des réactions", + "description": "Discord permission name" + }, + "permission.useExternalEmojis": { + "message": "Utiliser des émojis externes", + "description": "Discord permission name" + }, + "permission.muteMembers": { + "message": "Rendre les membres muets", + "description": "Discord permission name" + }, + "permission.deafenMembers": { + "message": "Mettre en sourdine des membres", + "description": "Discord permission name" + }, + "permission.moveMembers": { + "message": "Déplacer des membres", + "description": "Discord permission name" } } diff --git a/i18n/pt/code.json b/i18n/pt/code.json index 87d4fce..c263618 100644 --- a/i18n/pt/code.json +++ b/i18n/pt/code.json @@ -467,5 +467,385 @@ "frame.cta.secondary": { "message": "Entrar no servidor", "description": "Frame CTA secondary button: join the Discord server" + }, + "landing.layout.title": { + "message": "RaidProtect • Proteja o seu servidor Discord", + "description": "Browser tab title for the landing page" + }, + "landing.layout.description": { + "message": "O RaidProtect é um bot Discord francês que tem por missão proteger facilmente o seu servidor de utilizadores maliciosos.", + "description": "Meta description for the landing page" + }, + "landing.about.title": { + "message": "Os nossos resultados têm {highlight}", + "description": "About section title; {highlight} renders the gradient-highlighted word" + }, + "landing.about.title.highlight": { + "message": "impacto", + "description": "Highlighted word inside the about section title" + }, + "landing.about.curve.ariaLabel": { + "message": "Crescimento do número de servidores", + "description": "ARIA label for the decorative SVG curve in the about section" + }, + "landing.about.counter.servers": { + "message": "Servidores protegidos", + "description": "About stat label: number of secured servers" + }, + "landing.about.counter.captcha": { + "message": "Captchas resolvidos", + "description": "About stat label: number of captchas solved" + }, + "landing.about.counter.antispam": { + "message": "Spams bloqueados", + "description": "About stat label: number of spam messages blocked" + }, + "landing.about.counter.users": { + "message": "Utilizadores protegidos", + "description": "About stat label: number of protected users" + }, + "landing.features.title": { + "message": "As nossas {highlight}", + "description": "Features section title; {highlight} renders the gradient-highlighted word" + }, + "landing.features.title.highlight": { + "message": "funcionalidades", + "description": "Highlighted word inside the features section title" + }, + "landing.features.subtitle": { + "message": "Descubra o que faz de nós um dos melhores bots para proteger o seu servidor Discord de utilizadores maliciosos.", + "description": "Features section subtitle/description" + }, + "landing.features.anti-spam.title": { + "message": "Proteção antispam", + "description": "Feature card title: anti-spam" + }, + "landing.features.anti-spam.description": { + "message": "Sancione instantaneamente as tentativas de spam, sem qualquer intervenção da sua parte.", + "description": "Feature card description: anti-spam" + }, + "landing.features.raid.title": { + "message": "Bloqueio de raids", + "description": "Feature card title: raid" + }, + "landing.features.raid.description": { + "message": "Receia um raid? O nosso bot é capaz de o detetar e bloquear antes que afete o seu servidor.", + "description": "Feature card description: raid" + }, + "landing.features.captcha.title": { + "message": "Proteção contra bots", + "description": "Feature card title: captcha" + }, + "landing.features.captcha.description": { + "message": "Graças ao captcha, os seus membros têm de provar que são humanos. Diga adeus às contas automatizadas.", + "description": "Feature card description: captcha" + }, + "landing.features.mod.title": { + "message": "Moderação e administração", + "description": "Feature card title: mod" + }, + "landing.features.mod.description": { + "message": "Gira o seu servidor como um profissional graças às nossas várias funcionalidades de moderação e administração.", + "description": "Feature card description: mod" + }, + "landing.features.tag.title": { + "message": "Cargo de Etiqueta", + "description": "Feature card title: tag" + }, + "landing.features.tag.description": { + "message": "O Cargo de Etiqueta atribui automaticamente um cargo aos membros que adicionam a etiqueta do seu servidor.", + "description": "Feature card description: tag" + }, + "landing.features.dm.title": { + "message": "Bloqueio de MP", + "description": "Feature card title: dm" + }, + "landing.features.dm.description": { + "message": "Um escudo único contra spam, scam e burlas por mensagem privada.", + "description": "Feature card description: dm" + }, + "landing.pricing.title": { + "message": "Manter-se um passo {highlight}", + "description": "Pricing section title; {highlight} renders the gradient-highlighted word" + }, + "landing.pricing.title.highlight": { + "message": "à frente", + "description": "Highlighted word inside the pricing section title" + }, + "landing.pricing.description": { + "message": "Adicione o RaidProtect e comece a proteger o seu servidor hoje mesmo.", + "description": "Pricing section description below the title" + }, + "landing.pricing.basic.preTitle": { + "message": "Basic", + "description": "Pricing card pre-title for the Basic tier" + }, + "landing.pricing.basic.price": { + "message": "Gratuito", + "description": "Pricing card price label for the Basic tier (free)" + }, + "landing.pricing.basic.tagline": { + "message": "A segurança essencial garantida para sempre", + "description": "Pricing card tagline for the Basic tier" + }, + "landing.pricing.basic.feature.1": { + "message": "Proteções antispam", + "description": "Basic tier feature 1" + }, + "landing.pricing.basic.feature.2": { + "message": "Bloqueio automático de raids", + "description": "Basic tier feature 2" + }, + "landing.pricing.basic.feature.3": { + "message": "Filtragem de bots maliciosos", + "description": "Basic tier feature 3" + }, + "landing.pricing.basic.feature.4": { + "message": "Moderação e administração", + "description": "Basic tier feature 4" + }, + "landing.pricing.basic.feature.5": { + "message": "E muito mais...", + "description": "Basic tier feature 5 (emphasis)" + }, + "landing.pricing.basic.button": { + "message": "Adicionar ao Discord", + "description": "Basic tier CTA button: invite the bot" + }, + "landing.pricing.founder.preTitle": { + "message": "Founder", + "description": "Pricing card pre-title for the Founder tier" + }, + "landing.pricing.founder.price.label": { + "message": "Subscrição", + "description": "Founder tier price label (subscription)" + }, + "landing.pricing.founder.price.amount": { + "message": "2,99 $", + "description": "Founder tier price amount; stays the same across locales" + }, + "landing.pricing.founder.tagline": { + "message": "Oferta de lançamento reservada aos primeiros subscritores", + "description": "Pricing card tagline for the Founder tier" + }, + "landing.pricing.founder.feature.1": { + "message": "Perfil do bot personalizável", + "description": "Founder tier feature 1" + }, + "landing.pricing.founder.feature.2": { + "message": "Nomes de sanções personalizados", + "description": "Founder tier feature 2" + }, + "landing.pricing.founder.feature.3": { + "message": "Acesso avançado ao Auth Manager", + "description": "Founder tier feature 3" + }, + "landing.pricing.founder.feature.4": { + "message": "Acesso alargado ao Display Public", + "description": "Founder tier feature 4" + }, + "landing.pricing.founder.feature.5": { + "message": "Acesso à Beta pública", + "description": "Founder tier feature 5" + }, + "landing.pricing.founder.feature.6": { + "message": "Cargo exclusivo no nosso servidor", + "description": "Founder tier feature 6" + }, + "landing.pricing.founder.button": { + "message": "Subscrever via Discord", + "description": "Founder tier CTA button: subscribe" + }, + "landing.pricing.business.preTitle": { + "message": "Business", + "description": "Pricing card pre-title for the Business tier" + }, + "landing.pricing.business.price": { + "message": "Sob consulta", + "description": "Pricing card price label for the Business tier (on request)" + }, + "landing.pricing.business.tagline": { + "message": "Para projetos com exigências de segurança elevadas", + "description": "Pricing card tagline for the Business tier" + }, + "landing.pricing.business.feature.1": { + "message": "Todas as funcionalidades Founder", + "description": "Business tier feature 1" + }, + "landing.pricing.business.feature.2": { + "message": "Instância dedicada e isolada", + "description": "Business tier feature 2" + }, + "landing.pricing.business.feature.3": { + "message": "Auditoria inicial do seu servidor", + "description": "Business tier feature 3" + }, + "landing.pricing.business.feature.4": { + "message": "Integração com as suas ferramentas", + "description": "Business tier feature 4" + }, + "landing.pricing.business.feature.5": { + "message": "Funcionalidades à medida", + "description": "Business tier feature 5" + }, + "landing.pricing.business.feature.6": { + "message": "Acompanhamento regular com um especialista", + "description": "Business tier feature 6" + }, + "landing.pricing.business.feature.7": { + "message": "Suporte prioritário", + "description": "Business tier feature 7" + }, + "landing.pricing.business.button": { + "message": "Marcar reunião", + "description": "Business tier CTA button: book a meeting" + }, + "thankYou.head.title": { + "message": "Obrigado | RaidProtect", + "description": "Browser tab title for the thank-you page" + }, + "thankYou.head.description": { + "message": "Obrigado por convidar o RaidProtect! Para começar, recomendamos consultar a nossa documentação e entrar no nosso servidor Discord.", + "description": "Meta description for the thank-you page" + }, + "thankYou.title": { + "message": "Obrigado por convidar o RaidProtect!", + "description": "Main heading of the thank-you page" + }, + "thankYou.description": { + "message": "Para começar com o pé direito, recomendamos consultar a nossa documentação e entrar no nosso servidor.", + "description": "Body description of the thank-you page" + }, + "thankYou.cta.joinDiscord": { + "message": "Entrar no nosso servidor Discord", + "description": "Primary CTA on the thank-you page: join the Discord server" + }, + "thankYou.cta.viewDocs": { + "message": "Consultar a documentação", + "description": "Secondary CTA on the thank-you page: open the documentation" + }, + "thankYou.server.unknown": { + "message": "Servidor desconhecido", + "description": "Fallback name shown when the Discord widget returns no server name" + }, + "thankYou.server.memberCountUnknown": { + "message": "Número de membros desconhecido", + "description": "Fallback shown when the Discord widget returns no member count" + }, + "thankYou.server.membersOnline": { + "message": "{count} membros online", + "description": "Number of members currently online on the invited server" + }, + "thankYou.permissions.adminOnlyWarning": { + "message": "⚠️ Todas as permissões específicas estão concedidas, mas sem a permissão de Administrador o bot pode não conseguir aceder a todos os canais.", + "description": "Warning shown when the only missing permission is Administrator" + }, + "thankYou.permissions.missingWarning": { + "message": "⚠️ Para garantir o bom funcionamento do bot, recomendamos adicionar as seguintes permissões:", + "description": "Warning shown when some required permissions are missing" + }, + "thankYou.social.discord.ariaLabel": { + "message": "Discord", + "description": "ARIA label for the Discord social link" + }, + "thankYou.social.x.ariaLabel": { + "message": "X", + "description": "ARIA label for the X (Twitter) social link" + }, + "thankYou.social.youtube.ariaLabel": { + "message": "YouTube", + "description": "ARIA label for the YouTube social link" + }, + "thankYou.social.github.ariaLabel": { + "message": "GitHub", + "description": "ARIA label for the GitHub social link" + }, + "permission.administrator": { + "message": "Administrador", + "description": "Discord permission name" + }, + "permission.manageServer": { + "message": "Gerir servidor", + "description": "Discord permission name" + }, + "permission.manageRoles": { + "message": "Gerir cargos", + "description": "Discord permission name" + }, + "permission.manageChannels": { + "message": "Gerir canais", + "description": "Discord permission name" + }, + "permission.kickMembers": { + "message": "Expulsar membros", + "description": "Discord permission name" + }, + "permission.banMembers": { + "message": "Banir membros", + "description": "Discord permission name" + }, + "permission.manageNicknames": { + "message": "Gerir alcunhas", + "description": "Discord permission name" + }, + "permission.manageWebhooks": { + "message": "Gerir webhooks", + "description": "Discord permission name" + }, + "permission.viewAuditLog": { + "message": "Ver registo de auditoria", + "description": "Discord permission name" + }, + "permission.viewChannels": { + "message": "Ver canais", + "description": "Discord permission name" + }, + "permission.moderateMembers": { + "message": "Moderar membros", + "description": "Discord permission name" + }, + "permission.sendMessages": { + "message": "Enviar mensagens", + "description": "Discord permission name" + }, + "permission.manageMessages": { + "message": "Gerir mensagens", + "description": "Discord permission name" + }, + "permission.manageThreads": { + "message": "Gerir tópicos", + "description": "Discord permission name" + }, + "permission.embedLinks": { + "message": "Incorporar ligações", + "description": "Discord permission name" + }, + "permission.attachFiles": { + "message": "Anexar ficheiros", + "description": "Discord permission name" + }, + "permission.readMessageHistory": { + "message": "Ler histórico de mensagens", + "description": "Discord permission name" + }, + "permission.addReactions": { + "message": "Adicionar reações", + "description": "Discord permission name" + }, + "permission.useExternalEmojis": { + "message": "Usar emojis externos", + "description": "Discord permission name" + }, + "permission.muteMembers": { + "message": "Silenciar membros", + "description": "Discord permission name" + }, + "permission.deafenMembers": { + "message": "Ensurdecer membros", + "description": "Discord permission name" + }, + "permission.moveMembers": { + "message": "Mover membros", + "description": "Discord permission name" } } diff --git a/i18n/pt/docusaurus-plugin-content-pages/index.tsx b/i18n/pt/docusaurus-plugin-content-pages/index.tsx deleted file mode 100644 index 0658580..0000000 --- a/i18n/pt/docusaurus-plugin-content-pages/index.tsx +++ /dev/null @@ -1,435 +0,0 @@ -import React, {type ReactNode, useEffect, useState} from 'react'; -import clsx from 'clsx'; -import Layout from '@theme/Layout'; -import Link from '@docusaurus/Link'; -import Hero from '@site/src/components/landing/Hero'; -import Servers from '@site/src/components/landing/Servers'; -import shared from '@site/src/components/landing/styles/shared.module.css'; -import styles from '@site/src/pages/index.module.css'; - -type Counts = { - servers: number; - users: number; - captcha: number; - antispam: number; -}; - -type FormattedValue = { - value: string; - unit: string; -}; - -function formatValue(value: number): FormattedValue { - if (value >= 1_000_000) { - return {value: (value / 1_000_000).toFixed(1), unit: 'M'}; - } - return {value: (value / 1_000).toFixed(1), unit: 'k'}; -} - -function StatCounter({ - rawValue, - label, - fallback, -}: { - rawValue?: number; - label: string; - fallback: string; -}) { - if (rawValue == null) { - return ( -
-
- {fallback} -
-
{label}
-
- ); - } - const formatted = formatValue(rawValue); - return ( -
-
- {formatted.value} - {formatted.unit} -
-
{label}
-
- ); -} - -const CHECK_ICON = '/img/landing/icon-02.svg'; - -function FeatureItem({children}: {children: ReactNode}) { - return ( -
- -
{children}
-
- ); -} - -type Feature = { - to: string; - icon: string; - iconAlt: string; - title: string; - description: string; -}; - -const FEATURES: Feature[] = [ - { - to: '/docs/features/anti-spam', - icon: '/img/landing/iconAntispamWhite.svg', - iconAlt: 'RaidProtect icon Antispam', - title: 'Proteção antispam', - description: - 'Sancione instantaneamente as tentativas de spam, sem qualquer intervenção da sua parte.', - }, - { - to: '/docs/features/raid-mode', - icon: '/img/landing/iconAntiraidWhite.svg', - iconAlt: 'RaidProtect icon Antiraid', - title: 'Bloqueio de raids', - description: - 'Receia um raid? O nosso bot é capaz de o detetar e bloquear antes que afete o seu servidor.', - }, - { - to: '/docs/features/captcha', - icon: '/img/landing/iconCaptchaWhite.svg', - iconAlt: 'RaidProtect icon Captcha', - title: 'Proteção contra bots', - description: - 'Graças ao captcha, os seus membros têm de provar que são humanos. Diga adeus às contas automatizadas.', - }, - { - to: '/docs/features/utilities', - icon: '/img/landing/iconReportWhite.svg', - iconAlt: 'RaidProtect icon Report', - title: 'Moderação e administração', - description: - 'Gira o seu servidor como um profissional graças às nossas várias funcionalidades de moderação e administração.', - }, - { - to: '/docs/features/tag-role', - icon: '/img/landing/iconTagWhite.svg', - iconAlt: 'RaidProtect icon Tag', - title: 'Cargo de Etiqueta', - description: - 'O Cargo de Etiqueta atribui automaticamente um cargo aos membros que adicionam a etiqueta do seu servidor.', - }, - { - to: '/docs/features/dm-lock', - icon: '/img/landing/iconDmlockWhite.svg', - iconAlt: 'RaidProtect icon DM Lock', - title: 'Bloqueio de MP', - description: - 'Um escudo único contra spam, scam e burlas por mensagem privada.', - }, -]; - -export default function Home(): ReactNode { - const [counts, setCounts] = useState(null); - - useEffect(() => { - let cancelled = false; - fetch('https://docs.raidprotect.bot/counts.json') - .then((res) => { - if (!res.ok) throw new Error('Failed to fetch counts'); - return res.json(); - }) - .then((data: Counts) => { - if (!cancelled) setCounts(data); - }) - .catch((err) => { - // Stats are best-effort; failure is non-blocking - // eslint-disable-next-line no-console - console.error('Stats update error:', err); - }); - return () => { - cancelled = true; - }; - }, []); - - return ( - -
- - - - {/* About */} -
-
-
-

- Os nossos resultados têm{' '} - impacto -

-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
-
-
-
- - {/* Features */} -
-
-
-

- As nossas{' '} - funcionalidades -

-

- Descubra o que faz de nós um dos melhores bots para proteger o - seu servidor Discord de utilizadores maliciosos. -

-
-
- -
-
- - {/* Pricing */} -
-
-
-
-

- Manter-se um passo{' '} - à frente -

-

- Adicione o RaidProtect e comece a proteger o seu servidor hoje - mesmo. -

-
- -
- {/* Basic */} -
-
Basic
-
-

Gratuito

-
-

- A segurança essencial garantida para sempre -

-
- Proteções antispam - Bloqueio automático de raids - Filtragem de bots maliciosos - Moderação e administração - - E muito mais... - -
- -
- - {/* Founder */} -
-
- Founder -
-
-

Subscrição

-

- 2,99 $ -

-
-

- Oferta de lançamento reservada aos primeiros subscritores -

-
- Perfil do bot personalizável - Nomes de sanções personalizados - Acesso avançado ao Auth Manager - Acesso alargado ao Display Public - Acesso à Beta pública - Cargo exclusivo no nosso servidor -
- -
- - {/* Business */} -
-
- Business -
-
-

Sob consulta

-
-

- Para projetos com exigências de segurança elevadas -

-
- Todas as funcionalidades Founder - Instância dedicada e isolada - Auditoria inicial do seu servidor - Integração com as suas ferramentas - Funcionalidades à medida - Acompanhamento regular com um especialista - Suporte prioritário -
- -
-
-
-
-
-
- ); -} diff --git a/i18n/pt/docusaurus-plugin-content-pages/thank-you.tsx b/i18n/pt/docusaurus-plugin-content-pages/thank-you.tsx deleted file mode 100644 index 8aa29dc..0000000 --- a/i18n/pt/docusaurus-plugin-content-pages/thank-you.tsx +++ /dev/null @@ -1,398 +0,0 @@ -import React, {type ReactNode, useEffect, useState} from 'react'; -import Head from '@docusaurus/Head'; -import Link from '@docusaurus/Link'; -import styles from '@site/src/pages/thank-you.module.css'; - -type ServerBadge = 'partner' | 'verified' | null; - -type ServerInfo = { - name: string; - members: string; - inviteUrl: string; - iconUrl: string; - badge: ServerBadge; -}; - -type PermissionWarning = { - tone: 'admin' | 'missing'; - message: string; - missing: string[]; -}; - -const DEFAULT_ICON_URL = - 'https://cdn.prod.website-files.com/677fbd67c3c9318f7fb56659/67c33922eb3265808c183c50_411d8a698dd15ddf.webp'; - -const BADGE_SRC: Record, string> = { - partner: '/img/landing/serverBadgePartner.svg', - verified: '/img/landing/serverBadgeVerified.svg', -}; - -const REQUIRED_PERMISSIONS = 1117660769534n; -const ADMIN_PERMISSION = 8n; - -// Discord-style permission names (Portuguese). -const PERMISSION_MESSAGES: Array<[string, bigint]> = [ - ['Administrador', ADMIN_PERMISSION], - ['Gerir servidor', 32n], - ['Gerir cargos', 268435456n], - ['Gerir canais', 16n], - ['Expulsar membros', 2n], - ['Banir membros', 4n], - ['Gerir alcunhas', 134217728n], - ['Gerir webhooks', 536870912n], - ['Ver registo de auditoria', 524288n], - ['Ver canais', 1024n], - ['Moderar membros', 1099511627776n], - ['Enviar mensagens', 2048n], - ['Gerir mensagens', 8192n], - ['Gerir tópicos', 17179869184n], - ['Incorporar ligações', 16384n], - ['Anexar ficheiros', 32768n], - ['Ler histórico de mensagens', 65536n], - ['Adicionar reações', 64n], - ['Usar emojis externos', 262144n], - ['Silenciar membros', 4194304n], - ['Ensurdecer membros', 8388608n], - ['Mover membros', 16777216n], -]; - -async function fetchServerInfo(guildId: string): Promise { - try { - const widgetResponse = await fetch( - `https://discord.com/api/guilds/${guildId}/widget.json`, - ); - if (!widgetResponse.ok) { - throw new Error('Widget desativado.'); - } - const widgetData = await widgetResponse.json(); - - const name: string = widgetData.name || 'Servidor desconhecido'; - const members: string = - typeof widgetData.presence_count === 'number' - ? `${widgetData.presence_count} membros online` - : 'Número de membros desconhecido'; - const inviteUrl: string = widgetData.instant_invite || '#'; - - let iconUrl = DEFAULT_ICON_URL; - let badge: ServerBadge = null; - - const inviteCode: string | null = widgetData.instant_invite - ? widgetData.instant_invite.split('/').pop() || null - : null; - - if (inviteCode) { - const inviteResponse = await fetch( - `https://discord.com/api/invites/${inviteCode}?with_counts=true&with_expiration=true`, - ); - if (inviteResponse.ok) { - const inviteData = await inviteResponse.json(); - const server = inviteData.guild; - if (server?.icon) { - iconUrl = `https://cdn.discordapp.com/icons/${server.id}/${server.icon}.png`; - } - if (Array.isArray(server?.features)) { - if (server.features.includes('PARTNERED')) { - badge = 'partner'; - } else if (server.features.includes('VERIFIED')) { - badge = 'verified'; - } - } - } - } - - return {name, members, inviteUrl, iconUrl, badge}; - } catch (error) { - // Discord widget may be disabled or network may be unreachable. - // eslint-disable-next-line no-console - console.error(error); - return null; - } -} - -function computePermissionWarning( - permissionsParam: string, -): PermissionWarning | null { - let currentPermissions: bigint; - try { - currentPermissions = BigInt(permissionsParam); - } catch { - return null; - } - - const hasAdminPermission = - (currentPermissions & ADMIN_PERMISSION) === ADMIN_PERMISSION; - const missingPermissions = PERMISSION_MESSAGES.filter( - ([, value]) => - (REQUIRED_PERMISSIONS & value) === value && - (currentPermissions & value) !== value, - ).map(([name]) => name); - - if (hasAdminPermission || missingPermissions.length === 0) { - return null; - } - - if ( - missingPermissions.length === 1 && - missingPermissions[0] === 'Administrador' - ) { - return { - tone: 'admin', - message: - '⚠️ Todas as permissões específicas estão concedidas, mas sem a permissão de Administrador o bot pode não conseguir aceder a todos os canais.', - missing: [], - }; - } - - return { - tone: 'missing', - message: - '⚠️ Para garantir o bom funcionamento do bot, recomendamos adicionar as seguintes permissões:', - missing: missingPermissions, - }; -} - -export default function ThankYou(): ReactNode { - const [serverInfo, setServerInfo] = useState(null); - const [permissionWarning, setPermissionWarning] = - useState(null); - - useEffect(() => { - if (typeof window === 'undefined') return; - - const urlParams = new URLSearchParams(window.location.search); - - const guildId = urlParams.get('guild_id'); - let cancelled = false; - if (guildId) { - fetchServerInfo(guildId).then((info) => { - if (!cancelled && info) { - setServerInfo(info); - } - }); - } - - const permissionsParam = urlParams.get('permissions'); - if (permissionsParam) { - setPermissionWarning(computePermissionWarning(permissionsParam)); - } - - // Auto-redirect to Discord invite after 60s, matching the Webflow page. - const redirectTimer = window.setTimeout(() => { - window.location.href = 'https://discord.com/invite/HfMYDHbgqc'; - }, 60000); - - return () => { - cancelled = true; - window.clearTimeout(redirectTimer); - }; - }, []); - - return ( - <> - - Obrigado | RaidProtect - - -
-
- - RaidProtect title logo - - -

Obrigado por convidar o RaidProtect!

- - {serverInfo && ( - - )} - - {permissionWarning && ( -
- {permissionWarning.message} - {permissionWarning.missing.length > 0 && ( -
    - {permissionWarning.missing.map((perm) => ( -
  • - {perm} -
  • - ))} -
- )} -
- )} - -

- Para começar com o pé direito, recomendamos consultar a nossa - documentação e entrar no nosso servidor. -

- -
- - Entrar no nosso servidor Discord - - - Consultar a documentação - -
- - -
- -
- - ); -} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 69d2115..1bab475 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -2,6 +2,7 @@ import React, {type ReactNode, useEffect, useState} from 'react'; import clsx from 'clsx'; import Layout from '@theme/Layout'; import Link from '@docusaurus/Link'; +import Translate, {translate} from '@docusaurus/Translate'; import Hero from '@site/src/components/landing/Hero'; import Servers from '@site/src/components/landing/Servers'; import shared from '@site/src/components/landing/styles/shared.module.css'; @@ -74,60 +75,67 @@ function FeatureItem({children}: {children: ReactNode}) { } type Feature = { + slug: string; to: string; icon: string; iconAlt: string; - title: string; - description: string; + defaultTitle: string; + defaultDescription: string; }; const FEATURES: Feature[] = [ { + slug: 'anti-spam', to: '/docs/features/anti-spam', icon: '/img/landing/iconAntispamWhite.svg', iconAlt: 'RaidProtect icon Antispam', - title: 'Protection anti-spam', - description: + defaultTitle: 'Protection anti-spam', + defaultDescription: 'Sanctionnez instantanément les tentatives de spam, sans aucune intervention de votre part.', }, { + slug: 'raid', to: '/docs/features/raid-mode', icon: '/img/landing/iconAntiraidWhite.svg', iconAlt: 'RaidProtect icon Antiraid', - title: 'Blocage des raids', - description: + defaultTitle: 'Blocage des raids', + defaultDescription: "Vous craignez un raid ? Notre bot est capable de le détecter et de le bloquer avant même qu'il impacte votre serveur.", }, { + slug: 'captcha', to: '/docs/features/captcha', icon: '/img/landing/iconCaptchaWhite.svg', iconAlt: 'RaidProtect icon Captcha', - title: 'Protection contre les robots', - description: + defaultTitle: 'Protection contre les robots', + defaultDescription: "Grâce au captcha, vos membres doivent prouver qu'ils sont humains. Dites adieu aux comptes automatisés.", }, { + slug: 'mod', to: '/docs/features/utilities', icon: '/img/landing/iconReportWhite.svg', iconAlt: 'RaidProtect icon Report', - title: 'Modération & administration', - description: + defaultTitle: 'Modération & administration', + defaultDescription: "Gérez votre serveur comme un pro avec nos diverses fonctionalités de modération et d'administration.", }, { + slug: 'tag', to: '/docs/features/tag-role', icon: '/img/landing/iconTagWhite.svg', iconAlt: 'RaidProtect icon Tag', - title: 'Rôle de Tag', - description: + defaultTitle: 'Rôle de Tag', + defaultDescription: 'Le Rôle de Tag permet d’attribuer automatiquement un rôle aux membres qui ajoutent le tag de votre serveur.', }, { + slug: 'dm', to: '/docs/features/dm-lock', icon: '/img/landing/iconDmlockWhite.svg', iconAlt: 'RaidProtect icon DM Lock', - title: 'Fermeture des MP', - description: + defaultTitle: 'Fermeture des MP', + defaultDescription: 'Un bouclier inédit contre le spam, le scam et les arnaques par message privé.', }, ]; @@ -155,10 +163,25 @@ export default function Home(): ReactNode { }; }, []); + const layoutTitle = translate({ + id: 'landing.layout.title', + message: 'RaidProtect • Sécurisez votre serveur Discord', + description: 'Browser tab title for the landing page', + }); + const layoutDescription = translate({ + id: 'landing.layout.description', + message: + 'RaidProtect est un bot Discord français ayant pour mission de protéger simplement votre serveur des utilisateurs malintentionnés.', + description: 'Meta description for the landing page', + }); + const aboutCurveAriaLabel = translate({ + id: 'landing.about.curve.ariaLabel', + message: 'Croissance du nombre de serveurs', + description: 'ARIA label for the decorative SVG curve in the about section', + }); + return ( - +
@@ -173,8 +196,22 @@ export default function Home(): ReactNode {

- Nos résultats ont un{' '} - impact + + + impact + + + ), + }}> + {'Nos résultats ont un {highlight}'} +

@@ -183,7 +220,7 @@ export default function Home(): ReactNode { className={styles.curve} viewBox="0 0 900 280" role="img" - aria-label="Croissance du nombre de serveurs"> + aria-label={aboutCurveAriaLabel}> @@ -241,22 +278,38 @@ export default function Home(): ReactNode {
@@ -275,38 +328,69 @@ export default function Home(): ReactNode {

- Nos fonctionnalités + + + fonctionnalités + + + ), + }}> + {'Nos {highlight}'} +

- Découvrez ce qui fait de nous l'un des meilleurs bots pour protéger - votre serveur Discord des utilisateurs malintentionnés. + + Découvrez ce qui fait de nous l'un des meilleurs bots pour + protéger votre serveur Discord des utilisateurs malintentionnés. +

@@ -319,12 +403,30 @@ export default function Home(): ReactNode {

- Garder une longueur{' '} - d'avance + + + d'avance + + + ), + }}> + {'Garder une longueur {highlight}'} +

- Ajoutez RaidProtect et commencez à protéger votre serveur dès - aujourd'hui. + + Ajoutez RaidProtect et commencez à protéger votre serveur dès + aujourd'hui. +