New endpoints for HL Patents Style auto-update. paliad is primary, hihlc is read-only mirror. Both expose the .dotm + manifest at /patentstyle/. Replaces hlpat.msbls.de/<UUID>/ — hlpat.msbls.de stays around for now but the VBA client points at the new URL on next .dotm rebuild.
m's input: 'KI groß, AI groß - und das ist ne Veranstaltung für uns bei HL,
letzter Freitag im Monat, 17 Uhr, Ende offen.'
frea<KI>fr<AI>day. — both wordplay segments now highlighted in magenta.
Added event-when pill: 'Letzter Freitag im Monat · 17 Uhr · Open End'.
Page stays public-safe (no HL branding on a personally-owned domain);
HL-internal context is implicit, only visible to insiders.
killusion.de mocks the inflation of "revolutionär" claims; the word
appears in scare-quotes as the punchline. kilofant.de parodies AI
marketing-speak; "robust" is part of the joke. Both add an explicit
<!-- anti-ai-allow: ... --> directive so the lint stops flagging them.
tools/anti-ai-lint.py: Python-Linter (stdlib + yq) prueft jede
build/<domain>/index.html gegen die Blacklist in
tools/anti-ai-blacklist.yaml. HTML wird via html.parser auf sichtbaren
Text reduziert (Skripte/Styles werden ignoriert), dann werden Vokabel-
Substrings (DE+EN, case-insensitive) und Regex-Patterns gematcht.
Severity warn = Build geht durch, fail = Build bricht ab.
Whitelist-Mechanismen:
- HTML-Kommentar im Markup: <!-- anti-ai-allow: term1, term2 -->
- Per-Site in site.yaml: anti_ai_allow: [term1, term2]
Integration in build.sh als Schritt 4/4, mit --skip-lint fuer
Notfaelle. Dockerfile installiert python3 zusaetzlich; nur im
Builder-Stage, kein Effekt aufs Caddy-Image.
Tests via tools/test-anti-ai-lint.sh: synthetische AI-Fixture wird
korrekt geflagged, Whitelists unterdruecken Hits, fail-Severity
triggert exit 1, neutraler Text exit 0.
Initial-Lauf auf 59 bestehenden Sites: 2 warn (killusion.de
"revolutionaer" in ironischem Kontext, kilofant.de "robust"),
0 fail. Cleanup ist Folge-Issue.
README + docs/geo-seo-guideline.md aktualisiert mit der konkreten
Tool-Position.
CSS touch-action: pan-y und JS-Listener-Scope (wrapper statt hero,
ohne preventDefault) jetzt explizit per @media / matchMedia auf
max-width: 768px begrenzt. Über 768px bleibt das ursprüngliche
Verhalten erhalten — touchmove auf .hero mit preventDefault, falls
Touch-Hardware im Desktop-Layout im Spiel ist.
Touchmove-Listener von .hero auf .text3d-wrapper verschoben, sodass nur
Touches direkt auf der animierten Text-Komponente die Animation triggern.
preventDefault() entfernt + touch-action: pan-y auf den Wrapper —
vertical scroll funktioniert jetzt sowohl außerhalb als auch innerhalb
des Animations-Bereichs ungestört. Desktop-mousemove unverändert.
Strukturelle Folge aus Marken-Klärung (msbls = Marke unter flexsiebels-Umbrella,
Rechtsträger ist flexsiebels):
- shared/impressum.js: default owner ist jetzt flexsiebels; owners.msbls als
Legacy-Alias auf owners.flexsiebels (backward-compat). Header-Doku aktualisiert.
- heygoldi.de: Script-Tag auf data-owner="flexsiebels" data-variant="full".
- 9 Satire-Sites: Impressum-Script raus, statischer "Ein Projekt von msbls.de"-
Link im Footer (color:inherit, dezent).
Sites: patentonkel, paragraphenraiter, killuminati, kilitaer, killions,
killusion, killegal, killionaer, kilibri.
Build: ./build.sh -> 59 sites OK. Andere Overlay-Sites (ichbinotto, lexsiebels,
mai-otto, smartin3, martinsiebels, zensiebels) unverändert.
Closes via done-label: m/onepager#5
- Trigger: <a>-Link mit identischer CSS-Hülle wie die inline-minimal-
Variante (text-align:center; font-size:0.75rem; opacity:0.6;
padding:12px 0; margin-top:4px). Kein Footer-Layout-Shift mehr,
Höhe und Breite identisch zu vorher.
- Karte: nutzt --bg-card / --text / --accent / --border / --radius /
--font-primary vom Host (shared/css/variables.css) — Dark-Fallbacks
neutral. Auf hellen Themes greifen die CSS-Vars, auf Sites ohne
Variablen bleibt es dezent dunkel.
- max-width: min(420px, calc(100vw - 32px)) + box-sizing:border-box
+ overflow-wrap:break-word — Karte kann Viewport nie sprengen,
auch nicht bei langen unbreakable strings.
- Body-scroll-lock während Overlay offen ist; vorheriger overflow-
Wert wird beim Schließen restauriert.
Project-scope `mai` server collided with the user-scope maimcp
orchestration binary registered in ~/.claude.json — silently rebinding
mcp__mai__* from list_tasks/update_task/send_message to Supabase SQL
tools. Renaming to `supabase` keeps the namespaces disjoint.
Refs: m/mAi#154
- shared/impressum.js: Name korrigiert (msbls/flexsiebels = Matthias Siebels, nicht Martin),
echte Adresse aus youpc.org übernommen (c/o Online-Impressum.de #5892, Sankt Augustin).
Neuer Owner 'flexsiebels', neuer Owner 'martinsiebels' (für Martin als separate Person
mit eigener Adresse in Osnabrück). data-variant als offizielles Attribut, data-style
weiterhin als Legacy-Alias. Rendert in #impressum falls vorhanden, sonst footer.
- paragraphenraiter.de: hardcoded "Ein Projekt von Matthias Flexsiebels" → shared (msbls minimal)
- patentonkel.de: hardcoded "Matthias Flexsiebels" + kaputter window.__impressum() → shared (msbls minimal)
- smartin3.de: inline Impressum-Text → shared (martinsiebels full) in #impressum Div
- ichbinotto.de: shared (flexsiebels full) mit echter § 5 TMG-Angabe
Caddyfile: Regenerierung hat fehlende Einträge für 6034.de, traihard.de, zensiebels.de ergänzt.
Refs: #3