388 lines
18 KiB
HTML
388 lines
18 KiB
HTML
<!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>
|