DokumentationMethacore Apps

Styling

8 min Lesezeit · zuletzt aktualisiert 23. September 2026

Gehostete Apps sehen ohne eigenes Zutun aufgeräumt aus und passen sich dem hellen oder dunklen Thema des Hosts an. Wenn du mehr willst – Vereinsfarben, runde Knöpfe, eine eigene Tab-Leiste –, schreibst du echtes CSS in styling.css. Die Datei liegt im Bereich Code neben app.json und main.js und wird nach den eingebauten Styles geladen: Sie darf alles überschreiben.

Die Tabellen auf dieser Seite entstehen aus STYLE_REFERENCE der Runtime – derselben Quelle, aus der die eingebauten Styles und die Vorlage von styling.css gebaut sind.

Der schnelle Weg: Variablen

Alle Bausteine lesen ihre Farben, Abstände und Radien aus CSS-Variablen. Die meisten Wünsche erfüllst du, indem du ein paar davon in :root überschreibst:

:root {
  --mc-color-primary: #0b7a3b;
  --mc-color-primary-soft: #e3f4ea;
  --mc-radius: 12px;
}
VariableStandardWofür
--mc-color-primary#4c6ef5Hauptfarbe: primäre Knöpfe, aktive Tabs, Fokusrahmen
--mc-color-primary-contrast#ffffffSchrift auf der Hauptfarbe
--mc-color-primary-soft#edf2ffHeller Ton der Hauptfarbe, z. B. Hover in Tabellen, helle Knöpfe
--mc-color-text#1a1b1eTextfarbe
--mc-color-muted#6b7280Gedämpfter Text, Beschriftungen, leere Listen
--mc-color-background#ffffffHintergrund der App und der Eingabefelder
--mc-color-surface#f8f9faHintergrund von Karten und Tabellenköpfen
--mc-color-border#dee2e6Rahmen von Karten, Feldern, Tabellen und Listen
--mc-color-danger#fa5252Farbe für Löschen und Fehler
--mc-color-danger-contrast#ffffffSchrift auf der Fehlerfarbe
--mc-radius8pxEckenradius von Knöpfen, Feldern, Karten und Tabellen
--mc-font-familysystem-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serifSchriftart der App
--mc-font-size14pxGrundschriftgröße
--mc-spacing16pxInnenabstand der App und von Karten
--mc-gap12pxAbstand zwischen Elementen in Karten
--mc-button-padding8px 14pxInnenabstand von Knöpfen
--mc-button-font-weight600Schriftstärke von Knöpfen
--mc-input-height36pxMindesthöhe von Eingabefeldern und Auswahlen
--mc-input-padding7px 10pxInnenabstand von Eingabefeldern
--mc-table-cell-padding8px 12pxInnenabstand von Tabellenzellen
--mc-tabs-indicatorvar(--mc-color-primary)Farbe der Linie unter dem aktiven Tab
--mc-shadow0 4px 16px rgba(0, 0, 0, 0.2)Schatten von Hinweisen (Toasts)

Selektoren

Jeder Baustein trägt feste Klassen, die sich nicht ändern, und das Attribut data-mc-id mit seiner id aus app.json. Eigene Klassen vergibst du im Builder unter „CSS-Klasse“ (in app.json: props.className).

SelektorWas
.mc-appDie ganze App
[data-mc-id="<id>"]Genau ein Element, die ID steht im Builder unter dem Namen des Elements
.mc-stackStapel (Layout)
.mc-gridRaster (Layout)
.mc-cardKarte
.mc-card__titleTitel einer Karte
.mc-headingÜberschrift
.mc-heading--h1 … .mc-heading--h4Überschrift je Ebene
.mc-textText
.mc-buttonKnopf
.mc-button--primaryGefüllter Knopf (Standard)
.mc-button--secondaryHeller, umrandeter oder dezenter Knopf
.mc-button--dangerRoter Knopf
.mc-fieldBeschriftung und Eingabe eines Formularfelds
.mc-inputTextfeld
.mc-selectAuswahl
.mc-checkboxCheckbox mit Beschriftung
.mc-dateDatumsfeld
.mc-tableTabelle
.mc-table__headKopf der Tabelle
.mc-table__rowZeile der Tabelle
.mc-table__cellZelle der Tabelle (auch im Kopf)
.mc-listListe
.mc-list__itemEintrag der Liste
.mc-tabsTabs
.mc-tabs__listLeiste mit den Tab-Knöpfen
.mc-tabs__tabEin Tab-Knopf
.mc-tabs__tab--activeDer aktive Tab-Knopf
.mc-tabs__panelInhalt des aktiven Tabs
.mc-imageBild
.mc-chartDiagramm
.mc-emptyText ohne Einträge in Tabellen und Listen
.mc-toastHinweis außerhalb eines Hosts

Die Klassen folgen einem festen Muster: .mc-<baustein> für den Baustein, .mc-<baustein>__<teil> für seine Teile, .mc-<baustein>--<variante> für Varianten. Andere Klassen und die HTML-Struktur darunter sind nicht zugesichert – verlass dich nur auf die Tabelle oben.

Ein Button mit der id speichern und der CSS-Klasse gross erscheint so im HTML:

<button type="button" class="mc-button mc-button--primary gross" data-mc-id="speichern">Speichern</button>

Beispiele

Vereinsfarben

:root {
  --mc-color-primary: #b3121b;
  --mc-color-primary-contrast: #ffffff;
  --mc-color-primary-soft: #fbe9ea;
  --mc-tabs-indicator: #b3121b;
}

/* Im dunklen Thema setzt die Runtime eigene Farben – dort ebenfalls überschreiben. */
:root[data-mc-theme="dark"] {
  --mc-color-primary: #ff6b72;
  --mc-color-primary-contrast: #1a0507;
  --mc-color-primary-soft: #3a1416;
}

Knöpfe als Pillen

.mc-button {
  border-radius: 999px;
  --mc-button-padding: 10px 20px;
}

.mc-button--primary {
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

.mc-button--danger {
  background: transparent;
  color: var(--mc-color-danger);
}

Dunkle Tab-Leiste

.mc-tabs__list {
  background: #1a1b1e;
  border: none;
  border-radius: var(--mc-radius);
  padding: 4px;
}

.mc-tabs__tab {
  color: #adb5bd;
  border: none;
  border-radius: calc(var(--mc-radius) - 2px);
}

.mc-tabs__tab--active {
  background: #373a40;
  color: #ffffff;
}

Zebra-Tabelle und hervorgehobene Spalte

.mc-table__row:nth-child(even) .mc-table__cell {
  background: var(--mc-color-surface);
}

[data-mc-id="termine"] .mc-table__cell:first-child {
  font-weight: 600;
}

Ein einzelnes Element

[data-mc-id="heading-1"] {
  color: var(--mc-color-primary);
  font-size: 28px;
}

/* eigene Klasse aus dem Builder */
.hinweis {
  border-left: 3px solid var(--mc-color-primary);
  padding-left: 12px;
}

Hintergrundbild

.mc-app {
  background: url("https://cdn.example.de/verein/wappen.png") no-repeat right 16px top 16px / 64px;
}

Was die Sicherheitsrichtlinie erlaubt

Gehostete Apps laufen unter einer strengen Content Security Policy. Für CSS heißt das:

WasErlaubt?
styling.css und weitere .css-Dateien des Entwurfsja
Inline-Stylesja
@import von fremden Adressennein
Bilder in url(…) über https: oder als data:ja
Bilder über http:nein
Webfonts (@font-face, Google Fonts, auch als data:)nein – nimm Systemschriften über --mc-font-family

Die ganze Richtlinie der Run-Shell:

default-src 'none'; script-src 'self' <runtime-cdn>; style-src 'self' 'unsafe-inline' <runtime-cdn>;
img-src https: data:; connect-src 'self' https://*.api.methacore.de <devhub-api>;
frame-ancestors <dashboard> <studio>; base-uri 'none'; form-action 'none'

Helles und dunkles Thema

Der Host sagt der App beim Start, ob er hell oder dunkel ist, und meldet jeden Wechsel. Die Runtime setzt dann data-mc-theme="light" oder "dark" auf das <html>-Element. Außerhalb eines Hosts folgt sie prefers-color-scheme.

Im dunklen Thema überschreibt die Runtime diese Variablen: Hintergrund, Fläche, Text, gedämpfter Text, Rahmen und die drei Primärfarben. Weil :root[data-mc-theme="dark"] spezifischer ist als :root, gewinnt dort die Runtime gegen deine Werte in :root. Willst du deine Farben auch im Dunkeln, setz sie zusätzlich unter :root[data-mc-theme="dark"] (siehe Vereinsfarben). Soll deine App immer gleich aussehen, schreib beide Regeln mit denselben Werten.

Prüf dein Styling in beiden Themen, bevor du eine Version einreichst.

Die Vorlage

Jede neue App startet mit dieser styling.css. Sie führt alle Variablen mit ihren Standardwerten auf; lösch, was du nicht brauchst.

/*
 * styling.css – eigenes Aussehen der App mit echtem CSS.
 *
 * Die Datei wird nach den eingebauten Styles geladen und darf alles überschreiben.
 * Am einfachsten passt du die Variablen unten an. Jeder Baustein hat außerdem feste
 * Klassen (z. B. .mc-button, .mc-table__cell) und das Attribut data-mc-id mit seiner ID,
 * damit du einzelne Elemente ansprechen kannst: [data-mc-id="button-1"] { … }
 * Eigene Klassen vergibst du im Builder unter „CSS-Klasse“.
 *
 * Externe Dateien (@import, url() auf fremde Adressen) blockiert die Sicherheitsrichtlinie der App.
 */

:root {
  /* Hauptfarbe: primäre Knöpfe, aktive Tabs, Fokusrahmen */
  --mc-color-primary: #4c6ef5;
  /* Schrift auf der Hauptfarbe */
  --mc-color-primary-contrast: #ffffff;
  /* Heller Ton der Hauptfarbe, z. B. Hover in Tabellen, helle Knöpfe */
  --mc-color-primary-soft: #edf2ff;
  /* Textfarbe */
  --mc-color-text: #1a1b1e;
  /* Gedämpfter Text, Beschriftungen, leere Listen */
  --mc-color-muted: #6b7280;
  /* Hintergrund der App und der Eingabefelder */
  --mc-color-background: #ffffff;
  /* Hintergrund von Karten und Tabellenköpfen */
  --mc-color-surface: #f8f9fa;
  /* Rahmen von Karten, Feldern, Tabellen und Listen */
  --mc-color-border: #dee2e6;
  /* Farbe für Löschen und Fehler */
  --mc-color-danger: #fa5252;
  /* Schrift auf der Fehlerfarbe */
  --mc-color-danger-contrast: #ffffff;
  /* Eckenradius von Knöpfen, Feldern, Karten und Tabellen */
  --mc-radius: 8px;
  /* Schriftart der App */
  --mc-font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  /* Grundschriftgröße */
  --mc-font-size: 14px;
  /* Innenabstand der App und von Karten */
  --mc-spacing: 16px;
  /* Abstand zwischen Elementen in Karten */
  --mc-gap: 12px;
  /* Innenabstand von Knöpfen */
  --mc-button-padding: 8px 14px;
  /* Schriftstärke von Knöpfen */
  --mc-button-font-weight: 600;
  /* Mindesthöhe von Eingabefeldern und Auswahlen */
  --mc-input-height: 36px;
  /* Innenabstand von Eingabefeldern */
  --mc-input-padding: 7px 10px;
  /* Innenabstand von Tabellenzellen */
  --mc-table-cell-padding: 8px 12px;
  /* Farbe der Linie unter dem aktiven Tab */
  --mc-tabs-indicator: var(--mc-color-primary);
  /* Schatten von Hinweisen (Toasts) */
  --mc-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
}

/* Beispiele – entferne die Kommentarzeichen, um sie zu nutzen:

.mc-button--primary {
  border-radius: 999px;
  text-transform: uppercase;
}

.mc-table__row:nth-child(even) .mc-table__cell {
  background: var(--mc-color-surface);
}

[data-mc-id="heading-1"] {
  color: var(--mc-color-primary);
}
*/