/* =================================================================== Kalender Vier Ansichten auf DENSELBEN Daten -- der Server liefert einen Zeitraum, hier wird er unterschiedlich dargestellt. So kann keine Ansicht etwas anderes zeigen als die andere. Monat Überblick, Rhythmus, wo Lücken sind Woche die sieben Tage groß, mit Uhrzeiten Liste Arbeitsansicht: was kommt als Nächstes Zeitstrahl Vorlauf und Ballungen auf einer Achse Termine (Calls, Termine, Reviews) und Fristen aus den Aufgaben liegen auf einer Achse. Fristen erscheinen bewusst OHNE Uhrzeit als Tagesmarke -- eine Frist ist ein Stichtag, kein Termin, und würde sonst Platz blockieren, an dem nichts stattfindet. --------------------------------------------------------------------- ANLÄSSE UND FEIERTAGE Ein leerer Kalender ist nicht nur kahl, er ist nutzlos: Die Frage beim Planen lautet nie "was habe ich schon eingetragen", sondern "worauf muss ich zuarbeiten". Für Creator sind das Halloween, Weihnachten, Silvester, Valentinstag, Black Friday -- dort ist das Publikum wach, dorthin gehört der Vorlauf. Der Kalender rechnet diese Tage selbst aus, für jedes beliebige Jahr: Ostern über die Gauß-Formel, davon abgeleitet Karfreitag, Himmelfahrt und Pfingsten, dazu die beweglichen Termine (Muttertag, Black Friday, die vier Advente). Kein Dienst, keine Liste zum Nachpflegen, keine Kosten, funktioniert offline und im Jahr 2040. Bewusst NUR die neun bundesweiten Feiertage. Fronleichnam, Reformationstag und Allerheiligen gelten je nach Bundesland -- ein Kalender, der sie überall anzeigt, wäre für die Hälfte der Leute schlicht falsch. Lieber weniger behaupten als etwas Falsches. =================================================================== */ (() => { 'use strict'; /* DogFather und Manager haben dieselben Rechte -- die Unterscheidung macht nur die Personenverwaltung, und die prüft der Server. */ /* Die Leitungsliste steht in bereiche.js -- eine Antwort statt neun. Sie stand hier frueher selbst, ohne 'spicy', und genau das war der Fehler, den Filipe am 07.09.2026 gefunden hat. */ const LEITUNG = window.Bereiche.LEITUNG; const $ = (id) => document.getElementById(id); const el = (tag, klasse, text) => { const k = document.createElement(tag); if (klasse) k.className = klasse; if (text !== undefined) k.textContent = text; return k; }; /* Die Namen der Arten. `frist` steht mit drin, obwohl es keine Terminart ist: Aufgabenfristen erscheinen im Kalender als Eintraege und brauchen dort auch eine Beschriftung. */ const ARTNAME = { call: 'Call', termin: 'Termin', review: 'Review', frist: 'Frist', bigmatch: 'BigMatch', turnier: 'Turnier', special: 'Special-Live', collab: 'Collab', raid: 'Raid-Train', charity: 'Charity', }; /* Jede Art trägt ihre eigene Farbe -- dieselbe Idee wie bei den Kacheln auf der Startseite: Die Farbe gehört zur Sache, nicht zum Rang. */ /* EINE FARBE JE ART (08.09.2026 erweitert). Die drei internen Arten behalten ihre Farben -- wer sie kennt, soll sie wiedererkennen. Die sechs Auftritte bekommen WAERMERE, kraeftigere Toene: Im Monatsraster sieht man dadurch auf einen Blick, ob eine Woche voller Arbeitstermine steckt oder voller Streams, ohne ein Wort zu lesen. Innerhalb der Auftritte ist die Zuordnung nicht beliebig: bigmatch Rot -- ein Duell, das schaerfste Format turnier Bernstein -- mehrere Runden, laenger, ruhiger als ein Duell special Magenta -- die Ausnahme, die auffallen soll collab Tuerkis -- gemeinsam, freundlich, kein Wettkampf raid Orange -- Bewegung, eine Kette charity Gruengold -- Spenden, warm und nicht schreiend Alle neun sind gegen den dunklen Grund auf mindestens 4,5:1 geprueft (pruef-buehne misst die Texte, die sie faerben). */ const ARTFARBE = { call: '#3fbdf5', termin: '#8a76ff', review: '#50a752', frist: '#d17717', bigmatch: '#ff5f6d', turnier: '#e3b341', special: '#f065c8', collab: '#2fd6c4', raid: '#ff9040', charity: '#a7d64a', }; const FEIERTAG_FARBE = '#ff9aa2'; const ANLASS_FARBE = '#d8a13a'; const WOCHENTAGE_KURZ = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So']; /* Sonntag zuerst -- das ist die Zählung von getUTCDay(), nicht die deutsche Wochenordnung. Wer hier Montag an den Anfang setzt, verschiebt jeden Wochentagsnamen um eins. */ const WOCHENTAGE_LANG = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']; const MONATE = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']; const ORDNUNG = ['', 'ersten', 'zweiten', 'dritten', 'vierten', 'fünften']; let ich = null; let daten = null; let serien = []; /* WER SONST NOCH DABEI IST (05.09.2026). Einzelne Schalter statt eines