{
  "$description": "Brand: ProPublica (propublica@1.0.0)",
  "color": {
    "swatches": {
      "$description": "Source-of-truth color swatches from palette propublica@1.0.0",
      "warm-black": {
        "$value": "#111110",
        "$type": "color",
        "$description": "--p-color-warm-black — primary text and warm ink."
      },
      "black": {
        "$value": "#000000",
        "$type": "color",
        "$description": "--p-color-black — absolute black; mark fills."
      },
      "warm-white": {
        "$value": "#F2F1ED",
        "$type": "color",
        "$description": "--p-color-warm-white — the warm cream canvas."
      },
      "white": {
        "$value": "#FFFFFF",
        "$type": "color",
        "$description": "--p-color-white — bright canvas alternate."
      },
      "investigative-red": {
        "$value": "#D92D03",
        "$type": "color",
        "$description": "ProPublica promo red — the CTA and emphasis color."
      },
      "investigative-red-deep": {
        "$value": "#A00000",
        "$type": "color",
        "$description": "Pressed / active variant of investigative red."
      },
      "theme-blue": {
        "$value": "#304154",
        "$type": "color",
        "$description": "Deep slate-blue theme accent from the propublica-2026 theme."
      },
      "gray-warm": {
        "$value": "#5A5A5A",
        "$type": "color",
        "$description": "Warm gray secondary text."
      },
      "gray-medium": {
        "$value": "#727272",
        "$type": "color",
        "$description": "Medium gray tertiary text and meta."
      },
      "gray-quiet": {
        "$value": "#979797",
        "$type": "color",
        "$description": "Quiet gray for disabled / meta."
      },
      "gray-border": {
        "$value": "#C7C7C7",
        "$type": "color",
        "$description": "Heavier border weight."
      },
      "gray-divider": {
        "$value": "#DFDFDF",
        "$type": "color",
        "$description": "Quiet rule weight."
      },
      "gray-tint": {
        "$value": "#EBEBEB",
        "$type": "color",
        "$description": "Quiet surface tint."
      }
    }
  },
  "font": {
    "$description": "Typography roles mapped to font atoms",
    "heading": {
      "family": {
        "$value": [
          "Playfair Display",
          "Iowan Old Style",
          "Apple Garamond",
          "Baskerville",
          "Times New Roman",
          "serif"
        ],
        "$type": "fontFamily",
        "$description": "heading role → Playfair Display (playfair-display@1.0.0)"
      },
      "weight": {
        "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": [
          "Lora",
          "Iowan Old Style",
          "Apple Garamond",
          "Baskerville",
          "Times New Roman",
          "serif"
        ],
        "$type": "fontFamily",
        "$description": "body role → Lora (lora@1.0.0)"
      },
      "weight": {
        "400": {
          "$value": 400,
          "$type": "fontWeight"
        },
        "500": {
          "$value": 500,
          "$type": "fontWeight"
        },
        "600": {
          "$value": 600,
          "$type": "fontWeight"
        },
        "700": {
          "$value": 700,
          "$type": "fontWeight"
        },
        "$description": "Available font weights"
      }
    },
    "sans": {
      "family": {
        "$value": [
          "Inter",
          "-apple-system",
          "BlinkMacSystemFont",
          "Segoe UI",
          "Roboto",
          "Helvetica Neue",
          "Arial",
          "sans-serif"
        ],
        "$type": "fontFamily",
        "$description": "sans role → Inter (inter@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"
      }
    },
    "mono": {
      "family": {
        "$value": [
          "JetBrainsMono Nerd Font",
          "JetBrains Mono",
          "Fira Code",
          "Menlo",
          "Monaco",
          "Consolas",
          "Liberation Mono",
          "monospace"
        ],
        "$type": "fontFamily",
        "$description": "mono role → JetBrainsMono Nerd Font (jetbrainsmono-nerdfont@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"
        },
        "$description": "Available font weights"
      }
    }
  },
  "$extensions": {
    "com.brand-atoms.rules": [
      {
        "type": "contrastRatio",
        "target": "text-primary",
        "severity": "error",
        "rationale": "Warm Black (#111110) on warm white (#F2F1ED) gives ~16:1 — past AAA. ProPublica's investigative-feature format involves long article sessions and dense data tables; the enhanced contrast target supports that reading posture and the newsroom's commitment to accessibility.\n",
        "against": "background",
        "minRatio": 7,
        "standard": "WCAG-AAA"
      },
      {
        "type": "colorChoice",
        "target": "roles.colors.accent",
        "severity": "error",
        "rationale": "ProPublica's accent palette is intentionally minimal — a single investigative red carries CTA and emphasis semantics. Substituting the theme-blue or any gray for the accent would conflate the newsroom's deliberate monochrome-with-red voice with chrome colors.\n",
        "allowed": [
          "investigative-red",
          "investigative-red-deep"
        ],
        "forbidden": [
          "theme-blue",
          "gray-warm",
          "black"
        ]
      },
      {
        "type": "contextRestriction",
        "target": "roles.colors.primary",
        "severity": "error",
        "rationale": "The investigative red is reserved for high-emphasis surfaces — the \"Donate\" / \"Support\" CTAs, feature callouts, and editorial bridges. Using it as the in-copy link color would dilute the high-signal weight the newsroom assigns to this color in --promo-banner tokens.\n",
        "allowedContexts": [
          "cta",
          "donate",
          "editorial-emphasis",
          "feature-callout",
          "support-button"
        ],
        "forbiddenContexts": [
          "default-link",
          "body-text"
        ]
      },
      {
        "type": "fontPairing",
        "target": "typography.display",
        "severity": "error",
        "rationale": "ProPublica pairs Feature Headline (a tall display serif) with Tiempos Text for body prose at a clear size step. The display-to-prose hierarchy is part of the investigative-feature page identity; a 1.5× minimum ratio preserves it when open-source substitutes (Playfair Display, Lora) stand in.\n",
        "requires": "prose",
        "minSizeRatio": 1.5
      },
      {
        "type": "forbiddenTreatment",
        "target": "logo",
        "severity": "error",
        "rationale": "The ProPublica wordmark is a restrained, type-led mark consistent with the newsroom's investigative-authority voice. Recoloring, stretching, rotating, or applying gradients conflicts with the brand's editorial discipline.\n",
        "treatments": [
          "stretched",
          "rotated",
          "recolored",
          "drop-shadow",
          "gradient-fill",
          "on-busy-photo"
        ]
      },
      {
        "type": "accessibilityRequirement",
        "target": "*",
        "severity": "warning",
        "rationale": "WCAG 2.1 Success Criterion 1.4.6 (Contrast Enhanced) — Level AAA. ProPublica's mission of producing journalism \"in the public interest\" includes universal access; the AAA target is the natural expression of that mission in the design tokens.\n",
        "standard": "WCAG-AAA",
        "criterion": "1.4.6"
      },
      {
        "type": "enumMembership",
        "target": "typography.body.fontStyle",
        "severity": "warning",
        "rationale": "Tiempos Text ships true italics as a separate face — the Klim Type Foundry license includes the italic cut. Synthetic oblique skews are forbidden, both for the proprietary face and for the Lora substitute.\n",
        "allowed": [
          "normal",
          "italic"
        ],
        "forbidden": [
          "oblique"
        ]
      },
      {
        "type": "compositionConstraint",
        "target": "roles.colors.accent",
        "severity": "recommendation",
        "rationale": "Investigative red reads cleanest on the warm-white canvas or against warm-black ink. Placing it adjacent to the theme-blue or gray-warm surfaces collapses the monochrome-with-red hierarchy that defines the brand's visual restraint.\n",
        "pairsWith": [
          "warm-white",
          "white",
          "warm-black"
        ],
        "doesNotPairWith": [
          "theme-blue",
          "gray-warm"
        ]
      }
    ],
    "com.brand-atoms.assets": [],
    "com.brand-atoms.provenance": {
      "source": "https://www.propublica.org/",
      "license": "Proprietary — All Rights Reserved",
      "attribution": "ProPublica, Inc. — visual identity captured from the deployed concatenated WordPress stylesheet at propublica.org/_static/. ProPublica, the Feature Headline / Tiempos Text / Brut Grotesque typefaces are property of ProPublica, Inc. (or their licensors, e.g., Klim Type Foundry for Tiempos).\n",
      "importedDate": "2026-05-19",
      "notes": "Derived from live site CSS at https://www.propublica.org/ on 2026-05-19; no public brand guide located. The propublica-2026 theme exposes --p-color-* and --p-fonts-* custom properties in the concatenated stylesheet. Tiempos Text is licensed from Klim Type Foundry; Feature Headline and Brut Grotesque are the newsroom's proprietary cuts. Open-source substitutes — lora@1 for body prose, playfair-display@1 for the display serif role, inter@1 for sans — are referenced from the brand atom.\n"
    },
    "com.brand-atoms.references": {
      "palette": "propublica@1.0.0",
      "fonts": {
        "heading": "playfair-display@1.0.0",
        "body": "lora@1.0.0",
        "sans": "inter@1.0.0",
        "mono": "jetbrainsmono-nerdfont@1.0.0"
      }
    }
  }
}
