Files
xsl-validator/web/datenschutz.html
T

952 lines
34 KiB
HTML
Raw Normal View History

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Datenschutz — DocuMentor</title>
<link rel="stylesheet" href="fonts/fonts.css">
<style>
/* ============================================================
RESET & BASE
============================================================ */
*, *::before, *::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
:root {
--concrete-dark: #1a1a1a;
--concrete-mid: #2a2a2a;
--concrete-light: #3a3a3a;
--concrete-surface: #444444;
--warning-yellow: #f0c030;
--warning-yellow-dim: #e8b800;
--safety-orange: #e05020;
--steel-text: #b0b0b0;
--steel-bright: #d0d0d0;
--white: #f0efe8;
--grid-line: rgba(240, 192, 48, 0.07);
--grid-dot: rgba(240, 192, 48, 0.12);
--led-green: #30e060;
}
html {
scroll-behavior: smooth;
font-size: 16px;
}
body {
font-family: 'Barlow', sans-serif;
background-color: var(--concrete-dark);
color: var(--steel-text);
line-height: 1.6;
overflow-x: hidden;
background-image:
repeating-linear-gradient(
0deg,
transparent,
transparent 2px,
rgba(255,255,255,0.008) 2px,
rgba(255,255,255,0.008) 4px
),
repeating-linear-gradient(
90deg,
transparent,
transparent 2px,
rgba(255,255,255,0.005) 2px,
rgba(255,255,255,0.005) 4px
);
}
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 0;
background-image:
radial-gradient(circle, var(--grid-dot) 1px, transparent 1px);
background-size: 40px 40px;
opacity: 0.5;
}
/* ============================================================
UTILITY
============================================================ */
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 2rem;
position: relative;
z-index: 1;
}
section {
position: relative;
z-index: 1;
}
/* ============================================================
STENCIL SECTION LABELS
============================================================ */
.section-label {
font-family: 'Oswald', sans-serif;
font-weight: 700;
font-size: 0.75rem;
letter-spacing: 0.3em;
text-transform: uppercase;
color: var(--warning-yellow-dim);
display: flex;
align-items: center;
gap: 1rem;
margin-bottom: 0.75rem;
}
.section-label::before {
content: attr(data-num);
font-family: 'Share Tech Mono', monospace;
font-size: 0.65rem;
color: var(--concrete-surface);
border: 1px dashed var(--concrete-surface);
padding: 0.15rem 0.4rem;
letter-spacing: 0.1em;
}
.section-title {
font-family: 'Oswald', sans-serif;
font-weight: 700;
font-size: 2.5rem;
color: var(--white);
text-transform: uppercase;
letter-spacing: 0.05em;
line-height: 1.1;
margin-bottom: 1rem;
}
/* ============================================================
HAZARD STRIPE
============================================================ */
.hazard-stripe {
height: 6px;
background: repeating-linear-gradient(
-45deg,
var(--warning-yellow),
var(--warning-yellow) 8px,
var(--concrete-dark) 8px,
var(--concrete-dark) 16px
);
width: 100%;
}
.hazard-stripe-thin {
height: 3px;
background: repeating-linear-gradient(
-45deg,
var(--warning-yellow-dim),
var(--warning-yellow-dim) 5px,
var(--concrete-mid) 5px,
var(--concrete-mid) 10px
);
opacity: 0.5;
}
/* ============================================================
CORNER BRACKETS
============================================================ */
.corner-brackets {
position: relative;
}
.corner-brackets::before,
.corner-brackets::after {
content: '';
position: absolute;
width: 16px;
height: 16px;
pointer-events: none;
}
.corner-brackets::before {
top: -1px;
left: -1px;
border-top: 2px solid var(--warning-yellow-dim);
border-left: 2px solid var(--warning-yellow-dim);
}
.corner-brackets::after {
bottom: -1px;
right: -1px;
border-bottom: 2px solid var(--warning-yellow-dim);
border-right: 2px solid var(--warning-yellow-dim);
}
/* ============================================================
RIVET DECORATIONS
============================================================ */
.riveted {
position: relative;
}
.riveted .rivet {
position: absolute;
width: 8px;
height: 8px;
border-radius: 50%;
background: radial-gradient(circle at 35% 35%, #555, #2a2a2a 60%, #1a1a1a);
box-shadow: inset 0 1px 1px rgba(255,255,255,0.15), 0 1px 2px rgba(0,0,0,0.5);
}
.riveted .rivet-tl { top: 10px; left: 10px; }
.riveted .rivet-tr { top: 10px; right: 10px; }
.riveted .rivet-bl { bottom: 10px; left: 10px; }
.riveted .rivet-br { bottom: 10px; right: 10px; }
/* ============================================================
LED INDICATOR
============================================================ */
.led {
display: inline-block;
width: 8px;
height: 8px;
border-radius: 50%;
margin-right: 6px;
vertical-align: middle;
box-shadow: 0 0 4px currentColor;
}
.led-green {
background-color: var(--led-green);
color: var(--led-green);
}
/* ============================================================
SCROLL REVEAL
============================================================ */
.reveal {
opacity: 0;
transform: translateY(30px);
transition: opacity 0.6s linear, transform 0.6s linear;
}
.reveal.visible {
opacity: 1;
transform: translate(0, 0);
}
/* ============================================================
NAVBAR
============================================================ */
.navbar {
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 1000;
background: rgba(26, 26, 26, 0.92);
backdrop-filter: blur(10px);
border-bottom: 1px solid rgba(240, 192, 48, 0.12);
}
.navbar-inner {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 2rem;
height: 56px;
max-width: 1200px;
margin: 0 auto;
}
.navbar-brand {
display: flex;
align-items: center;
gap: 0.5rem;
text-decoration: none;
}
.navbar-brand-icon {
width: 28px;
height: 28px;
border: 2px solid var(--warning-yellow);
display: flex;
align-items: center;
justify-content: center;
font-family: 'Oswald', sans-serif;
font-weight: 700;
font-size: 0.85rem;
color: var(--warning-yellow);
}
.navbar-brand-text {
font-family: 'Oswald', sans-serif;
font-weight: 600;
font-size: 1.1rem;
color: var(--white);
letter-spacing: 0.1em;
text-transform: uppercase;
}
.navbar-links {
display: flex;
gap: 2rem;
list-style: none;
}
.navbar-links a {
font-family: 'Share Tech Mono', monospace;
font-size: 0.75rem;
color: var(--steel-text);
text-decoration: none;
text-transform: uppercase;
letter-spacing: 0.15em;
padding: 0.25rem 0;
border-bottom: 1px solid transparent;
transition: color 0.2s linear, border-color 0.2s linear;
}
.navbar-links a:hover,
.navbar-links a.active {
color: var(--warning-yellow);
border-bottom-color: var(--warning-yellow);
}
.navbar-mobile-toggle {
display: none;
background: none;
border: 1px solid var(--concrete-surface);
color: var(--steel-text);
padding: 0.4rem 0.6rem;
font-family: 'Share Tech Mono', monospace;
font-size: 0.75rem;
cursor: pointer;
text-transform: uppercase;
letter-spacing: 0.1em;
}
/* ============================================================
PAGE HEADER
============================================================ */
.page-header {
padding-top: 56px;
background: linear-gradient(135deg, var(--concrete-dark) 0%, var(--concrete-mid) 50%, var(--concrete-dark) 100%);
position: relative;
overflow: hidden;
}
.page-header::before {
content: '';
position: absolute;
inset: 0;
background-image:
linear-gradient(var(--grid-line) 1px, transparent 1px),
linear-gradient(90deg, var(--grid-line) 1px, transparent 1px);
background-size: 80px 80px;
opacity: 0.8;
}
.page-header-inner {
padding: 3rem 0 2.5rem;
position: relative;
z-index: 2;
}
.page-header-tag {
font-family: 'Share Tech Mono', monospace;
font-size: 0.7rem;
color: var(--concrete-surface);
letter-spacing: 0.2em;
margin-bottom: 1rem;
display: flex;
align-items: center;
gap: 0.75rem;
}
.page-header-title {
font-family: 'Oswald', sans-serif;
font-weight: 700;
font-size: 3rem;
color: var(--white);
text-transform: uppercase;
letter-spacing: 0.08em;
line-height: 1;
}
.page-header-title span {
color: var(--warning-yellow);
}
.page-header-sub {
font-family: 'Barlow Condensed', sans-serif;
font-weight: 400;
font-size: 1.1rem;
color: var(--steel-text);
margin-top: 0.5rem;
letter-spacing: 0.04em;
}
/* ============================================================
LEGAL CONTENT
============================================================ */
.legal-section {
padding: 5rem 0;
background: var(--concrete-dark);
}
.legal-panel {
background: var(--concrete-mid);
border: 1px solid rgba(240, 192, 48, 0.12);
padding: 3rem;
max-width: 860px;
margin: 0 auto;
position: relative;
}
.legal-block {
margin-bottom: 2.5rem;
}
.legal-block:last-child {
margin-bottom: 0;
}
.legal-block-label {
font-family: 'Share Tech Mono', monospace;
font-size: 0.65rem;
color: var(--concrete-surface);
text-transform: uppercase;
letter-spacing: 0.2em;
margin-bottom: 0.5rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.legal-block-label::before {
content: '';
display: inline-block;
width: 20px;
height: 1px;
background: var(--concrete-surface);
}
.legal-block h2 {
font-family: 'Barlow Condensed', sans-serif;
font-weight: 600;
font-size: 1.3rem;
color: var(--steel-bright);
text-transform: uppercase;
letter-spacing: 0.05em;
margin-bottom: 0.75rem;
}
.legal-block p {
font-family: 'Barlow', sans-serif;
font-weight: 300;
font-size: 0.95rem;
color: var(--steel-text);
line-height: 1.7;
margin-bottom: 0.5rem;
}
.legal-block p:last-child {
margin-bottom: 0;
}
.legal-block a {
color: var(--warning-yellow-dim);
text-decoration: none;
border-bottom: 1px solid transparent;
transition: border-color 0.2s linear;
}
.legal-block a:hover {
border-bottom-color: var(--warning-yellow-dim);
}
.legal-block ul {
margin: 0.5rem 0 0.5rem 1.5rem;
font-family: 'Barlow', sans-serif;
font-weight: 300;
font-size: 0.95rem;
color: var(--steel-text);
line-height: 1.7;
}
.legal-block ul li {
margin-bottom: 0.25rem;
}
.legal-divider {
height: 1px;
background: linear-gradient(90deg,
transparent 0%,
rgba(240, 192, 48, 0.15) 20%,
rgba(240, 192, 48, 0.15) 80%,
transparent 100%
);
margin: 2.5rem 0;
}
.legal-address {
font-family: 'Share Tech Mono', monospace;
font-size: 0.85rem;
color: var(--steel-text);
line-height: 2;
padding: 1rem 1.25rem;
background: rgba(26, 26, 26, 0.6);
border: 1px dashed rgba(240, 192, 48, 0.1);
display: inline-block;
}
.legal-address strong {
color: var(--steel-bright);
font-weight: 400;
}
.legal-note {
margin-top: 1.5rem;
padding: 1rem 1.25rem;
border-left: 3px solid var(--safety-orange);
background: rgba(224, 80, 32, 0.05);
font-family: 'Share Tech Mono', monospace;
font-size: 0.75rem;
color: var(--steel-text);
line-height: 1.6;
}
.legal-note strong {
color: var(--safety-orange);
font-weight: 400;
}
/* ============================================================
FOOTER
============================================================ */
.footer {
padding: 3rem 0 2rem;
background: var(--concrete-dark);
border-top: 1px solid rgba(240, 192, 48, 0.08);
position: relative;
z-index: 1;
}
.footer-inner {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 1rem;
}
.footer-brand {
display: flex;
align-items: center;
gap: 0.5rem;
}
.footer-brand-icon {
width: 22px;
height: 22px;
border: 1.5px solid var(--warning-yellow-dim);
display: flex;
align-items: center;
justify-content: center;
font-family: 'Oswald', sans-serif;
font-weight: 700;
font-size: 0.7rem;
color: var(--warning-yellow-dim);
}
.footer-brand-text {
font-family: 'Oswald', sans-serif;
font-weight: 500;
font-size: 0.85rem;
color: var(--steel-text);
letter-spacing: 0.1em;
text-transform: uppercase;
}
.footer-meta {
font-family: 'Share Tech Mono', monospace;
font-size: 0.65rem;
color: var(--concrete-surface);
letter-spacing: 0.1em;
text-align: right;
}
.footer-links {
display: flex;
gap: 1.5rem;
list-style: none;
}
.footer-links a {
font-family: 'Share Tech Mono', monospace;
font-size: 0.7rem;
color: var(--steel-text);
text-decoration: none;
letter-spacing: 0.1em;
transition: color 0.2s linear;
}
.footer-links a:hover,
.footer-links a.active {
color: var(--warning-yellow);
}
/* ============================================================
RESPONSIVE
============================================================ */
@media (max-width: 768px) {
.navbar-links {
display: none;
position: absolute;
top: 56px;
left: 0;
width: 100%;
background: rgba(26, 26, 26, 0.97);
flex-direction: column;
padding: 1rem 2rem;
gap: 0.75rem;
border-bottom: 1px solid rgba(240, 192, 48, 0.12);
}
.navbar-links.open {
display: flex;
}
.navbar-mobile-toggle {
display: block;
}
.page-header-title {
font-size: 2.2rem;
}
.legal-panel {
padding: 2rem 1.5rem;
}
.footer-inner {
flex-direction: column;
text-align: center;
}
.footer-links {
flex-wrap: wrap;
justify-content: center;
}
.footer-meta {
text-align: center;
}
}
@media (max-width: 480px) {
.container {
padding: 0 1rem;
}
.page-header-title {
font-size: 1.8rem;
}
.legal-panel {
padding: 1.5rem 1rem;
}
.navbar-inner {
padding: 0 1rem;
}
}
</style>
</head>
<body>
<!-- ============================================================
NAVBAR
============================================================ -->
<nav class="navbar">
<div class="navbar-inner">
<a href="index.html" class="navbar-brand">
<div class="navbar-brand-icon">D</div>
<span class="navbar-brand-text">DocuMentor</span>
</a>
<button class="navbar-mobile-toggle" id="navToggle">MENU</button>
<ul class="navbar-links" id="navLinks">
<li><a href="index.html#features">Features</a></li>
<li><a href="index.html#workflow">Workflow</a></li>
<li><a href="index.html#techstack">Technik</a></li>
<li><a href="index.html#download">Download</a></li>
<li><a href="datenschutz.html" class="active">Datenschutz</a></li>
</ul>
</div>
</nav>
<!-- ============================================================
PAGE HEADER
============================================================ -->
<div class="page-header">
<div class="hazard-stripe"></div>
<div class="container">
<div class="page-header-inner">
<div class="page-header-tag">
<span class="led led-green"></span>
SYSTEM AKTIV &mdash; DATENSCHUTZINFORMATIONEN
</div>
<h1 class="page-header-title">Daten<span>schutz</span></h1>
<p class="page-header-sub">Datenschutzerklärung gemäß DSGVO / BDSG</p>
</div>
</div>
<div class="hazard-stripe-thin"></div>
</div>
<!-- ============================================================
LEGAL CONTENT
============================================================ -->
<section class="legal-section">
<div class="container">
<div class="section-label reveal" data-num="DSE-01">Datenschutzerklärung</div>
<h2 class="section-title reveal" style="margin-bottom: 2rem;">Datenschutz</h2>
<div class="legal-panel corner-brackets riveted reveal">
<span class="rivet rivet-tl"></span>
<span class="rivet rivet-tr"></span>
<span class="rivet rivet-bl"></span>
<span class="rivet rivet-br"></span>
<!-- 1. Verantwortlicher -->
<div class="legal-block">
<div class="legal-block-label">§ 1 — VERANTWORTLICHER</div>
<h2>Verantwortlicher</h2>
<p>Verantwortlicher im Sinne der Datenschutz-Grundverordnung (DSGVO) und des Bundesdatenschutzgesetzes (BDSG) ist:</p>
<div class="legal-address" style="margin-top: 0.75rem;">
<strong>Vitali Graf</strong><br>
Kulenkampffallee 65b<br>
28213 Bremen<br>
Deutschland
E-Mail: <a href="mailto:info@vitaligraf.de">info@vitaligraf.de</a>
</div>
<!-- <div class="legal-note" style="margin-top: 1rem;">
<strong>HINWEIS:</strong> Bitte Adresse vor Veröffentlichung ergänzen.
</div> -->
</div>
<div class="legal-divider"></div>
<!-- 2. Allgemeines -->
<div class="legal-block">
<div class="legal-block-label">§ 2 — GRUNDSATZ</div>
<h2>Allgemeines zur Datenverarbeitung</h2>
<p>
Diese Website ist eine statische Informationsseite über das Open-Source-Projekt
DocuMentor. Es werden <strong style="color: var(--steel-bright); font-weight: 400;">keine Cookies</strong>,
<strong style="color: var(--steel-bright); font-weight: 400;">keine Tracking-Skripte</strong> und
<strong style="color: var(--steel-bright); font-weight: 400;">keine Webanalyse-Dienste</strong> verwendet.
</p>
<p>
Alle Schriftarten werden lokal ausgeliefert. Es werden keine externen
Ressourcen von Drittanbietern geladen. Es findet keine Verarbeitung
personenbezogener Daten durch diese Website statt.
</p>
</div>
<div class="legal-divider"></div>
<!-- 3. Server-Log -->
<div class="legal-block">
<div class="legal-block-label">§ 3 — SERVER-LOGDATEIEN</div>
<h2>Server-Logdateien</h2>
<p>
Beim Abruf dieser Website werden durch den Hosting-Anbieter automatisch
technische Zugriffsdaten in sogenannten Server-Logdateien erfasst.
Diese Daten werden nicht aktiv durch uns erhoben und umfassen:
</p>
<ul>
<li>Browsertyp und Browserversion</li>
<li>Verwendetes Betriebssystem</li>
<li>Referrer-URL (zuvor besuchte Seite)</li>
<li>Hostname des zugreifenden Rechners</li>
<li>Uhrzeit der Serveranfrage</li>
<li>IP-Adresse</li>
</ul>
<p>
Die Rechtsgrundlage für diese technisch notwendige Verarbeitung ist
Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse am sicheren Betrieb
der Website). Die Daten werden nicht mit anderen Datenquellen zusammengeführt
und nach kurzer Zeit automatisch gelöscht.
</p>
</div>
<div class="legal-divider"></div>
<!-- 4. Kontakt per E-Mail -->
<div class="legal-block">
<div class="legal-block-label">§ 4 — KONTAKTAUFNAHME</div>
<h2>Kontaktaufnahme per E-Mail</h2>
<p>
Wenn Sie uns per E-Mail kontaktieren, werden die übermittelten Daten
(E-Mail-Adresse, Inhalt Ihrer Nachricht sowie ggf. weitere von Ihnen
angegebene Daten) zur Bearbeitung Ihrer Anfrage und für den Fall von
Anschlussfragen gespeichert.
</p>
<p>
Die Verarbeitung dieser Daten erfolgt auf Grundlage von Art. 6 Abs. 1
lit. b DSGVO, sofern Ihre Anfrage im Zusammenhang mit der Erfüllung
eines Vertrages steht oder zur Durchführung vorvertraglicher Maßnahmen
erforderlich ist. In allen übrigen Fällen beruht die Verarbeitung auf
unserem berechtigten Interesse an der effektiven Bearbeitung der an uns
gerichteten Anfragen (Art. 6 Abs. 1 lit. f DSGVO).
</p>
<p>
Die Daten werden gelöscht, sobald Ihre Anfrage abschließend bearbeitet
wurde und keine gesetzlichen Aufbewahrungspflichten entgegenstehen.
</p>
</div>
<div class="legal-divider"></div>
<!-- 5. Desktop-Anwendung -->
<div class="legal-block">
<div class="legal-block-label">§ 5 — DESKTOP-ANWENDUNG</div>
<h2>DocuMentor Desktop-Anwendung</h2>
<p>
Die DocuMentor-Anwendung selbst läuft ausschließlich lokal auf Ihrem
Rechner. Sie überträgt keine Daten an externe Server. Alle
Konfigurationsdaten und Projektdateien werden ausschließlich lokal
gespeichert:
</p>
<ul>
<li>Linux: <code style="font-family: 'Share Tech Mono', monospace; font-size: 0.85em; color: var(--warning-yellow-dim);">~/.config/DocuMentor/config.json</code></li>
<li>Windows: <code style="font-family: 'Share Tech Mono', monospace; font-size: 0.85em; color: var(--warning-yellow-dim);">%APPDATA%\DocuMentor\config.json</code></li>
<li>macOS: <code style="font-family: 'Share Tech Mono', monospace; font-size: 0.85em; color: var(--warning-yellow-dim);">~/Library/Application Support/DocuMentor/config.json</code></li>
</ul>
<p>
Datenbankverbindungen zu PostgreSQL werden nur auf ausdrückliche
Konfiguration durch den Nutzer hergestellt und ausschließlich für den
in der Anwendung angezeigten Zweck verwendet.
</p>
</div>
<div class="legal-divider"></div>
<!-- 6. Betroffenenrechte -->
<div class="legal-block">
<div class="legal-block-label">§ 6 — IHRE RECHTE</div>
<h2>Ihre Rechte als betroffene Person</h2>
<p>Sie haben gegenüber uns folgende Rechte hinsichtlich Ihrer personenbezogenen Daten:</p>
<ul>
<li><strong style="color: var(--steel-bright); font-weight: 400;">Auskunftsrecht</strong> (Art. 15 DSGVO)</li>
<li><strong style="color: var(--steel-bright); font-weight: 400;">Recht auf Berichtigung</strong> (Art. 16 DSGVO)</li>
<li><strong style="color: var(--steel-bright); font-weight: 400;">Recht auf Löschung</strong> (Art. 17 DSGVO)</li>
<li><strong style="color: var(--steel-bright); font-weight: 400;">Recht auf Einschränkung der Verarbeitung</strong> (Art. 18 DSGVO)</li>
<li><strong style="color: var(--steel-bright); font-weight: 400;">Recht auf Datenübertragbarkeit</strong> (Art. 20 DSGVO)</li>
<li><strong style="color: var(--steel-bright); font-weight: 400;">Widerspruchsrecht</strong> (Art. 21 DSGVO)</li>
</ul>
<p>
Zur Ausübung Ihrer Rechte wenden Sie sich bitte an:
<a href="mailto:info@vitaligraf.de">info@vitaligraf.de</a>
</p>
<p>
Sie haben zudem das Recht, sich bei einer Datenschutz-Aufsichtsbehörde
über die Verarbeitung Ihrer personenbezogenen Daten zu beschweren.
</p>
</div>
<div class="legal-divider"></div>
<!-- 7. Aktualität -->
<div class="legal-block">
<div class="legal-block-label">§ 7 — AKTUALITÄT</div>
<h2>Aktualität dieser Datenschutzerklärung</h2>
<p>
Diese Datenschutzerklärung ist aktuell gültig und hat den Stand April 2026.
Durch die Weiterentwicklung dieser Website oder aufgrund geänderter
gesetzlicher bzw. behördlicher Vorgaben kann es notwendig werden,
diese Datenschutzerklärung zu ändern.
</p>
<p>
Die jeweils aktuelle Datenschutzerklärung kann jederzeit auf dieser
Seite abgerufen werden.
</p>
</div>
</div>
</div>
</section>
<div class="hazard-stripe-thin"></div>
<!-- ============================================================
FOOTER
============================================================ -->
<footer class="footer">
<div class="container">
<div class="footer-inner">
<div class="footer-brand">
<div class="footer-brand-icon">D</div>
<span class="footer-brand-text">DocuMentor</span>
</div>
<ul class="footer-links">
<li><a href="index.html#features">Features</a></li>
<li><a href="index.html#workflow">Workflow</a></li>
<li><a href="index.html#techstack">Technik</a></li>
<li><a href="index.html#download">Download</a></li>
<li><a href="impressum.html">Impressum</a></li>
<li><a href="datenschutz.html" class="active">Datenschutz</a></li>
</ul>
<div class="footer-meta">
SYSTEM // DOCUMENTOR // BUILD 2026.02<br>
PySide6 Desktop-Anwendung // Open Source
</div>
</div>
</div>
</footer>
<script>
(function() {
const toggle = document.getElementById('navToggle');
const links = document.getElementById('navLinks');
if (toggle && links) {
toggle.addEventListener('click', function() {
links.classList.toggle('open');
toggle.textContent = links.classList.contains('open') ? 'CLOSE' : 'MENU';
});
}
})();
(function() {
const reveals = document.querySelectorAll('.reveal');
const observer = new IntersectionObserver(function(entries) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
observer.unobserve(entry.target);
}
});
}, { threshold: 0.12, rootMargin: '0px 0px -40px 0px' });
reveals.forEach(function(el) { observer.observe(el); });
})();
(function() {
const navbar = document.querySelector('.navbar');
let ticking = false;
window.addEventListener('scroll', function() {
if (!ticking) {
requestAnimationFrame(function() {
navbar.style.borderBottomColor = window.scrollY > 80
? 'rgba(240, 192, 48, 0.25)'
: 'rgba(240, 192, 48, 0.12)';
ticking = false;
});
ticking = true;
}
});
})();
</script>
</body>
</html>