Files
dogfather-universe/workspace/aufgaben.html
T
DogFatherGitandClaude Opus 5 12c40256f7 Uhr: Stunden rot, Minuten silber, Sekunden babyblau -- alle drei als Reihen
Wunsch Filipe: "stunden soll rot sein, minuten schwarz/silber und die
sekunden babyblau. die punkte herum sollen eine mischung von rot
schwarz und babyblau sein. ich will auch dass die stunden und minuten
auch barren oder punkte sind und nicht so eine durchlaufende schleife."

ALLE DREI BAHNEN SIND JETZT REIHEN. Die Stunde bekommt zwoelf Balken
(ein Zifferblatt hat zwoelf), Minute und Sekunde sechzig. Die Glieder
sind verschieden lang -- Punkt (0,01 + runde Kappe), kurzer Balken
(1,7), langer Balken (5,5). Damit liest man die drei Bahnen auch dann
auseinander, wenn jemand Farben schlecht unterscheidet; Farbe allein
traegt eine Information nie.

VIER FUNDE BEIM NACHMESSEN, keiner davon war vorher sichtbar:

1. ABRUNDEN STATT RUNDEN. `Math.round` liess Minute und Stunde ab der
   HAELFTE einen Balken zu frueh aufleuchten: um 14:30 zeigte der
   Stundenring vier statt drei Balken, der Minutenring ab Sekunde 30
   einen zu viel. Die Uhr war damit die halbe Zeit ueber falsch --
   und ausgerechnet zur vollen Stunde, wo man hinsieht, richtig.
   Nachgerechnet: 10:30 -> 11, 14:30 -> 3, 23:59 -> 12, 00:00 -> 1.

2. DIE PERLENKOEPFE TRUGEN DIE ALTE ZUORDNUNG. Die drei Boegen waren
   getauscht, die drei Koepfe nicht: ein roter Kopf sass auf der
   blauen Sekundenreihe, ein silberner auf den roten Stundenbalken.
   Das sah nach einem Winkelfehler aus, obwohl alle drei auf die
   Zehntelgrad genau standen (354 / 161,9 / 343,0 bei 23:26:59,
   gemessen). Wer eine Farbe tauscht, tauscht sie an ALLEN Stellen:
   Bogen, Kopf, Schein, Kranz.

3. DER SCHEIN LAG DREIFACH UEBEREINANDER. Jeder Ring liegt dreimal im
   SVG (Schatten, Hauptlage, Kante); `.uhr__stunde` traf alle drei.
   Das rote Leuchten lief dadurch bis ueber die Ziffern, obwohl in der
   Regel nur 1,8 px stehen -- genau das Verschwommene, das Filipe nicht
   will. Jetzt `.uhr__ring > …`: nur die Hauptlage leuchtet, Schatten
   und Kante bleiben hart.

4. ZWEI TOTE FARBSCHICHTEN in heim.css (Sekunde rot / Minute blau /
   Stunde bronze). Sie wurden vom spaeteren Satz ueberschrieben und
   waren unsichtbar -- aber wer die Datei von oben liest, haelt sie
   fuer die geltende Regel und aendert die falsche Stelle. Entfernt
   statt stehengelassen: EINE Stelle entscheidet ueber eine Farbe.

Ausserdem: Der Kometenschweif ist raus (HTML und CSS, nicht
ausgeblendet). Eine Reihe zeigt ihre Richtung durch das letzte Glied;
ohne eigenes Muster haette er einen vollen Ring quer ueber die Punkte
gezogen. Der Punktkranz aussen mischt jetzt Rot, Babyblau und ein sehr
dunkles Blau im 18-Grad-Takt -- das Dunkel ist kein Loch, sonst zerfiele
der Ring aus dem Augenwinkel in zwei Haelften.

Gedaempft bleibt Pflicht: Die Sekunde laeuft dauernd und bekommt das
ruhigste Babyblau, die Stunde bewegt sich kaum und darf die kraeftigste
Farbe tragen. Die Auslieferungskennung ist auf allen 19 Seiten
hochgesetzt, sonst kaeme keine der Aenderungen an.

Geprueft: pruef-start-ansicht (alles in Ordnung), pruef-css-klassen
(alles in Ordnung), Segmentzahlen und Perlenwinkel im Browser
nachgemessen, Bildschirmfoto bei vierfacher Aufloesung.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-08 23:30:56 +02:00

227 lines
9.8 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>Aufgaben · 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" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609082330" />
<link rel="stylesheet" href="assets/css/start.css?v=202609082330" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609082330" />
<link rel="stylesheet" href="assets/css/module.css?v=202609082330" />
</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> · Aufgaben</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">
<section class="kopf-zeile">
<div>
<p class="marke">Aufgaben</p>
<h1 class="titel">Offen. In Arbeit. Review. Erledigt.</h1>
</div>
<button type="button" class="knopf knopf--klein" id="neu-oeffnen">Neue Aufgabe</button>
</section>
<!-- Die Leiste über dem Brett (01.09.2026). Drei Zeilen, in dieser
Reihenfolge – die Reihenfolge ist die Aussage:
1. was brennt (ein Satz, sofort lesbar)
2. Ausschnitte (Nur meine · Heute · Überfällig)
3. die eigenen Creator (nur für Betreuer, siehe aufgaben.js)
Alle drei bleiben verborgen, bis feststeht, wer angemeldet ist –
eine Filterleiste ohne Zahlen ist ein Versprechen ohne Deckung. -->
<p class="lage" id="lage" role="status" hidden></p>
<div class="ausschnitte" id="ausschnitte" role="group"
aria-label="Ausschnitt wählen" hidden></div>
<div class="creator-reihe" id="creator-reihe" role="group"
aria-label="Nach Creator einschränken" hidden></div>
<!-- Formular zum Anlegen. Standardmäßig zu, damit das Brett im Vordergrund
steht und die Seite nicht mit einem Formular begrüßt. -->
<form class="neu" id="neu" hidden>
<div class="neu__zeile">
<label class="feld-schild" for="f-titel">Titel</label>
<input id="f-titel" name="titel" maxlength="160" placeholder="Was ist zu tun?" required />
</div>
<div class="neu__zeile">
<label class="feld-schild" for="f-text">Beschreibung <span class="leise">(optional)</span></label>
<textarea id="f-text" name="beschreibung" rows="3" maxlength="4000"
placeholder="Worum geht es genau?"></textarea>
</div>
<div class="neu__raster">
<div>
<label class="feld-schild" for="f-prio">Priorität</label>
<select id="f-prio" name="prioritaet">
<option value="hoch">hoch</option>
<option value="mittel" selected>mittel</option>
<option value="niedrig">niedrig</option>
</select>
</div>
<div>
<label class="feld-schild" for="f-frist">Frist <span class="leise">(optional)</span></label>
<input id="f-frist" name="frist" type="date" />
</div>
<div id="feld-creator" hidden>
<label class="feld-schild" for="f-creator">Bereich von</label>
<select id="f-creator" name="creator_id"><option value="">—</option></select>
</div>
<div id="feld-verant" hidden>
<label class="feld-schild" for="f-verant">Verantwortlich</label>
<select id="f-verant" name="verantwortlich_id"><option value="">—</option></select>
</div>
</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">Anlegen</button>
<button type="button" class="abmelden" id="neu-abbrechen">Abbrechen</button>
</div>
</form>
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
<div class="brett" id="brett" aria-busy="true">
<p class="leise" id="laedt">Aufgaben werden geladen …</p>
</div>
<!-- ABGEBROCHENE AUFGABEN (05.09.2026).
Ein eigener Bereich UNTER dem Brett, nicht als fünfte Spalte:
Am Handy wären dann alle fünf so schmal, dass keine mehr lesbar
ist. Und Abgebrochenes sieht man nicht täglich.
Verschwinden darf es aber auch nicht -- sonst wäre der Abbruch
ein Löschen mit Zwischenschritt, und genau das soll er nicht
sein. Deshalb: zugeklappt, mit der Anzahl im Titel, einen Klick
entfernt.
<details> und nicht selbstgebaut: bringt Tastaturbedienung,
aria-expanded und das Verhalten von Suchfunktionen im Browser
von sich aus mit. -->
<details class="abgebrochen" id="abgebrochen" hidden>
<summary class="abgebrochen__kopf">
<span class="abgebrochen__name">Abgebrochen</span>
<span class="abgebrochen__zahl" id="abgebrochen-zahl">0</span>
</summary>
<p class="abgebrochen__unter">
Nicht gelöscht – nur beiseitegelegt. Mit Grund, damit später
nachvollziehbar bleibt, warum. Jederzeit wieder aufnehmbar.
</p>
<div class="abgebrochen__liste" id="abgebrochen-liste"></div>
</details>
</main>
<!-- Bearbeiten. Als natives <dialog>: bringt Fokusfang, Schließen mit Esc
und die Abdunklung des Hintergrunds ohne eigenen Code mit. -->
<dialog class="dialog" id="bearbeiten-dialog">
<form method="dialog" id="bearbeiten" class="neu neu--blank">
<h2 class="dialog__titel">Aufgabe bearbeiten</h2>
<div class="neu__zeile">
<label class="feld-schild" for="b-titel">Titel</label>
<input id="b-titel" maxlength="160" required />
</div>
<div class="neu__zeile">
<label class="feld-schild" for="b-text">Beschreibung</label>
<textarea id="b-text" rows="3" maxlength="4000"></textarea>
</div>
<div class="neu__raster">
<div>
<label class="feld-schild" for="b-prio">Priorität</label>
<select id="b-prio">
<option value="hoch">hoch</option>
<option value="mittel">mittel</option>
<option value="niedrig">niedrig</option>
</select>
</div>
<div>
<label class="feld-schild" for="b-frist">Frist</label>
<input id="b-frist" type="date" />
</div>
<div id="b-feld-creator" hidden>
<label class="feld-schild" for="b-creator">Bereich von</label>
<select id="b-creator"><option value="">—</option></select>
</div>
<div id="b-feld-verant" hidden>
<label class="feld-schild" for="b-verant">Verantwortlich</label>
<select id="b-verant"><option value="">—</option></select>
</div>
</div>
<p class="fehler" id="b-fehler" role="alert" aria-live="polite"></p>
<div class="dialog__knoepfe">
<button type="button" class="knopf knopf--klein" id="b-speichern">Speichern</button>
<button type="button" class="abmelden" id="b-abbrechen">Abbrechen</button>
<button type="button" class="abmelden abmelden--warnung" id="b-loeschen" hidden>Löschen</button>
</div>
</form>
</dialog>
<!-- ABBRECHEN MIT GRUND (05.09.2026).
Kein confirm(): Das blockiert die ganze Seite, nimmt kein Textfeld
auf und sieht auf jedem Rechner anders aus.
Der Grund ist PFLICHT. Ohne ihn weiß in vier Wochen niemand mehr,
warum etwas wegfiel -- und dann ist ein Abbruch von einem Löschen
nicht mehr zu unterscheiden. Der Server verlangt ihn ebenfalls;
hier steht er, damit man es merkt, bevor man abschickt. -->
<dialog class="dialog" id="abbruch-dialog">
<form method="dialog" id="abbruch-form" class="neu neu--blank">
<h2 class="dialog__titel" id="abbruch-titel">Aufgabe abbrechen?</h2>
<!-- Sagt, was passiert UND was nicht passiert. Die Sorge bei so
einem Knopf ist immer, ob etwas verloren geht. -->
<p class="dialog__unter" id="abbruch-was"></p>
<div class="neu__zeile">
<label class="feld-schild" for="abbruch-grund">Warum wird sie abgebrochen?</label>
<textarea id="abbruch-grund" rows="3" maxlength="500"
placeholder="z. B. Kampagne wurde verschoben – kommt im Oktober neu."></textarea>
</div>
<p class="fehler" id="abbruch-fehler" role="alert" aria-live="polite"></p>
<div class="dialog__knoepfe">
<button type="submit" class="knopf knopf--klein" id="abbruch-ok">Abbrechen &amp; beiseitelegen</button>
<button type="button" class="abmelden" id="abbruch-zurueck">Doch nicht</button>
</div>
</form>
</dialog>
<script src="assets/js/wahl.js?v=202609082330" defer></script>
<script src="assets/js/bereiche.js?v=202609082330" defer></script>
<script src="assets/js/kopf.js?v=202609082330" defer></script>
<script src="assets/js/glocke.js?v=202609082330" defer></script>
<script src="assets/js/aufgaben.js?v=202609082330" defer></script>
</body>
</html>