--- screen3 + screen1: die Hintergruende draengeln nicht mehr --- "die hintergrunde sollen ueberall so sein dass die sich nicht in den vordergrund draengeln." / "mach den hintergrund von dieser kachel dunkler, so dass die die kacheln drin viel mehr auffallen." `--raster` stand auf .26 Deckkraft -- auf dunkler Flaeche kein Hauch mehr, sondern ein gezeichnetes Gitter. Im Tagdialog lief es sichtbar durch die Ueberschrift, in den Sammelkacheln stand es VOR den Karten darin. Jetzt .09: Man sieht eine Struktur, man zaehlt keine Linien. Eine Zahl fuer das ganze Haus -- sie steht einmal in module.css und wird an fuenf Stellen benutzt. Die Anlasskachel im Kalender lag mit rgba(19,26,38,.88) auf demselben Helligkeitsniveau wie die Karten darin: keine Vitrine, sondern eine dritte Flaeche gleicher Lautstaerke. Jetzt fast schwarz. An den Karten musste dafuer nichts geaendert werden -- der Abstand entsteht von selbst. --- screen2: ein Knopf wandert nach links --- "eins von diesen buttons soll links bei dem anderen kreis sein." Die GLOCKE geht nach links zum Ring, der WECKER bleibt rechts bei der Uhr. Das ist nicht ausgewuerfelt: Der Wecker ist eine Uhrzeit. Die Glocke entscheidet, ob man ueberhaupt etwas ueber sein Team erfaehrt -- und der Ring links zeigt genau das. Die Kachel ist damit spiegelsymmetrisch belegt: 48 px Knopf + 14 px Abstand + 248 px Instrument auf beiden Seiten. Genau das rechnet `--spalte`. Die Zentrierung des Rings ist weggefallen -- sie war noetig, solange er allein in einer fuer Instrument PLUS Knopf bemessenen Spalte stand. Der reservierte Platz schrumpft von 104 auf 48 px je Seite; die Begruendung fuer das Reservieren bleibt: Ein Platz, der erst mit der Antwort entsteht, laesst die Zeile springen. --- screen4: zwei Chilis und zwei Huskys dazu --- "setz in den hintergrund noch 1-2 peperonis und dan das logo von dogfather, also nur den husky." DER HUSKY IST EINE MASKE, KEIN BILD. Die Datei ist schwarz-weiss und freigestellt (nachgemessen: 49 % durchsichtig). Als Hintergrundbild bei 15 % verschwaenden die schwarzen Flaechen im dunklen Grund und uebrig blieben die hellen -- ein zerrissener Umriss, kein Hund. Als Maske ueber einer Farbflaeche wird daraus eine geschlossene Silhouette in DogFathers Babyblau. Im Universum schweben jetzt beide Marken in ihren beiden Farben: sieben Chilis rot, zwei Huskys blau. --- screen5: die Punkte sind ersetzt, das letzte Glied leuchtet --- "ich will dass du die punkte ersetzt und immer der letzte soll mehr strahlen oder so." / "alles ist mega ausser die stunden muss du noch perfektionnieren." DIE DREI UMLAUFENDEN PERLEN SIND WEG -- samt 60 Zeilen Rechnung. Sie waren ein zweites Ding an einer zweiten Stelle: eigene Uhr ab dem ersten Takt (weil die volle Unixzeit `rotate(1.07333e+10deg)` ergab), eigener Startwinkel je Bahn, drei Winkel, die die kleineren Einheiten anteilig mittragen mussten. All das war noetig, WEIL der Kopf neben der Reihe herlief statt Teil von ihr zu sein. Genau deshalb trugen sie am 08.09. noch die alten Farben, als die Bahnen getauscht wurden. Jetzt zeichnet eine zweite SVG-Lage genau EIN Glied heller -- dasselbe, das die Reihe darunter zuletzt gesetzt hat, aus denselben Zahlen. Sie kann gar nicht danebenstehen. Heller statt groesser: Waere der Kopf groesser, waere er ein Fremdkoerper in der Reihe. DIE STUNDEN WAREN BREITER ALS LANG -- 5,5 lang bei 7 breit, also 0,79:1. Ein Segment, das breiter ist als lang, liest sich als Klotz quer auf der Bahn statt als Balken entlang. Und weil die Kantenlage nur 0,4 versetzt ist, lief der 0,9 breite Lichtstrich MITTEN DURCH jeden Balken statt an seiner Kante. Jetzt 10 lang bei 5,8 breit (1,7:1), und der Kantenversatz ist nach Bandbreite gestaffelt: (Breite - 0,9) / 2, also 0,75 / 1,65 / 2,05 zusaetzlich zur Gruppe. --- screen6: die Scout-Pipeline wird knallrot --- "die farbe von dieser kategorie soll knall rot sein." Die anderen zwanzig Kachelfarben sind gerechnet (OKLab, groesstmoeglicher Abstand). Diese eine ist gewuenscht -- und wurde deshalb GEGEN den Satz geprueft statt eingetragen: Der engste vorhandene Abstand liegt bei 0,0973. #ff1f2e kommt seinem naechsten Nachbarn auf 0,1228 nahe, ist also weiter entfernt als das engste vorhandene Paar. Kontrast 5,01:1 (noetig 4,5). Von sechs geprueften Rottoenen der mit dem groessten Abstand UND genug Kontrast. tools/kachel-farben.mjs weiss jetzt davon: Ein kuenftiger Lauf wuerde wieder Rosa vorschlagen, und das waere eine stille Ruecknahme einer ausdruecklichen Entscheidung. --- Ein Messfehler, der festgehalten gehoert --- Beim Pruefen von screen4 meldete meine Foto-Methode vier Beschriftungen unter 4,5:1 -- bei einem Verlust von 0,00 bis 0,15 durch das Universum. Dass die Ursache nicht das Universum sein konnte, stand damit schon in den Zahlen. Exakt gerechnet (Vordergrundfarbe gegen die tatsaechliche Flaeche darunter) liegen dieselben Texte bei 9,13:1 bis 10,76:1. Die Foto-Methode mittelt ueber alle helleren Bildpunkte, und bei duenner Grossbuchstabenschrift ist die Haelfte davon halb ausgeleuchtete Kantenpunkte. Fuer grosse Schrift taugt sie, fuer kleine Versalien meldet sie systematisch zu wenig. Haette ich ihr geglaubt, haette ich vier Farben "repariert", die in Ordnung sind. Geprueft: pruef-start-ansicht, pruef-css-klassen, pruef-kalender, pruef-buehne, pruef-handy, pruef-workspace-seiten, pruef-tagesruf -- alle in Ordnung. Dazu Ring und Uhr auf 248/248 nachgemessen, die Kopf-Muster gegen die Uhrzeit nachgerechnet (01:24:59 -> Sekunde bei 281,115, Minute bei 96,76, Stunde bei 16,493) und die Kachelfarbe gegen alle zwanzig anderen in OKLab geprueft. Co-Authored-By: Claude Opus 5 <[email protected]>
227 lines
9.3 KiB
HTML
227 lines
9.3 KiB
HTML
<!doctype html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||
<title>Zahlen · 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=202609090133" />
|
||
<link rel="stylesheet" href="assets/css/start.css?v=202609090133" />
|
||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609090133" />
|
||
<link rel="stylesheet" href="assets/css/leistung.css?v=202609090133" />
|
||
<link rel="stylesheet" href="assets/css/module.css?v=202609090133" />
|
||
</head>
|
||
|
||
<body class="start">
|
||
|
||
<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 Workspace</a> · Zahlen</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">Zahlen</p>
|
||
<h1 class="titel">Was wirklich passiert ist.</h1>
|
||
</div>
|
||
<div class="leistung__wahl" id="creator-wahl" hidden>
|
||
<label class="feld-schild" for="creator">Creator</label>
|
||
<select id="creator"></select>
|
||
</div>
|
||
</section>
|
||
|
||
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
|
||
|
||
<!-- DIE WOCHE IN ZAHLEN.
|
||
|
||
Jede Karte trägt die drei Dinge, die eine Kennzahl braucht
|
||
(Recherche 31.08./06.09.2026): den WERT, den VERGLEICH zur
|
||
Vorwoche und den VERLAUF als kleine Linie. Eine Zahl ohne diese
|
||
drei ist eine Eitelkeitszahl -- sie sieht nach Auskunft aus, und
|
||
man kann nichts damit entscheiden. -->
|
||
<section class="leistung-woche" id="woche" hidden>
|
||
<div class="klapp-kopf">
|
||
<p class="feldschild">Diese Woche</p>
|
||
<p class="leistung__erfassung" id="erfassung"></p>
|
||
</div>
|
||
<div class="zahlkarten" id="zahlkarten"></div>
|
||
</section>
|
||
|
||
<!-- Die Ziele als Fortschritt, nicht als Satz. -->
|
||
<section class="leistung-ziele" id="ziele-block" hidden>
|
||
<div class="klapp-kopf">
|
||
<p class="feldschild">Ziele</p>
|
||
<button type="button" class="knopf-still" id="ziele-aendern" hidden>Ziele setzen</button>
|
||
</div>
|
||
<div class="zielbalken" id="zielbalken"></div>
|
||
</section>
|
||
|
||
<!-- Die Tageszeilen. Tastaturfreundlich: Eine Woche soll in unter
|
||
einer Minute eingetragen sein. -->
|
||
<section class="leistung-tage" id="tage-block" hidden>
|
||
<div class="klapp-kopf">
|
||
<p class="feldschild">Die letzten Tage</p>
|
||
<!-- Zwei Knöpfe rechts: erst der Schalter (er ordnet die Liste),
|
||
dann die Hauptaktion. Der Schalter trägt bewusst die stille
|
||
Ausführung -- er verändert nichts an den Daten. -->
|
||
<div class="klapp-kopf__knoepfe">
|
||
<button type="button" class="knopf-still" id="tage-schalter"
|
||
aria-expanded="false" aria-controls="tagetabelle" hidden>
|
||
<span id="tage-schalter-text">Alle zeigen</span>
|
||
<svg class="klapp-pfeil" viewBox="0 0 24 24" aria-hidden="true">
|
||
<path d="m6 9.5 6 6 6-6" />
|
||
</svg>
|
||
</button>
|
||
<button type="button" class="knopf knopf--klein" id="import-oeffnen">Aus Datei einlesen</button>
|
||
</div>
|
||
</div>
|
||
<div class="tagetabelle" id="tagetabelle"></div>
|
||
</section>
|
||
|
||
<p class="fuss">
|
||
Die Zahlen kommen aus dem offiziellen Export von TikTok LIVE Backstage –
|
||
entweder von Hand eingetragen oder als Datei eingelesen. Es wird nichts
|
||
automatisch abgerufen: Dafür gibt es keine offene Schnittstelle.
|
||
</p>
|
||
</main>
|
||
|
||
<!-- Einen Tag eintragen -->
|
||
<dialog class="dialog" id="tag-dialog">
|
||
<form method="dialog" id="tag-form" class="neu neu--blank">
|
||
<h2 class="dialog__titel" id="tag-titel">Tag eintragen</h2>
|
||
<p class="dialog__unter" id="tag-unter"></p>
|
||
|
||
<div class="neu__raster">
|
||
<div>
|
||
<label class="feld-schild" for="f-diamanten">Diamanten</label>
|
||
<input id="f-diamanten" type="number" min="0" inputmode="numeric" />
|
||
</div>
|
||
<div>
|
||
<label class="feld-schild" for="f-dauer">LIVE-Dauer <span class="leise">Minuten</span></label>
|
||
<input id="f-dauer" type="number" min="0" inputmode="numeric" />
|
||
</div>
|
||
<div>
|
||
<label class="feld-schild" for="f-verweildauer">Ø Verweildauer <span class="leise">Sekunden</span></label>
|
||
<input id="f-verweildauer" type="number" min="0" inputmode="numeric" />
|
||
</div>
|
||
<div>
|
||
<label class="feld-schild" for="f-zavg">Ø Zuschauer</label>
|
||
<input id="f-zavg" type="number" min="0" inputmode="numeric" />
|
||
</div>
|
||
<div>
|
||
<label class="feld-schild" for="f-zmax">Spitze</label>
|
||
<input id="f-zmax" type="number" min="0" inputmode="numeric" />
|
||
</div>
|
||
<div>
|
||
<label class="feld-schild" for="f-schenker">Schenker</label>
|
||
<input id="f-schenker" type="number" min="0" inputmode="numeric" />
|
||
</div>
|
||
<div>
|
||
<label class="feld-schild" for="f-follower">Neue Follower</label>
|
||
<input id="f-follower" type="number" min="0" inputmode="numeric" />
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Der Kontext, ohne den Zahlen in die Irre führen. -->
|
||
<div class="neu__zeile">
|
||
<label class="feld-schild" for="f-notiz">
|
||
Was war an dem Tag besonders? <span class="leise">(optional)</span>
|
||
</label>
|
||
<input id="f-notiz" maxlength="500" placeholder="z. B. PK gegen Mia, krank, Technik ausgefallen" />
|
||
</div>
|
||
|
||
<p class="fehler" id="tag-fehler" role="alert" aria-live="polite"></p>
|
||
|
||
<div class="dialog__knoepfe">
|
||
<button type="submit" class="knopf knopf--klein" id="tag-speichern">Speichern</button>
|
||
<button type="button" class="abmelden" id="tag-zu">Abbrechen</button>
|
||
<button type="button" class="abmelden abmelden--warnung" id="tag-loeschen" hidden>Zeile löschen</button>
|
||
</div>
|
||
</form>
|
||
</dialog>
|
||
|
||
<!-- Ziele setzen -->
|
||
<dialog class="dialog" id="ziele-dialog">
|
||
<form method="dialog" id="ziele-form" class="neu neu--blank">
|
||
<h2 class="dialog__titel">Ziele je Woche</h2>
|
||
<p class="dialog__unter">
|
||
Aus „mehr Reichweite" wird eine prüfbare Größe. Leer lassen heißt: kein Ziel.
|
||
</p>
|
||
<div class="neu__raster">
|
||
<div>
|
||
<label class="feld-schild" for="z-diamanten">Diamanten pro Woche</label>
|
||
<input id="z-diamanten" type="number" min="0" inputmode="numeric" />
|
||
</div>
|
||
<div>
|
||
<label class="feld-schild" for="z-tage">LIVE-Tage pro Woche</label>
|
||
<input id="z-tage" type="number" min="0" max="7" inputmode="numeric" />
|
||
</div>
|
||
<div>
|
||
<label class="feld-schild" for="z-verweildauer">Ø Verweildauer <span class="leise">Sekunden</span></label>
|
||
<input id="z-verweildauer" type="number" min="0" inputmode="numeric" />
|
||
</div>
|
||
</div>
|
||
<p class="fehler" id="ziele-fehler" role="alert" aria-live="polite"></p>
|
||
<div class="dialog__knoepfe">
|
||
<button type="submit" class="knopf knopf--klein" id="ziele-speichern">Speichern</button>
|
||
<button type="button" class="abmelden" id="ziele-zu">Abbrechen</button>
|
||
</div>
|
||
</form>
|
||
</dialog>
|
||
|
||
<!-- Aus Datei einlesen. ERST VORSCHAU, DANN ÜBERNEHMEN -->
|
||
<dialog class="dialog dialog--breit" id="import-dialog">
|
||
<form method="dialog" id="import-form" class="neu neu--blank">
|
||
<h2 class="dialog__titel">Aus dem Export einlesen</h2>
|
||
<p class="dialog__unter">
|
||
Die CSV-Datei aus TikTok LIVE Backstage. Erst siehst du, was passieren
|
||
würde – geschrieben wird erst, wenn du bestätigst. Dieselbe Datei
|
||
zweimal einzulesen richtet keinen Schaden an.
|
||
</p>
|
||
|
||
<div class="neu__zeile">
|
||
<label class="feld-schild" for="datei">Datei wählen</label>
|
||
<input id="datei" type="file" accept=".csv,text/csv,text/plain" />
|
||
</div>
|
||
|
||
<div class="import-vorschau" id="vorschau" hidden></div>
|
||
|
||
<p class="fehler" id="import-fehler" role="alert" aria-live="polite"></p>
|
||
|
||
<div class="dialog__knoepfe">
|
||
<button type="submit" class="knopf knopf--klein" id="import-los" disabled>Übernehmen</button>
|
||
<button type="button" class="abmelden" id="import-zu">Abbrechen</button>
|
||
</div>
|
||
</form>
|
||
</dialog>
|
||
|
||
<script src="assets/js/wahl.js?v=202609090133"></script>
|
||
<script src="assets/js/bereiche.js?v=202609090133"></script>
|
||
<script src="assets/js/kopf.js?v=202609090133"></script>
|
||
<script src="assets/js/glocke.js?v=202609090133"></script>
|
||
<script src="assets/js/leistung.js?v=202609090133"></script>
|
||
</body>
|
||
</html>
|