Replace manifesto bar with compact context bar + add privacy page
- layout.php: replace large manifesto section (eyebrow/title/sub/4 stats) with a slim dbn-context-bar strip linking to why-ours, pricing, MCP, and privacy - i18n.php: add context_bar_* + footer_privacy_link + privacy_page_title keys to all 4 language blocks (en, no, uk, pl) - dbn-tools-redesign.css: add .dbn-context-bar styles with mobile wrap - privacy.php: new standalone page in 4 languages covering in-memory processing, metadata-only logging, My Case opt-in storage, EU data locations, and HTTPS transport - footer.php: add Privacy link to first footer column Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+474
@@ -0,0 +1,474 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
require_once __DIR__ . '/includes/bootstrap.php';
|
||||
|
||||
$uiLang = dbnToolsCurrentLanguage();
|
||||
$isAuthed = dbnToolsIsAuthenticated();
|
||||
$langPath = '/privacy.php';
|
||||
$toolsLogin = 'https://dobetternorge.no/tools-login.php?return=' . urlencode('/privacy.php');
|
||||
$registerUrl = 'https://dobetternorge.no/register.php';
|
||||
$ctaUrl = $isAuthed ? '/dashboard.php' : $toolsLogin;
|
||||
|
||||
$translations = [
|
||||
'en' => [
|
||||
'page_title' => 'Privacy — Do Better Norge Tools',
|
||||
'meta_desc' => 'How Do Better Norge Tools handles your documents and data. Free-plan processing is in-memory only; paid plans offer secure EU-hosted case storage.',
|
||||
'nav_open' => 'Open tools →',
|
||||
'nav_signin' => 'Sign in',
|
||||
'hero_kicker' => 'Privacy & data handling',
|
||||
'hero_title' => 'Your documents stay yours.',
|
||||
'hero_sub' => 'Free-plan processing is in memory and discarded when your session ends. Paid plans let you choose to save your case — stored encrypted in the EU, visible only to you.',
|
||||
// Legal disclaimer
|
||||
'legal_h' => 'Legal information, not legal advice',
|
||||
'legal_p' => 'These tools provide legal information and preparation support. They do not constitute legal advice. AI output may contain errors — always confirm next steps with a qualified Norwegian lawyer before acting.',
|
||||
// In-memory processing
|
||||
'memory_h' => 'How your text and files are processed',
|
||||
'memory_p1' => 'When you paste text or upload a document (PDF, DOCX, TXT, audio), it is sent to our AI pipeline over an encrypted HTTPS connection, processed in memory, and the result is returned to you.',
|
||||
'memory_p2' => 'By default, document content is not written to disk or retained after your session ends. This applies to all free-plan users and to any tool used outside the My Case feature.',
|
||||
'memory_badge' => 'Free plan — always',
|
||||
// What we do store
|
||||
'store_h' => 'What we record (free plan)',
|
||||
'store_p' => 'For all users we log only operational metadata to monitor service health and improve the tools:',
|
||||
'store_li1' => 'Tool name used (e.g. "transcribe", "timeline")',
|
||||
'store_li2' => 'Response time (latency)',
|
||||
'store_li3' => 'UI language selected',
|
||||
'store_li4' => 'Anonymous session ID (not linked to your name or email)',
|
||||
'store_never' => 'We never log the content of your documents or pasted text.',
|
||||
// Paid plan — My Case
|
||||
'mycase_h' => 'My Case — paid plans only (opt-in)',
|
||||
'mycase_p1' => 'Subscribers to Plus, Pro, or Pro+ Family who activate My Case choose to store their documents in a private, encrypted corpus. This is entirely opt-in — nothing is saved unless you upload to My Case explicitly.',
|
||||
'mycase_list_title' => 'Your My Case corpus is:',
|
||||
'mycase_li1' => 'Visible only to you (and team members you invite on Pro+)',
|
||||
'mycase_li2' => 'Stored encrypted within the EU at all times',
|
||||
'mycase_li3' => 'Deletable at any time — document by document or all at once',
|
||||
'mycase_li4' => 'Retained for 90 days after subscription cancellation, then deleted',
|
||||
'mycase_badge' => 'Plus · Pro · Pro+ Family',
|
||||
// Data locations
|
||||
'locations_h' => 'Where your data lives (EU only)',
|
||||
'locations_p' => 'All processing and storage takes place within the European Union:',
|
||||
'locations_li1' => 'Application servers: Hetzner Falkenstein (Germany DE) and Helsinki (Finland FI)',
|
||||
'locations_li2' => 'AI services: Microsoft Azure West Europe (NL) and Norway East (NO)',
|
||||
'locations_li3' => 'Payments: Stripe Ireland (IE) — we never see your card number',
|
||||
'locations_li4' => 'Vector search and document indexing: Hetzner dedicated servers, Germany',
|
||||
// Transport
|
||||
'transport_h' => 'Secure transport',
|
||||
'transport_p' => 'All connections use HTTPS/TLS 1.2 or higher. No data is ever transmitted over unencrypted channels. API calls between internal services use private VLAN channels within Hetzner infrastructure.',
|
||||
// Contact
|
||||
'contact_h' => 'Questions or deletion requests',
|
||||
'contact_p' => 'To ask about your data or request deletion of your account and any stored documents, email us:',
|
||||
'contact_email' => 'support@dobetternorge.no',
|
||||
// Links back
|
||||
'back_tools' => '← Back to tools',
|
||||
'link_why' => 'Why our tools give different answers than ChatGPT →',
|
||||
'link_pricing' => 'Plans & pricing →',
|
||||
'link_mcp' => 'MCP for developers →',
|
||||
],
|
||||
'no' => [
|
||||
'page_title' => 'Personvern — Do Better Norge verktøy',
|
||||
'meta_desc' => 'Slik håndterer Do Better Norge verktøy dokumentene og dataene dine. Gratisnivå behandler alt i minnet; betalte planer tilbyr sikker EU-lagring.',
|
||||
'nav_open' => 'Åpne verktøy →',
|
||||
'nav_signin' => 'Logg inn',
|
||||
'hero_kicker' => 'Personvern og datahåndtering',
|
||||
'hero_title' => 'Dokumentene dine forblir dine.',
|
||||
'hero_sub' => 'Behandling på gratisnivå skjer i minnet og slettes når økten avsluttes. Betalte planer lar deg velge å lagre saken din – kryptert i EU, kun synlig for deg.',
|
||||
'legal_h' => 'Juridisk informasjon, ikke juridisk rådgivning',
|
||||
'legal_p' => 'Disse verktøyene gir juridisk informasjon og forberedelsesstøtte. De utgjør ikke juridisk rådgivning. AI-output kan inneholde feil – kontroller alltid neste steg med en kvalifisert norsk advokat før du handler.',
|
||||
'memory_h' => 'Slik behandles tekst og filer',
|
||||
'memory_p1' => 'Når du limer inn tekst eller laster opp et dokument (PDF, DOCX, TXT, lyd), sendes det til vår AI-pipeline over en kryptert HTTPS-tilkobling, behandles i minnet og resultatet returneres til deg.',
|
||||
'memory_p2' => 'Som standard skrives ikke dokumentinnhold til disk eller beholdes etter at økten avsluttes. Dette gjelder alle brukere på gratisnivå og alle verktøy brukt utenfor Min sak.',
|
||||
'memory_badge' => 'Gratisnivå — alltid',
|
||||
'store_h' => 'Hva vi lagrer (gratisnivå)',
|
||||
'store_p' => 'For alle brukere logger vi bare operasjonelle metadata for å overvåke tjenestens helse og forbedre verktøyene:',
|
||||
'store_li1' => 'Verktøynavn brukt (f.eks. «transkripsjon», «tidslinje»)',
|
||||
'store_li2' => 'Responstid (latens)',
|
||||
'store_li3' => 'Valgt grensesnittspråk',
|
||||
'store_li4' => 'Anonym økt-ID (ikke knyttet til navn eller e-post)',
|
||||
'store_never' => 'Vi logger aldri innholdet i dokumentene dine eller tekst du limer inn.',
|
||||
'mycase_h' => 'Min sak — kun betalte planer (valgfritt)',
|
||||
'mycase_p1' => 'Abonnenter på Pluss, Pro eller Pro+ Familie som aktiverer Min sak, velger å lagre dokumentene sine i et privat, kryptert korpus. Dette er helt valgfritt – ingenting lagres med mindre du laster opp til Min sak eksplisitt.',
|
||||
'mycase_list_title' => 'Ditt Min sak-korpus er:',
|
||||
'mycase_li1' => 'Synlig kun for deg (og teammedlemmer du inviterer på Pro+)',
|
||||
'mycase_li2' => 'Lagret kryptert i EU til enhver tid',
|
||||
'mycase_li3' => 'Slettbart når som helst – dokument for dokument eller alt på én gang',
|
||||
'mycase_li4' => 'Beholdt i 90 dager etter avsluttet abonnement, deretter slettet',
|
||||
'mycase_badge' => 'Pluss · Pro · Pro+ Familie',
|
||||
'locations_h' => 'Hvor dataene dine befinner seg (kun EU)',
|
||||
'locations_p' => 'All behandling og lagring skjer innenfor EU:',
|
||||
'locations_li1' => 'Applikasjonsservere: Hetzner Falkenstein (Tyskland DE) og Helsinki (Finland FI)',
|
||||
'locations_li2' => 'AI-tjenester: Microsoft Azure Vest-Europa (NL) og Norge Øst (NO)',
|
||||
'locations_li3' => 'Betalinger: Stripe Irland (IE) – vi ser aldri kortnummeret ditt',
|
||||
'locations_li4' => 'Vektorsøk og dokumentindeksering: Hetzner dedikerte servere, Tyskland',
|
||||
'transport_h' => 'Sikker transport',
|
||||
'transport_p' => 'Alle tilkoblinger bruker HTTPS/TLS 1.2 eller høyere. Data overføres aldri over ukrypterte kanaler. API-kall mellom interne tjenester bruker private VLAN-kanaler i Hetzner-infrastrukturen.',
|
||||
'contact_h' => 'Spørsmål eller slettingsforespørsler',
|
||||
'contact_p' => 'For spørsmål om dataene dine eller for å be om sletting av konto og lagrede dokumenter, send e-post til:',
|
||||
'contact_email' => 'support@dobetternorge.no',
|
||||
'back_tools' => '← Tilbake til verktøy',
|
||||
'link_why' => 'Hvorfor verktøyene gir andre svar enn ChatGPT →',
|
||||
'link_pricing' => 'Planer og priser →',
|
||||
'link_mcp' => 'MCP for utviklere →',
|
||||
],
|
||||
'uk' => [
|
||||
'page_title' => 'Конфіденційність — Do Better Norge',
|
||||
'meta_desc' => 'Як Do Better Norge обробляє ваші документи та дані. Безкоштовний план обробляє дані лише в пам\'яті; платні плани пропонують безпечне сховище в ЄС.',
|
||||
'nav_open' => 'Відкрити інструменти →',
|
||||
'nav_signin' => 'Увійти',
|
||||
'hero_kicker' => 'Конфіденційність і обробка даних',
|
||||
'hero_title' => 'Ваші документи залишаються вашими.',
|
||||
'hero_sub' => 'Безкоштовний план обробляє дані в пам\'яті й видаляє їх після завершення сесії. Платні плани дозволяють зберігати справу — зашифровано в ЄС, доступно лише вам.',
|
||||
'legal_h' => 'Юридична інформація, а не юридична консультація',
|
||||
'legal_p' => 'Ці інструменти надають юридичну інформацію та підтримку у підготовці. Вони не є юридичною консультацією. Результати ШІ можуть містити помилки — завжди погоджуйте наступні кроки з кваліфікованим норвезьким юристом.',
|
||||
'memory_h' => 'Як обробляється текст і файли',
|
||||
'memory_p1' => 'Коли ви вставляєте текст або завантажуєте документ (PDF, DOCX, TXT, аудіо), він надсилається до нашого AI-конвеєра через зашифроване HTTPS-з\'єднання, обробляється в пам\'яті й результат повертається вам.',
|
||||
'memory_p2' => 'За замовчуванням вміст документа не записується на диск і не зберігається після завершення сесії. Це стосується всіх користувачів безкоштовного плану та будь-якого інструменту поза функцією «Моя справа».',
|
||||
'memory_badge' => 'Безкоштовний план — завжди',
|
||||
'store_h' => 'Що ми зберігаємо (безкоштовний план)',
|
||||
'store_p' => 'Для всіх користувачів ми логуємо лише операційні метадані для моніторингу стану сервісу та вдосконалення інструментів:',
|
||||
'store_li1' => 'Назва використаного інструменту (напр. «транскрибування», «хронологія»)',
|
||||
'store_li2' => 'Час відповіді (затримка)',
|
||||
'store_li3' => 'Вибрана мова інтерфейсу',
|
||||
'store_li4' => 'Анонімний ідентифікатор сесії (не пов\'язаний з вашим іменем або email)',
|
||||
'store_never' => 'Ми ніколи не логуємо вміст ваших документів або вставленого тексту.',
|
||||
'mycase_h' => 'Моя справа — лише платні плани (за вибором)',
|
||||
'mycase_p1' => 'Підписники Plus, Pro або Pro+ Family, які активують «Мою справу», обирають зберігати документи в приватному зашифрованому корпусі. Це повністю за вашим вибором — нічого не зберігається без явного завантаження до «Моєї справи».',
|
||||
'mycase_list_title' => 'Ваш корпус «Мої справи»:',
|
||||
'mycase_li1' => 'Видимий лише вам (і запрошеним учасникам команди на Pro+)',
|
||||
'mycase_li2' => 'Зберігається зашифрованим у ЄС постійно',
|
||||
'mycase_li3' => 'Може бути видалений будь-коли — по одному документу або всі разом',
|
||||
'mycase_li4' => 'Зберігається 90 днів після скасування підписки, потім видаляється',
|
||||
'mycase_badge' => 'Plus · Pro · Pro+ Family',
|
||||
'locations_h' => 'Де зберігаються ваші дані (лише ЄС)',
|
||||
'locations_p' => 'Вся обробка та зберігання відбувається в межах Євросоюзу:',
|
||||
'locations_li1' => 'Сервери додатків: Hetzner Falkenstein (Німеччина DE) та Гельсінкі (Фінляндія FI)',
|
||||
'locations_li2' => 'AI-сервіси: Microsoft Azure Захід Європи (NL) та Норвегія Схід (NO)',
|
||||
'locations_li3' => 'Платежі: Stripe Ірландія (IE) — ми ніколи не бачимо вашого номера картки',
|
||||
'locations_li4' => 'Векторний пошук і індексування документів: виділені сервери Hetzner, Німеччина',
|
||||
'transport_h' => 'Безпечна передача даних',
|
||||
'transport_p' => 'Усі з\'єднання використовують HTTPS/TLS 1.2 або вище. Дані ніколи не передаються незашифрованими каналами. API-виклики між внутрішніми сервісами використовують приватні VLAN-канали в інфраструктурі Hetzner.',
|
||||
'contact_h' => 'Запитання або запит на видалення',
|
||||
'contact_p' => 'Щоб дізнатися про свої дані або запросити видалення облікового запису та збережених документів, напишіть нам:',
|
||||
'contact_email' => 'support@dobetternorge.no',
|
||||
'back_tools' => '← Назад до інструментів',
|
||||
'link_why' => 'Чому наші інструменти дають інші відповіді, ніж ChatGPT →',
|
||||
'link_pricing' => 'Плани та ціни →',
|
||||
'link_mcp' => 'MCP для розробників →',
|
||||
],
|
||||
'pl' => [
|
||||
'page_title' => 'Prywatność — Do Better Norge',
|
||||
'meta_desc' => 'Jak Do Better Norge obsługuje Twoje dokumenty i dane. Plan bezpłatny przetwarza dane tylko w pamięci; płatne plany oferują bezpieczne przechowywanie w UE.',
|
||||
'nav_open' => 'Otwórz narzędzia →',
|
||||
'nav_signin' => 'Zaloguj się',
|
||||
'hero_kicker' => 'Prywatność i zarządzanie danymi',
|
||||
'hero_title' => 'Twoje dokumenty pozostają Twoje.',
|
||||
'hero_sub' => 'Przetwarzanie w planie bezpłatnym odbywa się w pamięci i jest usuwane po zakończeniu sesji. Płatne plany pozwalają zapisać swoją sprawę — zaszyfrowaną w UE, widoczną tylko dla Ciebie.',
|
||||
'legal_h' => 'Informacja prawna, nie porada prawna',
|
||||
'legal_p' => 'Te narzędzia zapewniają informacje prawne i wsparcie w przygotowaniu. Nie stanowią porady prawnej. Wyniki AI mogą zawierać błędy — zawsze konsultuj kolejne kroki z wykwalifikowanym norweskim prawnikiem.',
|
||||
'memory_h' => 'Jak przetwarzany jest tekst i pliki',
|
||||
'memory_p1' => 'Gdy wklejasz tekst lub przesyłasz dokument (PDF, DOCX, TXT, audio), jest on wysyłany do naszego pipeline\'u AI przez szyfrowane połączenie HTTPS, przetwarzany w pamięci i wynik jest zwracany do Ciebie.',
|
||||
'memory_p2' => 'Domyślnie treść dokumentu nie jest zapisywana na dysku ani przechowywana po zakończeniu sesji. Dotyczy to wszystkich użytkowników planu bezpłatnego i każdego narzędzia używanego poza funkcją Moja Sprawa.',
|
||||
'memory_badge' => 'Plan bezpłatny — zawsze',
|
||||
'store_h' => 'Co rejestrujemy (plan bezpłatny)',
|
||||
'store_p' => 'Dla wszystkich użytkowników rejestrujemy tylko metadane operacyjne w celu monitorowania kondycji usługi i ulepszania narzędzi:',
|
||||
'store_li1' => 'Nazwa użytego narzędzia (np. „transkrypcja", „oś czasu")',
|
||||
'store_li2' => 'Czas odpowiedzi (opóźnienie)',
|
||||
'store_li3' => 'Wybrany język interfejsu',
|
||||
'store_li4' => 'Anonimowy identyfikator sesji (niepowiązany z Twoim imieniem ani adresem e-mail)',
|
||||
'store_never' => 'Nigdy nie rejestrujemy treści Twoich dokumentów ani wklejonego tekstu.',
|
||||
'mycase_h' => 'Moja Sprawa — tylko plany płatne (opcjonalnie)',
|
||||
'mycase_p1' => 'Subskrybenci Plus, Pro lub Pro+ Family, którzy aktywują Moją Sprawę, wybierają przechowywanie dokumentów w prywatnym, zaszyfrowanym korpusie. Jest to całkowicie opcjonalne — nic nie jest zapisywane, jeśli nie prześlesz do Mojej Sprawy.',
|
||||
'mycase_list_title' => 'Twój korpus Moja Sprawa:',
|
||||
'mycase_li1' => 'Widoczny tylko dla Ciebie (i zaproszonych członków zespołu w Pro+)',
|
||||
'mycase_li2' => 'Przechowywany w zaszyfrowanej postaci w UE przez cały czas',
|
||||
'mycase_li3' => 'Możliwy do usunięcia w dowolnym momencie — dokument po dokumencie lub wszystko naraz',
|
||||
'mycase_li4' => 'Przechowywany przez 90 dni po anulowaniu subskrypcji, a następnie usuwany',
|
||||
'mycase_badge' => 'Plus · Pro · Pro+ Family',
|
||||
'locations_h' => 'Gdzie przechowywane są Twoje dane (tylko UE)',
|
||||
'locations_p' => 'Całe przetwarzanie i przechowywanie odbywa się w Unii Europejskiej:',
|
||||
'locations_li1' => 'Serwery aplikacji: Hetzner Falkenstein (Niemcy DE) i Helsinki (Finlandia FI)',
|
||||
'locations_li2' => 'Usługi AI: Microsoft Azure Europa Zachodnia (NL) i Norwegia Wschodnia (NO)',
|
||||
'locations_li3' => 'Płatności: Stripe Irlandia (IE) — nigdy nie widzimy numeru Twojej karty',
|
||||
'locations_li4' => 'Wyszukiwanie wektorowe i indeksowanie dokumentów: dedykowane serwery Hetzner, Niemcy',
|
||||
'transport_h' => 'Bezpieczny transport',
|
||||
'transport_p' => 'Wszystkie połączenia używają HTTPS/TLS 1.2 lub nowszego. Dane nigdy nie są przesyłane przez nieszyfrowane kanały. Wywołania API między wewnętrznymi usługami używają prywatnych kanałów VLAN w infrastrukturze Hetzner.',
|
||||
'contact_h' => 'Pytania lub prośby o usunięcie',
|
||||
'contact_p' => 'Aby zapytać o swoje dane lub poprosić o usunięcie konta i przechowywanych dokumentów, napisz do nas:',
|
||||
'contact_email' => 'support@dobetternorge.no',
|
||||
'back_tools' => '← Powrót do narzędzi',
|
||||
'link_why' => 'Dlaczego nasze narzędzia dają inne odpowiedzi niż ChatGPT →',
|
||||
'link_pricing' => 'Plany i cennik →',
|
||||
'link_mcp' => 'MCP dla deweloperów →',
|
||||
],
|
||||
];
|
||||
|
||||
$t = $translations[$uiLang] ?? $translations['en'];
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="<?= htmlspecialchars($uiLang) ?>">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title><?= htmlspecialchars($t['page_title']) ?></title>
|
||||
<meta name="description" content="<?= htmlspecialchars($t['meta_desc']) ?>">
|
||||
<meta name="robots" content="index, follow">
|
||||
<link rel="canonical" href="https://tools.dobetternorge.no/privacy.php">
|
||||
<meta property="og:title" content="<?= htmlspecialchars($t['page_title']) ?>">
|
||||
<meta property="og:description" content="<?= htmlspecialchars($t['meta_desc']) ?>">
|
||||
<meta property="og:type" content="website">
|
||||
<meta name="theme-color" content="#00205B">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Crimson+Pro:wght@400;600;700&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap">
|
||||
<link rel="stylesheet" href="assets/css/tools.css">
|
||||
<link rel="stylesheet" href="assets/css/dbn-tools-redesign.css">
|
||||
<style>
|
||||
.priv-hero {
|
||||
background: linear-gradient(135deg, #00205B 0%, #001840 100%);
|
||||
padding: 3.5rem 1.5rem 3rem;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
}
|
||||
.priv-hero__kicker {
|
||||
font-size: 0.8125rem;
|
||||
font-weight: 600;
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
color: rgba(255,255,255,0.6);
|
||||
margin: 0 0 0.75rem;
|
||||
}
|
||||
.priv-hero__title {
|
||||
font-family: 'Crimson Pro', Georgia, serif;
|
||||
font-size: clamp(1.75rem, 4vw, 2.75rem);
|
||||
font-weight: 700;
|
||||
line-height: 1.15;
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
.priv-hero__sub {
|
||||
font-size: 1.0625rem;
|
||||
color: rgba(255,255,255,0.8);
|
||||
max-width: 640px;
|
||||
margin: 0 auto;
|
||||
line-height: 1.6;
|
||||
}
|
||||
.priv-body {
|
||||
max-width: 760px;
|
||||
margin: 0 auto;
|
||||
padding: 2.5rem 1.5rem 4rem;
|
||||
}
|
||||
.priv-section {
|
||||
margin-bottom: 2.5rem;
|
||||
padding-bottom: 2.5rem;
|
||||
border-bottom: 1px solid #e8eaf0;
|
||||
}
|
||||
.priv-section:last-of-type {
|
||||
border-bottom: none;
|
||||
}
|
||||
.priv-section__badge {
|
||||
display: inline-block;
|
||||
font-size: 0.72rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.05em;
|
||||
text-transform: uppercase;
|
||||
background: #e8f0fe;
|
||||
color: #1a3a7c;
|
||||
border-radius: 3px;
|
||||
padding: 0.15rem 0.55rem;
|
||||
margin-bottom: 0.65rem;
|
||||
}
|
||||
.priv-section__badge--paid {
|
||||
background: #fef3c7;
|
||||
color: #7c5a00;
|
||||
}
|
||||
.priv-section h2 {
|
||||
font-family: 'Crimson Pro', Georgia, serif;
|
||||
font-size: 1.45rem;
|
||||
font-weight: 700;
|
||||
color: #00205B;
|
||||
margin: 0 0 0.75rem;
|
||||
}
|
||||
.priv-section p {
|
||||
color: #334;
|
||||
line-height: 1.7;
|
||||
margin: 0 0 0.85rem;
|
||||
}
|
||||
.priv-section ul {
|
||||
color: #334;
|
||||
line-height: 1.7;
|
||||
padding-left: 1.4rem;
|
||||
margin: 0.5rem 0 0.85rem;
|
||||
}
|
||||
.priv-section ul li {
|
||||
margin-bottom: 0.35rem;
|
||||
}
|
||||
.priv-legal-box {
|
||||
background: #fffbeb;
|
||||
border-left: 3px solid #f59e0b;
|
||||
padding: 1rem 1.25rem;
|
||||
border-radius: 0 6px 6px 0;
|
||||
}
|
||||
.priv-legal-box h2 {
|
||||
color: #92400e;
|
||||
}
|
||||
.priv-legal-box p {
|
||||
color: #78350f;
|
||||
}
|
||||
.priv-locations-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
||||
gap: 0.75rem;
|
||||
margin-top: 0.75rem;
|
||||
}
|
||||
.priv-location-card {
|
||||
background: #f0f4ff;
|
||||
border-radius: 6px;
|
||||
padding: 0.85rem 1rem;
|
||||
font-size: 0.9rem;
|
||||
color: #334;
|
||||
line-height: 1.45;
|
||||
}
|
||||
.priv-location-card strong {
|
||||
display: block;
|
||||
color: #00205B;
|
||||
font-weight: 600;
|
||||
margin-bottom: 0.15rem;
|
||||
}
|
||||
.priv-contact-box {
|
||||
background: #f6f8ff;
|
||||
border-radius: 8px;
|
||||
padding: 1.25rem 1.5rem;
|
||||
text-align: center;
|
||||
}
|
||||
.priv-contact-box a {
|
||||
color: #00205B;
|
||||
font-weight: 600;
|
||||
font-size: 1rem;
|
||||
}
|
||||
.priv-nav-links {
|
||||
display: flex;
|
||||
gap: 1rem 1.5rem;
|
||||
flex-wrap: wrap;
|
||||
padding: 1.5rem 0 0;
|
||||
border-top: 1px solid #e8eaf0;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
.priv-nav-links a {
|
||||
color: #00205B;
|
||||
font-size: 0.9rem;
|
||||
text-decoration: none;
|
||||
}
|
||||
.priv-nav-links a:hover { text-decoration: underline; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="kdoc-page">
|
||||
|
||||
<!-- Nav -->
|
||||
<header class="lt-nav">
|
||||
<a href="https://dobetternorge.no" class="lt-nav__brand">
|
||||
<picture>
|
||||
<source srcset="assets/images/logo-header.webp" type="image/webp">
|
||||
<img class="lt-nav__logo" src="assets/images/logo-header.png" alt="Do Better Norge" width="140" height="36" loading="eager">
|
||||
</picture>
|
||||
<span class="lt-nav__badge">Legal Tools</span>
|
||||
</a>
|
||||
<div class="lt-nav__right">
|
||||
<nav class="shell-lang-switcher" aria-label="Language">
|
||||
<?php foreach (dbnToolsSupportedLanguages() as $langCode): ?>
|
||||
<a href="<?= htmlspecialchars($langPath . '?lang=' . $langCode) ?>" class="<?= $langCode === $uiLang ? 'is-active' : '' ?>"><?= htmlspecialchars(dbnToolsLanguageLabel($langCode)) ?></a>
|
||||
<?php endforeach; ?>
|
||||
</nav>
|
||||
<?php if ($isAuthed): ?>
|
||||
<a href="/dashboard.php" class="lt-nav__cta lt-nav__cta--enter"><?= htmlspecialchars($t['nav_open']) ?></a>
|
||||
<?php else: ?>
|
||||
<a href="<?= htmlspecialchars($toolsLogin) ?>" class="lt-nav__cta"><?= htmlspecialchars($t['nav_signin']) ?></a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- Hero -->
|
||||
<section class="priv-hero">
|
||||
<p class="priv-hero__kicker"><?= htmlspecialchars($t['hero_kicker']) ?></p>
|
||||
<h1 class="priv-hero__title"><?= htmlspecialchars($t['hero_title']) ?></h1>
|
||||
<p class="priv-hero__sub"><?= htmlspecialchars($t['hero_sub']) ?></p>
|
||||
</section>
|
||||
|
||||
<main class="priv-body">
|
||||
|
||||
<!-- Legal disclaimer -->
|
||||
<div class="priv-section priv-legal-box">
|
||||
<h2>⚖ <?= htmlspecialchars($t['legal_h']) ?></h2>
|
||||
<p><?= htmlspecialchars($t['legal_p']) ?></p>
|
||||
</div>
|
||||
|
||||
<!-- In-memory processing -->
|
||||
<div class="priv-section">
|
||||
<span class="priv-section__badge"><?= htmlspecialchars($t['memory_badge']) ?></span>
|
||||
<h2><?= htmlspecialchars($t['memory_h']) ?></h2>
|
||||
<p><?= htmlspecialchars($t['memory_p1']) ?></p>
|
||||
<p><?= htmlspecialchars($t['memory_p2']) ?></p>
|
||||
</div>
|
||||
|
||||
<!-- What we store -->
|
||||
<div class="priv-section">
|
||||
<h2><?= htmlspecialchars($t['store_h']) ?></h2>
|
||||
<p><?= htmlspecialchars($t['store_p']) ?></p>
|
||||
<ul>
|
||||
<li><?= htmlspecialchars($t['store_li1']) ?></li>
|
||||
<li><?= htmlspecialchars($t['store_li2']) ?></li>
|
||||
<li><?= htmlspecialchars($t['store_li3']) ?></li>
|
||||
<li><?= htmlspecialchars($t['store_li4']) ?></li>
|
||||
</ul>
|
||||
<p><strong><?= htmlspecialchars($t['store_never']) ?></strong></p>
|
||||
</div>
|
||||
|
||||
<!-- My Case -->
|
||||
<div class="priv-section">
|
||||
<span class="priv-section__badge priv-section__badge--paid"><?= htmlspecialchars($t['mycase_badge']) ?></span>
|
||||
<h2><?= htmlspecialchars($t['mycase_h']) ?></h2>
|
||||
<p><?= htmlspecialchars($t['mycase_p1']) ?></p>
|
||||
<p><?= htmlspecialchars($t['mycase_list_title']) ?></p>
|
||||
<ul>
|
||||
<li><?= htmlspecialchars($t['mycase_li1']) ?></li>
|
||||
<li><?= htmlspecialchars($t['mycase_li2']) ?></li>
|
||||
<li><?= htmlspecialchars($t['mycase_li3']) ?></li>
|
||||
<li><?= htmlspecialchars($t['mycase_li4']) ?></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Data locations -->
|
||||
<div class="priv-section">
|
||||
<h2><?= htmlspecialchars($t['locations_h']) ?></h2>
|
||||
<p><?= htmlspecialchars($t['locations_p']) ?></p>
|
||||
<div class="priv-locations-grid">
|
||||
<div class="priv-location-card"><strong>🇩🇪 🇫🇮</strong><?= htmlspecialchars($t['locations_li1']) ?></div>
|
||||
<div class="priv-location-card"><strong>🇳🇱 🇳🇴</strong><?= htmlspecialchars($t['locations_li2']) ?></div>
|
||||
<div class="priv-location-card"><strong>🇮🇪</strong><?= htmlspecialchars($t['locations_li3']) ?></div>
|
||||
<div class="priv-location-card"><strong>🇩🇪</strong><?= htmlspecialchars($t['locations_li4']) ?></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Transport -->
|
||||
<div class="priv-section">
|
||||
<h2><?= htmlspecialchars($t['transport_h']) ?></h2>
|
||||
<p><?= htmlspecialchars($t['transport_p']) ?></p>
|
||||
</div>
|
||||
|
||||
<!-- Contact -->
|
||||
<div class="priv-section priv-contact-box">
|
||||
<h2><?= htmlspecialchars($t['contact_h']) ?></h2>
|
||||
<p><?= htmlspecialchars($t['contact_p']) ?></p>
|
||||
<a href="mailto:<?= htmlspecialchars($t['contact_email']) ?>"><?= htmlspecialchars($t['contact_email']) ?></a>
|
||||
</div>
|
||||
|
||||
<!-- Nav links -->
|
||||
<nav class="priv-nav-links" aria-label="Related pages">
|
||||
<a href="/<?= $uiLang !== 'en' ? '?lang=' . urlencode($uiLang) : '' ?>"><?= htmlspecialchars($t['back_tools']) ?></a>
|
||||
<a href="/why-ours.php<?= $uiLang !== 'en' ? '?lang=' . urlencode($uiLang) : '' ?>"><?= htmlspecialchars($t['link_why']) ?></a>
|
||||
<a href="/pricing.php<?= $uiLang !== 'en' ? '?lang=' . urlencode($uiLang) : '' ?>"><?= htmlspecialchars($t['link_pricing']) ?></a>
|
||||
<a href="/mcp-tool.php<?= $uiLang !== 'en' ? '?lang=' . urlencode($uiLang) : '' ?>"><?= htmlspecialchars($t['link_mcp']) ?></a>
|
||||
</nav>
|
||||
|
||||
</main>
|
||||
|
||||
<?php require_once __DIR__ . '/includes/footer.php'; ?>
|
||||
<script src="assets/js/tools.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user