feat: add imprint page (draft, 7 languages), add missing translations to legal pages, reorder footer links

This commit is contained in:
2026-02-09 17:14:59 +01:00
parent de5ac8022b
commit 54a79a4c69
16 changed files with 941 additions and 14 deletions

View File

@@ -249,6 +249,11 @@ und `twitter:title/description` dynamisch bei jedem Sprachwechsel (i18n-Keys `me
- [ ] PHP: `config.php``REQUIRE_INVITE_CODE = true`
- [ ] Frontend: Invite-Code-Feld in `auth-modal.js` einbauen
- [x] Frontend: Meta-Description i18n-Keys in alle 7 Sprachen
- [x] Frontend: Impressum-Seite (Entwurf, alle 7 Sprachen, Platzhalter für Adressdaten)
- [x] Frontend: Datenschutz, AGB, Über uns — alle 7 Sprachen
- [ ] Rechtliches: Impressum-Platzhalter ausfüllen (Name, Adresse, UID)
- [ ] Rechtliches: AGB + Datenschutz durch Fachperson prüfen lassen
- [ ] Rechtliches: Gewerbeanmeldung / Einzelunternehmen
- [ ] 1020 Invite-Codes in Directus erstellen
- [ ] Codes verteilen (r/Monero, Matrix, persönlich)
- [ ] Feedback-Kanal einrichten (Matrix-Raum)

View File

@@ -160,9 +160,10 @@
<span class="xmr-rate" title="CoinGecko">1 XMR ≈ ...</span>
<nav class="footer-links">
<a href="#/about" data-i18n="footer.about">Über uns</a>
<a href="#/contact" data-i18n="footer.contact">Kontakt</a>
<a href="#/imprint" data-i18n="footer.imprint">Impressum</a>
<a href="#/privacy" data-i18n="footer.privacy">Datenschutz</a>
<a href="#/terms" data-i18n="footer.terms">AGB</a>
<a href="#/contact" data-i18n="footer.contact">Kontakt</a>
</nav>
</div>
</app-footer>

View File

@@ -60,9 +60,10 @@ class AppFooter extends HTMLElement {
<span class="xmr-rate" title="CoinGecko">1 XMR ≈ ...</span>
<nav class="footer-links">
<a href="#/about" data-i18n="footer.about">${t('footer.about')}</a>
<a href="#/contact" data-i18n="footer.contact">${t('footer.contact')}</a>
<a href="#/imprint" data-i18n="footer.imprint">${t('footer.imprint')}</a>
<a href="#/privacy" data-i18n="footer.privacy">${t('footer.privacy')}</a>
<a href="#/terms" data-i18n="footer.terms">${t('footer.terms')}</a>
<a href="#/contact" data-i18n="footer.contact">${t('footer.contact')}</a>
</nav>
</div>
`

View File

@@ -55,6 +55,7 @@ class AppShell extends HTMLElement {
.register('/terms', 'page-terms', lazy('./pages/page-terms.js'))
.register('/about', 'page-about', lazy('./pages/page-about.js'))
.register('/contact', 'page-contact', lazy('./pages/page-contact.js'))
.register('/imprint', 'page-imprint', lazy('./pages/page-imprint.js'))
router.handleRouteChange()
}

View File

@@ -55,6 +55,62 @@ class PageAbout extends HTMLElement {
<li>Open source & auto-hébergé</li>
<li>Exploité depuis la Suisse</li>
</ul>
`,
it: /* html */`
<h1>Informazioni su dgray.io</h1>
<p>dgray.io è una piattaforma di annunci incentrata sulla privacy. Gli utenti possono creare annunci e comunicare tramite messaggi crittografati end-to-end — senza rivelare dati personali.</p>
<p>I pagamenti avvengono esclusivamente in Monero (XMR). Nessun KYC, nessuna email, nessun tracking.</p>
<h2>Principi</h2>
<ul>
<li>Nessun dato personale richiesto</li>
<li>Comunicazione crittografata end-to-end</li>
<li>Monero (XMR) come unico metodo di pagamento</li>
<li>Open source e self-hosted</li>
<li>Gestito dalla Svizzera</li>
</ul>
`,
es: /* html */`
<h1>Acerca de dgray.io</h1>
<p>dgray.io es una plataforma de clasificados centrada en la privacidad. Los usuarios pueden crear anuncios y comunicarse mediante mensajes cifrados de extremo a extremo — sin revelar datos personales.</p>
<p>Los pagos se realizan exclusivamente en Monero (XMR). Sin KYC, sin email, sin rastreo.</p>
<h2>Principios</h2>
<ul>
<li>No se requieren datos personales</li>
<li>Comunicación cifrada de extremo a extremo</li>
<li>Monero (XMR) como único método de pago</li>
<li>Código abierto y autoalojado</li>
<li>Operado desde Suiza</li>
</ul>
`,
pt: /* html */`
<h1>Sobre o dgray.io</h1>
<p>dgray.io é uma plataforma de classificados focada em privacidade. Os usuários podem criar anúncios e se comunicar por mensagens criptografadas de ponta a ponta — sem revelar dados pessoais.</p>
<p>Os pagamentos são feitos exclusivamente em Monero (XMR). Sem KYC, sem email, sem rastreamento.</p>
<h2>Princípios</h2>
<ul>
<li>Nenhum dado pessoal necessário</li>
<li>Comunicação criptografada de ponta a ponta</li>
<li>Monero (XMR) como único método de pagamento</li>
<li>Código aberto e auto-hospedado</li>
<li>Operado a partir da Suíça</li>
</ul>
`,
ru: /* html */`
<h1>О dgray.io</h1>
<p>dgray.io — это платформа объявлений с приоритетом конфиденциальности. Пользователи могут создавать объявления и общаться через сквозное шифрование — без раскрытия личных данных.</p>
<p>Оплата осуществляется исключительно в Monero (XMR). Без KYC, без email, без отслеживания.</p>
<h2>Принципы</h2>
<ul>
<li>Не требуются личные данные</li>
<li>Сквозное шифрование коммуникаций</li>
<li>Monero (XMR) как единственный способ оплаты</li>
<li>Открытый исходный код, собственный хостинг</li>
<li>Управляется из Швейцарии</li>
</ul>
`
}
return content[lang] || content.de
@@ -62,7 +118,7 @@ class PageAbout extends HTMLElement {
render() {
const lang = getCurrentLanguage()
const backLabel = { de: 'Zurück zur Startseite', en: 'Back to Home', fr: 'Retour à l\'accueil' }
const backLabel = { de: 'Zurück zur Startseite', en: 'Back to Home', fr: 'Retour à l\'accueil', it: 'Torna alla home', es: 'Volver al inicio', pt: 'Voltar ao Início', ru: 'На главную' }
this.innerHTML = /* html */`
<div class="legal-page">
<a href="#/" class="back-link">← ${backLabel[lang] || backLabel.en}</a>

View File

@@ -0,0 +1,351 @@
import { getCurrentLanguage, i18n } from '../../i18n.js'
class PageImprint extends HTMLElement {
connectedCallback() {
this._unsubs = []
this.render()
this._unsubs.push(i18n.subscribe(() => this.render()))
}
disconnectedCallback() {
this._unsubs.forEach(fn => fn())
this._unsubs = []
}
getContent(lang) {
const content = {
de: /* html */`
<h1>Impressum</h1>
<div class="legal-draft-notice">ENTWURF — Bitte durch eine Fachperson prüfen lassen.</div>
<p class="legal-meta">dgray.io — Anonymer Marktplatz | Stand: Februar 2026</p>
<h2>1. Angaben gemäss Schweizer Recht</h2>
<p>Verantwortlich für diese Website:</p>
<address class="legal-address">
[Name des Betreibers]<br>
[Strasse Nr.]<br>
[PLZ Ort], [Kanton]<br>
Schweiz
</address>
<p>E-Mail: [E-Mail oder Kontaktformular]<br>
UID: [UID-Nummer falls vorhanden]</p>
<h2>2. Vertretungsberechtigte Person</h2>
<p>[Name des Betreibers]</p>
<h2>3. Haftungsausschluss</h2>
<p>Die Inhalte dieser Website werden mit grösstmöglicher Sorgfalt erstellt. Der Betreiber übernimmt jedoch keine Gewähr für die Richtigkeit, Vollständigkeit und Aktualität der bereitgestellten Inhalte.</p>
<p>Die Nutzung der Inhalte erfolgt auf eigene Gefahr. Haftungsansprüche gegen den Betreiber, die sich auf Schäden materieller oder ideeller Art beziehen, sind grundsätzlich ausgeschlossen, sofern kein nachweislich vorsätzliches oder grob fahrlässiges Verschulden vorliegt.</p>
<h2>4. Haftung für Links</h2>
<p>Diese Website enthält Links zu externen Websites Dritter. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter verantwortlich. Bei Bekanntwerden von Rechtsverletzungen werden solche Links umgehend entfernt.</p>
<h2>5. Urheberrecht</h2>
<p>Die durch den Betreiber erstellten Inhalte und Werke auf dieser Website unterliegen dem Schweizer Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung ausserhalb der Grenzen des Urheberrechts bedürfen der schriftlichen Zustimmung des Betreibers.</p>
<h2>6. Anwendbares Recht</h2>
<p>Es gilt ausschliesslich Schweizer Recht. Gerichtsstand ist der Sitz des Betreibers.</p>
`,
en: /* html */`
<h1>Legal Notice</h1>
<div class="legal-draft-notice">DRAFT — Please have this reviewed by a legal professional.</div>
<p class="legal-meta">dgray.io — Anonymous Marketplace | Last updated: February 2026</p>
<h2>1. Information according to Swiss law</h2>
<p>Responsible for this website:</p>
<address class="legal-address">
[Operator Name]<br>
[Street No.]<br>
[ZIP City], [Canton]<br>
Switzerland
</address>
<p>Email: [Email or contact form]<br>
UID: [UID number if applicable]</p>
<h2>2. Authorized representative</h2>
<p>[Operator Name]</p>
<h2>3. Disclaimer</h2>
<p>The contents of this website are created with the utmost care. However, the operator assumes no liability for the accuracy, completeness, or timeliness of the content provided.</p>
<p>Use of the content is at your own risk. Liability claims against the operator relating to material or immaterial damages are excluded unless there is proven intentional or grossly negligent fault.</p>
<h2>4. Liability for links</h2>
<p>This website contains links to external third-party websites. The respective provider is always responsible for the content of linked pages. If any legal violations become known, such links will be removed immediately.</p>
<h2>5. Copyright</h2>
<p>The content and works created by the operator on this website are subject to Swiss copyright law. Reproduction, editing, distribution, and any kind of use beyond the limits of copyright law require written consent of the operator.</p>
<h2>6. Governing law</h2>
<p>Swiss law applies exclusively. Place of jurisdiction is the operator's domicile.</p>
`,
fr: /* html */`
<h1>Mentions légales</h1>
<div class="legal-draft-notice">ÉBAUCHE — Veuillez faire vérifier ce document par un professionnel du droit.</div>
<p class="legal-meta">dgray.io — Marché anonyme | Mise à jour : février 2026</p>
<h2>1. Informations selon le droit suisse</h2>
<p>Responsable de ce site web :</p>
<address class="legal-address">
[Nom de l'exploitant]<br>
[Rue N°]<br>
[NPA Ville], [Canton]<br>
Suisse
</address>
<p>E-mail : [E-mail ou formulaire de contact]<br>
IDE : [Numéro IDE le cas échéant]</p>
<h2>2. Personne autorisée à représenter</h2>
<p>[Nom de l'exploitant]</p>
<h2>3. Clause de non-responsabilité</h2>
<p>Le contenu de ce site web est élaboré avec le plus grand soin. L'exploitant décline toutefois toute responsabilité quant à l'exactitude, l'exhaustivité et l'actualité des contenus fournis.</p>
<p>L'utilisation des contenus se fait aux risques de l'utilisateur. Toute réclamation en responsabilité contre l'exploitant est exclue, sauf en cas de faute intentionnelle ou de négligence grave avérée.</p>
<h2>4. Responsabilité pour les liens</h2>
<p>Ce site contient des liens vers des sites web tiers. Le fournisseur respectif est toujours responsable du contenu des pages liées. En cas de connaissance de violations légales, ces liens seront immédiatement supprimés.</p>
<h2>5. Droits d'auteur</h2>
<p>Les contenus et œuvres créés par l'exploitant sur ce site sont soumis au droit d'auteur suisse. La reproduction, le traitement, la distribution et toute forme d'utilisation au-delà des limites du droit d'auteur nécessitent le consentement écrit de l'exploitant.</p>
<h2>6. Droit applicable</h2>
<p>Le droit suisse s'applique exclusivement. Le for juridique est le domicile de l'exploitant.</p>
`,
it: /* html */`
<h1>Avviso legale</h1>
<div class="legal-draft-notice">BOZZA — Si prega di far verificare questo documento da un professionista legale.</div>
<p class="legal-meta">dgray.io — Mercato anonimo | Aggiornamento: febbraio 2026</p>
<h2>1. Informazioni secondo il diritto svizzero</h2>
<p>Responsabile di questo sito web:</p>
<address class="legal-address">
[Nome dell'operatore]<br>
[Via N.]<br>
[CAP Città], [Cantone]<br>
Svizzera
</address>
<p>E-mail: [E-mail o modulo di contatto]<br>
IDI: [Numero IDI se disponibile]</p>
<h2>2. Persona autorizzata a rappresentare</h2>
<p>[Nome dell'operatore]</p>
<h2>3. Esclusione di responsabilità</h2>
<p>I contenuti di questo sito web sono creati con la massima cura. L'operatore non si assume tuttavia alcuna responsabilità per la correttezza, completezza e attualità dei contenuti forniti.</p>
<p>L'utilizzo dei contenuti avviene a proprio rischio. Reclami di responsabilità contro l'operatore sono esclusi, salvo colpa intenzionale o grave negligenza dimostrata.</p>
<h2>4. Responsabilità per i link</h2>
<p>Questo sito web contiene link a siti web di terze parti. Il rispettivo fornitore è sempre responsabile del contenuto delle pagine collegate. In caso di violazioni legali note, tali link verranno immediatamente rimossi.</p>
<h2>5. Diritto d'autore</h2>
<p>I contenuti e le opere create dall'operatore su questo sito web sono soggetti al diritto d'autore svizzero. La riproduzione, l'elaborazione, la distribuzione e qualsiasi tipo di utilizzo al di fuori dei limiti del diritto d'autore richiedono il consenso scritto dell'operatore.</p>
<h2>6. Diritto applicabile</h2>
<p>Si applica esclusivamente il diritto svizzero. Il foro competente è il domicilio dell'operatore.</p>
`,
es: /* html */`
<h1>Aviso legal</h1>
<div class="legal-draft-notice">BORRADOR — Por favor, haga revisar este documento por un profesional legal.</div>
<p class="legal-meta">dgray.io — Mercado anónimo | Actualización: febrero 2026</p>
<h2>1. Información según la legislación suiza</h2>
<p>Responsable de este sitio web:</p>
<address class="legal-address">
[Nombre del operador]<br>
[Calle N.°]<br>
[CP Ciudad], [Cantón]<br>
Suiza
</address>
<p>Correo electrónico: [Correo electrónico o formulario de contacto]<br>
IDE: [Número IDE si corresponde]</p>
<h2>2. Persona autorizada para representar</h2>
<p>[Nombre del operador]</p>
<h2>3. Descargo de responsabilidad</h2>
<p>El contenido de este sitio web se elabora con el mayor cuidado. Sin embargo, el operador no asume responsabilidad por la exactitud, integridad o actualidad del contenido proporcionado.</p>
<p>El uso del contenido es bajo su propio riesgo. Las reclamaciones de responsabilidad contra el operador están excluidas, salvo culpa intencional o negligencia grave demostrada.</p>
<h2>4. Responsabilidad por enlaces</h2>
<p>Este sitio web contiene enlaces a sitios web de terceros. El proveedor respectivo es siempre responsable del contenido de las páginas enlazadas. Si se detectan infracciones legales, dichos enlaces serán eliminados de inmediato.</p>
<h2>5. Derechos de autor</h2>
<p>Los contenidos y obras creados por el operador en este sitio web están sujetos a la legislación suiza sobre derechos de autor. La reproducción, edición, distribución y cualquier tipo de uso fuera de los límites de los derechos de autor requieren el consentimiento por escrito del operador.</p>
<h2>6. Legislación aplicable</h2>
<p>Se aplica exclusivamente la legislación suiza. El fuero es el domicilio del operador.</p>
`,
pt: /* html */`
<h1>Aviso legal</h1>
<div class="legal-draft-notice">RASCUNHO — Por favor, solicite a revisão deste documento por um profissional jurídico.</div>
<p class="legal-meta">dgray.io — Mercado anônimo | Atualização: fevereiro 2026</p>
<h2>1. Informações conforme a legislação suíça</h2>
<p>Responsável por este site:</p>
<address class="legal-address">
[Nome do operador]<br>
[Rua N.º]<br>
[CEP Cidade], [Cantão]<br>
Suíça
</address>
<p>E-mail: [E-mail ou formulário de contato]<br>
IDE: [Número IDE se aplicável]</p>
<h2>2. Pessoa autorizada a representar</h2>
<p>[Nome do operador]</p>
<h2>3. Isenção de responsabilidade</h2>
<p>O conteúdo deste site é elaborado com o maior cuidado. No entanto, o operador não assume responsabilidade pela exatidão, integridade ou atualidade do conteúdo fornecido.</p>
<p>O uso do conteúdo é por sua conta e risco. Reivindicações de responsabilidade contra o operador estão excluídas, salvo culpa intencional ou negligência grave comprovada.</p>
<h2>4. Responsabilidade por links</h2>
<p>Este site contém links para sites de terceiros. O respectivo provedor é sempre responsável pelo conteúdo das páginas vinculadas. Se forem detectadas violações legais, tais links serão removidos imediatamente.</p>
<h2>5. Direitos autorais</h2>
<p>Os conteúdos e obras criados pelo operador neste site estão sujeitos à legislação suíça de direitos autorais. A reprodução, edição, distribuição e qualquer tipo de uso além dos limites dos direitos autorais requerem o consentimento por escrito do operador.</p>
<h2>6. Legislação aplicável</h2>
<p>Aplica-se exclusivamente a legislação suíça. O foro competente é o domicílio do operador.</p>
`,
ru: /* html */`
<h1>Правовая информация</h1>
<div class="legal-draft-notice">ЧЕРНОВИК — Пожалуйста, передайте этот документ на проверку юристу.</div>
<p class="legal-meta">dgray.io — Анонимный маркетплейс | Обновлено: февраль 2026</p>
<h2>1. Сведения согласно швейцарскому праву</h2>
<p>Ответственный за данный сайт:</p>
<address class="legal-address">
[Имя оператора]<br>
[Улица, дом]<br>
[Индекс Город], [Кантон]<br>
Швейцария
</address>
<p>E-mail: [E-mail или контактная форма]<br>
UID: [UID-номер при наличии]</p>
<h2>2. Уполномоченное лицо</h2>
<p>[Имя оператора]</p>
<h2>3. Отказ от ответственности</h2>
<p>Содержание данного сайта создаётся с максимальной тщательностью. Однако оператор не несёт ответственности за точность, полноту и актуальность предоставленного содержания.</p>
<p>Использование содержания осуществляется на собственный риск. Претензии к оператору по возмещению материального или нематериального ущерба исключаются, за исключением доказанного умысла или грубой небрежности.</p>
<h2>4. Ответственность за ссылки</h2>
<p>Данный сайт содержит ссылки на внешние сайты третьих лиц. За содержание связанных страниц всегда несёт ответственность соответствующий провайдер. При обнаружении нарушений такие ссылки будут незамедлительно удалены.</p>
<h2>5. Авторское право</h2>
<p>Содержание и произведения, созданные оператором на данном сайте, подлежат швейцарскому авторскому праву. Воспроизведение, обработка, распространение и любое использование за пределами авторского права требуют письменного согласия оператора.</p>
<h2>6. Применимое право</h2>
<p>Применяется исключительно швейцарское право. Место юрисдикции — местонахождение оператора.</p>
`
}
return content[lang] || content.de
}
render() {
const lang = getCurrentLanguage()
const backLabel = { de: 'Zurück zur Startseite', en: 'Back to Home', fr: 'Retour à l\'accueil', it: 'Torna alla home', es: 'Volver al inicio', pt: 'Voltar ao Início', ru: 'На главную' }
this.innerHTML = /* html */`
<div class="legal-page">
<a href="#/" class="back-link">← ${backLabel[lang] || backLabel.en}</a>
<div class="legal-content">
${this.getContent(lang)}
</div>
</div>
`
}
}
customElements.define('page-imprint', PageImprint)
const style = document.createElement('style')
style.textContent = /* css */`
page-imprint .legal-page {
padding: var(--space-lg) 0;
max-width: 800px;
margin: 0 auto;
}
page-imprint .back-link {
display: inline-block;
color: var(--color-text-muted);
text-decoration: none;
font-size: var(--font-size-sm);
margin-bottom: var(--space-lg);
transition: color 0.2s;
}
page-imprint .back-link:hover {
color: var(--color-text);
}
page-imprint .legal-content h1 {
font-size: var(--font-size-2xl);
margin: 0 0 var(--space-xs);
}
page-imprint .legal-content h2 {
font-size: var(--font-size-lg);
margin: var(--space-xl) 0 var(--space-sm);
padding-top: var(--space-md);
border-top: 1px solid var(--color-border);
}
page-imprint .legal-content h2:first-of-type {
border-top: none;
}
page-imprint .legal-content p {
line-height: 1.7;
margin: 0 0 var(--space-sm);
color: var(--color-text-secondary);
}
page-imprint .legal-content ul {
margin: 0 0 var(--space-sm);
padding-left: var(--space-lg);
color: var(--color-text-secondary);
}
page-imprint .legal-content ul li {
line-height: 1.7;
margin-bottom: var(--space-xs);
}
page-imprint .legal-meta {
color: var(--color-text-muted);
font-size: var(--font-size-sm);
}
page-imprint .legal-draft-notice {
background: var(--color-bg-secondary);
border: 1px solid var(--color-border);
border-radius: var(--radius-md);
padding: var(--space-sm) var(--space-md);
font-size: var(--font-size-sm);
color: var(--color-text-muted);
margin-bottom: var(--space-lg);
}
page-imprint .legal-address {
font-style: normal;
line-height: 1.8;
margin: var(--space-sm) 0;
color: var(--color-text-secondary);
}
@media (max-width: 768px) {
page-imprint .legal-page {
padding: var(--space-md) 0;
}
page-imprint .legal-content h1 {
font-size: var(--font-size-xl);
}
page-imprint .legal-content h2 {
font-size: var(--font-size-base);
}
}
`
document.head.appendChild(style)

View File

@@ -166,6 +166,210 @@ class PagePrivacy extends HTMLElement {
<p>L'exploitant peut adapter cette politique de confidentialité à tout moment.</p>
<p class="legal-meta">Dernière mise à jour : février 2026</p>
`,
it: /* html */`
<h1>Informativa sulla privacy</h1>
<p class="legal-meta">dgray.io — Mercato anonimo | Aggiornamento: febbraio 2026</p>
<h2>1. Titolare del trattamento</h2>
<p>Il titolare del trattamento dei dati è il gestore della piattaforma dgray.io con sede in Svizzera.</p>
<h2>2. Principio</h2>
<p>La piattaforma è stata progettata secondo il principio della minimizzazione dei dati.</p>
<h2>3. Quali dati vengono raccolti?</h2>
<p><strong>3.1 Dati che NON raccogliamo:</strong> Nessun indirizzo e-mail, nessun nome, nessun numero di telefono, nessun dato di localizzazione degli utenti, nessun dato di pagamento.</p>
<p><strong>3.2 Registrazione:</strong> Un hash crittografico (SHA-256) dell'UUID viene memorizzato come identificativo utente. L'UUID stesso non viene memorizzato.</p>
<p><strong>3.3 Utilizzo:</strong> Annunci (titolo, descrizione, prezzo, categoria, località, immagini), Messaggi (crittografati end-to-end, solo il testo cifrato viene memorizzato), Preferiti (memorizzati localmente nel browser).</p>
<p><strong>3.4 Dati tecnici:</strong> I log del server possono contenere temporaneamente indirizzi IP e orari di accesso.</p>
<h2>4. Cookie e archiviazione locale</h2>
<p><strong>4.1</strong> Nessun cookie per tracciamento o analisi.</p>
<p><strong>4.2</strong> localStorage: Impostazione lingua, tema, valuta, token di autenticazione, preferiti, cache delle categorie.</p>
<p><strong>4.3</strong> Questi dati non lasciano il browser.</p>
<h2>5. Servizi di terze parti</h2>
<p><strong>5.1 Directus (Backend):</strong> Self-hosted, nessun trasferimento di dati a terzi.</p>
<p><strong>5.2 BTCPay Server (Pagamenti):</strong> Nessun dato personale trasferito.</p>
<p><strong>5.3 CoinGecko API (Tassi di cambio):</strong> Nessun dato personale trasferito.</p>
<h2>6. Crittografia</h2>
<p><strong>6.1</strong> La comunicazione è crittografata end-to-end (NaCl/TweetNaCl).</p>
<p><strong>6.2</strong> Le chiavi vengono generate e memorizzate nel browser.</p>
<p><strong>6.3</strong> Il server memorizza solo testo cifrato.</p>
<h2>7. Condivisione dei dati</h2>
<p><strong>7.1</strong> Nessun dato condiviso con terzi a fini pubblicitari o di marketing.</p>
<p><strong>7.2</strong> Divulgazione solo su obbligo legale da parte delle autorità svizzere.</p>
<h2>8. Diritti degli utenti</h2>
<p><strong>8.1</strong> Diritto di informazione sui dati memorizzati.</p>
<p><strong>8.2</strong> Cancellazione tramite eliminazione dell'account.</p>
<p><strong>8.3</strong> Portabilità dei dati su richiesta.</p>
<h2>9. Periodo di conservazione</h2>
<p>Annunci: 30 giorni, Messaggi: fino alla cancellazione, Log del server: max. 7 giorni.</p>
<h2>10. Diritto applicabile</h2>
<p>Legge federale svizzera sulla protezione dei dati (LPD).</p>
<h2>11. Modifiche</h2>
<p>Il gestore può modificare la presente informativa sulla privacy in qualsiasi momento.</p>
<p class="legal-meta">Ultimo aggiornamento: febbraio 2026</p>
`,
es: /* html */`
<h1>Política de Privacidad</h1>
<p class="legal-meta">dgray.io — Mercado anónimo | Actualización: febrero 2026</p>
<h2>1. Responsable del tratamiento</h2>
<p>El responsable del tratamiento de datos es el operador de la plataforma dgray.io con sede en Suiza.</p>
<h2>2. Principio</h2>
<p>La plataforma fue diseñada según el principio de minimización de datos.</p>
<h2>3. ¿Qué datos se recopilan?</h2>
<p><strong>3.1 Datos que NO recopilamos:</strong> Sin direcciones de correo electrónico, sin nombres, sin números de teléfono, sin datos de ubicación de los usuarios, sin datos de pago.</p>
<p><strong>3.2 Registro:</strong> Un hash criptográfico (SHA-256) del UUID se almacena como identificador de usuario. El UUID en sí no se almacena.</p>
<p><strong>3.3 Uso:</strong> Anuncios (título, descripción, precio, categoría, ubicación, imágenes), Mensajes (cifrados de extremo a extremo, solo se almacena el texto cifrado), Favoritos (almacenados localmente en el navegador).</p>
<p><strong>3.4 Datos técnicos:</strong> Los registros del servidor pueden contener temporalmente direcciones IP y horarios de acceso.</p>
<h2>4. Cookies y almacenamiento local</h2>
<p><strong>4.1</strong> Sin cookies para seguimiento o análisis.</p>
<p><strong>4.2</strong> localStorage: Idioma, tema, moneda, token de autenticación, favoritos, caché de categorías.</p>
<p><strong>4.3</strong> Estos datos no salen del navegador.</p>
<h2>5. Servicios de terceros</h2>
<p><strong>5.1 Directus (Backend):</strong> Autoalojado, sin transferencia de datos a terceros.</p>
<p><strong>5.2 BTCPay Server (Pagos):</strong> Sin datos personales transferidos.</p>
<p><strong>5.3 CoinGecko API (Tipos de cambio):</strong> Sin datos personales transferidos.</p>
<h2>6. Cifrado</h2>
<p><strong>6.1</strong> La comunicación está cifrada de extremo a extremo (NaCl/TweetNaCl).</p>
<p><strong>6.2</strong> Las claves se generan y almacenan en el navegador.</p>
<p><strong>6.3</strong> El servidor solo almacena texto cifrado.</p>
<h2>7. Compartición de datos</h2>
<p><strong>7.1</strong> Sin datos compartidos con terceros con fines publicitarios o de marketing.</p>
<p><strong>7.2</strong> Divulgación solo por obligación legal de las autoridades suizas.</p>
<h2>8. Derechos de los usuarios</h2>
<p><strong>8.1</strong> Derecho a información sobre los datos almacenados.</p>
<p><strong>8.2</strong> Eliminación mediante la supresión de la cuenta.</p>
<p><strong>8.3</strong> Portabilidad de datos bajo solicitud.</p>
<h2>9. Período de conservación</h2>
<p>Anuncios: 30 días, Mensajes: hasta su eliminación, Registros del servidor: máx. 7 días.</p>
<h2>10. Derecho aplicable</h2>
<p>Ley Federal Suiza de Protección de Datos (LPD).</p>
<h2>11. Modificaciones</h2>
<p>El operador puede modificar esta política de privacidad en cualquier momento.</p>
<p class="legal-meta">Última actualización: febrero 2026</p>
`,
pt: /* html */`
<h1>Política de Privacidade</h1>
<p class="legal-meta">dgray.io — Mercado anônimo | Atualização: fevereiro 2026</p>
<h2>1. Responsável pelo tratamento</h2>
<p>O responsável pelo tratamento de dados é o operador da plataforma dgray.io com sede na Suíça.</p>
<h2>2. Princípio</h2>
<p>A plataforma foi projetada segundo o princípio da minimização de dados.</p>
<h2>3. Quais dados são coletados?</h2>
<p><strong>3.1 Dados que NÃO coletamos:</strong> Sem endereços de e-mail, sem nomes, sem números de telefone, sem dados de localização dos usuários, sem dados de pagamento.</p>
<p><strong>3.2 Registro:</strong> Um hash criptográfico (SHA-256) do UUID é armazenado como identificador do usuário. O UUID em si não é armazenado.</p>
<p><strong>3.3 Uso:</strong> Anúncios (título, descrição, preço, categoria, localização, imagens), Mensagens (criptografadas de ponta a ponta, apenas o texto cifrado é armazenado), Favoritos (armazenados localmente no navegador).</p>
<p><strong>3.4 Dados técnicos:</strong> Os logs do servidor podem conter temporariamente endereços IP e horários de acesso.</p>
<h2>4. Cookies e armazenamento local</h2>
<p><strong>4.1</strong> Sem cookies para rastreamento ou análise.</p>
<p><strong>4.2</strong> localStorage: Idioma, tema, moeda, token de autenticação, favoritos, cache de categorias.</p>
<p><strong>4.3</strong> Estes dados não saem do navegador.</p>
<h2>5. Serviços de terceiros</h2>
<p><strong>5.1 Directus (Backend):</strong> Auto-hospedado, sem transferência de dados a terceiros.</p>
<p><strong>5.2 BTCPay Server (Pagamentos):</strong> Sem dados pessoais transferidos.</p>
<p><strong>5.3 CoinGecko API (Taxas de câmbio):</strong> Sem dados pessoais transferidos.</p>
<h2>6. Criptografia</h2>
<p><strong>6.1</strong> A comunicação é criptografada de ponta a ponta (NaCl/TweetNaCl).</p>
<p><strong>6.2</strong> As chaves são geradas e armazenadas no navegador.</p>
<p><strong>6.3</strong> O servidor armazena apenas texto cifrado.</p>
<h2>7. Compartilhamento de dados</h2>
<p><strong>7.1</strong> Sem dados compartilhados com terceiros para fins publicitários ou de marketing.</p>
<p><strong>7.2</strong> Divulgação apenas por obrigação legal das autoridades suíças.</p>
<h2>8. Direitos dos usuários</h2>
<p><strong>8.1</strong> Direito à informação sobre os dados armazenados.</p>
<p><strong>8.2</strong> Exclusão mediante eliminação da conta.</p>
<p><strong>8.3</strong> Portabilidade de dados mediante solicitação.</p>
<h2>9. Período de retenção</h2>
<p>Anúncios: 30 dias, Mensagens: até a exclusão, Logs do servidor: máx. 7 dias.</p>
<h2>10. Direito aplicável</h2>
<p>Lei Federal Suíça de Proteção de Dados (LPD).</p>
<h2>11. Alterações</h2>
<p>O operador pode alterar esta política de privacidade a qualquer momento.</p>
<p class="legal-meta">Última atualização: fevereiro 2026</p>
`,
ru: /* html */`
<h1>Политика конфиденциальности</h1>
<p class="legal-meta">dgray.io — Анонимный маркетплейс | Обновлено: февраль 2026</p>
<h2>1. Ответственный за обработку данных</h2>
<p>Ответственным за обработку данных является оператор платформы dgray.io с местонахождением в Швейцарии.</p>
<h2>2. Принцип</h2>
<p>Платформа разработана по принципу минимизации данных.</p>
<h2>3. Какие данные собираются?</h2>
<p><strong>3.1 Данные, которые мы НЕ собираем:</strong> Никаких адресов электронной почты, имён, номеров телефонов, данных о местоположении пользователей, платёжных данных.</p>
<p><strong>3.2 Регистрация:</strong> Криптографический хеш (SHA-256) UUID сохраняется как идентификатор пользователя. Сам UUID не сохраняется.</p>
<p><strong>3.3 Использование:</strong> Объявления (заголовок, описание, цена, категория, местоположение, изображения), Сообщения (сквозное шифрование, хранится только зашифрованный текст), Избранное (хранится локально в браузере).</p>
<p><strong>3.4 Технические данные:</strong> Серверные логи могут временно содержать IP-адреса и время доступа.</p>
<h2>4. Файлы cookie и локальное хранилище</h2>
<p><strong>4.1</strong> Никаких cookie для отслеживания или аналитики.</p>
<p><strong>4.2</strong> localStorage: Язык, тема, валюта, токен аутентификации, избранное, кеш категорий.</p>
<p><strong>4.3</strong> Эти данные не покидают браузер.</p>
<h2>5. Сторонние сервисы</h2>
<p><strong>5.1 Directus (Бэкенд):</strong> Собственный хостинг, без передачи данных третьим лицам.</p>
<p><strong>5.2 BTCPay Server (Платежи):</strong> Персональные данные не передаются.</p>
<p><strong>5.3 CoinGecko API (Курсы валют):</strong> Персональные данные не передаются.</p>
<h2>6. Шифрование</h2>
<p><strong>6.1</strong> Коммуникация защищена сквозным шифрованием (NaCl/TweetNaCl).</p>
<p><strong>6.2</strong> Ключи генерируются и хранятся в браузере.</p>
<p><strong>6.3</strong> Сервер хранит только зашифрованный текст.</p>
<h2>7. Передача данных</h2>
<p><strong>7.1</strong> Данные не передаются третьим лицам в рекламных или маркетинговых целях.</p>
<p><strong>7.2</strong> Раскрытие только по юридическому обязательству швейцарских органов власти.</p>
<h2>8. Права пользователей</h2>
<p><strong>8.1</strong> Право на информацию о хранимых данных.</p>
<p><strong>8.2</strong> Удаление путём удаления аккаунта.</p>
<p><strong>8.3</strong> Переносимость данных по запросу.</p>
<h2>9. Срок хранения</h2>
<p>Объявления: 30 дней, Сообщения: до удаления, Серверные логи: макс. 7 дней.</p>
<h2>10. Применимое право</h2>
<p>Федеральный закон Швейцарии о защите данных (DSG).</p>
<h2>11. Изменения</h2>
<p>Оператор может изменить настоящую политику конфиденциальности в любое время.</p>
<p class="legal-meta">Последнее обновление: февраль 2026</p>
`
}
return content[lang] || content.de
@@ -173,7 +377,7 @@ class PagePrivacy extends HTMLElement {
render() {
const lang = getCurrentLanguage()
const backLabel = { de: 'Zurück zur Startseite', en: 'Back to Home', fr: 'Retour à l\'accueil' }
const backLabel = { de: 'Zurück zur Startseite', en: 'Back to Home', fr: 'Retour à l\'accueil', it: 'Torna alla home', es: 'Volver al inicio', pt: 'Voltar ao Início', ru: 'На главную' }
this.innerHTML = /* html */`
<div class="legal-page">
<a href="#/" class="back-link">← ${backLabel[lang] || backLabel.en}</a>

View File

@@ -318,9 +318,10 @@ class PageSettings extends HTMLElement {
<h2>${t('settings.about')}</h2>
<div class="about-links">
<a href="#/about">${t('footer.about')}</a>
<a href="#/contact">${t('footer.contact')}</a>
<a href="#/imprint">${t('footer.imprint')}</a>
<a href="#/privacy">${t('footer.privacy')}</a>
<a href="#/terms">${t('footer.terms')}</a>
<a href="#/contact">${t('footer.contact')}</a>
</div>
<p class="version">dgray.io v1.0.0</p>
</section>

View File

@@ -16,7 +16,7 @@ class PageTerms extends HTMLElement {
const lang = getCurrentLanguage()
this.innerHTML = /* html */`
<div class="legal-page">
<a href="#/" class="back-link">← ${lang === 'de' ? 'Zurück zur Startseite' : lang === 'fr' ? 'Retour à l\'accueil' : 'Back to Home'}</a>
<a href="#/" class="back-link">← ${{ de: 'Zurück zur Startseite', en: 'Back to Home', fr: 'Retour à l\'accueil', it: 'Torna alla home', es: 'Volver al inicio', pt: 'Voltar ao Início', ru: 'На главную' }[lang] || 'Back to Home'}</a>
<div class="legal-content">
${this.getContent(lang)}
</div>
@@ -28,7 +28,11 @@ class PageTerms extends HTMLElement {
const content = {
de: this.getContentDE,
en: this.getContentEN,
fr: this.getContentFR
fr: this.getContentFR,
it: this.getContentIT,
es: this.getContentES,
pt: this.getContentPT,
ru: this.getContentRU
}
return (content[lang] || content.en).call(this)
}
@@ -254,6 +258,302 @@ class PageTerms extends HTMLElement {
<p class="legal-meta">Dernière mise à jour : février 2026</p>
`
}
getContentIT() {
return /* html */`
<h1>Condizioni generali di utilizzo (CGU)</h1>
<p class="legal-meta">dgray.io — Mercato anonimo | Aggiornamento: febbraio 2026</p>
<h2>1. Campo di applicazione</h2>
<p>1.1 Le presenti CGU disciplinano l'utilizzo della piattaforma dgray.io.</p>
<p>1.2 La piattaforma è gestita da una persona fisica con sede in Svizzera.</p>
<p>1.3 Utilizzando la piattaforma, l'utente accetta le presenti CGU.</p>
<h2>2. Servizi della piattaforma</h2>
<p>2.1 La piattaforma mette a disposizione un mercato online in cui gli utenti possono pubblicare annunci per beni e servizi e comunicare tra loro.</p>
<p>2.2 La piattaforma agisce esclusivamente come intermediario e non diventa parte dei contratti tra gli utenti.</p>
<p>2.3 Il gestore non garantisce l'accuratezza, la completezza o la qualità degli annunci pubblicati.</p>
<h2>3. Registrazione e account</h2>
<p>3.1 Non sono richiesti dati personali. La registrazione avviene tramite un UUID anonimo.</p>
<p>3.2 L'UUID è l'unico accesso all'account. Non è possibile recuperare un UUID perso.</p>
<p>3.3 È consentito un solo account attivo per persona.</p>
<h2>4. Annunci</h2>
<p>4.1 Gli utenti possono pubblicare annunci per beni e servizi legali.</p>
<p>4.2 Il gestore si riserva il diritto di rimuovere annunci senza indicarne i motivi.</p>
<p>4.3 Gli annunci sono limitati a 30 giorni e vengono automaticamente archiviati.</p>
<h2>5. Tariffe e pagamenti</h2>
<p>5.1 La pubblicazione di un annuncio è a pagamento. La tariffa attuale viene visualizzata prima della pubblicazione.</p>
<p>5.2 Il pagamento avviene esclusivamente in Monero (XMR).</p>
<p>5.3 Le tariffe pagate non sono rimborsabili.</p>
<p>5.4 Le transazioni tra utenti avvengono direttamente e senza il coinvolgimento della piattaforma.</p>
<h2>6. Comunicazione</h2>
<p>6.1 La piattaforma mette a disposizione una chat crittografata end-to-end. Il gestore non ha accesso al contenuto dei messaggi.</p>
<p>6.2 Gli utenti sono responsabili del contenuto dei propri messaggi.</p>
<h2>7. Responsabilità</h2>
<p>7.1 Il gestore non è responsabile per:</p>
<ul>
<li>Danni derivanti da transazioni</li>
<li>Perdita di criptovalute</li>
<li>Perdita di accesso a causa di UUID smarrito</li>
<li>Disponibilità della piattaforma</li>
<li>Contenuti generati dagli utenti</li>
</ul>
<p>7.2 La responsabilità è limitata alle tariffe pagate.</p>
<p>7.3 Il gestore non è responsabile per danni indiretti o mancato guadagno.</p>
<h2>8. Protezione dei dati</h2>
<p>8.1 La piattaforma raccoglie il minor numero possibile di dati personali tecnicamente necessari.</p>
<p>8.2 Nessun indirizzo e-mail, nome o dato di localizzazione viene memorizzato.</p>
<p>8.3 I messaggi sono crittografati end-to-end.</p>
<p>8.4 Non vengono utilizzati servizi di analisi o tracciamento.</p>
<p>8.5 Per ulteriori dettagli consultare l'informativa sulla privacy.</p>
<h2>9. Sospensione e risoluzione</h2>
<p>9.1 Gli utenti possono chiudere il proprio account in qualsiasi momento eliminando il proprio UUID.</p>
<p>9.2 Il gestore può sospendere gli account in caso di violazioni.</p>
<p>9.3 Nessun diritto al rimborso in caso di sospensione.</p>
<h2>10. Modifiche delle CGU</h2>
<p>10.1 Il gestore può modificare le presenti CGU in qualsiasi momento.</p>
<p>10.2 L'uso continuato della piattaforma costituisce accettazione delle CGU modificate.</p>
<h2>11. Diritto applicabile e foro competente</h2>
<p>11.1 Si applica il diritto svizzero.</p>
<p>11.2 Il foro competente è la sede del gestore in Svizzera.</p>
<h2>12. Clausola di salvaguardia</h2>
<p>Qualora singole disposizioni risultino inefficaci, la validità delle restanti disposizioni rimane inalterata.</p>
<p class="legal-meta">Ultimo aggiornamento: febbraio 2026</p>
`
}
getContentES() {
return /* html */`
<h1>Condiciones generales de uso (CGU)</h1>
<p class="legal-meta">dgray.io — Mercado anónimo | Actualización: febrero 2026</p>
<h2>1. Ámbito de aplicación</h2>
<p>1.1 Las presentes CGU regulan el uso de la plataforma dgray.io.</p>
<p>1.2 La plataforma es operada por una persona física con sede en Suiza.</p>
<p>1.3 Al utilizar la plataforma, el usuario acepta las presentes CGU.</p>
<h2>2. Servicios de la plataforma</h2>
<p>2.1 La plataforma pone a disposición un mercado en línea donde los usuarios pueden publicar anuncios de bienes y servicios y comunicarse entre sí.</p>
<p>2.2 La plataforma actúa únicamente como intermediaria y no se convierte en parte de los contratos entre los usuarios.</p>
<p>2.3 El operador no garantiza la exactitud, integridad o calidad de los anuncios publicados.</p>
<h2>3. Registro y cuentas</h2>
<p>3.1 No se requieren datos personales. El registro se realiza mediante un UUID anónimo.</p>
<p>3.2 El UUID es el único acceso a la cuenta. No es posible recuperar un UUID perdido.</p>
<p>3.3 Solo se permite una cuenta activa por persona.</p>
<h2>4. Anuncios</h2>
<p>4.1 Los usuarios pueden publicar anuncios de bienes y servicios legales.</p>
<p>4.2 El operador se reserva el derecho de eliminar anuncios sin indicar motivos.</p>
<p>4.3 Los anuncios están limitados a 30 días y se archivan automáticamente.</p>
<h2>5. Tarifas y pagos</h2>
<p>5.1 La publicación de un anuncio tiene un coste. La tarifa actual se muestra antes de la publicación.</p>
<p>5.2 El pago se realiza exclusivamente en Monero (XMR).</p>
<p>5.3 Las tarifas pagadas no son reembolsables.</p>
<p>5.4 Las transacciones entre usuarios son directas y sin intervención de la plataforma.</p>
<h2>6. Comunicación</h2>
<p>6.1 La plataforma proporciona un chat cifrado de extremo a extremo. El operador no tiene acceso al contenido de los mensajes.</p>
<p>6.2 Los usuarios son responsables del contenido de sus mensajes.</p>
<h2>7. Responsabilidad</h2>
<p>7.1 El operador no es responsable de:</p>
<ul>
<li>Daños derivados de transacciones</li>
<li>Pérdida de criptomonedas</li>
<li>Pérdida de acceso por UUID extraviado</li>
<li>Disponibilidad de la plataforma</li>
<li>Contenido generado por los usuarios</li>
</ul>
<p>7.2 La responsabilidad se limita a las tarifas pagadas.</p>
<p>7.3 El operador no es responsable de daños indirectos o lucro cesante.</p>
<h2>8. Protección de datos</h2>
<p>8.1 La plataforma recopila el mínimo de datos personales técnicamente posible.</p>
<p>8.2 No se almacenan direcciones de correo electrónico, nombres ni datos de ubicación.</p>
<p>8.3 Los mensajes están cifrados de extremo a extremo.</p>
<p>8.4 No se utilizan servicios de análisis ni seguimiento.</p>
<p>8.5 Consulte la política de privacidad para más detalles.</p>
<h2>9. Suspensión y resolución</h2>
<p>9.1 Los usuarios pueden cancelar su cuenta en cualquier momento eliminando su UUID.</p>
<p>9.2 El operador puede suspender cuentas en caso de infracciones.</p>
<p>9.3 No existe derecho a reembolso en caso de suspensión.</p>
<h2>10. Modificaciones de las CGU</h2>
<p>10.1 El operador puede modificar las presentes CGU en cualquier momento.</p>
<p>10.2 El uso continuado constituye la aceptación de las CGU modificadas.</p>
<h2>11. Derecho aplicable y jurisdicción</h2>
<p>11.1 Se aplica el derecho suizo.</p>
<p>11.2 El fuero competente es el domicilio del operador en Suiza.</p>
<h2>12. Cláusula de salvaguarda</h2>
<p>Si alguna disposición resulta inválida, la validez de las disposiciones restantes no se verá afectada.</p>
<p class="legal-meta">Última actualización: febrero 2026</p>
`
}
getContentPT() {
return /* html */`
<h1>Termos de Uso</h1>
<p class="legal-meta">dgray.io — Mercado anônimo | Atualização: fevereiro 2026</p>
<h2>1. Âmbito de aplicação</h2>
<p>1.1 Estes Termos de Uso regulam a utilização da plataforma dgray.io.</p>
<p>1.2 A plataforma é operada por uma pessoa física com sede na Suíça.</p>
<p>1.3 Ao utilizar a plataforma, o usuário concorda com estes Termos de Uso.</p>
<h2>2. Serviços da plataforma</h2>
<p>2.1 A plataforma disponibiliza um mercado online onde os usuários podem publicar anúncios de bens e serviços e comunicar entre si.</p>
<p>2.2 A plataforma atua exclusivamente como intermediária e não se torna parte dos contratos entre os usuários.</p>
<p>2.3 O operador não garante a exatidão, a integridade ou a qualidade dos anúncios publicados.</p>
<h2>3. Registro e contas</h2>
<p>3.1 Não são necessários dados pessoais. O registro é feito através de um UUID anônimo.</p>
<p>3.2 O UUID é o único acesso à conta. Não é possível recuperar um UUID perdido.</p>
<p>3.3 Apenas uma conta ativa por pessoa é permitida.</p>
<h2>4. Anúncios</h2>
<p>4.1 Os usuários podem publicar anúncios de bens e serviços legais.</p>
<p>4.2 O operador reserva-se o direito de remover anúncios sem indicar motivos.</p>
<p>4.3 Os anúncios são limitados a 30 dias e são automaticamente arquivados.</p>
<h2>5. Taxas e pagamentos</h2>
<p>5.1 A publicação de um anúncio é paga. A taxa atual é exibida antes da publicação.</p>
<p>5.2 O pagamento é feito exclusivamente em Monero (XMR).</p>
<p>5.3 As taxas pagas não são reembolsáveis.</p>
<p>5.4 As transações entre usuários são diretas e sem envolvimento da plataforma.</p>
<h2>6. Comunicação</h2>
<p>6.1 A plataforma disponibiliza um chat criptografado de ponta a ponta. O operador não tem acesso ao conteúdo das mensagens.</p>
<p>6.2 Os usuários são responsáveis pelo conteúdo de suas mensagens.</p>
<h2>7. Responsabilidade</h2>
<p>7.1 O operador não é responsável por:</p>
<ul>
<li>Danos decorrentes de transações</li>
<li>Perda de criptomoedas</li>
<li>Perda de acesso por UUID extraviado</li>
<li>Disponibilidade da plataforma</li>
<li>Conteúdo gerado pelos usuários</li>
</ul>
<p>7.2 A responsabilidade é limitada às taxas pagas.</p>
<p>7.3 O operador não é responsável por danos indiretos ou lucros cessantes.</p>
<h2>8. Proteção de dados</h2>
<p>8.1 A plataforma coleta o mínimo de dados pessoais tecnicamente possível.</p>
<p>8.2 Nenhum endereço de e-mail, nome ou dado de localização é armazenado.</p>
<p>8.3 As mensagens são criptografadas de ponta a ponta.</p>
<p>8.4 Não são utilizados serviços de análise ou rastreamento.</p>
<p>8.5 Consulte a política de privacidade para mais detalhes.</p>
<h2>9. Suspensão e rescisão</h2>
<p>9.1 Os usuários podem encerrar sua conta a qualquer momento excluindo seu UUID.</p>
<p>9.2 O operador pode suspender contas em caso de violações.</p>
<p>9.3 Não há direito a reembolso em caso de suspensão.</p>
<h2>10. Alterações dos Termos de Uso</h2>
<p>10.1 O operador pode alterar estes Termos de Uso a qualquer momento.</p>
<p>10.2 O uso continuado constitui aceitação dos Termos de Uso alterados.</p>
<h2>11. Direito aplicável e foro competente</h2>
<p>11.1 Aplica-se o direito suíço.</p>
<p>11.2 O foro competente é o domicílio do operador na Suíça.</p>
<h2>12. Cláusula de salvaguarda</h2>
<p>Se alguma disposição for considerada inválida, a validade das demais disposições permanece inalterada.</p>
<p class="legal-meta">Última atualização: fevereiro 2026</p>
`
}
getContentRU() {
return /* html */`
<h1>Условия использования</h1>
<p class="legal-meta">dgray.io — Анонимный маркетплейс | Обновлено: февраль 2026</p>
<h2>1. Область применения</h2>
<p>1.1 Настоящие Условия использования регулируют пользование платформой dgray.io.</p>
<p>1.2 Платформа управляется физическим лицом с местонахождением в Швейцарии.</p>
<p>1.3 Используя платформу, пользователь соглашается с настоящими Условиями использования.</p>
<h2>2. Услуги платформы</h2>
<p>2.1 Платформа предоставляет онлайн-маркетплейс, на котором пользователи могут размещать объявления о товарах и услугах и общаться друг с другом.</p>
<p>2.2 Платформа выступает исключительно как посредник и не становится стороной договоров между пользователями.</p>
<p>2.3 Оператор не гарантирует точность, полноту или качество опубликованных объявлений.</p>
<h2>3. Регистрация и аккаунты</h2>
<p>3.1 Персональные данные не требуются. Регистрация осуществляется через анонимный UUID.</p>
<p>3.2 UUID является единственным способом доступа к аккаунту. Восстановление утраченного UUID невозможно.</p>
<p>3.3 Допускается только один активный аккаунт на человека.</p>
<h2>4. Объявления</h2>
<p>4.1 Пользователи могут размещать объявления о легальных товарах и услугах.</p>
<p>4.2 Оператор оставляет за собой право удалять объявления без указания причин.</p>
<p>4.3 Объявления ограничены 30 днями и автоматически архивируются.</p>
<h2>5. Тарифы и платежи</h2>
<p>5.1 Публикация объявления является платной. Текущий тариф отображается перед публикацией.</p>
<p>5.2 Оплата производится исключительно в Monero (XMR).</p>
<p>5.3 Оплаченные тарифы не подлежат возврату.</p>
<p>5.4 Транзакции между пользователями осуществляются напрямую и без участия платформы.</p>
<h2>6. Коммуникация</h2>
<p>6.1 Платформа предоставляет чат со сквозным шифрованием. Оператор не имеет доступа к содержимому сообщений.</p>
<p>6.2 Пользователи несут ответственность за содержание своих сообщений.</p>
<h2>7. Ответственность</h2>
<p>7.1 Оператор не несёт ответственности за:</p>
<ul>
<li>Ущерб от транзакций</li>
<li>Потерю криптовалюты</li>
<li>Потерю доступа из-за утраченного UUID</li>
<li>Доступность платформы</li>
<li>Контент, созданный пользователями</li>
</ul>
<p>7.2 Ответственность ограничена оплаченными тарифами.</p>
<p>7.3 Оператор не несёт ответственности за косвенные убытки или упущенную выгоду.</p>
<h2>8. Защита данных</h2>
<p>8.1 Платформа собирает минимально возможный объём персональных данных.</p>
<p>8.2 Адреса электронной почты, имена и данные о местоположении не хранятся.</p>
<p>8.3 Сообщения защищены сквозным шифрованием.</p>
<p>8.4 Сервисы аналитики и отслеживания не используются.</p>
<p>8.5 Подробности см. в Политике конфиденциальности.</p>
<h2>9. Приостановка и прекращение</h2>
<p>9.1 Пользователи могут закрыть свой аккаунт в любое время, удалив свой UUID.</p>
<p>9.2 Оператор может приостановить аккаунты в случае нарушений.</p>
<p>9.3 Право на возврат средств при приостановке отсутствует.</p>
<h2>10. Изменения Условий использования</h2>
<p>10.1 Оператор может изменить настоящие Условия использования в любое время.</p>
<p>10.2 Продолжение использования означает принятие изменённых Условий использования.</p>
<h2>11. Применимое право и подсудность</h2>
<p>11.1 Применяется швейцарское право.</p>
<p>11.2 Место подсудности — местонахождение оператора в Швейцарии.</p>
<h2>12. Сальваторная оговорка</h2>
<p>Если отдельные положения окажутся недействительными, действительность остальных положений остаётся неизменной.</p>
<p class="legal-meta">Последнее обновление: февраль 2026</p>
`
}
}
customElements.define('page-terms', PageTerms)

View File

@@ -15,7 +15,8 @@
"about": "Über uns",
"privacy": "Datenschutz",
"terms": "AGB",
"contact": "Kontakt"
"contact": "Kontakt",
"imprint": "Impressum"
},
"home": {
"title": "Willkommen bei dgray.io",

View File

@@ -15,7 +15,8 @@
"about": "About",
"privacy": "Privacy",
"terms": "Terms",
"contact": "Contact"
"contact": "Contact",
"imprint": "Legal Notice"
},
"home": {
"title": "Welcome to dgray.io",

View File

@@ -15,7 +15,8 @@
"about": "Acerca de",
"privacy": "Privacidad",
"terms": "Condiciones",
"contact": "Contacto"
"contact": "Contacto",
"imprint": "Aviso legal"
},
"home": {
"title": "Bienvenido a dgray.io",

View File

@@ -15,7 +15,8 @@
"about": "À propos",
"privacy": "Confidentialité",
"terms": "CGU",
"contact": "Contact"
"contact": "Contact",
"imprint": "Mentions légales"
},
"home": {
"title": "Bienvenue sur dgray.io",

View File

@@ -15,7 +15,8 @@
"about": "Chi siamo",
"privacy": "Privacy",
"terms": "Condizioni",
"contact": "Contatto"
"contact": "Contatto",
"imprint": "Avviso legale"
},
"home": {
"title": "Benvenuto su dgray.io",

View File

@@ -15,7 +15,8 @@
"about": "Sobre",
"privacy": "Privacidade",
"terms": "Termos",
"contact": "Contato"
"contact": "Contato",
"imprint": "Aviso legal"
},
"home": {
"title": "Bem-vindo ao dgray.io",

View File

@@ -15,7 +15,8 @@
"about": "О нас",
"privacy": "Конфиденциальность",
"terms": "Условия",
"contact": "Контакты"
"contact": "Контакты",
"imprint": "Правовая информация"
},
"home": {
"title": "Добро пожаловать на dgray.io",