# CluPilot — verbindliche Regeln (Repo-Teil) Die **Vollfassung der Regeln R1–R17 liegt beim Nutzer**, nicht im Repo. Die Kurzfassung steht in `docs/handoffs/2026-07-25-clupilot-state-handoff.md` §9. Bei Konflikt: **STOP & fragen.** Diese Datei hält die Regeln fest, die aus konkreten Fehlern im laufenden Betrieb entstanden sind — sie sind nicht verhandelbar und werden per Test erzwungen. --- ## R18 — Icon-Größe und Zeilenumbruch **Ein Icon steht neben seinem Text, nie darüber, und nie größer als bestellt.** Verboten: 1. **Icon zwingt den Text auf eine zweite Zeile.** Ein Navigationseintrag, ein Button, ein Tabellen-Action ist **einzeilig**. Zwei Zeilen sind nur erlaubt, wenn der Text selbst bewusst zweizeilig gesetzt ist (Label + Unterzeile) — dann steht das Icon links davon, nicht darüber. 2. **Icon größer als die Zeile, in der es sitzt.** Standard ist `size-5` (20px) in der Navigation, `size-4` (16px) in Buttons, Tabellen und Fließtext. Größer nur, wenn es als eigenständiges Element gemeint ist (Leerzustand, Statusplakette). ### Warum das zweimal schiefging - **Zeilenumbruch.** Tailwinds Preflight setzt `svg { display: block }`. Ein Icon in einem *inline*-Elternteil schiebt den folgenden Text damit auf die nächste Zeile. Genau so wurde aus dem Eintrag „Zugangsdaten" ein doppelt so hoher Kasten mit Schloss oben und Wort darunter. - **Größe.** `.size-4` und `.size-5` haben **dieselbe Spezifität**, also entscheidet die Reihenfolge im Stylesheet — und Tailwind gibt `.size-4` *vor* `.size-5` aus. Eine Komponente, die `size-5` bedingungslos mitmergt, überstimmt damit **jedes** `class="size-4"` am Aufrufort. Alle so geschriebenen Icons liefen still auf 20px. ### Wie es jetzt gebaut ist - `resources/views/components/ui/icon.blade.php` setzt seine Standardgröße **nur**, wenn der Aufrufort keine `size-`/`w-`/`h-`-Klasse mitgibt, und rendert `inline-block shrink-0 align-middle` statt des Preflight-`block`. - `resources/views/components/ui/nav-item.blade.php` legt Label und Icon in eine eigene Flex-Zeile, damit ein Icon auch im falschen Slot daneben landet. - Icons in `` gehören in ``, nicht in den Default-Slot. ### Erzwungen durch `tests/Feature/IconLayoutTest.php` — Größe des Aufruforts gewinnt, Icon bleibt `inline-block`, Nav-Eintrag bleibt einzeilig aus beiden Slots, und kein Blade-File im Repo darf ein Icon am Icon-Slot vorbeischmuggeln.