vojo/public/delete-account.html

388 lines
18 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<meta name="theme-color" content="#0d0e11" />
<meta name="robots" content="index,follow" />
<title>Vojo — Account deletion</title>
<style>
:root {
--bg: #0d0e11;
--panel: #181a20;
--surface: #21232b;
--text: #e6e6e9;
--text-strong: #f4f4f6;
--muted: rgba(230, 230, 233, 0.62);
--faint: rgba(230, 230, 233, 0.38);
--divider: rgba(255, 255, 255, 0.08);
--fleet: #9580ff;
--fleet-soft: #a59cff;
color-scheme: dark;
}
*, *::before, *::after { box-sizing: border-box; }
html, body {
margin: 0;
padding: 0;
background: var(--bg);
color: var(--text);
font-family: -apple-system, "SF Pro Text", "Inter", system-ui, sans-serif;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
body {
min-height: 100vh;
line-height: 1.7;
font-size: 16px;
}
.frame {
max-width: 680px;
margin: 0 auto;
padding: 56px 28px 120px;
}
header.doc {
padding-bottom: 28px;
margin-bottom: 40px;
border-bottom: 1px solid var(--divider);
}
.brand {
display: flex;
align-items: center;
gap: 9px;
margin-bottom: 22px;
color: var(--muted);
font-size: 13px;
letter-spacing: 0.2px;
}
.brand-dot {
width: 8px;
height: 8px;
border-radius: 99px;
background: var(--fleet);
}
.brand-name { color: var(--text-strong); font-weight: 600; }
.brand-sep { color: var(--faint); }
h1 {
font-size: 34px;
line-height: 1.15;
font-weight: 600;
margin: 0 0 10px;
letter-spacing: -0.6px;
color: var(--text-strong);
}
.effective { color: var(--muted); font-size: 14px; margin: 0; }
.lang-switch {
display: inline-flex;
margin-top: 24px;
font-size: 13px;
color: var(--muted);
}
.lang-switch button {
appearance: none;
-webkit-appearance: none;
background: transparent;
border: 0;
padding: 4px 0;
font: inherit;
color: var(--muted);
cursor: pointer;
transition: color .15s ease;
}
.lang-switch button:hover { color: var(--text); }
.lang-switch button[aria-pressed="true"] {
color: var(--text-strong);
font-weight: 600;
}
.lang-switch .sep {
padding: 0 10px;
color: var(--faint);
user-select: none;
}
h2 {
font-size: 20px;
font-weight: 600;
margin: 44px 0 12px;
letter-spacing: -0.2px;
color: var(--text-strong);
scroll-margin-top: 24px;
}
p { margin: 0 0 14px; color: var(--text); }
ul, ol {
margin: 0 0 18px;
padding-left: 22px;
}
ul li, ol li { margin: 8px 0; padding-left: 4px; }
ul li::marker, ol li::marker { color: var(--faint); }
ul li b, ol li b, p b { color: var(--text-strong); font-weight: 600; }
a {
color: var(--fleet-soft);
text-decoration: none;
border-bottom: 1px solid rgba(165, 156, 255, 0.35);
transition: color .15s ease, border-color .15s ease;
}
a:hover {
color: #c0b9ff;
border-bottom-color: rgba(192, 185, 255, 0.7);
}
.callout {
background: var(--panel);
border: 1px solid var(--divider);
border-radius: 12px;
padding: 18px 20px;
margin: 14px 0 20px;
}
.callout p:last-child { margin-bottom: 0; }
.callout a.email {
font-family: ui-monospace, "JetBrains Mono", monospace;
font-size: 0.95em;
}
section[hidden] { display: none; }
section > h2:first-of-type { margin-top: 0; }
footer.doc {
margin-top: 64px;
padding-top: 24px;
border-top: 1px solid var(--divider);
font-size: 13px;
color: var(--faint);
display: flex;
justify-content: space-between;
align-items: center;
gap: 12px;
flex-wrap: wrap;
}
footer.doc .copy {
font-family: ui-monospace, "JetBrains Mono", monospace;
}
footer.doc a { color: var(--muted); border-bottom-color: transparent; }
footer.doc a:hover { color: var(--text); border-bottom-color: var(--divider); }
@media (max-width: 560px) {
.frame { padding: 36px 20px 96px; }
h1 { font-size: 28px; }
h2 { font-size: 18px; margin: 36px 0 10px; }
body { font-size: 15.5px; line-height: 1.65; }
}
</style>
</head>
<body>
<div class="frame">
<header class="doc">
<div class="brand">
<span class="brand-dot" aria-hidden="true"></span>
<span class="brand-name">Vojo</span>
<span class="brand-sep">·</span>
<span>Account deletion</span>
</div>
<h1 data-i18n-h1>Delete your account</h1>
<p class="effective" data-i18n-effective>Vojo Project · vojo.chat</p>
<div class="lang-switch" role="group" aria-label="Language">
<button type="button" data-lang="en" aria-pressed="true">English</button>
<span class="sep" aria-hidden="true">/</span>
<button type="button" data-lang="ru" aria-pressed="false">Русский</button>
</div>
</header>
<section lang="en" data-lang="en">
<p>This page explains how to request deletion of your <b>Vojo</b> account and the
data associated with it on the <code>vojo.chat</code> homeserver.</p>
<p>Vojo is maintained by the Vojo Project, an independent developer. The application
does not yet expose an in-app "Delete account" button; until it does, deletion is
handled by request to the address below. We reply to every request.</p>
<h2>How to request deletion</h2>
<ol>
<li>Send an email from any address to
<a class="email" href="mailto:vojochatdev@gmail.com?subject=Delete%20account">vojochatdev@gmail.com</a>
with the subject <b>“Delete account”</b>.</li>
<li>In the body of the email, include your full Matrix user ID — the
<code>@username:vojo.chat</code> identifier shown in Settings → Account.
If you have lost access to the account, describe enough detail (approximate
creation date, the email or recovery info you remember) so we can identify it
with reasonable certainty.</li>
<li>We acknowledge the request within a few business days and complete deletion
within <b>thirty days</b> of the original request.</li>
</ol>
<div class="callout">
<p><b>Contact:</b>
<a class="email" href="mailto:vojochatdev@gmail.com">vojochatdev@gmail.com</a></p>
<p style="margin-top: 6px;"><b>Subject line:</b> Delete account</p>
</div>
<h2>What gets deleted</h2>
<ul>
<li>Your account record on the <code>vojo.chat</code> homeserver (user profile,
display name, avatar).</li>
<li>Your active sessions and authentication tokens.</li>
<li>Your encryption keys held server-side.</li>
<li>Media files you uploaded to the <code>vojo.chat</code> media storage.</li>
<li>The push-notification registration (Firebase Cloud Messaging token) bound
to the account.</li>
</ul>
<h2>What we cannot delete on your behalf</h2>
<ul>
<li><b>Messages already delivered to other servers.</b> Matrix is a federated
network: when you sent a message into a room that included participants on
other homeservers, those messages were replicated to their servers and are
no longer under our control.</li>
<li><b>Copies held by other participants.</b> Anything you sent into a
conversation has been received by the people you sent it to. We cannot
reach into their devices or accounts.</li>
<li><b>Messages in rooms you no longer participate in.</b> A few residual
events (membership records, room state) may remain on the homeserver for
room consistency, but they no longer link to your deleted account.</li>
<li><b>Bridged third-party networks.</b> If you used a Telegram, Discord or
WhatsApp bridge, those networks hold their own copies of your messages
governed by their own retention policies; deactivating your Vojo account
does not delete data on those services.</li>
</ul>
<h2>Data retained after deletion</h2>
<p>After your account is deactivated, server access logs may retain your IP address
and request timestamps for up to thirty additional days as part of normal abuse-
prevention rotation. Backup snapshots covering the period before deletion are
rotated out within thirty days. After that period, no personal data attributable to
your account remains on our infrastructure.</p>
<h2>If you'd prefer to stay but stop receiving notifications</h2>
<p>If you only want notifications to stop and not to lose your account entirely,
you can simply sign out of the application on your device — this removes the
push-notification binding without deactivating the account.</p>
<h2>Privacy Policy</h2>
<p>For a fuller description of what we hold and why, see our
<a href="https://vojo.chat/privacy">Privacy Policy</a>.</p>
</section>
<section lang="ru" data-lang="ru" hidden>
<p>На этой странице описано, как запросить удаление вашей учётной записи <b>Vojo</b>
и связанных с ней данных на homeserver-е <code>vojo.chat</code>.</p>
<p>Vojo поддерживается проектом Vojo, независимым разработчиком. В приложении пока
нет кнопки «Удалить аккаунт»; до её появления удаление выполняется по запросу на
адрес ниже. Мы отвечаем на каждое обращение.</p>
<h2>Как запросить удаление</h2>
<ol>
<li>Напишите письмо с любого адреса на
<a class="email" href="mailto:vojochatdev@gmail.com?subject=Delete%20account">vojochatdev@gmail.com</a>
с темой <b>«Delete account»</b>.</li>
<li>В тексте письма укажите полный Matrix user ID — идентификатор вида
<code>@username:vojo.chat</code>, который виден в Настройки → Аккаунт.
Если доступа к аккаунту больше нет, опишите достаточно деталей
(примерная дата создания, email или recovery-информация, которую помните),
чтобы мы могли надёжно его опознать.</li>
<li>Мы подтверждаем получение запроса в течение нескольких рабочих дней и
завершаем удаление в течение <b>тридцати дней</b> с момента
первоначального обращения.</li>
</ol>
<div class="callout">
<p><b>Контакт:</b>
<a class="email" href="mailto:vojochatdev@gmail.com">vojochatdev@gmail.com</a></p>
<p style="margin-top: 6px;"><b>Тема письма:</b> Delete account</p>
</div>
<h2>Что будет удалено</h2>
<ul>
<li>Запись вашего аккаунта на homeserver-е <code>vojo.chat</code> (профиль,
отображаемое имя, аватар).</li>
<li>Активные сессии и токены аутентификации.</li>
<li>Ключи шифрования, хранящиеся на сервере.</li>
<li>Медиа-файлы, которые вы загружали в медиа-хранилище
<code>vojo.chat</code>.</li>
<li>Регистрация push-уведомлений (Firebase Cloud Messaging токен),
привязанная к аккаунту.</li>
</ul>
<h2>Что мы не можем удалить за вас</h2>
<ul>
<li><b>Сообщения, уже доставленные на другие серверы.</b> Matrix — федеративная
сеть: когда вы отправляли сообщение в комнату, где были участники с других
homeserver-ов, эти сообщения реплицировались на их серверы и больше не
находятся под нашим контролем.</li>
<li><b>Копии у других участников.</b> Всё, что вы отправили в переписку, уже
получили те, кому вы это отправляли. Мы не можем добраться до их устройств
и учётных записей.</li>
<li><b>Сообщения в комнатах, где вас больше нет.</b> Несколько остаточных
событий (записи о членстве, состояние комнаты) могут оставаться на
homeserver-е для целостности комнаты, но они уже не связаны с вашим
удалённым аккаунтом.</li>
<li><b>Подключённые сторонние сети.</b> Если вы пользовались мостами в
Telegram, Discord или WhatsApp, эти сети хранят собственные копии ваших
сообщений по своим политикам; деактивация аккаунта Vojo не удаляет данные
на этих сервисах.</li>
</ul>
<h2>Данные, остающиеся после удаления</h2>
<p>После деактивации аккаунта серверные журналы доступа могут содержать ваш IP-
адрес и время запросов ещё до тридцати дней в рамках обычной ротации. Резервные
копии, охватывающие период до удаления, ротируются и пропадают в течение
тридцати дней. По истечении этого срока никакие персональные данные, относящиеся
к вашему аккаунту, на нашей инфраструктуре не остаются.</p>
<h2>Если хотите остаться, но прекратить уведомления</h2>
<p>Если вы хотите только перестать получать уведомления, не теряя аккаунт целиком —
просто выйдите из приложения на своём устройстве. Это снимет привязку к push-
сервису без деактивации учётной записи.</p>
<h2>Политика конфиденциальности</h2>
<p>Более полное описание того, что у нас хранится и зачем — в
<a href="https://vojo.chat/privacy">Политике конфиденциальности</a>.</p>
</section>
<footer class="doc">
<span class="copy">© Vojo Project · 2026</span>
<a href="https://vojo.chat">vojo.chat</a>
</footer>
</div>
<script>
(function () {
var buttons = document.querySelectorAll('.lang-switch button');
var sections = document.querySelectorAll('section[data-lang]');
var h1 = document.querySelector('[data-i18n-h1]');
var eff = document.querySelector('[data-i18n-effective]');
var H1 = { en: 'Delete your account', ru: 'Удалить аккаунт' };
var EFF = { en: 'Vojo Project · vojo.chat', ru: 'Проект Vojo · vojo.chat' };
function setLang(lang) {
buttons.forEach(function (b) {
b.setAttribute('aria-pressed', String(b.dataset.lang === lang));
});
sections.forEach(function (s) {
s.hidden = s.dataset.lang !== lang;
});
if (h1 && H1[lang]) h1.textContent = H1[lang];
if (eff && EFF[lang]) eff.textContent = EFF[lang];
document.documentElement.lang = lang;
document.title = (lang === 'ru' ? 'Vojo — Удаление аккаунта' : 'Vojo — Account deletion');
try { localStorage.setItem('vojo-delete-lang', lang); } catch (e) {}
}
buttons.forEach(function (b) {
b.addEventListener('click', function () { setLang(b.dataset.lang); });
});
var stored = null;
try { stored = localStorage.getItem('vojo-delete-lang'); } catch (e) {}
setLang(stored || 'en');
})();
</script>
</body>
</html>