{
  "id": "eudi",
  "version": "1.0.0",
  "name": "European Digital Identity",
  "description": "The European Digital Identity (EUDI) Wallet is a flagship European Commission programme that gives EU citizens, residents, and businesses a single digital wallet for authenticating identity, storing credentials (diplomas, driving licences, prescriptions, tickets), and creating qualified electronic signatures across borders. The visual identity inherits the institutional Europa Component Library (ECL) — Branding blue (#004494) as the European Commission identity colour, a deep Primary blue scale for interaction, a warm Secondary gold scale for accents (the chromatic echo of the EU emblem stars), and the ECL status set for feedback. Typography on EC digital surfaces is Arial; this atom substitutes Public Sans (heading) and Manrope (body) as the open-source rendering proxies and documents the substitution.\n",
  "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"
  },
  "tags": [
    "eudi",
    "european-commission",
    "ecl",
    "europa",
    "government",
    "civic",
    "digital-identity",
    "light-first"
  ],
  "palette": {
    "ref": "eudi@1.0.0",
    "swatches": [
      {
        "id": "branding",
        "name": "Branding",
        "value": "#004494",
        "description": "ECL canonical Branding blue — the European Commission identity colour.",
        "aliases": []
      },
      {
        "id": "primary-180",
        "name": "Primary 180",
        "value": "#051036",
        "description": "Deepest primary — near-black blue for text and high-emphasis surfaces.",
        "aliases": []
      },
      {
        "id": "primary-160",
        "name": "Primary 160",
        "value": "#0A1F6C",
        "description": "Deep primary — body text on light surfaces.",
        "aliases": []
      },
      {
        "id": "primary-140",
        "name": "Primary 140",
        "value": "#0F2FA2",
        "description": "Strong primary — hover state for primary actions.",
        "aliases": []
      },
      {
        "id": "primary-120",
        "name": "Primary 120",
        "value": "#143FD9",
        "description": "Mid-deep primary.",
        "aliases": []
      },
      {
        "id": "primary-100",
        "name": "Primary 100",
        "value": "#3860ED",
        "description": "Default primary — the standard ECL interactive blue.",
        "aliases": []
      },
      {
        "id": "primary-80",
        "name": "Primary 80",
        "value": "#5577F0",
        "description": "Lighter primary — quiet emphasis.",
        "aliases": []
      },
      {
        "id": "primary-60",
        "name": "Primary 60",
        "value": "#89A1F4",
        "description": "Pale primary.",
        "aliases": []
      },
      {
        "id": "primary-40",
        "name": "Primary 40",
        "value": "#B1C0F8",
        "description": "Very pale primary — surface tint.",
        "aliases": []
      },
      {
        "id": "primary-20",
        "name": "Primary 20",
        "value": "#D8E0FB",
        "description": "Palest primary — quiet surface background.",
        "aliases": []
      },
      {
        "id": "secondary-180",
        "name": "Secondary 180",
        "value": "#8F5600",
        "description": "Deep secondary — strong warm accent.",
        "aliases": []
      },
      {
        "id": "secondary-160",
        "name": "Secondary 160",
        "value": "#E08700",
        "description": "Mid-deep secondary.",
        "aliases": []
      },
      {
        "id": "secondary-140",
        "name": "Secondary 140",
        "value": "#FF9D0A",
        "description": "Saturated secondary.",
        "aliases": []
      },
      {
        "id": "secondary-120",
        "name": "Secondary 120",
        "value": "#FFAD33",
        "description": "Mid secondary.",
        "aliases": []
      },
      {
        "id": "secondary-100",
        "name": "Secondary 100",
        "value": "#FFBE5C",
        "description": "Default secondary — the standard ECL warm accent.",
        "aliases": []
      },
      {
        "id": "secondary-80",
        "name": "Secondary 80",
        "value": "#FFCB7C",
        "description": "Lighter secondary.",
        "aliases": []
      },
      {
        "id": "secondary-60",
        "name": "Secondary 60",
        "value": "#FFD89D",
        "description": "Pale secondary.",
        "aliases": []
      },
      {
        "id": "secondary-40",
        "name": "Secondary 40",
        "value": "#FFE5BE",
        "description": "Very pale secondary.",
        "aliases": []
      },
      {
        "id": "secondary-20",
        "name": "Secondary 20",
        "value": "#FFF2DE",
        "description": "Palest secondary — quiet warm surface.",
        "aliases": []
      },
      {
        "id": "dark-100",
        "name": "Dark 100",
        "value": "#26324B",
        "description": "Default ink — body text on light surfaces.",
        "aliases": []
      },
      {
        "id": "dark-80",
        "name": "Dark 80",
        "value": "#546FA6",
        "description": "Secondary ink — hints, captions, metadata.",
        "aliases": []
      },
      {
        "id": "dark-60",
        "name": "Dark 60",
        "value": "#99AACC",
        "description": "Tertiary ink — disabled text, quiet labels.",
        "aliases": []
      },
      {
        "id": "neutral-180",
        "name": "Neutral 180",
        "value": "#6C85D1",
        "description": "Strongest neutral.",
        "aliases": []
      },
      {
        "id": "neutral-160",
        "name": "Neutral 160",
        "value": "#7F95D7",
        "description": "Strong neutral.",
        "aliases": []
      },
      {
        "id": "neutral-140",
        "name": "Neutral 140",
        "value": "#92A5DD",
        "description": "Mid-strong neutral.",
        "aliases": []
      },
      {
        "id": "neutral-120",
        "name": "Neutral 120",
        "value": "#A6B5E3",
        "description": "Mid neutral.",
        "aliases": []
      },
      {
        "id": "neutral-100",
        "name": "Neutral 100",
        "value": "#B9C5E9",
        "description": "Default neutral — borders, dividers on elevated surfaces.",
        "aliases": []
      },
      {
        "id": "neutral-80",
        "name": "Neutral 80",
        "value": "#CDD5EF",
        "description": "Lighter neutral.",
        "aliases": []
      },
      {
        "id": "neutral-60",
        "name": "Neutral 60",
        "value": "#E0E5F5",
        "description": "Pale neutral.",
        "aliases": []
      },
      {
        "id": "neutral-40",
        "name": "Neutral 40",
        "value": "#F3F5FB",
        "description": "Very pale neutral — surface background.",
        "aliases": []
      },
      {
        "id": "neutral-20",
        "name": "Neutral 20",
        "value": "#F8F9FD",
        "description": "Palest neutral — page background tint.",
        "aliases": []
      },
      {
        "id": "info",
        "name": "Info",
        "value": "#3860ED",
        "description": "Info colour — identical to Primary 100.",
        "aliases": []
      },
      {
        "id": "success",
        "name": "Success",
        "value": "#24A148",
        "description": "Success / confirmation colour.",
        "aliases": []
      },
      {
        "id": "warning",
        "name": "Warning",
        "value": "#F39811",
        "description": "Warning colour.",
        "aliases": []
      },
      {
        "id": "error",
        "name": "Error",
        "value": "#DA1E28",
        "description": "Error / destructive colour.",
        "aliases": []
      },
      {
        "id": "background",
        "name": "Background",
        "value": "#FCFCFC",
        "description": "Default page background — near-white.",
        "aliases": []
      },
      {
        "id": "white",
        "name": "White",
        "value": "#FFFFFF",
        "description": "True white — used for elevated surfaces.",
        "aliases": []
      }
    ],
    "modes": {
      "light": {
        "roles": {
          "background": "background",
          "surface": "neutral-40",
          "surface-elevated": "white",
          "text-primary": "dark-100",
          "text-secondary": "dark-80",
          "text-tertiary": "dark-60",
          "primary": "branding",
          "primary-hover": "primary-140",
          "accent": "secondary-100",
          "accent-hover": "secondary-140",
          "warning": "warning",
          "warning-hover": "secondary-180",
          "error": "error",
          "success": "success",
          "border": "neutral-100"
        }
      },
      "dark": {
        "roles": {
          "background": "primary-180",
          "surface": "primary-160",
          "surface-elevated": "primary-140",
          "text-primary": "neutral-60",
          "text-secondary": "neutral-100",
          "text-tertiary": "neutral-140",
          "primary": "primary-60",
          "primary-hover": "primary-40",
          "accent": "secondary-100",
          "accent-hover": "secondary-80",
          "warning": "warning",
          "warning-hover": "secondary-120",
          "error": "error",
          "success": "success",
          "border": "primary-140"
        }
      }
    }
  },
  "fonts": [
    {
      "role": "heading",
      "ref": "public-sans@1.0.0",
      "family": "Public Sans",
      "classification": "sans-serif",
      "source": {
        "kind": "google-fonts",
        "family": "Public Sans",
        "url": "https://fonts.googleapis.com/css2?family=Public+Sans:ital,wght@0,100..900;1,100..900&display=swap"
      },
      "fallbackStack": [
        "-apple-system",
        "BlinkMacSystemFont",
        "Segoe UI",
        "Roboto",
        "Helvetica Neue",
        "Arial",
        "sans-serif"
      ],
      "availableStyles": [
        {
          "weight": 100,
          "style": "normal"
        },
        {
          "weight": 100,
          "style": "italic"
        },
        {
          "weight": 200,
          "style": "normal"
        },
        {
          "weight": 200,
          "style": "italic"
        },
        {
          "weight": 300,
          "style": "normal"
        },
        {
          "weight": 300,
          "style": "italic"
        },
        {
          "weight": 400,
          "style": "normal"
        },
        {
          "weight": 400,
          "style": "italic"
        },
        {
          "weight": 500,
          "style": "normal"
        },
        {
          "weight": 500,
          "style": "italic"
        },
        {
          "weight": 600,
          "style": "normal"
        },
        {
          "weight": 600,
          "style": "italic"
        },
        {
          "weight": 700,
          "style": "normal"
        },
        {
          "weight": 700,
          "style": "italic"
        },
        {
          "weight": 800,
          "style": "normal"
        },
        {
          "weight": 800,
          "style": "italic"
        },
        {
          "weight": 900,
          "style": "normal"
        },
        {
          "weight": 900,
          "style": "italic"
        }
      ]
    },
    {
      "role": "body",
      "ref": "manrope@1.0.0",
      "family": "Manrope",
      "classification": "sans-serif",
      "source": {
        "kind": "google-fonts",
        "family": "Manrope",
        "url": "https://fonts.googleapis.com/css2?family=Manrope:wght@200..800&display=swap"
      },
      "fallbackStack": [
        "-apple-system",
        "BlinkMacSystemFont",
        "Segoe UI",
        "Roboto",
        "Helvetica Neue",
        "Arial",
        "sans-serif"
      ],
      "availableStyles": [
        {
          "weight": 200,
          "style": "normal"
        },
        {
          "weight": 300,
          "style": "normal"
        },
        {
          "weight": 400,
          "style": "normal"
        },
        {
          "weight": 500,
          "style": "normal"
        },
        {
          "weight": 600,
          "style": "normal"
        },
        {
          "weight": 700,
          "style": "normal"
        },
        {
          "weight": 800,
          "style": "normal"
        }
      ]
    },
    {
      "role": "mono",
      "ref": "roboto-mono@1.0.0",
      "family": "Roboto Mono",
      "classification": "monospace",
      "source": {
        "kind": "google-fonts",
        "family": "Roboto Mono",
        "url": "https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,100..700;1,100..700&display=swap"
      },
      "fallbackStack": [
        "SFMono-Regular",
        "Menlo",
        "Consolas",
        "Liberation Mono",
        "Courier New",
        "monospace"
      ],
      "availableStyles": [
        {
          "weight": 100,
          "style": "normal"
        },
        {
          "weight": 100,
          "style": "italic"
        },
        {
          "weight": 200,
          "style": "normal"
        },
        {
          "weight": 200,
          "style": "italic"
        },
        {
          "weight": 300,
          "style": "normal"
        },
        {
          "weight": 300,
          "style": "italic"
        },
        {
          "weight": 400,
          "style": "normal"
        },
        {
          "weight": 400,
          "style": "italic"
        },
        {
          "weight": 500,
          "style": "normal"
        },
        {
          "weight": 500,
          "style": "italic"
        },
        {
          "weight": 600,
          "style": "normal"
        },
        {
          "weight": 600,
          "style": "italic"
        },
        {
          "weight": 700,
          "style": "normal"
        },
        {
          "weight": 700,
          "style": "italic"
        }
      ]
    }
  ],
  "roles": {
    "colors": {
      "identity": "white",
      "on-identity": "dark-100",
      "primary": "branding",
      "primary-hover": "primary-140",
      "accent": "secondary-100",
      "accent-hover": "secondary-140",
      "mark": "branding",
      "success": "success",
      "warning": "warning",
      "error": "error",
      "text-primary-light": "dark-100",
      "text-primary-dark": "neutral-60",
      "background-light": "background",
      "background-dark": "primary-180",
      "surface-light": "neutral-40",
      "surface-dark": "primary-160",
      "text-secondary-light": "dark-80",
      "text-tertiary-light": "dark-60",
      "border-light": "neutral-100"
    },
    "typography": {
      "display": "heading",
      "prose": "body",
      "code": "mono"
    }
  },
  "assets": [],
  "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"
      ]
    }
  ]
}
