Filipe, am Tag einer Sendung: „sobald meine kamera auch zu sehen ist, also mich, dan haengen die videos EXTREEEEEM. wenn das video alleine nur laeuft dan laeuft es fast perfekt." Haus: Team Dogi. Zwei Ursachen, und BEIDE sind nur aktiv, wenn Kameras sichtbar sind -- genau deshalb lief das Video allein sauber. 1. ZWOELF KODIERER OHNE JEDE GRENZE Die Reaction verbindet jeden mit jedem. Fuer jeden Zuschauer baut der Host eine eigene Verbindung auf, und jede hat ihren EIGENEN Kodierer: Bei zwoelf Sichtplaetzen kodiert sein Rechner dasselbe Gesicht zwoelfmal gleichzeitig, waehrend daneben das Video dekodiert wird. Und an keinem einzigen Sender stand eine Grenze. `addTrack` ohne ein Wort zu `maxBitrate`, `maxFramerate`, `scaleResolutionDownBy` oder `degradationPreference` -- zwoelf Kodierer, die alle gleichzeitig „so gut wie moeglich" versuchen und dem Video die Rechenzeit wegnehmen. Jetzt: 220 kbit, 15 Bilder, Aufloesung halbiert (240x180 gehen hinaus, das Fenster ist 200 Pixel breit), `balanced`. Rund ein Sechstel der bisherigen Rechenlast. Der geteilte Bildschirm bekommt eigene Werte -- dort ist die Aufloesung der Zweck und die Bildrate fast egal. 2. MATTGLAS UEBER EINEM LAUFENDEN VIDEO `backdrop-filter` zwingt die Grafikkarte, den Bereich DAHINTER neu zu lesen und weichzuzeichnen. Ueber einer stehenden Flaeche kostet das einmal etwas; ueber einem laufenden Video bei JEDEM Bild -- auf derselben Grafikkarte, die das Video dekodiert. Vier Stellen lagen auf der Leinwand: das Namensschild JEDES Kamerafensters (bei voller Sendung dreizehnmal), die Tempoanzeige, die Senderleiste und der Ton-Knopf. Alle vier tragen jetzt einen deckenderen Grund und keinen Weichzeichner. Dazu `contain: paint` am Kamerafenster: Ein ankommendes Kamerabild zieht keine Neuzeichnung der Leinwand mehr nach sich. EIN RUECKZIEHER, UND ZWAR EIN WICHTIGER Mein erster Griff war, die Kamera kleiner aufzunehmen (480x360 statt 640x480). `mess-reaktion` meldete daraufhin „Im Vorraum laeuft kein eigenes Bild" -- eine Warnung, die vorher nicht da war. 640x480 kann jede Kamera, 480x360 nicht, und `ideal` ist zwar nur ein Wunsch, aber was dabei herauskommt, entscheidet der Treiber. Am Abend einer Sendung ist „vielleicht kein Bild" der schlechteste aller Tausche. Die Aufloesung bleibt deshalb, kleiner gerechnet wird im Kodierer -- dort ist es nachweislich erlaubt und kann nichts verhindern, was vorher ging. GEMESSEN -- mess-kameralast.mjs (neu), 13 Messungen, 0 Fehler Sie fragt nicht „kommt ein Bild an" (das war immer mit Ja beantwortet), sondern WIE TEUER das Bild ist, das hinausgeht -- und zwar an der LAUFENDEN Verbindung ueber `getParameters()`, nicht im Quelltext. Eine Zahl im Code beweist nicht, dass der Browser sie uebernommen hat. Zum Mattglas stellt sie die PRAEZISE Frage: Der erste Entwurf suchte jedes `backdrop-filter` auf der Seite und meldete drei, die gar nicht ueber der Leinwand liegen (Kopfleiste, Regieleiste, Buehnenschild) -- teuer ist es aber nur, wenn sich dahinter etwas bewegt. Gemessen wird jetzt die UEBERSCHNEIDUNG mit dem Videobereich; so kamen die zwei heraus, die ich uebersehen hatte. mess-kameralast (neu) 13, 0 Fehler mess-reaktion 0 ACHTUNG (mit dem Rueckzieher wieder sauber) pruef-reaktion 588, 0 Fehler pruef-css-klassen gruen Co-Authored-By: Claude Opus 5 <[email protected]>
208 lines
9.4 KiB
HTML
208 lines
9.4 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>Scouting · 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=202610082157" />
|
||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610082157" />
|
||
<link rel="stylesheet" href="assets/css/gate.css?v=202610082157" />
|
||
<link rel="stylesheet" href="assets/css/start.css?v=202610082157" />
|
||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610082157" />
|
||
<link rel="stylesheet" href="assets/css/scouting.css?v=202610082157" />
|
||
<link rel="stylesheet" href="assets/css/module.css?v=202610082157" />
|
||
<!-- 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=202610082157" />
|
||
</head>
|
||
|
||
<body class="start" data-buehne="wald">
|
||
|
||
<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> · Scouting</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">Scout-CRM</p>
|
||
<h1 class="titel">Pipeline</h1>
|
||
<p class="unterzeile" id="unterzeile">Vom ersten Fund bis zur Übergabe – nachvollziehbar statt im Kopf.</p>
|
||
</div>
|
||
<div class="steuerung">
|
||
<div id="scoutwahl-block" hidden>
|
||
<label class="feld-schild" for="f-scout">Scout</label>
|
||
<select id="f-scout"><option value="">Alle Scouts</option></select>
|
||
</div>
|
||
<button type="button" class="knopf knopf--klein" id="neu-auf">Neuer Kontakt</button>
|
||
</div>
|
||
</section>
|
||
|
||
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
|
||
|
||
<!-- Follow-ups: der Teil, der ohne System am ehesten untergeht. -->
|
||
<section class="faellig" id="faellig" hidden>
|
||
<p class="faellig__titel">Follow-up fällig</p>
|
||
<ul class="faellig__liste" id="faellig-liste"></ul>
|
||
</section>
|
||
|
||
<section class="neu" id="neu-block" hidden>
|
||
<h2 class="neu__titel">Neuer Kontakt</h2>
|
||
<form id="neu-form">
|
||
<div class="neu__raster">
|
||
<div class="feld feld--breit">
|
||
<label class="feld-schild" for="n-name">Name</label>
|
||
<input id="n-name" maxlength="120" required placeholder="Wie heißt die Person?" />
|
||
</div>
|
||
<div class="feld">
|
||
<label class="feld-schild" for="n-plattform">Plattform</label>
|
||
<input id="n-plattform" maxlength="60" placeholder="z. B. TikTok" />
|
||
</div>
|
||
<div class="feld">
|
||
<label class="feld-schild" for="n-handle">Profil / Handle</label>
|
||
<input id="n-handle" maxlength="120" placeholder="@…" />
|
||
</div>
|
||
<!-- NORMAL ODER PREMIUM (06.10.2026).
|
||
|
||
Filipe: "auch dass wenn man die einträgt soll man aussuchen
|
||
können zwischen normalen und premium creator."
|
||
|
||
Steht direkt beim Handle und nicht weiter unten: Die Wahl
|
||
entscheidet, in WELCHER Spalte die Karte danach liegt. Wer
|
||
sie erst am Ende des Formulars findet, hat die Karte schon
|
||
zweimal auf der falschen Seite gesucht.
|
||
|
||
Die Auswahl wird beim Laden aus der Serverliste gefuellt
|
||
(siehe scouting.js) -- hier steht nur die Vorgabe, damit das
|
||
Feld auch dann bedienbar ist, wenn die Liste noch nicht da
|
||
ist. -->
|
||
<div class="feld">
|
||
<label class="feld-schild" for="n-art">Art</label>
|
||
<select id="n-art">
|
||
<option value="normal" selected>Normal</option>
|
||
<option value="premium">Premium</option>
|
||
</select>
|
||
</div>
|
||
<div class="feld">
|
||
<label class="feld-schild" for="n-prio">Priorität</label>
|
||
<select id="n-prio">
|
||
<option value="hoch">Hoch</option>
|
||
<option value="mittel" selected>Mittel</option>
|
||
<option value="niedrig">Niedrig</option>
|
||
</select>
|
||
</div>
|
||
<div class="feld" id="n-scout-block" hidden>
|
||
<label class="feld-schild" for="n-scout">Scout</label>
|
||
<select id="n-scout"><option value="">– niemandem zugeordnet –</option></select>
|
||
</div>
|
||
<div class="feld feld--breit">
|
||
<label class="feld-schild" for="n-aktivitaet">Aktivität & LIVE-Fokus</label>
|
||
<input id="n-aktivitaet" maxlength="3000" placeholder="Wie oft LIVE? Welche Zeiten? Welches Format?" />
|
||
</div>
|
||
<div class="feld feld--breit">
|
||
<label class="feld-schild" for="n-potenzial">Potenzial & Stil</label>
|
||
<input id="n-potenzial" maxlength="3000" placeholder="Was macht die Person besonders?" />
|
||
</div>
|
||
<div class="feld">
|
||
<label class="feld-schild" for="n-followup">Nächster Follow-up</label>
|
||
<input id="n-followup" type="date" />
|
||
</div>
|
||
<!-- DIE DREI QUALIFIZIERENDEN FRAGEN (11.09.2026).
|
||
|
||
Sie stehen schon beim Anlegen da, weil sie sonst nie
|
||
gestellt werden: "Schon im Netzwerk?" entscheidet, ob sich
|
||
der ganze Rest lohnt, und wer sie erst nach drei Nachrichten
|
||
stellt, hat drei Nachrichten zu viel geschrieben.
|
||
|
||
Alle drei sind freiwillig. Ein Pflichtfeld beim Anlegen
|
||
wäre die sichere Art, dafür zu sorgen, dass Kontakte gar
|
||
nicht erst eingetragen werden. -->
|
||
<div class="feld">
|
||
<label class="feld-schild" for="n-netzwerk">Schon im Netzwerk?</label>
|
||
<select id="n-netzwerk">
|
||
<option value="">– noch nicht gefragt –</option>
|
||
<option value="nein">frei</option>
|
||
<option value="ja">schon im Netzwerk</option>
|
||
<option value="unbekannt">noch nicht gefragt</option>
|
||
</select>
|
||
</div>
|
||
<div class="feld">
|
||
<label class="feld-schild" for="n-land">Land</label>
|
||
<select id="n-land">
|
||
<option value="">– nicht angegeben –</option>
|
||
<option value="DE">Deutschland</option>
|
||
<option value="AT">Österreich</option>
|
||
<option value="CH">Schweiz</option>
|
||
<option value="LU">Luxemburg</option>
|
||
<option value="andere">anderes Land</option>
|
||
</select>
|
||
</div>
|
||
<div class="feld">
|
||
<label class="feld-schild" for="n-follower">Follower</label>
|
||
<input id="n-follower" maxlength="14" inputmode="numeric" placeholder="z. B. 12400 oder 12,4k" />
|
||
</div>
|
||
</div>
|
||
<p class="fehler" id="n-fehler" role="alert" aria-live="polite"></p>
|
||
<div class="neu__knoepfe">
|
||
<button type="submit" class="knopf knopf--klein" id="n-speichern">Aufnehmen</button>
|
||
<button type="button" class="knopf-still" id="neu-zu">Abbrechen</button>
|
||
</div>
|
||
</form>
|
||
</section>
|
||
|
||
<div id="pipeline" aria-busy="true"><p class="leise">Pipeline wird geladen …</p></div>
|
||
|
||
</main>
|
||
|
||
<!-- Zugangscode nach dem Onboarding: genau einmal sichtbar. -->
|
||
<div class="schleier" id="code-schleier" hidden>
|
||
<div class="code-fenster" role="dialog" aria-modal="true" aria-labelledby="code-titel">
|
||
<p class="marke">Onboarding gestartet</p>
|
||
<h2 class="code-fenster__titel" id="code-titel">Zugangscode</h2>
|
||
<p class="code-fenster__text">
|
||
Dieser Code wird <strong>genau einmal</strong> angezeigt und ist danach nicht mehr
|
||
abrufbar. Gib ihn persönlich weiter, nicht über einen offenen Kanal.
|
||
</p>
|
||
<p class="code-fenster__code" id="code-wert">—</p>
|
||
<div class="neu__knoepfe">
|
||
<button type="button" class="knopf knopf--klein" id="code-kopieren">Kopieren</button>
|
||
<button type="button" class="knopf-still" id="code-zu">Habe ich notiert</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<script src="assets/js/meldung.js?v=202610082157" defer></script>
|
||
<script src="assets/js/nachfrage.js?v=202610082157" defer></script>
|
||
|
||
<script src="assets/js/wahl.js?v=202610082157" defer></script>
|
||
<script src="assets/js/bereiche.js?v=202610082157" defer></script>
|
||
<script src="assets/js/installieren.js?v=202610082157" defer></script>
|
||
<script src="assets/js/kopf.js?v=202610082157" defer></script>
|
||
<script src="assets/js/glocke.js?v=202610082157" defer></script>
|
||
<script src="assets/js/scouting.js?v=202610082157" defer></script>
|
||
</body>
|
||
</html>
|