{# Die Systemsymbole: lucide-Pfade (ISC, Teile aus Feather MIT; Hinweis in `LIZENZEN-DRITTER.md`), Strichstärke 1.8, 14 px in Leisten und 16 px im Inhalt (Spec §4). Ein Symbol ersetzt kein Wort. **`sprechblase` steht für die Meldungen** (Vorgabe des Auftraggebers, 07.09.2026). Sie stand hier schon einmal, wurde am 04.09.2026 durch `werkzeug` ersetzt («Icon Meldungen sieht komisch aus») und kommt jetzt zurück. Der Grund für das Hin und Her war nicht die Bedeutung, sondern die Zeichnung: Bis zum 07.09.2026 war `sprechblase` das lucide `message-circle`, und das ist bei 48 px eine Blase, bei 16 px aber ein Kringel mit einem Häkchen. «Das sieht nicht wie eine Sprechblase aus» (Auftraggeber, 07.09.2026). Jetzt ist es `message-square-text`: eckiger Umriss, deutlicher Zipfel, und drei Textlinien füllen die Fläche. Die Linien sind der Unterschied, der die Blase bei 16 px lesbar macht. **Die vier Pfade sind wörtlich die von lucide** (`message-square-text`, Fassung 0.577.0, abgeschrieben aus `web/node_modules/lucide-react`). Eine erste Fassung dieses Eintrags baute den Umriss aus dem älteren `message-square` und zeichnete zwei Linien selbst dazu. Bei 16 px sah das gleich aus, aber der Dateikopf sagt «lucide-Pfade», und dann muss es einer sein. **`werkzeug` ist damit für Anlagen und Wartung reserviert** (Vorgabe des Auftraggebers, 07.09.2026: «Das Werkzeug wäre dann bei Anlagen oder Wartung ideal»). Es steht ab Epic 5 am Anlagenregister und ab Epic 6 an den Wartungsplänen; im Meldungsbereich hat es nichts mehr zu suchen. Ausnahme bis auf Weiteres: der Kasten «Ihre Angaben» im öffentlichen Meldeformular (`bewohner/melden.html`) trägt es noch. Das ist Bestand aus dem 04.09. und gehört beim nächsten Anfassen jener Maske geprüft. **`franken` ist ein Geldschein, kein Waehrungszeichen** (Zahlungsbereich, 06.09.2026). Ein «CHF» oder «Fr.» waere Text in Symbolform; die anderen Eintraege der Leiste zeigen alle einen Gegenstand — Haus, Schluessel, Klammer, Haken. Der Schein passt in diese Reihe und braucht keine Sprache. Der Katalog steht hier und nicht in `_ICONS` in `main.py`: Dort liegen die Kategoriesymbole aus dem Katalog des Mandanten, hier die des Bausystems. Ein unbekannter Name bricht den Aufruf ab, statt ein leeres Element zu liefern. **Die Pruefung steht ausdruecklich da und verlaesst sich nicht auf `PFADE[name]`.** Jinja faellt bei einem fehlenden Schluessel auf ein gleichnamiges ATTRIBUT zurueck, und ein `dict` hat `items`, `keys` und `get`: `symbol("keys")` brach darum mit `TypeError` in der Schleife ab statt mit der Meldung, die der Dateikopf zusichert (achter Code-Review 2026-09-02). #} {#- `hoch`, `runter` und `beides` sind die drei Zeichen des sortierbaren Tabellenkopfs, wortgleich mit `ChevronUp`, `ChevronDown` und `ChevronsUpDown` aus lucide, die das Immotool in `data-table.tsx` benutzt: Derselbe Kopf soll in beiden Anwendungen dasselbe Zeichen tragen (Vorgabe des Auftraggebers, 04.09.2026 — «Tabellenkopf angleichen Immotool»). **Ein Kommentar gehoert NICHT in das Dict darunter.** Jinja liest den `{% set %}`-Ausdruck als Python-artigen Ausdruck; ein `{# … #}` mitten darin ist ein Syntaxfehler, und der faellt erst beim Rendern auf — mit 415 roten Tests auf einen Schlag (gemessen 04.09.2026). **`buch` für das Kontrollbuch** (Epic 10, 22.09.2026). Ein offenes Buch: Der Bereich zeigt einen Bestand, nicht einen Vorgang. Wörtlich `book-open` aus lucide 0.577.0, wie alle anderen Einträge hier. `kalender` wäre der nächstliegende Irrtum: Der Kontrollbereich ist keine Terminliste, auch wenn seine Achse die Zeit ist. **`warnung` für die Baumängel** (Epic 11, Block 11.9, U10b). Ein Warndreieck: Der Bereich zeigt, was am Haus nicht in Ordnung ist — `buch` und `haken` sagten «erledigt», und das ist er nicht. Wörtlich `triangle-alert` aus lucide 0.577.0 (die Datei hält den Pfad dort unter beiden Namen, dem alten `alert-triangle` und dem neuen `triangle-alert`), wie alle anderen Einträge hier. -#} {% set PFADE = { "telefon": ["M5 4h4l2 5-2.5 1.5a11 11 0 0 0 5 5L15 13l5 2v4a2 2 0 0 1-2 2A16 16 0 0 1 3 6a2 2 0 0 1 2-2"], "kalender": ["M3 7a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z", "M3 10h18M8 3v4M16 3v4"], "haken": ["m5 12 5 5L20 7"], "franken": ["M2 6h20v12H2z", "M12 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0-4 0", "M6 12h.01", "M18 12h.01"], "klammer": ["m21 12-8.5 8.5a5 5 0 0 1-7-7L14 5a3.5 3.5 0 0 1 5 5l-8.5 8.5a2 2 0 0 1-3-3L16 7"], "pfeil": ["M5 12h14M13 6l6 6-6 6"], "hoch": ["m6 15 6-6 6 6"], "runter": ["m6 9 6 6 6-6"], "beides": ["m7 15 5 5 5-5", "m7 9 5-5 5 5"], "pin": ["M12 17v5M8 3h8l-1 7 3 3H6l3-3z"], "kreuz": ["M18 6 6 18M6 6l12 12"], "haus": ["M3 10.5 12 3l9 7.5", "M5 9.5V20a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V9.5"], "sprechblase": ["M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z", "M7 7h8", "M7 11h10", "M7 15h6"], "werkzeug": ["M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"], "buch": ["M12 7v14", "M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"], "warnung": ["m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3", "M12 9v4", "M12 17h.01"], "mehr": ["M4 5h16", "M4 12h16", "M4 19h16"], } %} {% macro symbol(name, groesse=16) -%} {% if name not in PFADE %}{{ UNBEKANNTES_SYMBOL }}{% endif -%} {%- endmacro %}