Die Schriftleiste klappt hinter einen Knopf -- 73 px weniger Konsole auf dem Handy

Filipe: "die sachen von screen3 verbinde die mit dem auf screen4. so
dass wenn man drauf drueckt man die anderen zu sehen bekommt. damit es
nicht zu viel platz nimmt. und dan screen5, passe die reihenfolge der
sachen danach an und dan perfektionierst du das alles auf dem handy
auch bitte."

F, K, U und S standen als EIGENE ZEILE ueber dem Schreibfeld --
dauerhaft, auf jedem Geraet. Gemessen auf 390 px: Die Konsole brauchte
dafuer drei Reihen statt zwei. Nachgemessen ist es jetzt genau
73 px Hoehe, jeden Tag, fuer vier Zeichen, die man in den seltensten
Nachrichten braucht.

DER KNOPF HEISST "Aa" UND STEHT ALS LETZTES WERKZEUG, direkt vor dem
Schreibfeld -- das ist die neue Reihenfolge, um die Filipe gebeten hat:
Bueroklammer, Mikrofon, GIF und Emoji fuegen etwas EIN; das hier
veraendert, was schon dasteht. Die Reihe geht damit von "dazu" nach
"daran", und das Letzte liegt dem Text am naechsten.

"Aa" und kein Symbol: Ein Stift heisst "bearbeiten", ein Pinsel
"malen". Fuer Fett und Kursiv gibt es seit jeher genau ein Zeichen, das
jeder liest, ohne es zu lernen.

AUF DEM HANDY IST DAS DER GANZE PUNKT: Statt drei Reihen (Zeichen /
Werkzeuge / Feld+Senden) sind es zwei. Der Aa-Knopf faellt dabei nicht
ins Gewicht, weil er IN der Werkzeuggruppe sitzt -- die bricht als
Block um, und ein Knopf mehr laesst das Schreibfeld nicht schrumpfen.
Das ist dieselbe Ueberlegung, die die Gruppe am 23.09. ueberhaupt
entstehen liess.

DIE WAHL WIRD GEMERKT. Wer viel gestaltet, gestaltet weiter -- die
Leiste bleibt dann auch nach dem Neuladen offen. Die TASTENKUERZEL
laufen unabhaengig davon: Strg+B und Strg+I haengen am Schreibfeld,
nicht an der Leiste. Zugeklappt wird sie versteckt, nicht abgebaut.

ZWEI SACHEN AN DEN PRUEFUNGEN, und die erste ist ein Fund:

  pruef-chat-optik verlangte "die vier Werkzeuge stehen in einer
  Gruppe" -- mit einer festen 4. Diese Zahl war vom ersten Tag an eine
  Rechnung von gestern: Kommt ein Werkzeug dazu, wird die Zeile rot,
  obwohl nichts kaputt ist, und wer sie dann auf 5 setzt, macht
  denselben Fehler mit einer anderen Zahl. Dieses Haus ist an festen
  Zahlen schon dreimal hereingefallen (Kopfleiste 06.09.,
  Schriftgroessen 14.09., Tippziele 20.09.). Gefragt wird jetzt, was
  gemeint ist: Liegt KEINES der Werkzeuge ausserhalb der Gruppe? Das
  misst, statt zu rechnen -- und der naechste Knopf bringt es nicht zu
  Fall. Die Anzahl steht trotzdem in der Bedingung, sonst waeren
  "0 von 0" gruen.

  Die Gegenprobe wollte im ersten Anlauf Strg+B tippen. Das lief in
  eine Zeitbombe: Der Treff hat eine Nachtruhe, und zwischen 22 und
  6 Uhr ist das Schreibfeld `disabled` -- die Pruefung waere sechs
  Stunden am Tag rot gewesen, ohne dass an der Sache etwas ist. Genau
  die Sorte Fehlalarm, die am 06.09.2026 schon einmal notiert wurde.
  Gemessen wird jetzt die Sache selbst: Die vier Knoepfe sind weiterhin
  im Dokument und haben nur keine Flaeche mehr.

pruef-tippziele meldete sofort "1 ungedeckt: .chat__schriftknopf
(40h 40w)" -- am Daumen fehlten vier Pixel. Nachgezogen, wie bei den
vier Werkzeugen daneben.

Geprueft: pruef-chat-optik (mit 6 neuen Punkten, alle gruen),
pruef-tippziele (11), pruef-css-klassen, pruef-chat-ausbau (64).

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-25 03:39:04 +02:00
co-authored by Claude Opus 5
parent 8bf2f440d0
commit e5e5953c43
44 changed files with 885 additions and 634 deletions
+64 -1
View File
@@ -2360,6 +2360,55 @@
background: color-mix(in srgb, var(--akzent) 14%, transparent);
}
/* ==== DER SCHRIFTKNOPF (25.09.2026) ================================
Er sieht aus wie die vier Werkzeuge daneben -- es ist dieselbe Sorte
Handgriff, und eine eigene Gestalt waere ein fuenftes Muster in
einer Reihe von vier.
IST DIE LEISTE OFFEN, TRAEGT ER DIE AKZENTFARBE. Das ist der
Unterschied zu „gedrueckt" bei den anderen: GIF und Emoji machen
eine Tafel auf, die man sieht; diese Leiste steht darueber und ist
leicht zu uebersehen. Der Knopf sagt deshalb dauerhaft, in welchem
Zustand er ist.
`Aa` IST TEXT UND KEIN BILD, deshalb hier eine Schriftgroesse statt
einer Maske -- gross genug, um als Buchstabenpaar gelesen zu werden,
und fett, damit es neben den Strichzeichnungen daneben nicht
verschwindet. */
.chat__schriftknopf {
flex: none;
width: 40px; height: 40px;
display: flex; align-items: center; justify-content: center;
appearance: none;
border: 1px solid rgba(150, 186, 220, .18);
border-radius: 12px;
background: rgba(255, 255, 255, .04);
color: var(--text-leise);
font: inherit; font-size: .95rem; font-weight: 700;
letter-spacing: -.02em;
cursor: pointer;
transition: color .16s ease, border-color .16s ease, background-color .16s ease;
}
.chat__schriftknopf:hover { color: var(--text); border-color: rgba(150, 186, 220, .34); }
.chat__schriftknopf:focus-visible { outline: 2px solid var(--akzent); outline-offset: 2px; }
.chat__schriftknopf[aria-expanded="true"] {
color: color-mix(in srgb, var(--akzent) 25%, #ffffff);
border-color: color-mix(in srgb, var(--akzent) 55%, transparent);
background: color-mix(in srgb, var(--akzent) 16%, transparent);
}
/* ZU HEISST WEG, nicht „unsichtbar an derselben Stelle". `display:
none` nimmt der Leiste auch ihren Platz -- genau darum geht es.
AM FORMULAR UND NICHT AN DER LEISTE SELBST: Die Leiste entsteht
erst, wenn ein Gespraech aufgeht (textform.js haengt sie dann ein).
Ein Merkmal an etwas, das es noch nicht gibt, kann man nicht setzen;
das Formular steht immer da. */
.chat__eingabe[data-schrift="zu"] .textform { display: none; }
@media (prefers-reduced-motion: reduce) {
.chat__schriftknopf { transition: none; }
}
/* ---- Emoji ---------------------------------------------------------- */
.chat__emoji {
flex: none;
@@ -3906,6 +3955,12 @@
braucht es hier keine Abwaegung: volle Hausgroesse. */
.tonleiste__weg,
.tonleiste__senden { min-width: 44px; min-height: 44px; }
/* DER SCHRIFTKNOPF AM FINGER (25.09.2026). 40x40 ist mit der Maus
bequem; am Daumen sind es vier Pixel zu wenig, und pruef-tippziele
hat es sofort gemeldet -- „1 ungedeckt: .chat__schriftknopf
(40h 40w)". Dieselbe Abwaegung wie bei den vier Werkzeugen daneben,
die dort schon so stehen. */
.chat__schriftknopf { min-width: 44px; min-height: 44px; }
/* UNSICHTBAR GROESSER, SICHTBAR KLEIN.
Die Abwaegung beim Knopf selbst stimmt: 44 px sichtbar wuerden die
@@ -4957,10 +5012,18 @@
border-color: transparent;
color: #07060f;
}
.inhalt.chat-seite .chat__eingabe :is(.chat__anhang, .chat__ton, .chat__gif, .chat__emoji) {
.inhalt.chat-seite .chat__eingabe
:is(.chat__anhang, .chat__ton, .chat__gif, .chat__emoji, .chat__schriftknopf) {
border-radius: 14px;
border-color: rgba(255, 255, 255, .05);
}
/* Offen traegt er die Leitfarbe der Seite -- dieselbe wie der
Absendeknopf, nur leiser. */
.inhalt.chat-seite .chat__schriftknopf[aria-expanded="true"] {
border-color: color-mix(in srgb, var(--akzent) 50%, transparent);
background: color-mix(in srgb, var(--akzent) 18%, transparent);
color: color-mix(in srgb, var(--akzent) 30%, #ffffff);
}
.inhalt.chat-seite .chat__eingabe .textform__knopf { border-radius: 12px; }
/* ---- 11. DIE KNOPFGRUPPE IM KOPF ----------------------------------- */
+47 -1
View File
@@ -637,6 +637,44 @@
gibt es keine Nachtruhe, dort arbeiten Leute nachts. */
const NACHTRUHE_VORWARNUNG = 15; // Minuten
/* ==== DIE SCHRIFTLEISTE KLAPPT AUF UND ZU (25.09.2026) ==========
Filipe: „damit es nicht zu viel platz nimmt."
SIE IST ZU, BIS JEMAND SIE AUFMACHT. Die vier Zeichen braucht man
in den seltensten Nachrichten; eine Zeile, die immer dasteht, um
selten etwas zu koennen, ist die teuerste Art von Platz.
DIE WAHL WIRD GEMERKT -- wer viel gestaltet, gestaltet meist
weiter. `try` um den Speicher, weil localStorage in einem privaten
Fenster wirft; ohne den Fang bliebe die Leiste dort fuer immer zu,
und der Knopf sähe kaputt aus.
DIE TASTENKUERZEL BLEIBEN IMMER AKTIV. Strg+B und Strg+I haengen
am Schreibfeld, nicht an der Leiste (textform.js) -- wer sie
kennt, braucht den Knopf gar nicht. Eine zugeklappte Leiste nimmt
also nichts weg, sie zeigt nur weniger. */
let schriftAuf = (() => {
try { return localStorage.getItem('chat-schrift') === 'auf'; } catch { return false; }
})();
function schriftLeisteZeigen() {
const form = $('schreiben');
const knopf = $('schrift-auf');
if (form) form.dataset.schrift = schriftAuf ? 'auf' : 'zu';
if (knopf) knopf.setAttribute('aria-expanded', String(schriftAuf));
}
$('schrift-auf')?.addEventListener('click', () => {
schriftAuf = !schriftAuf;
try { localStorage.setItem('chat-schrift', schriftAuf ? 'auf' : 'zu'); } catch { /* egal */ }
schriftLeisteZeigen();
/* ZURUECK INS FELD. Wer die Leiste aufmacht, will gleich darauf
tippen oder schreiben -- ohne diese Zeile steht der Fokus auf
einem Knopf, und die naechste Taste macht nichts. */
if (schriftAuf) $('text')?.focus();
});
function nachtruheZeigen() {
const band = $('nachtruhe');
const feld = $('text');
@@ -1371,7 +1409,15 @@
versteckten Feld baut man zweimal, wenn man nicht aufpasst.
`Textform.leiste` merkt sich am Feld selbst, dass sie schon
da ist -- zweimal aufrufen schadet also nichts. */
if (window.Textform) window.Textform.leiste($('text'));
if (window.Textform) {
const leiste = window.Textform.leiste($('text'));
/* DIE LEISTE BEKOMMT IHRE KENNUNG, damit der Knopf daneben
`aria-controls` auf etwas zeigen kann, das es wirklich gibt.
Sie entsteht erst beim Oeffnen eines Raumes -- deshalb hier
und nicht im HTML. */
if (leiste) leiste.id = 'schrift-leiste';
schriftLeisteZeigen();
}
/* JEDES MAL BEIM OEFFNEN. Der Stand haengt am RAUM (nur der Treff
hat eine Nachtruhe) -- wer aus einem Teamraum in den Treff
wechselt, muss das Band sehen, ohne die Seite neu zu laden. */