{
  "$description": "Brand: Node.js (nodejs@1.0.0)",
  "color": {
    "swatches": {
      "$description": "Source-of-truth color swatches from palette nodejs@1.0.0",
      "node-green": {
        "$value": "#5FA04E",
        "$type": "color",
        "$description": "Primary brand color — the hexagon mark fill, post-2024 refresh. Source: nodejs.org current logo / simple-icons.\n"
      },
      "node-green-classic": {
        "$value": "#339933",
        "$type": "color",
        "$description": "Historic Node Green used in earlier marks and still common across badges and community materials. Preserved for legacy surfaces.\n"
      },
      "node-green-foundation": {
        "$value": "#68A063",
        "$type": "color",
        "$description": "Node Green as published in the original Foundation Visual Identity Guidelines PDF. PANTONE 7741 C.\n"
      },
      "node-dark-green": {
        "$value": "#006837",
        "$type": "color",
        "$description": "Deep green used for hover states and shadowed accents per the Foundation guidelines. PANTONE 361 C (approx).\n"
      },
      "node-light-green": {
        "$value": "#39B54A",
        "$type": "color",
        "$description": "Lighter green used for highlights per the Foundation guidelines. PANTONE 360 C (approx).\n"
      },
      "node-black": {
        "$value": "#000000",
        "$type": "color",
        "$description": "Pure black per Foundation guidelines."
      },
      "node-charcoal": {
        "$value": "#1C1C1C",
        "$type": "color",
        "$description": "Dark-mode page canvas (brand-atoms inversion)."
      },
      "node-gray": {
        "$value": "#666666",
        "$type": "color",
        "$description": "Mid neutral."
      },
      "node-light-gray": {
        "$value": "#D5D5D5",
        "$type": "color",
        "$description": "Hairline borders."
      },
      "node-off-white": {
        "$value": "#F4F4F4",
        "$type": "color",
        "$description": "Subtle layered surface."
      },
      "node-white": {
        "$value": "#FFFFFF",
        "$type": "color",
        "$description": "Page canvas in light mode."
      }
    }
  },
  "font": {
    "$description": "Typography roles mapped to font atoms",
    "heading": {
      "family": {
        "$value": [
          "Inter",
          "-apple-system",
          "BlinkMacSystemFont",
          "Segoe UI",
          "Roboto",
          "Helvetica Neue",
          "Arial",
          "sans-serif"
        ],
        "$type": "fontFamily",
        "$description": "heading 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"
      }
    },
    "body": {
      "family": {
        "$value": [
          "Inter",
          "-apple-system",
          "BlinkMacSystemFont",
          "Segoe UI",
          "Roboto",
          "Helvetica Neue",
          "Arial",
          "sans-serif"
        ],
        "$type": "fontFamily",
        "$description": "body 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": [
          "Source Code Pro",
          "ui-monospace",
          "SFMono-Regular",
          "Menlo",
          "Consolas",
          "Liberation Mono",
          "monospace"
        ],
        "$type": "fontFamily",
        "$description": "mono role → Source Code Pro (source-code-pro@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"
        },
        "900": {
          "$value": 900,
          "$type": "fontWeight"
        },
        "$description": "Available font weights"
      }
    }
  },
  "$extensions": {
    "com.brand-atoms.rules": [
      {
        "type": "forbiddenTreatment",
        "target": "logo",
        "severity": "error",
        "rationale": "The Node.js hexagon mark is the brand's signature shape; altering its geometry, gradient-filling it, or recoloring it outside the documented green range violates the Foundation Visual Identity Guidelines.\n",
        "treatments": [
          "hexagon-shape-modified",
          "stretched",
          "rotated",
          "recolored",
          "gradient-fill",
          "drop-shadow",
          "on-busy-photo"
        ]
      },
      {
        "type": "colorChoice",
        "target": "roles.colors.identity",
        "severity": "warning",
        "rationale": "Node.js maintains three legitimate \"Node Green\" values — the post-2024 refresh (#5FA04E), the historic mark (#339933), and the Foundation PDF (#68A063). Light Green and Dark Green are supporting tones from the Foundation Guidelines and must not stand in as the primary mark fill.\n",
        "allowed": [
          "node-green",
          "node-green-classic",
          "node-green-foundation"
        ],
        "forbidden": [
          "node-light-green",
          "node-dark-green"
        ]
      },
      {
        "type": "variantSelection",
        "target": "roles.colors.identity",
        "severity": "warning",
        "rationale": "The current published Node.js mark (post-2024 refresh) uses #5FA04E. Choose this value for net-new surfaces; preserve #339933 only when matching legacy badges or community-distributed assets.\n",
        "when": {
          "mode": "current"
        },
        "use": "node-green"
      },
      {
        "type": "contrastRatio",
        "target": "text-primary",
        "severity": "error",
        "rationale": "Black on White exceeds 21:1 — well above the WCAG AA threshold for body text. The Foundation Guidelines designate Black as the canonical body-text color on White.\n",
        "against": "background",
        "minRatio": 4.5,
        "standard": "WCAG-AA"
      },
      {
        "type": "contrastRatio",
        "target": "roles.colors.primary",
        "severity": "warning",
        "rationale": "Node Green (#5FA04E) on White sits around 3.4:1 — clears AA-large for headlines but does NOT clear AA for body text. Reserve Node Green for large display, mark fills, and accents; use Node Dark Green (#006837) for body-text-weight foreground.\n",
        "against": "background",
        "minRatio": 3,
        "standard": "WCAG-AA-large"
      },
      {
        "type": "fontPairing",
        "target": "typography.heading",
        "severity": "recommendation",
        "rationale": "nodejs.org uses a single humanist sans for heading and body. Maintain at least a 1.5× heading-to-body ratio to preserve hierarchy.\n",
        "requires": "body",
        "minSizeRatio": 1.5
      },
      {
        "type": "accessibilityRequirement",
        "target": "*",
        "severity": "error",
        "rationale": "WCAG 2.1 Success Criterion 1.4.3 (Contrast Minimum) — Level AA. Node.js's Foundation Guidelines pair Node Green with Black and White to satisfy AA; consumers must not derive intermediate stops that defeat that property.\n",
        "standard": "WCAG-AA",
        "criterion": "1.4.3"
      },
      {
        "type": "compositionConstraint",
        "target": "roles.colors.identity",
        "severity": "recommendation",
        "rationale": "The Foundation Guidelines pair Node Green canonically with Black and White; Dark Green appears for shadowed mark variants. Other pairings depart from the documented identity.\n",
        "pairsWith": [
          "node-black",
          "node-white",
          "node-dark-green"
        ]
      },
      {
        "type": "contextRestriction",
        "target": "trademark.use",
        "severity": "error",
        "rationale": "The OpenJS Foundation Trademark Policy forbids product names that imply OpenJS or Node.js endorsement. Use the mark to indicate compatibility, not as part of a product identity.\n",
        "forbiddenContexts": [
          "product-name-prefix",
          "implied-endorsement"
        ]
      }
    ],
    "com.brand-atoms.assets": [],
    "com.brand-atoms.provenance": {
      "source": "https://nodejs.org/static/documents/foundation-visual-guidelines.pdf",
      "license": "MIT",
      "attribution": "Node.js is MIT-licensed and stewarded by the OpenJS Foundation. The Node.js hexagon mark and word mark are trademarks of the OpenJS Foundation. Brand colors documented here are drawn from the Node.js Foundation Visual Identity Guidelines PDF (nodejs.org/static/documents/ foundation-visual-guidelines.pdf) and supplemented by the post-2024 refresh Node Green (#5FA04E) used on the current nodejs.org logo and verified against the simple-icons project. This atom is brand-atoms' machine-readable encoding; no logos are bundled.\n",
      "importedDate": "2026-05-18",
      "notes": "The Foundation Visual Identity Guidelines PDF publishes Node Green at #68A063 (PANTONE 7741 C). The current nodejs.org logo uses a refreshed Node Green at #5FA04E. Both values appear in this atom's palette; #5FA04E is the primary role mapping per the current published mark. Typography in the original guidelines is \"Open Sans equivalent\" — Open Sans is not in the brand-atoms catalog; this atom uses Inter as the catalog-equivalent humanist sans.\n"
    },
    "com.brand-atoms.references": {
      "palette": "nodejs@1.0.0",
      "fonts": {
        "heading": "inter@1.0.0",
        "body": "inter@1.0.0",
        "mono": "source-code-pro@1.0.0"
      }
    }
  }
}
