From 05578a68da6568701fc445c512e7caa647faa576 Mon Sep 17 00:00:00 2001 From: ankitsejwal Date: Mon, 29 Jun 2026 02:42:14 +0530 Subject: [PATCH 1/3] Define popover tokens so dropdowns have a background --- apps/web/src/styles.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/web/src/styles.css b/apps/web/src/styles.css index 9a66256..70d3aeb 100644 --- a/apps/web/src/styles.css +++ b/apps/web/src/styles.css @@ -10,6 +10,8 @@ --foreground: oklch(0.145 0 0); --card: oklch(1 0 0); --card-foreground: oklch(0.145 0 0); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.145 0 0); --primary: oklch(0.205 0 0); --primary-foreground: oklch(0.985 0 0); --secondary: oklch(0.97 0 0); @@ -30,6 +32,8 @@ --foreground: oklch(0.985 0 0); --card: oklch(0.205 0 0); --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.205 0 0); + --popover-foreground: oklch(0.985 0 0); --primary: oklch(0.985 0 0); --primary-foreground: oklch(0.205 0 0); --secondary: oklch(0.269 0 0); @@ -53,6 +57,8 @@ --color-foreground: var(--foreground); --color-card: var(--card); --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); --color-primary: var(--primary); --color-primary-foreground: var(--primary-foreground); --color-secondary: var(--secondary); From d0999835bc2de140a4f67e5be3bcc188628d649a Mon Sep 17 00:00:00 2001 From: ankitsejwal Date: Mon, 29 Jun 2026 02:42:14 +0530 Subject: [PATCH 2/3] Make Open/Save icon-only with tooltips --- apps/web/src/components/project-controls.tsx | 53 +++++++++++++------- 1 file changed, 35 insertions(+), 18 deletions(-) diff --git a/apps/web/src/components/project-controls.tsx b/apps/web/src/components/project-controls.tsx index 1d6dd1b..61cdbdf 100644 --- a/apps/web/src/components/project-controls.tsx +++ b/apps/web/src/components/project-controls.tsx @@ -2,6 +2,11 @@ import { useRef, useState } from 'react' import { Download, Upload } from 'lucide-react' import { Button } from '@/components/ui/button' +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from '@/components/ui/tooltip' import { downloadProject, importProject } from '@/lib/project' import { usePhotoStore } from '@/stores/photo-store' import { settingsSnapshot, useSettingsStore } from '@/stores/settings-store' @@ -53,24 +58,36 @@ export function ProjectControls() { event.target.value = '' }} /> - - + + + + + Open project + + + + + + Save project + {error && {error}} From 63e4e219cdf5689dcb993e359f817672302e3649 Mon Sep 17 00:00:00 2001 From: ankitsejwal Date: Mon, 29 Jun 2026 02:45:51 +0530 Subject: [PATCH 3/3] Embed full caption fonts in PDF (fixes broken Kalam) --- apps/web/src/lib/pdf-fonts.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/web/src/lib/pdf-fonts.ts b/apps/web/src/lib/pdf-fonts.ts index 6305302..91d0db2 100644 --- a/apps/web/src/lib/pdf-fonts.ts +++ b/apps/web/src/lib/pdf-fonts.ts @@ -7,9 +7,10 @@ import patrickHandUrl from '@/fonts/PatrickHand-Regular.ttf?url' import shadowsUrl from '@/fonts/ShadowsIntoLight-Regular.ttf?url' // Static TTFs for the handwriting caption fonts, so the exported PDF matches the -// on-screen preview. Only fonts that render faithfully in pdf-lib (which has no -// GPOS kerning) are offered — Caveat, a connected script, was dropped for this -// reason (see #23). +// on-screen preview. We embed the FULL font (no subsetting): pdf-lib's subsetter +// drops glyphs for some of these — Kalam came out as scattered half-words — and +// the size cost is trivial next to the 300-DPI photos. Connected scripts that +// rely on GPOS kerning pdf-lib lacks (e.g. Caveat) are still excluded (see #23). const PDF_FONT_URLS: Record = { 'indie-flower': indieFlowerUrl, 'patrick-hand': patrickHandUrl, @@ -40,7 +41,7 @@ export async function embedCaptionFont( if (!url) return null try { doc.registerFontkit(fontkit) - return await doc.embedFont(await fontBytes(url), { subset: true }) + return await doc.embedFont(await fontBytes(url), { subset: false }) } catch { return null }