{
  "schema": "brand-kit@2",
  "palette": {
    "paper": "#F9F9F9",
    "surface": "#E6E8EA",
    "ink": "#444444",
    "ink_muted": "#666666",
    "accent": "#3776AB",
    "on_accent": "#FFFFFF",
    "accent_secondary": "#FFD343",
    "night": "#2B5B84",
    "on_night": "#E6E8EA",
    "extras": [
      {
        "name": "Python blue (--color-blue, $blue)",
        "hex": "#3776AB",
        "role": "Primary brand blue: links, widget icons, sitemap headings, active Python tab marker, main-nav gradient start",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/main/static/css/style.css",
        "also": "https://github.com/python/pythondotorg/blob/b806afadb9ed2e3e8e923678c07d94f649249190/static/sass/_base.scss",
        "site_use": "Links #3776AB everywhere on light grounds; main-nav gradient #3776AB to #2D618C; GO/paging button gradient start (observed https://www.python.org/ (2026-10-31))"
      },
      {
        "name": "Blue medium (--color-blue-medium)",
        "hex": "#2B5B84",
        "role": "Header and PSF band ground (gradient end), dark button gradient end",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/main/static/css/style.css",
        "site_use": "Header band, PSF band, site-base footer: linear-gradient(#1E415E 10%, #2B5B84 90%) (observed https://www.python.org/ (2026-10-31))"
      },
      {
        "name": "Blue dark (--color-blue-dark)",
        "hex": "#1E415E",
        "role": "Gradient start of the header, PSF band and footer base",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/main/static/css/style.css"
      },
      {
        "name": "Python yellow (--color-yellow, $yellow)",
        "hex": "#FFD343",
        "role": "Accent: Donate/PSF buttons, slide headings, links on blue grounds, active slide number, PSF band title",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/main/static/css/style.css",
        "also": "https://github.com/python/pythondotorg/blob/b806afadb9ed2e3e8e923678c07d94f649249190/static/sass/_base.scss"
      },
      {
        "name": "Default text (--color-default)",
        "hex": "#444444",
        "role": "Body text and widget titles on light grounds",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/main/static/css/style.css"
      },
      {
        "name": "White (--color-white)",
        "hex": "#FFFFFF",
        "role": "Root page ground; top-bar active tab text",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/main/static/css/style.css"
      },
      {
        "name": "Grey lightest (--color-grey-lightest)",
        "hex": "#E6E8EA",
        "role": "Footer sitemap ground; text on blue (main nav, slide copy, GO); tag fill",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/main/static/css/style.css"
      },
      {
        "name": "Grey lighter (--color-grey-lighter)",
        "hex": "#CACCCE",
        "role": "List hairlines, tag bottom border, intro line and PSF copy on blue",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/main/static/css/style.css"
      },
      {
        "name": "Grey light (--color-grey-light)",
        "hex": "#999999",
        "role": "Inactive top-bar tabs, More links, code operators",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/main/static/css/style.css"
      },
      {
        "name": "Grey (--color-grey)",
        "hex": "#666666",
        "role": "Footer links, story quote text, tag text",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/main/static/css/style.css"
      },
      {
        "name": "Grey dark (--color-grey-dark)",
        "hex": "#333333",
        "role": "Dark grey token",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/main/static/css/style.css"
      },
      {
        "name": "Green (--color-green)",
        "hex": "#82B043",
        "role": "PyPI tab colour in the network bar",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/main/static/css/style.css"
      },
      {
        "name": "Purple (--color-purple)",
        "hex": "#A06BA7",
        "role": "Jobs tab colour in the network bar",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/main/static/css/style.css"
      },
      {
        "name": "Red (--color-red)",
        "hex": "#B55863",
        "role": "Community tab colour; error messages",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/main/static/css/style.css"
      },
      {
        "name": "PSF grey ($psf)",
        "hex": "#78797A",
        "role": "PSF tab colour in the network bar",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/b806afadb9ed2e3e8e923678c07d94f649249190/static/sass/_base.scss"
      },
      {
        "name": "Darker blue ($darkerblue)",
        "hex": "#1E2933",
        "role": "Network bar ground, options bar, code panel ground; link hover colour",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/b806afadb9ed2e3e8e923678c07d94f649249190/static/sass/_base.scss"
      },
      {
        "name": "Dark blue ($darkblue)",
        "hex": "#1F3B47",
        "role": "Network bar bottom border",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/b806afadb9ed2e3e8e923678c07d94f649249190/static/sass/_base.scss"
      },
      {
        "name": "Grey lighterest ($grey-lighterest)",
        "hex": "#F2F4F6",
        "role": "Tag top highlight",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/b806afadb9ed2e3e8e923678c07d94f649249190/static/sass/_base.scss"
      },
      {
        "name": "Grey lighterer ($grey-lighterer)",
        "hex": "#DDDDDD",
        "role": "Code output text in the hero",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/b806afadb9ed2e3e8e923678c07d94f649249190/static/sass/_base.scss"
      },
      {
        "name": "Grey darker ($grey-darker)",
        "hex": "#222222",
        "role": "Sitemap heading hover",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/b806afadb9ed2e3e8e923678c07d94f649249190/static/sass/_base.scss"
      },
      {
        "name": "Code green ($code-green)",
        "hex": "#0D870D",
        "role": "Default code text colour in the hero sample",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/b806afadb9ed2e3e8e923678c07d94f649249190/static/sass/_base.scss"
      },
      {
        "name": "Orange ($orange)",
        "hex": "#CC9547",
        "role": "Sass orange token (not seen on the homepage)",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/b806afadb9ed2e3e8e923678c07d94f649249190/static/sass/_base.scss"
      },
      {
        "name": "Logo blue light",
        "hex": "#5A9FD4",
        "role": "Blue snake gradient start (official SVG)",
        "prov": "published",
        "source": "https://www.python.org/static/community_logos/python-logo-generic.svg"
      },
      {
        "name": "Logo blue dark",
        "hex": "#306998",
        "role": "Blue snake gradient end (official SVG)",
        "prov": "published",
        "source": "https://www.python.org/static/community_logos/python-logo-generic.svg"
      },
      {
        "name": "Logo yellow",
        "hex": "#FFD43B",
        "role": "Yellow snake gradient start (official SVG)",
        "prov": "published",
        "source": "https://www.python.org/static/community_logos/python-logo-generic.svg"
      },
      {
        "name": "Logo yellow light",
        "hex": "#FFE873",
        "role": "Yellow snake gradient end (official SVG)",
        "prov": "published",
        "source": "https://www.python.org/static/community_logos/python-logo-generic.svg"
      },
      {
        "name": "Wordmark grey",
        "hex": "#646464",
        "role": "The \"python\" wordmark and TM on light grounds (official SVG)",
        "prov": "published",
        "source": "https://www.python.org/static/community_logos/python-logo-generic.svg"
      },
      {
        "name": "Logo shadow grey",
        "hex": "#B8B8B8",
        "role": "Drop-shadow gradient under the device (official SVG; shadow is optional)",
        "prov": "published",
        "source": "https://www.python.org/static/community_logos/python-logo-generic.svg"
      },
      {
        "name": "Python Powered blue",
        "hex": "#446785",
        "role": "Python Powered badge text and border (official SVG)",
        "prov": "published",
        "source": "https://www.python.org/static/community_logos/python-powered-w.svg"
      },
      {
        "name": "Python Powered grey",
        "hex": "#CCCCCC",
        "role": "Python Powered badge ground lines; grey button gradient end on the site",
        "prov": "published",
        "source": "https://www.python.org/static/community_logos/python-powered-w.svg"
      },
      {
        "name": "Tab ground dark",
        "hex": "#13191E",
        "role": "Active/hover network tab gradient start (to #1F2A32)",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Tab ground",
        "hex": "#1F2A32",
        "role": "Active/hover network tab gradient end",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Tab divider dark",
        "hex": "#11171D",
        "role": "Network tab right border; phone jump-link ground",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Tab divider light",
        "hex": "#273643",
        "role": "Network tab left border",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Header top rule",
        "hex": "#191919",
        "role": "Header 1px top border",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Yellow light",
        "hex": "#FFDF76",
        "role": "Yellow button gradient start, notice-bar ground, quote ground end, slide-link underline",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Yellow border",
        "hex": "#DCA900",
        "role": "Yellow button 1px border",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Button text",
        "hex": "#4D4D4D",
        "role": "Text on yellow and grey buttons",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Nav blue",
        "hex": "#2D618C",
        "role": "Main nav gradient end; nav item hover end",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Nav highlight",
        "hex": "#629CCD",
        "role": "Main nav 1px top border",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Nav shade",
        "hex": "#18334B",
        "role": "Main nav 1px bottom border; dropdown top border",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Nav hover start",
        "hex": "#326B9C",
        "role": "Main nav item hover gradient start",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Dropdown blue",
        "hex": "#BBD4E9",
        "role": "Main-nav dropdown gradient start",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Dropdown blue light",
        "hex": "#D6E5F2",
        "role": "Main-nav dropdown gradient end",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Blue button edge",
        "hex": "#3D83BE",
        "role": "GO and slide-number buttons top/left border",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Blue button hover start",
        "hex": "#316998",
        "role": "GO/paging hover gradient start",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Blue button hover end",
        "hex": "#244E71",
        "role": "GO/paging hover gradient end",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Options bar top edge",
        "hex": "#2D3E4D",
        "role": "Options bar 1px top border",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Options bar bottom edge",
        "hex": "#070A0C",
        "role": "Options bar 1px bottom border and item dividers",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Utility text",
        "hex": "#BBBBBB",
        "role": "Network bar base text, options bar text and search icon",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Slide copy ground",
        "hex": "#1C3B56",
        "role": "Right half of the hero carousel",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Prompt orange",
        "hex": "#C65D09",
        "role": "Code sample >>> and ... prompts (bold)",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Keyword green",
        "hex": "#6AB825",
        "role": "Code keywords def, while, for (bold)",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Function blue",
        "hex": "#447FCF",
        "role": "Code function names",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Number blue",
        "hex": "#3677A9",
        "role": "Code numbers",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "String amber",
        "hex": "#ED9D13",
        "role": "Code strings",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Builtin teal",
        "hex": "#24909D",
        "role": "Code builtins (print, list, input)",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Notice text",
        "hex": "#664E04",
        "role": "Notice-bar text on yellow",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Notice button border",
        "hex": "#006DAD",
        "role": "Notice See more button border",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Grey button top",
        "hex": "#D9D9D9",
        "role": "Grey button gradient start; donate-style grey hover end",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Grey button hover top",
        "hex": "#E6E6E6",
        "role": "Grey button hover gradient start",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Hover text dark",
        "hex": "#1A1A1A",
        "role": "Text on grey buttons at hover",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Yellow hover top",
        "hex": "#FFEBA9",
        "role": "Yellow button hover gradient start; quote top and bottom border",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Quote yellow",
        "hex": "#FFE58F",
        "role": "Success-story quote gradient start",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Attribution ground",
        "hex": "#F6F6F6",
        "role": "Success-story attribution row ground",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Story link",
        "hex": "#3571A3",
        "role": "Links inside tables (story attribution)",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Widget rule",
        "hex": "#75A8D3",
        "role": "Widget 4px top rule; copyright text",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Content ground light",
        "hex": "#FCFCFC",
        "role": "Content band gradient start",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Content ground",
        "hex": "#F9F9F9",
        "role": "Content band gradient end; page paper",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Footer rule",
        "hex": "#D8DBDE",
        "role": "Footer 1px top border",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Back-to-top ground",
        "hex": "#E0E3E5",
        "role": "Phone Back to Top bar",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Back-to-top edge",
        "hex": "#DBDEE1",
        "role": "Phone Back to Top bottom border",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Sitemap hover",
        "hex": "#ECEDEF",
        "role": "Footer sitemap link hover fill",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Footer base link",
        "hex": "#89B4D9",
        "role": "Site-base links (Flux-Bold)",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Footer base hover",
        "hex": "#FFF7DC",
        "role": "Site-base link hover",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Copyright underline",
        "hex": "#4F90C6",
        "role": "Dotted 1px underline on copyright links",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Site-base rule",
        "hex": "#111111",
        "role": "Site-base 1px top border",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Status green",
        "hex": "#008000",
        "role": "Status indicator dot (12px circle)",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "PSF link hover",
        "hex": "#FFF1C2",
        "role": "Links in the PSF band at hover",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Tag hover",
        "hex": "#D0D4D7",
        "role": "Tag fill at hover",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Tag hover top",
        "hex": "#DAE0E5",
        "role": "Tag top border at hover",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "Tag hover bottom",
        "hex": "#B5B8BA",
        "role": "Tag bottom border at hover",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "name": "PSF section nav",
        "hex": "#646565",
        "role": "Main nav ground on PSF section pages (e.g. the logo page)",
        "prov": "observed",
        "source": "https://www.python.org/community/logos/ (2026-10-31)"
      }
    ]
  },
  "typography": {
    "display": {
      "family": "Abel",
      "steal_family": "Abel",
      "weight": 400,
      "tracking": 0,
      "line_height": 1.25,
      "fallback_stack": "\"Source Sans Pro\", Arial, sans-serif",
      "real": "Flux (Flux Regular in the wordmark; Flux-Regular and Flux-Bold webfonts on python.org). Commercial face; the PSF owns a copy but cannot distribute it",
      "stand_in": true,
      "prov": "published",
      "source": "https://www.python.org/community/logos/",
      "site": {
        "faces": "Flux-Regular (weight 400) for widget titles, PSF band title, >>> glyphs and the launch-shell button; Flux-Bold (set at weight 400, it is its own family) for footer sitemap headings and site-base links",
        "sizes_px": "24.15 widget titles (desktop and phone); 17.5 sitemap headings desktop (20 phone); 18.11 site-base links desktop (20.7 phone); >>> glyphs 120% of their text with -0.0625em tracking in Flux (stand-in: SSP Bold \"›››\" at 144%)",
        "line_height": "30.19px at 24.15 (1.25)",
        "case": "Title Case labels",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      }
    },
    "body": {
      "family": "Source Sans 3",
      "steal_family": "Source Sans 3",
      "weight": 400,
      "tracking": 0,
      "line_height": 1.625,
      "scale": 1,
      "fallback_stack": "\"Source Sans 3\", Arial, sans-serif",
      "real": "Source Sans Pro (Adobe, SIL OFL 1.1), served by python.org as SourceSansProRegular / SourceSansProBold / SourceSansProItalic webfonts",
      "stand_in": false,
      "files": [
        "https://www.python.org/static/fonts/SourceSansPro-Regular-webfont.fd0d51605201.woff",
        "https://www.python.org/static/fonts/SourceSansPro-Bold-webfont.be855452e565.woff",
        "https://www.python.org/static/fonts/SourceSansPro-It-webfont.1aa29ac0f190.woff"
      ],
      "license_file": "https://github.com/adobe-fonts/source-sans/blob/release/LICENSE.md",
      "prov": "published",
      "source": "https://github.com/python/pythondotorg/tree/main/static/fonts",
      "site": {
        "weights": "Regular for text; SourceSansProBold (a separate family) for slide headings, page headings, bold labels; Italic family for bylines",
        "sizes_px": "16/26 base; 15/24.375 in widgets; 18/29.25 main nav (+0.18px tracking); 24/33.6 intro line (20/28 phone); 21 slide heading; 14/22.75 sitemap; 11.9 copyright; 13.125 tags",
        "note": "Each style is its own family name, so bold is never synthesised: load the three files under their own names or as weights of one family",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      "site_family": "Source Sans Pro"
    },
    "mono": {
      "family": "Inconsolata",
      "steal_family": "Inconsolata",
      "weight": 400,
      "fallback_stack": "\"Lucida Console\", \"Liberation Mono\", \"DejaVu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace, sans-serif",
      "real": "System monospace stack from the site CSS (Consolas first). No webfont: on macOS this renders Courier New, which is what the reference captures show",
      "stand_in": false,
      "prov": "observed",
      "source": "https://www.python.org/ (2026-10-31)",
      "site": {
        "sizes_px": "16/24 in the hero code panel",
        "weights": "400; prompts and keywords 700",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      "site_family": "Consolas"
    },
    "calibration": "Flux is not distributable (PSF logo page), so display text needs an open stand-in. Measured 2026-10-31 on python.org in Chromium with the site's own Flux webfonts loaded, each candidate set at the same size: line widths vs Flux-Regular at 24.15px: Abel +5.2% (\"Get Started\"), +2.6% (\"Upcoming Events\"), +2.3% (\"Python Software Foundation\"); Ropa Sans +4.0/+2.4/+3.2% but 24-28% darker; Source Sans Pro (the site's own fallback) +12.3/+13.3/+14.0%; Advent Pro -2.5/-4.4/-1.3% but thinner strokes and a squarer look. Ink per px of width (darkness) vs Flux: Abel +1.1/+3.3/-1.7%. x-height (pixel-measured at 200px): Flux 0.445 em, Abel 0.505, Source Sans 0.49. Against Flux-Bold (footer headings): Abel 400 is -1.8% width on \"Help & General Contact\" and +2.6% on \"Documentation\", but 11-18% lighter. So: Abel at 97% of the measured size matches line width (24.15px becomes 23.4px); for the Flux-Bold roles keep Abel 400 and accept slightly lighter strokes, or add -webkit-text-stroke 0.25px in the same colour. Abel has no bold; never synthesise one. Body is the real Source Sans Pro (files supplied) and the mono stack is the site's own, so neither needs calibration. SETTLED after round 1: Flux-Regular roles (widget titles, PSF band title, list titles) = Abel 400 at 97% of the measured size (24.15px -> 23.4px), matched on line width. Flux-Bold roles (footer sitemap headings, site-base links) = Abel 400 at 100% (17.5px, 18.11px; phone 20px, 20.7px) plus -webkit-text-stroke 0.25px currentColor, because Abel is only -1.8% narrower than Flux-Bold. The \">>>\" read-more mark is NOT set in Abel: see kit.spec.signature[1]."
  },
  "style": {
    "button_shape": "rounded",
    "button_note": "Small glossy buttons: radius 6px (--border-radius-default), 1px border, a vertical two-stop gradient (10% to 90%), a 1px white text-shadow at 30% and a faint inset glow. Yellow (Donate, PSF) on blue grounds; blue (GO, slide numbers) on dark; grey (See more) on yellow",
    "corners": "6px on buttons, quotes, options bar; 8px on the main-nav bar; 16px on the notice bar; 0 on widgets and bands",
    "linework": "Hairlines 1px #CACCCE between list rows; 4px #75A8D3 rule on top of every widget; bevel borders (light top, dark bottom) on nav bars and tabs",
    "motion": "Hero carousel fades every 8s (600ms; slides on touch devices); default transition 0.3s; dropdowns open after a 0.25s delay",
    "prov": "published",
    "source": "https://github.com/python/pythondotorg/blob/main/static/css/style.css",
    "note": "Radius 6px and 0.3s transition are published CSS tokens; the rest is observed on https://www.python.org/ (2026-10-31)"
  },
  "voice": {
    "tone": [
      "Plain",
      "Welcoming",
      "Confident",
      "Precise"
    ],
    "notes": [
      "Two voices. The python.org homepage speaks in short, friendly, factual lines to newcomers and experienced developers alike; Title Case labels, a code sample as the hero, links named after where they go. The documentation voice (devguide style guide) is plainer still: simple words for a world-wide audience, affirmative statements, no hype.",
      "A landing page follows the homepage voice and anatomy. The docs rules (simple language, no Latin abbreviations, inclusive terms, affirmative tone) apply to all body copy.",
      "Respect the reader's intelligence: lay out the information and connect the dots without talking down (devguide, Audience).",
      "State what Python does and how to use it well; leave value judgements like \"experts only\" out (devguide, Affirmative tone).",
      "Trademark grammar: \"Python\" is an adjective before a generic noun (the Python programming language), never a verb (PSF trademark policy).",
      "Show, then tell: the homepage leads with runnable code and a one-line explanation, the way the docs prefer short concrete examples."
    ],
    "rules": [
      {
        "id": "headline-case-web",
        "kind": "headline_case",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)",
        "value": "title",
        "note": "Homepage widget and slide titles are Title Case (Get Started, Latest News, Functions Defined). The docs prefer sentence case for section titles, with consistency inside a unit winning"
      },
      {
        "id": "docs-sentence-case",
        "kind": "guidance",
        "prov": "published",
        "source": "https://devguide.python.org/documentation/style-guide/",
        "text": "In documentation, sentence case section titles are preferred; consistency within a unit matters more"
      },
      {
        "id": "simple-language",
        "kind": "guidance",
        "prov": "published",
        "source": "https://devguide.python.org/documentation/style-guide/",
        "text": "Use simple language; avoid esoteric phrasing for a world-wide audience"
      },
      {
        "id": "no-latin",
        "kind": "prefer",
        "prov": "published",
        "source": "https://devguide.python.org/documentation/style-guide/",
        "term": "for example",
        "over": [
          "e.g."
        ]
      },
      {
        "id": "no-latin-ie",
        "kind": "prefer",
        "prov": "published",
        "source": "https://devguide.python.org/documentation/style-guide/",
        "term": "that is",
        "over": [
          "i.e."
        ]
      },
      {
        "id": "acronyms",
        "kind": "guidance",
        "prov": "published",
        "source": "https://devguide.python.org/documentation/style-guide/",
        "text": "Spell out an acronym at first use, full term first with the acronym in parentheses; HTML and UTF-8 need no expansion"
      },
      {
        "id": "allowlist",
        "kind": "prefer",
        "prov": "published",
        "source": "https://devguide.python.org/documentation/style-guide/",
        "term": "allowlist",
        "over": [
          "whitelist"
        ]
      },
      {
        "id": "blocklist",
        "kind": "prefer",
        "prov": "published",
        "source": "https://devguide.python.org/documentation/style-guide/",
        "term": "blocklist",
        "over": [
          "blacklist"
        ]
      },
      {
        "id": "primary",
        "kind": "prefer",
        "prov": "published",
        "source": "https://devguide.python.org/documentation/style-guide/",
        "term": "main, parent/child, server/client, primary/secondary",
        "over": [
          "master/slave"
        ]
      },
      {
        "id": "free-threaded",
        "kind": "prefer",
        "prov": "published",
        "source": "https://devguide.python.org/documentation/style-guide/",
        "term": "free-threaded",
        "over": [
          "No-GIL"
        ]
      },
      {
        "id": "open-source",
        "kind": "guidance",
        "prov": "published",
        "source": "https://devguide.python.org/documentation/style-guide/",
        "text": "Hyphenate open-source as an adjective (open-source software); no hyphen as a noun (open source is a collaboration model)"
      },
      {
        "id": "python-cap",
        "kind": "guidance",
        "prov": "published",
        "source": "https://devguide.python.org/documentation/style-guide/",
        "text": "Python is always capitalized; Unicode capitalized; reST starts lowercase; POSIX uppercase"
      },
      {
        "id": "affirmative",
        "kind": "guidance",
        "prov": "published",
        "source": "https://devguide.python.org/documentation/style-guide/",
        "text": "Affirmative tone: state what the language does; no \"dangerous\" or \"experts only\" except real security risks"
      },
      {
        "id": "economy",
        "kind": "guidance",
        "prov": "published",
        "source": "https://devguide.python.org/documentation/style-guide/",
        "text": "Economy of expression: err on the side of succinct"
      },
      {
        "id": "no-byline",
        "kind": "guidance",
        "prov": "published",
        "source": "https://devguide.python.org/documentation/style-guide/",
        "text": "No author bylines on community documentation"
      },
      {
        "id": "tm-adjective",
        "kind": "guidance",
        "prov": "published",
        "source": "https://www.python.org/psf/trademarks/",
        "text": "Use \"Python\" as an adjective followed by a generic noun; never as a verb"
      },
      {
        "id": "tm-symbol",
        "kind": "guidance",
        "prov": "published",
        "source": "https://www.python.org/psf/trademarks/",
        "text": "First or most prominent mention of the Python word mark takes ®, except email, online discussion, non-graphical ads and academic papers"
      },
      {
        "id": "tm-notice",
        "kind": "guidance",
        "prov": "published",
        "source": "https://www.python.org/psf/trademarks-faq/",
        "text": "Third parties add a notice: \"Python\" and the Python Logo are trademarks of the PSF, and a non-affiliation line"
      }
    ],
    "approved": {
      "phrases": [
        "the Python programming language",
        "Python Software Foundation",
        "Learn More",
        "Get Started"
      ],
      "words": [
        "allowlist",
        "blocklist",
        "free-threaded",
        "for example",
        "that is"
      ]
    },
    "banned": [
      "whitelist",
      "blacklist",
      "master/slave",
      "e.g.",
      "i.e.",
      "experts only",
      "No-GIL"
    ],
    "is_not": [
      "Python as a verb (\"Python your software\")",
      "Implying PSF endorsement of a course, book or product",
      "Worry-inducing warnings in teaching copy"
    ],
    "prov": "published",
    "source": "https://devguide.python.org/documentation/style-guide/"
  },
  "spec": {
    "source": "https://www.python.org/",
    "how": "Logo rules from the PSF logo page, trademark policy, trademark FAQ and Python Logo Usage Guidelines PDF v1.0; colour and type tokens from the open-source python.org stylesheet (python/pythondotorg); page anatomy measured on www.python.org at 1440 and 390 with Playwright, 2026-10-31",
    "provenance": "published",
    "motion": [
      {
        "name": "transition-default",
        "duration_ms": 300,
        "use": "Default transition duration (--transition-duration 0.3s)",
        "prov": "published",
        "source": "https://github.com/python/pythondotorg/blob/main/static/css/style.css"
      },
      {
        "name": "carousel-fade",
        "easing": "linear",
        "duration_ms": 600,
        "use": "Hero slide change: fade on pointer devices, slide on touch; every 8000ms; pauses on hover and after any click",
        "prov": "observed",
        "source": "https://www.python.org/static/js/main-min.b1e587ad1920.js (2026-10-31)"
      },
      {
        "name": "dropdown-delay",
        "duration_ms": 250,
        "use": "Main-nav and utility dropdowns appear after a 0.25s hover delay; on touch they fade in over 0.25s ease-in-out",
        "prov": "observed",
        "source": "https://www.python.org/static/stylesheets/mq.ab4b4ea88926.css"
      }
    ],
    "icons": {
      "grid": "not published (IcoMoon font, 1024 units)",
      "sizes": [
        {
          "name": "widget",
          "px": 21,
          "use": "glyph before widget titles (87.5% of the 24.15px title)"
        },
        {
          "name": "search",
          "px": 28,
          "use": "search-alt glyph in the options bar"
        }
      ],
      "stroke": "solid filled glyphs, not strokes",
      "caps_joins": "n/a (filled shapes)",
      "color": "#3776AB on light grounds; #BBBBBB in the dark options bar",
      "rule": "Icons are the Pythonicon icon font (IcoMoon), one glyph per widget title: get-started U+E616, download U+E609, documentation U+E60A, jobs U+E606, news U+E603, calendar U+E60E, success-stories U+E625, python U+E614, search-alt U+E613, plus arrows, feed, email, social marks",
      "file": "https://raw.githubusercontent.com/python/pythondotorg/main/static/fonts/Pythonicon.woff",
      "prov": "observed",
      "source": "https://github.com/python/pythondotorg/blob/main/static/fonts/Pythonicon.json"
    },
    "signature": [
      {
        "id": "two-snakes",
        "name": "The two-snakes device",
        "where": "logo, PSF band (large, cropped), favicon, Use Python for… title glyph",
        "spec": "blue snake (gradient #5A9FD4 to #306998) and yellow snake (gradient #FFD43B to #FFE873) interlocked with exact gaps, chins and eyes; colours may change, the outline may not; optional soft grey shadow below",
        "once": "one prominent device per view",
        "example": {
          "ground": "night",
          "text": "python",
          "ink": "on_night"
        },
        "dont_example": {
          "ground": "paper",
          "text": "python",
          "ink": "#B55863"
        },
        "dont": "mirror it, separate the snakes, drop an eye, outline it in a way that changes the gaps, or let graphics cross the outline",
        "prov": "published",
        "source": "https://www.python.org/psf/trademarks-faq/"
      },
      {
        "id": "prompt-marks",
        "name": "Interpreter prompts as punctuation",
        "where": "every read-more link (\">>> Learn More\", \">>> More news\"), the PSF band title, the \">_\" shell button, breadcrumbs",
        "spec": "\"›››\" (three U+203A single right-pointing angle quotes) set in Source Sans Pro Bold 700 at 144% of the surrounding text size, letter-spacing -0.0625em, 0.25em gap before the label, in the link colour. NEVER type three \">\" characters and NEVER set the mark in Abel: Flux's \">\" is a narrow chevron, and Abel's \">\" is a broad wedge twice as wide (47.3px vs 24.0px at 28.8px). Measured 2026-10-31 on python.org: Flux \">>>\" 28.8px = 24.0px wide; SSP Bold \"›››\" 34.56px = 23.8px wide, same chevron shape",
        "once": "one per link, never in body sentences",
        "example": {
          "ground": "night",
          "text": ">>> Learn More",
          "mark": "››› (stand-in for Flux \">>>\")",
          "mark_style": "color",
          "mark_color": "#FFD343"
        },
        "dont_example": {
          "ground": "night",
          "text": "→ Learn More"
        },
        "dont": "swap in arrows or chevrons; the prompt is the brand's arrow",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "id": "code-as-hero",
        "name": "Runnable code as the hero image",
        "where": "homepage carousel; docs examples",
        "spec": "a short interactive-session sample (>>> and ... prompts, output lines) on #1E2933 in a monospace stack, beside a navy copy panel naming the feature in yellow",
        "once": "one code panel per page",
        "example": {
          "ground": "#1E2933",
          "text": ">>> fib(1000)",
          "font": "mono"
        },
        "dont_example": {
          "ground": "#1E2933",
          "text": "Unleash limitless productivity"
        },
        "dont": "replace the code with stock photography or illustration, or leave a trailing unused >>> prompt (devguide)",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "id": "blue-yellow",
        "name": "Blue ground, yellow action",
        "where": "header, PSF band, footer base",
        "spec": "the logo's two colours run the page: Python blue gradients (#1E415E to #2B5B84) for the frame, Python yellow #FFD343 for every action and highlight on it",
        "once": "yellow marks actions and headings only",
        "example": {
          "ground": "night",
          "text": "Donate",
          "button": true,
          "button_fill": "#FFD343",
          "ink": "#4D4D4D"
        },
        "dont_example": {
          "ground": "night",
          "text": "Donate",
          "button": true,
          "button_fill": "#B55863"
        },
        "dont": "introduce a third accent for actions; the network colours (green, purple, red, grey) belong to the tab rules only",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "id": "network-tabs",
        "name": "Colour-coded network tabs",
        "where": "the top Python Network bar on every python.org page",
        "spec": "six equal tabs, each with a 3px top rule in its own colour: Python #3776AB, PSF #78797A, Docs #FFD343, PyPI #82B043, Jobs #A06BA7, Community #B55863; the current site gets a white label and an 8px triangle",
        "once": "one network bar at the very top",
        "example": {
          "ground": "#1E2933",
          "text": "Python  PSF  Docs  PyPI  Jobs  Community",
          "ink": "#999999"
        },
        "dont_example": {
          "ground": "#1E2933",
          "text": "Python  PSF  Docs",
          "ink": "#FFD343"
        },
        "dont": "colour the labels themselves; colour lives in the 3px rule",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      }
    ],
    "page": {
      "source": "https://www.python.org/",
      "date": "2026-10-31",
      "prov": "observed",
      "voices": "Two voices. The homepage (and so any landing page built from this spec) is institutional and friendly: Title Case widget labels (Get Started, Latest News), one factual sentence per idea, code instead of claims, links named after their destination, \">>>\" as the read-more mark. The documentation voice (devguide style guide) is plainer and governs body copy: simple English, no Latin abbreviations, affirmative, inclusive terms. A landing page follows this anatomy and the homepage voice; the trademark rules (unaltered logo with TM, Python as an adjective) hold everywhere. Where the site and the logo guidance differ (the site uses a light-wordmark logo variant not offered on the logo page), the logo page is the law for third parties and the site is how the PSF applies it to its own dark header.",
      "nav": {
        "summary": "Three stacked strips on one blue header: a dark Python Network bar of six equal colour-coded tabs; a header row with the white-wordmark Python logo at left and, at right, a yellow Donate button and a dark rounded options bar (search, GO, Socialize); then a glossy blue rounded main-nav bar of seven centred items.",
        "ground": "Network bar #1E2933 (1px #1F3B47 bottom). Header from y 46: linear-gradient(#1E415E 10%, #2B5B84 90%) with 1px #191919 top border, 1px #444444 bottom border and inset shadows 0 0 50px and 0 0 20px rgba(0,0,0,0.03). The same header ground continues behind the hero and intro, down to y 632.",
        "height": "network bar 46px (y 0-46); header logo row y 47-161; main nav 55px (y 161-216); whole blue header 586px (y 46-632) including the hero",
        "border": "Main nav: 1px #629CCD top, 1px #18334B bottom, radius 8px, box-shadow 0 0 10px rgba(0,0,0,0.2)",
        "network_bar": {
          "container": "x 120-1320 (1200px); 6 tabs of 200px: Python x 120, PSF 320, Docs 520, PyPI 720, Jobs 920, Community 1120",
          "tab": "height 45.4px; border-top 3px in the tab colour (Python #3776AB, PSF #78797A, Docs #FFD343, PyPI #82B043, Jobs #A06BA7, Community #B55863); border-left 1px #273643, border-right 1px #11171D",
          "label": "16px/28px Source Sans Pro Regular, centred, padding 8px 12px 6.4px; inactive #999999 on the bar ground; current (Python) #FFFFFF on linear-gradient(#13191E 10%, #1F2A32 90%)",
          "current_marker": "an 8px CSS triangle (border 8px, top colour = tab colour #3776AB) hanging from the top edge, centred in the current tab; hover/focus on any tab shows the same gradient, white text and its own coloured triangle",
          "links": "Python /, PSF https://www.python.org/psf/, Docs https://docs.python.org, PyPI https://pypi.org/, Jobs /jobs/, Community /community/"
        },
        "logo": {
          "variant": "Combined logo, reversed for dark grounds: full-colour two-snakes device (blue and yellow, soft drop shadow) with a white-to-light-grey \"python\" wordmark and TM",
          "px": "290x82 (a 580x164 PNG at 2x)",
          "position": "x 136, y 63, left of the header row; phone centred 218x62 at y 374",
          "file": "https://www.python.org/static/img/python-logo.png"
        },
        "links": {
          "count": 7,
          "labels": "About, Downloads, Documentation, Community, Success Stories, News, Events",
          "size": "18px/29.25px",
          "weight": 400,
          "tracking": "0.18px",
          "color": "#E6E8EA; hover/focus #FFFFFF on linear-gradient(#326B9C 10%, #2D618C 90%)",
          "alignment": "centred group inside the 1168px bar (x 136-1304): items at x 286 (About, 91w), 378 (Downloads, 131w), 510 (Documentation, 165w), 675 (Community, 135w), 811 (Success Stories, 163w), 974 (News, 87w), 1062 (Events, 96w); padding 11.7px 22.5px 9.9px; each item has a 1px rgba(0,0,0,0.2) right edge and a 1px rgba(255,255,255,0.1) left edge (bevelled dividers)",
          "bar_ground": "linear-gradient(#3776AB 30%, #2D618C 95%)",
          "dropdowns": "every item has a dropdown: ground linear-gradient(#BBD4E9 10%, #D6E5F2 90%), 1px #18334B top border, shadow 0 0.5em 0.5em rgba(0,0,0,0.3); opens on hover after a 0.25s delay. Items: About (Applications, Quotes, Getting Started, Help); Downloads (All releases, Source code, Windows, macOS, Android, iOS, Other Platforms, License, Alternative Implementations); Documentation (Docs, Audio/Visual Talks, Beginner's Guide, FAQ, Non-English Docs, PEP Index, Python Books, Python Essays); Community (Diversity, Mailing Lists, IRC, Forums, PSF Annual Impact Report, Python Conferences, Special Interest Groups, Python Logo, Python Wiki, Code of Conduct, Community Awards, Get Involved, Shared Stories); Success Stories (Arts, Business, Education, Engineering, Government, Scientific, Software Development); News (Python News, PSF Newsletter, PSF News, PyCon US News, Python Insider, News from the Community); Events (Python Events, User Group Events, Python Events Archive, User Group Events Archive, Submit an Event)"
        },
        "actions": [
          "Donate: yellow button: linear-gradient(#FFDF76 10%, #FFD343 90%) over #FFD343, 1px solid #DCA900, radius 6px, text #4D4D4D Source Sans Pro Regular, text-shadow 1px 1px 1px rgba(255,255,255,0.3), box-shadow 1px 1px 1px rgba(0,0,0,0.05) and inset 0 0 5px rgba(255,255,255,0.5); hover gradient #FFEBA9 10% to #FFD343 90%; 16px/26px, padding 6.4px 12px 5.6px, 75x32 at x 786 y 94, 8px left of the options bar",
          "Options bar: #1E2933 box x 869 y 80, 435x59, radius 6px, 1px #2D3E4D top and #070A0C bottom edge, floated right with 21px vertical margin",
          "Search: Pythonicon search-alt glyph (U+E613) 28px #BBBBBB at x 872; white input 224x37 at x 922 (padding 6.4px 8px 4.8px, placeholder \"Search\"); GO: blue button: linear-gradient(#3776AB 10%, #2B5B84 90%), 1px border #3D83BE top/left and #3776AB right/bottom, radius 6px, text #E6E8EA, inset 0 0 5px rgba(55,118,171,0.2); hover gradient #316998 10% to #244E71 90%, text #F2F4F6; 16px, 46x40 at x 1157",
          "Socialize: text item 16px #BBBBBB, padding 16px 16px 14px, 91x46 at x 1212, divided from search by a 1px #070A0C rule; hover #555 on #CACCCE; menu: LinkedIn, Mastodon, Chat on IRC, Twitter",
          "A A (text size: Smaller, Larger, Reset) is in the markup but hidden at rest on desktop"
        ],
        "sticky": "not sticky; the whole header scrolls away",
        "phone": {
          "shows": "At rest the network bar renders expanded at the very top (y 0-358): a \"Close\" bar (42px, #11171D, #999999 16px/28px centred, padding 8px 12px 6.4px) whose label is preceded by the Pythonicon arrow-down glyph U+E61D (16px #999999, a rounded square with a down arrow, margin-right 8px); the six tabs as full-width 45px rows with their 3px coloured top rules (Python current: white on the dark gradient); then a \"The Python Network\" bar (42px, #11171D) preceded by Pythonicon arrow-up U+E61A (same treatment). NEVER use plain ▼/▲ text triangles. Below it the blue header (y 358-806, 448px tall): logo centred 218x62; Donate as a full-width yellow button 336x40 (y 451, 11px side margin); then the options bar: #1E2933 ground, 1px #2D3E4D border, radius 6px, 358x149 at x 16 y 507, margin-bottom 21px. Options bar row 1 (y 508-607, 99px): a centred search block 128px wide (x 131): the magnifier glyph + a transparent 72px \"Search\" field (16px #BBBBBB) on one line (y 516), and the blue GO button 46x40 directly BELOW at x 134 y 555 (GO is VISIBLE on phone, margin-bottom 7px). A 2px rule (1px #070A0C over 1px of the bar) at y 607 splits the rows. Row 2 (y 609-655, 46px): \"Socialize\" centred in a 93px cell (x 148-241) with vertical 1px dark rules either side; the left and right cells are empty. \"≡ Menu\" exists in the HTML but is display:none at 390 and 1440: do not show it.",
          "menu": "No menu button shows at 390 (\"≡ Menu\" is display:none); the main-nav bar is not shown below 640px; the footer sitemap is the phone navigation.",
          "cta": "Donate is the only button above the fold"
        },
        "utility_labels": "Skip to content (screen-reader link), Close (icon U+E61D), The Python Network (icon U+E61A), Donate, Search This Site (screen-reader label), Search (field placeholder), GO, Socialize. \"≡ Menu\" is in the markup but hidden at every measured width."
      },
      "hero": {
        "summary": "Inside the blue header, under the main nav: a 980x304 two-panel carousel. Left half is an interactive-shell code sample in a monospace stack on the darkest navy with a yellow \">_\" launch button; right half is a navy copy panel with a yellow 21px heading, three to four lines of grey-white text with a yellow underlined link, and five small numbered blue buttons. Under it, a centred two-line intro sentence in light grey with a yellow \">>> Learn More\" link.",
        "desktop": {
          "section": "carousel x 222-1202, y 217-521 (980x304, max-width 980, margin 0 70px inside the 1120px banner at x 152); intro y 542-611; header ends y 632",
          "column_split": "2 equal halves of 490px: code panel x 222-712, copy panel x 712-1202",
          "vertical_anchors": "carousel top y 217 (flush under the nav bar at y 216); code first line y 240; slide heading y 237; slide text y 267-371; slide-number buttons y 468-498; carousel bottom y 521; intro lines y 542 and y 579; header bottom y 632",
          "text_max_width": "slide copy 410px (copy panel padding 20px 40px); intro text box 1096px, centred, forced line break after \"quickly\" from 800px up",
          "media": "no image: the code sample is the media",
          "cta_size": "launch-shell button 45x45; slide numbers 34x30; intro link is text"
        },
        "phone": {
          "order": "carousel hidden below 640px; the intro sentence follows the options bar directly",
          "alignment": "intro box x 16, 358px wide, margin 17.5px 0, padding 5px 10px (the text column is x 26-364, 338px). 20px/28px Source Sans Pro Regular #CACCCE, left-aligned, exactly 3 lines, text y 699-783: \"...lets you work quickly and integrate\" / \"systems more effectively. ››› Learn More\" wrap as in the reference. Keep the 10px side padding; with the SSP chevron mark the sentence fits 3 lines.",
          "sizes": "header y 358-806 (448px tall). Phone y-positions given further down this spec for the content band were measured against a 414px header; with this 448px header everything below shifts down 34px: follow heights and gaps, not absolute ys.",
          "prov": "observed",
          "source": "https://www.python.org/ (observed 2026-10-31, Playwright 390/1440)"
        },
        "at_rest": {
          "slide": "Slide 1 of 5 shows at rest (the carousel then fades every 8s; animation only). Slide 1: code \"# Write Fibonacci series up to n\" defining fib(n) and printing the series to 987; heading \"Functions Defined\"; link \"More about defining functions\"",
          "code_panel": "ground #1E2933 (the slideshow ground) with box-shadow inset 0 0 30px rgba(0,0,0,0.6); padding 20px 24px; pre/code 16px/24px in the stack Consolas, \"Lucida Console\", \"Liberation Mono\", \"DejaVu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace (Courier New on macOS). Token colours: comment and output #DDDDDD; prompts >>> and ... #C65D09 bold; keywords #6AB825 bold; function names #447FCF; numbers #3677A9; operators #999999; strings #ED9D13; builtins #24909D; names and punctuation #0D870D. Wrapping: pre uses white-space: pre-wrap inside the 442px text column (490 - 2x24 padding); the output line \"0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610\" fills line 1 and \"987\" WRAPS to its own line 2. Never use white-space:pre with overflow hidden. 11 lines total; last line \"987\" at the panel bottom.",
          "copy_panel": "ground #1C3B56, 490x280 (it stops 24px short of the carousel bottom, so a 24px strip of #1E2933 shows under it), padding 20px 40px; heading 21px/21px Source Sans Pro Bold #FFD343, margin-bottom 9px; text 16px/26px Regular #E6E8EA; link #FFD343 with a 1px #FFDF76 bottom border (hover: white)",
          "paging": "five 34x30 buttons labelled 1-5, x 860, 902, 944, 986, 1028 (8px gaps), y 468, centred in the copy panel bottom with 16px padding below: blue button: linear-gradient(#3776AB 10%, #2B5B84 90%), 1px border #3D83BE top/left and #3776AB right/bottom, radius 6px, text #E6E8EA, inset 0 0 5px rgba(55,118,171,0.2); hover gradient #316998 10% to #244E71 90%, text #F2F4F6; 16px/16px; inactive opacity 0.7, active (1) opacity 1 with #FFD343 numeral",
          "launch_shell": "\">_\" button 45x45 at x 648 y 237 (top-right corner of the code panel, 24px in): yellow button: linear-gradient(#FFDF76 10%, #FFD343 90%) over #FFD343, 1px solid #DCA900, radius 6px, text #4D4D4D Source Sans Pro Regular, text-shadow 1px 1px 1px rgba(255,255,255,0.3), box-shadow 1px 1px 1px rgba(0,0,0,0.05) and inset 0 0 5px rgba(255,255,255,0.5); hover gradient #FFEBA9 10% to #FFD343 90%; label Flux-Regular 19.2px, tracking -1.2px; its \"Launch Interactive Shell\" label is screen-reader only",
          "intro": "24px/33.6px Source Sans Pro Regular #CACCCE, centred; link \"Learn More\" #FFD343 underlined, preceded by the read-more mark: \"›››\" (three U+203A single right-pointing angle quotes) set in Source Sans Pro Bold 700 at 144% of the surrounding text size, letter-spacing -0.0625em, 0.25em gap before the label, in the link colour. NEVER type three \">\" characters and NEVER set the mark in Abel: Flux's \">\" is a narrow chevron, and Abel's \">\" is a broad wedge twice as wide (47.3px vs 24.0px at 28.8px). Measured 2026-10-31 on python.org: Flux \">>>\" 28.8px = 24.0px wide; SSP Bold \"›››\" 34.56px = 23.8px wide, same chevron shape (here 34.56px, 23.8px wide); hover white"
        },
        "media": "none (code sample)",
        "type": "slide heading Source Sans Pro Bold 21px #FFD343; slide text 16/26 #E6E8EA; code 16/24 mono; intro 24/33.6 #CACCCE (phone 20/28)",
        "cta": "no hero button: the actions are the \">_\" shell launcher, the slide links and the yellow \">>> Learn More\" link",
        "proof": "the code itself; no logos or numbers",
        "slides": [
          "Functions Defined (fib to 1000) — More about defining functions",
          "All the Flow You'd Expect (for loop over a list) — More control flow tools",
          "Compound Data Types (list comprehension, enumerate) — More about lists",
          "Intuitive Interpretation (arithmetic, true and floor division) — More about simple math functions",
          "Quick & Easy to Learn (print, input, f-string) — Whet your appetite"
        ],
        "copy_note": "Slide titles and link labels verbatim, observed 2026-10-31; slide body copy is 2-4 lines per slide (paraphrase it: one plain sentence on what the code shows, then a link to the matching docs page)."
      },
      "sections": [
        {
          "name": "Notice bar",
          "summary": "A rounded yellow pill-bar announcing one item, centred text and a grey See more button; the first thing in the light content band.",
          "ground": "Content band behind it: linear-gradient(#FCFCFC 10%, #F9F9F9 90%) from y 633 to 2033. The bar: #FFDF76",
          "desktop": {
            "box": "x 152-1246 (1094x67) at y 681, margin 8px, padding 10px, border-radius 16px",
            "text": "16px/26px #664E04 centred, one line x 297-1013",
            "button": "See more 89x40 at x 1024 y 691: linear-gradient(#D9D9D9 10%, #CCCCCC 90%), 1px solid #006DAD, radius 6px, #4D4D4D 16px, padding 6.4px 12px 5.6px; hover gradient #E6E6E6 to #D9D9D9, text #1A1A1A"
          },
          "phone": {
            "box": "363x145 at x 12 y 785, text wraps to 3 centred lines",
            "button": "full width 343x40 under the text"
          },
          "anatomy": [
            "An icon slot precedes the text (font-awesome fa-chart-line, which the site's FA 4.7 lacks, so it renders blank: leave it out)",
            "Content is live: on 2026-10-31 a security notice about certifi, pip, uv and sigstore; treat as an example"
          ],
          "components": [
            "notice bar",
            "grey button"
          ]
        },
        {
          "name": "Four small widgets: Get Started, Download, Docs, Jobs",
          "summary": "Four equal columns, each topped by a 4px light-blue rule, an icon-font glyph plus a Flux title, two or three lines of text and one blue link.",
          "ground": "content band (#FCFCFC to #F9F9F9); widgets have no fill",
          "desktop": {
            "band": "y 756-993; main column x 144-1296 (1152px)",
            "grid": "4 columns 269.6px with 24.5px gaps: x 144, 438, 732, 1026",
            "widget": "border-top 4px solid #75A8D3, padding 20px; heights 213/188/188/237 (content-driven, top-aligned)",
            "title": "y 780"
          },
          "phone": {
            "grid": "1 column, full width 382px (x 4, the container has only 4px padding)",
            "stack": "Get Started y 938, Download 1133, Docs 1303, Jobs 1498",
            "text": "16px/26px"
          },
          "anatomy": [
            "Title: Flux-Regular 24.15px/30.19px #444444, margin-bottom 2.4px; preceded by a Pythonicon glyph at 21.13px #3776AB with 6px gap: get-started U+E616 (power symbol), download U+E609, documentation U+E60A, jobs U+E606",
            "Text: Source Sans Pro 15px/24.375px #444444, paragraph margin-bottom 13.1px; bold runs in Source Sans Pro Bold (Jobs: \"relaunched community-run job board\")",
            "Link line: 15px #3776AB, no underline, hover #1E2933. Labels: \"Start with our Beginner's Guide\"; \"Latest: Python 3.15.2\" (version observed 2026-10-31, live); \"docs.python.org\"; \"jobs.python.org\"",
            "Body line counts at 1440 (text column 229.6px, 15px/24.375px): Get Started 4 lines, Download 3 lines, Docs 3 lines, Jobs 5 lines (with the bold run), each followed by the link line. Write plain example copy of that length (about 7, 6, 6 and 9 words per line); these counts produce the 213/188/188/237 heights. On phone the same copy reflows at 342px; heights are then content-driven (observed 195/170/195/196), do not force them."
          ],
          "components": [
            "small widget",
            "icon-font title",
            "text link"
          ]
        },
        {
          "name": "Latest News and Upcoming Events",
          "summary": "Two half-width list widgets: icon + Flux title, a grey \">>> More\" link top-right, then five dated rows split by hairlines.",
          "ground": "content band",
          "desktop": {
            "band": "y 1009-1279",
            "grid": "2 columns 563.7px, gap 24.5px: x 144 and 732",
            "widget": "same 4px #75A8D3 top rule and 20px padding as the small widgets",
            "rows": "first row y 1066; each row 38.5px"
          },
          "phone": {
            "grid": "1 column 382px; News y 1694 (361 tall), Events y 2055 (335)",
            "rows": "67px rows: date shows month-day only (the \"2026-\" part is hidden), titles wrap to 2 lines in 278px; left padding 64px",
            "more": "the More links are hidden"
          },
          "anatomy": [
            "Title glyphs: news U+E603, calendar U+E60E; titles \"Latest News\", \"Upcoming Events\"",
            "More link: absolute top 0.25em right 0.25em; 15px #999999, hover #666666; prefixed by the read-more mark (SSP Bold \"›››\" at 21.6px, -0.0625em, never \">>>\" in Abel). Labels \"More news\" (News) and \"More\" (Events)",
            "Row: border-top 1px solid #CACCCE, padding 6.56px 0 6.56px 105px, 15px/24.375px; ISO date (2026-10-29) absolutely placed at left in #444444; title link #3776AB",
            "Rows are live content. The ten rows on 2026-10-31 (observed; use them as the example set, they are public headlines and dates, not marketing claims): News: 2026-10-29 \"Announcing PSF Community Service Award Recipients!\"; 2026-10-26 \"Python 3.15.2, 3.14.10, 3.13.18, 3.12.16 and 3.11.18 are out\"; 2026-10-22 \"Mark Your Calendars! PSF Board Office Hours for the Year Ahead\"; 2026-10-21 \"Python 3.15.1, 3.14.9 and 3.13.17 are out\"; 2026-10-20 \"Wikis: Relaunched!\". Events: 2026-11-06 \"PyCon ES 2026\"; 2026-11-07 \"Python El Salvador vuelve — Meetup de Reactivación\"; 2026-11-11 \"Edmonton.py: The Edmonton Python User Group\"; 2026-11-12 \"Python Help\"; 2026-11-12 \"Python Leiden User Group\". Every row is one line at 1440."
          ],
          "components": [
            "list widget",
            "dated row",
            "more link"
          ]
        },
        {
          "name": "Success Stories and Use Python for…",
          "summary": "Left: a big yellow italic quote bubble with a tail and a grey attribution strip. Right: six application rows, each a bold label followed by small grey tag chips.",
          "ground": "content band",
          "desktop": {
            "band": "y 1295-1741",
            "grid": "2 columns 563.7px as above; the right widget has 12px left padding",
            "quote": "blockquote x 164 y 1352, 524x299",
            "attribution": "y 1660, 524x62",
            "apps_rows": "from y 1353, 38.9px each"
          },
          "phone": {
            "quote": "Georgia italic 16px/28px, 342 wide, padding 11.2px 16px 14px",
            "apps_rows": "93px rows (label then wrapped tags), tags 14px",
            "stack": "Success Stories y 2389, Use Python for… y 2874"
          },
          "anatomy": [
            "Titles: glyph success-stories U+E625 + \"Success Stories\"; glyph python U+E614 + \"Use Python for…\" (with an ellipsis character); both with a \">>> More\" link",
            "Quote: Georgia italic 18px/31.5px #666666 on linear-gradient(#FFE58F 10%, #FFDF76 90%), 3px solid #FFEBA9 top and bottom borders, radius 6px, padding 18px 25.2px 23.4px; the whole quote is a link (hover #3776AB)",
            "Tail: a 27px CSS triangle in #FFDF76 pointing down from the quote bottom, 105px from its left edge",
            "Attribution: a #F6F6F6 table row, padding 0.5em, 14px/22.75px: story title link #3571A3 then \"by <name>\" in Source Sans Pro Italic #444444",
            "Stories rotate per page load (observed 2026-10-31: Lincoln Loop). The bubble text is a customer story in the customer's own first-person-company voice, NOT the language definition or PSF boilerplate: about 75 words that set in exactly 8 lines at 473px (524 - 2x25.2 padding) in Georgia italic 18px/31.5px, filling the bubble (299px = 8x31.5 + padding 18 + 23.4 + 2x3px borders), no empty yellow space. Example at rest: a paraphrase of the Lincoln Loop story (an agency founded in 2007 that builds client sites with Python and Django and credits the language's practicality, PyPI and the community for its success). Attribution strip under the tail (styled as the Attribution line above): story title link \"Lincoln Loop: Building a sustainable business inspired by Python's ethos\" then \" by Peter Baumgartner\", wrapping to 2 lines (observed 2026-10-31).",
            "Application rows: border-bottom 1px solid #CACCCE, padding 7.5px 0 6px; label 15px Source Sans Pro Bold #444444 + \":\"; tags 13.1px #666666 on #E6E8EA, 1px #F2F4F6 top and 1px #CACCCE bottom border, padding 2.6px 5.25px 1.3px, separated by \", \"; hover #444444 on #D0D4D7",
            "Rows and tags (verbatim, observed 2026-10-31): Web Development: Django, Pyramid, Bottle, Tornado, Flask, Litestar, FastAPI | GUI Development: tkInter, PyGObject, PyQt, PySide, Kivy, wxPython, DearPyGui | AI and Machine Learning: PyTorch, TensorFlow, scikit-learn, Transformers, Anthropic, LangChain | Scientific and Numeric: SciPy, Pandas, IPython | Software Development: Buildbot, Trac, Roundup | System Administration: Ansible, Salt, OpenStack, xonsh"
          ],
          "components": [
            "quote bubble",
            "tag chip",
            "labelled row"
          ]
        },
        {
          "name": "Python Software Foundation band",
          "summary": "A full-width blue box (same gradient as the header) with a yellow \">>> Python Software Foundation\" title, the PSF mission in light grey, a yellow Learn more link, two yellow buttons, and the large two-snakes device at right.",
          "ground": "linear-gradient(#1E415E 10%, #2B5B84 90%), inset shadows 0 0 50px and 0 0 20px rgba(0,0,0,0.03); radius 0",
          "desktop": {
            "box": "x 144-1296 (1152x224) at y 1757, padding 24px 28px, margin-bottom 8px",
            "copy_column": "x 172, 723px wide (373px right margin keeps clear of the logo)",
            "title": "y 1781",
            "text": "y 1814-1892 (3 lines)",
            "buttons": "y 1892: Become a Member 141x38 at x 172, Donate to the PSF 137x38 at x 316",
            "logo": "210x210 box at x 1070 y 1765 showing the 211x262 PNG from its top-left (the bottom 52px with the shadow is cropped)"
          },
          "phone": {
            "box": "382 wide (x 4) at y 3435, 328 tall, padding 20px",
            "logo": "hidden (below 800px)",
            "buttons": "full width 342x40, stacked (y 3649 and 3696), 16px"
          },
          "anatomy": [
            "Title: the read-more mark (SSP Bold \"›››\" at 34.8px, -0.0625em, 7.2px gap; replaces Flux \">>>\" 28.98px) then \"Python Software Foundation\" in Flux-Regular 24.15px/30.19px (Abel stand-in 23.4px), all #FFD343 (link to /psf/; hover white)",
            "Text: 15px/24.375px #CACCCE: the PSF mission sentence, 3 lines at 723px, ending with a \">>> Learn more\" link in #FFD343 (links hover #FFF1C2)",
            "Buttons: yellow button: linear-gradient(#FFDF76 10%, #FFD343 90%) over #FFD343, 1px solid #DCA900, radius 6px, text #4D4D4D Source Sans Pro Regular, text-shadow 1px 1px 1px rgba(255,255,255,0.3), box-shadow 1px 1px 1px rgba(0,0,0,0.05) and inset 0 0 5px rgba(255,255,255,0.5); hover gradient #FFEBA9 10% to #FFD343 90%; 15px, padding 6px 11.25px 5.25px, 3px apart"
          ],
          "components": [
            "blue band",
            "yellow button",
            "large logo device"
          ]
        }
      ],
      "footer": {
        "summary": "A pale grey sitemap of six columns (eight groups, two stacked) with blue Flux-Bold headings and grey links, then a blue base strip with four centred Flux-Bold links, a green status dot and a tiny copyright line.",
        "ground": "Sitemap #E6E8EA with 1px #D8DBDE top border (y 2033-2591); base: linear-gradient(#1E415E 10%, #2B5B84 90%) with 1px #111111 top border (y 2591-2694)",
        "anatomy": [
          "Sitemap x 132-1308: 6 columns of 196px at x 132, 328, 524, 720, 916, 1112, masonry-stacked: Events sits under About, Contributing under News. Group rhythm at 1440 (measured 2026-10-31): each group li has margin-bottom 18.375px; inside a group the heading row is 56px from group top to first link (heading text 15px below group top), link rows 35.4px pitch. So a stacked group's heading text sits 33.4px below the previous group's last link row bottom (18.375 + 15), visibly larger than the link pitch. Example: About group 197px tall (heading + 4 links); Events heading text at About top + 197 + 18.4 + 15 = +230. Contributing heading text: News group (heading + 6 links = 56 + 6x35.4 = 268px) + 18.4 + 15 below News top.",
          "Headings: Flux-Bold 17.5px/28.44px #3776AB, padding 7px 8.75px 5.25px, first at y 2050; hover #222222",
          "Links: 14px/22.75px #666666, padding 7px 10.5px 5.6px, 36px row pitch; hover fill #ECEDEF, text #444444",
          "About: Applications, Quotes, Getting Started, Help | Downloads: All releases, Source code, Windows, macOS, Android, iOS, Other Platforms, License, Alternative Implementations | Documentation: Docs, Audio/Visual Talks, Beginner's Guide, FAQ, Non-English Docs, PEP Index, Python Books, Python Essays | Community: Diversity, Mailing Lists, IRC, Forums, PSF Annual Impact Report, Python Conferences, Special Interest Groups, Python Logo, Python Wiki, Code of Conduct, Community Awards, Get Involved, Shared Stories | Success Stories: Arts, Business, Education, Engineering, Government, Scientific, Software Development | News: Python News, PSF Newsletter, PSF News, PyCon US News, Python Insider, News from the Community | Events: Python Events, User Group Events, Python Events Archive, User Group Events Archive, Submit an Event | Contributing: Developer's Guide, Issue Tracker, python-dev list, Core Mentorship, Report a Security Issue",
          "Base links, centred row at y 2608: \"Help & General Contact\" (x 412), \"Diversity Initiatives\" (606), \"Submit Website Bug\" (770), \"Status\" (941) + 12px #008000 circle; Flux-Bold 18.11px/29.43px #89B4D9, padding 5.4px 13.6px; hover #FFF7DC with text-shadow 0 0 5px rgba(255,211,67,0.2)",
          "Copyright line y 2660, 11.9px #75A8D3 centred: \"Copyright ©2001-2026.\" then links \"Python Software Foundation\", \"Legal Statements\", \"Privacy Notice\", each with a 1px dotted #4F90C6 underline (hover white)",
          "No street address or phone number on the homepage"
        ],
        "phone": "Footer opens with a \"▲ Back to Top\" bar (366x42 at x 12, margin 12px 0, #E0E3E5, 1px #DBDEE1 bottom, #666666 16px/26px centred, padding 8px 12px 6.4px). The eight groups stack in one column 366px wide at x 12: heading row 47px (heading Flux-Bold 20px/32.5px #3776AB; Abel 20px + 0.25px stroke), then link rows of 42.5px pitch (16px/26px #666666, padding as desktop), margin-bottom 21px after each group. Group heights: About 218 (47 + 4x42.5), Downloads 430 (9 links), Documentation 387 (8), Community 600 (13), Success Stories 345 (7), News 302 (6), Events 260 (5), Contributing 260 (5). A second Back to Top closes the list. Base: 289px tall, the four links stacked and centred, 52px rows in Flux-Bold 20.7px (Abel 20.7px + 0.25px stroke); copyright 10.2px on 2 lines."
      },
      "dark_ground": {
        "secondary_button": "yellow button (yellow button: linear-gradient(#FFDF76 10%, #FFD343 90%) over #FFD343, 1px solid #DCA900, radius 6px, text #4D4D4D Source Sans Pro Regular, text-shadow 1px 1px 1px rgba(255,255,255,0.3), box-shadow 1px 1px 1px rgba(0,0,0,0.05) and inset 0 0 5px rgba(255,255,255,0.5); hover gradient #FFEBA9 10% to #FFD343 90%) is the action on blue; blue button for search/paging on the darkest navy",
        "link": "#FFD343 on blue and navy (slide links underlined with 1px #FFDF76; intro link underlined); hover white",
        "muted_text": "#CACCCE (intro, PSF text), #E6E8EA (nav, slide text), #BBBBBB / #999999 (network bar)",
        "hairline": "1px rgba(0,0,0,0.2) + 1px rgba(255,255,255,0.1) bevel dividers in the nav; #1F3B47 under the network bar",
        "logo_variant": "combined logo with the light wordmark (header-python-logo.png) on blue; the device alone, large, in the PSF band"
      }
    },
    "bands": [
      {
        "label": "Python Network bar",
        "ground": "#1E2933",
        "content": "6 colour-coded tabs: Python, PSF, Docs, PyPI, Jobs, Community",
        "desktop": "1440x46; tabs 200px each in a 1200px container at x 120",
        "phone": "expanded at the top as full-width 45px rows between the \"Close\" (Pythonicon U+E61D) and \"The Python Network\" (U+E61A) 42px bars (358px)",
        "anatomy": [
          "3px coloured top rule per tab; the current tab has a white label, dark gradient and an 8px triangle"
        ]
      },
      {
        "label": "Header row",
        "ground": "#2B5B84",
        "content": "logo left; Donate + options bar (search, GO, Socialize) right",
        "desktop": "y 47-161; logo 290x82 at x 136 y 63; options bar 435x59 at x 869 y 80",
        "phone": "logo centred, full-width Donate, 2-row options bar",
        "anatomy": [
          "Yellow Donate is the only coloured button in the header"
        ],
        "ground_note": "linear-gradient(#1E415E 10%, #2B5B84 90%)"
      },
      {
        "label": "Main navigation bar",
        "ground": "#2D618C",
        "content": "7 centred items with dropdowns",
        "desktop": "1168x55 at x 136 y 161, radius 8px",
        "phone": "hidden below 640px; no menu button (the footer sitemap is the phone navigation)",
        "anatomy": [
          "Bevelled 1px dividers; hover gradient #326B9C to #2D618C"
        ],
        "ground_note": "linear-gradient(#3776AB 30%, #2D618C 95%)"
      },
      {
        "label": "Hero carousel",
        "ground": "#1E2933",
        "content": "code sample + slide copy + 5 numbered buttons + >_ launcher",
        "desktop": "980x304 at x 222 y 217, two 490px halves",
        "phone": "hidden",
        "anatomy": [
          "Slide 1 at rest; fades every 8s"
        ],
        "ground_note": "#1E2933 (code) and #1C3B56 (copy), on the header gradient"
      },
      {
        "label": "Intro line",
        "ground": "#2B5B84",
        "content": "one sentence + >>> Learn More",
        "desktop": "centred, 24px/33.6px #CACCCE, y 542-611, 2 lines",
        "phone": "left, 20px/28px, 3 lines",
        "anatomy": [
          "Header ends at y 632 with a 1px #444444 rule"
        ],
        "ground_note": "header gradient"
      },
      {
        "label": "Notice bar",
        "ground": "#FFDF76",
        "content": "one-line notice + See more",
        "desktop": "1094x67 at x 152 y 681, radius 16px",
        "phone": "363x145, button full width",
        "anatomy": [
          "Live content"
        ],
        "ground_note": "#FFDF76 on the content band"
      },
      {
        "label": "Small widgets",
        "ground": "#F9F9F9",
        "content": "Get Started, Download, Docs, Jobs",
        "desktop": "4 x 269.6px, gap 24.5px, y 756",
        "phone": "stacked, 382px",
        "anatomy": [
          "4px #75A8D3 top rule, glyph + Flux title, 15px text, blue link"
        ],
        "ground_note": "content band #FCFCFC to #F9F9F9"
      },
      {
        "label": "List widgets",
        "ground": "#F9F9F9",
        "content": "Latest News, Upcoming Events",
        "desktop": "2 x 563.7px, y 1009, 5 rows of 38.5px",
        "phone": "stacked; dates as MM-DD",
        "anatomy": [
          "Hairline #CACCCE rows; >>> More at top right"
        ],
        "ground_note": "content band"
      },
      {
        "label": "Stories and uses",
        "ground": "#F9F9F9",
        "content": "Success Stories quote; Use Python for… tag rows",
        "desktop": "2 x 563.7px, y 1295",
        "phone": "stacked",
        "anatomy": [
          "Yellow Georgia-italic quote bubble; grey tag chips"
        ],
        "ground_note": "content band"
      },
      {
        "label": "PSF band",
        "ground": "#2B5B84",
        "content": ">>> title, mission, Learn more, 2 yellow buttons, large logo device",
        "desktop": "1152x224 at x 144 y 1757",
        "phone": "382x328, no logo, stacked buttons",
        "anatomy": [
          "Device 210px square crop at right"
        ],
        "ground_note": "linear-gradient(#1E415E 10%, #2B5B84 90%)"
      },
      {
        "label": "Sitemap footer",
        "ground": "#E6E8EA",
        "content": "8 link groups in 6 columns",
        "desktop": "y 2033-2591, columns 196px from x 132",
        "phone": "one centred column, Back to Top bars",
        "anatomy": [
          "Flux-Bold blue headings, grey 14px links"
        ]
      },
      {
        "label": "Site base",
        "ground": "#2B5B84",
        "content": "4 links, status dot, copyright",
        "desktop": "y 2591-2694, centred",
        "phone": "links stacked, 289px tall",
        "anatomy": [
          "#89B4D9 Flux-Bold links; 11.9px #75A8D3 copyright"
        ],
        "ground_note": "linear-gradient(#1E415E 10%, #2B5B84 90%)"
      }
    ],
    "layout": {
      "page_margin": {
        "desktop": 144,
        "phone": 4
      },
      "section_padding": {
        "desktop": 40,
        "phone": 4
      },
      "container_max": 1200,
      "hero_text_max": 1096,
      "columns": 4,
      "columns_phone": 1,
      "gutter": 24,
      "gutter_phone": 0,
      "card_gap": 24,
      "nav_height": 55,
      "note": "Measured on https://www.python.org/ (2026-10-31) at 1440 and 390. Every container is 1200px (x 120-1320); the content container adds padding 40px 24px 16px, so content runs x 144-1296 (1152px). Widget grid: 4 x 269.6px or 2 x 563.7px with 24.5px gaps (published Susy grid: 12 columns of 60px with 20px gutters, $total-columns/$column-width/$gutter-width in _base.scss, rendered fluid). Rows stack with 16px margin-bottom; widgets carry 20px inner padding and a 4px top rule instead of section padding. Header row padding 12px 16px; main nav and logo sit at x 136. Phone: the content container has only 4px padding, so widgets run 382px wide edge to edge with their own 20px padding (text at x 24). Base type rhythm 16px/28px (published --font-size-base / --line-height-base).",
      "prov": "observed",
      "source": "https://www.python.org/ (2026-10-31)"
    },
    "type": [
      {
        "role": "Widget / band title (Flux-Regular)",
        "id": "title",
        "face": "display",
        "size": {
          "desktop": 24.15,
          "phone": 24.15
        },
        "line_height": 1.25,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)",
        "note": "Flux-Regular; stand-in Abel at 97% (23.4px)"
      },
      {
        "role": "Intro line",
        "id": "lead",
        "face": "body",
        "size": {
          "desktop": 24,
          "phone": 20
        },
        "line_height": 1.4,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)",
        "note": "phone line-height 28px"
      },
      {
        "role": "Slide heading",
        "id": "slide-heading",
        "face": "body",
        "size": {
          "desktop": 21,
          "phone": 21
        },
        "line_height": 1,
        "tracking_px": 0,
        "weight": 700,
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)",
        "note": "Source Sans Pro Bold, #FFD343"
      },
      {
        "role": "Main nav item",
        "id": "nav",
        "face": "body",
        "size": {
          "desktop": 18,
          "phone": 18
        },
        "line_height": 1.625,
        "tracking_px": 0.18,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "role": "Footer base link (Flux-Bold)",
        "id": "footer-base",
        "face": "display",
        "size": {
          "desktop": 18.11,
          "phone": 20.7
        },
        "line_height": 1.625,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)",
        "note": "Flux-Bold family; stand-in Abel 400 at 100% size + -webkit-text-stroke 0.25px"
      },
      {
        "role": "Sitemap heading (Flux-Bold)",
        "id": "sitemap-heading",
        "face": "display",
        "size": {
          "desktop": 17.5,
          "phone": 20
        },
        "line_height": 1.625,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)",
        "note": "Flux-Bold family"
      },
      {
        "role": "Quote",
        "id": "quote",
        "face": "body",
        "size": {
          "desktop": 18,
          "phone": 16
        },
        "line_height": 1.75,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)",
        "note": "Georgia italic, a system serif, only in success-story quotes"
      },
      {
        "role": "Body",
        "id": "body",
        "face": "body",
        "size": {
          "desktop": 16,
          "phone": 16
        },
        "line_height": 1.625,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "role": "Widget text",
        "id": "widget",
        "face": "body",
        "size": {
          "desktop": 15,
          "phone": 16
        },
        "line_height": 1.625,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)",
        "note": "15/24.375 desktop, 16/26 phone"
      },
      {
        "role": "Sitemap link / attribution",
        "id": "small",
        "face": "body",
        "size": {
          "desktop": 14,
          "phone": 16
        },
        "line_height": 1.625,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "role": "Tag",
        "id": "tag",
        "face": "body",
        "size": {
          "desktop": 13.125,
          "phone": 14
        },
        "line_height": 1.625,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "role": "Copyright",
        "id": "legal",
        "face": "body",
        "size": {
          "desktop": 11.9,
          "phone": 10.2
        },
        "line_height": 1.625,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      {
        "role": "Code sample",
        "id": "code",
        "face": "mono",
        "size": {
          "desktop": 16,
          "phone": 16
        },
        "line_height": 1.5,
        "tracking_px": 0,
        "weight": 400,
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)",
        "note": "prompts and keywords bold"
      }
    ],
    "components": {
      "button_yellow": {
        "fill": "#FFD343",
        "text": "#4D4D4D",
        "border": "1px solid #DCA900",
        "radius": 6,
        "padding": "6.4px 12px 5.6px",
        "padding_x": 12,
        "font_size": 16,
        "weight": 400,
        "face": "body",
        "ring_px": 1,
        "ring": "#DCA900",
        "gradient": "linear-gradient(#FFDF76 10%, #FFD343 90%)",
        "text_shadow": "1px 1px 1px rgba(255,255,255,0.3)",
        "shadow": "1px 1px 1px rgba(0,0,0,0.05), inset 0 0 5px rgba(255,255,255,0.5)",
        "example": "Donate (75x32, header); Become a Member / Donate to the PSF (15px, 38px tall, PSF band)",
        "states": {
          "hover": {
            "prov": "observed",
            "measured": {
              "gradient": "linear-gradient(#FFEBA9 10%, #FFD343 90%)"
            },
            "css": {
              "background-image": "linear-gradient(#FFEBA9 10%, #FFD343 90%)"
            }
          }
        },
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)",
        "note": "Radius is the published --border-radius-default 6px",
        "height_px": 32,
        "build_note": "Build exactly this recipe: gradient, 1px border, text-shadow and shadow as listed. Do not use a flat fill."
      },
      "button_blue": {
        "fill": "#2B5B84",
        "text": "#E6E8EA",
        "border": "1px solid #3776AB, lighter #3D83BE top and left",
        "radius": 6,
        "padding": "6.4px 12px 5.6px",
        "padding_x": 12,
        "font_size": 16,
        "weight": 400,
        "face": "body",
        "ring_px": 1,
        "ring": "#3776AB",
        "gradient": "linear-gradient(#3776AB 10%, #2B5B84 90%)",
        "shadow": "inset 0 0 5px rgba(55,118,171,0.2)",
        "example": "GO (46x40), slide numbers (34x30, opacity 0.7 until active)",
        "states": {
          "hover": {
            "prov": "observed",
            "measured": {
              "gradient": "linear-gradient(#316998 10%, #244E71 90%)",
              "text": "#F2F4F6"
            },
            "css": {
              "background-image": "linear-gradient(#316998 10%, #244E71 90%)",
              "color": "#F2F4F6"
            }
          }
        },
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)",
        "height_px": 40,
        "build_note": "Build exactly this recipe: gradient, 1px border, text-shadow and shadow as listed. Do not use a flat fill."
      },
      "button_grey": {
        "fill": "#CCCCCC",
        "text": "#4D4D4D",
        "border": "1px solid #006DAD (notice bar)",
        "radius": 6,
        "padding": "6.4px 12px 5.6px",
        "padding_x": 12,
        "font_size": 16,
        "weight": 400,
        "face": "body",
        "ring_px": 1,
        "ring": "#006DAD",
        "gradient": "linear-gradient(#D9D9D9 10%, #CCCCCC 90%)",
        "example": "See more (89x40) in the notice bar",
        "states": {
          "hover": {
            "prov": "observed",
            "measured": {
              "gradient": "linear-gradient(#E6E6E6 10%, #D9D9D9 90%)",
              "text": "#1A1A1A"
            },
            "css": {
              "background-image": "linear-gradient(#E6E6E6 10%, #D9D9D9 90%)",
              "color": "#1A1A1A"
            }
          }
        },
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)",
        "height_px": 40,
        "build_note": "Build exactly this recipe: gradient, 1px border, text-shadow and shadow as listed. Do not use a flat fill."
      },
      "button_launch_shell": {
        "fill": "#FFD343",
        "text": "#4D4D4D",
        "radius": 6,
        "padding_x": 14.4,
        "font_size": 19.2,
        "weight": 400,
        "face": "display",
        "ring_px": 1,
        "ring": "#DCA900",
        "example": "\">_\" 45x45, Flux-Regular, tracking -1.2px, top-right of the code panel",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)",
        "height_px": 45,
        "build_note": "Build exactly this recipe: gradient, 1px border, text-shadow and shadow as listed. Do not use a flat fill."
      },
      "small_widget": {
        "top_rule": "4px solid #75A8D3",
        "padding": "20px",
        "title": "Pythonicon glyph 21px #3776AB + Flux 24.15px #444444",
        "text": "15px/24.375px #444444",
        "link": "#3776AB",
        "radius": 0,
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      "list_row": {
        "border": "1px solid #CACCCE top",
        "padding": "6.56px 0 6.56px 105px",
        "date": "absolute left, #444444",
        "link": "#3776AB 15px",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      "more_link": {
        "text": "#999999",
        "hover": "#666666",
        "prefix": "SSP Bold \"›››\" at 144% of the link size, -0.0625em, 0.25em gap (stand-in for Flux \">>>\"; never literal \">>>\")",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      "readmore_link_on_blue": {
        "text": "#FFD343",
        "hover": "#FFFFFF",
        "prefix": "SSP Bold \"›››\" at 144% of the link size, -0.0625em, 0.25em gap (stand-in for Flux \">>>\")",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      "quote_bubble": {
        "fill": "#FFDF76",
        "gradient": "linear-gradient(#FFE58F 10%, #FFDF76 90%)",
        "border": "3px solid #FFEBA9 top and bottom",
        "radius": 6,
        "text": "Georgia italic 18/31.5 #666666",
        "tail": "27px triangle #FFDF76, 105px from left",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      "tag_chip": {
        "fill": "#E6E8EA",
        "text": "#666666",
        "border": "1px #F2F4F6 top, 1px #CACCCE bottom",
        "radius": 0,
        "padding": "2.6px 5.25px 1.3px",
        "font_size": 13.125,
        "states": {
          "hover": {
            "prov": "observed",
            "measured": {
              "fill": "#D0D4D7",
              "text": "#444444"
            }
          }
        },
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      "notice_bar": {
        "fill": "#FFDF76",
        "text": "#664E04",
        "radius": 16,
        "padding": "10px",
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      },
      "network_tab": {
        "fill": "transparent",
        "text": "#999999",
        "top_rule": "3px tab colour",
        "marker": "8px triangle in tab colour",
        "width": 200,
        "height": 45,
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)",
        "fill_current": "linear-gradient(#13191E 10%, #1F2A32 90%)",
        "text_current": "#FFFFFF"
      },
      "main_nav_item": {
        "text": "#E6E8EA",
        "font_size": 18,
        "tracking": "0.18px",
        "padding": "11.7px 22.5px 9.9px",
        "states": {
          "hover": {
            "prov": "observed",
            "measured": {
              "text": "#FFFFFF",
              "gradient": "linear-gradient(#326B9C 10%, #2D618C 90%)"
            }
          }
        },
        "prov": "observed",
        "source": "https://www.python.org/ (2026-10-31)"
      }
    },
    "breakpoints": {
      "phone_max": 639,
      "all": [
        400,
        480,
        520,
        640,
        800,
        940,
        1024,
        1200
      ],
      "note": "From mq.css (em media queries at 16px): 640 (40em) brings back the main nav, two-column widgets and the multi-column sitemap; 800 (50em) adds the intro line break and the PSF band logo; 940 (58.75em) is the full desktop nav. The carousel is hidden on phones.",
      "prov": "observed",
      "source": "https://www.python.org/static/stylesheets/mq.ab4b4ea88926.css"
    }
  },
  "system": {
    "fixed": [
      "The two-snakes shape, unaltered and never mirrored, with its TM",
      "Python blue #3776AB and Python yellow #FFD343: blue frames, yellow acts",
      "Source Sans Pro for text; Flux (or its stand-in) only for short labels",
      "\">>>\" as the read-more mark",
      "Python as an adjective; the PSF never shown endorsing anything"
    ],
    "flex": "The colours inside the snakes (with permission) and the code sample shown; everything else on python.org is a fixed system",
    "traits": [
      {
        "is": "Readable",
        "not": "Clever",
        "text": "Readability counts; explicit beats implicit (PEP 20).",
        "source": "https://peps.python.org/pep-0020/",
        "prov": "published"
      },
      {
        "is": "Simple",
        "not": "Esoteric",
        "text": "Simple language for a world-wide audience (devguide).",
        "source": "https://devguide.python.org/documentation/style-guide/",
        "prov": "published"
      },
      {
        "is": "Confident",
        "not": "Alarmist",
        "text": "Affirmative tone; no \"experts only\" warnings (devguide).",
        "source": "https://devguide.python.org/documentation/style-guide/",
        "prov": "published"
      },
      {
        "is": "Respectful",
        "not": "Condescending",
        "text": "Respect the reader's intelligence; don't talk down (devguide).",
        "source": "https://devguide.python.org/documentation/style-guide/",
        "prov": "published"
      },
      {
        "is": "Inclusive",
        "not": "Exclusionary",
        "text": "Avoid charged terms; diverse, international community (devguide, PSF mission).",
        "source": "https://devguide.python.org/documentation/style-guide/",
        "prov": "published"
      },
      {
        "is": "Practical",
        "not": "Purist",
        "text": "Practicality beats purity (PEP 20).",
        "source": "https://peps.python.org/pep-0020/",
        "prov": "published"
      }
    ]
  },
  "formats": [
    {
      "format": "Landing page",
      "level": 3,
      "must": "Build it the way www.python.org is built (kit.spec.page, homepage voice): dark network bar with six colour-ruled tabs; blue gradient header with the light-wordmark logo at left, yellow Donate and a dark options bar at right; glossy blue rounded nav; two-panel code carousel at rest on slide 1; centred grey intro with yellow \">>> Learn More\"; light content band with a yellow notice, 4-up then 2-up widgets with 4px light-blue rules and Flux titles; blue PSF-style band with yellow buttons and the large device; grey sitemap; blue base",
      "flex": "which widgets and how many rows; the code sample shown; the notice (or none)"
    },
    {
      "format": "Docs or guide page",
      "level": 1,
      "must": "Inner-page shell: same header, Source Sans Bold #3776AB headings, 15px/28px text, sidebar widget in blue; devguide voice",
      "flex": "section nav colour by site area (PSF pages use a grey #646565 nav)"
    },
    {
      "format": "Deck",
      "level": 2,
      "must": "Combined logo with TM, blue gradient title slides, Source Sans Pro, one code sample per idea, yellow for the one action",
      "flex": "light content slides"
    },
    {
      "format": "Proposal page",
      "level": 1,
      "must": "Light ground, #444444 text, #3776AB links, one yellow action; the non-affiliation notice if not the PSF",
      "flex": "a code panel when the subject is technical"
    },
    {
      "format": "Event or community page",
      "level": 4,
      "must": "Unaltered logo or an approved derivative, TM, approval for any derived logo; yellow and blue",
      "flex": "decoration inside the snakes that never touches the outline"
    }
  ],
  "checks": [
    {
      "name": "Logo hidden",
      "text": "Cover the snakes. It should still read as python.org: blue gradient frame, yellow actions, \">>>\" read-more links, a code panel, Source Sans text."
    },
    {
      "name": "Monochrome test",
      "text": "Flatten any logo use to one colour: the outline, gaps, chins and eyes must match the original exactly (the FAQ's own test)."
    },
    {
      "name": "Trademark check",
      "text": "TM on the logo, Python as an adjective, no implied endorsement, non-affiliation notice when needed."
    }
  ],
  "examples": [
    {
      "chapter": "voice",
      "do": {
        "ground": "paper",
        "text": "For example, use a with statement to close the file."
      },
      "do_caption": "Affirmative and plain: what to do, in English words.",
      "dont": {
        "ground": "paper",
        "text": "Warning: experts only, e.g. files may be lost."
      },
      "dont_caption": "Alarmist, judgemental and Latin."
    },
    {
      "chapter": "voice",
      "do": {
        "ground": "paper",
        "text": "Built with the Python programming language"
      },
      "do_caption": "Python as an adjective before a generic noun.",
      "dont": {
        "ground": "paper",
        "text": "Python your software today!"
      },
      "dont_caption": "The policy's own example of the trademark misused as a verb."
    },
    {
      "chapter": "color",
      "do": {
        "ground": "night",
        "text": "Donate",
        "button": true,
        "button_fill": "#FFD343",
        "ink": "#4D4D4D"
      },
      "do_caption": "Yellow action on the blue frame.",
      "dont": {
        "ground": "paper",
        "text": "Read the docs",
        "ink": "#FFD343"
      },
      "dont_caption": "Yellow text on a light ground disappears."
    },
    {
      "chapter": "type",
      "do": {
        "ground": "paper",
        "text": "Get Started",
        "font": "display",
        "weight": 400
      },
      "do_caption": "Flux (Abel stand-in) for a two-word label.",
      "dont": {
        "ground": "paper",
        "text": "Whether you're new to programming or experienced, it's easy to learn.",
        "font": "display",
        "weight": 400
      },
      "dont_caption": "A paragraph in the label face."
    },
    {
      "chapter": "logo",
      "do": {
        "ground": "paper",
        "text": "python",
        "ink": "#646464"
      },
      "do_caption": "The supplied logo, unaltered, with TM.",
      "dont": {
        "ground": "paper",
        "text": "nohtyp",
        "ink": "#646464"
      },
      "dont_caption": "Mirrored: a different shape, never permitted."
    }
  ],
  "make_it_yours": {
    "note": "Everything above transfers. These are Python'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": {
          "text": "To \"promote, protect, and advance the Python programming language\", and to help a diverse, international community of Python programmers grow.",
          "label": "PSF mission (quoted in part, the rest paraphrased)",
          "prov": "published",
          "source": "https://www.python.org/psf/mission/",
          "paraphrase": true
        },
        "story": {
          "text": "The PSF is a non-profit that holds Python's intellectual property, produces the free core distribution and protects the Python name; its mission statement was approved in 2002 and amended through 2009. The two-snakes logo was drawn by Tim Parkin around 2005, when Python moved from a \"cute\" animal icon to a mark balancing formality and playfulness, and he assigned it to the PSF. python.org has carried a copyright line since 2001.",
          "prov": "published",
          "source": "https://www.python.org/psf/mission/",
          "also": [
            "https://www.python.org/psf/trademarks-faq/",
            "https://www.python.org/ (2026-10-31)"
          ],
          "paraphrase": true
        },
        "values": [
          {
            "name": "Readability counts",
            "means": "Code is read more often than written; clarity wins (PEP 20 aphorism).",
            "prov": "published",
            "source": "https://peps.python.org/pep-0020/"
          },
          {
            "name": "Simple is better than complex",
            "means": "Choose the plain way; the docs echo it with economy of expression (PEP 20).",
            "prov": "published",
            "source": "https://peps.python.org/pep-0020/"
          },
          {
            "name": "Explicit is better than implicit",
            "means": "Say what you mean in code and in prose (PEP 20).",
            "prov": "published",
            "source": "https://peps.python.org/pep-0020/"
          },
          {
            "name": "Diverse and international community",
            "means": "Part of the PSF mission; also why the docs ask for simple English and inclusive terms.",
            "prov": "published",
            "source": "https://www.python.org/psf/mission/"
          },
          {
            "name": "Free to use",
            "means": "PSF licences keep the rights to obtain, use, redistribute and modify (paraphrase).",
            "prov": "published",
            "source": "https://www.python.org/psf/mission/"
          }
        ]
      },
      "positioning": {
        "statement": {
          "text": "A programming language that lets you work quickly and integrate systems more effectively.",
          "prov": "observed",
          "source": "https://www.python.org/ (2026-10-31)"
        },
        "category": {
          "text": "General-purpose, interpreted, high-level open source programming language",
          "prov": "published",
          "source": "https://www.python.org/doc/essays/blurb/"
        },
        "audience": {
          "text": "Newcomers to programming and experienced developers alike, plus the community that builds and funds Python (Get Started widget; PSF band).",
          "prov": "observed",
          "source": "https://www.python.org/ (2026-10-31)"
        },
        "problem": {
          "text": "Development speed and maintenance cost: compile steps, hard-to-read code and glue work between systems (paraphrase of the executive summary).",
          "prov": "published",
          "source": "https://www.python.org/doc/essays/blurb/"
        },
        "promise": {
          "text": "Work quickly and integrate systems effectively, with a language that is easy to learn and to read.",
          "prov": "observed",
          "source": "https://www.python.org/ (2026-10-31)"
        },
        "differentiators": [
          {
            "text": "Readable syntax that lowers the cost of program maintenance.",
            "prov": "published",
            "source": "https://www.python.org/doc/essays/blurb/"
          },
          {
            "text": "A large standard library plus PyPI's third-party modules.",
            "prov": "published",
            "source": "https://www.python.org/about/"
          },
          {
            "text": "Free, OSI-approved licence that allows commercial use.",
            "prov": "published",
            "source": "https://www.python.org/about/"
          },
          {
            "text": "No compilation step: a fast edit-test-debug cycle.",
            "prov": "published",
            "source": "https://www.python.org/doc/essays/blurb/"
          },
          {
            "text": "A non-profit foundation and a global community of conferences and user groups.",
            "prov": "published",
            "source": "https://www.python.org/psf/mission/"
          }
        ],
        "alternatives": [
          {
            "text": "Other programming languages: experienced programmers \"in any other language\" are invited to switch (hero slide).",
            "prov": "observed",
            "source": "https://www.python.org/ (2026-10-31)"
          }
        ]
      },
      "messaging": {
        "taglines": [
          {
            "text": "lets you work quickly and integrate systems more effectively",
            "prov": "observed",
            "source": "https://www.python.org/ (2026-10-31)",
            "where": "The homepage intro line under the hero, after \"Python is a programming language that\", with a >>> Learn More link"
          },
          {
            "text": "Python Powered",
            "prov": "published",
            "source": "https://www.python.org/community/logos/",
            "where": "The official badge (wide and tall) for software built with Python"
          }
        ],
        "attributes": [
          "easy to learn",
          "readable",
          "productive",
          "open source",
          "community-run"
        ],
        "key_messages": [],
        "boilerplate": {
          "text": "Python is an interpreted, object-oriented, high-level programming language with dynamic semantics, a clean, readable syntax and a large standard library, available free for all major platforms. It is developed under an OSI-approved open source license administered by the Python Software Foundation.",
          "prov": "published",
          "source": "https://www.python.org/doc/essays/blurb/",
          "also": [
            "https://www.python.org/about/"
          ],
          "note": "Paraphrased from the PSF executive summary; never present it as a quote, and never put it in the success-story bubble.",
          "paraphrase": true
        },
        "pillars": [
          {
            "name": "Quick and easy to learn",
            "claim": "Beginners find the syntax clean; experienced programmers pick it up very quickly.",
            "prov": "observed",
            "source": "https://www.python.org/ (2026-10-31)",
            "why": "The fifth hero slide and the Get Started widget; not published as a named pillar",
            "proof": [
              "p-guide",
              "p-tutorial"
            ]
          },
          {
            "name": "Readable, productive code",
            "claim": "Simple syntax that emphasises readability, a fast edit-test-debug cycle and no compile step.",
            "prov": "published",
            "source": "https://www.python.org/doc/essays/blurb/",
            "proof": [
              "p-zen",
              "p-slides"
            ]
          },
          {
            "name": "Use it for everything",
            "claim": "Web, GUI, AI and machine learning, science, software development and system administration, backed by PyPI.",
            "prov": "observed",
            "source": "https://www.python.org/ (2026-10-31)",
            "why": "The Use Python for... widget; not a published pillar",
            "proof": [
              "p-apps",
              "p-pypi"
            ]
          },
          {
            "name": "Free, open and community-run",
            "claim": "OSI-approved licence, usable commercially, stewarded by a non-profit foundation and its members.",
            "prov": "published",
            "source": "https://www.python.org/about/",
            "proof": [
              "p-license",
              "p-psf"
            ]
          }
        ],
        "proof_points": [
          {
            "id": "p-guide",
            "kind": "other",
            "text": "Beginner's Guide linked from the Get Started widget.",
            "source": "https://www.python.org/ (2026-10-31)",
            "prov": "observed"
          },
          {
            "id": "p-tutorial",
            "kind": "other",
            "text": "The official Python Tutorial at docs.python.org.",
            "source": "https://docs.python.org/3/tutorial/",
            "prov": "published"
          },
          {
            "id": "p-zen",
            "kind": "other",
            "text": "PEP 20, The Zen of Python: \"Readability counts.\"",
            "source": "https://peps.python.org/pep-0020/",
            "prov": "published"
          },
          {
            "id": "p-slides",
            "kind": "other",
            "text": "Five runnable code samples on the homepage (functions, control flow, lists, arithmetic, input/output).",
            "source": "https://www.python.org/ (2026-10-31)",
            "prov": "observed"
          },
          {
            "id": "p-apps",
            "kind": "other",
            "text": "Six application areas with named libraries (Django, PyTorch, SciPy, Ansible...).",
            "source": "https://www.python.org/ (2026-10-31)",
            "prov": "observed"
          },
          {
            "id": "p-pypi",
            "kind": "other",
            "text": "PyPI hosts thousands of third-party modules (About page).",
            "source": "https://www.python.org/about/",
            "prov": "published"
          },
          {
            "id": "p-license",
            "kind": "other",
            "text": "OSI-approved open source licence, freely usable and distributable, even commercially.",
            "source": "https://www.python.org/about/",
            "prov": "published"
          },
          {
            "id": "p-psf",
            "kind": "other",
            "text": "Stewarded by the PSF, a US 501(c)(3) non-profit membership organization.",
            "source": "https://www.python.org/psf/mission/",
            "prov": "published"
          },
          {
            "id": "p-release",
            "kind": "stat",
            "text": "Latest release shown on the homepage: Python 3.15.2 (observed 2026-10-31; live value).",
            "source": "https://www.python.org/ (2026-10-31)",
            "prov": "observed"
          },
          {
            "id": "p-tm",
            "kind": "other",
            "text": "\"Python\" is a registered US trademark of the PSF.",
            "source": "https://www.python.org/psf/trademarks/",
            "prov": "published"
          }
        ],
        "claim_boundaries": [
          {
            "text": "Never imply the PSF endorses a course, book, project or certification; it endorses none (FAQ).",
            "prov": "published",
            "source": "https://www.python.org/psf/trademarks-faq/"
          },
          {
            "text": "Never claim exclusivity (\"The Python Academy\", \"Python Inc.\") or official status.",
            "prov": "published",
            "source": "https://www.python.org/psf/trademarks-faq/"
          },
          {
            "text": "Never use the logo to refer to anything but the Python programming language.",
            "prov": "published",
            "source": "https://www.python.org/psf/trademarks-faq/"
          }
        ]
      }
    }
  }
}