Die Modi-Seite gehoert Dogi und den Modis -- Wand, Zeichen, Reiter
Filipe zum Bildschirmfoto der Zugangswand auf crew.: "alles soll auf dogfather und die modis perfektionniert werden auf der neuen modi seite." Dort stand bis eben die gewohnte Wand: Spicy-Media-Logo, "Creator Workspace", der Satz ueber Manager, Scouts und Creator, fuenf Rollenkacheln. Fuer einen Modi war davon nichts richtig. DIE KACHELREIHE FAELLT WEG, und das ist eine Verbesserung: Eine Reihe mit genau einem Eintrag ist keine Auswahl, sondern eine Huerde -- man muesste erst daraufdruecken, bevor das Codefeld etwas annimmt. gate.js prueft jetzt, OB es Kacheln gibt, statt sie vorauszusetzen. DIE BUEHNE IST AUS DEM VORHANDENEN MOTIV GEBAUT, nicht neu erfunden, und das ist kein Sparen: Die Anmeldeseite ist eine MECHANIK. Rechts steht im Bild eine leere Tafel, und gate.css setzt die Karte auf Hundertstel genau dort hinein. Ein frei erfundenes Bild haette diese vier Zahlen mitgenommen. Also dieselbe Szene, ueber den Mischmodus "color" ins Blau umgefaerbt (hue-rotate haette Rot nach Cyan UND Blau nach Gelb gedreht), Dogi anstelle des Spicy-Medaillons, "TEAM DOGI" darunter. Gemessen: rote Bildpunkte 18,1 % -> 0,0 %, Karte auf 0 px genau. NACH DER ANMELDUNG geht es weiter: kopf.js zieht Reitertitel und Zeichen aus `ich.marke` nach -- "Aufgaben · Team Dogi" statt "· Spicy & Dogi", mit dem eigenen Symbol. An einer Stelle statt in 30 HTML-Dateien. DREI FUNDE, DIE NICHT AUS DEM KOPF KAMEN 1. DER KNOPF WAERE SCHLECHTER LESBAR GEWORDEN. Mein erstes Blau endete bei #4aa4cf -- weisse Schrift darauf: 2,8 zu 1. Der rot-blaue Verlauf, den er ersetzt, haelt ueber seine GANZE Laenge 4,65; er war offenbar genau darauf gebaut. Jetzt 5,10 zu 1, am fertigen Bildschirmfoto gemessen statt aus einer einzelnen Farbe hergeleitet. 2. DIE NEUE WAND WAR AUCH AUF workspace. ABRUFBAR. Sie liegt als Datei im selben Ordner. Aufgefallen ist das, weil der Wortleck-Test sie ueberhaupt las -- die Frage WARUM war die Antwort. Ausserhalb von crew. antwortet sie jetzt mit 404; auf den Pruefadressen bleibt sie erreichbar, sonst koennte die Pruefung sie nicht mehr oeffnen und waere gruen ohne etwas zu messen. 3. ZWEI GLEICHE KACHELN AUF DER STARTSEITE, seit dem letzten Deploy live. Die Team-Lage-Kachel von heute Mittag hatte Name, Zeichen, Ton UND Gruppe einer schon vorhandenen -- fuehrte aber woandershin. Gefunden von "jede Kachel hat ihre eigene Farbe (23 Farben auf 24 Kacheln)". Jetzt "Eingang", Gruppe Taeglich, neuer Ton 24 (#8a20cf, Abstand 38,5 im CIELAB-Raum; reines Blau haette 52 gehabt und waere auf dunklem Grund am schlechtesten zu fokussieren). Eine Fehlermeldung zeigte dadurch auf die falsche Seite -- ebenfalls behoben. Und die Pruefung, die es fand, zaehlte nur bereiche.js: Vom Server angehaengte Kacheln kannte sie nicht. Sie fragt jetzt beide Quellen. Der Wortleck-Test meldete ausserdem sieben Fundstellen -- allesamt Kommentare, die ich beim Bauen selbst geschrieben hatte. GEMESSEN pruef-crew-adresse 103 pruef-crew-wand-bild 43 (neu) pruef-modi-checkliste 59 pruef-modi-verborgen 75 pruef-rollen 245 pruef-zwischenspeicher 21 pruef-modi-wortleck 4 pruef-start-ansicht gruen Co-Authored-By: Claude Opus 5 <[email protected]>
@@ -2273,6 +2273,20 @@ body.gate {
|
||||
color: #a9dcff;
|
||||
text-shadow: 0 1px 10px rgba(99, 184, 238, .45);
|
||||
}
|
||||
/* TEAM DOGI (10.09.2026, nur auf crew.dogfather-universe.com).
|
||||
|
||||
Bewusst NICHT .marke__spicy mitbenutzt, obwohl es dieselbe Stelle im
|
||||
Satz ist: Die Klasse ist rosarot, weil dort "SpicyMedia" steht. Auf
|
||||
dieser Seite waere das der einzige warme Fleck auf einer durchweg
|
||||
blauen Seite -- und er saesse ausgerechnet auf dem Namen, der dort
|
||||
NICHT hingehoert.
|
||||
|
||||
Silbrig wie der Schriftzug im Hintergrundbild, damit beide dasselbe
|
||||
sagen. */
|
||||
.marke--paar .marke__crew {
|
||||
color: #dce9f3;
|
||||
text-shadow: 0 1px 10px rgba(150, 190, 220, .45);
|
||||
}
|
||||
.marke--paar .marke__x {
|
||||
/* Kleiner, leiser, und mit etwas Luft -- es verbindet, es benennt
|
||||
nicht. */
|
||||
@@ -2696,3 +2710,76 @@ body.gate {
|
||||
radial-gradient(1.1px 1.1px at 63% 72%, rgba(226, 238, 250, .38), transparent),
|
||||
radial-gradient(1.6px 1.6px at 84% 26%, rgba(255, 255, 255, .3), transparent);
|
||||
}
|
||||
|
||||
|
||||
/* =====================================================================
|
||||
DIE ZWEITE ZUGANGSWAND (10.09.2026)
|
||||
|
||||
Nur crew-index.html traegt `gate--crew`. Hier stehen die wenigen
|
||||
Stellen, an denen die gemeinsame Gestaltung nicht passt -- und zwar
|
||||
NUR die.
|
||||
|
||||
ES GEHT NICHT UM GESCHMACK, SONDERN UM DAS BILD DAHINTER.
|
||||
Die Karte holt sich absichtlich die Farben des gemalten Rahmens
|
||||
herein: rot oben links, blau unten rechts, "das, was die Karte mit
|
||||
dem Bild verbindet, statt sie davorzusetzen" (Begruendung weiter
|
||||
oben). Auf der zweiten Buehne ist der Rahmen aber RINGSUM blau -- die
|
||||
Szene wurde umgefaerbt. Das Rot verbindet dort also nichts mehr,
|
||||
sondern widerspricht dem Bild.
|
||||
|
||||
Dieselbe Ueberlegung beim Anmeldeknopf: Sein Verlauf lief von Rot
|
||||
nach Blau, weil er die beiden Marken aufnahm. Auf dieser Seite gibt
|
||||
es nur eine.
|
||||
===================================================================== */
|
||||
|
||||
/* Der Knopf: von tiefem zu hellerem Blau statt von Rot nach Blau.
|
||||
|
||||
DIE HELLIGKEIT IST NACHGERECHNET, NICHT GEWAEHLT. Der erste Entwurf
|
||||
endete bei #4aa4cf -- huebsch, und weisse Schrift darauf haette nur
|
||||
2,8 zu 1 gehabt. Der rot-blaue Verlauf, den er ersetzt, haelt ueber
|
||||
seine GANZE Laenge 4,65 zu 1; er war offenbar genau darauf gebaut.
|
||||
Ein hellerer Knopf sieht kraeftiger aus und ist schlechter zu lesen
|
||||
-- das ist kein Tausch, den man nebenbei macht.
|
||||
|
||||
Jede Stufe hier liegt bei mindestens 5 zu 1 gegen Weiss. Gemessen
|
||||
wird das in pruef-crew-wand-bild.mjs am fertigen Bildschirmfoto, denn
|
||||
ein Verlauf laesst sich nicht aus einer einzelnen Farbe beurteilen. */
|
||||
body.gate--crew #knopf {
|
||||
background:
|
||||
linear-gradient(100deg, #17527f 0%, #205f8c 34%, #2f6f9a 74%, #3a7699 100%);
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgba(255, 255, 255, .28),
|
||||
inset 0 -2px 0 rgba(0, 0, 0, .22),
|
||||
0 10px 26px -14px rgba(64, 146, 200, .9),
|
||||
0 10px 26px -16px rgba(126, 200, 242, .8);
|
||||
}
|
||||
body.gate--crew #knopf:hover:not([disabled]) {
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgba(255, 255, 255, .34),
|
||||
inset 0 -2px 0 rgba(0, 0, 0, .22),
|
||||
0 14px 30px -12px rgba(64, 146, 200, .95),
|
||||
0 14px 30px -14px rgba(126, 200, 242, .85);
|
||||
}
|
||||
|
||||
/* Die Karte in der gemalten Tafel. WORTGLEICH dieselbe Bedingung wie
|
||||
oben -- nicht global: Auf schmalen Geraeten hat die Karte einen
|
||||
anderen Aufbau, und ein globales `background` haette den ueberschrieben.
|
||||
Nur die zwei roten Werte werden blau, alles andere bleibt Zeile fuer
|
||||
Zeile wie es war. */
|
||||
@media (min-width: 1100px) and (min-height: 620px) and (min-aspect-ratio: 7/5) {
|
||||
body.gate--crew .tafel {
|
||||
background:
|
||||
radial-gradient(135% 100% at 0% 0%, rgba(96, 168, 224, .24), transparent 55%),
|
||||
radial-gradient(135% 100% at 100% 100%, rgba(56, 158, 246, .30), transparent 58%),
|
||||
linear-gradient(176deg,
|
||||
rgba(16, 23, 36, .93) 0%,
|
||||
rgba(9, 13, 21, .95) 46%,
|
||||
rgba(5, 7, 13, .96) 100%);
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgba(255, 255, 255, .11),
|
||||
inset 0 -1px 0 rgba(0, 0, 0, .5),
|
||||
inset 2px 2px 0 -1px rgba(120, 190, 240, .32),
|
||||
inset -2px -2px 0 -1px rgba(56, 158, 246, .38),
|
||||
inset 0 0 54px -20px rgba(0, 0, 0, .92);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -949,6 +949,19 @@ body.start > main { position: relative; z-index: 1; }
|
||||
sieht abgeschaltet aus. Gedeckt statt grell, wie alles hier. */
|
||||
[data-ton="23"] { --ton: #5f8a9f; } /* Ideen-Board */
|
||||
|
||||
/* Ton 24 (10.09.2026, Eingang). Wieder gerechnet statt gewaehlt, und bei
|
||||
23 belegten Toenen wird es eng: Der Abstand im CIELAB-Raum zum
|
||||
naechsten Nachbarn betraegt 38,5 -- die weichen Violett-Toene, die
|
||||
zuerst naheliegend schienen, lagen alle zwischen 13 und 26, weil
|
||||
Ton 19 (#796ce0) und Ton 8 (#c06ad0) diesen Bereich schon besetzen.
|
||||
|
||||
Reines Blau haette mit 52 den groessten Abstand gehabt und wurde
|
||||
verworfen: stark gesaettigtes Blau ist auf dunklem Grund am
|
||||
schlechtesten zu fokussieren. Kraeftiges Gruen kam auf 39,5, hat aber
|
||||
L* 81 und wuerde leuchten. Dieser Ton hat eine Leuchtdichte von 0,109
|
||||
-- dunkel genug, um neben den anderen ruhig zu bleiben. */
|
||||
[data-ton="24"] { --ton: #8a20cf; } /* Eingang */
|
||||
|
||||
/* Rückfallwert für alles, was einen Ton braucht, aber keine Nummer hat.
|
||||
Steht bewusst in :where() -- damit zählt die Zeile beim Wettstreit der
|
||||
Regeln als NICHT vorhanden und die Nummer oben gewinnt immer. Ohne
|
||||
|
||||
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 125 KiB |
|
After Width: | Height: | Size: 173 KiB |
|
After Width: | Height: | Size: 251 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 93 KiB |
@@ -31,6 +31,19 @@
|
||||
const SPEICHER = 'dfw.rolle';
|
||||
let gewaehlt = null;
|
||||
|
||||
/* AUF DER ZWEITEN ADRESSE GIBT ES KEINE KACHELN (10.09.2026).
|
||||
|
||||
Dort fuehrt genau eine Sorte Zugang hinein, also ist nichts zu
|
||||
waehlen -- jene Wand liefert die Reihe erst gar nicht mit.
|
||||
|
||||
Geprueft wird deshalb, OB es Kacheln gibt, statt sie
|
||||
vorauszusetzen. Ohne diese Zeile bliebe `gewaehlt` dort ewig null,
|
||||
und der Anmeldeknopf antwortete auf jeden Druck mit "Bitte zuerst
|
||||
auswaehlen, womit du dich anmeldest" -- vor einer Seite, auf der es
|
||||
nichts auszuwaehlen gibt. Die Anmeldung waere unbenutzbar gewesen,
|
||||
und zwar ohne Fehlermeldung im Protokoll. */
|
||||
const ohneKacheln = rollen.length === 0;
|
||||
|
||||
/* ---------- Rolle wählen ------------------------------------------ */
|
||||
|
||||
function waehle(rolle, fokus = false) {
|
||||
@@ -99,7 +112,7 @@
|
||||
e.preventDefault();
|
||||
const wert = code.value.trim();
|
||||
|
||||
if (!gewaehlt) { melde('Bitte zuerst auswählen, womit du dich anmeldest.'); rollen[0].focus(); return; }
|
||||
if (!ohneKacheln && !gewaehlt) { melde('Bitte zuerst auswählen, womit du dich anmeldest.'); rollen[0].focus(); return; }
|
||||
if (!wert) { melde('Bitte den Zugangscode eingeben.'); code.focus(); return; }
|
||||
|
||||
melde('');
|
||||
@@ -109,7 +122,11 @@
|
||||
const antwort = await fetch('/workspace/api/anmelden', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ rolle: gewaehlt, code: wert }),
|
||||
/* Ohne Kacheln geht ein leerer Rollenname mit. Der Server
|
||||
braucht ihn dort nicht: Er prueft den verborgenen Zugang
|
||||
VOR dem gewohnten Weg, und ein leerer Name faellt danach in
|
||||
dieselbe Antwort wie ein erfundener. */
|
||||
body: JSON.stringify({ rolle: gewaehlt || '', code: wert }),
|
||||
credentials: 'same-origin',
|
||||
});
|
||||
|
||||
|
||||
@@ -57,6 +57,42 @@
|
||||
for (const verweis of document.querySelectorAll('.kopfleiste .marke__text .zurueck')) {
|
||||
verweis.textContent = String(ich.marke).replace(/ /g, ' ');
|
||||
}
|
||||
|
||||
/* DER REITER UND DAS ZEICHEN GEHOEREN DAZU (10.09.2026).
|
||||
|
||||
Die Kopfleiste allein reicht nicht. In jeder Seite steht fest
|
||||
<title>Aufgaben · Spicy & Dogi</title> und daneben das Zeichen
|
||||
des Workspace -- beides sieht man als Erstes, im Browserreiter
|
||||
und, wenn die Seite als App laeuft, im Fensterrahmen und beim
|
||||
Umschalten zwischen Apps.
|
||||
|
||||
WARUM HIER UND NICHT IN 30 HTML-DATEIEN: Der Name kommt vom
|
||||
Server und haengt an der Person. Er kann also gar nicht fest im
|
||||
HTML stehen -- und 30 Dateien zu pflegen hiesse, die 31. zu
|
||||
vergessen.
|
||||
|
||||
Der Seitenname bleibt stehen, nur der Teil hinter dem Punkt
|
||||
wechselt. Auf der Startseite steht dort der Name des Bereichs
|
||||
selbst; dann bleibt nur die Marke uebrig, statt sie doppelt zu
|
||||
lesen. */
|
||||
const marke = String(ich.marke);
|
||||
const stueck = document.title.split(' · ');
|
||||
const seitenname = stueck.slice(0, -1).join(' · ').trim();
|
||||
document.title = (!seitenname || seitenname === 'Creator Workspace')
|
||||
? marke
|
||||
: `${seitenname} · ${marke}`;
|
||||
|
||||
/* Das Zeichen: derselbe Stempel, anderer Name. Ihn aus der
|
||||
vorhandenen Adresse zu ersetzen statt ihn neu zu bauen haelt
|
||||
die Versionsnummer daran -- sonst laedt der Browser ab hier ein
|
||||
Bild ohne Stempel und behaelt es ein Jahr. */
|
||||
for (const zeichen of document.querySelectorAll(
|
||||
'link[rel="icon"], link[rel="apple-touch-icon"]')) {
|
||||
const alt = zeichen.getAttribute('href') || '';
|
||||
if (alt.includes('/workspace-')) {
|
||||
zeichen.setAttribute('href', alt.replace('/workspace-', '/crew-'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Das eigene Bild, wenn es eines gibt -- sonst der Anfangsbuchstabe.
|
||||
@@ -134,7 +170,9 @@
|
||||
k.type = 'button';
|
||||
k.id = 'teilen';
|
||||
k.className = 'teilen';
|
||||
k.title = 'Adresse des Workspace weitergeben';
|
||||
/* Ohne den Namen des Workspace: Auf der zweiten Adresse heisst der
|
||||
Bereich anders, und "Adresse dieser Seite" stimmt ueberall. */
|
||||
k.title = 'Adresse dieser Seite weitergeben';
|
||||
|
||||
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
||||
svg.setAttribute('class', 'teilen__zeichen');
|
||||
@@ -161,9 +199,14 @@
|
||||
laeuft = true;
|
||||
try {
|
||||
if (kannTeilen) {
|
||||
/* Der Name kommt aus derselben Quelle wie die Kopfleiste.
|
||||
Steht dort nichts, bleibt es beim gewohnten Namen. */
|
||||
const wie = document.querySelector('.kopfleiste .marke__text .zurueck');
|
||||
const name = (wie?.textContent || '').replace(/ /g, ' ').trim()
|
||||
|| 'Creator Workspace';
|
||||
await navigator.share({
|
||||
title: 'Creator Workspace',
|
||||
text: 'Der Creator Workspace von DogFather Universe',
|
||||
title: name,
|
||||
text: `${name} · DogFather Universe`,
|
||||
url: ZIEL,
|
||||
});
|
||||
} else {
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
braucht. Die Zahlen darunter kann man sich ansehen; hier wartet
|
||||
jemand.
|
||||
|
||||
ZWEI ANTWORTEN, und beide kommen beim Modi an. Eine Meldung, auf
|
||||
ZWEI ANTWORTEN, und beide kommen bei ihm an. Eine Meldung, auf
|
||||
die nichts folgt, sieht fuer ihn aus wie eine, die niemand gelesen
|
||||
hat -- und beim dritten Mal meldet er nichts mehr.
|
||||
===================================================================== */
|
||||
|
||||