# TeXise R14.28.20 Build Fix 48 — Template UX Reliability

Build Fix 48 preserves the BF47 navigable academic template directory and tightens the Admin institution, template-application and browser-storage workflows discovered during the post-BF47 defect sweep.

## Admin institution logos

`/admin/institutions` can upload, replace and remove PNG, JPEG or WebP logos up to 5 MB. Files are validated by bytes, stored beneath the filesystem-first `texise-templates/institution-assets/<institution>/` tree and referenced portably by `institutions.json`. Public discovery cards and institution pages resolve the image through `/api/templates/institutions/:id/logo`. Replacement responses are revalidated instead of being pinned behind an hour-long browser cache. Merging a duplicate institution preserves the source logo when the destination has no logo and rewrites template ownership before removing the old asset directory.

## All Templates pagination

The full catalog now renders 12 records per page with Previous/Next, bounded page-number controls, `aria-current`, and an addressable `page` query parameter. Filter/sort changes reset to page one. Page clamping uses a derived current page so a reduced result set cannot briefly render an empty page while React effects catch up. Query pagination remains canonicalized/noindexed under the existing Hotfix10 faceted-indexing policy.

## Atomic template application preflight

Template project bytes are fetched and validated before TeXise creates any workspace record or opens the editor. Decoded byte length is authoritative; HTTP `Content-Length` is deliberately ignored because transfer compression can legitimately differ from the manifest's uncompressed byte size. If any project file is unavailable or stale, Apply stops with a clear `No project was created` message. The same preflight contract is used by the public template page and the project Template dialog. File-system write failures after creation retain rollback protection.

## Firefox storage UX

TeXise no longer automatically calls `navigator.storage.persist()` on Firefox/FxiOS, avoiding the prominent storage-permission prompt that can alarm users. Existing persistence status can still be read. Firefox continues to use normal IndexedDB/OPFS quota behavior and TeXise's project export/backup mechanisms. The same suppression applies to browser project creation, local AI and Paper Memory paths.

## Additional defects fixed

- The in-editor template chooser now searches and limits its initial card set instead of rendering the entire expanded template catalog.
- Institution logo caching no longer makes a freshly replaced logo appear stale.
- Duplicate-institution merge preserves a useful logo when the surviving record has none.
- Pagination no longer transiently slices outside a filtered result set.

## Verification intent

BF48 adds a dedicated regression suite that locks in institution-logo administration, catalog pagination, full-template preflight ordering, Content-Length independence, Firefox prompt suppression and bounded template chooser behavior. The complete historical/runtime/static release matrix is rerun before packaging, and the final ZIP is extracted and tested independently.
