mirror of
https://github.com/pbakaus/impeccable.git
synced 2026-09-12 06:06:37 +03:00
* fix(live): correct the generation shader's capture + halftone on dark and textured surfaces The live-mode "ink-wash" loading shader rendered correctly on light elements but broke on dark and textured ones. Root causes and fixes: - Ground the halftone on the element's own background tone (new u_paper uniform) instead of a fixed cream paper, so dark elements stop flashing bright as the roller passes. - Drive dot size by each cell's contrast from that ground, not absolute darkness, so content (text, buttons) becomes the dots on light and dark alike instead of inverting on dark elements. - Cap the dot radius so a solid dark region stays separated dots rather than flooding into a gold bar. - Parse computed colors by rasterizing through a canvas, so oklch()/color() tokens resolve instead of falling back to white. - Two-stage dissolve (flatten to ground, then dots emerge) so the raw element never bleeds through the band's soft core/trail. - Carry the capture's alpha through the shader so rounded corners and transparent regions show the live backdrop instead of rendering black. - When an element is transparent up to the root but its backdrop comes from an ancestor's image or a covering layer (e.g. a hero art div), capture that ancestor and crop to the element. Fixes the homepage hero heading capturing on white, and embeds the real backdrop in the model upload too. The halftone ground is sampled from just outside the element so it tracks the true backdrop rather than a muddy average of the content. Adds /shader-lab, a standalone harness that runs the real capture + shader pipeline against a matrix of background shapes (light, dark, gradient, image, glass, rounded, and a homepage-hero replica) with raw vs capture+shader side by side. The capture/shader code is copied from live-browser.js and kept in sync. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(live): clear the cached color-parse canvas before each fill Cursor Bugbot (PR #171): cssColorToRgb01 reuses a cached 2D context, so a semi-transparent input (alpha 0<a<1, which isTransparentColor lets through) blended source-over with the previous call's pixel, making the result depend on call history. clearRect before the fill makes each call independent. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>