# RetroMail 0.1.1 - Improves two-finger zooming and navigation after zooming in mobile message bodies for a smoother, more reliable reading experience. - Improves text selection and copying on mobile, making it easier to select message content with a long press without interfering with zoom or drag gestures. # RetroMail 0.0.23 - Fixes legacy HTML `background` attributes creating duplicate style attributes when they precede `style`, which dropped authored repeat, position, size, and border declarations. Background resources still load only through the RetroMail proxy after reader approval. - Promotes only whitespace-only `span` wrappers whose direct content is tables to block structure, removing anonymous line boxes and baseline gaps that stretched fixed-height background slices while preserving text, link, and ordinary inline semantics. - Advances sanitized body caches to version 8 so affected historical messages lazily refetch and repair on their next open without clearing or fully resynchronizing the mailbox, with attribute-order, semantic-boundary, and real-Chromium geometry regressions. # RetroMail 0.0.22 - Trusts only the outer content area and real device viewport when sizing the mobile message host. A zero-width first WebView layout can no longer fall back to a sender-authored 660px canvas and expand the conversation card, remote-image notice, or document. - Adds cancellable momentum to one-finger dragging using the host page's monotonic clock and the same two-axis pan owner. A new touch, wheel input, or double-click stops momentum immediately, while movement below the long-press threshold still leaves scrolling unchanged. - Turns a zoomed message into an independent reading viewport that fills the mobile content area and places Quick Reply after it. Momentum stops at message boundaries instead of moving the outer page after release; a deliberate drag beyond the boundary can still continue through the conversation. - Adds regressions for zero-width initialization, momentum lifecycle, zoom boundaries, Quick Reply placement, and real 390px CMB geometry. All 132 unit, 23 behavior, and five cross-device visual suites pass. # RetroMail 0.0.21 - Renders mobile HTML mail as one browser-composited surface: the sandboxed iframe renders once and the complete iframe is transformed as a unit, instead of reflowing backgrounds, tables, images, and positioned content through `body zoom`. - Adds a same-context gesture surface above the iframe for physical pinch, long-press, and two-axis drag input, avoiding Android WebView gesture arbitration and second-touch loss across iframe boundaries. A zoomed message can pan horizontally or vertically immediately. - Maps surface taps back to iframe links while preserving RetroMail's external-link confirmation. Double-tapping non-link content restores the default scale, rotation responds only to the stable host width, and enlarged content cannot expand the viewport itself. - Promotes unexpectedly wide responsive mail to a complete logical surface during initial measurement, keeping the iframe free of nested scrolling. Physical link-tap, pinch, jitter, two-axis pan, reset, rotation, overflow, 129 unit, 23 behavior, and five cross-device visual regressions pass. # RetroMail 0.0.17 - Recognizes fixed background sections nested under neutral single-child wrappers such as `fixBand`, preventing mobile clients from compressing their width while retaining unscaled authored heights. The complete canvas now fits as one unit so backgrounds, content, and section geometry remain aligned. - Adds a mobile viewer only for non-reflowable fixed canvases, with Fit Width, Actual Size, stepped and pinch zoom, plus horizontal and vertical panning while zoomed. Double-clicking, rotating the device, or changing the body viewport safely returns to fit width. - Leaves ordinary responsive mail and desktop rendering on their existing paths, with real-Chromium coverage for 390px fitting, 100% actual size, two-axis scrolling, 430px rotation reflow, controlled background loading, and isolated asset failure. # RetroMail 0.0.16 - Avoids restoring an Outlook VML button when a nearby ordinary web button uses `mso-hide: all` without an explicit `!mso` conditional, returning messages such as Duolingo to one call to action. - Scales multi-section fixed background canvases such as CMB mail as one unit on mobile so widths, heights, backgrounds, and iframe height stay aligned. Desktop keeps the authored pixel canvas, and an individual failed background remains isolated. - Advances sanitized body caches to version 6 so affected messages repair lazily without clearing or fully resynchronizing the mailbox, with MSO branch and real desktop/mobile Chromium geometry regressions. # RetroMail 0.0.15 - Preserves allowlisted `class`, `id`, language, ARIA, and ordinary `data-*` attributes on links and images after safe URL rewriting so sender rules such as `.cta` and `.hero` keep matching. - Deduplicates remote assets by URL, removes orphaned entries after final body generation, compacts indexes, and limits reader-approved proxy loading to eight concurrent requests. - Adds static email-CSS budgets that reject animation, transitions, filters, sender variables, extreme dimensions, and extreme transforms while protecting the document root from being hidden and retaining common layout and color declarations. - Caps inline SVG at 32 items and 1 MiB per message with readable title fallbacks, and recognizes harmless ESP comments between paired MSO and web branches without rendering duplicates. - Adds HTML/CSS fuzz invariants, Race coverage, attribute-fidelity, asset-compaction, SVG-budget, MSO-comment, and remote-image-concurrency tests. Sanitized body caches advance to version 5 and lazily refresh historical messages on their next open. # RetroMail 0.0.14 - Fixes mobile clients reusing an SVG Worker response cached under the previous CSP, which left the three Burry check icons missing even though desktop clients rendered them. The Worker protocol and Service Worker cache are versioned forward, and Worker requests now use network-first revalidation with an offline cache fallback. - Adds a 390x844 mobile message-body regression alongside the desktop test, verifying that all three 16x16 Burry SVGs are safely rasterized to PNG without clearing mail or resynchronizing. - Fixes legacy HTML `background` attributes losing their element binding after being registered as controlled assets, so layered marketing messages such as CMB restore backgrounds through the server proxy after reader confirmation while an individual failed asset remains inert. - Safely lowers static VML backgrounds, text containers, and rounded buttons from MSO conditional comments only when no adjacent standard web branch is available; scripts, ActiveX, direct client fetches, and iframe privileges remain blocked. - Advances sanitized body caches to version 4 so historical messages lazily refetch and apply the fix on their next open without clearing the database or resynchronizing the mailbox. # RetroMail 0.0.13 - Fixes the production CSP blocking `resvg-wasm` compilation in the isolated Worker, which prevented safe embedded SVG icons in Substack and similar messages from being rasterized. This adds only `wasm-unsafe-eval`, without enabling JavaScript `unsafe-eval`, external scripts, or message-iframe scripts. - Adds a real-Chromium regression using the exact 16x16 Lucide check SVG from the Burry message and verifies that all three icons become PNGs without CSP violations. # RetroMail 0.0.12 - Fixes stable remote-image indexes being dropped by the final HTML policy and causing every historical image to resolve to transparent asset zero; version-2 caches recover from their manifest without a reset and lazily advance to body-cache version 3. # RetroMail 0.0.11 - Prefers raw MIME for Microsoft message bodies and shares a recursive MIME normalizer with QQ and Exchange for `multipart/alternative`, `multipart/related`, CID, `Content-Location`, charsets, and truncated-message fallback. - Adds a safety-bounded compatibility layer for Outlook conditional comments, common static VML, legacy table attributes, controlled backgrounds, `picture/srcset`, video posters, and malformed CSS declarations. - Normalizes remote message resources into an unforgeable stable manifest; nothing is fetched by default, and reader-approved resources still load only through the authenticated server proxy. - Sanitizes embedded SVG with a dedicated allowlist and rasterizes it to PNG with resvg in an isolated Worker without relaxing the message iframe sandbox or CSP. - Advances the body-cache pipeline to version 2 so stale bodies refetch only when needed while new messages and repeated opens avoid extra provider requests. - Expands desktop, mobile, malicious-input, real-browser geometry, visual-regression, and LPK-content release gates. # RetroMail 0.0.10 - Versions sanitized HTML body caches so an older message is lazily refetched from its provider and passed through the current compatibility layer when next opened. - Retains the older safe cache as a fallback when the provider is temporarily unavailable and retries the refresh on a later open. # RetroMail 0.0.9 - Replaces the email CSS property allowlist with AST-based capability isolation, restoring safe pseudo-elements, modern layout, and message colors. - Neutralizes remote CSS resources, escaping positions, and iframe height loops while retaining controlled server-proxied images. - Adds a DOMPurify browser-side structure check and separates iframe document, event, height, and remote-image lifecycle modules. - Keeps the iframe sandbox and CSP unchanged when the reader explicitly allows proxied images for a message. # RetroMail 0.0.8 - Adds staged SMTP diagnostics, request identifiers, and sanitized provider error details. - Adds fast-sync checks, throttling, provider latency, and Gmail quota metrics. - Improves remote-image caching, mobile layout for complex HTML mail, and backfill notices. - Documents the classic Apple design system and the Docker Hub-to-LazyCat LPK release workflow. # RetroMail 0.0.3 Initial release of RetroMail on the LazyCat App Store. - Supports Gmail, Microsoft 365, Outlook/Hotmail, QQ/Foxmail, standard IMAP/SMTP, and Exchange Server. - Provides a unified inbox, conversation threads, local search, drafts, attachments, calendar invitations, and common mail actions. - Integrates with LazyCat OIDC and keeps mailboxes, credentials, drafts, sessions, search data, and notifications isolated between users. - Supports new-mail notifications through LazyCat clients, with controls for target devices and message previews. - Supports selecting attachments from LazyCat Drive and saving received attachments back to LazyCat Drive. - Provides Simplified Chinese and English interfaces for desktop and mobile devices.