Dieses Brandbook definiert, wie LH Virtual aussieht, klingt und auftritt — auf der Website, auf Social Media und überall dazwischen. Es verbindet die Designsprache von lufthansa.com mit der dunklen Nachtblau-Welt unserer Community.
LH Virtual ist die virtuelle Airline für Lufthansa-Enthusiasten — kostenlos, non-kommerziell, von der Community getragen. Wir sind so nah an der echten Lufthansa wie möglich, ohne je zu vergessen, dass wir ein Hobby sind.
Realismus.
Echte Flugpläne über die offizielle Lufthansa-API, echte Flottenzahlen, echte Prozeduren. Wer bei uns fliegt, fliegt wie das Original.
Zugänglichkeit.
Kein Druck, keine Hürden. Vom Casual-Piloten bis zum Hardcore-Simmer hat jeder seinen Platz — und Real Life geht immer vor.
Gemeinschaft.
Events, Group Flights, Discord. Wir fliegen zusammen — das ist der Unterschied zwischen einer VA und einem Logbuch.
Wir schreiben wie eine Premium-Airline, die zwinkert: klar, souverän, warm. Kurze Sätze. Aktive Verben. Luftfahrt-Vokabular ist willkommen („Pushback", „Final", „OFP"), Insider-Gatekeeping nicht. Auf Deutsch duzen wir, auf Englisch sind wir „you" — nie steif, nie albern.
Zwei Register. Das oben gilt für Headlines auf den Grafiken und für Texte auf der Website. Social-Captions sitzen näher dran und lauter — Emoji gehören dazu, Versalien für den großen Moment, direkte Fragen an die Community. Unsere Pilotinnen und Piloten sind die Helden: Ihre Screenshots werden mit Dank geteilt, nicht präsentiert. Verbindliche Referenz sind die captionExamples in design-tokens/lh.json — echte Captions, keine erfundenen.
Unser Logo kombiniert den Kranich-Ring mit der Wortmarke „LH VIRTUAL" in Versalien (Lufthansa Head Bold) — seit dem Redesign 2026 durchgehend großgeschrieben. Es existiert in drei Farbvarianten, einer quadratischen Avatar-Form und der Jubiläumsmarke „100 Years".



Say yes to the world
Der Schutzraum entspricht der Höhe des Kranich-Rings (X) auf allen vier Seiten. Innerhalb dieses Raums stehen keine Texte, Logos oder Bildkanten. Mindestbreite: 120 px digital, 30 mm im Druck. Darunter nur den Kranich-Ring allein verwenden.



Die Palette ist bewusst schmal: Navy als Fundament, ein tiefer Nacht-Verlauf für die Social-Welt, Gelb ausschließlich als Akzent. Wenn alles gelb ist, ist nichts mehr wichtig.
Ohne diese Ebene wird Gelb zum Lückenfüller: Alles, was auffallen soll, ohne Headline zu sein, landet sonst zwangsläufig im Akzent. Die Werte sind 1:1 aus dem Lufthansa-System übernommen (MAUI, lufthansa.com).
Gelb markiert die Primäraktion. Was klickbar ist, aber nicht die Aktion, wird blau (#52627C). Was nur zählt oder gliedert, wird Navy oder neutral. Das ist die Regel, an der es sich entscheidet — nicht die Prozentzahl. Fünfzehn winzige gelbe Dinge sind zwei Prozent Fläche und trotzdem fünfzehn Blickfänge. Lufthansa bindet Gelb im eigenen Design-System an genau eine Semantik (interaction-buttonprimary): Die Startseite von lufthansa.com trägt ein einziges gelbes Element, die Allegris-Kampagnenseite keines.
| Gelb darf | Gelb darf nicht |
|---|---|
| Primär-Button (CTA) | Fokusring |
| Kategorie-Chip / Tag | Hover-Farbe für Links & Navigation |
| Signatur-Strich oder Kapitelmarker — einer pro Ansicht | Wiederholte Ordnungszahlen: Listennummern, Schritt-Kreise |
| Fortschritt & Live-Marker | Rahmen, Trennlinien, aktive Zustände |
| Als Tint #FFFEDC für Hinweisflächen | Fließtext oder große Flächen |
Signatur der Social-Media-Welt und dunkler Website-Sektionen: linear-gradient(178°, #0A226B → #071A55 46% → #041034). Immer von oben nach unten dunkler werdend — wie Reiseflughöhe bei Sonnenuntergang.
Faustwert für den zweiten Blick, nachdem die Rollenfrage geklärt ist. Auf Gelb steht immer Deep Blue (#05164D), nie Weiß — Kontrast 9,1:1 vs. 1,9:1 (gemessen).
Lufthansa Head für alles Laute, Lufthansa Text für alles Lesbare. Fallback, wo die Fonts nicht verfügbar sind (z. B. Systemschrift in E-Mails): Segoe UI / Arial.
LH Virtual kombiniert echte Flugpläne über die offizielle Lufthansa-API mit automatischem PIREP-Grading, SimBrief-Integration und einer Community, die jeden Tag zusammen fliegt. Bold nur für Betonung einzelner Begriffe.
| Ebene | Schnitt | Größe (Web) | Besonderheit |
|---|---|---|---|
| H1 / Hero | Head Bold | 48–68 px | Letter-spacing −2 %, ein Wort in Gelb erlaubt |
| H2 / Sektion | Head Bold | 30–44 px | endet mit Punkt. Immer. |
| Eyebrow | Head Bold | 13 px, +28 % LS | Versalien, gelbe 34-px-Linie davor |
| Body | Text Regular | 15–18 px | Zeilenhöhe 1,65, max. ~70 Zeichen |
| Caption/Meta | Text Regular | 12–14 px | Muted-Farben, nie reines Grau auf Navy |
Wenige, wiedererkennbare Bausteine — konsequent eingesetzt statt jedes Mal neu erfunden.
Die gelbe Linie unterstreicht das wichtigste Wort oder markiert Kategorien (bekannt vom VA-NEWS-Banner). Stärke: ~8 % der Versalhöhe, Länge: nie breiter als das Wort.
Gelbes Label mit Deep-Blue-Versalien für Inhaltstypen auf Karten und Social Posts:
Der Balken ist gesetzt. Das zweite Gelb ist das, was den Blick führen soll — was übrig bleibt, steht als weißes Eyebrow in Versalien. Deshalb unterscheiden sich die Vorlagen bewusst:
| Fläche | Gelb 1 | Gelb 2 (führt) | In Weiß |
|---|---|---|---|
| Social Lower Third (Kap. 07) | Balken | Kategorie | Headline — kein CTA im Bild |
| Focus Airport „Horizon" (Kap. 08) | Balken | {ICAO}-Chip | Eyebrow „FOCUS AIRPORT", {CITY} |
| Website-Hero | Balken | CTA | Kategorie als Eyebrow, Headline |
Das weiße Logo mit 4–8 % Deckkraft, groß angeschnitten am Bildrand — verleiht dunklen Flächen Tiefe, ohne zu stören. Nie über Gesichtern oder Flugzeug-Bemalungen platzieren.
Verlauf von rgba(4,16,52,0) zu rgba(4,16,52,.92) über dem unteren Bilddrittel. Macht jeden Screenshot text-tauglich und ersetzt den harten Streifen der alten Universal.psd.
Unsere Bilder kommen aus dem Simulator — aber sie sollen aussehen wie von der Besucherterrasse fotografiert.
Profilbilder sind im Alltag winzig — 32 px als Discord-Icon, 48 px in der X-Timeline. Der Kranich-Ring ist so ikonisch, dass er auch klein trägt; darum bleibt er das Herz des Avatars. Ein Bild für alle Kanäle: Discord, Instagram, Facebook, TikTok, YouTube, X.
| Plattform | Anzeige (⌀) | Form | Upload |
|---|---|---|---|
| Discord (Server-Icon & Profil) | 48–100 px | Kreis | 1000×1000 PNG |
| 320 px (Feed 32 px) | Kreis | 1000×1000 PNG | |
| Facebook (Seite) | 170 px | Kreis | 1000×1000 PNG |
| TikTok | 200 px | Kreis | 1000×1000 PNG |
| YouTube | 800 px | Kreis | 1000×1000 PNG |
| X / Twitter | 400 px (Timeline 48 px) | Kreis | 1000×1000 PNG |
Ein durchgehendes Bühnenbild — Night-Verlauf, angeschnittenes Kranich-Wasserzeichen — mit weißer Wortmarke, gelber Akzentlinie und Tagline mittig. Ein Layout, in jedem Kanalformat ausgespielt.



| Format | Pixel | Sichere Zone | Einsatz |
|---|---|---|---|
| YouTube Channel Art | 2560×1440 | 1546×423 mittig | Kanal-Header — TV, Desktop und Mobil zeigen je mehr Rand, darum liegen Logo und Tagline in der Zone |
| Discord Server-Banner | 960×540 | vollflächig | Boost-Banner, Einladungs-Header |
| X / Header | 1500×500 | Ränder ~60 px, unten links Profilbild-Überlappung | Profil-Header |
Focus-Airport-Grafiken erzeugt der Event-Generator automatisch. Verbindliches Design ist „Horizon" (Stand Juli 2026) — dazu kommt ein Monats-Cover als Deckblatt, das jeder Monatsserie vorangestellt wird.
| Variable | Beispiel | Regel |
|---|---|---|
| {CITY} | TENERIFE | Versalien, gefüllt Weiß. Schriftgröße dynamisch verkleinern, bis Breite ≤ Canvas − 2×Rand (wichtig: „BENGALURU") |
| {ICAO} | GCTS | 4 Zeichen, Versalien, zentriert auf dem Chip |
| {MONTH} {YEAR} | JULY 2026 | englisch, Versalien — auf dem Cover als Chip-Text |
| {PHOTO} | — | min. 2400 px Breite, Motiv-Fokus mittig (überlebt 3:2- und 4:5-Crop), keine Logos/Personen prominent |
Export: PNG, sRGB. Canvas: Event-Banner 1800×1200 px (3:2) und Instagram 1080×1350 px (4:5). Foto immer Cover-Fit, Fokuspunkt zentriert. Im Profilraster fallen aus dem 4:5-Motiv je 34 px links und rechts weg (Kapitel 07) — die rot markierten Streifen im Mock. Horizon hält mit x 64 genug Abstand; bei eigenen Layouts nichts Tragendes näher als 40 px an die Seitenkante.
Foto bleibt der Held, ein Night-Scrim von unten macht jede Vorlage text-tauglich. Der Stadtname steht gefüllt in Weiß, der ICAO-Code zentriert auf dem gelben Chip. Unten rechts liegt das Kranich-Wasserzeichen (Grafikelement 3) groß angeschnitten — das LHV-Logo entfällt auf dieser Vorlage komplett.
| Ebene | 4:5 (1080×1350) | 3:2 (1800×1200) | Spezifikation |
|---|---|---|---|
| Scrim | volle Fläche | linear 180°: transparent bis 42 %, rgba(4,16,52,.55) @ 72 %, rgba(4,16,52,.95) @ 100 % | |
| Kranich-Wasserzeichen | unten rechts, angeschnitten | Asset LHV_Kranich.png (Weiß). Höhe = 68 % der Bildhöhe, Deckkraft 6 %. Position: x = W − 0,55·LogoBreite, y = H − 0,55·LogoHöhe → je ~45 % laufen rechts/unten aus dem Bild. Ebene liegt ÜBER dem Scrim, UNTER den Texten. Nie über Gesichtern oder Flugzeug-Bemalungen. | |
| Gelber Balken | x72 y72, 180×18 | x84 y84, 200×20 | #FFAD00 |
| Eyebrow „FOCUS AIRPORT" | x72 y112 | x84 y128 | Head Bold 40/44 px, Versalien, LS +26 %, Weiß |
| {ICAO}-Chip | x72, Unterkante y1128 | x84, Unterkante y1000 | Head Bold 48 px Deep Blue auf #FFAD00, Padding 10×22, Radius 6, Text horizontal & vertikal zentriert |
| {MONTH} {YEAR} | rechts neben Chip, +24 px | dito | Head Bold 30 px, Weiß 75 %, LS +20 % |
| {CITY} | x64, Baseline y1268 | x76, Baseline y1116 | Head Bold max 170/200 px, gefüllt Weiß (keine Outline), Versalien, Auto-Fit |
Dasselbe Layout trägt auch die bewegte Fassung: reel.html im Modus „Focus-Airport-Karussell". Nichts wird neu gezeichnet — Chip und Stadtname hängen an der Grundlinie der Fläche, der Abstand zwischen beiden bleibt exakt 350 px. Der Flächen-Umschalter oben im Werkzeug entscheidet, welche der beiden herauskommt.
| Ebene | Reel (Grundlinie 1248) | Story (Grundlinie 1500) | Hinweis |
|---|---|---|---|
| Seiten-Punkte | y 290 | y 290 | auf beiden Flächen unter der oberen Safe Zone (270) |
| Gelber Balken | y 360, 220×24 | y 360, 220×24 | fest — er gehört zur oberen Gruppe |
| Eyebrow „FOCUS AIRPORT" | Baseline y 456 | Baseline y 456 | Head Bold 40 px, LS +24 % |
| {ICAO}-Chip | Oberkante y 898 | Oberkante y 1150 | = Grundlinie − 350 |
| {CITY} | Baseline y 1248 | Baseline y 1500 | Auto-Fit bis 190 px, Versalien, gefüllt Weiß |
| Night-Scrim | 0 / .55 / .95 @ 554 / 1130 / 1668 | @ 806 / 1382 / 1920 | dieselben Stops relativ zur Grundlinie: B−694 / B−118 / B+420 |
FOCUS_AIRPORT = {
"brand": "lhv", "design": "horizon",
"colors": { "accent": "#FFAD00", "on_accent": "#05164D", "scrim_base": [4, 16, 52], "text": "#FFFFFF" },
"fonts": { "head": "LufthansaHead-Bold" },
"canvas": { "feed": [1080, 1350], "banner": [1800, 1200] },
"layers": [
{ "id": "photo", "fit": "cover", "min_width": 2400, "focus": "center" },
{ "id": "scrim", "gradient": [[0.42, 0], [0.72, 0.55], [1.0, 0.95]] }, # transparent -> rgba(scrim_base, a)
{ "id": "wm_crane","asset": "LHV_Kranich.png", "height_pct": 0.68, "alpha": 0.07,
"x": "W - 0.55*w", "y": "H - 0.55*h" },
{ "id": "bar", "feed": [72, 72, 180, 18], "banner": [84, 84, 200, 20], "fill": "accent" },
{ "id": "eyebrow", "text": "FOCUS AIRPORT", "feed": [72, 112], "banner": [84, 128],
"size": [40, 44], "tracking": 0.26, "fill": "#FFFFFF" },
{ "id": "chip", "text": "{ICAO}", "feed_bottom": [72, 1128], "banner_bottom": [84, 1000],
"size": 48, "pad": [10, 22], "radius": 6, "fill": "accent", "color": "on_accent" },
{ "id": "month", "text": "{MONTH} {YEAR}", "pos": "right_of_chip+24", "size": 30,
"fill": "rgba(255,255,255,.75)", "tracking": 0.20 },
{ "id": "city", "text": "{CITY}", "feed_baseline": [64, 1268], "banner_baseline": [76, 1116],
"max_size": [170, 200], "fill": "#FFFFFF", "autofit": "width <= W - 2*margin" }
],
"export": { "format": "png", "colorspace": "sRGB" }
}
target_h = int(image.height * 0.68) # 68 % der Bildhöhe
scale = target_h / logo.height
logo = logo.resize((int(logo.width * scale), target_h), Image.Resampling.LANCZOS)
alpha = logo.getchannel("A").point(lambda a: int(a * 0.06)) # 6 % Deckkraft
logo.putalpha(alpha)
x = image.width - int(logo.width * 0.55) # ~45 % laufen rechts aus dem Bild
y = image.height - int(logo.height * 0.55) # ~45 % laufen unten aus dem Bild
image.alpha_composite(logo, (x, y))
Auf 1800×1200 ergibt das: Logo-Höhe 816 px, x ≈ 1450 px, y ≈ 750 px (je nach Logo-Breite). Asset: ../logos/LHV_Kranich.png — der freigestellte weiße Kranich-Ring ohne Wortmarke.
Vor den einzelnen Focus Airports wird pro Monat ein Cover gepostet — Layout und Hintergrund direkt aus der Template_Posting.psd übernommen: „FOCUS" horizontal oben links, „AIRPORTS" vertikal darunter als Eyecatcher (aufrecht gestapelte Buchstaben in Head Light), der Monat unten rechts — jetzt auf dem gelben Chip in ICAO-Chip-Bauart, größer und mit Innenabstand. Das LHV-Logo entfällt, stattdessen Kranich-Wasserzeichen; der Swipe-Hinweis bleibt.
| Ebene | Position (1080×1350) | Spezifikation |
|---|---|---|
| Hintergrund | volle Fläche | Festes Markenmotiv ../social-templates/cover-bg.jpg (aus der PSD extrahiert: Navy-Verlauf, Weltkarte, Map-Pins, gestrichelter Orbit). Kein Foto, kein zusätzlicher Scrim — der Generator tauscht nur den Monatstext. |
| Kranich-Wasserzeichen | unten rechts, angeschnitten | identisch Horizon: 68 % Bildhöhe, 6 % Deckkraft, 45/45 aus dem Bild laufend |
| „FOCUS" | x62, Oberkante y109, Versalhöhe 131 px | Head Bold, gefüllt Weiß, Versalien (Original-Bbox bis x664) |
| „AIRPORTS" | Spalte x401–469, y291–1058 | Head Light, Weiß, Buchstaben aufrecht vertikal gestapelt, gleichmäßiger Abstand ≈ 96 px pro Buchstabe — beginnt immer unter „FOCUS", in jedem Format inklusive 1:1 |
| {MON}{YY}-Chip | rechte Chip-Kante x1053, Chip-Unterkante y1161 | Text z. B. „DEC26": Head Bold ~100 px Deep Blue, zentriert auf #FFAD00, Innenabstand 32 px rundum, Radius 12 (Text-Bereich original x548–1021, y1020–1129) |
| Swipe-Hinweis | (915, 1239) – (1041, 1301) | „Swipe" Head Bold 30 px + Doppel-Chevron „»" 56 px, Weiß — nur auf dem Cover, nicht auf den Airport-Grafiken |
| LHV-Logo | x72, Unterkante y1278 (H−72) | Weißes Logo, Höhe 48 px — Standard-Absender unten links (nur auf dem Cover; die Airport-Grafiken tragen nur den Kranich) |
1:1-Ableitung: gleiche Datei, mittiger 1080×1080-Crop — FOCUS/AIRPORTS und Chip liegen innerhalb des Crops, Positionen um den Höhenversatz (−135 px) verschieben.
Animiert? Dasselbe Horizon-Layout trägt das Reel — reel.html im Focus-Airport-Karussell blättert alle Flughäfen des Monats in ein animiertes Story/Reel und exportiert ein .webm. Motion-Timeline: Kapitel 07.
Discord ist nicht Instagram. Anhänge werden in der Timeline auf rund 550 px skaliert, und Hochformat wird im Raster beschnitten — vom 4:5-Cover blieb nur „AIRPORT" senkrecht stehen, und zehn Briefmarken tippt niemand einzeln an. Der Channel bekommt deshalb ein eigenes Format: eine Übersichtsgrafik im Querformat, 1600 × 1000.
| Wo | Der Discord-Channel der VA, gepostet vom VA-Bot — der Ziel-Channel steht einmalig in den Einstellungen des Event Studios. |
|---|---|
| Wann | Automatisch am Vorabend des Monats um 20:00, dazu der Knopf „③ Push → Discord" für den sofortigen, beliebig wiederholbaren Push (Test oder nach einer Änderung). |
| Aufbau | Kopfzeile mit Monat und den Landesflaggen in der Reihenfolge der Airports (feste 48 × 32-Box, alle gleich groß), Stadtfotos als Kacheln mit dem Category Tag, Radius 4 px für den ICAO, Kranich unten rechts, 7 % Deckkraft als Absender-Zeichen, Website unten links. |
| Varianten | mosaic (Fotokacheln, Standard) · board (reine Liste) · split (Markenfläche plus Liste). Je Deployment umstellbar. |
Der Text ist für den Channel geschrieben, nicht aus Instagram kopiert: Überschrift, je Airport eine Zeile mit ICAO, Stadt und den Focus-Punkten sowie einer Begründung aus vier bis acht Wörtern. Diese Begründungen schreibt Mistral in einem Aufruf für den ganzen Monat — so unterscheiden sie sich voneinander, statt neunmal derselbe Satzbau zu sein; ICAO, Stadt, Punkte und Struktur bleiben in der Vorlage, das Modell kann also keine Fakten verbiegen. Ohne API-Key oder bei unbrauchbarer Antwort bleibt die schlichte Liste — der Beitrag geht immer raus. Keine Hashtags (im Channel wirkungslos), und der Link steht in spitzen Klammern, damit Discord keine zweite Vorschaukarte unter das Bild hängt.
vAMSYS ist das Crew-System, auf dem der Betrieb läuft — Buchung, Dispatch, PIREPs, Ränge. Es ist eine gemietete Halle, keine eigene: einrichten geht, umbauen nicht. Dieses Kapitel hält fest, was sich dort einrichten lässt, mit welchen Mitteln, und wo die Plattform die Marke stoppt.
Zwei Formulare in Orwell steuern alles: Settings → Design → Logo Settings (vier Logo-Slots plus Login-Hintergründe) und Style Settings (zwölf Farb-Paare plus ein eigenes Stylesheet). Ihre Reichweite ist begrenzt — und diese Grenze gehört der Plattform, nicht der Marke.
| Oberfläche | Farb-Paare | Eigenes CSS | Logos |
|---|---|---|---|
| Phoenix (Piloten) | ja | ja | ja |
| Orwell (Staff/HQ) | nein | nein | ja |
| Select-VA-Seite | teilweise | nein | ja |
| Pegasus ACARS | nein | nein | ja |
| Ausgehende E-Mails | nein | nein | ja |
Das ist die Entscheidung, an der das ganze Stylesheet hängt. vAMSYS baut auf Filament auf, und Filament färbt alles über sechs Variablen-Rampen. Wer die Markenfarbe auf --primary-600 legt, färbt Buttons, Badges, Ringe, Checkboxen, Tabs, Links, Fortschrittsbalken und Icons auf einen Schlag. Bei LX ist das genau richtig — Rot führt. Bei LH wäre es der Bruch der eigenen Regel: fünfzehn winzige gelbe Dinge sind zwei Prozent Fläche und trotzdem fünfzehn Blickfänge.
| Rampe | vAMSYS-Standard | LH Virtual | Warum |
|---|---|---|---|
| --primary-* | Indigo | 400 Muted Blue · 500 Whale Blue · 600 Navy · 700 Deep Blue | Weiß auf Navy sind 14,94:1. Weiß auf Gelb sind 1,9:1 — Gelb kann diese Stufe nicht tragen, weil Filament weißen Text daraufsetzt. |
| --info-* | Cyan | 600 Whale Blue · 700 Marble Blue | An --info hängen die großen Sekundär-CTAs. LH hat für genau die eine Rolle: „was klickbar ist, aber nicht die Aktion". |
| --gray-* | blaustichig | die LH-Blaugrau-Skala | LX hat den Blaustich desaturiert. LH ist eine blaue Marke — der Standard ist nur das falsche Blau. |
| --success / --warning / --danger | Grün / Amber / Rot | unangetastet | Sie tragen Bedeutung. Auch die eigenen Statusfarben werden hier nicht durchgedrückt — die Semantik gehört der Plattform. |
Die Radien stammen nicht aus einer Annahme, sondern aus der gerenderten Website: von 339 gemessenen Elementen auf lh-virtual.com stehen 277 auf border-radius: 0. Gerundet sind der Button (8 px), der kleine Kategorie-Chip (4 px) und bewusst runde Bedienelemente. Die 14 px in lh.json beschreiben die Social-Grafiken, nicht die Oberfläche.
Das Gegenmuster ist .facts auf der Website: eine 2-px-Navy-Linie eröffnet den Block, 1-px-Haarlinien trennen die Zeilen, Label in Muted links, Wert in Head Bold Navy rechts — keine Fläche, kein Schatten, kein Radius. Das ist das Muster für jede Kennzahl in vAMSYS.
Ein Phoenix-Nachbau mit den echten Filament-Klassennamen, gerendert mit dem Stylesheet. Darunter derselbe Nachbau ohne — das ist der vAMSYS-Standard, von dem wir kommen.
| Gelb darf | Gelb darf nicht |
|---|---|
| Primär-Button — gelbe Fläche, Deep-Blue-Text (9,14:1), in Hell und Dunkel gleich | Fokusring — Electric Blue #0968F6, auf Dunkel Weiß |
| Signatur-Balken 52 × 6 px am Seitenkopf — einmal pro Seite, nie pro Sektion | Aktiver Menüpunkt, Tabs, Tabellenkopf-Linien, Rahmen und Trennlinien |
| Fortschritt und Live-Marker — eine Linie, kein Text, meldet einen Zustand | Schritt-Kreise und Listennummern — Navy-Fläche, weiße Ziffer |
| Kategorie-Chip als Tint, rgba(255,173,0,.15) mit Amber-Text | Kennzahl-Kacheln, Checkboxen, Textauswahl, Scrollbar, Zeilen-Aktionen, Rang-Balken |
| Hinweisfläche als Pale Yellow #FFFEDC mit Deep-Blue-Text | Links und deren Hover — die sind Whale Blue #52627C |
Regel 1 — Fläche ODER Icon in der Markenfarbe, niemals beides.
Trägt die Fläche die Farbe, erbt das Icon die Textfarbe. Wer beides färbt, erzeugt einen einfarbigen Klotz: Bei LX wurde das Drei-Punkte-Menü der Dispatch-Tabelle zum vollen roten Quadrat — die Punkte waren da, nur rot auf rot. Deshalb button.fi-color-primary nur mit :not(.fi-icon-btn).
Regel 2 — custom nie hart färben.
In Filament ist custom kein Synonym für „primary", sondern der generische Platzhalter für jede Farbvariante; die echte Farbe kommt als Inline-Variable am Element an. Immer rgb(var(--c-600, var(--LHNavy))) schreiben. Wer hart färbt, macht Success-, Warning- und Danger-Badges markenfarben.
Vier Slots, 1800 × 400 px PNG mit Transparenz (SVG wird abgelehnt). Slot 0/1 und 2/3 sind getrennte Uploads — wer nur Phoenix ändert, hat in E-Mails und Orwell weiterhin das alte Logo. Das ist hier der häufigste Fehler.
| Slot | Erscheint in | Datei |
|---|---|---|
| 0 | Phoenix (hell) | LHV_Logo_Blau.png |
| 1 | Phoenix (dunkel) | LHV_Logo.png |
| 2 | Select-VA-Seite, Pegasus (hell), E-Mails, Orwell | LHV_Logo_Blau.png |
| 3 | Select-VA-Seite, Pegasus (dunkel), Orwell (dunkel) | LHV_Logo.png |
| BG | Login-/Register-Hintergrund | 1706 × 1600 px, WebP; mehrere möglich, zufällige Auswahl |
Die Lufthansa-Familien bleiben im Font-Stack, die Fontdateien bleiben aus vAMSYS heraus. Das Rechtskapitel verbietet die Weitergabe, und ein Upload auf ein CDN ist eine Weitergabe. Wer die Schriften lokal hat, sieht sie; alle anderen den Fallback. Kein @font-face im vAMSYS-Stylesheet. Buttons folgen exakt der Website: Head Bold, 15 px, 12/24 Innenabstand — keine Versalien, kein Tracking. Der einzige Ort, an dem die Marke Versalien setzt, ist der Kategorie-Chip.
Ein CSS-File je VA; ein neuer Upload ersetzt das alte. Die Datei liegt unter https://cdn.vamsys.xyz/stylesheets/<ULID>.css, und der ULID wechselt bei jedem Speichern. Die alte Datei bleibt erreichbar — das, und nur das, ist der Weg zurück. Einen Undo-Knopf gibt es nicht: Ein Revert ist immer ein erneuter Upload. In Hell und Dunkel prüfen, Dropdowns öffnen, und daran denken, dass getComputedStyle teils den Vendor-Wert zurückgibt — Screenshots sind die Wahrheit.
Stand: Entwurf v1.0.0, nicht hochgeladen. Stylesheet, Phoenix-Nachbau, Preview-Seite und der Rang-/Badge-Entwurf liegen in S:\04_LHVirtual\vAMSYS\.
↩ Zurück zum ganzen BrandbookJeder Rang und jede Badge liegt in drei Fassungen vor. Dieses Kapitel zeigt sie alle, durchnummeriert, damit je Stück entschieden werden kann: „R03 in B", „B21 in C". In vAMSYS ist nichts davon gesetzt.
Der vollständige Satz je Fassung — oben die Ränge, darunter die Badges.
| Nr. | A | B | C | Rang | Anforderungen |
|---|---|---|---|---|---|
| R01 | First Officer lhv_rank_fo |
0 PIREPs · 0 h · 0 P | |||
| R02 | Senior First Officer lhv_rank_sfo |
75 PIREPs · 300 h · 5.000 P | |||
| R03 | Captain lhv_rank_cpt |
150 PIREPs · 600 h · 12.000 P | |||
| R04 | Senior Captain lhv_rank_senior_cpt |
400 PIREPs · 1.600 h · 35.000 P | |||
| R05 | Type Rating Instructor lhv_rank_tri |
honorary | |||
| R06 | Type Rating Examiner lhv_rank_tre |
honorary | |||
| R07 | Fleet Chief lhv_rank_fleet_chief |
honorary | |||
| R08 | Chief Pilot lhv_rank_chief_pilot |
honorary | |||
| R09 | Staff lhv_rank_staff |
honorary |
| Nr. | A | B | C | Rolle | Format |
|---|---|---|---|---|---|
| D01 | First Officer lhv_discord_fo |
64 × 64 | |||
| D02 | Senior First Officer lhv_discord_sfo |
64 × 64 | |||
| D03 | Captain lhv_discord_cpt |
64 × 64 | |||
| D04 | Senior Captain lhv_discord_senior_cpt |
64 × 64 |
Rangkriterien sind flottenblind — alles, was nach Airline, Flotte, Route oder Ereignis unterscheiden soll, muss eine Badge sein. Eine Badge ohne Regel ist von Hand vergebbar.
| Nr. | A | B | C | Badge | Regel | Filter |
|---|---|---|---|---|---|---|
| B01 | Cargo Operations lhv_badge_ops_gec |
PIREP Count >= 10 | Callsign Parameter GEC | |||
| B02 | Cargo Operations · Silver lhv_badge_ops_gec_silver |
PIREP Count >= 25 | Callsign Parameter GEC | |||
| B03 | Cargo Operations · Gold lhv_badge_ops_gec_gold |
PIREP Count >= 50 | Callsign Parameter GEC | |||
| B04 | Discover Operations lhv_badge_ops_ocn |
PIREP Count >= 10 | Callsign Parameter OCN | |||
| B05 | Discover Operations · Silver lhv_badge_ops_ocn_silver |
PIREP Count >= 25 | Callsign Parameter OCN | |||
| B06 | Discover Operations · Gold lhv_badge_ops_ocn_gold |
PIREP Count >= 50 | Callsign Parameter OCN | |||
| B07 | City Airlines Operations lhv_badge_ops_lhx |
PIREP Count >= 10 | Callsign Parameter LHX | |||
| B08 | City Airlines Operations · Silver lhv_badge_ops_lhx_silver |
PIREP Count >= 25 | Callsign Parameter LHX | |||
| B09 | City Airlines Operations · Gold lhv_badge_ops_lhx_gold |
PIREP Count >= 50 | Callsign Parameter LHX | |||
| B10 | Dolomiti Operations lhv_badge_ops_dla |
PIREP Count >= 10 | Callsign Parameter DLA | |||
| B11 | Dolomiti Operations · Silver lhv_badge_ops_dla_silver |
PIREP Count >= 25 | Callsign Parameter DLA | |||
| B12 | Dolomiti Operations · Gold lhv_badge_ops_dla_gold |
PIREP Count >= 50 | Callsign Parameter DLA | |||
| B13 | Lufthansa Operations lhv_badge_ops_dlh |
PIREP Count >= 25 | Callsign Parameter DLH | |||
| B14 | Lufthansa Operations · Silver lhv_badge_ops_dlh_silver |
PIREP Count >= 100 | Callsign Parameter DLH | |||
| B15 | Lufthansa Operations · Gold lhv_badge_ops_dlh_gold |
PIREP Count >= 250 | Callsign Parameter DLH | |||
| B16 | Five Tails lhv_badge_five_tails |
keine Regel setzen — sonst verweigert vAMSYS die manuelle Vergabe manuell | — |
| Nr. | A | B | C | Badge | Regel | Filter |
|---|---|---|---|---|---|---|
| B17 | Frankfurt Hub lhv_badge_hub_fra |
PIREPs — Arriving or Departing Airport >= 25 | Airport EDDF | |||
| B18 | Munich Hub lhv_badge_hub_muc |
PIREPs — Arriving or Departing Airport >= 25 | Airport EDDM | |||
| B19 | Atlantic Circuit lhv_badge_atlantic_circuit |
PIREPs — Landing Airport >= 1 | Airports KJFK, KEWR, KBOS, KIAD | |||
| B20 | Asia Circuit lhv_badge_asia_circuit |
PIREPs — Landing Airport >= 1 | Airports RJTT, VHHH, ZBAA, WSSS |
| Nr. | A | B | C | Badge | Regel | Filter |
|---|---|---|---|---|---|---|
| B21 | Queen of the Skies lhv_badge_queen_of_the_skies |
PIREP Count >= 10 | Fleets 747-400, 747-8 | |||
| B22 | Superjumbo lhv_badge_superjumbo |
PIREP Count >= 10 | Fleet A380-800 | |||
| B23 | Four Engines lhv_badge_four_engines |
PIREP Count >= 25 | Fleets A340-300, A340-600, A380-800, 747-400, 747-8 | |||
| B24 | Dreamliner lhv_badge_dreamliner |
PIREP Count >= 10 | Fleet 787-9 |
| Nr. | A | B | C | Badge | Regel | Filter |
|---|---|---|---|---|---|---|
| B25 | Smooth Touchdown lhv_badge_touchdown |
PIREPs — Landing Rate Between -250 und -100 fpm, 1x | kein Filter | |||
| B26 | Smooth Touchdown · Silver lhv_badge_touchdown_silver |
PIREPs — Landing Rate Between -250 und -100 fpm, 10x | kein Filter | |||
| B27 | Smooth Touchdown · Gold lhv_badge_touchdown_gold |
PIREPs — Landing Rate Between -250 und -100 fpm, 50x | kein Filter | |||
| B28 | Night Shift lhv_badge_nightshift |
PIREP Count >= 25 | Route Tag — nur anlegen, wenn Nacht-Routen getaggt sind |
| Nr. | A | B | C | Badge | Regel | Filter |
|---|---|---|---|---|---|---|
| B29 | Online Operations lhv_badge_vatsim |
PIREP Count >= 25 | Netzwerk VATSIM | |||
| B30 | Online Operations · Gold lhv_badge_vatsim_gold |
PIREP Count >= 150 | Netzwerk VATSIM | |||
| B31 | Online Operations · IVAO lhv_badge_ivao |
PIREP Count >= 25 | Netzwerk IVAO |
| Nr. | A | B | C | Badge | Regel | Filter |
|---|---|---|---|---|---|---|
| B32 | Service · 1 Year lhv_badge_service_1 |
Length of Service >= 1 Jahr | kein Filter | |||
| B33 | Service · 3 Years lhv_badge_service_3 |
Length of Service >= 3 Jahre | kein Filter | |||
| B34 | Service · 5 Years lhv_badge_service_5 |
Length of Service >= 5 Jahre | kein Filter | |||
| B35 | Founding Member lhv_badge_founding_member |
keine Regel setzen manuell | — |
| Nr. | A | B | C | Badge | Regel | Filter |
|---|---|---|---|---|---|---|
| B36 | Frankfurt Friday lhv_badge_frankfurt_friday |
Event Participation — konkretes Event auswaehlen | — | |||
| B37 | Munich Wednesday lhv_badge_munich_wednesday |
Event Participation — konkretes Event auswaehlen | — | |||
| B38 | Focus Airport Regular lhv_badge_focus_airport |
Activity Participation — Count >= 4, Typ Focus Airport | — | |||
| B39 | Event Regular lhv_badge_event_regular |
Activity Participation — Count >= 10, Typ Event | — | |||
| B40 | Extra Mile lhv_badge_bonus_1 |
Points — Bonus >= 2.500 | — | |||
| B41 | Extra Mile · Gold lhv_badge_bonus_2 |
Points — Bonus >= 10.000 | — |
| Nr. | A | B | C | Badge | Regel | Filter |
|---|---|---|---|---|---|---|
| B42 | Staff lhv_badge_staff |
keine Regel setzen manuell | — | |||
| B43 | Pilot of the Month lhv_badge_pilot_of_the_month |
keine Regel setzen manuell | — | |||
| B44 | Screenshot of the Month lhv_badge_screenshot_of_the_month |
keine Regel setzen manuell | — | |||
| B45 | Event Crew lhv_badge_event_crew |
keine Regel setzen manuell | — | |||
| B46 | Media Crew lhv_badge_media_crew |
keine Regel setzen manuell | — | |||
| B47 | Community Contributor lhv_badge_community_contributor |
keine Regel setzen manuell | — |
LH Virtual ist ein non-kommerzielles Fan- und Community-Projekt und steht in keiner Verbindung zur Deutschen Lufthansa AG.
© 2026 LH-Virtual.com · Brandbook v1.7 · Fragen an das PR-Team im Discord.
Ein Overlay. Jede Plattform.
Der Nachfolger der Universal.psd: statt eines starren Streifens unten links ein modulares Lower-Third-System — Scrim, gelbe Linie, Kategorie, Headline, Logo. Es skaliert über alle Formate und bleibt in den Safe Zones von Instagram & Facebook.
Die fünf Flächen
Alles beginnt hier: welcher Canvas, und wie viel davon Instagram mit seiner eigenen Oberfläche überdeckt. Im Feed verdeckt nichts das Bild — dort zählt allein der Beschnitt im Profilraster. Auf 9:16 liegt die Oberfläche über dem Creative, und Reel und Story reservieren sehr Unterschiedliches.
Aufbau des Lower Third (von unten nach oben)
Safe Zones (Stand August 2026)
Story und Reel teilen den Canvas, nicht die Safe Zone. Unter einem Reel stapeln sich Caption, Audio-Attribution, Profilzeile und CTA — Meta reserviert dort bis zu 672 px, bei der Story 384 px. Zwei Flächen, zwei Zeilen. Alles, was sichtbar bleiben muss (CTA, Logo, Kernaussage), liegt innerhalb dieser Werte.
* Kein UI-Overlay — im Feed verdeckt nichts das Bild. Die 34 px sind der Beschnitt im 3:4-Profilraster (siehe unten). Beim Reel liegt an der rechten Kante der Like/Kommentar/Teilen/Speichern-Stapel: 65 px sind die Untergrenze, 120 px halten ihn sicher frei.
Das Profilraster beschneidet seitlich
Instagram rendert die Kacheln des Profilrasters seit 2025 in 3:4 (1080 × 1440). Und 3:4 (0,75) ist schmaler als 4:5 (0,80) — der Beschnitt fällt also links und rechts an, nicht oben und unten. Genau dort sitzen Logos und Seitenelemente, deshalb ist es relevant.
Motion — animiertes Reel-/Story-Overlay
Dasselbe Lower Third, aber getaktet. Die Elemente steigen von unten ein, die gelbe Bar wischt von links auf (unsere Signature-Geste), alles hält, dann läuft es weich aus — so kann das Overlay in Story oder Reel auf einem Videoclip liegen. Die Loop-Vorschau links spielt exakt die Timeline aus der Tabelle.
Referenz: 30 fps, Slide-Länge 6 s (einstellbar). Jedes Element hat bewusst einen eigenen Effekt — so wirkt der Aufbau bespoke statt automatisch erzeugt. Die Timeline ist einmal als Anteile der Slide-Länge definiert — ein längerer Slide dehnt jeden Keyframe proportional. Bei „reduzierte Bewegung" wird der fertig aufgebaute Frame ohne Animation gezeigt.
Warum der letzte Slide nicht swiped: der Swipe blendet immer schon den nächsten Slide ein — nach dem letzten Airport wäre das wieder Slide 1, das Reel endete also mit dem ersten Focus Airport. Stattdessen übernimmt das Endbild. Es entfällt, wenn die VA einen eigenen Outro-Clip hat: dann schneidet der Renderer das Swipe-Fenster weg und blendet den letzten Airport per Crossfade ins Video.
Reel-Baukasten — reel.html
social-templates/reel.html rendert diese Timeline pixelgenau auf einem 1080×1920-Canvas und exportiert per Klick ein .webm (ohne Extra-Software). Oben wählst du zuerst die Fläche — Reel (Standard) oder Story. Sie entscheidet, wie hoch der Inhalt sitzt: Grundlinie y 1248 beim Reel, y 1500 bei der Story. Darunter zwei Modi: