diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocGlobalConfig.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocGlobalConfig.java
index 473b740..4d859b5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocGlobalConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocGlobalConfig.java
@@ -24,6 +24,7 @@
   public static final String SECTION_FORMATTER = "formatter";
   public static final String KEY_ALLOW_HTML = "allowHtml";
   public static final String KEY_APPEND_CSS = "appendCss";
+  public static final String KEY_CSS_THEME = "cssTheme";
   public static final String KEY_ENABLED = "enabled";
   public static final String KEY_EXT = "ext";
   public static final String KEY_FORMATTER = "formatter";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/AsciidoctorFormatter.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/AsciidoctorFormatter.java
index eb3d4ae..fe57a90 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/AsciidoctorFormatter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/AsciidoctorFormatter.java
@@ -16,6 +16,7 @@
 
 import static com.googlesource.gerrit.plugins.xdocs.XDocGlobalConfig.KEY_ALLOW_HTML;
 import static com.googlesource.gerrit.plugins.xdocs.XDocGlobalConfig.KEY_APPEND_CSS;
+import static com.googlesource.gerrit.plugins.xdocs.XDocGlobalConfig.KEY_CSS_THEME;
 import static com.googlesource.gerrit.plugins.xdocs.XDocGlobalConfig.KEY_INCLUDE_TOC;
 import static java.nio.charset.StandardCharsets.UTF_8;
 
@@ -91,8 +92,9 @@
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         ByteStreams.copy(input, out);
         String html = out.toString(UTF_8.name());
-        String globalCss = util.getGlobalCss("asciidoctor");
-        String projectCss = util.getCss(projectName, "asciidoctor");
+        String cssTheme = projectCfg.getString(KEY_CSS_THEME);
+        String globalCss = util.getGlobalCss("asciidoctor", cssTheme);
+        String projectCss = util.getCss(projectName, "asciidoctor", cssTheme);
         if (projectCfg.getBoolean(KEY_APPEND_CSS, true)) {
           return util.insertCss(html,
               MoreObjects.firstNonNull(globalCss, defaultCss), projectCss);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/FormatterUtil.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/FormatterUtil.java
index 255876e..47aedf4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/FormatterUtil.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/FormatterUtil.java
@@ -17,6 +17,7 @@
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.apache.commons.lang.StringEscapeUtils.escapeHtml;
 
+import com.google.common.base.Strings;
 import com.google.gerrit.extensions.annotations.PluginData;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.reviewdb.client.Project;
@@ -56,6 +57,26 @@
   }
 
   /**
+   * Returns the CSS from the file "<plugin-name>/<name>-<theme>.css" in the
+   * refs/meta/config branch of the project.
+   *
+   * If theme is <code>null</code> or empty, the CSS from the file
+   * "<plugin-name>/<name>.css" is returned.
+   *
+   * @param name the name of the file in the "<plugin-name>/" folder without
+   *        theme and without the ".css" file extension
+   * @param theme the name of the CSS theme, may be <code>null</code>, if given
+   *        it is included into the CSS file name: '<name>-<theme>.css'
+   * @return the CSS from the file; HTML characters are escaped;
+   *         <code>null</code> if the file doesn't exist
+   */
+  public String getCss(String projectName, String name, String theme) {
+    return Strings.isNullOrEmpty(theme)
+        ? getCss(projectName, name)
+        : getCss(projectName, name + "-" + theme);
+  }
+
+  /**
    * Returns the CSS from the file "<plugin-name>/<name>.css" in the
    * refs/meta/config branch of the project.
    *
@@ -70,6 +91,28 @@
 
   /**
    * Returns the CSS from the file
+   * "<review-site>/data/<plugin-name>/css/<name>-<theme>.css".
+   *
+   * If theme is <code>null</code> or empty, the CSS from the file
+   * "<review-site>/data/<plugin-name>/css/<name>.css" is returned.
+   *
+   * @param name the name of the CSS file without theme and without the ".css"
+   *        file extension
+   * @param theme the name of the CSS theme, may be <code>null</code>, if given
+   *        it is included into the CSS file name: '<name>-<theme>.css'
+   * @return the CSS from the file; HTML characters are escaped;
+   *         <code>null</code> if the file doesn't exist
+   * @throws IOException thrown in case of an I/O Error while reading the CSS
+   *         file
+   */
+  public String getGlobalCss(String name, String theme) throws IOException {
+    return Strings.isNullOrEmpty(theme)
+        ? getGlobalCss(name)
+        : getGlobalCss(name + "-" + theme);
+  }
+
+  /**
+   * Returns the CSS from the file
    * "<review-site>/data/<plugin-name>/css/<name>.css".
    *
    * @param name the name of the CSS file without the ".css" file extension
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/MarkdownFormatter.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/MarkdownFormatter.java
index 4f23ad9..f4aa3a8 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/MarkdownFormatter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/MarkdownFormatter.java
@@ -16,6 +16,7 @@
 
 import static com.googlesource.gerrit.plugins.xdocs.XDocGlobalConfig.KEY_ALLOW_HTML;
 import static com.googlesource.gerrit.plugins.xdocs.XDocGlobalConfig.KEY_APPEND_CSS;
+import static com.googlesource.gerrit.plugins.xdocs.XDocGlobalConfig.KEY_CSS_THEME;
 import static java.nio.charset.StandardCharsets.UTF_8;
 
 import com.google.inject.Inject;
@@ -48,8 +49,9 @@
     if (!globalCfg.getBoolean(KEY_ALLOW_HTML, false)) {
       f.suppressHtml();
     }
-    String globalCss = util.getGlobalCss("markdown");
-    String projectCss = util.getCss(projectName, "markdown");
+    String cssTheme = projectCfg.getString(KEY_CSS_THEME);
+    String globalCss = util.getGlobalCss("markdown", cssTheme);
+    String projectCss = util.getCss(projectName, "markdown", cssTheme);
     if (projectCfg.getBoolean(KEY_APPEND_CSS, true)) {
       // if there is no global CSS and f.setCss(null) is invoked
       // com.google.gerrit.server.documentation.MarkdownFormatter applies the
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index aef00c5..8cdf98c 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -84,6 +84,21 @@
 
 	Default: `true` (project-specific CSS is appended to the default CSS)
 
+<a id="cssTheme">
+formatter.<formatter>.cssTheme
+:	The name of the CSS theme that should be used.
+
+	The theme name is included into the file name when loading a CSS
+	file, e.g. `@PLUGIN@/markdown-<theme-name>.css` when loading
+	project specific CSS from the project's `refs/meta/config` branch.
+
+	Overrides the [global configuration of `cssTheme`](#formatterCssTheme)
+	for this formatter.
+
+	Supported for the following formatters: `ASCIIDOCTOR`, `MARKDOWN`
+
+	By default not set.
+
 <a id="prio">
 formatter.<formatter>.prio
 :	The priority of this formatter.
@@ -215,6 +230,19 @@
 
 	Default: `true` (project-specific CSS is appended to the default CSS)
 
+<a id="formatterCssTheme">
+formatter.<formatter>.cssTheme
+:	The name of the CSS theme that should be used.
+
+	The theme name is included into the file name when loading a CSS
+	file, e.g. `<review-site>/data/@PLUGIN@/css/markdown-<theme-name>.css`
+
+	Can be overridden on [project-level](#cssTheme).
+
+	Supported for the following formatters: `ASCIIDOCTOR`, `MARKDOWN`
+
+	By default not set.
+
 <a id="formatterPrio">
 formatter.<formatter>.prio
 :	The priority of this formatter.
