Web: Datenschutz- und Impressumsseite zur Landing Page hinzugefügt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-25 20:25:00 +02:00
parent 2b36afc451
commit 1501f8208d
3 changed files with 1849 additions and 12 deletions
+951
View File
@@ -0,0 +1,951 @@
<!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>
+884
View File
@@ -0,0 +1,884 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Impressum — 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);
--blueprint-line: rgba(240, 192, 48, 0.15);
--led-green: #30e060;
--led-red: #e03030;
}
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);
}
.led-yellow {
background-color: var(--warning-yellow);
color: var(--warning-yellow);
}
/* ============================================================
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-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;
}
/* ============================================================
SECTION DIVIDER
============================================================ */
.section-divider {
height: 1px;
background: linear-gradient(90deg,
transparent 0%,
rgba(240, 192, 48, 0.2) 20%,
rgba(240, 192, 48, 0.2) 80%,
transparent 100%
);
}
/* ============================================================
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="impressum.html" class="active">Impressum</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; RECHTSHINWEISE
</div>
<h1 class="page-header-title">Im<span>pressum</span></h1>
<p class="page-header-sub">Angaben gemäß § 5 DDG</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="IMP-01">Anbieterkennzeichnung</div>
<h2 class="section-title reveal" style="margin-bottom: 2rem;">Impressum</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>
<!-- Verantwortlicher -->
<div class="legal-block">
<div class="legal-block-label">§ 5 DDG — ANBIETER</div>
<h2>Verantwortlicher</h2>
<div class="legal-address">
<strong>Vitali Graf</strong><br>
Kulenkampffallee 65b<br>
28213 Bremen<br>
Deutschland
</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>
<!-- Kontakt -->
<div class="legal-block">
<div class="legal-block-label">KONTAKT</div>
<h2>Kontakt</h2>
<p>
E-Mail: <a href="mailto:info@vitaligraf.de">info@vitaligraf.de</a>
</p>
</div>
<div class="legal-divider"></div>
<!-- Projekthinweis -->
<div class="legal-block">
<div class="legal-block-label">PROJEKT</div>
<h2>Hinweis zum Projekt</h2>
<p>
DocuMentor ist ein Open-Source-Softwareprojekt zur Verwaltung und Validierung von
XSL-Transformationen. Die Software wird ohne Gewähr bereitgestellt.
</p>
<p>
Der Quellcode steht unter einer Open-Source-Lizenz. Einzelheiten entnehmen Sie
bitte der beiliegenden Lizenzdatei im Repository.
</p>
</div>
<div class="legal-divider"></div>
<!-- Haftungsausschluss -->
<div class="legal-block">
<div class="legal-block-label">HAFTUNG</div>
<h2>Haftungsausschluss</h2>
<p>
Die Inhalte dieser Website wurden mit größtmöglicher Sorgfalt erstellt.
Für die Richtigkeit, Vollständigkeit und Aktualität der Inhalte übernehme
ich jedoch keine Gewähr. Als Diensteanbieter bin ich gemäß § 7 DDG
für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen
verantwortlich.
</p>
<p>
Nach §§ 11 bis 13 DDG bin ich als Diensteanbieter nicht verpflichtet,
übermittelte oder gespeicherte fremde Informationen zu überwachen oder
nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen.
</p>
</div>
<div class="legal-divider"></div>
<!-- Urheberrecht -->
<div class="legal-block">
<div class="legal-block-label">URHEBERRECHT</div>
<h2>Urheberrecht</h2>
<p>
Die durch den Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten
unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung,
Verbreitung und jede Art der Verwertung außerhalb der Grenzen des
Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors
bzw. Erstellers.
</p>
<p>
Der Quellcode von DocuMentor ist unter den Bedingungen der zugehörigen
Open-Source-Lizenz frei verwendbar. Detailangaben hierzu finden Sie im
Repository.
</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" class="active">Impressum</a></li>
<li><a href="datenschutz.html">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>
+14 -12
View File
@@ -1824,24 +1824,24 @@
<p class="section-subtitle reveal">Bewährte Industriekomponenten für maximale Zuverlässigkeit.</p> <p class="section-subtitle reveal">Bewährte Industriekomponenten für maximale Zuverlässigkeit.</p>
<div class="tech-grid reveal from-bottom"> <div class="tech-grid reveal from-bottom">
<div class="tech-category">Kern</div> <!-- <div class="tech-category">Kern</div>
<div class="tech-badge"><span class="led led-green"></span> Python 3</div> <div class="tech-badge"><span class="led led-green"></span> Python 3</div>
<div class="tech-badge"><span class="led led-green"></span> PySide6 / Qt</div> <div class="tech-badge"><span class="led led-green"></span> PySide6 / Qt</div>
<div class="tech-badge"><span class="led led-green"></span> Pydantic</div> <div class="tech-badge"><span class="led led-green"></span> Pydantic</div> -->
<div class="tech-category">Transformation</div> <!-- <div class="tech-category">Transformation</div> -->
<div class="tech-badge"><span class="led led-yellow"></span> Saxon XSLT</div> <div class="tech-badge"><span class="led led-yellow"></span> Saxon XSLT</div>
<div class="tech-badge"><span class="led led-yellow"></span> Apache FOP</div> <div class="tech-badge"><span class="led led-yellow"></span> Apache FOP</div>
<div class="tech-badge"><span class="led led-yellow"></span> diff-pdf</div> <div class="tech-badge"><span class="led led-yellow"></span> diff-pdf</div>
<div class="tech-category">Daten</div> <!-- <div class="tech-category">Daten</div>
<div class="tech-badge"><span class="led led-orange"></span> PostgreSQL</div> <div class="tech-badge"><span class="led led-orange"></span> PostgreSQL</div>
<div class="tech-badge"><span class="led led-orange"></span> Polars</div> <div class="tech-badge"><span class="led led-orange"></span> Polars</div>
<div class="tech-badge"><span class="led led-orange"></span> ConnectorX</div> <div class="tech-badge"><span class="led led-orange"></span> ConnectorX</div>
<div class="tech-category">Werkzeuge</div> <div class="tech-category">Werkzeuge</div>
<div class="tech-badge"><span class="led led-green"></span> blake2b</div> <div class="tech-badge"><span class="led led-green"></span> blake2b</div>
<div class="tech-badge"><span class="led led-green"></span> PyInstaller</div> <div class="tech-badge"><span class="led led-green"></span> PyInstaller</div> -->
</div> </div>
</div> </div>
</section> </section>
@@ -1873,8 +1873,8 @@
<span class="download-card-badge">EMPFOHLEN</span> <span class="download-card-badge">EMPFOHLEN</span>
</div> </div>
<p class="download-card-desc">Windows-Installer mit automatischer Einrichtung. Erstellt Startmenü-Einträge und ermöglicht saubere Deinstallation über die Systemsteuerung.</p> <p class="download-card-desc">Windows-Installer mit automatischer Einrichtung. Erstellt Startmenü-Einträge und ermöglicht saubere Deinstallation über die Systemsteuerung.</p>
<span class="download-card-meta">DocuMentor-2.0-win64.msi &mdash; ca. 85 MB</span> <span class="download-card-meta">DocuMentor-1.6.3.msi &mdash; ca. 255 MB</span>
<a href="#" class="btn-download">&#9660; MSI herunterladen</a> <a href="https://code.vitaligraf.de/info/xsl-validator/releases/download/1.6.3/DocuMentor-1.6.3.msi" class="btn-download">&#9660; MSI herunterladen</a>
</div> </div>
<div class="download-card corner-brackets"> <div class="download-card corner-brackets">
<div class="download-card-header"> <div class="download-card-header">
@@ -1882,15 +1882,15 @@
<span class="download-card-badge">PORTABEL</span> <span class="download-card-badge">PORTABEL</span>
</div> </div>
<p class="download-card-desc">Portable Version ohne Installation. Entpacken und direkt starten &mdash; ideal für eingeschränkte Umgebungen ohne Administratorrechte.</p> <p class="download-card-desc">Portable Version ohne Installation. Entpacken und direkt starten &mdash; ideal für eingeschränkte Umgebungen ohne Administratorrechte.</p>
<span class="download-card-meta">DocuMentor-2.0-win64-portable.zip &mdash; ca. 80 MB</span> <span class="download-card-meta">DocuMentor-1.6.3.zip &mdash; ca. 315 MB</span>
<a href="#" class="btn-download">&#9660; ZIP herunterladen</a> <a href="https://code.vitaligraf.de/info/xsl-validator/releases/download/1.6.3/DocuMentor-1.6.3.zip" class="btn-download">&#9660; ZIP herunterladen</a>
</div> </div>
</div> </div>
</div> </div>
<!-- 2. Hinweis Windows --> <!-- 2. Hinweis Windows -->
<div class="requirements-note"> <div class="requirements-note">
<strong>HINWEIS:</strong> Die Windows-Pakete enthalten alle Abhängigkeiten inklusive Python-Runtime. Lediglich eine <strong>Java Runtime</strong> (für Saxon) muss separat installiert werden. Für die volle Performance der Pool-Worker wird ein <strong>Java JDK</strong> (statt nur JRE) empfohlen. <strong>HINWEIS:</strong> Die Windows-Pakete enthalten alle Abhängigkeiten inklusive Python-Runtime. Lediglich eine <strong>Java Runtime</strong> (für Saxon und Apache FOP) muss separat installiert werden. Für die volle Performance der Pool-Worker wird ein <strong>Java JDK</strong> (statt nur JRE) empfohlen.
</div> </div>
<!-- 3. Quellcode --> <!-- 3. Quellcode -->
@@ -1901,7 +1901,7 @@
<div class="install-step-num">01</div> <div class="install-step-num">01</div>
<div class="install-step-content"> <div class="install-step-content">
<div class="install-step-label">Repository klonen</div> <div class="install-step-label">Repository klonen</div>
<div class="code-block"><span class="prompt">$ </span>git clone https://github.com/your-org/xsl-validator.git</div> <div class="code-block"><span class="prompt">$ </span>git clone https://code.vitaligraf.de/info/xsl-validator.git</div>
</div> </div>
</div> </div>
<div class="install-step"> <div class="install-step">
@@ -1922,7 +1922,7 @@
<!-- 4. Hinweis Quellcode --> <!-- 4. Hinweis Quellcode -->
<div class="requirements-note"> <div class="requirements-note">
<strong>HINWEIS:</strong> Erfordert Python 3.13+, Java Runtime (für Saxon) und den Paketmanager <strong>uv</strong>. Für die volle Performance der Pool-Worker wird ein <strong>Java JDK</strong> (statt nur JRE) empfohlen. <strong>HINWEIS:</strong> Erfordert Python 3.13+, Java Runtime (für Saxon und Apache FOP) und den Paketmanager <strong>uv</strong>. Für die volle Performance der Pool-Worker wird ein <strong>Java JDK</strong> (statt nur JRE) empfohlen.
</div> </div>
</div> </div>
</div> </div>
@@ -1945,6 +1945,8 @@
<li><a href="#workflow">Workflow</a></li> <li><a href="#workflow">Workflow</a></li>
<li><a href="#techstack">Technik</a></li> <li><a href="#techstack">Technik</a></li>
<li><a href="#download">Download</a></li> <li><a href="#download">Download</a></li>
<li><a href="impressum.html">Impressum</a></li>
<li><a href="datenschutz.html">Datenschutz</a></li>
</ul> </ul>
<div class="footer-meta"> <div class="footer-meta">
SYSTEM // DOCUMENTOR // BUILD 2026.02<br> SYSTEM // DOCUMENTOR // BUILD 2026.02<br>