forked from Rosetta/landing
Move legal pages to React Router
This commit is contained in:
3
.openai/hosting.json
Normal file
3
.openai/hosting.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"project_id": "appgprj_6a6bdf07874c81919af23407be23ff1a"
|
||||||
|
}
|
||||||
@@ -12,14 +12,14 @@
|
|||||||
<meta property="og:url" content="https://rosetta.im/" />
|
<meta property="og:url" content="https://rosetta.im/" />
|
||||||
<meta property="og:title" content="Rosetta - Secure Messaging for Everyone" />
|
<meta property="og:title" content="Rosetta - Secure Messaging for Everyone" />
|
||||||
<meta property="og:description" content="End-to-end encrypted messaging app with zero-knowledge architecture. Download for Windows, Linux, and Android." />
|
<meta property="og:description" content="End-to-end encrypted messaging app with zero-knowledge architecture. Download for Windows, Linux, and Android." />
|
||||||
<meta property="og:image" content="/og-image.png" />
|
<meta property="og:image" content="/og.png" />
|
||||||
<meta property="og:site_name" content="Rosetta" />
|
<meta property="og:site_name" content="Rosetta" />
|
||||||
<meta property="og:locale" content="en_US" />
|
<meta property="og:locale" content="en_US" />
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
<meta name="twitter:card" content="summary_large_image" />
|
||||||
<meta name="twitter:url" content="https://rosetta.im/" />
|
<meta name="twitter:url" content="https://rosetta.im/" />
|
||||||
<meta name="twitter:title" content="Rosetta - Secure Messaging for Everyone" />
|
<meta name="twitter:title" content="Rosetta - Secure Messaging for Everyone" />
|
||||||
<meta name="twitter:description" content="End-to-end encrypted messaging app with zero-knowledge architecture." />
|
<meta name="twitter:description" content="End-to-end encrypted messaging app with zero-knowledge architecture." />
|
||||||
<meta name="twitter:image" content="/og-image.png" />
|
<meta name="twitter:image" content="/og.png" />
|
||||||
<link rel="canonical" href="https://rosetta.im/" />
|
<link rel="canonical" href="https://rosetta.im/" />
|
||||||
<link rel="icon" href="favicon.ico" />
|
<link rel="icon" href="favicon.ico" />
|
||||||
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
"ratingValue": "4.8",
|
"ratingValue": "4.8",
|
||||||
"ratingCount": "1500"
|
"ratingCount": "1500"
|
||||||
},
|
},
|
||||||
"image": "/og-image.png"
|
"image": "/og.png"
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
60
package-lock.json
generated
60
package-lock.json
generated
@@ -17,7 +17,8 @@
|
|||||||
"events": "^3.3.0",
|
"events": "^3.3.0",
|
||||||
"react": "^19.2.0",
|
"react": "^19.2.0",
|
||||||
"react-dom": "^19.2.0",
|
"react-dom": "^19.2.0",
|
||||||
"react-icons": "^5.5.0"
|
"react-icons": "^5.5.0",
|
||||||
|
"react-router-dom": "^7.18.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.39.1",
|
"@eslint/js": "^9.39.1",
|
||||||
@@ -2132,6 +2133,19 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/cookie": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/express"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/cross-spawn": {
|
"node_modules/cross-spawn": {
|
||||||
"version": "7.0.6",
|
"version": "7.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
||||||
@@ -3286,6 +3300,44 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/react-router": {
|
||||||
|
"version": "7.18.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.2.tgz",
|
||||||
|
"integrity": "sha512-aUVMjFm3GAPTTZL7oYr5E7ETiqfQCHRLH+B+5afnICvf0r7kkK4eR6SMuwbSTJw/7t+12khT/Kahij49fqOCIg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"cookie": "^1.0.1",
|
||||||
|
"set-cookie-parser": "^2.6.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=20.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=18",
|
||||||
|
"react-dom": ">=18"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"react-dom": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/react-router-dom": {
|
||||||
|
"version": "7.18.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.2.tgz",
|
||||||
|
"integrity": "sha512-AIKJ/jgGlFb3EbfCXk5Gzshiwt+l3mqbCrNjmEWMMjqQxNJ3svBa6bgzFyCC2Sw3RA0VWF1kg3uQf2OFhxb8hw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"react-router": "7.18.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=20.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=18",
|
||||||
|
"react-dom": ">=18"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/react-style-singleton": {
|
"node_modules/react-style-singleton": {
|
||||||
"version": "2.2.3",
|
"version": "2.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
|
||||||
@@ -3393,6 +3445,12 @@
|
|||||||
"semver": "bin/semver.js"
|
"semver": "bin/semver.js"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/set-cookie-parser": {
|
||||||
|
"version": "2.7.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz",
|
||||||
|
"integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/shebang-command": {
|
"node_modules/shebang-command": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
||||||
|
|||||||
@@ -19,7 +19,8 @@
|
|||||||
"events": "^3.3.0",
|
"events": "^3.3.0",
|
||||||
"react": "^19.2.0",
|
"react": "^19.2.0",
|
||||||
"react-dom": "^19.2.0",
|
"react-dom": "^19.2.0",
|
||||||
"react-icons": "^5.5.0"
|
"react-icons": "^5.5.0",
|
||||||
|
"react-router-dom": "^7.18.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.39.1",
|
"@eslint/js": "^9.39.1",
|
||||||
|
|||||||
237
public/legal.css
237
public/legal.css
@@ -1,237 +0,0 @@
|
|||||||
:root {
|
|
||||||
color-scheme: dark;
|
|
||||||
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
||||||
color: #edf3ff;
|
|
||||||
background: #0c111a;
|
|
||||||
font-synthesis: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
* {
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
html {
|
|
||||||
scroll-behavior: smooth;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
min-width: 320px;
|
|
||||||
margin: 0;
|
|
||||||
background: #0c111a;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.page {
|
|
||||||
width: min(100% - 48px, 1120px);
|
|
||||||
margin: 0 auto;
|
|
||||||
padding: 20px 0 64px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.topbar {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
gap: 24px;
|
|
||||||
min-height: 56px;
|
|
||||||
border-bottom: 1px solid #29354a;
|
|
||||||
}
|
|
||||||
|
|
||||||
.brand {
|
|
||||||
display: inline-flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 10px;
|
|
||||||
color: #f5f8ff;
|
|
||||||
font-size: 18px;
|
|
||||||
font-weight: 750;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.brand-mark {
|
|
||||||
display: grid;
|
|
||||||
width: 32px;
|
|
||||||
height: 32px;
|
|
||||||
place-items: center;
|
|
||||||
overflow: hidden;
|
|
||||||
border-radius: 8px;
|
|
||||||
background: #17325f;
|
|
||||||
}
|
|
||||||
|
|
||||||
.brand-mark img {
|
|
||||||
display: block;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.topbar nav,
|
|
||||||
.legal-footer {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
align-items: center;
|
|
||||||
gap: 18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.topbar nav a,
|
|
||||||
.legal-footer a {
|
|
||||||
color: #aebbd0;
|
|
||||||
font-size: 14px;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.topbar nav a:hover,
|
|
||||||
.topbar nav a[aria-current="page"],
|
|
||||||
.legal-footer a:hover {
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.document {
|
|
||||||
width: min(100%, 790px);
|
|
||||||
margin: 72px auto 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.document-header {
|
|
||||||
padding-bottom: 34px;
|
|
||||||
border-bottom: 1px solid #29354a;
|
|
||||||
}
|
|
||||||
|
|
||||||
.eyebrow {
|
|
||||||
margin: 0 0 12px;
|
|
||||||
color: #72afff;
|
|
||||||
font-size: 13px;
|
|
||||||
font-weight: 750;
|
|
||||||
letter-spacing: 0;
|
|
||||||
text-transform: uppercase;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
max-width: 680px;
|
|
||||||
margin: 0;
|
|
||||||
color: #f4f7ff;
|
|
||||||
font-size: clamp(36px, 6vw, 56px);
|
|
||||||
letter-spacing: 0;
|
|
||||||
line-height: 1.04;
|
|
||||||
}
|
|
||||||
|
|
||||||
.updated {
|
|
||||||
margin: 16px 0 0;
|
|
||||||
color: #8f9db3;
|
|
||||||
font-size: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.document-content {
|
|
||||||
padding-top: 32px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.document-content > :first-child {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.lead {
|
|
||||||
max-width: 740px;
|
|
||||||
color: #d3dcec;
|
|
||||||
font-size: 19px;
|
|
||||||
line-height: 1.55;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
margin: 48px 0 16px;
|
|
||||||
padding-top: 30px;
|
|
||||||
border-top: 1px solid #29354a;
|
|
||||||
color: #f2f6ff;
|
|
||||||
font-size: clamp(21px, 3vw, 26px);
|
|
||||||
letter-spacing: 0;
|
|
||||||
line-height: 1.24;
|
|
||||||
}
|
|
||||||
|
|
||||||
p,
|
|
||||||
li {
|
|
||||||
color: #b7c3d6;
|
|
||||||
font-size: 16px;
|
|
||||||
line-height: 1.68;
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin: 0 0 18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul {
|
|
||||||
display: grid;
|
|
||||||
gap: 9px;
|
|
||||||
margin: 0 0 20px;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
|
|
||||||
li::marker {
|
|
||||||
color: #72afff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.document-content a {
|
|
||||||
color: #8fc0ff;
|
|
||||||
overflow-wrap: anywhere;
|
|
||||||
text-underline-offset: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.address {
|
|
||||||
padding: 18px 20px;
|
|
||||||
border-left: 2px solid #4c8fe8;
|
|
||||||
background: #121c2b;
|
|
||||||
color: #d6dfef;
|
|
||||||
white-space: pre-line;
|
|
||||||
}
|
|
||||||
|
|
||||||
.legal-footer {
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-top: 80px;
|
|
||||||
padding-top: 24px;
|
|
||||||
border-top: 1px solid #29354a;
|
|
||||||
}
|
|
||||||
|
|
||||||
.legal-footer p {
|
|
||||||
margin: 0;
|
|
||||||
color: #77869d;
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 640px) {
|
|
||||||
.page {
|
|
||||||
width: min(100% - 32px, 1120px);
|
|
||||||
padding-top: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.topbar {
|
|
||||||
align-items: flex-start;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 14px;
|
|
||||||
padding-bottom: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.topbar nav,
|
|
||||||
.legal-footer {
|
|
||||||
gap: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.document {
|
|
||||||
margin-top: 48px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.document-header {
|
|
||||||
padding-bottom: 26px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.lead {
|
|
||||||
font-size: 18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
margin-top: 40px;
|
|
||||||
padding-top: 26px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.legal-footer {
|
|
||||||
align-items: flex-start;
|
|
||||||
flex-direction: column;
|
|
||||||
margin-top: 56px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
BIN
public/og.png
Normal file
BIN
public/og.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.3 MiB |
@@ -1,260 +0,0 @@
|
|||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>Privacy Policy for Rosetta</title>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content="Privacy Policy for Rosetta by ROSETTA CLOUD SERVICES LIMITED: how data is handled in the end-to-end encrypted messenger."
|
|
||||||
/>
|
|
||||||
<link rel="canonical" href="https://rosetta.im/privacy/" />
|
|
||||||
<style>
|
|
||||||
:root {
|
|
||||||
color-scheme: light dark;
|
|
||||||
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
||||||
line-height: 1.6;
|
|
||||||
color: #1f2937;
|
|
||||||
background: #ffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
background: linear-gradient(180deg, rgba(0, 102, 255, 0.04), rgba(255, 255, 255, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
main {
|
|
||||||
width: min(880px, calc(100% - 40px));
|
|
||||||
margin: 0 auto;
|
|
||||||
padding: 56px 0 72px;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: #0066ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
margin: 0 0 8px;
|
|
||||||
font-size: clamp(32px, 5vw, 48px);
|
|
||||||
line-height: 1.1;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
margin-top: 36px;
|
|
||||||
font-size: 22px;
|
|
||||||
line-height: 1.25;
|
|
||||||
}
|
|
||||||
|
|
||||||
p,
|
|
||||||
li {
|
|
||||||
font-size: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.muted {
|
|
||||||
color: #6b7280;
|
|
||||||
}
|
|
||||||
|
|
||||||
.back {
|
|
||||||
display: inline-block;
|
|
||||||
margin-bottom: 28px;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.address {
|
|
||||||
white-space: pre-line;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
:root {
|
|
||||||
color: #f3f4f6;
|
|
||||||
background: #101113;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
background: linear-gradient(180deg, rgba(0, 102, 255, 0.12), rgba(16, 17, 19, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
.muted {
|
|
||||||
color: #a1a1aa;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<link rel="stylesheet" href="/legal.css" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<main class="page">
|
|
||||||
<header class="topbar">
|
|
||||||
<a class="brand" href="/" aria-label="Rosetta home">
|
|
||||||
<span class="brand-mark"><img src="/rosetta-logo.png" alt="" /></span>
|
|
||||||
Rosetta
|
|
||||||
</a>
|
|
||||||
<nav aria-label="Legal pages">
|
|
||||||
<a href="/support/">Support</a>
|
|
||||||
<a href="/privacy/" aria-current="page">Privacy</a>
|
|
||||||
<a href="/terms/">Terms</a>
|
|
||||||
</nav>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<article class="document">
|
|
||||||
<header class="document-header">
|
|
||||||
<p class="eyebrow">Rosetta legal</p>
|
|
||||||
<h1>Privacy Policy</h1>
|
|
||||||
<p class="updated">Last updated: May 22, 2026</p>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="document-content">
|
|
||||||
|
|
||||||
<p class="lead">
|
|
||||||
Rosetta IM is operated by ROSETTA CLOUD SERVICES LIMITED ("Rosetta",
|
|
||||||
"we", "us", or "our"). This Privacy Policy explains how we handle
|
|
||||||
information when you use Rosetta, our end-to-end encrypted messaging
|
|
||||||
application, and our website at https://rosetta.im.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>1. Information We Collect</h2>
|
|
||||||
<p>
|
|
||||||
Rosetta is designed to minimize data collection. Registration does not
|
|
||||||
require a phone number, email address, or real name. The app uses
|
|
||||||
cryptographic keys and technical identifiers needed to operate the
|
|
||||||
service.
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
Account and cryptographic data: public keys, account identifiers, and
|
|
||||||
related technical data needed to identify users and deliver encrypted
|
|
||||||
messages. Private keys are intended to remain on your device.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Encrypted messages and media in transit: message text, files, and
|
|
||||||
media are encrypted before they are sent. Our servers are designed to
|
|
||||||
relay encrypted payloads and encrypted message keys, not to read
|
|
||||||
message contents.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Device and app data: app version, operating system, platform,
|
|
||||||
architecture, update request data, IP address, timestamps, and server
|
|
||||||
logs needed for security, reliability, abuse prevention, and update
|
|
||||||
delivery.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Support communications: if you contact us, we may process your email
|
|
||||||
address, message content, and any information you choose to provide.
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h2>2. Information We Do Not Collect for Advertising</h2>
|
|
||||||
<p>
|
|
||||||
We do not use third-party advertising SDKs, advertising trackers, or
|
|
||||||
cross-app tracking. We do not sell your personal information.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>3. How We Use Information</h2>
|
|
||||||
<p>We use information only to:</p>
|
|
||||||
<ul>
|
|
||||||
<li>provide, maintain, and secure Rosetta;</li>
|
|
||||||
<li>route encrypted messages between users;</li>
|
|
||||||
<li>deliver app updates and downloads;</li>
|
|
||||||
<li>detect abuse, prevent fraud, and protect service integrity;</li>
|
|
||||||
<li>respond to support requests;</li>
|
|
||||||
<li>comply with legal obligations.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h2>4. End-to-End Encryption</h2>
|
|
||||||
<p>
|
|
||||||
Rosetta is designed so that message content is encrypted before it
|
|
||||||
reaches our servers. Our servers are not intended to have access to
|
|
||||||
decrypted message contents or decrypted media. Messages are stored on
|
|
||||||
users' devices rather than as readable message history on our servers.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>5. Sharing of Information</h2>
|
|
||||||
<p>We may share limited information only with:</p>
|
|
||||||
<ul>
|
|
||||||
<li>infrastructure and hosting providers that help us operate Rosetta;</li>
|
|
||||||
<li>professional advisers, if necessary;</li>
|
|
||||||
<li>
|
|
||||||
authorities or other parties when required by law or to protect rights,
|
|
||||||
safety, and security.
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<p>
|
|
||||||
Any service provider that processes user data for us must protect it
|
|
||||||
consistently with this Privacy Policy.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>6. Retention</h2>
|
|
||||||
<p>
|
|
||||||
Encrypted message data in transit is processed only as needed to deliver
|
|
||||||
the service. Technical logs and support communications are retained only
|
|
||||||
for as long as reasonably necessary for security, reliability, support,
|
|
||||||
legal, and operational purposes.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>7. Your Choices and Rights</h2>
|
|
||||||
<p>
|
|
||||||
Depending on where you live, you may have rights to access, correct,
|
|
||||||
delete, or object to certain processing of your personal information. To
|
|
||||||
make a request, contact us at
|
|
||||||
<a href="mailto:admin@rosetta.im">admin@rosetta.im</a>.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Because Rosetta minimizes account data and uses cryptographic
|
|
||||||
identifiers, some requests may require you to provide information that
|
|
||||||
helps us verify control of the relevant account or keys.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>8. Children</h2>
|
|
||||||
<p>
|
|
||||||
Rosetta is not directed to children under 13, or the minimum age required
|
|
||||||
in your jurisdiction. If we learn that we have collected personal
|
|
||||||
information from a child without required consent, we will take
|
|
||||||
appropriate steps to delete it.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>9. International Transfers</h2>
|
|
||||||
<p>
|
|
||||||
ROSETTA CLOUD SERVICES LIMITED may process information in countries other
|
|
||||||
than where you live. Where required, we use appropriate safeguards for
|
|
||||||
international transfers.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>10. Security</h2>
|
|
||||||
<p>
|
|
||||||
We use technical and organizational measures designed to protect
|
|
||||||
information. No system is perfectly secure, and users are responsible for
|
|
||||||
protecting their devices, private keys, and account access.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>11. Changes to This Policy</h2>
|
|
||||||
<p>
|
|
||||||
We may update this Privacy Policy from time to time. If we make material
|
|
||||||
changes, we will update the "Last updated" date and, where appropriate,
|
|
||||||
provide additional notice.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>12. Contact</h2>
|
|
||||||
<p class="address">ROSETTA CLOUD SERVICES LIMITED
|
|
||||||
Registered address:
|
|
||||||
UNIT 704C 7/F BLK 3 NAN FUNG IND CITY
|
|
||||||
18 TIN HAU RD
|
|
||||||
TUEN MUN
|
|
||||||
HONG KONG</p>
|
|
||||||
<p>
|
|
||||||
Email: <a href="mailto:admin@rosetta.im">admin@rosetta.im</a><br />
|
|
||||||
Support: <a href="/support/">https://rosetta.im/support/</a>
|
|
||||||
</p>
|
|
||||||
<p>Phone: <a href="tel:+85228910030">+852 2891 0030</a></p>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
<footer class="legal-footer">
|
|
||||||
<p>© 2026 ROSETTA CLOUD SERVICES LIMITED</p>
|
|
||||||
<nav aria-label="Footer links">
|
|
||||||
<a href="/">Rosetta home</a>
|
|
||||||
<a href="/support/">Support</a>
|
|
||||||
<a href="/terms/">Terms of Use</a>
|
|
||||||
</nav>
|
|
||||||
</footer>
|
|
||||||
</main>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,289 +0,0 @@
|
|||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>Terms of Use for Rosetta</title>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content="Terms of Use and End User License Agreement for Rosetta by ROSETTA CLOUD SERVICES LIMITED."
|
|
||||||
/>
|
|
||||||
<link rel="canonical" href="https://rosetta.im/terms/" />
|
|
||||||
<style>
|
|
||||||
:root {
|
|
||||||
color-scheme: light dark;
|
|
||||||
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
||||||
line-height: 1.6;
|
|
||||||
color: #1f2937;
|
|
||||||
background: #ffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
background: linear-gradient(180deg, rgba(0, 102, 255, 0.04), rgba(255, 255, 255, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
main {
|
|
||||||
width: min(880px, calc(100% - 40px));
|
|
||||||
margin: 0 auto;
|
|
||||||
padding: 56px 0 72px;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: #0066ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
margin: 0 0 8px;
|
|
||||||
font-size: clamp(32px, 5vw, 48px);
|
|
||||||
line-height: 1.1;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
margin-top: 36px;
|
|
||||||
font-size: 22px;
|
|
||||||
line-height: 1.25;
|
|
||||||
}
|
|
||||||
|
|
||||||
p,
|
|
||||||
li {
|
|
||||||
font-size: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.muted {
|
|
||||||
color: #6b7280;
|
|
||||||
}
|
|
||||||
|
|
||||||
.back {
|
|
||||||
display: inline-block;
|
|
||||||
margin-bottom: 28px;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.address {
|
|
||||||
white-space: pre-line;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
:root {
|
|
||||||
color: #f3f4f6;
|
|
||||||
background: #101113;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
background: linear-gradient(180deg, rgba(0, 102, 255, 0.12), rgba(16, 17, 19, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
.muted {
|
|
||||||
color: #a1a1aa;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<link rel="stylesheet" href="/legal.css" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<main class="page">
|
|
||||||
<header class="topbar">
|
|
||||||
<a class="brand" href="/" aria-label="Rosetta home">
|
|
||||||
<span class="brand-mark"><img src="/rosetta-logo.png" alt="" /></span>
|
|
||||||
Rosetta
|
|
||||||
</a>
|
|
||||||
<nav aria-label="Legal pages">
|
|
||||||
<a href="/support/">Support</a>
|
|
||||||
<a href="/privacy/">Privacy</a>
|
|
||||||
<a href="/terms/" aria-current="page">Terms</a>
|
|
||||||
</nav>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<article class="document">
|
|
||||||
<header class="document-header">
|
|
||||||
<p class="eyebrow">Rosetta legal</p>
|
|
||||||
<h1>Terms of Use</h1>
|
|
||||||
<p class="updated">Last updated: May 22, 2026</p>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="document-content">
|
|
||||||
|
|
||||||
<p class="lead">
|
|
||||||
These Terms of Use and End User License Agreement ("Terms") govern your
|
|
||||||
use of Rosetta, an end-to-end encrypted messaging application operated by
|
|
||||||
ROSETTA CLOUD SERVICES LIMITED ("Rosetta", "we", "us", or "our").
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
By downloading, installing, or using Rosetta, you agree to these Terms.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>1. Agreement Between You and Rosetta</h2>
|
|
||||||
<p>
|
|
||||||
These Terms are concluded between you and ROSETTA CLOUD SERVICES LIMITED
|
|
||||||
only, and not with Apple. We, not Apple, are solely responsible for
|
|
||||||
Rosetta and its content.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>2. License</h2>
|
|
||||||
<p>
|
|
||||||
We grant you a limited, non-exclusive, non-transferable, revocable
|
|
||||||
license to use Rosetta for personal or lawful business communication on
|
|
||||||
Apple-branded products that you own or control, as permitted by the Apple
|
|
||||||
Media Services Terms and Conditions, including applicable Family Sharing,
|
|
||||||
volume purchasing, or Legacy Contacts rules.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
You may not copy, modify, reverse engineer, decompile, resell,
|
|
||||||
sublicense, rent, lease, or distribute Rosetta except as permitted by
|
|
||||||
applicable law.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>3. Privacy</h2>
|
|
||||||
<p>
|
|
||||||
Your use of Rosetta is also governed by our Privacy Policy, available at
|
|
||||||
<a href="/privacy/">https://rosetta.im/privacy/</a>.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>4. Encrypted Messaging</h2>
|
|
||||||
<p>
|
|
||||||
Rosetta is designed for end-to-end encrypted communication. You are
|
|
||||||
responsible for protecting your device, private keys, and access
|
|
||||||
credentials. If you lose access to your device or keys, we may not be
|
|
||||||
able to restore your messages or account data.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>5. Acceptable Use</h2>
|
|
||||||
<p>You agree not to use Rosetta to:</p>
|
|
||||||
<ul>
|
|
||||||
<li>violate any law or regulation;</li>
|
|
||||||
<li>infringe the rights of others;</li>
|
|
||||||
<li>send spam, malware, scams, threats, harassment, or unlawful content;</li>
|
|
||||||
<li>
|
|
||||||
attempt to disrupt, overload, reverse engineer, or compromise Rosetta
|
|
||||||
or its infrastructure;
|
|
||||||
</li>
|
|
||||||
<li>impersonate another person or misrepresent your identity;</li>
|
|
||||||
<li>use Rosetta for any prohibited or sanctioned activity.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h2>6. No Emergency Use</h2>
|
|
||||||
<p>
|
|
||||||
Rosetta is not designed for emergency calls, emergency messaging, or
|
|
||||||
communications where failure or delay could cause death, personal injury,
|
|
||||||
or serious damage. Use official emergency channels when needed.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>7. User Content</h2>
|
|
||||||
<p>
|
|
||||||
You retain ownership of the content you create or send through Rosetta.
|
|
||||||
You grant us the limited rights necessary to operate the service, such as
|
|
||||||
routing encrypted messages and maintaining service security. We do not
|
|
||||||
claim ownership of your messages or files.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>8. Updates and Availability</h2>
|
|
||||||
<p>
|
|
||||||
We may update, modify, suspend, or discontinue Rosetta or parts of the
|
|
||||||
service at any time. Some features may require an internet connection or
|
|
||||||
a compatible device and operating system.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>9. Fees</h2>
|
|
||||||
<p>
|
|
||||||
Rosetta is currently offered as a free application unless stated
|
|
||||||
otherwise. If paid features, subscriptions, or in-app purchases are
|
|
||||||
introduced through Apple, Apple's payment and subscription terms will
|
|
||||||
apply.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>10. Maintenance and Support</h2>
|
|
||||||
<p>
|
|
||||||
ROSETTA CLOUD SERVICES LIMITED is solely responsible for providing
|
|
||||||
maintenance and support for Rosetta. Apple has no obligation to provide
|
|
||||||
maintenance or support services for Rosetta.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Support contact: <a href="mailto:admin@rosetta.im">admin@rosetta.im</a><br />
|
|
||||||
Support centre: <a href="/support/">https://rosetta.im/support/</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>11. Warranty</h2>
|
|
||||||
<p>
|
|
||||||
Rosetta is provided "as is" and "as available" to the maximum extent
|
|
||||||
permitted by law. If Rosetta fails to conform to any applicable warranty,
|
|
||||||
you may notify Apple, and Apple may refund the purchase price, if any,
|
|
||||||
for the app. To the maximum extent permitted by law, Apple has no other
|
|
||||||
warranty obligation for Rosetta.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>12. Product Claims</h2>
|
|
||||||
<p>
|
|
||||||
ROSETTA CLOUD SERVICES LIMITED, not Apple, is responsible for addressing
|
|
||||||
any claims relating to Rosetta, including product liability claims, legal
|
|
||||||
or regulatory claims, and claims under consumer protection or similar
|
|
||||||
laws.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>13. Intellectual Property Claims</h2>
|
|
||||||
<p>
|
|
||||||
If a third party claims that Rosetta or your use of Rosetta infringes
|
|
||||||
intellectual property rights, ROSETTA CLOUD SERVICES LIMITED, not Apple,
|
|
||||||
is responsible for the investigation, defense, settlement, and discharge
|
|
||||||
of that claim.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>14. Legal Compliance</h2>
|
|
||||||
<p>
|
|
||||||
You represent that you are not located in a country subject to a U.S.
|
|
||||||
Government embargo or designated by the U.S. Government as a "terrorist
|
|
||||||
supporting" country, and that you are not listed on any U.S. Government
|
|
||||||
list of prohibited or restricted parties.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>15. Third-Party Beneficiary</h2>
|
|
||||||
<p>
|
|
||||||
Apple and Apple's subsidiaries are third-party beneficiaries of these
|
|
||||||
Terms. Upon your acceptance of these Terms, Apple has the right to
|
|
||||||
enforce these Terms against you as a third-party beneficiary.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>16. Termination</h2>
|
|
||||||
<p>
|
|
||||||
We may suspend or terminate access to Rosetta if you violate these Terms,
|
|
||||||
create risk for other users, or use the service unlawfully. You may stop
|
|
||||||
using Rosetta at any time.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>17. Limitation of Liability</h2>
|
|
||||||
<p>
|
|
||||||
To the maximum extent permitted by law, ROSETTA CLOUD SERVICES LIMITED
|
|
||||||
will not be liable for indirect, incidental, special, consequential, or
|
|
||||||
punitive damages, or for loss of data, profits, goodwill, or business
|
|
||||||
opportunities arising from your use of Rosetta.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>18. Governing Law</h2>
|
|
||||||
<p>
|
|
||||||
These Terms are governed by the laws of Hong Kong, unless local consumer
|
|
||||||
protection law requires otherwise.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>19. Contact</h2>
|
|
||||||
<p class="address">ROSETTA CLOUD SERVICES LIMITED
|
|
||||||
Registered address:
|
|
||||||
UNIT 704C 7/F BLK 3 NAN FUNG IND CITY
|
|
||||||
18 TIN HAU RD
|
|
||||||
TUEN MUN
|
|
||||||
HONG KONG</p>
|
|
||||||
<p>Email: <a href="mailto:admin@rosetta.im">admin@rosetta.im</a></p>
|
|
||||||
<p>Phone: <a href="tel:+85228910030">+852 2891 0030</a></p>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
<footer class="legal-footer">
|
|
||||||
<p>© 2026 ROSETTA CLOUD SERVICES LIMITED</p>
|
|
||||||
<nav aria-label="Footer links">
|
|
||||||
<a href="/">Rosetta home</a>
|
|
||||||
<a href="/support/">Support</a>
|
|
||||||
<a href="/privacy/">Privacy Policy</a>
|
|
||||||
</nav>
|
|
||||||
</footer>
|
|
||||||
</main>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
28
src/App.tsx
28
src/App.tsx
@@ -1,6 +1,7 @@
|
|||||||
import '@mantine/core/styles.css';
|
import '@mantine/core/styles.css';
|
||||||
|
|
||||||
import { MantineProvider } from '@mantine/core';
|
import { MantineProvider } from '@mantine/core';
|
||||||
|
import { Route, Routes } from 'react-router-dom';
|
||||||
import { HeroTitle } from './components/HeroTitle/HeroTitle';
|
import { HeroTitle } from './components/HeroTitle/HeroTitle';
|
||||||
import { DownloadCenter } from './components/DownloadCenter/DownloadCenter';
|
import { DownloadCenter } from './components/DownloadCenter/DownloadCenter';
|
||||||
import { FeaturesGrid } from './components/FeaturesGrid/FeaturesGrid';
|
import { FeaturesGrid } from './components/FeaturesGrid/FeaturesGrid';
|
||||||
@@ -8,17 +9,32 @@ import { SEO } from './components/SEO/SEO';
|
|||||||
import './style.css'
|
import './style.css'
|
||||||
import { MessageSteps } from './components/MessageSteps/MessageSteps';
|
import { MessageSteps } from './components/MessageSteps/MessageSteps';
|
||||||
import { Footer } from './components/Footer/Footer';
|
import { Footer } from './components/Footer/Footer';
|
||||||
|
import { PrivacyPage } from './pages/PrivacyPage';
|
||||||
|
import { TermsPage } from './pages/TermsPage';
|
||||||
|
import { ScrollToTop } from './components/ScrollToTop/ScrollToTop';
|
||||||
|
|
||||||
|
function LandingPage() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<SEO />
|
||||||
|
<HeroTitle />
|
||||||
|
<FeaturesGrid />
|
||||||
|
<MessageSteps />
|
||||||
|
<DownloadCenter />
|
||||||
|
<Footer />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export default function App() {
|
export default function App() {
|
||||||
return (
|
return (
|
||||||
<MantineProvider>
|
<MantineProvider>
|
||||||
<SEO />
|
<ScrollToTop />
|
||||||
<HeroTitle></HeroTitle>
|
<Routes>
|
||||||
<FeaturesGrid></FeaturesGrid>
|
<Route path="/" element={<LandingPage />} />
|
||||||
<MessageSteps></MessageSteps>
|
<Route path="/privacy" element={<PrivacyPage />} />
|
||||||
<DownloadCenter></DownloadCenter>
|
<Route path="/terms" element={<TermsPage />} />
|
||||||
<Footer></Footer>
|
</Routes>
|
||||||
</MantineProvider>
|
</MantineProvider>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { Anchor, Text } from '@mantine/core';
|
import { Anchor, Text } from '@mantine/core';
|
||||||
|
import { Link } from 'react-router-dom';
|
||||||
import classes from './Footer.module.css';
|
import classes from './Footer.module.css';
|
||||||
|
|
||||||
const LEGAL_NAME = 'ROSETTA CLOUD SERVICES LIMITED';
|
const LEGAL_NAME = 'ROSETTA CLOUD SERVICES LIMITED';
|
||||||
@@ -15,10 +16,10 @@ export function Footer() {
|
|||||||
<Anchor href="/support/" size="sm" c="dimmed">
|
<Anchor href="/support/" size="sm" c="dimmed">
|
||||||
Support
|
Support
|
||||||
</Anchor>
|
</Anchor>
|
||||||
<Anchor href="/privacy/" size="sm" c="dimmed">
|
<Anchor component={Link} to="/privacy" size="sm" c="dimmed">
|
||||||
Privacy Policy
|
Privacy Policy
|
||||||
</Anchor>
|
</Anchor>
|
||||||
<Anchor href="/terms/" size="sm" c="dimmed">
|
<Anchor component={Link} to="/terms" size="sm" c="dimmed">
|
||||||
Terms of Use
|
Terms of Use
|
||||||
</Anchor>
|
</Anchor>
|
||||||
</nav>
|
</nav>
|
||||||
|
|||||||
163
src/components/LegalPage/LegalPage.module.css
Normal file
163
src/components/LegalPage/LegalPage.module.css
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
.page {
|
||||||
|
min-height: 100vh;
|
||||||
|
background:
|
||||||
|
radial-gradient(circle at 50% 0%, light-dark(rgba(34, 139, 230, 0.12), rgba(34, 139, 230, 0.16)), transparent 34rem),
|
||||||
|
light-dark(var(--mantine-color-gray-0), var(--mantine-color-dark-8));
|
||||||
|
}
|
||||||
|
|
||||||
|
.shell {
|
||||||
|
padding-top: var(--mantine-spacing-lg);
|
||||||
|
padding-bottom: calc(var(--mantine-spacing-xl) * 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
min-height: 58px;
|
||||||
|
padding-bottom: var(--mantine-spacing-md);
|
||||||
|
border-bottom: 1px solid light-dark(var(--mantine-color-gray-3), var(--mantine-color-dark-5));
|
||||||
|
}
|
||||||
|
|
||||||
|
.brand {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: var(--mantine-spacing-xs);
|
||||||
|
color: light-dark(var(--mantine-color-dark-9), var(--mantine-color-white));
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brand img {
|
||||||
|
border-radius: var(--mantine-radius-sm);
|
||||||
|
}
|
||||||
|
|
||||||
|
.main {
|
||||||
|
width: min(100%, 820px);
|
||||||
|
margin: 0 auto;
|
||||||
|
padding-top: 76px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.intro {
|
||||||
|
padding: 0 var(--mantine-spacing-md) calc(var(--mantine-spacing-xl) * 1.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
margin-top: var(--mantine-spacing-sm);
|
||||||
|
color: light-dark(var(--mantine-color-black), var(--mantine-color-white));
|
||||||
|
font-family: Outfit, var(--mantine-font-family);
|
||||||
|
font-size: clamp(40px, 7vw, 62px);
|
||||||
|
font-weight: 500;
|
||||||
|
letter-spacing: -0.03em;
|
||||||
|
line-height: 1.08;
|
||||||
|
}
|
||||||
|
|
||||||
|
.document {
|
||||||
|
padding: 44px 48px 52px;
|
||||||
|
background: light-dark(rgba(255, 255, 255, 0.9), rgba(20, 21, 23, 0.9));
|
||||||
|
border-color: light-dark(var(--mantine-color-gray-2), var(--mantine-color-dark-5));
|
||||||
|
backdrop-filter: blur(12px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.lead {
|
||||||
|
margin: 0;
|
||||||
|
color: light-dark(var(--mantine-color-gray-8), var(--mantine-color-dark-0));
|
||||||
|
font-size: var(--mantine-font-size-lg);
|
||||||
|
line-height: 1.65;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text,
|
||||||
|
.list {
|
||||||
|
color: light-dark(var(--mantine-color-gray-7), var(--mantine-color-dark-1));
|
||||||
|
font-size: var(--mantine-font-size-md);
|
||||||
|
line-height: 1.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text {
|
||||||
|
margin: 0 0 var(--mantine-spacing-md);
|
||||||
|
}
|
||||||
|
|
||||||
|
.text:last-child,
|
||||||
|
.address:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list {
|
||||||
|
margin-bottom: var(--mantine-spacing-md);
|
||||||
|
padding-left: var(--mantine-spacing-xs);
|
||||||
|
}
|
||||||
|
|
||||||
|
.list li::marker {
|
||||||
|
color: var(--mantine-color-blue-5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.section {
|
||||||
|
margin-top: 42px;
|
||||||
|
padding-top: 36px;
|
||||||
|
border-top: 1px solid light-dark(var(--mantine-color-gray-2), var(--mantine-color-dark-5));
|
||||||
|
}
|
||||||
|
|
||||||
|
.sectionTitle {
|
||||||
|
margin: 0 0 var(--mantine-spacing-md);
|
||||||
|
color: light-dark(var(--mantine-color-dark-9), var(--mantine-color-white));
|
||||||
|
font-family: Outfit, var(--mantine-font-family);
|
||||||
|
font-size: clamp(22px, 3vw, 28px);
|
||||||
|
font-weight: 500;
|
||||||
|
line-height: 1.25;
|
||||||
|
}
|
||||||
|
|
||||||
|
.document a {
|
||||||
|
color: light-dark(var(--mantine-color-blue-7), var(--mantine-color-blue-3));
|
||||||
|
text-underline-offset: 3px;
|
||||||
|
overflow-wrap: anywhere;
|
||||||
|
}
|
||||||
|
|
||||||
|
.address {
|
||||||
|
margin: var(--mantine-spacing-md) 0;
|
||||||
|
border-left: 3px solid var(--mantine-color-blue-5);
|
||||||
|
background: light-dark(var(--mantine-color-blue-0), var(--mantine-color-dark-6));
|
||||||
|
}
|
||||||
|
|
||||||
|
.address p {
|
||||||
|
margin: 0;
|
||||||
|
color: light-dark(var(--mantine-color-gray-8), var(--mantine-color-dark-0));
|
||||||
|
line-height: 1.65;
|
||||||
|
white-space: pre-line;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
margin-top: 72px;
|
||||||
|
padding-top: var(--mantine-spacing-lg);
|
||||||
|
border-top: 1px solid light-dark(var(--mantine-color-gray-3), var(--mantine-color-dark-5));
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 48em) {
|
||||||
|
.main {
|
||||||
|
padding-top: 52px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.document {
|
||||||
|
padding: 32px 24px 40px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 36em) {
|
||||||
|
.shell {
|
||||||
|
padding-inline: var(--mantine-spacing-md);
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
align-items: flex-start;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.intro {
|
||||||
|
padding-inline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.document {
|
||||||
|
margin-inline: calc(var(--mantine-spacing-xs) * -1);
|
||||||
|
padding-inline: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
align-items: flex-start;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
}
|
||||||
165
src/components/LegalPage/LegalPage.tsx
Normal file
165
src/components/LegalPage/LegalPage.tsx
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
import type { ReactNode } from 'react';
|
||||||
|
import {
|
||||||
|
Anchor,
|
||||||
|
Box,
|
||||||
|
Container,
|
||||||
|
Group,
|
||||||
|
List,
|
||||||
|
Paper,
|
||||||
|
Text,
|
||||||
|
Title,
|
||||||
|
} from '@mantine/core';
|
||||||
|
import { Link } from 'react-router-dom';
|
||||||
|
import { RosettaLogo } from '../RosettaLogo/RosettaLogo';
|
||||||
|
import classes from './LegalPage.module.css';
|
||||||
|
|
||||||
|
type LegalRoute = 'privacy' | 'terms';
|
||||||
|
|
||||||
|
interface LegalPageProps {
|
||||||
|
active: LegalRoute;
|
||||||
|
title: string;
|
||||||
|
updated: string;
|
||||||
|
children: ReactNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface LegalSectionProps {
|
||||||
|
title: string;
|
||||||
|
children: ReactNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function LegalPage({ active, title, updated, children }: LegalPageProps) {
|
||||||
|
const currentYear = new Date().getFullYear();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Box className={classes.page}>
|
||||||
|
<Container size="lg" className={classes.shell}>
|
||||||
|
<Group component="header" justify="space-between" className={classes.header}>
|
||||||
|
<Anchor
|
||||||
|
component={Link}
|
||||||
|
to="/"
|
||||||
|
className={classes.brand}
|
||||||
|
aria-label="Rosetta home"
|
||||||
|
>
|
||||||
|
<RosettaLogo size={34} />
|
||||||
|
<Text component="span" fw={700} fz="lg">
|
||||||
|
Rosetta
|
||||||
|
</Text>
|
||||||
|
</Anchor>
|
||||||
|
|
||||||
|
<Group component="nav" gap="lg" aria-label="Legal pages">
|
||||||
|
<Anchor href="/support/" c="dimmed" size="sm">
|
||||||
|
Support
|
||||||
|
</Anchor>
|
||||||
|
<Anchor
|
||||||
|
component={Link}
|
||||||
|
to="/privacy"
|
||||||
|
c={active === 'privacy' ? 'blue' : 'dimmed'}
|
||||||
|
fw={active === 'privacy' ? 600 : 400}
|
||||||
|
size="sm"
|
||||||
|
aria-current={active === 'privacy' ? 'page' : undefined}
|
||||||
|
>
|
||||||
|
Privacy
|
||||||
|
</Anchor>
|
||||||
|
<Anchor
|
||||||
|
component={Link}
|
||||||
|
to="/terms"
|
||||||
|
c={active === 'terms' ? 'blue' : 'dimmed'}
|
||||||
|
fw={active === 'terms' ? 600 : 400}
|
||||||
|
size="sm"
|
||||||
|
aria-current={active === 'terms' ? 'page' : undefined}
|
||||||
|
>
|
||||||
|
Terms
|
||||||
|
</Anchor>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
|
||||||
|
<Box component="main" className={classes.main}>
|
||||||
|
<Box className={classes.intro}>
|
||||||
|
<Text tt="uppercase" fw={700} fz="xs" c="blue" lts="0.08em">
|
||||||
|
Rosetta legal
|
||||||
|
</Text>
|
||||||
|
<Title order={1} className={classes.title}>
|
||||||
|
{title}
|
||||||
|
</Title>
|
||||||
|
<Text c="dimmed" mt="md">
|
||||||
|
Last updated: {updated}
|
||||||
|
</Text>
|
||||||
|
</Box>
|
||||||
|
|
||||||
|
<Paper
|
||||||
|
component="article"
|
||||||
|
radius="lg"
|
||||||
|
withBorder
|
||||||
|
shadow="sm"
|
||||||
|
className={classes.document}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</Paper>
|
||||||
|
</Box>
|
||||||
|
|
||||||
|
<Group component="footer" justify="space-between" className={classes.footer}>
|
||||||
|
<Text c="dimmed" fz="xs">
|
||||||
|
© {currentYear} ROSETTA CLOUD SERVICES LIMITED
|
||||||
|
</Text>
|
||||||
|
<Group component="nav" gap="md" aria-label="Footer links">
|
||||||
|
<Anchor component={Link} to="/" c="dimmed" size="xs">
|
||||||
|
Rosetta home
|
||||||
|
</Anchor>
|
||||||
|
<Anchor href="/support/" c="dimmed" size="xs">
|
||||||
|
Support
|
||||||
|
</Anchor>
|
||||||
|
<Anchor
|
||||||
|
component={Link}
|
||||||
|
to={active === 'privacy' ? '/terms' : '/privacy'}
|
||||||
|
c="dimmed"
|
||||||
|
size="xs"
|
||||||
|
>
|
||||||
|
{active === 'privacy' ? 'Terms of Use' : 'Privacy Policy'}
|
||||||
|
</Anchor>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</Container>
|
||||||
|
</Box>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function LegalSection({ title, children }: LegalSectionProps) {
|
||||||
|
return (
|
||||||
|
<Box component="section" className={classes.section}>
|
||||||
|
<Title order={2} className={classes.sectionTitle}>
|
||||||
|
{title}
|
||||||
|
</Title>
|
||||||
|
{children}
|
||||||
|
</Box>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function LegalText({
|
||||||
|
children,
|
||||||
|
lead = false,
|
||||||
|
}: {
|
||||||
|
children: ReactNode;
|
||||||
|
lead?: boolean;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<Text component="p" className={lead ? classes.lead : classes.text}>
|
||||||
|
{children}
|
||||||
|
</Text>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function LegalList({ children }: { children: ReactNode }) {
|
||||||
|
return (
|
||||||
|
<List spacing="xs" className={classes.list}>
|
||||||
|
{children}
|
||||||
|
</List>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function LegalAddress({ children }: { children: ReactNode }) {
|
||||||
|
return (
|
||||||
|
<Paper radius="md" p="md" className={classes.address}>
|
||||||
|
<Text component="p">{children}</Text>
|
||||||
|
</Paper>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -5,28 +5,31 @@ interface SEOProps {
|
|||||||
description?: string;
|
description?: string;
|
||||||
ogImage?: string;
|
ogImage?: string;
|
||||||
keywords?: string;
|
keywords?: string;
|
||||||
|
canonical?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function SEO({
|
export function SEO({
|
||||||
title = 'Rosetta - Secure Messaging for Everyone',
|
title = 'Rosetta - Secure Messaging for Everyone',
|
||||||
description = 'End-to-end encrypted messaging app with military-grade security. Download for Windows, Linux, and Android.',
|
description = 'End-to-end encrypted messaging app with military-grade security. Download for Windows, Linux, and Android.',
|
||||||
ogImage = '/og-image.png',
|
ogImage = '/og.png',
|
||||||
keywords = 'secure messaging, encrypted chat, private messenger'
|
keywords = 'secure messaging, encrypted chat, private messenger',
|
||||||
|
canonical = 'https://rosetta.im/'
|
||||||
}: SEOProps) {
|
}: SEOProps) {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// Update title
|
|
||||||
document.title = title;
|
document.title = title;
|
||||||
|
|
||||||
// Update meta tags
|
|
||||||
updateMetaTag('name', 'description', description);
|
updateMetaTag('name', 'description', description);
|
||||||
updateMetaTag('name', 'keywords', keywords);
|
updateMetaTag('name', 'keywords', keywords);
|
||||||
updateMetaTag('property', 'og:title', title);
|
updateMetaTag('property', 'og:title', title);
|
||||||
updateMetaTag('property', 'og:description', description);
|
updateMetaTag('property', 'og:description', description);
|
||||||
updateMetaTag('property', 'og:image', ogImage);
|
updateMetaTag('property', 'og:image', ogImage);
|
||||||
|
updateMetaTag('property', 'og:url', canonical);
|
||||||
updateMetaTag('name', 'twitter:title', title);
|
updateMetaTag('name', 'twitter:title', title);
|
||||||
updateMetaTag('name', 'twitter:description', description);
|
updateMetaTag('name', 'twitter:description', description);
|
||||||
updateMetaTag('name', 'twitter:image', ogImage);
|
updateMetaTag('name', 'twitter:image', ogImage);
|
||||||
}, [title, description, ogImage, keywords]);
|
updateMetaTag('name', 'twitter:url', canonical);
|
||||||
|
updateCanonical(canonical);
|
||||||
|
}, [title, description, ogImage, keywords, canonical]);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -42,3 +45,15 @@ function updateMetaTag(attr: string, name: string, content: string) {
|
|||||||
|
|
||||||
element.setAttribute('content', content);
|
element.setAttribute('content', content);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateCanonical(href: string) {
|
||||||
|
let element = document.querySelector<HTMLLinkElement>('link[rel="canonical"]');
|
||||||
|
|
||||||
|
if (!element) {
|
||||||
|
element = document.createElement('link');
|
||||||
|
element.rel = 'canonical';
|
||||||
|
document.head.appendChild(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
element.href = href;
|
||||||
|
}
|
||||||
|
|||||||
12
src/components/ScrollToTop/ScrollToTop.tsx
Normal file
12
src/components/ScrollToTop/ScrollToTop.tsx
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { useEffect } from 'react';
|
||||||
|
import { useLocation } from 'react-router-dom';
|
||||||
|
|
||||||
|
export function ScrollToTop() {
|
||||||
|
const { pathname } = useLocation();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
window.scrollTo({ top: 0, left: 0, behavior: 'instant' });
|
||||||
|
}, [pathname]);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
@@ -1,7 +1,10 @@
|
|||||||
import { createRoot } from 'react-dom/client'
|
import { createRoot } from 'react-dom/client'
|
||||||
|
import { BrowserRouter } from 'react-router-dom'
|
||||||
import App from './App.tsx'
|
import App from './App.tsx'
|
||||||
|
|
||||||
|
|
||||||
createRoot(document.getElementById('root')!).render(
|
createRoot(document.getElementById('root')!).render(
|
||||||
<App />
|
<BrowserRouter>
|
||||||
|
<App />
|
||||||
|
</BrowserRouter>
|
||||||
)
|
)
|
||||||
|
|||||||
179
src/pages/PrivacyPage.tsx
Normal file
179
src/pages/PrivacyPage.tsx
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
import { Anchor, List } from '@mantine/core';
|
||||||
|
import {
|
||||||
|
LegalAddress,
|
||||||
|
LegalList,
|
||||||
|
LegalPage,
|
||||||
|
LegalSection,
|
||||||
|
LegalText,
|
||||||
|
} from '../components/LegalPage/LegalPage';
|
||||||
|
import { SEO } from '../components/SEO/SEO';
|
||||||
|
|
||||||
|
export function PrivacyPage() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<SEO
|
||||||
|
title="Privacy Policy for Rosetta"
|
||||||
|
description="Privacy Policy for Rosetta by ROSETTA CLOUD SERVICES LIMITED: how data is handled in the end-to-end encrypted messenger."
|
||||||
|
canonical="https://rosetta.im/privacy/"
|
||||||
|
keywords="Rosetta privacy policy, encrypted messenger privacy, data protection"
|
||||||
|
/>
|
||||||
|
<LegalPage active="privacy" title="Privacy Policy" updated="May 22, 2026">
|
||||||
|
<LegalText lead>
|
||||||
|
Rosetta IM is operated by ROSETTA CLOUD SERVICES LIMITED ("Rosetta",
|
||||||
|
"we", "us", or "our"). This Privacy Policy
|
||||||
|
explains how we handle information when you use Rosetta, our end-to-end
|
||||||
|
encrypted messaging application, and our website at https://rosetta.im.
|
||||||
|
</LegalText>
|
||||||
|
|
||||||
|
<LegalSection title="1. Information We Collect">
|
||||||
|
<LegalText>
|
||||||
|
Rosetta is designed to minimize data collection. Registration does not
|
||||||
|
require a phone number, email address, or real name. The app uses
|
||||||
|
cryptographic keys and technical identifiers needed to operate the service.
|
||||||
|
</LegalText>
|
||||||
|
<LegalList>
|
||||||
|
<List.Item>
|
||||||
|
Account and cryptographic data: public keys, account identifiers, and
|
||||||
|
related technical data needed to identify users and deliver encrypted
|
||||||
|
messages. Private keys are intended to remain on your device.
|
||||||
|
</List.Item>
|
||||||
|
<List.Item>
|
||||||
|
Encrypted messages and media in transit: message text, files, and media
|
||||||
|
are encrypted before they are sent. Our servers are designed to relay
|
||||||
|
encrypted payloads and encrypted message keys, not to read message
|
||||||
|
contents.
|
||||||
|
</List.Item>
|
||||||
|
<List.Item>
|
||||||
|
Device and app data: app version, operating system, platform,
|
||||||
|
architecture, update request data, IP address, timestamps, and server
|
||||||
|
logs needed for security, reliability, abuse prevention, and update
|
||||||
|
delivery.
|
||||||
|
</List.Item>
|
||||||
|
<List.Item>
|
||||||
|
Support communications: if you contact us, we may process your email
|
||||||
|
address, message content, and any information you choose to provide.
|
||||||
|
</List.Item>
|
||||||
|
</LegalList>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="2. Information We Do Not Collect for Advertising">
|
||||||
|
<LegalText>
|
||||||
|
We do not use third-party advertising SDKs, advertising trackers, or
|
||||||
|
cross-app tracking. We do not sell your personal information.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="3. How We Use Information">
|
||||||
|
<LegalText>We use information only to:</LegalText>
|
||||||
|
<LegalList>
|
||||||
|
<List.Item>provide, maintain, and secure Rosetta;</List.Item>
|
||||||
|
<List.Item>route encrypted messages between users;</List.Item>
|
||||||
|
<List.Item>deliver app updates and downloads;</List.Item>
|
||||||
|
<List.Item>
|
||||||
|
detect abuse, prevent fraud, and protect service integrity;
|
||||||
|
</List.Item>
|
||||||
|
<List.Item>respond to support requests;</List.Item>
|
||||||
|
<List.Item>comply with legal obligations.</List.Item>
|
||||||
|
</LegalList>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="4. End-to-End Encryption">
|
||||||
|
<LegalText>
|
||||||
|
Rosetta is designed so that message content is encrypted before it reaches
|
||||||
|
our servers. Our servers are not intended to have access to decrypted
|
||||||
|
message contents or decrypted media. Messages are stored on users'
|
||||||
|
devices rather than as readable message history on our servers.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="5. Sharing of Information">
|
||||||
|
<LegalText>We may share limited information only with:</LegalText>
|
||||||
|
<LegalList>
|
||||||
|
<List.Item>
|
||||||
|
infrastructure and hosting providers that help us operate Rosetta;
|
||||||
|
</List.Item>
|
||||||
|
<List.Item>professional advisers, if necessary;</List.Item>
|
||||||
|
<List.Item>
|
||||||
|
authorities or other parties when required by law or to protect rights,
|
||||||
|
safety, and security.
|
||||||
|
</List.Item>
|
||||||
|
</LegalList>
|
||||||
|
<LegalText>
|
||||||
|
Any service provider that processes user data for us must protect it
|
||||||
|
consistently with this Privacy Policy.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="6. Retention">
|
||||||
|
<LegalText>
|
||||||
|
Encrypted message data in transit is processed only as needed to deliver the
|
||||||
|
service. Technical logs and support communications are retained only for as
|
||||||
|
long as reasonably necessary for security, reliability, support, legal,
|
||||||
|
and operational purposes.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="7. Your Choices and Rights">
|
||||||
|
<LegalText>
|
||||||
|
Depending on where you live, you may have rights to access, correct, delete,
|
||||||
|
or object to certain processing of your personal information. To make a
|
||||||
|
request, contact us at{' '}
|
||||||
|
<Anchor href="mailto:admin@rosetta.im">admin@rosetta.im</Anchor>.
|
||||||
|
</LegalText>
|
||||||
|
<LegalText>
|
||||||
|
Because Rosetta minimizes account data and uses cryptographic identifiers,
|
||||||
|
some requests may require you to provide information that helps us verify
|
||||||
|
control of the relevant account or keys.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="8. Children">
|
||||||
|
<LegalText>
|
||||||
|
Rosetta is not directed to children under 13, or the minimum age required in
|
||||||
|
your jurisdiction. If we learn that we have collected personal information
|
||||||
|
from a child without required consent, we will take appropriate steps to
|
||||||
|
delete it.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="9. International Transfers">
|
||||||
|
<LegalText>
|
||||||
|
ROSETTA CLOUD SERVICES LIMITED may process information in countries other
|
||||||
|
than where you live. Where required, we use appropriate safeguards for
|
||||||
|
international transfers.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="10. Security">
|
||||||
|
<LegalText>
|
||||||
|
We use technical and organizational measures designed to protect
|
||||||
|
information. No system is perfectly secure, and users are responsible for
|
||||||
|
protecting their devices, private keys, and account access.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="11. Changes to This Policy">
|
||||||
|
<LegalText>
|
||||||
|
We may update this Privacy Policy from time to time. If we make material
|
||||||
|
changes, we will update the "Last updated" date and, where
|
||||||
|
appropriate, provide additional notice.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="12. Contact">
|
||||||
|
<LegalAddress>
|
||||||
|
{'ROSETTA CLOUD SERVICES LIMITED\nRegistered address:\nUNIT 704C 7/F BLK 3 NAN FUNG IND CITY\n18 TIN HAU RD\nTUEN MUN\nHONG KONG'}
|
||||||
|
</LegalAddress>
|
||||||
|
<LegalText>
|
||||||
|
Email: <Anchor href="mailto:admin@rosetta.im">admin@rosetta.im</Anchor>
|
||||||
|
<br />
|
||||||
|
Support: <Anchor href="/support/">https://rosetta.im/support/</Anchor>
|
||||||
|
</LegalText>
|
||||||
|
<LegalText>
|
||||||
|
Phone: <Anchor href="tel:+85228910030">+852 2891 0030</Anchor>
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
</LegalPage>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
222
src/pages/TermsPage.tsx
Normal file
222
src/pages/TermsPage.tsx
Normal file
@@ -0,0 +1,222 @@
|
|||||||
|
import { Anchor, List } from '@mantine/core';
|
||||||
|
import { Link } from 'react-router-dom';
|
||||||
|
import {
|
||||||
|
LegalAddress,
|
||||||
|
LegalList,
|
||||||
|
LegalPage,
|
||||||
|
LegalSection,
|
||||||
|
LegalText,
|
||||||
|
} from '../components/LegalPage/LegalPage';
|
||||||
|
import { SEO } from '../components/SEO/SEO';
|
||||||
|
|
||||||
|
export function TermsPage() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<SEO
|
||||||
|
title="Terms of Use for Rosetta"
|
||||||
|
description="Terms of Use and End User License Agreement for Rosetta by ROSETTA CLOUD SERVICES LIMITED."
|
||||||
|
canonical="https://rosetta.im/terms/"
|
||||||
|
keywords="Rosetta terms of use, end user license agreement, encrypted messenger terms"
|
||||||
|
/>
|
||||||
|
<LegalPage active="terms" title="Terms of Use" updated="May 22, 2026">
|
||||||
|
<LegalText lead>
|
||||||
|
These Terms of Use and End User License Agreement ("Terms") govern
|
||||||
|
your use of Rosetta, an end-to-end encrypted messaging application operated by
|
||||||
|
ROSETTA CLOUD SERVICES LIMITED ("Rosetta", "we",
|
||||||
|
"us", or "our").
|
||||||
|
</LegalText>
|
||||||
|
<LegalText>
|
||||||
|
By downloading, installing, or using Rosetta, you agree to these Terms.
|
||||||
|
</LegalText>
|
||||||
|
|
||||||
|
<LegalSection title="1. Agreement Between You and Rosetta">
|
||||||
|
<LegalText>
|
||||||
|
These Terms are concluded between you and ROSETTA CLOUD SERVICES LIMITED
|
||||||
|
only, and not with Apple. We, not Apple, are solely responsible for Rosetta
|
||||||
|
and its content.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="2. License">
|
||||||
|
<LegalText>
|
||||||
|
We grant you a limited, non-exclusive, non-transferable, revocable license
|
||||||
|
to use Rosetta for personal or lawful business communication on
|
||||||
|
Apple-branded products that you own or control, as permitted by the Apple
|
||||||
|
Media Services Terms and Conditions, including applicable Family Sharing,
|
||||||
|
volume purchasing, or Legacy Contacts rules.
|
||||||
|
</LegalText>
|
||||||
|
<LegalText>
|
||||||
|
You may not copy, modify, reverse engineer, decompile, resell, sublicense,
|
||||||
|
rent, lease, or distribute Rosetta except as permitted by applicable law.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="3. Privacy">
|
||||||
|
<LegalText>
|
||||||
|
Your use of Rosetta is also governed by our Privacy Policy, available at{' '}
|
||||||
|
<Anchor component={Link} to="/privacy">
|
||||||
|
https://rosetta.im/privacy/
|
||||||
|
</Anchor>
|
||||||
|
.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="4. Encrypted Messaging">
|
||||||
|
<LegalText>
|
||||||
|
Rosetta is designed for end-to-end encrypted communication. You are
|
||||||
|
responsible for protecting your device, private keys, and access
|
||||||
|
credentials. If you lose access to your device or keys, we may not be able
|
||||||
|
to restore your messages or account data.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="5. Acceptable Use">
|
||||||
|
<LegalText>You agree not to use Rosetta to:</LegalText>
|
||||||
|
<LegalList>
|
||||||
|
<List.Item>violate any law or regulation;</List.Item>
|
||||||
|
<List.Item>infringe the rights of others;</List.Item>
|
||||||
|
<List.Item>
|
||||||
|
send spam, malware, scams, threats, harassment, or unlawful content;
|
||||||
|
</List.Item>
|
||||||
|
<List.Item>
|
||||||
|
attempt to disrupt, overload, reverse engineer, or compromise Rosetta or
|
||||||
|
its infrastructure;
|
||||||
|
</List.Item>
|
||||||
|
<List.Item>
|
||||||
|
impersonate another person or misrepresent your identity;
|
||||||
|
</List.Item>
|
||||||
|
<List.Item>use Rosetta for any prohibited or sanctioned activity.</List.Item>
|
||||||
|
</LegalList>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="6. No Emergency Use">
|
||||||
|
<LegalText>
|
||||||
|
Rosetta is not designed for emergency calls, emergency messaging, or
|
||||||
|
communications where failure or delay could cause death, personal injury,
|
||||||
|
or serious damage. Use official emergency channels when needed.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="7. User Content">
|
||||||
|
<LegalText>
|
||||||
|
You retain ownership of the content you create or send through Rosetta. You
|
||||||
|
grant us the limited rights necessary to operate the service, such as
|
||||||
|
routing encrypted messages and maintaining service security. We do not
|
||||||
|
claim ownership of your messages or files.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="8. Updates and Availability">
|
||||||
|
<LegalText>
|
||||||
|
We may update, modify, suspend, or discontinue Rosetta or parts of the
|
||||||
|
service at any time. Some features may require an internet connection or a
|
||||||
|
compatible device and operating system.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="9. Fees">
|
||||||
|
<LegalText>
|
||||||
|
Rosetta is currently offered as a free application unless stated otherwise.
|
||||||
|
If paid features, subscriptions, or in-app purchases are introduced through
|
||||||
|
Apple, Apple's payment and subscription terms will apply.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="10. Maintenance and Support">
|
||||||
|
<LegalText>
|
||||||
|
ROSETTA CLOUD SERVICES LIMITED is solely responsible for providing
|
||||||
|
maintenance and support for Rosetta. Apple has no obligation to provide
|
||||||
|
maintenance or support services for Rosetta.
|
||||||
|
</LegalText>
|
||||||
|
<LegalText>
|
||||||
|
Support contact:{' '}
|
||||||
|
<Anchor href="mailto:admin@rosetta.im">admin@rosetta.im</Anchor>
|
||||||
|
<br />
|
||||||
|
Support centre:{' '}
|
||||||
|
<Anchor href="/support/">https://rosetta.im/support/</Anchor>
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="11. Warranty">
|
||||||
|
<LegalText>
|
||||||
|
Rosetta is provided "as is" and "as available" to the
|
||||||
|
maximum extent permitted by law. If Rosetta fails to conform to any
|
||||||
|
applicable warranty, you may notify Apple, and Apple may refund the purchase
|
||||||
|
price, if any, for the app. To the maximum extent permitted by law, Apple
|
||||||
|
has no other warranty obligation for Rosetta.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="12. Product Claims">
|
||||||
|
<LegalText>
|
||||||
|
ROSETTA CLOUD SERVICES LIMITED, not Apple, is responsible for addressing any
|
||||||
|
claims relating to Rosetta, including product liability claims, legal or
|
||||||
|
regulatory claims, and claims under consumer protection or similar laws.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="13. Intellectual Property Claims">
|
||||||
|
<LegalText>
|
||||||
|
If a third party claims that Rosetta or your use of Rosetta infringes
|
||||||
|
intellectual property rights, ROSETTA CLOUD SERVICES LIMITED, not Apple, is
|
||||||
|
responsible for the investigation, defense, settlement, and discharge of
|
||||||
|
that claim.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="14. Legal Compliance">
|
||||||
|
<LegalText>
|
||||||
|
You represent that you are not located in a country subject to a U.S.
|
||||||
|
Government embargo or designated by the U.S. Government as a
|
||||||
|
"terrorist supporting" country, and that you are not listed on any
|
||||||
|
U.S. Government list of prohibited or restricted parties.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="15. Third-Party Beneficiary">
|
||||||
|
<LegalText>
|
||||||
|
Apple and Apple's subsidiaries are third-party beneficiaries of these
|
||||||
|
Terms. Upon your acceptance of these Terms, Apple has the right to enforce
|
||||||
|
these Terms against you as a third-party beneficiary.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="16. Termination">
|
||||||
|
<LegalText>
|
||||||
|
We may suspend or terminate access to Rosetta if you violate these Terms,
|
||||||
|
create risk for other users, or use the service unlawfully. You may stop
|
||||||
|
using Rosetta at any time.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="17. Limitation of Liability">
|
||||||
|
<LegalText>
|
||||||
|
To the maximum extent permitted by law, ROSETTA CLOUD SERVICES LIMITED will
|
||||||
|
not be liable for indirect, incidental, special, consequential, or punitive
|
||||||
|
damages, or for loss of data, profits, goodwill, or business opportunities
|
||||||
|
arising from your use of Rosetta.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="18. Governing Law">
|
||||||
|
<LegalText>
|
||||||
|
These Terms are governed by the laws of Hong Kong, unless local consumer
|
||||||
|
protection law requires otherwise.
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
|
||||||
|
<LegalSection title="19. Contact">
|
||||||
|
<LegalAddress>
|
||||||
|
{'ROSETTA CLOUD SERVICES LIMITED\nRegistered address:\nUNIT 704C 7/F BLK 3 NAN FUNG IND CITY\n18 TIN HAU RD\nTUEN MUN\nHONG KONG'}
|
||||||
|
</LegalAddress>
|
||||||
|
<LegalText>
|
||||||
|
Email: <Anchor href="mailto:admin@rosetta.im">admin@rosetta.im</Anchor>
|
||||||
|
</LegalText>
|
||||||
|
<LegalText>
|
||||||
|
Phone: <Anchor href="tel:+85228910030">+852 2891 0030</Anchor>
|
||||||
|
</LegalText>
|
||||||
|
</LegalSection>
|
||||||
|
</LegalPage>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user