{
  "schemaVersion": 1,
  "family": "martlet",
  "packages": {
    "core": {
      "name": "@martlet/theme",
      "version": "2.2.1"
    },
    "astro": {
      "name": "@martlet/astro",
      "version": "1.2.1",
      "peerDependencies": {
        "@martlet/theme": "^2.2.1",
        "astro": "^5.14.0 || ^6.0.0 || ^7.0.0"
      }
    }
  },
  "foundation": {
    "origin": "https://jameshoward.us/",
    "sourceRepository": "k3jph/k3jph.github.io",
    "sourceCommit": "471abfe",
    "tokens": {
      "color-charcoal": "#303030",
      "color-navy-950": "#07111f",
      "color-navy-900": "#0b1c33",
      "color-navy-800": "#132b49",
      "color-navy-700": "#1b3d64",
      "color-blue-600": "#255f91",
      "color-gold-700": "#80550f",
      "color-gold-600": "#9a6b15",
      "color-gold-500": "#c7952f",
      "color-gold-300": "#e6c77d",
      "color-cream": "#f8f4e9",
      "color-slate-900": "#202a35",
      "color-slate-700": "#566270",
      "color-slate-500": "#7b8793",
      "color-slate-400": "#9aa5b1",
      "color-slate-300": "#c9d0d7",
      "color-slate-150": "#e4e8ec",
      "color-slate-075": "#f5f7f8",
      "color-white": "#fff",
      "color-ink": "#222a33",
      "color-danger": "#a3392e",
      "hero-overlay": "linear-gradient(115deg, rgb(7 17 31 / 90%), rgb(12 35 60 / 80%))",
      "font-display": "'Cinzel', Georgia, serif",
      "font-serif": "'Cambo', Georgia, serif",
      "font-sans": "'Lato', 'Helvetica Neue', Arial, sans-serif",
      "space-1": ".25rem",
      "space-2": ".5rem",
      "space-3": "1rem",
      "space-4": "1.5rem",
      "space-5": "2.5rem",
      "space-6": "4rem",
      "space-7": "6rem",
      "space-8": "8rem",
      "reading-width": "48rem",
      "content-width": "78rem",
      "archive-width": "88rem",
      "radius-sm": ".25rem",
      "radius-md": ".55rem",
      "radius-lg": ".8rem",
      "shadow-sm": "0 2px 12px rgb(7 17 31 / 10%)",
      "shadow-md": "0 10px 30px rgb(7 17 31 / 14%)",
      "shadow-lg": "0 18px 50px rgb(7 17 31 / 22%)",
      "transition-ui": ".2s ease",
      "font-mono": "'IBM Plex Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace",
      "text-body": "1.075rem",
      "text-h1": "clamp(2.25rem, 5vw, 4.65rem)",
      "text-h2": "clamp(1.75rem, 3vw, 2.6rem)",
      "text-h3": "clamp(1.25rem, 2vw, 1.65rem)",
      "leading-body": "1.72",
      "leading-heading": "1.18",
      "tracking-label": ".1em",
      "radius-control": "0",
      "radius-card": "0",
      "shadow-card": "none",
      "border-width": "1px",
      "focus-width": "3px",
      "focus-gap": "3px",
      "gutter": "clamp(1rem, 3vw, 2rem)",
      "section-space": "clamp(3rem, 6vw, 6rem)",
      "control-height": "2.8rem",
      "control-padding": ".65rem .8rem",
      "button-padding": ".65rem 1.1rem",
      "divider-width": "3rem",
      "divider-thickness": "2px",
      "link-underline-offset": ".16em",
      "motion-duration": ".2s",
      "layout-gap": "1.5rem",
      "layout-gap-small": ".75rem",
      "layout-gap-large": "2.5rem",
      "layout-sidebar-width": "16rem",
      "layout-main-min": "30rem",
      "layout-grid-min": "18rem",
      "layout-split-min": "20rem",
      "layout-section-space": "clamp(3rem, 6vw, 6rem)"
    },
    "typographyRoles": {
      "serif": {
        "family": "Cambo",
        "usage": "Body prose and h1–h3",
        "weights": [
          400
        ]
      },
      "sans": {
        "family": "Lato",
        "usage": "Navigation, controls, tables, metadata",
        "weights": [
          400,
          700
        ],
        "styles": [
          "normal",
          "italic"
        ]
      },
      "display": {
        "family": "Cinzel",
        "usage": "Display accents and h4–h6",
        "weights": [
          400,
          600,
          700,
          800
        ]
      },
      "mono": {
        "family": "IBM Plex Mono",
        "usage": "Code, terminal text, keyboard notation",
        "weights": [
          400,
          500,
          600,
          700
        ],
        "styles": [
          "normal",
          "italic"
        ],
        "personalOverride": "Berkeley Mono (not bundled)"
      }
    }
  },
  "design": {
    "radius": {
      "sm": ".25rem",
      "md": ".55rem",
      "lg": ".8rem",
      "control": "0",
      "card": "0"
    },
    "spacing": {
      "1": ".25rem",
      "2": ".5rem",
      "3": "1rem",
      "4": "1.5rem",
      "5": "2.5rem",
      "6": "4rem",
      "7": "6rem",
      "8": "8rem"
    },
    "fonts": {
      "serif": "'Cambo', Georgia, serif",
      "sans": "'Lato', 'Helvetica Neue', Arial, sans-serif",
      "display": "'Cinzel', Georgia, serif",
      "mono": "'IBM Plex Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace",
      "ui": "'Lato', 'Helvetica Neue', Arial, sans-serif",
      "code": "'IBM Plex Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"
    },
    "widths": {
      "reading-width": "48rem",
      "content-width": "78rem",
      "archive-width": "88rem"
    },
    "shadows": {
      "shadow-sm": "0 2px 12px rgb(7 17 31 / 10%)",
      "shadow-md": "0 10px 30px rgb(7 17 31 / 14%)",
      "shadow-lg": "0 18px 50px rgb(7 17 31 / 22%)"
    },
    "motion": {
      "transition": ".2s ease",
      "reduced": "0s"
    }
  },
  "capabilities": {
    "web-core": {
      "applied": [
        "colors",
        "typography variables",
        "spacing",
        "shape",
        "depth",
        "interaction variables",
        "layout primitives"
      ],
      "optional": [
        "font loading",
        "element typography",
        "components"
      ]
    },
    "astro": {
      "applied": [
        "web-core",
        "document shell",
        "container",
        "section heading",
        "card",
        "button",
        "page header",
        "site header",
        "site footer",
        "article layout",
        "landing layout",
        "documentation layout"
      ],
      "hostOwned": [
        "navigation",
        "content",
        "consent",
        "analytics",
        "personal identity"
      ]
    },
    "vim": {
      "applied": [
        "colors",
        "syntax"
      ],
      "separateConfiguration": [
        "monospace font"
      ],
      "unsupported": [
        "web layout",
        "proportional typography"
      ]
    },
    "emacs": {
      "applied": [
        "colors",
        "syntax"
      ],
      "separateConfiguration": [
        "font roles"
      ],
      "unsupported": [
        "web layout"
      ]
    },
    "terminal": {
      "applied": [
        "colors"
      ],
      "separateConfiguration": [
        "monospace font"
      ],
      "unsupported": [
        "web layout",
        "serif",
        "sans"
      ]
    },
    "firefox": {
      "applied": [
        "browser chrome colors"
      ],
      "unsupported": [
        "fonts",
        "website content",
        "spacing",
        "components"
      ]
    },
    "chrome": {
      "applied": [
        "browser chrome colors"
      ],
      "unsupported": [
        "fonts",
        "website content",
        "spacing",
        "components"
      ]
    }
  },
  "themes": {
    "light": {
      "id": "martlet-light",
      "name": "Martlet Light",
      "mode": "light",
      "tokens": {
        "bg": "#FFFFFF",
        "panel": "#F1F5FB",
        "panel2": "#E2EBF7",
        "text": "#122744",
        "muted": "#455B76",
        "accent": "#154C9E",
        "accent2": "#154C9E",
        "on-accent": "#FFFFFF",
        "accent-hover": "#12438B",
        "line": "#CBCFD6",
        "control-line": "#808790",
        "focus": "#154C9E",
        "selection": "#D7E1F0",
        "selection-text": "#122744",
        "green": "#286B40",
        "danger": "#A02E42",
        "warning": "#805000",
        "error-bg": "#E9E1E9",
        "error-text": "#A02E42",
        "shadow": "0 10px 40px #00000022",
        "surface-canvas": "#FFFFFF",
        "surface-subtle": "#F8FAFD",
        "surface-sunken": "#E2EBF7",
        "surface-overlay": "#FFFFFF",
        "text-strong": "#0D2038",
        "text-subtle": "#455B76",
        "text-disabled": "#61738B",
        "text-inverse": "#FFFFFF",
        "link": "#154C9E",
        "link-hover": "#103A79",
        "link-visited": "#68409B",
        "border-subtle": "#D6DFEA",
        "border-strong": "#65758A",
        "input-bg": "#FFFFFF",
        "input-text": "#122744",
        "input-placeholder": "#61738B",
        "input-border": "#808790",
        "button-secondary-bg": "#E2EBF7",
        "button-secondary-text": "#122744",
        "button-secondary-hover": "#D6E3F4",
        "disabled-bg": "#E2E8F0",
        "disabled-text": "#61738B",
        "focus-ring": "#154C9E",
        "focus-offset": "#FFFFFF",
        "hover-bg": "#E7F0FA",
        "active-bg": "#D7E6F7",
        "code-bg": "#E2EBF7",
        "code-text": "#122744",
        "quote-border": "#154C9E",
        "table-stripe": "#F1F5FB",
        "scrollbar-track": "#F1F5FB",
        "scrollbar-thumb": "#808FA5",
        "overlay-scrim": "#122744AA",
        "info": "#154C9E",
        "info-bg": "#E2EBF7",
        "info-text": "#103A79",
        "success": "#286B40",
        "success-bg": "#E5F3E9",
        "success-text": "#205932",
        "warning-bg": "#FFF1D3",
        "warning-text": "#805000",
        "danger-bg": "#FBE5E9",
        "danger-text": "#A02E42",
        "chart-1": "#154C9E",
        "chart-2": "#286B40",
        "chart-3": "#925C00",
        "chart-4": "#A02E42",
        "chart-5": "#68409B",
        "chart-6": "#007582",
        "chart-7": "#9B4A00",
        "chart-8": "#546276",
        "chart-grid": "#CBCFD6",
        "chart-axis": "#455B76",
        "syntax-keyword": "#154C9E",
        "syntax-string": "#286B40",
        "syntax-function": "#103A79",
        "syntax-type": "#805000",
        "syntax-variable": "#122744",
        "syntax-comment": "#455B76",
        "syntax-number": "#A02E42",
        "syntax-operator": "#455B76",
        "syntax-constant": "#68409B",
        "syntax-tag": "#154C9E",
        "syntax-attribute": "#805000",
        "syntax-regexp": "#286B40",
        "syntax-invalid": "#A02E42",
        "syntax-property": "#103A79",
        "syntax-decorator": "#68409B"
      }
    },
    "dark": {
      "id": "martlet-dark",
      "name": "Martlet Dark",
      "mode": "dark",
      "tokens": {
        "bg": "#040B16",
        "panel": "#0B1B32",
        "panel2": "#143153",
        "text": "#F3F7FF",
        "muted": "#C6D5EB",
        "accent": "#FEE46E",
        "accent2": "#FEE46E",
        "on-accent": "#17131F",
        "accent-hover": "#FEE77F",
        "line": "#393F49",
        "control-line": "#757A82",
        "focus": "#FEE46E",
        "selection": "#283339",
        "selection-text": "#F3F7FF",
        "green": "#9DC3AE",
        "danger": "#FFA7AB",
        "warning": "#E6C384",
        "error-bg": "#23293E",
        "error-text": "#FFA7AB",
        "shadow": "0 10px 40px #00000055",
        "surface-canvas": "#040B16",
        "surface-subtle": "#081324",
        "surface-sunken": "#06111F",
        "surface-overlay": "#143153",
        "text-strong": "#FFFFFF",
        "text-subtle": "#C6D5EB",
        "text-disabled": "#96A7C0",
        "text-inverse": "#17131F",
        "link": "#FEE46E",
        "link-hover": "#FFF1A1",
        "link-visited": "#D9B1FF",
        "border-subtle": "#314058",
        "border-strong": "#99A8C2",
        "input-bg": "#0B1B32",
        "input-text": "#F3F7FF",
        "input-placeholder": "#A8BBD3",
        "input-border": "#757A82",
        "button-secondary-bg": "#143153",
        "button-secondary-text": "#F3F7FF",
        "button-secondary-hover": "#21466D",
        "disabled-bg": "#1D2A3C",
        "disabled-text": "#96A7C0",
        "focus-ring": "#FEE46E",
        "focus-offset": "#040B16",
        "hover-bg": "#143153",
        "active-bg": "#21466D",
        "code-bg": "#143153",
        "code-text": "#F3F7FF",
        "quote-border": "#FEE46E",
        "table-stripe": "#0B1B32",
        "scrollbar-track": "#0B1B32",
        "scrollbar-thumb": "#6F839F",
        "overlay-scrim": "#040B16CC",
        "info": "#9BBEF5",
        "info-bg": "#142B47",
        "info-text": "#BBCEFC",
        "success": "#9DC3AE",
        "success-bg": "#123528",
        "success-text": "#B4E2C7",
        "warning-bg": "#3A301C",
        "warning-text": "#FEE46E",
        "danger-bg": "#441F30",
        "danger-text": "#FFA7AB",
        "chart-1": "#FEE46E",
        "chart-2": "#9DC3AE",
        "chart-3": "#83AFF5",
        "chart-4": "#FFA7AB",
        "chart-5": "#C9AFFA",
        "chart-6": "#7DCECF",
        "chart-7": "#F8B678",
        "chart-8": "#CED8E8",
        "chart-grid": "#393F49",
        "chart-axis": "#C6D5EB",
        "syntax-keyword": "#FEE46E",
        "syntax-string": "#9DC3AE",
        "syntax-function": "#93BDF4",
        "syntax-type": "#FFD78A",
        "syntax-variable": "#F3F7FF",
        "syntax-comment": "#C6D5EB",
        "syntax-number": "#FFA7AB",
        "syntax-operator": "#C6D5EB",
        "syntax-constant": "#D9B1FF",
        "syntax-tag": "#FEE46E",
        "syntax-attribute": "#FFD78A",
        "syntax-regexp": "#9DC3AE",
        "syntax-invalid": "#FFA7AB",
        "syntax-property": "#93BDF4",
        "syntax-decorator": "#D9B1FF"
      }
    }
  },
  "heritage": {
    "silver": "#FFFFFF",
    "blueLight": "#1959B9",
    "blue": "#154C9E",
    "blueDark": "#103A79",
    "gold": "#FEE46E",
    "goldDark": "#AC8800",
    "yellowLight": "#FFF1A1"
  },
  "distribution": {
    "mcp": {
      "url": "https://martletdesign.dev/mcp",
      "published": true,
      "aliases": [
        "https://martlettheme.dev/mcp"
      ]
    },
    "packages": {
      "core": {
        "name": "@martlet/theme",
        "version": "2.2.1",
        "published": true,
        "tag": "next"
      },
      "Astro": {
        "name": "@martlet/astro",
        "version": "1.2.1",
        "published": true,
        "tag": "next"
      },
      "React": {
        "name": "@martlet/react",
        "version": "0.1.0",
        "published": false,
        "tag": "next"
      }
    },
    "preview": {
      "version": "0.3.0",
      "stage": "preview"
    },
    "home": "https://martletdesign.dev",
    "reactReference": "https://martletdesign.dev/react/"
  },
  "language": {
    "schemaVersion": 1,
    "family": "martlet",
    "grammarVersion": "0.3",
    "maturity": "experimental",
    "source": {
      "repository": "k3jph/k3jph.github.io",
      "commit": "32b7166a629ea696147d0d779d911b713e4baf7e"
    },
    "guidance": {
      "grammar": "docs/grammar.md",
      "decisions": "docs/source-decisions.md",
      "foundations": "docs/foundations.md",
      "coverage": "docs/coverage.md",
      "validatedForm": "docs/patterns/forms.md",
      "queryResults": "docs/patterns/query-results.md"
    },
    "implementation": {
      "core": {
        "version": "2.2.1",
        "status": "experimental",
        "sourceProfile": "opt-in; existing defaults retained"
      },
      "Astro": {
        "version": "1.2.1",
        "status": "experimental",
        "core": "^2.2.1",
        "additions": [
          "TableOfContents",
          "ArticleLayout contents slot",
          "SiteFooter grouped variant"
        ]
      },
      "React": {
        "version": "0.1.0",
        "status": "experimental",
        "core": "2.1.0",
        "repository": "howardjp/design-workbench",
        "branch": "work/registry-foundations"
      },
      "Vue": {
        "status": "not-implemented"
      },
      "Svelte": {
        "status": "not-implemented"
      },
      "native": {
        "status": "not-implemented"
      }
    },
    "patterns": [
      {
        "id": "reading-contents",
        "basis": "source-translation",
        "variants": [
          "index",
          "inline"
        ],
        "rules": [
          "Contents precedes body",
          "Depth 2 parents and depth 3 children",
          "Supporting information remains separate",
          "Reflow according to available container width"
        ]
      },
      {
        "id": "grouped-footer",
        "basis": "source-translation",
        "rules": [
          "Host supplies identity and destinations",
          "Preserve independent family anatomy",
          "Ownership and contact belong in base slot"
        ]
      },
      {
        "id": "collection-editor",
        "basis": "application-extension",
        "availability": "React specimen only",
        "states": [
          "empty",
          "no-match",
          "reading",
          "editing",
          "saving",
          "saved",
          "failed-save",
          "unsaved-navigation",
          "undo"
        ]
      },
      {
        "id": "validated-form",
        "basis": "application-extension",
        "availability": "React interactive reference; Astro native-HTML guidance",
        "states": [
          "invalid",
          "pending",
          "failed-save",
          "retry",
          "saved",
          "changed-reset",
          "keep",
          "discard"
        ],
        "rules": [
          "Field/group/region relationships",
          "Retain values on failure",
          "Summary links focus controls",
          "Guard specimen reset; host navigation remains host-owned"
        ]
      },
      {
        "id": "query-results",
        "basis": "application-extension",
        "availability": "React interactive reference; Astro native-HTML guidance",
        "states": [
          "draft-query",
          "pending",
          "failed-load",
          "retry",
          "no-match",
          "empty-source",
          "selected",
          "preparing",
          "failed-prepare",
          "prepared",
          "cancelled"
        ],
        "rules": [
          "Separate draft and committed scope",
          "Stable record identities",
          "Current-page selection only",
          "Cancel invalidates late completion",
          "Keep all table columns in labelled scrolling region"
        ]
      }
    ],
    "openGates": [
      "Manual assistive-technology review",
      "Localization and RTL",
      "Sustained consumer use",
      "Broader form and data workflow evidence",
      "Matched origin code specimen"
    ],
    "coverage": [
      {
        "id": "G01",
        "domain": "Source authority",
        "status": "Documented",
        "rule": "Origin objects, translations and extensions remain distinct."
      },
      {
        "id": "G02",
        "domain": "Field / group / region spacing",
        "status": "Rule clarified + reference",
        "rule": "Use relational roles; do not inherit page-section spacing inside forms."
      },
      {
        "id": "G03",
        "domain": "Density and targets",
        "status": "Claim corrected; compact open",
        "rule": "Comfortable examples only; 44px is a design target, not blanket certification."
      },
      {
        "id": "G04",
        "domain": "Typography and hierarchy",
        "status": "Observed roles retained",
        "rule": "Keep prose, UI, selective display and code roles; no decorative monospace."
      },
      {
        "id": "G05",
        "domain": "Surfaces and layers",
        "status": "Rule corrected + reference",
        "rule": "Modal, popup and inline disclosure have different interaction contracts."
      },
      {
        "id": "G06",
        "domain": "Action placement and scope",
        "status": "Rule clarified + reference",
        "rule": "Commands name and follow their field, object or collection scope."
      },
      {
        "id": "G07",
        "domain": "Responsive composition",
        "status": "Reference checks",
        "rule": "Reflow fields/actions; scroll only genuine comparison surfaces; retain source order."
      },
      {
        "id": "G08",
        "domain": "Substantial forms",
        "status": "New experimental contract",
        "rule": "Validate, retain values, retry and guard specimen reset."
      },
      {
        "id": "G09",
        "domain": "Query / sort / page",
        "status": "New experimental contract",
        "rule": "Draft query differs from applied results; changed query starts page 1."
      },
      {
        "id": "G10",
        "domain": "Selection",
        "status": "New bounded contract",
        "rule": "Binary current-page selection; scope changes reset on commit, failure retains it."
      },
      {
        "id": "G11",
        "domain": "Pending / failed / empty states",
        "status": "Reference coverage expanded",
        "rule": "Keep useful previous content and distinguish no matches from empty source data."
      },
      {
        "id": "G12",
        "domain": "Focus and recovery",
        "status": "Reference checks; manual open",
        "rule": "Summary links, modal dismissal, return trigger and late-response cancellation."
      },
      {
        "id": "G13",
        "domain": "Top / side / focused frames",
        "status": "Existing support retained",
        "rule": "Frame follows task; source navigation direction is not a family restriction."
      },
      {
        "id": "G14",
        "domain": "Reading / contents / footer",
        "status": "Existing source contracts retained",
        "rule": "Contents, body, support and host identity remain separate."
      },
      {
        "id": "G15",
        "domain": "Cross-framework agreement",
        "status": "Availability clarified",
        "rule": "Rules cross frameworks; React state/focus props do not become Astro APIs."
      },
      {
        "id": "G16",
        "domain": "Figure / footnote / maths / archive vocabulary",
        "status": "Open",
        "rule": "Do not infer shipped components from origin CSS."
      },
      {
        "id": "G17",
        "domain": "Localization / RTL / assistive technology",
        "status": "Open",
        "rule": "Long-text checks are partial evidence; no manual or locale certification."
      },
      {
        "id": "G18",
        "domain": "Sustained use / dashboard breadth",
        "status": "Open",
        "rule": "Focused references do not establish production fitness or cover all application patterns."
      }
    ],
    "availability": "Implementation status describes maturity. Check the registry and the separately verified distribution record for publication availability.",
    "canonicalSource": {
      "repository": "martlettheme/npm",
      "commit": "8190e1ad71788c15bec19eac4875af7e15f4f8cf",
      "status": "unreleased-candidate",
      "files": {
        "grammar.md": {
          "sourcePath": "docs/grammar.md",
          "sha256": "baff3ebc8728c8a2c55ca5e482d04d71dd97813d2e92c39e04bcfb96dd4bf00e"
        },
        "decisions.md": {
          "sourcePath": "docs/source-decisions.md",
          "sha256": "8775721c0be2b25da5631860a4a5e3b996f567078d0a24a3f94c1f9ca2b6c820"
        },
        "language.json": {
          "sourcePath": "language.json",
          "sha256": "be54910d2e3cc28be31120a47491762ebddda4729933a721324e115d6f536eab"
        },
        "coverage.md": {
          "sourcePath": "docs/coverage.md",
          "sha256": "b0c564e3b4f0d1eefea791b8038d4d41d26223d8fb853d3026a578e936e19150"
        },
        "forms.md": {
          "sourcePath": "docs/patterns/forms.md",
          "sha256": "056071953c31732e8cda2630cd787d37a524d4c8a5dc7f8518324a14b2f60d4a"
        },
        "query-results.md": {
          "sourcePath": "docs/patterns/query-results.md",
          "sha256": "b7de6b0d238cebb6e9a903f1ed3557483dfc52bd5ec039e614e8d367037a9fb8"
        }
      }
    }
  }
}
