ATC Trainer · Design System
Colour System
Orange — action. Blue — information. Ink — structure.
Orange — Action & Signal
Ink — Structure & Text
Blue — Information & Context
Semantic Colours
Colour Roles
CTAs, recording states, progress, primary actions. "Do something."
ATC content, frequency data, info badges, links. "Read this."
Body text, UI chrome, surfaces, secondary controls. The backbone.
Correct answers, completed states. Only after positive results.
Errors, incorrect answers. Never punitive — always paired with a path forward.
Typography
Bevan for display. Nunito Sans for everything else. Major Third scale (1.250).
Spacing & Layout
4px base grid. Consistent rhythm across all components.
Spacing Scale
Border Radius
Shadow
Form Elements
Clean, accessible inputs with clear focus states.
<input class="input" type="text" placeholder="...">
<label class="toggle-row"><input type="checkbox" class="toggle"><span class="toggle__track"></span> Label</label>Cards
The primary content container.
Basis-Karte
Standardcontainer mit abgerundeten Ecken, subtilen Schatten und 1px Rahmen.
Interaktive Karte
Hover hebt die Karte an. Nutze diese Variante bei klickbaren Elementen.
Info-Karte
Blauer linker Rand signalisiert informellen Inhalt wie ATIS-Daten oder Hinweise.
Strukturierte Karte mit Header, Body und Footer. Ideal bei Listen oder Detailansichten.
<div class="gl-card gl-card--interactive">
<div class="gl-card__header">...</div>
<div class="gl-card__body">...</div>
<div class="gl-card__footer">...</div>
</div>Feedback
Three grading levels: correct, partial, wrong.
roger.
Readback korrekt — Piste, Freigabe und Callsign stimmen.
Fast richtig
Die Pistenbezeichnung fehlt im Readback.
Piste 26 Links, Landung frei, D-EABC
Nochmal
Das Readback weicht deutlich vom erwarteten Standard ab. Versuch es nochmal — kein Stress!
<div class="fb" data-fb="correct">
<div class="fb__glow"></div>
<div class="fb__icon">...svg...</div>
<div class="fb__body"><h4>roger.</h4><p>...</p></div>
</div>Push-to-Talk
Press to transmit, release to receive.
State Machine
Interactive Demo
Press and hold the button to simulate the full transmit cycle.
Compact Variant (44px inline)
Specifications
| Property | Idle | Recording | Processing | Done |
|---|---|---|---|---|
| Size | 128px | 128px | 128px (scale .97) | 128px |
| Border | 2.5px ink-20 | 2.5px orange | 2.5px orange-40 | 2.5px orange |
| Fill | none | orange (scale in) | orange 12% | orange 100% |
| Icon | mic | bars | spinner | check |
| Orbit | dashed, static | dashed, 8s rotate | dashed, 12s | solid, static |
| Shadow | none | 0 0 0 4px orange/12% | none | none |
<div class="ptt-stage" data-state="idle">
<button class="ptt" data-ptt="main">
<span class="ptt__fill"></span>
<svg class="ptt__icon--mic">...</svg>
<span class="ptt__bars"><span>x5</span></span>
<span class="ptt__spinner"></span>
<svg class="ptt__icon--check">...</svg>
<svg class="ptt__orbit">...</svg>
</button>
<span class="ptt-label"></span>
</div>Radio UI
ATC transmission display and playback.
D-EABC, Piste 26 Links, Landung frei, Wind 240 Grad, 8 Knoten.
Frequency Badges
Waveform Visualization
<div class="radio-transmission">
<div class="radio-transmission__header">...</div>
<div class="radio-transmission__body">
<div class="radio-transmission__waveform">...</div>
<p class="radio-transmission__text">...</p>
</div>
</div>