Caterium v17.6.0 - Stability & Security Date: 2026-09-07 Rollback baseline: v17.5.31 Security - Closed the old bootstrap stored DOM-XSS path with shared SunSafe escaping/attribute helpers. - Consolidated repeated esc() implementations onto one shared utility. - Added safe DOM insertion helper for dynamic navigation/settings nodes. - Restored the deployed caterium-create-employee Edge Function source to the project; secrets remain environment-only. Stability - Moved the oldest bootstrap business script out of index.html into legacy/bootstrap.js. - Centralized PDF byte packaging in core/pdf-engine.js with one A4 geometry validator. - Added static security and release checks plus Playwright E2E specifications and CI workflow. - Preserved v17.5.31 as a separate rollback archive. Performance - Removed blocking offer-gallery-data.js Base64 payload. - Removed unused offer-gallery/003.jpg through 010.jpg; retained the two images actually used. - Added image lazy-loading/async decoding helper for noncritical images. - Added targeted mobile overflow containment for category/view/settings strips. PDF QA - Offer templates light, editorial-grid, midnight-glass, emerald-gold generated as real PDF blobs and rendered back to images. - Catalog PDF generated as A4 pages and rendered back to images. - All generated pages opened successfully in PyMuPDF and use consistent A4 geometry. - Browser print/PDF CSS rules remain explicitly A4 portrait/landscape according to document type. Known technical debt - PDF pages remain image-based, so text is not selectable/searchable. The two former binary writers are now one audited engine, but a later migration to a vendored library/vector-text PDF pipeline is still desirable. - index.html/app-runtime.js still contain historical modules and should be split further in a future architecture release.