Handy durchgeprueft, Lichtfarbe je Kachel, haengendes Licht behoben
DAS LICHT BLIEB HAENGEN -- vier Ursachen, jede einzeln behoben:
1. EIN WETTLAUF. Zwischen dem Anmelden eines Bildaufbaus und seinem
Ablauf konnte der Zeiger die Karte laengst verlassen haben. Dann hatte
pointerout schon aufgeraeumt, und der Bildaufbau schaltete das Licht
gleich wieder AN. Der haeufigste Fall und der unauffaelligste.
2. UEBER EINE LUECKE VERLASSEN. Wer eine Karte nicht ueber eine
Nachbarkarte verliess, sondern ueber den Zwischenraum, loeste kein
Ereignis aus, das die alte Karte kannte.
3. GESCROLLT, OHNE DIE MAUS ZU BEWEGEN. Die Karte wandert unter dem
stehenden Zeiger weg -- es kommt gar kein Zeigerereignis. Jetzt wird
beim Scrollen nachgesehen, ob die beleuchtete Karte noch unter dem
Zeiger liegt.
4. FENSTER ODER TAB VERLASSEN. Auch dort kommt nichts mehr.
Es gibt jetzt genau EINE beleuchtete Karte -- mehr kann es nicht geben,
es gibt ja nur einen Zeiger. Beim Wechsel geht die alte aus, bevor die
neue angeht.
DIE FARBE GEHOERT ZUR KACHEL. Auf der Wissensseite leuchteten alle sechs
Welten violett, weil die Farbe dort --w heisst und der ganze uebrige
Workspace --ton benutzt. Das Licht griff auf --ton zu, fand nichts und
nahm den Farbton der SEITE. Dieselbe Luecke bei den Aufgaben-Spalten
(--sfarbe), den Kalenderkarten (--afarbe) und den Kalenderzeilen
(--zfarbe). Alle vier setzen jetzt --ton mit.
Nachgewiesen an echten Bildpunkten, nicht am Quelltext: Der Zeiger wird
auf die Aufgaben-Kachel gesetzt (dort muss Rot ueberwiegen: 85 zu 22)
und auf die Kalender-Kachel (dort Blau: 71 zu 13). Ein
Zeichenkettenvergleich haette das nicht gekonnt -- der Browser rechnet
color-mix() aus und schreibt je nach Fassung rgb(), color() oder oklab()
zurueck.
DAS HANDY, komplett durchgeprueft: neue pruef-handy.mjs faehrt alle
fuenfzehn Seiten auf DREI echten Geraetegroessen ab (320 px iPhone SE,
390 px iPhone, 412 px Android) und misst fuenf Dinge, die am Rechner
unsichtbar sind. Gefunden und behoben:
* ZWEI ECHTE UEBERLAEUFE (startcheck +27 px, automation +33 px). Die
Seite liess sich waagerecht schieben -- auf einem Telefon der
schlimmste Fehler. Ursachen: zwoelf Raster mit festem Mindestmass
(minmax(280px, 1fr) kann nicht schrumpfen -> min(280px, 100%)),
zwoelf feste Mindestbreiten an Auswahlfeldern, und ein "flex: none"
an den Stufen-Knoepfen, das jedes Schrumpfen verbot. "width: 100%"
allein reichte dort nicht.
* BERUEHRZIELE unter 24 px (WCAG 2.2, Kriterium 2.5.8). Auswahlfelder
waren 18 bis 22 px hoch. Jetzt 44 px -- die Empfehlung von Apple und
Google, und der Daumen ist nun einmal breiter als ein Mauszeiger.
Nebenbei behebt die Schriftgroesse 16 px das Hineinzoomen von iOS.
* SCHRIFT unter 11,7 px an 52 Stellen. Gesucht wurden sie nicht von
Hand -- das waere ein Ratespiel gewesen und haette die Haelfte
uebersehen -- sondern durch Durchsuchen der Stildateien nach
font-size unter 0,73rem.
ZWEI FEHLER IN DEN EIGENEN PRUEFUNGEN gefunden und behoben: Die
Schriftregel griff zuerst gar nicht (start.css wird VOR den Seitenstilen
geladen, bei gleicher Staerke gewinnt die spaetere -- jetzt mit
body.start qualifiziert), und die Lichtpruefung scrollte 600 px und
stellte nicht zurueck, sodass die folgende Pruefung ins Leere zeigte.
GEGENPROBE gemacht: Mit absichtlich eingebauten Fehlern (8-px-Schrift,
500 px breiter Inhalt) meldet die Handypruefung sofort Rot. Eine
Pruefung, die immer bestaetigt, bestaetigt nichts.
Alle achtzehn Pruefungen laufen gruen.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -511,7 +511,7 @@ body.start > main { position: relative; z-index: 1; }
|
||||
.zahlen {
|
||||
list-style: none; margin: 0; padding: 0;
|
||||
display: grid; gap: 10px;
|
||||
grid-template-columns: repeat(auto-fit, minmax(122px, 1fr));
|
||||
grid-template-columns: repeat(auto-fit, minmax(min(122px, 100%), 1fr));
|
||||
}
|
||||
|
||||
.zahl {
|
||||
@@ -1556,3 +1556,182 @@ body.start #protokoll {
|
||||
@media (forced-colors: active) {
|
||||
.licht { display: none; }
|
||||
}
|
||||
|
||||
/* =====================================================================
|
||||
HANDY — was die Geraetepruefung gefunden hat (01.09.2026)
|
||||
|
||||
Geprueft wurde auf 320, 390 und 412 px, auf allen fuenfzehn Seiten.
|
||||
Drei Arten von Fehlern kamen heraus, und alle drei sind am Rechner
|
||||
unsichtbar:
|
||||
|
||||
1. Raster, die nicht schrumpfen konnten. minmax(280px, 1fr) ist ein
|
||||
MINDESTmass -- passt es nicht, laeuft die Seite ueber statt
|
||||
umzubrechen. Behoben an zwoelf Stellen mit min(280px, 100%).
|
||||
2. Beruehrziele unter 24 px. Auswahlfelder waren 18 bis 22 px hoch;
|
||||
mit dem Daumen trifft man daneben. WCAG 2.2 nennt 24x24 als
|
||||
Mindestmass (Kriterium 2.5.8), und das ist knapp bemessen.
|
||||
3. Schrift unter 11,5 px. Auf einem Telefon ist das keine
|
||||
Beschriftung mehr, sondern ein Muster.
|
||||
===================================================================== */
|
||||
|
||||
@media (max-width: 760px) {
|
||||
/* --- Beruehrziele ---------------------------------------------------
|
||||
Auswahlfelder, Eingaben und kleine Knoepfe bekommen ein Mindestmass.
|
||||
44 px ist die Empfehlung von Apple und Google und deutlich ueber der
|
||||
Norm -- der Daumen ist nun einmal breiter als ein Mauszeiger. */
|
||||
select, input:not([type="checkbox"]):not([type="radio"]):not([type="file"]),
|
||||
textarea, button, .schritt, .knopf-still, .abmelden {
|
||||
min-height: 44px;
|
||||
}
|
||||
select, input:not([type="checkbox"]):not([type="radio"]):not([type="file"]) {
|
||||
/* 16 px verhindert nebenbei, dass iOS beim Antippen hineinzoomt --
|
||||
jeder kleinere Wert loest das aus, und danach steht die Seite
|
||||
schief. */
|
||||
font-size: 16px;
|
||||
padding: 10px 12px;
|
||||
}
|
||||
/* Kleine Umschalter dürfen niedriger sein, brauchen aber Breite. */
|
||||
.filterreihe__knopf, .k-chip, .k-ansicht, .marke-tag, .tag-knopf {
|
||||
min-height: 38px;
|
||||
}
|
||||
|
||||
/* --- Schriftgroessen ------------------------------------------------
|
||||
Alles unter 11,5 px hochgezogen. Die Rollenmarke in der Kopfleiste
|
||||
lag bei 10,56 px, die Bereichszeile bei 10,88 px, die Uhrzeiten im
|
||||
Kalender bei 9,6 px. */
|
||||
.wer__rolle, .kopf-zeile .marke, .willkommen .marke,
|
||||
.feldschild, .marke, .gruppe__unter, .kachel__unter {
|
||||
font-size: .75rem;
|
||||
}
|
||||
.k-pille, .k-anlass { font-size: .7rem; }
|
||||
.k-tag__heute, .k-anlasskarte__rest small,
|
||||
.k-anlasskarte__rest, .zahl__schild, .karte__zeile {
|
||||
font-size: .72rem;
|
||||
}
|
||||
small, .leise { font-size: .78rem; }
|
||||
|
||||
/* --- Kalenderpillen -------------------------------------------------
|
||||
Sie waren 15 px hoch -- als Ziel zu klein und als Text zu eng. Auf
|
||||
dem Handy bekommen sie Luft; dass dann weniger in eine Zelle passt,
|
||||
ist richtig so: Der volle Tag steht im Tagesdialog. */
|
||||
.k-pille, .k-anlass {
|
||||
min-height: 26px;
|
||||
display: flex; align-items: center;
|
||||
padding: 3px 6px;
|
||||
}
|
||||
.k-tag { min-height: 92px; }
|
||||
}
|
||||
|
||||
/* Auf sehr schmalen Geraeten (320 px, iPhone SE) wird zusaetzlich alles
|
||||
Mehrspaltige einspaltig. Zwei Spalten auf 288 px Inhaltsbreite sind
|
||||
keine zwei Spalten mehr, sondern zwei Streifen. */
|
||||
@media (max-width: 380px) {
|
||||
.neu__raster, .gruppe__raster, .zahlen, .kacheln,
|
||||
.feld-block__punkte, .zustand__daten, .ki-kasten__daten, .regeln {
|
||||
grid-template-columns: 1fr !important;
|
||||
}
|
||||
.inhalt { padding-left: 13px; padding-right: 13px; }
|
||||
.kopfleiste { padding-left: 13px; padding-right: 13px; }
|
||||
}
|
||||
|
||||
/* --- Feste Mindestbreiten aufheben -----------------------------------
|
||||
Zwoelf Stellen im Stil setzen eine feste Mindestbreite (Auswahlfelder
|
||||
170 bis 240 px, Beschriftungsspalten 74 bis 128 px). Am Rechner ist
|
||||
das richtig -- ein Auswahlfeld, das mit seinem Inhalt schrumpft,
|
||||
springt bei jeder Aenderung in der Breite.
|
||||
|
||||
Auf einem 320-px-Geraet bleiben nach Polsterung 294 px uebrig. Ein
|
||||
Feld mit 240 px Mindestbreite plus Beschriftung passt da nicht mehr,
|
||||
und die Seite laesst sich waagerecht schieben. Genau das waren die
|
||||
letzten 24 und 30 px auf startcheck.html und automation.html.
|
||||
|
||||
Auf dem Handy nehmen die Felder deshalb die volle Breite -- was
|
||||
ohnehin die bessere Bedienung ist. */
|
||||
@media (max-width: 760px) {
|
||||
.steuerung select, .steuerung input,
|
||||
.wahl2, .wahl2 select,
|
||||
.betreuung__wahl, .filterreihe select, .kopf-knoepfe select,
|
||||
select, input[type="search"], input[type="text"] {
|
||||
min-width: 0;
|
||||
max-width: 100%;
|
||||
}
|
||||
.steuerung, .kopf-zeile, .kopf-knoepfe { flex-wrap: wrap; }
|
||||
.steuerung > *, .kopf-knoepfe > * { min-width: 0; }
|
||||
|
||||
/* Beschriftungsspalten in Datenlisten: nebeneinander wird zu
|
||||
untereinander. 128 px Beschriftung plus Wert gehen auf 294 px nicht
|
||||
mehr nebeneinander, ohne dass eines von beiden abbricht. */
|
||||
.ki-kasten__schild, .zustand__daten .ki-kasten__schild {
|
||||
min-width: 0;
|
||||
}
|
||||
.ki-kasten__daten li, .zustand__daten li {
|
||||
flex-direction: column; gap: 2px;
|
||||
}
|
||||
|
||||
/* Alles im Inhalt bleibt in seinem Kasten. Die Zeile ist die letzte
|
||||
Sicherung: Sie faengt auch das ab, was kuenftig dazukommt, ohne dass
|
||||
jemand daran denkt. */
|
||||
.inhalt img, .inhalt table, .inhalt pre, .inhalt input,
|
||||
.inhalt select, .inhalt textarea { max-width: 100%; }
|
||||
}
|
||||
|
||||
|
||||
/* --- Mindestschriftgroesse auf dem Handy -----------------------------
|
||||
|
||||
Achtundvierzig Regeln im Stil setzen eine Schrift unter 11,7 px --
|
||||
Marken, Zaehler, Uhrzeiten, Spaltenkoepfe. Am Rechner ist das
|
||||
angenehm: kleine Beschriftungen treten zurueck und lassen dem Inhalt
|
||||
den Vortritt.
|
||||
|
||||
Auf einem Telefon ist dieselbe Groesse kein Text mehr, sondern ein
|
||||
Muster. Die Geraetepruefung hat sie einzeln aufgelistet -- 9,6 px bei
|
||||
den Uhrzeiten im Kalender, 10,56 px bei der Rollenmarke.
|
||||
|
||||
Gesucht wurden sie nicht von Hand (das waere ein Ratespiel gewesen
|
||||
und haette die Haelfte uebersehen), sondern durch Durchsuchen der
|
||||
Stildateien nach font-size unter 0,73rem. Alle Fundstellen stehen
|
||||
hier und werden auf 0,75rem = 12 px angehoben.
|
||||
|
||||
Wer kuenftig eine neue kleine Marke baut, faellt der Handypruefung
|
||||
auf und landet ebenfalls hier.
|
||||
|
||||
JEDER Selektor traegt body.start davor. Ohne das griff die Regel
|
||||
nicht: start.css wird VOR den Seitenstilen geladen, und bei gleicher
|
||||
Staerke gewinnt die spaetere Regel -- kalender.css setzte die Pille
|
||||
also weiterhin auf 0,6rem. Der erste Anlauf sah im Quelltext richtig
|
||||
aus und aenderte nichts. */
|
||||
@media (max-width: 760px) {
|
||||
body.start .balance__zahl, body.start .betreuung__schild, body.start .datei__schild,
|
||||
body.start .filtergruppe__schild, body.start .fortschritt__schild, body.start .fortschritt__warn,
|
||||
body.start .gruppe__zahl, body.start .k-anlass, body.start .k-anlasskarte__rest,
|
||||
body.start .k-anlasskarte__rest small, body.start .k-kw, body.start .k-listentag__kw,
|
||||
body.start .k-listentag__marke, body.start .k-pille, body.start .k-spaltenkopf,
|
||||
body.start .k-strahl__kw, body.start .k-tag__heute, body.start .k-tag__monat,
|
||||
body.start .k-wochentag__name, body.start .k-zeile__art, body.start .kachel__name,
|
||||
body.start .karte__zeile, body.start .katwahl__weltname, body.start .ki-kasten__schild,
|
||||
body.start .kk__schild, body.start .kopfleiste .marke, body.start .marke,
|
||||
body.start .marke-art, body.start .marke-fehlt, body.start .marke-fertig,
|
||||
body.start .marke-geraet, body.start .marke-neu, body.start .marke-punkt,
|
||||
body.start .marke-rolle, body.start .marke-saeule, body.start .marke-status,
|
||||
body.start .marke-still, body.start .marke-stufe, body.start .marke-tag,
|
||||
body.start .marke-wichtig, body.start .naechstes__schild, body.start .rueck__wann,
|
||||
body.start .spalte__zahl, body.start .suche-gruppe__titel, body.start .summe__name,
|
||||
body.start .tu-knopf, body.start .wahl2__gruppe, body.start .wahl__rolle,
|
||||
body.start .wer__rolle, body.start .wert__name, body.start .willkommen__marker,
|
||||
body.start .zahl__schild
|
||||
{
|
||||
font-size: .75rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* Der Verweis auf den naechsten Termin im Dashboard war 24 px hoch --
|
||||
genau an der Grenze und damit darunter, sobald der Browser rundet.
|
||||
Ein Ziel, das man mit dem Daumen nur knapp trifft, ist kein Ziel. */
|
||||
@media (max-width: 760px) {
|
||||
body.start .naechstes__wert,
|
||||
body.start a.naechstes__wert {
|
||||
display: inline-flex; align-items: center;
|
||||
min-height: 32px;
|
||||
padding: 4px 2px;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user