{% extends "admin/_layout.html" %} {% from "_macros.html" import icon %} {% set section = "customization" %} {% block title %}Customization - {{ brand.name }}{% endblock %} {% block heading %}Customization{% endblock %} {% block admin_content %}

What this installation is called and what it looks like. Every box below ships with a default; leaving one alone means it is not stored, so a later release can still improve the wording. Clearing a box gives you the shipped version back rather than nothing.

{% if error %}
{{ icon("warning", "icon--sm") }} {{ error }}
{% endif %} {% if saved %}
{{ icon("check", "icon--sm") }} {{ saved }}
{% endif %} {# --- Identity ------------------------------------------------------------- #}

Identity

Shown in the sidebar, in every page title, in the launcher when this is installed as an app, and to the model — it is told which installation it is answering in. Empty means LLeMbas.

One line, used in the page description. The sign-in page has a line of its own under Wording below.

{% if current.logo_path %}

{% endif %}

Replaces the leaf mark everywhere it appears. PNG, JPEG, WEBP or GIF, under 2 MB, square. SVG is deliberately not accepted: these files are served to people who are not signed in, and an SVG can carry a script. The launcher icons are made from this automatically.

{% if current.favicon_path %}

{% endif %}

Optional. Without one, a logo you upload is used at 32px, and without that the shipped leaf.

{# --- Wording -------------------------------------------------------------- #}

Wording

The lines with a bit of character in them. They live in the empty states, the error pages and the sign-in screen — never in the functional interface, where a button says what it does. Replace them with your own, or leave them.

{% for entry in flavour %}

{{ entry.hint }}

{% endfor %}
{# --- Themes --------------------------------------------------------------- #} {# Three blocks, always rendered, so adding a theme needs no JavaScript: an empty id means that block is not a theme. Saving replaces the whole list, which is what makes removing one a matter of clearing its id. #}

Themes

A theme is a set of colours, not a stylesheet — nothing in this interface hard-codes one, so a third palette composes with everything. Pick which built-in it starts from and change only what you want; everything left empty is inherited. The soft variants behind focus rings and selected rows are worked out from the accent, so you do not have to.

{% for index in range(3) %} {% set existing = custom_themes[index] if index < custom_themes | length else none %}

{{ existing.label if existing else "A theme of your own" }}

Lowercase letters, digits and hyphens. Clear it to remove the theme.

{% for name, description in tokens %}

--{{ name }}

{% endfor %}
{% endfor %}
{# --- Stylesheet ----------------------------------------------------------- #}

Stylesheet

Served as /branding.css after everything else, so these rules win. It is a file rather than a block inside the page on purpose: a stylesheet has no markup around it to escape from. Reach for the themes above first — a colour set there follows both palettes, and a rule here follows neither.

Up to 40,000 characters. Nothing here is validated: a rule that does not parse is dropped by the browser, quietly, as it would be in any stylesheet.

{% endblock %}