145 lines
6.5 KiB
TypeScript
145 lines
6.5 KiB
TypeScript
import type { Metadata } from "next";
|
||
|
||
export const metadata: Metadata = {
|
||
title: { absolute: "Eding(由点笔迹) - Privacy Policy" },
|
||
description:
|
||
"Privacy Policy for Eding(由点笔迹), an offline app with no login required. We do not collect, store, or transmit personal information to external servers.",
|
||
openGraph: {
|
||
title: "Eding(由点笔迹) - Privacy Policy",
|
||
description:
|
||
"Eding(由点笔迹)是一款离线 App,无需登录即可使用。我们不收集、存储或传输你的个人信息到外部服务器。",
|
||
},
|
||
};
|
||
|
||
const SUPPORT_EMAIL = "lanmu1818@gmail.com";
|
||
const SUPPORT_SUBJECT = encodeURIComponent("由点笔迹 隐私政策咨询");
|
||
const SUPPORT_MAILTO = `mailto:${SUPPORT_EMAIL}?subject=${SUPPORT_SUBJECT}`;
|
||
|
||
export default function YoudianBijIPrivacyPolicyPage() {
|
||
return (
|
||
<main
|
||
className="min-h-dvh text-foreground"
|
||
style={{
|
||
background:
|
||
"radial-gradient(1200px 600px at 20% -10%, rgba(124, 92, 255, 0.18), transparent 55%), radial-gradient(900px 520px at 90% 10%, rgba(45, 212, 191, 0.14), transparent 50%), linear-gradient(180deg, var(--background), var(--background))",
|
||
}}
|
||
>
|
||
<div className="mx-auto max-w-[980px] px-5 py-8 pb-16">
|
||
<header className="mb-7 flex items-center justify-between gap-4">
|
||
<div className="flex min-w-0 items-center gap-3">
|
||
<div
|
||
aria-hidden="true"
|
||
className="relative h-10 w-10 shrink-0 rounded-xl bg-gradient-to-br from-violet-500 to-teal-400 shadow-2xl"
|
||
>
|
||
<div className="absolute inset-2.5 rounded-lg border border-white/20 bg-white/15" />
|
||
</div>
|
||
<div className="min-w-0">
|
||
<p className="truncate text-sm font-semibold tracking-tight">Eding(由点笔迹)</p>
|
||
<p className="text-xs text-muted-foreground">
|
||
Privacy Policy · 隐私政策
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<a className="text-xs text-muted-foreground hover:underline" href="/riji">
|
||
返回技术支持
|
||
</a>
|
||
</header>
|
||
|
||
<section className="rounded-3xl border border-border bg-card/60 p-7 shadow-2xl backdrop-blur">
|
||
<h1 className="mb-2 text-balance text-3xl font-semibold tracking-tight sm:text-5xl">
|
||
Privacy Policy
|
||
</h1>
|
||
<p className="text-sm text-muted-foreground">Last Updated: 2025-03-11</p>
|
||
<p className="mt-4 text-sm leading-relaxed text-muted-foreground">
|
||
Eding(由点笔迹) is a fully offline note-taking app. We value your privacy and are
|
||
committed to protecting your information.
|
||
</p>
|
||
</section>
|
||
|
||
<div className="mt-8 space-y-3">
|
||
<PolicyItem title="1. Information Collection">
|
||
Eding(由点笔迹) is a fully offline note-taking app. We do not collect, store, or
|
||
transmit any of your personal information to external servers. All notes,
|
||
images, videos, and other content you create are stored locally on your device.
|
||
</PolicyItem>
|
||
|
||
<PolicyItem title="2. Data Storage">
|
||
<ul className="list-disc space-y-1 pl-5 text-sm leading-relaxed text-muted-foreground">
|
||
<li>All note data is saved in local device storage.</li>
|
||
<li>Image and video files are stored in the app’s sandbox directory.</li>
|
||
<li>Encrypted notes are protected using AES encryption.</li>
|
||
<li>Privacy passwords are securely stored in the system Keychain.</li>
|
||
<li>Backup files are exported to the Files app and managed by you.</li>
|
||
</ul>
|
||
</PolicyItem>
|
||
|
||
<PolicyItem title="3. Biometric Authentication">
|
||
Eding(由点笔迹) supports Face ID / Touch ID to unlock encrypted notes. Biometric data
|
||
is managed by the iOS system. The app cannot access or store your biometric
|
||
information.
|
||
</PolicyItem>
|
||
|
||
<PolicyItem title="4. Photo Library Access">
|
||
When you choose to add images or videos, the app requests access to your photo
|
||
library. We only read the media files you select and do not scan or upload your
|
||
photo library content.
|
||
</PolicyItem>
|
||
|
||
<PolicyItem title="5. Network Usage">
|
||
Eding(由点笔迹) does not require a network connection to function. The app does not
|
||
make any network requests and does not include any third-party analytics,
|
||
advertising, or tracking SDKs.
|
||
</PolicyItem>
|
||
|
||
<PolicyItem title="6. Data Deletion">
|
||
You can delete notes at any time by moving them to trash and permanently deleting
|
||
them. Uninstalling the app will permanently remove all local data. We do not
|
||
retain any copies of your data.
|
||
</PolicyItem>
|
||
|
||
<PolicyItem title="7. Children’s Privacy">
|
||
Eding(由点笔迹) does not collect any personal information from any users, including
|
||
children. The app is suitable for users of all ages.
|
||
</PolicyItem>
|
||
|
||
<PolicyItem title="8. Policy Updates">
|
||
If we update this Privacy Policy, we will notify you through app updates.
|
||
Continued use of the app indicates your agreement to the updated policy.
|
||
</PolicyItem>
|
||
|
||
<div className="rounded-2xl border border-border bg-card/50 p-5 shadow-sm">
|
||
<h2 className="mb-1 text-sm font-semibold tracking-tight">Contact</h2>
|
||
<p className="text-sm leading-relaxed text-muted-foreground">
|
||
Questions about this policy? Email us at{" "}
|
||
<a className="underline-offset-4 hover:underline" href={SUPPORT_MAILTO}>
|
||
{SUPPORT_EMAIL}
|
||
</a>
|
||
.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<footer className="mt-10 flex flex-wrap items-center justify-between gap-3 border-t border-border pt-5 text-xs text-muted-foreground">
|
||
<span>Eding(由点笔迹) · Privacy Policy</span>
|
||
<span>Public page (no login required)</span>
|
||
</footer>
|
||
</div>
|
||
</main>
|
||
);
|
||
}
|
||
|
||
function PolicyItem({
|
||
title,
|
||
children,
|
||
}: {
|
||
title: string;
|
||
children: React.ReactNode;
|
||
}) {
|
||
return (
|
||
<section className="rounded-2xl border border-border bg-card/50 p-5 shadow-sm">
|
||
<h2 className="mb-1 text-sm font-semibold tracking-tight">{title}</h2>
|
||
<div className="text-sm leading-relaxed text-muted-foreground">{children}</div>
|
||
</section>
|
||
);
|
||
}
|