Skip to content

Commit 2fc26eb

Browse files
Merge pull request #1 from MHToolkit/feat/apple-design-baseline
feat: apply organization Apple design baseline
2 parents 6b24fc7 + 3b78de4 commit 2fc26eb

13 files changed

Lines changed: 330 additions & 23 deletions

‎.github/workflows/ci.yml‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
name: Website checks
2+
3+
on:
4+
pull_request:
5+
push:
6+
branches: [main]
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: read
11+
12+
jobs:
13+
static-site:
14+
name: Static site and design contract
15+
runs-on: ubuntu-latest
16+
timeout-minutes: 10
17+
steps:
18+
- uses: actions/checkout@v4
19+
- uses: actions/setup-python@v5
20+
with:
21+
python-version: "3.12"
22+
- name: Verify Apple Design contract
23+
run: python -m unittest discover -s tests -p 'test_*.py'
24+
- name: Serve and smoke-test the published document
25+
run: |
26+
python -m http.server 8765 --directory . >/tmp/mhtoolkit-site.log 2>&1 &
27+
server_pid=$!
28+
trap 'kill "$server_pid"' EXIT
29+
curl --fail --retry 5 --retry-connrefused http://127.0.0.1:8765/
30+
- name: Reject whitespace errors
31+
run: git diff --check

‎assets/design-tokens.css‎

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
:root {
2+
color-scheme: dark;
3+
--surface-window: #071019;
4+
--surface-sidebar: rgba(12, 26, 40, 0.78);
5+
--surface-content: rgba(18, 39, 58, 0.94);
6+
--separator: rgba(150, 210, 255, 0.22);
7+
--label-primary: #ecf7ff;
8+
--label-secondary: #a9bdcd;
9+
--accent: #4dd2ff;
10+
--state-success: #89ffcb;
11+
--state-warning: #ffd166;
12+
--state-error: #ff7b86;
13+
--motion-response: 380ms;
14+
--motion-easing: cubic-bezier(.2, .8, .2, 1);
15+
--target-minimum: 44px;
16+
--focus-ring: 0 0 0 3px rgba(77, 210, 255, 0.55);
17+
}
18+
19+
a, button {
20+
transition: color var(--motion-response) var(--motion-easing),
21+
background-color var(--motion-response) var(--motion-easing),
22+
transform var(--motion-response) var(--motion-easing);
23+
}
24+
25+
a:focus-visible, button:focus-visible {
26+
outline: none;
27+
box-shadow: var(--focus-ring);
28+
}
29+
30+
.button, .links a {
31+
min-block-size: var(--target-minimum);
32+
display: inline-flex;
33+
align-items: center;
34+
}
35+
36+
.project-link h2 a {
37+
min-block-size: var(--target-minimum);
38+
display: inline-flex;
39+
align-items: center;
40+
}
41+
42+
.project-link:hover { transform: translateY(-2px); }
43+
.status[data-state="planning"] { border-inline-start: 4px solid var(--state-warning); }
44+
45+
@media (prefers-reduced-motion: reduce) {
46+
*, *::before, *::after {
47+
scroll-behavior: auto !important;
48+
transition-duration: 0.001ms !important;
49+
animation-duration: 0.001ms !important;
50+
animation-iteration-count: 1 !important;
51+
}
52+
}
53+
54+
@media (prefers-reduced-transparency: reduce) {
55+
:root {
56+
--surface-sidebar: #0c1a28;
57+
--surface-content: #12273a;
58+
}
59+
.logo-card { backdrop-filter: none !important; }
60+
}
61+
62+
@media (prefers-contrast: more) {
63+
:root {
64+
--separator: rgba(236, 247, 255, 0.68);
65+
--label-secondary: #d6e4ef;
66+
}
67+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
- generic [active] [ref=e1]:
2+
- banner [ref=e2]:
3+
- navigation [ref=e3]:
4+
- link "MH Toolkit home" [ref=e4] [cursor=pointer]:
5+
- /url: /
6+
- img "MH Toolkit Nemessix shield logo" [ref=e5]
7+
- generic [ref=e6]: MH Toolkit
8+
- navigation "Project navigation" [ref=e7]:
9+
- link "Projects" [ref=e8] [cursor=pointer]:
10+
- /url: "#projects"
11+
- link "Releases" [ref=e9] [cursor=pointer]:
12+
- /url: https://github.com/MHToolkit/mh-toolkit
13+
- link "GitHub" [ref=e10] [cursor=pointer]:
14+
- /url: https://github.com/MHToolkit
15+
- main [ref=e11]:
16+
- generic [ref=e13]:
17+
- generic [ref=e14]: macOS · Android · classic hunting tools
18+
- heading "MH Toolkit" [level=1] [ref=e15]
19+
- paragraph [ref=e16]: "An organization-level toolkit ecosystem for classic Monster Hunter emulation: focused repositories for overlays, emulator integration, saves, multiplayer, content tooling, and coordinated releases for macOS and Android."
20+
- generic [ref=e17]:
21+
- link "View the hub" [ref=e18] [cursor=pointer]:
22+
- /url: https://github.com/MHToolkit/mh-toolkit
23+
- link "GitHub organization" [ref=e19] [cursor=pointer]:
24+
- /url: https://github.com/MHToolkit
25+
- region "Project areas" [ref=e21]:
26+
- article [ref=e22]:
27+
- heading [level=2] [ref=e23]:
28+
- link "Nemessix" [ref=e24] [cursor=pointer]:
29+
- /url: https://github.com/MHToolkit/nemessix
30+
- paragraph [ref=e25]: A capability-driven Nintendo engine platform with a unified library and platform-native multiplayer coordination.
31+
- article [ref=e26]:
32+
- heading [level=2] [ref=e27]:
33+
- link "MH Overlay" [ref=e28] [cursor=pointer]:
34+
- /url: https://github.com/MHToolkit/mh-overlay
35+
- paragraph [ref=e29]: Fail-closed, version-aware battle information with native macOS and Android presentation.
36+
- article [ref=e30]:
37+
- heading [level=2] [ref=e31]:
38+
- link "MH Save Sync" [ref=e32] [cursor=pointer]:
39+
- /url: https://github.com/MHToolkit/mh-save-sync
40+
- paragraph [ref=e33]: Encrypted, conflict-preserving save history with explicit queue and recovery states.
41+
- article [ref=e34]:
42+
- heading [level=2] [ref=e35]:
43+
- link "MH Field Map" [ref=e36] [cursor=pointer]:
44+
- /url: https://github.com/MHToolkit/mh-field-map
45+
- paragraph [ref=e37]: Accessible field reference and map states designed for online and offline use.
46+
- article [ref=e38]:
47+
- heading [level=2] [ref=e39]:
48+
- link "Coordinated releases" [ref=e40] [cursor=pointer]:
49+
- /url: https://github.com/MHToolkit/mh-toolkit
50+
- paragraph [ref=e41]: Exact repository identities, platform support evidence, artifact hashes, and setup paths.
51+
- status [ref=e42]:
52+
- strong [ref=e43]: "Status:"
53+
- text: active platform development. Compatibility remains fail-closed until each product and artifact has reproducible evidence.
54+
- contentinfo [ref=e44]: © 2026 MH Toolkit · Built on GitHub Pages
700 KB
Loading
700 KB
Loading
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# MHToolkit website Apple Design inventory
2+
3+
## Real UI entry points
4+
5+
- `index.html`: global navigation, hero, project/release navigation, status surface, responsive layout.
6+
- `assets/design-tokens.css`: semantic surface/label/state/motion/accessibility mapping.
7+
8+
## State and accessibility inventory
9+
10+
- The release status is a persistent `role=status` surface with an explicit `data-state`.
11+
- Project navigation needs visible focus, 44px targets, reduced-motion behavior, reduced-transparency fallback, increased-contrast tokens, and mobile reflow.
12+
- The site must not infer compatibility from a repository link; copy remains fail-closed.
13+
14+
## Verification
15+
16+
- Contract: `rtk test python -m unittest tests/test_apple_design.py`
17+
- Runtime: serve the repository root and capture desktop/mobile screenshots with Playwright.
18+
- Static gate: `rtk git diff --check`.
368 KB
Loading
369 KB
Loading

‎docs/design/evidence-2026-07-18.md‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# MHToolkit website Apple Design evidence — 2026-07-18
2+
3+
## Runtime capture
4+
5+
The site was served locally with `python -m http.server 8765` and captured with installed Google
6+
Chrome through Playwright. No emulator, game, account, or restricted asset was launched.
7+
8+
```text
9+
rtk proxy npx playwright screenshot --channel=chrome --full-page \
10+
--viewport-size='1440,1000' http://127.0.0.1:8765 \
11+
docs/design/apple-design-desktop.png
12+
rtk proxy npx playwright screenshot --channel=chrome --full-page \
13+
--viewport-size='390,844' http://127.0.0.1:8765 \
14+
docs/design/apple-design-mobile.png
15+
```
16+
17+
| Artifact | SHA-256 |
18+
| --- | --- |
19+
| `apple-design-desktop.png` | `f1602218cc9464a1f60f9fd64cd60cbda4ff5bba35e769a488aef59a367a8263` |
20+
| `apple-design-mobile.png` | `3e4d655d1d6e0a9716ee59734b9211ec70e29a48a87dea3ad2dddf9f81174522` |
21+
22+
## Automated evidence
23+
24+
`rtk test python -m unittest tests/test_apple_design.py` passed 2 tests. The contract covers semantic
25+
tokens, focus visibility, reduced motion/transparency, increased contrast, all four product links,
26+
project navigation semantics, and explicit planning state. `rtk git diff --check` passed.
27+
28+
PR [MHToolkit.github.io#1](https://github.com/MHToolkit/MHToolkit.github.io/pull/1) now has a
29+
real `Website checks / Static site and design contract` workflow. Run `29656576581` passed the
30+
three-test unittest discovery, served `index.html` over a local HTTP server, fetched it with
31+
fail-closed `curl --fail`, and checked whitespace on commit `adb31fc601521f6006c3218e839770fa910ff71d`.
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# MHToolkit website runtime and accessibility evidence — 2026-07-19
2+
3+
## Runtime
4+
5+
The worktree was served without any game, emulator, account, or restricted asset:
6+
7+
```text
8+
rtk proxy python3 -m http.server 8765 --bind 127.0.0.1
9+
rtk proxy curl --fail --silent --show-error http://127.0.0.1:8765/ -o /tmp/mhtoolkit-web-index.html
10+
```
11+
12+
The HTTP smoke request exited `0`; the fetched document SHA-256 was
13+
`716c77de84c4f880f7c61920056430ae237d92dbf3deb3fda0ee77afdc32af4b`.
14+
15+
Playwright CLI opened `http://127.0.0.1:8765/` in Chrome, reloaded after the semantic
16+
contract change, and captured the full scrollable page at both target viewports.
17+
18+
| Artifact | Viewport | SHA-256 |
19+
| --- | --- | --- |
20+
| `apple-design-desktop-runtime-full.png` | 1440x1000 | `10952f588c0ac7e68c2e65559257080ed60d4904b0fc1d0646657b8629b233e8` |
21+
| `apple-design-mobile-runtime-full.png` | 390x844 | `4faf143970c69fcc0708e5dca01d9983b184730fb9542ee23aa03d51612929e5` |
22+
23+
## Semantic/accessibility tree
24+
25+
The captured Playwright accessibility snapshot is checked in at
26+
`docs/design/accessibility-tree-2026-07-19.yml` (SHA-256
27+
`00b9b913eb69cd293f66f40f80108db9967ba0df3c8d600a43b0816cb9286dc5`). It confirms:
28+
29+
- document title `MH Toolkit`, language `en`, and banner/main/contentinfo landmarks;
30+
- explicit `Project navigation` navigation landmark;
31+
- labelled `Project areas` region with five article entries and links for Nemessix, MH Overlay,
32+
MH Save Sync, MH Field Map, and Coordinated releases;
33+
- a `status` live region containing the fail-closed compatibility state;
34+
- all 11 links exposed as keyboard focusable controls.
35+
36+
The browser-side computed-style probe confirmed each project link uses
37+
`display: inline-flex` and `min-block-size: 44px`. The static contract also covers focus-visible,
38+
reduced-motion, reduced-transparency, and increased-contrast states.
39+
40+
## Verification
41+
42+
```text
43+
rtk test python -m unittest discover -s tests -p 'test_*.py' # 3 passed
44+
rtk git diff --check # exit 0
45+
```
46+

0 commit comments

Comments
 (0)