{
  "name": "Hey Albert — Regeln der Marke, maschinenlesbar",
  "stand": "2026-10-21",
  "quellen": [
    "docs/21-marke-und-stimme.md",
    "docs/22-gestaltung.md",
    ".claude/skills/texten/SKILL.md",
    "packages/design-system/readme.md",
    "CLAUDE.md"
  ],
  "hinweis": "Einzige maschinenlesbare Quelle für Wortlisten, Grenzen und Gestaltungsregeln. Gelesen von skripte/qa.mjs und von brand.heyalbert.family. Wer hier ändert, ändert beides.",
  "leitsaetze": [
    {
      "nr": 1,
      "de": "Alles hat genau einen Zuständigen. Ohne Zuständigen ist ein Problem und wird laut gezeigt. Einzige Ausnahme: die Aufgaben-Inbox.",
      "en": "Everything has exactly one person responsible. Anything without one is a problem and is shown loudly. The only exception: the task inbox."
    },
    {
      "nr": 2,
      "de": "Ein Datenmodell, viele Ansichten. Web, Mac, iPhone, iPad und Watch zeigen dieselben Zeilen.",
      "en": "One data model, many views. Web, Mac, iPhone, iPad and Watch show the same rows."
    },
    {
      "nr": 3,
      "de": "Bündel statt Einzelteile. Eine Fahrt zieht Auto, Fahrer, Mitfahrer und Checkliste mit.",
      "en": "Bundles, not loose parts. A drive brings its car, driver, passengers and checklist along."
    },
    {
      "nr": 4,
      "de": "Jede Person hat ihren eigenen Raum. Kinder gestalten ihren selbst, innerhalb von Kontrast-Leitplanken.",
      "en": "Every person has their own space. Children design theirs themselves, within contrast guardrails."
    },
    {
      "nr": 5,
      "de": "Kinder sind Beteiligte, nicht Publikum. Prüffrage: Könnte eine Neunjährige das allein benutzen?",
      "en": "Children take part; they are not an audience. Test question: could a nine-year-old use this alone?"
    }
  ],
  "woerter": {
    "nie": [
      {
        "wort": "Nutzer",
        "muster": "\\bNutzer\\w*",
        "statt": "ihr, du, die Familie, der Name",
        "grund_de": "Wir sprechen Menschen an, keine Konten.",
        "grund_en": "We address people, not accounts."
      },
      {
        "wort": "User",
        "muster": "\\bUsers?\\b",
        "statt": "ihr, du, die Familie",
        "grund_de": "Kein Anglizismus für Menschen.",
        "grund_en": "No loanword for people."
      },
      {
        "wort": "Feature",
        "muster": "\\bFeatures?\\b",
        "statt": "was Albert tut, der Bereich",
        "grund_de": "Wir beschreiben Verhalten, keine Funktionsliste.",
        "grund_en": "We describe behaviour, not a feature list."
      },
      {
        "wort": "Dashboard",
        "muster": "\\bDashboards?\\b",
        "statt": "Heute, Woche, Überblick",
        "grund_de": "Die Orte der App haben eigene Namen.",
        "grund_en": "The places in the app have their own names."
      },
      {
        "wort": "Task",
        "muster": "\\bTasks?\\b",
        "statt": "Aufgabe, Sache",
        "grund_de": "Deutsch, und eine Sache hat einen Zuständigen.",
        "grund_en": "German, and a thing has one person responsible."
      },
      {
        "wort": "Item",
        "muster": "\\bItems?\\b",
        "statt": "Sache",
        "grund_de": "Unser Wort ist „Sache“.",
        "grund_en": "Our word is „Sache“ (thing)."
      },
      {
        "wort": "Content",
        "muster": "\\bContent\\b",
        "statt": "Inhalt, Text, Bild",
        "grund_de": "Kein Fachjargon.",
        "grund_en": "No jargon."
      },
      {
        "wort": "verwalten (für Menschen)",
        "muster": "\\b(Kinder|Familie|Menschen) verwalten\\b",
        "statt": "begleiten, einladen",
        "grund_de": "Menschen werden nicht verwaltet.",
        "grund_en": "People are not administered."
      },
      {
        "wort": "optimieren",
        "muster": "\\boptimier\\w*",
        "statt": "das konkrete Ergebnis",
        "grund_de": "Familie ist kein Prozess.",
        "grund_en": "A family is not a process."
      },
      {
        "wort": "effizient",
        "muster": "\\beffizient\\w*",
        "statt": "das konkrete Ergebnis",
        "grund_de": "Familie ist kein Prozess.",
        "grund_en": "A family is not a process."
      },
      {
        "wort": "Produktivität",
        "muster": "\\bProduktivität\\b",
        "statt": "die Szene, die aufgeht",
        "grund_de": "Familie ist kein Prozess.",
        "grund_en": "A family is not a process."
      },
      {
        "wort": "Premium freischalten",
        "muster": "\\b(Premium|freischalten)\\b",
        "statt": "der Preis, offen genannt",
        "grund_de": "Keine Bezahlschranken-Sprache.",
        "grund_en": "No paywall language."
      }
    ],
    "nie_in_der_vermarktung": [
      {
        "wort": "KI",
        "muster": "\\bKI\\b",
        "grund_de": "Senkt bei einem Produkt mit Kinderdaten und Post nachweislich Vertrauen. Wir beschreiben Verhalten.",
        "grund_en": "Measurably lowers trust for a product with children’s data and mail. We describe behaviour."
      },
      {
        "wort": "smart",
        "muster": "\\bsmart\\b",
        "grund_de": "Leere Behauptung.",
        "grund_en": "Empty claim."
      },
      {
        "wort": "intelligent",
        "muster": "\\bintelligent\\w*",
        "grund_de": "Leere Behauptung.",
        "grund_en": "Empty claim."
      },
      {
        "wort": "magisch",
        "muster": "\\bmagisch\\w*",
        "grund_de": "Leere Behauptung.",
        "grund_en": "Empty claim."
      },
      {
        "wort": "automatisch",
        "muster": "\\bautomatisch\\w*",
        "grund_de": "Albert handelt nie allein.",
        "grund_en": "Albert never acts alone."
      },
      {
        "wort": "nahtlos",
        "muster": "\\bnahtlos\\w*",
        "grund_de": "Leere Behauptung.",
        "grund_en": "Empty claim."
      },
      {
        "wort": "Mental Load",
        "muster": "Mental Load",
        "grund_de": "Wir werben mit dem Gewinn, nie mit dem Schmerz.",
        "grund_en": "We sell the gain, never the pain."
      },
      {
        "wort": "Chaos",
        "muster": "\\bChaos\\b",
        "grund_de": "Kein Vorwurf an die Familie.",
        "grund_en": "No reproach to the family."
      },
      {
        "wort": "Nie wieder …",
        "muster": "\\bNie wieder\\b",
        "grund_de": "Zusage statt Verneinung.",
        "grund_en": "Promise, not negation."
      },
      {
        "wort": "Superlative („#1“, „das beste“)",
        "muster": "#1\\b|\\bdas beste\\b",
        "grund_de": "Keine Rangbehauptung.",
        "grund_en": "No ranking claims."
      },
      {
        "wort": "jetzt sichern",
        "muster": "\\bjetzt sichern\\b",
        "grund_de": "Keine Erwerbssprache, kein Druck.",
        "grund_en": "No acquisition language, no pressure."
      },
      {
        "wort": "spart Zeit",
        "muster": "\\bspart (dir |euch )?Zeit\\b",
        "grund_de": "Kein Wirkversprechen.",
        "grund_en": "No promised effect."
      }
    ],
    "unsere": [
      "Ort",
      "Sache",
      "Zuständig",
      "Bündel",
      "Fahrt",
      "Sonntagsrunde",
      "Eingang",
      "Vorschlag",
      "Übernehmen",
      "Rückgängig",
      "Safe",
      "Woche",
      "Heute",
      "Taler"
    ]
  },
  "anrede": {
    "de": "„ihr“ zur Familie, „du“ zum Einzelnen, nie „Sie“. Die Zahl entscheidet, nie das Geschlecht.",
    "en": "Plural „you“ to the family, singular to one person, never the formal register. Number decides, never gender."
  },
  "format": [
    {
      "regel": "uhrzeit",
      "richtig": "16:40",
      "falsch": [
        "16 Uhr",
        "16.40",
        "4:40 pm"
      ]
    },
    {
      "regel": "datum",
      "richtig": "Mi 3.9. oder 3. September",
      "falsch": [
        "03.09.2026 in Fließtext",
        "Mittwoch, den 3.9."
      ]
    },
    {
      "regel": "anfuehrungszeichen",
      "richtig": "„so“",
      "falsch": [
        "\"so\"",
        "“so”"
      ]
    },
    {
      "regel": "gedankenstrich",
      "richtig": "Halbgeviertstrich mit Leerzeichen: a – b",
      "falsch": [
        "a - b",
        "a—b"
      ]
    },
    {
      "regel": "zahlen",
      "richtig": "bis zwölf im Fließtext ausgeschrieben, in Karten und Tabellen Ziffern, Dezimalkomma: 8,7 h, 48,00 €",
      "falsch": [
        "8.7 h",
        "€48"
      ]
    },
    {
      "regel": "ausrufezeichen",
      "richtig": "keines in der Oberfläche",
      "falsch": [
        "Fertig!"
      ]
    },
    {
      "regel": "emoji",
      "richtig": "nirgends",
      "falsch": [
        "jedes Emoji"
      ]
    },
    {
      "regel": "textzeichen",
      "richtig": "erlaubt sind nur → · › und –",
      "falsch": [
        "Unicode-Zeichen als Icon-Ersatz"
      ]
    }
  ],
  "register": [
    {
      "id": "erzaehler",
      "name": "R1 · Der Erzähler",
      "wo_de": "Website, Landingpages, Onboarding, Manifest, Modulnamen, Release-Notes",
      "wo_en": "Website, landing pages, onboarding, manifesto, module names, release notes",
      "kennzeichen_de": "Merksätze, Kontrastpaare, konkrete Bilder aus dem Familienleben",
      "kennzeichen_en": "Maxims, contrast pairs, concrete pictures from family life",
      "woerter_schnitt": 9,
      "woerter_max": 18
    },
    {
      "id": "family-manager",
      "name": "R2 · Der Family Manager",
      "wo_de": "Die tägliche Oberfläche für Erwachsene: Knöpfe, Etiketten, Hinweise, Briefings",
      "wo_en": "The everyday interface for adults: buttons, labels, hints, briefings",
      "kennzeichen_de": "Knapp und handlungsorientiert",
      "kennzeichen_en": "Brief and action-oriented",
      "woerter_schnitt": 8,
      "woerter_max": 12
    },
    {
      "id": "vorleser",
      "name": "R3 · Der Vorleser",
      "wo_de": "Alle Kinderansichten, in drei Stufen: klein 6–9, mittel 10–12, groß 13+",
      "wo_en": "All children’s views, in three stages: small 6–9, middle 10–12, large 13+",
      "kennzeichen_de": "Kurz, bildhaft, in der Gegenwart",
      "kennzeichen_en": "Short, vivid, in the present tense",
      "woerter_schnitt": 6,
      "woerter_max": 10,
      "stufe_klein": {
        "woerter_schnitt": 5,
        "woerter_max": 8
      }
    },
    {
      "id": "sachbearbeiter",
      "name": "R4 · Der Sachbearbeiter",
      "wo_de": "Safe, Verträge, Fristen, Finanzen, Steuern, Datenschutz, Rechtstexte",
      "wo_en": "Safe, contracts, deadlines, finances, taxes, privacy, legal texts",
      "kennzeichen_de": "Präzise, nüchtern, vollständig",
      "kennzeichen_en": "Precise, sober, complete",
      "woerter_schnitt": 10,
      "woerter_max": 14
    },
    {
      "id": "briefeschreiber",
      "name": "R5 · Der Briefeschreiber",
      "wo_de": "Von Albert vorformulierte Antworten an Schule, Verein, Versicherung, Handwerker, Behörde",
      "wo_en": "Replies Albert drafts to school, club, insurer, tradespeople, authorities",
      "kennzeichen_de": "Nicht Alberts Stimme, sondern die der Familie",
      "kennzeichen_en": "Not Albert’s voice but the family’s",
      "woerter_schnitt": 12,
      "woerter_max": 18
    }
  ],
  "fluesterer": {
    "de": "Watch und Mitteilungen: höchstens sieben Wörter, das Wichtigste zuerst. Beispiel: „16:40 · Handball, Halle Süd.“",
    "en": "Watch and notifications: seven words at most, the most important first. Example: „16:40 · Handball, Halle Süd.“",
    "woerter_max": 7,
    "offen": "docs/21 und der Skill texten führen den Briefeschreiber als fünftes Register, das Designsystem den Flüsterer. Bis zur Entscheidung gilt docs/21, der Flüsterer ist eine Längengrenze."
  },
  "grenzen_text": {
    "satzlaenge_max": 18,
    "anteil_ueber_15_max": 0.08,
    "silben_je_wort_max": 1.7,
    "wortteil_zeichen_max": 14,
    "wstf4_kinder_max": 5,
    "wstf4_erwachsene_max": 9,
    "homepage": {
      "hero_woerter_max": 40,
      "sektion_woerter_max": 90,
      "seite_woerter": [
        600,
        800
      ]
    }
  },
  "gestaltung": [
    {
      "id": "kein-hex",
      "de": "Kein Hex-Wert in einem Bauteil. Farbe läuft über Rollen (--grund, --karte, --tinte, --akzent).",
      "en": "No hex value in a component. Colour runs through roles (--grund, --karte, --tinte, --akzent)."
    },
    {
      "id": "kein-schatten",
      "de": "Keine Schatten, nirgends. Tiefe kommt aus Schleier, stärkerer Kontur und Kippung.",
      "en": "No shadows, anywhere. Depth comes from a veil, a stronger outline and tilt."
    },
    {
      "id": "bedeutung-fest",
      "de": "Bedeutungen werden nicht getauscht: Rosa = Akzent und Jetzt, Gelb = Familie und Ritual, Blau = Fahrt, Offen-Rosa nur als gestrichelter Rand für „ohne Zuständigen“. Rosa heißt nie „Fehler“.",
      "en": "Meanings are never swapped: pink = accent and now, yellow = family and ritual, blue = drive, open-pink only as a dashed outline for „no one responsible“. Pink never means „error“."
    },
    {
      "id": "farbe-nie-allein",
      "de": "Farbe ist nie der einzige Träger. Initiale oder Name steht dabei.",
      "en": "Colour is never the only carrier. An initial or name is always present."
    },
    {
      "id": "kein-deckkraft-inaktiv",
      "de": "Inaktiv ist eine gerechnete Rolle, keine Deckkraft.",
      "en": "Disabled is a computed role, not opacity."
    },
    {
      "id": "kontrast",
      "de": "Text und Bedienelemente mindestens 4,5:1, Flächen und Konturen mindestens 3:1.",
      "en": "Text and controls at least 4.5:1, surfaces and outlines at least 3:1."
    },
    {
      "id": "zielflaechen",
      "de": "Zielflächen: Zeiger 28, Finger 44, Kind 56 px — nie darunter.",
      "en": "Target sizes: pointer 28, finger 44, child 56 px — never below."
    },
    {
      "id": "fokus",
      "de": "Fokus immer über :focus-visible: 2 px Ring in Offen-Rosa mit 2 px Abstand.",
      "en": "Focus always via :focus-visible: a 2 px ring in open-pink with 2 px offset."
    },
    {
      "id": "bewegung",
      "de": "120 ms Zustände, 200 ms Einblendungen, 300 ms Atem. Kein Federn, kein Kreisel. Bei reduzierter Bewegung steht alles still.",
      "en": "120 ms states, 200 ms reveals, 300 ms breath. No springs, no spinner. With reduced motion everything stands still."
    },
    {
      "id": "skelett",
      "de": "Skelett statt Kreisel. Das Skelett hat die Form des Inhalts.",
      "en": "Skeleton, not spinner. The skeleton has the shape of the content."
    },
    {
      "id": "rueckgaengig",
      "de": "Jede Änderung ist optimistisch und hat „Rückgängig“.",
      "en": "Every change is optimistic and offers „Undo“."
    },
    {
      "id": "schriften-lokal",
      "de": "Schriften werden lokal ausgeliefert, nie von Google-Servern.",
      "en": "Fonts are served locally, never from Google’s servers."
    },
    {
      "id": "kein-emoji",
      "de": "Kein Emoji, keine Unicode-Zeichen als Icon-Ersatz.",
      "en": "No emoji, no Unicode characters as icon substitutes."
    },
    {
      "id": "zeichen-aus-dem-satz",
      "de": "Fehlt ein Zeichen, wird es aus dem Satz geholt, nicht erfunden.",
      "en": "If an icon is missing, take it from the set; never draw one."
    }
  ],
  "bild": {
    "zeigen_de": [
      "echte Screens von Familie Sonntag auf flachen Geräterahmen",
      "flache Tuschezeichnung mit genau einem gelben Akzent",
      "genau ein echtes Foto: der Gründer",
      "ein physisches Objekt: das gedruckte Jahresbuch"
    ],
    "zeigen_en": [
      "real screens of the Sonntag family on flat device frames",
      "flat ink drawings with exactly one yellow accent",
      "exactly one real photo: the founder",
      "one physical object: the printed yearbook"
    ],
    "nie_de": [
      "Kindergesichter",
      "Stockfotos",
      "KI-erzeugte Bilder",
      "Glanz, Perspektive, 3D-Geräte",
      "Karussell, Autoplay-Video",
      "echte Familiendaten"
    ],
    "nie_en": [
      "children’s faces",
      "stock photos",
      "AI-generated images",
      "gloss, perspective, 3D devices",
      "carousels, autoplay video",
      "real family data"
    ]
  },
  "fertig": {
    "de": [
      "leerer Zustand",
      "Skelett statt Kreisel",
      "Tastatur und :focus-visible",
      "Handy und Tisch",
      "hell und dunkel als Token-Umschaltung",
      "optimistisches Update mit „Rückgängig“",
      "richtiges Register",
      "kein Hex-Wert",
      "Zielflächen 28/44/56"
    ],
    "en": [
      "empty state",
      "skeleton instead of spinner",
      "keyboard and :focus-visible",
      "phone and desktop",
      "light and dark as a token switch",
      "optimistic update with „Undo“",
      "correct register",
      "no hex value",
      "target sizes 28/44/56"
    ]
  },
  "familie_sonntag": {
    "hinweis_de": "Beispiele nutzen immer Familie Sonntag, nie echte Familien. Woche Mo 1. – So 7. September, heute ist Mittwoch, der 3.",
    "hinweis_en": "Examples always use the Sonntag family, never real families. Week Mon 1 – Sun 7 September, today is Wednesday the 3rd.",
    "menschen": [
      {
        "name": "Anna",
        "rolle_de": "Mama",
        "rolle_en": "mum",
        "farbe": "person-1",
        "platz": 1
      },
      {
        "name": "Tobias",
        "rolle_de": "Papa",
        "rolle_en": "dad",
        "farbe": "person-2",
        "platz": 2
      },
      {
        "name": "Felix",
        "rolle_de": "Sohn, 11",
        "rolle_en": "son, 11",
        "farbe": "person-3",
        "platz": 3
      },
      {
        "name": "Lena",
        "rolle_de": "Tochter, 9",
        "rolle_en": "daughter, 9",
        "farbe": "person-4",
        "platz": 4
      },
      {
        "name": "Sofia",
        "rolle_de": "Au-pair",
        "rolle_en": "au pair",
        "farbe": "person-5",
        "platz": 5
      },
      {
        "name": "Oma Grete",
        "rolle_de": "Großmutter",
        "rolle_en": "grandmother",
        "platz": 6,
        "farbe": "person-6"
      },
      {
        "name": "Opa Werner",
        "rolle_de": "Großvater",
        "rolle_en": "grandfather",
        "platz": 7,
        "farbe": "person-7"
      },
      {
        "name": "Oma Hilde",
        "rolle_de": "Großmutter",
        "rolle_en": "grandmother",
        "platz": 8,
        "farbe": "person-8"
      }
    ]
  }
}
