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:
@@ -819,3 +819,54 @@ body[data-active-tool='citations'] .results {
|
|||||||
transition-duration: 0.001ms !important;
|
transition-duration: 0.001ms !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ── Context bar (replaces manifesto, added 2026-05-24) ──────────────────── */
|
||||||
|
.dbn-context-bar {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem 1.25rem;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
padding: 0.45rem 1.25rem;
|
||||||
|
background: var(--color-navy, #00205B);
|
||||||
|
font-size: 0.8rem;
|
||||||
|
color: rgba(255, 255, 255, 0.7);
|
||||||
|
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dbn-context-bar__tag {
|
||||||
|
font-weight: 600;
|
||||||
|
color: #fff;
|
||||||
|
white-space: nowrap;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dbn-context-bar__links {
|
||||||
|
display: flex;
|
||||||
|
gap: 0.25rem 1rem;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dbn-context-bar__links a {
|
||||||
|
color: rgba(255, 255, 255, 0.72);
|
||||||
|
text-decoration: none;
|
||||||
|
white-space: nowrap;
|
||||||
|
transition: color 0.15s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dbn-context-bar__links a:hover,
|
||||||
|
.dbn-context-bar__links a:focus-visible {
|
||||||
|
color: #fff;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 640px) {
|
||||||
|
.dbn-context-bar {
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: 0.35rem;
|
||||||
|
padding: 0.55rem 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ function _ft(string $key, string $lang): string {
|
|||||||
<a href="https://dobetternorge.no/library.php"><?= _ft('footer_legal_lib', $_footerLang) ?></a>
|
<a href="https://dobetternorge.no/library.php"><?= _ft('footer_legal_lib', $_footerLang) ?></a>
|
||||||
<a href="/pricing.php"><?= _ft('pricing_nav_link', $_footerLang) ?></a>
|
<a href="/pricing.php"><?= _ft('pricing_nav_link', $_footerLang) ?></a>
|
||||||
<a href="/why-ours.php"><?= _ft('why_ours_trust_link', $_footerLang) ?></a>
|
<a href="/why-ours.php"><?= _ft('why_ours_trust_link', $_footerLang) ?></a>
|
||||||
|
<a href="/privacy.php"><?= _ft('footer_privacy_link', $_footerLang) ?></a>
|
||||||
<a href="mailto:support@dobetternorge.no"><?= _ft('footer_report', $_footerLang) ?></a>
|
<a href="mailto:support@dobetternorge.no"><?= _ft('footer_report', $_footerLang) ?></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="lt-footer__link-col">
|
<div class="lt-footer__link-col">
|
||||||
|
|||||||
@@ -512,6 +512,14 @@ function dbnToolsTranslations(): array
|
|||||||
'mcp_tool_setup_link' => 'Set up MCP →',
|
'mcp_tool_setup_link' => 'Set up MCP →',
|
||||||
'mcp_tool_yes' => 'Yes',
|
'mcp_tool_yes' => 'Yes',
|
||||||
'mcp_tool_no' => 'No',
|
'mcp_tool_no' => 'No',
|
||||||
|
// ── Context bar + privacy page (added 2026-05-24) ────────────────
|
||||||
|
'context_bar_tag' => 'AI legal tools · Norway · since 2019',
|
||||||
|
'context_bar_why' => 'Why different from ChatGPT →',
|
||||||
|
'context_bar_pricing' => 'Pricing →',
|
||||||
|
'context_bar_mcp' => 'MCP for developers →',
|
||||||
|
'context_bar_privacy' => 'Privacy →',
|
||||||
|
'footer_privacy_link' => 'Privacy',
|
||||||
|
'privacy_page_title' => 'Privacy — Do Better Norge Tools',
|
||||||
],
|
],
|
||||||
'no' => [
|
'no' => [
|
||||||
'meta_title' => 'Do Better Norge - juridiske AI-verktøy',
|
'meta_title' => 'Do Better Norge - juridiske AI-verktøy',
|
||||||
@@ -956,6 +964,14 @@ function dbnToolsTranslations(): array
|
|||||||
'mcp_tool_setup_link' => 'Sett opp MCP →',
|
'mcp_tool_setup_link' => 'Sett opp MCP →',
|
||||||
'mcp_tool_yes' => 'Ja',
|
'mcp_tool_yes' => 'Ja',
|
||||||
'mcp_tool_no' => 'Nei',
|
'mcp_tool_no' => 'Nei',
|
||||||
|
// ── Context bar + privacy page (added 2026-05-24) ────────────────
|
||||||
|
'context_bar_tag' => 'AI juridiske verktøy · Norge · siden 2019',
|
||||||
|
'context_bar_why' => 'Hvorfor annerledes enn ChatGPT →',
|
||||||
|
'context_bar_pricing' => 'Priser →',
|
||||||
|
'context_bar_mcp' => 'MCP for utviklere →',
|
||||||
|
'context_bar_privacy' => 'Personvern →',
|
||||||
|
'footer_privacy_link' => 'Personvern',
|
||||||
|
'privacy_page_title' => 'Personvern — Do Better Norge verktøy',
|
||||||
],
|
],
|
||||||
'uk' => [
|
'uk' => [
|
||||||
'meta_title' => 'Do Better Norge - юридичні AI інструменти',
|
'meta_title' => 'Do Better Norge - юридичні AI інструменти',
|
||||||
@@ -1400,6 +1416,14 @@ function dbnToolsTranslations(): array
|
|||||||
'mcp_tool_setup_link' => 'Налаштувати MCP →',
|
'mcp_tool_setup_link' => 'Налаштувати MCP →',
|
||||||
'mcp_tool_yes' => 'Так',
|
'mcp_tool_yes' => 'Так',
|
||||||
'mcp_tool_no' => 'Ні',
|
'mcp_tool_no' => 'Ні',
|
||||||
|
// ── Context bar + privacy page (added 2026-05-24) ────────────────
|
||||||
|
'context_bar_tag' => 'Інструменти правової підготовки · Норвегія · з 2019',
|
||||||
|
'context_bar_why' => 'Чому відрізняється від ChatGPT →',
|
||||||
|
'context_bar_pricing' => 'Ціни →',
|
||||||
|
'context_bar_mcp' => 'MCP для розробників →',
|
||||||
|
'context_bar_privacy' => 'Конфіденційність →',
|
||||||
|
'footer_privacy_link' => 'Конфіденційність',
|
||||||
|
'privacy_page_title' => 'Конфіденційність — Do Better Norge',
|
||||||
],
|
],
|
||||||
'pl' => [
|
'pl' => [
|
||||||
'meta_title' => 'Do Better Norge - prawne narzędzia AI',
|
'meta_title' => 'Do Better Norge - prawne narzędzia AI',
|
||||||
@@ -1844,6 +1868,14 @@ function dbnToolsTranslations(): array
|
|||||||
'mcp_tool_setup_link' => 'Skonfiguruj MCP →',
|
'mcp_tool_setup_link' => 'Skonfiguruj MCP →',
|
||||||
'mcp_tool_yes' => 'Tak',
|
'mcp_tool_yes' => 'Tak',
|
||||||
'mcp_tool_no' => 'Nie',
|
'mcp_tool_no' => 'Nie',
|
||||||
|
// ── Context bar + privacy page (added 2026-05-24) ────────────────
|
||||||
|
'context_bar_tag' => 'Narzędzia prawne · Norwegia · od 2019',
|
||||||
|
'context_bar_why' => 'Dlaczego różni się od ChatGPT →',
|
||||||
|
'context_bar_pricing' => 'Cennik →',
|
||||||
|
'context_bar_mcp' => 'MCP dla deweloperów →',
|
||||||
|
'context_bar_privacy' => 'Prywatność →',
|
||||||
|
'footer_privacy_link' => 'Prywatność',
|
||||||
|
'privacy_page_title' => 'Prywatność — Do Better Norge',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-12
@@ -73,19 +73,15 @@ window.DBN_USER_TIER = <?= json_encode(FreeTier::tier((int)$_SESSION['dbn_tools_
|
|||||||
|
|
||||||
<main id="appShell" class="app-shell">
|
<main id="appShell" class="app-shell">
|
||||||
|
|
||||||
<section class="manifesto" role="banner">
|
<div class="dbn-context-bar" role="note">
|
||||||
<div class="manifesto-copy">
|
<span class="dbn-context-bar__tag"><?= htmlspecialchars(dbnToolsT('context_bar_tag', $uiLang)) ?></span>
|
||||||
<p class="manifesto-eyebrow"><?= htmlspecialchars(dbnToolsT('manifesto_eyebrow', $uiLang)) ?></p>
|
<nav class="dbn-context-bar__links" aria-label="About">
|
||||||
<h2 class="manifesto-title"><?= htmlspecialchars(dbnToolsT('manifesto_title', $uiLang)) ?></h2>
|
<a href="/why-ours.php<?= $uiLang !== 'en' ? '?lang=' . urlencode($uiLang) : '' ?>"><?= htmlspecialchars(dbnToolsT('context_bar_why', $uiLang)) ?></a>
|
||||||
<p class="manifesto-sub"><?= htmlspecialchars(dbnToolsT('manifesto_sub', $uiLang)) ?></p>
|
<a href="/pricing.php<?= $uiLang !== 'en' ? '?lang=' . urlencode($uiLang) : '' ?>"><?= htmlspecialchars(dbnToolsT('context_bar_pricing', $uiLang)) ?></a>
|
||||||
|
<a href="/mcp-tool.php<?= $uiLang !== 'en' ? '?lang=' . urlencode($uiLang) : '' ?>"><?= htmlspecialchars(dbnToolsT('context_bar_mcp', $uiLang)) ?></a>
|
||||||
|
<a href="/privacy.php<?= $uiLang !== 'en' ? '?lang=' . urlencode($uiLang) : '' ?>"><?= htmlspecialchars(dbnToolsT('context_bar_privacy', $uiLang)) ?></a>
|
||||||
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
<div class="manifesto-stats" aria-label="Headline statistics">
|
|
||||||
<div class="manifesto-stat"><strong>23</strong><span><?= htmlspecialchars(dbnToolsT('stat_echr', $uiLang)) ?></span></div>
|
|
||||||
<div class="manifesto-stat"><strong>64%</strong><span><?= htmlspecialchars(dbnToolsT('stat_loss', $uiLang)) ?></span></div>
|
|
||||||
<div class="manifesto-stat"><strong>1,731</strong><span><?= htmlspecialchars(dbnToolsT('stat_tribunal', $uiLang)) ?></span></div>
|
|
||||||
<div class="manifesto-stat"><strong>20+</strong><span><?= htmlspecialchars(dbnToolsT('stat_pending', $uiLang)) ?></span></div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<div class="disclaimer" role="note">
|
<div class="disclaimer" role="note">
|
||||||
<?= htmlspecialchars(dbnToolsT('disclaimer', $uiLang)) ?>
|
<?= htmlspecialchars(dbnToolsT('disclaimer', $uiLang)) ?>
|
||||||
|
|||||||
+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