{
  "schema": "brand-kit@2",
  "palette": {
    "paper": "#FFFFFF",
    "surface": "#F8F8F8",
    "ink": "#0C3C26",
    "ink_muted": "#798780",
    "accent": "#44B78B",
    "on_accent": "#FFFFFF",
    "accent_secondary": "#20AA76",
    "night": "#0C4B33",
    "on_night": "#F1FFF7",
    "extras": [
      {
        "name": "Logo Green",
        "hex": "#092E20",
        "role": "The only official logo color (RGB 9/46/32, CMYK 90/50/80/60). The logo's wordmark on white, and the ground of the white-on-green logo",
        "prov": "published",
        "source": "https://www.djangoproject.com/community/logos/"
      },
      {
        "name": "Text",
        "hex": "#0C3C26",
        "role": "Primary. Main text color in the light theme ($text, --body-fg)",
        "prov": "published",
        "source": "https://www.djangoproject.com/styleguide/",
        "site_use": "Body copy, headings and the homepage hero line (observed https://www.djangoproject.com/ (2026-10-31))"
      },
      {
        "name": "Dark Green",
        "hex": "#0C4B33",
        "role": "Primary. Backgrounds: the site header, the page-title bar and the bottom footer strip ($green-dark); also the theme-color meta",
        "prov": "published",
        "source": "https://www.djangoproject.com/styleguide/",
        "site_use": "Header band 82px tall at 1440 (observed https://www.djangoproject.com/ (2026-10-31))"
      },
      {
        "name": "Green",
        "hex": "#20AA76",
        "role": "Primary. Links (--link-color, --secondary); icon color in the style guide",
        "prov": "published",
        "source": "https://www.djangoproject.com/styleguide/",
        "site_use": "Feature icon circles, every green link, read-more links (observed https://www.djangoproject.com/ (2026-10-31))"
      },
      {
        "name": "Light Green",
        "hex": "#93D7B7",
        "role": "Primary. Light accent ($green-light); link color in dark mode; billboard banner ground",
        "prov": "published",
        "source": "https://www.djangoproject.com/styleguide/"
      },
      {
        "name": "White",
        "hex": "#F1FFF7",
        "role": "Primary. The guide's 'White': a faint green-white (--body-bg). Nav link color on Dark Green (--menu); hover ground of outline CTAs",
        "prov": "published",
        "source": "https://www.djangoproject.com/styleguide/",
        "site_use": "Nav links, footer links and heads, feature glyphs (observed https://www.djangoproject.com/ (2026-10-31))"
      },
      {
        "name": "Dark Red",
        "hex": "#6A0E0E",
        "role": "Primary. Error dark (--error-dark)",
        "prov": "published",
        "source": "https://www.djangoproject.com/styleguide/"
      },
      {
        "name": "Medium Dark Green",
        "hex": "#2B8C67",
        "role": "Secondary. Hover states and accents (--primary-accent); text in the bottom footer strip",
        "prov": "published",
        "source": "https://www.djangoproject.com/styleguide/",
        "site_use": "Footer strip text, credits and copyright (observed https://www.djangoproject.com/ (2026-10-31))"
      },
      {
        "name": "Medium Green",
        "hex": "#44B78B",
        "role": "Secondary. The CTA button fill and the copy-banner and footer ground (--primary)",
        "prov": "published",
        "source": "https://www.djangoproject.com/styleguide/",
        "site_use": "Hero and sidebar CTA fills, footer link band, search icon (observed https://www.djangoproject.com/ (2026-10-31))"
      },
      {
        "name": "Very Light Green",
        "hex": "#C9F0DD",
        "role": "Secondary. Copy-banner text on Medium Green, nav hover, text selection (--secondary-accent)",
        "prov": "published",
        "source": "https://www.djangoproject.com/styleguide/",
        "site_use": "Community card fill, nav hover, \"latest release\" text in the download button (observed https://www.djangoproject.com/ (2026-10-31))"
      },
      {
        "name": "Text Light",
        "hex": "#798780",
        "role": "Secondary. Alternate and meta text (--text-light)",
        "prov": "published",
        "source": "https://www.djangoproject.com/styleguide/",
        "site_use": "Sidebar link descriptions (observed https://www.djangoproject.com/ (2026-10-31))"
      },
      {
        "name": "Gray Line",
        "hex": "#CFE3DC",
        "role": "Secondary. Hairlines and borders (--hairline-color): section dividers, sidebar headings, outline buttons, example frames",
        "prov": "published",
        "source": "https://www.djangoproject.com/styleguide/",
        "site_use": "Hero bottom hairline, section rules, sidebar heading rules, outline button border, search border (observed https://www.djangoproject.com/ (2026-10-31))"
      },
      {
        "name": "Red",
        "hex": "#BA2121",
        "role": "Secondary. Error text (--error-fg)",
        "prov": "published",
        "source": "https://www.djangoproject.com/styleguide/"
      },
      {
        "name": "Paper White",
        "hex": "#FFFFFF",
        "role": "Main content column and homepage hero ground in the light theme (--white-color: #fff)",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_dark-mode.scss",
        "site_use": "Homepage copy-banner ground (observed https://www.djangoproject.com/ (2026-10-31))"
      },
      {
        "name": "Off White",
        "hex": "#F8F8F8",
        "role": "Page ground behind the content column, sidebar and code background ($white-dark, --sidebar-bg, --code-bg)",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_utils.scss",
        "site_use": "Root page ground (observed https://www.djangoproject.com/ (2026-10-31))"
      },
      {
        "name": "Gray Medium",
        "hex": "#859D94",
        "role": "Dark hairline; outline-button text (--dark-hairline-color)",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_utils.scss",
        "site_use": "Outline button text, news bylines (observed https://www.djangoproject.com/ (2026-10-31))"
      },
      {
        "name": "Gray Dark",
        "hex": "#343940",
        "role": "Dark gray utility ($gray-dark)",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_utils.scss"
      },
      {
        "name": "Green Dark Text",
        "hex": "#3C8866",
        "role": "Green text utility ($green-dark-text)",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_utils.scss"
      },
      {
        "name": "Code Border",
        "hex": "#EAEAEA",
        "role": "Code block border, light theme (--code-border)",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_dark-mode.scss"
      },
      {
        "name": "Warning Banner",
        "hex": "#FFE761",
        "role": "Banner preview notice ground ($warning-bg)",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_utils.scss"
      },
      {
        "name": "Warning Icon",
        "hex": "#E9BD46",
        "role": "Warning admonition icon",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_utils.scss"
      },
      {
        "name": "Warning Yellow",
        "hex": "#FFFDF1",
        "role": "Warning admonition ground",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_utils.scss"
      },
      {
        "name": "Warning Dark Yellow",
        "hex": "#F5F1C7",
        "role": "Warning dark ground",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_utils.scss"
      },
      {
        "name": "Orange",
        "hex": "#AB5603",
        "role": "Console-tab border, light theme",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_utils.scss"
      },
      {
        "name": "Dark Orange",
        "hex": "#F87C04",
        "role": "Console-tab color and border, dark theme",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_utils.scss"
      },
      {
        "name": "Red Light",
        "hex": "#FFBABA",
        "role": "Error light ground",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_utils.scss"
      },
      {
        "name": "Red Medium",
        "hex": "#E46767",
        "role": "Warning link block; error color in dark mode",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_utils.scss"
      },
      {
        "name": "Black",
        "hex": "#0E1117",
        "role": "Dark-mode page ground (--body-bg in dark); billboard text",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_utils.scss"
      },
      {
        "name": "Dark Mode Text",
        "hex": "#C1CAD2",
        "role": "Dark-mode body text (--body-fg in dark)",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_dark-mode.scss"
      },
      {
        "name": "Logo Ground Dark",
        "hex": "#272C27",
        "role": "Logo background in dark mode (--logo-bg)",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_utils.scss"
      },
      {
        "name": "Tile Green",
        "hex": "#113228",
        "role": "Windows tile color (msapplication-TileColor meta)",
        "prov": "observed",
        "source": "https://www.djangoproject.com/styleguide/"
      },
      {
        "name": "Link Hover",
        "hex": "#1D915C",
        "role": "Hover/focus colour of underlined body links ($text lightened 20%, --text-l20); community card title hover",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "name": "Link Visited",
        "hex": "#156741",
        "role": "Visited body links ($text lightened 10%, --text-l10)",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "name": "Link Green Hover",
        "hex": "#25C488",
        "role": "Hover colour of non-underlined green links: sidebar news titles and read-more links",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "name": "CTA Hover",
        "hex": "#51BE95",
        "role": "Hover fill of the Medium Green CTA buttons (lighten #44B78B 4%)",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "name": "CTA Active",
        "hex": "#41B085",
        "role": "Pressed fill of the Medium Green CTA buttons (darken #44B78B 2%)",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "name": "Menu Divider",
        "hex": "#106142",
        "role": "Rules between rows of the phone menu on Dark Green (lighten #0C4B33 5%)",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "name": "Heart Pink",
        "hex": "#D9195C",
        "role": "Fundraising heart pixel art (main pink)",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "name": "Heart Hot Pink",
        "hex": "#EE2178",
        "role": "Fundraising heart pixel art",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "name": "Heart Rose",
        "hex": "#D62D75",
        "role": "Fundraising heart pixel art",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "name": "Heart Crimson",
        "hex": "#AD1D45",
        "role": "Fundraising heart pixel art (shadow pixels)",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "name": "Heart Highlight",
        "hex": "#F7B0CF",
        "role": "Fundraising heart pixel art (one highlight pixel)",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "name": "Dark Footer Band",
        "hex": "#187F58",
        "role": "Footer link band in dark mode",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "name": "Dark Sidebar",
        "hex": "#181D27",
        "role": "Body and sidebar ground in dark mode ($black lightened 5%)",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "name": "Dark Meta",
        "hex": "#A1B4AD",
        "role": "Outline-button text and news byline in dark mode",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "name": "Dark Description",
        "hex": "#AFB7B3",
        "role": "Sidebar descriptions in dark mode",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      }
    ]
  },
  "typography": {
    "display": {
      "family": "Roboto",
      "steal_family": "Roboto",
      "weight": 300,
      "tracking": -0.028,
      "line_height": 1.3,
      "fallback_stack": "Roboto, Corbel, Avenir, \"Lucida Grande\", \"Lucida Sans\", sans-serif",
      "real": "Roboto (Google, open source; the site self-hosts it)",
      "stand_in": false,
      "files": [
        "https://raw.githubusercontent.com/django/djangoproject.com/main/djangoproject/static/font/Roboto-Light.woff2",
        "https://raw.githubusercontent.com/django/djangoproject.com/main/djangoproject/static/font/Roboto-Regular.woff2"
      ],
      "prov": "published",
      "source": "https://www.djangoproject.com/styleguide/",
      "site": {
        "weight": "300 for the copy banner (Light); 400 for H1/H2",
        "size_px": "Copy banner 32 (guide), 36 on the homepage hero; H1 32 (28 below 768px outside main); H2 24",
        "line_height": "1.3 copy banner; 1.1 H1",
        "tracking": "-1px on the copy banner and H1 (letter-spacing: -1px)",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_style.scss",
        "note": "Homepage hero measured at 36px/300, line 46.8px, tracking -1px, #0C3C26, centered (observed https://www.djangoproject.com/ (2026-10-31))"
      }
    },
    "body": {
      "family": "Roboto",
      "steal_family": "Roboto",
      "weight": 400,
      "tracking": 0,
      "line_height": 1.6,
      "scale": 1,
      "fallback_stack": "Roboto, Corbel, Avenir, \"Lucida Grande\", \"Lucida Sans\", sans-serif",
      "real": "Roboto",
      "stand_in": false,
      "files": [
        "https://raw.githubusercontent.com/django/djangoproject.com/main/djangoproject/static/font/Roboto-Regular.woff2",
        "https://raw.githubusercontent.com/django/djangoproject.com/main/djangoproject/static/font/Roboto-Italic.woff2",
        "https://raw.githubusercontent.com/django/djangoproject.com/main/djangoproject/static/font/Roboto-Bold.woff2",
        "https://raw.githubusercontent.com/django/djangoproject.com/main/djangoproject/static/font/Roboto-BoldItalic.woff2"
      ],
      "prov": "published",
      "source": "https://www.djangoproject.com/styleguide/",
      "site": {
        "weights": "400 body, 700 H3/H4, labels, CTAs and uppercase nav; 400 italic and 700 italic loaded",
        "sizes_px": "18 body; 16 sidebar CTA; 14 sidebar, meta, footer links and read-more; 13 nav",
        "line_height": "1.6 body; 1.2 H3-H5; 1.3 meta",
        "tracking": "normal",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_style.scss"
      }
    },
    "mono": {
      "family": "Fira Mono",
      "steal_family": "Fira Mono",
      "weight": 400,
      "fallback_stack": "\"Fira Mono\", Consolas, Menlo, Monaco, \"Courier New\", Courier, monospace",
      "real": "Fira Mono (Mozilla, SIL OFL 1.1)",
      "stand_in": false,
      "files": [
        "https://raw.githubusercontent.com/django/djangoproject.com/main/djangoproject/static/font/FiraMono-Regular.woff2",
        "https://raw.githubusercontent.com/django/djangoproject.com/main/djangoproject/static/font/FiraMono-Bold.woff2"
      ],
      "prov": "published",
      "source": "https://www.djangoproject.com/styleguide/",
      "site": {
        "weights": "400 and 700",
        "sizes_px": "1em of the surrounding text",
        "case": "as written",
        "tracking": "normal; common ligatures off (font-variant-ligatures: no-common-ligatures)",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_utils.scss"
      }
    },
    "calibration": "No stand-ins needed: the site's faces are open (Roboto 300/400/400i/700/700i, Fira Mono 400/700) and the real woff2 files ship in the fonts folder. The logo face, DTL Prokyon (Dutch Type Library), is proprietary and is used only inside the logo artwork; never set text in it and never retype the logo."
  },
  "style": {
    "button_shape": "rounded",
    "button_note": "Call-to-action buttons: Medium Green #44B78B fill, white Roboto Bold, 5px radius, 1em 1.5em padding, block-level and max 400px wide at 768px and up. Outline variant for less important actions: no fill, 1px Gray Line border, Gray Medium text, weight 400",
    "corners": "small: 5px on CTAs, 4px on framed images, example boxes and blockquotes",
    "linework": "1px Gray Line #CFE3DC hairlines divide sections, sidebar headings and lists",
    "motion": "Minimal: the mobile menu opens with max-height 0.3s ease-out; small opacity fades of 200-400ms",
    "prov": "published",
    "source": "https://www.djangoproject.com/styleguide/",
    "also": [
      "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_style.scss"
    ]
  },
  "voice": {
    "tone": [
      "Human",
      "Expert",
      "Plainspoken"
    ],
    "notes": [
      "The docs voice: one person addressing another, an expert helping a fellow developer (paraphrase of https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/).",
      "Systematic but not mechanical; some friction is necessary for a reader to grasp a concept (paraphrase).",
      "No grandiose, empty description: don't overuse superlatives such as clear, robust or structured.",
      "Never minimize difficulty: avoid easily, simply, just, merely, straightforward.",
      "Marketing pages use a different register: short, adverb-led benefit heads ('Ridiculously fast.', 'Reassuringly secure.') with a plain sentence under each (observed https://www.djangoproject.com/start/overview/).",
      "Self-aware wit is allowed in small places: the badge 'I wish this site were powered by Django', and #django IRC described as chat 'like it's 1999' (observed)."
    ],
    "rules": [
      {
        "id": "headline-case",
        "kind": "headline_case",
        "value": "sentence",
        "prov": "published",
        "source": "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/",
        "note": "Section titles: capitalize only initial words and proper nouns"
      },
      {
        "id": "spelling",
        "kind": "spelling",
        "value": "en-US",
        "prov": "published",
        "source": "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/"
      },
      {
        "id": "minimizers",
        "kind": "avoid",
        "terms": [
          "easily",
          "simply",
          "just",
          "merely",
          "straightforward"
        ],
        "prov": "published",
        "source": "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/"
      },
      {
        "id": "pronouns",
        "kind": "prefer",
        "term": "they/them/their",
        "over": [
          "he or she",
          "him or her",
          "his or her"
        ],
        "prov": "published",
        "source": "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/"
      },
      {
        "id": "superlatives",
        "kind": "guidance",
        "text": "Don't reach for grandiose, empty superlatives (clear, robust, structured)",
        "prov": "published",
        "source": "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/"
      },
      {
        "id": "django-cap",
        "kind": "guidance",
        "text": "Capitalize Django; lowercase only in Python code and in the logo",
        "prov": "published",
        "source": "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/"
      },
      {
        "id": "python-cap",
        "kind": "guidance",
        "text": "Capitalize Python when referring to the language",
        "prov": "published",
        "source": "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/"
      },
      {
        "id": "web",
        "kind": "prefer",
        "term": "the web / web framework / website",
        "over": [
          "the Web",
          "Web framework",
          "web site"
        ],
        "prov": "published",
        "source": "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/"
      },
      {
        "id": "email",
        "kind": "prefer",
        "term": "email",
        "over": [
          "e-mail"
        ],
        "prov": "published",
        "source": "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/"
      },
      {
        "id": "terms",
        "kind": "guidance",
        "text": "model, template, view lowercase; URLconf; subclass as one word; 'an HTTP', 'an SQL'",
        "prov": "published",
        "source": "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/"
      },
      {
        "id": "ai-content",
        "kind": "guidance",
        "text": "Own and review any AI-generated text; it must reflect your own voice",
        "prov": "published",
        "source": "https://www.djangoproject.com/conduct/"
      },
      {
        "id": "credit",
        "kind": "guidance",
        "text": "Credit the sources of content you contribute",
        "prov": "published",
        "source": "https://www.djangoproject.com/conduct/"
      }
    ],
    "approved": {
      "phrases": [
        "The web framework for perfectionists with deadlines.",
        "Ridiculously fast.",
        "Fully loaded.",
        "Reassuringly secure.",
        "Exceedingly scalable.",
        "Incredibly versatile."
      ],
      "words": [
        "pragmatic",
        "free and open source",
        "community"
      ]
    },
    "banned": [
      "easily",
      "simply",
      "just",
      "merely",
      "straightforward",
      "he or she",
      "e-mail",
      "Web (capitalized)",
      "-ise spellings"
    ],
    "is_not": [
      [
        "Human",
        "Frictionless"
      ],
      [
        "Expert",
        "Grandiose"
      ],
      [
        "Systematic",
        "Mechanical"
      ],
      [
        "Lively",
        "Dull"
      ],
      [
        "Honest about difficulty",
        "Dismissive"
      ],
      [
        "Welcoming",
        "Exclusive"
      ]
    ],
    "prov": "published",
    "source": "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/"
  },
  "spec": {
    "source": "https://www.djangoproject.com/styleguide/",
    "how": "The Django Web Style Guide (updated December 15, 2014), the Official Django Logos page and the DSF Trademark License, read 2026-10-31, plus the site's open-source SCSS (_utils.scss, _style.scss, _dark-mode.scss, _styleguide.scss at commit bf2d45dc) for exact values",
    "provenance": "published",
    "breakpoints": {
      "phone_max": 767,
      "all": [
        500,
        768,
        1024,
        1080,
        1280,
        1500
      ],
      "prov": "published",
      "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_style.scss",
      "note": "Desktop styles start at 768px (body min-width 768px); the nav collapses to a menu button below 1280px; the 'dj' logo replaces the wordmark below 500px; the tagline shows at 1500px+"
    },
    "motion": [
      {
        "name": "menu",
        "easing": "ease-out",
        "duration_ms": 300,
        "use": "Mobile nav drawer opens by max-height",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_style.scss"
      },
      {
        "name": "fade",
        "easing": "ease-in-out",
        "duration_ms": 200,
        "use": "Opacity fades (console tabs, overlays)",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_style.scss"
      },
      {
        "name": "slow",
        "easing": "ease-out",
        "duration_ms": 500,
        "use": "Larger transitions (all / top)",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_style.scss"
      }
    ],
    "icons": {
      "grid": "not published (Font Awesome 4.2.0 webfont glyphs)",
      "sizes": [
        {
          "name": "styleguide",
          "px": 32,
          "use": "Icon row in the style guide, Green #20AA76"
        }
      ],
      "stroke": "n/a: filled webfont glyphs",
      "caps_joins": "n/a",
      "color": "Green #20AA76 (--secondary) in the style guide sample",
      "rule": "Use Font Awesome for every interface icon; don't design one-off icons",
      "prov": "published",
      "source": "https://www.djangoproject.com/styleguide/",
      "also": [
        "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_font-awesome.scss",
        "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_styleguide.scss"
      ]
    },
    "type": [
      {
        "role": "Hero line (homepage copy banner)",
        "id": "hero",
        "face": "Roboto",
        "size": {
          "desktop": 36,
          "phone": 36
        },
        "line_height": 1.3,
        "tracking_px": -1,
        "weight": 300,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "Copy banner (section pages, guide)",
        "id": "banner",
        "face": "Roboto",
        "size": {
          "desktop": 32,
          "phone": 24
        },
        "line_height": 1.3,
        "tracking_px": -1,
        "weight": 300,
        "prov": "published",
        "source": "https://www.djangoproject.com/styleguide/"
      },
      {
        "role": "Main H1 (Meet Django)",
        "id": "h1",
        "face": "Roboto",
        "size": {
          "desktop": 32,
          "phone": 32
        },
        "line_height": 1.1,
        "tracking_px": -1,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "Main H2 (Join the Community)",
        "id": "h2",
        "face": "Roboto",
        "size": {
          "desktop": 24,
          "phone": 24
        },
        "line_height": 1.6,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "Feature title (24px on phone)",
        "id": "feature-title",
        "face": "Roboto",
        "size": {
          "desktop": 18,
          "phone": 24
        },
        "line_height": 1.6,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "Body / intro / feature text",
        "id": "body",
        "face": "Roboto",
        "size": {
          "desktop": 18,
          "phone": 18
        },
        "line_height": 1.6,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "Community card title",
        "id": "card-title",
        "face": "Roboto",
        "size": {
          "desktop": 20,
          "phone": 20
        },
        "line_height": 1.2,
        "tracking_px": 0,
        "weight": 700,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "Sidebar heading",
        "id": "side-heading",
        "face": "Roboto",
        "size": {
          "desktop": 20,
          "phone": 20
        },
        "line_height": 1.2,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "News title",
        "id": "news-title",
        "face": "Roboto",
        "size": {
          "desktop": 16,
          "phone": 16
        },
        "line_height": 1.2,
        "tracking_px": 0,
        "weight": 700,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "Sidebar text, links, descriptions",
        "id": "small",
        "face": "Roboto",
        "size": {
          "desktop": 14,
          "phone": 14
        },
        "line_height": 1.6,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "News byline (meta)",
        "id": "meta",
        "face": "Roboto",
        "size": {
          "desktop": 14,
          "phone": 14
        },
        "line_height": 1.3,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "Read-more link, sidebar (uppercase + ›)",
        "id": "readmore",
        "face": "Roboto",
        "size": {
          "desktop": 12,
          "phone": 12
        },
        "line_height": 1.6,
        "tracking_px": 0,
        "weight": 700,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "Nav link (uppercase)",
        "id": "nav",
        "face": "Roboto",
        "size": {
          "desktop": 13,
          "phone": 13
        },
        "line_height": 1.23,
        "tracking_px": 0,
        "weight": 700,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "Hero CTA label",
        "id": "cta",
        "face": "Roboto",
        "size": {
          "desktop": 18,
          "phone": 18
        },
        "line_height": 1.3,
        "tracking_px": -1,
        "weight": 700,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "Sidebar download button label",
        "id": "cta-side",
        "face": "Roboto",
        "size": {
          "desktop": 16,
          "phone": 16
        },
        "line_height": 1.6,
        "tracking_px": 0,
        "weight": 700,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "Outline button label",
        "id": "cta-outline",
        "face": "Roboto",
        "size": {
          "desktop": 18,
          "phone": 18
        },
        "line_height": 1.6,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "Footer column head",
        "id": "footer-head",
        "face": "Roboto",
        "size": {
          "desktop": 16,
          "phone": 16
        },
        "line_height": 1.2,
        "tracking_px": 0,
        "weight": 700,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "Footer link",
        "id": "footer-link",
        "face": "Roboto",
        "size": {
          "desktop": 14,
          "phone": 14
        },
        "line_height": 1.6,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "In-kind donors credit",
        "id": "credit",
        "face": "Roboto",
        "size": {
          "desktop": 20,
          "phone": 20
        },
        "line_height": 1.6,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "Footer fine print (credits labels, copyright)",
        "id": "fine",
        "face": "Roboto",
        "size": {
          "desktop": 12,
          "phone": 12
        },
        "line_height": 1.6,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "Back to top (phone only, uppercase)",
        "id": "backtotop",
        "face": "Roboto",
        "size": {
          "desktop": 14,
          "phone": 14
        },
        "line_height": 1.6,
        "tracking_px": 0,
        "weight": 700,
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      {
        "role": "H3 in main content (guide)",
        "id": "h3",
        "face": "Roboto",
        "size": {
          "desktop": 20,
          "phone": 20
        },
        "line_height": 1.2,
        "tracking_px": 0,
        "weight": 700,
        "prov": "published",
        "source": "https://www.djangoproject.com/styleguide/"
      }
    ],
    "signature": [
      {
        "id": "green-copy-banner",
        "name": "Green copy banner",
        "where": "the full-width band under the header on section pages (Community, Overview); the homepage swaps it for a white centered version",
        "spec": "Medium Green #44B78B band, one line of Roboto Light 32px (24 phone), tracking -1px, in Very Light Green #C9F0DD, with key words emphasized not by italics but by switching to the faint White #F1FFF7 (em: font-style normal). Left-aligned in the content container",
        "once": "one banner per page, directly under the header",
        "example": {
          "ground": "#44B78B",
          "text": "Building the Django Community for 21 years, 3 months. Come join us!",
          "mark": [
            "Django",
            "21 years, 3 months"
          ],
          "mark_style": "color #F1FFF7, roman"
        },
        "dont": "set it bold, italicize the emphasis, or put it below other content",
        "prov": "published",
        "source": "https://www.djangoproject.com/styleguide/",
        "also": [
          "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_style.scss",
          "https://www.djangoproject.com/community/logos/"
        ]
      },
      {
        "id": "dark-green-header",
        "name": "Dark Green header with uppercase nav",
        "where": "every page's top bar",
        "spec": "Dark Green #0C4B33 bar; white 'django' wordmark at left (104x36 box; the 'dj' mark below 500px); nav in Roboto Bold 13px uppercase, faint White #F1FFF7, hover Very Light Green, active Medium Green; search box and a theme toggle at right; the nav collapses to a menu button below 1280px",
        "once": "one header",
        "dont": "use the Logo Green #092E20 for the bar or recolor the wordmark",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_style.scss"
      },
      {
        "id": "readmore",
        "name": "Uppercase read-more link with a chevron",
        "where": "under feature blurbs and list modules",
        "spec": "Roboto Bold 14px uppercase in Green #20AA76, no underline, followed by ' ›' at 1.2em; back links use '‹ ' before",
        "example": {
          "text": "SEE HOW FAST YOU CAN START BUILDING ›"
        },
        "dont": "underline it or turn it into a button",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_style.scss"
      },
      {
        "id": "hairlines",
        "name": "Gray Line hairlines",
        "where": "between page sections, under sidebar headings, between list items",
        "spec": "1px solid Gray Line #CFE3DC; sections get 40px bottom padding then the rule; sidebar H2s are 20px Roboto Normal with 15px padding over the rule",
        "dont": "use heavy rules, shadows as dividers, or dark lines",
        "prov": "published",
        "source": "https://github.com/django/djangoproject.com/blob/main/djangoproject/scss/_style.scss"
      }
    ],
    "page": {
      "source": "https://www.djangoproject.com/",
      "date": "2026-10-31",
      "prov": "observed",
      "build_target": "Light theme (html data-theme light, or auto with a light OS). Every value below is the light state at rest. Dark mode is a toggle in the header; see dark_mode.",
      "voices": "Two voices. The guide voice (Human, Expert, Plainspoken; the docs style rules: sentence-case titles, no \"easily/simply/just\", en-US, Django and Python capitalised) governs documentation and long copy. The homepage voice is plainer and more institutional than a campaign and slightly more promotional than the docs: one Roboto Light sentence as the hero (\"Django makes it easier to build better web apps more quickly and with less code.\"), a 3-sentence intro paragraph, feature titles built as adverb + adjective with a full stop (\"Ridiculously fast.\", \"Reassuringly secure.\", \"Exceedingly scalable.\") each followed by one plain sentence, and CTAs that name the action (\"Get started with Django\", \"Learn more about Django\", \"Download latest release: 6.1.2\"). A landing page follows the homepage voice and this anatomy; the guide voice rules still hold (no minimizers, sentence case for headings). Wayfinding labels are kept verbatim even where they break sentence case: the footer column heads are Title Case (\"Learn More\", \"Get Involved\", \"Get Help\", \"Follow Us\", \"Support Us\") and so is the sidebar head \"Get Help\"; every other heading on the page is sentence case. Precedence: the style guide says marketing/landing pages use a single 740px column; the homepage itself uses the sidebar-right layout (main 62% + sidebar 30%). Build a homepage-style landing page with this sidebar-right anatomy; use the guide's single 740px column for single-purpose marketing pages without a sidebar.",
      "announcement": {
        "summary": "None on the homepage at rest. A #billboard container exists under the header but is empty on 2026-10-31 (no banner, 0px tall). When a campaign runs, it is a Light Green #93D7B7 band with a 1px #0E1117 top border, centred Roboto Light 1.8rem/1.4 text in #0E1117, max-width 60em, padding 1em 3em (1em 1.25em phone).",
        "resting_state": "Absent. Do not add one."
      },
      "nav": {
        "summary": "Desktop: one Dark Green bar, white \"django\" wordmark at left, ten uppercase links right-aligned in the middle, then a white search box and a half-circle theme-toggle icon at right. Phone: \"dj\" mark, search box, theme toggle and a hamburger in the same 82px bar.",
        "ground": "#0C4B33 (Dark Green), full bleed, no border, no shadow; the white hero below starts 1px under it (y 83)",
        "height": "82px at every width (padding 10px 0 6px around a 66px flex row)",
        "border": "none",
        "logo": {
          "variant": "white \"django\" wordmark (logo-django.svg, fill #FFFFFF, not currentColor) on desktop and >=500px; the white \"dj\" mark (logo-dj.svg) below 500px",
          "px": "wordmark box 104x36 (SVG 104x36); \"dj\" box 45x36",
          "position": "desktop x 70 y 25 (container padding 60px + 10px margin); phone x 4 y 25",
          "file": "https://raw.githubusercontent.com/django/djangoproject.com/main/djangoproject/static/img/logo-django.svg"
        },
        "links": {
          "count": 10,
          "labels": "OVERVIEW, DOWNLOAD, DOCUMENTATION, NEWS, CODE, ISSUES, COMMUNITY, FOUNDATION, ♥ DONATE, SPONSOR (source labels Overview, Download, Documentation, News, Code, Issues, Community, Foundation, ♥ Donate, Sponsor; rendered uppercase; the heart is the text character U+2665, not an icon)",
          "size": "13px/16px Roboto 700, text-transform uppercase, letter-spacing normal",
          "weight": 700,
          "color": "#F1FFF7 at rest; hover #C9F0DD; the active section is #44B78B (none active on the homepage)",
          "alignment": "flex row, each link padding 10px (36px tall hit area), no gap; boxes start x 272, 356, 447, 574, 630, 683, 747, 845, 945, 1031 and end x 1111; the nav block is pushed right by margin-left auto (starts x 270)"
        },
        "actions": [
          "Search field: white #FFFFFF input 214x46 at x 1123 y 20, 1px solid #CFE3DC border, radius 4px, padding 6px 37px 8px 10px, Roboto 16px #0C3C26; placeholder \"Search (⌘ K)\" in #0C3C26 (placeholder uses the body colour, not grey); focus border #20AA76",
          "Search button: 40x40 inside the right end of the field (x 1289 y 23), no fill, Font Awesome fa-search glyph 20px #44B78B; hover/focus #0C4B33",
          "Theme toggle: 39x45 transparent button at x 1339, Font Awesome fa-adjust (half-filled circle) 18px #F1FFF7; it cycles auto, dark (fa-moon-o), light (fa-sun-o); the screenshot state is auto (fa-adjust)",
          "No sign-in, no CTA button in the bar"
        ],
        "tagline": "\"The web framework for perfectionists with deadlines.\" sits after the logo (13px 700 #44B78B) only at 1500px and wider; hidden at 1440 and in every screenshot",
        "sticky": "not sticky; the header scrolls away with the page (position relative)",
        "phone": {
          "shows": "\"dj\" mark 45x36 at x 4 y 25; search field 212x46 at x 88 y 20 (same style); theme toggle 39x45 at x 304; hamburger button 45x45 at x 345 (Font Awesome fa-reorder 20px #F1FFF7 on #0C4B33). Nav links are hidden below 1280px, so tablets also get the hamburger.",
          "menu": "the nav drops down inside the green header (max-height 0 to 580px, 0.3s ease-out): full-width rows, 13px/16px 700 uppercase #F1FFF7, padding 20px 0, 10px side margin, each row topped by a 1px #106142 rule; same ten labels in the same order",
          "cta": "no CTA in the phone bar; the hero CTA is the first button"
        }
      },
      "hero": {
        "summary": "White, centred copy banner: one 36px Roboto Light sentence in two lines and one solid Medium Green button. No image, no eyebrow, no secondary CTA. A 1px #CFE3DC hairline closes it.",
        "desktop": {
          "section": "y 83-483 (400px incl. the 1px bottom border), ground #FFFFFF full bleed, padding 50px 0, text-align center",
          "column_split": "one centred column",
          "vertical_anchors": "headline <p> box y 169 (36px top margin), text lines y 170-264 (2 x 46.8px); CTA y 307-368; 40px CTA bottom margin then 50px band padding; hairline y 482",
          "text_max_width": "700px (x 370-1070), centred; forced by max-width, so it breaks after \"web apps\"",
          "media": "none",
          "cta_size": "267x61 at x 586 (centred)"
        },
        "phone": {
          "order": "headline, CTA",
          "alignment": "centred; the headline runs the full 390px with no side padding (the homepage banner overrides the usual 10px)",
          "sizes": "section y 83-576 (493px); headline 36px/46.8px, 4 lines (y 169-363): \"Django makes it easier to / build better web apps / more quickly and with less / code.\"; CTA 267x61 at x 61 y 400"
        },
        "at_rest": "Static. Nothing animates in the hero.",
        "media": "none: the hero is type and one button on white",
        "type": "Roboto 300 36px/46.8px (1.3), letter-spacing -1px, #0C3C26, centred, roman (the source wraps it in <em> but em is set font-style normal)",
        "cta": "Get started with Django: #44B78B fill, #FFFFFF Roboto 700 18px/23.4px, letter-spacing -1px (inherited from the banner, so it reads tight), padding 18px 50px 19.8px, radius 5px, no border, inline-block; hover #51BE95, active #41B085; focus outline 2px currentColor offset 2px",
        "proof": "none: no logos, stats or quotes anywhere on the homepage",
        "copy": [
          "Headline: \"Django makes it easier to build better web apps more quickly and with less code.\"",
          "CTA: \"Get started with Django\" (links to /start/)"
        ],
        "copy_prov": "observed, verbatim, https://www.djangoproject.com/ (2026-10-31)"
      },
      "sections": [
        {
          "name": "Two-column body frame (main left, sidebar right)",
          "summary": "Under the hero the page splits into a white main column on the left and a light grey #F8F8F8 sidebar on the right; the two run side by side down to the footer. This is the style guide's \"sidebar right\" layout.",
          "ground": "main #FFFFFF (its white extends to the left viewport edge through box-shadows); sidebar region #F8F8F8 (the body ground) from x 931 to the right edge",
          "desktop": {
            "container": "x 0-1440 with padding 0 60px (32/768 = 4.17% of the width), so content spans x 60-1380 (1320px, fluid; no max width)",
            "main": "x 60-931: width 62% (871px) with padding-right 4% (53px), content x 60-878 (818px); padding-bottom 80px; min-height 800px",
            "sidebar": "x 984-1380 (396px = 30%), margin-left 3% (40px), margin-top 20px, padding-bottom 40px",
            "split_line": "the white/grey boundary at x 931 is a hard colour edge, no rule",
            "height": "y 483-2798 (both columns end at the footer; main 2315px, sidebar 2275px)"
          },
          "phone": {
            "stacking": "one column: all of main (y 576-2489, padding 1px 10px 40px, white) then the sidebar (y 2519-4789, padding 0 10px 20px, on the #F8F8F8 body ground)",
            "gutter": "10px each side; content 370px"
          },
          "anatomy": [
            "Desktop styles start at 768px; below that every block is full width",
            "Main sections are divided by a 1px #CFE3DC rule after 40px bottom padding; the last section has none"
          ],
          "components": [
            "container",
            "main column",
            "sidebar column"
          ]
        },
        {
          "name": "Meet Django (intro + three features + outline button)",
          "summary": "Main column: 32px H1, an 18px intro paragraph, three feature rows each with an 80px green circle icon at left and a one-line title + one sentence at right, then a centred outline button.",
          "ground": "#FFFFFF",
          "desktop": {
            "band": "y 524-1381 (section box; 40px bottom padding then the 1px #CFE3DC rule at y 1381)",
            "h1": "\"Meet Django\" 32px/35.2px 400 -1px #0C3C26 at x 60 y 524 (margin 40px 0 30px)",
            "intro": "18px/28.8px 400 #0C3C26, 818px wide, 3 lines, y 589-675",
            "features": "dl starts y 725 (50px margin-top). Three rows on a 170px pitch: dt tops y 725, 895, 1065. Each dt has padding 20px 0 0 110px; the icon is absolutely placed at x 60, 20px below the dt top (y 745, 915, 1085), 80x80. Title 18px/28.8px 400 #0C3C26 at x 170 (y 745). Description <p> 18px/28.8px 400 #0C3C26 at x 170, 648px wide (dd padding 0 60px 20px 110px), starts 33px below the title top (y 778, 947, 1117), 2 lines each",
            "button": "Learn more about Django: outline button 456x67 at x 241 y 1253, centred in the 818px column (max-width 400px + 27px padding each side + 1px borders), 20px margins"
          },
          "phone": {
            "band": "y 617-1608 (section), content x 10-380",
            "h1": "32px/35.2px -1px at y 617, 1 line",
            "intro": "18px/28.8px, 7 lines, y 683-885",
            "features": "each dt carries a 1px #CFE3DC top rule and 25px top padding; a 40x40 green circle (font-size 24px glyph) sits inline before the title, 10px gap, and the title is 24px/38.4px 400 #0C3C26 on the same line; the description follows under it at 18px/28.8px, full width (no indent). dt tops y 934, 1126, 1318 (192px pitch)",
            "button": "outline button full width 370x67 at x 10 y 1501 (30px margin-top)"
          },
          "anatomy": [
            "Feature icons: solid #20AA76 circles (80px desktop, radius 40px; 40px phone) holding a #F1FFF7 Font Awesome 4.2 glyph (46px desktop, 24px phone): fa-bolt (\\f0e7), fa-lock (\\f023), fa-dashboard (\\f0e4). Use the supplied SVGs feature-bolt-80.svg, feature-lock-80.svg, feature-dashboard-80.svg (40px versions for phone)",
            "Icons at rest are upright (transform none). They spin in from rotate(0.5turn) when scrolled into view (0.3s ease-out): animation only",
            "Title and description are plain text, no links; the only link in the section is the outline button",
            "Outline button: transparent, 1px solid #CFE3DC, radius 5px, Roboto 18px/28.8px 400 #859D94, padding 18px 27px; hover text and border #20AA76; active #44B78B"
          ],
          "components": [
            "feature_row",
            "feature_icon",
            "button_outline"
          ],
          "copy": [
            "H1: \"Meet Django\"",
            "Intro: \"Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source.\"",
            "Feature 1: \"Ridiculously fast.\" / \"Django was designed to help developers take applications from concept to completion as quickly as possible.\"",
            "Feature 2: \"Reassuringly secure.\" / \"Django takes security seriously and helps developers avoid many common security mistakes.\"",
            "Feature 3: \"Exceedingly scalable.\" / \"Some of the busiest sites on the web leverage Django’s ability to quickly and flexibly scale.\"",
            "Button: \"Learn more about Django\" (links to /start/overview/)"
          ],
          "copy_prov": "observed, verbatim, https://www.djangoproject.com/ (2026-10-31)"
        },
        {
          "name": "Join the Community (two icon cards)",
          "summary": "Main column: a 24px H2 and two 300px square pale-green cards with rounded corners, each a big dark-green icon over an underlined bold title; the whole card is the link.",
          "ground": "#FFFFFF",
          "desktop": {
            "band": "y 1430-1798 (last main section, no bottom rule); main then pads 80px to y 2798 where the footer starts",
            "h2": "\"Join the Community\" 24px/38.4px 400 #0C3C26 at x 60 y 1430 (margin 50px 0 30px)",
            "cards": "flex row with 60px gap (6rem on a 10px root), left-aligned: card 1 x 60-360, card 2 x 420-720, both y 1499-1799, 300x300",
            "card_inside": "fill #C9F0DD, radius 20px, padding 20px, flex column centred both ways; icon 150x150 (x +75, y +28); title 20px/24px Roboto 700 #0C4B33 with margin 40px 0 20px (title top y +227), centred"
          },
          "phone": {
            "band": "y 1659-2387; H2 at y 1659",
            "cards": "stacked and centred: 300x300 at x 45, y 1727 and y 2087 (60px gap)",
            "back_to_top": "phone only: \"BACK TO TOP\" link under the cards, 370x42 at y 2397, Roboto 14px/22.4px 700 uppercase #20AA76, centred, padding 10px 0, preceded by a Font Awesome fa-chevron-up 14px; hidden from 768px up"
          },
          "anatomy": [
            "Card icons are inline SVGs coloured #0C4B33 (fill currentColor in the source): a Material Symbols \"forum\" double speech bubble (viewBox 0 0 48 48) and the Discord logo in a speech-bubble tile (viewBox 0 0 256 293). Use community-forum.svg and community-discord.svg",
            "Card title is underlined; the underline is the link's #20AA76 (the text itself is #0C4B33); hover turns the link colour #1D915C",
            "No border, no shadow on the cards"
          ],
          "components": [
            "community_card"
          ],
          "copy": [
            "H2: \"Join the Community\"",
            "Card 1: \"Forum - Post a question\" (https://forum.djangoproject.com/)",
            "Card 2: \"Discord - Chat with us\" (https://chat.djangoproject.com)"
          ],
          "copy_prov": "observed, verbatim, https://www.djangoproject.com/ (2026-10-31)"
        },
        {
          "name": "Sidebar: download button and docs link",
          "summary": "Top of the grey sidebar: a full-width Medium Green download button with the release number, then a small centred uppercase docs link.",
          "ground": "#F8F8F8",
          "desktop": {
            "button": "396x58 at x 984 y 523: #44B78B, radius 5px, padding 16px 24px, Roboto 16px/25.6px 700, centred; \"Download \" in #FFFFFF then \"latest release: 6.1.2\" in #C9F0DD (an <em> set roman); hover #51BE95",
            "docs_link": "\"DJANGO DOCUMENTATION ›\" 12px/19.2px 700 uppercase #20AA76, centred, block, y 590 (margin-top -10px pulls it under the button)"
          },
          "phone": {
            "button": "370x58 at x 10 y 2519 (30px under the main column)",
            "docs_link": "centred at y 2587"
          },
          "anatomy": [
            "The release number is live content: 6.1.2 on 2026-10-31. Keep the structure \"Download latest release: X.Y.Z\"",
            "Read-more chevron is the text \" ›\" generated after the label at 1.2em"
          ],
          "components": [
            "button_sidebar",
            "readmore_link"
          ],
          "copy": [
            "Button: \"Download latest release: 6.1.2\"",
            "Link: \"Django documentation\" (rendered uppercase)"
          ],
          "copy_prov": "observed, verbatim, https://www.djangoproject.com/ (2026-10-31)"
        },
        {
          "name": "Sidebar: Support Django! (donation module)",
          "summary": "Sidebar heading over a hairline, then a pixel-art heart at left and a three-line green donor sentence at right.",
          "ground": "#F8F8F8",
          "desktop": {
            "heading": "\"Support Django!\" 20px/24px 400 #0C3C26 at y 633, padding-bottom 15px, 1px #CFE3DC rule under it (y 672), 396px",
            "heart": "fundraising-heart.svg at x 984 y 713, 64x55 (float left, width 20%, max 64px, 20px top and bottom margin)",
            "text": "float left, width 70%, 5% side margins: starts x 1083 y 710, 277px wide, 14px/22.4px 400 #20AA76 link, no underline, 3 lines"
          },
          "phone": {
            "heart": "64x55 at x 10 y 2700",
            "text": "x 103, 259px wide, 3 lines"
          },
          "anatomy": [
            "The donor sentence rotates per page load: \"<Donor> donated to the Django Software Foundation to support Django development. Donate today!\" (observed \"Hale Law, P.A.\" in the measurement and \"Sunscrapers\" in the screenshot, 2026-10-31). It links to /fundraising/",
            "Heart: 8x7 grid of square pixels in pinks #D9195C, #EE2178, #D62D75, #AD1D45 with one highlight #F7B0CF; use the SVG as supplied"
          ],
          "components": [
            "sidebar_heading",
            "donation_snippet"
          ]
        },
        {
          "name": "Sidebar: Latest news",
          "summary": "Sidebar heading, then three news items (bold green title, 14px summary, grey byline) separated by hairlines, then MORE NEWS ›.",
          "ground": "#F8F8F8",
          "desktop": {
            "heading": "\"Latest news\" text at y about 809 (its box starts y 693 and wraps under the floated heart), rule at y 847",
            "items": "first title y 884, second item rule y 1080 / title 1126, third rule y 1299 / title 1345; items after the first have border-top 1px #CFE3DC, margin-top 35px, padding-top 10px",
            "item_inside": "h4 title 16px/19.2px 700, a link #20AA76 no underline (hover #25C488), h4 margin-top 35px for the first; summary <p> 14px/22.4px 400 #0C3C26, margin 14px 0; byline 14px/18.2px 400 #859D94 with the author in <strong> 700, margin 10px 0 20px",
            "more": "\"MORE NEWS ›\" 12px/19.2px 700 uppercase #20AA76 at y 1469"
          },
          "phone": {
            "items": "same structure at 370px: titles y 2870, 3134, 3354; MORE NEWS y 3500"
          },
          "anatomy": [
            "Live content, recorded 2026-10-31 in order:",
            "1. \"Quarterly contributor outreach\" / \"The Steering Council is reaching out to bring people's attention to a few areas. We have major features we'd like to test and review for 6.2, smaller changes that could use attention and then various New Feature ideas we'd like community input on.\" / \"FEATURED | Posted by Tim Schilling on Oct. 19, 2026\" (FEATURED is uppercase, then a | separator)",
            "2. \"Natalia Bidart - Planned short-term leave\" / \"Natalia Bidart will take a three-month break from her Django Fellow duties from November 2026 through January 2027, returning in February.\" / \"Posted by Natalia Bidart on Oct. 26, 2026\"",
            "3. \"Django security reporting update\" / \"We are updating how security issues in Django are reported.\" / \"Posted by The Django Security Team on Oct. 8, 2026\"",
            "Byline structure: [FEATURED | ]Posted by <strong>Author</strong> on Mon. D, YYYY"
          ],
          "components": [
            "news_item",
            "readmore_link"
          ]
        },
        {
          "name": "Sidebar: link modules",
          "summary": "Five more sidebar modules, each a 20px heading over a hairline, a short list of green 14px links (with a document icon, or with a grey description line), and usually an uppercase read-more link.",
          "ground": "#F8F8F8",
          "desktop": {
            "headings_y": "New to Django? 1532; The power of Django 1734; Get involved 2000; Get Help 2259; The Django Software Foundation 2465 (each margin 30px 0 20px, padding-bottom 15px, 1px #CFE3DC rule)",
            "docs_list": "li rows 32px pitch (14px/22.4px, li margin-top 10px); each link preceded by Font Awesome fa-file-text-o (\\f0f6) 14px in #20AA76, floated in a 23px-wide slot, then the link #20AA76 at x +23",
            "dl_list": "dt link 14px/22.4px 400 #20AA76 at x 984, dd description 14px/22.4px #798780 under it (padding-top 2px, margin 2.8px 0 16.8px); 67px pitch between dts",
            "readmores_y": "GETTING STARTED WITH DJANGO › 1671; EXPLORE MORE FEATURES › 1937; INSIDE THE DJANGO COMMUNITY › 2196; (none under Get Help); MORE ABOUT THE DSF › 2705"
          },
          "phone": {
            "layout": "same order and spacing at 370px wide; headings y 3563, 3765, 4032, 4291, 4497; sidebar ends y 4789"
          },
          "anatomy": [
            "New to Django? (docs list): Installation guide; Write your first Django app; read-more \"Getting started with Django\"",
            "The power of Django (docs list): Object-relational mapper; Automatic admin interface; Robust template system; Quick internationalization; read-more \"Explore more features\"",
            "Get involved (link + description): Ticket system / Report bugs and make feature requests; Development dashboard / see what's currently being worked on; read-more \"Inside the Django community\"",
            "Get Help (link + description): Django Discord Server / Join the Django Discord Community; Official Django Forum / Join the community on the Django Forum.",
            "The Django Software Foundation (link + description): About the Foundation / Our non-profit supports the project; Support Django / Your contribution makes Django stronger; Contact the Django Software Foundation (no description); read-more \"More about the DSF\"",
            "Read-more labels are rendered uppercase with \" ›\" after; descriptions keep their own case (note the lowercase \"see what's...\")"
          ],
          "components": [
            "sidebar_heading",
            "docs_list_item",
            "link_description_item",
            "readmore_link"
          ]
        }
      ],
      "footer": {
        "summary": "Two-part footer: a Medium Green #44B78B link band with five columns of #F1FFF7 links, then a Dark Green #0C4B33 strip with the white wordmark, hosting and design credits, and the copyright line.",
        "ground": "#44B78B link band (y 2798-3092 desktop) then a 20px #44B78B gap, then #0C4B33 strip (y 3112-3263, 151px)",
        "anatomy": [
          "Link band: container padding 0 60px; five columns in a flex row with justify-content space-between, each as wide as its longest label: x 60 (177px), 364 (143), 634 (134), 896 (136), 1159 (221)",
          "Column heads 16px/19.2px Roboto 700 #F1FFF7, padding 30px 0 10px (text top y 2828); list margin-top 15px; links 14px/22.4px 400 #F1FFF7, no underline (hover underline), rows on a 32.4px pitch from y 2880; list padding-bottom 30px",
          "Learn More: About Django, Getting Started with Django, Team Organization, Django Software Foundation, Code of Conduct, Diversity Statement",
          "Get Involved: Join a Group, Contribute to Django, Submit a Bug, Report a Security Issue, Individual membership",
          "Get Help: Getting Help FAQ, Django Discord, Official Django Forum",
          "Follow Us: GitHub, X, Fediverse (Mastodon), Bluesky, LinkedIn, News RSS (text links, no social icons)",
          "Support Us: Sponsor Django, Donate to Django, Corporate membership, Official merchandise store, Benevity Workplace Giving Program, GitHub Sponsors",
          "Strip: padding 10px 0 30px. White wordmark logo-django.svg 109x39 box (SVG 104x36, left-centred) at x 60 y 3142",
          "Credits at x 496 and x 931 (30% columns): \"Hosting by\" 12px #2B8C67 (in a 24px box, line-height 36px) over \"In-kind donors\" 20px/32px #2B8C67 link at y 3150, no underline; \"Design by\" over the threespot logo (94x33 box, logo-threespot.svg 84x20) at x 931 y 3151, \"&\" 12px #2B8C67 at x 1034 (6px side margins, nudged 6px down), andrevv logo (94x33 box, logo-andrevv.svg 65x10) at x 1063. Both credit logos are #F1FFF7 at about 0.4 opacity (baked into the SVGs), reading as a muted grey-green",
          "Copyright at x 60, padding-top 30px (text y 3214), 12px/19.2px #2B8C67, max-width 80%: \"© 2005-2026 Django Software Foundation and individual contributors. Django is a registered trademark of the Django Software Foundation.\" with \"Django Software Foundation\" (to /foundation/) and \"registered trademark\" (to /trademarks/) underlined in #2B8C67",
          "No street address, phone number or social icons are published in the footer"
        ],
        "phone": "Link band (y 4790-6233, padding 0 10px): the five columns stack in one 370px column; each head gets a 1px #CFE3DC top rule, margin-top 20px, padding 30px 0 10px; same 32.4px link pitch. Strip (y 6253-6646): wordmark at x 10 y 6283; credits stack as full-width rows (padding 17px 10px 11px): \"Hosting by\" / \"In-kind donors\", then \"Design by\" / threespot logo / \"&\" / andrevv logo each on its own line; copyright at x 10 y 6578 in 2 lines.",
        "copyright": "© 2005-2026 Django Software Foundation and individual contributors. Django is a registered trademark of the Django Software Foundation."
      },
      "dark_ground": {
        "secondary_button": "none on dark grounds; the only buttons are the #44B78B CTAs on white/grey",
        "link": "on #0C4B33 (header): #F1FFF7, hover #C9F0DD; on #44B78B (footer band): #F1FFF7, hover underline; on the #0C4B33 strip: #2B8C67 underlined",
        "muted_text": "#2B8C67 on the #0C4B33 strip",
        "hairline": "#106142 between rows of the phone menu on #0C4B33",
        "logo_variant": "white wordmark logo-django.svg (#FFFFFF) on #0C4B33 in both header and footer; never the Logo Green #092E20 artwork"
      },
      "dark_mode": "Toggle only (auto follows the OS). In dark: body/sidebar #181D27, main and hero #0E1117, text #C1CAD2, links #93D7B7, header and footer strip stay #0C4B33, footer band #187F58, CTAs keep #44B78B with #0E1117 text, feature circles #20AA76 with #0E1117 glyphs, community cards #0C4B33 with #93D7B7 icons and #F1FFF7 titles, meta #A1B4AD, descriptions #AFB7B3. Not the build target."
    },
    "bands": [
      {
        "label": "Header",
        "ground": "#0C4B33",
        "content": "wordmark, 10 uppercase links, search field, theme toggle",
        "desktop": "1440x82 at y 0; wordmark x 70; links x 272-1111; search x 1123-1337; toggle x 1339",
        "phone": "390x82: dj mark, search, toggle, hamburger",
        "anatomy": [
          "Not sticky",
          "Links 13px 700 uppercase #F1FFF7, 10px padding each"
        ]
      },
      {
        "label": "Hero copy banner",
        "ground": "#FFFFFF",
        "content": "one 36px Light sentence + Get started with Django",
        "desktop": "y 83-483, padding 50px 0, text 700px centred in 2 lines, CTA 267x61",
        "phone": "y 83-576, text 4 lines full width, CTA 267x61 centred",
        "anatomy": [
          "1px #CFE3DC bottom hairline",
          "No image, no eyebrow"
        ]
      },
      {
        "label": "Meet Django (main column)",
        "ground": "#FFFFFF",
        "content": "H1, intro, three icon features, outline button",
        "desktop": "y 524-1381 in x 60-878; features on a 170px pitch with 80px circles; 1px rule at the end",
        "phone": "y 617-1608; 40px circles inline with 24px titles; hairline above each feature",
        "anatomy": [
          "Sidebar runs alongside from y 523",
          "Main column ground #FFFFFF; the parallel right sidebar sits on #F8F8F8"
        ]
      },
      {
        "label": "Join the Community (main column)",
        "ground": "#FFFFFF",
        "content": "H2 + two 300x300 #C9F0DD icon cards",
        "desktop": "y 1430-1799, cards at x 60 and 420, 60px gap",
        "phone": "cards stacked and centred, then BACK TO TOP",
        "anatomy": [
          "Main column then pads 80px to the footer at y 2798"
        ]
      },
      {
        "label": "Sidebar (parallel to the main column)",
        "ground": "#F8F8F8",
        "content": "Download button, docs link, Support Django!, Latest news, New to Django?, The power of Django, Get involved, Get Help, The Django Software Foundation",
        "desktop": "x 984-1380, y 523-2738",
        "phone": "after the main column, y 2519-4789, 10px gutters",
        "anatomy": [
          "Each module: 20px 400 heading, 15px padding, 1px #CFE3DC rule, 14px green links, uppercase read-more ›"
        ]
      },
      {
        "label": "Footer link band",
        "ground": "#44B78B",
        "content": "five link columns",
        "desktop": "y 2798-3092, columns spread with space-between",
        "phone": "y 4790-6233, one column with hairlines over each head",
        "anatomy": [
          "Heads 16px 700, links 14px, all #F1FFF7"
        ]
      },
      {
        "label": "Footer strip",
        "ground": "#0C4B33",
        "content": "wordmark, Hosting by In-kind donors, Design by threespot & andrevv, copyright",
        "desktop": "y 3112-3263 (151px)",
        "phone": "y 6253-6646, credits stacked",
        "anatomy": [
          "Text #2B8C67; credit logos #F1FFF7 at 0.4 opacity"
        ]
      }
    ],
    "layout": {
      "page_margin": {
        "desktop": 60,
        "phone": 10
      },
      "section_padding": {
        "desktop": 40,
        "phone": 40
      },
      "container_max": 1320,
      "hero_text_max": 700,
      "columns": 2,
      "columns_phone": 1,
      "gutter": 106,
      "gutter_phone": 10,
      "card_gap": 60,
      "nav_height": 82,
      "note": "Measured on https://www.djangoproject.com/ (2026-10-31) at 1440 and 390, cross-checked with _style.scss. The container is fluid: padding 0 4.17% (32/768; 60px at 1440), no max width, so content spans x 60-1380. Main column 62% (871px) with 4% right padding (818px of content); sidebar 30% (396px) with a 3% (40px) left margin; 106px between main content and sidebar content. Main sections end with 40px padding and a 1px #CFE3DC rule; main pads 80px before the footer. The hero banner pads 50px top and bottom. Phone: 10px gutters, one column, desktop styles from 768px. Root font-size 10px (62.5%), so rem values read as 10px.",
      "prov": "observed",
      "source": "https://www.djangoproject.com/ (2026-10-31)"
    },
    "components": {
      "button_primary": {
        "fill": "#44B78B",
        "text": "#FFFFFF",
        "border": "none",
        "radius": 5,
        "padding": "18px 50px 19.8px",
        "height": 61,
        "example": "Get started with Django (267x61)",
        "text_style": "18px/23.4px Roboto 700, letter-spacing -1px",
        "padding_x": 50,
        "font_size": 18,
        "weight": 700,
        "face": "body",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)",
        "states": {
          "hover": {
            "measured": {
              "fill": "#51BE95"
            },
            "css": {
              "background-color": "#51BE95"
            },
            "prov": "observed"
          },
          "active": {
            "measured": {
              "fill": "#41B085"
            },
            "css": {
              "background-color": "#41B085"
            },
            "prov": "published"
          },
          "focus": {
            "measured": {
              "outline": "2px solid #44B78B, offset 2px"
            },
            "css": {
              "outline": "2px solid #44B78B",
              "outline-offset": "2px"
            },
            "prov": "published"
          }
        }
      },
      "button_sidebar": {
        "fill": "#44B78B",
        "text": "#FFFFFF",
        "border": "none",
        "radius": 5,
        "padding": "16px 24px",
        "height": 58,
        "example": "Download latest release: 6.1.2 (full sidebar width, 396x58); the <em> part is #C9F0DD, roman",
        "text_style": "16px/25.6px Roboto 700",
        "padding_x": 24,
        "font_size": 16,
        "weight": 700,
        "face": "body",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)",
        "states": {
          "hover": {
            "measured": {
              "fill": "#51BE95"
            },
            "css": {
              "background-color": "#51BE95"
            },
            "prov": "observed"
          },
          "active": {
            "measured": {
              "fill": "#41B085"
            },
            "css": {
              "background-color": "#41B085"
            },
            "prov": "published"
          }
        }
      },
      "button_outline": {
        "fill": "none",
        "text": "#859D94",
        "ring_px": 1,
        "ring": "#CFE3DC",
        "border": "1px solid #CFE3DC",
        "radius": 5,
        "padding": "18px 27px",
        "height": 67,
        "example": "Learn more about Django (456x67 desktop, max-width 400px content; full width on phone)",
        "text_style": "18px/28.8px Roboto 400",
        "padding_x": 27,
        "font_size": 18,
        "weight": 400,
        "face": "body",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)",
        "states": {
          "hover": {
            "measured": {
              "text": "#20AA76",
              "border": "#20AA76"
            },
            "css": {
              "color": "#20AA76",
              "box-shadow": "inset 0 0 0 1px #20AA76"
            },
            "prov": "observed"
          },
          "active": {
            "measured": {
              "text": "#44B78B",
              "border": "#44B78B"
            },
            "css": {
              "color": "#44B78B",
              "box-shadow": "inset 0 0 0 1px #44B78B"
            },
            "prov": "published"
          }
        }
      },
      "feature_icon": {
        "fill": "#20AA76",
        "on": "#F1FFF7",
        "radius": 40,
        "size": "80px circle, 46px glyph (desktop); 40px circle, 24px glyph (phone)",
        "glyphs": "Font Awesome 4.2.0 fa-bolt, fa-lock, fa-dashboard",
        "files": "feature-bolt, feature-lock and feature-dashboard SVGs at 80px and 40px (see the slot images)",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)",
        "note": "Static state upright; the spin-in from rotate(0.5turn) on scroll is animation only",
        "radius_note": "border-radius 50% (a circle): 40px on the 80px desktop circle, 20px on the 40px phone circle"
      },
      "feature_row": {
        "desktop": "icon absolute at left (x 0, 20px down); title and text indented 110px; text column 648px (60px right padding); 170px row pitch",
        "phone": "1px #CFE3DC top rule, 25px top padding, 40px icon inline + 10px gap + 24px title; text full width below",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      "community_card": {
        "fill": "#C9F0DD",
        "radius": 20,
        "size": "300x300",
        "padding": "20px",
        "icon": "150x150 #0C4B33 SVG",
        "title": "20px/24px 700 #0C4B33, underline #20AA76",
        "gap": "60px",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)",
        "states": {
          "hover": {
            "measured": {
              "link_color": "#1D915C (underline)"
            },
            "prov": "observed"
          }
        }
      },
      "sidebar_heading": {
        "text": "#0C3C26",
        "text_style": "20px/24px Roboto 400",
        "rule": "1px solid #CFE3DC under, 15px padding-bottom",
        "margin": "30px 0 20px (20px for the first)",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      "news_item": {
        "title": "16px/19.2px 700 link #20AA76",
        "summary": "14px/22.4px #0C3C26",
        "byline": "14px/18.2px #859D94, author bold",
        "divider": "1px #CFE3DC top border, 35px margin-top, 10px padding-top (not on the first)",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)",
        "states": {
          "hover": {
            "measured": {
              "title": "#25C488"
            },
            "prov": "observed"
          }
        }
      },
      "docs_list_item": {
        "icon": "Font Awesome fa-file-text-o 14px #20AA76 in a 23px float",
        "link": "14px/22.4px 400 #20AA76 no underline",
        "pitch": "32px",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      "link_description_item": {
        "link": "14px/22.4px 400 #20AA76",
        "description": "14px/22.4px #798780, 2px padding-top",
        "pitch": "67px",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)"
      },
      "readmore_link": {
        "text": "#20AA76",
        "text_style": "12px/19.2px Roboto 700 uppercase in the sidebar (14px in main content), then \" ›\" at 1.2em; no underline",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)",
        "states": {
          "hover": {
            "measured": {
              "color": "#25C488"
            },
            "prov": "observed"
          }
        }
      },
      "nav_link": {
        "text": "#F1FFF7",
        "text_style": "13px/16px Roboto 700 uppercase, padding 10px",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)",
        "states": {
          "hover": {
            "measured": {
              "color": "#C9F0DD"
            },
            "prov": "observed"
          }
        }
      },
      "search_field": {
        "fill": "#FFFFFF",
        "text": "#0C3C26",
        "border": "1px solid #CFE3DC",
        "radius": 4,
        "size": "214x46 (desktop), 212x46 (phone)",
        "icon": "fa-search 20px #44B78B in a 40x40 button at the right end; hover #0C4B33",
        "placeholder": "Search (⌘ K), #0C3C26",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)",
        "states": {
          "focus": {
            "measured": {
              "border": "#20AA76"
            },
            "prov": "published"
          }
        }
      },
      "footer_link": {
        "text": "#F1FFF7",
        "text_style": "14px/22.4px Roboto 400, no underline",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)",
        "states": {
          "hover": {
            "measured": {
              "text_decoration": "underline"
            },
            "prov": "observed"
          }
        }
      },
      "text_link": {
        "text": "#20AA76",
        "note": "Body links are underlined; link-green links (headings, sidebar, read-more) are not",
        "prov": "observed",
        "source": "https://www.djangoproject.com/ (2026-10-31)",
        "states": {
          "hover": {
            "measured": {
              "color": "#1D915C (underlined links), #25C488 (link-green)"
            },
            "prov": "observed"
          }
        }
      }
    }
  },
  "system": {
    "fixed": [
      "The lowercase 'django' wordmark in its one official color, never redrawn or added to",
      "Greens for every color role: Dark Green header, Medium Green CTAs and banners, Green links",
      "Roboto in the five loaded styles; Fira Mono only for code",
      "A plain, expert, human voice that never says 'easily' or 'simply'"
    ],
    "flex": "Which page layout: sidebar left (default, navigation), sidebar right (secondary content) or the 740px single column for marketing and landing pages. Color loudness stays the same.",
    "traits": [
      {
        "is": "Human",
        "not": "Frictionless",
        "text": "The reader should feel one person addressing another (paraphrase).",
        "source": "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/",
        "prov": "published"
      },
      {
        "is": "Expert",
        "not": "Grandiose",
        "text": "Speaks as an expert helping a fellow developer; avoids empty superlatives (paraphrase).",
        "source": "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/",
        "prov": "published"
      },
      {
        "is": "Systematic",
        "not": "Mechanical",
        "text": "Ordered, but keeps its authors' personality (paraphrase).",
        "source": "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/",
        "prov": "published"
      },
      {
        "is": "Lively",
        "not": "Dull",
        "text": "Expresses things in lively and imaginative ways (paraphrase).",
        "source": "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/",
        "prov": "published"
      },
      {
        "is": "Honest about difficulty",
        "not": "Dismissive",
        "text": "Never implies a step is easy or simple.",
        "source": "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/",
        "prov": "published"
      },
      {
        "is": "Welcoming",
        "not": "Exclusive",
        "text": "A community welcoming, safe and equitable for all (paraphrase).",
        "source": "https://www.djangoproject.com/conduct/",
        "prov": "published"
      }
    ]
  },
  "formats": [
    {
      "format": "Landing page",
      "level": 2,
      "must": "Homepage-style landing page: follow kit.spec.page. Dark Green #0C4B33 82px header with the white wordmark and 13px Roboto Bold uppercase nav; a white centred hero with one Roboto Light 36px line (-1px tracking, #0C3C26, max 700px) and one #44B78B CTA (radius 5px); then the sidebar-right body: white main column (62%) with intro, 80px #20AA76 icon features and an outline button, beside an #F8F8F8 sidebar (30%) of hairline-headed link modules; #44B78B footer link band and #0C4B33 strip. Green links, uppercase read-more links with ›, 1px #CFE3DC hairlines. A single-purpose marketing page without a sidebar uses the guide's single 740px column instead",
      "flex": "how many feature rows and sidebar modules; a green copy banner instead of the white hero on section pages",
      "guide_default": {
        "must": "Single 740px column, Roboto, greens only, CTA button",
        "flex": "sidebar right for secondary content"
      },
      "voice": "homepage voice (see kit.spec.page.voices)"
    },
    {
      "format": "Docs page",
      "level": 1,
      "must": "Sidebar layout, Roboto body 18/1.6, Fira Mono code on #F8F8F8, human expert voice, sentence-case titles",
      "flex": "admonition boxes, used sparingly"
    },
    {
      "format": "Deck",
      "level": 2,
      "must": "White slides, Roboto, Dark Green title bar or Medium Green banner slide, logo bottom or top left in its official color",
      "flex": "dark green section dividers"
    },
    {
      "format": "Proposal page",
      "level": 1,
      "must": "White page, Text-green copy, one Medium Green CTA, qualitative claims unless sourced",
      "flex": "a green copy banner for the headline"
    },
    {
      "format": "Community event site",
      "level": 3,
      "must": "Name = Django + place/audience; logo variant adds locality only; code of conduct; no implied DSF endorsement",
      "flex": "own colors permitted beyond the logo"
    },
    {
      "format": "Email",
      "level": 1,
      "must": "White, Roboto or system sans fallback, Green links, one Medium Green button",
      "flex": "Dark Green header strip"
    },
    {
      "format": "Error message",
      "level": 0,
      "must": "Plain language, Red #BA2121 on light red only for the error itself, no blame",
      "flex": "none"
    }
  ],
  "checks": [
    {
      "name": "Logo hidden",
      "text": "Cover the wordmark. It should still read as Django: a Dark Green header, Medium Green buttons and banner, Roboto Light with tight tracking, thin pale-green rules and a calm reading column."
    },
    {
      "name": "Swap test",
      "text": "Put another framework's logo on it. If the all-green system, the docs-like layout and the plain, expert copy don't feel out of place, it's generic; send it back."
    },
    {
      "name": "Banned words",
      "text": "Search the copy for easily, simply, just, merely and straightforward."
    }
  ],
  "examples": [
    {
      "chapter": "voice",
      "do": {
        "ground": "paper",
        "text": "Run the migration, then check the output for errors."
      },
      "do_caption": "States the step and what to watch for.",
      "dont": {
        "ground": "paper",
        "text": "Simply run the migration and you're done!",
        "ink": "#0C3C26"
      },
      "dont_caption": "'Simply' minimizes difficulty; the docs guide bans it."
    },
    {
      "chapter": "color",
      "do": {
        "ground": "paper",
        "text": "Get started with Django",
        "button": true,
        "button_fill": "#44B78B"
      },
      "do_caption": "Medium Green CTA, white Roboto Bold, 5px radius.",
      "dont": {
        "ground": "paper",
        "text": "Get started with Django",
        "ink": "#E46767"
      },
      "dont_caption": "A non-green accent: reds are for errors only."
    }
  ],
  "make_it_yours": {
    "note": "Everything above transfers. These are Django's own and must be replaced with yours: name and logo, purpose, positioning, messaging pillars, proof, taglines and boilerplate.",
    "replace": [
      "identity",
      "purpose",
      "positioning",
      "messaging.pillars",
      "messaging.proof_points",
      "messaging.taglines",
      "messaging.boilerplate"
    ],
    "reference": {
      "purpose": {
        "mission": {
          "label": "DSF goal",
          "text": "Promote, support and advance the Django web framework (paraphrase of the Django Software Foundation's goal).",
          "prov": "published",
          "source": "https://www.djangoproject.com/foundation/"
        },
        "story": {
          "text": "Django was invented to meet fast-moving newsroom deadlines while satisfying experienced web developers; because it was born in journalism, its people treat documentation like code and keep improving it.",
          "prov": "published",
          "source": "https://www.djangoproject.com/start/overview/",
          "source_note": "2026-10-31",
          "paraphrase": true,
          "also": [
            "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/"
          ]
        },
        "values": [
          {
            "name": "Open source spirit",
            "means": "The community may use the name for related projects, groups and events, and anyone profiting reports what goes back (paraphrase).",
            "prov": "published",
            "source": "https://www.djangoproject.com/trademarks/"
          },
          {
            "name": "Kindness and honesty",
            "means": "Engage kindly and honestly with others (Code of Conduct encouraged behavior).",
            "prov": "published",
            "source": "https://www.djangoproject.com/conduct/"
          },
          {
            "name": "Different viewpoints",
            "means": "Respect different viewpoints and experiences.",
            "prov": "published",
            "source": "https://www.djangoproject.com/conduct/"
          },
          {
            "name": "Responsibility",
            "means": "Take responsibility for actions and contributions; impact matters more than intent.",
            "prov": "published",
            "source": "https://www.djangoproject.com/conduct/"
          },
          {
            "name": "Constructive feedback",
            "means": "Give and accept constructive feedback gracefully.",
            "prov": "published",
            "source": "https://www.djangoproject.com/conduct/"
          },
          {
            "name": "Welcoming, safe, equitable",
            "means": "The pledge: a community welcoming, safe and equitable for all (paraphrase).",
            "prov": "published",
            "source": "https://www.djangoproject.com/conduct/"
          }
        ]
      },
      "positioning": {
        "statement": {
          "text": "A high-level Python web framework that encourages rapid development and clean, pragmatic design (paraphrase).",
          "prov": "observed",
          "source": "https://www.djangoproject.com/",
          "source_note": "2026-10-31"
        },
        "category": {
          "text": "Python web framework, free and open source",
          "prov": "observed",
          "source": "https://www.djangoproject.com/",
          "also": [
            "https://www.djangoproject.com/foundation/"
          ]
        },
        "audience": {
          "text": "Web developers on deadlines who want it right: 'perfectionists with deadlines'; experienced web developers.",
          "prov": "observed",
          "source": "https://www.djangoproject.com/start/overview/"
        },
        "problem": {
          "text": "The repetitive hassle of web development and reinventing the wheel (paraphrase).",
          "prov": "observed",
          "source": "https://www.djangoproject.com/"
        },
        "promise": {
          "text": "Build better web apps more quickly and with less code (paraphrase of the homepage hero).",
          "prov": "observed",
          "source": "https://www.djangoproject.com/"
        },
        "differentiators": [
          {
            "text": "Batteries included: auth, admin, site maps, feeds out of the box",
            "prov": "observed",
            "source": "https://www.djangoproject.com/start/overview/"
          },
          {
            "text": "Security by default against common web attacks",
            "prov": "observed",
            "source": "https://www.djangoproject.com/start/overview/"
          },
          {
            "text": "Scales to heavy traffic",
            "prov": "observed",
            "source": "https://www.djangoproject.com/start/overview/"
          },
          {
            "text": "Free, open source, run by a non-profit foundation",
            "prov": "observed",
            "source": "https://www.djangoproject.com/foundation/"
          },
          {
            "text": "Famously thorough documentation written in a human voice",
            "prov": "published",
            "source": "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/"
          }
        ],
        "alternatives": []
      },
      "messaging": {
        "taglines": [
          {
            "text": "The web framework for perfectionists with deadlines.",
            "prov": "observed",
            "source": "https://www.djangoproject.com/",
            "where": "Beside the logo in the site header (shown at 1500px and wider) and in the page title area; the long-running Django tagline"
          },
          {
            "text": "Building the Django Community for 21 years, 3 months. Come join us!",
            "prov": "observed",
            "source": "https://www.djangoproject.com/community/logos/",
            "where": "Community-section copy banner; the count updates live (2026-10-31)"
          }
        ],
        "attributes": [
          "Ridiculously fast",
          "Fully loaded",
          "Reassuringly secure",
          "Exceedingly scalable",
          "Incredibly versatile"
        ],
        "key_messages": [
          {
            "text": "Built for fast-moving newsroom deadlines and experienced developers' tough requirements (paraphrase).",
            "prov": "observed",
            "source": "https://www.djangoproject.com/start/overview/"
          },
          {
            "text": "Django handles much of web development's hassle so you can focus on your app (paraphrase).",
            "prov": "observed",
            "source": "https://www.djangoproject.com/"
          }
        ],
        "boilerplate": {
          "text": "Django is a high-level Python web framework for rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of web development, so you can focus on writing your app. It's free and open source.",
          "prov": "observed",
          "source": "https://www.djangoproject.com/",
          "source_note": "2026-10-31",
          "paraphrase": true
        },
        "pillars": [
          {
            "name": "Ridiculously fast",
            "claim": "Take applications from concept to completion as quickly as possible.",
            "prov": "observed",
            "source": "https://www.djangoproject.com/start/overview/",
            "proof": [
              "p-hours"
            ]
          },
          {
            "name": "Fully loaded",
            "claim": "Dozens of extras for common tasks, right out of the box.",
            "prov": "observed",
            "source": "https://www.djangoproject.com/start/overview/",
            "proof": [
              "p-batteries"
            ]
          },
          {
            "name": "Reassuringly secure",
            "claim": "Helps developers avoid common security mistakes.",
            "prov": "observed",
            "source": "https://www.djangoproject.com/start/overview/",
            "proof": [
              "p-security"
            ]
          },
          {
            "name": "Exceedingly scalable",
            "claim": "Scales quickly and flexibly to meet heavy traffic.",
            "prov": "observed",
            "source": "https://www.djangoproject.com/start/overview/",
            "proof": [
              "p-busiest"
            ]
          },
          {
            "name": "Incredibly versatile",
            "claim": "Used to build everything from CMSs to scientific platforms.",
            "prov": "observed",
            "source": "https://www.djangoproject.com/start/overview/",
            "proof": [
              "p-versatile"
            ]
          }
        ],
        "proof_points": [
          {
            "id": "p-hours",
            "kind": "claim",
            "text": "From concept to launch in a matter of hours (Django's own claim).",
            "source": "https://www.djangoproject.com/start/overview/",
            "prov": "observed"
          },
          {
            "id": "p-batteries",
            "kind": "feature",
            "text": "User authentication, content administration, site maps and RSS feeds included.",
            "source": "https://www.djangoproject.com/start/overview/",
            "prov": "observed"
          },
          {
            "id": "p-security",
            "kind": "feature",
            "text": "Guards against SQL injection, cross-site scripting, CSRF and clickjacking.",
            "source": "https://www.djangoproject.com/start/overview/",
            "prov": "observed"
          },
          {
            "id": "p-busiest",
            "kind": "claim",
            "text": "Some of the busiest sites on the planet use Django (no names or numbers given).",
            "source": "https://www.djangoproject.com/start/overview/",
            "prov": "observed"
          },
          {
            "id": "p-versatile",
            "kind": "claim",
            "text": "Companies, organizations and governments build content management, social and scientific computing platforms with it.",
            "source": "https://www.djangoproject.com/start/overview/",
            "prov": "observed"
          },
          {
            "id": "p-open",
            "kind": "fact",
            "text": "Free and open source; supported by the Django Software Foundation, a 501(c)(3) non-profit.",
            "source": "https://www.djangoproject.com/foundation/",
            "prov": "observed"
          },
          {
            "id": "p-age",
            "kind": "fact",
            "text": "Copyright 2005-2026; community banner reads 21 years, 3 months (2026-10-31).",
            "source": "https://www.djangoproject.com/community/logos/",
            "prov": "observed"
          }
        ],
        "claim_boundaries": [
          {
            "text": "Never imply a product, site, group or event is official or endorsed by the DSF or the Django core team without a licence.",
            "prov": "published",
            "source": "https://www.djangoproject.com/trademarks/"
          },
          {
            "text": "No named customers or traffic numbers are published with the scalability claim; keep it qualitative.",
            "prov": "observed",
            "source": "https://www.djangoproject.com/start/overview/"
          },
          {
            "text": "Don't call any step easy or simple.",
            "prov": "published",
            "source": "https://docs.djangoproject.com/en/dev/internals/contributing/writing-documentation/"
          }
        ]
      }
    }
  }
}