{
  "$description": "Brand: Signal (signal@1.0.0)",
  "color": {
    "swatches": {
      "$description": "Source-of-truth color swatches from palette signal@1.0.0",
      "signal-blue": {
        "$value": "#3A76F0",
        "$type": "color",
        "$description": "Signature Signal blue — the brand's primary color, used on the Signal mark, primary CTAs, and the outgoing-message bubble.\n"
      },
      "signal-blue-deep": {
        "$value": "#2563EB",
        "$type": "color",
        "$description": "Deeper marketing-site primary-action blue — used on the hero CTA button across signal.org.\n"
      },
      "signal-blue-action": {
        "$value": "#1A77C0",
        "$type": "color",
        "$description": "Deeper interactive blue — used on link hover and pressed states."
      },
      "signal-bubble-blue": {
        "$value": "#1A77C0",
        "$type": "color",
        "$description": "Chat-thread blue color."
      },
      "signal-bubble-green": {
        "$value": "#2C8948",
        "$type": "color",
        "$description": "Chat-thread green color."
      },
      "signal-bubble-green-light": {
        "$value": "#43955C",
        "$type": "color",
        "$description": "Chat-thread lighter green color."
      },
      "signal-bubble-purple": {
        "$value": "#6A2D8E",
        "$type": "color",
        "$description": "Chat-thread purple color."
      },
      "signal-bubble-violet": {
        "$value": "#7C25B1",
        "$type": "color",
        "$description": "Chat-thread violet color."
      },
      "signal-bubble-crimson": {
        "$value": "#C7354C",
        "$type": "color",
        "$description": "Chat-thread crimson / red color."
      },
      "signal-bubble-rust": {
        "$value": "#BA481E",
        "$type": "color",
        "$description": "Chat-thread rust / burnt-orange color."
      },
      "signal-bubble-amber": {
        "$value": "#FFC107",
        "$type": "color",
        "$description": "Chat-thread amber / yellow color (the Signal \"yellow bubble\")."
      },
      "signal-success": {
        "$value": "#287B41",
        "$type": "color",
        "$description": "Authored success / sent-status green."
      },
      "signal-error": {
        "$value": "#C01D36",
        "$type": "color",
        "$description": "Authored error / failed-send red."
      },
      "signal-warning": {
        "$value": "#E57200",
        "$type": "color",
        "$description": "Authored warning amber."
      },
      "signal-white": {
        "$value": "#FFFFFF",
        "$type": "color",
        "$description": "Pure white — primary surface on the marketing site and light-mode chat canvas."
      },
      "signal-surface-light": {
        "$value": "#F4F5F5",
        "$type": "color",
        "$description": "Light-mode elevated surface — chat-list rail."
      },
      "signal-border-light": {
        "$value": "#E0E2E3",
        "$type": "color",
        "$description": "Quiet divider on the marketing-site surface."
      },
      "signal-text-on-light": {
        "$value": "#1B1E20",
        "$type": "color",
        "$description": "Primary text on the marketing-site and light-mode chat canvas."
      },
      "signal-text-secondary-light": {
        "$value": "#5B646C",
        "$type": "color",
        "$description": "Secondary text on light-mode surfaces."
      },
      "signal-canvas-dark": {
        "$value": "#1B1E20",
        "$type": "color",
        "$description": "Deep near-black — Signal's dark-mode chat canvas tone, captured from the deployed signal.org dark stylesheet.\n"
      },
      "signal-surface-dark": {
        "$value": "#2D3236",
        "$type": "color",
        "$description": "Dark-mode elevated surface — chat-list rail."
      },
      "signal-surface-dark-elevated": {
        "$value": "#303A49",
        "$type": "color",
        "$description": "Dark-mode deepest-elevated surface."
      },
      "signal-text-on-dark": {
        "$value": "#FFFFFF",
        "$type": "color",
        "$description": "Primary text on the dark-mode canvas."
      },
      "signal-text-secondary-dark": {
        "$value": "#A7AFBC",
        "$type": "color",
        "$description": "Secondary text and timestamps on the dark canvas."
      }
    }
  },
  "font": {
    "$description": "Typography roles mapped to font atoms",
    "heading": {
      "family": {
        "$value": [
          "proxima-nova",
          "Inter",
          "-apple-system",
          "BlinkMacSystemFont",
          "Segoe UI",
          "Helvetica Neue",
          "Helvetica",
          "Arial",
          "sans-serif"
        ],
        "$type": "fontFamily",
        "$description": "heading role → Proxima Nova (proxima-nova@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"
      }
    },
    "body": {
      "family": {
        "$value": [
          "proxima-nova",
          "Inter",
          "-apple-system",
          "BlinkMacSystemFont",
          "Segoe UI",
          "Helvetica Neue",
          "Helvetica",
          "Arial",
          "sans-serif"
        ],
        "$type": "fontFamily",
        "$description": "body role → Proxima Nova (proxima-nova@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"
      }
    },
    "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": "colorChoice",
        "target": "logo.mark",
        "severity": "error",
        "rationale": "The Signal Brand Trademark Guidelines (signal.org/brand) prohibit altering the Signal mark via rotation, stretching, outlining, or \"effects\" — which includes recoloring. The speech-bubble mark renders in Signal Blue (#3A76F0) on light surfaces and reverses to white on the dark canvas. The per-thread \"color of conversation\" swatches are reserved for product-internal chat-bubble tinting and must not be used to recolor the mark itself.\n",
        "allowed": [
          "signal-blue",
          "signal-white"
        ],
        "forbidden": [
          "signal-bubble-purple",
          "signal-bubble-violet",
          "signal-bubble-crimson",
          "signal-bubble-rust",
          "signal-bubble-amber",
          "signal-bubble-green"
        ]
      },
      {
        "type": "forbiddenTreatment",
        "target": "logo",
        "severity": "error",
        "rationale": "The Signal Brand Trademark Guidelines explicitly enumerate these prohibitions: \"Don't alter logos via rotation, stretching, outlining, or effects,\" \"Don't modify the Signal wordmark typography,\" \"Don't combine Signal assets with other logos implying partnership,\" and \"never show the glyph smaller than 26×26 pixels.\" Encoding them as a forbidden-treatment rule lets consumers reject impermissible placements at validation time.\n",
        "treatments": [
          "stretched",
          "rotated",
          "recolored",
          "outlined",
          "drop-shadow",
          "gradient-fill",
          "on-busy-photo",
          "combined-with-other-logo",
          "wordmark-modified",
          "smaller-than-26px"
        ]
      },
      {
        "type": "numericRange",
        "target": "logo.minWidth",
        "severity": "error",
        "rationale": "The Signal Brand Trademark Guidelines specify a hard floor — \"never show the glyph smaller than 26×26 pixels\" — to preserve mark legibility at small render sizes. Encoding the floor here lets layout validators reject undersized placements of the speech-bubble glyph.\n",
        "min": 26,
        "unit": "px"
      },
      {
        "type": "numericRatio",
        "target": "logo.clearSpace",
        "severity": "error",
        "rationale": "The Signal Brand Trademark Guidelines specify a clear-space requirement of \"at least half (0.5x) the size of the logo around it.\" The 0.5× ratio is the floor; consumers may enforce stricter values per their layout system but must not reduce the clear-space allotment below this threshold.\n",
        "min": 0.5
      },
      {
        "type": "contrastRatio",
        "target": "text-primary",
        "severity": "error",
        "rationale": "WCAG 2.1 Level AA contrast minimum for body text. Signal Text on Light (#1B1E20) on the white canvas reads at roughly 17:1, and Text on Dark (#FFFFFF) on Canvas Dark (#1B1E20) reads at roughly 17:1 — both clear AA decisively. The rule encodes the floor for any new foreground/background pairing introduced on Signal-skinned surfaces.\n",
        "against": "background",
        "minRatio": 4.5,
        "standard": "WCAG-AA"
      },
      {
        "type": "contextRestriction",
        "target": "roles.colors.identity",
        "severity": "error",
        "rationale": "The Signal Brand Trademark Guidelines specifically prohibit use of the Signal trademarks \"in social media account names or profiles,\" \"in domain names,\" in unlicensed merchandise, or combined with other logos \"implying partnership without permission.\" Encoding these as forbidden contexts lets consumers reject impermissible placements.\n",
        "forbiddenContexts": [
          "product-of-competitor",
          "merchandise",
          "endorsement-implication",
          "sponsorship-implication",
          "domain-name",
          "social-media-handle"
        ]
      },
      {
        "type": "compositionConstraint",
        "target": "roles.colors.primary",
        "severity": "recommendation",
        "rationale": "Signal Blue reads cleanest against white, the deep near- black dark canvas, or the very-dark text tone. Pairing the primary blue adjacent to a thread-tint purple, crimson, or amber (which are reserved for per-conversation chat-bubble coloring) breaks the calibrated primary-vs-secondary hierarchy and visually competes with the brand mark.\n",
        "pairsWith": [
          "signal-white",
          "signal-canvas-dark",
          "signal-text-on-light",
          "signal-surface-light"
        ],
        "doesNotPairWith": [
          "signal-bubble-purple",
          "signal-bubble-crimson",
          "signal-bubble-amber"
        ]
      },
      {
        "type": "enumMembership",
        "target": "typography.heading.fontWeight",
        "severity": "warning",
        "rationale": "Proxima Nova ships in Thin (100) through Black (900), but Signal's marketing display and product UI sit in the Regular (400), Semibold (600), and Bold (700) band on the deployed signal.org marketing surface. Lighter or heavier cuts drift from the brand's earnest, principled voice.\n",
        "allowed": [
          "400",
          "600",
          "700"
        ]
      },
      {
        "type": "accessibilityRequirement",
        "target": "*",
        "severity": "error",
        "rationale": "WCAG 2.1 Success Criterion 1.4.3 (Contrast Minimum) — Level AA. Signal's accessibility-conscious posture and the dual light/dark canvas commitment make AA contrast checks the default verification on any new role pairing introduced on Signal-skinned surfaces.\n",
        "standard": "WCAG-AA",
        "criterion": "1.4.3"
      }
    ],
    "com.brand-atoms.assets": [],
    "com.brand-atoms.provenance": {
      "source": "https://signal.org/brand",
      "license": "Proprietary — All Rights Reserved",
      "attribution": "Signal and the Signal logo are trademarks of Signal Messenger, LLC. The Signal Brand Trademark Guidelines published at signal.org/brand enumerate the use restrictions encoded in the rules below — including the 0.5× clear-space requirement, the 26×26 minimum glyph size, prohibition on stretching/rotating/ outlining the mark, no domain-name use, no merchandise without permission, and the trademark-as-adjective grammar rule. The signature Signal Blue (#3A76F0) is documented in the simple- icons brand database (citing signal.org) and corroborated via the deployed signal.org marketing-site stylesheet.\n",
      "importedDate": "2026-05-18",
      "notes": "Derived from live site CSS at https://signal.org/ on 2026-05-18; the published signal.org/brand page is policy- and asset-link only (no hex codes in the visible content), so the supporting palette was captured from the deployed marketing-site stylesheet. Signal's marketing site uses Proxima Nova (sans) and roca (display serif); the mobile clients use platform system fonts (SF Pro on iOS, Roboto on Android). This atom references Proxima Nova@1 for the sans roles consistent with the marketing surface, with Inter@1 carrying nothing here — Proxima Nova is the open-source-licensed face surfaced by signal.org. The Signal brand policy expressly forbids combining the marks with other logos to imply partnership, modifying the wordmark, or monetising brand assets on merchandise — so `assets: []` is the correct posture for this catalog.\n"
    },
    "com.brand-atoms.references": {
      "palette": "signal@1.0.0",
      "fonts": {
        "heading": "proxima-nova@1.0.0",
        "body": "proxima-nova@1.0.0",
        "mono": "jetbrainsmono-nerdfont@1.0.0"
      }
    }
  }
}
