Copyright, Open Game License & Co. in der Pen-&-Paper-Welt

Copyright, Open Game License & Co. in der Pen-&-Paper-Welt

Wie Urheberrecht, offene Lizenzen und Community-Programme die kreative Freiheit in der Rollenspielszene ermöglichen.

Aktualisiert: 12. Oktober 2025 · Autor: Paul · Lesezeit: ~18–25 Min.

Einleitung: Woran du merkst, dass Lizenzen relevant sind

Du willst ein Abenteuer veröffentlichen, einen Hack zu Dungeons & Dragons schreiben oder ein neues System kreieren, das mit bestehenden Regeln kompatibel ist? Dann stehst du vor einer Frage: „Was darf ich wirklich?“

Früher war das oft unbekannt oder verpönt – heute ist es zentral: Community, Verlage und Plattformen verlangen klare Lizenzregelungen. In diesem Artikel lernst du, welche Lizenzmodelle existieren, wie sie genutzt werden, was erlaubt ist und wie du deine Projekte rechtlich sauber aufsetzt.

1) Warum Lizenzen im Pen-&-Paper wichtig sind

Pen-&Paper lebt von Community, von „Homebrew“, von Hacks und Modularity. Aber: Wenn du Inhalte veröffentlichst – sei es kostenlos oder kommerziell – tritt automatisch das Urheberrecht in Kraft.

Du darfst selbst geschriebene Ideen und Mechaniken verwenden, aber du darfst keine geschützten Texte, Illustrationen, Markennamen oder Layouts ohne Erlaubnis verwenden. Lizenzen legen nun fest: welche Teile du nutzen darfst, wie du sie nutzen darfst und was du unbedingt vermeiden musst.

Risiko ohne Lizenz am Beispiel

Stell dir vor: Du verkaufst ein Abenteuer auf itch.io und nutzt in deiner Beschreibung den Begriff „Vergessene Reiche“. Sofort kann das Markenrecht greifen. Oder du kopierst eine Zaubertabelle aus einem existierenden D&D-Buch – auch nur ein paar Felder – und wirst abgemahnt.

Ein weiteres Beispiel: Ein Verlag löscht eigenmächtig alle Module, die nicht seiner offiziellen Lizenz entsprechen – dein Abenteuer ist weg. Ohne Lizenz fehlst du als Autor*in jeder legitimen Basis.

Lizenz als Schutz & Freiheit

Eine Lizenz ist wie ein Vertrag zwischen dir und dem Rechteinhaber: Du bekommst eine Erlaubnis, bestimmte Inhalte zu nutzen, solange du Bedingungen erfüllst (z. B. Namensnennung, keine Logos, keine irreführende Werbung). Gleichzeitig schützt sie das geistige Eigentum des Verlags.

So entsteht eine Win-Win-Situation: Du kannst rechtssicher arbeiten, und Verlage behalten Kontrolle über ihre Marke. Viele Verlage nutzen dieses Modell gezielt, um ihre Community zu fördern.

Lizenzen sind die unsichtbaren Spielregeln der kreativen RPG-Welt.

2) Idee vs. Ausdruck – und was wirklich geschützt ist

Ein Kernprinzip im Urheberrecht: Ideen sind frei, aber Ausdruck ist geschützt. In der RPG-Welt zeigt sich das oft so:

  • Nicht geschützt: Mechaniken wie „Würfle 2W6 und vergleiche mit Schwierigkeit“. Diese Idee darf jeder frei verwenden.
  • Geschützt: Der exakte Text, Tabellen, Illustrationen oder ein spezieller Stil, z. B. „Am Horizont erscheinen zwei Elemente …“.
  • Teilweise geschützt / Markenrecht: Namen wie „Beholder“, „Vergessene Reiche“, „D20 System“ – hier gilt Markenschutz.

Wenn du also ein eigenes System baust, darfst du Mechaniken übernehmen oder ähnlich gestalten – aber du musst eigene Texte, eigene Bezeichnungen und eigene Illustrationen verwenden.

Fallbeispiel: „Inspiriert von X, aber eigenständig“

Ein Beispielautor lässt sich von D&D-Magie inspirieren: 3 Elemente kombinieren statt 5, veränderte Zauberliste. Solange er dies in eigenen Worten schreibt, eigene Namen nutzt und keine geschützten SRD-Texte kopiert, ist das in vielen Fällen zulässig (je nach Lizenz). Aber: Wenn er Monster, Zauber-Tabellen oder Artworks übernimmt – ohne Lizenz – ist er in rechtlichem Konflikt.

3) Die großen Lizenzmodelle & ihre Anwendung im RPG

3.1 Creative Commons (CC)

Eine der flexibelsten Lizenzen. Besonders beliebt sind:

  • CC-BY: Nutzung inkl. Kommerz, solange du den Urheber nennst.
  • CC-BY-SA: Weitergabe nur unter derselben Lizenz (Copyleft).
  • CC-BY-NC: Nutzung nur nicht kommerziell – problematisch für Verkäufe.

Viele Indie-RPGs (z. B. Cairn, Knave, Maze Rats) nutzen CC-Lizenzen – oftmals in Kombination mit OGL. Vorteil: Bekanntes Lizenzsystem mit internationaler Verbreitung.

3.2 OGL – Open Game License

Eine der ältesten und einflussreichsten RPG-Lizenzen. Sie trennt Inhalte in:

  • Open Game Content (OGC): Texte, Tabellen, Regeldetails, die unter der Lizenz genutzt werden dürfen.
  • Product Identity (PI): Markenname, Logos, spezifisches Setting, Illustrationen – diese sind ausgeschlossen.

Viele Retro-Klone (z. B. OSRIC, OSE, OpenD6) setzen auf OGL. Seit 2023 veröffentlichte Wizards of the Coast ihr D&D-SRD 5.2 unter CC-BY – eine historische Abkehr vom klassischen OGL.

3.3 ORC – Open RPG Creative License

Die ORC-Lizenz von Paizo & Azora Law ist systemneutral und auf langfristige Rechtssicherheit ausgelegt. Sie ermöglicht, offiziell als Licensed Material freigegebene Inhalte unter ORC zu nutzen – während Marken, Illustrationen und Settingräume geschützt bleiben.

Mehrere Verlage haben ORC bereits angenommen, und es gewinnt an Bedeutung als neue Open-Standard-Alternative zur OGL.

3.4 Third-Party-Programme (3PP)

Viele Verlage bieten eigene Lizenzprogramme, um kompatible Inhalte zu erlauben:

  • MÖRK BORG 3PP: sehr klare Bedingungen, kein Logo, Pflichtdisclaimer, NFT-Verbot.
  • Free League FTL (Free Tabletop License): erlaubt dir, auf die Year Zero Engine aufzubauen.
  • Goodman Games (DCC/MCC): etabliertes 3PP-Programm mit Logo-Richtlinien.
  • Savage Worlds (SWAG / Ace / Fan): Nutzung über Plattformprogramme mit Umsatzaufteilung.
  • OSE 3PP: OGL-Rückgrat + kompatibles Logo.
  • Weitere Beispiele: Troika!, Land of Eem, Mothership, Liminal Horror (alle mit 3PP-Richtlinien).

4) Was ist erlaubt? – Praxis-Matrix & Fallbeispiele

AktionErlaubt?Hinweise / Beispiele

Abenteuer auf Basis eines SRD✓ JaMit Lizenztext + Attribution; Beispiel: D&D-SRD 5.2 unter CC-BY Texte/Tabellen kopieren✗ NeinNur SRD-Teile erlaubt; bei OGL: Open Game Content, nicht Product Identity „Kompatibel mit …“-Hinweis verwenden✓ Meist jaNur wenn Lizenz / 3PP es erlaubt – oft Badge nutzen Offizielle Logos / Marken verwenden✗ NeinAus Markenrechten ausgeschlossen Kommerzielle Veröffentlichung (Verkauf)✓ Ja**Gilt für CC-BY, OGL, ORC, 3PP; nicht für CC-BY-NC Systeme / Inhalte mischen⚠ MöglichNur, wenn Lizenzen kompatibel sind (z. B. CC-BY + OGL-Bedingungen)

Fallbeispiele aus der Praxis

Beispiel A: Du schreibst ein Abenteuer für D&D 5.2 und nutzt Zaubertexte aus dem SRD (CC-BY). Du darfst, musst aber den Lizenztext beilegen und darfst nicht behaupten, dein Werk sei „von WotC autorisiert“.

Beispiel B: Du willst zwei SRDs mischen (z. B. D&D + Fate). Du nutzt Inhalte, die unter CC-BY lizenziert sind, und kombinierst sie mit OGL-Material. Das ist möglich, aber du musst beide Lizenzbedingungen einhalten, z. B. Attribution, Name der Lizenzversionen etc.

Beispiel C: Du nutzt eine offizielle Monsterstatistik aus einem Buch, wandelst Werte um, formulierst alles neu. Das reicht oft nicht – der Kern (Monstername + spezielle Werte) fällt unter Product Identity oder Marken. Besser: nutze ein Monster unter offener Lizenz (z. B. aus SRD) und modifiziere es.

5) Umfangreiche Liste: Offene Systeme, SRDs & Lizenzen (2025)

Dieser Abschnitt enthält bewährte Systeme, mit Lizenztyp, kommerzieller Nutzung und kurzen Anmerkungen.

Suche

Lizenztyp

Alle OGL ORC CC BY CC BY-SA CC BY-NC CC BY-NC-SA FTL MOTO 3PP Fan Content Open SRD Open Legend License DRL

Kommerzielle Nutzung

Alle Ja Nein Eingeschränkt

Zurücksetzen

System / Engine / SRD Lizenzmodell Kommerz? / Hinweise Quelle

D&D SRD 5.1 / 5.2CC-BY 4.0Ja – historischer Lizenzwechselroll20.net/dnd-srd

Fate Core / AcceleratedCC-BY + OGLJa – hackfreundlichfate-srd.com

Forged in the Dark / Blades SRDCC-BYJa – viele Hacksbladesinthedark.com

CairnCC-BY-SAJa – Copyleftcairnrpg.com

KnaveCC-BYJaquestingbeast.itch.io

Maze RatsCC-BYJaquestingbeast.itch.io

24XXCC-BYJajasoet.itch.io

Basic Fantasy RPG (4e)CC-BY-SAJa – komplette Linie umgestelltbasicfantasy.org

Black Sword HackCC-BYJa – SRD offenswordfishislands.com

Liminal HorrorCC-BY-SA + 3PPJa – Horror OSRLiminalHorror SRD

RunecairnSRD + 3PPJa – Norse Fantasy Hackrunecairnrpg.com

Into the Odd / Mark of the OddMOTO-LizenzJa – offizieller Lizenzrahmeninto-the-odd.net

MÖRK BORG / CY_BORG / PIRATE BORG3PP-LizenzJa – Logos & Art ausgeschlossenmorkborg.com

Old-School Essentials (OSE)OGL + 3PPJa – OGL-SRD + Kompatibilitätslogonecroticgnome.com

OSRICOGLJa – Retroklassikerosricrpg.com

Dominion RulesDRLJa – alte offene Lizenzdominionrules.org

OpenD6OGL / CC-RessourcenJa – lang offen weiterentwickeltopend6project.org

Year Zero Engine (YZE)FTL (Free Tabletop License)Ja – eigene Spiele möglichFree League FTL

Dungeon Crawl Classics (DCC)OGLJa – Third-Party möglichgoodman-games.com

Savage WorldsSWAG / Ace / FanJa*, plattformgebundenpeginc.com

Land of EemLOELJa – offene Lizenzlandofeem.com

Pathfinder / StarfinderORCJa – Licensed Material offenpaizo.com/orclicense

Troika!3PP-AgreementJa – Markenregeln beachtenmelsonia.com

Mothership 1e3PP-LizenzJa – Antragsprozess dokumentiertmothershiprpg.com

IronswornTeils CC-BY, Volltexte NCTeils möglich (z. B. Oracles)ironswornrpg.com

FudgeOGLJa – verschiedene Versionenfudgerpg.com

Microlite20 / Microlite74OGLJa – Minimal-Retroklonemicrolite20.org

Dungeon WorldCC BYJa – offene PbtA-RegelnWynwerod

OpenQuestOGL / Open SRDJa – freies, offenes SystemGitHub

WayfarersOGL (eigene Variante)Ja – nutzt d20-BestandteileWikipedia)

GUMSHOETeilweise offen / SRDJa – SRD-BestandteileWynwerod

Powered by the Apocalypse (PbtA)Offen / DerivatfreigabeJa – FrameworkWynwerod

13th Age SRDOGL / Open SRDJa – SRD nutzbarPelgrane Press

Worlds Without NumberOpen SRDJa – Design-Tools/SRDSine Nomine

Whitehack3PP / FanEingeschränktWhitehack

Swords & WizardryOGLJa – OGL-kompatibelFrog God Games

Labyrinth LordOGLJa – OGL-kompatibelGoblinoid Games

BLUEHOLMEOGLJa – OGL-basiertDreamscape

Castles & CrusadesOGL / 3PPJa – 3PP-ProgrammTroll Lord

White Box FMAGOGLJa – OGL-basiertBrave Halfling

Cairn 2eCC BY-SAJa – Copyleftcairnrpg.com

Knave 2eCC BYJaQuesting Beast

Mausritter3PPJa – 3PPmausritter.com

The Wretched & Alone (Carta SRD)CC BYJa – SRDcarta.fun

GLOG (Goblins Laws of Gaming)CC BY-SAJa – CopyleftGLOG Hub

Liminal Horror SRDCC BY-SA + 3PPJaSRD

Into the Odd SRDMOTOJa – Lizenzrahmeninto-the-odd.net

Electric BastionlandMOTO-kompatibelJaBastionland

Troika! Numinous Edition3PP AgreementJa – MarkenregelnMelsonia

Mothership 1e (Panic Engine)3PP LizenzJa – Antrag nötigmothershiprpg.com

The Black Hack 2eCC BYJaThe Black Hack

SCP RPG (Liminal Archive u. ä.)CC BY-SAEingeschränkt – ShareAlikeSCP Licensing

Cairn Jam SRDs (DURF, Primeval 2k)CC BY / CC BY-SAJaitch.io/cairn

Lasers & FeelingsCC BY-NCEingeschränkt (NC)One Seven Design

Wushu OpenOpen SRDJaWushu Open

Barbarians of LemuriaFan / 3PPEingeschränktBoL

Cortex Prime Creator StudioCreator StudioJa – PlattformCortex

Year Zero SRD (Community)FTL / SRDJaFree League

Scarlet HeroesOpen SRDJaSine Nomine

Cairn: UVG kompatibelCC BY-SA / kompatibelJaUVG

MUNE (Minimalist Universal)CC BYJaMUNE Blog

Errant (kompatibel)CC BY-SA / kompatibelJaErrant SRD

The Game of Rassilon SRDSRD / FanEingeschränktTGoR

Swords & WizardryOGLJa – OGL-kompatibelFrog God Games

Labyrinth LordOGLJa – OGL-kompatibelGoblinoid Games

White Box: FMAGOGLJa – OGL-basiertBrave Halfling

BLUEHOLMEOGLJa – OGL-basiertDreamscape Design

Castles & CrusadesOGL / 3PPJa – 3PP-ProgrammTroll Lord

d20 SRD 3.5OGLJa – OGL-Referenzd20srd.org

Pathfinder 1e SRDOGLJa – OGLd20pfsrd.com

Cepheus EngineOGLJa – offenes Sci‑FiCepheus SRD

White StarOGLJa – OGL‑basiertWhite Star

Open Legend RPGOpen Legend LicenseJa – offenopenlegendrpg.com

BRP (Basic Roleplaying) SRDOpen License / ORCJa – SRD offenChaosium BRP Open

QuestWorlds SRDCC BYJa – offenQuestWorlds

13th Age SRDOGLJa – SRD nutzbar13th Age SRD

Legend (Mongoose) SRDOGLJa – d100 OGLMongoose Legend

Mini Six (OpenD6)OGLJa – OGLMini Six

Knave 2e SRDCC BYJaQuesting Beast

Cairn 2e SRDCC BY-SAJa – Copyleftcairnrpg.com

Tunnel GoonsCC BY 4.0JaTunnel Goons

Lumen SRDCC BY 4.0Ja – SRDLumen SRD

Electric BastionlandMOTO-kompatibelJaBastionland

Index Card RPG (ICRPG)3PPJa – Creator LicenseRunehammer

FIST SRDCC BY-NC-SAEingeschränkt (NC)FIST

Lasers & FeelingsCC BY-NCEingeschränkt (NC)One Seven Design

Wushu OpenOpen SRDJaWushu Open

The Dozen Dooms (Cairn)CC BY-SAJa – CopyleftDozen Dooms

OpenQuest 3 SRDOGLJa – OGLOpenQuest

Sine Nomine ToolboxOpen SRDJaSine Nomine

Basic Fantasy SRD (Web)CC BY-SAJaBFRPG SRD

Cairn (ES) SRDCC BY-SAJacairnrpg.com

Cairn (DE) SRDCC BY-SAJacairnrpg.com

Fate Condensed SRDCC BYJafate-srd.com

Fate System Toolkit SRDCC BYJafate-srd.com

Blades SRD (Printables)CC BYJabladesinthedark.com

Mark of the Odd (SRD)MOTOJainto-the-odd.net

MÖRK BORG 3PP Guide3PPEingeschränktmorkborg.com

CY_BORG 3PP3PPEingeschränktmorkborg.com

PIRATE BORG 3PP3PPEingeschränktmorkborg.com

Troika! 3PP Agreement3PPJamelsonia.com

Goodman DCC 3PP3PPJagoodman-games.com

Savage Worlds SWAGSWAGJa* – PlattformDriveThru SWAG

Savage Worlds ACEACEJa – Partnerpeginc.com

Savage Worlds FanFan PolicyEingeschränktpeginc.com

Open Legend SRDOpen Legend LicenseJaOpen Legend SRD

Cairn SRD (Print)CC BY-SAJacairnrpg.com

Cairn SRD (Web)CC BY-SAJacairnrpg.com/srd

Cairn SRD (GitHub)CC BY-SAJaGitHub Cairn

Fate SRD (Web)CC BYJafate-srd.com

Fate SRD (GitHub)CC BYJaGitHub

Blades SRD (Web)CC BYJabladesinthedark.com

Dungeon World SRD (Web)CC BYJadungeonworldsrd.com

QuestWorlds (Web)CC BYJaQuestWorlds

BRP Open (Web)Open License / ORCJaChaosium

Open Legend (GitHub)Open Legend LicenseJaGitHub Open Legend

d20 SRD (System Reference)OGLJad20srd.org

Hinweis: „Kostenlos nutzbar“ heißt nie „ohne Regeln“. Lies stets den Original-Lizenztext und halte dich an Pflicht-Attributionen und Logo-Regeln.

  • Rückgang der OGL-Abhängigkeit: Immer mehr Verlage setzen auf CC oder ORC.
  • ORC als Standardoption: Systemneutrale Lizenz gewinnt an Akzeptanz.
  • Bessere 3PP-Guidelines: Verlage veröffentlichen klare Lizenz-PDFs und Badge-Sets.
  • Plattformen fördern Open Content: Itch.io, DriveThru etc. unterstützen CC-/ORC-basierte Veröffentlichungen.

7) Checkliste für rechtssichere Veröffentlichungen

  • Wähle eine passende Lizenz (CC-BY, ORC, OGL, 3PP …) und sichere dir den Originaltext.
  • Definiere klar den Geltungsbereich: Was ist offen, was ist ausgeschlossen (Marken, Logos etc.).
  • Stelle sicher, dass dein Werk mit der Lizenz kompatibel ist (z. B. wenn du Inhalte aus mehreren Quellen mischst).
  • Setze vollständige Pflicht-Attribution + Lizenzinformationen (Version, URL).
  • Vermeide geschützte Marken oder Logos, nutze offizielle Badges, wenn erlaubt.
  • Füge einen Haftungsausschluss & Disclaimer hinzu (insbesondere, wenn du rechtliche Hinweise gibst).
  • Versioniere dein Werk (z. B. in Git / Ordnerstruktur) mit Lizenzversionen.
  • Testlauf: Simuliere eine Veröffentlichung, z. B. auf itch.io, und prüfe alle Lizenztexte & Pflichtblöcke.

8) Fazit & Ausblick

In der wachsenden Pen-&-Paper-Community ist Lizenzklarheit nicht optional – sie ist zentral. Sie ermöglicht dir, kreativ zu sein, ohne rechtliche Risiken einzugehen.

In den kommenden Jahren wird sich zeigen, ob ORC endgültig die neue Open-Standard-Lizenz wird, wie 3PP-Modelle weiter entwickelt werden und wie Plattformen und Communities kooperieren. Für dich heißt das: Werde Lizenz-bewusst, nutze offene Inhalte mit Respekt und setze auf Transparenz.

9) Quellen & Referenzen

  • OSE 3PP, DCC/MCC/XCC 3PP, Savage Worlds SWAG/Ace/Fan: offizielle Verlagsseiten
  • Dominion Rules Licence, OpenD6, OSRIC: Projekt- und SRD-Hubs

10) Wichtiger Hinweis

Dieser Artikel ist als umfassender Überblick gedacht, aber keine Rechtsberatung. Für verbindliche Urteile konsultiere einen Fachanwalt für Urheber- und Markenrecht. Lizenzen und Gesetzeslagen können sich ändern. Prüfe stets den Originaltext der Lizenz.

Inhalt

  1. Einleitung
  1. 1) Warum Lizenzen im Pen-&-Paper wichtig sind
  1. 2) Idee vs. Ausdruck
  1. 3) Lizenzmodelle
  1. 4) Praxis & Fallbeispiele
  1. 5) Offene Systeme / SRDs
  1. 6) Trends 2025
  1. 7) Checkliste
  1. 8) Fazit
  1. 9) Quellen
  1. 10) Hinweis

{literal}

:root{ --header-offset: 96px; /* wenn dein Header höher/tiefer ist, hier anpassen */ --toc-accent: #0A7373; --text: #1e293b; --muted-bg: #f8fafc; --muted-br: #e2e8f0; } html, body, .article-single, .article-wrap { overflow: visible !important; }

/* Hero */ .hero { background-image: url({/literal}{$PAGE_URL}{literal}src/img/blog/pen-and-paper-lizenzen-und-copyright.webp); position: relative; min-height: 700px; background-size: cover; font-size: 18px; color:#fff; } .hero .hero-inner { position:absolute; width:100%; bottom:30px; padding-left: clamp(20px,6vw,100px); padding-right: clamp(20px,6vw,100px); } .hero h1 { font-weight:700; font-size: clamp(36px,6vw,65px); letter-spacing:-1px; margin:0; } .hero p em { font-style:italic; }

/* Layout */ .article-single { padding-bottom: 100px; } .article-wrap { width: min(1180px, 100%); margin: 0 auto; padding: 50px clamp(16px, 3vw, 0) 0; display: grid; grid-template-columns: 1fr minmax(220px, 280px); gap: 2rem; align-items: start; } @media (max-width: 1024px){ .article-wrap { grid-template-columns: 1fr; } }

article p { font-size:18px; line-height:30px; letter-spacing:.2px; } h2 { font-size: 44px; font-weight: 600; padding-top: 35px; padding-bottom: 10px; } h3 { font-size: 20px; font-weight: 700; padding-top: 15px; letter-spacing: .2px; }

/* TOC rechts: gesamte Spalte sticky */ .toc-col{ position: sticky; top: var(--header-offset); align-self: start; max-height: calc(100vh - var(--header-offset) - 12px); }

.toc-sticky{ position: static; /* kein zusätzliches sticky innen */ overflow: auto; padding: 1rem 1rem 1.25rem; border: 1px solid var(--muted-br); border-radius: 12px; background: var(--muted-bg); box-shadow: 0 2px 4px rgba(0,0,0,.04); } @media (max-width:1024px){ .toc-col{ position: static; max-height: none; } }

.toc-sticky h2{ margin:0 0 .5rem; font-size:1.1rem; color: var(--toc-accent); } .toc-list{ list-style:none; margin:0; padding:0; } .toc-list li{ margin:.25rem 0; } .toc-link{ display:block; padding:.35rem .5rem; border-radius:8px; text-decoration:none; color: var(--text); border:1px solid transparent; transition: background-color .15s ease, color .15s ease, border-color .15s ease; word-break: break-word; } .toc-link:hover{ background:#eef2f7; color: var(--toc-accent); } .toc-link.is-active{ background:#ecfdf5; color:#065f46; border-color:#bbf7d0; font-weight:600; }

/* Tabelle */ table { width:100%; border-collapse: collapse; font-size:16px; } thead th { text-align:left; border-bottom:2px solid #e5e7eb; padding:10px 8px; } tbody td { border-bottom:1px solid #f1f5f9; padding:10px 8px; vertical-align: top; } blockquote{ margin: 1rem 0; padding: .5rem .75rem; border-left: 4px solid var(--toc-accent); background:#f0fdfa; }

@media (prefers-reduced-motion: reduce){ html { scroll-behavior: auto !important; } } /* Erlaube Sticky: / html, body, .page, .content, .container, .row, .article-single, .article-wrap { overflow: visible !important; transform: none !important; / nur setzen, wenn wirklich nötig / } / Falls du Overflow wegen horizont. Scroll brauchst: nur X verstecken */ .page, .content, .container, .row { overflow-x: hidden !important; overflow-y: visible !important; }

article ul li {padding-top: 5px; padding-left: 30px;} article ul li::before { content: ''; display: block; margin-left: -35px; position: absolute; width: 25px; margin-top: 6px; height: 12px; background-color: #0A7373; border-radius: 1px; }

.filterbar { display: grid; gap: .75rem; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); align-items: end; margin: 1rem 0 1.25rem; position: sticky; top: 0; background: #0f0f0f; /* dunkler Hintergrund wie Hero */ padding: .75rem; border-radius: .5rem; z-index: 10; } .filter-item label { display: block; font-size: .85rem; opacity: .8; margin-bottom: .25rem; color: #fff; } .filter-item input[type="search"], .filter-item select { width: 100%; padding: .5rem .6rem; border: 1px solid #333; background: #181818; color: #fff; border-radius: .375rem; } .filter-item button { width: 100%; padding: .55rem .7rem; border: 0; border-radius: .375rem; background: #3b82f6; color: #fff; cursor: pointer; } .filter-item button:hover { filter: brightness(1.05); }

/* Tabelle – optional minimal / #license-table { width: 100%; border-collapse: collapse; } #license-table th, #license-table td { padding: .6rem .7rem; border-bottom: 1px solid #2a2a2a; } #license-table thead th { text-align: left; background: #141414; color: #fff; position: sticky; top: calc(0px + 70px); / unter der Filterbar, je nach Höhe anpassen */ z-index: 5; }

{/literal}

{literal}

(function(){ const HEADER_OFFSET_PX = parseInt(getComputedStyle(document.documentElement) .getPropertyValue('--header-offset')) || 0;

const toc = document.getElementById('toc'); if(!toc) return;

const links = Array.from(toc.querySelectorAll('a.toc-link')); const map = new Map( links .filter(a => a.hash && a.hash.startsWith('#')) .map(a => [decodeURIComponent(a.hash.slice(1)), a]) );

const sections = Array.from(map.keys()) .map(id => document.getElementById(id)) .filter(Boolean);

function activate(id){ links.forEach(l => l.classList.remove('is-active')); const a = map.get(id); if(a) a.classList.add('is-active'); }

const observer = new IntersectionObserver((entries) => { const visible = entries .filter(e => e.isIntersecting) .sort((a,b) => a.boundingClientRect.top - b.boundingClientRect.top); if (visible[0]) activate(visible[0].target.id); }, { root: null, rootMargin: `-${HEADER_OFFSET_PX + 1}px 0px -60% 0px`, threshold: [0, 0.25, 0.5, 1] });

sections.forEach(sec => observer.observe(sec));

function smoothScrollTo(target){ const rect = target.getBoundingClientRect(); const absoluteTop = rect.top + window.pageYOffset; const y = Math.max(absoluteTop - HEADER_OFFSET_PX - 8, 0); window.scrollTo({ top: y, behavior: 'smooth' }); }

links.forEach(a => { a.addEventListener('click', (ev) => { if(!a.hash || !a.hash.startsWith('#')) return; const id = decodeURIComponent(a.hash.slice(1)); const target = document.getElementById(id); if(!target) return; ev.preventDefault(); target.setAttribute('tabindex', '-1'); smoothScrollTo(target); setTimeout(() => { activate(id); target.focus({preventScroll:true}); }, 250); history.replaceState(null, '', `#${id}`); }); });

if(location.hash){ const id = decodeURIComponent(location.hash.slice(1)); const target = document.getElementById(id); if(target){ setTimeout(() => smoothScrollTo(target), 0); activate(id); } }

let ticking = false; window.addEventListener('scroll', () => { if(ticking) return; ticking = true; requestAnimationFrame(() => { let currentId = sections[0]?.id; const y = window.scrollY + HEADER_OFFSET_PX + 16; for(const sec of sections){ if(sec.offsetTop ctx.querySelector(sel); const $$ = (sel, ctx = document) => Array.from(ctx.querySelectorAll(sel));

const table = $("#license-table"); if (!table) return;

const rows = $$("#license-table tbody tr"); const fQ = $("#f-q"); const fLic = $("#f-lic"); const fComm = $("#f-comm"); const fReset= $("#f-reset");

const norm = (s) => (s || "").toString().toLowerCase().normalize("NFKD").replace(/\p{Diacritic}/gu,"").trim();

function matches(row) { const q = norm(fQ.value); const lic = norm(fLic.value); const comm = norm(fComm.value);

const system = norm(row.dataset.system); const notes = norm(row.dataset.notes); const rLic = norm(row.dataset.lic); const rComm = norm(row.dataset.comm);

if (lic && rLic !== lic) return false; if (comm && rComm !== comm) return false;

if (q) { const hay = [system, notes, rLic, rComm, rLang].join(" "); if (!hay.includes(q)) return false; } return true; }

function applyFilters(pushState = true) { let visible = 0; rows.forEach(tr => { const show = matches(tr); tr.style.display = show ? "" : "none"; if (show) visible++; });

// Kleiner UX-Hinweis, falls nichts gefunden table.dataset.visibleCount = visible;

if (pushState) syncQueryToURL(); }

// URL-Query Filter synchronisieren (Deep-Linking) function syncQueryToURL() { const params = new URLSearchParams(); if (fQ.value) params.set("q", fQ.value); if (fLic.value) params.set("lic", fLic.value); if (fComm.value) params.set("comm", fComm.value);

const qs = params.toString(); const newUrl = qs ? `${location.pathname}?${qs}${location.hash}` : location.pathname + location.hash; history.replaceState(null, "", newUrl); }

function loadFromURL() { const p = new URLSearchParams(location.search); if (p.has("q")) fQ.value = p.get("q"); if (p.has("lic")) fLic.value = p.get("lic"); if (p.has("comm")) fComm.value = p.get("comm"); }

// Events ["input","change"].forEach(evt => { fQ.addEventListener(evt, () => applyFilters()); fLic.addEventListener(evt, () => applyFilters()); fComm.addEventListener(evt, () => applyFilters()); });

fReset.addEventListener("click", () => { fQ.value = ""; fLic.value = ""; fComm.value = ""; applyFilters(); });

// Optionale Auto-Generierung von Auswahloptionen basierend auf vorhandenen Daten function autoPopulateSelect(selectEl, key) { const vals = new Set(); rows.forEach(tr => { if (tr.dataset[key]) vals.add(tr.dataset[key]); }); const existing = new Set(Array.from(selectEl.options).map(o => o.value)); vals.forEach(v => { if (!existing.has(v)) { const opt = document.createElement("option"); opt.value = v; opt.textContent = v.charAt(0).toUpperCase() + v.slice(1); selectEl.appendChild(opt); } }); } // Falls du die festen Optionen oben nicht pflegen willst, auskommentieren/entfernen: // autoPopulateSelect(fLic, "lic"); // autoPopulateSelect(fComm, "comm"); // autoPopulateSelect(fLang, "lang");

// Init loadFromURL(); applyFilters(false); })();

{/literal}

Kommentare

Kommentar schreiben

Du musst eingeloggt sein um zu antworten.

Kommentare (0)

  1. Noch keine Kommentare vorhanden.

Antwort auf