{{/* app_list_row / app_list_row_end — THE canonical app-list row (v0.126.0). One grammar on every list surface: icon + name (+ optional one-line secondary) left, caller-provided action block right. A row without a secondary line stays compact. Usage (the layout_start/layout_end idiom): {{template "app_list_row" dict "Slug" .Slug "Name" .DisplayName}} ...caller action buttons / status... {{template "app_list_row_end"}} dict keys: Slug (icon lookup), Name, Secondary (optional one-liner), RowClass (optional extra row class, e.g. stack-state-run), Href (optional data-href), FallbackIcon (optional last-resort icon URL — infra stacks pass the generic infra SVG). Do NOT hand-roll app rows — scripts/app_row_dedup_gate.py asserts this markup exists here ONCE (the backups_apps expander header is the single allowlisted aligned copy). */}} {{define "app_list_row"}}
{{.Name}} {{with .Secondary}}{{.}}{{end}}
{{end}} {{define "app_list_row_end"}}
{{end}}