feat: Finish animations, add imprint/privacy pages
This commit is contained in:
@@ -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 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) {
|
||||
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>
|
||||
Reference in New Issue
Block a user