Verified against the running game (freeze-fixed Canary title screen) that T8aD colours are correct (no R↔B swap) and that wide textures were garbled by an unreversed tile layout, not a colour bug. Reversed the layout: large T8aD are stored as 256×256 raster tiles in row-major order, each tile raster internally, edge tiles clipped to the image (payload is exactly w*h*4, no padding). Surfaces ≤256px wide are a single tile column, identical to plain linear — which is why small UI textures always decoded correctly. - t8ad.rs: add detile_256() + apply in parse(). Single tile-row / single tile-column textures now decode exactly (ptcopyright, ptbtn, ptlogo1 = clean "PROJECT" logo, previously pure noise). Known residual: ≥2×2-tile textures (>256 in both dims, e.g. the 8AX background) come out coherent but with boundary seams — the multi-tile order is a subtle swizzle, TBD. - sylpheed-cli: new `pak textures <pak> <out>` command — decodes every T8aD (direct, RATC-nested, LSTA frames) to PNG for A/B against the game. Env debug knobs for layout RE: XTILE/XDESTRIP/XDETILE_W/XREINTERPRET_PITCH /XSCORE (TV-ranked tile sweep), plus --verbose size classification. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>