1
0

feat: Finish animations, add imprint/privacy pages

This commit is contained in:
2026-03-05 13:50:40 +01:00
parent 7f44ed1112
commit 9bfae3bcee
11 changed files with 306 additions and 171 deletions
+163
View File
@@ -0,0 +1,163 @@
---
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 websites 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) {
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>