- replace placeholder house svg with clean geometric house mark on indigo-700 (#4338CA) — roof triangle, body, door cutout - add favicon.svg with prefers-color-scheme dark variant - add icon-16/32 sizes; regenerate all pngs from svg via sharp - update BrandMark component to use inline svg house instead of 'f' - wire favicon + sized pngs into layout metadata - fix middleware to allow icon/manifest/favicon paths without auth (android launcher fetches icons in a cookieless system context) - fix getCurrentSession() to redirect to /login instead of throwing when session cookie is stale/invalid
33 lines
920 B
TypeScript
33 lines
920 B
TypeScript
import { cn } from "@/lib/utils";
|
|
|
|
export function BrandMark({ size = "md", className }: { size?: "sm" | "md"; className?: string }) {
|
|
const iconSize = size === "sm" ? 14 : 17;
|
|
return (
|
|
<span
|
|
className={cn("brand-mark", size === "sm" && "brand-mark-sm", className)}
|
|
aria-hidden="true"
|
|
>
|
|
<svg
|
|
viewBox="0 0 24 24"
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
width={iconSize}
|
|
height={iconSize}
|
|
fill="currentColor"
|
|
>
|
|
<polygon points="12,2 1,12 23,12" />
|
|
<rect x="3.5" y="11" width="17" height="12" />
|
|
<rect x="9.5" y="16" width="5" height="7" rx="1" style={{ fill: "var(--ink)" }} />
|
|
</svg>
|
|
</span>
|
|
);
|
|
}
|
|
|
|
export function BrandWordmark({ className }: { className?: string }) {
|
|
return (
|
|
<span className={cn("brand", className)}>
|
|
<BrandMark />
|
|
<span className="brand-name">famapp</span>
|
|
</span>
|
|
);
|
|
}
|