{
  "version": "0.2.0",
  "rules": [
    {
      "id": "one-language",
      "level": "must",
      "rule": "Every product area shares one design language: same colors, type, shapes, glass, motion and icons. Mobile credentials, visitor management, identity governance and physical access all look like Alert Enterprise. Products are distinguished by name and by which icons they use, never by their own palette, typeface or visual style. No sub-brand colors, no per-product logos unless brand architecture grants one."
    },
    {
      "id": "company-name",
      "level": "must",
      "rule": "The company is always \"Alert Enterprise\": two words, both capitalized. Never AlertEnterprise."
    },
    {
      "id": "logo-grounds",
      "level": "must",
      "rule": "The lockup appears on white, black, or purple 500 only.",
      "check": "Lockup background is #FFFFFF, #000000/#0A0A12, or #5F51D5."
    },
    {
      "id": "logo-clearspace",
      "level": "must",
      "rule": "Keep clear space around the lockup equal to the shield width on all sides."
    },
    {
      "id": "logo-minimum",
      "level": "must",
      "rule": "Lockup at least 120px wide on screen and 30mm in print. Shield alone at least 16px."
    },
    {
      "id": "small-space-mark",
      "level": "must",
      "rule": "In small spaces (browser tabs, app icons, profile pictures) use the shield alone, never a shrunken full logo and never initials. Coral shield by default; white shield on a purple ground for app icons, with clear space so rounding does not cut it."
    },
    {
      "id": "logo-no-edit",
      "level": "must",
      "rule": "Never recolor, stretch, outline, rotate, add effects to, or retype the lockup. Use the supplied files."
    },
    {
      "id": "purple-leads",
      "level": "must",
      "rule": "Purple is the primary color: primary actions, links, focus and brand grounds."
    },
    {
      "id": "coral-marks",
      "level": "must",
      "rule": "Coral marks, it does not fill. Use it for the shield, a single highlight, an icon secondary stroke, or one data series. Never for body text and never as a large flat field behind text."
    },
    {
      "id": "f9423a-gradient-only",
      "level": "must",
      "rule": "#F9423A is for gradients only. Never a flat fill.",
      "source": "brand-book-2023"
    },
    {
      "id": "coral-is-not-danger",
      "level": "must",
      "rule": "Coral is the brand; red (#E0425C) is the verdict. Never use coral to mean error, denied or revoked."
    },
    {
      "id": "organic-gradients",
      "level": "must",
      "rule": "Gradients are organic: offset radial fields. No linear-gradient in brand work.",
      "source": "brand-book-2023"
    },
    {
      "id": "one-primary",
      "level": "should",
      "rule": "One primary (filled purple) action per view. Everything else is tonal, outline or text."
    },
    {
      "id": "tint-steps",
      "level": "should",
      "rule": "When a brand color is too strong, step it in 20% increments (80, 60, 40, 20). No other percentages.",
      "source": "brand-book-2023"
    },
    {
      "id": "aeonik",
      "level": "must",
      "rule": "Aeonik Bold for headlines, Aeonik Regular for copy, Aeonik Light only at display sizes. Only weights 300, 400 and 700 exist; never set 500, 600 or 800.",
      "source": "brand-book-2023"
    },
    {
      "id": "aeonik-everywhere",
      "level": "must",
      "rule": "Set all Alert Enterprise materials in Aeonik: documents, decks, email, web, video, print. Install it from assets/fonts (Aeonik.zip, scripts/install-aeonik.sh or .ps1), link assets/fonts/aeonik.css on web pages, and embed it in PPTX and DOCX. DM Sans only where Aeonik cannot be installed or embedded."
    },
    {
      "id": "no-center-body",
      "level": "should",
      "rule": "Body text is left aligned. Center only a single short line."
    },
    {
      "id": "icons-two-tone",
      "level": "must",
      "rule": "Icons are two-tone line work: purple primary, coral secondary, 2.6 stroke on a 48 grid, round caps and joins.",
      "source": "brand-book-2023"
    },
    {
      "id": "shield-shape-not-controls",
      "level": "must",
      "rule": "The shield shape is for swatches, image masks and feature tiles. Never on buttons, inputs or chips."
    },
    {
      "id": "glass-on-image",
      "level": "must",
      "rule": "Glass only over imagery or gradients. Never glass on a flat page, never glass on glass."
    },
    {
      "id": "modern-software",
      "level": "must",
      "rule": "Alert Enterprise is a security company that looks like modern software. Security subjects (locks, shields, doors, badges, cameras) are welcome, drawn and styled the modern way: glass over the mesh and aurora gradients, large Aeonik type, generous space, clean product screens. Avoid dated treatment: dark control rooms, neon blue glow, binary code, hooded figures, stock cyber art."
    },
    {
      "id": "software-company",
      "level": "must",
      "rule": "Alert Enterprise is a software company. Never show, write or imply that AE builds readers, locks or any hardware. Name the manufacturer (HID, Wavelynx, LEGIC) when hardware appears."
    },
    {
      "id": "product-names",
      "level": "must",
      "rule": "Guardian is the platform. Products are PIAM, Visitor Management (Healthcare VIM for hospitals), Wallet Mobile Credentials, SOC Insights, AI Agent and Asset Governance. Anything smaller is a capability, described in plain words, not named like a product. Only Alert Enterprise has a logo; product names are set in Aeonik beside the shield."
    },
    {
      "id": "wallet-names",
      "level": "must",
      "rule": "Write \"Employee Badge in Apple Wallet\" and \"Corporate Badge in Google Wallet\", with that capitalization."
    },
    {
      "id": "one-wait-indicator",
      "level": "must",
      "rule": "One waiting indicator per wait. Under a moment, show nothing. A second or two loading content, show a skeleton shaped like the content. A second or two after a click, show a spinner inside the control. Longer with a known length, show a progress bar; unknown, a spinner with a line saying what is happening."
    },
    {
      "id": "reduced-motion",
      "level": "must",
      "rule": "Honor prefers-reduced-motion: replace travel and draw with a fade of 140ms or less."
    },
    {
      "id": "contrast",
      "level": "must",
      "rule": "Text meets WCAG 2.2 AA: 4.5:1 for body, 3:1 for 24px+ or 19px+ bold, 3:1 for focus rings and meaningful graphics."
    }
  ]
}
