Goal
Keep the custom minimal Prism implementation in #17 for Lite, while giving Full broad preview language coverage with a pinned highlight.js bundle.
This issue depends on the edition architecture in #19 .
Requirements
Lite keeps the small explicitly selected Prism language set and asset budget from Add minimal preview syntax highlighting with custom Prism #17 .
Full replaces that preview renderer capability with a broader highlight.js build; do not run both engines.
Preserve the native editor syntax highlighter independently; this issue concerns rendered preview and print output.
Load the Full highlighter only when fenced code is present.
Prefer explicit fence language identifiers; use bounded automatic detection only for unlabeled fences.
Escape code as text and never trust highlighter-produced markup without a constrained insertion path.
Share typography and palette variables so preview, print, and editor remain visually coherent.
Provide graceful plain-code fallback for unknown languages and highlighter failures.
Include a lightweight Copy control and accessible language label without persistent chrome.
Pin the library version and record its license/checksum.
Measure bundle size, live-preview latency, and rendering time with representative documents.
Acceptance criteria
Full supports a documented broad language list and does not initialize highlight.js for documents without code fences.
Lite remains within its existing minimal asset budget and contains no highlight.js files.
Highlighting cannot inject active HTML or weaken CSP.
Preview and print remain legible across all palettes without degrading typing responsiveness.
Goal
Keep the custom minimal Prism implementation in #17 for Lite, while giving Full broad preview language coverage with a pinned highlight.js bundle.
This issue depends on the edition architecture in #19.
Requirements
Acceptance criteria