Amazon rounds odd page counts up to the next even number before
calculating spine thickness. 99 pages → 100 effective pages gives
0.2347 in (5.96 mm) instead of 0.2324 in (5.90 mm).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
PDF 1.4 preserves transparency objects, which KDP's preflight rejects.
Downgrading to 1.3 forces Ghostscript to composite all rgba overlays,
gradient alphas and image opacities into solid pixels during the write.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Puppeteer writes cover-raw.pdf, Ghostscript converts RGB→CMYK via
-sColorConversionStrategy=CMYK -dProcessColorModel=/DeviceCMYK,
fully embeds fonts (-dPDFSETTINGS=/prepress), and injects title/author
metadata via UTF-16BE pdfmarks. Temp files are cleaned up on success.
Mirrors the same GS pipeline already used in pdf.js for the interior.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces Georgia with Cormorant Garamond (display, 300 italic) + Lora
(body) across all cover text. Adds @font-face declarations pointing to
fonts/ (same as interior). Updates gold tokens to match interior palette.
Visual changes: front title in Cormorant light italic with gold gradient
rule below, ❧ ornament replacing ✦, synopsis body in Lora.
cover.js now reads 00-front-matter.md to inject author name into spine,
front, and removes the [AUTOR] placeholder.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
scripts/cover.js computes the exact cover canvas dimensions from the
page count in book-meta.json (written by build.js), using the KDP
Premium Color spine formula (0.002347 in/page), and renders a
Nunjucks template to a single PDF containing back cover, spine, and
front cover with bleed (0.125 in) and safe-zone overlay guides.
- `pnpm cover` — generate output/cover.pdf
- `pnpm all` — build interior + both PDFs in one command
- Cover artwork slots: images/cover/front.png, images/cover/back.png
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>