Make Bulma the default style engine for Bouton/Titre/Conteneur, layered under existing inline customization

Adds a new "class:" control-target kind (save_element_controls.py, _visible_attrs.py) alongside the existing content/attr/style ones, so a widget can carry CSS classes built from independent named slots (color, size, shape...) without them overwriting each other. Bouton and Titre get their Bulma base class (button/title) via fixed_attrs; Conteneur gets an opt-in "Carte (Bulma)" preset instead of a forced default, since it's also used as an invisible layout wrapper. Bouton's font-size/border-radius sliders no longer freeze their default value into inline style at creation (new c_slider no_freeze flag), so Bulma's own button styling shows through until a user actually customizes it — inline style still wins over any class the moment it's set, exactly like today.

Loads bulma.min.css via CDN in screen_edit.html and play.html, same pattern as animate.css.
This commit is contained in:
william
2026-08-24 12:54:50 +02:00
parent 26cf245ffe
commit 38f33d88d9
8 changed files with 88 additions and 9 deletions
+7
View File
@@ -5,6 +5,13 @@
{% block extra_head %}
<link rel="stylesheet" href="{{ google_fonts_link }}">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css">
<!-- Bulma : moteur de style par défaut de certains widgets (Bouton, Titre,
Conteneur en carte) — voir screens/widgets/control_groups/bulma_controls.py.
Chargé APRÈS style.css : les styles en ligne posés par le panneau de
propriétés (couleur, taille personnalisées...) gagnent de toute façon
toujours contre une classe CSS, donc l'ordre ne change rien au résultat
— Bulma ne fournit qu'un habillage par défaut, jamais un dernier mot. -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@1.0.2/css/bulma.min.css">
{% endblock %}
{% block breadcrumb %}
<a class="crumb" href="{{ url_for('game_dashboard', slug=game.slug) }}">{{ game.name }}</a>