Eine Designschicht statt hundertfach gesetzter Zahlen

Token für Schrift, Symbolgröße, Abstand, Radius und Bewegung, dazu sieben
Bauteile, die vorher in jeder Kachel neu gebaut wurden — Karte, Abschnittstitel,
Hinweis, Pillenknopf, Regler, Ablegefläche, Haarlinie.

Symbole bekommen eine **eigene** Staffel und nicht die der Schrift: ein
9-Punkt-Symbol neben 9-Punkt-Text wirkt kleiner, nicht gleich groß. Beide in
eine Staffel zu zwingen hieße, an jeder Stelle gegen sie zu arbeiten.

Das Flächenrezept — Tint, Bänderung, Kante — stand zweimal da, einmal für das
Panel und einmal für Fenster. Es ist jetzt `OnyxStone`, generisch über die Form,
damit auch die animierende Notch-Silhouette es benutzen kann.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-05 21:04:51 +02:00
co-authored by Claude Opus 5
parent 49a3ff0548
commit ecb39fbe5f
11 changed files with 1195 additions and 184 deletions
@@ -74,3 +74,30 @@ struct ColourHexTests {
#expect(Color(onyxHex: "#GGGGGG") == nil)
}
}
@Suite("Farben, die sich nicht gleichen dürfen")
@MainActor
struct ColourCollisionTests {
/// Beide waren zeichengleich `#6FCF97`. Damit hieß derselbe grüne Balken im
/// Netzwerk „lädt herunter" und in den Messwerten „alles in Ordnung" — und
/// wer beides nebeneinander sieht, liest eine Aussage, die niemand gemeint
/// hat.
@Test("Herunterladen ist nicht die Signalfarbe für „in Ordnung“")
func downloadIsNotThePositiveSignal() {
#expect(OnyxTheme.defaultDownload.onyxHex != Onyx.Color.positive.onyxHex)
}
@Test("Herunter und Hoch sind auch untereinander unterscheidbar")
func directionsDifferFromEachOther() {
#expect(OnyxTheme.defaultDownload.onyxHex != OnyxTheme.defaultUpload.onyxHex)
}
/// Die drei Signalfarben tragen die Bedeutung. Fielen zwei davon zusammen,
/// wäre eine Warnung von einem Fehler nicht mehr zu unterscheiden.
@Test("Die Signalfarben sind paarweise verschieden")
func signalColoursAreDistinct() {
let signals = [Onyx.Color.positive, Onyx.Color.warning, Onyx.Color.critical]
#expect(Set(signals.map(\.onyxHex)).count == signals.count)
}
}