Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
200 changes: 200 additions & 0 deletions access.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="PME-F Repository access, annual update eligibility, privacy, and support terms.">
<link rel="canonical" href="https://pie-menu-editor.com/access.html">
<title>Access, updates & privacy terms — PME-F</title>
<style>
:root {
color-scheme: light;
--background: #cbcbc7;
--text: #181818;
--muted: #525250;
--line: #bdbdb8;
--accent: #972c36;
--link: #171c52;
--content-width: 760px;
}

* { box-sizing: border-box; }

html {
min-height: 100%;
font-family: "IBM Plex Sans", "Helvetica Neue", Arial, sans-serif;
line-height: 1.65;
background:
radial-gradient(circle at 50% 15%, #fdfdfb 0, #f1f1ee 23rem, #e2e2de 45rem, transparent 69rem),
var(--background);
color: var(--text);
}

body { margin: 0; }

a {
color: var(--link);
text-decoration-thickness: 0.08em;
text-underline-offset: 0.2em;
}

a:hover { color: var(--accent); }

.wrap {
width: min(calc(100% - 2.5rem), var(--content-width));
margin-inline: auto;
}

header {
border-bottom: 1px solid var(--line);
background: rgb(255 255 255 / 18%);
}

header .wrap {
display: flex;
align-items: center;
justify-content: space-between;
min-height: 4.5rem;
gap: 1rem;
}

.brand {
color: var(--text);
font-weight: 700;
text-decoration: none;
letter-spacing: -0.02em;
}

main { padding-block: clamp(3.5rem, 9vw, 6rem); }

.eyebrow {
margin: 0 0 0.8rem;
color: var(--accent);
font-size: 0.85rem;
font-weight: 700;
letter-spacing: 0.12em;
text-transform: uppercase;
}

h1 {
max-width: 16ch;
margin: 0 0 1.5rem;
font-size: clamp(2.35rem, 7vw, 4.5rem);
line-height: 1;
letter-spacing: -0.05em;
}

.lead {
max-width: 650px;
margin: 0 0 2.5rem;
color: var(--muted);
font-size: 1.08rem;
}

section {
padding-block: 1.8rem;
border-top: 1px solid var(--line);
}

h2 {
margin: 0 0 0.75rem;
font-size: 1.25rem;
letter-spacing: -0.02em;
}

p { margin: 0.7rem 0; }
section p { color: var(--muted); }
strong { color: var(--text); }

footer {
padding-block: 2rem 3rem;
border-top: 1px solid var(--line);
color: var(--muted);
font-size: 0.9rem;
}

a:focus-visible {
outline: 3px solid var(--link);
outline-offset: 3px;
}
</style>
</head>
<body>
<header>
<div class="wrap">
<a class="brand" href="/">PME-F</a>
<a href="mailto:Support@pie-menu-editor.com">Support</a>
</div>
</header>

<main class="wrap">
<p class="eyebrow">PME-F Repository</p>
<h1>Access, updates &amp; privacy terms</h1>
<p class="lead">
PME-F does not require a PME account, device registration, or DRM. Repository access
is verified from the purchase record provided by the vendor used for your order.
</p>

<section>
<h2>One year of updates</h2>
<p>
Your update period starts at the purchase timestamp recorded by the vendor and lasts
one calendar year. A renewal adds one year from the later of your current update expiry
or the renewal purchase time.
</p>
<p>
Purchases made before this policy took effect receive a transition period through
<strong>2027-08-11T20:35:05.557Z</strong>, one year after the public PME-F 2.1 artifact.
</p>
<p>
After expiry, PME-F does not stop working. You may keep using versions already obtained
and re-download the last safe, compatible release published during your eligible period.
Releases published later are not included.
</p>
<p>
A refunded or disputed purchase loses remote Repository and re-download access. Copies
already received are not remotely disabled.
</p>
</section>

<section>
<h2>Information we keep</h2>
<p>
We retain the minimum records needed to verify a purchase, provide Repository access and
recovery, administer update eligibility, prevent abuse, and provide support. These include
a vendor sale ID and purchase status, an opaque PME-F subject ID, entitlement history and
expiry, and non-reversible credential fingerprints. The setup page does not save the
purchase key you enter. Raw Repository tokens, recovery secrets, purchase keys, and email
addresses are not written to PME-F application logs.
</p>
<p>
Repository requests may record the request time, result, requested artifact or version,
transfer size, Blender and platform compatibility information, and a daily privacy-preserving
network fingerprint derived from a coarse network prefix. PME-F does not store raw IP
addresses in its application database. Security-event records are retained for 80 days.
</p>
</section>

<section>
<h2>Availability and support</h2>
<p>
The update service is provided on a best-effort basis. Continuous availability, automatic
recovery, a fixed release schedule, and compatibility with every future Blender version are
not guaranteed. An update-service outage does not disable an installed copy of PME-F.
</p>
<p>
For help, contact <a href="mailto:Support@pie-menu-editor.com">Support@pie-menu-editor.com</a>
and include your order ID, PME-F version, Blender version, and a short description of the problem.
</p>
</section>
</main>

<footer>
<div class="wrap">
<a href="/">Pie Menu Editor Fork</a>
&middot;
<a href="mailto:Support@pie-menu-editor.com">Support</a>
</div>
</footer>
</body>
</html>
5 changes: 4 additions & 1 deletion credential-setup/index.template.html.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@
<h1 id="setup-title">Set up PME-F</h1>
<p class="intro" id="setup-intro">
Enter the purchase key shown on the page that brought you here. A PME account,
password, or device registration is not required.
password, or device registration is not required. By continuing, you ask PME-F
to verify your purchase and issue Repository access. Read the
<a href="https://pie-menu-editor.com/access.html" rel="noreferrer">access, updates &amp; privacy terms</a>.
</p>

<section class="setup-card" id="verification-panel" aria-labelledby="verify-heading">
Expand Down Expand Up @@ -127,6 +129,7 @@
<footer>
<div class="wrap">
Need help? <!--email_off--><a href="mailto:Support@pie-menu-editor.com">Contact PME-F support</a><!--/email_off-->.
<a href="https://pie-menu-editor.com/access.html" rel="noreferrer">Privacy &amp; terms</a>.
</div>
</footer>

Expand Down
13 changes: 12 additions & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,13 @@
display: flex;
flex-wrap: wrap;
gap: 0.75rem;
margin: 2rem 0 2.25rem;
margin: 2rem 0 0.8rem;
}

.purchase-note {
margin: 0 0 2.25rem;
color: var(--muted);
font-size: 0.92rem;
}

.button {
Expand Down Expand Up @@ -244,6 +250,9 @@ <h1>Pi<span class="letter-gap-ie">e</span> M<span class="letter-gap-small">e</sp
<a class="button primary" href="https://pluglug.gumroad.com/l/pie-menu-editor-fork">Buy on Gumroad</a>
<a class="button" href="https://pluglug.github.io/pme-docs/support_community/changelog.html#changelog-2-0-0">See what changed</a>
</div>
<p class="purchase-note">
Before you buy: <a href="/access.html">access, updates &amp; privacy terms</a>.
</p>

<section id="about">
<h2>About PME-F</h2>
Expand Down Expand Up @@ -285,6 +294,8 @@ <h2>Project history</h2>
<a href="https://blenderartists.org/t/pie-menu-editor-2-0-2/662456/5701?u=pluglug">Blender Artists</a>
&middot;
<a href="mailto:Support@pie-menu-editor.com">Support</a>
&middot;
<a href="/access.html">Privacy &amp; terms</a>
</div>
</footer>
</body>
Expand Down
22 changes: 22 additions & 0 deletions test/public-pages.test.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import assert from "node:assert/strict";
import { readFile } from "node:fs/promises";
import test from "node:test";

const root = new URL("../", import.meta.url);

test("public pages expose one canonical access and privacy policy", async () => {
const [home, access, setupTemplate] = await Promise.all([
readFile(new URL("index.html", root), "utf8"),
readFile(new URL("access.html", root), "utf8"),
readFile(new URL("credential-setup/index.template.html.txt", root), "utf8"),
]);

assert.match(home, /href="\/access\.html"/u);
assert.match(setupTemplate, /href="https:\/\/pie-menu-editor\.com\/access\.html"/u);
assert.match(access, /one calendar year/u);
assert.match(access, /2027-08-11T20:35:05\.557Z/u);
assert.match(access, /does not stop working/u);
assert.match(access, /retained for 80 days/u);
assert.match(access, /does not require a PME account, device registration, or DRM/u);
assert.doesNotMatch(access, /pme_(?:rt|rc)_[A-Za-z0-9_-]+/u);
});
Loading