---
name: dm-presentation
description: Applies Doppelmayr's official brand colors and typography to any sort of artifact that may benefit from having Doppelmayr's corporate look-and-feel. Use it when Doppelmayr brand colors or style guidelines, visual formatting, or company design standards apply. Keywords include Doppelmayr branding, corporate identity, seilbahn, ropeway, cable car styling.
license: Complete terms in LICENSE.txt
---

# Doppelmayr Brand Styling

## ⚠️ Wichtig: Workspace-Regel

**NIEMALS** temporäre Dateien im Skills-Verzeichnis ablegen!

Alle generierten Dateien (Bilder, Scripts, Präsentationen) müssen im **Content-Verzeichnis** gespeichert werden:

| Dateityp | Speicherort | Beispiel |
|----------|-------------|----------|
| Heruntergeladene Bilder | `<content-dir>/images/` | `/project/docs/images/` |
| Generierte PowerPoints | `<content-dir>/` | `/project/docs/Presentation.pptx` |
| Erstellte Scripts | `<content-dir>/` | `/project/docs/create_presentation.py` |

```bash
# ❌ FALSCH - niemals im Skills-Verzeichnis
skills/dm-presentation/my_slides/
skills/dm-presentation/output.pptx

# ✅ RICHTIG - im Content-Verzeichnis
/path/to/project/output/
/path/to/project/output/presentation.pptx
```

## Overview

To access Doppelmayr's official brand identity and style resources, use this skill.

**Keywords**: branding, corporate identity, visual identity, post-processing, styling, brand colors, typography, Doppelmayr brand, visual formatting, visual design, seilbahn, ropeway, cable car

**Source**: Based on analysis of https://www.doppelmayr.com/en/ (January 2026)

## ⚠️ PFLICHT: PowerPoint-Erstellung ausschließlich via python-pptx

**Alle PowerPoint-Präsentationen MÜSSEN:**
1. Mit `python-pptx` als Python-Script generiert werden
2. Das **MasterTemplateDE.pptx** als Vorlage verwenden (IMMER)
3. Die Farben aus dem Template-Theme nutzen (siehe unten)
4. Die vordefinierten Slide-Layouts und Placeholder verwenden

**KEIN** HTML-Zwischenschritt, **KEINE** manuelle PPTX-Erstellung, **KEINE** anderen Tools.

### Master Template Pfad

Das Template befindet sich im Assets-Ordner dieses Skills:

```python
from pathlib import Path

# Template-Pfad relativ zum Script ermitteln
SKILL_DIR = Path(__file__).parent  # oder angepasst je nach Projektstruktur
MASTER_TEMPLATE = SKILL_DIR / ".agents" / "skills" / "dm-presentation" / "assets" / "MasterTemplateDE.pptx"

# Oder absolut (Fallback)
# MASTER_TEMPLATE = Path("/path/to/workspace/.agents/skills/dm-presentation/assets/MasterTemplateDE.pptx")
```

**Alternativ** über Environment-Variable:
```bash
export DM_MASTER_TEMPLATE=/path/to/.agents/skills/dm-presentation/assets/MasterTemplateDE.pptx
```

### Template-Dimensionen

- **Breite:** 13.33 in (33.87 cm) — Widescreen 16:9
- **Höhe:** 7.50 in (19.05 cm)

## Slide Layouts & Placeholder-Referenz

Das MasterTemplateDE.pptx enthält **27 Layouts** (Index 0–26). Jedes Layout hat vordefinierte Placeholder mit festen Indizes.

### Layout-Übersicht mit Placeholder-Indizes

| Index | Layout Name | Placeholder (idx → Zweck) |
|-------|-------------|---------------------------|
| **0** | **Titel 1** | `0`=Titel, `1`=Untertitel |
| **1** | **Titel 2** | `0`=Titel, `1`=Untertitel |
| **2** | **Agenda** | `0`=Titel, `1`=Inhalt |
| **3** | **Kapiteltrenner** | `1`=Inhalt (kein Titel-PH!) |
| **4** | **Text 1-spaltig** | `0`=Titel, `1`=Inhalt, `13`=Subheadline, `10`=Datum, `11`=Fußzeile, `12`=Foliennr. |
| **5** | **Text 1-spaltig 2** | `0`=Titel, `1`=Inhalt, `13`=Subheadline, `10`=Datum, `11`=Fußzeile, `12`=Foliennr. |
| **6** | **Text 2-spaltig** | `0`=Titel, `1`=Spalte1, `14`=Spalte2, `13`=Sub1, `15`=Sub2, `10`=Datum, `11`=Fußzeile, `12`=Foliennr. |
| **7** | **Text 3-spaltig** | `0`=Titel, `1`=Sp1, `14`=Sp2, `16`=Sp3, `13`/`15`/`17`=Subs, `10`=Datum, `11`=Fußzeile, `12`=Foliennr. |
| **8** | **Text + Bild** | `0`=Titel, `1`=Inhalt, `14`=**Bild**, `13`=Subheadline, `10`=Datum, `11`=Fußzeile, `12`=Foliennr. |
| **9** | **Bild vollflächig** | `0`=Titel, `14`=**Bild**, `15`=SmartArt, `10`=Datum, `11`=Fußzeile, `12`=Foliennr. |
| **10** | **Bild + Subheadline** | `0`=Titel, `14`=**Bild**, `13`=Subheadline, `10`=Datum, `11`=Fußzeile, `12`=Foliennr. |
| **11** | **2 Bilder** | `0`=Titel, `14`=Bild1, `16`=Bild2, `15`=SmartArt, `10`=Datum, `11`=Fußzeile, `12`=Foliennr. |
| **12** | **3 Bilder** | `0`=Titel, `14`=Bild1, `16`=Bild2, `17`=Bild3, `15`=SmartArt |
| **13** | **4 Bilder** | `0`=Titel, `14`–`18`=Bilder, `15`=SmartArt |
| **14** | **3 Bilder + Texte** | `0`=Titel, `1`/`14`/`16`=Texte, `17`/`18`/`19`=Bilder |
| **15** | **Statement + Bild 1** | `0`=Titel, `1`=Statement, `13`=**Bild** |
| **16** | **Statement + Bild 2** | `0`=Titel, `1`=Statement, `13`=**Bild** |
| **17** | **Statement 1** | `0`=Titel, `1`=Statement |
| **18** | **Statement 2** | `0`=Titel, `1`=Statement |
| **19** | **Statement 3** | `0`=Titel, `1`=Statement |
| **20** | **Logo 4** | *(keine Placeholder)* |
| **21** | **Danke 1** | `0`=Titel, `1`=Inhalt |
| **22** | **Danke 2** | `0`=Titel, `1`=Inhalt |
| **23** | **Logo 1** | *(keine Placeholder)* |
| **24** | **Logo 2** | *(keine Placeholder)* |
| **25** | **Logo 3** | *(keine Placeholder)* |
| **26** | **Nur Headline** | `0`=Titel, `10`=Datum, `11`=Fußzeile, `12`=Foliennr. |

### Empfohlene Layout-Zuordnung nach Folienart

| Folienart | Empfohlenes Layout | Index |
|-----------|--------------------|-------|
| Titelfolie | Titel 1 | **0** |
| Agenda/Überblick | Agenda | **2** |
| Kapitelübergang | Kapiteltrenner | **3** |
| Text mit Bullets | Text 1-spaltig | **4** |
| Text mit Bild | Text + Bild | **8** |
| Vollbild (Diagramm) | Bild vollflächig | **9** |
| Vergleich 2 Spalten | Text 2-spaltig | **6** |
| Vergleich 3 Spalten | Text 3-spaltig | **7** |
| Zitat/Statement | Statement 1–3 | **17–19** |
| Abschlussfolie | Danke 1 | **21** |

## Brand Guidelines — Farben aus dem Template-Theme

Die Farben sind **direkt aus dem Theme des MasterTemplateDE.pptx extrahiert** und MÜSSEN konsistent verwendet werden.

### Theme Color Scheme: "Doppelmayr"

| Theme-Rolle | Hex | RGB | Verwendung |
|-------------|-----|-----|------------|
| **dk1** (Dark 1) | `#051E6E` | (5, 30, 110) | Primärtext, Überschriften, dunkle Hintergründe |
| **lt1** (Light 1) | `#FFFFFF` | (255, 255, 255) | Helle Hintergründe, Text auf dunklem Grund |
| **dk2** (Dark 2) | `#051E6E` | (5, 30, 110) | Sekundärer dunkler Text |
| **lt2** (Light 2) | `#0555FA` | (5, 85, 250) | Primärer Akzent, Links, interaktive Elemente |
| **accent1** | `#051E6E` | (5, 30, 110) | Primärfarbe für Shapes |
| **accent2** | `#0555FA` | (5, 85, 250) | Sekundärer Akzent |
| **accent3** | `#8BB0FB` | (139, 176, 251) | Tertiärer Akzent, Highlights |
| **accent4** | `#EBF0F5` | (235, 240, 245) | Dezente Hintergründe, Cards |
| **accent5** | `#C8CCD0` | (200, 204, 208) | Rahmen, Trennlinien, Captions |
| **accent6** | `#FF6E5A` | (255, 110, 90) | CTA-Highlights, Betonung |
| **hlink** | `#051E6E` | (5, 30, 110) | Hyperlinks |
| **folHlink** | `#051E6E` | (5, 30, 110) | Besuchte Hyperlinks |

### Farb-Kurzreferenz für Scripts

```python
from pptx.dml.color import RGBColor

# ── Doppelmayr Theme-Farben (aus MasterTemplateDE.pptx) ──
DM_DARK_BLUE   = RGBColor(0x05, 0x1E, 0x6E)  # #051E6E — dk1/dk2/accent1, Primärtext
DM_PRIMARY_BLUE = RGBColor(0x05, 0x55, 0xFA)  # #0555FA — lt2/accent2, Akzent
DM_LIGHT_BLUE  = RGBColor(0x8B, 0xB0, 0xFB)   # #8BB0FB — accent3, Highlights
DM_LIGHT_GRAY  = RGBColor(0xEB, 0xF0, 0xF5)   # #EBF0F5 — accent4, Hintergründe
DM_GRAY        = RGBColor(0xC8, 0xCC, 0xD0)   # #C8CCD0 — accent5, Rahmen
DM_CORAL       = RGBColor(0xFF, 0x6E, 0x5A)   # #FF6E5A — accent6, CTA
DM_WHITE       = RGBColor(0xFF, 0xFF, 0xFF)    # #FFFFFF — lt1, helle Flächen
```

### Farbverwendung

- **Überschriften & Navigation:** Dark Blue `#051E6E`
- **Primäre Buttons & Links:** Primary Blue `#0555FA`
- **CTA-Elemente (sparsam!):** Coral `#FF6E5A`
- **Cards & Hintergründe:** Light Gray-Blue `#EBF0F5`
- **Rahmen & Trennlinien:** Gray `#C8CCD0`
- **Sekundäre Akzente:** Light Blue `#8BB0FB`
- **Text auf dunklem Grund:** White `#FFFFFF`

### Typography — aus dem Template-Theme

**Font Scheme: "Doppelmayr"**

| Rolle | Schriftart | Fallback |
|-------|-----------|----------|
| **Major** (Überschriften) | Graphik Wide Semibold | Arial |
| **Minor** (Fließtext) | Graphik Regular | Arial |

### Typography-Hierarchie für Folien

| Element | Font | Größe | Farbe |
|---------|------|-------|-------|
| Folientitel (H1) | Graphik Wide Semibold | 28–36pt | `#FFFFFF` auf dunkel, `#051E6E` auf hell |
| Untertitel | Graphik Wide Semibold | 18–22pt | `#8BB0FB` oder `#051E6E` |
| Body Text | Graphik Regular | 14–16pt | `#051E6E` |
| Bullet Points | Graphik Regular | 14pt | `#051E6E` |
| Fußzeile/Caption | Graphik Regular | 10–11pt | `#C8CCD0` |

## PowerPoint-Generierung mit python-pptx — Pflicht-Workflow

### Voraussetzungen

```bash
pip install python-pptx
# Optional für Bilder:
pip install Pillow
```

### Standard-Script-Struktur

Jedes Präsentations-Script MUSS diesem Muster folgen:

```python
#!/usr/bin/env python3
"""
Erstellt eine [THEMA] Präsentation im Doppelmayr Layout.
Verwendet das MasterTemplateDE.pptx als Vorlage.
"""

from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pathlib import Path

# ── Pfade ──
MASTER_TEMPLATE = Path(__file__).parent / "path" / "to" / "MasterTemplateDE.pptx"
# Fallback: Environment-Variable
import os
if not MASTER_TEMPLATE.exists():
    env_path = os.environ.get("DM_MASTER_TEMPLATE")
    if env_path:
        MASTER_TEMPLATE = Path(env_path)

OUTPUT_FILE = Path(__file__).parent / "Presentation_Output.pptx"
IMAGES_DIR = Path(__file__).parent / "images"  # optional

# ── Doppelmayr Theme-Farben ──
DM_DARK_BLUE    = RGBColor(0x05, 0x1E, 0x6E)  # #051E6E
DM_PRIMARY_BLUE = RGBColor(0x05, 0x55, 0xFA)   # #0555FA
DM_LIGHT_BLUE   = RGBColor(0x8B, 0xB0, 0xFB)   # #8BB0FB
DM_LIGHT_GRAY   = RGBColor(0xEB, 0xF0, 0xF5)   # #EBF0F5
DM_GRAY         = RGBColor(0xC8, 0xCC, 0xD0)    # #C8CCD0
DM_CORAL        = RGBColor(0xFF, 0x6E, 0x5A)    # #FF6E5A
DM_WHITE        = RGBColor(0xFF, 0xFF, 0xFF)     # #FFFFFF

# ── Layout-Indizes (MasterTemplateDE.pptx) ──
LAYOUT_TITEL_1       = 0   # Titel 1: idx 0=Titel, 1=Untertitel
LAYOUT_TITEL_2       = 1   # Titel 2: idx 0=Titel, 1=Untertitel
LAYOUT_AGENDA        = 2   # Agenda: idx 0=Titel, 1=Inhalt
LAYOUT_KAPITELTRENNER = 3  # Kapiteltrenner: idx 1=Inhalt (kein Titel!)
LAYOUT_TEXT_1SP      = 4   # Text 1-spaltig: idx 0=Titel, 1=Inhalt, 13=Sub
LAYOUT_TEXT_1SP_2    = 5   # Text 1-spaltig 2: idx 0=Titel, 1=Inhalt, 13=Sub
LAYOUT_TEXT_2SP      = 6   # Text 2-spaltig: idx 0=Titel, 1=Sp1, 14=Sp2
LAYOUT_TEXT_3SP      = 7   # Text 3-spaltig: idx 0=Titel, 1=Sp1, 14=Sp2, 16=Sp3
LAYOUT_TEXT_BILD     = 8   # Text + Bild: idx 0=Titel, 1=Inhalt, 14=Bild
LAYOUT_BILD_VOLL     = 9   # Bild vollflächig: idx 0=Titel, 14=Bild
LAYOUT_BILD_SUB      = 10  # Bild + Subheadline: idx 0=Titel, 14=Bild, 13=Sub
LAYOUT_2_BILDER      = 11  # 2 Bilder: idx 0=Titel, 14=Bild1, 16=Bild2
LAYOUT_3_BILDER      = 12  # 3 Bilder: idx 0=Titel, 14/16/17=Bilder
LAYOUT_4_BILDER      = 13  # 4 Bilder: idx 0=Titel, 14/16/17/18=Bilder
LAYOUT_3_BILDER_TEXT = 14  # 3 Bilder + Texte: idx 0=Titel, 1/14/16=Texte, 17/18/19=Bilder
LAYOUT_STATEMENT_B1  = 15  # Statement + Bild 1: idx 0=Titel, 1=Statement, 13=Bild
LAYOUT_STATEMENT_B2  = 16  # Statement + Bild 2: idx 0=Titel, 1=Statement, 13=Bild
LAYOUT_STATEMENT_1   = 17  # Statement 1: idx 0=Titel, 1=Statement
LAYOUT_STATEMENT_2   = 18  # Statement 2: idx 0=Titel, 1=Statement
LAYOUT_STATEMENT_3   = 19  # Statement 3: idx 0=Titel, 1=Statement
LAYOUT_LOGO_4        = 20  # Logo 4 (keine Placeholder)
LAYOUT_DANKE_1       = 21  # Danke 1: idx 0=Titel, 1=Inhalt
LAYOUT_DANKE_2       = 22  # Danke 2: idx 0=Titel, 1=Inhalt
LAYOUT_LOGO_1        = 23  # Logo 1 (keine Placeholder)
LAYOUT_LOGO_2        = 24  # Logo 2 (keine Placeholder)
LAYOUT_LOGO_3        = 25  # Logo 3 (keine Placeholder)
LAYOUT_NUR_HEADLINE  = 26  # Nur Headline: idx 0=Titel


# ── Hilfsfunktionen ──

def remove_example_slides(prs):
    """Entfernt alle Beispielfolien aus dem geladenen Template."""
    while len(prs.slides) > 0:
        rId = prs.slides._sldIdLst[0].rId
        prs.part.drop_rel(rId)
        del prs.slides._sldIdLst[0]


def get_placeholder(slide, idx):
    """Gibt den Placeholder mit dem gegebenen Index zurück oder None."""
    for ph in slide.placeholders:
        if ph.placeholder_format.idx == idx:
            return ph
    return None


def set_text(slide, idx, text):
    """Setzt den Text eines Placeholders."""
    ph = get_placeholder(slide, idx)
    if ph is not None:
        ph.text = text


def set_bullets(slide, idx, items):
    """Setzt Bullet-Points in einen Placeholder."""
    ph = get_placeholder(slide, idx)
    if ph is None:
        return
    tf = ph.text_frame
    tf.clear()
    for i, item in enumerate(items):
        p = tf.paragraphs[0] if i == 0 else tf.add_paragraph()
        p.text = item
        p.level = 0


def add_title_slide(prs, title, subtitle, layout_idx=LAYOUT_TITEL_1):
    """Fügt eine Titelfolie hinzu."""
    slide = prs.slides.add_slide(prs.slide_layouts[layout_idx])
    set_text(slide, 0, title)
    set_text(slide, 1, subtitle)
    return slide


def add_chapter_slide(prs, title):
    """Fügt einen Kapiteltrenner hinzu."""
    slide = prs.slides.add_slide(prs.slide_layouts[LAYOUT_KAPITELTRENNER])
    set_text(slide, 1, title)  # Kapiteltrenner hat kein idx=0!
    return slide


def add_text_slide(prs, title, content, layout_idx=LAYOUT_TEXT_1SP):
    """Fügt eine Textfolie hinzu. content kann str oder list sein."""
    slide = prs.slides.add_slide(prs.slide_layouts[layout_idx])
    set_text(slide, 0, title)
    if isinstance(content, list):
        set_bullets(slide, 1, content)
    else:
        set_text(slide, 1, content)
    return slide


def add_text_image_slide(prs, title, content, image_path=None):
    """Fügt eine Text+Bild-Folie hinzu (Layout 8)."""
    slide = prs.slides.add_slide(prs.slide_layouts[LAYOUT_TEXT_BILD])
    set_text(slide, 0, title)
    if isinstance(content, list):
        set_bullets(slide, 1, content)
    else:
        set_text(slide, 1, content)
    if image_path and Path(image_path).exists():
        ph = get_placeholder(slide, 14)
        if ph is not None:
            ph.insert_picture(str(image_path))
    return slide


def add_agenda_slide(prs, title, items):
    """Fügt eine Agenda-Folie hinzu."""
    slide = prs.slides.add_slide(prs.slide_layouts[LAYOUT_AGENDA])
    set_text(slide, 0, title)
    set_bullets(slide, 1, items)
    return slide


def add_end_slide(prs, title="Vielen Dank!", subtitle=""):
    """Fügt eine Abschlussfolie hinzu."""
    slide = prs.slides.add_slide(prs.slide_layouts[LAYOUT_DANKE_1])
    set_text(slide, 0, title)
    set_text(slide, 1, subtitle)
    return slide


# ── Hauptfunktion ──

def create_presentation():
    """Erstellt die Präsentation."""
    print(f"📂 Template: {MASTER_TEMPLATE}")
    print(f"📂 Output:   {OUTPUT_FILE}")

    prs = Presentation(str(MASTER_TEMPLATE))
    remove_example_slides(prs)

    # === TITELFOLIE ===
    add_title_slide(prs, "Präsentationstitel", "Untertitel der Präsentation")

    # === AGENDA ===
    add_agenda_slide(prs, "Agenda", [
        "1. Erstes Thema",
        "2. Zweites Thema",
        "3. Zusammenfassung",
    ])

    # === KAPITEL ===
    add_chapter_slide(prs, "Kapitel 1")

    # === TEXTFOLIEN ===
    add_text_slide(prs, "Folientitel", [
        "Erster Bullet-Point",
        "Zweiter Bullet-Point",
        "Dritter Bullet-Point",
    ])

    add_text_slide(prs, "Fließtext-Folie",
        "Hier steht ein längerer Absatz mit Fließtext, "
        "der den Inhalt der Folie beschreibt."
    )

    # === TEXT + BILD ===
    add_text_image_slide(prs, "Titel mit Bild", [
        "Punkt 1 neben dem Bild",
        "Punkt 2 neben dem Bild",
    ], IMAGES_DIR / "example.jpg")

    # === ABSCHLUSS ===
    add_end_slide(prs, "Vielen Dank!", "Fragen?")

    # === SPEICHERN ===
    OUTPUT_FILE.parent.mkdir(parents=True, exist_ok=True)
    prs.save(str(OUTPUT_FILE))
    print(f"✅ Erstellt: {OUTPUT_FILE} ({len(prs.slides)} Folien)")


if __name__ == "__main__":
    create_presentation()
```

### Wichtige Regeln für Script-Erstellung

1. **IMMER** `Presentation(str(MASTER_TEMPLATE))` verwenden — nie `Presentation()` ohne Template
2. **IMMER** `remove_example_slides(prs)` nach dem Laden aufrufen
3. **Placeholder-Indizes** gemäß Layout-Referenz verwenden (nicht raten!)
4. **Bilder** über `ph.insert_picture()` in Bild-Placeholder (idx=14, 16, 17, 18, 19) einfügen
5. **Schriften** werden automatisch vom Template-Theme übernommen — manuelles Setzen nur bei Bedarf
6. **Farben** nur aus der Theme-Palette verwenden (siehe oben)
7. Output-Pfad MUSS außerhalb des Skills-Verzeichnisses liegen

## Brand Voice & Messaging

### Taglines & Slogans

- **Primary**: "Mobility on the next level"
- **Company Vision**: "Movement. Progress. Mobility."
- **Culture**: "Shaping the future together"

### Key Brand Messages

- World market leader for rope-propelled mobility
- 130+ years of pioneering spirit
- Innovative transport systems with maximum comfort and safety
- Solutions for mountain tourism, urban transport, and material handling
- 3,000+ employees in 50 countries
- 14,800+ installations worldwide

### Content Tone

- Professional and technical yet accessible
- Innovation-focused and forward-looking
- Emphasizing quality, safety, and reliability
- Customer-centric ("customized solutions")
- Sustainability-conscious ("sustainable technology for generations")

## Assets

### Master Template

Das `MasterTemplateDE.pptx` in `assets/` ist die **einzige zulässige Vorlage** für alle PowerPoint-Präsentationen.

**Inhalt:**
- 27 vordefinierte Slide-Layouts mit Doppelmayr-Branding
- Theme mit Farbschema "Doppelmayr" und Font-Schema "Doppelmayr"
- Graphik Wide Semibold (Überschriften) / Graphik Regular (Body)
- 16 Beispielfolien (werden beim Laden entfernt)

### Example Presentations

Der `examples/`-Ordner enthält vollständige, funktionierende Beispiel-Scripts:

| Datei | Beschreibung |
|-------|-------------|
| `create_ea_frameworks_presentation.py` | Enterprise Architecture Frameworks |
| `create_ea_ki_presentation.py` | Enterprise Architecture & AI |
| `create_time_presentation.py` | Gartner TIME Model |
| `ea_frameworks_images/` | Stock-Bilder für EA Frameworks |
| `ea_ki_images/` | Stock-Bilder für EA & KI |

## Social Media & Digital Presence

- **Facebook**: facebook.com/doppelmayrgaraventa
- **LinkedIn**: linkedin.com/company/doppelmayr-seilbahnen-gmbh
- **YouTube**: youtube.com/@DoppelmayrGroup
- **Instagram**: instagram.com/doppelmayr.official
- **Website**: doppelmayr.com

## The Doppelmayr Group Brands

- **Doppelmayr**: Ropeways in separate operation, material handling, automated people movers
- **Garaventa**: Funicular ropeways, aerial tramways, special ropeways
- **CWA**: Swiss cabin design (OMEGA, ATRIA cabins)
- **Frey Stans**: Swiss control technology for ropeway construction
- **Carvatech**: Engineering & bodymaking for custom solutions
- **Gassner**: Chair and steel structures for ropeway construction
- **Input**: Project development for experience concepts
- **LTW**: High-performance intralogistics systems
