Files
dogfather-universe/workspace/kalender.html
T
DogFatherGitandClaude Opus 5 a43bc565ec Werbeeinblendung fuer die Reaction: Laufband, Wechsel und zwei Bilder in sechs Ecken
Filipe: „ich will dass du auch perfektionierst dass ich einen banner
durchlaufen kann, oder erscheinen lassen kann mit werbung drauf ...
und ich will auch das dogfather logo oben rechts links unten rechts
links genau wie oben unten mittig, so dass ich es wegmachen und
hinzufuegen kann."

DAS BAND
Zwei Arten: „Laufband" zieht die Botschaften von rechts nach links,
„Wechsel" blendet sie nacheinander ein. Ein Rabattcode gehoert in den
Wechsel -- wer „DOGI10" lesen will, waehrend es wandert, hat es
gesehen und nicht behalten. Die Dauer ist einstellbar (8-40 s).

Das Band ist Glas, kein Balken: ein Verlauf, unten dicht genug, dass
jede Schrift traegt, oben offen. Man sieht das Video weiter.

Das Laufband traegt die Folge ZWEIMAL. Wandert es um 50 % seiner
Breite, steht die zweite dort, wo die erste war, und der Sprung
zurueck ist unsichtbar. Ohne sie entstuende am Ende jedes Durchlaufs
eine leere Flaeche -- das sieht aus, als sei die Einblendung
abgestuerzt.

Wer weniger Bewegung eingestellt hat, bekommt den Wechsel statt des
Laufbands -- nicht „aus". Die Werbung soll auch dann wirken.

DER RABATTCODE
Ein Wort in Grossbuchstaben mit einer Ziffer darin bekommt eine
eigene Flaeche in Bernstein: „DOGI10" ja, „VANVAN" nicht. Er ist der
einzige Teil der Botschaft, den jemand ABSCHREIBEN soll.

Der Text wird NIE als HTML eingesetzt -- die Kennzeichnung baut echte
Elemente. Sonst waere ein Eingabefeld im Regiepult ein Weg, fremdes
Markup in den Stream zu bringen.

DIE ZWEI BILDER
Der Husky und der Haekelhase aus der Zusammenarbeit mit VanVan,
jeweils an einem von sechs Plaetzen: oben und unten, je links,
mittig, rechts -- oder aus. Links und rechts mittig gibt es mit
Absicht nicht: dort liegen bei jedem Videodienst die Bedienelemente.

Zwei Bilder auf denselben Platz werden abgelehnt (400 ecke_belegt) --
sie laegen uebereinander, und man saehe von beiden nichts.

Wer unten steht, weicht dem Band aus, und die Spendentafel rueckt
hoch. Beides im Stilblatt ueber `:has`, nicht im Programm: Das Band
kennt die Tafel nicht und die Tafel kennt das Band nicht.

Der Husky ist schwarz und laege auf dunklem Videobild als Silhouette
in der Nacht. Zwei weiche helle Schatten legen eine Kontur darum --
dieselbe Loesung, die jeder Sender fuer sein Wasserzeichen nimmt.

IM STREAM, NICHT NUR IM SAAL
Beides laeuft in der Buehnenquelle mit, die OBS abfilmt, mit
groesserer Schrift (24 statt 18 px) -- ein Stream wird auf einem
Handy gesehen, oft in einem Viertel des Bildes. Gemessen: die OFFENE
Quelle zieht eine Umschaltung nach, ohne dass die Szene neu geladen
werden muss.

EINE QUELLE, NICHT DREI
`werbungStand()` steht in `reaktion-tabellen.js` und wird von Saal,
Regie und Buehne aufgerufen. Erst standen dort drei Abschriften
derselben Abfrage; beim Entfernen der Datenbank-Kennung habe ich eine
davon geaendert, und die anderen lieferten sie weiter.

WAS DIE PRUEFUNGEN DABEI GEFUNDEN HABEN
- pruef-buehne: Die Botschaften trugen ihre Datenbank-Kennung in die
  OBS-Auskunft, die nur mit einem Schluessel geschuetzt ist. Die
  Feldliste geht jetzt zwei Ebenen tief -- eine abschliessende Liste,
  die nur die oberste kennt, laesst sich umgehen, indem man ein Feld
  in ein vorhandenes Objekt legt.
- pruef-reaktion: Acht Fehlerwoerter ohne deutschen Satz. Nachgetragen
  im Hausstil: was nicht geht UND was stattdessen.
- pruef-struktur: Die Suche nach totem CSS las `buehne.html` und
  `tafel.html` nicht -- eine Ausnahme, die fuer eine ganz andere
  Frage gemacht war (Startbildschirm-Symbol). Sie haette verlangt,
  `.obs-buehne` zu loeschen, also die Regel, die den Stream traegt.
- pruef-tippziele: Erkannte als Anhebung nur `min-height`/`min-width`.
  Ein `height: 44px` im Fingerblock hebt genauso -- Fehlalarm, und
  ein Fehlalarm an einer Pruefung, die nach jeder Aenderung laeuft,
  wird weggeklickt. Zwei Gegenproben dazu.
- mess-reaktion: Die Regieleiste am Handy wurde gegen die feste Zahl
  SIEBEN geprueft und meldete „zeigt nur 8 von 7". Sie zaehlt jetzt
  selbst.
- mess-buehne: Die Konsolenmeldung zeigte dauerhaft vier
  Fehlschlaege, alle von den Pruefungen selbst bestellt. Jetzt eng
  gefiltert, benannt, mit Gegenprobe -- und ein UNERWARTETER
  Fehlschlag in der Quelle, die in den Stream geht, faellt ab sofort
  durch.

Gemessen: mess-reaktion 0, mess-buehne 0, pruef-reaktion 383/0,
pruef-buehne 38/0, pruef-tippziele 13/0, pruef-struktur 44/0,
pruef-css-klassen 0, pruef-haus-trennung 100/0, pruef-haus-seiten 38/0.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-29 17:16:26 +02:00

398 lines
19 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<title>Kalender · Spicy & Dogi</title>
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<!-- Die Farbe der Fensterleiste, wenn der Workspace als App laeuft.
Stand auf #0674b9 (kraeftiges Blau) und stach damit als einziger
heller Balken ueber einer durchweg dunklen Seite. Jetzt derselbe
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609291714" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609291714" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609291714" />
<link rel="stylesheet" href="assets/css/start.css?v=202609291714" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609291714" />
<link rel="stylesheet" href="assets/css/kalender.css?v=202609291714" />
<link rel="stylesheet" href="assets/css/module.css?v=202609291714" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609291714" />
</head>
<body class="start">
<!-- Der Schleier ueber der Buehne (Casper und HasiDog in den unteren
Ecken, siehe start.css). Ein eigenes Element statt eines dritten
Pseudo-Elements -- body hat nur ::before und ::after. -->
<div class="schleier" aria-hidden="true"></div>
<header class="kopfleiste">
<button type="button" class="zurueck-knopf" id="zurueck" hidden>
<svg class="zurueck-knopf__pfeil" viewBox="0 0 24 24" aria-hidden="true">
<path d="M14.5 5.5 8 12l6.5 6.5" />
</svg>
<span class="zurueck-knopf__text">Zurück</span>
</button>
<p class="marke"><span class="marke__text"><a class="zurueck" href="start.html">Creator&nbsp;Workspace</a> · Kalender</span></p>
<div class="kopfleiste__rechts">
<span class="wer" id="wer">…</span>
<button type="button" class="abmelden" id="abmelden">Abmelden</button>
</div>
</header>
<main class="inhalt inhalt--breit">
<!-- Der Zeitraum ist die Überschrift, nicht eine Beschriftung neben
Knöpfen: Man liest zuerst, WO man ist, und bewegt sich dann. -->
<section class="k-kopf">
<div class="k-kopf__titel">
<h1 class="k-zeitraum" id="zeitraum">…</h1>
<p class="k-kopf__unter" id="zeitraum-unter"></p>
</div>
<div class="k-nav">
<button type="button" class="knopf-still k-pfeil" id="zurueck-zeit" aria-label="Vorheriger Zeitraum">‹</button>
<button type="button" class="knopf-still" id="heute-knopf">Heute</button>
<button type="button" class="knopf-still k-pfeil" id="vor-zeit" aria-label="Nächster Zeitraum">›</button>
<button type="button" class="knopf knopf--klein" id="neu-oeffnen">Neuer Termin</button>
</div>
</section>
<!-- Zwei Reihen, die zwei VERSCHIEDENE Fragen beantworten – und deshalb
beschriftet sind:
"Als Nächstes" blickt ab heute nach vorn und ändert sich NICHT
beim Blättern
"Im September" beschreibt den Monat, den man gerade ansieht
Ohne Überschriften wären zwei gleich aussehende Reihen verwirrend. -->
<!-- ==== ALLES DREI IN EINER KACHEL (08.09.2026) =================
Filipe: "ich will dass das alles in einer geilen kachel ist wie
die kacheln in der start seite. und noch geiler."
Die drei Abschnitte -- was als Naechstes ansteht, was in diesem
Monat liegt, was von allein weiterlaeuft -- standen frei auf dem
Hintergrundbild. Drei Ueberschriften ohne Fassung lesen sich als
drei lose Listen; zusammen sind sie EINE Auskunft: was ausser den
Terminen im Kalender sonst noch kommt.
Der Umschlag traegt die Kacheloptik der Startseite (Fase, Raster,
Innenschatten), die drei Abschnitte darin nur noch ihre
Ueberschrift. Faellt alles drei weg, verschwindet auch die
Kachel -- siehe `:has()` in kalender.css. -->
<section class="k-anlasskachel">
<section class="k-leiste" id="saison-block" hidden>
<p class="feldschild">Als Nächstes</p>
<div class="k-anlassreihe" id="saison"></div>
</section>
<section class="k-leiste" id="monat-block" hidden>
<p class="feldschild" id="monat-titel">Im Monat</p>
<div class="k-anlassreihe" id="monatsanlaesse"></div>
</section>
<!-- Die laufenden Wiederholungen. Steht bewusst über dem Kalender und
nicht in einem Menü versteckt: Was von allein weiterläuft, muss
man sehen können, sonst weiß nach drei Monaten niemand mehr,
warum jeden Dienstag ein Call im Kalender steht. -->
<section class="k-leiste k-serien" id="serien-block" hidden>
<p class="feldschild">Läuft von allein</p>
<div class="k-serienliste" id="serien"></div>
</section>
</section><!-- /.k-anlasskachel -->
<form class="neu" id="neu" hidden>
<div class="neu__zeile">
<label class="feld-schild" for="f-titel">Worum geht es?</label>
<input id="f-titel" maxlength="160" placeholder="z. B. Wochen-Call mit Luna" required />
</div>
<div class="neu__raster">
<div>
<label class="feld-schild" for="f-art">Art</label>
<!-- NEUN ARTEN, IN ZWEI GRUPPEN (08.09.2026).
Die Gruppen sind nicht Deko: Die ersten drei sind INTERNE
Termine, die anderen sechs sind AUFTRITTE. Das ist der
Unterschied, nach dem man sucht ("ist das ein Arbeitstermin
oder ein Stream?"), und eine Liste aus neun gleichrangigen
Zeilen laesst ihn nicht erkennen. -->
<select id="f-art">
<optgroup label="Intern">
<option value="call" selected>Call</option>
<option value="termin">Termin</option>
<!-- ACHTUNG, ZWEI BEDEUTUNGEN (20.09.2026): `review` heisst
HIER eine Terminart (ein Gespraech, in dem man
zurueckschaut) -- NICHT der Aufgaben-/Dateistatus, der
seit heute "Zur Freigabe" heisst. Ich hatte das beim
Umbenennen selbst verwechselt. Derselbe Schluessel,
zwei Welten: Kalender = Termin, Brett = Zustand. -->
<option value="review">Review</option>
</optgroup>
<optgroup label="Auftritt">
<option value="bigmatch">BigMatch</option>
<option value="turnier">Turnier</option>
<option value="special">Special-Live</option>
<option value="collab">Collab</option>
<option value="raid">Raid-Train</option>
<option value="charity">Charity</option>
</optgroup>
</select>
</div>
<div>
<label class="feld-schild" for="f-beginn">Beginn</label>
<input id="f-beginn" type="datetime-local" required />
</div>
<div>
<label class="feld-schild" for="f-dauer">Dauer <span class="feld-schild__still">Minuten</span></label>
<input id="f-dauer" type="number" min="5" max="1440" step="5" value="30" />
</div>
<!-- Wiederholen. Die Auswahl wird erst beim Öffnen gefüllt, weil
ihre Beschriftungen vom gewählten Datum abhängen: "jeden
Dienstag", "jeden Monat am 2." – so muss niemand raten, was
ein Rhythmus im eigenen Fall bedeutet. -->
<div>
<label class="feld-schild" for="f-takt">Wiederholen</label>
<select id="f-takt">
<option value="">Einmalig</option>
</select>
</div>
<div id="feld-teilnehmer" hidden>
<label class="feld-schild" for="f-teilnehmer">Mit wem</label>
<select id="f-teilnehmer"><option value="">—</option></select>
</div>
</div>
<!-- WER SONST NOCH DABEI IST (05.09.2026).
Wunsch: "ich will auch 2 leute markieren können mit denen der
call ist."
Einzelne Schalter statt eines <select multiple>: Das verliert
bei einem Fehlklick die ganze Auswahl und ist am Handy kaum zu
bedienen.
FÜR JEDE ROLLE, nicht nur für die Leitung (05.09.2026:
*"das soll für jeden verfügbar sein"*). Das ist ohne Risiko,
weil nicht die Oberfläche entscheidet, wen man auswählen darf,
sondern der Server: /api/personen liefert jeder Rolle nur die
zugeteilten Namen, und teilnehmerSetzen() lässt alles andere
still weg. Ein Creator sieht hier also seine Betreuer, keine
fremden Creator.
Die Klassen heißen k-dabei__* und stehen in kalender.css.
Vorher waren es die .wahl__*-Klassen aus dateien.css -- die
diese Seite gar nicht einbindet, weshalb die Namen ohne jeden
Abstand aneinanderklebten. -->
<div id="feld-dabei" hidden>
<p class="feld-schild">Wer ist noch dabei?</p>
<div class="k-dabei" id="dabei-wahl"></div>
<p class="leise" id="dabei-hinweis"></p>
</div>
<!-- Erscheint nur, wenn ein Rhythmus gewählt ist. Der Satz darunter
sagt in Worten, was gleich passiert – eine Regel, die man nicht
vorlesen kann, stellt man später nicht mehr richtig ab. -->
<div class="neu__zeile k-wdh" id="feld-wdh" hidden>
<div class="k-wdh__ende">
<label class="feld-schild" for="f-ende">Läuft bis
<span class="leise">(leer = bis du sie abstellst)</span></label>
<input id="f-ende" type="date" />
</div>
<p class="k-wdh__satz" id="wdh-satz" aria-live="polite"></p>
</div>
<div class="neu__zeile">
<label class="feld-schild" for="f-ort">Ort oder Link <span class="leise">(optional)</span></label>
<input id="f-ort" maxlength="400" placeholder="Discord, Meet-Link, Adresse …" />
</div>
<div class="neu__zeile">
<label class="feld-schild" for="f-text">Notiz <span class="leise">(optional)</span></label>
<textarea id="f-text" rows="2" maxlength="4000"></textarea>
</div>
<p class="fehler" id="neu-fehler" role="alert" aria-live="polite"></p>
<div class="neu__knoepfe">
<button type="submit" class="knopf knopf--klein" id="neu-speichern">Eintragen</button>
<button type="button" class="abmelden" id="neu-abbrechen">Abbrechen</button>
</div>
</form>
<!-- KALENDER ABONNIEREN (06.09.2026, Stufe 3.2 des Plans).
Steht unten und zugeklappt: Man richtet ihn EINMAL ein und sieht
ihn danach nie wieder an. Ein Kasten, der dauerhaft Platz nimmt,
obwohl er einmal im Leben gebraucht wird, drängt sich vor die
Termine – und um die geht es hier.
Warum es das überhaupt gibt: Der Workspace kann benachrichtigen,
aber er kann nicht verhindern, dass jemand einen Zahnarzttermin
auf denselben Dienstag legt. Das kann nur ein Kalender, der die
Termine dort hat, wo ohnehin nachgesehen wird. -->
<details class="k-abo" id="abo-block">
<summary class="k-abo__kopf">
<span class="k-abo__titel">In deinen eigenen Kalender holen</span>
<span class="k-abo__unter">Google, Apple, Outlook – einmal einrichten, dann läuft es</span>
</summary>
<div class="k-abo__inhalt">
<p class="k-abo__satz" id="abo-satz">
Du bekommst einen persönlichen Link. Wer ihn hat, sieht deine Termine –
gib ihn also nicht weiter. Falls doch: Du kannst ihn jederzeit ersetzen,
der alte ist dann sofort tot.
</p>
<div class="k-abo__zeile" id="abo-hat" hidden>
<input class="k-abo__feld" id="abo-link" readonly aria-label="Dein Kalender-Link" />
<button type="button" class="knopf knopf--klein" id="abo-kopieren">Kopieren</button>
</div>
<p class="k-abo__stand" id="abo-stand"></p>
<div class="k-abo__knoepfe">
<button type="button" class="knopf knopf--klein" id="abo-erzeugen">Link erzeugen</button>
<button type="button" class="abmelden" id="abo-neu" hidden>Neuen Link erzeugen</button>
<button type="button" class="abmelden abmelden--warnung" id="abo-aus" hidden>Abschalten</button>
</div>
<p class="k-abo__hilfe" id="abo-hilfe" hidden>
<strong>So trägst du ihn ein:</strong>
<span class="k-abo__weg">Google Kalender: links unten bei „Weitere Kalender“ auf das Plus,
dann „Per URL“ – Link einfügen – „Kalender hinzufügen“.</span>
<span class="k-abo__weg">iPhone: Einstellungen → Apps → Kalender → Accounts →
Account hinzufügen → Andere → Kalenderabo hinzufügen – Link einfügen.</span>
<span class="k-abo__weg">Outlook: Kalender → Kalender hinzufügen → Aus dem Internet abonnieren.</span>
<span class="k-abo__weg leise">Die Kalender holen neue Termine selbst ab – meist innerhalb
weniger Stunden, nicht sofort. Das legen Google und Apple fest, nicht wir.</span>
</p>
<p class="fehler" id="abo-fehler" role="alert" aria-live="polite"></p>
</div>
</details>
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
<!-- Vier Ansichten auf DENSELBEN Daten. Der Server liefert einen
Zeitraum, hier wird er nur unterschiedlich dargestellt – so kann
keine Ansicht etwas anderes zeigen als die andere. -->
<div class="k-werkzeuge">
<div class="k-ansichten" role="group" aria-label="Ansicht">
<button type="button" class="k-ansicht" data-ansicht="monat" aria-pressed="true">Monat</button>
<button type="button" class="k-ansicht" data-ansicht="woche" aria-pressed="false">Woche</button>
<button type="button" class="k-ansicht" data-ansicht="liste" aria-pressed="false">Liste</button>
<button type="button" class="k-ansicht" data-ansicht="zeitstrahl" aria-pressed="false">Zeitstrahl</button>
</div>
<!-- ==== BLÄTTERN, DIREKT ÜBER DEM KALENDER (09.09.2026) ==========
Filipe, mit Bildschirmfoto: "ich will dass genau da über dem
kalender auch noch buttons sind um den monat zu wechseln, tage
wechseln ... lass die neuen auch richtig geil aussehen, die
einen rot und die anderen grün von den neuen."
Die Pfeile gab es schon -- oben neben der Überschrift, einen
halben Bildschirm entfernt vom Raster, das sie bewegen. Wer
durch Monate blättert, sieht auf das Raster und nicht auf die
Überschrift; der Weg dorthin war jedes Mal ein Blicksprung.
WARUM SIE TROTZDEM BESCHRIFTET SIND und nicht nur ‹ › heißen:
Ein Pfeil sagt nicht, WIE WEIT er springt. In der Monatsansicht
ist ein Schritt ein Monat, in der Wochenansicht eine Woche, in
Liste und Zeitstrahl sechs Wochen. Genau das steht jetzt drauf
und wird beim Umschalten mitgeführt (kalender.js). -->
<div class="k-schritte" role="group" aria-label="Zeitraum wechseln">
<button type="button" class="k-schritt k-schritt--zurueck" id="schritt-zurueck">
<span class="k-schritt__pfeil" aria-hidden="true">‹</span>
<span class="k-schritt__text" id="schritt-zurueck-text">Monat zurück</span>
</button>
<button type="button" class="k-schritt k-schritt--heute" id="schritt-heute">Heute</button>
<button type="button" class="k-schritt k-schritt--vor" id="schritt-vor">
<span class="k-schritt__text" id="schritt-vor-text">Monat vor</span>
<span class="k-schritt__pfeil" aria-hidden="true">›</span>
</button>
</div>
<div class="k-filter" id="filter"></div>
</div>
<div id="kalender" aria-busy="true"><p class="leise">Kalender wird geladen …</p></div>
<!-- Der Tagesdialog. Als echtes <dialog>: Esc schließt, der Tastaturfokus
bleibt drin, und der Rest der Seite ist für Vorleseprogramme still –
das alles bringt das Element mit, ohne dass es nachgebaut wird. -->
<!-- DIE FASSUNG UND DAS GLAS SIND ZWEI EBENEN (screen2, 09.09.2026).
Der <dialog> selbst traegt nur noch die Fase und den
Farbverlauf der Fassung; alles Sichtbare liegt in
`.k-dialog__glas` darin. Ohne diese zweite Ebene muesste die
Fassung ein `border` sein -- und ein Rand folgt dem Rechteck,
nicht der abgeschraegten Ecke. Dieselbe Bauart wie bei der
Zentrale und der Rollenkachel auf der Anmeldeseite. -->
<dialog id="tagdialog" class="k-dialog" aria-labelledby="tagdialog-titel">
<div class="k-dialog__glas">
<div class="k-dialog__kopf">
<div>
<strong id="tagdialog-titel" class="k-dialog__titel">…</strong>
<span id="tagdialog-unter" class="k-dialog__unter"></span>
</div>
<button type="button" class="knopf-still" id="tagdialog-zu" aria-label="Schließen">✕</button>
</div>
<div id="tagdialog-anlaesse" class="k-dialog__anlaesse"></div>
<div id="tagdialog-liste" class="k-dialog__liste"></div>
<div class="k-dialog__fuss">
<button type="button" class="knopf knopf--klein" id="tagdialog-neu">Hier eintragen</button>
<span class="k-dialog__tipp">Esc schließt</span>
</div>
</div><!-- /.k-dialog__glas -->
</dialog>
<!-- ====================================================================
DER WECKER (07.09.2026)
Filipe: "wie so ein wecker, den man in den eintraegen aktivieren
oder ausschalten kann ... auch mehrmals informiert."
Ein eigener Dialog und kein Aufklapp-Feld im Tagesfenster: Der
Wecker gehoert zu EINEM Termin, und im Tagesfenster stehen mehrere.
Ein Feld, das sich dort aufklappt, schiebt alles darunter weg --
man verliert die Zeile, die man gerade angesehen hat.
<dialog> statt eines selbstgebauten Kastens: Es bringt das
Wichtigste mit, was man sonst vergisst -- Escape schliesst, der
Tastaturfokus bleibt darin gefangen, und der Rest der Seite ist
fuer Vorleseprogramme abgemeldet. -->
<dialog class="tagdialog wecker-dialog" id="wecker-dialog" aria-labelledby="wecker-titel">
<div class="tagdialog__kopf">
<div>
<h2 class="titel" id="wecker-titel">Erinnerung</h2>
<p class="leise" id="wecker-wann"></p>
</div>
<button type="button" class="knopf-still" id="wecker-zu" aria-label="Schließen">✕</button>
</div>
<p class="leise wecker-hinweis">
Nur für dich. Andere Teilnehmer stellen ihre Erinnerungen selbst ein.
</p>
<div class="wecker-liste" id="wecker-liste"></div>
<p class="fehler" id="wecker-fehler" role="alert" aria-live="polite"></p>
</dialog>
</main>
<script src="assets/js/meldung.js?v=202609291714" defer></script>
<script src="assets/js/nachfrage.js?v=202609291714" defer></script>
<script src="assets/js/wahl.js?v=202609291714" defer></script>
<script src="assets/js/bereiche.js?v=202609291714" defer></script>
<script src="assets/js/installieren.js?v=202609291714" defer></script>
<script src="assets/js/kopf.js?v=202609291714" defer></script>
<script src="assets/js/glocke.js?v=202609291714" defer></script>
<script src="assets/js/kalender.js?v=202609291714" defer></script>
<script src="assets/js/kalender-abo.js?v=202609291714" defer></script>
</body>
</html>