{
  "schemaVersion": "2.76",
  "lastModified": "2026-10-04",
  "canonical": "https://yangtsunghann.com/data/ux-hardening.json",
  "registryType": "ux_mobile_accessibility_hardening",
  "status": "hardening_applied_static_accessibility_contract_pass",
  "targetPublicLaunchDate": "2026-10-10",
  "purpose": "在不改變藝術方向、作品內容、資訊架構與作品 metadata 的前提下，強化 10/10 上線前的人類使用體驗：鍵盤 focus、mobile menu 背景 inert、44px 觸控目標、iOS 表單縮放防護、窄螢幕文字與連結 overflow、安全區 padding、reduced/high-contrast/forced-colors 相容。",
  "hardening": {
    "visualRedesign": false,
    "publicContentFactsChanged": false,
    "informationArchitectureChanged": false,
    "artworkMetadataChanged": false,
    "focusOutlinePx": 2,
    "mobilePrimaryTouchTargetPx": 44,
    "mobileNavRowMinPx": 48,
    "mobileMenuBackgroundInert": true,
    "mobileNavAriaHiddenSync": true,
    "mobileNavOverflowScroll": true,
    "iosFormFontMinPx": 16,
    "safeAreaInsetsApplied": true,
    "narrowScreenBreakpointPx": 360,
    "reducedMotionPreserved": true,
    "prefersContrastSupport": true,
    "forcedColorsSupport": true
  },
  "staticAccessibilityAudit": {
    "pages": 88,
    "viewportMeta": "88/88",
    "htmlLang": "88/88",
    "skipLinks": "88/88",
    "mainFocusTargets": "88/88",
    "headers": "88/88",
    "footers": "88/88",
    "mobileMenuControls": "88/88",
    "primaryNavs": "88/88",
    "linksWithAccessibleNames": "2608/2608",
    "buttonsWithAccessibleNames": "254/254",
    "formControlsWithLabelsOrNames": "2/2",
    "targetBlankSafeRel": "262/262",
    "duplicateIdPages": 0,
    "staticErrors": 0
  },
  "responsiveContract": {
    "coveredWidthsForLaunchQA": [
      320,
      375,
      390,
      430,
      720,
      980,
      1440
    ],
    "cssHardeningTargets": [
      "no horizontal content pressure from long URLs/metadata",
      "mobile navigation scrollability",
      "minimum touch target size",
      "narrow-screen gutters",
      "safe-area insets",
      "balanced mobile page titles",
      "lightbox mobile controls",
      "footer mobile controls"
    ],
    "browserVisualDiffExecutedInThisBuild": false,
    "note": "V2.72 applies and statically validates layout/accessibility contracts. Cross-browser rendered screenshot QA remains a V2.76 Release Candidate gate."
  },
  "releaseGates": [
    {
      "id": "semantic_navigation",
      "status": "pass",
      "expected": "88/88 pages have lang, viewport, skip link, main focus target, header/footer, and mobile menu control."
    },
    {
      "id": "accessible_names",
      "status": "pass",
      "expected": "All links/buttons/form controls in the static public-site HTML have an accessible name or label."
    },
    {
      "id": "duplicate_ids",
      "status": "pass",
      "expected": "No duplicate HTML ids across any public-site page."
    },
    {
      "id": "safe_external_tabs",
      "status": "pass",
      "expected": "All target=_blank links use noopener+noreferrer."
    },
    {
      "id": "mobile_interaction_contract",
      "status": "pass",
      "expected": "Menu/nav and principal mobile controls meet 44px touch-target contract; mobile menu makes main/footer inert while open."
    },
    {
      "id": "narrow_screen_resilience",
      "status": "pass",
      "expected": "320px-specific gutter/type hardening and long-text overflow resilience are present."
    },
    {
      "id": "user_preferences",
      "status": "pass",
      "expected": "reduced motion, increased contrast and forced-color modes have explicit handling."
    },
    {
      "id": "visual_regression_execution",
      "status": "deferred_to_v2_76",
      "expected": "Rendered cross-browser screenshot QA at launch breakpoints before RC sign-off."
    }
  ],
  "nextRelease": "V2.73 — Bilingual Content Final Pass",
  "visiblePublicContentChanged": false,
  "bilingualContentFinalPass": "/data/bilingual-content-final-pass.json",
  "releaseCandidate": "/data/release-candidate.json",
  "releaseCandidateVerification": {
    "automatedRenderedEngine": "Chromium/Blink",
    "renderedLayoutChecks": 48,
    "viewports": [
      "320",
      "390",
      "430",
      "1440"
    ],
    "horizontalOverflowFailuresAfterFix": 0,
    "englishBiographyMobileOverflowFixed": true,
    "manualSafariFirefoxGatePending": true
  },
  "relatedData": {
    "releaseCandidate": "/data/release-candidate.json",
    "publicLaunch": "/data/public-launch.json"
  }
}
