Filipe, 28.09.2026: "ich will auch nicht dass man sachen nach links
und rechts schieben muss. perfektion das untereinander. ich will
niemals irgendwas nach links oder rechts swippen muessen." Dazu ein
Bildschirmfoto der Tafel "Gestaltung" mit waagerechter Rollleiste.
GEMESSEN, NICHT GERATEN
Ein grep nach `overflow-x` findet nur die absichtlichen Roller. Er
findet nicht die Stelle, an der ein Inhalt breiter ist als sein
Kasten und der Browser von sich aus eine Rollleiste anhaengt -- und
genau das war auf dem Bild zu sehen. `server/mess-quer.mjs` geht
deshalb im echten Browser jedes Element durch, auf fuenf
Bildschirmgroessen, in allen sieben Registern, bei offener und
zugeklappter Regie und in allen fuenf Anordnungen.
Erster Lauf: 78 Stellen. Davon waren 54 KEINE -- `overflow-x: hidden`
ist abgeschnittener Text, dort laesst sich nichts schieben. Die
Messung trennt das jetzt; wer es mitzaehlt, findet die echten nicht
mehr. Uebrig blieben vier Ursachen:
1. DIE REGISTER rollten absichtlich waagerecht. Auf 412 px standen
von 605 px Registern 193 rechts ausserhalb -- dass es
"Gestaltung" und "Spenden" gibt, erfuhr man nur beim Wischen auf
Verdacht. Sie brechen jetzt um. Das kostet oben rund 45 Pixel
und bringt Gewissheit dafuer.
2. `.stufen` STAND ZWEIMAL IN reaktion.css -- einmal fuer die
Stufenleiter der Spenden (`display: grid`), 600 Zeilen spaeter
fuer die Chat-Leiste Offen/Team/Zu (`display: flex`). Die
spaetere gewinnt: Die Stufenleiter stellte ihre drei Stufen
NEBENEINANDER, 572 Pixel in einer 327 Pixel schmalen Spalte.
Das ist die Rollleiste auf Filipes Bild. Die Chat-Leiste heisst
jetzt `.chatstufen` / `.chatstufe`.
Dritter Fall dieser Art nach `.tafel` und `.stufe-knopf`.
3. DIE TAFELN KONNTEN NICHT SCHRUMPFEN. Ein Gitterfeld hat von
sich aus `min-width: auto` und besteht auf seinem unteilbarsten
Inhalt. Mit `minmax(0, 1fr)` und `min-width: 0` bricht jetzt
alles um, statt hinauszulaufen.
4. DIE TRANSPORTLEISTE ragte am Handy 76 Pixel ueber beide Kanten
("Naechstes" war nur halb zu sehen). Zwei Gruende: `.transport__teil`
hatte kein `flex-wrap` (die mittlere Gruppe schon -- zwei Regeln
fuer dieselbe Sache, eine vergessen), und im Umschalter steht
ein ganzer Videotitel, der als Flex-Kind auf seiner vollen
Breite bestand.
NEBENBEFUND: EINE FESTE ZAHL VON GESTERN
Der Saal stand auf `height: calc(100dvh - 69px)` -- 69 war einmal
die gemessene Hoehe der Kopfleiste. Sie ist 73 geworden, und der
Saal endete damit 4 Pixel unter dem Fensterrand: Der Play-Knopf war
nur mit Scrollen zu erreichen. Die Antwort ist keine neue Zahl,
sondern eine Regel, die misst -- der Koerper ist jetzt eine Spalte,
die Kopfleiste nimmt, was sie braucht, der Saal bekommt den Rest.
(Dabei noch ein Spezifitaetsunfall: `.reaktion-seite` (0,1,0)
verliert gegen `body.start` (0,1,1) aus start.css.)
NEUE WACHEN
- `mess-quer.mjs` mit Gegenprobe (ohne die Reparaturen findet sie
47 px, mit ihnen nichts).
- pruef-reaktion: kein absichtliches `overflow-x: auto` mehr; und
zwei Grundregeln derselben Klasse mit verschiedenem `display`
sind ein Namensstreit. Der bisherige Waechter verglich nur
ZWISCHEN Stilvorlagen -- `.stufen` stand zweimal in DERSELBEN.
- pruef-css-klassen: jede Klammer hat ihr Gegenstueck. Beim
Umschreiben blieb heute das Ende einer Regel ohne ihren Anfang
stehen; der Browser wirft die Zeile weg und schliesst dafuer den
naechsten @media-Block zu frueh. Drei Befunde sahen daraufhin wie
Programmfehler aus.
MESSUNG NACHGEZOGEN
`mess-reaktion` stammte noch aus der Zeit vor "Regie links" und
"drei Kacheln" und meldete drei Dinge, die keine Fehler waren --
gemessen gegen den Stand von HEAD: identisch rot. Sie misst ausserdem
seit heute mit FINGER statt Mauszeiger; ohne `hasTouch` greift keine
einzige Regel aus `@media (pointer: coarse)`, und dort stehen alle
44-Pixel-Beruehrziele des Hauses.
OFFEN UND AUFGESCHRIEBEN
Am Handy bleibt bei offener Regie vom Bild nichts (0 px). Der Mangel
besteht seit dem Umbau "Regie links"; drei Versuche, ihn heute zu
loesen, haben Knoepfe verdeckt -- und ein verdeckter Knopf ist
schlimmer als ein kleines Bild. Die Versuche und der richtige Weg
(Tempo-Gruppe hinter einen Knopf, wie "Aa" im Chat) stehen in
reaktion.css. `mess-reaktion` meldet ihn als dritten Ausgang: nicht
als Fehler und nicht als bestanden.
GEPRUEFT
pruef-reaktion 384 / 0 (vorher 379)
pruef-spenden 172 / 0
pruef-buehne 36 / 0
pruef-css-klassen, -tippziele, -struktur, -handy: ohne Befund
mess-quer EXIT 0 -- 28 Stellen, fuenf Groessen, nichts rollt
mess-reaktion EXIT 0, 1 benannter offener Punkt
mess-buehne EXIT 0
194 lines
8.6 KiB
HTML
194 lines
8.6 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>Content-Ideen · 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=202609290232" />
|
||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||
<link rel="stylesheet" href="assets/css/content.css?v=202609290232" />
|
||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||
<!-- 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=202609290232" />
|
||
</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 Workspace</a> · Content</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">Betreuung</p>
|
||
<h1 class="titel">Content-Ideen</h1>
|
||
<p class="unterzeile" id="unterzeile">
|
||
Von der Idee bis zum Upload – eine Strecke, kein Terminkalender.
|
||
</p>
|
||
</div>
|
||
<button type="button" class="knopf knopf--klein" id="neu-oeffnen">Video anlegen</button>
|
||
</section>
|
||
|
||
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
|
||
|
||
<!-- Kennzahlen. Bewusst wenige und jede mit einer Handlung dahinter –
|
||
eine Zahl ohne Vergleich ist eine Eitelkeitszahl. -->
|
||
<!-- Die Kennzahlen-Reihe stand hier bis zum 01.09.2026 ("diese Kisten
|
||
sind jetzt ueberall zu viel, die sollen weg"). Die Strecke darunter
|
||
zeigt dieselben Zahlen an jeder Spalte. -->
|
||
|
||
<!-- Säulen-Balance: gestapelter Balken, 90 Tage, nur Veröffentlichtes. -->
|
||
<section class="balance" id="balance" hidden>
|
||
<div class="klapp-kopf">
|
||
<p class="feldschild">Womit der Kanal gefüllt wird <span class="leise" id="balance-zeit"></span></p>
|
||
<button type="button" class="knopf-still" id="saeulen-oeffnen">Säulen verwalten</button>
|
||
</div>
|
||
<div class="balance__balken" id="balance-balken" role="img" aria-label="Verteilung auf die Content-Säulen"></div>
|
||
<ul class="legende" id="balance-legende"></ul>
|
||
<p class="balance__hinweis" id="balance-hinweis"></p>
|
||
</section>
|
||
|
||
<!-- Säulen verwalten. Zugeklappt, weil man das selten anfasst. -->
|
||
<section class="saeulen-kasten" id="saeulen-kasten" hidden>
|
||
<div class="klapp-kopf">
|
||
<p class="feldschild">Content-Säulen</p>
|
||
<button type="button" class="knopf-still" id="saeulen-zu">Schließen</button>
|
||
</div>
|
||
<p class="block__frage">
|
||
Drei bis fünf Themen, aus denen der Kanal besteht. Als Richtwert gilt
|
||
<strong>70 % Wert</strong> (Unterhaltung, Hilfe), <strong>20 % Community</strong>,
|
||
<strong>10 % Eigenwerbung</strong>. Eine Säule wird erst brauchbar, wenn Formate an ihr hängen.
|
||
</p>
|
||
<div id="saeulen-liste"></div>
|
||
<form class="saeule-neu" id="saeule-neu">
|
||
<div class="feld feld--saeule-creator" id="feld-saeule-creator" hidden>
|
||
<label class="feld-schild" for="s-creator">Für</label>
|
||
<select id="s-creator"></select>
|
||
</div>
|
||
<div class="feld">
|
||
<label class="feld-schild" for="s-name">Name der Säule</label>
|
||
<input id="s-name" maxlength="40" placeholder="z. B. Tutorials" required />
|
||
</div>
|
||
<div class="feld feld--schmal">
|
||
<label class="feld-schild" for="s-ziel">Ziel-Anteil %</label>
|
||
<input id="s-ziel" type="number" min="0" max="100" step="5" placeholder="z. B. 70" />
|
||
</div>
|
||
<button type="submit" class="knopf knopf--klein">Hinzufügen</button>
|
||
</form>
|
||
</section>
|
||
|
||
<!-- Formular für ein neues Video -->
|
||
<form class="neu" id="neu" hidden>
|
||
<div class="neu__raster">
|
||
<div class="feld feld--breit">
|
||
<label class="feld-schild" for="f-titel">Worum geht es?</label>
|
||
<input id="f-titel" name="titel" maxlength="160" required
|
||
placeholder="z. B. „3 Fehler beim ersten LIVE“" />
|
||
</div>
|
||
<div class="feld feld--breit">
|
||
<label class="feld-schild" for="f-hook">
|
||
Hook <span class="leise">– die ersten Sekunden, sie entscheiden über alles</span>
|
||
</label>
|
||
<input id="f-hook" name="hook" maxlength="300"
|
||
placeholder="z. B. „Ich hab 4 Monate gebraucht, um das zu kapieren.“" />
|
||
</div>
|
||
<div class="feld" id="feld-creator" hidden>
|
||
<label class="feld-schild" for="f-creator">Creator</label>
|
||
<select id="f-creator"></select>
|
||
</div>
|
||
<div class="feld">
|
||
<label class="feld-schild" for="f-art">Stufe</label>
|
||
<select id="f-art"></select>
|
||
</div>
|
||
<div class="feld">
|
||
<label class="feld-schild" for="f-saeule">Säule</label>
|
||
<select id="f-saeule"></select>
|
||
</div>
|
||
<div class="feld">
|
||
<label class="feld-schild" for="f-format">Format</label>
|
||
<input id="f-format" maxlength="60" list="formate" placeholder="z. B. Tutorial" />
|
||
<datalist id="formate">
|
||
<option value="Talking Head"></option>
|
||
<option value="Tutorial"></option>
|
||
<option value="Story"></option>
|
||
<option value="LIVE-Ausschnitt"></option>
|
||
<option value="Vorher/Nachher"></option>
|
||
<option value="Reaktion"></option>
|
||
<option value="Behind the Scenes"></option>
|
||
</datalist>
|
||
</div>
|
||
<div class="feld">
|
||
<label class="feld-schild" for="f-geplant">Soll raus am</label>
|
||
<input id="f-geplant" type="date" />
|
||
</div>
|
||
<div class="feld feld--breit">
|
||
<label class="feld-schild" for="f-text">Ablauf, Notizen (optional)</label>
|
||
<textarea id="f-text" rows="3" maxlength="6000"></textarea>
|
||
</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>
|
||
|
||
<div class="filterzeile" id="filterzeile"></div>
|
||
|
||
<!-- Die Strecke. Fünf Spalten, auf dem Handy untereinander. -->
|
||
<!-- Fertige Ideen zum Uebernehmen. Steht VOR der Strecke: Wer noch
|
||
nichts hat, soll nicht erst an leeren Spalten vorbeiscrollen. -->
|
||
<div id="vorlagen" hidden></div>
|
||
|
||
<div class="strecke" id="strecke" aria-busy="true">
|
||
<p class="leise">Wird geladen …</p>
|
||
</div>
|
||
|
||
</main>
|
||
|
||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||
|
||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||
<script src="assets/js/checkliste.js?v=202609290232" defer></script>
|
||
<script src="assets/js/content.js?v=202609290232" defer></script>
|
||
</body>
|
||
</html>
|