{{- /* Render bio avatar. - If params.avatar resolves as a local asset (assets/ or static/ path), emit with AVIF + WebP + JPEG fallback at 1x/2x densities. - If params.avatar is an absolute URL, emit plain (no processing). - If unset, emit inline SVG circle with initials in accent color. Initials override: params.avatarInitials. Background: params.avatarBg. */ -}} {{- $name := site.Params.name | default site.Title -}} {{- $avatar := site.Params.avatar -}} {{- if $avatar -}} {{- $isHTTP := strings.HasPrefix $avatar "http" -}} {{- $local := false -}} {{- $res := "" -}} {{- if not $isHTTP -}} {{- $clean := strings.TrimPrefix $avatar "/" -}} {{- with resources.Get $clean -}} {{- $res = . -}} {{- $local = true -}} {{- end -}} {{- end -}} {{- if $local -}} {{- /* Hugo image pipeline: AVIF + WebP + JPEG, 1x + 2x for retina. */ -}} {{- $jpg1 := $res.Process "resize 112x112 jpg q85" -}} {{- $jpg2 := $res.Process "resize 224x224 jpg q85" -}} {{- $webp1 := $res.Process "resize 112x112 webp q75" -}} {{- $webp2 := $res.Process "resize 224x224 webp q75" -}} {{- $avif1 := $res.Process "resize 112x112 avif q60" -}} {{- $avif2 := $res.Process "resize 224x224 avif q60" -}} {{ $name }} {{- else -}} {{ $name }} {{- end -}} {{- else -}} {{- $initials := site.Params.avatarInitials -}} {{- if not $initials -}} {{- $words := split (strings.TrimSpace $name) " " -}} {{- $first := "" -}} {{- $second := "" -}} {{- with index $words 0 -}}{{- $first = substr . 0 1 -}}{{- end -}} {{- if gt (len $words) 1 -}}{{- $second = substr (index $words 1) 0 1 -}}{{- end -}} {{- $initials = upper (printf "%s%s" $first $second) -}} {{- if not $initials -}}{{- $initials = "?" -}}{{- end -}} {{- end -}} {{- $bg := site.Params.avatarBg | default "var(--bonsai-accent)" -}} {{- $svgStyle := printf "color:var(--bonsai-bg);background:transparent" | safeCSS -}} {{- $circleStyle := printf "fill:%s" $bg | safeCSS -}} {{ $initials }} {{- end -}}