"""Assemble static/style.css à partir de styles/ — un simple concaténage, PAS une compilation Sass (voir styles/bulma-override.css pour l'incident qui a motivé ce choix : Bulma 1.x expose déjà tout son thème via des variables CSS standard, aucun compilateur n'est nécessaire pour le recolorer). Ordre important — chaque fichier ne fait que redéfinir des variables/règles posées par le précédent : 1. static/vendor/bulma.min.css — Bulma 1.0.2 vendoré tel quel, non modifié (voir son en-tête pour la provenance). 2. styles/bulma-override.css — variables --bulma-* de la charte Forge. 3. styles/forge-tokens.css — tokens --forge-*/--accent... de l'app. 4. styles/forge-custom.css — CSS custom de l'app (floatPanel, canvas, éditeurs...), consomme les tokens ci-dessus. Lancer `python build_css.py` après toute modification sous styles/ ou static/vendor/bulma.min.css.""" import os _BASE_DIR = os.path.dirname(os.path.abspath(__file__)) _STYLES_DIR = os.path.join(_BASE_DIR, "styles") _OUTPUT = os.path.join(_BASE_DIR, "static", "style.css") _SOURCES = [ os.path.join(_BASE_DIR, "static", "vendor", "bulma.min.css"), os.path.join(_STYLES_DIR, "bulma-override.css"), os.path.join(_STYLES_DIR, "forge-tokens.css"), os.path.join(_STYLES_DIR, "forge-custom.css"), ] def build() -> None: chunks: list[str] = [] for path in _SOURCES: with open(path, encoding="utf-8") as f: chunks.append(f"/* ---- {os.path.relpath(path, _BASE_DIR)} ---- */\n" + f.read()) css = "\n\n".join(chunks) with open(_OUTPUT, "w", encoding="utf-8") as f: f.write(css) print(f"Assemblé : {len(_SOURCES)} fichiers -> {_OUTPUT} ({len(css)} octets)") if __name__ == "__main__": build()