···2121 {{ else if eq .Error "invalid_handle" }}
2222 That handle doesn't look right. Check for typos and try again.
2323 {{ else if eq .Error "pds_unreachable" }}
2424- We couldn't reach your PDS. It may be offline — try again in a minute.
2424+ We couldn't reach your PDS. It may be offline; try again in a minute.
2525 {{ else if eq .Error "state_mismatch" }}
2626 Your sign-in session expired before we finished. Please start over.
2727 {{ else if eq .Error "access_denied" }}
···4444 <input type="hidden" name="return_to" value="{{ .ReturnTo }}" />
45454646 <div class="sailor-typeahead relative order-1">
4747- <label for="handle" class="sr-only">Atmosphere handle or DID</label>
4747+ <label for="handle" class="block text-xs font-medium uppercase tracking-wider text-base-content/60 mb-2">
4848+ Atmosphere handle
4949+ </label>
4850 <input type="text"
4951 id="handle"
5052 name="handle"
···1818 {{ end }}
1919</div>
2020{{ else }}
2121-<div class="card bg-base-200 shadow-sm p-6 text-center text-base-content/60">
2222- No holds configured. Push an image to get started.
2121+<div class="card bg-base-200 shadow-sm">
2222+ {{ template "state-empty" (dict
2323+ "Icon" "anchor"
2424+ "Title" "No holds configured"
2525+ "Subtext" "Push an image to atcr.io and your first hold will appear here."
2626+ ) }}
2327</div>
2428{{ end }}
2529
+1-1
pkg/appview/templates/partials/vuln-badge.html
···11{{ define "vuln-badge" }}
22{{ if .Error }}
33{{/* Hold unreachable. Warning color distinguishes from "not scanned" (gray). */}}
44-<span class="badge badge-sm badge-warning" title="Hold is unreachable — try again in a moment">
44+<span class="badge badge-sm badge-warning" title="Hold is unreachable; try again in a moment">
55 {{ icon "wifi-off" "size-3" }} Hold offline
66</span>
77{{ else if .NotScanned }}
+7-1
pkg/appview/ui.go
···146146147147// fontPreloadPaths returns the list of /fonts/*.woff2 files that exist in
148148// the resolved public FS. Skips *-ext (extended glyph) subsets to avoid
149149-// preloading weights the primary latin face already covers.
149149+// preloading weights the primary latin face already covers, and skips
150150+// non-canonical weights so the critical preload burst stays focused on
151151+// the faces needed above the fold. Commit Mono 700 (~47KB) is loaded
152152+// on demand via @font-face with font-display: swap.
150153func fontPreloadPaths(overrides *BrandingOverrides) []string {
151154 fsys := resolvePublicFS(overrides)
152155 entries, err := fs.ReadDir(fsys, "public/fonts")
···166169 continue
167170 }
168171 if strings.Contains(name, "italic") {
172172+ continue
173173+ }
174174+ if strings.Contains(name, "-700") {
169175 continue
170176 }
171177 paths = append(paths, "/fonts/"+name)