Designsystem · v1.0

Das Kashew-
Designsystem.

Die visuelle Sprache hinter Kashew — einer nativen iOS-Finanz-App für junge Erwachsene. Zurückhaltung statt Dekoration, Grautöne statt Farbe, ein warmer Akzent. Jedes Token hier ist eins zu eins auf SwiftUI und Figma abgebildet.

SwiftUI-nativApple HIGHell + DunkelFigma-Variablen
01 — Grundlagen

Das Zeichen

Das Kashew-Zeichen ist ein abstraktes K aus zwei blattartigen Strichen — ein leiser Hinweis auf Wachstum. Es ist die primäre Identität: selbstbewusst für sich allein, nie überladen.

Zeichen auf Neutral · auf Ink · auf Gold. Das App-Icon kombiniert das goldene Zeichen auf dem Ink-Hintergrund (oder umgekehrt).

Schutzraum & Größen

Halte auf allen Seiten einen Schutzraum in Breite eines Strichs (≈ 25 % der Zeichenhöhe) frei. Mindestgrößen: 20pt in einer Tab-Bar, 17pt inline, 1024px für das App-Store-Icon. Das Zeichen skaliert immer kontinuierlich, nie stufenweise.

Wortmarke

Der geschriebene Name „Kashew“ wird in Bricolage Grotesque gesetzt — reserviert für Marketingflächen, Landing-Header und den Splash. Er wird nicht für UI-Text in der App verwendet.

Kashew
Richtig
Halte das Zeichen einfarbig — Ink, Weiß oder Gold. Gib ihm Raum. Lass es ruhig wirken.
Falsch
Mit Verläufen einfärben, Schatten hinzufügen, drehen, verzerren oder das goldene Zeichen auf helle Hintergründe setzen, wo es an Kontrast verliert.
02 — Farbe

Überwiegend grau, bewusst gold

Kashew ist ein Graustufensystem mit einem einzigen warmen Akzent. Grautöne tragen Struktur und Hierarchie; Gold erscheint nur dort, wo Aufmerksamkeit verdient ist — eine primäre Aktion, ein ausgewählter Zustand, ein positiver Moment. Farbe ist nie Dekoration.

Markenkern

Kashew Gold
#FFD379 · accent
Kashew Ink
#212021 · grey-900

Neutrale Skala

50
100
200
300
400
500
600
700
800
900
950

Eine nahezu neutrale, leicht warme Grauskala. grey-900 ist das Marken-Ink; alles in der UI ist aus diesen elf Stufen gebaut.

Semantische Tokens

Auf Apples Rollen abgebildet (systemBackground, label, separator, fill …). Verweise im Code immer auf das semantische Token — nie auf die rohe Skala.

Token
Light
Dark
bg/primary
#FFFFFF
#161515
bg/secondary
#F7F7F5
#212021
bg/tertiary
#EFEEEC
#2D2C2B
surface
#FFFFFF
#212021
surface/raised
#FFFFFF
#2D2C2B
label/primary
#212021
#F7F7F5
label/secondary
#61605C
#A6A5A0
label/tertiary
#A6A5A0
#6E6D68
separator
#DEDDDA
#322F2F
accent
#FFD379
#FFD379
on-accent
#212021
#212021

Die Gold-Regel

Gold ist eine Fläche, keine Textfarbe.

#FFD379 ist hell — es besteht den Kontrast nur gegen Ink, nicht gegen Weiß. Nutze es als Hintergrund mit Ink-Text darauf (primäre Buttons, Badges) oder als Akzent auf dunklen Flächen. Nutze Gold nie für Fließtext, Links oder kleine Icons auf hellen Hintergründen.

AAA 11.5:1Ink auf Goldprimärer Button · richtig
FAIL 1.4:1Gold auf Weißunlesbar · vermeiden

Funktionale Akzente (sparsam eingesetzt)

+ Einnahme
Positiv
L #2F8F5B / D #4FBE86
! Warnung
Kritisch
L #C0473B / D #E0796D

Farbe ist Verstärkung, nie das einzige Signal — kombiniere sie mit einem Icon, Vorzeichen oder Label, damit die Bedeutung auch bei Farbenblindheit und in Graustufen erhalten bleibt.

03 — Typografie

Zwei Stimmen: Wörter & Zahlen

Drei Schriften, drei Aufgaben. Bricolage Grotesque spricht die Marke. SF Pro trägt jedes Wort im Produkt. Eine Monospace-Schrift gehört den Zahlen, damit Geld immer bündig steht.

Display · nur MarkeBricolage Grotesque — Wortmarke, Marketing
Kashew
Text · gesamte Produkt-UISF Pro (System) · Dynamic Type · –0,01em
Deine Ausgaben diese Woche sind entspannt. Geld bewegen, eine Rechnung teilen, ein wenig zurücklegen.
Zahlen · BeträgeSF Mono · Tabellenziffern · .monospacedDigit()
€ 4,820.17

Empfehlung für die Textschrift

SF Pro — sie ist kostenlos, ist auf jedem Gerät dabei, unterstützt Dynamic Type und Barrierefreiheitsgrößen von Haus aus und ist die bestmögliche HIG-Abstimmung. Wenn du später plattformübergreifende Markenparität willst (Web + Android), ist Inter der nächste Verwandte. Für Zahlen ist SF Mono die native Wahl; Geist Mono oder JetBrains Mono sind wärmere zeitgenössische Alternativen. Nicht verhandelbar sind Tabellenziffern — siehe unten.

Die Kandidaten im Vergleich

Text — eine Schrift für die gesamte Produkt-UI.

SF ProEmpfohlen · Nativ
Geld ruhig bewegen
Deine Ausgaben diese Woche sind entspannt. Teile eine Rechnung, leg ein wenig zurück und behalte den kommenden Monat im Blick.
AaBbGg 0123456789 €£$ & @ ?!
InterAlternative · Webfont
Geld ruhig bewegen
Deine Ausgaben diese Woche sind entspannt. Teile eine Rechnung, leg ein wenig zurück und behalte den kommenden Monat im Blick.
AaBbGg 0123456789 €£$ & @ ?!

Zahlen — eine Schrift für Geldbeträge (alle drei unterstützen Tabellenziffern).

SF MonoNativ
€ 4,820.17
0123456789
+ 2,400.00   − 42.18
Geist MonoWebfont
€ 4,820.17
0123456789
+ 2,400.00   − 42.18
JetBrains MonoWebfont
€ 4,820.17
0123456789
+ 2,400.00   − 42.18

SF Pro und SF Mono sind Apple-Systemschriften — sie werden auf Apple-Hardware originalgetreu dargestellt und greifen anderswo auf eine Systemschrift zurück. Inter, Geist Mono und JetBrains Mono werden als Webfonts geladen und sehen daher auf jedem Gerät identisch aus.

Warum eine eigene Zahlenschrift

Proportional — Ziffern verrutschen ✗
Lebensmittel1,118.40
Miete980.00
Überweisung11,341.11
Tabellarisch — Ziffern stehen bündig ✓
Lebensmittel1,118.40
Miete980.00
Überweisung11,341.11

Tabellenziffern halten die Dezimalpunkte in einer Spalte und verhindern, dass Beträge beim Animieren „springen“. In SwiftUI: .monospacedDigit() oder Font.system(.title, design: .monospaced).

Typo-Skala → SwiftUI-Textstile

Large Title · 34 / 41 · BoldGeld ruhig bewegen.font(.largeTitle)
Title 1 · 28 / 34Geld ruhig bewegen.font(.title)
Title 2 · 22 / 28Geld ruhig bewegen.font(.title2)
Title 3 · 20 / 25Geld ruhig bewegen.font(.title3)
Headline · 17 / 22 · SemiboldGeld ruhig bewegen.font(.headline)
Body · 17 / 22Geld ruhig bewegen.font(.body)
Callout · 16 / 21Geld ruhig bewegen.font(.callout)
Subheadline · 15 / 20Geld ruhig bewegen.font(.subheadline)
Footnote · 13 / 18Geld ruhig bewegen.font(.footnote)
Caption 1 · 12 / 16Geld ruhig bewegen.font(.caption)
Caption 2 · 11 / 13Geld ruhig bewegen.font(.caption2)

Die Größen folgen Apples Standard-Dynamic-Type (Large). Verwende immer den benannten Textstil, damit die App die Barrierefreiheitsgröße der Nutzer respektiert — vermeide fest codierte Punktgrößen für Text.

04 — Layout & Form

Raum, Radius, Tiefe

Ein 8-Punkt-Raster mit 4-Punkt-Halbschritten. Großzügige Ränder. Weiche, kontinuierliche Ecken. Tiefe entsteht durch geschichtete Flächen und Materialien — nicht durch schwere Schatten.

Abstandsskala (4 / 8 Raster)

x1 · 4
x2 · 8
x3 · 12
x4 · 16
x5 · 20
x6 · 24
x8 · 32
x10 · 40
x12 · 48
x16 · 64

Standard-Bildschirmrand: 16pt (kompakt) / 20pt. Inhaltszeilenhöhe ≥ 44pt für Tap-Ziele.

Eckenradius — kontinuierlich

xs · 8px

sm · 10px

md · 12px

lg · 16px

xl · 20px

2xl · 28px

pill · 40px

Immer das iOS-„Squircle“: RoundedRectangle(cornerRadius: 16, style: .continuous).

Erhöhung & Materialien

flach — Fläche / Rahmen

elevation-1 — Karten

elevation-2 — Sheets

Bevorzuge .regularMaterial / .thinMaterial für Tab-Bars, Sheets und Overlays. Im Dunkelmodus hebe Flächen mit helleren Grautönen an statt mit Schatten.

05 — Ikonografie

SF Symbols, gewichtsangepasst

Verwende durchgehend SF Symbols — sie skalieren mit dem Text, unterstützen Dynamic Type und bieten hierarchisches Rendering. Passe das Symbolgewicht an den benachbarten Text an. Färbe mit der Label-Farbe; reserviere Gold nur für das aktive oder ausgewählte Symbol.

Recents
Cards
Insights
Add
Home
Profile
Rewards
Transfer
Primär · Standard
Sekundär · inaktiv
Aktiv · gold

Beispielhafte Glyphen gezeigt — in der App den echten SF-Symbols-Satz in Größe .medium, Gewicht .regular/.semibold verwenden.

06 — Komponenten

Das System, zusammengesetzt

Tokens werden zu UI. Jedes Element ist ausschließlich aus den oben definierten Farben, der Typografie, den Abständen und Radien gebaut — hier ein Vorgeschmack auf die volle Bibliothek.

ButtonsButtonStyle
Kontokarteelevation-2
Total balance
€ 4,820.17
•••• 4291
Zur vollständigen Komponentenbibliothek
07 — Tokens in der Praxis

Eine einzige Quelle der Wahrheit

Token-Namen sind in Figma-Variablen und SwiftUI identisch, sodass ein einmal definierter Wert in beiden Welten gleich gelesen wird. Definiere Farben in einem Asset-Katalog mit Hell/Dunkel-Erscheinungen und referenziere sie semantisch.

SwiftUI — Farben & Theme

// Colors live in an Asset Catalog with Any/Dark appearances,
// named to match the design tokens exactly.
extension Color {
    static let bgPrimary     = Color("bg/primary")
    static let bgSecondary   = Color("bg/secondary")
    static let surface       = Color("surface")
    static let labelPrimary  = Color("label/primary")
    static let labelSecondary = Color("label/secondary")
    static let separator     = Color("separator")
    static let accent        = Color("accent")        // #FFD379
    static let onAccent      = Color("on-accent")     // #212021 ink
}

SwiftUI — Typo & Zahlen

extension Font {
    // Text uses the system face → free Dynamic Type
    static let bodyText = Font.system(.body)
    static let headline = Font.system(.headline)

    // Money: monospaced design + tabular digits
    static func amount(_ style: Font.TextStyle = .title) -> Font {
        .system(style, design: .monospaced).monospacedDigit()
    }
}

Text("€ 4,820.17")
    .font(.amount(.largeTitle))
    .foregroundStyle(.labelPrimary)

SwiftUI — Abstand & Radius

enum Space { static let x1=4.0, x2=8.0, x3=12.0, x4=16.0, x6=24.0, x8=32.0 }
enum Radius { static let sm=10.0, md=12.0, lg=16.0, xl=20.0 }

RoundedRectangle(cornerRadius: Radius.lg, style: .continuous)
    .fill(Color.surface)
    .padding(Space.x4)

Figma ↔ SwiftUI-Parität

Erstelle eine Figma-Variablensammlung mit zwei Modi (Hell, Dunkel). Benenne die Variablen identisch zu den Asset-Katalog-Farben. Textstile spiegeln Apples Textstile; Abstand & Radius sind Zahlenvariablen.

Figma
Token
SwiftUI
Color variable
color/accent
Color.accent
Color variable
color/label/primary
Color.labelPrimary
Text style
Body / 17·22
.font(.body)
Number variable
space/x4 = 16
Space.x4
Number variable
radius/lg = 16
Radius.lg
Effect style
elevation-1
shadow(.shadow1)