{
  "spec_version": 2,
  "extractor_version": "0.2.0",
  "url": "https://joshwcomeau.com/",
  "final_url": "https://www.joshwcomeau.com/",
  "slug": "joshwcomeau.com",
  "captured_at": "2026-11-12T15:34:08.961Z",
  "title": "Josh W. Comeau",
  "meta": {
    "description": "Friendly articles and tutorials for front-end web developers. ❤️",
    "og_image": "https://www.joshwcomeau.com/opengraph-image.png?cac0cc658da9fd03",
    "og_title": "Josh W. Comeau",
    "lang": "en"
  },
  "capture": {
    "variants": [
      {
        "name": "desktop-light",
        "width": 1440,
        "height": 900,
        "scheme": "light",
        "page_height": 4168,
        "full": "screens/desktop-light-full.png",
        "fold": "screens/desktop-light-fold.png"
      },
      {
        "name": "desktop-dark",
        "width": 1440,
        "height": 900,
        "scheme": "dark",
        "page_height": 4168,
        "full": "screens/desktop-dark-full.png",
        "fold": "screens/desktop-dark-fold.png"
      },
      {
        "name": "mobile-light",
        "width": 390,
        "height": 844,
        "scheme": "light",
        "page_height": 6102,
        "full": "screens/mobile-light-full.png",
        "fold": "screens/mobile-light-fold.png"
      },
      {
        "name": "mobile-dark",
        "width": 390,
        "height": 844,
        "scheme": "dark",
        "page_height": 6102,
        "full": "screens/mobile-dark-full.png",
        "fold": "screens/mobile-dark-fold.png"
      }
    ],
    "status": 200,
    "warnings": [],
    "element_count": 395,
    "render_quality": {
      "status": "ok",
      "reasons": [],
      "screenshot": "ok",
      "screenshot_reasons": []
    },
    "worker_os": "macos"
  },
  "color": {
    "scheme": "light",
    "palette": [
      {
        "hex": "#FFFFFF",
        "oklch": [
          1,
          0,
          0
        ],
        "role": "bg",
        "area": 0.7724,
        "uses": {
          "bg": 0.997,
          "text": 0,
          "border": 0,
          "fill": 0.002
        },
        "css_var": "--color-background"
      },
      {
        "hex": "#0A0C10",
        "oklch": [
          0.154,
          0.009,
          264.3
        ],
        "role": "text",
        "area": 0.1161,
        "uses": {
          "bg": 0,
          "text": 0.995,
          "border": 0,
          "fill": 0.005
        },
        "css_var": "--color-text"
      },
      {
        "hex": "#A0D4EE",
        "oklch": [
          0.843,
          0.065,
          230.1
        ],
        "role": "other",
        "area": 0.0657,
        "uses": {
          "bg": 0.56,
          "text": 0,
          "border": 0,
          "fill": 0.44
        },
        "css_var": "--color-sky-from"
      },
      {
        "hex": "#7DC4E8",
        "oklch": [
          0.787,
          0.088,
          231.5
        ],
        "role": "other",
        "area": 0.0267,
        "uses": {
          "bg": 0,
          "text": 0,
          "border": 0,
          "fill": 1
        },
        "css_var": "--color-sky-to"
      },
      {
        "hex": "#5A6072",
        "oklch": [
          0.491,
          0.03,
          270.7
        ],
        "role": "muted",
        "area": 0.0068,
        "uses": {
          "bg": 0,
          "text": 0.996,
          "border": 0,
          "fill": 0.004
        },
        "css_var": "--color-gray-700"
      },
      {
        "hex": "#B1DFF6",
        "oklch": [
          0.879,
          0.057,
          229.8
        ],
        "role": "accent",
        "area": 0.0038,
        "uses": {
          "bg": 0.531,
          "text": 0,
          "border": 0,
          "fill": 0.469
        },
        "css_var": "--color-cloud-500"
      },
      {
        "hex": "#294E60",
        "oklch": [
          0.404,
          0.052,
          231.1
        ],
        "role": "other",
        "area": 0.0024,
        "uses": {
          "bg": 0,
          "text": 0.883,
          "border": 0,
          "fill": 0.117
        }
      },
      {
        "hex": "#262D40",
        "oklch": [
          0.299,
          0.036,
          268.6
        ],
        "role": "other",
        "area": 0.0014,
        "uses": {
          "bg": 1,
          "text": 0,
          "border": 0,
          "fill": 0
        },
        "css_var": "--color-gray-900"
      }
    ],
    "roles": {
      "bg": "#FFFFFF",
      "text": "#0A0C10",
      "muted": "#5A6072",
      "accent": "#B1DFF6"
    },
    "accent_strategy": "monochrome",
    "contrast": {
      "text_on_bg": 19.57,
      "muted_on_bg": 6.27,
      "accent_on_bg": 1.42
    },
    "gradients": [
      "linear-gradient(rgb(160, 212, 238), rgb(125, 196, 232))",
      "linear-gradient(to top, rgba(0, 0, 0, 0) 0px, rgb(160, 212, 238) 100%)"
    ],
    "dark_mode": {
      "responds_to_prefers_color_scheme": true,
      "palette": [
        {
          "hex": "#0D0F12",
          "oklch": [
            0.168,
            0.007,
            258.4
          ],
          "role": "bg",
          "area": 0.7715,
          "uses": {
            "bg": 0.998,
            "text": 0,
            "border": 0,
            "fill": 0.002
          },
          "css_var": "--syntax-bg"
        },
        {
          "hex": "#E3E6E8",
          "oklch": [
            0.923,
            0.004,
            236.5
          ],
          "role": "text",
          "area": 0.1149,
          "uses": {
            "bg": 0,
            "text": 0.995,
            "border": 0,
            "fill": 0.005
          },
          "css_var": "--color-text"
        },
        {
          "hex": "#111B27",
          "oklch": [
            0.219,
            0.028,
            253.5
          ],
          "role": "surface",
          "area": 0.0707,
          "uses": {
            "bg": 0.583,
            "text": 0,
            "border": 0,
            "fill": 0.417
          },
          "css_var": "--top-color",
          "variants": [
            "#121D2B"
          ]
        },
        {
          "hex": "#265973",
          "oklch": [
            0.441,
            0.069,
            233.6
          ],
          "role": "other",
          "area": 0.0265,
          "uses": {
            "bg": 0,
            "text": 0,
            "border": 0,
            "fill": 1
          },
          "css_var": "--color-sky-to"
        },
        {
          "hex": "#9CA8B4",
          "oklch": [
            0.726,
            0.022,
            248.1
          ],
          "role": "muted",
          "area": 0.0067,
          "uses": {
            "bg": 0,
            "text": 0.996,
            "border": 0,
            "fill": 0.004
          },
          "css_var": "--color-gray-700"
        },
        {
          "hex": "#AFCFDE",
          "oklch": [
            0.836,
            0.04,
            227.8
          ],
          "role": "other",
          "area": 0.0025,
          "uses": {
            "bg": 0,
            "text": 0.866,
            "border": 0,
            "fill": 0.134
          }
        },
        {
          "hex": "#272E35",
          "oklch": [
            0.297,
            0.016,
            248.4
          ],
          "role": "other",
          "area": 0.0016,
          "uses": {
            "bg": 1,
            "text": 0,
            "border": 0,
            "fill": 0
          },
          "css_var": "--color-gray-200"
        }
      ],
      "roles": {
        "bg": "#0D0F12",
        "text": "#E3E6E8",
        "muted": "#9CA8B4",
        "surface": "#111B27"
      }
    },
    "declared_accents": [
      {
        "css_var": "--color-primary",
        "hex": "#4242FA",
        "painted": true
      },
      {
        "css_var": "--color-page-primary",
        "hex": "#4242FA",
        "painted": true
      }
    ],
    "accent_detail": {
      "method": "cta-monochrome",
      "cta": "#B1DFF6",
      "candidates": [
        {
          "hex": "#4242FA",
          "css_var": "--color-primary",
          "controls": 0,
          "links": 0,
          "text": 4,
          "elements": 4,
          "fills": 0,
          "area": 0.00117,
          "score": 17.8,
          "strong": false
        },
        {
          "hex": "#E60067",
          "css_var": "--color-secondary",
          "controls": 0,
          "links": 0,
          "text": 3,
          "elements": 3,
          "fills": 0,
          "area": 0.00196,
          "score": 15.7,
          "strong": false
        },
        {
          "hex": "#7DC4E8",
          "css_var": "--color-sky-to",
          "controls": 0,
          "links": 0,
          "text": 0,
          "elements": 0,
          "fills": 2,
          "area": 0.02672,
          "score": 10.8,
          "strong": false
        }
      ]
    },
    "highlights": [
      {
        "hex": "#4242FA",
        "css_var": "--color-primary",
        "elements": 4
      },
      {
        "hex": "#E60067",
        "css_var": "--color-secondary",
        "elements": 3
      }
    ]
  },
  "type": {
    "families": [
      {
        "family": "Wotfard",
        "css_family": "Wotfard",
        "role": "display",
        "roles": [
          "display",
          "body"
        ],
        "weights": [
          400,
          500,
          600,
          700
        ],
        "share": 0.986,
        "kind": "webfont",
        "classification": "sans",
        "foundry": null,
        "stack": "Wotfard, Wotfard-fallback, sans-serif",
        "files": [
          "https://www.joshwcomeau.com/fonts/wotfard/wotfard-semibold-webfont.woff2",
          "https://www.joshwcomeau.com/fonts/wotfard/wotfard-medium-webfont.woff2",
          "https://www.joshwcomeau.com/fonts/wotfard/wotfard-regular-webfont.woff2",
          "https://www.joshwcomeau.com/fonts/wotfard/wotfard-regular-italic-webfont.woff2"
        ],
        "internal_names": [
          "Wotfard",
          "Wotfard Medium",
          "Wotfard SemiBold"
        ]
      },
      {
        "family": "Cartograph CF",
        "css_family": "Cartograph CF",
        "role": "mono",
        "roles": [
          "mono"
        ],
        "weights": [
          600
        ],
        "share": 0.014,
        "kind": "webfont",
        "classification": "mono",
        "foundry": null,
        "stack": "\"Cartograph CF\", monospace",
        "files": [
          "https://www.joshwcomeau.com/fonts/cartograph-regular.woff2",
          "https://www.joshwcomeau.com/fonts/cartograph-regular-italic.woff2",
          "https://www.joshwcomeau.com/fonts/cartograph-extra-bold.woff2"
        ],
        "internal_names": [
          "Cartograph CF Extra Bold"
        ]
      }
    ],
    "declared_unused": [
      {
        "family": "Sriracha",
        "css_family": "Sriracha",
        "face_status": "unloaded",
        "css_mentions": 1
      }
    ],
    "scale_px": [
      12,
      14,
      16,
      17,
      19,
      22,
      32
    ],
    "ratio": 1.189,
    "body_size": 16,
    "root_size": 16,
    "line_height": 1.5,
    "display_size": 32,
    "tracking_display": "0em",
    "case": "upper",
    "styles": [
      {
        "name": "display",
        "family": "Wotfard",
        "size_px": 32,
        "weight": 700,
        "line_height": 1.5,
        "letter_spacing_em": 0,
        "sample": "Josh W Comeau homepage"
      },
      {
        "name": "headline",
        "family": "Wotfard",
        "size_px": 16,
        "weight": 500,
        "line_height": 1.5,
        "letter_spacing_em": 0.125,
        "transform": "uppercase",
        "sample": "Articles and Tutorials"
      },
      {
        "name": "body",
        "family": "Wotfard",
        "size_px": 16,
        "weight": 400,
        "line_height": 1.5,
        "letter_spacing_em": 0,
        "sample": "Every year, browser vendors collaborate "
      },
      {
        "name": "body-sm",
        "family": "Wotfard",
        "size_px": 14,
        "weight": 400,
        "line_height": 1.5,
        "letter_spacing_em": 0,
        "sample": "Are you a human? If so, please ignore th"
      },
      {
        "name": "mono",
        "family": "Cartograph CF",
        "size_px": 15.94,
        "weight": 600,
        "line_height": 1.5,
        "letter_spacing_em": 0,
        "sample": "animation-timeline"
      }
    ],
    "mobile": {
      "body_size": 16,
      "display_size": 32
    }
  },
  "space": {
    "scale_px": [
      2,
      4,
      5,
      8,
      12,
      16,
      32,
      36,
      48,
      96,
      170
    ],
    "base": 4,
    "base_fit": 0.78,
    "density": 0.143,
    "section_padding_px": 32
  },
  "shape": {
    "radii_px": [
      2,
      4,
      8,
      12
    ],
    "dominant_radius": 8,
    "border_usage": "none",
    "border_width_px": null
  },
  "depth": {
    "shadows": [
      "rgba(0, 0, 0, 0.02) 0px -5.9px 2.7px 0px, rgba(0, 0, 0, 0.024) 0px -1.2px 6.9px 0px, rgba(0, 0, 0, 0.03) 0px 8px 14.2px 0px, rgba(0, 0, 0, 0.04) 0px 21.9px 29.2px 0px, rgba(0, 0, 0, 0.07) 0px 49px 80px 0px"
    ],
    "style": "flat"
  },
  "layout": {
    "container_px": 1100,
    "columns": 2,
    "hero": "split",
    "nav": "top-static+transparent",
    "page_height_px": 4168,
    "section_count": 3
  },
  "motion": {
    "transitions": 27,
    "easing": "ease",
    "durations_ms": [
      200,
      300,
      350,
      950
    ],
    "animations": [
      "scoochLeft-goxpqkegr874hq",
      "selfDraw-idwm85li9xec9h",
      "selfDraw-l1c4qjpwl1ngw3bx",
      "scoochRight-f7ysafcf5ggs7",
      "dropIcon-a18yhdhcw1nwb8mx",
      "pop-s5z4at1",
      "fadeIn"
    ]
  },
  "components": {
    "button-primary": {
      "backgroundColor": "#B1DFF6",
      "textColor": "#0A0C10",
      "rounded": "8px",
      "padding": "5px 12px",
      "height": "31px",
      "fontFamily": "Wotfard",
      "fontSize": "14px",
      "fontWeight": 400,
      "sample": "React"
    },
    "input": {
      "rounded": "0px",
      "height": "36px",
      "padding": "4px 8px"
    }
  },
  "imagery": {
    "media_share": 1,
    "dominant_colors": [
      {
        "hex": "#9FD3EE",
        "share": 0.364
      },
      {
        "hex": "#FFFFFF",
        "share": 0.354
      },
      {
        "hex": "#DCEEF8",
        "share": 0.113
      },
      {
        "hex": "#597FBF",
        "share": 0.049
      },
      {
        "hex": "#9B83E3",
        "share": 0.033
      }
    ],
    "has_photography": null,
    "has_illustration": null
  },
  "stack": [
    "next.js",
    "vercel"
  ],
  "sections": [
    {
      "index": 0,
      "kind": "hero",
      "kind_source": "dom",
      "confidence": 0.7,
      "bbox": {
        "x": 0,
        "y": 0,
        "w": 1440,
        "h": 2757
      },
      "bg": "#A0D4EE",
      "crop": "img/section-00-hero.webp"
    },
    {
      "index": 1,
      "kind": "content",
      "kind_source": "dom",
      "confidence": 0.3,
      "bbox": {
        "x": 202,
        "y": 2757,
        "w": 627,
        "h": 725
      },
      "bg": "#FFFFFF",
      "crop": "img/section-01-content.webp"
    },
    {
      "index": 2,
      "kind": "footer",
      "kind_source": "dom",
      "confidence": 0.95,
      "bbox": {
        "x": 0,
        "y": 3481,
        "w": 1440,
        "h": 687
      },
      "heading": "General",
      "bg": "#FFFFFF",
      "crop": "img/section-02-footer.webp"
    }
  ],
  "images": {
    "manifest": "img/manifest.json",
    "count": 11
  },
  "review": {
    "threshold": 0.7,
    "needs_review": [
      "color.accent_strategy",
      "layout.columns",
      "layout.hero",
      "layout.section_count",
      "sections[].kind",
      "space.section_padding_px"
    ],
    "vision": "not-run"
  },
  "provenance": {
    "color.roles.bg": {
      "source": "dom",
      "confidence": 0.95
    },
    "color.roles.text": {
      "source": "dom",
      "confidence": 0.92
    },
    "color.roles.muted": {
      "source": "dom",
      "confidence": 0.82
    },
    "color.roles.accent": {
      "source": "dom",
      "confidence": 0.72,
      "note": "monochrome page; fill of the primary button; sparse chromatic highlights: #4242FA, #E60067"
    },
    "color.accent_strategy": {
      "source": "dom",
      "confidence": 0.6,
      "note": "hue count over chromatic colors; product mockups rendered in the DOM inflate it",
      "needs_review": true
    },
    "color.palette": {
      "source": "dom",
      "confidence": 0.9
    },
    "color.declared_accents": {
      "source": "dom",
      "confidence": 0.95
    },
    "color.dark_mode": {
      "source": "dom",
      "confidence": 0.9
    },
    "color.contrast": {
      "source": "dom",
      "confidence": 0.9
    },
    "color.gradients": {
      "source": "dom",
      "confidence": 0.85
    },
    "type.families": {
      "source": "dom",
      "confidence": 0.95,
      "note": "named from the @font-face rule that rendered (CDP platform fonts)"
    },
    "type.families[].roles": {
      "source": "dom",
      "confidence": 0.85
    },
    "type.declared_unused": {
      "source": "dom",
      "confidence": 0.95
    },
    "type.scale_px": {
      "source": "dom",
      "confidence": 0.9
    },
    "type.body_size": {
      "source": "dom",
      "confidence": 0.85
    },
    "type.display_size": {
      "source": "dom",
      "confidence": 0.85
    },
    "type.styles": {
      "source": "dom",
      "confidence": 0.8
    },
    "type.ratio": {
      "source": "dom",
      "confidence": 0.7,
      "note": "geometric fit over the scale above body size"
    },
    "type.case": {
      "source": "dom",
      "confidence": 0.75
    },
    "type.line_height": {
      "source": "dom",
      "confidence": 0.85
    },
    "type.tracking_display": {
      "source": "dom",
      "confidence": 0.85
    },
    "space.base": {
      "source": "dom",
      "confidence": 0.85,
      "note": "share of paddings/margins/gaps on the base: 0.78"
    },
    "space.scale_px": {
      "source": "dom",
      "confidence": 0.85
    },
    "space.section_padding_px": {
      "source": "dom",
      "confidence": 0.65,
      "needs_review": true
    },
    "space.density": {
      "source": "dom",
      "confidence": 0.85
    },
    "shape.radii_px": {
      "source": "dom",
      "confidence": 0.88
    },
    "shape.dominant_radius": {
      "source": "dom",
      "confidence": 0.8
    },
    "shape.border_usage": {
      "source": "dom",
      "confidence": 0.8
    },
    "depth.shadows": {
      "source": "dom",
      "confidence": 0.9
    },
    "depth.style": {
      "source": "dom",
      "confidence": 0.75
    },
    "layout.container_px": {
      "source": "dom",
      "confidence": 0.8
    },
    "layout.columns": {
      "source": "dom",
      "confidence": 0.6,
      "note": "most common grid track count; layout grids and card grids are not separated",
      "needs_review": true
    },
    "layout.nav": {
      "source": "dom",
      "confidence": 0.78
    },
    "layout.hero": {
      "source": "dom",
      "confidence": 0.6,
      "note": "geometric heuristic over the h1 and nearby media",
      "needs_review": true
    },
    "layout.section_count": {
      "source": "dom",
      "confidence": 0.6,
      "needs_review": true
    },
    "motion": {
      "source": "dom",
      "confidence": 0.8
    },
    "components": {
      "source": "dom",
      "confidence": 0.78
    },
    "stack": {
      "source": "dom",
      "confidence": 0.85,
      "note": "globals, script URLs and response headers"
    },
    "meta": {
      "source": "dom",
      "confidence": 0.99
    },
    "sections[].bbox": {
      "source": "dom",
      "confidence": 0.8
    },
    "sections[].kind": {
      "source": "dom",
      "confidence": 0.65,
      "note": "class-name and content-count heuristics; per-section confidence in sections[].confidence",
      "needs_review": true
    },
    "imagery.media_share": {
      "source": "dom",
      "confidence": 0.8
    },
    "imagery.dominant_colors": {
      "source": "pixels",
      "confidence": 0.7,
      "note": "clustered screenshot pixels inside media boxes (approximate, OKLab ΔE 0.06 clusters)"
    }
  }
}