{# Une photo servie en WebP, dans la largeur qui convient à l'écran.
Tant qu'un média n'a pas de fichier — le catalogue se construit, beaucoup de
fiches attendent leur photo — on dessine un motif à la place plutôt qu'un
cadre vide : la page garde sa composition, et l'absence se voit sans crier. #}
{% set ratio = ratio|default('4 / 3') %}
{% set filter = filter|default('card') %}
{% set sizes = sizes|default('(min-width: 1024px) 33vw, 100vw') %}
{# Les largeurs annoncées au navigateur sont celles que produisent réellement les
jeux de filtres : lui en donner d'autres lui fait choisir le mauvais fichier. #}
{% set widths = { card: [400, 800, 1200], hero: [800, 1600, 2400], plant: [500, 1000, 1400] }[filter]|default([400, 800, 1200]) %}
{% set source = media is defined and media and media.path ? media.path : null %}
{% if media is defined and media and media.path %}
{% else %}