From 19dd92c947058a5640e1e45f68b44fb5bf90da41 Mon Sep 17 00:00:00 2001 From: Agent Date: Mon, 17 Aug 2026 10:22:58 -0400 Subject: [PATCH 1/2] Remove local welshman link: overrides from pnpm-workspace.yaml 9a80d059 (Migrate to new welshman) accidentally committed link:../welshman/packages/* pnpm overrides into pnpm-workspace.yaml, forcing resolution to a local welshman checkout that doesn't exist in this environment. package.json already specifies the correct upstream range (^0.9.0-pre2), so a fresh `pnpm install` produced dangling node_modules/@welshman/* symlinks and broke `pnpm run dev`. Drop the overrides (keep sharp) and regenerate pnpm-lock.yaml, which now resolves upstream @welshman/*@0.9.0-pre5. Co-Authored-By: Claude Sonnet 5 --- pnpm-lock.yaml | Bin 341858 -> 369180 bytes pnpm-workspace.yaml | 10 ---------- 2 files changed, 10 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e0758c763d20a462743e6171b70b22f60a86c931..3a2c0836b3a235251a0fbee027850b9f684d82ae 100644 GIT binary patch delta 18326 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 delta 2071 zcmd5+T}V@580I_YJ8EN7bZ0vo{*Bt2rfouZQj~ZRQEEwvH#v{)H0S1-ZPSV?#O?u8M-L3KaUzj&4&rM|an`JKy)b&-?Q{?>GJ0 z{^bWh5%GCXU6Z1Tz5!A8i-UvSMprZ}M;d)Tf97~l?2U*aDWTrO+9!UPv&WUbO~F&geM z0lI~aFtU_1LAM9nJM?)H;gBrFcQ%uttw_6j+0jZGLGxclyg`ja$#8U`?{4A9wnBB= zv#6ux*VbeOrIluWvLJez3(`vc2Tr@lg{qmeKuadAdaf)u8y3Hteioe5p9(b)9f|f0 zOYuZFChy@l#a-sVs85*n+P+D*LX_DuUxhw#Fs6)F+YRibxm6LYzIJ_;OfJgIikU3kWGoJN< zSn{%-ojFdH``Ni9dH9*V-Spo*L0%B<;7X-rvlRSp9I4b-V#~k|14ynLiwxcZ%~w=? z=N_*%8TI1F9wJ=A9~m;&iRU?0yz9UQ@F7(;GyIluIkW_DF}x4pW5n5wpCC=ek{-Nn z1*&2dNzGzcNR@JhQ2iQMpwb Date: Mon, 17 Aug 2026 10:23:39 -0400 Subject: [PATCH 2/2] Fix rounded-corner shadow artifact on video tiles in a scroller With exactly 2 video tiles, the layout branch flex-shrinks tiles to exactly fill the scroll container (fractional heights, bottom tile flush against the scroller's clip edge). In that configuration Chromium's rounded-rect box-shadow fast path misrenders at fractional pixel offsets: the corner shows a straight diagonal wedge instead of a rounded crescent, and the bottom tile's bottom shadow band is clipped entirely by the scroller's overflow. With 3+ tiles the grid branch uses natural (non-fractional) 16:9 heights, so it doesn't hit this. filter: drop-shadow() renders the same offset shadow through a different rasterization path that isn't susceptible to this, and (as a side benefit) isn't clipped by scrollable overflow the way box-shadow's ink overflow is. - VideoCallContent.svelte: shadow-sm -> drop-shadow-sm on video tiles. - base.css: add --drop-shadow/-sm/-lg tokens mirroring the --shadow-* scale, consumed by Tailwind's drop-shadow-* utilities. - clay.css, navy.css: matching --drop-shadow-* overrides in both light and dark. flat.css needs no changes; it inherits base. Co-Authored-By: Claude Sonnet 5 --- src/app/components/VideoCallContent.svelte | 2 +- src/lib/components/base.css | 13 +++++++++++++ src/lib/components/clay.css | 8 ++++++++ src/lib/components/navy.css | 8 ++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/app/components/VideoCallContent.svelte b/src/app/components/VideoCallContent.svelte index 40d46b5b..1321a36d 100644 --- a/src/app/components/VideoCallContent.svelte +++ b/src/app/components/VideoCallContent.svelte @@ -221,7 +221,7 @@ {@const media = $mediaStateByIdentity(tile.liveKitIdentity)}
) itself, so keep these as raw shadow lists, not + already wrapped in drop-shadow(). */ + --drop-shadow: 6px 6px 0 color-mix(in srgb, var(--primary) 12%, transparent); + --drop-shadow-sm: 4px 4px 0 color-mix(in srgb, var(--primary) 10%, transparent); + --drop-shadow-lg: 8px 8px 0 color-mix(in srgb, var(--primary) 15%, transparent); + --border-thin: 1px; --border-thick: 1px; diff --git a/src/lib/components/clay.css b/src/lib/components/clay.css index 6aad650e..0770be28 100644 --- a/src/lib/components/clay.css +++ b/src/lib/components/clay.css @@ -62,6 +62,10 @@ --shadow-lg: 8px 8px 0 rgba(var(--shadow-color), 0.15); --shadow-inset: inset 0 -4px 0 rgba(0, 0, 0, 0.05); --shadow-inset-strong: inset 0 -3px 0 rgba(0, 0, 0, 0.1); + + --drop-shadow-sm: 4px 4px 0 rgba(var(--shadow-color), 0.1); + --drop-shadow: 6px 6px 0 rgba(var(--shadow-color), 0.12); + --drop-shadow-lg: 8px 8px 0 rgba(var(--shadow-color), 0.15); } /* `.primary-nav` opts the primary nav into this dark palette unconditionally */ @@ -103,6 +107,10 @@ --shadow-lg: 8px 8px 0 rgba(var(--shadow-color), 0.4); --shadow-inset: inset 0 -4px 0 rgba(0, 0, 0, 0.25); --shadow-inset-strong: inset 0 -3px 0 rgba(0, 0, 0, 0.3); + + --drop-shadow-sm: 4px 4px 0 rgba(var(--shadow-color), 0.3); + --drop-shadow: 6px 6px 0 rgba(var(--shadow-color), 0.35); + --drop-shadow-lg: 8px 8px 0 rgba(var(--shadow-color), 0.4); } .chat-editor .tiptap { diff --git a/src/lib/components/navy.css b/src/lib/components/navy.css index 380a83d1..94c7cd43 100644 --- a/src/lib/components/navy.css +++ b/src/lib/components/navy.css @@ -41,6 +41,10 @@ --shadow-lg: 0 10px 30px rgba(var(--shadow-color), 0.12); --shadow-inset: inset 0 -4px 0 rgba(0, 0, 0, 0.05); --shadow-inset-strong: inset 0 -3px 0 rgba(0, 0, 0, 0.1); + + --drop-shadow-sm: 0 1px 3px rgba(var(--shadow-color), 0.1); + --drop-shadow: 0 4px 12px rgba(var(--shadow-color), 0.1); + --drop-shadow-lg: 0 10px 30px rgba(var(--shadow-color), 0.12); } &[data-theme="dark"], @@ -81,5 +85,9 @@ --shadow-lg: 0 10px 30px rgba(var(--shadow-color), 0.5); --shadow-inset: inset 0 -4px 0 rgba(0, 0, 0, 0.25); --shadow-inset-strong: inset 0 -3px 0 rgba(0, 0, 0, 0.3); + + --drop-shadow-sm: 0 1px 3px rgba(var(--shadow-color), 0.35); + --drop-shadow: 0 4px 12px rgba(var(--shadow-color), 0.4); + --drop-shadow-lg: 0 10px 30px rgba(var(--shadow-color), 0.5); } }