diff --git a/docs/parity-gallery-grid.md b/docs/parity-gallery-grid.md
index 0c4ce40..604c4de 100644
--- a/docs/parity-gallery-grid.md
+++ b/docs/parity-gallery-grid.md
@@ -58,8 +58,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -69,8 +69,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -80,8 +80,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -91,8 +91,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -102,8 +102,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -113,8 +113,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -124,8 +124,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -135,8 +135,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -146,8 +146,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -157,8 +157,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -168,8 +168,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -179,8 +179,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -190,8 +190,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -201,8 +201,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -212,10 +212,10 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **empty / light** |  |  |
-| **empty / dark** |  |  |
-| **populated / light** |  |  |
-| **populated / dark** |  |  |
+| **empty / light** |
|
|
+| **empty / dark** |
|
|
+| **populated / light** |
|
|
+| **populated / dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -225,8 +225,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -236,10 +236,10 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **empty / light** |  | _(not on ios)_ |
-| **empty / dark** |  | _(not on ios)_ |
-| **populated / light** |  | _(not on ios)_ |
-| **populated / dark** |  | _(not on ios)_ |
+| **empty / light** |
| _(not on ios)_ |
+| **empty / dark** |
| _(not on ios)_ |
+| **populated / light** |
| _(not on ios)_ |
+| **populated / dark** |
| _(not on ios)_ |
[top](#honeydue-parity-gallery)
@@ -249,10 +249,10 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **empty / light** |  |  |
-| **empty / dark** |  |  |
-| **populated / light** |  |  |
-| **populated / dark** |  |  |
+| **empty / light** |
|
|
+| **empty / dark** |
|
|
+| **populated / light** |
|
|
+| **populated / dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -262,10 +262,10 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **empty / light** |  |  |
-| **empty / dark** |  |  |
-| **populated / light** |  |  |
-| **populated / dark** |  |  |
+| **empty / light** |
|
|
+| **empty / dark** |
|
|
+| **populated / light** |
|
|
+| **populated / dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -275,8 +275,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -286,8 +286,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -297,8 +297,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -308,8 +308,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  | _\[missing — ios\]_ |
-| **dark** |  | _\[missing — ios\]_ |
+| **light** |
| _\[missing — ios\]_ |
+| **dark** |
| _\[missing — ios\]_ |
[top](#honeydue-parity-gallery)
@@ -319,10 +319,10 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **empty / light** |  |  |
-| **empty / dark** |  |  |
-| **populated / light** |  |  |
-| **populated / dark** |  |  |
+| **empty / light** |
|
|
+| **empty / dark** |
|
|
+| **populated / light** |
|
|
+| **populated / dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -332,8 +332,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** | _(not on android)_ |  |
-| **dark** | _(not on android)_ |  |
+| **light** | _(not on android)_ |
|
+| **dark** | _(not on android)_ |
|
[top](#honeydue-parity-gallery)
@@ -343,8 +343,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -354,8 +354,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -365,8 +365,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -376,8 +376,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  | _\[missing — ios\]_ |
-| **dark** |  | _\[missing — ios\]_ |
+| **light** |
| _\[missing — ios\]_ |
+| **dark** |
| _\[missing — ios\]_ |
[top](#honeydue-parity-gallery)
@@ -387,10 +387,10 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **empty / light** |  |  |
-| **empty / dark** |  |  |
-| **populated / light** |  |  |
-| **populated / dark** |  |  |
+| **empty / light** |
|
|
+| **empty / dark** |
|
|
+| **populated / light** |
|
|
+| **populated / dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -400,10 +400,10 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **empty / light** |  |  |
-| **empty / dark** |  |  |
-| **populated / light** |  |  |
-| **populated / dark** |  |  |
+| **empty / light** |
|
|
+| **empty / dark** |
|
|
+| **populated / light** |
|
|
+| **populated / dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -413,10 +413,10 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **empty / light** |  |  |
-| **empty / dark** |  |  |
-| **populated / light** |  |  |
-| **populated / dark** |  |  |
+| **empty / light** |
|
|
+| **empty / dark** |
|
|
+| **populated / light** |
|
|
+| **populated / dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -426,10 +426,10 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **empty / light** |  | _(not on ios)_ |
-| **empty / dark** |  | _(not on ios)_ |
-| **populated / light** |  | _(not on ios)_ |
-| **populated / dark** |  | _(not on ios)_ |
+| **empty / light** |
| _(not on ios)_ |
+| **empty / dark** |
| _(not on ios)_ |
+| **populated / light** |
| _(not on ios)_ |
+| **populated / dark** |
| _(not on ios)_ |
[top](#honeydue-parity-gallery)
@@ -439,10 +439,10 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **empty / light** | _(not on android)_ |  |
-| **empty / dark** | _(not on android)_ |  |
-| **populated / light** | _(not on android)_ |  |
-| **populated / dark** | _(not on android)_ |  |
+| **empty / light** | _(not on android)_ |
|
+| **empty / dark** | _(not on android)_ |
|
+| **populated / light** | _(not on android)_ |
|
+| **populated / dark** | _(not on android)_ |
|
[top](#honeydue-parity-gallery)
@@ -452,10 +452,10 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **empty / light** |  |  |
-| **empty / dark** |  |  |
-| **populated / light** |  |  |
-| **populated / dark** |  |  |
+| **empty / light** |
|
|
+| **empty / dark** |
|
|
+| **populated / light** |
|
|
+| **populated / dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -465,8 +465,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -476,8 +476,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -487,10 +487,10 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **empty / light** |  |  |
-| **empty / dark** |  |  |
-| **populated / light** |  |  |
-| **populated / dark** |  |  |
+| **empty / light** |
|
|
+| **empty / dark** |
|
|
+| **populated / light** |
|
|
+| **populated / dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -500,8 +500,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** | _(not on android)_ |  |
-| **dark** | _(not on android)_ |  |
+| **light** | _(not on android)_ |
|
+| **dark** | _(not on android)_ |
|
[top](#honeydue-parity-gallery)
@@ -511,8 +511,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -522,8 +522,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
@@ -533,8 +533,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  | _(not on ios)_ |
-| **dark** |  | _(not on ios)_ |
+| **light** |
| _(not on ios)_ |
+| **dark** |
| _(not on ios)_ |
[top](#honeydue-parity-gallery)
@@ -544,8 +544,8 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
| State / Mode | Android | iOS |
|---|---|---|
-| **light** |  |  |
-| **dark** |  |  |
+| **light** |
|
|
+| **dark** |
|
|
[top](#honeydue-parity-gallery)
diff --git a/scripts/build_parity_gallery.py b/scripts/build_parity_gallery.py
index 6c25401..08d5b77 100755
--- a/scripts/build_parity_gallery.py
+++ b/scripts/build_parity_gallery.py
@@ -254,10 +254,31 @@ def write_markdown(
ios: dict[str, str],
manifest: list[tuple[str, str, set[str]]],
) -> None:
- """Gitea-renderable grid as markdown tables."""
+ """Gitea-renderable grid as markdown tables.
+
+ Images are emitted as raw `
` tags with explicit `width` and
+ `height` attributes rather than markdown `![]()` syntax. Gitea's
+ markdown renderer (goldmark + bluemonday) strips inline `style`
+ attributes, but keeps the `width`/`height` HTML attributes. Forcing
+ both dimensions guarantees identical cell sizes regardless of the
+ underlying PNG resolution (Android is 360×800 @1x, iOS is 780×1688
+ @2x; without this, row heights would shift a few percent per
+ platform and break side-by-side comparisons).
+ """
+ # Fixed display size for every image cell. Kept at a ~9:19.5 aspect
+ # ratio (modern phone proportions). Width chosen to fit two tall
+ # portrait screens side-by-side in a typical Gitea markdown pane.
+ img_w, img_h = 260, 560
+
out = os.path.join(REPO_ROOT, OUT_MD)
os.makedirs(os.path.dirname(out), exist_ok=True)
+ def img_tag(src: str, alt: str) -> str:
+ return (
+ f'
'
+ )
+
with open(out, "w", encoding="utf-8") as f:
f.write("# honeyDue parity gallery\n\n")
f.write(
@@ -284,10 +305,10 @@ def write_markdown(
key = f"{name}_{suffix}"
a = android.get(key)
i = ios.get(key)
- a_cell = f"" if a else (
+ a_cell = img_tag(a, f"{key} Android") if a else (
"_\\[missing — android\\]_" if "android" in plats else "_(not on android)_"
)
- i_cell = f"" if i else (
+ i_cell = img_tag(i, f"{key} iOS") if i else (
"_\\[missing — ios\\]_" if "ios" in plats else "_(not on ios)_"
)
f.write(f"| **{state_label}** | {a_cell} | {i_cell} |\n")