For everyday styling — colors, fonts, background image, corner radius — use the built-in theme options first. Those settings live in the survey editor under Presentation → Theme options and are covered in Presentation and theme options. This article is for when those options aren't enough: changing layout, styling individual questions, or adding your own CSS.
Every LimeSurvey theme is a package of Twig templates (page layout and logic), CSS stylesheets, JavaScript, and images. The theme editor lets you edit these files in the browser, without server file access. Because you are editing code, a broken change can make every survey using that theme inoperable — this is an advanced feature that assumes basic HTML/CSS knowledge.
The theme editor is a classic admin tool, reached from the Configuration menu (Configuration → Advanced → Themes) — not the per-survey Presentation → Theme options panel. Deep customization (custom CSS and Twig) always happens here, on an extended theme. You need the theme/template permission (or superadministrator) to use it.
The standard themes that ship with LimeSurvey cannot (and should not) be edited directly. Instead, extend one:
Your extension inherits everything from the parent theme and only stores the files you change. This matters for two reasons: your customizations survive as a separate package, and anything you don't override keeps benefiting from parent-theme fixes.
Inside the editor (its heading reads "Theme editor: <theme name>") you first pick the participant screen to work on, then edit the Twig templates, CSS and JavaScript that build that screen. The screen selector covers Question, Survey list, Welcome, Completed, Assessments, Error, Clear all, Load, Save, Registration, Print answers, Public statistics, PDF, Quotas exceeded, Navigation and Participant. Use the Export action to download the whole theme as a ZIP, which you can re-import to move a customized theme between installations.
The usual place for your own rules is the theme's custom.css file — select it in the file list, add your rules, and save. For JavaScript customizations, custom.js is the equivalent file.
Every question is rendered with a unique ID and a class for its question type, so you can target one question or all questions of a type. For example, a specific short-text question:
/* One specific question, by ID */
#question5 input.text {
max-width: 20em;
border: 2px solid #0055a5;
}
/* All short free text questions, by type class */
.text-short .question-title {
font-weight: 600;
}
Useful hooks:
.mandatory is added to required questions; .input-error appears when validation fails..list-radio, .multiple-opt, .numeric, …). Inspect the rendered survey in your browser's developer tools to find the exact class/ID — that is faster and more reliable than memorizing the list..progress-bar { background-color: #3300ff; }.Extended themes inherit from their parent theme. Separately, theme settings cascade across three levels — global, survey group, and individual survey — so surveys can share a common look. A survey's own theme is chosen under Settings → General → Theme, which overrides the group and global defaults.
For the complete file-by-file reference (Twig structure, the full list of question and validation CSS classes, config.xml options), see the full theme-editor reference in the LimeSurvey manual.