{
  "_comment": "Single source of truth for portfolio favicons. assets.gf.cx hosts the bytes (here, under /icons/favicon/) and owns this manifest. Audited + applied by ~/bin/gfcx_favicon.py. The shared `default` set is the ZIIIRO Celeste watch (the dare.co.uk house mark); `overrides` carry surfaces with a bespoke mark. `excludePrefixes` are archival mirrors that must keep their original (foreign) favicons.",
  "version": 1,
  "updated": "2026-06-23",
  "host": "https://assets.gf.cx",
  "default": {
    "name": "ZIIIRO Celeste watch (portfolio default)",
    "ico": "https://assets.gf.cx/icons/favicon/ziiiro-celeste-watch-favicon.ico",
    "png32": "https://assets.gf.cx/icons/favicon/ziiiro-celeste-watch-32.png",
    "appleTouch": "https://assets.gf.cx/icons/favicon/ziiiro-celeste-watch-180.png"
  },
  "_extraKeyPages_comment": "Surfaces whose source isn't a <name>.gf.cx/index.html (router-aliased / split-project, or a Worker whose served root is a build dir like ./dist). host -> key page path relative to ~/Code. Audited + managed like any key page; uses `default` set unless listed in overrides.",
  "extraKeyPages": {
    "home.gf.cx": "home-projects/pa/index.html",
    "sandbox.gf.cx": "sandbox.gf.cx/dist/index.html"
  },
  "overrides": {
    "brand.gf.cx": {
      "name": "brand aperture sigil (bespoke)",
      "ico": "https://assets.gf.cx/icons/brand/brand.svg",
      "png32": "https://assets.gf.cx/icons/brand/brand-ink-512.png",
      "appleTouch": "https://assets.gf.cx/icons/brand/brand-ink-1024.png"
    }
  },
  "excludePrefixes": [
    "dare-co-uk",
    "audrey-archive",
    "audreyinc-archive",
    "audreyinc-beta",
    "audreyinc-theme",
    "audrey-bookings",
    "audrey-dashboard",
    "geo-uk",
    "njgeneralrepairs",
    "dogwood-house",
    "found.gf.cx.KILLED.2026-05-28"
  ],
  "_allPagesExclude_comment": "Managed surfaces kept at key-page-only even under `apply --all-pages` — their sub-pages are content captures (saved emails, archived bodies), not navigational surface pages, so portfolio chrome doesn't belong on them. Their key page still carries the favicon.",
  "allPagesExclude": [
    "email.gf.cx"
  ]
}
