html, body {
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
}

/* ---- Design-Refresh: ruhiger, rahmenbasierter Enterprise-Look (theme-getrieben) ----
   LEITSATZ: Farbe bedeutet bedienbar. Der Teal-Akzent gehört Links, dem aktiven Menüpunkt, dem aktiven
   Tab und der primären Schaltfläche — allem, was auf einen Klick reagiert. Reine Zierde bleibt neutral;
   Statusfarben (Risiko, überfällig) sind davon ausgenommen, sie tragen eine Aussage. */

/* Einheitlicher, theme-getriebener Tastatur-Fokus (WCAG 2.4.7) */
:focus-visible { outline: 2px solid var(--mud-palette-secondary); outline-offset: 2px; }

/* Rahmenbasierte Flächen: Karten/Drawer ohne Schatten; Schatten nur für schwebende Layer */
.mud-paper { transition: border-color .15s ease, box-shadow .15s ease, background-color .15s ease; }
.mud-drawer { box-shadow: none !important; }

/* ---- Zeilenlänge auf breiten Monitoren begrenzen ----
   MudContainer steht auf MaxWidth.ExtraLarge, das rechnet sich zu `max-width: none` auf — der Container
   begrenzt also nichts. Bis ~1600 px Fensterbreite fällt das nicht auf; auf einem 24- oder 27-Zoll-Schirm
   laufen Fließtext und Tabellenköpfe über die volle Breite, und der Blick verliert beim Zeilenwechsel die
   Spur. 1440 px lässt breite Tabellen weiterhin atmen und deckelt nur die Extreme. */
.mud-main-content .mud-container-maxwidth-xl { max-width: 1440px; }

/* ---- Radienskala: Behälter 12 px, Bedienelemente 8 px ----
   Vorher standen sechs Einzelwerte nebeneinander (14 / 10 / 9 / 8 …). Niemandem fällt ein einzelner davon
   auf, aber die Summe liest sich beliebig. Zwei Stufen, konsequent angewendet, wirken gebaut statt gewachsen. */

/* ---- Karten: Haarlinie + Hauch Tiefe. Kein Schweben beim Überfahren ----
   Eine Karte, die sich beim Zeigen anhebt, verspricht eine Handlung, die es meist nicht gibt. Die Kante
   reagiert, die Höhe bleibt — ruhiger und ehrlicher gegenüber dem, was anklickbar ist. */
.mud-paper.mud-paper-outlined {
    border-radius: 12px;
    border-color: var(--mud-palette-lines-default);
    box-shadow: 0 1px 2px rgba(16, 24, 40, .04);
}
.mud-paper.mud-paper-outlined:hover {
    border-color: color-mix(in srgb, var(--mud-palette-text-secondary) 28%, var(--mud-palette-lines-default));
}
/* Eingebettete Flächen (Inline-Bearbeiten/Sub-Panels) bleiben flach und ruhig */
.mud-paper.mud-paper-outlined .mud-paper.mud-paper-outlined { box-shadow: none; }
.mud-paper.mud-paper-outlined .mud-paper.mud-paper-outlined:hover { box-shadow: none; }

/* Buttons: flach & klar (kein Schatten), klare Radien, ruhige Outlines */
.mud-button-root { border-radius: 8px; }

/* ---- Knopfhöhe an die Feldhöhe angleichen ----
   Gemessen: ein Knopf in Standardgröße ist 37 px hoch, ein Eingabefeld mit Margin.Dense 40. Wo beide
   in einer Zeile stehen (etwa /suche: Suchfeld + „Suchen"), zentriert `align-items: center` sie zwar
   sauber — der Knopf sitzt also nicht schief, sondern ist symmetrisch 2 px oben und unten eingerückt.
   Er liest sich dadurch als das kleinere Element, obwohl beide dieselbe Bedienzeile bilden.
   40 px als Mindesthöhe bringt beide auf eine Kante und vergrößert nebenbei das Antippziel.
   Bewusst NUR die Standardgröße (`-size-medium`): `Size.Small` ist an vielen Stellen absichtlich
   klein (Tabellenzeilen, Reiterleisten) und bliebe sonst nicht mehr klein.

   Nachtrag, am laufenden System gemessen: eine Stelle rutschte trotzdem durch. `MudButtonGroup`
   gibt seine Größe NICHT an die Knöpfe weiter — die Gruppe trägt `mud-button-group-outlined-size-small`,
   ihre Kinder aber `mud-button-text-size-medium`. Die drei Segmente Monat/Woche/Tag auf /kalender
   (ebenso /rechnungen und /tools) wuchsen deshalb von 34 auf 40 px, obwohl im Markup `Size.Small`
   steht — und standen damit neben 26-px-Symbolknöpfen. Die Gruppe sagt, was gemeint war; danach
   richten wir uns. */
.mud-button-root[class*="-size-medium"]:not(.mud-icon-button) { min-height: 40px; }
[class*="mud-button-group"][class*="-size-small"] .mud-button-root { min-height: 0; }
.mud-button-filled { box-shadow: none !important; }
.mud-button-filled:hover { box-shadow: 0 2px 8px -2px color-mix(in srgb, var(--mud-palette-primary) 45%, transparent) !important; }
.mud-button-outlined { border-color: var(--mud-palette-lines-inputs); }

/* Chips etwas weicher und ruhiger */
.mud-chip { font-weight: 500; }

/* ---- Dialogfußzeile darf umbrechen ----
   MudBlazor stellt `.mud-dialog-actions` auf `flex-wrap: nowrap`. Solange dort drei Knöpfe stehen,
   fällt das nicht auf. Die zweistufige Löschabfrage im Termindialog macht vier daraus
   („Wirklich löschen?", „Abbrechen", „Schließen", „Speichern") — und weil MudBlazor-Knöpfe
   `flex-shrink: 1` haben, schrumpfen dann alle vier. Am laufenden System bei 390 px gemessen:
   die Beschriftungen standen 6 bis 15 px über ihre eigenen Knöpfe hinaus, „Wirklich löschen?"
   bekam 54 px Platz für 83 px Text. Der Zeilenumlauf kostet 27 px Höhe und behält jede Beschriftung
   ganz. `gap: 8px` setzt MudBlazor schon für beide Achsen — die zweite Reihe sitzt also richtig,
   ohne dass hier ein Abstand nachgereicht werden muss. */
.mud-dialog-actions { flex-wrap: wrap; }

/* Eingabefelder: konsistente, weiche Radien */
.mud-input-control .mud-input.mud-input-outlined .mud-input-outlined-border { border-radius: 8px; }

/* Tabellen: ruhiger Header, tabellarische Ziffern, angenehme Zeilenhöhe, dezenter Hover

   ACHTUNG, am laufenden System gemessen (gleiche Falle wie beim aktiven Navigationspunkt):
   `.mud-table-head .mud-table-cell` (0,2,0) war für Größe, Farbe und Laufweite TOTER CODE.
   MudBlazor setzt `.mud-table-root .mud-table-head .mud-table-cell` (0,3,0) — spezifischer UND
   später geladen (app.css steht vor MudBlazor.min.css, bei Gleichstand gewinnt also MudBlazor):
       color: var(--mud-palette-text-primary); font-size: var(--mud-typography-subtitle2-size);
   Gemessen vorher: 15,2 px in Text-Primär — also praktisch dieselbe Anmutung wie die 14-px-Datenzeile
   darunter. Der Kopf las sich nicht als Kopf, sondern konkurrierte mit den Daten. Durchgekommen war
   nur `font-weight: 600` (und das auch nur, weil MudBlazors Regel es gar nicht setzt).
   Vier Klassen (0,4,0) schlagen die Regel sicher — ohne !important, das hier nichts erklären würde.
   Gemessen nachher: 12,48 px, Text-Sekundär (#5B6573), Laufweite 0,37 px. */
.mud-table-root .mud-table-head .mud-table-row .mud-table-cell {
    font-weight: 600;
    font-size: .78rem;
    letter-spacing: .03em;
    text-transform: none;
    color: var(--mud-palette-text-secondary);
}
.mud-table-cell, td, th { font-variant-numeric: tabular-nums; font-feature-settings: "tnum" 1, "lnum" 1; }
.mud-table-root .mud-table-row { min-height: 44px; }
.mud-table-root tbody .mud-table-row:hover { background: color-mix(in srgb, var(--mud-palette-action-default) 8%, transparent); }
.num { font-variant-numeric: tabular-nums; }

/* ---- Bildlaufschatten: zeigt an, dass rechts noch Spalten stehen ----
   Am laufenden System bei 1024 px gemessen (Projekte, 8 Spalten): der Tabellenbehälter ist 701 px
   breit, die Tabelle braucht 888 — 187 px liegen ausserhalb, darunter „Risiko", also genau die Spalte,
   die den Zustand trägt. MudBlazor stellt den Behälter auf `overflow-x:auto`, es lässt sich also
   scrollen — nur sagt das niemand. Die Tabelle sah schlicht aus, als endete sie bei „Frist".
   Die Spalten zu opfern wäre der falsche Handel; stattdessen bekommt die Kante einen Hinweis.

   Technik: zwei Verlaufspaare. Die deckenden (`local`) laufen MIT dem Inhalt und schieben sich am
   jeweiligen Ende über den Schatten — der Hinweis verschwindet also von selbst, sobald man dort
   angekommen ist. Die Schatten (`scroll`) stehen fest am Behälterrand.
   Der Schatten ist über die Textfarbe gemischt statt schwarz: auf der dunklen Fläche (#23282F) wäre
   ein schwarzer Schatten unsichtbar, so wird er dort hell und bleibt lesbar. */
.mud-table-container {
    background-image:
        linear-gradient(to right, var(--mud-palette-surface) 40%, transparent),
        linear-gradient(to left, var(--mud-palette-surface) 40%, transparent),
        linear-gradient(to right, color-mix(in srgb, var(--mud-palette-text-primary) 18%, transparent), transparent),
        linear-gradient(to left, color-mix(in srgb, var(--mud-palette-text-primary) 18%, transparent), transparent);
    background-position: left center, right center, left center, right center;
    background-size: 34px 100%, 34px 100%, 14px 100%, 14px 100%;
    background-repeat: no-repeat;
    background-attachment: local, local, scroll, scroll;
}

/* Bezeichner (erste Spalte: Projekt-/Rechnungsnummer) und rechtsbündige Zahl-/Geldspalten sind
   atomar — nie umbrechen (kein „RE-2026-⏎0002", kein „66.045,00 ⏎€"). Gilt für alle Listen-Views. */
.mud-table-cell:first-child { white-space: nowrap; }
.mud-table-cell[style*="text-align: right"],
.mud-table-cell[style*="text-align:right"] { white-space: nowrap; }

/* Kompaktere, symmetrische Zellenpolsterung (statt 16/24 px): schafft Breite, damit breite Listen
   (Projekte 8 Spalten, Rechnungen 9) alle Spalten ohne Horizontal-Scroll zeigen.
   !important, weil MudBlazors eigene Zellregel höher spezifisch ist (Muster wie .mud-drawer-Override). */
.mud-table-root .mud-table-cell { padding-left: 12px !important; padding-right: 12px !important; }

/* Rechner-Ergebnistabellen der Tools-Seite sind rohe <table class="tools-result"> (kein MudTable) und
   hatten keine Zellenpolsterung → Kopfzeilen wie „Planung"/„Neu" klebten aneinander. Einheitliche,
   luftige Abstände; !important harmonisiert die vereinzelten inline padding:4px-Zellen. */
.tools-result th { padding: 6px 10px !important; white-space: nowrap; vertical-align: bottom; }
.tools-result td { padding: 5px 10px !important; vertical-align: middle; }

/* Tabs (u. a. die 17er-Leiste der Projektdetails): keine Versalien, Teal-Akzent aktiv */
.mud-tabs .mud-tab { text-transform: none; font-weight: 500; }
.mud-tabs .mud-tab.mud-tab-active { font-weight: 600; color: var(--mud-palette-secondary); }

/* Seitennavigation: ruhiger aktiver Zustand.
   Der aktive Punkt sendete vier Signale gleichzeitig — getönte Fläche, 3-px-Balken links, fettere Schrift
   und Akzentfarbe. Für einen einzigen Zustand ist das dreimal zu viel; der Balken fällt weg.

   ACHTUNG, am laufenden System gemessen: Fläche und Gewicht standen zwar schon hier, wirkten aber NICHT.
   MudBlazor setzt beides über `.mud-navmenu.mud-navmenu-default .mud-nav-link.active:not(…)` bzw.
   `.mud-nav-link.active:not(…) { font-weight: 500 !important }` — beides spezifischer als ein blosses
   `.mud-nav-link.active`. Die Teal-Fläche war toter Code, das Gewicht blieb bei 500. Der aktive Punkt
   lebte in Wahrheit von Textfarbe, Icon und genau dem Balken, der hier entfällt.
   Deshalb die längere Selektorkette: sie schlägt MudBlazors Regel sicher, unabhängig von der Ladereihenfolge.
   Gemessen danach: Abstand Drawer→aktiv von ΔL* 2,9 auf 5,2, Gewicht 600. */
.mud-nav-link { border-radius: 8px; margin: 2px 10px; font-weight: 500; }
.mud-nav-link:hover { background: color-mix(in srgb, var(--mud-palette-text-secondary) 8%, transparent); }
.mud-nav-link.active { color: var(--mud-palette-primary) !important; }
.mud-navmenu .mud-nav-link.active:not(.mud-nav-link-disabled) {
    background: color-mix(in srgb, var(--mud-palette-secondary) 12%, transparent) !important;
    font-weight: 600 !important;
}
.mud-nav-link.active .mud-nav-link-icon { color: var(--mud-palette-secondary) !important; }
/* Rubriken-Überschriften im Drawer dezenter */
.mud-navmenu .mud-typography-overline { letter-spacing: .08em; opacity: .85; }

/* Seitenkopf (Titel + Unterzeile) mit etwas mehr Luft */
.atrium-page-head { margin-bottom: 20px; }

/* AppBar-Suchfeld: theme-fähig mit eigenem Fokusring */
.atrium-appbar-search { height: 38px; border: 1px solid var(--mud-palette-lines-inputs); border-radius: 8px; padding: 0 12px; min-width: 240px; font-size: .9rem; background: var(--mud-palette-surface); color: var(--mud-palette-text-primary); transition: border-color .15s, box-shadow .15s; }
.atrium-appbar-search:focus { border-color: var(--mud-palette-secondary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--mud-palette-secondary) 18%, transparent); outline: none; }

/* Schlanke, unaufdringliche Scrollbars (hell + dunkel über MudBlazor-Variablen) */
* { scrollbar-width: thin; scrollbar-color: var(--mud-palette-action-disabled) transparent; }
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--mud-palette-action-disabled); border-radius: 8px; border: 2px solid transparent; background-clip: content-box; }
::-webkit-scrollbar-thumb:hover { background: var(--mud-palette-action-default); background-clip: content-box; }

a:not(.mud-nav-link):not(.mud-button-root) {
    color: var(--mud-palette-secondary);
    text-decoration: none;
}

a:not(.mud-nav-link):not(.mud-button-root):hover {
    color: var(--mud-palette-secondary-darken);
    text-decoration: underline;
}

.content {
    padding-top: 1.1rem;
}

h1:focus {
    outline: none;
}

.valid.modified:not([type=checkbox]) {
    outline: 1px solid var(--mud-palette-success);
}

.invalid {
    outline: 1px solid var(--mud-palette-error);
}

.validation-message {
    color: var(--mud-palette-error);
}

.blazor-error-boundary {
    background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem;
    background-color: var(--mud-palette-error);
    padding: 1rem 1rem 1rem 3.7rem;
    color: white;
}

    .blazor-error-boundary::after {
        content: "Ein Fehler ist aufgetreten."
    }

.darker-border-checkbox.form-check-input {
    border-color: #929292;
}

.form-floating > .form-control-plaintext::placeholder, .form-floating > .form-control::placeholder {
    color: var(--bs-secondary-color);
    text-align: end;
}

.form-floating > .form-control-plaintext:focus::placeholder, .form-floating > .form-control:focus::placeholder {
    text-align: start;
}

/* ---- Globale Ladeanzeige: schmaler Fortschrittsbalken am oberen Rand (erscheint verzögert bei langen Operationen) ---- */
.atrium-busybar {
    position: fixed;
    inset: 0 0 auto 0;
    z-index: 2000;
    height: 3px;
}
.atrium-busybar .mud-progress-linear { height: 3px; border-radius: 0; }

/* ---- Markdown-Inhalt in Diskussionsbeiträgen: kompakte Abstände, damit Absätze/Listen nicht auseinanderfallen ---- */
.atrium-md > :first-child { margin-top: 0; }
.atrium-md > :last-child { margin-bottom: 0; }
.atrium-md p { margin: 0 0 .4rem; }
.atrium-md ul, .atrium-md ol { margin: .2rem 0 .4rem; padding-left: 1.4rem; }
.atrium-md code { background: var(--mud-palette-background-gray); padding: .05rem .3rem; border-radius: 4px; font-size: .85em; }
.atrium-md pre { background: var(--mud-palette-background-gray); padding: .5rem .6rem; border-radius: 6px; overflow-x: auto; }
.atrium-md pre code { background: none; padding: 0; }
.atrium-md blockquote { margin: .3rem 0; padding-left: .7rem; border-left: 3px solid var(--mud-palette-lines-default); color: var(--mud-palette-text-secondary); }
.atrium-md a { color: var(--mud-palette-primary); }

/* ---- Wiederverbindungs-Overlay (Blazor steuert die Klassen automatisch) ---- */
#components-reconnect-modal {
    display: none;
    position: fixed;
    inset: 0;
    z-index: 3000;
    align-items: center;
    justify-content: center;
    background: rgba(15, 17, 21, .55);
    backdrop-filter: blur(2px);
}
#components-reconnect-modal.components-reconnect-show,
#components-reconnect-modal.components-reconnect-failed,
#components-reconnect-modal.components-reconnect-rejected {
    display: flex;
}
.atrium-reconnect-card {
    background: var(--mud-palette-surface, #ffffff);
    color: var(--mud-palette-text-primary, #1f2937);
    border: 1px solid var(--mud-palette-lines-default, #e6e9ee);
    border-radius: 12px;
    padding: 24px 28px;
    box-shadow: 0 24px 60px -20px rgba(0, 0, 0, .45);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 14px;
    max-width: 340px;
    text-align: center;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
}
.atrium-reconnect-spinner {
    width: 34px;
    height: 34px;
    border-radius: 50%;
    border: 3px solid var(--mud-palette-lines-default, #e6e9ee);
    border-top-color: var(--mud-palette-secondary, #1f6b77);
    animation: atrium-spin .8s linear infinite;
}
@keyframes atrium-spin { to { transform: rotate(360deg); } }
.atrium-reconnect-text { margin: 0; font-size: .95rem; }
.atrium-reconnect-reload {
    display: none;
    border: none;
    border-radius: 8px;
    padding: 8px 18px;
    cursor: pointer;
    font: inherit;
    font-weight: 600;
    color: #fff;
    background: var(--mud-palette-secondary, #1f6b77);
}
/* „Neu laden" nur anbieten, wenn die automatische Wiederverbindung gescheitert/abgelehnt wurde */
#components-reconnect-modal.components-reconnect-failed .atrium-reconnect-reload,
#components-reconnect-modal.components-reconnect-rejected .atrium-reconnect-reload { display: inline-block; }
#components-reconnect-modal.components-reconnect-failed .atrium-reconnect-spinner,
#components-reconnect-modal.components-reconnect-rejected .atrium-reconnect-spinner { display: none; }

/* ---- Bewegung reduzieren, wenn das Betriebssystem es verlangt (WCAG 2.3.3, prefers-reduced-motion) ----
   Neutralisiert Übergänge/Animationen (Karten-Hover, Fokusring, Wiederverbindungs-Spinner, Fortschrittsbalken)
   für Nutzer mit Bewegungsempfindlichkeit. Funktion bleibt erhalten: Zustände wechseln sofort statt animiert,
   Ladehinweise tragen zusätzlich Text. */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-delay: 0ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }
}

/* ---- Touch-Ziele: auf Zeigegeräten ohne feine Maus (Touch/Stift) Icon-Buttons auf komfortable
   Antippgröße (44px) bringen — Size.Small rendert sonst ~30px. Nur unter (pointer: coarse);
   Maus-/Trackpad-Desktop bleibt unverändert kompakt (WCAG 2.5.5). ---- */
@media (pointer: coarse) {
    .mud-button-root.mud-icon-button { min-width: 44px; min-height: 44px; }
}