168 lines
5.6 KiB
Plaintext
168 lines
5.6 KiB
Plaintext
---
|
||
import BaseLayout from "../layouts/BaseLayout.astro";
|
||
---
|
||
|
||
<BaseLayout pageTitle="Privacy Policy">
|
||
<div class="privacy">
|
||
<h1 class="heading-gradient">Privacy Policy</h1>
|
||
|
||
<div class="content">
|
||
<p>
|
||
<strong>Tideshift Digital e.U.</strong> (“we”, “our”, “us”) respects
|
||
your privacy and is committed to protecting any data related to your
|
||
use of this website.
|
||
</p>
|
||
|
||
<section>
|
||
<h2 class="heading-gradient">Analytics</h2>
|
||
<p>
|
||
We use <strong>
|
||
<a
|
||
target="_blank"
|
||
href="https://umami.is/"
|
||
class="hoverable"
|
||
rel="noreferrer noopener">self-hosted Umami</a
|
||
>
|
||
</strong> to measure basic website usage (such as page views and
|
||
referrers). No personal data, cookies, or IP addresses are collected
|
||
or stored.
|
||
</p>
|
||
</section>
|
||
|
||
<section>
|
||
<h2 class="heading-gradient">Hosting</h2>
|
||
<p>
|
||
This website is hosted by <strong>
|
||
<a
|
||
target="_blank"
|
||
href="https://www.hetzner.com/"
|
||
class="hoverable"
|
||
rel="noreferrer noopener">Hetzner Online GmbH</a
|
||
></strong
|
||
>. Standard server logs may be collected automatically for
|
||
technical and security purposes. These logs can include IP
|
||
addresses and access times. The logs are used solely for
|
||
server maintenance and security and are not combined with
|
||
any other data or used for analytics.
|
||
</p>
|
||
</section>
|
||
|
||
<section>
|
||
<h2 class="heading-gradient">Data Retention</h2>
|
||
<p>
|
||
Analytics data collected by Umami are stored temporarily and
|
||
only in an anonymized, aggregated form. No personally
|
||
identifiable information is retained. Server logs are stored
|
||
by Hetzner in accordance with their standard retention
|
||
policies, primarily for operational and security purposes.
|
||
</p>
|
||
</section>
|
||
|
||
<section>
|
||
<h2 class="heading-gradient">Legal Basis</h2>
|
||
<p>
|
||
Data processing through analytics and hosting is based on
|
||
our legitimate interest (Article 6(1)(f) GDPR) in
|
||
maintaining and improving our website’s performance and
|
||
security.
|
||
</p>
|
||
</section>
|
||
|
||
<section>
|
||
<h2 class="heading-gradient">Your Rights</h2>
|
||
<p>
|
||
Since we do not collect or process personal data directly,
|
||
no action is generally required from you. However, if you
|
||
have any questions or concerns regarding data protection,
|
||
you may contact us at
|
||
<a
|
||
href="mailto:privacy@tideshiftdigital.com"
|
||
class="hoverable">privacy@tideshiftdigital.com</a
|
||
>.
|
||
</p>
|
||
</section>
|
||
|
||
<section>
|
||
<h2 class="heading-gradient">Data Controller</h2>
|
||
<p>
|
||
The data controller responsible for this website is:<br />
|
||
<strong>Tideshift Digital e.U.</strong><br />
|
||
Email: <a
|
||
href="mailto:privacy@tideshiftdigital.com"
|
||
class="hoverable">privacy@tideshiftdigital.com</a
|
||
>
|
||
</p>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
</BaseLayout>
|
||
|
||
<style>
|
||
.privacy {
|
||
padding-inline: 5rem;
|
||
max-width: var(--max-content-width);
|
||
margin-inline: auto;
|
||
|
||
> div {
|
||
margin-top: 2rem;
|
||
}
|
||
}
|
||
|
||
h1 {
|
||
margin-top: 10rem;
|
||
font-size: var(--fs-page-title);
|
||
line-height: var(--leading-title);
|
||
letter-spacing: var(--tracking-narrow);
|
||
font-weight: 600;
|
||
}
|
||
|
||
.content {
|
||
max-width: 80ch;
|
||
|
||
> * + * {
|
||
margin-top: 1rem;
|
||
}
|
||
}
|
||
</style>
|
||
|
||
<script>
|
||
import { gsap } from "gsap";
|
||
import { SplitText } from "gsap/SplitText";
|
||
|
||
gsap.registerPlugin(SplitText);
|
||
|
||
const page = document.querySelector(".privacy");
|
||
|
||
if (page) {
|
||
const mm = gsap.matchMedia();
|
||
|
||
mm.add("(prefers-reduced-motion: no-preference)", () => {
|
||
new SplitText(page.querySelector("h1"), {
|
||
type: "words, chars",
|
||
autoSplit: true,
|
||
mask: "chars",
|
||
charsClass: "char",
|
||
onSplit: (self) => {
|
||
gsap.from(self.chars, {
|
||
duration: 1,
|
||
yPercent: -120,
|
||
scale: 1.2,
|
||
stagger: 0.015,
|
||
ease: "expo.out",
|
||
onComplete: () => self.revert(),
|
||
});
|
||
},
|
||
});
|
||
|
||
gsap.from(page.querySelectorAll(".content > *"), {
|
||
duration: 1,
|
||
delay: 0.3,
|
||
opacity: 0,
|
||
yPercent: -20,
|
||
ease: "expo.out",
|
||
stagger: 0.1,
|
||
});
|
||
});
|
||
}
|
||
</script>
|