diff --git a/.github/workflows/evidence-freshness.yml b/.github/workflows/evidence-freshness.yml index 94716fb..89ed385 100644 --- a/.github/workflows/evidence-freshness.yml +++ b/.github/workflows/evidence-freshness.yml @@ -42,6 +42,7 @@ jobs: set +e node scripts/audit-evidence-freshness.mjs \ --record consumer-reference/baselines/calibration.json \ + --record platform-guides/hig-universal-principles.json \ --as-of "$as_of" \ --mode advisory \ --json > evidence-freshness-report.json diff --git a/.github/workflows/hig-principles.yml b/.github/workflows/hig-principles.yml new file mode 100644 index 0000000..8ec625c --- /dev/null +++ b/.github/workflows/hig-principles.yml @@ -0,0 +1,28 @@ +name: HIG principles extraction + +on: + pull_request: + push: + branches: [main] + workflow_dispatch: + +permissions: + contents: read + +jobs: + hig-principles: + name: HIG principles record, guide, and freshness contracts + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + persist-credentials: false + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: 22 + - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 + with: + bun-version: 1.3.14 + - run: bun install --frozen-lockfile --ignore-scripts + - run: bun run validate:hig-principles + - run: bun run test:hig-principles diff --git a/DOMAINS.md b/DOMAINS.md index 02b6855..644381d 100644 --- a/DOMAINS.md +++ b/DOMAINS.md @@ -28,7 +28,7 @@ This manifest is the source of truth for top-level StyleGallery domains. A domai | Layout | `layout/index.md` | Existing `GUIDE.md`, Layout-specific `guides/*.md`, and `recipes/*.md`; generated `patterns/**/*.md` and `CATALOG.md` remain at current paths. Shared `quality/**/*.md` infrastructure governs every domain without becoming a Layout leaf. | | Motion | `motion/index.md` | `motion/vocabulary.md`, `motion/review-workflow.md`, `motion/practice-reference.md`, `motion/decision-tree.md`, `motion/motion-brief.md`, `motion/interaction-recipes.md`, `motion/observed-choreography.md`, `motion/accessible-motion.md`, `motion/interruption-and-retargeting.md`, `motion/rendering-and-performance.md`, `motion/techniques/scroll-choreography.md`, `motion/techniques/kinetic-type.md` | | Design Engineering | `design-engineering/index.md` | `design-engineering/interface-craft.md`, `design-engineering/consumer-migration-readiness.md`, `design-engineering/reference-profiles/index.md`, `design-engineering/reference-profiles/governed-local/index.md`, `design-engineering/reference-profiles/external-adaptation/index.md`, `design-engineering/decision-tree.md`, `design-engineering/component-contract.md`, `design-engineering/worked-examples.md`, `design-engineering/state-management/decision-tree.md`, `design-engineering/state-management/index.md`, `design-engineering/state-management/patterns/derived-state.md`, `design-engineering/state-management/patterns/draft-and-baseline.md`, `design-engineering/state-management/patterns/id-selection.md`, `design-engineering/state-management/patterns/identity-reset.md`, `design-engineering/state-management/patterns/latest-request-wins.md`, `design-engineering/state-management/patterns/optimistic-overlay.md`, `design-engineering/state-management/patterns/single-flight.md`, `design-engineering/state-management/patterns/single-owner.md`, `design-engineering/state-management/patterns/submitted-snapshot.md`, `design-engineering/state-management/patterns/unsaved-navigation.md`, `design-engineering/state-management/patterns/url-state.md`, `design-engineering/state-management/patterns/versioned-restore.md`, `design-engineering/state-management/recipes/delete-undo.md`, `design-engineering/state-management/recipes/index.md`, `design-engineering/state-management/recipes/multi-step-form.md`, `design-engineering/state-management/recipes/search-detail.md`, `design-engineering/state-management/recipes/settings-save.md`, `design-engineering/state-management/state-brief.md`, `design-engineering/state-management/verification.md`, `design-engineering/native-interaction-contracts.md`, `design-engineering/text-input-and-internationalization.md`, `design-engineering/loading-and-feedback.md`, `design-engineering/evidence-patterns/autocomplete.md`, `design-engineering/evidence-patterns/bottom-navigation.md`, `design-engineering/evidence-patterns/breadcrumbs.md`, `design-engineering/evidence-patterns/dark-mode-contrast.md`, `design-engineering/evidence-patterns/data-tables.md`, `design-engineering/evidence-patterns/empty-states.md`, `design-engineering/evidence-patterns/error-recovery.md`, `design-engineering/evidence-patterns/faceted-filters.md`, `design-engineering/evidence-patterns/form-labels.md`, `design-engineering/evidence-patterns/index.md`, `design-engineering/evidence-patterns/inline-validation.md`, `design-engineering/evidence-patterns/input-masks.md`, `design-engineering/evidence-patterns/tabs-and-segmented-controls.md` | -| Platform Guides | `platform-guides/index.md` | `platform-guides/apple-interaction.md`, `platform-guides/adaptation-workflow.md`, `platform-guides/android-interaction.md`, `platform-guides/windows-interaction.md`, `platform-guides/compatibility-matrix.md`, `platform-guides/adaptive-navigation.md`, `platform-guides/preferences-and-accessibility.md`, `platform-guides/input-and-focus.md` | +| Platform Guides | `platform-guides/index.md` | `platform-guides/apple-interaction.md`, `platform-guides/adaptation-workflow.md`, `platform-guides/android-interaction.md`, `platform-guides/windows-interaction.md`, `platform-guides/compatibility-matrix.md`, `platform-guides/adaptive-navigation.md`, `platform-guides/preferences-and-accessibility.md`, `platform-guides/input-and-focus.md`, `platform-guides/hig-universal-principles.md` | | Design Terminology | `design-terminology/index.md` | `design-terminology/source-kinds.md`, `design-terminology/source-vocabularies.md`, `design-terminology/concept-families.md`, `design-terminology/relation-types.md`, `design-terminology/conflict-cases.md`, `design-terminology/comparison-workflow.md`, `design-terminology/token-semantics.md`, `design-terminology/interaction-semantics.md`, `design-terminology/typography-semantics.md` | | Expression | `expression/index.md` | `expression/direction-brief.md`, `expression/brand-studies.md`, `expression/directions/nocturne-editorial.md`, `expression/directions/warm-print.md`, `expression/techniques/gradient-atmosphere.md`, `expression/techniques/grain-and-texture.md`, `expression/techniques/webgl-hero.md`, `expression/directions/fintech-clarity.md`, `expression/directions/hardware-catalogue.md`, `expression/directions/developer-tool.md`, `expression/directions/korean-service.md`, `expression/techniques/drawn-products.md`, `expression/techniques/live-product-demos.md`, `expression/techniques/canvas-3d.md`, `expression/study-atlas.md`, `expression/measured-benchmarks.md`, `expression/techniques/image-weight.md`, `expression/techniques/display-type-calibration.md`, `expression/techniques/surface-detail.md`, `expression/anti-patterns.md` | diff --git a/GOVERNANCE.md b/GOVERNANCE.md index ad79776..9ec79ef 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -41,6 +41,7 @@ Use this file before editing repository documentation. It names which file is au | Motion domain guidance | `motion/*.md` | Manual | None | `experimental` | Upstream revision, evidence boundary, or guidance changes. | `scripts/validate-domains.mjs` | Motion domain owner | | Design Engineering domain guidance | `design-engineering/*.md`, `design-engineering/state-management/**/*.md`, `design-engineering/evidence-patterns/*.md` | Manual | None | `experimental` | Upstream revision, evidence boundary, or guidance changes. | `scripts/validate-domains.mjs` | Design Engineering domain owner | | Platform Guides domain guidance | `platform-guides/*.md` | Manual | None | `experimental` | Platform version, upstream revision, evidence boundary, or guidance changes. | `scripts/validate-domains.mjs` | Platform Guides domain owner | +| HIG universal principles extraction | `platform-guides/hig-universal-principles.json` with its manual guide `platform-guides/hig-universal-principles.md` | Manual, paraphrase-and-link only | None | `experimental` dated extraction | `review_by` deadline, HIG index page added, removed, or renamed, cited WCAG/Material 3/APG change, or audit misclassification. | `scripts/validate-hig-principles.mjs`, `scripts/test-validate-hig-principles.mjs`, `scripts/audit-evidence-freshness.mjs` | Platform Guides domain owner with Validation owner | | Design Terminology domain guidance | `design-terminology/*.md` | Manual; term and relation tables remain authoring sources | None | `experimental` | Source-kind, source-vocabulary, concept-family, relation-model, or conflict-case changes. | `scripts/validate-domains.mjs`, `scripts/validate-design-terminology.mjs` | Design Terminology domain owner | | Expression domain guidance | `expression/**/*.md` | Manual | None | `experimental` | Direction value, technique code, brand-study policy, or guidance changes. | `scripts/validate-domains.mjs` | Expression domain owner | | Expression anti-pattern catalog | `expression/anti-patterns.json`, `expression/anti-patterns.md` | Manual | None | `experimental` | Benchmark value, Showcase QA floor, entry, or detection-rule changes. | `scripts/validate-anti-patterns.mjs`, `scripts/test-validate-anti-patterns.mjs` | Expression domain owner with Validation owner | diff --git a/consumer-reference/agent-native/v2/admission-policy.json b/consumer-reference/agent-native/v2/admission-policy.json index ee4f8f8..e088291 100644 --- a/consumer-reference/agent-native/v2/admission-policy.json +++ b/consumer-reference/agent-native/v2/admission-policy.json @@ -769,6 +769,11 @@ "domain": "platform-guides", "lifecycle": "experimental" }, + { + "repository_path": "platform-guides/hig-universal-principles.md", + "domain": "platform-guides", + "lifecycle": "experimental" + }, { "repository_path": "platform-guides/index.md", "domain": "platform-guides", @@ -1057,5 +1062,5 @@ "code": "material_path_internal_excluded" } ], - "version_id": "sg:policy/material-admission-v2@sha256:d3a7ac528239965bddc336917239158b43a8e504f004f374789346f1feb86d5e" + "version_id": "sg:policy/material-admission-v2@sha256:f0f5758d8da48a15861f3cadc7e1cb437d59fecc71fdf8d9991466776cc9ff20" } diff --git a/consumer-reference/agent-native/v2/material-registry.json b/consumer-reference/agent-native/v2/material-registry.json index 2adea03..f58821b 100644 --- a/consumer-reference/agent-native/v2/material-registry.json +++ b/consumer-reference/agent-native/v2/material-registry.json @@ -1 +1 @@ -{"admission_policy_ref":"sg:policy/material-admission-v2","admission_policy_version_id":"sg:policy/material-admission-v2@sha256:d3a7ac528239965bddc336917239158b43a8e504f004f374789346f1feb86d5e","materials":[{"byte_length":3667,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/grid-repetition/page-grid.md","schema_version":"2.0","source_sha256":"e2e49d1a86e6ae4b0f272573c6517edd593e6f25dc7d96f73307795abf000f41","stable_ref":"sg:material/path-sha256-002803d65d057faaa4e8c1bb3e32ef3f41032b011251fc9f0f7b1db907b01ceb","version_id":"sg:material/path-sha256-002803d65d057faaa4e8c1bb3e32ef3f41032b011251fc9f0f7b1db907b01ceb@sha256:e2e49d1a86e6ae4b0f272573c6517edd593e6f25dc7d96f73307795abf000f41"},{"byte_length":3546,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/pagination.md","schema_version":"2.0","source_sha256":"cff90e8758b703bec4e48b88970e194b8b11528e33f5111fc82caaad5c5313c1","stable_ref":"sg:material/path-sha256-00ae3be01fcc4add55bd98eff34737037c54c0a7f2f128239a2afbe698936c8f","version_id":"sg:material/path-sha256-00ae3be01fcc4add55bd98eff34737037c54c0a7f2f128239a2afbe698936c8f@sha256:cff90e8758b703bec4e48b88970e194b8b11528e33f5111fc82caaad5c5313c1"},{"byte_length":99659,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/claim-records/samples.md","schema_version":"2.0","source_sha256":"0cf5df12d9a34ef0968479047bf24ab3163dc53715f32c86c40f03a121aef653","stable_ref":"sg:material/path-sha256-021f96adf1d1647d17f99011af6b1e7fa370dddbbad96b384731ed0256f74984","version_id":"sg:material/path-sha256-021f96adf1d1647d17f99011af6b1e7fa370dddbbad96b384731ed0256f74984@sha256:0cf5df12d9a34ef0968479047bf24ab3163dc53715f32c86c40f03a121aef653"},{"byte_length":3592,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/draft-and-baseline.md","schema_version":"2.0","source_sha256":"faff27c0b376341dc8142bcdd9bfed4e73ea894d1e1a3eb9078202070ccc0261","stable_ref":"sg:material/path-sha256-02ec455439cc41949cf6f6a9a66466d17eeecf4a55a8698ffb3d5741a18f3194","version_id":"sg:material/path-sha256-02ec455439cc41949cf6f6a9a66466d17eeecf4a55a8698ffb3d5741a18f3194@sha256:faff27c0b376341dc8142bcdd9bfed4e73ea894d1e1a3eb9078202070ccc0261"},{"byte_length":858,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/viewport-shell/index.md","schema_version":"2.0","source_sha256":"05da91c5514d03e82c19a03c494fdad21a92a2ba7b88ec6dca5e7836c1f133a2","stable_ref":"sg:material/path-sha256-040de79bdf5af768663bf1aaa9d7451aa0d79bfaa0d5e982cceec4058f7715e4","version_id":"sg:material/path-sha256-040de79bdf5af768663bf1aaa9d7451aa0d79bfaa0d5e982cceec4058f7715e4@sha256:05da91c5514d03e82c19a03c494fdad21a92a2ba7b88ec6dca5e7836c1f133a2"},{"byte_length":5367,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/interface-craft.md","schema_version":"2.0","source_sha256":"ba71e914027abd783e9769a5b91efb764cc7335a6479c69ca4e70ab05a64e941","stable_ref":"sg:material/path-sha256-04afb6013755c328be25b08637961e5f20fa67705cfcbd6e996ba6ada944f571","version_id":"sg:material/path-sha256-04afb6013755c328be25b08637961e5f20fa67705cfcbd6e996ba6ada944f571@sha256:ba71e914027abd783e9769a5b91efb764cc7335a6479c69ca4e70ab05a64e941"},{"byte_length":501,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/stacking/index.md","schema_version":"2.0","source_sha256":"9b60182a25c4c07b7b482b3981dec17d515f95915cc618411282f988dca4ada2","stable_ref":"sg:material/path-sha256-04fa96b121ed2a48be80851efc72289752d1c4c12bd6433c2d5002d6d82a54ed","version_id":"sg:material/path-sha256-04fa96b121ed2a48be80851efc72289752d1c4c12bd6433c2d5002d6d82a54ed@sha256:9b60182a25c4c07b7b482b3981dec17d515f95915cc618411282f988dca4ada2"},{"byte_length":6853,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/vocabulary.md","schema_version":"2.0","source_sha256":"b2796979aaa1b194ff3006469cbeaec71cbd80d1484e3a5089e03295a43b464d","stable_ref":"sg:material/path-sha256-07b5ed44416e4d40efd213a7e944f214a338aa83201e52ba58c6dcf2a81e5675","version_id":"sg:material/path-sha256-07b5ed44416e4d40efd213a7e944f214a338aa83201e52ba58c6dcf2a81e5675@sha256:b2796979aaa1b194ff3006469cbeaec71cbd80d1484e3a5089e03295a43b464d"},{"byte_length":1619,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/gates/visual-evidence.md","schema_version":"2.0","source_sha256":"17f7430f1cd1847c74c737ee9341120be6b49e827ec4228be5b6868669d27fd3","stable_ref":"sg:material/path-sha256-085c94936dece089fd31864c482d1a19e4da562951adbaa7d459e0126486d149","version_id":"sg:material/path-sha256-085c94936dece089fd31864c482d1a19e4da562951adbaa7d459e0126486d149@sha256:17f7430f1cd1847c74c737ee9341120be6b49e827ec4228be5b6868669d27fd3"},{"byte_length":8322,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/component-contract.md","schema_version":"2.0","source_sha256":"79e496160e28ab26397d2c5b68075fd14c732d13002ff6c6e41c031d86cac039","stable_ref":"sg:material/path-sha256-08adbcce8042dbb84d03e0903f204eb9f799d464a2035c84db9ffab8aebcc278","version_id":"sg:material/path-sha256-08adbcce8042dbb84d03e0903f204eb9f799d464a2035c84db9ffab8aebcc278@sha256:79e496160e28ab26397d2c5b68075fd14c732d13002ff6c6e41c031d86cac039"},{"byte_length":54,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/claim-records/index.md","schema_version":"2.0","source_sha256":"b9bb90f0928f7f408c615ce2dc323425640ef4b83b62de0c0dee6dcd4bf7e3bb","stable_ref":"sg:material/path-sha256-08c3095acfdc040b75071e94644db6a32b655817c4b79eabfa4339b59c9f0b22","version_id":"sg:material/path-sha256-08c3095acfdc040b75071e94644db6a32b655817c4b79eabfa4339b59c9f0b22@sha256:b9bb90f0928f7f408c615ce2dc323425640ef4b83b62de0c0dee6dcd4bf7e3bb"},{"byte_length":4089,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/gates/harmony-evaluation.md","schema_version":"2.0","source_sha256":"efee2c0ff6a662bc3efb360ee8c80defc5113a00d8b36e1c36c45eb63d330270","stable_ref":"sg:material/path-sha256-0a43f2af49d24f33b8ff06829d431f9e7608de57760c3f2c7de8c3e4126869f3","version_id":"sg:material/path-sha256-0a43f2af49d24f33b8ff06829d431f9e7608de57760c3f2c7de8c3e4126869f3@sha256:efee2c0ff6a662bc3efb360ee8c80defc5113a00d8b36e1c36c45eb63d330270"},{"byte_length":8047,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/preferences-and-accessibility.md","schema_version":"2.0","source_sha256":"d5a2af1cb445d0be4d0ed0a61f281673e4be81041dc964f8b16e3e7d6284a55e","stable_ref":"sg:material/path-sha256-0b82930e378484f7b84e5834e89e1c153e5d0993b26b38524bfd4153fcfc5438","version_id":"sg:material/path-sha256-0b82930e378484f7b84e5834e89e1c153e5d0993b26b38524bfd4153fcfc5438@sha256:d5a2af1cb445d0be4d0ed0a61f281673e4be81041dc964f8b16e3e7d6284a55e"},{"byte_length":3999,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/viewport-shell/scroll-body-shell.md","schema_version":"2.0","source_sha256":"884fd867f233619f3f94f965d87016eeac6727608dd5c6423c8221687ff31b61","stable_ref":"sg:material/path-sha256-10f553c3d6a39c31ca1a5b8f56db6afb75709d8706d125c6f0d891f46b1f11b4","version_id":"sg:material/path-sha256-10f553c3d6a39c31ca1a5b8f56db6afb75709d8706d125c6f0d891f46b1f11b4@sha256:884fd867f233619f3f94f965d87016eeac6727608dd5c6423c8221687ff31b61"},{"byte_length":3560,"domain":"expression","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"expression/directions/warm-print.md","schema_version":"2.0","source_sha256":"27480a96687e0173caddef5fc8ab3ebec670768ebb365056c68a752944ef59d6","stable_ref":"sg:material/path-sha256-12964187eb48074073f1e42019f579fd946905a2f2ff72f5f59f345f95db13f2","version_id":"sg:material/path-sha256-12964187eb48074073f1e42019f579fd946905a2f2ff72f5f59f345f95db13f2@sha256:27480a96687e0173caddef5fc8ab3ebec670768ebb365056c68a752944ef59d6"},{"byte_length":6556,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"recipes/homepage.md","schema_version":"2.0","source_sha256":"b23555fc59b5899ef414ba697c7aa3b39a3126f48d8b341b98489140f3a6a44f","stable_ref":"sg:material/path-sha256-14e127a7c719ee8494096a98b25b32d26363c1845bddcd912f50f6b1e2b84b46","version_id":"sg:material/path-sha256-14e127a7c719ee8494096a98b25b32d26363c1845bddcd912f50f6b1e2b84b46@sha256:b23555fc59b5899ef414ba697c7aa3b39a3126f48d8b341b98489140f3a6a44f"},{"byte_length":3532,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/overlay-exception/overlay-stack.md","schema_version":"2.0","source_sha256":"ae8d8c8a546802f8bf6d593606b008523874d258914ccf45ed8246094f775581","stable_ref":"sg:material/path-sha256-15dd8f3d84fb50f1442bd8c9732356759849f7d87f1d66b004eeb5d9ea75a4a9","version_id":"sg:material/path-sha256-15dd8f3d84fb50f1442bd8c9732356759849f7d87f1d66b004eeb5d9ea75a4a9@sha256:ae8d8c8a546802f8bf6d593606b008523874d258914ccf45ed8246094f775581"},{"byte_length":901,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/design-rationale.md","schema_version":"2.0","source_sha256":"f2215fa79133af7f7282fff9a2da490d1a5dd58dd3ea0fc56255872268fbd163","stable_ref":"sg:material/path-sha256-162d7fd4521ddaf5ee59166c9cb56d8cbcb7d3b9bacaf9cd75883c1586108369","version_id":"sg:material/path-sha256-162d7fd4521ddaf5ee59166c9cb56d8cbcb7d3b9bacaf9cd75883c1586108369@sha256:f2215fa79133af7f7282fff9a2da490d1a5dd58dd3ea0fc56255872268fbd163"},{"byte_length":3679,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/identity-reset.md","schema_version":"2.0","source_sha256":"f424d605f5cd504a937831188fd947452ebc4bb6c5fe44ef6e9014fce0bac8be","stable_ref":"sg:material/path-sha256-16dc79fa33d7c1b72cfad6e70eea0cccc517223d21aba84552e4c0dd223e1f2d","version_id":"sg:material/path-sha256-16dc79fa33d7c1b72cfad6e70eea0cccc517223d21aba84552e4c0dd223e1f2d@sha256:f424d605f5cd504a937831188fd947452ebc4bb6c5fe44ef6e9014fce0bac8be"},{"byte_length":3529,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/breadcrumb.md","schema_version":"2.0","source_sha256":"9b67e72046ad7b89592deee782903bd549b7790f34eaadb10a812e7d0727b007","stable_ref":"sg:material/path-sha256-16eeb4385f9c3ed3ee536baa50271a5afda69eb267e6e240f45eea88c675c9cc","version_id":"sg:material/path-sha256-16eeb4385f9c3ed3ee536baa50271a5afda69eb267e6e240f45eea88c675c9cc@sha256:9b67e72046ad7b89592deee782903bd549b7790f34eaadb10a812e7d0727b007"},{"byte_length":3510,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/cluster.md","schema_version":"2.0","source_sha256":"dc47e7591b356c0734c530d11e4d650704cb1532cf7d2c0c8f8721563e874df4","stable_ref":"sg:material/path-sha256-176a6bff0fef909def0e8d71cb7c567b867a180ff8ff11dc71f96187e6fb4b75","version_id":"sg:material/path-sha256-176a6bff0fef909def0e8d71cb7c567b867a180ff8ff11dc71f96187e6fb4b75@sha256:dc47e7591b356c0734c530d11e4d650704cb1532cf7d2c0c8f8721563e874df4"},{"byte_length":5948,"domain":"expression","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"expression/direction-brief.md","schema_version":"2.0","source_sha256":"5a9856b3d15dd505b28306bbc3c978884eb2bff8560d241d5635f82f5527954d","stable_ref":"sg:material/path-sha256-19d94985a2bd97733f720f48911dda601f2a53c33fb077b81bb903c966fd2582","version_id":"sg:material/path-sha256-19d94985a2bd97733f720f48911dda601f2a53c33fb077b81bb903c966fd2582@sha256:5a9856b3d15dd505b28306bbc3c978884eb2bff8560d241d5635f82f5527954d"},{"byte_length":935,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/split-sidebar/index.md","schema_version":"2.0","source_sha256":"5cfb5a5586709a5c32f6f01e8d0e768850b57111c0a653363ced0eeddbca4f88","stable_ref":"sg:material/path-sha256-1bbc62c02480ddef71cbe2b8723ae3da595efdfcfcf8f0bbbfd4dad8d417d2a7","version_id":"sg:material/path-sha256-1bbc62c02480ddef71cbe2b8723ae3da595efdfcfcf8f0bbbfd4dad8d417d2a7@sha256:5cfb5a5586709a5c32f6f01e8d0e768850b57111c0a653363ced0eeddbca4f88"},{"byte_length":3799,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/split-sidebar/split-screen.md","schema_version":"2.0","source_sha256":"b4a33c149152eff7ed194fc52c8d24aa82dab8124d8754b029d5e7d2f33ba379","stable_ref":"sg:material/path-sha256-1c3948243f01f30bcd55ac3cb3c9935bce15060224b1837fdf1b3be2684ecc74","version_id":"sg:material/path-sha256-1c3948243f01f30bcd55ac3cb3c9935bce15060224b1837fdf1b3be2684ecc74@sha256:b4a33c149152eff7ed194fc52c8d24aa82dab8124d8754b029d5e7d2f33ba379"},{"byte_length":3381,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/containment/box.md","schema_version":"2.0","source_sha256":"dde71c7e4091814e496631f6be9d82c81f6ce04a78c5f0c2200d826de2f5fc06","stable_ref":"sg:material/path-sha256-1c4c0582a35fac69c8274a72f86ad5075a755d30f0924adbc3ff66fc616d9430","version_id":"sg:material/path-sha256-1c4c0582a35fac69c8274a72f86ad5075a755d30f0924adbc3ff66fc616d9430@sha256:dde71c7e4091814e496631f6be9d82c81f6ce04a78c5f0c2200d826de2f5fc06"},{"byte_length":3504,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/recipes/multi-step-form.md","schema_version":"2.0","source_sha256":"b6d2497c71d5554bb53b2d801ca22049d1d0bea9baf2fd0ca48042e7f927457e","stable_ref":"sg:material/path-sha256-1e7b1b64d3360bd39b33ed0963b76bcfdb60003ba427d51141a1659b8b6d789e","version_id":"sg:material/path-sha256-1e7b1b64d3360bd39b33ed0963b76bcfdb60003ba427d51141a1659b8b6d789e@sha256:b6d2497c71d5554bb53b2d801ca22049d1d0bea9baf2fd0ca48042e7f927457e"},{"byte_length":3470,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/stacking/stack.md","schema_version":"2.0","source_sha256":"70d582b9836476a07a590536daeb94fa5ebb546b122aeaaa60ae21a8ee9fdce6","stable_ref":"sg:material/path-sha256-1f6bb0dc8098df4cb643ddb7941fc7997bfc34e8c4c4ba8b473ebd19b43da69e","version_id":"sg:material/path-sha256-1f6bb0dc8098df4cb643ddb7941fc7997bfc34e8c4c4ba8b473ebd19b43da69e@sha256:70d582b9836476a07a590536daeb94fa5ebb546b122aeaaa60ae21a8ee9fdce6"},{"byte_length":386,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/overlay-exception/index.md","schema_version":"2.0","source_sha256":"a32cdbff417ba8cf4333a15c7799bb1b1907c4334d0bcee052220af46b87973a","stable_ref":"sg:material/path-sha256-1fc22b9f0d7d72c1dcc9b54db927b44a791c091736efbc2dcff08b9f5097f00c","version_id":"sg:material/path-sha256-1fc22b9f0d7d72c1dcc9b54db927b44a791c091736efbc2dcff08b9f5097f00c@sha256:a32cdbff417ba8cf4333a15c7799bb1b1907c4334d0bcee052220af46b87973a"},{"byte_length":7416,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/relation-types.md","schema_version":"2.0","source_sha256":"4f2e601edf167fa435296fca43156845a003d2b680e0e8c13ac0d687b909bdb8","stable_ref":"sg:material/path-sha256-20446da61add8150ac93ec91e23ad403d7f7e4b1b322024a8c488e4324f47533","version_id":"sg:material/path-sha256-20446da61add8150ac93ec91e23ad403d7f7e4b1b322024a8c488e4324f47533@sha256:4f2e601edf167fa435296fca43156845a003d2b680e0e8c13ac0d687b909bdb8"},{"byte_length":6657,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/motion-brief.md","schema_version":"2.0","source_sha256":"cd778561c7e8feb599490afdab15ee103dee8f867aebbf478715ea4ac6029858","stable_ref":"sg:material/path-sha256-205e6fc7f07a049703f1de0d741836c512fdfa12f9e10cf9bf4c75bdba550137","version_id":"sg:material/path-sha256-205e6fc7f07a049703f1de0d741836c512fdfa12f9e10cf9bf4c75bdba550137@sha256:cd778561c7e8feb599490afdab15ee103dee8f867aebbf478715ea4ac6029858"},{"byte_length":4081,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/state-brief.md","schema_version":"2.0","source_sha256":"0a934ac42e29258fada4d9eb3fd5740a460fc7e1464ad12e419441411cd77c25","stable_ref":"sg:material/path-sha256-211ec15ff04d4a7956b90746c4ecf0f0c0abc92590f2bf0cdd55d86715f8f3ab","version_id":"sg:material/path-sha256-211ec15ff04d4a7956b90746c4ecf0f0c0abc92590f2bf0cdd55d86715f8f3ab@sha256:0a934ac42e29258fada4d9eb3fd5740a460fc7e1464ad12e419441411cd77c25"},{"byte_length":2010,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/gates/design-claim.md","schema_version":"2.0","source_sha256":"bdf92087f69f1d55d1d8f5efa8fdc794824bd9f40d794e617e6a06db0a16ef81","stable_ref":"sg:material/path-sha256-21480e86104dfaab3408304f300dc7cc570eab3e747a1a3931785951544f8372","version_id":"sg:material/path-sha256-21480e86104dfaab3408304f300dc7cc570eab3e747a1a3931785951544f8372@sha256:bdf92087f69f1d55d1d8f5efa8fdc794824bd9f40d794e617e6a06db0a16ef81"},{"byte_length":3659,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/centering/super-center.md","schema_version":"2.0","source_sha256":"3c99b76f7332b68a3f9cac1739197c6a90e5dbf3073ff5b5d3ffa4c8fbfab8ee","stable_ref":"sg:material/path-sha256-21ffb3e535a16bcba5817e15c784b9d2500b32cb50f86c1b3c033c652193cc00","version_id":"sg:material/path-sha256-21ffb3e535a16bcba5817e15c784b9d2500b32cb50f86c1b3c033c652193cc00@sha256:3c99b76f7332b68a3f9cac1739197c6a90e5dbf3073ff5b5d3ffa4c8fbfab8ee"},{"byte_length":3551,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/containment/fluid-styles.md","schema_version":"2.0","source_sha256":"7a542227cdfc34577bf52f9ef15cf236e1efda6abaee775330a87f07f863e2be","stable_ref":"sg:material/path-sha256-239a2e2ec1f881ea5ae0e4f852980adaa058a8c7943fe83d8c90d8b51e02abb5","version_id":"sg:material/path-sha256-239a2e2ec1f881ea5ae0e4f852980adaa058a8c7943fe83d8c90d8b51e02abb5@sha256:7a542227cdfc34577bf52f9ef15cf236e1efda6abaee775330a87f07f863e2be"},{"byte_length":3750,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/grid-repetition/ram-grid.md","schema_version":"2.0","source_sha256":"b227b7350b3e8fba4043281abb605910f2f167c43ddeaab76172f0407fa92cbd","stable_ref":"sg:material/path-sha256-23ce75202642f0f8901b6a413fd2a269a70166058d62e90ca4403e7a3b34cf69","version_id":"sg:material/path-sha256-23ce75202642f0f8901b6a413fd2a269a70166058d62e90ca4403e7a3b34cf69@sha256:b227b7350b3e8fba4043281abb605910f2f167c43ddeaab76172f0407fa92cbd"},{"byte_length":3419,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/tab-strip.md","schema_version":"2.0","source_sha256":"6c529ae86986b215e14dbcfe06789253a96e96212e48021c760439fcd293e456","stable_ref":"sg:material/path-sha256-2567793e03725c0bb9b1b4cd1524b38c8240253b4989e3413b7985cfccfb4453","version_id":"sg:material/path-sha256-2567793e03725c0bb9b1b4cd1524b38c8240253b4989e3413b7985cfccfb4453@sha256:6c529ae86986b215e14dbcfe06789253a96e96212e48021c760439fcd293e456"},{"byte_length":3824,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/split-sidebar/list-detail.md","schema_version":"2.0","source_sha256":"fb22883c42fad857775111aa1e083946015153b57d68f382ebe8aa4ad0f2b996","stable_ref":"sg:material/path-sha256-26867cd73e9ea9a732763de098fa0e99861d6bd15deba26359727ef68417e331","version_id":"sg:material/path-sha256-26867cd73e9ea9a732763de098fa0e99861d6bd15deba26359727ef68417e331@sha256:fb22883c42fad857775111aa1e083946015153b57d68f382ebe8aa4ad0f2b996"},{"byte_length":3998,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/split-sidebar/sticky-aside.md","schema_version":"2.0","source_sha256":"3ebd4674f84085d3666a6eddb14a6c5b2f05d3c7c9323677fd97613bca3d0999","stable_ref":"sg:material/path-sha256-27b1e5216a098387ab5e1de9d8997391ae2e8b3388331c221e14ed5946734415","version_id":"sg:material/path-sha256-27b1e5216a098387ab5e1de9d8997391ae2e8b3388331c221e14ed5946734415@sha256:3ebd4674f84085d3666a6eddb14a6c5b2f05d3c7c9323677fd97613bca3d0999"},{"byte_length":8374,"domain":"shared","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"showcase/README.md","schema_version":"2.0","source_sha256":"f05250a9ad410f19c29bc708cac6337d516715b3b07c1400c14b97d526e4f5be","stable_ref":"sg:material/path-sha256-281846f16161d5c019ea40e916753502f3243d2dd016489c0d2f986844d2a930","version_id":"sg:material/path-sha256-281846f16161d5c019ea40e916753502f3243d2dd016489c0d2f986844d2a930@sha256:f05250a9ad410f19c29bc708cac6337d516715b3b07c1400c14b97d526e4f5be"},{"byte_length":2933,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/audit/README.md","schema_version":"2.0","source_sha256":"1ac091e6b67728900181f6985a400178c329a88c5e50386c022c0fa2e5a00180","stable_ref":"sg:material/path-sha256-28cab6b095a7381df5f2c8398bcc8243eea6a1cf8348251ac962b68211971205","version_id":"sg:material/path-sha256-28cab6b095a7381df5f2c8398bcc8243eea6a1cf8348251ac962b68211971205@sha256:1ac091e6b67728900181f6985a400178c329a88c5e50386c022c0fa2e5a00180"},{"byte_length":3900,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/breadcrumbs.md","schema_version":"2.0","source_sha256":"6109d1f94205c5cfc2dce7d82525b51fcf790f63b249e8aaa2eb81e51c349c90","stable_ref":"sg:material/path-sha256-292308d1caaf97ad53fc6486e80fcd6282b090afeb9cd07962d58d6977a0251d","version_id":"sg:material/path-sha256-292308d1caaf97ad53fc6486e80fcd6282b090afeb9cd07962d58d6977a0251d@sha256:6109d1f94205c5cfc2dce7d82525b51fcf790f63b249e8aaa2eb81e51c349c90"},{"byte_length":4191,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/viewport-shell/fixed-sidenav-shell.md","schema_version":"2.0","source_sha256":"838956cdff97dad989acfbf08de6cb162599517ce8251daa5c838f8ce40f4149","stable_ref":"sg:material/path-sha256-29d4e1dee690708b4218d8b195f08e1135f76b279ebaadbafd08aa74286daa28","version_id":"sg:material/path-sha256-29d4e1dee690708b4218d8b195f08e1135f76b279ebaadbafd08aa74286daa28@sha256:838956cdff97dad989acfbf08de6cb162599517ce8251daa5c838f8ce40f4149"},{"byte_length":2669,"domain":"expression","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"expression/brand-studies.md","schema_version":"2.0","source_sha256":"8be04985fb569560051cec31dbd684d5265b2d313f727cab41faa859523d4543","stable_ref":"sg:material/path-sha256-2c0b6b915d40dfd7db1d89fd1873592d50f797fafd59381a24a2c7c026eb2bb9","version_id":"sg:material/path-sha256-2c0b6b915d40dfd7db1d89fd1873592d50f797fafd59381a24a2c7c026eb2bb9@sha256:8be04985fb569560051cec31dbd684d5265b2d313f727cab41faa859523d4543"},{"byte_length":5343,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/index.md","schema_version":"2.0","source_sha256":"3ebbbcdb974567b8f88b6b643b617193fee90788e108f9e3ce424475b152ed38","stable_ref":"sg:material/path-sha256-2d8fa130ade135cfa9bc20218ae94270c520bfc08e878f0ecd5bc2c1b4bb1f05","version_id":"sg:material/path-sha256-2d8fa130ade135cfa9bc20218ae94270c520bfc08e878f0ecd5bc2c1b4bb1f05@sha256:3ebbbcdb974567b8f88b6b643b617193fee90788e108f9e3ce424475b152ed38"},{"byte_length":3810,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/split-sidebar/switcher.md","schema_version":"2.0","source_sha256":"df5ae85b149696fc228a5907b4731e9744c2b3aab467b484cc4b6a41c838eda2","stable_ref":"sg:material/path-sha256-2dd9316398e52cf61361bfae39e601e73eb411b74ddc09cadf131183e6c18093","version_id":"sg:material/path-sha256-2dd9316398e52cf61361bfae39e601e73eb411b74ddc09cadf131183e6c18093@sha256:df5ae85b149696fc228a5907b4731e9744c2b3aab467b484cc4b6a41c838eda2"},{"byte_length":4331,"domain":"expression","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"expression/index.md","schema_version":"2.0","source_sha256":"1f3d087620cbd5462e9a1e93ba53b9070f41e9a83781da2479db2eda9b5c001b","stable_ref":"sg:material/path-sha256-2ffc271938d28d26c80537989861f0f28cad60437c491fa47bdbfba71bf73a7d","version_id":"sg:material/path-sha256-2ffc271938d28d26c80537989861f0f28cad60437c491fa47bdbfba71bf73a7d@sha256:1f3d087620cbd5462e9a1e93ba53b9070f41e9a83781da2479db2eda9b5c001b"},{"byte_length":1783,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/sources.md","schema_version":"2.0","source_sha256":"655c4c304f1dae83e56e5f3f19838db7b9681a600b161532cc4389574594fde8","stable_ref":"sg:material/path-sha256-31c57866c230c6e93dd2b4636e6e892eeff33521ef07ed24cde34094c2d9c939","version_id":"sg:material/path-sha256-31c57866c230c6e93dd2b4636e6e892eeff33521ef07ed24cde34094c2d9c939@sha256:655c4c304f1dae83e56e5f3f19838db7b9681a600b161532cc4389574594fde8"},{"byte_length":3007,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"recipes/command-surface.md","schema_version":"2.0","source_sha256":"fe5b07a514df0e69cfe8d04035b7090f97fbe0e12e9c05653075d91f8eff5839","stable_ref":"sg:material/path-sha256-33c5ebfda703b62fe98e750cf800d6a690eb3c5e02c0089d0fd91d987b2b5f8f","version_id":"sg:material/path-sha256-33c5ebfda703b62fe98e750cf800d6a690eb3c5e02c0089d0fd91d987b2b5f8f@sha256:fe5b07a514df0e69cfe8d04035b7090f97fbe0e12e9c05653075d91f8eff5839"},{"byte_length":3899,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/single-owner.md","schema_version":"2.0","source_sha256":"25f8f3471eaa7a1be2ccfbe3ea54030c0a53dbae19a5694cbc47cbeb2b8c3eae","stable_ref":"sg:material/path-sha256-345316bd3aa4f09f3364a213a9f65f88f2a5545b6e206617d4c59e7965aa5b64","version_id":"sg:material/path-sha256-345316bd3aa4f09f3364a213a9f65f88f2a5545b6e206617d4c59e7965aa5b64@sha256:25f8f3471eaa7a1be2ccfbe3ea54030c0a53dbae19a5694cbc47cbeb2b8c3eae"},{"byte_length":3658,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/viewport-shell/sticky-header.md","schema_version":"2.0","source_sha256":"252058c31c8f0dfe39e461bc0da3eb2b92efddef351d145a5c62f3183579719c","stable_ref":"sg:material/path-sha256-3901860520475e0bf9a7a0d9a7684ce518e7f2c96d22f3aefb66fe40c524558d","version_id":"sg:material/path-sha256-3901860520475e0bf9a7a0d9a7684ce518e7f2c96d22f3aefb66fe40c524558d@sha256:252058c31c8f0dfe39e461bc0da3eb2b92efddef351d145a5c62f3183579719c"},{"byte_length":579,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/index.md","schema_version":"2.0","source_sha256":"90f2d5973bf08cfd7ba55523176d8bb76bff441a8a3b9e69c3a520118db3e101","stable_ref":"sg:material/path-sha256-3bf8fac99ec13ef32824ded352565692d56cc7c54e5392b7985df262ba35e760","version_id":"sg:material/path-sha256-3bf8fac99ec13ef32824ded352565692d56cc7c54e5392b7985df262ba35e760@sha256:90f2d5973bf08cfd7ba55523176d8bb76bff441a8a3b9e69c3a520118db3e101"},{"byte_length":3537,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/grid-repetition/dense-grid.md","schema_version":"2.0","source_sha256":"a4617ce7713368f24cca5c71a51d242dce9b651123c3ebe6d45073a10655f4b2","stable_ref":"sg:material/path-sha256-3d9a239e6bc90b85b6d15102c961f1ca0615094fe1df289c6e4d6a418af1801a","version_id":"sg:material/path-sha256-3d9a239e6bc90b85b6d15102c961f1ca0615094fe1df289c6e4d6a418af1801a@sha256:a4617ce7713368f24cca5c71a51d242dce9b651123c3ebe6d45073a10655f4b2"},{"byte_length":4548,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/decision-tree.md","schema_version":"2.0","source_sha256":"6436a8873e5441d46e3bac496b752221f7376c5d43d8e69d1afb8081b04c1f37","stable_ref":"sg:material/path-sha256-40a62d0c8d3666e3383f68652dbcd92841189eb4d3045ccbc5ba51d317faa103","version_id":"sg:material/path-sha256-40a62d0c8d3666e3383f68652dbcd92841189eb4d3045ccbc5ba51d317faa103@sha256:6436a8873e5441d46e3bac496b752221f7376c5d43d8e69d1afb8081b04c1f37"},{"byte_length":11158,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/loading-and-feedback.md","schema_version":"2.0","source_sha256":"e9e486ee640f8de982a82a729e289bdd9bf6075e4345a415f1654d2b00b23042","stable_ref":"sg:material/path-sha256-410c2e3b3955e8908b6400b3650678ff2cd2e02e5153c0d23b8cde41b071f73b","version_id":"sg:material/path-sha256-410c2e3b3955e8908b6400b3650678ff2cd2e02e5153c0d23b8cde41b071f73b@sha256:e9e486ee640f8de982a82a729e289bdd9bf6075e4345a415f1654d2b00b23042"},{"byte_length":873,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"recipes/index.md","schema_version":"2.0","source_sha256":"89729f69e1a879742421b2d583dcf67f8a9a94ed90a198e5b7b9e40b856a404e","stable_ref":"sg:material/path-sha256-44cd370aff03553cea434398290dfe059d49fd316157face88e54035c050b5f5","version_id":"sg:material/path-sha256-44cd370aff03553cea434398290dfe059d49fd316157face88e54035c050b5f5@sha256:89729f69e1a879742421b2d583dcf67f8a9a94ed90a198e5b7b9e40b856a404e"},{"byte_length":5818,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/techniques/scroll-choreography.md","schema_version":"2.0","source_sha256":"1e032f1efa62a7ff55becff803676360269dcf4ed5a8521aa41eca07c83151c4","stable_ref":"sg:material/path-sha256-44f21c1d14d14d5399444d0ed4e14350ae55298c850c276b4064f3dbaf7a2f0e","version_id":"sg:material/path-sha256-44f21c1d14d14d5399444d0ed4e14350ae55298c850c276b4064f3dbaf7a2f0e@sha256:1e032f1efa62a7ff55becff803676360269dcf4ed5a8521aa41eca07c83151c4"},{"byte_length":7646,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/rendering-and-performance.md","schema_version":"2.0","source_sha256":"c3c391f9a51cd072fe576604bf7784a1f983145139cda5e9ac9ec71f508fac52","stable_ref":"sg:material/path-sha256-45b535355571cf368a5986781694bb4023f8531d1a228d9a9fd9e9779830eca8","version_id":"sg:material/path-sha256-45b535355571cf368a5986781694bb4023f8531d1a228d9a9fd9e9779830eca8@sha256:c3c391f9a51cd072fe576604bf7784a1f983145139cda5e9ac9ec71f508fac52"},{"byte_length":2787,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"recipes/dashboard.md","schema_version":"2.0","source_sha256":"4295395763064bf98667539d4be60b2dd6de10b66b51724537c9d227265ca15e","stable_ref":"sg:material/path-sha256-463cfb73f926bbdf90d68b3aee7af299b388384e6b5e51e1c7a5ef2cd33aef83","version_id":"sg:material/path-sha256-463cfb73f926bbdf90d68b3aee7af299b388384e6b5e51e1c7a5ef2cd33aef83@sha256:4295395763064bf98667539d4be60b2dd6de10b66b51724537c9d227265ca15e"},{"byte_length":3629,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/grid-repetition/grid-wrapper.md","schema_version":"2.0","source_sha256":"0d1798a0bad6ea2bf5cdf1028a69728ccc14bba0fac85c874f1f06fa214bb4c7","stable_ref":"sg:material/path-sha256-4a8a96f82fbd1527cc6f7ee248ef7a8ab8d47289a31dfb521f865d49f0376afb","version_id":"sg:material/path-sha256-4a8a96f82fbd1527cc6f7ee248ef7a8ab8d47289a31dfb521f865d49f0376afb@sha256:0d1798a0bad6ea2bf5cdf1028a69728ccc14bba0fac85c874f1f06fa214bb4c7"},{"byte_length":9531,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/native-interaction-contracts.md","schema_version":"2.0","source_sha256":"c2aea704a85fa282e6fd8f397168881679dc91e8dc4128696822cbe9258ce165","stable_ref":"sg:material/path-sha256-4aa1425904ba4d0ad9487734c35da7fc683a52a1f3df71558a59e02cc3f41278","version_id":"sg:material/path-sha256-4aa1425904ba4d0ad9487734c35da7fc683a52a1f3df71558a59e02cc3f41278@sha256:c2aea704a85fa282e6fd8f397168881679dc91e8dc4128696822cbe9258ce165"},{"byte_length":3692,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/id-selection.md","schema_version":"2.0","source_sha256":"4cdbc6af8be61c5b4e157ad4cea3ad1ca4a4a0e8e7e02d97ede16c58a29201d4","stable_ref":"sg:material/path-sha256-4bee6fbd3c1da260c1af18ec783a9ce252cedaf92a1109f66874db434b1873d9","version_id":"sg:material/path-sha256-4bee6fbd3c1da260c1af18ec783a9ce252cedaf92a1109f66874db434b1873d9@sha256:4cdbc6af8be61c5b4e157ad4cea3ad1ca4a4a0e8e7e02d97ede16c58a29201d4"},{"byte_length":7414,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/compatibility-matrix.md","schema_version":"2.0","source_sha256":"c1f9dfe51146061dbc6284b25f4de93051e45240357cbab68ef5815e7074d926","stable_ref":"sg:material/path-sha256-4c2db02298ea0b264c459e4c2b368dc67795c8a301786f1192bb61feb56c1c85","version_id":"sg:material/path-sha256-4c2db02298ea0b264c459e4c2b368dc67795c8a301786f1192bb61feb56c1c85@sha256:c1f9dfe51146061dbc6284b25f4de93051e45240357cbab68ef5815e7074d926"},{"byte_length":3784,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/overlay-exception/imposter.md","schema_version":"2.0","source_sha256":"285a48e7e7c51bc2a0c70bd86218a5329a042eba2df33f903c9f84806812ff88","stable_ref":"sg:material/path-sha256-4c3aeb4771622f79b0f3efdeb40e0f59064925f4bd60e63186452c0a79941a3e","version_id":"sg:material/path-sha256-4c3aeb4771622f79b0f3efdeb40e0f59064925f4bd60e63186452c0a79941a3e@sha256:285a48e7e7c51bc2a0c70bd86218a5329a042eba2df33f903c9f84806812ff88"},{"byte_length":7839,"domain":"expression","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"expression/anti-patterns.md","schema_version":"2.0","source_sha256":"de2f893d0f9ea0c88675df032720d2e5bf5545f87f14d047c826127a91ea927a","stable_ref":"sg:material/path-sha256-4eb9998babec3f232a6d0cff1c533bebecb4975e4dc1c9e7a3ff1c3f71bea48a","version_id":"sg:material/path-sha256-4eb9998babec3f232a6d0cff1c533bebecb4975e4dc1c9e7a3ff1c3f71bea48a@sha256:de2f893d0f9ea0c88675df032720d2e5bf5545f87f14d047c826127a91ea927a"},{"byte_length":3557,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/centering/center.md","schema_version":"2.0","source_sha256":"dbb58e99d0476e4e4405b805ebdd387dc961a10381db41b8cf13ed8a7ae27ba8","stable_ref":"sg:material/path-sha256-4fb5bdea440d75d58bcb66874cdb2930ee9cd5d17768bba1ea95e4c3c547ebd5","version_id":"sg:material/path-sha256-4fb5bdea440d75d58bcb66874cdb2930ee9cd5d17768bba1ea95e4c3c547ebd5@sha256:dbb58e99d0476e4e4405b805ebdd387dc961a10381db41b8cf13ed8a7ae27ba8"},{"byte_length":6061,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/practice-reference.md","schema_version":"2.0","source_sha256":"1096eae09dd6a90ae83c9979728c5774c4242dae68f71ee12e97496c87d0ba2d","stable_ref":"sg:material/path-sha256-50b685f66086b3f2362d97feb7e001bd2f208e6ea33c52174edf66fbe8287265","version_id":"sg:material/path-sha256-50b685f66086b3f2362d97feb7e001bd2f208e6ea33c52174edf66fbe8287265@sha256:1096eae09dd6a90ae83c9979728c5774c4242dae68f71ee12e97496c87d0ba2d"},{"byte_length":4336,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/submitted-snapshot.md","schema_version":"2.0","source_sha256":"7b3057368548cd597c39d2164fca0c67b76006f737c2155e4e7173fc3667f67a","stable_ref":"sg:material/path-sha256-51ccfa0d4ccf164cca0daf967981033c516ec76a50e323645e168b02e382a485","version_id":"sg:material/path-sha256-51ccfa0d4ccf164cca0daf967981033c516ec76a50e323645e168b02e382a485@sha256:7b3057368548cd597c39d2164fca0c67b76006f737c2155e4e7173fc3667f67a"},{"byte_length":3482,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/containment/clamped-card.md","schema_version":"2.0","source_sha256":"b72e950a8a87cec2fda32b2d42e8f7f40ae1e026cdb70d7b4e62f29bbfad64f8","stable_ref":"sg:material/path-sha256-52157f6d777be20078f71c3c850955175151fdbe04fad86368b8f0e382280631","version_id":"sg:material/path-sha256-52157f6d777be20078f71c3c850955175151fdbe04fad86368b8f0e382280631@sha256:b72e950a8a87cec2fda32b2d42e8f7f40ae1e026cdb70d7b4e62f29bbfad64f8"},{"byte_length":7878,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"consumer-reference/contract.md","schema_version":"2.0","source_sha256":"b914920989ff2ce08ebc67fa3167d0da766c260c93f03257a9144c6093ff6713","stable_ref":"sg:material/path-sha256-52494ee56bf5c837ead0782244d579ea0aba9e63e95a02c10f6d0b566e4d62d9","version_id":"sg:material/path-sha256-52494ee56bf5c837ead0782244d579ea0aba9e63e95a02c10f6d0b566e4d62d9@sha256:b914920989ff2ce08ebc67fa3167d0da766c260c93f03257a9144c6093ff6713"},{"byte_length":4575,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/tabs-and-segmented-controls.md","schema_version":"2.0","source_sha256":"bd36bc0f163e32de9cbdc6c849634c14e5f4696dd44022e65598e1f8185c6a8c","stable_ref":"sg:material/path-sha256-53d9287acab01ba05c7dc039e032e1fa61ab0326c2271979b2f6e1152ecabd5a","version_id":"sg:material/path-sha256-53d9287acab01ba05c7dc039e032e1fa61ab0326c2271979b2f6e1152ecabd5a@sha256:bd36bc0f163e32de9cbdc6c849634c14e5f4696dd44022e65598e1f8185c6a8c"},{"byte_length":3752,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/decision-tree.md","schema_version":"2.0","source_sha256":"4feeea32ea45c8989ecb78ccb1f127a8e2973de3057d02a5ea0b9ee2865f64ef","stable_ref":"sg:material/path-sha256-547df34d0477c66fac73a70d2dbf90923f9f1ca6cbf822396b2e441d9354cab8","version_id":"sg:material/path-sha256-547df34d0477c66fac73a70d2dbf90923f9f1ca6cbf822396b2e441d9354cab8@sha256:4feeea32ea45c8989ecb78ccb1f127a8e2973de3057d02a5ea0b9ee2865f64ef"},{"byte_length":4175,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/verification.md","schema_version":"2.0","source_sha256":"a0e0a8b667d4fc6538f3bc15baa087e3509b67570a0f7aaaffe7dc0a1cc3f5a9","stable_ref":"sg:material/path-sha256-54fe3380e00f19e72750d1d41510fb588053bb3ba371c6535550da1204ed939d","version_id":"sg:material/path-sha256-54fe3380e00f19e72750d1d41510fb588053bb3ba371c6535550da1204ed939d@sha256:a0e0a8b667d4fc6538f3bc15baa087e3509b67570a0f7aaaffe7dc0a1cc3f5a9"},{"byte_length":7671,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/token-semantics.md","schema_version":"2.0","source_sha256":"6cd480a70c70d69790b41153c322550830d472d7e3a2234d28cf646c71921137","stable_ref":"sg:material/path-sha256-58d4ab2bff42a3753aaa8d15a841388d5a1749a8c224381ad6501c50247e7ad8","version_id":"sg:material/path-sha256-58d4ab2bff42a3753aaa8d15a841388d5a1749a8c224381ad6501c50247e7ad8@sha256:6cd480a70c70d69790b41153c322550830d472d7e3a2234d28cf646c71921137"},{"byte_length":8606,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/search-metadata-polyhierarchy.md","schema_version":"2.0","source_sha256":"53ea6fddbf9c446a2b35ca6d975200c274ba3a713a2298ff62c8253d6c8a49d7","stable_ref":"sg:material/path-sha256-59a41c8893a1ad96d4b5abe1cfb6e381273ce32030b84b06cdbd2ac8be24dc74","version_id":"sg:material/path-sha256-59a41c8893a1ad96d4b5abe1cfb6e381273ce32030b84b06cdbd2ac8be24dc74@sha256:53ea6fddbf9c446a2b35ca6d975200c274ba3a713a2298ff62c8253d6c8a49d7"},{"byte_length":3554,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/grid-repetition/columns.md","schema_version":"2.0","source_sha256":"6c4c0300bde15481cb5767119997ba41fe2af2751d0e829a1b4803a4108e11b0","stable_ref":"sg:material/path-sha256-5a76c5ad4c7daff2cbf3fbf8d8968f56204322f508b999f77e87bcbe6274a8de","version_id":"sg:material/path-sha256-5a76c5ad4c7daff2cbf3fbf8d8968f56204322f508b999f77e87bcbe6274a8de@sha256:6c4c0300bde15481cb5767119997ba41fe2af2751d0e829a1b4803a4108e11b0"},{"byte_length":876,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/tokens.md","schema_version":"2.0","source_sha256":"9f6849985944fea6c660c6ce8f1a962b1b3fe4aa195e72ef2d2293b27fac80f0","stable_ref":"sg:material/path-sha256-5e265c863940f92cadc3da208c4c09c4aacd7da3425332edc401bbb461383e30","version_id":"sg:material/path-sha256-5e265c863940f92cadc3da208c4c09c4aacd7da3425332edc401bbb461383e30@sha256:9f6849985944fea6c660c6ce8f1a962b1b3fe4aa195e72ef2d2293b27fac80f0"},{"byte_length":537,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/containment/index.md","schema_version":"2.0","source_sha256":"93635d8fec49e448550ac671d0fe2510ecc017467ff79203bf10bc3e9b32a9d4","stable_ref":"sg:material/path-sha256-5e7498d507fe35d8607873d31efa80b8e4634fa59aa68fdb3cc10fcd99df20c6","version_id":"sg:material/path-sha256-5e7498d507fe35d8607873d31efa80b8e4634fa59aa68fdb3cc10fcd99df20c6@sha256:93635d8fec49e448550ac671d0fe2510ecc017467ff79203bf10bc3e9b32a9d4"},{"byte_length":3644,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/derived-state.md","schema_version":"2.0","source_sha256":"2d5f55c7d030a3d2c6ce430149f67d676b91f0e254330f49c4a6b7032ffd3385","stable_ref":"sg:material/path-sha256-6343ea5cf0fb7dec72847ffb6dc5c58e122fcdc4c20742e1971fbd20e0cfa926","version_id":"sg:material/path-sha256-6343ea5cf0fb7dec72847ffb6dc5c58e122fcdc4c20742e1971fbd20e0cfa926@sha256:2d5f55c7d030a3d2c6ce430149f67d676b91f0e254330f49c4a6b7032ffd3385"},{"byte_length":3779,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/deconstructed-pancake.md","schema_version":"2.0","source_sha256":"328fba775c878c602dc7c207a2765b8b133a68f864750c5ffff48a08db4324ed","stable_ref":"sg:material/path-sha256-651d978327dca78d036202b232058a85e240ada94d07dd7461bc894f9f83e5e2","version_id":"sg:material/path-sha256-651d978327dca78d036202b232058a85e240ada94d07dd7461bc894f9f83e5e2@sha256:328fba775c878c602dc7c207a2765b8b133a68f864750c5ffff48a08db4324ed"},{"byte_length":4435,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/input-masks.md","schema_version":"2.0","source_sha256":"34fd0ab0279b44176812eda06620edd82e8026c082110e794c7eb2b290403d77","stable_ref":"sg:material/path-sha256-651fbe48b8bbaa46dbfe3725c23a58e9d5018735f16320c973e7f90399c388d2","version_id":"sg:material/path-sha256-651fbe48b8bbaa46dbfe3725c23a58e9d5018735f16320c973e7f90399c388d2@sha256:34fd0ab0279b44176812eda06620edd82e8026c082110e794c7eb2b290403d77"},{"byte_length":3815,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/split-sidebar/main-with-rail.md","schema_version":"2.0","source_sha256":"270bde834f26f1813e8ace38adf3d5c3f5bc2b0da8c3f64eb7a7bc49984ae571","stable_ref":"sg:material/path-sha256-653b926534bf6d8d074f03173f13f475bada8dfa566852e272470fc17b8e58d4","version_id":"sg:material/path-sha256-653b926534bf6d8d074f03173f13f475bada8dfa566852e272470fc17b8e58d4@sha256:270bde834f26f1813e8ace38adf3d5c3f5bc2b0da8c3f64eb7a7bc49984ae571"},{"byte_length":4344,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/unsaved-navigation.md","schema_version":"2.0","source_sha256":"87e4a1bc122f2695584216ed22c5dfa68ce2c43a0aaba0b6a2c594c9da89839f","stable_ref":"sg:material/path-sha256-66ac94795676511486afc468bb8bc4d628e81a1dd24cdcc3fbc76eaa9455113e","version_id":"sg:material/path-sha256-66ac94795676511486afc468bb8bc4d628e81a1dd24cdcc3fbc76eaa9455113e@sha256:87e4a1bc122f2695584216ed22c5dfa68ce2c43a0aaba0b6a2c594c9da89839f"},{"byte_length":4020,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/split-sidebar/media-object.md","schema_version":"2.0","source_sha256":"977d24a5013e7d22cff6e67c6427ea00caee356358350138870e67deb885a7c6","stable_ref":"sg:material/path-sha256-69e5cbcca6fba542020d47eeb31222d719c39624ec41749d591d17aa175c5f3a","version_id":"sg:material/path-sha256-69e5cbcca6fba542020d47eeb31222d719c39624ec41749d591d17aa175c5f3a@sha256:977d24a5013e7d22cff6e67c6427ea00caee356358350138870e67deb885a7c6"},{"byte_length":4259,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/optimistic-overlay.md","schema_version":"2.0","source_sha256":"09acfc29370aba5abb3e6c486e12db02032221364892edb4008a736fabac102c","stable_ref":"sg:material/path-sha256-69ee1cefe0e4422f7930fb23d620939697bd30ad715dc14c206fa694c545f380","version_id":"sg:material/path-sha256-69ee1cefe0e4422f7930fb23d620939697bd30ad715dc14c206fa694c545f380@sha256:09acfc29370aba5abb3e6c486e12db02032221364892edb4008a736fabac102c"},{"byte_length":2363,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/index.md","schema_version":"2.0","source_sha256":"dba73ae13c02e01ba39004d0b33732e1d6168b7ac08f5b21f55662bfee2c5f1d","stable_ref":"sg:material/path-sha256-6c243b28fd8f4564a96217bcceabc75a5651ecd21ac41abfbdd4716adc60aa72","version_id":"sg:material/path-sha256-6c243b28fd8f4564a96217bcceabc75a5651ecd21ac41abfbdd4716adc60aa72@sha256:dba73ae13c02e01ba39004d0b33732e1d6168b7ac08f5b21f55662bfee2c5f1d"},{"byte_length":8716,"domain":"shared","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"consumer-reference/agent-native/README.md","schema_version":"2.0","source_sha256":"dedd72f4beb0f59e9d1c1db79f9288860d0559014ce8a1d24acf116f39cf6220","stable_ref":"sg:material/path-sha256-6cda345129c13188719d0116beef1e7d8e672f951f21295bc3b2ccf490a4a81d","version_id":"sg:material/path-sha256-6cda345129c13188719d0116beef1e7d8e672f951f21295bc3b2ccf490a4a81d@sha256:dedd72f4beb0f59e9d1c1db79f9288860d0559014ce8a1d24acf116f39cf6220"},{"byte_length":4658,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/autocomplete.md","schema_version":"2.0","source_sha256":"cfc484f6c5d60b880bdbf924d8742819fb83eba00ffadfa71612ab2f2bcf1e4d","stable_ref":"sg:material/path-sha256-6e66842c353df325f3f7f79027af79b161dcf800c8f4d46775f6b3337822de4b","version_id":"sg:material/path-sha256-6e66842c353df325f3f7f79027af79b161dcf800c8f4d46775f6b3337822de4b@sha256:cfc484f6c5d60b880bdbf924d8742819fb83eba00ffadfa71612ab2f2bcf1e4d"},{"byte_length":4479,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/empty-states.md","schema_version":"2.0","source_sha256":"7681124d83ef96f3564934a9266a8184c55a32b39ea98a2dfe63ad100f5e9b2b","stable_ref":"sg:material/path-sha256-6ef88d22b04f39b1bbe9232f69ac80e3c786f83703d981ec69d6aabc197e091b","version_id":"sg:material/path-sha256-6ef88d22b04f39b1bbe9232f69ac80e3c786f83703d981ec69d6aabc197e091b@sha256:7681124d83ef96f3564934a9266a8184c55a32b39ea98a2dfe63ad100f5e9b2b"},{"byte_length":34685,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"log.md","schema_version":"2.0","source_sha256":"63d31bb961f57eb975667bf5e36b72ded24fb5e783c1abd21d531388e08eaa8b","stable_ref":"sg:material/path-sha256-7204c0a4f935b2563fdb9fcf74d71a2e8621bf1b53f9da1b6eab41597a5fbc38","version_id":"sg:material/path-sha256-7204c0a4f935b2563fdb9fcf74d71a2e8621bf1b53f9da1b6eab41597a5fbc38@sha256:63d31bb961f57eb975667bf5e36b72ded24fb5e783c1abd21d531388e08eaa8b"},{"byte_length":3762,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/reel.md","schema_version":"2.0","source_sha256":"44b1a33c83c0433a90f0240b3237b6aa12b756307206705173626321aaab8b2e","stable_ref":"sg:material/path-sha256-72616dfa2b53176365ef81dd6954260a8a96051f3c47100505ece70816871c11","version_id":"sg:material/path-sha256-72616dfa2b53176365ef81dd6954260a8a96051f3c47100505ece70816871c11@sha256:44b1a33c83c0433a90f0240b3237b6aa12b756307206705173626321aaab8b2e"},{"byte_length":3811,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/viewport-shell/sticky-footer.md","schema_version":"2.0","source_sha256":"4afbdb3d9a42b133581cede6dad6f8dbcb25d1a99d0129567bd921164945e81b","stable_ref":"sg:material/path-sha256-7412ca94f2f7e6e9b81ec40ccbaee7ccab5a773e48d7fc14055baccd8d059d42","version_id":"sg:material/path-sha256-7412ca94f2f7e6e9b81ec40ccbaee7ccab5a773e48d7fc14055baccd8d059d42@sha256:4afbdb3d9a42b133581cede6dad6f8dbcb25d1a99d0129567bd921164945e81b"},{"byte_length":7267,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/typography-semantics.md","schema_version":"2.0","source_sha256":"447b1a05e9c0be605785c6d885c5fc68bbbd47d96780afa1e3780abffabbbdab","stable_ref":"sg:material/path-sha256-76663508bb4bf3e2ffc62ff5d0622bf17ee6c0420f11338f1837e981e6379134","version_id":"sg:material/path-sha256-76663508bb4bf3e2ffc62ff5d0622bf17ee6c0420f11338f1837e981e6379134@sha256:447b1a05e9c0be605785c6d885c5fc68bbbd47d96780afa1e3780abffabbbdab"},{"byte_length":4985,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/android-interaction.md","schema_version":"2.0","source_sha256":"a2178943bc6265f7c35d58b5a48d7646b7a4f04aaad073382dc9c84783066332","stable_ref":"sg:material/path-sha256-788bb5b0cd715989c0a984075c80a1d185b207deda5b50f58280030d928a5f89","version_id":"sg:material/path-sha256-788bb5b0cd715989c0a984075c80a1d185b207deda5b50f58280030d928a5f89@sha256:a2178943bc6265f7c35d58b5a48d7646b7a4f04aaad073382dc9c84783066332"},{"byte_length":14420,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"guides/documentation-mode-taxonomy.md","schema_version":"2.0","source_sha256":"872594fdfa78c4196bad9eae4aa6bab3cde82b4f73803ef049a60c6a7db329c2","stable_ref":"sg:material/path-sha256-78dcee9e03982b489be85a59bb522877c94bb01b2624af09e5ef5e3bc3bbbffc","version_id":"sg:material/path-sha256-78dcee9e03982b489be85a59bb522877c94bb01b2624af09e5ef5e3bc3bbbffc@sha256:872594fdfa78c4196bad9eae4aa6bab3cde82b4f73803ef049a60c6a7db329c2"},{"byte_length":2863,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"recipes/list-detail.md","schema_version":"2.0","source_sha256":"c0b56f86ce0a7e4e46866ac8058a2cfecba1a4c5874ca642f9c67eed613e703b","stable_ref":"sg:material/path-sha256-7b47a26ca3030528440849547a9a39dcd489581ebdb0b3c85f3204cf066acaa8","version_id":"sg:material/path-sha256-7b47a26ca3030528440849547a9a39dcd489581ebdb0b3c85f3204cf066acaa8@sha256:c0b56f86ce0a7e4e46866ac8058a2cfecba1a4c5874ca642f9c67eed613e703b"},{"byte_length":3866,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/stacking/line-up.md","schema_version":"2.0","source_sha256":"d33390cbcf5266b6dd7bf23b25fc09be946b14d62144f5d97497a1a423991afb","stable_ref":"sg:material/path-sha256-7c2f9831fd891304724438057614dab34b1fff1da4eb2f0d86803115be5a3ce5","version_id":"sg:material/path-sha256-7c2f9831fd891304724438057614dab34b1fff1da4eb2f0d86803115be5a3ce5@sha256:d33390cbcf5266b6dd7bf23b25fc09be946b14d62144f5d97497a1a423991afb"},{"byte_length":5759,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/review-workflow.md","schema_version":"2.0","source_sha256":"a627c6e2f01ea7f1bbddfcc40227c90e59d20d92e7eded46d3460195ed183b46","stable_ref":"sg:material/path-sha256-7df8e54fd5935c4a2a9aace117d43253e7c0fe32448fd31984a531a134192a83","version_id":"sg:material/path-sha256-7df8e54fd5935c4a2a9aace117d43253e7c0fe32448fd31984a531a134192a83@sha256:a627c6e2f01ea7f1bbddfcc40227c90e59d20d92e7eded46d3460195ed183b46"},{"byte_length":2698,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"recipes/form-flow.md","schema_version":"2.0","source_sha256":"b87cbbf4025b6d1f063811eafd0ecf579b044c5976160ec18cfd5ff3e487d2ce","stable_ref":"sg:material/path-sha256-7e60233e663192c6172a4cebabf93da3b047c42bbaddee206fa27644d8d821e9","version_id":"sg:material/path-sha256-7e60233e663192c6172a4cebabf93da3b047c42bbaddee206fa27644d8d821e9@sha256:b87cbbf4025b6d1f063811eafd0ecf579b044c5976160ec18cfd5ff3e487d2ce"},{"byte_length":8711,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"guides/vocabulary.md","schema_version":"2.0","source_sha256":"4e60e95b5fe42ad3b6cfc945ae1657002bda71d32aa852090df614b6bfe99535","stable_ref":"sg:material/path-sha256-7ec7a08ac14b5af0def43c817f1b32765f93312bb997e17663313c0fd4516a1f","version_id":"sg:material/path-sha256-7ec7a08ac14b5af0def43c817f1b32765f93312bb997e17663313c0fd4516a1f@sha256:4e60e95b5fe42ad3b6cfc945ae1657002bda71d32aa852090df614b6bfe99535"},{"byte_length":8291,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/text-input-and-internationalization.md","schema_version":"2.0","source_sha256":"5cfaf59ee885f7b63019e1ea45b9b743f28fc01dc3a4d29fe27d2203a814ddd9","stable_ref":"sg:material/path-sha256-7f4a10a0bc33622b05712eaa572846f13785ecc393a5f752ff744e048a8fb139","version_id":"sg:material/path-sha256-7f4a10a0bc33622b05712eaa572846f13785ecc393a5f752ff744e048a8fb139@sha256:5cfaf59ee885f7b63019e1ea45b9b743f28fc01dc3a4d29fe27d2203a814ddd9"},{"byte_length":5954,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"guides/decision-tree.md","schema_version":"2.0","source_sha256":"8990ba5fe40b4eb1f5da24522cfbd612660584419aa2f7c62229d13f036427fb","stable_ref":"sg:material/path-sha256-7fada8e2c9a6ab17c122f51121605bc9d4c64c9a7ef60d946813129f91474016","version_id":"sg:material/path-sha256-7fada8e2c9a6ab17c122f51121605bc9d4c64c9a7ef60d946813129f91474016@sha256:8990ba5fe40b4eb1f5da24522cfbd612660584419aa2f7c62229d13f036427fb"},{"byte_length":6236,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/claim-records/design-terminology-domain-scope.md","schema_version":"2.0","source_sha256":"33fba7c68d9edd94bf5775ea87b30736038864d20aea8ffd00bd156343d6fcc7","stable_ref":"sg:material/path-sha256-81ac6c1074bdefbb95d68ecad0fd72b45835340e0f6b3353a0d2eb2bb30d3c63","version_id":"sg:material/path-sha256-81ac6c1074bdefbb95d68ecad0fd72b45835340e0f6b3353a0d2eb2bb30d3c63@sha256:33fba7c68d9edd94bf5775ea87b30736038864d20aea8ffd00bd156343d6fcc7"},{"byte_length":7930,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"guides/layout-brief.md","schema_version":"2.0","source_sha256":"0e87d9d8f51ab6f3960b8e160abd9663be0d501e801a3184686b27c9a1debbf5","stable_ref":"sg:material/path-sha256-8305d3db8a3a860213c04b8cef5a4ed463a109f558be8df51ff1c5af21d749e1","version_id":"sg:material/path-sha256-8305d3db8a3a860213c04b8cef5a4ed463a109f558be8df51ff1c5af21d749e1@sha256:0e87d9d8f51ab6f3960b8e160abd9663be0d501e801a3184686b27c9a1debbf5"},{"byte_length":5102,"domain":"expression","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"expression/techniques/webgl-hero.md","schema_version":"2.0","source_sha256":"c314a8819c9d90a78003353c4ba6d5520f9e27e42da74fb76b64239ccd3d5822","stable_ref":"sg:material/path-sha256-83ef92fd245a0c1167b97e7655b19ff47b460467e205410397f1e43ad0bbe48f","version_id":"sg:material/path-sha256-83ef92fd245a0c1167b97e7655b19ff47b460467e205410397f1e43ad0bbe48f@sha256:c314a8819c9d90a78003353c4ba6d5520f9e27e42da74fb76b64239ccd3d5822"},{"byte_length":8203,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/pattern-contract-audit.md","schema_version":"2.0","source_sha256":"35926d5a3313f1918035ae906844722bbe56c7494eff9e5b22a2306a681893af","stable_ref":"sg:material/path-sha256-871ee653f2589835e85184dba2e5ef403fc064d0d49a2b2b85f0b8996d351fc6","version_id":"sg:material/path-sha256-871ee653f2589835e85184dba2e5ef403fc064d0d49a2b2b85f0b8996d351fc6@sha256:35926d5a3313f1918035ae906844722bbe56c7494eff9e5b22a2306a681893af"},{"byte_length":12032,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"guides/webpage-generation-workflow.md","schema_version":"2.0","source_sha256":"f6037714f19db4cc4d786def3e5702249119873d11730ec9aa45dec627d5788c","stable_ref":"sg:material/path-sha256-87436c736fec1b7b05f6f0a824b06c852e9295daca92298163e02024fbb0451b","version_id":"sg:material/path-sha256-87436c736fec1b7b05f6f0a824b06c852e9295daca92298163e02024fbb0451b@sha256:f6037714f19db4cc4d786def3e5702249119873d11730ec9aa45dec627d5788c"},{"byte_length":3780,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/media-fit/frame.md","schema_version":"2.0","source_sha256":"0b091f1ac7ba60e816bf1772fbd171c8aab7f410b9929f0e4f3d6bdc9c250f9c","stable_ref":"sg:material/path-sha256-882d5f2d004ba4375887b0489d4c452e3a6b3cfaea23561ba59e4e56821da256","version_id":"sg:material/path-sha256-882d5f2d004ba4375887b0489d4c452e3a6b3cfaea23561ba59e4e56821da256@sha256:0b091f1ac7ba60e816bf1772fbd171c8aab7f410b9929f0e4f3d6bdc9c250f9c"},{"byte_length":3470,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/stacking/feed.md","schema_version":"2.0","source_sha256":"4fe1deb3e8312bddc8b4d03230916ac6eb84e6663fa8464635d8d2f3a8b60162","stable_ref":"sg:material/path-sha256-88b6e0985d823e16fad9888dd2133bb5e3c2a2203e3a1623a705ac883ea4a00c","version_id":"sg:material/path-sha256-88b6e0985d823e16fad9888dd2133bb5e3c2a2203e3a1623a705ac883ea4a00c@sha256:4fe1deb3e8312bddc8b4d03230916ac6eb84e6663fa8464635d8d2f3a8b60162"},{"byte_length":936,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/index.md","schema_version":"2.0","source_sha256":"973dabb4a682d02c0a60d611ae73c2b531f38fb2a3e3d2682f37a385c3f2f726","stable_ref":"sg:material/path-sha256-8a81d81ebc22075986a7fe5af4720c2779c2a456382fc0a3e74c1bfc8bb0f958","version_id":"sg:material/path-sha256-8a81d81ebc22075986a7fe5af4720c2779c2a456382fc0a3e74c1bfc8bb0f958@sha256:973dabb4a682d02c0a60d611ae73c2b531f38fb2a3e3d2682f37a385c3f2f726"},{"byte_length":2939,"domain":"expression","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"expression/techniques/grain-and-texture.md","schema_version":"2.0","source_sha256":"917f9bd13d81dc487be156b116a7d74910ea22b1a701ddc3ab5ad0d38cb6318b","stable_ref":"sg:material/path-sha256-8ab82d47e71b49f0eb23b47a0b178576010f09a36c77e8c1778c8a27e2a55d5f","version_id":"sg:material/path-sha256-8ab82d47e71b49f0eb23b47a0b178576010f09a36c77e8c1778c8a27e2a55d5f@sha256:917f9bd13d81dc487be156b116a7d74910ea22b1a701ddc3ab5ad0d38cb6318b"},{"byte_length":3959,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/single-flight.md","schema_version":"2.0","source_sha256":"978d0ff2e72ad37e390dbce00af30277e199d28f188cfffdd4a69cbbaf5efa28","stable_ref":"sg:material/path-sha256-907a9bd75779ab46cbb0ce42d79067d5daa9f030bd644bfe350fe37cf645c816","version_id":"sg:material/path-sha256-907a9bd75779ab46cbb0ce42d79067d5daa9f030bd644bfe350fe37cf645c816@sha256:978d0ff2e72ad37e390dbce00af30277e199d28f188cfffdd4a69cbbaf5efa28"},{"byte_length":3468,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/media-fit/icon-frame.md","schema_version":"2.0","source_sha256":"1c21b23a87625bb8d0f818ddc76f0d3b0e4c5b3491711fa891d090ef65e9d9f5","stable_ref":"sg:material/path-sha256-9100c52308320464deed2d7e13eb9857e485784f12f2dc1de28e8b73bc8f936b","version_id":"sg:material/path-sha256-9100c52308320464deed2d7e13eb9857e485784f12f2dc1de28e8b73bc8f936b@sha256:1c21b23a87625bb8d0f818ddc76f0d3b0e4c5b3491711fa891d090ef65e9d9f5"},{"byte_length":8158,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/apple-interaction.md","schema_version":"2.0","source_sha256":"d59726ca8d19fd36e58237246e090bd96a4bc92161606665794e8d78c5d9a4b2","stable_ref":"sg:material/path-sha256-9247a878dcd0a0977374938c50eeb9a622ad6203847c1169beaf81d0493ebb5b","version_id":"sg:material/path-sha256-9247a878dcd0a0977374938c50eeb9a622ad6203847c1169beaf81d0493ebb5b@sha256:d59726ca8d19fd36e58237246e090bd96a4bc92161606665794e8d78c5d9a4b2"},{"byte_length":3530,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/wrap-row.md","schema_version":"2.0","source_sha256":"37dffc31f990bd363bbd8080865f165d9549b29d5ab954b515885e0fa6ec693d","stable_ref":"sg:material/path-sha256-94d8cf97bb7801865552f7d2b317b556ed6b643d53b73fad134de89186263585","version_id":"sg:material/path-sha256-94d8cf97bb7801865552f7d2b317b556ed6b643d53b73fad134de89186263585@sha256:37dffc31f990bd363bbd8080865f165d9549b29d5ab954b515885e0fa6ec693d"},{"byte_length":2502,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/families.md","schema_version":"2.0","source_sha256":"0e80ebefdc5a7c266c46f48342a9c6389eb5390d5f8c0f6f162f852c4b596690","stable_ref":"sg:material/path-sha256-956ab860e593d435b6682540b04365917b3736deb47207b5812065776734de0b","version_id":"sg:material/path-sha256-956ab860e593d435b6682540b04365917b3736deb47207b5812065776734de0b@sha256:0e80ebefdc5a7c266c46f48342a9c6389eb5390d5f8c0f6f162f852c4b596690"},{"byte_length":3777,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/badge-list.md","schema_version":"2.0","source_sha256":"035c32771ec21eddb644f1837182312fb2a90349456a1ac4007036a74c27dc06","stable_ref":"sg:material/path-sha256-96fc7d48dad3399ab0cbedfdf8cb508b1732f57dc96cd15911e50a3a1654c9b1","version_id":"sg:material/path-sha256-96fc7d48dad3399ab0cbedfdf8cb508b1732f57dc96cd15911e50a3a1654c9b1@sha256:035c32771ec21eddb644f1837182312fb2a90349456a1ac4007036a74c27dc06"},{"byte_length":4540,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/url-state.md","schema_version":"2.0","source_sha256":"888db9f0d109cb14ecb8b9c8433a5ffaaf9943c4bce18243fc995ef5bbec0fdc","stable_ref":"sg:material/path-sha256-97087064e2cbb26f2f155ff3f5a1813f3213cc5b9f0f56425e1c49f8bd5101a7","version_id":"sg:material/path-sha256-97087064e2cbb26f2f155ff3f5a1813f3213cc5b9f0f56425e1c49f8bd5101a7@sha256:888db9f0d109cb14ecb8b9c8433a5ffaaf9943c4bce18243fc995ef5bbec0fdc"},{"byte_length":952,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/visual-qa.md","schema_version":"2.0","source_sha256":"9fdfd9acdcd4fefd4f2d3ef51ba6170e3235d4ae97cc6c739a0f1123e1825f74","stable_ref":"sg:material/path-sha256-970cc2193de22b50bd91099cd6f8e5f52069ccd3360306d17e6eacf4ed1343ae","version_id":"sg:material/path-sha256-970cc2193de22b50bd91099cd6f8e5f52069ccd3360306d17e6eacf4ed1343ae@sha256:9fdfd9acdcd4fefd4f2d3ef51ba6170e3235d4ae97cc6c739a0f1123e1825f74"},{"byte_length":9489,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"recipes/primitive-to-recipe-matrix.md","schema_version":"2.0","source_sha256":"0e8b3b90651c8820a0c0463c32bf410e40abb7503a26e9c90b1fdb456d4ad7b3","stable_ref":"sg:material/path-sha256-99427f2ded107b0d7be95e3a768ac836b917b22c8736fb7f31028b33a333836d","version_id":"sg:material/path-sha256-99427f2ded107b0d7be95e3a768ac836b917b22c8736fb7f31028b33a333836d@sha256:0e8b3b90651c8820a0c0463c32bf410e40abb7503a26e9c90b1fdb456d4ad7b3"},{"byte_length":3789,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/split-sidebar/supporting-pane.md","schema_version":"2.0","source_sha256":"d717640fd0cafac150c6a435398fd44881b593aa2420ad269f305987c2d1d59f","stable_ref":"sg:material/path-sha256-9a82e011fc565919a7334610d427c1ec662e2b89034c6da9a2b135dc398444da","version_id":"sg:material/path-sha256-9a82e011fc565919a7334610d427c1ec662e2b89034c6da9a2b135dc398444da@sha256:d717640fd0cafac150c6a435398fd44881b593aa2420ad269f305987c2d1d59f"},{"byte_length":3375,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/recipes/settings-save.md","schema_version":"2.0","source_sha256":"dd73d8df3d9badf82901f69e088a4d79ccfd3104bb3106aab4abf3fe0afdf975","stable_ref":"sg:material/path-sha256-9b304ea69dfb16383cde4acce499dc7a6774b097ecdb4565f697e52e6c9675ad","version_id":"sg:material/path-sha256-9b304ea69dfb16383cde4acce499dc7a6774b097ecdb4565f697e52e6c9675ad@sha256:dd73d8df3d9badf82901f69e088a4d79ccfd3104bb3106aab4abf3fe0afdf975"},{"byte_length":4994,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/source-kinds.md","schema_version":"2.0","source_sha256":"8280fb26d7cd423c4da04cc99ffbd6df1463724b1bfce58c8719be267d7de860","stable_ref":"sg:material/path-sha256-9bf12d243f458c4641241baed05117806d5865bf05115ebbb49ac44f4f349f4f","version_id":"sg:material/path-sha256-9bf12d243f458c4641241baed05117806d5865bf05115ebbb49ac44f4f349f4f@sha256:8280fb26d7cd423c4da04cc99ffbd6df1463724b1bfce58c8719be267d7de860"},{"byte_length":3723,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/viewport-shell/panel-layout.md","schema_version":"2.0","source_sha256":"f75ed9738c2059de8648d57193bdfea693d83db690ad0f62b1d7d6eaf2c139eb","stable_ref":"sg:material/path-sha256-9c016feea05fe406dddaf432e9137d8d56c71df33fb77450e538d21c9871e85f","version_id":"sg:material/path-sha256-9c016feea05fe406dddaf432e9137d8d56c71df33fb77450e538d21c9871e85f@sha256:f75ed9738c2059de8648d57193bdfea693d83db690ad0f62b1d7d6eaf2c139eb"},{"byte_length":9580,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/input-and-focus.md","schema_version":"2.0","source_sha256":"d4ca53a9f63619354b4ca0977f013cc7bf22407a3a51e764f71ac24b8ca1eb38","stable_ref":"sg:material/path-sha256-9c1ececbc5a19cd26ba217bc3541616be516a42410718353ffe707e044dfd2cf","version_id":"sg:material/path-sha256-9c1ececbc5a19cd26ba217bc3541616be516a42410718353ffe707e044dfd2cf@sha256:d4ca53a9f63619354b4ca0977f013cc7bf22407a3a51e764f71ac24b8ca1eb38"},{"byte_length":4609,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/dark-mode-contrast.md","schema_version":"2.0","source_sha256":"b2c26499d672caa0ddb9aa2891583f170f21c85ec47d95c0041a8b653785cb7b","stable_ref":"sg:material/path-sha256-9c2fb161708663681dea59ac17d2427ff992806f2162282f82a8c96c8872b47c","version_id":"sg:material/path-sha256-9c2fb161708663681dea59ac17d2427ff992806f2162282f82a8c96c8872b47c@sha256:b2c26499d672caa0ddb9aa2891583f170f21c85ec47d95c0041a8b653785cb7b"},{"byte_length":4785,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/faceted-filters.md","schema_version":"2.0","source_sha256":"01b16a8873208157d3e9369f63d3dee9a6a61032772e78699eb81a405a65e0e0","stable_ref":"sg:material/path-sha256-9dca85c26915b0b4fe9b1b14cfeb67d7f2afbea12088800ec71245b3267ec862","version_id":"sg:material/path-sha256-9dca85c26915b0b4fe9b1b14cfeb67d7f2afbea12088800ec71245b3267ec862@sha256:01b16a8873208157d3e9369f63d3dee9a6a61032772e78699eb81a405a65e0e0"},{"byte_length":2479,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"recipes/saas-settings.md","schema_version":"2.0","source_sha256":"0c81354d408b0a17f142d2d37fcded119e5aae3cdda545820a2767009abc7927","stable_ref":"sg:material/path-sha256-9dfe65b7582876aed144b8b79ad8ffbde14182c8b9c082c6916057782509cd0e","version_id":"sg:material/path-sha256-9dfe65b7582876aed144b8b79ad8ffbde14182c8b9c082c6916057782509cd0e@sha256:0c81354d408b0a17f142d2d37fcded119e5aae3cdda545820a2767009abc7927"},{"byte_length":2270,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"recipes/article-page.md","schema_version":"2.0","source_sha256":"e1f09f503d697c4c04ef36b1a7033e1e68c8e52f942c865ca2db1489e66b235d","stable_ref":"sg:material/path-sha256-a0c4596e930ce74c5bf8f890a6e037abbd07463c1e1aa0b35c40a0c2009ba011","version_id":"sg:material/path-sha256-a0c4596e930ce74c5bf8f890a6e037abbd07463c1e1aa0b35c40a0c2009ba011@sha256:e1f09f503d697c4c04ef36b1a7033e1e68c8e52f942c865ca2db1489e66b235d"},{"byte_length":18431,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/interaction-recipes.md","schema_version":"2.0","source_sha256":"9f065be929f4ad34b867ae7666943aafb99c70ce7022787e935a0f869798f7b2","stable_ref":"sg:material/path-sha256-a2188f6421d8ce1d9cf926193014f31af7bff1fb6101e42b87ff364c201f9d6e","version_id":"sg:material/path-sha256-a2188f6421d8ce1d9cf926193014f31af7bff1fb6101e42b87ff364c201f9d6e@sha256:9f065be929f4ad34b867ae7666943aafb99c70ce7022787e935a0f869798f7b2"},{"byte_length":4206,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"index.md","schema_version":"2.0","source_sha256":"cdb1f52e6ad9327be8c2056e63ca5a6acfffa96847a3d908fcb86dbe0e6f1a86","stable_ref":"sg:material/path-sha256-a48746cae70c44e7e105b594aad338ddd105c93c1cb445a40ba6aab785ba69e5","version_id":"sg:material/path-sha256-a48746cae70c44e7e105b594aad338ddd105c93c1cb445a40ba6aab785ba69e5@sha256:cdb1f52e6ad9327be8c2056e63ca5a6acfffa96847a3d908fcb86dbe0e6f1a86"},{"byte_length":12117,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"AGENTS.md","schema_version":"2.0","source_sha256":"f8beb0cfabd13d1b2aa6029b9dde9a9fece7d3fd0a23f496aeb522cdbf4305d2","stable_ref":"sg:material/path-sha256-a54ff182c7e8acf56acfd6e4b9c3ff41e2c41a31c9b211b2deb9df75d9a478f9","version_id":"sg:material/path-sha256-a54ff182c7e8acf56acfd6e4b9c3ff41e2c41a31c9b211b2deb9df75d9a478f9@sha256:f8beb0cfabd13d1b2aa6029b9dde9a9fece7d3fd0a23f496aeb522cdbf4305d2"},{"byte_length":3689,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/grid-repetition/card-grid.md","schema_version":"2.0","source_sha256":"9750a6f9dbe578fd7044d5e2375bb6df9bc2cd3ea3f952f51e8a0f228392f472","stable_ref":"sg:material/path-sha256-a5e3ff6fe0948ebbaf30def7866421563073877df12336c5f66eba3d2d6667a5","version_id":"sg:material/path-sha256-a5e3ff6fe0948ebbaf30def7866421563073877df12336c5f66eba3d2d6667a5@sha256:9750a6f9dbe578fd7044d5e2375bb6df9bc2cd3ea3f952f51e8a0f228392f472"},{"byte_length":5120,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/techniques/kinetic-type.md","schema_version":"2.0","source_sha256":"08670e9f799b97b73b8294be7f378d2853861407d95649a6f1a0e3837dd37ec8","stable_ref":"sg:material/path-sha256-a73c6a1b54503228d3f98269e3cdf140c3472df03198770c1e4146a32685fdcd","version_id":"sg:material/path-sha256-a73c6a1b54503228d3f98269e3cdf140c3472df03198770c1e4146a32685fdcd@sha256:08670e9f799b97b73b8294be7f378d2853861407d95649a6f1a0e3837dd37ec8"},{"byte_length":1194,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/index.md","schema_version":"2.0","source_sha256":"c52bbc8df395ff56e4cad12ced76ba5ee55f4a95c49efaf53825d13c32feab49","stable_ref":"sg:material/path-sha256-a7987410bcf408a5b4edc0ae7719d3f57f1f04a4efaaa7a756c870677307fd85","version_id":"sg:material/path-sha256-a7987410bcf408a5b4edc0ae7719d3f57f1f04a4efaaa7a756c870677307fd85@sha256:c52bbc8df395ff56e4cad12ced76ba5ee55f4a95c49efaf53825d13c32feab49"},{"byte_length":886,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/gates/index.md","schema_version":"2.0","source_sha256":"8687d8285459805273e27f5ca9b5fcd10fbd0899786443445666155630bbf4bb","stable_ref":"sg:material/path-sha256-aa41c9d5c021c9d6a6e06df6c53297c0d271f71b3a299303d8a330644f6998f1","version_id":"sg:material/path-sha256-aa41c9d5c021c9d6a6e06df6c53297c0d271f71b3a299303d8a330644f6998f1@sha256:8687d8285459805273e27f5ca9b5fcd10fbd0899786443445666155630bbf4bb"},{"byte_length":2505,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/claim-records/stylegallery-multidomain-scope.md","schema_version":"2.0","source_sha256":"3f886a22784cfaf25a0bc7e25b4e7ced25562f470bf2c6f80de894fedb7ee2f0","stable_ref":"sg:material/path-sha256-abaaac8db5d4ad334a6b84253118bdd282aba92b9a55daf5710b2b6d6d14c399","version_id":"sg:material/path-sha256-abaaac8db5d4ad334a6b84253118bdd282aba92b9a55daf5710b2b6d6d14c399@sha256:3f886a22784cfaf25a0bc7e25b4e7ced25562f470bf2c6f80de894fedb7ee2f0"},{"byte_length":5060,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/error-recovery.md","schema_version":"2.0","source_sha256":"eae2fd50f40bb107dd14ffecf122029445ece55992dc4b247ba56772849de0e3","stable_ref":"sg:material/path-sha256-adb34954f50f41151a7a544d4e8776a6f11027241889251df4a84598e8475d5b","version_id":"sg:material/path-sha256-adb34954f50f41151a7a544d4e8776a6f11027241889251df4a84598e8475d5b@sha256:eae2fd50f40bb107dd14ffecf122029445ece55992dc4b247ba56772849de0e3"},{"byte_length":5260,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/index.md","schema_version":"2.0","source_sha256":"da21531c3c00085495cd8aa6b823d93b460ef4b8b711d6f99c5d2ad1f27576b0","stable_ref":"sg:material/path-sha256-ae58b612e54de404253b9c6ae923631149e6a1b1d39fa673ee81705626aa5968","version_id":"sg:material/path-sha256-ae58b612e54de404253b9c6ae923631149e6a1b1d39fa673ee81705626aa5968@sha256:da21531c3c00085495cd8aa6b823d93b460ef4b8b711d6f99c5d2ad1f27576b0"},{"byte_length":6107,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/comparison-workflow.md","schema_version":"2.0","source_sha256":"33746616932fe730285607c0cda5bf8019500884cb5cb67fdce0285ef71af0c4","stable_ref":"sg:material/path-sha256-ae7b1857d77dd0986c8000255f0bb7eeb79e3750bc19cdd426ca7d571f120a6d","version_id":"sg:material/path-sha256-ae7b1857d77dd0986c8000255f0bb7eeb79e3750bc19cdd426ca7d571f120a6d@sha256:33746616932fe730285607c0cda5bf8019500884cb5cb67fdce0285ef71af0c4"},{"byte_length":4989,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/windows-interaction.md","schema_version":"2.0","source_sha256":"f10b6f05b647a2623f0510da2c38e6232809a34c3d19e52fa3f4241724a0b11d","stable_ref":"sg:material/path-sha256-b33142b70ab23f291695fe451ad410aeddc24b3f4853d817a731a26072dc4c32","version_id":"sg:material/path-sha256-b33142b70ab23f291695fe451ad410aeddc24b3f4853d817a731a26072dc4c32@sha256:f10b6f05b647a2623f0510da2c38e6232809a34c3d19e52fa3f4241724a0b11d"},{"byte_length":33203,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"README.md","schema_version":"2.0","source_sha256":"96cd1b0bbcf1542114913ca618357626f9d64f2c025b4568e6570eb4dfc9ceaf","stable_ref":"sg:material/path-sha256-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5","version_id":"sg:material/path-sha256-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5@sha256:96cd1b0bbcf1542114913ca618357626f9d64f2c025b4568e6570eb4dfc9ceaf"},{"byte_length":9981,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/source-vocabularies.md","schema_version":"2.0","source_sha256":"8c9f40d996d7a4133638683fccc408e4392c338f5ce94dbd07f578f86b234819","stable_ref":"sg:material/path-sha256-b3c9a665848204252a912ce4a369ccbd4e5b6e63209fa8cd393b0854d3a3b309","version_id":"sg:material/path-sha256-b3c9a665848204252a912ce4a369ccbd4e5b6e63209fa8cd393b0854d3a3b309@sha256:8c9f40d996d7a4133638683fccc408e4392c338f5ce94dbd07f578f86b234819"},{"byte_length":6935,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/interaction-semantics.md","schema_version":"2.0","source_sha256":"db9ac77afb5df1b5a6152b58cc3d57929659ab58049b7015c8b66a8fcf4b4c74","stable_ref":"sg:material/path-sha256-b4ca88cb45a689edcc376a990065184dc5dbae47f7d7f78ddc3fad789562623c","version_id":"sg:material/path-sha256-b4ca88cb45a689edcc376a990065184dc5dbae47f7d7f78ddc3fad789562623c@sha256:db9ac77afb5df1b5a6152b58cc3d57929659ab58049b7015c8b66a8fcf4b4c74"},{"byte_length":4802,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/adaptation-workflow.md","schema_version":"2.0","source_sha256":"8aea8bc14348b793e25e69cbbe6437e5c1f27a236227a012acb8a9dc5995eece","stable_ref":"sg:material/path-sha256-b59c0c528c094b9299490c7964ed10a188ae059e0bee97688f68c7edbfe8d561","version_id":"sg:material/path-sha256-b59c0c528c094b9299490c7964ed10a188ae059e0bee97688f68c7edbfe8d561@sha256:8aea8bc14348b793e25e69cbbe6437e5c1f27a236227a012acb8a9dc5995eece"},{"byte_length":32186,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"GOVERNANCE.md","schema_version":"2.0","source_sha256":"ab886bd4132283a8b1075d786789b62c10ec350eb5bb2a62df6385e1d796dc78","stable_ref":"sg:material/path-sha256-b60c6a93e9f74ee52e71bf33781c2870b8395c8c5a34f00f61305343cb8d8447","version_id":"sg:material/path-sha256-b60c6a93e9f74ee52e71bf33781c2870b8395c8c5a34f00f61305343cb8d8447@sha256:ab886bd4132283a8b1075d786789b62c10ec350eb5bb2a62df6385e1d796dc78"},{"byte_length":5287,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/index.md","schema_version":"2.0","source_sha256":"a358fec7eb52c0bc1523a1f0035f86ebf985362411138e5c594c6470cd76bc0d","stable_ref":"sg:material/path-sha256-b6b2ce37f6c04566c4dc6a18252e1d89fc387c7e79f4463406deff3e8b54a81f","version_id":"sg:material/path-sha256-b6b2ce37f6c04566c4dc6a18252e1d89fc387c7e79f4463406deff3e8b54a81f@sha256:a358fec7eb52c0bc1523a1f0035f86ebf985362411138e5c594c6470cd76bc0d"},{"byte_length":9754,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/worked-examples.md","schema_version":"2.0","source_sha256":"c9681b6f028ae21c42ef2e5202df07ee5c43e3461fec8ac2f5021fec01fd0f53","stable_ref":"sg:material/path-sha256-b6d27588195494826083fe6ad6f8f08ba0ad8016a0f64a0d442fde1414c0b1a0","version_id":"sg:material/path-sha256-b6d27588195494826083fe6ad6f8f08ba0ad8016a0f64a0d442fde1414c0b1a0@sha256:c9681b6f028ae21c42ef2e5202df07ee5c43e3461fec8ac2f5021fec01fd0f53"},{"byte_length":4657,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/concept-families.md","schema_version":"2.0","source_sha256":"d44d8782dc1c373757baf46064d8f5b44cd226025e4bad269006141e50be8c2f","stable_ref":"sg:material/path-sha256-b73e23057d4ca2412792354487c8709f1bcfe844eaf3c154fec167b48c80bd16","version_id":"sg:material/path-sha256-b73e23057d4ca2412792354487c8709f1bcfe844eaf3c154fec167b48c80bd16@sha256:d44d8782dc1c373757baf46064d8f5b44cd226025e4bad269006141e50be8c2f"},{"byte_length":2699,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/gates/accessibility-evidence.md","schema_version":"2.0","source_sha256":"fa07b1354ee7973317512b2f84d37d1f3965465962df74e9e1ee21a47f66ae4e","stable_ref":"sg:material/path-sha256-b7de05a789ffd0312cd9e9b1828ce113b1fcc3dcf5a87b73295a09e1004bfbe3","version_id":"sg:material/path-sha256-b7de05a789ffd0312cd9e9b1828ce113b1fcc3dcf5a87b73295a09e1004bfbe3@sha256:fa07b1354ee7973317512b2f84d37d1f3965465962df74e9e1ee21a47f66ae4e"},{"byte_length":5170,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/decision-tree.md","schema_version":"2.0","source_sha256":"0b00f7c6de446cfa08953a2552fa7e3d4f6ba5bd7da823be6caa8d2015651d38","stable_ref":"sg:material/path-sha256-b87b58f118ff70b806e2b1834e5a03e43a877d489f4af3f55ebfb4ab4a9fc8fa","version_id":"sg:material/path-sha256-b87b58f118ff70b806e2b1834e5a03e43a877d489f4af3f55ebfb4ab4a9fc8fa@sha256:0b00f7c6de446cfa08953a2552fa7e3d4f6ba5bd7da823be6caa8d2015651d38"},{"byte_length":6672,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"CATALOG.md","schema_version":"2.0","source_sha256":"6902e0b03d958816abc142a950cedb51a9a623c1acc5b1a7a94cc4f38a70eb8a","stable_ref":"sg:material/path-sha256-bb476268db5ed6523e97a56f61d3ec99765899bf3269949ee1aac390f48f1b99","version_id":"sg:material/path-sha256-bb476268db5ed6523e97a56f61d3ec99765899bf3269949ee1aac390f48f1b99@sha256:6902e0b03d958816abc142a950cedb51a9a623c1acc5b1a7a94cc4f38a70eb8a"},{"byte_length":4013,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/split-sidebar/sidebar.md","schema_version":"2.0","source_sha256":"5686d96ab0d65fe647a5e9303cef2c3d75f8887699e6b1219bc18c57be5e6deb","stable_ref":"sg:material/path-sha256-bd2be8d5407fa6cf6a9bfaacf5d35e3b08eadea21e394cb0951a4e22290720a2","version_id":"sg:material/path-sha256-bd2be8d5407fa6cf6a9bfaacf5d35e3b08eadea21e394cb0951a4e22290720a2@sha256:5686d96ab0d65fe647a5e9303cef2c3d75f8887699e6b1219bc18c57be5e6deb"},{"byte_length":2932,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/gates/consumer-migration-evidence.md","schema_version":"2.0","source_sha256":"71ad54bf72f5c968b8a0c5bd02b988660c6f441dbda13f9142d57842be498e6a","stable_ref":"sg:material/path-sha256-bd5e2b1ee33580f11a3a67b5306df57a54a539d5e944331511eb72fa9fe4e8f9","version_id":"sg:material/path-sha256-bd5e2b1ee33580f11a3a67b5306df57a54a539d5e944331511eb72fa9fe4e8f9@sha256:71ad54bf72f5c968b8a0c5bd02b988660c6f441dbda13f9142d57842be498e6a"},{"byte_length":3706,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/viewport-shell/cover.md","schema_version":"2.0","source_sha256":"932660d56c3b93bcb74f6195962f0e5d6a16c0ebc18f7ad27a6e3ea72e1ae764","stable_ref":"sg:material/path-sha256-bf39299bae7cfb1c999e3d86ab9106128c573c2a83c8f2f08f14572a94f0c5a7","version_id":"sg:material/path-sha256-bf39299bae7cfb1c999e3d86ab9106128c573c2a83c8f2f08f14572a94f0c5a7@sha256:932660d56c3b93bcb74f6195962f0e5d6a16c0ebc18f7ad27a6e3ea72e1ae764"},{"byte_length":3729,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/grid-repetition/twelve-span-grid.md","schema_version":"2.0","source_sha256":"340565c0ca49bf66d6e7646f4ec9c0c7ab3b704de40b12be7fa1a1cd8a7eef63","stable_ref":"sg:material/path-sha256-c0d7d6f086cfa95c3163b3cf7692cee97e3e16dba0de964706bee174841d2094","version_id":"sg:material/path-sha256-c0d7d6f086cfa95c3163b3cf7692cee97e3e16dba0de964706bee174841d2094@sha256:340565c0ca49bf66d6e7646f4ec9c0c7ab3b704de40b12be7fa1a1cd8a7eef63"},{"byte_length":3480,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/stacking/step-nav.md","schema_version":"2.0","source_sha256":"6669165638eb019a59f6397c019a23673796b749c8eaf754005e42c9d9dd2c17","stable_ref":"sg:material/path-sha256-c1d82e696f9b42772a53643bf7ac7fbddc964e528aa09fb7f155b442660b6262","version_id":"sg:material/path-sha256-c1d82e696f9b42772a53643bf7ac7fbddc964e528aa09fb7f155b442660b6262@sha256:6669165638eb019a59f6397c019a23673796b749c8eaf754005e42c9d9dd2c17"},{"byte_length":6684,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/observed-choreography.md","schema_version":"2.0","source_sha256":"56e05747a6ac1b6612ac7512072ae3a76ce2b9c1cafeb9898f97670bfb712f77","stable_ref":"sg:material/path-sha256-c36949227953517ec52eb47038c3feea76ec62c9b0102d92af93a39e970f6844","version_id":"sg:material/path-sha256-c36949227953517ec52eb47038c3feea76ec62c9b0102d92af93a39e970f6844@sha256:56e05747a6ac1b6612ac7512072ae3a76ce2b9c1cafeb9898f97670bfb712f77"},{"byte_length":7614,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/adaptive-navigation.md","schema_version":"2.0","source_sha256":"2a323b0583954be7b87bf0ed733731dda91f313888d50a16bd8ad1ca023b3373","stable_ref":"sg:material/path-sha256-c3cf4c2f8d1e0c4e88e039c570eaee8d873db5d8e79b22c8ad8b94ee8f6537b2","version_id":"sg:material/path-sha256-c3cf4c2f8d1e0c4e88e039c570eaee8d873db5d8e79b22c8ad8b94ee8f6537b2@sha256:2a323b0583954be7b87bf0ed733731dda91f313888d50a16bd8ad1ca023b3373"},{"byte_length":18956,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/executable-evidence.md","schema_version":"2.0","source_sha256":"3f505237a2412704f41f4823edb6611eb84692d99ddcac88b39da92a0c820c79","stable_ref":"sg:material/path-sha256-c609296f2ae6b1d6234dbb3497f9d6a45208ba0470a3d8b4a861be79bae797c8","version_id":"sg:material/path-sha256-c609296f2ae6b1d6234dbb3497f9d6a45208ba0470a3d8b4a861be79bae797c8@sha256:3f505237a2412704f41f4823edb6611eb84692d99ddcac88b39da92a0c820c79"},{"byte_length":4018,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/recipes/index.md","schema_version":"2.0","source_sha256":"342eeb9a1e02ddacecbb8c4f3573049a75611a2ca8ce8e949a24f322d508c691","stable_ref":"sg:material/path-sha256-c78d1941e01a175ff8783c0be62c3a8f16a1534175354405d96d21e9ad68031d","version_id":"sg:material/path-sha256-c78d1941e01a175ff8783c0be62c3a8f16a1534175354405d96d21e9ad68031d@sha256:342eeb9a1e02ddacecbb8c4f3573049a75611a2ca8ce8e949a24f322d508c691"},{"byte_length":7509,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/interruption-and-retargeting.md","schema_version":"2.0","source_sha256":"ea588d38f41599c8bc304db91b94e2b0367cd5e659ed9b9b122e0844b6ba710d","stable_ref":"sg:material/path-sha256-cb04a3e7504acef68cfc10ffc7379cce216b8e8ec9eefd165299edb63166bcdb","version_id":"sg:material/path-sha256-cb04a3e7504acef68cfc10ffc7379cce216b8e8ec9eefd165299edb63166bcdb@sha256:ea588d38f41599c8bc304db91b94e2b0367cd5e659ed9b9b122e0844b6ba710d"},{"byte_length":5181,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/inline-validation.md","schema_version":"2.0","source_sha256":"5ae403b017eefdc14d066d7d0fbc0cbc0a6c386f70fe0dc206f73c17d6b68c37","stable_ref":"sg:material/path-sha256-d0c6d7b617354ba95c80ec7fc7b792f1aa56f12fd55c445a8975c9ad113554d2","version_id":"sg:material/path-sha256-d0c6d7b617354ba95c80ec7fc7b792f1aa56f12fd55c445a8975c9ad113554d2@sha256:5ae403b017eefdc14d066d7d0fbc0cbc0a6c386f70fe0dc206f73c17d6b68c37"},{"byte_length":12092,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"DOMAINS.md","schema_version":"2.0","source_sha256":"5bc874f8ba9d49fb844307d4b9be7067cfd57be6d976b4d7134986bbc520f3cf","stable_ref":"sg:material/path-sha256-d190306dc8097b7ef0ec2a57ed020076a9f325b48f083aba3f62de5e886af5ab","version_id":"sg:material/path-sha256-d190306dc8097b7ef0ec2a57ed020076a9f325b48f083aba3f62de5e886af5ab@sha256:5bc874f8ba9d49fb844307d4b9be7067cfd57be6d976b4d7134986bbc520f3cf"},{"byte_length":910,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/grid-repetition/index.md","schema_version":"2.0","source_sha256":"fecba190f4bcb2f3e7fbce19c02181fae7613fc51da6b20539a17ef5d37e78f2","stable_ref":"sg:material/path-sha256-d312b8ccb45a40e38e38e6d6d1e95ee074d50714cdcf872de9afd4e4254a4301","version_id":"sg:material/path-sha256-d312b8ccb45a40e38e38e6d6d1e95ee074d50714cdcf872de9afd4e4254a4301@sha256:fecba190f4bcb2f3e7fbce19c02181fae7613fc51da6b20539a17ef5d37e78f2"},{"byte_length":3835,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/split-nav.md","schema_version":"2.0","source_sha256":"75e676a65a757e4247955e58be0b438c1bbc56e22fffaf30f80437918b067552","stable_ref":"sg:material/path-sha256-d657fc87c00278cd49d87fb6a43b8596834943cf85f71d7cc873c102e56a5587","version_id":"sg:material/path-sha256-d657fc87c00278cd49d87fb6a43b8596834943cf85f71d7cc873c102e56a5587@sha256:75e676a65a757e4247955e58be0b438c1bbc56e22fffaf30f80437918b067552"},{"byte_length":4600,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/recipes/delete-undo.md","schema_version":"2.0","source_sha256":"ddb2c40392346841615980db3f38063daf023ebd1e9a88e091e797c1ee267d61","stable_ref":"sg:material/path-sha256-d7f0246c42d37b7e8615176a2bbe47d3ce946fb72c95c1037c683ced103113ad","version_id":"sg:material/path-sha256-d7f0246c42d37b7e8615176a2bbe47d3ce946fb72c95c1037c683ced103113ad@sha256:ddb2c40392346841615980db3f38063daf023ebd1e9a88e091e797c1ee267d61"},{"byte_length":4248,"domain":"expression","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"expression/techniques/gradient-atmosphere.md","schema_version":"2.0","source_sha256":"d243e2adc9ea6f3db70267cb85d8a3aa7e18df1a4dba528ce1db137a489284a5","stable_ref":"sg:material/path-sha256-d91189824c54a6030c06211e7c363c50ad4b1965c8636f52a3482ce16af00046","version_id":"sg:material/path-sha256-d91189824c54a6030c06211e7c363c50ad4b1965c8636f52a3482ce16af00046@sha256:d243e2adc9ea6f3db70267cb85d8a3aa7e18df1a4dba528ce1db137a489284a5"},{"byte_length":4100,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/latest-request-wins.md","schema_version":"2.0","source_sha256":"39b531cf73cbf79dfe0a61e3a1689d69fcf6643b495e3bc7c7cc9044ddfb9ae6","stable_ref":"sg:material/path-sha256-da7daa92efd6dc2d657e89359165211034b94b318278e8bb9e6854b49a5e0db0","version_id":"sg:material/path-sha256-da7daa92efd6dc2d657e89359165211034b94b318278e8bb9e6854b49a5e0db0@sha256:39b531cf73cbf79dfe0a61e3a1689d69fcf6643b495e3bc7c7cc9044ddfb9ae6"},{"byte_length":3944,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/consumer-migration.md","schema_version":"2.0","source_sha256":"a9e61500abbce740ca43f941aeb15a7bfebad46585584e0a45da59ce94334f29","stable_ref":"sg:material/path-sha256-ddc1d0e9544d4a08bb43703f230dcdfea087f2faf90d9a49e4aa22695b07178a","version_id":"sg:material/path-sha256-ddc1d0e9544d4a08bb43703f230dcdfea087f2faf90d9a49e4aa22695b07178a@sha256:a9e61500abbce740ca43f941aeb15a7bfebad46585584e0a45da59ce94334f29"},{"byte_length":4555,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/versioned-restore.md","schema_version":"2.0","source_sha256":"2d02489a82613c0b6a81acc80eed94253e62005f998266575330f65ecc2c7e16","stable_ref":"sg:material/path-sha256-de9ba30ea59aa296569f001d5253a70d68900e085da5d0daffea18c7ecde7067","version_id":"sg:material/path-sha256-de9ba30ea59aa296569f001d5253a70d68900e085da5d0daffea18c7ecde7067@sha256:2d02489a82613c0b6a81acc80eed94253e62005f998266575330f65ecc2c7e16"},{"byte_length":2741,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/principles.md","schema_version":"2.0","source_sha256":"1834b852ae156c7362d4f9b223b4d72dc6b708a1f2a2964022955940a9c1fdc4","stable_ref":"sg:material/path-sha256-deba5ef88dc8bdc60813a398130b8a3ca3a8d01124f45823f5834ebda967996c","version_id":"sg:material/path-sha256-deba5ef88dc8bdc60813a398130b8a3ca3a8d01124f45823f5834ebda967996c@sha256:1834b852ae156c7362d4f9b223b4d72dc6b708a1f2a2964022955940a9c1fdc4"},{"byte_length":3655,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"consumer-reference/index.md","schema_version":"2.0","source_sha256":"6c3fbad093a7becb9f2ca52a344a65dd02b3da51f49a915af6426a61f2a06208","stable_ref":"sg:material/path-sha256-df7a6343d7be1e9be37c6f618a7e72b0ac51be6143f64f419b4520e5f37c2b6b","version_id":"sg:material/path-sha256-df7a6343d7be1e9be37c6f618a7e72b0ac51be6143f64f419b4520e5f37c2b6b@sha256:6c3fbad093a7becb9f2ca52a344a65dd02b3da51f49a915af6426a61f2a06208"},{"byte_length":338,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/centering/index.md","schema_version":"2.0","source_sha256":"b7125eb4c4d705a1bb2d57ac7e9d4cf140627473aac687331573bf30b0decd30","stable_ref":"sg:material/path-sha256-e1319590d4485778ddb92cc3c1f781b4f7e06d934d5849336f96588ee3592aa8","version_id":"sg:material/path-sha256-e1319590d4485778ddb92cc3c1f781b4f7e06d934d5849336f96588ee3592aa8@sha256:b7125eb4c4d705a1bb2d57ac7e9d4cf140627473aac687331573bf30b0decd30"},{"byte_length":3707,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/containment/content-limiter.md","schema_version":"2.0","source_sha256":"fca4e8316b8c17917a4a54956ad1e44bf2cf75b87d4dc36b8e26a76fc0a26f19","stable_ref":"sg:material/path-sha256-e1c9957e26f0e3ee1235a070fbe69d31ed5974bce8c4fe14c63537909991a750","version_id":"sg:material/path-sha256-e1c9957e26f0e3ee1235a070fbe69d31ed5974bce8c4fe14c63537909991a750@sha256:fca4e8316b8c17917a4a54956ad1e44bf2cf75b87d4dc36b8e26a76fc0a26f19"},{"byte_length":3696,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/grid-repetition/masonry-approx.md","schema_version":"2.0","source_sha256":"eaa49df7f7dca831ca4da96ba91337da8812429aaf4ee72bd99eb44996485502","stable_ref":"sg:material/path-sha256-e277a76f0335dd426d8b64001be63fd56ab91a03c4ade0526ea10c4631251abb","version_id":"sg:material/path-sha256-e277a76f0335dd426d8b64001be63fd56ab91a03c4ade0526ea10c4631251abb@sha256:eaa49df7f7dca831ca4da96ba91337da8812429aaf4ee72bd99eb44996485502"},{"byte_length":8104,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/consumer-migration-readiness.md","schema_version":"2.0","source_sha256":"86dc5148b052b372b0132d159d2c3ab819a859b5f210e3a1a994c29c7478b276","stable_ref":"sg:material/path-sha256-e2d4ce07445db974a7f32e5eec810897cfb565df619df52961f3eefa5a9c3fd4","version_id":"sg:material/path-sha256-e2d4ce07445db974a7f32e5eec810897cfb565df619df52961f3eefa5a9c3fd4@sha256:86dc5148b052b372b0132d159d2c3ab819a859b5f210e3a1a994c29c7478b276"},{"byte_length":1081,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/hci-evaluation.md","schema_version":"2.0","source_sha256":"9deeeeb4c0fc9b24d79e68b6e38236f2993da2544ecc0d130256136d2b062aae","stable_ref":"sg:material/path-sha256-e5f16e01f3fb13f94a214c8a9edf9b5c31c4ebca963802dfc624e8863e98f8da","version_id":"sg:material/path-sha256-e5f16e01f3fb13f94a214c8a9edf9b5c31c4ebca963802dfc624e8863e98f8da@sha256:9deeeeb4c0fc9b24d79e68b6e38236f2993da2544ecc0d130256136d2b062aae"},{"byte_length":5219,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/index.md","schema_version":"2.0","source_sha256":"56aff9a19f32f4d32521d73e7ee59ad6cdacda55b588b2c142eb3fa42b5cdcda","stable_ref":"sg:material/path-sha256-e678b2e7915fc4abf6a019c86f8a7d74b8939a60220cb08a810900e1b5cbc2bc","version_id":"sg:material/path-sha256-e678b2e7915fc4abf6a019c86f8a7d74b8939a60220cb08a810900e1b5cbc2bc@sha256:56aff9a19f32f4d32521d73e7ee59ad6cdacda55b588b2c142eb3fa42b5cdcda"},{"byte_length":4504,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/form-labels.md","schema_version":"2.0","source_sha256":"3d1947465f17553390388350a59486dfbdab84b0802c169b83555e8a18142bcf","stable_ref":"sg:material/path-sha256-e9eedeec7cd06ae7331c1f1a27a9f31ce533653e3cf03fe4d44b35a5b28e7a87","version_id":"sg:material/path-sha256-e9eedeec7cd06ae7331c1f1a27a9f31ce533653e3cf03fe4d44b35a5b28e7a87@sha256:3d1947465f17553390388350a59486dfbdab84b0802c169b83555e8a18142bcf"},{"byte_length":4459,"domain":"expression","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"expression/directions/nocturne-editorial.md","schema_version":"2.0","source_sha256":"d3a3c5b614ea9398e4840593e20f984b0703cda99788620f57534d91c2802055","stable_ref":"sg:material/path-sha256-ea5cc5e1f5e6d370f406399b8b89822781c5140da9a3f1091cd10af9c03dc78c","version_id":"sg:material/path-sha256-ea5cc5e1f5e6d370f406399b8b89822781c5140da9a3f1091cd10af9c03dc78c@sha256:d3a3c5b614ea9398e4840593e20f984b0703cda99788620f57534d91c2802055"},{"byte_length":17463,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/conflict-cases.md","schema_version":"2.0","source_sha256":"8eb8ba9ebd15bde960ae26722da9512e602b873f421c78bb7a2be2105a31d12e","stable_ref":"sg:material/path-sha256-ebd0ba0ee0bdb5529496beddce60a4e78b65d94c9650c57ed7499427d417aa19","version_id":"sg:material/path-sha256-ebd0ba0ee0bdb5529496beddce60a4e78b65d94c9650c57ed7499427d417aa19@sha256:8eb8ba9ebd15bde960ae26722da9512e602b873f421c78bb7a2be2105a31d12e"},{"byte_length":6827,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/claims.md","schema_version":"2.0","source_sha256":"d0b04d83da9448eaa1255fc64388f76fa82c803dec246dc374bb7f7e10c6f173","stable_ref":"sg:material/path-sha256-ec031d838419829b80465b2f31de260e70117bdd283988e0653441d439a65114","version_id":"sg:material/path-sha256-ec031d838419829b80465b2f31de260e70117bdd283988e0653441d439a65114@sha256:d0b04d83da9448eaa1255fc64388f76fa82c803dec246dc374bb7f7e10c6f173"},{"byte_length":4679,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/data-tables.md","schema_version":"2.0","source_sha256":"297b05fef1c6117b1a7d8458660264a8b085704b5656503650b6c0b924922b73","stable_ref":"sg:material/path-sha256-ec3d8c3a9b6eea122b3b4db3d3994e12c65c6ff593a356a5628e8443798b8e05","version_id":"sg:material/path-sha256-ec3d8c3a9b6eea122b3b4db3d3994e12c65c6ff593a356a5628e8443798b8e05@sha256:297b05fef1c6117b1a7d8458660264a8b085704b5656503650b6c0b924922b73"},{"byte_length":2727,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/accessibility.md","schema_version":"2.0","source_sha256":"cc5a68a5e1721914fd00537b66aecb4e58c92c89962cc5fabd5ed0fc39930e95","stable_ref":"sg:material/path-sha256-eeea8e16127c63b10e90f626430df368a97fac8108b419c1cba89805b6014ce7","version_id":"sg:material/path-sha256-eeea8e16127c63b10e90f626430df368a97fac8108b419c1cba89805b6014ce7@sha256:cc5a68a5e1721914fd00537b66aecb4e58c92c89962cc5fabd5ed0fc39930e95"},{"byte_length":6696,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"layout/index.md","schema_version":"2.0","source_sha256":"03bba4cd15b3f507ae44094c472c8839e4b1f875ded63d9f13ec868ee8e184b2","stable_ref":"sg:material/path-sha256-f05a4c57bb475ff014a22abaa9120b04f05bc02d8bbe11f57677bd7662276f54","version_id":"sg:material/path-sha256-f05a4c57bb475ff014a22abaa9120b04f05bc02d8bbe11f57677bd7662276f54@sha256:03bba4cd15b3f507ae44094c472c8839e4b1f875ded63d9f13ec868ee8e184b2"},{"byte_length":7862,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/accessible-motion.md","schema_version":"2.0","source_sha256":"a60c17d61e6fd0b3bfe7bb97a60a685d9de6ff99f04bbcb8adeabea695a8986e","stable_ref":"sg:material/path-sha256-f0b9fec845304075b0df8ed4cf16fa414849f65315b0dd03ea233c24901654d9","version_id":"sg:material/path-sha256-f0b9fec845304075b0df8ed4cf16fa414849f65315b0dd03ea233c24901654d9@sha256:a60c17d61e6fd0b3bfe7bb97a60a685d9de6ff99f04bbcb8adeabea695a8986e"},{"byte_length":3844,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"GUIDE.md","schema_version":"2.0","source_sha256":"f105ff6ed3c6923ea43dacc4c40632affee4874e086a333b9ce3fa2a786234da","stable_ref":"sg:material/path-sha256-f0d91300831f8bc350b2883e8adf82bdbcb79f482585168420831991e320ade7","version_id":"sg:material/path-sha256-f0d91300831f8bc350b2883e8adf82bdbcb79f482585168420831991e320ade7@sha256:f105ff6ed3c6923ea43dacc4c40632affee4874e086a333b9ce3fa2a786234da"},{"byte_length":4393,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/bottom-navigation.md","schema_version":"2.0","source_sha256":"e672b0c1560619bc10cd32655e26b309056e867b7bd476dfa4eee3cad4b9c7d5","stable_ref":"sg:material/path-sha256-f15b339c5a118f56068f8974f63b5409b033f2ca91a8cbbf7827a7fbfdcde151","version_id":"sg:material/path-sha256-f15b339c5a118f56068f8974f63b5409b033f2ca91a8cbbf7827a7fbfdcde151@sha256:e672b0c1560619bc10cd32655e26b309056e867b7bd476dfa4eee3cad4b9c7d5"},{"byte_length":3518,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/recipes/search-detail.md","schema_version":"2.0","source_sha256":"beb27d29115e28245a5887f1768e1d00f15e3241728ac22a12da40da82b9c6b5","stable_ref":"sg:material/path-sha256-f1748f4bd4143cef690bfad3f5789b1789b64da73b4318356890be18a49afd87","version_id":"sg:material/path-sha256-f1748f4bd4143cef690bfad3f5789b1789b64da73b4318356890be18a49afd87@sha256:beb27d29115e28245a5887f1768e1d00f15e3241728ac22a12da40da82b9c6b5"},{"byte_length":10020,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/index.md","schema_version":"2.0","source_sha256":"80a52afe739802206dcca58c8a7e5c1c064276d1d5c1fd8809783ac87a4cbce0","stable_ref":"sg:material/path-sha256-f56daa946060f9e1f75d42246e0fa7a288093bf6d902cc9705a2c5b13c65310f","version_id":"sg:material/path-sha256-f56daa946060f9e1f75d42246e0fa7a288093bf6d902cc9705a2c5b13c65310f@sha256:80a52afe739802206dcca58c8a7e5c1c064276d1d5c1fd8809783ac87a4cbce0"},{"byte_length":1748,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/gates/layout.md","schema_version":"2.0","source_sha256":"e7306ec2101bcbc1f27153160796ef56ba7846d6c7e5219d92e56b77e0703882","stable_ref":"sg:material/path-sha256-f62872ebce1ea7ffc61cd5522572c6d0f6aecd782c9e30df376bdcd96c7e73d3","version_id":"sg:material/path-sha256-f62872ebce1ea7ffc61cd5522572c6d0f6aecd782c9e30df376bdcd96c7e73d3@sha256:e7306ec2101bcbc1f27153160796ef56ba7846d6c7e5219d92e56b77e0703882"},{"byte_length":347,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/media-fit/index.md","schema_version":"2.0","source_sha256":"24fa906c939cad71b0f175aab12ec75a16718c66446a31bedfcd3d1d46a67ae6","stable_ref":"sg:material/path-sha256-f77cbae09754bece5a3217dbf7cf766189bb5302d6296fab69bd6f5b3d6e495e","version_id":"sg:material/path-sha256-f77cbae09754bece5a3217dbf7cf766189bb5302d6296fab69bd6f5b3d6e495e@sha256:24fa906c939cad71b0f175aab12ec75a16718c66446a31bedfcd3d1d46a67ae6"},{"byte_length":1550,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/gates/rationale.md","schema_version":"2.0","source_sha256":"875771978927372959dea499fba00bf1fd0d0d2426d35601aa3e418698ccd1ab","stable_ref":"sg:material/path-sha256-f797bc85a767e4a6ea1339cf7cc91d2504c722f3a02614d6174e59978db906a6","version_id":"sg:material/path-sha256-f797bc85a767e4a6ea1339cf7cc91d2504c722f3a02614d6174e59978db906a6@sha256:875771978927372959dea499fba00bf1fd0d0d2426d35601aa3e418698ccd1ab"},{"byte_length":4840,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/viewport-shell/holy-grail.md","schema_version":"2.0","source_sha256":"d54651ee582bbde78a0eb4ace3a0cf25d15818b8db2899d076db234cf9c392a1","stable_ref":"sg:material/path-sha256-f968729fb5885c124f8e1cab2c273f7e3b6fefd858be7f71d1b3958b48f4f2a9","version_id":"sg:material/path-sha256-f968729fb5885c124f8e1cab2c273f7e3b6fefd858be7f71d1b3958b48f4f2a9@sha256:d54651ee582bbde78a0eb4ace3a0cf25d15818b8db2899d076db234cf9c392a1"},{"byte_length":6622,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/index.md","schema_version":"2.0","source_sha256":"e690834978526c34428dcce61dc2c31d85050a0e4b1c59a9f1227f9c49f5c786","stable_ref":"sg:material/path-sha256-fa36065f2020c60e811e07b08ff9ab0969520183389a14652d456f7cf7364d55","version_id":"sg:material/path-sha256-fa36065f2020c60e811e07b08ff9ab0969520183389a14652d456f7cf7364d55@sha256:e690834978526c34428dcce61dc2c31d85050a0e4b1c59a9f1227f9c49f5c786"}],"record_kind":"material_manifest","schema_version":"2.0","stable_ref":"sg:manifest/material-admission-v2","version_id":"sg:manifest/material-admission-v2@sha256:4c781ab0487e6fc607e892b8632065044d01b100613dd02f3c1bbfae67ac224f"} \ No newline at end of file +{"admission_policy_ref":"sg:policy/material-admission-v2","admission_policy_version_id":"sg:policy/material-admission-v2@sha256:f0f5758d8da48a15861f3cadc7e1cb437d59fecc71fdf8d9991466776cc9ff20","materials":[{"byte_length":3667,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/grid-repetition/page-grid.md","schema_version":"2.0","source_sha256":"e2e49d1a86e6ae4b0f272573c6517edd593e6f25dc7d96f73307795abf000f41","stable_ref":"sg:material/path-sha256-002803d65d057faaa4e8c1bb3e32ef3f41032b011251fc9f0f7b1db907b01ceb","version_id":"sg:material/path-sha256-002803d65d057faaa4e8c1bb3e32ef3f41032b011251fc9f0f7b1db907b01ceb@sha256:e2e49d1a86e6ae4b0f272573c6517edd593e6f25dc7d96f73307795abf000f41"},{"byte_length":3546,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/pagination.md","schema_version":"2.0","source_sha256":"cff90e8758b703bec4e48b88970e194b8b11528e33f5111fc82caaad5c5313c1","stable_ref":"sg:material/path-sha256-00ae3be01fcc4add55bd98eff34737037c54c0a7f2f128239a2afbe698936c8f","version_id":"sg:material/path-sha256-00ae3be01fcc4add55bd98eff34737037c54c0a7f2f128239a2afbe698936c8f@sha256:cff90e8758b703bec4e48b88970e194b8b11528e33f5111fc82caaad5c5313c1"},{"byte_length":99659,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/claim-records/samples.md","schema_version":"2.0","source_sha256":"0cf5df12d9a34ef0968479047bf24ab3163dc53715f32c86c40f03a121aef653","stable_ref":"sg:material/path-sha256-021f96adf1d1647d17f99011af6b1e7fa370dddbbad96b384731ed0256f74984","version_id":"sg:material/path-sha256-021f96adf1d1647d17f99011af6b1e7fa370dddbbad96b384731ed0256f74984@sha256:0cf5df12d9a34ef0968479047bf24ab3163dc53715f32c86c40f03a121aef653"},{"byte_length":3592,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/draft-and-baseline.md","schema_version":"2.0","source_sha256":"faff27c0b376341dc8142bcdd9bfed4e73ea894d1e1a3eb9078202070ccc0261","stable_ref":"sg:material/path-sha256-02ec455439cc41949cf6f6a9a66466d17eeecf4a55a8698ffb3d5741a18f3194","version_id":"sg:material/path-sha256-02ec455439cc41949cf6f6a9a66466d17eeecf4a55a8698ffb3d5741a18f3194@sha256:faff27c0b376341dc8142bcdd9bfed4e73ea894d1e1a3eb9078202070ccc0261"},{"byte_length":858,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/viewport-shell/index.md","schema_version":"2.0","source_sha256":"05da91c5514d03e82c19a03c494fdad21a92a2ba7b88ec6dca5e7836c1f133a2","stable_ref":"sg:material/path-sha256-040de79bdf5af768663bf1aaa9d7451aa0d79bfaa0d5e982cceec4058f7715e4","version_id":"sg:material/path-sha256-040de79bdf5af768663bf1aaa9d7451aa0d79bfaa0d5e982cceec4058f7715e4@sha256:05da91c5514d03e82c19a03c494fdad21a92a2ba7b88ec6dca5e7836c1f133a2"},{"byte_length":5367,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/interface-craft.md","schema_version":"2.0","source_sha256":"ba71e914027abd783e9769a5b91efb764cc7335a6479c69ca4e70ab05a64e941","stable_ref":"sg:material/path-sha256-04afb6013755c328be25b08637961e5f20fa67705cfcbd6e996ba6ada944f571","version_id":"sg:material/path-sha256-04afb6013755c328be25b08637961e5f20fa67705cfcbd6e996ba6ada944f571@sha256:ba71e914027abd783e9769a5b91efb764cc7335a6479c69ca4e70ab05a64e941"},{"byte_length":501,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/stacking/index.md","schema_version":"2.0","source_sha256":"9b60182a25c4c07b7b482b3981dec17d515f95915cc618411282f988dca4ada2","stable_ref":"sg:material/path-sha256-04fa96b121ed2a48be80851efc72289752d1c4c12bd6433c2d5002d6d82a54ed","version_id":"sg:material/path-sha256-04fa96b121ed2a48be80851efc72289752d1c4c12bd6433c2d5002d6d82a54ed@sha256:9b60182a25c4c07b7b482b3981dec17d515f95915cc618411282f988dca4ada2"},{"byte_length":6853,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/vocabulary.md","schema_version":"2.0","source_sha256":"b2796979aaa1b194ff3006469cbeaec71cbd80d1484e3a5089e03295a43b464d","stable_ref":"sg:material/path-sha256-07b5ed44416e4d40efd213a7e944f214a338aa83201e52ba58c6dcf2a81e5675","version_id":"sg:material/path-sha256-07b5ed44416e4d40efd213a7e944f214a338aa83201e52ba58c6dcf2a81e5675@sha256:b2796979aaa1b194ff3006469cbeaec71cbd80d1484e3a5089e03295a43b464d"},{"byte_length":1619,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/gates/visual-evidence.md","schema_version":"2.0","source_sha256":"17f7430f1cd1847c74c737ee9341120be6b49e827ec4228be5b6868669d27fd3","stable_ref":"sg:material/path-sha256-085c94936dece089fd31864c482d1a19e4da562951adbaa7d459e0126486d149","version_id":"sg:material/path-sha256-085c94936dece089fd31864c482d1a19e4da562951adbaa7d459e0126486d149@sha256:17f7430f1cd1847c74c737ee9341120be6b49e827ec4228be5b6868669d27fd3"},{"byte_length":8322,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/component-contract.md","schema_version":"2.0","source_sha256":"79e496160e28ab26397d2c5b68075fd14c732d13002ff6c6e41c031d86cac039","stable_ref":"sg:material/path-sha256-08adbcce8042dbb84d03e0903f204eb9f799d464a2035c84db9ffab8aebcc278","version_id":"sg:material/path-sha256-08adbcce8042dbb84d03e0903f204eb9f799d464a2035c84db9ffab8aebcc278@sha256:79e496160e28ab26397d2c5b68075fd14c732d13002ff6c6e41c031d86cac039"},{"byte_length":54,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/claim-records/index.md","schema_version":"2.0","source_sha256":"b9bb90f0928f7f408c615ce2dc323425640ef4b83b62de0c0dee6dcd4bf7e3bb","stable_ref":"sg:material/path-sha256-08c3095acfdc040b75071e94644db6a32b655817c4b79eabfa4339b59c9f0b22","version_id":"sg:material/path-sha256-08c3095acfdc040b75071e94644db6a32b655817c4b79eabfa4339b59c9f0b22@sha256:b9bb90f0928f7f408c615ce2dc323425640ef4b83b62de0c0dee6dcd4bf7e3bb"},{"byte_length":4089,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/gates/harmony-evaluation.md","schema_version":"2.0","source_sha256":"efee2c0ff6a662bc3efb360ee8c80defc5113a00d8b36e1c36c45eb63d330270","stable_ref":"sg:material/path-sha256-0a43f2af49d24f33b8ff06829d431f9e7608de57760c3f2c7de8c3e4126869f3","version_id":"sg:material/path-sha256-0a43f2af49d24f33b8ff06829d431f9e7608de57760c3f2c7de8c3e4126869f3@sha256:efee2c0ff6a662bc3efb360ee8c80defc5113a00d8b36e1c36c45eb63d330270"},{"byte_length":8047,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/preferences-and-accessibility.md","schema_version":"2.0","source_sha256":"d5a2af1cb445d0be4d0ed0a61f281673e4be81041dc964f8b16e3e7d6284a55e","stable_ref":"sg:material/path-sha256-0b82930e378484f7b84e5834e89e1c153e5d0993b26b38524bfd4153fcfc5438","version_id":"sg:material/path-sha256-0b82930e378484f7b84e5834e89e1c153e5d0993b26b38524bfd4153fcfc5438@sha256:d5a2af1cb445d0be4d0ed0a61f281673e4be81041dc964f8b16e3e7d6284a55e"},{"byte_length":3999,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/viewport-shell/scroll-body-shell.md","schema_version":"2.0","source_sha256":"884fd867f233619f3f94f965d87016eeac6727608dd5c6423c8221687ff31b61","stable_ref":"sg:material/path-sha256-10f553c3d6a39c31ca1a5b8f56db6afb75709d8706d125c6f0d891f46b1f11b4","version_id":"sg:material/path-sha256-10f553c3d6a39c31ca1a5b8f56db6afb75709d8706d125c6f0d891f46b1f11b4@sha256:884fd867f233619f3f94f965d87016eeac6727608dd5c6423c8221687ff31b61"},{"byte_length":3560,"domain":"expression","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"expression/directions/warm-print.md","schema_version":"2.0","source_sha256":"27480a96687e0173caddef5fc8ab3ebec670768ebb365056c68a752944ef59d6","stable_ref":"sg:material/path-sha256-12964187eb48074073f1e42019f579fd946905a2f2ff72f5f59f345f95db13f2","version_id":"sg:material/path-sha256-12964187eb48074073f1e42019f579fd946905a2f2ff72f5f59f345f95db13f2@sha256:27480a96687e0173caddef5fc8ab3ebec670768ebb365056c68a752944ef59d6"},{"byte_length":6556,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"recipes/homepage.md","schema_version":"2.0","source_sha256":"b23555fc59b5899ef414ba697c7aa3b39a3126f48d8b341b98489140f3a6a44f","stable_ref":"sg:material/path-sha256-14e127a7c719ee8494096a98b25b32d26363c1845bddcd912f50f6b1e2b84b46","version_id":"sg:material/path-sha256-14e127a7c719ee8494096a98b25b32d26363c1845bddcd912f50f6b1e2b84b46@sha256:b23555fc59b5899ef414ba697c7aa3b39a3126f48d8b341b98489140f3a6a44f"},{"byte_length":3532,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/overlay-exception/overlay-stack.md","schema_version":"2.0","source_sha256":"ae8d8c8a546802f8bf6d593606b008523874d258914ccf45ed8246094f775581","stable_ref":"sg:material/path-sha256-15dd8f3d84fb50f1442bd8c9732356759849f7d87f1d66b004eeb5d9ea75a4a9","version_id":"sg:material/path-sha256-15dd8f3d84fb50f1442bd8c9732356759849f7d87f1d66b004eeb5d9ea75a4a9@sha256:ae8d8c8a546802f8bf6d593606b008523874d258914ccf45ed8246094f775581"},{"byte_length":901,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/design-rationale.md","schema_version":"2.0","source_sha256":"f2215fa79133af7f7282fff9a2da490d1a5dd58dd3ea0fc56255872268fbd163","stable_ref":"sg:material/path-sha256-162d7fd4521ddaf5ee59166c9cb56d8cbcb7d3b9bacaf9cd75883c1586108369","version_id":"sg:material/path-sha256-162d7fd4521ddaf5ee59166c9cb56d8cbcb7d3b9bacaf9cd75883c1586108369@sha256:f2215fa79133af7f7282fff9a2da490d1a5dd58dd3ea0fc56255872268fbd163"},{"byte_length":3679,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/identity-reset.md","schema_version":"2.0","source_sha256":"f424d605f5cd504a937831188fd947452ebc4bb6c5fe44ef6e9014fce0bac8be","stable_ref":"sg:material/path-sha256-16dc79fa33d7c1b72cfad6e70eea0cccc517223d21aba84552e4c0dd223e1f2d","version_id":"sg:material/path-sha256-16dc79fa33d7c1b72cfad6e70eea0cccc517223d21aba84552e4c0dd223e1f2d@sha256:f424d605f5cd504a937831188fd947452ebc4bb6c5fe44ef6e9014fce0bac8be"},{"byte_length":3529,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/breadcrumb.md","schema_version":"2.0","source_sha256":"9b67e72046ad7b89592deee782903bd549b7790f34eaadb10a812e7d0727b007","stable_ref":"sg:material/path-sha256-16eeb4385f9c3ed3ee536baa50271a5afda69eb267e6e240f45eea88c675c9cc","version_id":"sg:material/path-sha256-16eeb4385f9c3ed3ee536baa50271a5afda69eb267e6e240f45eea88c675c9cc@sha256:9b67e72046ad7b89592deee782903bd549b7790f34eaadb10a812e7d0727b007"},{"byte_length":3510,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/cluster.md","schema_version":"2.0","source_sha256":"dc47e7591b356c0734c530d11e4d650704cb1532cf7d2c0c8f8721563e874df4","stable_ref":"sg:material/path-sha256-176a6bff0fef909def0e8d71cb7c567b867a180ff8ff11dc71f96187e6fb4b75","version_id":"sg:material/path-sha256-176a6bff0fef909def0e8d71cb7c567b867a180ff8ff11dc71f96187e6fb4b75@sha256:dc47e7591b356c0734c530d11e4d650704cb1532cf7d2c0c8f8721563e874df4"},{"byte_length":5948,"domain":"expression","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"expression/direction-brief.md","schema_version":"2.0","source_sha256":"5a9856b3d15dd505b28306bbc3c978884eb2bff8560d241d5635f82f5527954d","stable_ref":"sg:material/path-sha256-19d94985a2bd97733f720f48911dda601f2a53c33fb077b81bb903c966fd2582","version_id":"sg:material/path-sha256-19d94985a2bd97733f720f48911dda601f2a53c33fb077b81bb903c966fd2582@sha256:5a9856b3d15dd505b28306bbc3c978884eb2bff8560d241d5635f82f5527954d"},{"byte_length":935,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/split-sidebar/index.md","schema_version":"2.0","source_sha256":"5cfb5a5586709a5c32f6f01e8d0e768850b57111c0a653363ced0eeddbca4f88","stable_ref":"sg:material/path-sha256-1bbc62c02480ddef71cbe2b8723ae3da595efdfcfcf8f0bbbfd4dad8d417d2a7","version_id":"sg:material/path-sha256-1bbc62c02480ddef71cbe2b8723ae3da595efdfcfcf8f0bbbfd4dad8d417d2a7@sha256:5cfb5a5586709a5c32f6f01e8d0e768850b57111c0a653363ced0eeddbca4f88"},{"byte_length":3799,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/split-sidebar/split-screen.md","schema_version":"2.0","source_sha256":"b4a33c149152eff7ed194fc52c8d24aa82dab8124d8754b029d5e7d2f33ba379","stable_ref":"sg:material/path-sha256-1c3948243f01f30bcd55ac3cb3c9935bce15060224b1837fdf1b3be2684ecc74","version_id":"sg:material/path-sha256-1c3948243f01f30bcd55ac3cb3c9935bce15060224b1837fdf1b3be2684ecc74@sha256:b4a33c149152eff7ed194fc52c8d24aa82dab8124d8754b029d5e7d2f33ba379"},{"byte_length":3381,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/containment/box.md","schema_version":"2.0","source_sha256":"dde71c7e4091814e496631f6be9d82c81f6ce04a78c5f0c2200d826de2f5fc06","stable_ref":"sg:material/path-sha256-1c4c0582a35fac69c8274a72f86ad5075a755d30f0924adbc3ff66fc616d9430","version_id":"sg:material/path-sha256-1c4c0582a35fac69c8274a72f86ad5075a755d30f0924adbc3ff66fc616d9430@sha256:dde71c7e4091814e496631f6be9d82c81f6ce04a78c5f0c2200d826de2f5fc06"},{"byte_length":3504,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/recipes/multi-step-form.md","schema_version":"2.0","source_sha256":"b6d2497c71d5554bb53b2d801ca22049d1d0bea9baf2fd0ca48042e7f927457e","stable_ref":"sg:material/path-sha256-1e7b1b64d3360bd39b33ed0963b76bcfdb60003ba427d51141a1659b8b6d789e","version_id":"sg:material/path-sha256-1e7b1b64d3360bd39b33ed0963b76bcfdb60003ba427d51141a1659b8b6d789e@sha256:b6d2497c71d5554bb53b2d801ca22049d1d0bea9baf2fd0ca48042e7f927457e"},{"byte_length":3470,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/stacking/stack.md","schema_version":"2.0","source_sha256":"70d582b9836476a07a590536daeb94fa5ebb546b122aeaaa60ae21a8ee9fdce6","stable_ref":"sg:material/path-sha256-1f6bb0dc8098df4cb643ddb7941fc7997bfc34e8c4c4ba8b473ebd19b43da69e","version_id":"sg:material/path-sha256-1f6bb0dc8098df4cb643ddb7941fc7997bfc34e8c4c4ba8b473ebd19b43da69e@sha256:70d582b9836476a07a590536daeb94fa5ebb546b122aeaaa60ae21a8ee9fdce6"},{"byte_length":386,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/overlay-exception/index.md","schema_version":"2.0","source_sha256":"a32cdbff417ba8cf4333a15c7799bb1b1907c4334d0bcee052220af46b87973a","stable_ref":"sg:material/path-sha256-1fc22b9f0d7d72c1dcc9b54db927b44a791c091736efbc2dcff08b9f5097f00c","version_id":"sg:material/path-sha256-1fc22b9f0d7d72c1dcc9b54db927b44a791c091736efbc2dcff08b9f5097f00c@sha256:a32cdbff417ba8cf4333a15c7799bb1b1907c4334d0bcee052220af46b87973a"},{"byte_length":7416,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/relation-types.md","schema_version":"2.0","source_sha256":"4f2e601edf167fa435296fca43156845a003d2b680e0e8c13ac0d687b909bdb8","stable_ref":"sg:material/path-sha256-20446da61add8150ac93ec91e23ad403d7f7e4b1b322024a8c488e4324f47533","version_id":"sg:material/path-sha256-20446da61add8150ac93ec91e23ad403d7f7e4b1b322024a8c488e4324f47533@sha256:4f2e601edf167fa435296fca43156845a003d2b680e0e8c13ac0d687b909bdb8"},{"byte_length":6657,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/motion-brief.md","schema_version":"2.0","source_sha256":"cd778561c7e8feb599490afdab15ee103dee8f867aebbf478715ea4ac6029858","stable_ref":"sg:material/path-sha256-205e6fc7f07a049703f1de0d741836c512fdfa12f9e10cf9bf4c75bdba550137","version_id":"sg:material/path-sha256-205e6fc7f07a049703f1de0d741836c512fdfa12f9e10cf9bf4c75bdba550137@sha256:cd778561c7e8feb599490afdab15ee103dee8f867aebbf478715ea4ac6029858"},{"byte_length":4081,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/state-brief.md","schema_version":"2.0","source_sha256":"0a934ac42e29258fada4d9eb3fd5740a460fc7e1464ad12e419441411cd77c25","stable_ref":"sg:material/path-sha256-211ec15ff04d4a7956b90746c4ecf0f0c0abc92590f2bf0cdd55d86715f8f3ab","version_id":"sg:material/path-sha256-211ec15ff04d4a7956b90746c4ecf0f0c0abc92590f2bf0cdd55d86715f8f3ab@sha256:0a934ac42e29258fada4d9eb3fd5740a460fc7e1464ad12e419441411cd77c25"},{"byte_length":2010,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/gates/design-claim.md","schema_version":"2.0","source_sha256":"bdf92087f69f1d55d1d8f5efa8fdc794824bd9f40d794e617e6a06db0a16ef81","stable_ref":"sg:material/path-sha256-21480e86104dfaab3408304f300dc7cc570eab3e747a1a3931785951544f8372","version_id":"sg:material/path-sha256-21480e86104dfaab3408304f300dc7cc570eab3e747a1a3931785951544f8372@sha256:bdf92087f69f1d55d1d8f5efa8fdc794824bd9f40d794e617e6a06db0a16ef81"},{"byte_length":3659,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/centering/super-center.md","schema_version":"2.0","source_sha256":"3c99b76f7332b68a3f9cac1739197c6a90e5dbf3073ff5b5d3ffa4c8fbfab8ee","stable_ref":"sg:material/path-sha256-21ffb3e535a16bcba5817e15c784b9d2500b32cb50f86c1b3c033c652193cc00","version_id":"sg:material/path-sha256-21ffb3e535a16bcba5817e15c784b9d2500b32cb50f86c1b3c033c652193cc00@sha256:3c99b76f7332b68a3f9cac1739197c6a90e5dbf3073ff5b5d3ffa4c8fbfab8ee"},{"byte_length":3551,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/containment/fluid-styles.md","schema_version":"2.0","source_sha256":"7a542227cdfc34577bf52f9ef15cf236e1efda6abaee775330a87f07f863e2be","stable_ref":"sg:material/path-sha256-239a2e2ec1f881ea5ae0e4f852980adaa058a8c7943fe83d8c90d8b51e02abb5","version_id":"sg:material/path-sha256-239a2e2ec1f881ea5ae0e4f852980adaa058a8c7943fe83d8c90d8b51e02abb5@sha256:7a542227cdfc34577bf52f9ef15cf236e1efda6abaee775330a87f07f863e2be"},{"byte_length":3750,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/grid-repetition/ram-grid.md","schema_version":"2.0","source_sha256":"b227b7350b3e8fba4043281abb605910f2f167c43ddeaab76172f0407fa92cbd","stable_ref":"sg:material/path-sha256-23ce75202642f0f8901b6a413fd2a269a70166058d62e90ca4403e7a3b34cf69","version_id":"sg:material/path-sha256-23ce75202642f0f8901b6a413fd2a269a70166058d62e90ca4403e7a3b34cf69@sha256:b227b7350b3e8fba4043281abb605910f2f167c43ddeaab76172f0407fa92cbd"},{"byte_length":3419,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/tab-strip.md","schema_version":"2.0","source_sha256":"6c529ae86986b215e14dbcfe06789253a96e96212e48021c760439fcd293e456","stable_ref":"sg:material/path-sha256-2567793e03725c0bb9b1b4cd1524b38c8240253b4989e3413b7985cfccfb4453","version_id":"sg:material/path-sha256-2567793e03725c0bb9b1b4cd1524b38c8240253b4989e3413b7985cfccfb4453@sha256:6c529ae86986b215e14dbcfe06789253a96e96212e48021c760439fcd293e456"},{"byte_length":3824,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/split-sidebar/list-detail.md","schema_version":"2.0","source_sha256":"fb22883c42fad857775111aa1e083946015153b57d68f382ebe8aa4ad0f2b996","stable_ref":"sg:material/path-sha256-26867cd73e9ea9a732763de098fa0e99861d6bd15deba26359727ef68417e331","version_id":"sg:material/path-sha256-26867cd73e9ea9a732763de098fa0e99861d6bd15deba26359727ef68417e331@sha256:fb22883c42fad857775111aa1e083946015153b57d68f382ebe8aa4ad0f2b996"},{"byte_length":3998,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/split-sidebar/sticky-aside.md","schema_version":"2.0","source_sha256":"3ebd4674f84085d3666a6eddb14a6c5b2f05d3c7c9323677fd97613bca3d0999","stable_ref":"sg:material/path-sha256-27b1e5216a098387ab5e1de9d8997391ae2e8b3388331c221e14ed5946734415","version_id":"sg:material/path-sha256-27b1e5216a098387ab5e1de9d8997391ae2e8b3388331c221e14ed5946734415@sha256:3ebd4674f84085d3666a6eddb14a6c5b2f05d3c7c9323677fd97613bca3d0999"},{"byte_length":8374,"domain":"shared","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"showcase/README.md","schema_version":"2.0","source_sha256":"f05250a9ad410f19c29bc708cac6337d516715b3b07c1400c14b97d526e4f5be","stable_ref":"sg:material/path-sha256-281846f16161d5c019ea40e916753502f3243d2dd016489c0d2f986844d2a930","version_id":"sg:material/path-sha256-281846f16161d5c019ea40e916753502f3243d2dd016489c0d2f986844d2a930@sha256:f05250a9ad410f19c29bc708cac6337d516715b3b07c1400c14b97d526e4f5be"},{"byte_length":2933,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/audit/README.md","schema_version":"2.0","source_sha256":"1ac091e6b67728900181f6985a400178c329a88c5e50386c022c0fa2e5a00180","stable_ref":"sg:material/path-sha256-28cab6b095a7381df5f2c8398bcc8243eea6a1cf8348251ac962b68211971205","version_id":"sg:material/path-sha256-28cab6b095a7381df5f2c8398bcc8243eea6a1cf8348251ac962b68211971205@sha256:1ac091e6b67728900181f6985a400178c329a88c5e50386c022c0fa2e5a00180"},{"byte_length":3900,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/breadcrumbs.md","schema_version":"2.0","source_sha256":"6109d1f94205c5cfc2dce7d82525b51fcf790f63b249e8aaa2eb81e51c349c90","stable_ref":"sg:material/path-sha256-292308d1caaf97ad53fc6486e80fcd6282b090afeb9cd07962d58d6977a0251d","version_id":"sg:material/path-sha256-292308d1caaf97ad53fc6486e80fcd6282b090afeb9cd07962d58d6977a0251d@sha256:6109d1f94205c5cfc2dce7d82525b51fcf790f63b249e8aaa2eb81e51c349c90"},{"byte_length":4191,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/viewport-shell/fixed-sidenav-shell.md","schema_version":"2.0","source_sha256":"838956cdff97dad989acfbf08de6cb162599517ce8251daa5c838f8ce40f4149","stable_ref":"sg:material/path-sha256-29d4e1dee690708b4218d8b195f08e1135f76b279ebaadbafd08aa74286daa28","version_id":"sg:material/path-sha256-29d4e1dee690708b4218d8b195f08e1135f76b279ebaadbafd08aa74286daa28@sha256:838956cdff97dad989acfbf08de6cb162599517ce8251daa5c838f8ce40f4149"},{"byte_length":40616,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/hig-universal-principles.md","schema_version":"2.0","source_sha256":"6064af1b63e9b6f32a77b8b7b729ca9641827a1b611cf113a4291605022a1786","stable_ref":"sg:material/path-sha256-2ae884042bcd6f055bd2731fda849270b07a181f6779497eae86ef38638d26a1","version_id":"sg:material/path-sha256-2ae884042bcd6f055bd2731fda849270b07a181f6779497eae86ef38638d26a1@sha256:6064af1b63e9b6f32a77b8b7b729ca9641827a1b611cf113a4291605022a1786"},{"byte_length":2669,"domain":"expression","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"expression/brand-studies.md","schema_version":"2.0","source_sha256":"8be04985fb569560051cec31dbd684d5265b2d313f727cab41faa859523d4543","stable_ref":"sg:material/path-sha256-2c0b6b915d40dfd7db1d89fd1873592d50f797fafd59381a24a2c7c026eb2bb9","version_id":"sg:material/path-sha256-2c0b6b915d40dfd7db1d89fd1873592d50f797fafd59381a24a2c7c026eb2bb9@sha256:8be04985fb569560051cec31dbd684d5265b2d313f727cab41faa859523d4543"},{"byte_length":5343,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/index.md","schema_version":"2.0","source_sha256":"3ebbbcdb974567b8f88b6b643b617193fee90788e108f9e3ce424475b152ed38","stable_ref":"sg:material/path-sha256-2d8fa130ade135cfa9bc20218ae94270c520bfc08e878f0ecd5bc2c1b4bb1f05","version_id":"sg:material/path-sha256-2d8fa130ade135cfa9bc20218ae94270c520bfc08e878f0ecd5bc2c1b4bb1f05@sha256:3ebbbcdb974567b8f88b6b643b617193fee90788e108f9e3ce424475b152ed38"},{"byte_length":3810,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/split-sidebar/switcher.md","schema_version":"2.0","source_sha256":"df5ae85b149696fc228a5907b4731e9744c2b3aab467b484cc4b6a41c838eda2","stable_ref":"sg:material/path-sha256-2dd9316398e52cf61361bfae39e601e73eb411b74ddc09cadf131183e6c18093","version_id":"sg:material/path-sha256-2dd9316398e52cf61361bfae39e601e73eb411b74ddc09cadf131183e6c18093@sha256:df5ae85b149696fc228a5907b4731e9744c2b3aab467b484cc4b6a41c838eda2"},{"byte_length":4331,"domain":"expression","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"expression/index.md","schema_version":"2.0","source_sha256":"1f3d087620cbd5462e9a1e93ba53b9070f41e9a83781da2479db2eda9b5c001b","stable_ref":"sg:material/path-sha256-2ffc271938d28d26c80537989861f0f28cad60437c491fa47bdbfba71bf73a7d","version_id":"sg:material/path-sha256-2ffc271938d28d26c80537989861f0f28cad60437c491fa47bdbfba71bf73a7d@sha256:1f3d087620cbd5462e9a1e93ba53b9070f41e9a83781da2479db2eda9b5c001b"},{"byte_length":1783,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/sources.md","schema_version":"2.0","source_sha256":"655c4c304f1dae83e56e5f3f19838db7b9681a600b161532cc4389574594fde8","stable_ref":"sg:material/path-sha256-31c57866c230c6e93dd2b4636e6e892eeff33521ef07ed24cde34094c2d9c939","version_id":"sg:material/path-sha256-31c57866c230c6e93dd2b4636e6e892eeff33521ef07ed24cde34094c2d9c939@sha256:655c4c304f1dae83e56e5f3f19838db7b9681a600b161532cc4389574594fde8"},{"byte_length":3007,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"recipes/command-surface.md","schema_version":"2.0","source_sha256":"fe5b07a514df0e69cfe8d04035b7090f97fbe0e12e9c05653075d91f8eff5839","stable_ref":"sg:material/path-sha256-33c5ebfda703b62fe98e750cf800d6a690eb3c5e02c0089d0fd91d987b2b5f8f","version_id":"sg:material/path-sha256-33c5ebfda703b62fe98e750cf800d6a690eb3c5e02c0089d0fd91d987b2b5f8f@sha256:fe5b07a514df0e69cfe8d04035b7090f97fbe0e12e9c05653075d91f8eff5839"},{"byte_length":3899,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/single-owner.md","schema_version":"2.0","source_sha256":"25f8f3471eaa7a1be2ccfbe3ea54030c0a53dbae19a5694cbc47cbeb2b8c3eae","stable_ref":"sg:material/path-sha256-345316bd3aa4f09f3364a213a9f65f88f2a5545b6e206617d4c59e7965aa5b64","version_id":"sg:material/path-sha256-345316bd3aa4f09f3364a213a9f65f88f2a5545b6e206617d4c59e7965aa5b64@sha256:25f8f3471eaa7a1be2ccfbe3ea54030c0a53dbae19a5694cbc47cbeb2b8c3eae"},{"byte_length":3658,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/viewport-shell/sticky-header.md","schema_version":"2.0","source_sha256":"252058c31c8f0dfe39e461bc0da3eb2b92efddef351d145a5c62f3183579719c","stable_ref":"sg:material/path-sha256-3901860520475e0bf9a7a0d9a7684ce518e7f2c96d22f3aefb66fe40c524558d","version_id":"sg:material/path-sha256-3901860520475e0bf9a7a0d9a7684ce518e7f2c96d22f3aefb66fe40c524558d@sha256:252058c31c8f0dfe39e461bc0da3eb2b92efddef351d145a5c62f3183579719c"},{"byte_length":579,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/index.md","schema_version":"2.0","source_sha256":"90f2d5973bf08cfd7ba55523176d8bb76bff441a8a3b9e69c3a520118db3e101","stable_ref":"sg:material/path-sha256-3bf8fac99ec13ef32824ded352565692d56cc7c54e5392b7985df262ba35e760","version_id":"sg:material/path-sha256-3bf8fac99ec13ef32824ded352565692d56cc7c54e5392b7985df262ba35e760@sha256:90f2d5973bf08cfd7ba55523176d8bb76bff441a8a3b9e69c3a520118db3e101"},{"byte_length":3537,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/grid-repetition/dense-grid.md","schema_version":"2.0","source_sha256":"a4617ce7713368f24cca5c71a51d242dce9b651123c3ebe6d45073a10655f4b2","stable_ref":"sg:material/path-sha256-3d9a239e6bc90b85b6d15102c961f1ca0615094fe1df289c6e4d6a418af1801a","version_id":"sg:material/path-sha256-3d9a239e6bc90b85b6d15102c961f1ca0615094fe1df289c6e4d6a418af1801a@sha256:a4617ce7713368f24cca5c71a51d242dce9b651123c3ebe6d45073a10655f4b2"},{"byte_length":4548,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/decision-tree.md","schema_version":"2.0","source_sha256":"6436a8873e5441d46e3bac496b752221f7376c5d43d8e69d1afb8081b04c1f37","stable_ref":"sg:material/path-sha256-40a62d0c8d3666e3383f68652dbcd92841189eb4d3045ccbc5ba51d317faa103","version_id":"sg:material/path-sha256-40a62d0c8d3666e3383f68652dbcd92841189eb4d3045ccbc5ba51d317faa103@sha256:6436a8873e5441d46e3bac496b752221f7376c5d43d8e69d1afb8081b04c1f37"},{"byte_length":11158,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/loading-and-feedback.md","schema_version":"2.0","source_sha256":"e9e486ee640f8de982a82a729e289bdd9bf6075e4345a415f1654d2b00b23042","stable_ref":"sg:material/path-sha256-410c2e3b3955e8908b6400b3650678ff2cd2e02e5153c0d23b8cde41b071f73b","version_id":"sg:material/path-sha256-410c2e3b3955e8908b6400b3650678ff2cd2e02e5153c0d23b8cde41b071f73b@sha256:e9e486ee640f8de982a82a729e289bdd9bf6075e4345a415f1654d2b00b23042"},{"byte_length":873,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"recipes/index.md","schema_version":"2.0","source_sha256":"89729f69e1a879742421b2d583dcf67f8a9a94ed90a198e5b7b9e40b856a404e","stable_ref":"sg:material/path-sha256-44cd370aff03553cea434398290dfe059d49fd316157face88e54035c050b5f5","version_id":"sg:material/path-sha256-44cd370aff03553cea434398290dfe059d49fd316157face88e54035c050b5f5@sha256:89729f69e1a879742421b2d583dcf67f8a9a94ed90a198e5b7b9e40b856a404e"},{"byte_length":5818,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/techniques/scroll-choreography.md","schema_version":"2.0","source_sha256":"1e032f1efa62a7ff55becff803676360269dcf4ed5a8521aa41eca07c83151c4","stable_ref":"sg:material/path-sha256-44f21c1d14d14d5399444d0ed4e14350ae55298c850c276b4064f3dbaf7a2f0e","version_id":"sg:material/path-sha256-44f21c1d14d14d5399444d0ed4e14350ae55298c850c276b4064f3dbaf7a2f0e@sha256:1e032f1efa62a7ff55becff803676360269dcf4ed5a8521aa41eca07c83151c4"},{"byte_length":7646,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/rendering-and-performance.md","schema_version":"2.0","source_sha256":"c3c391f9a51cd072fe576604bf7784a1f983145139cda5e9ac9ec71f508fac52","stable_ref":"sg:material/path-sha256-45b535355571cf368a5986781694bb4023f8531d1a228d9a9fd9e9779830eca8","version_id":"sg:material/path-sha256-45b535355571cf368a5986781694bb4023f8531d1a228d9a9fd9e9779830eca8@sha256:c3c391f9a51cd072fe576604bf7784a1f983145139cda5e9ac9ec71f508fac52"},{"byte_length":2787,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"recipes/dashboard.md","schema_version":"2.0","source_sha256":"4295395763064bf98667539d4be60b2dd6de10b66b51724537c9d227265ca15e","stable_ref":"sg:material/path-sha256-463cfb73f926bbdf90d68b3aee7af299b388384e6b5e51e1c7a5ef2cd33aef83","version_id":"sg:material/path-sha256-463cfb73f926bbdf90d68b3aee7af299b388384e6b5e51e1c7a5ef2cd33aef83@sha256:4295395763064bf98667539d4be60b2dd6de10b66b51724537c9d227265ca15e"},{"byte_length":3629,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/grid-repetition/grid-wrapper.md","schema_version":"2.0","source_sha256":"0d1798a0bad6ea2bf5cdf1028a69728ccc14bba0fac85c874f1f06fa214bb4c7","stable_ref":"sg:material/path-sha256-4a8a96f82fbd1527cc6f7ee248ef7a8ab8d47289a31dfb521f865d49f0376afb","version_id":"sg:material/path-sha256-4a8a96f82fbd1527cc6f7ee248ef7a8ab8d47289a31dfb521f865d49f0376afb@sha256:0d1798a0bad6ea2bf5cdf1028a69728ccc14bba0fac85c874f1f06fa214bb4c7"},{"byte_length":9531,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/native-interaction-contracts.md","schema_version":"2.0","source_sha256":"c2aea704a85fa282e6fd8f397168881679dc91e8dc4128696822cbe9258ce165","stable_ref":"sg:material/path-sha256-4aa1425904ba4d0ad9487734c35da7fc683a52a1f3df71558a59e02cc3f41278","version_id":"sg:material/path-sha256-4aa1425904ba4d0ad9487734c35da7fc683a52a1f3df71558a59e02cc3f41278@sha256:c2aea704a85fa282e6fd8f397168881679dc91e8dc4128696822cbe9258ce165"},{"byte_length":3692,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/id-selection.md","schema_version":"2.0","source_sha256":"4cdbc6af8be61c5b4e157ad4cea3ad1ca4a4a0e8e7e02d97ede16c58a29201d4","stable_ref":"sg:material/path-sha256-4bee6fbd3c1da260c1af18ec783a9ce252cedaf92a1109f66874db434b1873d9","version_id":"sg:material/path-sha256-4bee6fbd3c1da260c1af18ec783a9ce252cedaf92a1109f66874db434b1873d9@sha256:4cdbc6af8be61c5b4e157ad4cea3ad1ca4a4a0e8e7e02d97ede16c58a29201d4"},{"byte_length":7414,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/compatibility-matrix.md","schema_version":"2.0","source_sha256":"c1f9dfe51146061dbc6284b25f4de93051e45240357cbab68ef5815e7074d926","stable_ref":"sg:material/path-sha256-4c2db02298ea0b264c459e4c2b368dc67795c8a301786f1192bb61feb56c1c85","version_id":"sg:material/path-sha256-4c2db02298ea0b264c459e4c2b368dc67795c8a301786f1192bb61feb56c1c85@sha256:c1f9dfe51146061dbc6284b25f4de93051e45240357cbab68ef5815e7074d926"},{"byte_length":3784,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/overlay-exception/imposter.md","schema_version":"2.0","source_sha256":"285a48e7e7c51bc2a0c70bd86218a5329a042eba2df33f903c9f84806812ff88","stable_ref":"sg:material/path-sha256-4c3aeb4771622f79b0f3efdeb40e0f59064925f4bd60e63186452c0a79941a3e","version_id":"sg:material/path-sha256-4c3aeb4771622f79b0f3efdeb40e0f59064925f4bd60e63186452c0a79941a3e@sha256:285a48e7e7c51bc2a0c70bd86218a5329a042eba2df33f903c9f84806812ff88"},{"byte_length":7839,"domain":"expression","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"expression/anti-patterns.md","schema_version":"2.0","source_sha256":"de2f893d0f9ea0c88675df032720d2e5bf5545f87f14d047c826127a91ea927a","stable_ref":"sg:material/path-sha256-4eb9998babec3f232a6d0cff1c533bebecb4975e4dc1c9e7a3ff1c3f71bea48a","version_id":"sg:material/path-sha256-4eb9998babec3f232a6d0cff1c533bebecb4975e4dc1c9e7a3ff1c3f71bea48a@sha256:de2f893d0f9ea0c88675df032720d2e5bf5545f87f14d047c826127a91ea927a"},{"byte_length":3557,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/centering/center.md","schema_version":"2.0","source_sha256":"dbb58e99d0476e4e4405b805ebdd387dc961a10381db41b8cf13ed8a7ae27ba8","stable_ref":"sg:material/path-sha256-4fb5bdea440d75d58bcb66874cdb2930ee9cd5d17768bba1ea95e4c3c547ebd5","version_id":"sg:material/path-sha256-4fb5bdea440d75d58bcb66874cdb2930ee9cd5d17768bba1ea95e4c3c547ebd5@sha256:dbb58e99d0476e4e4405b805ebdd387dc961a10381db41b8cf13ed8a7ae27ba8"},{"byte_length":6061,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/practice-reference.md","schema_version":"2.0","source_sha256":"1096eae09dd6a90ae83c9979728c5774c4242dae68f71ee12e97496c87d0ba2d","stable_ref":"sg:material/path-sha256-50b685f66086b3f2362d97feb7e001bd2f208e6ea33c52174edf66fbe8287265","version_id":"sg:material/path-sha256-50b685f66086b3f2362d97feb7e001bd2f208e6ea33c52174edf66fbe8287265@sha256:1096eae09dd6a90ae83c9979728c5774c4242dae68f71ee12e97496c87d0ba2d"},{"byte_length":4336,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/submitted-snapshot.md","schema_version":"2.0","source_sha256":"7b3057368548cd597c39d2164fca0c67b76006f737c2155e4e7173fc3667f67a","stable_ref":"sg:material/path-sha256-51ccfa0d4ccf164cca0daf967981033c516ec76a50e323645e168b02e382a485","version_id":"sg:material/path-sha256-51ccfa0d4ccf164cca0daf967981033c516ec76a50e323645e168b02e382a485@sha256:7b3057368548cd597c39d2164fca0c67b76006f737c2155e4e7173fc3667f67a"},{"byte_length":3482,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/containment/clamped-card.md","schema_version":"2.0","source_sha256":"b72e950a8a87cec2fda32b2d42e8f7f40ae1e026cdb70d7b4e62f29bbfad64f8","stable_ref":"sg:material/path-sha256-52157f6d777be20078f71c3c850955175151fdbe04fad86368b8f0e382280631","version_id":"sg:material/path-sha256-52157f6d777be20078f71c3c850955175151fdbe04fad86368b8f0e382280631@sha256:b72e950a8a87cec2fda32b2d42e8f7f40ae1e026cdb70d7b4e62f29bbfad64f8"},{"byte_length":7878,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"consumer-reference/contract.md","schema_version":"2.0","source_sha256":"b914920989ff2ce08ebc67fa3167d0da766c260c93f03257a9144c6093ff6713","stable_ref":"sg:material/path-sha256-52494ee56bf5c837ead0782244d579ea0aba9e63e95a02c10f6d0b566e4d62d9","version_id":"sg:material/path-sha256-52494ee56bf5c837ead0782244d579ea0aba9e63e95a02c10f6d0b566e4d62d9@sha256:b914920989ff2ce08ebc67fa3167d0da766c260c93f03257a9144c6093ff6713"},{"byte_length":4575,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/tabs-and-segmented-controls.md","schema_version":"2.0","source_sha256":"bd36bc0f163e32de9cbdc6c849634c14e5f4696dd44022e65598e1f8185c6a8c","stable_ref":"sg:material/path-sha256-53d9287acab01ba05c7dc039e032e1fa61ab0326c2271979b2f6e1152ecabd5a","version_id":"sg:material/path-sha256-53d9287acab01ba05c7dc039e032e1fa61ab0326c2271979b2f6e1152ecabd5a@sha256:bd36bc0f163e32de9cbdc6c849634c14e5f4696dd44022e65598e1f8185c6a8c"},{"byte_length":3752,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/decision-tree.md","schema_version":"2.0","source_sha256":"4feeea32ea45c8989ecb78ccb1f127a8e2973de3057d02a5ea0b9ee2865f64ef","stable_ref":"sg:material/path-sha256-547df34d0477c66fac73a70d2dbf90923f9f1ca6cbf822396b2e441d9354cab8","version_id":"sg:material/path-sha256-547df34d0477c66fac73a70d2dbf90923f9f1ca6cbf822396b2e441d9354cab8@sha256:4feeea32ea45c8989ecb78ccb1f127a8e2973de3057d02a5ea0b9ee2865f64ef"},{"byte_length":4175,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/verification.md","schema_version":"2.0","source_sha256":"a0e0a8b667d4fc6538f3bc15baa087e3509b67570a0f7aaaffe7dc0a1cc3f5a9","stable_ref":"sg:material/path-sha256-54fe3380e00f19e72750d1d41510fb588053bb3ba371c6535550da1204ed939d","version_id":"sg:material/path-sha256-54fe3380e00f19e72750d1d41510fb588053bb3ba371c6535550da1204ed939d@sha256:a0e0a8b667d4fc6538f3bc15baa087e3509b67570a0f7aaaffe7dc0a1cc3f5a9"},{"byte_length":7671,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/token-semantics.md","schema_version":"2.0","source_sha256":"6cd480a70c70d69790b41153c322550830d472d7e3a2234d28cf646c71921137","stable_ref":"sg:material/path-sha256-58d4ab2bff42a3753aaa8d15a841388d5a1749a8c224381ad6501c50247e7ad8","version_id":"sg:material/path-sha256-58d4ab2bff42a3753aaa8d15a841388d5a1749a8c224381ad6501c50247e7ad8@sha256:6cd480a70c70d69790b41153c322550830d472d7e3a2234d28cf646c71921137"},{"byte_length":8606,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/search-metadata-polyhierarchy.md","schema_version":"2.0","source_sha256":"53ea6fddbf9c446a2b35ca6d975200c274ba3a713a2298ff62c8253d6c8a49d7","stable_ref":"sg:material/path-sha256-59a41c8893a1ad96d4b5abe1cfb6e381273ce32030b84b06cdbd2ac8be24dc74","version_id":"sg:material/path-sha256-59a41c8893a1ad96d4b5abe1cfb6e381273ce32030b84b06cdbd2ac8be24dc74@sha256:53ea6fddbf9c446a2b35ca6d975200c274ba3a713a2298ff62c8253d6c8a49d7"},{"byte_length":3554,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/grid-repetition/columns.md","schema_version":"2.0","source_sha256":"6c4c0300bde15481cb5767119997ba41fe2af2751d0e829a1b4803a4108e11b0","stable_ref":"sg:material/path-sha256-5a76c5ad4c7daff2cbf3fbf8d8968f56204322f508b999f77e87bcbe6274a8de","version_id":"sg:material/path-sha256-5a76c5ad4c7daff2cbf3fbf8d8968f56204322f508b999f77e87bcbe6274a8de@sha256:6c4c0300bde15481cb5767119997ba41fe2af2751d0e829a1b4803a4108e11b0"},{"byte_length":876,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/tokens.md","schema_version":"2.0","source_sha256":"9f6849985944fea6c660c6ce8f1a962b1b3fe4aa195e72ef2d2293b27fac80f0","stable_ref":"sg:material/path-sha256-5e265c863940f92cadc3da208c4c09c4aacd7da3425332edc401bbb461383e30","version_id":"sg:material/path-sha256-5e265c863940f92cadc3da208c4c09c4aacd7da3425332edc401bbb461383e30@sha256:9f6849985944fea6c660c6ce8f1a962b1b3fe4aa195e72ef2d2293b27fac80f0"},{"byte_length":537,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/containment/index.md","schema_version":"2.0","source_sha256":"93635d8fec49e448550ac671d0fe2510ecc017467ff79203bf10bc3e9b32a9d4","stable_ref":"sg:material/path-sha256-5e7498d507fe35d8607873d31efa80b8e4634fa59aa68fdb3cc10fcd99df20c6","version_id":"sg:material/path-sha256-5e7498d507fe35d8607873d31efa80b8e4634fa59aa68fdb3cc10fcd99df20c6@sha256:93635d8fec49e448550ac671d0fe2510ecc017467ff79203bf10bc3e9b32a9d4"},{"byte_length":3644,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/derived-state.md","schema_version":"2.0","source_sha256":"2d5f55c7d030a3d2c6ce430149f67d676b91f0e254330f49c4a6b7032ffd3385","stable_ref":"sg:material/path-sha256-6343ea5cf0fb7dec72847ffb6dc5c58e122fcdc4c20742e1971fbd20e0cfa926","version_id":"sg:material/path-sha256-6343ea5cf0fb7dec72847ffb6dc5c58e122fcdc4c20742e1971fbd20e0cfa926@sha256:2d5f55c7d030a3d2c6ce430149f67d676b91f0e254330f49c4a6b7032ffd3385"},{"byte_length":3779,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/deconstructed-pancake.md","schema_version":"2.0","source_sha256":"328fba775c878c602dc7c207a2765b8b133a68f864750c5ffff48a08db4324ed","stable_ref":"sg:material/path-sha256-651d978327dca78d036202b232058a85e240ada94d07dd7461bc894f9f83e5e2","version_id":"sg:material/path-sha256-651d978327dca78d036202b232058a85e240ada94d07dd7461bc894f9f83e5e2@sha256:328fba775c878c602dc7c207a2765b8b133a68f864750c5ffff48a08db4324ed"},{"byte_length":4435,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/input-masks.md","schema_version":"2.0","source_sha256":"34fd0ab0279b44176812eda06620edd82e8026c082110e794c7eb2b290403d77","stable_ref":"sg:material/path-sha256-651fbe48b8bbaa46dbfe3725c23a58e9d5018735f16320c973e7f90399c388d2","version_id":"sg:material/path-sha256-651fbe48b8bbaa46dbfe3725c23a58e9d5018735f16320c973e7f90399c388d2@sha256:34fd0ab0279b44176812eda06620edd82e8026c082110e794c7eb2b290403d77"},{"byte_length":3815,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/split-sidebar/main-with-rail.md","schema_version":"2.0","source_sha256":"270bde834f26f1813e8ace38adf3d5c3f5bc2b0da8c3f64eb7a7bc49984ae571","stable_ref":"sg:material/path-sha256-653b926534bf6d8d074f03173f13f475bada8dfa566852e272470fc17b8e58d4","version_id":"sg:material/path-sha256-653b926534bf6d8d074f03173f13f475bada8dfa566852e272470fc17b8e58d4@sha256:270bde834f26f1813e8ace38adf3d5c3f5bc2b0da8c3f64eb7a7bc49984ae571"},{"byte_length":4344,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/unsaved-navigation.md","schema_version":"2.0","source_sha256":"87e4a1bc122f2695584216ed22c5dfa68ce2c43a0aaba0b6a2c594c9da89839f","stable_ref":"sg:material/path-sha256-66ac94795676511486afc468bb8bc4d628e81a1dd24cdcc3fbc76eaa9455113e","version_id":"sg:material/path-sha256-66ac94795676511486afc468bb8bc4d628e81a1dd24cdcc3fbc76eaa9455113e@sha256:87e4a1bc122f2695584216ed22c5dfa68ce2c43a0aaba0b6a2c594c9da89839f"},{"byte_length":4020,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/split-sidebar/media-object.md","schema_version":"2.0","source_sha256":"977d24a5013e7d22cff6e67c6427ea00caee356358350138870e67deb885a7c6","stable_ref":"sg:material/path-sha256-69e5cbcca6fba542020d47eeb31222d719c39624ec41749d591d17aa175c5f3a","version_id":"sg:material/path-sha256-69e5cbcca6fba542020d47eeb31222d719c39624ec41749d591d17aa175c5f3a@sha256:977d24a5013e7d22cff6e67c6427ea00caee356358350138870e67deb885a7c6"},{"byte_length":4259,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/optimistic-overlay.md","schema_version":"2.0","source_sha256":"09acfc29370aba5abb3e6c486e12db02032221364892edb4008a736fabac102c","stable_ref":"sg:material/path-sha256-69ee1cefe0e4422f7930fb23d620939697bd30ad715dc14c206fa694c545f380","version_id":"sg:material/path-sha256-69ee1cefe0e4422f7930fb23d620939697bd30ad715dc14c206fa694c545f380@sha256:09acfc29370aba5abb3e6c486e12db02032221364892edb4008a736fabac102c"},{"byte_length":2767,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/index.md","schema_version":"2.0","source_sha256":"94afd27017a34fefd8ee768aac3b1ab7a4e3015794d669de142827c3046609f5","stable_ref":"sg:material/path-sha256-6c243b28fd8f4564a96217bcceabc75a5651ecd21ac41abfbdd4716adc60aa72","version_id":"sg:material/path-sha256-6c243b28fd8f4564a96217bcceabc75a5651ecd21ac41abfbdd4716adc60aa72@sha256:94afd27017a34fefd8ee768aac3b1ab7a4e3015794d669de142827c3046609f5"},{"byte_length":8716,"domain":"shared","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"consumer-reference/agent-native/README.md","schema_version":"2.0","source_sha256":"dedd72f4beb0f59e9d1c1db79f9288860d0559014ce8a1d24acf116f39cf6220","stable_ref":"sg:material/path-sha256-6cda345129c13188719d0116beef1e7d8e672f951f21295bc3b2ccf490a4a81d","version_id":"sg:material/path-sha256-6cda345129c13188719d0116beef1e7d8e672f951f21295bc3b2ccf490a4a81d@sha256:dedd72f4beb0f59e9d1c1db79f9288860d0559014ce8a1d24acf116f39cf6220"},{"byte_length":4658,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/autocomplete.md","schema_version":"2.0","source_sha256":"cfc484f6c5d60b880bdbf924d8742819fb83eba00ffadfa71612ab2f2bcf1e4d","stable_ref":"sg:material/path-sha256-6e66842c353df325f3f7f79027af79b161dcf800c8f4d46775f6b3337822de4b","version_id":"sg:material/path-sha256-6e66842c353df325f3f7f79027af79b161dcf800c8f4d46775f6b3337822de4b@sha256:cfc484f6c5d60b880bdbf924d8742819fb83eba00ffadfa71612ab2f2bcf1e4d"},{"byte_length":4479,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/empty-states.md","schema_version":"2.0","source_sha256":"7681124d83ef96f3564934a9266a8184c55a32b39ea98a2dfe63ad100f5e9b2b","stable_ref":"sg:material/path-sha256-6ef88d22b04f39b1bbe9232f69ac80e3c786f83703d981ec69d6aabc197e091b","version_id":"sg:material/path-sha256-6ef88d22b04f39b1bbe9232f69ac80e3c786f83703d981ec69d6aabc197e091b@sha256:7681124d83ef96f3564934a9266a8184c55a32b39ea98a2dfe63ad100f5e9b2b"},{"byte_length":34685,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"log.md","schema_version":"2.0","source_sha256":"63d31bb961f57eb975667bf5e36b72ded24fb5e783c1abd21d531388e08eaa8b","stable_ref":"sg:material/path-sha256-7204c0a4f935b2563fdb9fcf74d71a2e8621bf1b53f9da1b6eab41597a5fbc38","version_id":"sg:material/path-sha256-7204c0a4f935b2563fdb9fcf74d71a2e8621bf1b53f9da1b6eab41597a5fbc38@sha256:63d31bb961f57eb975667bf5e36b72ded24fb5e783c1abd21d531388e08eaa8b"},{"byte_length":3762,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/reel.md","schema_version":"2.0","source_sha256":"44b1a33c83c0433a90f0240b3237b6aa12b756307206705173626321aaab8b2e","stable_ref":"sg:material/path-sha256-72616dfa2b53176365ef81dd6954260a8a96051f3c47100505ece70816871c11","version_id":"sg:material/path-sha256-72616dfa2b53176365ef81dd6954260a8a96051f3c47100505ece70816871c11@sha256:44b1a33c83c0433a90f0240b3237b6aa12b756307206705173626321aaab8b2e"},{"byte_length":3811,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/viewport-shell/sticky-footer.md","schema_version":"2.0","source_sha256":"4afbdb3d9a42b133581cede6dad6f8dbcb25d1a99d0129567bd921164945e81b","stable_ref":"sg:material/path-sha256-7412ca94f2f7e6e9b81ec40ccbaee7ccab5a773e48d7fc14055baccd8d059d42","version_id":"sg:material/path-sha256-7412ca94f2f7e6e9b81ec40ccbaee7ccab5a773e48d7fc14055baccd8d059d42@sha256:4afbdb3d9a42b133581cede6dad6f8dbcb25d1a99d0129567bd921164945e81b"},{"byte_length":7267,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/typography-semantics.md","schema_version":"2.0","source_sha256":"447b1a05e9c0be605785c6d885c5fc68bbbd47d96780afa1e3780abffabbbdab","stable_ref":"sg:material/path-sha256-76663508bb4bf3e2ffc62ff5d0622bf17ee6c0420f11338f1837e981e6379134","version_id":"sg:material/path-sha256-76663508bb4bf3e2ffc62ff5d0622bf17ee6c0420f11338f1837e981e6379134@sha256:447b1a05e9c0be605785c6d885c5fc68bbbd47d96780afa1e3780abffabbbdab"},{"byte_length":4985,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/android-interaction.md","schema_version":"2.0","source_sha256":"a2178943bc6265f7c35d58b5a48d7646b7a4f04aaad073382dc9c84783066332","stable_ref":"sg:material/path-sha256-788bb5b0cd715989c0a984075c80a1d185b207deda5b50f58280030d928a5f89","version_id":"sg:material/path-sha256-788bb5b0cd715989c0a984075c80a1d185b207deda5b50f58280030d928a5f89@sha256:a2178943bc6265f7c35d58b5a48d7646b7a4f04aaad073382dc9c84783066332"},{"byte_length":14420,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"guides/documentation-mode-taxonomy.md","schema_version":"2.0","source_sha256":"872594fdfa78c4196bad9eae4aa6bab3cde82b4f73803ef049a60c6a7db329c2","stable_ref":"sg:material/path-sha256-78dcee9e03982b489be85a59bb522877c94bb01b2624af09e5ef5e3bc3bbbffc","version_id":"sg:material/path-sha256-78dcee9e03982b489be85a59bb522877c94bb01b2624af09e5ef5e3bc3bbbffc@sha256:872594fdfa78c4196bad9eae4aa6bab3cde82b4f73803ef049a60c6a7db329c2"},{"byte_length":2863,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"recipes/list-detail.md","schema_version":"2.0","source_sha256":"c0b56f86ce0a7e4e46866ac8058a2cfecba1a4c5874ca642f9c67eed613e703b","stable_ref":"sg:material/path-sha256-7b47a26ca3030528440849547a9a39dcd489581ebdb0b3c85f3204cf066acaa8","version_id":"sg:material/path-sha256-7b47a26ca3030528440849547a9a39dcd489581ebdb0b3c85f3204cf066acaa8@sha256:c0b56f86ce0a7e4e46866ac8058a2cfecba1a4c5874ca642f9c67eed613e703b"},{"byte_length":3866,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/stacking/line-up.md","schema_version":"2.0","source_sha256":"d33390cbcf5266b6dd7bf23b25fc09be946b14d62144f5d97497a1a423991afb","stable_ref":"sg:material/path-sha256-7c2f9831fd891304724438057614dab34b1fff1da4eb2f0d86803115be5a3ce5","version_id":"sg:material/path-sha256-7c2f9831fd891304724438057614dab34b1fff1da4eb2f0d86803115be5a3ce5@sha256:d33390cbcf5266b6dd7bf23b25fc09be946b14d62144f5d97497a1a423991afb"},{"byte_length":5759,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/review-workflow.md","schema_version":"2.0","source_sha256":"a627c6e2f01ea7f1bbddfcc40227c90e59d20d92e7eded46d3460195ed183b46","stable_ref":"sg:material/path-sha256-7df8e54fd5935c4a2a9aace117d43253e7c0fe32448fd31984a531a134192a83","version_id":"sg:material/path-sha256-7df8e54fd5935c4a2a9aace117d43253e7c0fe32448fd31984a531a134192a83@sha256:a627c6e2f01ea7f1bbddfcc40227c90e59d20d92e7eded46d3460195ed183b46"},{"byte_length":2698,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"recipes/form-flow.md","schema_version":"2.0","source_sha256":"b87cbbf4025b6d1f063811eafd0ecf579b044c5976160ec18cfd5ff3e487d2ce","stable_ref":"sg:material/path-sha256-7e60233e663192c6172a4cebabf93da3b047c42bbaddee206fa27644d8d821e9","version_id":"sg:material/path-sha256-7e60233e663192c6172a4cebabf93da3b047c42bbaddee206fa27644d8d821e9@sha256:b87cbbf4025b6d1f063811eafd0ecf579b044c5976160ec18cfd5ff3e487d2ce"},{"byte_length":8711,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"guides/vocabulary.md","schema_version":"2.0","source_sha256":"4e60e95b5fe42ad3b6cfc945ae1657002bda71d32aa852090df614b6bfe99535","stable_ref":"sg:material/path-sha256-7ec7a08ac14b5af0def43c817f1b32765f93312bb997e17663313c0fd4516a1f","version_id":"sg:material/path-sha256-7ec7a08ac14b5af0def43c817f1b32765f93312bb997e17663313c0fd4516a1f@sha256:4e60e95b5fe42ad3b6cfc945ae1657002bda71d32aa852090df614b6bfe99535"},{"byte_length":8291,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/text-input-and-internationalization.md","schema_version":"2.0","source_sha256":"5cfaf59ee885f7b63019e1ea45b9b743f28fc01dc3a4d29fe27d2203a814ddd9","stable_ref":"sg:material/path-sha256-7f4a10a0bc33622b05712eaa572846f13785ecc393a5f752ff744e048a8fb139","version_id":"sg:material/path-sha256-7f4a10a0bc33622b05712eaa572846f13785ecc393a5f752ff744e048a8fb139@sha256:5cfaf59ee885f7b63019e1ea45b9b743f28fc01dc3a4d29fe27d2203a814ddd9"},{"byte_length":5954,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"guides/decision-tree.md","schema_version":"2.0","source_sha256":"8990ba5fe40b4eb1f5da24522cfbd612660584419aa2f7c62229d13f036427fb","stable_ref":"sg:material/path-sha256-7fada8e2c9a6ab17c122f51121605bc9d4c64c9a7ef60d946813129f91474016","version_id":"sg:material/path-sha256-7fada8e2c9a6ab17c122f51121605bc9d4c64c9a7ef60d946813129f91474016@sha256:8990ba5fe40b4eb1f5da24522cfbd612660584419aa2f7c62229d13f036427fb"},{"byte_length":6236,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/claim-records/design-terminology-domain-scope.md","schema_version":"2.0","source_sha256":"33fba7c68d9edd94bf5775ea87b30736038864d20aea8ffd00bd156343d6fcc7","stable_ref":"sg:material/path-sha256-81ac6c1074bdefbb95d68ecad0fd72b45835340e0f6b3353a0d2eb2bb30d3c63","version_id":"sg:material/path-sha256-81ac6c1074bdefbb95d68ecad0fd72b45835340e0f6b3353a0d2eb2bb30d3c63@sha256:33fba7c68d9edd94bf5775ea87b30736038864d20aea8ffd00bd156343d6fcc7"},{"byte_length":7930,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"guides/layout-brief.md","schema_version":"2.0","source_sha256":"0e87d9d8f51ab6f3960b8e160abd9663be0d501e801a3184686b27c9a1debbf5","stable_ref":"sg:material/path-sha256-8305d3db8a3a860213c04b8cef5a4ed463a109f558be8df51ff1c5af21d749e1","version_id":"sg:material/path-sha256-8305d3db8a3a860213c04b8cef5a4ed463a109f558be8df51ff1c5af21d749e1@sha256:0e87d9d8f51ab6f3960b8e160abd9663be0d501e801a3184686b27c9a1debbf5"},{"byte_length":5102,"domain":"expression","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"expression/techniques/webgl-hero.md","schema_version":"2.0","source_sha256":"c314a8819c9d90a78003353c4ba6d5520f9e27e42da74fb76b64239ccd3d5822","stable_ref":"sg:material/path-sha256-83ef92fd245a0c1167b97e7655b19ff47b460467e205410397f1e43ad0bbe48f","version_id":"sg:material/path-sha256-83ef92fd245a0c1167b97e7655b19ff47b460467e205410397f1e43ad0bbe48f@sha256:c314a8819c9d90a78003353c4ba6d5520f9e27e42da74fb76b64239ccd3d5822"},{"byte_length":8203,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/pattern-contract-audit.md","schema_version":"2.0","source_sha256":"35926d5a3313f1918035ae906844722bbe56c7494eff9e5b22a2306a681893af","stable_ref":"sg:material/path-sha256-871ee653f2589835e85184dba2e5ef403fc064d0d49a2b2b85f0b8996d351fc6","version_id":"sg:material/path-sha256-871ee653f2589835e85184dba2e5ef403fc064d0d49a2b2b85f0b8996d351fc6@sha256:35926d5a3313f1918035ae906844722bbe56c7494eff9e5b22a2306a681893af"},{"byte_length":12032,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"guides/webpage-generation-workflow.md","schema_version":"2.0","source_sha256":"f6037714f19db4cc4d786def3e5702249119873d11730ec9aa45dec627d5788c","stable_ref":"sg:material/path-sha256-87436c736fec1b7b05f6f0a824b06c852e9295daca92298163e02024fbb0451b","version_id":"sg:material/path-sha256-87436c736fec1b7b05f6f0a824b06c852e9295daca92298163e02024fbb0451b@sha256:f6037714f19db4cc4d786def3e5702249119873d11730ec9aa45dec627d5788c"},{"byte_length":3780,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/media-fit/frame.md","schema_version":"2.0","source_sha256":"0b091f1ac7ba60e816bf1772fbd171c8aab7f410b9929f0e4f3d6bdc9c250f9c","stable_ref":"sg:material/path-sha256-882d5f2d004ba4375887b0489d4c452e3a6b3cfaea23561ba59e4e56821da256","version_id":"sg:material/path-sha256-882d5f2d004ba4375887b0489d4c452e3a6b3cfaea23561ba59e4e56821da256@sha256:0b091f1ac7ba60e816bf1772fbd171c8aab7f410b9929f0e4f3d6bdc9c250f9c"},{"byte_length":3470,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/stacking/feed.md","schema_version":"2.0","source_sha256":"4fe1deb3e8312bddc8b4d03230916ac6eb84e6663fa8464635d8d2f3a8b60162","stable_ref":"sg:material/path-sha256-88b6e0985d823e16fad9888dd2133bb5e3c2a2203e3a1623a705ac883ea4a00c","version_id":"sg:material/path-sha256-88b6e0985d823e16fad9888dd2133bb5e3c2a2203e3a1623a705ac883ea4a00c@sha256:4fe1deb3e8312bddc8b4d03230916ac6eb84e6663fa8464635d8d2f3a8b60162"},{"byte_length":936,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/index.md","schema_version":"2.0","source_sha256":"973dabb4a682d02c0a60d611ae73c2b531f38fb2a3e3d2682f37a385c3f2f726","stable_ref":"sg:material/path-sha256-8a81d81ebc22075986a7fe5af4720c2779c2a456382fc0a3e74c1bfc8bb0f958","version_id":"sg:material/path-sha256-8a81d81ebc22075986a7fe5af4720c2779c2a456382fc0a3e74c1bfc8bb0f958@sha256:973dabb4a682d02c0a60d611ae73c2b531f38fb2a3e3d2682f37a385c3f2f726"},{"byte_length":2939,"domain":"expression","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"expression/techniques/grain-and-texture.md","schema_version":"2.0","source_sha256":"917f9bd13d81dc487be156b116a7d74910ea22b1a701ddc3ab5ad0d38cb6318b","stable_ref":"sg:material/path-sha256-8ab82d47e71b49f0eb23b47a0b178576010f09a36c77e8c1778c8a27e2a55d5f","version_id":"sg:material/path-sha256-8ab82d47e71b49f0eb23b47a0b178576010f09a36c77e8c1778c8a27e2a55d5f@sha256:917f9bd13d81dc487be156b116a7d74910ea22b1a701ddc3ab5ad0d38cb6318b"},{"byte_length":3959,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/single-flight.md","schema_version":"2.0","source_sha256":"978d0ff2e72ad37e390dbce00af30277e199d28f188cfffdd4a69cbbaf5efa28","stable_ref":"sg:material/path-sha256-907a9bd75779ab46cbb0ce42d79067d5daa9f030bd644bfe350fe37cf645c816","version_id":"sg:material/path-sha256-907a9bd75779ab46cbb0ce42d79067d5daa9f030bd644bfe350fe37cf645c816@sha256:978d0ff2e72ad37e390dbce00af30277e199d28f188cfffdd4a69cbbaf5efa28"},{"byte_length":3468,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/media-fit/icon-frame.md","schema_version":"2.0","source_sha256":"1c21b23a87625bb8d0f818ddc76f0d3b0e4c5b3491711fa891d090ef65e9d9f5","stable_ref":"sg:material/path-sha256-9100c52308320464deed2d7e13eb9857e485784f12f2dc1de28e8b73bc8f936b","version_id":"sg:material/path-sha256-9100c52308320464deed2d7e13eb9857e485784f12f2dc1de28e8b73bc8f936b@sha256:1c21b23a87625bb8d0f818ddc76f0d3b0e4c5b3491711fa891d090ef65e9d9f5"},{"byte_length":8158,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/apple-interaction.md","schema_version":"2.0","source_sha256":"d59726ca8d19fd36e58237246e090bd96a4bc92161606665794e8d78c5d9a4b2","stable_ref":"sg:material/path-sha256-9247a878dcd0a0977374938c50eeb9a622ad6203847c1169beaf81d0493ebb5b","version_id":"sg:material/path-sha256-9247a878dcd0a0977374938c50eeb9a622ad6203847c1169beaf81d0493ebb5b@sha256:d59726ca8d19fd36e58237246e090bd96a4bc92161606665794e8d78c5d9a4b2"},{"byte_length":3530,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/wrap-row.md","schema_version":"2.0","source_sha256":"37dffc31f990bd363bbd8080865f165d9549b29d5ab954b515885e0fa6ec693d","stable_ref":"sg:material/path-sha256-94d8cf97bb7801865552f7d2b317b556ed6b643d53b73fad134de89186263585","version_id":"sg:material/path-sha256-94d8cf97bb7801865552f7d2b317b556ed6b643d53b73fad134de89186263585@sha256:37dffc31f990bd363bbd8080865f165d9549b29d5ab954b515885e0fa6ec693d"},{"byte_length":2502,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/families.md","schema_version":"2.0","source_sha256":"0e80ebefdc5a7c266c46f48342a9c6389eb5390d5f8c0f6f162f852c4b596690","stable_ref":"sg:material/path-sha256-956ab860e593d435b6682540b04365917b3736deb47207b5812065776734de0b","version_id":"sg:material/path-sha256-956ab860e593d435b6682540b04365917b3736deb47207b5812065776734de0b@sha256:0e80ebefdc5a7c266c46f48342a9c6389eb5390d5f8c0f6f162f852c4b596690"},{"byte_length":3777,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/badge-list.md","schema_version":"2.0","source_sha256":"035c32771ec21eddb644f1837182312fb2a90349456a1ac4007036a74c27dc06","stable_ref":"sg:material/path-sha256-96fc7d48dad3399ab0cbedfdf8cb508b1732f57dc96cd15911e50a3a1654c9b1","version_id":"sg:material/path-sha256-96fc7d48dad3399ab0cbedfdf8cb508b1732f57dc96cd15911e50a3a1654c9b1@sha256:035c32771ec21eddb644f1837182312fb2a90349456a1ac4007036a74c27dc06"},{"byte_length":4540,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/url-state.md","schema_version":"2.0","source_sha256":"888db9f0d109cb14ecb8b9c8433a5ffaaf9943c4bce18243fc995ef5bbec0fdc","stable_ref":"sg:material/path-sha256-97087064e2cbb26f2f155ff3f5a1813f3213cc5b9f0f56425e1c49f8bd5101a7","version_id":"sg:material/path-sha256-97087064e2cbb26f2f155ff3f5a1813f3213cc5b9f0f56425e1c49f8bd5101a7@sha256:888db9f0d109cb14ecb8b9c8433a5ffaaf9943c4bce18243fc995ef5bbec0fdc"},{"byte_length":952,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/visual-qa.md","schema_version":"2.0","source_sha256":"9fdfd9acdcd4fefd4f2d3ef51ba6170e3235d4ae97cc6c739a0f1123e1825f74","stable_ref":"sg:material/path-sha256-970cc2193de22b50bd91099cd6f8e5f52069ccd3360306d17e6eacf4ed1343ae","version_id":"sg:material/path-sha256-970cc2193de22b50bd91099cd6f8e5f52069ccd3360306d17e6eacf4ed1343ae@sha256:9fdfd9acdcd4fefd4f2d3ef51ba6170e3235d4ae97cc6c739a0f1123e1825f74"},{"byte_length":9489,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"recipes/primitive-to-recipe-matrix.md","schema_version":"2.0","source_sha256":"0e8b3b90651c8820a0c0463c32bf410e40abb7503a26e9c90b1fdb456d4ad7b3","stable_ref":"sg:material/path-sha256-99427f2ded107b0d7be95e3a768ac836b917b22c8736fb7f31028b33a333836d","version_id":"sg:material/path-sha256-99427f2ded107b0d7be95e3a768ac836b917b22c8736fb7f31028b33a333836d@sha256:0e8b3b90651c8820a0c0463c32bf410e40abb7503a26e9c90b1fdb456d4ad7b3"},{"byte_length":3789,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/split-sidebar/supporting-pane.md","schema_version":"2.0","source_sha256":"d717640fd0cafac150c6a435398fd44881b593aa2420ad269f305987c2d1d59f","stable_ref":"sg:material/path-sha256-9a82e011fc565919a7334610d427c1ec662e2b89034c6da9a2b135dc398444da","version_id":"sg:material/path-sha256-9a82e011fc565919a7334610d427c1ec662e2b89034c6da9a2b135dc398444da@sha256:d717640fd0cafac150c6a435398fd44881b593aa2420ad269f305987c2d1d59f"},{"byte_length":3375,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/recipes/settings-save.md","schema_version":"2.0","source_sha256":"dd73d8df3d9badf82901f69e088a4d79ccfd3104bb3106aab4abf3fe0afdf975","stable_ref":"sg:material/path-sha256-9b304ea69dfb16383cde4acce499dc7a6774b097ecdb4565f697e52e6c9675ad","version_id":"sg:material/path-sha256-9b304ea69dfb16383cde4acce499dc7a6774b097ecdb4565f697e52e6c9675ad@sha256:dd73d8df3d9badf82901f69e088a4d79ccfd3104bb3106aab4abf3fe0afdf975"},{"byte_length":4994,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/source-kinds.md","schema_version":"2.0","source_sha256":"8280fb26d7cd423c4da04cc99ffbd6df1463724b1bfce58c8719be267d7de860","stable_ref":"sg:material/path-sha256-9bf12d243f458c4641241baed05117806d5865bf05115ebbb49ac44f4f349f4f","version_id":"sg:material/path-sha256-9bf12d243f458c4641241baed05117806d5865bf05115ebbb49ac44f4f349f4f@sha256:8280fb26d7cd423c4da04cc99ffbd6df1463724b1bfce58c8719be267d7de860"},{"byte_length":3723,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/viewport-shell/panel-layout.md","schema_version":"2.0","source_sha256":"f75ed9738c2059de8648d57193bdfea693d83db690ad0f62b1d7d6eaf2c139eb","stable_ref":"sg:material/path-sha256-9c016feea05fe406dddaf432e9137d8d56c71df33fb77450e538d21c9871e85f","version_id":"sg:material/path-sha256-9c016feea05fe406dddaf432e9137d8d56c71df33fb77450e538d21c9871e85f@sha256:f75ed9738c2059de8648d57193bdfea693d83db690ad0f62b1d7d6eaf2c139eb"},{"byte_length":9580,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/input-and-focus.md","schema_version":"2.0","source_sha256":"d4ca53a9f63619354b4ca0977f013cc7bf22407a3a51e764f71ac24b8ca1eb38","stable_ref":"sg:material/path-sha256-9c1ececbc5a19cd26ba217bc3541616be516a42410718353ffe707e044dfd2cf","version_id":"sg:material/path-sha256-9c1ececbc5a19cd26ba217bc3541616be516a42410718353ffe707e044dfd2cf@sha256:d4ca53a9f63619354b4ca0977f013cc7bf22407a3a51e764f71ac24b8ca1eb38"},{"byte_length":4609,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/dark-mode-contrast.md","schema_version":"2.0","source_sha256":"b2c26499d672caa0ddb9aa2891583f170f21c85ec47d95c0041a8b653785cb7b","stable_ref":"sg:material/path-sha256-9c2fb161708663681dea59ac17d2427ff992806f2162282f82a8c96c8872b47c","version_id":"sg:material/path-sha256-9c2fb161708663681dea59ac17d2427ff992806f2162282f82a8c96c8872b47c@sha256:b2c26499d672caa0ddb9aa2891583f170f21c85ec47d95c0041a8b653785cb7b"},{"byte_length":4785,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/faceted-filters.md","schema_version":"2.0","source_sha256":"01b16a8873208157d3e9369f63d3dee9a6a61032772e78699eb81a405a65e0e0","stable_ref":"sg:material/path-sha256-9dca85c26915b0b4fe9b1b14cfeb67d7f2afbea12088800ec71245b3267ec862","version_id":"sg:material/path-sha256-9dca85c26915b0b4fe9b1b14cfeb67d7f2afbea12088800ec71245b3267ec862@sha256:01b16a8873208157d3e9369f63d3dee9a6a61032772e78699eb81a405a65e0e0"},{"byte_length":2479,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"recipes/saas-settings.md","schema_version":"2.0","source_sha256":"0c81354d408b0a17f142d2d37fcded119e5aae3cdda545820a2767009abc7927","stable_ref":"sg:material/path-sha256-9dfe65b7582876aed144b8b79ad8ffbde14182c8b9c082c6916057782509cd0e","version_id":"sg:material/path-sha256-9dfe65b7582876aed144b8b79ad8ffbde14182c8b9c082c6916057782509cd0e@sha256:0c81354d408b0a17f142d2d37fcded119e5aae3cdda545820a2767009abc7927"},{"byte_length":2270,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"recipes/article-page.md","schema_version":"2.0","source_sha256":"e1f09f503d697c4c04ef36b1a7033e1e68c8e52f942c865ca2db1489e66b235d","stable_ref":"sg:material/path-sha256-a0c4596e930ce74c5bf8f890a6e037abbd07463c1e1aa0b35c40a0c2009ba011","version_id":"sg:material/path-sha256-a0c4596e930ce74c5bf8f890a6e037abbd07463c1e1aa0b35c40a0c2009ba011@sha256:e1f09f503d697c4c04ef36b1a7033e1e68c8e52f942c865ca2db1489e66b235d"},{"byte_length":18431,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/interaction-recipes.md","schema_version":"2.0","source_sha256":"9f065be929f4ad34b867ae7666943aafb99c70ce7022787e935a0f869798f7b2","stable_ref":"sg:material/path-sha256-a2188f6421d8ce1d9cf926193014f31af7bff1fb6101e42b87ff364c201f9d6e","version_id":"sg:material/path-sha256-a2188f6421d8ce1d9cf926193014f31af7bff1fb6101e42b87ff364c201f9d6e@sha256:9f065be929f4ad34b867ae7666943aafb99c70ce7022787e935a0f869798f7b2"},{"byte_length":4206,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"index.md","schema_version":"2.0","source_sha256":"cdb1f52e6ad9327be8c2056e63ca5a6acfffa96847a3d908fcb86dbe0e6f1a86","stable_ref":"sg:material/path-sha256-a48746cae70c44e7e105b594aad338ddd105c93c1cb445a40ba6aab785ba69e5","version_id":"sg:material/path-sha256-a48746cae70c44e7e105b594aad338ddd105c93c1cb445a40ba6aab785ba69e5@sha256:cdb1f52e6ad9327be8c2056e63ca5a6acfffa96847a3d908fcb86dbe0e6f1a86"},{"byte_length":12117,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"AGENTS.md","schema_version":"2.0","source_sha256":"f8beb0cfabd13d1b2aa6029b9dde9a9fece7d3fd0a23f496aeb522cdbf4305d2","stable_ref":"sg:material/path-sha256-a54ff182c7e8acf56acfd6e4b9c3ff41e2c41a31c9b211b2deb9df75d9a478f9","version_id":"sg:material/path-sha256-a54ff182c7e8acf56acfd6e4b9c3ff41e2c41a31c9b211b2deb9df75d9a478f9@sha256:f8beb0cfabd13d1b2aa6029b9dde9a9fece7d3fd0a23f496aeb522cdbf4305d2"},{"byte_length":3689,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/grid-repetition/card-grid.md","schema_version":"2.0","source_sha256":"9750a6f9dbe578fd7044d5e2375bb6df9bc2cd3ea3f952f51e8a0f228392f472","stable_ref":"sg:material/path-sha256-a5e3ff6fe0948ebbaf30def7866421563073877df12336c5f66eba3d2d6667a5","version_id":"sg:material/path-sha256-a5e3ff6fe0948ebbaf30def7866421563073877df12336c5f66eba3d2d6667a5@sha256:9750a6f9dbe578fd7044d5e2375bb6df9bc2cd3ea3f952f51e8a0f228392f472"},{"byte_length":5120,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/techniques/kinetic-type.md","schema_version":"2.0","source_sha256":"08670e9f799b97b73b8294be7f378d2853861407d95649a6f1a0e3837dd37ec8","stable_ref":"sg:material/path-sha256-a73c6a1b54503228d3f98269e3cdf140c3472df03198770c1e4146a32685fdcd","version_id":"sg:material/path-sha256-a73c6a1b54503228d3f98269e3cdf140c3472df03198770c1e4146a32685fdcd@sha256:08670e9f799b97b73b8294be7f378d2853861407d95649a6f1a0e3837dd37ec8"},{"byte_length":1194,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/index.md","schema_version":"2.0","source_sha256":"c52bbc8df395ff56e4cad12ced76ba5ee55f4a95c49efaf53825d13c32feab49","stable_ref":"sg:material/path-sha256-a7987410bcf408a5b4edc0ae7719d3f57f1f04a4efaaa7a756c870677307fd85","version_id":"sg:material/path-sha256-a7987410bcf408a5b4edc0ae7719d3f57f1f04a4efaaa7a756c870677307fd85@sha256:c52bbc8df395ff56e4cad12ced76ba5ee55f4a95c49efaf53825d13c32feab49"},{"byte_length":886,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/gates/index.md","schema_version":"2.0","source_sha256":"8687d8285459805273e27f5ca9b5fcd10fbd0899786443445666155630bbf4bb","stable_ref":"sg:material/path-sha256-aa41c9d5c021c9d6a6e06df6c53297c0d271f71b3a299303d8a330644f6998f1","version_id":"sg:material/path-sha256-aa41c9d5c021c9d6a6e06df6c53297c0d271f71b3a299303d8a330644f6998f1@sha256:8687d8285459805273e27f5ca9b5fcd10fbd0899786443445666155630bbf4bb"},{"byte_length":2505,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/claim-records/stylegallery-multidomain-scope.md","schema_version":"2.0","source_sha256":"3f886a22784cfaf25a0bc7e25b4e7ced25562f470bf2c6f80de894fedb7ee2f0","stable_ref":"sg:material/path-sha256-abaaac8db5d4ad334a6b84253118bdd282aba92b9a55daf5710b2b6d6d14c399","version_id":"sg:material/path-sha256-abaaac8db5d4ad334a6b84253118bdd282aba92b9a55daf5710b2b6d6d14c399@sha256:3f886a22784cfaf25a0bc7e25b4e7ced25562f470bf2c6f80de894fedb7ee2f0"},{"byte_length":5060,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/error-recovery.md","schema_version":"2.0","source_sha256":"eae2fd50f40bb107dd14ffecf122029445ece55992dc4b247ba56772849de0e3","stable_ref":"sg:material/path-sha256-adb34954f50f41151a7a544d4e8776a6f11027241889251df4a84598e8475d5b","version_id":"sg:material/path-sha256-adb34954f50f41151a7a544d4e8776a6f11027241889251df4a84598e8475d5b@sha256:eae2fd50f40bb107dd14ffecf122029445ece55992dc4b247ba56772849de0e3"},{"byte_length":5260,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/index.md","schema_version":"2.0","source_sha256":"da21531c3c00085495cd8aa6b823d93b460ef4b8b711d6f99c5d2ad1f27576b0","stable_ref":"sg:material/path-sha256-ae58b612e54de404253b9c6ae923631149e6a1b1d39fa673ee81705626aa5968","version_id":"sg:material/path-sha256-ae58b612e54de404253b9c6ae923631149e6a1b1d39fa673ee81705626aa5968@sha256:da21531c3c00085495cd8aa6b823d93b460ef4b8b711d6f99c5d2ad1f27576b0"},{"byte_length":6107,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/comparison-workflow.md","schema_version":"2.0","source_sha256":"33746616932fe730285607c0cda5bf8019500884cb5cb67fdce0285ef71af0c4","stable_ref":"sg:material/path-sha256-ae7b1857d77dd0986c8000255f0bb7eeb79e3750bc19cdd426ca7d571f120a6d","version_id":"sg:material/path-sha256-ae7b1857d77dd0986c8000255f0bb7eeb79e3750bc19cdd426ca7d571f120a6d@sha256:33746616932fe730285607c0cda5bf8019500884cb5cb67fdce0285ef71af0c4"},{"byte_length":4989,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/windows-interaction.md","schema_version":"2.0","source_sha256":"f10b6f05b647a2623f0510da2c38e6232809a34c3d19e52fa3f4241724a0b11d","stable_ref":"sg:material/path-sha256-b33142b70ab23f291695fe451ad410aeddc24b3f4853d817a731a26072dc4c32","version_id":"sg:material/path-sha256-b33142b70ab23f291695fe451ad410aeddc24b3f4853d817a731a26072dc4c32@sha256:f10b6f05b647a2623f0510da2c38e6232809a34c3d19e52fa3f4241724a0b11d"},{"byte_length":33203,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"README.md","schema_version":"2.0","source_sha256":"96cd1b0bbcf1542114913ca618357626f9d64f2c025b4568e6570eb4dfc9ceaf","stable_ref":"sg:material/path-sha256-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5","version_id":"sg:material/path-sha256-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5@sha256:96cd1b0bbcf1542114913ca618357626f9d64f2c025b4568e6570eb4dfc9ceaf"},{"byte_length":9981,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/source-vocabularies.md","schema_version":"2.0","source_sha256":"8c9f40d996d7a4133638683fccc408e4392c338f5ce94dbd07f578f86b234819","stable_ref":"sg:material/path-sha256-b3c9a665848204252a912ce4a369ccbd4e5b6e63209fa8cd393b0854d3a3b309","version_id":"sg:material/path-sha256-b3c9a665848204252a912ce4a369ccbd4e5b6e63209fa8cd393b0854d3a3b309@sha256:8c9f40d996d7a4133638683fccc408e4392c338f5ce94dbd07f578f86b234819"},{"byte_length":6935,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/interaction-semantics.md","schema_version":"2.0","source_sha256":"db9ac77afb5df1b5a6152b58cc3d57929659ab58049b7015c8b66a8fcf4b4c74","stable_ref":"sg:material/path-sha256-b4ca88cb45a689edcc376a990065184dc5dbae47f7d7f78ddc3fad789562623c","version_id":"sg:material/path-sha256-b4ca88cb45a689edcc376a990065184dc5dbae47f7d7f78ddc3fad789562623c@sha256:db9ac77afb5df1b5a6152b58cc3d57929659ab58049b7015c8b66a8fcf4b4c74"},{"byte_length":4802,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/adaptation-workflow.md","schema_version":"2.0","source_sha256":"8aea8bc14348b793e25e69cbbe6437e5c1f27a236227a012acb8a9dc5995eece","stable_ref":"sg:material/path-sha256-b59c0c528c094b9299490c7964ed10a188ae059e0bee97688f68c7edbfe8d561","version_id":"sg:material/path-sha256-b59c0c528c094b9299490c7964ed10a188ae059e0bee97688f68c7edbfe8d561@sha256:8aea8bc14348b793e25e69cbbe6437e5c1f27a236227a012acb8a9dc5995eece"},{"byte_length":32726,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"GOVERNANCE.md","schema_version":"2.0","source_sha256":"87dafd4ffbe53978ef16edd75834ff6c95ce31025a40445132b6b03eeaed3902","stable_ref":"sg:material/path-sha256-b60c6a93e9f74ee52e71bf33781c2870b8395c8c5a34f00f61305343cb8d8447","version_id":"sg:material/path-sha256-b60c6a93e9f74ee52e71bf33781c2870b8395c8c5a34f00f61305343cb8d8447@sha256:87dafd4ffbe53978ef16edd75834ff6c95ce31025a40445132b6b03eeaed3902"},{"byte_length":5287,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/index.md","schema_version":"2.0","source_sha256":"a358fec7eb52c0bc1523a1f0035f86ebf985362411138e5c594c6470cd76bc0d","stable_ref":"sg:material/path-sha256-b6b2ce37f6c04566c4dc6a18252e1d89fc387c7e79f4463406deff3e8b54a81f","version_id":"sg:material/path-sha256-b6b2ce37f6c04566c4dc6a18252e1d89fc387c7e79f4463406deff3e8b54a81f@sha256:a358fec7eb52c0bc1523a1f0035f86ebf985362411138e5c594c6470cd76bc0d"},{"byte_length":9754,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/worked-examples.md","schema_version":"2.0","source_sha256":"c9681b6f028ae21c42ef2e5202df07ee5c43e3461fec8ac2f5021fec01fd0f53","stable_ref":"sg:material/path-sha256-b6d27588195494826083fe6ad6f8f08ba0ad8016a0f64a0d442fde1414c0b1a0","version_id":"sg:material/path-sha256-b6d27588195494826083fe6ad6f8f08ba0ad8016a0f64a0d442fde1414c0b1a0@sha256:c9681b6f028ae21c42ef2e5202df07ee5c43e3461fec8ac2f5021fec01fd0f53"},{"byte_length":4657,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/concept-families.md","schema_version":"2.0","source_sha256":"d44d8782dc1c373757baf46064d8f5b44cd226025e4bad269006141e50be8c2f","stable_ref":"sg:material/path-sha256-b73e23057d4ca2412792354487c8709f1bcfe844eaf3c154fec167b48c80bd16","version_id":"sg:material/path-sha256-b73e23057d4ca2412792354487c8709f1bcfe844eaf3c154fec167b48c80bd16@sha256:d44d8782dc1c373757baf46064d8f5b44cd226025e4bad269006141e50be8c2f"},{"byte_length":2699,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/gates/accessibility-evidence.md","schema_version":"2.0","source_sha256":"fa07b1354ee7973317512b2f84d37d1f3965465962df74e9e1ee21a47f66ae4e","stable_ref":"sg:material/path-sha256-b7de05a789ffd0312cd9e9b1828ce113b1fcc3dcf5a87b73295a09e1004bfbe3","version_id":"sg:material/path-sha256-b7de05a789ffd0312cd9e9b1828ce113b1fcc3dcf5a87b73295a09e1004bfbe3@sha256:fa07b1354ee7973317512b2f84d37d1f3965465962df74e9e1ee21a47f66ae4e"},{"byte_length":5170,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/decision-tree.md","schema_version":"2.0","source_sha256":"0b00f7c6de446cfa08953a2552fa7e3d4f6ba5bd7da823be6caa8d2015651d38","stable_ref":"sg:material/path-sha256-b87b58f118ff70b806e2b1834e5a03e43a877d489f4af3f55ebfb4ab4a9fc8fa","version_id":"sg:material/path-sha256-b87b58f118ff70b806e2b1834e5a03e43a877d489f4af3f55ebfb4ab4a9fc8fa@sha256:0b00f7c6de446cfa08953a2552fa7e3d4f6ba5bd7da823be6caa8d2015651d38"},{"byte_length":6672,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"CATALOG.md","schema_version":"2.0","source_sha256":"6902e0b03d958816abc142a950cedb51a9a623c1acc5b1a7a94cc4f38a70eb8a","stable_ref":"sg:material/path-sha256-bb476268db5ed6523e97a56f61d3ec99765899bf3269949ee1aac390f48f1b99","version_id":"sg:material/path-sha256-bb476268db5ed6523e97a56f61d3ec99765899bf3269949ee1aac390f48f1b99@sha256:6902e0b03d958816abc142a950cedb51a9a623c1acc5b1a7a94cc4f38a70eb8a"},{"byte_length":4013,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/split-sidebar/sidebar.md","schema_version":"2.0","source_sha256":"5686d96ab0d65fe647a5e9303cef2c3d75f8887699e6b1219bc18c57be5e6deb","stable_ref":"sg:material/path-sha256-bd2be8d5407fa6cf6a9bfaacf5d35e3b08eadea21e394cb0951a4e22290720a2","version_id":"sg:material/path-sha256-bd2be8d5407fa6cf6a9bfaacf5d35e3b08eadea21e394cb0951a4e22290720a2@sha256:5686d96ab0d65fe647a5e9303cef2c3d75f8887699e6b1219bc18c57be5e6deb"},{"byte_length":2932,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/gates/consumer-migration-evidence.md","schema_version":"2.0","source_sha256":"71ad54bf72f5c968b8a0c5bd02b988660c6f441dbda13f9142d57842be498e6a","stable_ref":"sg:material/path-sha256-bd5e2b1ee33580f11a3a67b5306df57a54a539d5e944331511eb72fa9fe4e8f9","version_id":"sg:material/path-sha256-bd5e2b1ee33580f11a3a67b5306df57a54a539d5e944331511eb72fa9fe4e8f9@sha256:71ad54bf72f5c968b8a0c5bd02b988660c6f441dbda13f9142d57842be498e6a"},{"byte_length":3706,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/viewport-shell/cover.md","schema_version":"2.0","source_sha256":"932660d56c3b93bcb74f6195962f0e5d6a16c0ebc18f7ad27a6e3ea72e1ae764","stable_ref":"sg:material/path-sha256-bf39299bae7cfb1c999e3d86ab9106128c573c2a83c8f2f08f14572a94f0c5a7","version_id":"sg:material/path-sha256-bf39299bae7cfb1c999e3d86ab9106128c573c2a83c8f2f08f14572a94f0c5a7@sha256:932660d56c3b93bcb74f6195962f0e5d6a16c0ebc18f7ad27a6e3ea72e1ae764"},{"byte_length":3729,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/grid-repetition/twelve-span-grid.md","schema_version":"2.0","source_sha256":"340565c0ca49bf66d6e7646f4ec9c0c7ab3b704de40b12be7fa1a1cd8a7eef63","stable_ref":"sg:material/path-sha256-c0d7d6f086cfa95c3163b3cf7692cee97e3e16dba0de964706bee174841d2094","version_id":"sg:material/path-sha256-c0d7d6f086cfa95c3163b3cf7692cee97e3e16dba0de964706bee174841d2094@sha256:340565c0ca49bf66d6e7646f4ec9c0c7ab3b704de40b12be7fa1a1cd8a7eef63"},{"byte_length":3480,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/stacking/step-nav.md","schema_version":"2.0","source_sha256":"6669165638eb019a59f6397c019a23673796b749c8eaf754005e42c9d9dd2c17","stable_ref":"sg:material/path-sha256-c1d82e696f9b42772a53643bf7ac7fbddc964e528aa09fb7f155b442660b6262","version_id":"sg:material/path-sha256-c1d82e696f9b42772a53643bf7ac7fbddc964e528aa09fb7f155b442660b6262@sha256:6669165638eb019a59f6397c019a23673796b749c8eaf754005e42c9d9dd2c17"},{"byte_length":6684,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/observed-choreography.md","schema_version":"2.0","source_sha256":"56e05747a6ac1b6612ac7512072ae3a76ce2b9c1cafeb9898f97670bfb712f77","stable_ref":"sg:material/path-sha256-c36949227953517ec52eb47038c3feea76ec62c9b0102d92af93a39e970f6844","version_id":"sg:material/path-sha256-c36949227953517ec52eb47038c3feea76ec62c9b0102d92af93a39e970f6844@sha256:56e05747a6ac1b6612ac7512072ae3a76ce2b9c1cafeb9898f97670bfb712f77"},{"byte_length":7614,"domain":"platform-guides","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"platform-guides/adaptive-navigation.md","schema_version":"2.0","source_sha256":"2a323b0583954be7b87bf0ed733731dda91f313888d50a16bd8ad1ca023b3373","stable_ref":"sg:material/path-sha256-c3cf4c2f8d1e0c4e88e039c570eaee8d873db5d8e79b22c8ad8b94ee8f6537b2","version_id":"sg:material/path-sha256-c3cf4c2f8d1e0c4e88e039c570eaee8d873db5d8e79b22c8ad8b94ee8f6537b2@sha256:2a323b0583954be7b87bf0ed733731dda91f313888d50a16bd8ad1ca023b3373"},{"byte_length":18956,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/executable-evidence.md","schema_version":"2.0","source_sha256":"3f505237a2412704f41f4823edb6611eb84692d99ddcac88b39da92a0c820c79","stable_ref":"sg:material/path-sha256-c609296f2ae6b1d6234dbb3497f9d6a45208ba0470a3d8b4a861be79bae797c8","version_id":"sg:material/path-sha256-c609296f2ae6b1d6234dbb3497f9d6a45208ba0470a3d8b4a861be79bae797c8@sha256:3f505237a2412704f41f4823edb6611eb84692d99ddcac88b39da92a0c820c79"},{"byte_length":4018,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/recipes/index.md","schema_version":"2.0","source_sha256":"342eeb9a1e02ddacecbb8c4f3573049a75611a2ca8ce8e949a24f322d508c691","stable_ref":"sg:material/path-sha256-c78d1941e01a175ff8783c0be62c3a8f16a1534175354405d96d21e9ad68031d","version_id":"sg:material/path-sha256-c78d1941e01a175ff8783c0be62c3a8f16a1534175354405d96d21e9ad68031d@sha256:342eeb9a1e02ddacecbb8c4f3573049a75611a2ca8ce8e949a24f322d508c691"},{"byte_length":7509,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/interruption-and-retargeting.md","schema_version":"2.0","source_sha256":"ea588d38f41599c8bc304db91b94e2b0367cd5e659ed9b9b122e0844b6ba710d","stable_ref":"sg:material/path-sha256-cb04a3e7504acef68cfc10ffc7379cce216b8e8ec9eefd165299edb63166bcdb","version_id":"sg:material/path-sha256-cb04a3e7504acef68cfc10ffc7379cce216b8e8ec9eefd165299edb63166bcdb@sha256:ea588d38f41599c8bc304db91b94e2b0367cd5e659ed9b9b122e0844b6ba710d"},{"byte_length":5181,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/inline-validation.md","schema_version":"2.0","source_sha256":"5ae403b017eefdc14d066d7d0fbc0cbc0a6c386f70fe0dc206f73c17d6b68c37","stable_ref":"sg:material/path-sha256-d0c6d7b617354ba95c80ec7fc7b792f1aa56f12fd55c445a8975c9ad113554d2","version_id":"sg:material/path-sha256-d0c6d7b617354ba95c80ec7fc7b792f1aa56f12fd55c445a8975c9ad113554d2@sha256:5ae403b017eefdc14d066d7d0fbc0cbc0a6c386f70fe0dc206f73c17d6b68c37"},{"byte_length":12139,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"DOMAINS.md","schema_version":"2.0","source_sha256":"dde74315d9e6701c91f68615ed990a295779a44613b8d5bcfbb56339e4482d39","stable_ref":"sg:material/path-sha256-d190306dc8097b7ef0ec2a57ed020076a9f325b48f083aba3f62de5e886af5ab","version_id":"sg:material/path-sha256-d190306dc8097b7ef0ec2a57ed020076a9f325b48f083aba3f62de5e886af5ab@sha256:dde74315d9e6701c91f68615ed990a295779a44613b8d5bcfbb56339e4482d39"},{"byte_length":910,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/grid-repetition/index.md","schema_version":"2.0","source_sha256":"fecba190f4bcb2f3e7fbce19c02181fae7613fc51da6b20539a17ef5d37e78f2","stable_ref":"sg:material/path-sha256-d312b8ccb45a40e38e38e6d6d1e95ee074d50714cdcf872de9afd4e4254a4301","version_id":"sg:material/path-sha256-d312b8ccb45a40e38e38e6d6d1e95ee074d50714cdcf872de9afd4e4254a4301@sha256:fecba190f4bcb2f3e7fbce19c02181fae7613fc51da6b20539a17ef5d37e78f2"},{"byte_length":3835,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/in-line-grouping/split-nav.md","schema_version":"2.0","source_sha256":"75e676a65a757e4247955e58be0b438c1bbc56e22fffaf30f80437918b067552","stable_ref":"sg:material/path-sha256-d657fc87c00278cd49d87fb6a43b8596834943cf85f71d7cc873c102e56a5587","version_id":"sg:material/path-sha256-d657fc87c00278cd49d87fb6a43b8596834943cf85f71d7cc873c102e56a5587@sha256:75e676a65a757e4247955e58be0b438c1bbc56e22fffaf30f80437918b067552"},{"byte_length":4600,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/recipes/delete-undo.md","schema_version":"2.0","source_sha256":"ddb2c40392346841615980db3f38063daf023ebd1e9a88e091e797c1ee267d61","stable_ref":"sg:material/path-sha256-d7f0246c42d37b7e8615176a2bbe47d3ce946fb72c95c1037c683ced103113ad","version_id":"sg:material/path-sha256-d7f0246c42d37b7e8615176a2bbe47d3ce946fb72c95c1037c683ced103113ad@sha256:ddb2c40392346841615980db3f38063daf023ebd1e9a88e091e797c1ee267d61"},{"byte_length":4248,"domain":"expression","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"expression/techniques/gradient-atmosphere.md","schema_version":"2.0","source_sha256":"d243e2adc9ea6f3db70267cb85d8a3aa7e18df1a4dba528ce1db137a489284a5","stable_ref":"sg:material/path-sha256-d91189824c54a6030c06211e7c363c50ad4b1965c8636f52a3482ce16af00046","version_id":"sg:material/path-sha256-d91189824c54a6030c06211e7c363c50ad4b1965c8636f52a3482ce16af00046@sha256:d243e2adc9ea6f3db70267cb85d8a3aa7e18df1a4dba528ce1db137a489284a5"},{"byte_length":4100,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/latest-request-wins.md","schema_version":"2.0","source_sha256":"39b531cf73cbf79dfe0a61e3a1689d69fcf6643b495e3bc7c7cc9044ddfb9ae6","stable_ref":"sg:material/path-sha256-da7daa92efd6dc2d657e89359165211034b94b318278e8bb9e6854b49a5e0db0","version_id":"sg:material/path-sha256-da7daa92efd6dc2d657e89359165211034b94b318278e8bb9e6854b49a5e0db0@sha256:39b531cf73cbf79dfe0a61e3a1689d69fcf6643b495e3bc7c7cc9044ddfb9ae6"},{"byte_length":3944,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/consumer-migration.md","schema_version":"2.0","source_sha256":"a9e61500abbce740ca43f941aeb15a7bfebad46585584e0a45da59ce94334f29","stable_ref":"sg:material/path-sha256-ddc1d0e9544d4a08bb43703f230dcdfea087f2faf90d9a49e4aa22695b07178a","version_id":"sg:material/path-sha256-ddc1d0e9544d4a08bb43703f230dcdfea087f2faf90d9a49e4aa22695b07178a@sha256:a9e61500abbce740ca43f941aeb15a7bfebad46585584e0a45da59ce94334f29"},{"byte_length":4555,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/patterns/versioned-restore.md","schema_version":"2.0","source_sha256":"2d02489a82613c0b6a81acc80eed94253e62005f998266575330f65ecc2c7e16","stable_ref":"sg:material/path-sha256-de9ba30ea59aa296569f001d5253a70d68900e085da5d0daffea18c7ecde7067","version_id":"sg:material/path-sha256-de9ba30ea59aa296569f001d5253a70d68900e085da5d0daffea18c7ecde7067@sha256:2d02489a82613c0b6a81acc80eed94253e62005f998266575330f65ecc2c7e16"},{"byte_length":2741,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/principles.md","schema_version":"2.0","source_sha256":"1834b852ae156c7362d4f9b223b4d72dc6b708a1f2a2964022955940a9c1fdc4","stable_ref":"sg:material/path-sha256-deba5ef88dc8bdc60813a398130b8a3ca3a8d01124f45823f5834ebda967996c","version_id":"sg:material/path-sha256-deba5ef88dc8bdc60813a398130b8a3ca3a8d01124f45823f5834ebda967996c@sha256:1834b852ae156c7362d4f9b223b4d72dc6b708a1f2a2964022955940a9c1fdc4"},{"byte_length":3655,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"consumer-reference/index.md","schema_version":"2.0","source_sha256":"6c3fbad093a7becb9f2ca52a344a65dd02b3da51f49a915af6426a61f2a06208","stable_ref":"sg:material/path-sha256-df7a6343d7be1e9be37c6f618a7e72b0ac51be6143f64f419b4520e5f37c2b6b","version_id":"sg:material/path-sha256-df7a6343d7be1e9be37c6f618a7e72b0ac51be6143f64f419b4520e5f37c2b6b@sha256:6c3fbad093a7becb9f2ca52a344a65dd02b3da51f49a915af6426a61f2a06208"},{"byte_length":338,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/centering/index.md","schema_version":"2.0","source_sha256":"b7125eb4c4d705a1bb2d57ac7e9d4cf140627473aac687331573bf30b0decd30","stable_ref":"sg:material/path-sha256-e1319590d4485778ddb92cc3c1f781b4f7e06d934d5849336f96588ee3592aa8","version_id":"sg:material/path-sha256-e1319590d4485778ddb92cc3c1f781b4f7e06d934d5849336f96588ee3592aa8@sha256:b7125eb4c4d705a1bb2d57ac7e9d4cf140627473aac687331573bf30b0decd30"},{"byte_length":3707,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/containment/content-limiter.md","schema_version":"2.0","source_sha256":"fca4e8316b8c17917a4a54956ad1e44bf2cf75b87d4dc36b8e26a76fc0a26f19","stable_ref":"sg:material/path-sha256-e1c9957e26f0e3ee1235a070fbe69d31ed5974bce8c4fe14c63537909991a750","version_id":"sg:material/path-sha256-e1c9957e26f0e3ee1235a070fbe69d31ed5974bce8c4fe14c63537909991a750@sha256:fca4e8316b8c17917a4a54956ad1e44bf2cf75b87d4dc36b8e26a76fc0a26f19"},{"byte_length":3696,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/grid-repetition/masonry-approx.md","schema_version":"2.0","source_sha256":"eaa49df7f7dca831ca4da96ba91337da8812429aaf4ee72bd99eb44996485502","stable_ref":"sg:material/path-sha256-e277a76f0335dd426d8b64001be63fd56ab91a03c4ade0526ea10c4631251abb","version_id":"sg:material/path-sha256-e277a76f0335dd426d8b64001be63fd56ab91a03c4ade0526ea10c4631251abb@sha256:eaa49df7f7dca831ca4da96ba91337da8812429aaf4ee72bd99eb44996485502"},{"byte_length":8104,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/consumer-migration-readiness.md","schema_version":"2.0","source_sha256":"86dc5148b052b372b0132d159d2c3ab819a859b5f210e3a1a994c29c7478b276","stable_ref":"sg:material/path-sha256-e2d4ce07445db974a7f32e5eec810897cfb565df619df52961f3eefa5a9c3fd4","version_id":"sg:material/path-sha256-e2d4ce07445db974a7f32e5eec810897cfb565df619df52961f3eefa5a9c3fd4@sha256:86dc5148b052b372b0132d159d2c3ab819a859b5f210e3a1a994c29c7478b276"},{"byte_length":1081,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/hci-evaluation.md","schema_version":"2.0","source_sha256":"9deeeeb4c0fc9b24d79e68b6e38236f2993da2544ecc0d130256136d2b062aae","stable_ref":"sg:material/path-sha256-e5f16e01f3fb13f94a214c8a9edf9b5c31c4ebca963802dfc624e8863e98f8da","version_id":"sg:material/path-sha256-e5f16e01f3fb13f94a214c8a9edf9b5c31c4ebca963802dfc624e8863e98f8da@sha256:9deeeeb4c0fc9b24d79e68b6e38236f2993da2544ecc0d130256136d2b062aae"},{"byte_length":5219,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/index.md","schema_version":"2.0","source_sha256":"56aff9a19f32f4d32521d73e7ee59ad6cdacda55b588b2c142eb3fa42b5cdcda","stable_ref":"sg:material/path-sha256-e678b2e7915fc4abf6a019c86f8a7d74b8939a60220cb08a810900e1b5cbc2bc","version_id":"sg:material/path-sha256-e678b2e7915fc4abf6a019c86f8a7d74b8939a60220cb08a810900e1b5cbc2bc@sha256:56aff9a19f32f4d32521d73e7ee59ad6cdacda55b588b2c142eb3fa42b5cdcda"},{"byte_length":4504,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/form-labels.md","schema_version":"2.0","source_sha256":"3d1947465f17553390388350a59486dfbdab84b0802c169b83555e8a18142bcf","stable_ref":"sg:material/path-sha256-e9eedeec7cd06ae7331c1f1a27a9f31ce533653e3cf03fe4d44b35a5b28e7a87","version_id":"sg:material/path-sha256-e9eedeec7cd06ae7331c1f1a27a9f31ce533653e3cf03fe4d44b35a5b28e7a87@sha256:3d1947465f17553390388350a59486dfbdab84b0802c169b83555e8a18142bcf"},{"byte_length":4459,"domain":"expression","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"expression/directions/nocturne-editorial.md","schema_version":"2.0","source_sha256":"d3a3c5b614ea9398e4840593e20f984b0703cda99788620f57534d91c2802055","stable_ref":"sg:material/path-sha256-ea5cc5e1f5e6d370f406399b8b89822781c5140da9a3f1091cd10af9c03dc78c","version_id":"sg:material/path-sha256-ea5cc5e1f5e6d370f406399b8b89822781c5140da9a3f1091cd10af9c03dc78c@sha256:d3a3c5b614ea9398e4840593e20f984b0703cda99788620f57534d91c2802055"},{"byte_length":17463,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/conflict-cases.md","schema_version":"2.0","source_sha256":"8eb8ba9ebd15bde960ae26722da9512e602b873f421c78bb7a2be2105a31d12e","stable_ref":"sg:material/path-sha256-ebd0ba0ee0bdb5529496beddce60a4e78b65d94c9650c57ed7499427d417aa19","version_id":"sg:material/path-sha256-ebd0ba0ee0bdb5529496beddce60a4e78b65d94c9650c57ed7499427d417aa19@sha256:8eb8ba9ebd15bde960ae26722da9512e602b873f421c78bb7a2be2105a31d12e"},{"byte_length":6827,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/claims.md","schema_version":"2.0","source_sha256":"d0b04d83da9448eaa1255fc64388f76fa82c803dec246dc374bb7f7e10c6f173","stable_ref":"sg:material/path-sha256-ec031d838419829b80465b2f31de260e70117bdd283988e0653441d439a65114","version_id":"sg:material/path-sha256-ec031d838419829b80465b2f31de260e70117bdd283988e0653441d439a65114@sha256:d0b04d83da9448eaa1255fc64388f76fa82c803dec246dc374bb7f7e10c6f173"},{"byte_length":4679,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/data-tables.md","schema_version":"2.0","source_sha256":"297b05fef1c6117b1a7d8458660264a8b085704b5656503650b6c0b924922b73","stable_ref":"sg:material/path-sha256-ec3d8c3a9b6eea122b3b4db3d3994e12c65c6ff593a356a5628e8443798b8e05","version_id":"sg:material/path-sha256-ec3d8c3a9b6eea122b3b4db3d3994e12c65c6ff593a356a5628e8443798b8e05@sha256:297b05fef1c6117b1a7d8458660264a8b085704b5656503650b6c0b924922b73"},{"byte_length":2727,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/evidence/accessibility.md","schema_version":"2.0","source_sha256":"cc5a68a5e1721914fd00537b66aecb4e58c92c89962cc5fabd5ed0fc39930e95","stable_ref":"sg:material/path-sha256-eeea8e16127c63b10e90f626430df368a97fac8108b419c1cba89805b6014ce7","version_id":"sg:material/path-sha256-eeea8e16127c63b10e90f626430df368a97fac8108b419c1cba89805b6014ce7@sha256:cc5a68a5e1721914fd00537b66aecb4e58c92c89962cc5fabd5ed0fc39930e95"},{"byte_length":6696,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"layout/index.md","schema_version":"2.0","source_sha256":"03bba4cd15b3f507ae44094c472c8839e4b1f875ded63d9f13ec868ee8e184b2","stable_ref":"sg:material/path-sha256-f05a4c57bb475ff014a22abaa9120b04f05bc02d8bbe11f57677bd7662276f54","version_id":"sg:material/path-sha256-f05a4c57bb475ff014a22abaa9120b04f05bc02d8bbe11f57677bd7662276f54@sha256:03bba4cd15b3f507ae44094c472c8839e4b1f875ded63d9f13ec868ee8e184b2"},{"byte_length":7862,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/accessible-motion.md","schema_version":"2.0","source_sha256":"a60c17d61e6fd0b3bfe7bb97a60a685d9de6ff99f04bbcb8adeabea695a8986e","stable_ref":"sg:material/path-sha256-f0b9fec845304075b0df8ed4cf16fa414849f65315b0dd03ea233c24901654d9","version_id":"sg:material/path-sha256-f0b9fec845304075b0df8ed4cf16fa414849f65315b0dd03ea233c24901654d9@sha256:a60c17d61e6fd0b3bfe7bb97a60a685d9de6ff99f04bbcb8adeabea695a8986e"},{"byte_length":3844,"domain":"layout","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"GUIDE.md","schema_version":"2.0","source_sha256":"f105ff6ed3c6923ea43dacc4c40632affee4874e086a333b9ce3fa2a786234da","stable_ref":"sg:material/path-sha256-f0d91300831f8bc350b2883e8adf82bdbcb79f482585168420831991e320ade7","version_id":"sg:material/path-sha256-f0d91300831f8bc350b2883e8adf82bdbcb79f482585168420831991e320ade7@sha256:f105ff6ed3c6923ea43dacc4c40632affee4874e086a333b9ce3fa2a786234da"},{"byte_length":4393,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/evidence-patterns/bottom-navigation.md","schema_version":"2.0","source_sha256":"e672b0c1560619bc10cd32655e26b309056e867b7bd476dfa4eee3cad4b9c7d5","stable_ref":"sg:material/path-sha256-f15b339c5a118f56068f8974f63b5409b033f2ca91a8cbbf7827a7fbfdcde151","version_id":"sg:material/path-sha256-f15b339c5a118f56068f8974f63b5409b033f2ca91a8cbbf7827a7fbfdcde151@sha256:e672b0c1560619bc10cd32655e26b309056e867b7bd476dfa4eee3cad4b9c7d5"},{"byte_length":3518,"domain":"design-engineering","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-engineering/state-management/recipes/search-detail.md","schema_version":"2.0","source_sha256":"beb27d29115e28245a5887f1768e1d00f15e3241728ac22a12da40da82b9c6b5","stable_ref":"sg:material/path-sha256-f1748f4bd4143cef690bfad3f5789b1789b64da73b4318356890be18a49afd87","version_id":"sg:material/path-sha256-f1748f4bd4143cef690bfad3f5789b1789b64da73b4318356890be18a49afd87@sha256:beb27d29115e28245a5887f1768e1d00f15e3241728ac22a12da40da82b9c6b5"},{"byte_length":10020,"domain":"motion","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"motion/index.md","schema_version":"2.0","source_sha256":"80a52afe739802206dcca58c8a7e5c1c064276d1d5c1fd8809783ac87a4cbce0","stable_ref":"sg:material/path-sha256-f56daa946060f9e1f75d42246e0fa7a288093bf6d902cc9705a2c5b13c65310f","version_id":"sg:material/path-sha256-f56daa946060f9e1f75d42246e0fa7a288093bf6d902cc9705a2c5b13c65310f@sha256:80a52afe739802206dcca58c8a7e5c1c064276d1d5c1fd8809783ac87a4cbce0"},{"byte_length":1748,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/gates/layout.md","schema_version":"2.0","source_sha256":"e7306ec2101bcbc1f27153160796ef56ba7846d6c7e5219d92e56b77e0703882","stable_ref":"sg:material/path-sha256-f62872ebce1ea7ffc61cd5522572c6d0f6aecd782c9e30df376bdcd96c7e73d3","version_id":"sg:material/path-sha256-f62872ebce1ea7ffc61cd5522572c6d0f6aecd782c9e30df376bdcd96c7e73d3@sha256:e7306ec2101bcbc1f27153160796ef56ba7846d6c7e5219d92e56b77e0703882"},{"byte_length":347,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/media-fit/index.md","schema_version":"2.0","source_sha256":"24fa906c939cad71b0f175aab12ec75a16718c66446a31bedfcd3d1d46a67ae6","stable_ref":"sg:material/path-sha256-f77cbae09754bece5a3217dbf7cf766189bb5302d6296fab69bd6f5b3d6e495e","version_id":"sg:material/path-sha256-f77cbae09754bece5a3217dbf7cf766189bb5302d6296fab69bd6f5b3d6e495e@sha256:24fa906c939cad71b0f175aab12ec75a16718c66446a31bedfcd3d1d46a67ae6"},{"byte_length":1550,"domain":"shared","lifecycle":"stable","media_type":"text/markdown","record_kind":"material","repository_path":"quality/gates/rationale.md","schema_version":"2.0","source_sha256":"875771978927372959dea499fba00bf1fd0d0d2426d35601aa3e418698ccd1ab","stable_ref":"sg:material/path-sha256-f797bc85a767e4a6ea1339cf7cc91d2504c722f3a02614d6174e59978db906a6","version_id":"sg:material/path-sha256-f797bc85a767e4a6ea1339cf7cc91d2504c722f3a02614d6174e59978db906a6@sha256:875771978927372959dea499fba00bf1fd0d0d2426d35601aa3e418698ccd1ab"},{"byte_length":4840,"domain":"layout","lifecycle":"generated","media_type":"text/markdown","record_kind":"material","repository_path":"patterns/viewport-shell/holy-grail.md","schema_version":"2.0","source_sha256":"d54651ee582bbde78a0eb4ace3a0cf25d15818b8db2899d076db234cf9c392a1","stable_ref":"sg:material/path-sha256-f968729fb5885c124f8e1cab2c273f7e3b6fefd858be7f71d1b3958b48f4f2a9","version_id":"sg:material/path-sha256-f968729fb5885c124f8e1cab2c273f7e3b6fefd858be7f71d1b3958b48f4f2a9@sha256:d54651ee582bbde78a0eb4ace3a0cf25d15818b8db2899d076db234cf9c392a1"},{"byte_length":6622,"domain":"design-terminology","lifecycle":"experimental","media_type":"text/markdown","record_kind":"material","repository_path":"design-terminology/index.md","schema_version":"2.0","source_sha256":"e690834978526c34428dcce61dc2c31d85050a0e4b1c59a9f1227f9c49f5c786","stable_ref":"sg:material/path-sha256-fa36065f2020c60e811e07b08ff9ab0969520183389a14652d456f7cf7364d55","version_id":"sg:material/path-sha256-fa36065f2020c60e811e07b08ff9ab0969520183389a14652d456f7cf7364d55@sha256:e690834978526c34428dcce61dc2c31d85050a0e4b1c59a9f1227f9c49f5c786"}],"record_kind":"material_manifest","schema_version":"2.0","stable_ref":"sg:manifest/material-admission-v2","version_id":"sg:manifest/material-admission-v2@sha256:829fa13ff51bd869801d2afab9f1160d19e1d728928768f0d6cfe6f0fd594268"} \ No newline at end of file diff --git a/consumer-reference/agent-native/v2/schema/admission-policy.schema.json b/consumer-reference/agent-native/v2/schema/admission-policy.schema.json index ded346b..862cfbb 100644 --- a/consumer-reference/agent-native/v2/schema/admission-policy.schema.json +++ b/consumer-reference/agent-native/v2/schema/admission-policy.schema.json @@ -13,8 +13,8 @@ "media_type": { "const": "text/markdown" }, "allowed_materials": { "type": "array", - "minItems": 195, - "maxItems": 195, + "minItems": 196, + "maxItems": 196, "items": { "type": "object", "additionalProperties": false, diff --git a/consumer-reference/agent-native/v2/search-embeddings.json b/consumer-reference/agent-native/v2/search-embeddings.json index 0827c4a..19d4a03 100644 --- a/consumer-reference/agent-native/v2/search-embeddings.json +++ b/consumer-reference/agent-native/v2/search-embeddings.json @@ -629,9 +629,13 @@ "text_sha256": "53e6463f348140821f64cc8fccd3816ada2c2aabb181835bd18f3d3aa87600d9", "vector": "9vv7/v3+Bf//BQH//wH/BAYEBgD8+wT9BgsC/ALm/QL/Av4A+/4BAQEIBQn9+/sD9/4B//0DAQcGCAUGBP7zCQb//QD+AvYF/gIJAAMCAPwAAvsDBP//AwEC+gIE/Pj8A/z+Kf4G/gn/+P36AgUB/Qb8//v+BQb4/gAE/fwABAUFBAr99PoJBAb//AT++wsC9xT/Av4ABwn6AvsGAv/2B/39+wkD8QEJBAP8AgL9+v/yAwH/CPP1AQED+wAI/P7/Agv9+QAA/QAGCfYA/wX9+QMC9wb7AAD7AQEECP0JANYA+gf7+v/9/gEKAgEE/Pj7/f78/AX9+gMADQABAAMGAPcABwL2Afz9BQD0+/4A+/4HBv/+BvwE/v8B+PsABfkF/wQB/wABCQX8CwP9//39AwUEAwUBBfYB/wH//PcHAuD/Awb0+wP2+fv7CQb+BQMU/QH3A/8WAP79//4FAP74CQUBAv0KAAD+Avj9CwL8//z7AvX+/gMDAQL++woHBwQC" }, + "platform-guides/hig-universal-principles.md": { + "text_sha256": "a1652689b494704381bef57f767bb7ad5861e0763d85825be974337fe66bba6f", + "vector": "+AcA/QL9Bf78BAQA/fwCAwMBAgIKAf37BAf/+gTm+wMDAQAB/gIDBAEFAwQAAf389QIGCAEJAgYGBgQIAf7wCgYCAfwBAP8C//8C/Qj8AP/9BwD+CAb8+gP++fgB+vj/BP0AK/sF/gQH/QD+A//+AQX7BwH4BQv4+AIF+wABAP8O/QkD9fsCAwQCAgL9//4D+BL8B/kA/wj+AfkJCAL7Av76/A8D7wEGAgX9AQUAAgD4AgEDBfX3/QgA/f4MBAAE/gwCAP4C//kGBfv7AQQB9wP99gAABAP8BQX8BPv++db+/QD5/gT//wAKBP0D+/8GAPkBAAf6+QQADgEF/f4BAvEBBP3//fb6B/73Av789P79BgL+AvsB+f3/+P8DAvr+Af8F/vz6BwL4AQP+/ff8AAcHBAQEBvYA/QAA+v4JBOL9AAr3/gP0//72BQX3Av8N/gH5AQMX/AD7AP8CAAT9BQYHAQD8Af//BPX+A/n+//37AfgA/QD+BQX6/QQNAAoH" + }, "platform-guides/index.md": { - "text_sha256": "ebb90497294fab433fb6c1c1ab33270e7622d3535d4c33917aaf1289b6070d2b", - "vector": "9fgB/QAAAQL9/v0BAvoE/wL9AfwB/AT/AAoB/f/p+wP+BP3+/AAABQQFAQX//PoA9vsB/v8D+wIECgUEAfzxCgQF/fv///8GAgYDAQQCA/v+BPz9AwABBwQB+foE/fgCAPr8MgAB/gMB/AL9AAv/AAL+BP0E/wj4/QIE+//9AgEHAAsD8wIFAgAAAwX+/Av/+g8BBfj/CQn/A/sDAAT2AP/8/QsB8P0JAAL9/fwCAP3wAQIDB/v2AQL/+v0HBfv9/wUAAAH9/f0HBPcB/QH6+g4B9wL+BP75BAUACPkC+9f/+wT++QX+/v4K/PkF/f4C+wD7+QUA+P4DDwID/QULAPgBCQD2Avz/B//3+//8+vsF/AEA//UA/AIE/gABBPgF/gMBAAD7Bf79BwcBBPsABAQJBgIEA/cH+v4A/PUIA98CCAj5AATz/v4ABAL8AwAS/QAAAgIZ/PwBBgEGAgD5CwgBAfwH/gL+BfwCCQH//v34/vr9AQD/CPv9/AsGBwED" + "text_sha256": "dfc71a40ce833efdc429ad3ce996037d76744e3a9a22ddd2823eda8edd68621e", + "vector": "9fsC/QH+AQH9//0AAPkD/gP8AfwB/AP/AwkA/f/n+wL/Bf38/f4BAwUGAQX/+/n/9vwB//8D/AQECgUGAf3xCgQF/vsB/wAFAgUEAAcBA/sABf7+BQABBAUA+fsD+/cDAfn6MgAD/gQC+wD+Agr//wT8BP8DAAn5+wIE+wH9AgAI/wsD8/8FAgECBAb7/QsB+RAABvj/BwYAAvsDAAX2AP79/Q3+8f8JAAT9/vwBAfzxAQACB/r3/wQA+v0HBPr//wcB/wH///wHBfgA/QX89wz/+AT+BQH5Awj9CfkA+tb9/AL++gb9/v8L/fgF/f4A/gD8/Af/9/4CDwEF/gQHA/gBCQD6Avv+B/33/gH6+/0C/gL9APcA+gED/QEBBfsE/gQDAAD7A/38BwcBAfr/BAUJBgIEBPcF+///+/UIAuAABgr3/wPz/v0ABAT5AgAQ/QAAAQIZ+/wBAwEEAQH7CggCAfwDAAL/BPwACf38Af74/fr+AP/9Cf78+wkHBgID" }, "platform-guides/input-and-focus.md": { "text_sha256": "0412e61fdcfefe0d78aa3a59eb74e056abfa90c539859e27049ca9151a65d21e", diff --git a/consumer-reference/policies/lifecycle-a2a-extension.json b/consumer-reference/policies/lifecycle-a2a-extension.json index a2c9d43..6e4b9d9 100644 --- a/consumer-reference/policies/lifecycle-a2a-extension.json +++ b/consumer-reference/policies/lifecycle-a2a-extension.json @@ -94,8 +94,8 @@ "scripts/test-lifecycle-disposition.mjs", "scripts/validate-lifecycle-disposition.mjs" ], - "scanned_file_count": 631, - "scanned_paths_content_id": "sha256:2a2d852256399b0dd65d4abe601de756d82014dfe3cc005fa77550fe3e1f1f69" + "scanned_file_count": 640, + "scanned_paths_content_id": "sha256:63a7df1af982ff3599fa3d8f1117e79846dd90a50b81ece3b61549507b6c38d8" }, "implementation": { "path": "scripts/agent-native/v2/extensions/a2a-projection.mjs", @@ -145,13 +145,13 @@ "role": "repository_reference", "lines": { "start": 1, - "end": 371 + "end": 374 }, - "file_sha256": "d93f49cff874bb809af8e73f7e08a75b37ea0ddd45a897f1673d8eb6c1941588", - "content_id": "sha256:d93f49cff874bb809af8e73f7e08a75b37ea0ddd45a897f1673d8eb6c1941588", + "file_sha256": "95939c914a4861896dc70b156f70d9958e382afe6016e5f30d8d9f18b893533b", + "content_id": "sha256:95939c914a4861896dc70b156f70d9958e382afe6016e5f30d8d9f18b893533b", "reference_lines": [ - 245, - 261 + 246, + 262 ], "reference_kinds": [ "forwarder_path", @@ -281,8 +281,8 @@ "start": 1, "end": 300 }, - "file_sha256": "1a3ac4dd22ac0875f8206de0b7aefb12f9433d0f6ab7b43f61a831a07328034c", - "content_id": "sha256:1a3ac4dd22ac0875f8206de0b7aefb12f9433d0f6ab7b43f61a831a07328034c", + "file_sha256": "0c561fe9dc5ee04f3f5b3abaa2c8b782bd6ac57e18cda5b770ae1eef73234e38", + "content_id": "sha256:0c561fe9dc5ee04f3f5b3abaa2c8b782bd6ac57e18cda5b770ae1eef73234e38", "reference_lines": [ 54 ], @@ -391,8 +391,8 @@ "start": 1, "end": 300 }, - "file_sha256": "1a3ac4dd22ac0875f8206de0b7aefb12f9433d0f6ab7b43f61a831a07328034c", - "content_id": "sha256:1a3ac4dd22ac0875f8206de0b7aefb12f9433d0f6ab7b43f61a831a07328034c" + "file_sha256": "0c561fe9dc5ee04f3f5b3abaa2c8b782bd6ac57e18cda5b770ae1eef73234e38", + "content_id": "sha256:0c561fe9dc5ee04f3f5b3abaa2c8b782bd6ac57e18cda5b770ae1eef73234e38" } ], "docs_and_registry": [ @@ -432,10 +432,10 @@ "role": "installed_package_exposure", "lines": { "start": 1, - "end": 371 + "end": 374 }, - "file_sha256": "d93f49cff874bb809af8e73f7e08a75b37ea0ddd45a897f1673d8eb6c1941588", - "content_id": "sha256:d93f49cff874bb809af8e73f7e08a75b37ea0ddd45a897f1673d8eb6c1941588" + "file_sha256": "95939c914a4861896dc70b156f70d9958e382afe6016e5f30d8d9f18b893533b", + "content_id": "sha256:95939c914a4861896dc70b156f70d9958e382afe6016e5f30d8d9f18b893533b" }, "forwarding": { "path": "scripts/agent-native/a2a-projection.mjs", diff --git a/consumer-reference/policies/lifecycle-ag-ui-extension.json b/consumer-reference/policies/lifecycle-ag-ui-extension.json index 6d6657d..cc309d0 100644 --- a/consumer-reference/policies/lifecycle-ag-ui-extension.json +++ b/consumer-reference/policies/lifecycle-ag-ui-extension.json @@ -94,8 +94,8 @@ "scripts/test-lifecycle-disposition.mjs", "scripts/validate-lifecycle-disposition.mjs" ], - "scanned_file_count": 631, - "scanned_paths_content_id": "sha256:2a2d852256399b0dd65d4abe601de756d82014dfe3cc005fa77550fe3e1f1f69" + "scanned_file_count": 640, + "scanned_paths_content_id": "sha256:63a7df1af982ff3599fa3d8f1117e79846dd90a50b81ece3b61549507b6c38d8" }, "implementation": { "path": "scripts/agent-native/v2/extensions/agui-projection.mjs", @@ -129,14 +129,14 @@ "role": "repository_reference", "lines": { "start": 1, - "end": 234 + "end": 235 }, - "file_sha256": "ab886bd4132283a8b1075d786789b62c10ec350eb5bb2a62df6385e1d796dc78", - "content_id": "sha256:ab886bd4132283a8b1075d786789b62c10ec350eb5bb2a62df6385e1d796dc78", + "file_sha256": "87dafd4ffbe53978ef16edd75834ff6c95ce31025a40445132b6b03eeaed3902", + "content_id": "sha256:87dafd4ffbe53978ef16edd75834ff6c95ce31025a40445132b6b03eeaed3902", "reference_lines": [ 28, - 91, - 93 + 92, + 94 ], "reference_kinds": [ "documentation_reference" @@ -203,13 +203,13 @@ "role": "repository_reference", "lines": { "start": 1, - "end": 371 + "end": 374 }, - "file_sha256": "d93f49cff874bb809af8e73f7e08a75b37ea0ddd45a897f1673d8eb6c1941588", - "content_id": "sha256:d93f49cff874bb809af8e73f7e08a75b37ea0ddd45a897f1673d8eb6c1941588", + "file_sha256": "95939c914a4861896dc70b156f70d9958e382afe6016e5f30d8d9f18b893533b", + "content_id": "sha256:95939c914a4861896dc70b156f70d9958e382afe6016e5f30d8d9f18b893533b", "reference_lines": [ - 246, - 262 + 247, + 263 ], "reference_kinds": [ "forwarder_path", @@ -329,8 +329,8 @@ "start": 1, "end": 300 }, - "file_sha256": "1a3ac4dd22ac0875f8206de0b7aefb12f9433d0f6ab7b43f61a831a07328034c", - "content_id": "sha256:1a3ac4dd22ac0875f8206de0b7aefb12f9433d0f6ab7b43f61a831a07328034c", + "file_sha256": "0c561fe9dc5ee04f3f5b3abaa2c8b782bd6ac57e18cda5b770ae1eef73234e38", + "content_id": "sha256:0c561fe9dc5ee04f3f5b3abaa2c8b782bd6ac57e18cda5b770ae1eef73234e38", "reference_lines": [ 55 ], @@ -438,8 +438,8 @@ "start": 1, "end": 300 }, - "file_sha256": "1a3ac4dd22ac0875f8206de0b7aefb12f9433d0f6ab7b43f61a831a07328034c", - "content_id": "sha256:1a3ac4dd22ac0875f8206de0b7aefb12f9433d0f6ab7b43f61a831a07328034c" + "file_sha256": "0c561fe9dc5ee04f3f5b3abaa2c8b782bd6ac57e18cda5b770ae1eef73234e38", + "content_id": "sha256:0c561fe9dc5ee04f3f5b3abaa2c8b782bd6ac57e18cda5b770ae1eef73234e38" } ], "docs_and_registry": [ @@ -479,10 +479,10 @@ "role": "installed_package_exposure", "lines": { "start": 1, - "end": 371 + "end": 374 }, - "file_sha256": "d93f49cff874bb809af8e73f7e08a75b37ea0ddd45a897f1673d8eb6c1941588", - "content_id": "sha256:d93f49cff874bb809af8e73f7e08a75b37ea0ddd45a897f1673d8eb6c1941588" + "file_sha256": "95939c914a4861896dc70b156f70d9958e382afe6016e5f30d8d9f18b893533b", + "content_id": "sha256:95939c914a4861896dc70b156f70d9958e382afe6016e5f30d8d9f18b893533b" }, "forwarding": { "path": "scripts/agent-native/agui-projection.mjs", diff --git a/eval/search/questions.json b/eval/search/questions.json index 1be4b79..143a272 100644 --- a/eval/search/questions.json +++ b/eval/search/questions.json @@ -1234,6 +1234,38 @@ "expression/anti-patterns.md": 3, "expression/measured-benchmarks.md": 2 } + }, + { + "id": "hig01", + "lang": "en", + "kind": "real", + "must_pass": true, + "query": "Which Apple HIG principles apply to the web and which are Apple-specific?", + "qrels": { + "platform-guides/hig-universal-principles.md": 3, + "platform-guides/apple-interaction.md": 1 + } + }, + { + "id": "hig02", + "lang": "en", + "kind": "real", + "must_pass": true, + "query": "Map HIG accessibility guidance to WCAG 2.2 success criteria", + "qrels": { + "platform-guides/hig-universal-principles.md": 3, + "platform-guides/preferences-and-accessibility.md": 1 + } + }, + { + "id": "hig03", + "lang": "en", + "kind": "mismatch", + "must_pass": false, + "query": "checklist of iPhone design rules that also make sense for a website", + "qrels": { + "platform-guides/hig-universal-principles.md": 3 + } } ] } diff --git a/package.json b/package.json index e2bcb29..38a99d4 100644 --- a/package.json +++ b/package.json @@ -200,6 +200,7 @@ "platform-guides/android-interaction.md", "platform-guides/apple-interaction.md", "platform-guides/compatibility-matrix.md", + "platform-guides/hig-universal-principles.md", "platform-guides/index.md", "platform-guides/input-and-focus.md", "platform-guides/preferences-and-accessibility.md", @@ -336,6 +337,8 @@ "test:registrar": "node scripts/test-registrar.mjs", "conservator": "node scripts/conservator.mjs", "test:conservator": "node scripts/test-conservator.mjs", + "validate:hig-principles": "node scripts/validate-hig-principles.mjs --json", + "test:hig-principles": "node scripts/test-validate-hig-principles.mjs", "test:showcase": "node scripts/check-showcase.mjs", "test:showcase:self": "node scripts/test-check-showcase.mjs", "showcase:serve": "node scripts/serve-showcase.mjs", diff --git a/platform-guides/hig-universal-principles.json b/platform-guides/hig-universal-principles.json new file mode 100644 index 0000000..ec354dd --- /dev/null +++ b/platform-guides/hig-universal-principles.json @@ -0,0 +1,4526 @@ +{ + "schema_version": "1.0", + "record_kind": "platform_principle_extraction", + "title": "Apple HIG Universal Principles Extraction", + "platform": "Apple Human Interface Guidelines", + "source_index": "https://developer.apple.com/tutorials/data/design/human-interface-guidelines.json", + "sections": [ + { + "id": "foundations", + "title": "Foundations", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/foundations" + }, + { + "id": "patterns", + "title": "Patterns", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/patterns" + }, + { + "id": "components", + "title": "Components", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/components" + }, + { + "id": "inputs", + "title": "Inputs", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/inputs" + }, + { + "id": "technologies", + "title": "Technologies", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/technologies" + } + ], + "out_of_scope_sections": [ + { + "id": "getting-started", + "reason": "Per-platform overview pages; principle extraction covers the five guidance sections only." + } + ], + "reviewed_on": "2026-10-19", + "review_by": "2027-04-19T00:00:00Z", + "text_policy": "paraphrase_and_link_only", + "classes": { + "universal": "The principle holds on the web and on other platforms without translating an Apple mechanism.", + "adapt": "The goal is universal, but HIG expresses it through an Apple mechanism or value that must be translated to a named web or cross-platform counterpart.", + "apple-specific": "The guidance depends on Apple hardware, system rendering, licensing, or brand assets and must not become a web default." + }, + "wcag": { + "1.1.1": { + "title": "Non-text Content", + "url": "https://www.w3.org/TR/WCAG22/#non-text-content" + }, + "1.2.2": { + "title": "Captions (Prerecorded)", + "url": "https://www.w3.org/TR/WCAG22/#captions-prerecorded" + }, + "1.2.5": { + "title": "Audio Description (Prerecorded)", + "url": "https://www.w3.org/TR/WCAG22/#audio-description-prerecorded" + }, + "1.3.1": { + "title": "Info and Relationships", + "url": "https://www.w3.org/TR/WCAG22/#info-and-relationships" + }, + "1.3.2": { + "title": "Meaningful Sequence", + "url": "https://www.w3.org/TR/WCAG22/#meaningful-sequence" + }, + "1.3.3": { + "title": "Sensory Characteristics", + "url": "https://www.w3.org/TR/WCAG22/#sensory-characteristics" + }, + "1.3.4": { + "title": "Orientation", + "url": "https://www.w3.org/TR/WCAG22/#orientation" + }, + "1.3.5": { + "title": "Identify Input Purpose", + "url": "https://www.w3.org/TR/WCAG22/#identify-input-purpose" + }, + "1.4.1": { + "title": "Use of Color", + "url": "https://www.w3.org/TR/WCAG22/#use-of-color" + }, + "1.4.2": { + "title": "Audio Control", + "url": "https://www.w3.org/TR/WCAG22/#audio-control" + }, + "1.4.3": { + "title": "Contrast (Minimum)", + "url": "https://www.w3.org/TR/WCAG22/#contrast-minimum" + }, + "1.4.4": { + "title": "Resize Text", + "url": "https://www.w3.org/TR/WCAG22/#resize-text" + }, + "1.4.10": { + "title": "Reflow", + "url": "https://www.w3.org/TR/WCAG22/#reflow" + }, + "1.4.11": { + "title": "Non-text Contrast", + "url": "https://www.w3.org/TR/WCAG22/#non-text-contrast" + }, + "1.4.12": { + "title": "Text Spacing", + "url": "https://www.w3.org/TR/WCAG22/#text-spacing" + }, + "1.4.13": { + "title": "Content on Hover or Focus", + "url": "https://www.w3.org/TR/WCAG22/#content-on-hover-or-focus" + }, + "2.1.1": { + "title": "Keyboard", + "url": "https://www.w3.org/TR/WCAG22/#keyboard" + }, + "2.1.2": { + "title": "No Keyboard Trap", + "url": "https://www.w3.org/TR/WCAG22/#no-keyboard-trap" + }, + "2.1.4": { + "title": "Character Key Shortcuts", + "url": "https://www.w3.org/TR/WCAG22/#character-key-shortcuts" + }, + "2.2.1": { + "title": "Timing Adjustable", + "url": "https://www.w3.org/TR/WCAG22/#timing-adjustable" + }, + "2.2.2": { + "title": "Pause, Stop, Hide", + "url": "https://www.w3.org/TR/WCAG22/#pause-stop-hide" + }, + "2.3.1": { + "title": "Three Flashes or Below Threshold", + "url": "https://www.w3.org/TR/WCAG22/#three-flashes-or-below-threshold" + }, + "2.3.3": { + "title": "Animation from Interactions", + "url": "https://www.w3.org/TR/WCAG22/#animation-from-interactions" + }, + "2.4.3": { + "title": "Focus Order", + "url": "https://www.w3.org/TR/WCAG22/#focus-order" + }, + "2.4.4": { + "title": "Link Purpose (In Context)", + "url": "https://www.w3.org/TR/WCAG22/#link-purpose-in-context" + }, + "2.4.6": { + "title": "Headings and Labels", + "url": "https://www.w3.org/TR/WCAG22/#headings-and-labels" + }, + "2.4.7": { + "title": "Focus Visible", + "url": "https://www.w3.org/TR/WCAG22/#focus-visible" + }, + "2.4.11": { + "title": "Focus Not Obscured (Minimum)", + "url": "https://www.w3.org/TR/WCAG22/#focus-not-obscured-minimum" + }, + "2.5.1": { + "title": "Pointer Gestures", + "url": "https://www.w3.org/TR/WCAG22/#pointer-gestures" + }, + "2.5.2": { + "title": "Pointer Cancellation", + "url": "https://www.w3.org/TR/WCAG22/#pointer-cancellation" + }, + "2.5.3": { + "title": "Label in Name", + "url": "https://www.w3.org/TR/WCAG22/#label-in-name" + }, + "2.5.4": { + "title": "Motion Actuation", + "url": "https://www.w3.org/TR/WCAG22/#motion-actuation" + }, + "2.5.5": { + "title": "Target Size (Enhanced)", + "url": "https://www.w3.org/TR/WCAG22/#target-size-enhanced" + }, + "2.5.7": { + "title": "Dragging Movements", + "url": "https://www.w3.org/TR/WCAG22/#dragging-movements" + }, + "2.5.8": { + "title": "Target Size (Minimum)", + "url": "https://www.w3.org/TR/WCAG22/#target-size-minimum" + }, + "3.1.2": { + "title": "Language of Parts", + "url": "https://www.w3.org/TR/WCAG22/#language-of-parts" + }, + "3.1.3": { + "title": "Unusual Words", + "url": "https://www.w3.org/TR/WCAG22/#unusual-words" + }, + "3.2.1": { + "title": "On Focus", + "url": "https://www.w3.org/TR/WCAG22/#on-focus" + }, + "3.2.2": { + "title": "On Input", + "url": "https://www.w3.org/TR/WCAG22/#on-input" + }, + "3.2.3": { + "title": "Consistent Navigation", + "url": "https://www.w3.org/TR/WCAG22/#consistent-navigation" + }, + "3.2.4": { + "title": "Consistent Identification", + "url": "https://www.w3.org/TR/WCAG22/#consistent-identification" + }, + "3.2.6": { + "title": "Consistent Help", + "url": "https://www.w3.org/TR/WCAG22/#consistent-help" + }, + "3.3.1": { + "title": "Error Identification", + "url": "https://www.w3.org/TR/WCAG22/#error-identification" + }, + "3.3.2": { + "title": "Labels or Instructions", + "url": "https://www.w3.org/TR/WCAG22/#labels-or-instructions" + }, + "3.3.3": { + "title": "Error Suggestion", + "url": "https://www.w3.org/TR/WCAG22/#error-suggestion" + }, + "3.3.4": { + "title": "Error Prevention (Legal, Financial, Data)", + "url": "https://www.w3.org/TR/WCAG22/#error-prevention-legal-financial-data" + }, + "3.3.7": { + "title": "Redundant Entry", + "url": "https://www.w3.org/TR/WCAG22/#redundant-entry" + }, + "3.3.8": { + "title": "Accessible Authentication (Minimum)", + "url": "https://www.w3.org/TR/WCAG22/#accessible-authentication-minimum" + }, + "4.1.2": { + "title": "Name, Role, Value", + "url": "https://www.w3.org/TR/WCAG22/#name-role-value" + }, + "4.1.3": { + "title": "Status Messages", + "url": "https://www.w3.org/TR/WCAG22/#status-messages" + } + }, + "material3": { + "bottom-sheets": { + "title": "Bottom sheets", + "url": "https://m3.material.io/components/bottom-sheets/overview" + }, + "buttons": { + "title": "Buttons", + "url": "https://m3.material.io/components/buttons/overview" + }, + "cards": { + "title": "Cards", + "url": "https://m3.material.io/components/cards/overview" + }, + "carousel": { + "title": "Carousel", + "url": "https://m3.material.io/components/carousel/overview" + }, + "chips": { + "title": "Chips", + "url": "https://m3.material.io/components/chips/overview" + }, + "color": { + "title": "Color system", + "url": "https://m3.material.io/styles/color/overview" + }, + "color-roles": { + "title": "Color roles", + "url": "https://m3.material.io/styles/color/roles" + }, + "content-design": { + "title": "Content design", + "url": "https://m3.material.io/foundations/content-design/overview" + }, + "contrast": { + "title": "Accessibility: color and contrast", + "url": "https://m3.material.io/foundations/designing/color-contrast" + }, + "date-pickers": { + "title": "Date pickers", + "url": "https://m3.material.io/components/date-pickers/overview" + }, + "dialogs": { + "title": "Dialogs", + "url": "https://m3.material.io/components/dialogs/overview" + }, + "elevation": { + "title": "Elevation", + "url": "https://m3.material.io/styles/elevation/overview" + }, + "gestures": { + "title": "Gestures", + "url": "https://m3.material.io/foundations/interaction/gestures" + }, + "icons": { + "title": "Icons", + "url": "https://m3.material.io/styles/icons/overview" + }, + "layout": { + "title": "Layout overview", + "url": "https://m3.material.io/foundations/layout/understanding-layout/overview" + }, + "lists": { + "title": "Lists", + "url": "https://m3.material.io/components/lists/overview" + }, + "menus": { + "title": "Menus", + "url": "https://m3.material.io/components/menus/overview" + }, + "motion": { + "title": "Motion", + "url": "https://m3.material.io/styles/motion/overview" + }, + "navigation-bar": { + "title": "Navigation bar", + "url": "https://m3.material.io/components/navigation-bar/overview" + }, + "navigation-drawer": { + "title": "Navigation drawer", + "url": "https://m3.material.io/components/navigation-drawer/overview" + }, + "progress-indicators": { + "title": "Progress indicators", + "url": "https://m3.material.io/components/progress-indicators/overview" + }, + "search": { + "title": "Search", + "url": "https://m3.material.io/components/search/overview" + }, + "segmented-buttons": { + "title": "Segmented buttons", + "url": "https://m3.material.io/components/segmented-buttons/overview" + }, + "sliders": { + "title": "Sliders", + "url": "https://m3.material.io/components/sliders/overview" + }, + "snackbar": { + "title": "Snackbar", + "url": "https://m3.material.io/components/snackbar/overview" + }, + "states": { + "title": "Interaction states", + "url": "https://m3.material.io/foundations/interaction/states/overview" + }, + "structure": { + "title": "Accessibility: structure and target sizes", + "url": "https://m3.material.io/foundations/designing/structure" + }, + "switch": { + "title": "Switch", + "url": "https://m3.material.io/components/switch/overview" + }, + "tabs": { + "title": "Tabs", + "url": "https://m3.material.io/components/tabs/overview" + }, + "text-fields": { + "title": "Text fields", + "url": "https://m3.material.io/components/text-fields/overview" + }, + "tooltips": { + "title": "Tooltips", + "url": "https://m3.material.io/components/tooltips/overview" + }, + "top-app-bar": { + "title": "App bars", + "url": "https://m3.material.io/components/top-app-bar/overview" + }, + "typography": { + "title": "Typography", + "url": "https://m3.material.io/styles/typography/overview" + }, + "window-size-classes": { + "title": "Window size classes", + "url": "https://m3.material.io/foundations/layout/applying-layout/window-size-classes" + } + }, + "apg": { + "alertdialog": { + "title": "Alert and message dialogs pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/alertdialog/" + }, + "button": { + "title": "Button pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/button/" + }, + "carousel": { + "title": "Carousel pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/carousel/" + }, + "combobox": { + "title": "Combobox pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/combobox/" + }, + "dialog-modal": { + "title": "Dialog (modal) pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/" + }, + "disclosure": { + "title": "Disclosure pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/disclosure/" + }, + "grid": { + "title": "Grid pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/grid/" + }, + "keyboard-interface": { + "title": "Developing a keyboard interface", + "url": "https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/" + }, + "landmarks": { + "title": "Landmarks pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/landmarks/" + }, + "listbox": { + "title": "Listbox pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/listbox/" + }, + "menu-button": { + "title": "Menu button pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/" + }, + "menubar": { + "title": "Menu and menubar pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/menubar/" + }, + "meter": { + "title": "Meter pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/meter/" + }, + "names-and-descriptions": { + "title": "Providing accessible names and descriptions", + "url": "https://www.w3.org/WAI/ARIA/apg/practices/names-and-descriptions/" + }, + "radio": { + "title": "Radio group pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/radio/" + }, + "slider": { + "title": "Slider pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/slider/" + }, + "spinbutton": { + "title": "Spinbutton pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/" + }, + "switch": { + "title": "Switch pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/switch/" + }, + "table": { + "title": "Table pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/table/" + }, + "tabs": { + "title": "Tabs pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/tabs/" + }, + "toolbar": { + "title": "Toolbar pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/toolbar/" + }, + "tooltip": { + "title": "Tooltip pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/" + }, + "treegrid": { + "title": "Treegrid pattern", + "url": "https://www.w3.org/WAI/ARIA/apg/patterns/treegrid/" + } + }, + "source_pages": [ + { + "page": "accessibility", + "section": "foundations", + "title": "Accessibility", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "disposition": "extracted" + }, + { + "page": "app-icons", + "section": "foundations", + "title": "App icons", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/app-icons", + "disposition": "excluded", + "reason": "Home-screen icon production for Apple platforms; web favicon and manifest icons are out of this extraction's scope." + }, + { + "page": "branding", + "section": "foundations", + "title": "Branding", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/branding", + "disposition": "extracted" + }, + { + "page": "color", + "section": "foundations", + "title": "Color", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/color", + "disposition": "extracted" + }, + { + "page": "dark-mode", + "section": "foundations", + "title": "Dark Mode", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/dark-mode", + "disposition": "extracted" + }, + { + "page": "icons", + "section": "foundations", + "title": "Icons", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/icons", + "disposition": "extracted" + }, + { + "page": "images", + "section": "foundations", + "title": "Images", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/images", + "disposition": "extracted" + }, + { + "page": "immersive-experiences", + "section": "foundations", + "title": "Immersive experiences", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/immersive-experiences", + "disposition": "excluded", + "reason": "visionOS immersion modes depend on Apple spatial computing hardware; no web default exists." + }, + { + "page": "inclusion", + "section": "foundations", + "title": "Inclusion", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/inclusion", + "disposition": "extracted" + }, + { + "page": "layout", + "section": "foundations", + "title": "Layout", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/layout", + "disposition": "extracted" + }, + { + "page": "materials", + "section": "foundations", + "title": "Materials", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/materials", + "disposition": "extracted" + }, + { + "page": "motion", + "section": "foundations", + "title": "Motion", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/motion", + "disposition": "extracted" + }, + { + "page": "privacy", + "section": "foundations", + "title": "Privacy", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/privacy", + "disposition": "extracted" + }, + { + "page": "right-to-left", + "section": "foundations", + "title": "Right to left", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/right-to-left", + "disposition": "extracted" + }, + { + "page": "sf-symbols", + "section": "foundations", + "title": "SF Symbols", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/sf-symbols", + "disposition": "extracted" + }, + { + "page": "spatial-layout", + "section": "foundations", + "title": "Spatial layout", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/spatial-layout", + "disposition": "excluded", + "reason": "visionOS spatial placement depends on Apple head-mounted hardware; no web default exists." + }, + { + "page": "typography", + "section": "foundations", + "title": "Typography", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/typography", + "disposition": "extracted" + }, + { + "page": "writing", + "section": "foundations", + "title": "Writing", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/writing", + "disposition": "extracted" + }, + { + "page": "charting-data", + "section": "patterns", + "title": "Charting data", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/charting-data", + "disposition": "extracted" + }, + { + "page": "collaboration-and-sharing", + "section": "patterns", + "title": "Collaboration and sharing", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/collaboration-and-sharing", + "disposition": "extracted" + }, + { + "page": "drag-and-drop", + "section": "patterns", + "title": "Drag and drop", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/drag-and-drop", + "disposition": "extracted" + }, + { + "page": "entering-data", + "section": "patterns", + "title": "Entering data", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/entering-data", + "disposition": "extracted" + }, + { + "page": "feedback", + "section": "patterns", + "title": "Feedback", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/feedback", + "disposition": "extracted" + }, + { + "page": "file-management", + "section": "patterns", + "title": "File management", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/file-management", + "disposition": "extracted" + }, + { + "page": "going-full-screen", + "section": "patterns", + "title": "Going full screen", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/going-full-screen", + "disposition": "extracted" + }, + { + "page": "launching", + "section": "patterns", + "title": "Launching", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/launching", + "disposition": "extracted" + }, + { + "page": "live-viewing-apps", + "section": "patterns", + "title": "Live-viewing apps", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/live-viewing-apps", + "disposition": "excluded", + "reason": "tvOS live-television viewing conventions; no general web default." + }, + { + "page": "loading", + "section": "patterns", + "title": "Loading", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/loading", + "disposition": "extracted" + }, + { + "page": "managing-accounts", + "section": "patterns", + "title": "Managing accounts", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/managing-accounts", + "disposition": "extracted" + }, + { + "page": "managing-notifications", + "section": "patterns", + "title": "Managing notifications", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/managing-notifications", + "disposition": "extracted" + }, + { + "page": "modality", + "section": "patterns", + "title": "Modality", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/modality", + "disposition": "extracted" + }, + { + "page": "multitasking", + "section": "patterns", + "title": "Multitasking", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/multitasking", + "disposition": "extracted" + }, + { + "page": "offering-help", + "section": "patterns", + "title": "Offering help", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/offering-help", + "disposition": "extracted" + }, + { + "page": "onboarding", + "section": "patterns", + "title": "Onboarding", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/onboarding", + "disposition": "extracted" + }, + { + "page": "playing-audio", + "section": "patterns", + "title": "Playing audio", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/playing-audio", + "disposition": "extracted" + }, + { + "page": "playing-haptics", + "section": "patterns", + "title": "Playing haptics", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/playing-haptics", + "disposition": "extracted" + }, + { + "page": "playing-video", + "section": "patterns", + "title": "Playing video", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/playing-video", + "disposition": "extracted" + }, + { + "page": "printing", + "section": "patterns", + "title": "Printing", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/printing", + "disposition": "extracted" + }, + { + "page": "ratings-and-reviews", + "section": "patterns", + "title": "Ratings and reviews", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/ratings-and-reviews", + "disposition": "extracted" + }, + { + "page": "searching", + "section": "patterns", + "title": "Searching", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/searching", + "disposition": "extracted" + }, + { + "page": "settings", + "section": "patterns", + "title": "Settings", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/settings", + "disposition": "extracted" + }, + { + "page": "undo-and-redo", + "section": "patterns", + "title": "Undo and redo", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/undo-and-redo", + "disposition": "extracted" + }, + { + "page": "workouts", + "section": "patterns", + "title": "Workouts", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/workouts", + "disposition": "excluded", + "reason": "watchOS fitness-session conventions tied to Apple Watch sensors; no general web default." + }, + { + "page": "charts", + "section": "components", + "title": "Charts", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/charts", + "group": "Content", + "disposition": "extracted" + }, + { + "page": "image-views", + "section": "components", + "title": "Image views", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/image-views", + "group": "Content", + "disposition": "extracted" + }, + { + "page": "text-views", + "section": "components", + "title": "Text views", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/text-views", + "group": "Content", + "disposition": "extracted" + }, + { + "page": "web-views", + "section": "components", + "title": "Web views", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/web-views", + "group": "Content", + "disposition": "extracted" + }, + { + "page": "boxes", + "section": "components", + "title": "Boxes", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/boxes", + "group": "Layout and organization", + "disposition": "extracted" + }, + { + "page": "collections", + "section": "components", + "title": "Collections", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/collections", + "group": "Layout and organization", + "disposition": "extracted" + }, + { + "page": "column-views", + "section": "components", + "title": "Column views", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/column-views", + "group": "Layout and organization", + "disposition": "excluded", + "reason": "macOS column browser; web hierarchy navigation is covered by outline-views and split-views principles." + }, + { + "page": "disclosure-controls", + "section": "components", + "title": "Disclosure controls", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/disclosure-controls", + "group": "Layout and organization", + "disposition": "extracted" + }, + { + "page": "labels", + "section": "components", + "title": "Labels", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/labels", + "group": "Layout and organization", + "disposition": "covered", + "covered_by": "hig.components.text-views.selectable-useful-text", + "reason": "Label guidance on selectable text and readable type is covered by text-views and typography principles." + }, + { + "page": "lists-and-tables", + "section": "components", + "title": "Lists and tables", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/lists-and-tables", + "group": "Layout and organization", + "disposition": "extracted" + }, + { + "page": "lockups", + "section": "components", + "title": "Lockups", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/lockups", + "group": "Layout and organization", + "disposition": "excluded", + "reason": "tvOS focusable content lockups; no general web default." + }, + { + "page": "outline-views", + "section": "components", + "title": "Outline views", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/outline-views", + "group": "Layout and organization", + "disposition": "extracted" + }, + { + "page": "split-views", + "section": "components", + "title": "Split views", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/split-views", + "group": "Layout and organization", + "disposition": "extracted" + }, + { + "page": "tab-views", + "section": "components", + "title": "Tab views", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/tab-views", + "group": "Layout and organization", + "disposition": "extracted" + }, + { + "page": "activity-views", + "section": "components", + "title": "Activity views", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/activity-views", + "group": "Menus and actions", + "disposition": "covered", + "covered_by": "hig.patterns.collaboration-and-sharing.clear-sharing-scope", + "reason": "The share-sheet guidance reduces to clear sharing scope; the system share sheet itself is Apple-provided." + }, + { + "page": "buttons", + "section": "components", + "title": "Buttons", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/buttons", + "group": "Menus and actions", + "disposition": "extracted" + }, + { + "page": "context-menus", + "section": "components", + "title": "Context menus", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/context-menus", + "group": "Menus and actions", + "disposition": "extracted" + }, + { + "page": "dock-menus", + "section": "components", + "title": "Dock menus", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/dock-menus", + "group": "Menus and actions", + "disposition": "excluded", + "reason": "macOS Dock integration; no web counterpart." + }, + { + "page": "edit-menus", + "section": "components", + "title": "Edit menus", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/edit-menus", + "group": "Menus and actions", + "disposition": "extracted" + }, + { + "page": "home-screen-quick-actions", + "section": "components", + "title": "Home Screen quick actions", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/home-screen-quick-actions", + "group": "Menus and actions", + "disposition": "excluded", + "reason": "iOS Home Screen integration; no web counterpart." + }, + { + "page": "menus", + "section": "components", + "title": "Menus", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/menus", + "group": "Menus and actions", + "disposition": "extracted" + }, + { + "page": "ornaments", + "section": "components", + "title": "Ornaments", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/ornaments", + "group": "Menus and actions", + "disposition": "excluded", + "reason": "visionOS window ornaments; no web counterpart." + }, + { + "page": "pop-up-buttons", + "section": "components", + "title": "Pop-up buttons", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/pop-up-buttons", + "group": "Menus and actions", + "disposition": "extracted" + }, + { + "page": "pull-down-buttons", + "section": "components", + "title": "Pull-down buttons", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/pull-down-buttons", + "group": "Menus and actions", + "disposition": "extracted" + }, + { + "page": "the-menu-bar", + "section": "components", + "title": "The menu bar", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/the-menu-bar", + "group": "Menus and actions", + "disposition": "extracted" + }, + { + "page": "toolbars", + "section": "components", + "title": "Toolbars", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/toolbars", + "group": "Menus and actions", + "disposition": "extracted" + }, + { + "page": "path-controls", + "section": "components", + "title": "Path controls", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/path-controls", + "group": "Navigation and search", + "disposition": "excluded", + "reason": "macOS path control; web breadcrumb guidance lives in design-engineering/evidence-patterns/breadcrumbs.md." + }, + { + "page": "search-fields", + "section": "components", + "title": "Search fields", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/search-fields", + "group": "Navigation and search", + "disposition": "extracted" + }, + { + "page": "sidebars", + "section": "components", + "title": "Sidebars", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/sidebars", + "group": "Navigation and search", + "disposition": "extracted" + }, + { + "page": "tab-bars", + "section": "components", + "title": "Tab bars", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/tab-bars", + "group": "Navigation and search", + "disposition": "extracted" + }, + { + "page": "token-fields", + "section": "components", + "title": "Token fields", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/token-fields", + "group": "Navigation and search", + "disposition": "excluded", + "reason": "macOS token field; web chip-input guidance lives in design-engineering/evidence-patterns/autocomplete.md." + }, + { + "page": "action-sheets", + "section": "components", + "title": "Action sheets", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/action-sheets", + "group": "Presentation", + "disposition": "extracted" + }, + { + "page": "alerts", + "section": "components", + "title": "Alerts", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/alerts", + "group": "Presentation", + "disposition": "extracted" + }, + { + "page": "page-controls", + "section": "components", + "title": "Page controls", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/page-controls", + "group": "Presentation", + "disposition": "extracted" + }, + { + "page": "panels", + "section": "components", + "title": "Panels", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/panels", + "group": "Presentation", + "disposition": "excluded", + "reason": "macOS floating inspector panels; transient web surfaces are covered by popovers and sheets principles." + }, + { + "page": "popovers", + "section": "components", + "title": "Popovers", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/popovers", + "group": "Presentation", + "disposition": "extracted" + }, + { + "page": "scroll-views", + "section": "components", + "title": "Scroll views", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/scroll-views", + "group": "Presentation", + "disposition": "extracted" + }, + { + "page": "sheets", + "section": "components", + "title": "Sheets", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/sheets", + "group": "Presentation", + "disposition": "extracted" + }, + { + "page": "windows", + "section": "components", + "title": "Windows", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/windows", + "group": "Presentation", + "disposition": "extracted" + }, + { + "page": "color-wells", + "section": "components", + "title": "Color wells", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/color-wells", + "group": "Selection and input", + "disposition": "extracted" + }, + { + "page": "combo-boxes", + "section": "components", + "title": "Combo boxes", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/combo-boxes", + "group": "Selection and input", + "disposition": "extracted" + }, + { + "page": "digit-entry-views", + "section": "components", + "title": "Digit entry views", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/digit-entry-views", + "group": "Selection and input", + "disposition": "extracted" + }, + { + "page": "image-wells", + "section": "components", + "title": "Image wells", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/image-wells", + "group": "Selection and input", + "disposition": "excluded", + "reason": "macOS editable image wells; no general web default beyond file inputs." + }, + { + "page": "pickers", + "section": "components", + "title": "Pickers", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/pickers", + "group": "Selection and input", + "disposition": "extracted" + }, + { + "page": "segmented-controls", + "section": "components", + "title": "Segmented controls", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/segmented-controls", + "group": "Selection and input", + "disposition": "extracted" + }, + { + "page": "sliders", + "section": "components", + "title": "Sliders", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/sliders", + "group": "Selection and input", + "disposition": "extracted" + }, + { + "page": "steppers", + "section": "components", + "title": "Steppers", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/steppers", + "group": "Selection and input", + "disposition": "extracted" + }, + { + "page": "text-fields", + "section": "components", + "title": "Text fields", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/text-fields", + "group": "Selection and input", + "disposition": "extracted" + }, + { + "page": "toggles", + "section": "components", + "title": "Toggles", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/toggles", + "group": "Selection and input", + "disposition": "extracted" + }, + { + "page": "virtual-keyboards", + "section": "components", + "title": "Virtual keyboards", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/virtual-keyboards", + "group": "Selection and input", + "disposition": "extracted" + }, + { + "page": "activity-rings", + "section": "components", + "title": "Activity rings", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/activity-rings", + "group": "Status", + "disposition": "excluded", + "reason": "Apple Fitness brand element restricted to Apple health data; must not be imitated." + }, + { + "page": "gauges", + "section": "components", + "title": "Gauges", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/gauges", + "group": "Status", + "disposition": "extracted" + }, + { + "page": "progress-indicators", + "section": "components", + "title": "Progress indicators", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/progress-indicators", + "group": "Status", + "disposition": "extracted" + }, + { + "page": "rating-indicators", + "section": "components", + "title": "Rating indicators", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/rating-indicators", + "group": "Status", + "disposition": "extracted" + }, + { + "page": "app-shortcuts", + "section": "components", + "title": "App Shortcuts", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/app-shortcuts", + "group": "System experiences", + "disposition": "excluded", + "reason": "Siri and Shortcuts system integration; no web counterpart." + }, + { + "page": "complications", + "section": "components", + "title": "Complications", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/complications", + "group": "System experiences", + "disposition": "excluded", + "reason": "watchOS watch-face complications; no web counterpart." + }, + { + "page": "controls", + "section": "components", + "title": "Controls", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/controls", + "group": "System experiences", + "disposition": "excluded", + "reason": "iOS Control Center and Lock Screen controls; no web counterpart." + }, + { + "page": "live-activities", + "section": "components", + "title": "Live Activities", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/live-activities", + "group": "System experiences", + "disposition": "excluded", + "reason": "iOS Lock Screen and Dynamic Island live activities; must not be imitated on the web." + }, + { + "page": "notifications", + "section": "components", + "title": "Notifications", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/notifications", + "group": "System experiences", + "disposition": "extracted" + }, + { + "page": "snippets", + "section": "components", + "title": "Snippets", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/snippets", + "group": "System experiences", + "disposition": "excluded", + "reason": "Siri and App Intents result snippets; no web counterpart." + }, + { + "page": "status-bars", + "section": "components", + "title": "Status bars", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/status-bars", + "group": "System experiences", + "disposition": "excluded", + "reason": "iOS system status bar; covered for web by the layout safe-regions principle." + }, + { + "page": "top-shelf", + "section": "components", + "title": "Top Shelf", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/top-shelf", + "group": "System experiences", + "disposition": "excluded", + "reason": "tvOS Top Shelf; no web counterpart." + }, + { + "page": "watch-faces", + "section": "components", + "title": "Watch faces", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/watch-faces", + "group": "System experiences", + "disposition": "excluded", + "reason": "watchOS watch faces; no web counterpart." + }, + { + "page": "widgets", + "section": "components", + "title": "Widgets", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/widgets", + "group": "System experiences", + "disposition": "excluded", + "reason": "Home Screen and desktop widgets are Apple system surfaces; no web counterpart." + }, + { + "page": "action-button", + "section": "inputs", + "title": "Action button", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/action-button", + "disposition": "excluded", + "reason": "iPhone and Apple Watch hardware Action button; no web counterpart." + }, + { + "page": "apple-pencil-and-scribble", + "section": "inputs", + "title": "Apple Pencil and Scribble", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/apple-pencil-and-scribble", + "disposition": "extracted" + }, + { + "page": "camera-control", + "section": "inputs", + "title": "Camera Control", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/camera-control", + "disposition": "excluded", + "reason": "iPhone hardware Camera Control; no web counterpart." + }, + { + "page": "digital-crown", + "section": "inputs", + "title": "Digital Crown", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/digital-crown", + "disposition": "excluded", + "reason": "Apple Watch and Vision Pro hardware crown; no web counterpart." + }, + { + "page": "eyes", + "section": "inputs", + "title": "Eyes", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/eyes", + "disposition": "covered", + "covered_by": "hig.inputs.gestures.multiple-input-paths", + "reason": "Eye-input guidance generalizes to offering multiple input paths, covered by the gestures principle." + }, + { + "page": "focus-and-selection", + "section": "inputs", + "title": "Focus and selection", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/focus-and-selection", + "disposition": "extracted" + }, + { + "page": "game-controls", + "section": "inputs", + "title": "Game controls", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/game-controls", + "disposition": "excluded", + "reason": "Game-controller and on-screen game control conventions; target-size and press-state needs are covered by accessibility and buttons principles." + }, + { + "page": "gestures", + "section": "inputs", + "title": "Gestures", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/gestures", + "disposition": "extracted" + }, + { + "page": "gyro-and-accelerometer", + "section": "inputs", + "title": "Gyroscope and accelerometer", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/gyro-and-accelerometer", + "disposition": "extracted" + }, + { + "page": "keyboards", + "section": "inputs", + "title": "Keyboards", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/keyboards", + "disposition": "extracted" + }, + { + "page": "nearby-interactions", + "section": "inputs", + "title": "Nearby interactions", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/nearby-interactions", + "disposition": "excluded", + "reason": "Ultra Wideband device-proximity interaction; no web counterpart." + }, + { + "page": "pointing-devices", + "section": "inputs", + "title": "Pointing devices", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/pointing-devices", + "disposition": "extracted" + }, + { + "page": "remotes", + "section": "inputs", + "title": "Remotes", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/remotes", + "disposition": "excluded", + "reason": "Siri Remote and tvOS focus engine; no web counterpart." + }, + { + "page": "airplay", + "section": "technologies", + "title": "AirPlay", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/airplay", + "disposition": "excluded", + "reason": "Apple media-streaming protocol; no web default." + }, + { + "page": "always-on", + "section": "technologies", + "title": "Always On", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/always-on", + "disposition": "excluded", + "reason": "Always On display behavior of Apple hardware; no web counterpart." + }, + { + "page": "app-clips", + "section": "technologies", + "title": "App Clips", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/app-clips", + "disposition": "excluded", + "reason": "Apple lightweight app-launch technology; no web counterpart." + }, + { + "page": "apple-in-app-purchase", + "section": "technologies", + "title": "Apple In-App Purchase", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/apple-in-app-purchase", + "disposition": "extracted" + }, + { + "page": "apple-pay", + "section": "technologies", + "title": "Apple Pay", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/apple-pay", + "disposition": "extracted" + }, + { + "page": "augmented-reality", + "section": "technologies", + "title": "Augmented reality", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/augmented-reality", + "disposition": "excluded", + "reason": "ARKit-based augmented reality on Apple devices; no web default." + }, + { + "page": "carekit", + "section": "technologies", + "title": "CareKit", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/carekit", + "disposition": "covered", + "covered_by": "hig.foundations.privacy.ask-in-context", + "reason": "Health-data permission guidance reduces to contextual, minimal permission requests." + }, + { + "page": "carplay", + "section": "technologies", + "title": "CarPlay", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/carplay", + "disposition": "excluded", + "reason": "CarPlay in-vehicle system; no web counterpart." + }, + { + "page": "game-center", + "section": "technologies", + "title": "Game Center", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/game-center", + "disposition": "excluded", + "reason": "Apple game services; no web counterpart." + }, + { + "page": "generative-ai", + "section": "technologies", + "title": "Generative AI", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/generative-ai", + "disposition": "extracted" + }, + { + "page": "healthkit", + "section": "technologies", + "title": "HealthKit", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/healthkit", + "disposition": "covered", + "covered_by": "hig.foundations.privacy.ask-in-context", + "reason": "Health-data permission guidance reduces to contextual, minimal permission requests." + }, + { + "page": "homekit", + "section": "technologies", + "title": "HomeKit", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/homekit", + "disposition": "excluded", + "reason": "Apple home-automation framework; no web counterpart." + }, + { + "page": "icloud", + "section": "technologies", + "title": "iCloud", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/icloud", + "disposition": "extracted" + }, + { + "page": "id-verifier", + "section": "technologies", + "title": "ID Verifier", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/id-verifier", + "disposition": "covered", + "covered_by": "hig.foundations.privacy.minimal-data", + "reason": "Identity verification guidance reduces to requesting only the data needed." + }, + { + "page": "imessage-apps-and-stickers", + "section": "technologies", + "title": "iMessage apps and stickers", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/imessage-apps-and-stickers", + "disposition": "excluded", + "reason": "Messages app extensions; no web counterpart." + }, + { + "page": "live-photos", + "section": "technologies", + "title": "Live Photos", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/live-photos", + "disposition": "excluded", + "reason": "Apple Live Photo media format; no web default." + }, + { + "page": "mac-catalyst", + "section": "technologies", + "title": "Mac Catalyst", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/mac-catalyst", + "disposition": "excluded", + "reason": "Apple framework for bringing iPad apps to macOS; no web counterpart." + }, + { + "page": "machine-learning", + "section": "technologies", + "title": "Machine learning", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/machine-learning", + "disposition": "extracted" + }, + { + "page": "maps", + "section": "technologies", + "title": "Maps", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/maps", + "disposition": "extracted" + }, + { + "page": "nfc", + "section": "technologies", + "title": "NFC", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/nfc", + "disposition": "excluded", + "reason": "Core NFC tag reading on iPhone; no web default." + }, + { + "page": "photo-editing", + "section": "technologies", + "title": "Photo editing", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/photo-editing", + "disposition": "covered", + "covered_by": "hig.patterns.modality.obvious-dismiss", + "reason": "Confirming cancellation of edits reduces to the modal dismiss-and-protect principle." + }, + { + "page": "researchkit", + "section": "technologies", + "title": "ResearchKit", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/researchkit", + "disposition": "extracted" + }, + { + "page": "shareplay", + "section": "technologies", + "title": "SharePlay", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/shareplay", + "disposition": "excluded", + "reason": "Apple shared-activity framework; no web counterpart." + }, + { + "page": "shazamkit", + "section": "technologies", + "title": "ShazamKit", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/shazamkit", + "disposition": "excluded", + "reason": "Apple audio-recognition service; no web counterpart." + }, + { + "page": "sign-in-with-apple", + "section": "technologies", + "title": "Sign in with Apple", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple", + "disposition": "covered", + "covered_by": "hig.patterns.managing-accounts.delay-sign-in", + "reason": "Sign-in timing guidance reduces to delaying sign-in until it provides value; the Apple button itself is Apple-specific." + }, + { + "page": "siri", + "section": "technologies", + "title": "Siri", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/siri", + "disposition": "excluded", + "reason": "Siri voice-assistant integration; no web counterpart." + }, + { + "page": "tap-to-pay-on-iphone", + "section": "technologies", + "title": "Tap to Pay on iPhone", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/tap-to-pay-on-iphone", + "disposition": "excluded", + "reason": "Apple merchant payment acceptance; no web counterpart." + }, + { + "page": "voiceover", + "section": "technologies", + "title": "VoiceOver", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/voiceover", + "disposition": "extracted" + }, + { + "page": "wallet", + "section": "technologies", + "title": "Wallet", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/wallet", + "disposition": "excluded", + "reason": "Apple Wallet passes; no web counterpart." + } + ], + "principles": [ + { + "id": "hig.foundations.accessibility.target-size", + "section": "foundations", + "page": "accessibility", + "statement": "Give every interactive control a hit area and surrounding spacing large enough that a person with limited dexterity reliably activates the intended control.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "adapt", + "class_reason": "HIG states its minimum in Apple points per platform; on the web the floor is WCAG 2.5.8 (24 by 24 CSS px or equivalent spacing), with 2.5.5 as the enhanced target.", + "wcag": [ + "2.5.8", + "2.5.5" + ], + "material3": "structure", + "apg": null, + "verification_question": "Does every pointer target meet 24 by 24 CSS px, or have enough spacing that a 24 px circle around it touches no other target?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.accessibility.text-resize", + "section": "foundations", + "page": "accessibility", + "statement": "Let people enlarge text without losing content, controls, or reading order.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "adapt", + "class_reason": "HIG frames this through Dynamic Type; the web equivalents are browser zoom, text-only zoom, and relative units, verified against WCAG resize and reflow criteria.", + "wcag": [ + "1.4.4", + "1.4.10", + "1.4.12" + ], + "material3": "typography", + "apg": null, + "verification_question": "At 200% text size and at a 320 CSS px wide viewport, is every piece of content and every control still reachable without two-dimensional scrolling?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.accessibility.contrast", + "section": "foundations", + "page": "accessibility", + "statement": "Keep text, icons, and control boundaries distinguishable from their background in every supported appearance.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "universal", + "class_reason": "Contrast need comes from human vision, not from a platform; both HIG and WCAG require measurable minimums.", + "wcag": [ + "1.4.3", + "1.4.11" + ], + "material3": "contrast", + "apg": null, + "verification_question": "Do body text, large text, and essential non-text indicators meet 4.5:1, 3:1, and 3:1 in light, dark, and increased-contrast states?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.accessibility.not-color-alone", + "section": "foundations", + "page": "accessibility", + "statement": "Never make color the only carrier of status, meaning, or interactivity; pair it with text, shape, or position.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "universal", + "class_reason": "Color-vision differences exist on every platform.", + "wcag": [ + "1.4.1" + ], + "material3": "color", + "apg": null, + "verification_question": "If the screen is rendered in grayscale, can every status, error, selected item, and link still be identified?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.accessibility.assistive-names", + "section": "foundations", + "page": "accessibility", + "statement": "Expose a meaningful name, role, and current state for every control and informative image to assistive technology.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "universal", + "class_reason": "HIG names VoiceOver; the requirement is the same for any screen reader on any platform.", + "wcag": [ + "1.1.1", + "4.1.2" + ], + "material3": null, + "apg": "names-and-descriptions", + "verification_question": "Does a screen reader announce a specific name, the correct role, and the current state for each control in the flow?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.accessibility.media-alternatives", + "section": "foundations", + "page": "accessibility", + "statement": "Offer text-based and described alternatives such as captions, transcripts, and audio description for audio and video content.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "universal", + "class_reason": "People who cannot hear or see the media exist regardless of device.", + "wcag": [ + "1.2.2", + "1.2.5" + ], + "material3": null, + "apg": null, + "verification_question": "Does every prerecorded video with speech have synchronized captions, and is essential visual information described?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.accessibility.multimodal-cues", + "section": "foundations", + "page": "accessibility", + "statement": "When a cue is delivered by sound or vibration, deliver the same information through a visible channel too.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "universal", + "class_reason": "Sensory redundancy is platform-neutral.", + "wcag": [ + "1.3.3" + ], + "material3": null, + "apg": null, + "verification_question": "Can a person with sound off and no vibration still notice every alert and confirmation?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.accessibility.gesture-alternatives", + "section": "foundations", + "page": "accessibility", + "statement": "Keep common actions reachable with simple single-pointer input and provide an alternative for any path-based, multi-finger, or drag gesture.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "universal", + "class_reason": "Motor limits apply to every touch and pointer surface.", + "wcag": [ + "2.5.1", + "2.5.7" + ], + "material3": "gestures", + "apg": null, + "verification_question": "Can every gesture-driven action also be done with a single tap or click, without dragging?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.accessibility.keyboard-only", + "section": "foundations", + "page": "accessibility", + "statement": "Make the whole experience operable with a keyboard alone, with a visible focus indicator and no traps.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "universal", + "class_reason": "HIG pairs this with Full Keyboard Access and Switch Control; keyboard operability is the shared base for all such technologies.", + "wcag": [ + "2.1.1", + "2.1.2", + "2.4.7" + ], + "material3": null, + "apg": "keyboard-interface", + "verification_question": "Can the main task be completed using only Tab, Shift+Tab, arrow keys, Enter, Space, and Escape, with focus always visible?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.accessibility.label-in-name", + "section": "foundations", + "page": "accessibility", + "statement": "Make the spoken name of each control match its visible label so voice-input users can target it by saying what they see.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "adapt", + "class_reason": "HIG frames this through Voice Control; on the web it maps to the accessible name containing the visible label text.", + "wcag": [ + "2.5.3" + ], + "material3": null, + "apg": "names-and-descriptions", + "verification_question": "Does each control's accessible name start with, or contain, its visible label text?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.accessibility.time-limits", + "section": "foundations", + "page": "accessibility", + "statement": "Avoid interface elements that expire on a timer; when a limit is unavoidable, let people extend or turn it off.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "universal", + "class_reason": "Cognitive and motor differences make fixed time limits exclusionary everywhere.", + "wcag": [ + "2.2.1" + ], + "material3": null, + "apg": null, + "verification_question": "Can every timed element be paused, extended, or disabled before it expires?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.accessibility.flashing-and-fast-motion", + "section": "foundations", + "page": "accessibility", + "statement": "Let people stop moving or blinking content and avoid flashes that can trigger seizures.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "universal", + "class_reason": "Photosensitivity and vestibular risk are physiological, not platform-bound.", + "wcag": [ + "2.3.1", + "2.2.2" + ], + "material3": "motion", + "apg": null, + "verification_question": "Does any content flash more than three times per second, and can every auto-moving element be paused?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.color.consistent-meaning", + "section": "foundations", + "page": "color", + "statement": "Assign each color one meaning and keep that meaning stable across the product.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/color", + "class": "universal", + "class_reason": "Consistent semantics reduce learning cost on any platform.", + "wcag": [ + "3.2.4" + ], + "material3": "color-roles", + "apg": null, + "verification_question": "Is any one color used for two unrelated meanings, such as both success and selection?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.color.appearance-coverage", + "section": "foundations", + "page": "color", + "statement": "Check every color pairing in each appearance the product ships, including high-contrast modes, and under varied ambient lighting.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/color", + "class": "universal", + "class_reason": "Display conditions vary across all devices.", + "wcag": [ + "1.4.3", + "1.4.11" + ], + "material3": "color", + "apg": null, + "verification_question": "Has each foreground/background pair been measured in every appearance the product ships?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.color.semantic-roles", + "section": "foundations", + "page": "color", + "statement": "Reference colors through named semantic roles that resolve per appearance, rather than hard-coding literal values.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/color", + "class": "adapt", + "class_reason": "HIG relies on Apple dynamic system colors; on the web use role-named custom properties, CSS system colors, and appearance media queries.", + "wcag": [], + "material3": "color-roles", + "apg": null, + "verification_question": "Can the appearance change without editing any literal color value inside component code?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.color.cultural-meaning", + "section": "foundations", + "page": "color", + "statement": "Consider that color connotations differ across cultures and regions before attaching meaning to a hue.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/color", + "class": "universal", + "class_reason": "Cultural interpretation is independent of platform.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Has the color meaning been checked for each target locale?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.color.glass-tinting", + "section": "foundations", + "page": "color", + "statement": "Tinting rules for Apple's system glass material describe an Apple-rendered surface and are not a web default.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/color", + "class": "apple-specific", + "class_reason": "The material is drawn by Apple's system frameworks; imitating it on the web is out of bounds under this domain's no-imitation boundary.", + "wcag": [], + "material3": "elevation", + "apg": null, + "verification_question": "Does the web adaptation avoid recreating Apple's system glass and instead use a verified opaque or tonal surface?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.dark-mode.follow-system-appearance", + "section": "foundations", + "page": "dark-mode", + "statement": "Follow the person's system-wide light or dark preference by default.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/dark-mode", + "class": "adapt", + "class_reason": "HIG discourages an app-only appearance switch; on the web honor prefers-color-scheme and color-scheme, and treat any site-level override as a deliberate product decision.", + "wcag": [], + "material3": "color", + "apg": null, + "verification_question": "With no saved preference, does the page render in the operating system's current appearance?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.dark-mode.both-appearances", + "section": "foundations", + "page": "dark-mode", + "statement": "Make content, images, and icons legible and well-balanced in both light and dark appearances.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/dark-mode", + "class": "universal", + "class_reason": "Any product offering two appearances must verify both.", + "wcag": [ + "1.4.3", + "1.4.11" + ], + "material3": "contrast", + "apg": null, + "verification_question": "Do all text, icons, and full-color images keep required contrast and remain recognizable in both appearances?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.dark-mode.soften-bright-backgrounds", + "section": "foundations", + "page": "dark-mode", + "statement": "Avoid pure, glaring white backgrounds in dark contexts; dim large bright surfaces so they do not overpower nearby content.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/dark-mode", + "class": "universal", + "class_reason": "Glare in low light is a display property, not a platform rule.", + "wcag": [], + "material3": "color", + "apg": null, + "verification_question": "Does any large bright surface appear inside the dark appearance without being dimmed?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.icons.single-concept", + "section": "foundations", + "page": "icons", + "statement": "Design each interface icon around one simplified, recognizable concept and keep the icon family visually consistent.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/icons", + "class": "universal", + "class_reason": "Icon legibility principles are shared across design systems.", + "wcag": [], + "material3": "icons", + "apg": null, + "verification_question": "Can people name the action of each icon without its label, and do all icons share stroke weight and style?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.icons.text-alternative", + "section": "foundations", + "page": "icons", + "statement": "Give every icon-only control a text alternative that names its action.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/icons", + "class": "universal", + "class_reason": "Assistive technology needs a name for any non-text control.", + "wcag": [ + "1.1.1", + "4.1.2" + ], + "material3": "icons", + "apg": "button", + "verification_question": "Does every icon-only button have an accessible name that describes the action, not the picture?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.icons.vector-and-optical-alignment", + "section": "foundations", + "page": "icons", + "statement": "Prefer vector formats for interface icons and align them optically with adjacent text.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/icons", + "class": "universal", + "class_reason": "Resolution independence and optical alignment apply to every rendering surface.", + "wcag": [], + "material3": "icons", + "apg": null, + "verification_question": "Are interface icons delivered as vector assets and vertically aligned with their labels at every text size?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.images.density-ready", + "section": "foundations", + "page": "images", + "statement": "Deliver images that stay sharp at every display density the product supports, preferring vector art for flat graphics.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/images", + "class": "adapt", + "class_reason": "HIG names Apple scale factors; on the web use responsive image sources, vector formats, and verified density descriptors.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "On a high-density display, is every bitmap served at sufficient resolution without oversized downloads?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.images.real-device-check", + "section": "foundations", + "page": "images", + "statement": "Verify artwork on real target displays, not only in design tools.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/images", + "class": "universal", + "class_reason": "Color profiles and densities differ across physical screens.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Was the artwork reviewed on at least one physical device per target display class?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.inclusion.plain-language", + "section": "foundations", + "page": "inclusion", + "statement": "Write in plain language, define specialist terms, and avoid idioms that do not translate.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/inclusion", + "class": "universal", + "class_reason": "Comprehension and translation needs are universal.", + "wcag": [ + "3.1.3" + ], + "material3": "content-design", + "apg": null, + "verification_question": "Does any user-facing string contain an undefined term of art or a colloquialism?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.inclusion.respectful-reference", + "section": "foundations", + "page": "inclusion", + "statement": "Refer to people respectfully, use people-first wording about disability, and avoid assumptions about identity.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/inclusion", + "class": "universal", + "class_reason": "Respectful communication is independent of platform.", + "wcag": [], + "material3": "content-design", + "apg": null, + "verification_question": "Does any copy assume gender, family structure, or ability where it does not need to?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.inclusion.inclusive-imagery", + "section": "foundations", + "page": "inclusion", + "statement": "Choose imagery and examples that represent a broad range of people and do not exclude people with disabilities.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/inclusion", + "class": "universal", + "class_reason": "Representation concerns apply to every product surface.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Do illustrations and sample data represent a range of people rather than one default?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.layout.importance-order", + "section": "foundations", + "page": "layout", + "statement": "Order content by importance so the most relevant information comes first in both visual and reading order.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/layout", + "class": "universal", + "class_reason": "Reading and focus order must match the visual hierarchy on any platform.", + "wcag": [ + "1.3.2", + "2.4.3" + ], + "material3": "layout", + "apg": null, + "verification_question": "Does the DOM and focus order present the primary content and action before secondary material?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.layout.group-related", + "section": "foundations", + "page": "layout", + "statement": "Group related items and use alignment and indentation to express hierarchy.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/layout", + "class": "universal", + "class_reason": "Proximity and alignment are general perception principles.", + "wcag": [ + "1.3.1" + ], + "material3": "layout", + "apg": null, + "verification_question": "Are grouped items also grouped semantically, for example with a list, fieldset, or section heading?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.layout.progressive-disclosure", + "section": "foundations", + "page": "layout", + "statement": "Reveal secondary detail on demand rather than showing everything at once.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/layout", + "class": "universal", + "class_reason": "Reducing upfront complexity is platform-neutral.", + "wcag": [], + "material3": null, + "apg": "disclosure", + "verification_question": "Is secondary detail hidden behind a labeled control that exposes its expanded state?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.layout.adapt-to-space", + "section": "foundations", + "page": "layout", + "statement": "Base layout changes on the space actually available, keeping functionality the same and changes recognizable as size changes.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/layout", + "class": "adapt", + "class_reason": "HIG uses Apple size classes; on the web use intrinsic layout, container queries, and viewport breakpoints only for viewport-level shells.", + "wcag": [ + "1.4.10", + "1.3.4" + ], + "material3": "window-size-classes", + "apg": null, + "verification_question": "When the container narrows from roomy to tight, does every function remain available in a recognizable arrangement?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.layout.controls-vs-content", + "section": "foundations", + "page": "layout", + "statement": "Make controls visually distinguishable from the content they act on.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/layout", + "class": "universal", + "class_reason": "Affordance clarity is shared across design systems.", + "wcag": [ + "1.4.11" + ], + "material3": "states", + "apg": null, + "verification_question": "Can a first-time viewer tell which elements are interactive without hovering?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.layout.safe-regions", + "section": "foundations", + "page": "layout", + "statement": "Keep controls and essential content out of regions that hardware or system interface may cover.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/layout", + "class": "adapt", + "class_reason": "HIG names Apple safe areas and camera housings; on the web use env(safe-area-inset-*) with viewport-fit and test on devices with display cutouts.", + "wcag": [ + "2.4.11" + ], + "material3": "layout", + "apg": null, + "verification_question": "On a device with a display cutout or home indicator, is any control or essential text obscured?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.materials.system-material", + "section": "foundations", + "page": "materials", + "statement": "Apple's translucent system materials, including Liquid Glass, are rendered by Apple frameworks and are not a pattern to recreate on the web.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/materials", + "class": "apple-specific", + "class_reason": "Recreating the visual signature would be platform imitation; the web counterpart decision is an opaque or tonal surface verified for contrast.", + "wcag": [], + "material3": "elevation", + "apg": null, + "verification_question": "Does the adaptation avoid backdrop-blur imitation of Apple system materials as a default surface?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.materials.legibility-over-translucency", + "section": "foundations", + "page": "materials", + "statement": "When content sits over any translucent or blurred surface, verify legibility against the worst-case background, not the typical one.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/materials", + "class": "adapt", + "class_reason": "HIG relies on system vibrancy to keep text legible; on the web no such guarantee exists, so contrast must be measured on real backgrounds.", + "wcag": [ + "1.4.3", + "1.4.11" + ], + "material3": "contrast", + "apg": null, + "verification_question": "Has text over every translucent layer been measured against the lightest and darkest content that can scroll beneath it?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.motion.purposeful", + "section": "foundations", + "page": "motion", + "statement": "Use motion only where it communicates status, feedback, or spatial relationship, and keep it from dominating the task.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/motion", + "class": "universal", + "class_reason": "Purposeful motion is a shared principle across HIG and Material.", + "wcag": [], + "material3": "motion", + "apg": null, + "verification_question": "Can each animation be justified by the information it conveys?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.motion.optional", + "section": "foundations", + "page": "motion", + "statement": "Make motion optional and provide an equivalent non-moving presentation when people reduce motion.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/motion", + "class": "adapt", + "class_reason": "HIG ties this to the Reduce Motion setting; on the web honor prefers-reduced-motion and keep the same content available.", + "wcag": [ + "2.3.3", + "2.2.2" + ], + "material3": "motion", + "apg": null, + "verification_question": "With reduced motion enabled, is all content and state still conveyed without non-essential movement?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.motion.brief-and-cancelable", + "section": "foundations", + "page": "motion", + "statement": "Keep feedback motion short and precise, and let people interrupt or cancel it without waiting.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/motion", + "class": "universal", + "class_reason": "Responsiveness and control are platform-neutral.", + "wcag": [ + "2.2.2" + ], + "material3": "motion", + "apg": null, + "verification_question": "Can new input interrupt any running transition without a locked or jumping state?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.motion.avoid-frequent", + "section": "foundations", + "page": "motion", + "statement": "Avoid animating interactions that people repeat many times in a session.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/motion", + "class": "universal", + "class_reason": "Repeated animation becomes friction on every platform.", + "wcag": [], + "material3": "motion", + "apg": null, + "verification_question": "Is any high-frequency action, such as typing or toggling, gated by an animation?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.privacy.minimal-data", + "section": "foundations", + "page": "privacy", + "statement": "Collect only data the feature genuinely needs and explain how it is used.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/privacy", + "class": "universal", + "class_reason": "Data minimization is a general privacy principle and a legal expectation in many regions.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Can each requested data item be tied to a specific feature that would fail without it?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.privacy.ask-in-context", + "section": "foundations", + "page": "privacy", + "statement": "Request access to sensitive resources at the moment a feature needs it, with copy that explains why, rather than at first launch.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/privacy", + "class": "universal", + "class_reason": "Contextual permission requests apply to web permission prompts as much as native ones.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Is every permission request triggered by a person's action on the feature that needs it?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.privacy.no-misleading-preprompt", + "section": "foundations", + "page": "privacy", + "statement": "Never place a screen before a system permission prompt that pressures, confuses, or misrepresents the choice.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/privacy", + "class": "universal", + "class_reason": "Deceptive consent design is harmful on every platform.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Does any pre-permission screen offer only one path, hide the decline option, or misdescribe the system prompt?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.privacy.beyond-passwords", + "section": "foundations", + "page": "privacy", + "statement": "Offer authentication that does not rely only on a memorized password, such as passkeys.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/privacy", + "class": "adapt", + "class_reason": "HIG names keychain and Apple sign-in; on the web the counterparts are WebAuthn passkeys and password-manager-friendly fields.", + "wcag": [ + "3.3.8" + ], + "material3": null, + "apg": null, + "verification_question": "Can a person sign in without transcribing or memorizing a secret, for example with a passkey or autofill?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.right-to-left.mirror-interface", + "section": "foundations", + "page": "right-to-left", + "statement": "Mirror interface direction for right-to-left scripts, flipping controls that express reading order or progress.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/right-to-left", + "class": "universal", + "class_reason": "Script direction support is required for any localized product.", + "wcag": [ + "1.3.2" + ], + "material3": "layout", + "apg": null, + "verification_question": "With dir=rtl, do navigation order, progress controls, and back/forward affordances flip while layout stays intact?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.right-to-left.numerals-and-real-direction", + "section": "foundations", + "page": "right-to-left", + "statement": "Keep the digits within a number in their natural order and keep icons that depict physical direction or real objects unflipped.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/right-to-left", + "class": "universal", + "class_reason": "Number and object semantics do not change with script direction.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "In right-to-left mode, are numbers, clocks, media play icons, and photographs left unmirrored?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.right-to-left.align-by-language", + "section": "foundations", + "page": "right-to-left", + "statement": "Align each paragraph according to its own language, not the surrounding interface direction.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/right-to-left", + "class": "universal", + "class_reason": "Mixed-script content occurs on every platform.", + "wcag": [ + "3.1.2" + ], + "material3": null, + "apg": null, + "verification_question": "Do embedded paragraphs in another script carry their own language and direction?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.sf-symbols.system-symbol-set", + "section": "foundations", + "page": "sf-symbols", + "statement": "Apple's symbol set is licensed for Apple platforms and integrates with Apple's system font; it is not an icon source for web products.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/sf-symbols", + "class": "apple-specific", + "class_reason": "Using it on the web would be both a licensing problem and platform imitation; choose an openly licensed icon set instead.", + "wcag": [], + "material3": "icons", + "apg": null, + "verification_question": "Does the web product avoid shipping Apple system symbols or close redrawings of them?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.branding.brand-defers-to-content", + "section": "foundations", + "page": "branding", + "statement": "Express brand through voice, accent color, and type while keeping standard components and letting content stay primary.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/branding", + "class": "universal", + "class_reason": "Balancing identity with familiarity is shared by HIG and Material.", + "wcag": [], + "material3": "color", + "apg": null, + "verification_question": "Does branding ever displace content or alter a standard control's recognizable behavior?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.branding.no-brand-gate", + "section": "foundations", + "page": "branding", + "statement": "Do not use launch or loading screens, or repeated logos, as branding moments that delay people.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/branding", + "class": "universal", + "class_reason": "Delays for brand display cost time on every platform.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Is there any screen whose only purpose is to show a logo?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.typography.legible-defaults", + "section": "foundations", + "page": "typography", + "statement": "Use default text sizes most people read comfortably and avoid very thin weights for body text.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/typography", + "class": "adapt", + "class_reason": "HIG states sizes in Apple points per platform; on the web use a relative root size and verify at increased text size.", + "wcag": [ + "1.4.4", + "1.4.12" + ], + "material3": "typography", + "apg": null, + "verification_question": "Is body text set in relative units at a comfortable default size and readable at 200%?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.typography.hierarchy-few-typefaces", + "section": "foundations", + "page": "typography", + "statement": "Build hierarchy with size, weight, and color, and keep the number of typefaces small.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/typography", + "class": "universal", + "class_reason": "Typographic hierarchy is a shared design principle.", + "wcag": [ + "1.3.1" + ], + "material3": "typography", + "apg": null, + "verification_question": "Is visual hierarchy also expressed in heading semantics, and does the page use no more than two typefaces?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.typography.system-fonts", + "section": "foundations", + "page": "typography", + "statement": "Apple's system typefaces are licensed for Apple platforms; the web counterpart is the system-ui stack, not a bundled copy of Apple fonts.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/typography", + "class": "apple-specific", + "class_reason": "Shipping or imitating Apple fonts on the web is outside the no-imitation boundary.", + "wcag": [], + "material3": "typography", + "apg": null, + "verification_question": "Does the web build avoid bundling Apple system font files?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.typography.prioritize-on-resize", + "section": "foundations", + "page": "typography", + "statement": "When text grows, keep the most important content visible and let layout reflow instead of truncating it.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/typography", + "class": "universal", + "class_reason": "Large-text resilience applies on every platform.", + "wcag": [ + "1.4.4", + "1.4.10" + ], + "material3": "typography", + "apg": null, + "verification_question": "At the largest supported text size, is any essential label truncated or overlapped?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.writing.clear-and-action-oriented", + "section": "foundations", + "page": "writing", + "statement": "Label actions with specific verbs and keep copy short, clear, and suited to each screen's purpose.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/writing", + "class": "universal", + "class_reason": "Content design guidance is shared across HIG and Material.", + "wcag": [ + "2.4.6", + "2.4.4" + ], + "material3": "content-design", + "apg": null, + "verification_question": "Does every button or link describe the outcome of activating it, without needing surrounding context?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.writing.consistent-language", + "section": "foundations", + "page": "writing", + "statement": "Use the same term for the same thing and the same capitalization style throughout, especially across multi-step flows.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/writing", + "class": "universal", + "class_reason": "Terminology consistency reduces errors everywhere.", + "wcag": [ + "3.2.4" + ], + "material3": "content-design", + "apg": null, + "verification_question": "Is any concept named two different ways across the flow?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.writing.empty-states-next-step", + "section": "foundations", + "page": "writing", + "statement": "Give every empty screen a clear next step.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/writing", + "class": "universal", + "class_reason": "Empty states occur on every platform.", + "wcag": [], + "material3": "content-design", + "apg": null, + "verification_question": "Does each empty view state why it is empty and offer one action to fill it?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.writing.helpful-errors", + "section": "foundations", + "page": "writing", + "statement": "Write error messages that say what went wrong and how to fix it, in a neutral tone.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/writing", + "class": "universal", + "class_reason": "Error recovery guidance is platform-neutral.", + "wcag": [ + "3.3.1", + "3.3.3" + ], + "material3": "content-design", + "apg": null, + "verification_question": "Does each error message name the problem and a concrete correction?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.charting-data.accessible-charts", + "section": "patterns", + "page": "charting-data", + "statement": "Make every chart understandable without sight and without color, with a text summary of its key insight.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/charting-data", + "class": "universal", + "class_reason": "Data visualization accessibility is platform-neutral.", + "wcag": [ + "1.1.1", + "1.4.1" + ], + "material3": null, + "apg": null, + "verification_question": "Can a screen-reader user obtain the chart's main takeaway and underlying values?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.charting-data.simple-then-detail", + "section": "patterns", + "page": "charting-data", + "statement": "Prefer familiar chart types and a simple default view, letting people choose to see more detail.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/charting-data", + "class": "universal", + "class_reason": "Progressive detail in charts is a general visualization principle.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Does the default chart answer one question, with further detail available on request?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.collaboration-and-sharing.clear-sharing-scope", + "section": "patterns", + "page": "collaboration-and-sharing", + "statement": "Describe who can access shared content and what they can do in short, plain phrases before sharing.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/collaboration-and-sharing", + "class": "universal", + "class_reason": "Permission clarity matters on any platform.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Before sharing, can a person tell exactly who gets access and whether they can edit?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.drag-and-drop.non-drag-alternative", + "section": "patterns", + "page": "drag-and-drop", + "statement": "Offer a non-dragging way to perform anything that drag and drop can do.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/drag-and-drop", + "class": "universal", + "class_reason": "Dragging is hard for many people regardless of platform.", + "wcag": [ + "2.5.7", + "2.1.1" + ], + "material3": null, + "apg": null, + "verification_question": "Can every drag-and-drop outcome be achieved with single clicks or the keyboard?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.drag-and-drop.drop-target-feedback", + "section": "patterns", + "page": "drag-and-drop", + "statement": "Show whether a destination accepts the dragged item and what the drop will do.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/drag-and-drop", + "class": "universal", + "class_reason": "Predictable drop outcomes are a direct-manipulation principle.", + "wcag": [], + "material3": "states", + "apg": null, + "verification_question": "While dragging, does each potential target show whether it accepts the item?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.drag-and-drop.undoable-drop", + "section": "patterns", + "page": "drag-and-drop", + "statement": "Let people undo a drop, especially one that moves rather than copies.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/drag-and-drop", + "class": "universal", + "class_reason": "Recoverability is platform-neutral.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Can the last drop be undone without manual reconstruction?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.entering-data.prefer-choices", + "section": "patterns", + "page": "entering-data", + "statement": "Offer choices, defaults, and pasting instead of free text entry where possible.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/entering-data", + "class": "universal", + "class_reason": "Reducing typing lowers error rates everywhere.", + "wcag": [ + "3.3.7" + ], + "material3": "text-fields", + "apg": null, + "verification_question": "Is any field asking people to type something the product already knows or could offer as a choice?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.entering-data.autofill-input-purpose", + "section": "patterns", + "page": "entering-data", + "statement": "Obtain known information from the system rather than asking for it again.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/entering-data", + "class": "adapt", + "class_reason": "HIG uses Apple system data sources; on the web expose input purpose with autocomplete tokens so browsers and password managers can fill fields.", + "wcag": [ + "1.3.5", + "3.3.7" + ], + "material3": "text-fields", + "apg": null, + "verification_question": "Do personal-data fields declare the correct autocomplete token?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.entering-data.validate-early", + "section": "patterns", + "page": "entering-data", + "statement": "Check values as people work and make required information clear before they try to continue.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/entering-data", + "class": "universal", + "class_reason": "Inline validation and required-field clarity are shared form principles.", + "wcag": [ + "3.3.1", + "3.3.2", + "3.3.3" + ], + "material3": "text-fields", + "apg": null, + "verification_question": "Are required fields identified before submission, and are errors reported next to the field with a fix?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.entering-data.protect-secrets", + "section": "patterns", + "page": "entering-data", + "statement": "Mask secret entry and never prefill a password field with a stored value visible to others.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/entering-data", + "class": "universal", + "class_reason": "Credential protection is platform-neutral.", + "wcag": [], + "material3": "text-fields", + "apg": null, + "verification_question": "Are password fields masked by default, with an optional reveal control?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.feedback.accessible-feedback", + "section": "patterns", + "page": "feedback", + "statement": "Deliver status feedback in ways every person can perceive, including assistive technology.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/feedback", + "class": "universal", + "class_reason": "Status announcements are needed on every platform.", + "wcag": [ + "4.1.3" + ], + "material3": "snackbar", + "apg": null, + "verification_question": "Is each success, progress, or error status announced to screen readers without moving focus?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.feedback.warn-before-irreversible", + "section": "patterns", + "page": "feedback", + "statement": "Warn before an action causes unexpected, irreversible data loss.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/feedback", + "class": "universal", + "class_reason": "Error prevention for destructive actions is a shared principle.", + "wcag": [ + "3.3.4" + ], + "material3": "dialogs", + "apg": "alertdialog", + "verification_question": "Does every irreversible destructive action require confirmation or offer undo?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.feedback.explain-unavailable", + "section": "patterns", + "page": "feedback", + "statement": "When a command cannot run, show that it is unavailable and explain why.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/feedback", + "class": "universal", + "class_reason": "Explaining constraints helps recovery on every platform.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Does a disabled or failed command tell people what condition must change?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.file-management.work-is-preserved", + "section": "patterns", + "page": "file-management", + "statement": "Keep people's work safe automatically unless they explicitly discard it.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/file-management", + "class": "universal", + "class_reason": "Data-loss prevention is platform-neutral.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "If the tab closes or the connection drops mid-edit, is the work recoverable?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.going-full-screen.keep-essentials-and-exit", + "section": "patterns", + "page": "going-full-screen", + "statement": "In full-screen views, keep essential controls reachable and let people choose when to leave.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/going-full-screen", + "class": "universal", + "class_reason": "Control over immersive views applies to the web Fullscreen API too.", + "wcag": [ + "2.1.2" + ], + "material3": null, + "apg": null, + "verification_question": "In full-screen mode, are core controls reachable and does Escape always exit?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.going-full-screen.resume-position", + "section": "patterns", + "page": "going-full-screen", + "statement": "When people return to a full-screen experience, resume where they left off.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/going-full-screen", + "class": "universal", + "class_reason": "State restoration is platform-neutral.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "After leaving and returning, does playback or reading resume at the previous position?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.launching.fast-start", + "section": "patterns", + "page": "launching", + "statement": "Show the first usable screen as quickly as possible and avoid splash screens that only delay.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/launching", + "class": "universal", + "class_reason": "Startup time matters on every platform.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Is the first meaningful content visible without an intermediate brand or splash screen?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.launching.restore-state", + "section": "patterns", + "page": "launching", + "statement": "Bring back the prior view, selection, and position when someone returns, so the session picks up without rework.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/launching", + "class": "universal", + "class_reason": "Continuity applies to web sessions as well.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "After a reload, does the view return to the same location, filters, and selection?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.loading.show-something-soon", + "section": "patterns", + "page": "loading", + "statement": "Display available content immediately and fill in the rest as it loads.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/loading", + "class": "universal", + "class_reason": "Perceived performance principles are platform-neutral.", + "wcag": [], + "material3": "progress-indicators", + "apg": null, + "verification_question": "Does the screen show structure or partial content before all data arrives?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.loading.communicate-progress", + "section": "patterns", + "page": "loading", + "statement": "Make clear that content is loading and, when possible, how long it will take.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/loading", + "class": "universal", + "class_reason": "Progress communication is shared with Material and WCAG status guidance.", + "wcag": [ + "4.1.3" + ], + "material3": "progress-indicators", + "apg": null, + "verification_question": "Does every load longer than about a second show a progress indication announced to assistive technology?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.loading.non-blocking-wait", + "section": "patterns", + "page": "loading", + "statement": "Let people keep using other parts of the product while content loads.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/loading", + "class": "universal", + "class_reason": "Non-blocking loading is platform-neutral.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Can people navigate elsewhere while a long load continues?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.managing-accounts.delay-sign-in", + "section": "patterns", + "page": "managing-accounts", + "statement": "Let people explore before requiring registration, and explain what an account gives them when you do ask.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/managing-accounts", + "class": "universal", + "class_reason": "Deferred registration is a general usability principle.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Can a new visitor reach meaningful content before any sign-in prompt?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.managing-accounts.clear-account-deletion", + "section": "patterns", + "page": "managing-accounts", + "statement": "Provide an easy-to-find way to delete an account, consistent across app and website.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/managing-accounts", + "class": "universal", + "class_reason": "Account control is expected, and in some regions required, everywhere.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Can a signed-in person find and complete account deletion without contacting support?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.managing-accounts.name-auth-method", + "section": "patterns", + "page": "managing-accounts", + "statement": "Name the authentication methods that are actually available in the current context.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/managing-accounts", + "class": "adapt", + "class_reason": "HIG refers to Apple biometrics and passkeys; on the web reflect what the browser and device support.", + "wcag": [ + "3.3.8" + ], + "material3": null, + "apg": null, + "verification_question": "Does the sign-in screen only offer methods the current browser and device can complete?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.managing-notifications.honest-urgency", + "section": "patterns", + "page": "managing-notifications", + "statement": "Represent each notification's urgency accurately and never use urgent channels for marketing.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/managing-notifications", + "class": "universal", + "class_reason": "Trustworthy interruption is platform-neutral.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Is any promotional message delivered through a channel reserved for time-sensitive alerts?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.managing-notifications.consent-and-control", + "section": "patterns", + "page": "managing-notifications", + "statement": "Get explicit permission for promotional notifications and let people manage notification settings inside the product.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/managing-notifications", + "class": "universal", + "class_reason": "Consent and control apply to web push too.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Can people change notification types from within the product's own settings?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.modality.modal-only-when-needed", + "section": "patterns", + "page": "modality", + "statement": "Use modal presentation only when focusing on a short, self-contained task brings a clear benefit.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/modality", + "class": "universal", + "class_reason": "Modal overuse harms flow on every platform.", + "wcag": [], + "material3": "dialogs", + "apg": "dialog-modal", + "verification_question": "Could this modal task be done inline without losing clarity?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.modality.obvious-dismiss", + "section": "patterns", + "page": "modality", + "statement": "Every modal view needs a clear exit, and closing it must not silently discard work in progress.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/modality", + "class": "universal", + "class_reason": "Escape routes and data protection are platform-neutral.", + "wcag": [ + "2.1.2" + ], + "material3": "dialogs", + "apg": "dialog-modal", + "verification_question": "Does each modal close with a visible control and Escape, and warn before discarding unsaved input?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.modality.one-modal-at-a-time", + "section": "patterns", + "page": "modality", + "statement": "Avoid stacking modal views; close one before presenting another.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/modality", + "class": "universal", + "class_reason": "Nested modality disorients people on any platform.", + "wcag": [], + "material3": "dialogs", + "apg": "dialog-modal", + "verification_question": "Can a modal ever open another modal on top of itself?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.multitasking.pause-when-hidden", + "section": "patterns", + "page": "multitasking", + "statement": "Pause activities that need attention when people switch away, and resume smoothly.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/multitasking", + "class": "adapt", + "class_reason": "HIG uses Apple app-lifecycle events; on the web use the Page Visibility API.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "When the tab becomes hidden, do timers, games, and attention-requiring media pause?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.offering-help.task-based-help", + "section": "patterns", + "page": "offering-help", + "statement": "Shape help around the tasks people perform, using consistent wording and imagery.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/offering-help", + "class": "universal", + "class_reason": "Task-oriented help is platform-neutral.", + "wcag": [ + "3.2.6" + ], + "material3": null, + "apg": null, + "verification_question": "Is help placed in the same location on every screen and organized by task?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.offering-help.short-dismissible-tips", + "section": "patterns", + "page": "offering-help", + "statement": "Keep tips brief and actionable, and make them dismissible without moving focus or hiding content.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/offering-help", + "class": "universal", + "class_reason": "Tooltip and coach-mark behavior is shared with web guidance.", + "wcag": [ + "1.4.13" + ], + "material3": "tooltips", + "apg": "tooltip", + "verification_question": "Can every tip be dismissed with Escape, and does it stay visible while hovered?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.onboarding.learn-by-doing", + "section": "patterns", + "page": "onboarding", + "statement": "Teach through interaction in context rather than through long upfront tutorials.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/onboarding", + "class": "universal", + "class_reason": "Contextual learning is a general usability principle.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Does onboarding let people perform the real task instead of reading about it?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.onboarding.optional-and-brief", + "section": "patterns", + "page": "onboarding", + "statement": "Keep any required onboarding short, make tutorials optional, and postpone nonessential setup.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/onboarding", + "class": "universal", + "class_reason": "Low-friction start applies everywhere.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Can a person skip onboarding and still reach the main task?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.playing-audio.respect-sound-settings", + "section": "patterns", + "page": "playing-audio", + "statement": "Respect people's silence and volume choices and never start sound unexpectedly.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/playing-audio", + "class": "adapt", + "class_reason": "HIG references the hardware silence switch and system volume; on the web avoid autoplaying audio and provide a pause or mute control.", + "wcag": [ + "1.4.2" + ], + "material3": null, + "apg": null, + "verification_question": "Does any audio play automatically for more than three seconds without a control to stop it?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.playing-haptics.haptics-supplement", + "section": "patterns", + "page": "playing-haptics", + "statement": "Treat haptics as optional reinforcement of feedback that is already visible.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/playing-haptics", + "class": "adapt", + "class_reason": "HIG documents Apple haptic engine patterns; web vibration support is limited and must never be the only feedback channel.", + "wcag": [ + "1.3.3" + ], + "material3": null, + "apg": null, + "verification_question": "Is every haptic cue paired with a visible equivalent and possible to turn off?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.playing-video.preserve-aspect-ratio", + "section": "patterns", + "page": "playing-video", + "statement": "Show video at its original aspect ratio without stretching or cropping essential content.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/playing-video", + "class": "universal", + "class_reason": "Media fidelity is platform-neutral.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Does video keep its native aspect ratio at every container size?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.playing-video.expected-controls", + "section": "patterns", + "page": "playing-video", + "statement": "Support the playback interactions people expect for their input device, preferring the platform's player.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/playing-video", + "class": "adapt", + "class_reason": "HIG prefers Apple's system player; on the web prefer native media controls or a player with full keyboard support.", + "wcag": [ + "2.1.1" + ], + "material3": null, + "apg": null, + "verification_question": "Can playback be started, paused, and scrubbed with the keyboard?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.printing.discoverable-relevant-printing", + "section": "patterns", + "page": "printing", + "statement": "Offer printing only when output is meaningful, and keep frequently used print options separate from advanced ones.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/printing", + "class": "universal", + "class_reason": "Print relevance applies to web print styles too.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "When printing is offered, does the printed output contain the content people expect without interface chrome?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.ratings-and-reviews.ask-at-good-moments", + "section": "patterns", + "page": "ratings-and-reviews", + "statement": "Ask for feedback only after people have engaged, never mid-task, and not repeatedly.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/ratings-and-reviews", + "class": "universal", + "class_reason": "Interruption cost is platform-neutral.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Can a rating prompt appear during an unfinished task or more than once in a short period?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.searching.prominent-search", + "section": "patterns", + "page": "searching", + "statement": "When finding things is central to the product, put search in a prominent, stable location with one entry point.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/searching", + "class": "universal", + "class_reason": "Findability is a shared navigation principle.", + "wcag": [ + "3.2.3" + ], + "material3": "search", + "apg": "combobox", + "verification_question": "Is search reachable from the same location on every screen where it matters?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.searching.visible-scope-and-suggestions", + "section": "patterns", + "page": "searching", + "statement": "Show the current search scope and offer suggestions to reduce typing.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/searching", + "class": "universal", + "class_reason": "Scope clarity and suggestions are shared search principles.", + "wcag": [ + "4.1.3" + ], + "material3": "search", + "apg": "combobox", + "verification_question": "Is the current scope visible, and are suggestion counts announced to assistive technology?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.searching.private-history", + "section": "patterns", + "page": "searching", + "statement": "Consider privacy before displaying recent searches, and let people clear them.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/searching", + "class": "universal", + "class_reason": "Search history can reveal sensitive information on any device.", + "wcag": [], + "material3": "search", + "apg": null, + "verification_question": "Can people clear search history, and is it hidden on shared surfaces?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.settings.good-defaults-few-settings", + "section": "patterns", + "page": "settings", + "statement": "Choose defaults that serve most people and keep the number of settings small.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/settings", + "class": "universal", + "class_reason": "Default quality is a general product principle.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Could any setting be removed by choosing a better default?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.settings.respect-system-preferences", + "section": "patterns", + "page": "settings", + "statement": "Honor system-wide preferences rather than duplicating them in product settings.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/settings", + "class": "adapt", + "class_reason": "HIG refers to Apple system settings; on the web read user-preference media queries such as reduced motion, contrast, and color scheme.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Does the product read system preferences before offering its own duplicate toggles?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.settings.options-in-context", + "section": "patterns", + "page": "settings", + "statement": "Let people adjust task-specific options where they work rather than in a distant settings area.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/settings", + "class": "universal", + "class_reason": "Contextual options reduce navigation everywhere.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Are task-specific options available from the task's own view?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.undo-and-redo.predictable-undo", + "section": "patterns", + "page": "undo-and-redo", + "statement": "Make undo predictable: describe what will be undone, show its result, and allow multiple steps.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/undo-and-redo", + "class": "universal", + "class_reason": "Recoverability is a universal usability heuristic.", + "wcag": [], + "material3": "snackbar", + "apg": null, + "verification_question": "Does the undo control name the action it reverses, and can several actions be undone in order?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.patterns.undo-and-redo.standard-undo-shortcuts", + "section": "patterns", + "page": "undo-and-redo", + "statement": "Support the platform's standard undo and redo shortcuts and avoid redefining them.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/undo-and-redo", + "class": "adapt", + "class_reason": "HIG names macOS menu commands and shortcuts; on the web support the host platform's conventional undo shortcuts without hijacking text-field undo.", + "wcag": [ + "2.1.4" + ], + "material3": null, + "apg": "keyboard-interface", + "verification_question": "Do the conventional undo and redo shortcuts work, including inside text fields?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.charts.meaningful-axes", + "section": "components", + "page": "charts", + "statement": "Choose axis ranges and lower bounds that match what the data means, and use familiar tick values.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/charts", + "class": "universal", + "class_reason": "Honest axes are a general data-visualization principle.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Could the axis range exaggerate or hide the size of a change?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.image-views.text-over-images", + "section": "components", + "page": "image-views", + "statement": "When text overlays an image, guarantee its contrast against every part of the image it can cover.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/image-views", + "class": "universal", + "class_reason": "Overlay legibility is platform-neutral.", + "wcag": [ + "1.4.3" + ], + "material3": "contrast", + "apg": null, + "verification_question": "Has overlay text been measured against the brightest and darkest regions beneath it?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.image-views.interactive-images-are-buttons", + "section": "components", + "page": "image-views", + "statement": "Make a clickable image a real button or link, not a passive image with a click handler.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/image-views", + "class": "universal", + "class_reason": "Role exposure is required on every platform.", + "wcag": [ + "4.1.2" + ], + "material3": "buttons", + "apg": "button", + "verification_question": "Does each clickable image expose a button or link role and an accessible name?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.text-views.selectable-useful-text", + "section": "components", + "page": "text-views", + "statement": "Let people select and copy text that is useful outside the product.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/text-views", + "class": "universal", + "class_reason": "Copyable content supports reuse everywhere.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Can people select and copy reference numbers, addresses, and error text?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.text-views.matching-keyboard", + "section": "components", + "page": "text-views", + "statement": "Show the on-screen keyboard that matches the content being entered.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/text-views", + "class": "adapt", + "class_reason": "HIG uses Apple keyboard types; on the web use input types, inputmode, and enterkeyhint.", + "wcag": [ + "1.3.5" + ], + "material3": "text-fields", + "apg": null, + "verification_question": "Do email, number, phone, and search fields bring up the matching on-screen keyboard?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.web-views.embedded-navigation", + "section": "components", + "page": "web-views", + "statement": "When embedding navigable web content, support back and forward movement within it.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/web-views", + "class": "universal", + "class_reason": "History navigation is expected in any embedded browser context.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Can people go back after following a link inside embedded content?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.boxes.titled-groups", + "section": "components", + "page": "boxes", + "statement": "Give a visually grouped set of controls a short title that describes its contents.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/boxes", + "class": "universal", + "class_reason": "Group labeling is platform-neutral.", + "wcag": [ + "1.3.1" + ], + "material3": "cards", + "apg": null, + "verification_question": "Does each visual group of related fields have a programmatic group label such as a fieldset legend?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.collections.standard-grid-calm-changes", + "section": "components", + "page": "collections", + "statement": "Prefer standard row or grid arrangements and avoid disorienting layout changes when items are inserted or removed.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/collections", + "class": "universal", + "class_reason": "Layout stability is a shared principle.", + "wcag": [ + "2.3.3" + ], + "material3": "cards", + "apg": "grid", + "verification_question": "Does inserting or removing an item keep the person's place and focus?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.disclosure-controls.labeled-adjacent-disclosure", + "section": "components", + "page": "disclosure-controls", + "statement": "Label each disclosure control with what it reveals and place it next to the content it controls.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/disclosure-controls", + "class": "universal", + "class_reason": "Disclosure semantics are shared with WAI-ARIA.", + "wcag": [ + "4.1.2" + ], + "material3": null, + "apg": "disclosure", + "verification_question": "Does each disclosure trigger expose its expanded state and sit adjacent to its panel?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.lists-and-tables.text-in-lists", + "section": "components", + "page": "lists-and-tables", + "statement": "Present primarily textual items as lists or tables with succinct rows and descriptive column headings.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/lists-and-tables", + "class": "universal", + "class_reason": "Tabular semantics are platform-neutral.", + "wcag": [ + "1.3.1" + ], + "material3": "lists", + "apg": "table", + "verification_question": "Do data tables use header cells, and are list rows short enough to scan?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.lists-and-tables.avoid-clipping", + "section": "components", + "page": "lists-and-tables", + "statement": "Preserve readability of long item text instead of clipping meaning through truncation.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/lists-and-tables", + "class": "universal", + "class_reason": "Truncation harms comprehension everywhere.", + "wcag": [ + "1.4.10" + ], + "material3": "lists", + "apg": null, + "verification_question": "Is the full text of any truncated row available without hovering?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.lists-and-tables.selection-feedback", + "section": "components", + "page": "lists-and-tables", + "statement": "Give clear feedback when a list item is selected.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/lists-and-tables", + "class": "universal", + "class_reason": "Selection state must be perceivable on every platform.", + "wcag": [ + "4.1.2", + "1.4.11" + ], + "material3": "lists", + "apg": "listbox", + "verification_question": "Is the selected row visually distinct and exposed as selected to assistive technology?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.outline-views.hierarchy-first-column", + "section": "components", + "page": "outline-views", + "statement": "Show hierarchy in a single leading column, make nested groups easy to expand and collapse, and use a plain table for flat data.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/outline-views", + "class": "universal", + "class_reason": "Tree semantics are shared with WAI-ARIA.", + "wcag": [ + "1.3.1" + ], + "material3": null, + "apg": "treegrid", + "verification_question": "Is hierarchy exposed only in the first column with keyboard expand and collapse?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.split-views.persistent-selection", + "section": "components", + "page": "split-views", + "statement": "In multi-pane layouts, keep the chosen item marked in every navigation pane above the detail view.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/split-views", + "class": "universal", + "class_reason": "Wayfinding in list-detail layouts is platform-neutral.", + "wcag": [], + "material3": "layout", + "apg": null, + "verification_question": "Does the list pane continue to show which item the detail pane displays?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.split-views.collapse-for-narrow", + "section": "components", + "page": "split-views", + "statement": "Account for narrow, intermediate, and wide widths, with sensible minimum and maximum pane sizes and the option to hide a pane.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/split-views", + "class": "universal", + "class_reason": "Adaptive list-detail behavior is shared with Material canonical layouts.", + "wcag": [ + "1.4.10" + ], + "material3": "window-size-classes", + "apg": null, + "verification_question": "At a narrow width, does the split view collapse to one pane with a way back to the list?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.tab-views.related-panes", + "section": "components", + "page": "tab-views", + "statement": "Use tabs only for closely related content areas, with descriptive labels and a small number of tabs.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/tab-views", + "class": "universal", + "class_reason": "Tab semantics are shared with WAI-ARIA and Material.", + "wcag": [ + "4.1.2", + "2.4.6" + ], + "material3": "tabs", + "apg": "tabs", + "verification_question": "Are tabs few, clearly labeled, and implemented with tablist semantics and arrow-key movement?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.tab-views.pane-local-controls", + "section": "components", + "page": "tab-views", + "statement": "Controls inside a tab pane should affect only that pane.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/tab-views", + "class": "universal", + "class_reason": "Scope clarity is platform-neutral.", + "wcag": [], + "material3": "tabs", + "apg": "tabs", + "verification_question": "Does any control inside one tab change content in another tab?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.buttons.press-state", + "section": "components", + "page": "buttons", + "statement": "Give every custom button a visible pressed state in addition to hover and focus states.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/buttons", + "class": "universal", + "class_reason": "State feedback is shared with Material interaction states.", + "wcag": [ + "2.4.7" + ], + "material3": "states", + "apg": "button", + "verification_question": "Does each custom button show distinct hover, focus, pressed, and disabled states?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.buttons.one-prominent-action", + "section": "components", + "page": "buttons", + "statement": "Give the most likely action the most prominent style and keep prominent buttons few per view.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/buttons", + "class": "universal", + "class_reason": "Action hierarchy is a shared principle.", + "wcag": [], + "material3": "buttons", + "apg": null, + "verification_question": "Is there exactly one primary-styled button per decision point?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.buttons.role-is-clear", + "section": "components", + "page": "buttons", + "statement": "Indicate a button's role, such as destructive or cancel, through label and styling, not color alone.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/buttons", + "class": "universal", + "class_reason": "Role clarity is platform-neutral.", + "wcag": [ + "1.4.1" + ], + "material3": "buttons", + "apg": "button", + "verification_question": "Is a destructive button identifiable from its label even without its color?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.context-menus.context-menu-redundancy", + "section": "components", + "page": "context-menus", + "statement": "Make every context menu command also available from the main interface, and keep these menus short and relevant.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/context-menus", + "class": "universal", + "class_reason": "Hidden-only commands are undiscoverable on every platform.", + "wcag": [ + "2.1.1" + ], + "material3": "menus", + "apg": "menu-button", + "verification_question": "Is each context-menu command reachable without a right-click or long press?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.context-menus.shallow-submenus", + "section": "components", + "page": "context-menus", + "statement": "Limit submenus to one level and hide items that do not apply in a context menu.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/context-menus", + "class": "universal", + "class_reason": "Menu depth increases error rates everywhere.", + "wcag": [], + "material3": "menus", + "apg": "menubar", + "verification_question": "Does any context menu nest more than one submenu level?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.edit-menus.platform-edit-commands", + "section": "components", + "page": "edit-menus", + "statement": "Rely on the platform's own edit commands for cut, copy, paste, and undo rather than rebuilding them.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/edit-menus", + "class": "adapt", + "class_reason": "HIG refers to Apple's system edit menu; on the web keep native selection and clipboard behavior working and add custom commands beside it.", + "wcag": [], + "material3": "menus", + "apg": null, + "verification_question": "Do native copy, paste, and selection still work wherever custom edit actions are added?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.menus.clear-menu-labels", + "section": "components", + "page": "menus", + "statement": "Label each menu item with a succinct description of its action and show when an item is unavailable.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/menus", + "class": "universal", + "class_reason": "Menu clarity is shared with WAI-ARIA and Material.", + "wcag": [ + "4.1.2" + ], + "material3": "menus", + "apg": "menubar", + "verification_question": "Does every menu item name its action, and are unavailable items exposed as disabled?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.menus.more-input-indicator", + "section": "components", + "page": "menus", + "statement": "Signal when a menu command needs more input before it completes.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/menus", + "class": "adapt", + "class_reason": "HIG uses a trailing ellipsis convention from Apple platforms; on the web the signal may be an ellipsis or a description, verified for clarity.", + "wcag": [], + "material3": "menus", + "apg": "menubar", + "verification_question": "Can people predict which menu items open a further step before choosing them?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.pop-up-buttons.exclusive-options-with-default", + "section": "components", + "page": "pop-up-buttons", + "statement": "Use a compact single-choice control when exactly one of several options applies, and preselect a sensible value.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/pop-up-buttons", + "class": "universal", + "class_reason": "Single-select controls are platform-neutral.", + "wcag": [ + "4.1.2" + ], + "material3": "menus", + "apg": "listbox", + "verification_question": "Does the collapsed control show the current choice so people can predict the options?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.pull-down-buttons.related-commands-confirm-destructive", + "section": "components", + "page": "pull-down-buttons", + "statement": "Group only commands related to the button's action in its menu and confirm destructive items.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/pull-down-buttons", + "class": "universal", + "class_reason": "Command grouping and destructive confirmation are shared principles.", + "wcag": [ + "3.3.4" + ], + "material3": "menus", + "apg": "menu-button", + "verification_question": "Does the menu contain only related commands, and do destructive ones require confirmation?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.the-menu-bar.system-menu-bar", + "section": "components", + "page": "the-menu-bar", + "statement": "The macOS menu bar is a system-owned surface with a fixed structure; web products should not draw an imitation of it.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/the-menu-bar", + "class": "apple-specific", + "class_reason": "Imitating system chrome is outside the no-imitation boundary; web command menus follow WAI-ARIA menubar semantics on their own terms.", + "wcag": [], + "material3": null, + "apg": "menubar", + "verification_question": "Does the web product avoid recreating the macOS menu bar's appearance and position?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.toolbars.uncrowded-toolbars", + "section": "components", + "page": "toolbars", + "statement": "Choose toolbar items deliberately, move overflow into a more menu, and prefer standard controls.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/toolbars", + "class": "universal", + "class_reason": "Toolbar density is a shared principle.", + "wcag": [], + "material3": "top-app-bar", + "apg": "toolbar", + "verification_question": "At narrow widths, do surplus toolbar actions move into an overflow menu rather than shrinking?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.search-fields.search-hint-and-instant-results", + "section": "components", + "page": "search-fields", + "statement": "Use placeholder hints to describe what can be searched and start showing results as people type when feasible.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/search-fields", + "class": "universal", + "class_reason": "Search-field behavior is shared with Material and WAI-ARIA.", + "wcag": [ + "3.3.2", + "4.1.3" + ], + "material3": "search", + "apg": "combobox", + "verification_question": "Does the search field have a persistent accessible label, with the placeholder only as a hint?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.search-fields.filterable-results", + "section": "components", + "page": "search-fields", + "statement": "Keep search results simple and let people filter by clearly defined scopes.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/search-fields", + "class": "universal", + "class_reason": "Scoped filtering is a general search principle.", + "wcag": [], + "material3": "chips", + "apg": null, + "verification_question": "Can people narrow results by category without starting a new search?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.sidebars.shallow-hideable-sidebar", + "section": "components", + "page": "sidebars", + "statement": "Keep sidebar hierarchy to about two levels, let people hide it, and group deep content with disclosure.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/sidebars", + "class": "universal", + "class_reason": "Navigation depth limits are shared with Material navigation drawers.", + "wcag": [], + "material3": "navigation-drawer", + "apg": "landmarks", + "verification_question": "Is the sidebar a labeled navigation landmark that people can collapse?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.tab-bars.navigation-not-actions", + "section": "components", + "page": "tab-bars", + "statement": "Use a bottom or top navigation bar only to move between sections, never to trigger actions.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/tab-bars", + "class": "universal", + "class_reason": "Separating navigation from commands is shared with Material navigation bars.", + "wcag": [ + "3.2.3" + ], + "material3": "navigation-bar", + "apg": null, + "verification_question": "Does every item in the navigation bar lead to a destination rather than perform an action?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.tab-bars.stable-labeled-destinations", + "section": "components", + "page": "tab-bars", + "statement": "Keep the section navigation visible and stable, label every item, and do not hide or disable destinations.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/tab-bars", + "class": "universal", + "class_reason": "Consistent navigation is a WCAG and Material principle.", + "wcag": [ + "3.2.3", + "2.4.6" + ], + "material3": "navigation-bar", + "apg": null, + "verification_question": "Are navigation items labeled with text and present in the same order on every section?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.action-sheets.choices-for-intentional-action", + "section": "components", + "page": "action-sheets", + "statement": "Present a set of choices tied to an action the person started, include a way to cancel, and make destructive choices prominent.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/action-sheets", + "class": "universal", + "class_reason": "Action-choice sheets are shared with Material bottom sheets.", + "wcag": [], + "material3": "bottom-sheets", + "apg": "dialog-modal", + "verification_question": "Does every action sheet include a cancel path and clearly mark destructive choices?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.alerts.alerts-sparingly", + "section": "components", + "page": "alerts", + "statement": "Reserve alerts for critical, actionable situations; do not use them for information or for common actions that can be undone.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/alerts", + "class": "universal", + "class_reason": "Alert fatigue is platform-neutral.", + "wcag": [], + "material3": "dialogs", + "apg": "alertdialog", + "verification_question": "Could this alert be replaced by inline status or an undo affordance?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.alerts.clear-alert-copy", + "section": "components", + "page": "alerts", + "statement": "Write alert titles that state the situation directly and buttons that name the outcome.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/alerts", + "class": "universal", + "class_reason": "Dialog copy guidance is shared with Material.", + "wcag": [ + "2.4.6" + ], + "material3": "dialogs", + "apg": "alertdialog", + "verification_question": "Can someone choose correctly by reading only the alert's buttons?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.page-controls.ordered-page-position", + "section": "components", + "page": "page-controls", + "statement": "Indicate the current position among a small ordered set of pages with simple, consistent indicators.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/page-controls", + "class": "universal", + "class_reason": "Position indication is shared with WAI-ARIA carousels.", + "wcag": [ + "4.1.2" + ], + "material3": "carousel", + "apg": "carousel", + "verification_question": "Does the page indicator expose the current page and total to assistive technology?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.popovers.small-single-popover", + "section": "components", + "page": "popovers", + "statement": "Use a popover for a small amount of related content, show one at a time, and keep any work when it closes automatically.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/popovers", + "class": "universal", + "class_reason": "Non-modal overlay behavior is platform-neutral.", + "wcag": [ + "1.4.13" + ], + "material3": "menus", + "apg": null, + "verification_question": "Does opening a second popover close the first, and is input kept when a popover dismisses?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.scroll-views.visible-scrollability", + "section": "components", + "page": "scroll-views", + "statement": "Make it apparent when content scrolls and support standard scrolling input including the keyboard.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/scroll-views", + "class": "universal", + "class_reason": "Scroll discoverability is platform-neutral.", + "wcag": [ + "2.1.1" + ], + "material3": null, + "apg": null, + "verification_question": "Can a keyboard user scroll every scroll container, and is clipped content visibly hinted?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.scroll-views.no-same-axis-nesting", + "section": "components", + "page": "scroll-views", + "statement": "Avoid nesting a scroll area inside another that scrolls in the same direction.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/scroll-views", + "class": "universal", + "class_reason": "Nested same-axis scrolling traps input on every platform.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Is there any scroll container inside another with the same scroll axis?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.sheets.one-sheet-with-dismiss", + "section": "components", + "page": "sheets", + "statement": "Show one sheet at a time, offer an alternative to the confirm action for dismissal, and choose a different surface for long flows.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/sheets", + "class": "universal", + "class_reason": "Sheet behavior is shared with Material bottom and side sheets.", + "wcag": [ + "2.1.2" + ], + "material3": "bottom-sheets", + "apg": "dialog-modal", + "verification_question": "Can each sheet be dismissed without confirming, and is no second sheet stacked over it?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.windows.fluid-sizing", + "section": "components", + "page": "windows", + "statement": "Let windows and app frames adapt fluidly to any size people choose.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/windows", + "class": "universal", + "class_reason": "Resizable frames exist on desktop web and native alike.", + "wcag": [ + "1.4.10" + ], + "material3": "window-size-classes", + "apg": null, + "verification_question": "At every browser window width from 320 CSS px upward, does the layout remain usable?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.windows.no-fake-system-chrome", + "section": "components", + "page": "windows", + "statement": "Avoid drawing custom window chrome that mimics the operating system.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/windows", + "class": "adapt", + "class_reason": "HIG asks apps to keep system window UI; on the web drawing imitation title bars or traffic-light buttons is platform imitation.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Does the web product avoid rendering imitation operating-system window controls?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.color-wells.platform-color-picker", + "section": "components", + "page": "color-wells", + "statement": "Prefer the color selection UI the platform already provides over a custom picker.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/color-wells", + "class": "adapt", + "class_reason": "HIG refers to the Apple system color picker; on the web the counterpart is the native color input.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Does a color selection field use the native color input unless a custom picker is required?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.combo-boxes.default-and-relevant-choices", + "section": "components", + "page": "combo-boxes", + "statement": "Prefill a combined text-and-list control with a meaningful default, label it, and offer relevant choices.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/combo-boxes", + "class": "universal", + "class_reason": "Combobox semantics are shared with WAI-ARIA.", + "wcag": [ + "3.3.2", + "4.1.2" + ], + "material3": "menus", + "apg": "combobox", + "verification_question": "Does the combobox have a visible label and expose its expanded state and active option?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.digit-entry-views.purposeful-code-entry", + "section": "components", + "page": "digit-entry-views", + "statement": "State the purpose of short code entry and protect it when the code is secret.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/digit-entry-views", + "class": "adapt", + "class_reason": "HIG describes Apple digit-entry views; on the web use one-time-code autocomplete and a single labeled input instead of split boxes that break paste.", + "wcag": [ + "1.3.5", + "3.3.2" + ], + "material3": "text-fields", + "apg": null, + "verification_question": "Can a one-time code be pasted or autofilled in one action?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.pickers.ordered-in-place-pickers", + "section": "components", + "page": "pickers", + "statement": "Offer predictable, logically ordered values in place without switching views, and avoid needless precision.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/pickers", + "class": "universal", + "class_reason": "Picker ordering is a general selection principle.", + "wcag": [], + "material3": "date-pickers", + "apg": "listbox", + "verification_question": "Are picker values in a logical order and selectable without leaving the current view?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.segmented-controls.few-related-segments", + "section": "components", + "page": "segmented-controls", + "statement": "Use a segmented control for a few closely related choices, with consistent segment size and either all text or all icons.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/segmented-controls", + "class": "universal", + "class_reason": "Segmented choice semantics are shared with Material segmented buttons.", + "wcag": [ + "4.1.2" + ], + "material3": "segmented-buttons", + "apg": "radio", + "verification_question": "Does the control have a small number of segments, exposed as a single-choice group?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.sliders.slider-with-precise-entry", + "section": "components", + "page": "sliders", + "statement": "Pair a slider with precise entry when exact values matter, give live feedback, and use the expected direction.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/sliders", + "class": "universal", + "class_reason": "Slider operability is shared with WAI-ARIA and Material.", + "wcag": [ + "2.5.7", + "2.1.1" + ], + "material3": "sliders", + "apg": "slider", + "verification_question": "Can the slider value be set exactly with the keyboard or a text field, without dragging?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.steppers.visible-stepped-value", + "section": "components", + "page": "steppers", + "statement": "Make the value a stepper changes obvious and pair it with text entry for large changes.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/steppers", + "class": "adapt", + "class_reason": "HIG describes the Apple stepper control; the web counterpart is a spinbutton or number input with visible value.", + "wcag": [ + "4.1.2" + ], + "material3": null, + "apg": "spinbutton", + "verification_question": "Is the current value visible next to the stepper and announced on change?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.text-fields.sized-and-labeled-fields", + "section": "components", + "page": "text-fields", + "statement": "Size each text field to its expected content and keep a persistent label, using placeholder text only as a hint.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/text-fields", + "class": "universal", + "class_reason": "Field labeling is shared with WCAG and Material.", + "wcag": [ + "3.3.2" + ], + "material3": "text-fields", + "apg": null, + "verification_question": "Does every field keep its label visible while people type?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.text-fields.expected-field-order", + "section": "components", + "page": "text-fields", + "statement": "Make moving between fields follow the order people expect.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/text-fields", + "class": "universal", + "class_reason": "Focus order is platform-neutral.", + "wcag": [ + "2.4.3" + ], + "material3": "text-fields", + "apg": "keyboard-interface", + "verification_question": "Does Tab move through fields in visual reading order?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.toggles.obvious-two-state-toggle", + "section": "components", + "page": "toggles", + "statement": "Use a toggle for two opposing states, identify what it controls, and make its states visually obvious.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/toggles", + "class": "universal", + "class_reason": "Binary control semantics are shared with WAI-ARIA and Material.", + "wcag": [ + "1.4.1", + "1.4.11", + "4.1.2" + ], + "material3": "switch", + "apg": "switch", + "verification_question": "Is the on and off state distinguishable without color and exposed as checked or unchecked?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.virtual-keyboards.content-matched-keyboard", + "section": "components", + "page": "virtual-keyboards", + "statement": "Match the on-screen keyboard and its return key to the content and next step.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/virtual-keyboards", + "class": "adapt", + "class_reason": "HIG uses Apple keyboard types and return-key labels; on the web use inputmode and enterkeyhint.", + "wcag": [ + "1.3.5" + ], + "material3": "text-fields", + "apg": null, + "verification_question": "Does the on-screen keyboard's action key describe what happens next?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.gauges.labeled-range", + "section": "components", + "page": "gauges", + "statement": "Label a gauge's current value and both ends of its range.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/gauges", + "class": "universal", + "class_reason": "Range indicators need context on every platform.", + "wcag": [ + "1.1.1" + ], + "material3": null, + "apg": "meter", + "verification_question": "Does the gauge expose its value, minimum, and maximum as text or meter semantics?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.progress-indicators.determinate-when-possible", + "section": "components", + "page": "progress-indicators", + "statement": "Prefer a determinate progress indicator, report advancement honestly, and switch from indeterminate to determinate once duration is known.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/progress-indicators", + "class": "universal", + "class_reason": "Progress honesty is shared with Material.", + "wcag": [ + "4.1.3" + ], + "material3": "progress-indicators", + "apg": null, + "verification_question": "Does a long task show a determinate value as soon as one is known?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.progress-indicators.visible-continuation", + "section": "components", + "page": "progress-indicators", + "statement": "Keep a progress display visibly alive while work continues, so a running task never looks frozen.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/progress-indicators", + "class": "universal", + "class_reason": "Liveness signals are platform-neutral.", + "wcag": [], + "material3": "progress-indicators", + "apg": null, + "verification_question": "Does a stalled task change its indicator rather than appear frozen?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.rating-indicators.clear-adjustable-rating", + "section": "components", + "page": "rating-indicators", + "statement": "Make ratings easy to change and keep any custom rating symbol understandable.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/rating-indicators", + "class": "universal", + "class_reason": "Rating input semantics are platform-neutral.", + "wcag": [ + "4.1.2" + ], + "material3": null, + "apg": "radio", + "verification_question": "Can a rating be changed with the keyboard, and is each option named?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.components.notifications.concise-respectful-notifications", + "section": "components", + "page": "notifications", + "statement": "Send concise notifications without duplicates or sensitive details, and show errors inside the product rather than as notifications.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/notifications", + "class": "adapt", + "class_reason": "HIG describes Apple notification delivery; the same content rules apply to web push and in-page toasts.", + "wcag": [], + "material3": "snackbar", + "apg": null, + "verification_question": "Could any notification expose private data on a locked screen, or repeat an earlier one?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.inputs.apple-pencil-and-scribble.hover-previews-not-actions", + "section": "inputs", + "page": "apple-pencil-and-scribble", + "statement": "Use hover to preview what will happen, never to commit an action.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/apple-pencil-and-scribble", + "class": "adapt", + "class_reason": "HIG frames this for Apple Pencil hover; the same rule applies to web pointer hover, which touch users cannot trigger.", + "wcag": [ + "1.4.13" + ], + "material3": "states", + "apg": null, + "verification_question": "Does any action fire on hover alone, without a click, tap, or key press?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.inputs.focus-and-selection.no-unexpected-focus-moves", + "section": "inputs", + "page": "focus-and-selection", + "statement": "Do not move focus without the person's action.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/focus-and-selection", + "class": "universal", + "class_reason": "Unexpected focus changes disorient people on every platform.", + "wcag": [ + "3.2.1", + "3.2.2" + ], + "material3": null, + "apg": "keyboard-interface", + "verification_question": "Does focus ever jump without a key press, click, or explicit request?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.inputs.focus-and-selection.logical-focus-path", + "section": "inputs", + "page": "focus-and-selection", + "statement": "Make focus move through custom views in a sensible, predictable order.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/focus-and-selection", + "class": "universal", + "class_reason": "Focus order is platform-neutral.", + "wcag": [ + "2.4.3" + ], + "material3": null, + "apg": "keyboard-interface", + "verification_question": "Does keyboard focus travel through custom widgets in reading order?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.inputs.focus-and-selection.platform-consistent-focus-indicator", + "section": "inputs", + "page": "focus-and-selection", + "statement": "Indicate focus with a visible appearance consistent with the platform and never let it be hidden behind other content.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/focus-and-selection", + "class": "adapt", + "class_reason": "HIG relies on Apple system focus effects; on the web use :focus-visible with a high-contrast indicator that is not obscured by sticky elements.", + "wcag": [ + "2.4.7", + "2.4.11" + ], + "material3": "states", + "apg": null, + "verification_question": "Is the focus indicator visible on every control and never covered by a sticky header or footer?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.inputs.gestures.multiple-input-paths", + "section": "inputs", + "page": "gestures", + "statement": "Offer several input routes to each action, and treat shortcut gestures as extras on top of standard controls.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/gestures", + "class": "universal", + "class_reason": "Input redundancy supports people with different abilities and devices.", + "wcag": [ + "2.5.1", + "2.1.1" + ], + "material3": "gestures", + "apg": null, + "verification_question": "Is every gesture shortcut also available as a visible control?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.inputs.gestures.responsive-expected-gestures", + "section": "inputs", + "page": "gestures", + "statement": "Respond to standard gestures quickly and in the way people expect, and show when a gesture is unavailable.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/gestures", + "class": "universal", + "class_reason": "Gesture predictability is shared with Material.", + "wcag": [ + "2.5.2" + ], + "material3": "gestures", + "apg": null, + "verification_question": "Can a person cancel a touch action by moving off the target before release?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.inputs.gestures.no-system-gesture-conflicts", + "section": "inputs", + "page": "gestures", + "statement": "Avoid custom gestures that collide with system or browser gestures.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/gestures", + "class": "adapt", + "class_reason": "HIG names Apple system gestures; on the web avoid capturing edge swipes, back gestures, and pinch zoom.", + "wcag": [], + "material3": "gestures", + "apg": null, + "verification_question": "Does any custom gesture block browser back-swipe or pinch zoom?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.inputs.gyro-and-accelerometer.motion-input-alternatives", + "section": "inputs", + "page": "gyro-and-accelerometer", + "statement": "Use device-motion input only for a tangible benefit, and always provide a conventional alternative.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/gyro-and-accelerometer", + "class": "universal", + "class_reason": "Motion actuation excludes people who cannot move the device.", + "wcag": [ + "2.5.4" + ], + "material3": null, + "apg": null, + "verification_question": "Can every motion-triggered action also be done with a control, and can motion input be disabled?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.inputs.keyboards.respect-standard-shortcuts", + "section": "inputs", + "page": "keyboards", + "statement": "Keep standard keyboard shortcuts working and reserve custom shortcuts for the most frequent commands.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/keyboards", + "class": "adapt", + "class_reason": "HIG lists Apple modifier conventions; on the web avoid overriding browser and assistive-technology shortcuts and let single-key shortcuts be remapped or disabled.", + "wcag": [ + "2.1.4" + ], + "material3": null, + "apg": "keyboard-interface", + "verification_question": "Does any custom shortcut override a browser or screen-reader shortcut, and can single-character shortcuts be turned off?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.inputs.keyboards.describe-shortcuts", + "section": "inputs", + "page": "keyboards", + "statement": "Give every shortcut a descriptive name so it can be discovered from menus or help.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/keyboards", + "class": "universal", + "class_reason": "Discoverability of shortcuts is platform-neutral.", + "wcag": [], + "material3": null, + "apg": "keyboard-interface", + "verification_question": "Is each shortcut listed alongside its command where people can find it?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.inputs.pointing-devices.consistent-across-inputs", + "section": "inputs", + "page": "pointing-devices", + "statement": "Deliver a consistent experience whether people use touch, a pointer, a keyboard, or other input.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/pointing-devices", + "class": "universal", + "class_reason": "Input parity is platform-neutral.", + "wcag": [ + "2.1.1" + ], + "material3": "states", + "apg": null, + "verification_question": "Does the same task succeed with touch, mouse, and keyboard alone?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.inputs.pointing-devices.reveal-hidden-controls", + "section": "inputs", + "page": "pointing-devices", + "statement": "Let people reveal controls that auto-hide by moving the pointer or focusing, and keep them visible while in use.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/pointing-devices", + "class": "universal", + "class_reason": "Auto-hidden controls must be recoverable on every platform.", + "wcag": [ + "1.4.13", + "2.4.7" + ], + "material3": "states", + "apg": null, + "verification_question": "Do auto-hidden controls reappear on pointer movement and on keyboard focus?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.technologies.apple-in-app-purchase.transparent-pricing", + "section": "technologies", + "page": "apple-in-app-purchase", + "statement": "Let people try the product before paying and show the total price and billing period of each purchase.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/apple-in-app-purchase", + "class": "adapt", + "class_reason": "HIG describes Apple's purchase system; transparent pricing applies to any web checkout or subscription.", + "wcag": [ + "3.3.4" + ], + "material3": null, + "apg": null, + "verification_question": "Does every purchase option show its full price and renewal period before confirmation?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.technologies.apple-pay.apple-payment-marks", + "section": "technologies", + "page": "apple-pay", + "statement": "Apple payment buttons and marks are trademarked, system-defined artwork used only to start Apple Pay; they are not a generic payment pattern.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/apple-pay", + "class": "apple-specific", + "class_reason": "Using or imitating the marks outside their licensed use is brand imitation.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Does the product use official payment marks only through their official integration and never as a styling reference?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.technologies.generative-ai.people-in-control", + "section": "technologies", + "page": "generative-ai", + "statement": "Keep people in control of generated output, disclose where AI is used, and keep the experience useful when generation is unavailable or declined.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/generative-ai", + "class": "universal", + "class_reason": "Responsible generative features are a cross-platform concern.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Can people review, edit, or reject generated output, and does the product still work with the feature off?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.technologies.icloud.graceful-sync-absence", + "section": "technologies", + "page": "icloud", + "statement": "Keep content current when sync is available and keep the product usable when it is not.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/icloud", + "class": "universal", + "class_reason": "Offline and sync-failure resilience is platform-neutral.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "With the network or sync service unavailable, can people still read and edit local work?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.technologies.machine-learning.voluntary-feedback", + "section": "technologies", + "page": "machine-learning", + "statement": "Make explicit feedback on automated results voluntary, describe each option plainly, and act on it promptly.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/machine-learning", + "class": "universal", + "class_reason": "Feedback loops for automated features are platform-neutral.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Is giving feedback optional, and does the product visibly respond to it?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.technologies.maps.legible-interactive-maps", + "section": "technologies", + "page": "maps", + "statement": "Make maps interactive, cluster overlapping points, and clearly identify the selected element.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/maps", + "class": "universal", + "class_reason": "Map legibility principles apply to any map surface.", + "wcag": [ + "1.4.11" + ], + "material3": null, + "apg": null, + "verification_question": "Are overlapping markers clustered, and is the selected marker distinguishable without color alone?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.technologies.researchkit.understood-consent", + "section": "technologies", + "page": "researchkit", + "statement": "Break long consent into digestible sections and confirm understanding before asking for agreement.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/researchkit", + "class": "universal", + "class_reason": "Informed consent design is platform-neutral.", + "wcag": [], + "material3": null, + "apg": null, + "verification_question": "Is consent split into short sections, with a check that people understood before they agree?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.technologies.voiceover.decorative-hidden-meaningful-described", + "section": "technologies", + "page": "voiceover", + "statement": "Describe meaningful images and hide purely decorative ones from screen readers.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/voiceover", + "class": "universal", + "class_reason": "HIG names VoiceOver; the rule holds for every screen reader.", + "wcag": [ + "1.1.1" + ], + "material3": null, + "apg": "names-and-descriptions", + "verification_question": "Do informative images have descriptive alternatives and decorative images empty ones?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.technologies.voiceover.structure-for-navigation", + "section": "technologies", + "page": "voiceover", + "statement": "Use headings, grouping, and a logical order so screen-reader users can navigate the information hierarchy.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/voiceover", + "class": "universal", + "class_reason": "Semantic structure is platform-neutral.", + "wcag": [ + "1.3.1", + "1.3.2", + "2.4.6" + ], + "material3": null, + "apg": "landmarks", + "verification_question": "Can a screen-reader user jump between headings and landmarks to reach each section?", + "reviewed_on": "2026-10-19" + } + ] +} diff --git a/platform-guides/hig-universal-principles.md b/platform-guides/hig-universal-principles.md new file mode 100644 index 0000000..e10b8df --- /dev/null +++ b/platform-guides/hig-universal-principles.md @@ -0,0 +1,303 @@ +--- +type: Domain Guide +title: Apple HIG Universal Principles Extraction +description: Dated, paraphrased extraction of Apple Human Interface Guidelines principles classified as universal, adapt, or apple-specific, with WCAG 2.2, Material 3, and WAI-ARIA APG counterparts. +aliases: ["HIG principles","HIG audit checklist","universal design principles","apple-specific vs universal"] +questions: ["Which Apple HIG principles apply to a web product and which are Apple-specific?","What WCAG criterion corresponds to an HIG accessibility principle?"] +domain: platform-guides +lifecycle: experimental +provenance_kind: local +platform: Apple Human Interface Guidelines (Foundations, Patterns, Components, Inputs, Technologies) +platform_version: dated living-document review; recheck against the official documentation data before relying on a principle +reviewed_on: 2026-10-19 +--- + +# Apple HIG Universal Principles Extraction + +Primary role: dated principle extraction and audit index. + +## Repository Boundary + +This page and its machine-readable companion, [`hig-universal-principles.json`](hig-universal-principles.json), record which Apple Human Interface Guidelines (HIG) themes carry over to web and cross-platform products. Every statement is a StyleGallery paraphrase with a link to the official page. No HIG prose, tables, images, or sequences are reproduced, and nothing here implies affiliation with Apple. + +The extraction follows the [Apple Interaction](apple-interaction.md) boundary: comparison, not imitation. Apple system materials, typefaces, symbols, hardware controls, and brand marks are recorded only so that an audit can skip them. They are never web defaults. Layout owns spatial mechanics, Design Engineering owns component behavior, and shared quality owns accessibility evidence. No value from this page enters `layout/**`, `patterns/**`, or reusable Layout CSS. + +## Reusable Method + +### Source Walk + +On 2026-10-19 the [HIG documentation index](https://developer.apple.com/tutorials/data/design/human-interface-guidelines.json) was walked through its five guidance sections: [Foundations](https://developer.apple.com/design/human-interface-guidelines/foundations), [Patterns](https://developer.apple.com/design/human-interface-guidelines/patterns), [Components](https://developer.apple.com/design/human-interface-guidelines/components) (including every page under its eight groups), [Inputs](https://developer.apple.com/design/human-interface-guidelines/inputs), and [Technologies](https://developer.apple.com/design/human-interface-guidelines/technologies). The per-platform Getting Started overviews are out of scope. + +All 149 pages reached by that walk appear in the JSON `source_pages` inventory with one disposition: + +| Disposition | Count | Meaning | +| --- | --- | --- | +| `extracted` | 95 | The page yields one or more principles listed below. | +| `covered` | 8 | The page's transferable idea is already captured by the named `covered_by` principle on another page. | +| `excluded` | 46 | The page depends on Apple hardware, system surfaces, or services with no web default; the JSON records the reason. | + +### Classification + +| Class | Count | Rule | +| --- | --- | --- | +| `universal` | 147 | The principle holds on the web and on other platforms without translating an Apple mechanism. | +| `adapt` | 34 | The goal is universal, but HIG expresses it through an Apple mechanism or value. The `class_reason` names the web or cross-platform counterpart to use instead. | +| `apple-specific` | 6 | The guidance depends on Apple hardware, system rendering, licensing, or brand assets. Treat it as a do-not-imitate check. | + +### Record Shape + +Each JSON principle carries `id` (`hig.
..`), `statement`, `source_url`, `class`, `class_reason`, `wcag` (WCAG 2.2 success criteria), `material3` and `apg` (keys into the record's reference dictionaries, or `null`), `verification_question`, and `reviewed_on`. The record also declares `review_by`, which the [evidence-freshness audit](../GOVERNANCE.md) reads as an explicit review deadline. + +### Using It In An Audit + +1. Filter principles to `universal` and `adapt` for a web product; keep `apple-specific` entries as imitation checks. +2. For each principle, ask its `verification_question` against the real surface and record pass, fail, or not applicable with evidence. +3. Use the mapped WCAG criterion as the normative test where one exists. The HIG link supplies context only. +4. For `adapt` entries, verify the named web counterpart, not the Apple mechanism. + +## Principles + +### Foundations + +| ID | Class | Principle | WCAG 2.2 | +| --- | --- | --- | --- | +| `hig.foundations.accessibility.target-size` | `adapt` | Give every interactive control a hit area and surrounding spacing large enough that a person with limited dexterity reliably activates the intended control. | 2.5.8, 2.5.5 | +| `hig.foundations.accessibility.text-resize` | `adapt` | Let people enlarge text without losing content, controls, or reading order. | 1.4.4, 1.4.10, 1.4.12 | +| `hig.foundations.accessibility.contrast` | `universal` | Keep text, icons, and control boundaries distinguishable from their background in every supported appearance. | 1.4.3, 1.4.11 | +| `hig.foundations.accessibility.not-color-alone` | `universal` | Never make color the only carrier of status, meaning, or interactivity; pair it with text, shape, or position. | 1.4.1 | +| `hig.foundations.accessibility.assistive-names` | `universal` | Expose a meaningful name, role, and current state for every control and informative image to assistive technology. | 1.1.1, 4.1.2 | +| `hig.foundations.accessibility.media-alternatives` | `universal` | Offer text-based and described alternatives such as captions, transcripts, and audio description for audio and video content. | 1.2.2, 1.2.5 | +| `hig.foundations.accessibility.multimodal-cues` | `universal` | When a cue is delivered by sound or vibration, deliver the same information through a visible channel too. | 1.3.3 | +| `hig.foundations.accessibility.gesture-alternatives` | `universal` | Keep common actions reachable with simple single-pointer input and provide an alternative for any path-based, multi-finger, or drag gesture. | 2.5.1, 2.5.7 | +| `hig.foundations.accessibility.keyboard-only` | `universal` | Make the whole experience operable with a keyboard alone, with a visible focus indicator and no traps. | 2.1.1, 2.1.2, 2.4.7 | +| `hig.foundations.accessibility.label-in-name` | `adapt` | Make the spoken name of each control match its visible label so voice-input users can target it by saying what they see. | 2.5.3 | +| `hig.foundations.accessibility.time-limits` | `universal` | Avoid interface elements that expire on a timer; when a limit is unavoidable, let people extend or turn it off. | 2.2.1 | +| `hig.foundations.accessibility.flashing-and-fast-motion` | `universal` | Let people stop moving or blinking content and avoid flashes that can trigger seizures. | 2.3.1, 2.2.2 | +| `hig.foundations.color.consistent-meaning` | `universal` | Assign each color one meaning and keep that meaning stable across the product. | 3.2.4 | +| `hig.foundations.color.appearance-coverage` | `universal` | Check every color pairing in each appearance the product ships, including high-contrast modes, and under varied ambient lighting. | 1.4.3, 1.4.11 | +| `hig.foundations.color.semantic-roles` | `adapt` | Reference colors through named semantic roles that resolve per appearance, rather than hard-coding literal values. | - | +| `hig.foundations.color.cultural-meaning` | `universal` | Consider that color connotations differ across cultures and regions before attaching meaning to a hue. | - | +| `hig.foundations.color.glass-tinting` | `apple-specific` | Tinting rules for Apple's system glass material describe an Apple-rendered surface and are not a web default. | - | +| `hig.foundations.dark-mode.follow-system-appearance` | `adapt` | Follow the person's system-wide light or dark preference by default. | - | +| `hig.foundations.dark-mode.both-appearances` | `universal` | Make content, images, and icons legible and well-balanced in both light and dark appearances. | 1.4.3, 1.4.11 | +| `hig.foundations.dark-mode.soften-bright-backgrounds` | `universal` | Avoid pure, glaring white backgrounds in dark contexts; dim large bright surfaces so they do not overpower nearby content. | - | +| `hig.foundations.icons.single-concept` | `universal` | Design each interface icon around one simplified, recognizable concept and keep the icon family visually consistent. | - | +| `hig.foundations.icons.text-alternative` | `universal` | Give every icon-only control a text alternative that names its action. | 1.1.1, 4.1.2 | +| `hig.foundations.icons.vector-and-optical-alignment` | `universal` | Prefer vector formats for interface icons and align them optically with adjacent text. | - | +| `hig.foundations.images.density-ready` | `adapt` | Deliver images that stay sharp at every display density the product supports, preferring vector art for flat graphics. | - | +| `hig.foundations.images.real-device-check` | `universal` | Verify artwork on real target displays, not only in design tools. | - | +| `hig.foundations.inclusion.plain-language` | `universal` | Write in plain language, define specialist terms, and avoid idioms that do not translate. | 3.1.3 | +| `hig.foundations.inclusion.respectful-reference` | `universal` | Refer to people respectfully, use people-first wording about disability, and avoid assumptions about identity. | - | +| `hig.foundations.inclusion.inclusive-imagery` | `universal` | Choose imagery and examples that represent a broad range of people and do not exclude people with disabilities. | - | +| `hig.foundations.layout.importance-order` | `universal` | Order content by importance so the most relevant information comes first in both visual and reading order. | 1.3.2, 2.4.3 | +| `hig.foundations.layout.group-related` | `universal` | Group related items and use alignment and indentation to express hierarchy. | 1.3.1 | +| `hig.foundations.layout.progressive-disclosure` | `universal` | Reveal secondary detail on demand rather than showing everything at once. | - | +| `hig.foundations.layout.adapt-to-space` | `adapt` | Base layout changes on the space actually available, keeping functionality the same and changes recognizable as size changes. | 1.4.10, 1.3.4 | +| `hig.foundations.layout.controls-vs-content` | `universal` | Make controls visually distinguishable from the content they act on. | 1.4.11 | +| `hig.foundations.layout.safe-regions` | `adapt` | Keep controls and essential content out of regions that hardware or system interface may cover. | 2.4.11 | +| `hig.foundations.materials.system-material` | `apple-specific` | Apple's translucent system materials, including Liquid Glass, are rendered by Apple frameworks and are not a pattern to recreate on the web. | - | +| `hig.foundations.materials.legibility-over-translucency` | `adapt` | When content sits over any translucent or blurred surface, verify legibility against the worst-case background, not the typical one. | 1.4.3, 1.4.11 | +| `hig.foundations.motion.purposeful` | `universal` | Use motion only where it communicates status, feedback, or spatial relationship, and keep it from dominating the task. | - | +| `hig.foundations.motion.optional` | `adapt` | Make motion optional and provide an equivalent non-moving presentation when people reduce motion. | 2.3.3, 2.2.2 | +| `hig.foundations.motion.brief-and-cancelable` | `universal` | Keep feedback motion short and precise, and let people interrupt or cancel it without waiting. | 2.2.2 | +| `hig.foundations.motion.avoid-frequent` | `universal` | Avoid animating interactions that people repeat many times in a session. | - | +| `hig.foundations.privacy.minimal-data` | `universal` | Collect only data the feature genuinely needs and explain how it is used. | - | +| `hig.foundations.privacy.ask-in-context` | `universal` | Request access to sensitive resources at the moment a feature needs it, with copy that explains why, rather than at first launch. | - | +| `hig.foundations.privacy.no-misleading-preprompt` | `universal` | Never place a screen before a system permission prompt that pressures, confuses, or misrepresents the choice. | - | +| `hig.foundations.privacy.beyond-passwords` | `adapt` | Offer authentication that does not rely only on a memorized password, such as passkeys. | 3.3.8 | +| `hig.foundations.right-to-left.mirror-interface` | `universal` | Mirror interface direction for right-to-left scripts, flipping controls that express reading order or progress. | 1.3.2 | +| `hig.foundations.right-to-left.numerals-and-real-direction` | `universal` | Keep the digits within a number in their natural order and keep icons that depict physical direction or real objects unflipped. | - | +| `hig.foundations.right-to-left.align-by-language` | `universal` | Align each paragraph according to its own language, not the surrounding interface direction. | 3.1.2 | +| `hig.foundations.sf-symbols.system-symbol-set` | `apple-specific` | Apple's symbol set is licensed for Apple platforms and integrates with Apple's system font; it is not an icon source for web products. | - | +| `hig.foundations.branding.brand-defers-to-content` | `universal` | Express brand through voice, accent color, and type while keeping standard components and letting content stay primary. | - | +| `hig.foundations.branding.no-brand-gate` | `universal` | Do not use launch or loading screens, or repeated logos, as branding moments that delay people. | - | +| `hig.foundations.typography.legible-defaults` | `adapt` | Use default text sizes most people read comfortably and avoid very thin weights for body text. | 1.4.4, 1.4.12 | +| `hig.foundations.typography.hierarchy-few-typefaces` | `universal` | Build hierarchy with size, weight, and color, and keep the number of typefaces small. | 1.3.1 | +| `hig.foundations.typography.system-fonts` | `apple-specific` | Apple's system typefaces are licensed for Apple platforms; the web counterpart is the system-ui stack, not a bundled copy of Apple fonts. | - | +| `hig.foundations.typography.prioritize-on-resize` | `universal` | When text grows, keep the most important content visible and let layout reflow instead of truncating it. | 1.4.4, 1.4.10 | +| `hig.foundations.writing.clear-and-action-oriented` | `universal` | Label actions with specific verbs and keep copy short, clear, and suited to each screen's purpose. | 2.4.6, 2.4.4 | +| `hig.foundations.writing.consistent-language` | `universal` | Use the same term for the same thing and the same capitalization style throughout, especially across multi-step flows. | 3.2.4 | +| `hig.foundations.writing.empty-states-next-step` | `universal` | Give every empty screen a clear next step. | - | +| `hig.foundations.writing.helpful-errors` | `universal` | Write error messages that say what went wrong and how to fix it, in a neutral tone. | 3.3.1, 3.3.3 | + +### Patterns + +| ID | Class | Principle | WCAG 2.2 | +| --- | --- | --- | --- | +| `hig.patterns.charting-data.accessible-charts` | `universal` | Make every chart understandable without sight and without color, with a text summary of its key insight. | 1.1.1, 1.4.1 | +| `hig.patterns.charting-data.simple-then-detail` | `universal` | Prefer familiar chart types and a simple default view, letting people choose to see more detail. | - | +| `hig.patterns.collaboration-and-sharing.clear-sharing-scope` | `universal` | Describe who can access shared content and what they can do in short, plain phrases before sharing. | - | +| `hig.patterns.drag-and-drop.non-drag-alternative` | `universal` | Offer a non-dragging way to perform anything that drag and drop can do. | 2.5.7, 2.1.1 | +| `hig.patterns.drag-and-drop.drop-target-feedback` | `universal` | Show whether a destination accepts the dragged item and what the drop will do. | - | +| `hig.patterns.drag-and-drop.undoable-drop` | `universal` | Let people undo a drop, especially one that moves rather than copies. | - | +| `hig.patterns.entering-data.prefer-choices` | `universal` | Offer choices, defaults, and pasting instead of free text entry where possible. | 3.3.7 | +| `hig.patterns.entering-data.autofill-input-purpose` | `adapt` | Obtain known information from the system rather than asking for it again. | 1.3.5, 3.3.7 | +| `hig.patterns.entering-data.validate-early` | `universal` | Check values as people work and make required information clear before they try to continue. | 3.3.1, 3.3.2, 3.3.3 | +| `hig.patterns.entering-data.protect-secrets` | `universal` | Mask secret entry and never prefill a password field with a stored value visible to others. | - | +| `hig.patterns.feedback.accessible-feedback` | `universal` | Deliver status feedback in ways every person can perceive, including assistive technology. | 4.1.3 | +| `hig.patterns.feedback.warn-before-irreversible` | `universal` | Warn before an action causes unexpected, irreversible data loss. | 3.3.4 | +| `hig.patterns.feedback.explain-unavailable` | `universal` | When a command cannot run, show that it is unavailable and explain why. | - | +| `hig.patterns.file-management.work-is-preserved` | `universal` | Keep people's work safe automatically unless they explicitly discard it. | - | +| `hig.patterns.going-full-screen.keep-essentials-and-exit` | `universal` | In full-screen views, keep essential controls reachable and let people choose when to leave. | 2.1.2 | +| `hig.patterns.going-full-screen.resume-position` | `universal` | When people return to a full-screen experience, resume where they left off. | - | +| `hig.patterns.launching.fast-start` | `universal` | Show the first usable screen as quickly as possible and avoid splash screens that only delay. | - | +| `hig.patterns.launching.restore-state` | `universal` | Bring back the prior view, selection, and position when someone returns, so the session picks up without rework. | - | +| `hig.patterns.loading.show-something-soon` | `universal` | Display available content immediately and fill in the rest as it loads. | - | +| `hig.patterns.loading.communicate-progress` | `universal` | Make clear that content is loading and, when possible, how long it will take. | 4.1.3 | +| `hig.patterns.loading.non-blocking-wait` | `universal` | Let people keep using other parts of the product while content loads. | - | +| `hig.patterns.managing-accounts.delay-sign-in` | `universal` | Let people explore before requiring registration, and explain what an account gives them when you do ask. | - | +| `hig.patterns.managing-accounts.clear-account-deletion` | `universal` | Provide an easy-to-find way to delete an account, consistent across app and website. | - | +| `hig.patterns.managing-accounts.name-auth-method` | `adapt` | Name the authentication methods that are actually available in the current context. | 3.3.8 | +| `hig.patterns.managing-notifications.honest-urgency` | `universal` | Represent each notification's urgency accurately and never use urgent channels for marketing. | - | +| `hig.patterns.managing-notifications.consent-and-control` | `universal` | Get explicit permission for promotional notifications and let people manage notification settings inside the product. | - | +| `hig.patterns.modality.modal-only-when-needed` | `universal` | Use modal presentation only when focusing on a short, self-contained task brings a clear benefit. | - | +| `hig.patterns.modality.obvious-dismiss` | `universal` | Every modal view needs a clear exit, and closing it must not silently discard work in progress. | 2.1.2 | +| `hig.patterns.modality.one-modal-at-a-time` | `universal` | Avoid stacking modal views; close one before presenting another. | - | +| `hig.patterns.multitasking.pause-when-hidden` | `adapt` | Pause activities that need attention when people switch away, and resume smoothly. | - | +| `hig.patterns.offering-help.task-based-help` | `universal` | Shape help around the tasks people perform, using consistent wording and imagery. | 3.2.6 | +| `hig.patterns.offering-help.short-dismissible-tips` | `universal` | Keep tips brief and actionable, and make them dismissible without moving focus or hiding content. | 1.4.13 | +| `hig.patterns.onboarding.learn-by-doing` | `universal` | Teach through interaction in context rather than through long upfront tutorials. | - | +| `hig.patterns.onboarding.optional-and-brief` | `universal` | Keep any required onboarding short, make tutorials optional, and postpone nonessential setup. | - | +| `hig.patterns.playing-audio.respect-sound-settings` | `adapt` | Respect people's silence and volume choices and never start sound unexpectedly. | 1.4.2 | +| `hig.patterns.playing-haptics.haptics-supplement` | `adapt` | Treat haptics as optional reinforcement of feedback that is already visible. | 1.3.3 | +| `hig.patterns.playing-video.preserve-aspect-ratio` | `universal` | Show video at its original aspect ratio without stretching or cropping essential content. | - | +| `hig.patterns.playing-video.expected-controls` | `adapt` | Support the playback interactions people expect for their input device, preferring the platform's player. | 2.1.1 | +| `hig.patterns.printing.discoverable-relevant-printing` | `universal` | Offer printing only when output is meaningful, and keep frequently used print options separate from advanced ones. | - | +| `hig.patterns.ratings-and-reviews.ask-at-good-moments` | `universal` | Ask for feedback only after people have engaged, never mid-task, and not repeatedly. | - | +| `hig.patterns.searching.prominent-search` | `universal` | When finding things is central to the product, put search in a prominent, stable location with one entry point. | 3.2.3 | +| `hig.patterns.searching.visible-scope-and-suggestions` | `universal` | Show the current search scope and offer suggestions to reduce typing. | 4.1.3 | +| `hig.patterns.searching.private-history` | `universal` | Consider privacy before displaying recent searches, and let people clear them. | - | +| `hig.patterns.settings.good-defaults-few-settings` | `universal` | Choose defaults that serve most people and keep the number of settings small. | - | +| `hig.patterns.settings.respect-system-preferences` | `adapt` | Honor system-wide preferences rather than duplicating them in product settings. | - | +| `hig.patterns.settings.options-in-context` | `universal` | Let people adjust task-specific options where they work rather than in a distant settings area. | - | +| `hig.patterns.undo-and-redo.predictable-undo` | `universal` | Make undo predictable: describe what will be undone, show its result, and allow multiple steps. | - | +| `hig.patterns.undo-and-redo.standard-undo-shortcuts` | `adapt` | Support the platform's standard undo and redo shortcuts and avoid redefining them. | 2.1.4 | + +### Components + +| ID | Class | Principle | WCAG 2.2 | +| --- | --- | --- | --- | +| `hig.components.charts.meaningful-axes` | `universal` | Choose axis ranges and lower bounds that match what the data means, and use familiar tick values. | - | +| `hig.components.image-views.text-over-images` | `universal` | When text overlays an image, guarantee its contrast against every part of the image it can cover. | 1.4.3 | +| `hig.components.image-views.interactive-images-are-buttons` | `universal` | Make a clickable image a real button or link, not a passive image with a click handler. | 4.1.2 | +| `hig.components.text-views.selectable-useful-text` | `universal` | Let people select and copy text that is useful outside the product. | - | +| `hig.components.text-views.matching-keyboard` | `adapt` | Show the on-screen keyboard that matches the content being entered. | 1.3.5 | +| `hig.components.web-views.embedded-navigation` | `universal` | When embedding navigable web content, support back and forward movement within it. | - | +| `hig.components.boxes.titled-groups` | `universal` | Give a visually grouped set of controls a short title that describes its contents. | 1.3.1 | +| `hig.components.collections.standard-grid-calm-changes` | `universal` | Prefer standard row or grid arrangements and avoid disorienting layout changes when items are inserted or removed. | 2.3.3 | +| `hig.components.disclosure-controls.labeled-adjacent-disclosure` | `universal` | Label each disclosure control with what it reveals and place it next to the content it controls. | 4.1.2 | +| `hig.components.lists-and-tables.text-in-lists` | `universal` | Present primarily textual items as lists or tables with succinct rows and descriptive column headings. | 1.3.1 | +| `hig.components.lists-and-tables.avoid-clipping` | `universal` | Preserve readability of long item text instead of clipping meaning through truncation. | 1.4.10 | +| `hig.components.lists-and-tables.selection-feedback` | `universal` | Give clear feedback when a list item is selected. | 4.1.2, 1.4.11 | +| `hig.components.outline-views.hierarchy-first-column` | `universal` | Show hierarchy in a single leading column, make nested groups easy to expand and collapse, and use a plain table for flat data. | 1.3.1 | +| `hig.components.split-views.persistent-selection` | `universal` | In multi-pane layouts, keep the chosen item marked in every navigation pane above the detail view. | - | +| `hig.components.split-views.collapse-for-narrow` | `universal` | Account for narrow, intermediate, and wide widths, with sensible minimum and maximum pane sizes and the option to hide a pane. | 1.4.10 | +| `hig.components.tab-views.related-panes` | `universal` | Use tabs only for closely related content areas, with descriptive labels and a small number of tabs. | 4.1.2, 2.4.6 | +| `hig.components.tab-views.pane-local-controls` | `universal` | Controls inside a tab pane should affect only that pane. | - | +| `hig.components.buttons.press-state` | `universal` | Give every custom button a visible pressed state in addition to hover and focus states. | 2.4.7 | +| `hig.components.buttons.one-prominent-action` | `universal` | Give the most likely action the most prominent style and keep prominent buttons few per view. | - | +| `hig.components.buttons.role-is-clear` | `universal` | Indicate a button's role, such as destructive or cancel, through label and styling, not color alone. | 1.4.1 | +| `hig.components.context-menus.context-menu-redundancy` | `universal` | Make every context menu command also available from the main interface, and keep these menus short and relevant. | 2.1.1 | +| `hig.components.context-menus.shallow-submenus` | `universal` | Limit submenus to one level and hide items that do not apply in a context menu. | - | +| `hig.components.edit-menus.platform-edit-commands` | `adapt` | Rely on the platform's own edit commands for cut, copy, paste, and undo rather than rebuilding them. | - | +| `hig.components.menus.clear-menu-labels` | `universal` | Label each menu item with a succinct description of its action and show when an item is unavailable. | 4.1.2 | +| `hig.components.menus.more-input-indicator` | `adapt` | Signal when a menu command needs more input before it completes. | - | +| `hig.components.pop-up-buttons.exclusive-options-with-default` | `universal` | Use a compact single-choice control when exactly one of several options applies, and preselect a sensible value. | 4.1.2 | +| `hig.components.pull-down-buttons.related-commands-confirm-destructive` | `universal` | Group only commands related to the button's action in its menu and confirm destructive items. | 3.3.4 | +| `hig.components.the-menu-bar.system-menu-bar` | `apple-specific` | The macOS menu bar is a system-owned surface with a fixed structure; web products should not draw an imitation of it. | - | +| `hig.components.toolbars.uncrowded-toolbars` | `universal` | Choose toolbar items deliberately, move overflow into a more menu, and prefer standard controls. | - | +| `hig.components.search-fields.search-hint-and-instant-results` | `universal` | Use placeholder hints to describe what can be searched and start showing results as people type when feasible. | 3.3.2, 4.1.3 | +| `hig.components.search-fields.filterable-results` | `universal` | Keep search results simple and let people filter by clearly defined scopes. | - | +| `hig.components.sidebars.shallow-hideable-sidebar` | `universal` | Keep sidebar hierarchy to about two levels, let people hide it, and group deep content with disclosure. | - | +| `hig.components.tab-bars.navigation-not-actions` | `universal` | Use a bottom or top navigation bar only to move between sections, never to trigger actions. | 3.2.3 | +| `hig.components.tab-bars.stable-labeled-destinations` | `universal` | Keep the section navigation visible and stable, label every item, and do not hide or disable destinations. | 3.2.3, 2.4.6 | +| `hig.components.action-sheets.choices-for-intentional-action` | `universal` | Present a set of choices tied to an action the person started, include a way to cancel, and make destructive choices prominent. | - | +| `hig.components.alerts.alerts-sparingly` | `universal` | Reserve alerts for critical, actionable situations; do not use them for information or for common actions that can be undone. | - | +| `hig.components.alerts.clear-alert-copy` | `universal` | Write alert titles that state the situation directly and buttons that name the outcome. | 2.4.6 | +| `hig.components.page-controls.ordered-page-position` | `universal` | Indicate the current position among a small ordered set of pages with simple, consistent indicators. | 4.1.2 | +| `hig.components.popovers.small-single-popover` | `universal` | Use a popover for a small amount of related content, show one at a time, and keep any work when it closes automatically. | 1.4.13 | +| `hig.components.scroll-views.visible-scrollability` | `universal` | Make it apparent when content scrolls and support standard scrolling input including the keyboard. | 2.1.1 | +| `hig.components.scroll-views.no-same-axis-nesting` | `universal` | Avoid nesting a scroll area inside another that scrolls in the same direction. | - | +| `hig.components.sheets.one-sheet-with-dismiss` | `universal` | Show one sheet at a time, offer an alternative to the confirm action for dismissal, and choose a different surface for long flows. | 2.1.2 | +| `hig.components.windows.fluid-sizing` | `universal` | Let windows and app frames adapt fluidly to any size people choose. | 1.4.10 | +| `hig.components.windows.no-fake-system-chrome` | `adapt` | Avoid drawing custom window chrome that mimics the operating system. | - | +| `hig.components.color-wells.platform-color-picker` | `adapt` | Prefer the color selection UI the platform already provides over a custom picker. | - | +| `hig.components.combo-boxes.default-and-relevant-choices` | `universal` | Prefill a combined text-and-list control with a meaningful default, label it, and offer relevant choices. | 3.3.2, 4.1.2 | +| `hig.components.digit-entry-views.purposeful-code-entry` | `adapt` | State the purpose of short code entry and protect it when the code is secret. | 1.3.5, 3.3.2 | +| `hig.components.pickers.ordered-in-place-pickers` | `universal` | Offer predictable, logically ordered values in place without switching views, and avoid needless precision. | - | +| `hig.components.segmented-controls.few-related-segments` | `universal` | Use a segmented control for a few closely related choices, with consistent segment size and either all text or all icons. | 4.1.2 | +| `hig.components.sliders.slider-with-precise-entry` | `universal` | Pair a slider with precise entry when exact values matter, give live feedback, and use the expected direction. | 2.5.7, 2.1.1 | +| `hig.components.steppers.visible-stepped-value` | `adapt` | Make the value a stepper changes obvious and pair it with text entry for large changes. | 4.1.2 | +| `hig.components.text-fields.sized-and-labeled-fields` | `universal` | Size each text field to its expected content and keep a persistent label, using placeholder text only as a hint. | 3.3.2 | +| `hig.components.text-fields.expected-field-order` | `universal` | Make moving between fields follow the order people expect. | 2.4.3 | +| `hig.components.toggles.obvious-two-state-toggle` | `universal` | Use a toggle for two opposing states, identify what it controls, and make its states visually obvious. | 1.4.1, 1.4.11, 4.1.2 | +| `hig.components.virtual-keyboards.content-matched-keyboard` | `adapt` | Match the on-screen keyboard and its return key to the content and next step. | 1.3.5 | +| `hig.components.gauges.labeled-range` | `universal` | Label a gauge's current value and both ends of its range. | 1.1.1 | +| `hig.components.progress-indicators.determinate-when-possible` | `universal` | Prefer a determinate progress indicator, report advancement honestly, and switch from indeterminate to determinate once duration is known. | 4.1.3 | +| `hig.components.progress-indicators.visible-continuation` | `universal` | Keep a progress display visibly alive while work continues, so a running task never looks frozen. | - | +| `hig.components.rating-indicators.clear-adjustable-rating` | `universal` | Make ratings easy to change and keep any custom rating symbol understandable. | 4.1.2 | +| `hig.components.notifications.concise-respectful-notifications` | `adapt` | Send concise notifications without duplicates or sensitive details, and show errors inside the product rather than as notifications. | - | + +### Inputs + +| ID | Class | Principle | WCAG 2.2 | +| --- | --- | --- | --- | +| `hig.inputs.apple-pencil-and-scribble.hover-previews-not-actions` | `adapt` | Use hover to preview what will happen, never to commit an action. | 1.4.13 | +| `hig.inputs.focus-and-selection.no-unexpected-focus-moves` | `universal` | Do not move focus without the person's action. | 3.2.1, 3.2.2 | +| `hig.inputs.focus-and-selection.logical-focus-path` | `universal` | Make focus move through custom views in a sensible, predictable order. | 2.4.3 | +| `hig.inputs.focus-and-selection.platform-consistent-focus-indicator` | `adapt` | Indicate focus with a visible appearance consistent with the platform and never let it be hidden behind other content. | 2.4.7, 2.4.11 | +| `hig.inputs.gestures.multiple-input-paths` | `universal` | Offer several input routes to each action, and treat shortcut gestures as extras on top of standard controls. | 2.5.1, 2.1.1 | +| `hig.inputs.gestures.responsive-expected-gestures` | `universal` | Respond to standard gestures quickly and in the way people expect, and show when a gesture is unavailable. | 2.5.2 | +| `hig.inputs.gestures.no-system-gesture-conflicts` | `adapt` | Avoid custom gestures that collide with system or browser gestures. | - | +| `hig.inputs.gyro-and-accelerometer.motion-input-alternatives` | `universal` | Use device-motion input only for a tangible benefit, and always provide a conventional alternative. | 2.5.4 | +| `hig.inputs.keyboards.respect-standard-shortcuts` | `adapt` | Keep standard keyboard shortcuts working and reserve custom shortcuts for the most frequent commands. | 2.1.4 | +| `hig.inputs.keyboards.describe-shortcuts` | `universal` | Give every shortcut a descriptive name so it can be discovered from menus or help. | - | +| `hig.inputs.pointing-devices.consistent-across-inputs` | `universal` | Deliver a consistent experience whether people use touch, a pointer, a keyboard, or other input. | 2.1.1 | +| `hig.inputs.pointing-devices.reveal-hidden-controls` | `universal` | Let people reveal controls that auto-hide by moving the pointer or focusing, and keep them visible while in use. | 1.4.13, 2.4.7 | + +### Technologies + +| ID | Class | Principle | WCAG 2.2 | +| --- | --- | --- | --- | +| `hig.technologies.apple-in-app-purchase.transparent-pricing` | `adapt` | Let people try the product before paying and show the total price and billing period of each purchase. | 3.3.4 | +| `hig.technologies.apple-pay.apple-payment-marks` | `apple-specific` | Apple payment buttons and marks are trademarked, system-defined artwork used only to start Apple Pay; they are not a generic payment pattern. | - | +| `hig.technologies.generative-ai.people-in-control` | `universal` | Keep people in control of generated output, disclose where AI is used, and keep the experience useful when generation is unavailable or declined. | - | +| `hig.technologies.icloud.graceful-sync-absence` | `universal` | Keep content current when sync is available and keep the product usable when it is not. | - | +| `hig.technologies.machine-learning.voluntary-feedback` | `universal` | Make explicit feedback on automated results voluntary, describe each option plainly, and act on it promptly. | - | +| `hig.technologies.maps.legible-interactive-maps` | `universal` | Make maps interactive, cluster overlapping points, and clearly identify the selected element. | 1.4.11 | +| `hig.technologies.researchkit.understood-consent` | `universal` | Break long consent into digestible sections and confirm understanding before asking for agreement. | - | +| `hig.technologies.voiceover.decorative-hidden-meaningful-described` | `universal` | Describe meaningful images and hide purely decorative ones from screen readers. | 1.1.1 | +| `hig.technologies.voiceover.structure-for-navigation` | `universal` | Use headings, grouping, and a logical order so screen-reader users can navigate the information hierarchy. | 1.3.1, 1.3.2, 2.4.6 | + +## Opinionated Guidance + +Start a web audit from the WCAG-mapped `universal` rows: they have normative tests and the lowest risk of importing Apple taste. Treat `adapt` rows as prompts to name the web mechanism explicitly, for example reduced-motion media queries instead of an Apple setting name. When a principle seems to demand a specific look, re-read its `class_reason`; the transferable part is almost always behavior, not appearance. + +## Platform-Specific Guidance + +Apple-specific entries cover system materials, system typefaces, the system symbol set, the macOS menu bar, and payment marks. For each one, the web decision is a separately verified surface: an opaque or tonal background checked for contrast, the `system-ui` font stack, an openly licensed icon set, WAI-ARIA menubar semantics, and official payment integrations used only as documented. Native values such as point sizes or haptic patterns are not web units. Translate them through the cited WCAG criterion or a measured local decision. + +## Unsupported Absolutes + +- Do not treat a `universal` classification as proof that a product passes; it is a question to verify. +- Do not cite this page as Apple guidance; cite the linked official page and its review date. +- Do not equate HIG point minimums with WCAG CSS-pixel criteria. +- Do not adopt Apple materials, typefaces, symbols, or system chrome on the web because a principle mentions them. +- Do not assume the extraction is complete after HIG changes; the inventory reflects one dated walk. + +## Verification Contract + +`node scripts/validate-hig-principles.mjs --json` checks the JSON record and this page together. It fails on missing fields, unknown classes, duplicate or malformed ids, unknown WCAG, Material 3, or APG keys, source URLs that do not match the page slug, inventory pages without principles or dispositions, dangling `covered_by` links, and principle ids missing from this page. `node scripts/test-validate-hig-principles.mjs` proves those failures with committed fixtures under `tests/fixtures/hig-principles/`. Both run on every pull request in `.github/workflows/hig-principles.yml`. `node scripts/audit-evidence-freshness.mjs --record platform-guides/hig-universal-principles.json --as-of --mode advisory` reports `review_due` once `review_by` passes. + +Review this extraction when `review_by` arrives, when the HIG index adds, removes, or renames a page, when a cited WCAG, Material 3, or APG page changes materially, or when an audit finds a principle misclassified. A review re-walks the index, updates the inventory and `reviewed_on`, and moves `review_by` forward. + +## Source, License, And Attribution + +- Official source: [Apple Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines) and its documentation data, read on 2026-10-19. Apple content is not reproduced; statements are StyleGallery paraphrases with links. +- Cross-references: [WCAG 2.2](https://www.w3.org/TR/WCAG22/) (normative), [Material Design 3](https://m3.material.io/) (comparative), and the [WAI-ARIA Authoring Practices Guide](https://www.w3.org/WAI/ARIA/apg/patterns/) (informative). +- Provenance: StyleGallery-local synthesis with `provenance_kind: local`. No upstream repository content is adapted. + +## IA Navigation + +Parent: [Platform Guides](index.md). +Next: [Apple Interaction As A Comparative Reference](apple-interaction.md). diff --git a/platform-guides/index.md b/platform-guides/index.md index 225b8be..ee8b933 100644 --- a/platform-guides/index.md +++ b/platform-guides/index.md @@ -16,12 +16,14 @@ Out of scope: affiliation, brand imitation, unsupported platform equivalence, an | Compare Back and adaptive window behavior. | [Android Interaction As A Comparative Reference](android-interaction.md) | | Compare keyboard, focus, and commands. | [Windows Interaction As A Comparative Reference](windows-interaction.md) | | Select target and fallback verification cases. | [Platform Compatibility Matrix](compatibility-matrix.md) | +| Audit a web product against HIG principles without importing Apple-specific defaults. | [Apple HIG Universal Principles Extraction](hig-universal-principles.md) | These workflows and worked cases are usable experimental guidance. Expected-result tables are test designs; actual product, engine, and reader evidence must be recorded separately. Review on a failed task, a source change, or a changed ownership contract. ## Available Guides - [Apple Interaction As A Comparative Reference](apple-interaction.md) turns selected interaction themes into questions for web adaptation without claiming platform equivalence. +- [Apple HIG Universal Principles Extraction](hig-universal-principles.md) classifies dated, paraphrased HIG principles as universal, adapt, or apple-specific, with WCAG 2.2, Material 3, and APG counterparts and a machine-readable record. ## Comparison, Not Imitation diff --git a/scripts/agent-native/v2/test-material-admission.mjs b/scripts/agent-native/v2/test-material-admission.mjs index 729260a..527124e 100644 --- a/scripts/agent-native/v2/test-material-admission.mjs +++ b/scripts/agent-native/v2/test-material-admission.mjs @@ -27,8 +27,8 @@ const v1SchemaDirectory = path.join(repositoryRoot, "consumer-reference", "agent const v2Directory = path.join(repositoryRoot, "consumer-reference", "agent-native", "v2"); const temporaryRoots = new Set(); const sha256 = (bytes) => createHash("sha256").update(bytes).digest("hex"); -const EXPECTED_PATH_COUNT = 195; -const EXPECTED_PATHS_NEWLINE_SHA256 = "d4b880b2c6072c8df4b6b98166c3141973d9977c30d7aa76d65d632127269b5d"; +const EXPECTED_PATH_COUNT = 196; +const EXPECTED_PATHS_NEWLINE_SHA256 = "7ebb96d1046a6b79fa36dc88d822d050a848e67730a06add6d40f87abf9f7330"; function run(command, args, options = {}) { return spawnSync(command, args, { encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 30_000, ...options }); @@ -111,7 +111,7 @@ function policyVersion(policy) { test.after(() => { for (const root of temporaryRoots) fs.rmSync(root, { force: true, recursive: true }); }); -test("policy is closed, versioned, exact, and seals all 195 current paths", () => { +test("policy is closed, versioned, exact, and seals all 196 current paths", () => { const policySchema = JSON.parse(fs.readFileSync(path.join(v2Directory, "schema", "admission-policy.schema.json"), "utf8")); const ajv = new Ajv2020({ allErrors: true, strict: true }); assert.equal(ajv.validate(policySchema, materialAdmissionPolicy), true, JSON.stringify(ajv.errors)); @@ -127,7 +127,7 @@ test("policy is closed, versioned, exact, and seals all 195 current paths", () = assert.equal(Object.hasOwn(materialAdmissionPolicy, "public_roots"), false); }); -test("actual repository manifest admits exactly 195 paths with deterministic identities and source versions", () => { +test("actual repository manifest admits exactly 196 paths with deterministic identities and source versions", () => { const materials = materialAdmissionPolicy.allowed_materials.map(({ repository_path }) => sourceRecord(repositoryRoot, repository_path)); const manifest = createMaterialManifest(materials); const result = validateMaterialManifest({ repositoryRoot, manifest }); diff --git a/scripts/agent-native/v2/test-material-mcp-stdio.mjs b/scripts/agent-native/v2/test-material-mcp-stdio.mjs index fa45965..e213994 100644 --- a/scripts/agent-native/v2/test-material-mcp-stdio.mjs +++ b/scripts/agent-native/v2/test-material-mcp-stdio.mjs @@ -115,7 +115,7 @@ async function rawProtocolProbe(script, cwd) { const afterMalformed = next((message) => message.id === 61, "post-malformed response"); send("{malformed-json"); send({ jsonrpc: "2.0", id: 61, method: "resources/list", params: {} }); - assert.equal((await afterMalformed).result.resources.length, 195); + assert.equal((await afterMalformed).result.resources.length, 196); assert.equal(allMessages.filter((message) => message.id === undefined).length, 0); } finally { child.stdin.end(); @@ -242,7 +242,7 @@ try { assert.deepEqual(Object.keys(material.client.getServerCapabilities()).sort(), ["resources", "tools"]); const tools = (await deadline(material.client.listTools(), "list tools")).tools; assert.deepEqual(tools.map(({ name }) => name), ["material-context", "material-discover", "material-get", "material-search"]); - assert.equal((await deadline(material.client.listResources(), "list resources")).resources.length, 195); + assert.equal((await deadline(material.client.listResources(), "list resources")).resources.length, 196); assert.deepEqual((await deadline(material.client.listResourceTemplates(), "list templates")).resourceTemplates.map(({ uriTemplate }) => uriTemplate), ["sg://v2/material/{reference}"]); const calls = [ @@ -291,7 +291,7 @@ try { await rejected(() => v1.client.readResource({ uri: materialResourceUri(selected[0].stable_ref) }), /not found|resource/i); await rejected(() => material.client.readResource({ uri: "sg://self" }), /not found|resource/i); - process.stdout.write(`${JSON.stringify({ ok: true, transport: "stdio", cwd_with_spaces: true, direct_run: { real_path: true, symlink_with_spaces: true }, import_guard: importGuard, tools: 4, resources: 195, domains: 6, generated: selected[5].stable_ref, source_hashes_verified: 6, concurrent_requests: 8, raw_protocol: rawProtocol, frame_boundaries: frameBoundaries, oversized_frame: oversizedFrame, epipe, v1_tools: v1Tools, stderr_empty: true }, null, 2)}\n`); + process.stdout.write(`${JSON.stringify({ ok: true, transport: "stdio", cwd_with_spaces: true, direct_run: { real_path: true, symlink_with_spaces: true }, import_guard: importGuard, tools: 4, resources: 196, domains: 6, generated: selected[5].stable_ref, source_hashes_verified: 6, concurrent_requests: 8, raw_protocol: rawProtocol, frame_boundaries: frameBoundaries, oversized_frame: oversizedFrame, epipe, v1_tools: v1Tools, stderr_empty: true }, null, 2)}\n`); } finally { if (v1) { await deadline(v1.client.close(), "v1 shutdown"); diff --git a/scripts/agent-native/v2/test-material-mcp.mjs b/scripts/agent-native/v2/test-material-mcp.mjs index 4f52757..e1c713b 100755 --- a/scripts/agent-native/v2/test-material-mcp.mjs +++ b/scripts/agent-native/v2/test-material-mcp.mjs @@ -106,7 +106,7 @@ try { assert.equal(nullPrototypeResponse.structuredContent?.ok, true); const resources = (await client.listResources()).resources; - assert.equal(resources.length, 195); + assert.equal(resources.length, 196); assert.deepEqual((await client.listResourceTemplates()).resourceTemplates.map(({ uriTemplate }) => uriTemplate), ["sg://v2/material/{reference}"]); assert.ok(resources.every(({ uri }) => uri === materialResourceUri(resources.find((entry) => entry.uri === uri).name))); diff --git a/scripts/agent-native/v2/test-material-registry.mjs b/scripts/agent-native/v2/test-material-registry.mjs index c45086a..8cabfcd 100644 --- a/scripts/agent-native/v2/test-material-registry.mjs +++ b/scripts/agent-native/v2/test-material-registry.mjs @@ -85,7 +85,7 @@ test.after(() => { for (const root of temporaryRoots) fs.rmSync(root, { recursiv test("generated registry is canonical, exact, source-bound, complete, and v1-isolated", () => { const beforeV1 = fs.readFileSync(v1RegistryPath); const generated = generateMaterialRegistry({ repositoryRoot }); - assert.equal(generated.materials.length, 195); + assert.equal(generated.materials.length, 196); assert.deepEqual(validateMaterialRegistry({ repositoryRoot, manifest: generated }), { ok: true, failures: [], materials: generated.materials }); assert.equal(generated.version_id, recomputeManifestVersion(generated)); assert.equal(generated.admission_policy_ref, materialAdmissionPolicy.stable_ref); diff --git a/scripts/agent-native/v2/test-sg-material-package.mjs b/scripts/agent-native/v2/test-sg-material-package.mjs index f576539..a8f6203 100644 --- a/scripts/agent-native/v2/test-sg-material-package.mjs +++ b/scripts/agent-native/v2/test-sg-material-package.mjs @@ -240,7 +240,7 @@ try { try { await bounded(materialClient.connect(materialTransport), "installed material MCP initialize"); assert.deepEqual((await bounded(materialClient.listTools(), "installed material MCP tools")).tools.map(({ name }) => name), ["material-context", "material-discover", "material-get", "material-search"]); - assert.equal((await bounded(materialClient.listResources(), "installed material MCP resources")).resources.length, 195); + assert.equal((await bounded(materialClient.listResources(), "installed material MCP resources")).resources.length, 196); assert.deepEqual((await bounded(materialClient.listResourceTemplates(), "installed material MCP templates")).resourceTemplates.map(({ uriTemplate }) => uriTemplate), ["sg://v2/material/{reference}"]); const installedMcpSearch = toolEnvelope(await bounded(materialClient.callTool({ name: "material-search", diff --git a/scripts/audit-evidence-freshness.mjs b/scripts/audit-evidence-freshness.mjs index a33f195..d81007b 100644 --- a/scripts/audit-evidence-freshness.mjs +++ b/scripts/audit-evidence-freshness.mjs @@ -12,6 +12,8 @@ const repositoryRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)) const calibrationSchemaPath = path.join(repositoryRoot, "consumer-reference", "schema", "calibration-record.schema.json"); const defaultPageSchemaPath = path.join(repositoryRoot, "consumer-reference", "schema", "page-evidence-manifest.schema.json"); const PAGE_RECORD_KIND = "page_evidence_manifest"; +// Dated platform-guidance extractions declare reviewed_on plus an explicit review_by deadline. +const PRINCIPLE_RECORD_KIND = "platform_principle_extraction"; // This is an advisory warning window only. It never changes an explicit expiry or adds a TTL. const DEFAULT_EXPIRING_WINDOW_DAYS = 7; @@ -163,10 +165,43 @@ function validatePageRecord(value, sourcePath, pageSchemaPath, failures) { return { thresholdDate, verifiedAt: null }; } +function isRealDate(value) { + if (typeof value !== "string" || !/^\d{4}-\d{2}-\d{2}$/.test(value)) return false; + const parsed = new Date(`${value}T00:00:00Z`); + return !Number.isNaN(parsed.getTime()) && parsed.toISOString().slice(0, 10) === value; +} + +function validatePrincipleRecord(value, sourcePath, failures) { + if (value.schema_version !== "1.0") { + failures.push(failure("freshness_record_invalid", sourcePath, "principle extraction schema_version must be 1.0")); + return undefined; + } + if (!isRealDate(value.reviewed_on)) { + failures.push(failure("freshness_record_invalid", sourcePath, "principle extraction reviewed_on must be a real YYYY-MM-DD date")); + return undefined; + } + const thresholdDate = value.review_by; + if (!Number.isFinite(parseDateTime(thresholdDate))) { + failures.push(failure("freshness_record_invalid", sourcePath, "principle extraction review_by must be an RFC 3339 date-time value")); + return undefined; + } + const verifiedAt = `${value.reviewed_on}T00:00:00Z`; + if (Date.parse(thresholdDate) <= Date.parse(verifiedAt)) { + failures.push(failure("freshness_record_invalid", sourcePath, "principle extraction review_by must be later than reviewed_on")); + return undefined; + } + const principles = Array.isArray(value.principles) ? value.principles : []; + if (principles.some((item) => !isRealDate(item?.reviewed_on) || item.reviewed_on > value.reviewed_on)) { + failures.push(failure("freshness_record_invalid", sourcePath, "every principle reviewed_on must be a real date no later than the record reviewed_on")); + return undefined; + } + return { thresholdDate, verifiedAt }; +} + function classify(entry, asOfMs, windowMs) { if (entry.thresholdDate === null) return "fresh"; const thresholdMs = Date.parse(entry.thresholdDate); - if (entry.kind === PAGE_RECORD_KIND) { + if (entry.kind === PAGE_RECORD_KIND || entry.kind === PRINCIPLE_RECORD_KIND) { if (asOfMs >= thresholdMs) return "review_due"; return thresholdMs - asOfMs <= windowMs ? "expiring" : "fresh"; } @@ -193,6 +228,9 @@ function auditOne({ file, asOf, asOfMs, mode, root, pageSchemaPath, expiringWind if (value.record_kind === PAGE_RECORD_KIND) { kind = PAGE_RECORD_KIND; dates = validatePageRecord(value, sourcePath, pageSchemaPath, failures); + } else if (value.record_kind === PRINCIPLE_RECORD_KIND) { + kind = PRINCIPLE_RECORD_KIND; + dates = validatePrincipleRecord(value, sourcePath, failures); } else if (value.committed_ci !== undefined || value.required_runs !== undefined || value.runs !== undefined) { kind = "calibration_record"; dates = validateCalibrationRecord(value, sourcePath, failures); diff --git a/scripts/test-audit-evidence-freshness.mjs b/scripts/test-audit-evidence-freshness.mjs index 3be4d26..050b665 100644 --- a/scripts/test-audit-evidence-freshness.mjs +++ b/scripts/test-audit-evidence-freshness.mjs @@ -10,6 +10,7 @@ import { cleanupFixture, completeSession, initializeConsumer } from "./page-evid const repositoryRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); const auditor = path.join(repositoryRoot, "scripts", "audit-evidence-freshness.mjs"); const calibration = path.join(repositoryRoot, "consumer-reference", "baselines", "calibration.json"); +const principleExtraction = path.join(repositoryRoot, "platform-guides", "hig-universal-principles.json"); const selectedCase = process.argv.find((argument) => argument === "--case") ? process.argv[process.argv.indexOf("--case") + 1] : null; const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), "stylegallery-freshness-")); @@ -76,6 +77,11 @@ fs.writeFileSync(malformed, '{"record_kind":"page_evidence_manifest","review_by" const unknown = path.join(tempRoot, "unknown.json"); writeJson(unknown, { record_kind: "unsupported_evidence_manifest", schema_version: "1.0" }); const missing = path.join(tempRoot, "missing.json"); +const principleSource = JSON.parse(fs.readFileSync(principleExtraction, "utf8")); +const principleWithoutDeadline = path.join(tempRoot, "principles-without-review-by.json"); +writeJson(principleWithoutDeadline, (({ review_by: _omitted, ...rest }) => rest)(principleSource)); +const principleFutureReview = path.join(tempRoot, "principles-future-review.json"); +writeJson(principleFutureReview, { ...principleSource, principles: principleSource.principles.map((item, index) => (index === 0 ? { ...item, reviewed_on: "2099-01-01" } : item)) }); const missingPageSchema = path.join(tempRoot, "missing-page-evidence-manifest.schema.json"); const completedPageFixture = initializeConsumer(); const completedPage = completeSession(completedPageFixture); @@ -161,6 +167,24 @@ const cases = [ const actual = run(["--record", pagePastDeadline, "--page-schema", pageSchemaPath, "--as-of", "2026-07-21T00:00:00Z", "--mode", "blocking"]); return result("review-due-blocking", "exit nonzero with evidence_review_due", { codes: actual.report?.failures?.map((item) => item.code), status: actual.child.status, statuses: actual.report?.records?.map((item) => item.status) }, actual.child.status !== 0 && actual.report?.ok === false && actual.report.records[0]?.status === "review_due" && actual.report.failures.some((item) => item.code === "evidence_review_due")); })(), + (() => { + const actual = run(["--record", principleExtraction, "--as-of", "2026-10-20T00:00:00Z", "--mode", "blocking"]); + const entry = actual.report?.records?.[0]; + return result("principle-extraction-fresh", "exit 0 with fresh status, review_by threshold, and reviewed_on as verified_at", { kind: entry?.kind, status: actual.child.status, statuses: actual.report?.records?.map((item) => item.status), threshold: entry?.threshold_date, verified: entry?.verified_at }, actual.child.status === 0 && entry?.kind === "platform_principle_extraction" && entry.status === "fresh" && entry.threshold_date === principleSource.review_by && entry.verified_at === `${principleSource.reviewed_on}T00:00:00Z`); + })(), + (() => { + const asOf = new Date(Date.parse(principleSource.review_by) - 3 * 24 * 60 * 60 * 1000).toISOString(); + const actual = run(["--record", principleExtraction, "--as-of", asOf, "--mode", "advisory"]); + return result("principle-extraction-expiring", "exit 0 with expiring status inside the advisory window", { codes: actual.report?.warnings?.map((item) => item.code), status: actual.child.status, statuses: actual.report?.records?.map((item) => item.status) }, actual.child.status === 0 && actual.report?.records?.[0]?.status === "expiring" && actual.report.warnings.some((item) => item.code === "evidence_expiring")); + })(), + (() => { + const actual = run(["--record", principleExtraction, "--as-of", principleSource.review_by, "--mode", "blocking"]); + return result("principle-extraction-review-due-blocking", "exit nonzero with review_due/evidence_review_due at review_by", { codes: actual.report?.failures?.map((item) => item.code), status: actual.child.status, statuses: actual.report?.records?.map((item) => item.status) }, actual.child.status !== 0 && actual.report?.records?.[0]?.status === "review_due" && actual.report.failures.some((item) => item.code === "evidence_review_due")); + })(), + ...[["principle-extraction-missing-review-by", principleWithoutDeadline], ["principle-extraction-future-principle-review", principleFutureReview]].map(([name, file]) => (() => { + const actual = run(["--record", file, "--as-of", "2026-10-20T00:00:00Z", "--mode", "advisory"]); + return result(name, "exit nonzero with freshness_record_invalid", { codes: actual.report?.failures?.map((item) => item.code), status: actual.child.status }, actual.child.status !== 0 && actual.report?.failures?.some((item) => item.code === "freshness_record_invalid")); + })()), (() => { const actual = run(["--record", pageAtDeadline, "--page-schema", pageSchemaPath, "--as-of", "2026-07-21T00:00:00Z", "--mode", "blocking"]); return result("page-at-review-deadline-blocking", "exit nonzero with review_due/evidence_review_due at the deadline", { codes: actual.report?.failures?.map((item) => item.code), status: actual.child.status, statuses: actual.report?.records?.map((item) => item.status) }, actual.child.status !== 0 && actual.report?.ok === false && actual.report.records[0]?.status === "review_due" && actual.report.failures.some((item) => item.code === "evidence_review_due")); diff --git a/scripts/test-validate-domains.mjs b/scripts/test-validate-domains.mjs index 691c3d1..03192e1 100644 --- a/scripts/test-validate-domains.mjs +++ b/scripts/test-validate-domains.mjs @@ -252,6 +252,7 @@ const additionalLocalLeaves = { ["adaptive-navigation.md", "Adaptive Navigation Across Platforms"], ["preferences-and-accessibility.md", "Preferences And Accessibility Across Platforms"], ["input-and-focus.md", "Input And Focus Across Platforms"], + ["hig-universal-principles.md", "Apple HIG Universal Principles Extraction"], [ "adaptation-workflow.md", "Platform Adaptation Workflow" diff --git a/scripts/test-validate-hig-principles.mjs b/scripts/test-validate-hig-principles.mjs new file mode 100644 index 0000000..d1bae5f --- /dev/null +++ b/scripts/test-validate-hig-principles.mjs @@ -0,0 +1,69 @@ +#!/usr/bin/env node + +import fs from "node:fs"; +import path from "node:path"; +import { spawnSync } from "node:child_process"; +import { fileURLToPath } from "node:url"; +import { defaultMarkdownPath, defaultRecordPath, validateHigPrinciples } from "./validate-hig-principles.mjs"; + +const repositoryRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); +const validator = path.join(repositoryRoot, "scripts", "validate-hig-principles.mjs"); +const fixtureDirectory = "tests/fixtures/hig-principles"; + +function runValidator(args) { + const child = spawnSync(process.execPath, [validator, ...args, "--json"], { cwd: repositoryRoot, encoding: "utf8" }); + let report = null; + try { + report = JSON.parse(child.stdout); + } catch { + report = null; + } + return { report, status: child.status }; +} + +const codesOf = (report) => [...new Set((report?.failures ?? []).map((item) => item.code))].sort(); +const sameCodes = (actual, expected) => actual.length === expected.length && actual.every((code, index) => code === expected[index]); + +// Each committed fixture must produce exactly the listed failure codes; a valid fixture produces none. +const fixtureCases = [ + { expected: [], fixture: "valid-minimal.json" }, + { expected: ["field_missing"], fixture: "missing-field.json" }, + { expected: ["class_unknown"], fixture: "unknown-class.json" }, + { expected: ["id_duplicate"], fixture: "duplicate-id.json" }, +]; + +const results = []; +for (const { expected, fixture } of fixtureCases) { + const { report, status } = runValidator(["--record", `${fixtureDirectory}/${fixture}`, "--skip-markdown"]); + const codes = codesOf(report); + const exitOk = expected.length === 0 ? status === 0 : status === 1; + results.push({ actual: { codes, status }, expected: { codes: expected, status: expected.length === 0 ? 0 : 1 }, name: `fixture:${fixture}`, ok: exitOk && sameCodes(codes, expected) }); +} + +const repository = runValidator([]); +results.push({ actual: { codes: codesOf(repository.report), status: repository.status }, expected: { codes: [], status: 0 }, name: "repository-record-and-guide", ok: repository.status === 0 && repository.report?.ok === true }); + +// In-memory mutations of the real record cover cross-file and reference checks. +const record = JSON.parse(fs.readFileSync(path.join(repositoryRoot, defaultRecordPath), "utf8")); +const markdown = fs.readFileSync(path.join(repositoryRoot, defaultMarkdownPath), "utf8"); +const firstId = record.principles[0].id; +const covered = record.source_pages.find((page) => page.disposition === "covered"); +const extracted = record.source_pages.find((page) => page.disposition === "extracted"); +const mutations = [ + { expected: ["markdown_missing_id"], name: "markdown-drift", options: { markdown: markdown.replaceAll(`\`${firstId}\``, "`removed`") }, record }, + { expected: ["covered_by_unknown"], name: "dangling-covered-by", record: { ...record, source_pages: record.source_pages.map((page) => (page === covered ? { ...page, covered_by: "hig.none.none.none" } : page)) } }, + { expected: ["reference_unknown"], name: "unknown-wcag-criterion", record: { ...record, principles: record.principles.map((item, index) => (index === 0 ? { ...item, wcag: [...item.wcag, "9.9.9"] } : item)) } }, + { expected: ["inventory_unextracted"], name: "extracted-page-without-principle", record: { ...record, principles: record.principles.filter((item) => item.page !== extracted.page) } }, + { expected: ["source_url_mismatch"], name: "source-url-mismatch", record: { ...record, principles: record.principles.map((item, index) => (index === 0 ? { ...item, source_url: "https://example.com/hig" } : item)) } }, +]; +for (const mutation of mutations) { + const report = validateHigPrinciples(mutation.record, mutation.options ?? { markdown }); + const codes = codesOf(report); + // Removing a page's principles can also leave reference entries unused; only the named code is required. + const ok = report.ok === false && mutation.expected.every((code) => codes.includes(code)); + results.push({ actual: { codes }, expected: { includes: mutation.expected }, name: `mutation:${mutation.name}`, ok }); +} + +const report = { ok: results.every((item) => item.ok), results }; +process.stdout.write(`${JSON.stringify(report, null, 2)}\n`); +process.exitCode = report.ok ? 0 : 1; diff --git a/scripts/validate-domains.mjs b/scripts/validate-domains.mjs index 04f99fb..fabd10d 100644 --- a/scripts/validate-domains.mjs +++ b/scripts/validate-domains.mjs @@ -116,6 +116,7 @@ export const canonicalDomains = [ { path: "platform-guides/adaptive-navigation.md", provenance: "local" }, { path: "platform-guides/preferences-and-accessibility.md", provenance: "local" }, { path: "platform-guides/input-and-focus.md", provenance: "local" }, + { path: "platform-guides/hig-universal-principles.md", provenance: "local" }, { path: "platform-guides/apple-interaction.md", provenance: "external", sourcePath: "skills/apple-design/SKILL.md" }, { path: "platform-guides/adaptation-workflow.md", provenance: "local" }, { path: "platform-guides/android-interaction.md", provenance: "local" }, diff --git a/scripts/validate-hig-principles.mjs b/scripts/validate-hig-principles.mjs new file mode 100644 index 0000000..793d3fb --- /dev/null +++ b/scripts/validate-hig-principles.mjs @@ -0,0 +1,204 @@ +#!/usr/bin/env node + +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { parseStrictJson } from "./strict-json.mjs"; + +const repositoryRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); +export const defaultRecordPath = "platform-guides/hig-universal-principles.json"; +export const defaultMarkdownPath = "platform-guides/hig-universal-principles.md"; + +export const PRINCIPLE_CLASSES = ["universal", "adapt", "apple-specific"]; +const DISPOSITIONS = ["extracted", "covered", "excluded"]; +const SECTIONS = ["foundations", "patterns", "components", "inputs", "technologies"]; +const HIG_BASE = "https://developer.apple.com/design/human-interface-guidelines/"; +const PRINCIPLE_FIELDS = ["id", "section", "page", "statement", "source_url", "class", "class_reason", "wcag", "material3", "apg", "verification_question", "reviewed_on"]; +const TOP_FIELDS = ["schema_version", "record_kind", "title", "platform", "source_index", "sections", "out_of_scope_sections", "reviewed_on", "review_by", "text_policy", "classes", "wcag", "material3", "apg", "source_pages", "principles"]; +const SLUG = /^[a-z0-9]+(?:-[a-z0-9]+)*$/; +const DATE = /^\d{4}-\d{2}-\d{2}$/; +const DATE_TIME = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$/; + +function isRecord(value) { + return value !== null && typeof value === "object" && !Array.isArray(value); +} + +function isRealDate(value) { + if (typeof value !== "string" || !DATE.test(value)) return false; + const parsed = new Date(`${value}T00:00:00Z`); + return !Number.isNaN(parsed.getTime()) && parsed.toISOString().slice(0, 10) === value; +} + +function isNonEmptyString(value) { + return typeof value === "string" && value.trim().length > 0; +} + +function checkReferenceDictionary(record, key, keyPattern, urlPrefix, fail) { + const dictionary = record[key]; + if (!isRecord(dictionary)) return; + for (const [entryKey, entry] of Object.entries(dictionary)) { + const where = `${key}.${entryKey}`; + if (!keyPattern.test(entryKey)) fail("reference_key_invalid", where, `${key} key ${entryKey} is malformed`); + if (!isRecord(entry) || !isNonEmptyString(entry.title) || typeof entry.url !== "string" || !entry.url.startsWith(urlPrefix)) { + fail("reference_entry_invalid", where, `${key} entry needs a title and a ${urlPrefix} url`); + } + } +} + +export function validateHigPrinciples(record, { markdown = null } = {}) { + const failures = []; + const fail = (code, where, message) => failures.push({ code, message, path: where }); + + if (!isRecord(record)) { + fail("record_invalid", "/", "record must be a JSON object"); + return { failures, ok: false }; + } + for (const field of TOP_FIELDS) if (!Object.hasOwn(record, field)) fail("field_missing", field, `record is missing ${field}`); + for (const field of Object.keys(record)) if (!TOP_FIELDS.includes(field)) fail("field_unknown", field, `record has unknown field ${field}`); + if (record.schema_version !== "1.0") fail("schema_version_invalid", "schema_version", "schema_version must be 1.0"); + if (record.record_kind !== "platform_principle_extraction") fail("record_kind_invalid", "record_kind", "record_kind must be platform_principle_extraction"); + if (record.text_policy !== "paraphrase_and_link_only") fail("text_policy_invalid", "text_policy", "text_policy must be paraphrase_and_link_only"); + if (!isRealDate(record.reviewed_on)) fail("date_invalid", "reviewed_on", "reviewed_on must be a real YYYY-MM-DD date"); + if (typeof record.review_by !== "string" || !DATE_TIME.test(record.review_by) || Number.isNaN(Date.parse(record.review_by))) { + fail("date_invalid", "review_by", "review_by must be an RFC 3339 UTC date-time"); + } else if (isRealDate(record.reviewed_on) && Date.parse(record.review_by) <= Date.parse(`${record.reviewed_on}T00:00:00Z`)) { + fail("review_window_invalid", "review_by", "review_by must be later than reviewed_on"); + } + if (!isRecord(record.classes) || PRINCIPLE_CLASSES.some((name) => !isNonEmptyString(record.classes[name])) || Object.keys(record.classes).some((name) => !PRINCIPLE_CLASSES.includes(name))) { + fail("classes_invalid", "classes", `classes must define exactly ${PRINCIPLE_CLASSES.join(", ")}`); + } + if (!Array.isArray(record.sections) || record.sections.map((item) => item?.id).join() !== SECTIONS.join()) { + fail("sections_invalid", "sections", `sections must list ${SECTIONS.join(", ")} in order`); + } + checkReferenceDictionary(record, "wcag", /^[1-4]\.\d{1,2}\.\d{1,2}$/, "https://www.w3.org/TR/WCAG22/#", fail); + checkReferenceDictionary(record, "material3", SLUG, "https://m3.material.io/", fail); + checkReferenceDictionary(record, "apg", SLUG, "https://www.w3.org/WAI/ARIA/apg/", fail); + + const pages = new Map(); + for (const [index, page] of (Array.isArray(record.source_pages) ? record.source_pages : []).entries()) { + const where = `source_pages[${index}]`; + if (!isRecord(page)) { + fail("inventory_entry_invalid", where, "inventory entry must be an object"); + continue; + } + for (const field of ["page", "section", "title", "source_url", "disposition"]) if (!Object.hasOwn(page, field)) fail("field_missing", `${where}.${field}`, `inventory entry is missing ${field}`); + if (pages.has(page.page)) fail("inventory_duplicate", where, `inventory lists ${page.page} more than once`); + pages.set(page.page, page); + if (!SECTIONS.includes(page.section)) fail("section_unknown", `${where}.section`, `unknown section ${page.section}`); + if (page.source_url !== `${HIG_BASE}${page.page}`) fail("source_url_mismatch", `${where}.source_url`, `source_url must be ${HIG_BASE}${page.page}`); + if (!DISPOSITIONS.includes(page.disposition)) fail("disposition_unknown", `${where}.disposition`, `unknown disposition ${page.disposition}`); + if (page.disposition !== "extracted" && !isNonEmptyString(page.reason)) fail("field_missing", `${where}.reason`, `${page.disposition} inventory entry needs a reason`); + } + if (!Array.isArray(record.source_pages) || pages.size === 0) fail("inventory_empty", "source_pages", "source_pages must list the walked HIG pages"); + + const ids = new Set(); + const principlesByPage = new Map(); + for (const [index, principle] of (Array.isArray(record.principles) ? record.principles : []).entries()) { + const where = isRecord(principle) && typeof principle.id === "string" ? principle.id : `principles[${index}]`; + if (!isRecord(principle)) { + fail("principle_invalid", where, "principle must be an object"); + continue; + } + for (const field of PRINCIPLE_FIELDS) if (!Object.hasOwn(principle, field)) fail("field_missing", `${where}.${field}`, `principle is missing ${field}`); + for (const field of Object.keys(principle)) if (!PRINCIPLE_FIELDS.includes(field)) fail("field_unknown", `${where}.${field}`, `principle has unknown field ${field}`); + for (const field of ["statement", "class_reason", "verification_question"]) { + if (Object.hasOwn(principle, field) && !isNonEmptyString(principle[field])) fail("field_empty", `${where}.${field}`, `${field} must be a non-empty string`); + } + if (isNonEmptyString(principle.statement) && principle.statement.length > 320) fail("statement_too_long", `${where}.statement`, "statement must stay a short paraphrase (320 characters or fewer)"); + if (isNonEmptyString(principle.verification_question) && !principle.verification_question.trim().endsWith("?")) fail("question_invalid", `${where}.verification_question`, "verification_question must end with a question mark"); + if (Object.hasOwn(principle, "class") && !PRINCIPLE_CLASSES.includes(principle.class)) fail("class_unknown", `${where}.class`, `unknown class ${principle.class}; expected ${PRINCIPLE_CLASSES.join(", ")}`); + if (typeof principle.id === "string") { + if (ids.has(principle.id)) fail("id_duplicate", where, `duplicate principle id ${principle.id}`); + ids.add(principle.id); + const parts = principle.id.split("."); + if (parts.length !== 4 || parts[0] !== "hig" || parts[1] !== principle.section || parts[2] !== principle.page || !SLUG.test(parts[3] ?? "")) { + fail("id_malformed", where, "id must be hig.
.. matching the section and page fields"); + } + } + if (Object.hasOwn(principle, "section") && !SECTIONS.includes(principle.section)) fail("section_unknown", `${where}.section`, `unknown section ${principle.section}`); + if (Object.hasOwn(principle, "page")) { + const page = pages.get(principle.page); + if (!page) fail("inventory_missing_page", `${where}.page`, `page ${principle.page} is not in source_pages`); + else if (page.section !== principle.section) fail("section_mismatch", `${where}.section`, `page ${principle.page} belongs to ${page.section}`); + principlesByPage.set(principle.page, (principlesByPage.get(principle.page) ?? 0) + 1); + } + if (Object.hasOwn(principle, "source_url") && principle.source_url !== `${HIG_BASE}${principle.page}`) fail("source_url_mismatch", `${where}.source_url`, `source_url must be ${HIG_BASE}${principle.page}`); + if (Object.hasOwn(principle, "reviewed_on")) { + if (!isRealDate(principle.reviewed_on)) fail("date_invalid", `${where}.reviewed_on`, "reviewed_on must be a real YYYY-MM-DD date"); + else if (isRealDate(record.reviewed_on) && principle.reviewed_on > record.reviewed_on) fail("date_invalid", `${where}.reviewed_on`, "principle reviewed_on must not be later than the record reviewed_on"); + } + if (Object.hasOwn(principle, "wcag")) { + if (!Array.isArray(principle.wcag)) fail("field_type", `${where}.wcag`, "wcag must be an array of success criterion numbers"); + else { + if (new Set(principle.wcag).size !== principle.wcag.length) fail("reference_duplicate", `${where}.wcag`, "wcag lists a criterion twice"); + for (const sc of principle.wcag) if (!isRecord(record.wcag) || !Object.hasOwn(record.wcag, sc)) fail("reference_unknown", `${where}.wcag`, `unknown WCAG criterion ${sc}`); + } + } + for (const key of ["material3", "apg"]) { + if (!Object.hasOwn(principle, key) || principle[key] === null) continue; + if (typeof principle[key] !== "string" || !isRecord(record[key]) || !Object.hasOwn(record[key], principle[key])) fail("reference_unknown", `${where}.${key}`, `unknown ${key} reference ${principle[key]}`); + } + } + if (!Array.isArray(record.principles) || ids.size === 0) fail("principles_empty", "principles", "principles must be a non-empty array"); + + for (const [slug, page] of pages) { + const count = principlesByPage.get(slug) ?? 0; + if (page.disposition === "extracted" && count === 0) fail("inventory_unextracted", `source_pages.${slug}`, `extracted page ${slug} has no principle`); + if (page.disposition !== "extracted" && count > 0) fail("inventory_disposition_conflict", `source_pages.${slug}`, `${page.disposition} page ${slug} must not have principles`); + if (page.disposition === "covered" && !ids.has(page.covered_by)) fail("covered_by_unknown", `source_pages.${slug}.covered_by`, `covered_by ${page.covered_by} is not a principle id`); + } + + for (const key of ["wcag", "material3", "apg"]) { + if (!isRecord(record[key])) continue; + const used = new Set((record.principles ?? []).flatMap((item) => (key === "wcag" ? item?.wcag ?? [] : [item?.[key]]))); + for (const entryKey of Object.keys(record[key])) if (!used.has(entryKey)) fail("reference_unused", `${key}.${entryKey}`, `${key} entry ${entryKey} is not referenced by any principle`); + } + + if (markdown !== null) { + for (const id of ids) if (!markdown.includes(`\`${id}\``)) fail("markdown_missing_id", defaultMarkdownPath, `Markdown guide does not list ${id}`); + if (!markdown.includes("](hig-universal-principles.json)")) fail("markdown_missing_record_link", defaultMarkdownPath, "Markdown guide must link the JSON record"); + } + + const classes = Object.fromEntries(PRINCIPLE_CLASSES.map((name) => [name, (record.principles ?? []).filter((item) => item?.class === name).length])); + return { classes, failures, ok: failures.length === 0, pages: pages.size, principles: ids.size }; +} + +export function runCli(argv = process.argv.slice(2), root = repositoryRoot) { + let recordPath = defaultRecordPath; + let markdownPath = defaultMarkdownPath; + for (let index = 0; index < argv.length; index += 1) { + const argument = argv[index]; + if (argument === "--json") continue; + if (argument === "--skip-markdown") markdownPath = null; + else if (argument === "--record" || argument === "--markdown") { + const value = argv[index + 1]; + if (!value || value.startsWith("--")) return { failures: [{ code: "argument_value_required", message: `${argument} requires a value`, path: "" }], ok: false }; + index += 1; + if (argument === "--record") recordPath = value; + else markdownPath = value; + } else return { failures: [{ code: "argument_unknown", message: `unsupported argument ${argument}`, path: "" }], ok: false }; + } + let record; + try { + record = parseStrictJson(fs.readFileSync(path.resolve(root, recordPath), "utf8")); + } catch (error) { + return { failures: [{ code: "record_unreadable", message: error instanceof Error ? error.message : String(error), path: recordPath }], ok: false }; + } + let markdown = null; + if (markdownPath !== null) { + try { + markdown = fs.readFileSync(path.resolve(root, markdownPath), "utf8"); + } catch (error) { + return { failures: [{ code: "markdown_unreadable", message: error instanceof Error ? error.message : String(error), path: markdownPath }], ok: false }; + } + } + return validateHigPrinciples(record, { markdown }); +} + +if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) { + const report = runCli(); + if (process.argv.includes("--json")) process.stdout.write(`${JSON.stringify(report, null, 2)}\n`); + else if (report.ok) process.stdout.write(`ok: ${report.principles} HIG principles across ${report.pages} source pages\n`); + else process.stderr.write(`${report.failures.map((item) => `${item.code}: ${item.path}: ${item.message}`).join("\n")}\n`); + process.exitCode = report.ok ? 0 : 1; +} diff --git a/tests/fixtures/hig-principles/duplicate-id.json b/tests/fixtures/hig-principles/duplicate-id.json new file mode 100644 index 0000000..5650c1d --- /dev/null +++ b/tests/fixtures/hig-principles/duplicate-id.json @@ -0,0 +1,130 @@ +{ + "schema_version": "1.0", + "record_kind": "platform_principle_extraction", + "title": "Apple HIG Universal Principles Extraction", + "platform": "Apple Human Interface Guidelines", + "source_index": "https://developer.apple.com/tutorials/data/design/human-interface-guidelines.json", + "sections": [ + { + "id": "foundations", + "title": "Foundations", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/foundations" + }, + { + "id": "patterns", + "title": "Patterns", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/patterns" + }, + { + "id": "components", + "title": "Components", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/components" + }, + { + "id": "inputs", + "title": "Inputs", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/inputs" + }, + { + "id": "technologies", + "title": "Technologies", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/technologies" + } + ], + "out_of_scope_sections": [ + { + "id": "getting-started", + "reason": "Per-platform overview pages; principle extraction covers the five guidance sections only." + } + ], + "reviewed_on": "2026-10-19", + "review_by": "2027-04-19T00:00:00Z", + "text_policy": "paraphrase_and_link_only", + "classes": { + "universal": "The principle holds on the web and on other platforms without translating an Apple mechanism.", + "adapt": "The goal is universal, but HIG expresses it through an Apple mechanism or value that must be translated to a named web or cross-platform counterpart.", + "apple-specific": "The guidance depends on Apple hardware, system rendering, licensing, or brand assets and must not become a web default." + }, + "wcag": { + "1.4.3": { + "title": "Contrast (Minimum)", + "url": "https://www.w3.org/TR/WCAG22/#contrast-minimum" + }, + "1.4.11": { + "title": "Non-text Contrast", + "url": "https://www.w3.org/TR/WCAG22/#non-text-contrast" + }, + "2.5.5": { + "title": "Target Size (Enhanced)", + "url": "https://www.w3.org/TR/WCAG22/#target-size-enhanced" + }, + "2.5.8": { + "title": "Target Size (Minimum)", + "url": "https://www.w3.org/TR/WCAG22/#target-size-minimum" + } + }, + "material3": { + "contrast": { + "title": "Accessibility: color and contrast", + "url": "https://m3.material.io/foundations/designing/color-contrast" + }, + "structure": { + "title": "Accessibility: structure and target sizes", + "url": "https://m3.material.io/foundations/designing/structure" + } + }, + "apg": {}, + "source_pages": [ + { + "page": "accessibility", + "section": "foundations", + "title": "Accessibility", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "disposition": "extracted" + }, + { + "page": "app-icons", + "section": "foundations", + "title": "App icons", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/app-icons", + "disposition": "excluded", + "reason": "Home-screen icon production for Apple platforms; web favicon and manifest icons are out of this extraction's scope." + } + ], + "principles": [ + { + "id": "hig.foundations.accessibility.target-size", + "section": "foundations", + "page": "accessibility", + "statement": "Give every interactive control a hit area and surrounding spacing large enough that a person with limited dexterity reliably activates the intended control.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "adapt", + "class_reason": "HIG states its minimum in Apple points per platform; on the web the floor is WCAG 2.5.8 (24 by 24 CSS px or equivalent spacing), with 2.5.5 as the enhanced target.", + "wcag": [ + "2.5.8", + "2.5.5" + ], + "material3": "structure", + "apg": null, + "verification_question": "Does every pointer target meet 24 by 24 CSS px, or have enough spacing that a 24 px circle around it touches no other target?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.accessibility.target-size", + "section": "foundations", + "page": "accessibility", + "statement": "Keep text, icons, and control boundaries distinguishable from their background in every supported appearance.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "universal", + "class_reason": "Contrast need comes from human vision, not from a platform; both HIG and WCAG require measurable minimums.", + "wcag": [ + "1.4.3", + "1.4.11" + ], + "material3": "contrast", + "apg": null, + "verification_question": "Do body text, large text, and essential non-text indicators meet 4.5:1, 3:1, and 3:1 in light, dark, and increased-contrast states?", + "reviewed_on": "2026-10-19" + } + ] +} diff --git a/tests/fixtures/hig-principles/missing-field.json b/tests/fixtures/hig-principles/missing-field.json new file mode 100644 index 0000000..bae4c40 --- /dev/null +++ b/tests/fixtures/hig-principles/missing-field.json @@ -0,0 +1,129 @@ +{ + "schema_version": "1.0", + "record_kind": "platform_principle_extraction", + "title": "Apple HIG Universal Principles Extraction", + "platform": "Apple Human Interface Guidelines", + "source_index": "https://developer.apple.com/tutorials/data/design/human-interface-guidelines.json", + "sections": [ + { + "id": "foundations", + "title": "Foundations", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/foundations" + }, + { + "id": "patterns", + "title": "Patterns", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/patterns" + }, + { + "id": "components", + "title": "Components", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/components" + }, + { + "id": "inputs", + "title": "Inputs", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/inputs" + }, + { + "id": "technologies", + "title": "Technologies", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/technologies" + } + ], + "out_of_scope_sections": [ + { + "id": "getting-started", + "reason": "Per-platform overview pages; principle extraction covers the five guidance sections only." + } + ], + "reviewed_on": "2026-10-19", + "review_by": "2027-04-19T00:00:00Z", + "text_policy": "paraphrase_and_link_only", + "classes": { + "universal": "The principle holds on the web and on other platforms without translating an Apple mechanism.", + "adapt": "The goal is universal, but HIG expresses it through an Apple mechanism or value that must be translated to a named web or cross-platform counterpart.", + "apple-specific": "The guidance depends on Apple hardware, system rendering, licensing, or brand assets and must not become a web default." + }, + "wcag": { + "1.4.3": { + "title": "Contrast (Minimum)", + "url": "https://www.w3.org/TR/WCAG22/#contrast-minimum" + }, + "1.4.11": { + "title": "Non-text Contrast", + "url": "https://www.w3.org/TR/WCAG22/#non-text-contrast" + }, + "2.5.5": { + "title": "Target Size (Enhanced)", + "url": "https://www.w3.org/TR/WCAG22/#target-size-enhanced" + }, + "2.5.8": { + "title": "Target Size (Minimum)", + "url": "https://www.w3.org/TR/WCAG22/#target-size-minimum" + } + }, + "material3": { + "contrast": { + "title": "Accessibility: color and contrast", + "url": "https://m3.material.io/foundations/designing/color-contrast" + }, + "structure": { + "title": "Accessibility: structure and target sizes", + "url": "https://m3.material.io/foundations/designing/structure" + } + }, + "apg": {}, + "source_pages": [ + { + "page": "accessibility", + "section": "foundations", + "title": "Accessibility", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "disposition": "extracted" + }, + { + "page": "app-icons", + "section": "foundations", + "title": "App icons", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/app-icons", + "disposition": "excluded", + "reason": "Home-screen icon production for Apple platforms; web favicon and manifest icons are out of this extraction's scope." + } + ], + "principles": [ + { + "id": "hig.foundations.accessibility.target-size", + "section": "foundations", + "page": "accessibility", + "statement": "Give every interactive control a hit area and surrounding spacing large enough that a person with limited dexterity reliably activates the intended control.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "adapt", + "class_reason": "HIG states its minimum in Apple points per platform; on the web the floor is WCAG 2.5.8 (24 by 24 CSS px or equivalent spacing), with 2.5.5 as the enhanced target.", + "wcag": [ + "2.5.8", + "2.5.5" + ], + "material3": "structure", + "apg": null, + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.accessibility.contrast", + "section": "foundations", + "page": "accessibility", + "statement": "Keep text, icons, and control boundaries distinguishable from their background in every supported appearance.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "universal", + "class_reason": "Contrast need comes from human vision, not from a platform; both HIG and WCAG require measurable minimums.", + "wcag": [ + "1.4.3", + "1.4.11" + ], + "material3": "contrast", + "apg": null, + "verification_question": "Do body text, large text, and essential non-text indicators meet 4.5:1, 3:1, and 3:1 in light, dark, and increased-contrast states?", + "reviewed_on": "2026-10-19" + } + ] +} diff --git a/tests/fixtures/hig-principles/unknown-class.json b/tests/fixtures/hig-principles/unknown-class.json new file mode 100644 index 0000000..297ed56 --- /dev/null +++ b/tests/fixtures/hig-principles/unknown-class.json @@ -0,0 +1,130 @@ +{ + "schema_version": "1.0", + "record_kind": "platform_principle_extraction", + "title": "Apple HIG Universal Principles Extraction", + "platform": "Apple Human Interface Guidelines", + "source_index": "https://developer.apple.com/tutorials/data/design/human-interface-guidelines.json", + "sections": [ + { + "id": "foundations", + "title": "Foundations", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/foundations" + }, + { + "id": "patterns", + "title": "Patterns", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/patterns" + }, + { + "id": "components", + "title": "Components", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/components" + }, + { + "id": "inputs", + "title": "Inputs", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/inputs" + }, + { + "id": "technologies", + "title": "Technologies", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/technologies" + } + ], + "out_of_scope_sections": [ + { + "id": "getting-started", + "reason": "Per-platform overview pages; principle extraction covers the five guidance sections only." + } + ], + "reviewed_on": "2026-10-19", + "review_by": "2027-04-19T00:00:00Z", + "text_policy": "paraphrase_and_link_only", + "classes": { + "universal": "The principle holds on the web and on other platforms without translating an Apple mechanism.", + "adapt": "The goal is universal, but HIG expresses it through an Apple mechanism or value that must be translated to a named web or cross-platform counterpart.", + "apple-specific": "The guidance depends on Apple hardware, system rendering, licensing, or brand assets and must not become a web default." + }, + "wcag": { + "1.4.3": { + "title": "Contrast (Minimum)", + "url": "https://www.w3.org/TR/WCAG22/#contrast-minimum" + }, + "1.4.11": { + "title": "Non-text Contrast", + "url": "https://www.w3.org/TR/WCAG22/#non-text-contrast" + }, + "2.5.5": { + "title": "Target Size (Enhanced)", + "url": "https://www.w3.org/TR/WCAG22/#target-size-enhanced" + }, + "2.5.8": { + "title": "Target Size (Minimum)", + "url": "https://www.w3.org/TR/WCAG22/#target-size-minimum" + } + }, + "material3": { + "contrast": { + "title": "Accessibility: color and contrast", + "url": "https://m3.material.io/foundations/designing/color-contrast" + }, + "structure": { + "title": "Accessibility: structure and target sizes", + "url": "https://m3.material.io/foundations/designing/structure" + } + }, + "apg": {}, + "source_pages": [ + { + "page": "accessibility", + "section": "foundations", + "title": "Accessibility", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "disposition": "extracted" + }, + { + "page": "app-icons", + "section": "foundations", + "title": "App icons", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/app-icons", + "disposition": "excluded", + "reason": "Home-screen icon production for Apple platforms; web favicon and manifest icons are out of this extraction's scope." + } + ], + "principles": [ + { + "id": "hig.foundations.accessibility.target-size", + "section": "foundations", + "page": "accessibility", + "statement": "Give every interactive control a hit area and surrounding spacing large enough that a person with limited dexterity reliably activates the intended control.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "adapt", + "class_reason": "HIG states its minimum in Apple points per platform; on the web the floor is WCAG 2.5.8 (24 by 24 CSS px or equivalent spacing), with 2.5.5 as the enhanced target.", + "wcag": [ + "2.5.8", + "2.5.5" + ], + "material3": "structure", + "apg": null, + "verification_question": "Does every pointer target meet 24 by 24 CSS px, or have enough spacing that a 24 px circle around it touches no other target?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.accessibility.contrast", + "section": "foundations", + "page": "accessibility", + "statement": "Keep text, icons, and control boundaries distinguishable from their background in every supported appearance.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "mostly-universal", + "class_reason": "Contrast need comes from human vision, not from a platform; both HIG and WCAG require measurable minimums.", + "wcag": [ + "1.4.3", + "1.4.11" + ], + "material3": "contrast", + "apg": null, + "verification_question": "Do body text, large text, and essential non-text indicators meet 4.5:1, 3:1, and 3:1 in light, dark, and increased-contrast states?", + "reviewed_on": "2026-10-19" + } + ] +} diff --git a/tests/fixtures/hig-principles/valid-minimal.json b/tests/fixtures/hig-principles/valid-minimal.json new file mode 100644 index 0000000..c59b009 --- /dev/null +++ b/tests/fixtures/hig-principles/valid-minimal.json @@ -0,0 +1,130 @@ +{ + "schema_version": "1.0", + "record_kind": "platform_principle_extraction", + "title": "Apple HIG Universal Principles Extraction", + "platform": "Apple Human Interface Guidelines", + "source_index": "https://developer.apple.com/tutorials/data/design/human-interface-guidelines.json", + "sections": [ + { + "id": "foundations", + "title": "Foundations", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/foundations" + }, + { + "id": "patterns", + "title": "Patterns", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/patterns" + }, + { + "id": "components", + "title": "Components", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/components" + }, + { + "id": "inputs", + "title": "Inputs", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/inputs" + }, + { + "id": "technologies", + "title": "Technologies", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/technologies" + } + ], + "out_of_scope_sections": [ + { + "id": "getting-started", + "reason": "Per-platform overview pages; principle extraction covers the five guidance sections only." + } + ], + "reviewed_on": "2026-10-19", + "review_by": "2027-04-19T00:00:00Z", + "text_policy": "paraphrase_and_link_only", + "classes": { + "universal": "The principle holds on the web and on other platforms without translating an Apple mechanism.", + "adapt": "The goal is universal, but HIG expresses it through an Apple mechanism or value that must be translated to a named web or cross-platform counterpart.", + "apple-specific": "The guidance depends on Apple hardware, system rendering, licensing, or brand assets and must not become a web default." + }, + "wcag": { + "1.4.3": { + "title": "Contrast (Minimum)", + "url": "https://www.w3.org/TR/WCAG22/#contrast-minimum" + }, + "1.4.11": { + "title": "Non-text Contrast", + "url": "https://www.w3.org/TR/WCAG22/#non-text-contrast" + }, + "2.5.5": { + "title": "Target Size (Enhanced)", + "url": "https://www.w3.org/TR/WCAG22/#target-size-enhanced" + }, + "2.5.8": { + "title": "Target Size (Minimum)", + "url": "https://www.w3.org/TR/WCAG22/#target-size-minimum" + } + }, + "material3": { + "contrast": { + "title": "Accessibility: color and contrast", + "url": "https://m3.material.io/foundations/designing/color-contrast" + }, + "structure": { + "title": "Accessibility: structure and target sizes", + "url": "https://m3.material.io/foundations/designing/structure" + } + }, + "apg": {}, + "source_pages": [ + { + "page": "accessibility", + "section": "foundations", + "title": "Accessibility", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "disposition": "extracted" + }, + { + "page": "app-icons", + "section": "foundations", + "title": "App icons", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/app-icons", + "disposition": "excluded", + "reason": "Home-screen icon production for Apple platforms; web favicon and manifest icons are out of this extraction's scope." + } + ], + "principles": [ + { + "id": "hig.foundations.accessibility.target-size", + "section": "foundations", + "page": "accessibility", + "statement": "Give every interactive control a hit area and surrounding spacing large enough that a person with limited dexterity reliably activates the intended control.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "adapt", + "class_reason": "HIG states its minimum in Apple points per platform; on the web the floor is WCAG 2.5.8 (24 by 24 CSS px or equivalent spacing), with 2.5.5 as the enhanced target.", + "wcag": [ + "2.5.8", + "2.5.5" + ], + "material3": "structure", + "apg": null, + "verification_question": "Does every pointer target meet 24 by 24 CSS px, or have enough spacing that a 24 px circle around it touches no other target?", + "reviewed_on": "2026-10-19" + }, + { + "id": "hig.foundations.accessibility.contrast", + "section": "foundations", + "page": "accessibility", + "statement": "Keep text, icons, and control boundaries distinguishable from their background in every supported appearance.", + "source_url": "https://developer.apple.com/design/human-interface-guidelines/accessibility", + "class": "universal", + "class_reason": "Contrast need comes from human vision, not from a platform; both HIG and WCAG require measurable minimums.", + "wcag": [ + "1.4.3", + "1.4.11" + ], + "material3": "contrast", + "apg": null, + "verification_question": "Do body text, large text, and essential non-text indicators meet 4.5:1, 3:1, and 3:1 in light, dark, and increased-contrast states?", + "reviewed_on": "2026-10-19" + } + ] +}