{# Héro « texte et photo côte à côte » (config.layout = 'split').
Variante du widget hero : le titre se pose sur un aplat (teinte pâle, couleur
du site ou nuance foncée) et la photo occupe l'autre moitié, sans voile. Elle
montre les vraies photos d'un commerce sans les éteindre sous un dégradé
sombre, et donne aux pages d'accueil un autre visage que le bandeau photo
plein écran de tous les sites.
Mêmes clés que le hero : title, subtitle, kicker, ctaText/ctaLink,
ctaSecondaryText/ctaSecondaryLink, showCta, height, backgroundImage (la
photo — l'atelier d'images et l'installateur visent déjà cette clé). En plus :
imageSide (right|left) et panelColor (#rrggbb ; vide = surface du thème).
Pour présenter une appli ou un logiciel :
mediaStyle photo (défaut) | phone — la capture d'écran est posée dans
un cadre de téléphone, entière (une photo 4:3 rognerait un
écran vertical).
highlights pastilles d'arguments sous les boutons (« Hors ligne »,
« Sans compte »…) : liste, ou texte à une pastille par ligne.
titleHighlight passage du titre mis en couleur (le premier trouvé).
ctaStyle auto (défaut) | accent — bouton principal dans la couleur
secondaire du site, pour un appel à l'action qui tranche. #}
{% set height = config.height|default('large') %}
{% set side = config.imageSide|default('right') == 'left' ? 'left' : 'right' %}
{% set panel = config.panelColor|default('') %}
{% set panelIsHex = panel matches '/^#[0-9a-fA-F]{6}$/' %}
{# Texte foncé ou blanc : celui qui contraste le plus avec l'aplat. #}
{% set darkPanel = panelIsHex and (contrast_ratio('#ffffff', panel) > contrast_ratio('#16181d', panel)) %}
{% set image = config.backgroundImage|default('') %}
{% set phone = config.mediaStyle|default('photo') == 'phone' %}
{% set highlights = config.highlights|default([]) %}
{% if highlights is not iterable %}
{% set highlights = highlights|split("\n") %}
{% endif %}
{% set highlights = highlights|map(h => h|trim)|filter(h => h is not empty) %}
{% set accentCta = config.ctaStyle|default('auto') == 'accent' %}
{% set ctaLink = config.ctaLink ?? config.buttonLink ?? '#' %}
{% if ctaLink and not (ctaLink starts with 'http' or ctaLink starts with '#' or ctaLink starts with '/') %}
{% set ctaLink = '/' ~ ctaLink %}
{% endif %}
{% set showCta = config.showCta ?? config.showButtons ?? true %}
{% if config.kicker|default('') %}
{{ config.kicker }}
{% endif %}
{% if config.title|default('') %}
{% set accent = config.titleHighlight|default('')|trim %}
{% set parts = accent and accent in config.title ? config.title|split(accent, 2) : [] %}
{{ config.ctaText ?? config.buttonText ?? 'En savoir plus' }}
{% if config.ctaSecondaryText|default('') %}
{% set ctaSecondaryLink = config.ctaSecondaryLink|default('#') %}
{% if ctaSecondaryLink and not (ctaSecondaryLink starts with 'http' or ctaSecondaryLink starts with '#' or ctaSecondaryLink starts with '/') %}
{% set ctaSecondaryLink = '/' ~ ctaSecondaryLink %}
{% endif %}
{{ config.ctaSecondaryText }}
{% endif %}
{% endif %}
{% if storeBadges|default(null) %}
{% include 'sections/partials/store-badges.html.twig' with { badges: storeBadges, align: 'left', onDark: darkPanel } only %}
{% endif %}
{% if highlights is not empty %}