diff --git a/apps/treasures/app/components/EpubReader.tsx b/apps/treasures/app/components/EpubReader.tsx index 7b70104..ccf5ec4 100644 --- a/apps/treasures/app/components/EpubReader.tsx +++ b/apps/treasures/app/components/EpubReader.tsx @@ -2,7 +2,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import Link from 'next/link'; -import { useLocale } from 'next-intl'; +import { useLocale, useTranslations } from 'next-intl'; import JSZip from 'jszip'; // ── Types ────────────────────────────────────────────────────────────────── @@ -242,6 +242,7 @@ type HLColor = (typeof HL_COLORS)[number]; export default function EpubReader({ epubUrl, title, author }: Props) { const locale = useLocale(); + const tReader = useTranslations('treasures.reader'); const [phase, setPhase] = useState('downloading'); const [progress, setProgress] = useState(0); @@ -795,6 +796,9 @@ export default function EpubReader({ epubUrl, title, author }: Props) { : fmtBytes(loadedBytes)} )} +

+ {tReader('egwNotice')} {tReader('egwNoticeLink')}. +

); diff --git a/apps/treasures/app/components/TreasureCatalog.tsx b/apps/treasures/app/components/TreasureCatalog.tsx index 3914d68..d9a763f 100644 --- a/apps/treasures/app/components/TreasureCatalog.tsx +++ b/apps/treasures/app/components/TreasureCatalog.tsx @@ -35,6 +35,26 @@ function ScriptureQuote() { ); } +function EgwDisclaimer() { + const t = useTranslations('treasures.catalog'); + return ( +

+ {t.rich('egwDisclaimer', { + estate: (chunks) => ( + + {chunks} + + ), + site: (chunks) => ( + + {chunks} + + ), + })} +

+ ); +} + const BANNER_KEY = 'uploads/998516df-c8b7-4492-a11f-7785412673d6.png'; export default function TreasureCatalog({ @@ -176,6 +196,8 @@ export default function TreasureCatalog({ onLangChange={handleLangChange} /> + +
{loading ? (
diff --git a/apps/treasures/app/globals.css b/apps/treasures/app/globals.css index 46fa4ac..a0045f2 100644 --- a/apps/treasures/app/globals.css +++ b/apps/treasures/app/globals.css @@ -669,6 +669,28 @@ nav { display: block; } +.egw-disclaimer { + max-width: 760px; + margin: 0 auto 2rem; + padding: 0 1.5rem; + font-size: 0.78rem; + line-height: 1.6; + color: var(--muted, #7a7470); + text-align: center; +} + +.egw-disclaimer a { + color: rgba(201, 169, 110, 0.7); + text-decoration: none; + border-bottom: 1px solid rgba(201, 169, 110, 0.25); + transition: color 0.2s, border-color 0.2s; +} + +.egw-disclaimer a:hover { + color: var(--gold, #c9a96e); + border-color: var(--gold, #c9a96e); +} + /* ── RESPONSIVE ── */ @media (max-width: 1200px) { .shop-grid { @@ -821,6 +843,22 @@ nav { letter-spacing: 0.04em; } +.epub-loading__egw-notice { + font-family: 'Cormorant Garamond', serif; + font-size: 0.72rem; + color: var(--muted); + text-align: center; + margin-top: 1.25rem; + line-height: 1.5; + opacity: 0.8; +} + +.epub-loading__egw-notice a { + color: var(--gold); + text-decoration: underline; + text-underline-offset: 2px; +} + /* ── Reader themes ───────────────────────────────────────── */ /* Default (dark) — scoped inside .epub-reader so the rest of the page is unaffected */ .epub-reader { diff --git a/docs/dsgvo.md b/docs/dsgvo.md index a702bbe..548e7d3 100644 --- a/docs/dsgvo.md +++ b/docs/dsgvo.md @@ -41,7 +41,7 @@ These are the only external data recipients currently named in [Datenschutzerkl | Processor | Purpose | Disclosed in | |---|---|---| | Cloudflare | Hosting, Web Analytics, CDN | section4 | -| egwwritings.org (White Estate) | EPUB file delivery for Treasures | section5 | +| egwwritings.org (White Estate) | EPUB file delivery for Treasures | section5 + inline notice in EpubReader | **To add a new processor:** update [de.json + en.json legal.datenschutz](../packages/i18n/src/messages/) AND ship the code change in the same PR. Not a separate PR, not "TODO later". diff --git a/packages/i18n/src/messages/de.json b/packages/i18n/src/messages/de.json index 143eb29..937f611 100644 --- a/packages/i18n/src/messages/de.json +++ b/packages/i18n/src/messages/de.json @@ -633,7 +633,7 @@ "section4Body": "Diese Website wird über Cloudflare Pages gehostet. Cloudflare kann dabei technische Zugriffsdaten (z. B. IP-Adresse, Zeitpunkt des Abrufs) verarbeiten. Websitestatistiken werden über Cloudflare Web Analytics erfasst — cookiefrei, ohne Nutzerprofile und ohne personenbezogene Daten.", "cloudflarePrivacy": "Datenschutzerklärung von Cloudflare", "section5Title": "Externe Inhalte (E-Books)", - "section5Body": "Auf der Plattform „Schätze“ können digitale Bücher im EPUB-Format direkt im Browser gelesen werden. Beim Öffnen eines Buches stellt Ihr Browser eine direkte Verbindung zum externen Dateiserver her (derzeit: egwwritings.org, betrieben von der Ellen G. White Estate, Inc., USA), von dem die EPUB-Datei bezogen wird. Dabei wird Ihre IP-Adresse sowie der Zeitpunkt des Abrufs an diesen Drittanbieter übermittelt. Die Verarbeitung erfolgt auf Grundlage unseres berechtigten Interesses an der Bereitstellung des angeforderten Inhalts (Art. 6 Abs. 1 lit. f DSGVO). Weitere Informationen finden Sie in der", + "section5Body": "Auf der Plattform „Schätze“ können digitale Bücher im EPUB-Format direkt im Browser gelesen werden. Beim bloßen Durchsuchen des Katalogs werden keine Daten an externe Server übertragen. Erst wenn Sie aktiv ein Buch öffnen, stellt Ihr Browser eine direkte Verbindung zum externen Dateiserver her (derzeit: egwwritings.org, betrieben von der Ellen G. White Estate, Inc., USA), von dem die EPUB-Datei bezogen wird. Dabei werden Ihre IP-Adresse sowie der Zeitpunkt des Abrufs an diesen Drittanbieter in den USA übermittelt. Rechtsgrundlage für die Datenverarbeitung ist Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse an der Bereitstellung des angeforderten Inhalts); für die Übermittlung in die USA gilt Art. 49 Abs. 1 lit. b DSGVO (Erforderlichkeit zur Vertragserfüllung auf Anfrage der betroffenen Person). Weitere Informationen finden Sie in der", "section5PrivacyLink": "Datenschutzerklärung der Ellen G. White Estate", "section6Title": "Buchanfrage (Geschenk erhalten)", "section6Body": "Wenn Sie über das Formular „Geschenk erhalten“ Bücher anfordern, verarbeiten wir folgende Daten: Name, E-Mail-Adresse, Postanschrift (Straße, PLZ, Stadt), Land sowie optional Telefonnummer und eine persönliche Mitteilung. Rechtsgrundlage ist Ihre Einwilligung gemäß Art. 6 Abs. 1 lit. a DSGVO. Die Daten werden ausschließlich für die Bearbeitung und den Versand der Anfrage verwendet und nach Abschluss des Versands gelöscht. Sie können Ihre Einwilligung jederzeit per E-Mail widerrufen:", @@ -747,7 +747,8 @@ "empty": "Keine Ergebnisse für diese Auswahl.", "scriptureText": "Deine Zeugnisse sind mein ewiges Erbe; denn sie sind meines Herzens Wonne.", "scriptureRef": "Psalm 119,111", - "biblesTitle": "Heilige Schrift" + "biblesTitle": "Heilige Schrift", + "egwDisclaimer": "Einige Bücher auf dieser Seite sind Eigentum der Ellen G. White Estate, Inc. (USA). Die EPUB-Dateien werden direkt von egwwritings.org bereitgestellt — wir ermöglichen lediglich den bequemen Zugang." }, "bookRequest": { "bannerEyebrow": "Kostenlose Bücher", @@ -796,6 +797,10 @@ "landDe": "Deutschland", "landAt": "Österreich", "landCh": "Schweiz" + }, + "reader": { + "egwNotice": "Beim Laden verbindet sich Ihr Browser direkt mit egwwritings.org (USA). Mehr in der", + "egwNoticeLink": "Datenschutzerklärung" } } } diff --git a/packages/i18n/src/messages/en.json b/packages/i18n/src/messages/en.json index 218d374..ed2fce0 100644 --- a/packages/i18n/src/messages/en.json +++ b/packages/i18n/src/messages/en.json @@ -633,7 +633,7 @@ "section4Body": "This website is hosted via Cloudflare Pages. Cloudflare may process technical access data (e.g. IP address, time of access). Website statistics are collected via Cloudflare Web Analytics — cookie-free, without user profiles and without personal data.", "cloudflarePrivacy": "Cloudflare Privacy Policy", "section5Title": "External Content (E-Books)", - "section5Body": "The “Treasures” platform allows digital books in EPUB format to be read directly in the browser. When opening a book, your browser establishes a direct connection to the external file server (currently: egwwritings.org, operated by the Ellen G. White Estate, Inc., USA) from which the EPUB file is retrieved. In doing so, your IP address and the time of access are transmitted to this third-party provider. Processing is based on our legitimate interest in delivering the requested content (Art. 6(1)(f) GDPR). For more information, please see the", + "section5Body": "The “Treasures” platform allows digital books in EPUB format to be read directly in the browser. No data is transmitted to external servers when you browse the catalog. Only when you actively open a book does your browser establish a direct connection to the external file server (currently: egwwritings.org, operated by the Ellen G. White Estate, Inc., USA) from which the EPUB file is retrieved. In doing so, your IP address and the time of access are transmitted to this third-party provider in the USA. The legal basis for processing is Art. 6(1)(f) GDPR (legitimate interest in delivering the requested content); for the transfer to the USA, Art. 49(1)(b) GDPR applies (transfer necessary for the performance of a contract at the request of the data subject). For more information, please see the", "section5PrivacyLink": "Ellen G. White Estate Privacy Policy", "section6Title": "Book Request (Receive a Gift)", "section6Body": "When you request books through the \"Receive a Gift\" form, we process the following data: name, email address, postal address (street, postal code, city), country, and optionally phone number and a personal message. The legal basis is your consent pursuant to Art. 6(1)(a) GDPR. The data is used solely for processing and shipping your request and will be deleted after delivery is complete. You may revoke your consent at any time by email:", @@ -747,7 +747,8 @@ "empty": "No results for this selection.", "scriptureText": "Your testimonies are my heritage forever, for they are the joy of my heart.", "scriptureRef": "Psalm 119:111", - "biblesTitle": "Holy Scripture" + "biblesTitle": "Holy Scripture", + "egwDisclaimer": "Some books on this page are the property of Ellen G. White Estate, Inc. (USA). The EPUB files are delivered directly from egwwritings.org — we simply provide convenient access." }, "bookRequest": { "bannerEyebrow": "Free Books", @@ -796,6 +797,10 @@ "landDe": "Germany", "landAt": "Austria", "landCh": "Switzerland" + }, + "reader": { + "egwNotice": "When loading, your browser connects directly to egwwritings.org (USA). More in the", + "egwNoticeLink": "Privacy Policy" } } } diff --git a/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-desktop-dark.png b/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-desktop-dark.png index 559933e..0fceabc 100644 Binary files a/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-desktop-dark.png and b/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-desktop-dark.png differ diff --git a/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-desktop-light.png b/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-desktop-light.png index 3a68b40..359cebb 100644 Binary files a/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-desktop-light.png and b/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-desktop-light.png differ diff --git a/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-laptop-dark.png b/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-laptop-dark.png index 096764a..9185d9e 100644 Binary files a/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-laptop-dark.png and b/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-laptop-dark.png differ diff --git a/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-laptop-light.png b/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-laptop-light.png index b41a66c..18c9014 100644 Binary files a/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-laptop-light.png and b/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-laptop-light.png differ diff --git a/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-mobile-dark.png b/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-mobile-dark.png index f11d5d3..ec04eab 100644 Binary files a/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-mobile-dark.png and b/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-mobile-dark.png differ diff --git a/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-mobile-light.png b/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-mobile-light.png index e6d7672..130bfe9 100644 Binary files a/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-mobile-light.png and b/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-mobile-light.png differ diff --git a/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-tablet-dark.png b/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-tablet-dark.png index 9608114..7576fc1 100644 Binary files a/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-tablet-dark.png and b/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-tablet-dark.png differ diff --git a/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-tablet-light.png b/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-tablet-light.png index c9a34d9..9d29b67 100644 Binary files a/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-tablet-light.png and b/tests/screenshot/snapshots/treasures.spec.ts-snapshots/treasures-catalog-tablet-light.png differ diff --git a/tests/screenshot/snapshots/web.spec.ts-snapshots/web-datenschutz-dark.png b/tests/screenshot/snapshots/web.spec.ts-snapshots/web-datenschutz-dark.png index 0fbfe49..879a0d2 100644 Binary files a/tests/screenshot/snapshots/web.spec.ts-snapshots/web-datenschutz-dark.png and b/tests/screenshot/snapshots/web.spec.ts-snapshots/web-datenschutz-dark.png differ diff --git a/tests/screenshot/snapshots/web.spec.ts-snapshots/web-datenschutz-light.png b/tests/screenshot/snapshots/web.spec.ts-snapshots/web-datenschutz-light.png index 9f321df..bb040ae 100644 Binary files a/tests/screenshot/snapshots/web.spec.ts-snapshots/web-datenschutz-light.png and b/tests/screenshot/snapshots/web.spec.ts-snapshots/web-datenschutz-light.png differ