{
  "id": "wapo",
  "version": "1.0.0",
  "name": "The Washington Post",
  "description": "The Washington Post is the capital-bureau paper of record — serious, accountability-driven, with a brand voice built around the tagline \"Democracy Dies in Darkness.\" The Washington Post Design System (WPDS) makes the brand legible at the token level: near-black ink on white, a deliberate primary blue for CTAs and trusted-source links, deep newsroom red for breaking-news emphasis, and a published 9-step gray scale. The proprietary Postoni Wide (display serif) and Franklin (sans) typefaces carry the editorial voice.\n",
  "provenance": {
    "source": "https://github.com/washingtonpost/tachyons-css/blob/main/src/wpds-colors-tokens.css",
    "license": "Proprietary brand identity; design-token source under repository license",
    "attribution": "The Washington Post (WP Company LLC) — visual identity captured from the published Washington Post Design System (WPDS) color tokens at github.com/washingtonpost/tachyons-css. The Washington Post, the masthead, and the Postoni / Franklin typefaces are property of WP Company LLC.\n",
    "importedDate": "2026-05-19",
    "notes": "Derived from the WPDS published color tokens on 2026-05-19; no consumer-facing brand guide located. The proprietary typefaces (Postoni Wide for display, Franklin / Franklin ITC variants for sans/text) are referenced in the design system but are not publicly distributed. Open-source substitutes are referenced — playfair-display@1 for the display serif, pt-serif@1 for body prose, and inter@1 for the sans role.\n"
  },
  "tags": [
    "washington-post",
    "wapo",
    "news",
    "journalism",
    "brand",
    "blue",
    "serif",
    "light-first"
  ],
  "palette": {
    "ref": "wapo@1.0.0",
    "swatches": [
      {
        "id": "gray-0",
        "name": "Gray 0",
        "value": "#000000",
        "description": "WPDS gray0 — absolute black; mark fills.",
        "aliases": []
      },
      {
        "id": "gray-20",
        "name": "Gray 20",
        "value": "#111111",
        "description": "WPDS gray20 — primary text; the WaPo ink.",
        "aliases": []
      },
      {
        "id": "gray-40",
        "name": "Gray 40",
        "value": "#2A2A2A",
        "description": "WPDS gray40 — heading deck and body emphasis.",
        "aliases": []
      },
      {
        "id": "gray-60",
        "name": "Gray 60",
        "value": "#494949",
        "description": "WPDS gray60 — secondary text.",
        "aliases": []
      },
      {
        "id": "gray-80",
        "name": "Gray 80",
        "value": "#666666",
        "description": "WPDS gray80 — accessible quiet text on white.",
        "aliases": []
      },
      {
        "id": "gray-100",
        "name": "Gray 100",
        "value": "#737373",
        "description": "WPDS gray100 — meta text; tertiary surfaces.",
        "aliases": []
      },
      {
        "id": "gray-200",
        "name": "Gray 200",
        "value": "#AAAAAA",
        "description": "WPDS gray200 — divider weight.",
        "aliases": []
      },
      {
        "id": "gray-300",
        "name": "Gray 300",
        "value": "#D4D4D4",
        "description": "WPDS gray300 — border on light.",
        "aliases": []
      },
      {
        "id": "gray-400",
        "name": "Gray 400",
        "value": "#E9E9E9",
        "description": "WPDS gray400 — quiet surface tint.",
        "aliases": []
      },
      {
        "id": "gray-500",
        "name": "Gray 500",
        "value": "#F0F0F0",
        "description": "WPDS gray500 — alternating row tint.",
        "aliases": []
      },
      {
        "id": "gray-600",
        "name": "Gray 600",
        "value": "#F7F7F7",
        "description": "WPDS gray600 — subtle inset surface.",
        "aliases": []
      },
      {
        "id": "gray-700",
        "name": "Gray 700",
        "value": "#FFFFFF",
        "description": "WPDS gray700 — white canvas.",
        "aliases": []
      },
      {
        "id": "blue-40",
        "name": "Blue 40",
        "value": "#0A3258",
        "description": "WPDS blue40 — deepest navy ink-blue.",
        "aliases": []
      },
      {
        "id": "blue-60",
        "name": "Blue 60",
        "value": "#0F4B84",
        "description": "WPDS blue60 — heading-blue and trusted-source link.",
        "aliases": []
      },
      {
        "id": "blue-80",
        "name": "Blue 80",
        "value": "#1366B3",
        "description": "WPDS blue80 — quiet primary on dark surfaces.",
        "aliases": []
      },
      {
        "id": "blue-100",
        "name": "Blue 100",
        "value": "#166DFC",
        "description": "WPDS blue100 — primary CTA blue.",
        "aliases": []
      },
      {
        "id": "blue-200",
        "name": "Blue 200",
        "value": "#5784C5",
        "description": "WPDS blue200 — calmer link on lighter contexts.",
        "aliases": []
      },
      {
        "id": "red-60",
        "name": "Red 60",
        "value": "#8E1F1B",
        "description": "WPDS red60 — deep newsroom red.",
        "aliases": []
      },
      {
        "id": "red-80",
        "name": "Red 80",
        "value": "#BE2C25",
        "description": "WPDS red80 — emphasis and breaking-news pulse.",
        "aliases": []
      },
      {
        "id": "red-100",
        "name": "Red 100",
        "value": "#EA0017",
        "description": "WPDS red100 — masthead-bright breaking red.",
        "aliases": []
      },
      {
        "id": "orange-80",
        "name": "Orange 80",
        "value": "#D86100",
        "description": "WPDS orange80 — warning emphasis.",
        "aliases": []
      },
      {
        "id": "green-80",
        "name": "Green 80",
        "value": "#499327",
        "description": "WPDS green80 — confirmation / positive change.",
        "aliases": []
      },
      {
        "id": "gold-60",
        "name": "Gold 60",
        "value": "#9E6105",
        "description": "WPDS gold60 — opinion/analysis category accent.",
        "aliases": []
      }
    ],
    "modes": {
      "light": {
        "roles": {
          "background": "gray-700",
          "surface": "gray-600",
          "surface-elevated": "gray-700",
          "text-primary": "gray-20",
          "text-secondary": "gray-60",
          "text-tertiary": "gray-80",
          "primary": "blue-100",
          "primary-hover": "blue-80",
          "accent": "red-80",
          "accent-hover": "red-60",
          "warning": "orange-80",
          "error": "red-100",
          "success": "green-80",
          "border": "gray-300"
        }
      },
      "dark": {
        "roles": {
          "background": "gray-20",
          "surface": "gray-40",
          "surface-elevated": "gray-60",
          "text-primary": "gray-700",
          "text-secondary": "gray-400",
          "text-tertiary": "gray-300",
          "primary": "blue-200",
          "primary-hover": "blue-100",
          "accent": "red-80",
          "accent-hover": "red-100",
          "warning": "orange-80",
          "error": "red-100",
          "success": "green-80",
          "border": "gray-60"
        }
      }
    }
  },
  "fonts": [
    {
      "role": "heading",
      "ref": "playfair-display@1.0.0",
      "family": "Playfair Display",
      "classification": "serif",
      "source": {
        "kind": "google-fonts",
        "family": "Playfair Display",
        "url": "https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400..900;1,400..900&display=swap"
      },
      "fallbackStack": [
        "Iowan Old Style",
        "Apple Garamond",
        "Baskerville",
        "Times New Roman",
        "serif"
      ],
      "availableStyles": [
        {
          "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": "pt-serif@1.0.0",
      "family": "PT Serif",
      "classification": "serif",
      "source": {
        "kind": "google-fonts",
        "family": "PT Serif",
        "url": "https://fonts.googleapis.com/css2?family=PT+Serif:ital,wght@0,400;0,700;1,400;1,700&display=swap"
      },
      "fallbackStack": [
        "Charter",
        "Georgia",
        "Times New Roman",
        "serif"
      ],
      "availableStyles": [
        {
          "weight": 400,
          "style": "normal"
        },
        {
          "weight": 400,
          "style": "italic"
        },
        {
          "weight": 700,
          "style": "normal"
        },
        {
          "weight": 700,
          "style": "italic"
        }
      ]
    },
    {
      "role": "sans",
      "ref": "inter@1.0.0",
      "family": "Inter",
      "classification": "sans-serif",
      "source": {
        "kind": "google-fonts",
        "family": "Inter",
        "url": "https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,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": "mono",
      "ref": "jetbrainsmono-nerdfont@1.0.0",
      "family": "JetBrainsMono Nerd Font",
      "classification": "monospace",
      "source": {
        "kind": "external",
        "family": "JetBrainsMono Nerd Font",
        "notes": "Nerd-Font-patched build of JetBrains Mono. Not available via Google Fonts. Download woff2/ttf files from the Nerd Fonts GitHub release and self-host, or install system-wide for terminal/IDE use.\n"
      },
      "fallbackStack": [
        "JetBrains Mono",
        "Fira Code",
        "Menlo",
        "Monaco",
        "Consolas",
        "Liberation Mono",
        "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"
        },
        {
          "weight": 800,
          "style": "normal"
        },
        {
          "weight": 800,
          "style": "italic"
        }
      ]
    }
  ],
  "roles": {
    "colors": {
      "identity": "gray-700",
      "on-identity": "gray-20",
      "primary": "blue-100",
      "primary-hover": "blue-80",
      "accent": "red-80",
      "accent-hover": "red-60",
      "mark": "gray-0",
      "success": "green-80",
      "warning": "orange-80",
      "error": "red-100",
      "text-primary-light": "gray-20",
      "text-primary-dark": "gray-700",
      "background-light": "gray-700",
      "background-dark": "gray-20",
      "surface-light": "gray-600",
      "surface-dark": "gray-40",
      "text-secondary-light": "gray-60",
      "text-tertiary-light": "gray-80",
      "border-light": "gray-300"
    },
    "typography": {
      "display": "heading",
      "prose": "body",
      "ui": "sans",
      "code": "mono"
    }
  },
  "assets": [],
  "rules": [
    {
      "type": "contrastRatio",
      "target": "text-primary",
      "severity": "error",
      "rationale": "Gray 20 (#111111) on white gives ~19:1 — well past AAA. WPDS treats the gray-20-on-gray-700 pair as the canonical text/background combination for body prose; the accountability-journalism voice and long article sessions justify the AAA enhanced contrast target.\n",
      "against": "background",
      "minRatio": 7,
      "standard": "WCAG-AAA"
    },
    {
      "type": "colorChoice",
      "target": "roles.colors.primary",
      "severity": "error",
      "rationale": "WPDS scopes blue as the primary CTA and trusted-link family. Substituting red (the breaking-news emphasis color) for the primary role would collapse two distinct semantic meanings in the design system — links and emergencies.\n",
      "allowed": [
        "blue-100",
        "blue-80",
        "blue-60"
      ],
      "forbidden": [
        "red-100",
        "red-80",
        "orange-80"
      ]
    },
    {
      "type": "contextRestriction",
      "target": "roles.colors.accent",
      "severity": "error",
      "rationale": "The WaPo red (red-80 / red-100) carries breaking-news and editorial-category meaning in WPDS. Using it as a default CTA color would dilute the semantic weight and conflict with WPDS role mappings (cta = blue100).\n",
      "allowedContexts": [
        "breaking-news",
        "editorial-emphasis",
        "opinion-tag",
        "live-update"
      ],
      "forbiddenContexts": [
        "default-link",
        "body-emphasis",
        "default-cta"
      ]
    },
    {
      "type": "fontPairing",
      "target": "typography.display",
      "severity": "error",
      "rationale": "WaPo pairs Postoni Wide (a tall display serif) with Franklin for sans headings and Franklin / serif for body. The display-to-prose hierarchy is a defining element of the article-page identity; a 1.5× minimum size ratio preserves it when open-source substitutes stand in.\n",
      "requires": "prose",
      "minSizeRatio": 1.5
    },
    {
      "type": "forbiddenTreatment",
      "target": "logo",
      "severity": "error",
      "rationale": "The Old English wordmark is the institutional mark of the paper. Recoloring, rotation, gradients, or skewing conflict with the brand's voice of authority and the published WPDS asset guidance.\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. WaPo's accountability-journalism mission and its long-form article format justify the enhanced 7:1 target.\n",
      "standard": "WCAG-AAA",
      "criterion": "1.4.6"
    },
    {
      "type": "enumMembership",
      "target": "typography.heading.fontWeight",
      "severity": "warning",
      "rationale": "Postoni Wide ships in Regular through Black. Heading weights below Regular and synthetic Heavy beyond the Black cut would degrade the masthead-character of WaPo display type.\n",
      "allowed": [
        "400",
        "500",
        "600",
        "700",
        "900"
      ]
    },
    {
      "type": "compositionConstraint",
      "target": "roles.colors.primary",
      "severity": "recommendation",
      "rationale": "Blue 100 on the white canvas or against ink reads cleanly as a link or CTA. Placing it adjacent to the breaking-news red collapses the editorial-color hierarchy that WPDS establishes between informational blue and urgency red.\n",
      "pairsWith": [
        "gray-700",
        "gray-20",
        "gray-600"
      ],
      "doesNotPairWith": [
        "red-80",
        "red-100"
      ]
    }
  ]
}
