Symfony automatically merges the base packages/*.yaml files with those in the matching environment subdirectory (dev/, prod/, or test/), so environment-specific files only need to override the values that differ.
Build Configuration
File
Purpose
webpack.config.js
Webpack Encore configuration (entries, loaders, plugins)
All files sit at the project root. PostCSS plugins (Tailwind + Autoprefixer) are configured inline inside webpack.config.js via enablePostCssLoader() — there is no standalone postcss.config.js. webpack.config.js reads tailwind.config.js indirectly through PostCSS, so changes to Tailwind's content or theme sections take effect on the next yarn encore dev / yarn encore production run.
Tailwind is integrated via PostCSS. assets/css/_tailwind.scss emits the base, component, and utility layers; assets/css/app.scss imports it first so Tailwind utilities are available throughout all other partials. The Tailwind configuration — content paths for purging, theme extensions, and plugins — lives in tailwind.config.js at the project root (/var/www/chamilo/tailwind.config.js).
Custom utility classes and component classes defined with @layer (visible in app.scss) follow Tailwind's layering convention so that user-defined classes respect the same specificity rules as the generated utilities.
Color Themes
Chamilo supports a color theming system that can be configured directly from the admin interface (Admin > Color Themes). Each saved theme writes its files into a dedicated directory under var/themes/:
colors.css defines CSS custom properties as space-separated RGB channel triplets rather than rgb() values, which allows Tailwind to compose opacity variants (e.g. bg-primary/50) without additional configuration:
The theme layer sits on top of the compiled Tailwind/SCSS bundle: the browser loads colors.css after the main stylesheet, so theme changes take effect immediately without a build step.