{
  "$description": "Brand: European Digital Identity (eudi@1.0.0)",
  "color": {
    "swatches": {
      "$description": "Source-of-truth color swatches from palette eudi@1.0.0",
      "branding": {
        "$value": "#004494",
        "$type": "color",
        "$description": "ECL canonical Branding blue — the European Commission identity colour."
      },
      "primary-180": {
        "$value": "#051036",
        "$type": "color",
        "$description": "Deepest primary — near-black blue for text and high-emphasis surfaces."
      },
      "primary-160": {
        "$value": "#0A1F6C",
        "$type": "color",
        "$description": "Deep primary — body text on light surfaces."
      },
      "primary-140": {
        "$value": "#0F2FA2",
        "$type": "color",
        "$description": "Strong primary — hover state for primary actions."
      },
      "primary-120": {
        "$value": "#143FD9",
        "$type": "color",
        "$description": "Mid-deep primary."
      },
      "primary-100": {
        "$value": "#3860ED",
        "$type": "color",
        "$description": "Default primary — the standard ECL interactive blue."
      },
      "primary-80": {
        "$value": "#5577F0",
        "$type": "color",
        "$description": "Lighter primary — quiet emphasis."
      },
      "primary-60": {
        "$value": "#89A1F4",
        "$type": "color",
        "$description": "Pale primary."
      },
      "primary-40": {
        "$value": "#B1C0F8",
        "$type": "color",
        "$description": "Very pale primary — surface tint."
      },
      "primary-20": {
        "$value": "#D8E0FB",
        "$type": "color",
        "$description": "Palest primary — quiet surface background."
      },
      "secondary-180": {
        "$value": "#8F5600",
        "$type": "color",
        "$description": "Deep secondary — strong warm accent."
      },
      "secondary-160": {
        "$value": "#E08700",
        "$type": "color",
        "$description": "Mid-deep secondary."
      },
      "secondary-140": {
        "$value": "#FF9D0A",
        "$type": "color",
        "$description": "Saturated secondary."
      },
      "secondary-120": {
        "$value": "#FFAD33",
        "$type": "color",
        "$description": "Mid secondary."
      },
      "secondary-100": {
        "$value": "#FFBE5C",
        "$type": "color",
        "$description": "Default secondary — the standard ECL warm accent."
      },
      "secondary-80": {
        "$value": "#FFCB7C",
        "$type": "color",
        "$description": "Lighter secondary."
      },
      "secondary-60": {
        "$value": "#FFD89D",
        "$type": "color",
        "$description": "Pale secondary."
      },
      "secondary-40": {
        "$value": "#FFE5BE",
        "$type": "color",
        "$description": "Very pale secondary."
      },
      "secondary-20": {
        "$value": "#FFF2DE",
        "$type": "color",
        "$description": "Palest secondary — quiet warm surface."
      },
      "dark-100": {
        "$value": "#26324B",
        "$type": "color",
        "$description": "Default ink — body text on light surfaces."
      },
      "dark-80": {
        "$value": "#546FA6",
        "$type": "color",
        "$description": "Secondary ink — hints, captions, metadata."
      },
      "dark-60": {
        "$value": "#99AACC",
        "$type": "color",
        "$description": "Tertiary ink — disabled text, quiet labels."
      },
      "neutral-180": {
        "$value": "#6C85D1",
        "$type": "color",
        "$description": "Strongest neutral."
      },
      "neutral-160": {
        "$value": "#7F95D7",
        "$type": "color",
        "$description": "Strong neutral."
      },
      "neutral-140": {
        "$value": "#92A5DD",
        "$type": "color",
        "$description": "Mid-strong neutral."
      },
      "neutral-120": {
        "$value": "#A6B5E3",
        "$type": "color",
        "$description": "Mid neutral."
      },
      "neutral-100": {
        "$value": "#B9C5E9",
        "$type": "color",
        "$description": "Default neutral — borders, dividers on elevated surfaces."
      },
      "neutral-80": {
        "$value": "#CDD5EF",
        "$type": "color",
        "$description": "Lighter neutral."
      },
      "neutral-60": {
        "$value": "#E0E5F5",
        "$type": "color",
        "$description": "Pale neutral."
      },
      "neutral-40": {
        "$value": "#F3F5FB",
        "$type": "color",
        "$description": "Very pale neutral — surface background."
      },
      "neutral-20": {
        "$value": "#F8F9FD",
        "$type": "color",
        "$description": "Palest neutral — page background tint."
      },
      "info": {
        "$value": "#3860ED",
        "$type": "color",
        "$description": "Info colour — identical to Primary 100."
      },
      "success": {
        "$value": "#24A148",
        "$type": "color",
        "$description": "Success / confirmation colour."
      },
      "warning": {
        "$value": "#F39811",
        "$type": "color",
        "$description": "Warning colour."
      },
      "error": {
        "$value": "#DA1E28",
        "$type": "color",
        "$description": "Error / destructive colour."
      },
      "background": {
        "$value": "#FCFCFC",
        "$type": "color",
        "$description": "Default page background — near-white."
      },
      "white": {
        "$value": "#FFFFFF",
        "$type": "color",
        "$description": "True white — used for elevated surfaces."
      }
    }
  },
  "font": {
    "$description": "Typography roles mapped to font atoms",
    "heading": {
      "family": {
        "$value": [
          "Public Sans",
          "-apple-system",
          "BlinkMacSystemFont",
          "Segoe UI",
          "Roboto",
          "Helvetica Neue",
          "Arial",
          "sans-serif"
        ],
        "$type": "fontFamily",
        "$description": "heading role → Public Sans (public-sans@1.0.0)"
      },
      "weight": {
        "100": {
          "$value": 100,
          "$type": "fontWeight"
        },
        "200": {
          "$value": 200,
          "$type": "fontWeight"
        },
        "300": {
          "$value": 300,
          "$type": "fontWeight"
        },
        "400": {
          "$value": 400,
          "$type": "fontWeight"
        },
        "500": {
          "$value": 500,
          "$type": "fontWeight"
        },
        "600": {
          "$value": 600,
          "$type": "fontWeight"
        },
        "700": {
          "$value": 700,
          "$type": "fontWeight"
        },
        "800": {
          "$value": 800,
          "$type": "fontWeight"
        },
        "900": {
          "$value": 900,
          "$type": "fontWeight"
        },
        "$description": "Available font weights"
      }
    },
    "body": {
      "family": {
        "$value": [
          "Manrope",
          "-apple-system",
          "BlinkMacSystemFont",
          "Segoe UI",
          "Roboto",
          "Helvetica Neue",
          "Arial",
          "sans-serif"
        ],
        "$type": "fontFamily",
        "$description": "body role → Manrope (manrope@1.0.0)"
      },
      "weight": {
        "200": {
          "$value": 200,
          "$type": "fontWeight"
        },
        "300": {
          "$value": 300,
          "$type": "fontWeight"
        },
        "400": {
          "$value": 400,
          "$type": "fontWeight"
        },
        "500": {
          "$value": 500,
          "$type": "fontWeight"
        },
        "600": {
          "$value": 600,
          "$type": "fontWeight"
        },
        "700": {
          "$value": 700,
          "$type": "fontWeight"
        },
        "800": {
          "$value": 800,
          "$type": "fontWeight"
        },
        "$description": "Available font weights"
      }
    },
    "mono": {
      "family": {
        "$value": [
          "Roboto Mono",
          "SFMono-Regular",
          "Menlo",
          "Consolas",
          "Liberation Mono",
          "Courier New",
          "monospace"
        ],
        "$type": "fontFamily",
        "$description": "mono role → Roboto Mono (roboto-mono@1.0.0)"
      },
      "weight": {
        "100": {
          "$value": 100,
          "$type": "fontWeight"
        },
        "200": {
          "$value": 200,
          "$type": "fontWeight"
        },
        "300": {
          "$value": 300,
          "$type": "fontWeight"
        },
        "400": {
          "$value": 400,
          "$type": "fontWeight"
        },
        "500": {
          "$value": 500,
          "$type": "fontWeight"
        },
        "600": {
          "$value": 600,
          "$type": "fontWeight"
        },
        "700": {
          "$value": 700,
          "$type": "fontWeight"
        },
        "$description": "Available font weights"
      }
    }
  },
  "$extensions": {
    "com.brand-atoms.rules": [
      {
        "type": "colorChoice",
        "target": "roles.colors.primary",
        "severity": "error",
        "rationale": "The European Commission's institutional identity blue is Branding (#004494), with ECL Primary 100 (#3860ED) carrying the default interactive role inside the component library. The warm Secondary scale, the success/warning/error status hues, and the Neutral scale all have their own roles — substituting any of them for the primary action colour breaks the institutional identity that EU citizens recognise as \"European Commission.\"\n",
        "allowed": [
          "branding",
          "primary-100",
          "primary-140"
        ],
        "forbidden": [
          "secondary-100",
          "error",
          "success",
          "warning"
        ]
      },
      {
        "type": "colorChoice",
        "target": "roles.colors.mark",
        "severity": "error",
        "rationale": "The EC identity mark renders in Branding blue (#004494) specifically — not the ECL Primary 100 used for interactive controls and not Dark 100 used for ink. The mark colour and the interaction colour are intentionally distinct so that brand presence is visually separable from clickable affordance.\n",
        "allowed": [
          "branding"
        ],
        "forbidden": [
          "primary-100",
          "primary-140",
          "secondary-100",
          "dark-100"
        ]
      },
      {
        "type": "contrastRatio",
        "target": "text-primary",
        "severity": "error",
        "rationale": "ECL components are documented to target WCAG 2.1 Level AA across European Commission digital surfaces, in line with Directive (EU) 2016/2102 on the accessibility of public- sector websites and mobile applications. Dark 100 (#26324B) on the near-white background (#FCFCFC) clears AA at ~12:1.\n",
        "against": "background",
        "minRatio": 4.5,
        "standard": "WCAG-AA"
      },
      {
        "type": "accessibilityRequirement",
        "target": "*",
        "severity": "error",
        "rationale": "WCAG 2.1 Success Criterion 1.4.3 (Contrast Minimum) — Level AA. The EUDI Wallet, as a Commission service programme rolling out to every Member State by end-2026, is in scope of the EU Public Sector Accessibility Directive; AA conformance is the regulatory floor for every consuming Member State implementation.\n",
        "standard": "WCAG-AA",
        "criterion": "1.4.3"
      },
      {
        "type": "forbiddenTreatment",
        "target": "logo",
        "severity": "error",
        "rationale": "The European emblem (twelve gold stars on Reflex Blue) is governed by EU interinstitutional rules and the European Commission emblem-use guidelines. The emblem MUST render in its supplied proportions, in its supplied colours, on a clear field. Recolouring, distortion, rotation, or placement on a busy photographic background is prohibited.\n",
        "treatments": [
          "stretched",
          "rotated",
          "recolored",
          "drop-shadow",
          "gradient-fill",
          "outlined",
          "on-busy-photo",
          "tilted"
        ]
      },
      {
        "type": "enumMembership",
        "target": "typography.heading.fontWeight",
        "severity": "warning",
        "rationale": "ECL's published typography reference specifies Arial at weight 400 (Regular) for all heading levels except Heading 6, which uses 700 (Bold). Constraining the substitute (Public Sans) to Regular and Bold preserves the typographic flatness of the EC institutional surface — extra display weights would introduce hierarchy ECL doesn't itself use.\n",
        "allowed": [
          "400",
          "700"
        ]
      },
      {
        "type": "fontPairing",
        "target": "typography.display",
        "severity": "error",
        "rationale": "ECL's documented type scale steps from a 16px body anchor through 20px lede, 24px small heading, and up to 52px Heading 1 desktop. Every step preserves at least a 1.5× ratio against the body anchor; collapsing display to body size destroys the scannability ECL components rely on for multilingual readability across 24 official EU languages.\n",
        "requires": "prose",
        "minSizeRatio": 1.5
      },
      {
        "type": "contextRestriction",
        "target": "roles.colors.error",
        "severity": "error",
        "rationale": "ECL Error (#DA1E28) is the documented destructive / validation-failure colour. Reusing it for confirmation inverts the semantic contract built into ECL's Banner, Notification, and Form-validation components — components that EUDI Wallet implementations across 27+ Member States compose with directly.\n",
        "allowedContexts": [
          "error-state",
          "destructive-action",
          "validation-failure"
        ],
        "forbiddenContexts": [
          "confirmation",
          "completion",
          "data-viz-positive"
        ]
      },
      {
        "type": "compositionConstraint",
        "target": "roles.colors.mark",
        "severity": "recommendation",
        "rationale": "Branding blue reads as institutional EC identity against the white canvas, the near-white background, or the deep Primary 180 navy. Placing it adjacent to the Secondary gold, Warning orange, or Error red at equal weight produces chromatic competition that fights the measured civic voice EUDI inherits from the Commission's institutional identity.\n",
        "pairsWith": [
          "white",
          "background",
          "neutral-40",
          "primary-180"
        ],
        "doesNotPairWith": [
          "secondary-100",
          "error",
          "warning",
          "web-magenta"
        ]
      }
    ],
    "com.brand-atoms.assets": [],
    "com.brand-atoms.provenance": {
      "source": "https://commission.europa.eu/strategy-and-policy/priorities-2019-2024/europe-fit-digital-age/european-digital-identity_en",
      "license": "Proprietary — © European Union",
      "attribution": "European Digital Identity (EUDI) programme, European Commission. The EUDI Wallet is published by the Commission's Directorate-General for Communications Networks, Content and Technology (DG CONNECT) and is rendered through the Europa Component Library (ECL) institutional identity. \"European Union,\" the EU emblem, and the European Commission marks are reserved.\n",
      "importedDate": "2026-05-19",
      "notes": "Typography substitution: ECL specifies Arial exclusively for EC digital surfaces (font-family: Arial, sans-serif). Arial is proprietary to Monotype and is not present in this catalogue's fonts/ directory. This brand references public-sans@1 as the open-source heading face (the closest grotesque-sans match commissioned for U.S. government digital use) and manrope@1 as the body face, with roboto-mono@1 for code. Consumers targeting an actual EC-licensed surface should use Arial via their platform's stock distribution.\nThe EUDI programme inherits ECL identity rather than publishing a separate brand; this atom maps ECL Branding blue to the `identity` and `mark` roles and ECL Primary 100 to the default interactive primary, with the warm Secondary scale carrying the accent role.\n"
    },
    "com.brand-atoms.references": {
      "palette": "eudi@1.0.0",
      "fonts": {
        "heading": "public-sans@1.0.0",
        "body": "manrope@1.0.0",
        "mono": "roboto-mono@1.0.0"
      }
    }
  }
}
