frontend: Fokusmarke bekommt einen eigenen Strahlenkranz in Petrol

Der mit der Cursor-Zeile geteilte Ring war zu leise — „das erkennt man zu wenig"
(Nutzer). Damit fällt auch die in D32 als Preis notierte Zweideutigkeit weg: Sie
war das Zugeständnis für die Sparsamkeit, und wenn die Sparsamkeit nicht
funktioniert, ist das Zugeständnis nicht mehr zu rechtfertigen.

Gebaut wie der gelbe Kranz aus D28 (Schein nach außen, Füllung bleibt dem
Status, kein Blinken, `z-index:2` gegen das Abschneiden durch später gemalte
Geschwister) — aber in PETROL, nicht in Gelb. Die Frage stand ausdrücklich im
Raum; die Antwort ist nein, weil die beiden Verschiedenes bedeuten und
gleichzeitig auftreten: Gelb ist eine stehende Tatsache über den Plan („seit
deinem letzten Besuch live gegangen"), Petrol ein Zuruf („schau jetzt hierhin").
Im Pad-Betrieb ist die Kombination der Normalfall — man zeigt auf das, was sich
geändert hat. Wären beide gelb, könnte ein Knoten nicht beides sagen.

Der Schein ist helles Teal (#14B8A6), der Ring dunkles Petrol. Die erste Fassung
nahm für beides `--or` und wirkte trotz identischer Geometrie leiser als das
Gelb. Der Grund ist nicht Geschmack: Ein dunkler Schein auf weißem Grund liest
sich als Schatten, ein heller als Licht.

Gegen die Stationspunkte des günstigsten Pfads (D18) geprüft statt angenommen —
zwei Marken gezielt auf Pfad-Endknoten (mit Punkt), eine daneben (ohne): Der
Kranz sitzt eng am Knoten und hat einen harten Ring, der Stationspunkt ist ein
großer blasser Fleck ohne Rand. Verwechseln kann man das nicht.

Kombinationen ausbuchstabiert, weil sie real vorkommen: `focusmark.current`
(Tinte innen, Teal außen) und `fresh.focusmark` (Petrol-Ring innen, Gelb außen —
zwei Scheine nach außen gehen nicht). Letztere steht nach der ersten: gleiche
Spezifität, und bei allen drei sollen Zuruf und Neuheit gewinnen.

SPEC §9 und D32 nachgezogen.
This commit is contained in:
mhoennig
2026-07-30 13:51:36 +02:00
parent 1a82771239
commit 953277ab83
4 changed files with 88 additions and 12 deletions
+7 -2
View File
@@ -177,8 +177,13 @@ verworfene Elemente. Quelle sind ES-Module unter `src/`; `index.html` ist der
Schreibmarke im Pad. **Umhängen im DOM lädt jeden `<iframe>` neu** — wer
Container um `#srcArea` herum neu aufbaut, wirft die Pad-Sitzung weg.
- Fokusmarke `!!!` (D32, SPEC §1): Parser setzt `focus`, Renderer die Klasse
`focusmark`, CSS teilt die Regel mit `.node.current` (ein Begriff „hier
schauen"). Erkannt **nur alleinstehend**`(^|\s)!!!(?=\s|$)`, bewusst ohne
`focusmark`, CSS gibt ihr einen **eigenen Strahlenkranz in Petrol** (Nachtrag zu
D32; der geteilte Ring mit `.current` war zu leise). Schein in **hellem** Teal
`#14B8A6`, Ring in dunklem `--or`: ein dunkler Schein auf Weiß liest sich als
Schatten, ein heller als Licht. Wie bei `.fresh` braucht die Regel `z-index:2`,
sonst schneidet ein später gemaltes Geschwister den Kranz ab (D28). Die
Kombinationen `focusmark.current` und `fresh.focusmark` sind ausbuchstabiert;
letztere steht bewusst **danach** (gleiche Spezifität). Erkannt **nur alleinstehend**`(^|\s)!!!(?=\s|$)`, bewusst ohne
Lookbehind (Safari erst ab 16.4), sonst verlöre `Achtung!!!` seine
Ausrufezeichen. Extraktion **nach** den Tags; der Kommentar fällt vorher weg,
eine Marke hinter `%%` wirkt also nicht. `revealFocusMark()` scrollt **nur bei
+24 -2
View File
@@ -536,8 +536,24 @@
nur einen Begriff „hier schauen", und ein dritter Ring neben Fokusring,
Strahlenkranz und Cursor-Ring wäre ein Zeichen zu viel. Der Unterschied
steht im `aria-label`. */
#out .node.current,
#out .node.focusmark{box-shadow:0 0 0 2px var(--card),0 0 0 4px var(--ink)}
#out .node.current{box-shadow:0 0 0 2px var(--card),0 0 0 4px var(--ink)}
/* Fokusmarke `!!!` (SPEC §1, D32): **Strahlenkranz in Petrol**, nach dem Muster
der Neuheiten-Markierung (D28), nur in der Akzentfarbe der App statt in Gelb.
Der geteilte Ring mit der Cursor-Zeile war zu leise — „das erkennt man zu
wenig" (Nutzer) —, und ein Ring allein wächst beim Zoomen nicht mit dem
Blickbedürfnis. Der Kranz löst zugleich die in D32 hingenommene Schwäche:
Cursor-Zeile (Tinte, innen) und fremde Marke (Petrol, außen) sind jetzt
unterscheidbar. Kein Blinken (WCAG 2.2.2/2.3.1, vgl. D28), und `z-index`,
weil der Schein AUSSERHALB der Knotenbox liegt — ohne ihn malt jedes später
kommende Geschwister seinen Hintergrund darüber und schneidet ihn ab. */
/* Der Schein ist **helles** Teal (#14B8A6), nicht das dunkle Petrol des Rings:
Ein dunkler Schein auf weißem Grund liest sich als Schatten, ein heller als
Licht — deshalb wirkte die erste Fassung leiser als der gelbe Kranz aus D28,
obwohl die Geometrie dieselbe war. Der Ring bleibt dunkles Petrol und ordnet
die Marke der Akzentfarbe zu; das Leuchten macht die Reichweite. */
#out .node.focusmark{box-shadow:0 0 0 3px var(--or),0 0 20px 7px rgba(20,184,166,.85);z-index:2}
/* Beides zugleich: Cursor-Zeile innen (Tinte), fremde Marke außen (Petrol). */
#out .node.focusmark.current{box-shadow:0 0 0 2px var(--card),0 0 0 4px var(--ink),0 0 20px 7px rgba(20,184,166,.85)}
/* Neu in Produktion seit dem letzten Besuch (D28): gelber Strahlenkranz um den
Knoten. Bewusst ein Schein nach AUSSEN statt Farbe im Knoten — die Füllung
gehört dem Status (SPEC §4) und bleibt lesbar. Kein Blinken: WCAG 2.2.2/2.3.1
@@ -549,6 +565,12 @@
#out .node.fresh{box-shadow:0 0 0 2px #FACC15,0 0 16px 5px rgba(234,179,8,.65);z-index:2}
/* Beides zugleich: Cursor-Zeile innen (Tinte), Neuheit außen (gelb). */
#out .node.fresh.current{box-shadow:0 0 0 2px var(--card),0 0 0 4px var(--ink),0 0 18px 6px rgba(234,179,8,.65)}
/* Neu in Produktion UND jemand zeigt darauf: Ring in Petrol (der bewusste
Zuruf, innen), Kranz in Gelb (die stehende Nachricht, außen). Zwei Scheine
nach außen gingen nicht — einer muss der Ring sein. Steht bewusst **nach**
`.node.focusmark.current`: gleiche Spezifität (drei Klassen), und wenn alles
drei zutrifft, soll Zuruf + Neuheit gewinnen, nicht die eigene Cursor-Zeile. */
#out .node.fresh.focusmark{box-shadow:0 0 0 3px var(--or),0 0 20px 7px rgba(234,179,8,.65);z-index:2}
/* Alt gedrückt = Sprung-Geste scharf: Cursor an allen Knoten, Petrol-Ring am
Knoten unter dem Zeiger. Auf verlinkten Knoten ist das die einzige
Rückmeldung, weil dort der einfache Klick dem Link gehört (D25). */