+  
+  
+    
+        
+    
+  diff --git a/build.gradle.kts b/build.gradle.kts index e7dc5657c2..86721988b4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -123,6 +123,7 @@ idea { "dokka-integration-tests/gradle/src/testExampleProjects/expectedData", "dokka-integration-tests/gradle/projects/it-android/expectedData", + "dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData", "dokka-integration-tests/gradle/projects/it-android-compose/expectedData", "dokka-integration-tests/gradle/projects/it-kotlin-multiplatform/expectedData", diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/build.gradle.kts b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/build.gradle.kts new file mode 100644 index 0000000000..3c8550420c --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/build.gradle.kts @@ -0,0 +1,28 @@ +plugins { + id("com.android.library") version "/* %{AGP_VERSION} */" + id("org.jetbrains.dokka") version "/* %{DGP_VERSION} */" + kotlin("multiplatform") version "/* %{KGP_VERSION} */" +} + +android { + namespace = "org.jetbrains.dokka.it.android" + defaultConfig { + minSdkVersion(21) + setCompileSdkVersion(29) + } +} + +kotlin { + jvm() + androidTarget() + + sourceSets { + val androidAndJvmMain by registering + jvmMain { + dependsOn(androidAndJvmMain.get()) + } + androidMain { + dependsOn(androidAndJvmMain.get()) + } + } +} diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/abstract-class-kotlin.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/abstract-class-kotlin.svg new file mode 100644 index 0000000000..97b7723a02 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/abstract-class-kotlin.svg @@ -0,0 +1,26 @@ + + + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/abstract-class.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/abstract-class.svg new file mode 100644 index 0000000000..ead94b8bba --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/abstract-class.svg @@ -0,0 +1,22 @@ + + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/anchor-copy-icon.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/anchor-copy-icon.svg new file mode 100644 index 0000000000..dd43e7694e --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/anchor-copy-icon.svg @@ -0,0 +1,6 @@ + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/annotation-kotlin.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/annotation-kotlin.svg new file mode 100644 index 0000000000..b74824201f --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/annotation-kotlin.svg @@ -0,0 +1,13 @@ + + + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/annotation.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/annotation.svg new file mode 100644 index 0000000000..76c2f4bb90 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/annotation.svg @@ -0,0 +1,9 @@ + + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/arrow-down.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/arrow-down.svg new file mode 100644 index 0000000000..ca54658d3c --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/arrow-down.svg @@ -0,0 +1,3 @@ + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/burger.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/burger.svg new file mode 100644 index 0000000000..a26f194dc4 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/burger.svg @@ -0,0 +1,5 @@ + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/check.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/check.svg new file mode 100644 index 0000000000..291e5eedd2 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/check.svg @@ -0,0 +1,3 @@ + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/checkbox-off.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/checkbox-off.svg new file mode 100644 index 0000000000..a5117e8d9a --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/checkbox-off.svg @@ -0,0 +1,3 @@ + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/checkbox-on.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/checkbox-on.svg new file mode 100644 index 0000000000..71891d57dd --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/checkbox-on.svg @@ -0,0 +1,3 @@ + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/class-kotlin.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/class-kotlin.svg new file mode 100644 index 0000000000..dc23120aa2 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/class-kotlin.svg @@ -0,0 +1,13 @@ + + + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/class.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/class.svg new file mode 100644 index 0000000000..2447cf78e1 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/class.svg @@ -0,0 +1,9 @@ + + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/copy-icon.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/copy-icon.svg new file mode 100644 index 0000000000..abeb27e59d --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/copy-icon.svg @@ -0,0 +1,3 @@ + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/cross.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/cross.svg new file mode 100644 index 0000000000..232069f85e --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/cross.svg @@ -0,0 +1,3 @@ + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/enum-kotlin.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/enum-kotlin.svg new file mode 100644 index 0000000000..207a0ef3b4 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/enum-kotlin.svg @@ -0,0 +1,13 @@ + + + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/enum.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/enum.svg new file mode 100644 index 0000000000..2deba5f114 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/enum.svg @@ -0,0 +1,9 @@ + + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/exception-class.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/exception-class.svg new file mode 100644 index 0000000000..1bb4f88e91 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/exception-class.svg @@ -0,0 +1,9 @@ + + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/field-value.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/field-value.svg new file mode 100644 index 0000000000..3aa75be3ed --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/field-value.svg @@ -0,0 +1,10 @@ + + + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/field-variable.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/field-variable.svg new file mode 100644 index 0000000000..7a8af50945 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/field-variable.svg @@ -0,0 +1,10 @@ + + + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/filter.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/filter.svg new file mode 100644 index 0000000000..be62ea5bf3 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/filter.svg @@ -0,0 +1,8 @@ + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/function.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/function.svg new file mode 100644 index 0000000000..e56a417532 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/function.svg @@ -0,0 +1,9 @@ + + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/go-to-top-icon.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/go-to-top-icon.svg new file mode 100644 index 0000000000..62df4c7d57 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/go-to-top-icon.svg @@ -0,0 +1,4 @@ + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/homepage.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/homepage.svg new file mode 100644 index 0000000000..9a8927a40a --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/homepage.svg @@ -0,0 +1,3 @@ + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/interface-kotlin.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/interface-kotlin.svg new file mode 100644 index 0000000000..e5273f0506 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/interface-kotlin.svg @@ -0,0 +1,13 @@ + + + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/interface.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/interface.svg new file mode 100644 index 0000000000..0637028747 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/interface.svg @@ -0,0 +1,9 @@ + + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/logo-icon.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/logo-icon.svg new file mode 100644 index 0000000000..ea6f37ed06 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/logo-icon.svg @@ -0,0 +1,14 @@ + + + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/object.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/object.svg new file mode 100644 index 0000000000..5f960b7425 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/object.svg @@ -0,0 +1,13 @@ + + + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/placeholder.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/placeholder.svg new file mode 100644 index 0000000000..e8129621d2 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/placeholder.svg @@ -0,0 +1,3 @@ + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/success-icon.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/success-icon.svg new file mode 100644 index 0000000000..76945ebed6 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/success-icon.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/theme-toggle.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/theme-toggle.svg new file mode 100644 index 0000000000..490263f391 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/theme-toggle.svg @@ -0,0 +1,3 @@ + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/typealias-kotlin.svg b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/typealias-kotlin.svg new file mode 100644 index 0000000000..73a08851e0 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/images/typealias-kotlin.svg @@ -0,0 +1,13 @@ + + + diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/index.html b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/index.html new file mode 100644 index 0000000000..818dab8d24 --- /dev/null +++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/index.html @@ -0,0 +1,184 @@ + + +
+ +File should be resolved
File should be resolved
File should be resolved
File should be resolved
File should be resolved
File should be resolved
File should be resolved
File should be resolved
)\s*)\S(?:\S|\s+\S)*?(?=\s*<\/\2>)/,lookbehind:!0,inside:{line:{pattern:e,lookbehind:!0,inside:{tag:a.languages.markup.tag,entity:a.languages.markup.entity,code:{pattern:/.+/,inside:a.languages.java,alias:"language-java"}}}}}],tag:a.languages.markup.tag,entity:a.languages.markup.entity}),a.languages.javadoclike.addSupport("java",a.languages.javadoc)}(Prism);
+!function(n){n.languages.kotlin=n.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete n.languages.kotlin["class-name"];var e={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:n.languages.kotlin}};n.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:e},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:e},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete n.languages.kotlin.string,n.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),n.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),n.languages.kt=n.languages.kotlin,n.languages.kts=n.languages.kotlin}(Prism);
+"undefined"!=typeof Prism&&"undefined"!=typeof document&&document.createRange&&(Prism.plugins.KeepMarkup=!0,Prism.hooks.add("before-highlight",(function(e){if(e.element.children.length&&Prism.util.isActive(e.element,"keep-markup",!0)){var n=Prism.util.isActive(e.element,"drop-tokens",!1),t=0,o=[];r(e.element),o.length&&(e.keepMarkup=o)}function d(e){if(function(e){return!n||"span"!==e.nodeName.toLowerCase()||!e.classList.contains("token")}(e)){var d={element:e,posOpen:t};o.push(d),r(e),d.posClose=t}else r(e)}function r(e){for(var n=0,o=e.childNodes.length;nt.node.posOpen&&(t.nodeStart=r,t.nodeStartPos=t.node.posOpen-t.pos),t.nodeStart&&t.pos+r.data.length>=t.node.posClose&&(t.nodeEnd=r,t.nodeEndPos=t.node.posClose-t.pos),t.pos+=r.data.length);if(t.nodeStart&&t.nodeEnd){var s=document.createRange();return s.setStart(t.nodeStart,t.nodeStartPos),s.setEnd(t.nodeEnd,t.nodeEndPos),t.node.element.innerHTML="",t.node.element.appendChild(s.extractContents()),s.insertNode(t.node.element),s.detach(),!1}}return!0};e.keepMarkup.forEach((function(t){n(e.element,{node:t,pos:0})})),e.highlightedCode=e.element.innerHTML}})));
+
+/*
+ * This is NOT part of the prism.js main script, it's specific to Dokka.
+ * Dokka generates 
 tags for new lines inside  blocks and it works visually,
+ * but it causes prism.js to incorrectly parse some tags (such as inline comments)
+ *
+ * This can be removed if there are no `
` tags inside `` anymore, but
+ * if there still are - DO NOT remove this hook when upading prism.js to a newer version
+ */
+Prism.hooks.add('before-sanity-check', function (env){env.element.innerHTML = env.element.innerHTML.replace(/
/g, '\n');env.code = env.element.textContent;});
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/scripts/safe-local-storage_blocking.js b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/scripts/safe-local-storage_blocking.js
new file mode 100644
index 0000000000..26e84f925f
--- /dev/null
+++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/scripts/safe-local-storage_blocking.js
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2014-2025 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+/** When Dokka is viewed via iframe, local storage could be inaccessible (see https://github.com/Kotlin/dokka/issues/3323)
+ * This is a wrapper around local storage to prevent errors in such cases
+ * */
+const safeLocalStorage = (() => {
+  let isLocalStorageAvailable = false;
+  try {
+    const testKey = '__testLocalStorageKey__';
+    localStorage.setItem(testKey, testKey);
+    localStorage.removeItem(testKey);
+    isLocalStorageAvailable = true;
+  } catch (e) {
+    console.error('Local storage is not available', e);
+  }
+
+  return {
+    getItem: (key) => {
+      if (!isLocalStorageAvailable) {
+        return null;
+      }
+      return localStorage.getItem(key);
+    },
+    setItem: (key, value) => {
+      if (!isLocalStorageAvailable) {
+        return;
+      }
+      localStorage.setItem(key, value);
+    },
+    removeItem: (key) => {
+      if (!isLocalStorageAvailable) {
+        return;
+      }
+      localStorage.removeItem(key);
+    },
+    getKeys: () => {
+      if (!isLocalStorageAvailable) {
+        return [];
+      }
+      return Object.keys(localStorage);
+    },
+  };
+})();
+
+/** When Dokka is viewed via iframe, session storage could be inaccessible (see https://github.com/Kotlin/dokka/issues/3323)
+ * This is a wrapper around session storage to prevent errors in such cases
+ * */
+const safeSessionStorage = (() => {
+  let isSessionStorageAvailable = false;
+  try {
+    const testKey = '__testSessionStorageKey__';
+    sessionStorage.setItem(testKey, testKey);
+    sessionStorage.removeItem(testKey);
+    isSessionStorageAvailable = true;
+  } catch (e) {
+    console.error('Session storage is not available', e);
+  }
+
+  return {
+    getItem: (key) => {
+      if (!isSessionStorageAvailable) {
+        return null;
+      }
+      return sessionStorage.getItem(key);
+    },
+    setItem: (key, value) => {
+      if (!isSessionStorageAvailable) {
+        return;
+      }
+      sessionStorage.setItem(key, value);
+    },
+    removeItem: (key) => {
+      if (!isSessionStorageAvailable) {
+        return;
+      }
+      sessionStorage.removeItem(key);
+    },
+    getKeys: () => {
+      if (!isSessionStorageAvailable) {
+        return [];
+      }
+      return Object.keys(sessionStorage);
+    },
+  };
+})();
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/scripts/sourceset_dependencies.js b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/scripts/sourceset_dependencies.js
new file mode 100644
index 0000000000..17d8bbec60
--- /dev/null
+++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/scripts/sourceset_dependencies.js
@@ -0,0 +1 @@
+sourceset_dependencies='{":/androidAndJvmMain":[],":/androidDebug":[":/commonMain"],":/androidMain":[":/androidAndJvmMain",":/commonMain"],":/androidRelease":[":/commonMain"],":/commonMain":[],":/jvmMain":[":/androidAndJvmMain",":/commonMain"]}'
\ No newline at end of file
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/styles/logo-styles.css b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/styles/logo-styles.css
new file mode 100644
index 0000000000..8281d5ca63
--- /dev/null
+++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/styles/logo-styles.css
@@ -0,0 +1,9 @@
+/*
+ * Copyright 2014-2024 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+:root {
+    --dokka-logo-image-url: url('../images/logo-icon.svg');
+    --dokka-logo-height: 28px;
+    --dokka-logo-width: 28px;
+}
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/styles/main.css b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/styles/main.css
new file mode 100644
index 0000000000..6790a32336
--- /dev/null
+++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/styles/main.css
@@ -0,0 +1,203 @@
+/*!
+ * Copyright 2014-2024 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ *//*!
+ * Copyright 2014-2024 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ *//*!
+ * Copyright 2014-2024 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */:root{--breakpoint-desktop-min: 900px;--breakpoint-tablet-max: 899px;--breakpoint-tablet-min: 440px;--breakpoint-mobile-max: 439px;--breakpoint-mobile-min: 360px}/*!
+ * Copyright 2014-2024 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */:root{--color-key-blue: rgb(48, 127, 255);--color-key-blue-hover: rgb(69, 140, 255);--color-key-blue-50: rgb(48, 127, 255, 0.5);--color-background-nav: rgb(39, 40, 44);--color-background-nav-dt: rgb(50, 50, 55);--color-background-page: rgb(255, 255, 255);--color-background-page-dt: rgba(38, 38, 40, 1);--color-background-footer: rgb(235, 235, 235);--color-background-footer-dt: rgb(50, 50, 55);--color-text: rgb(0, 0, 0);--color-text-dt: rgba(255, 255, 255, 0.96);--color-text-light: rgba(0, 0, 0, 0.7);--color-text-light-dt: rgba(255, 255, 255, 0.7);--color-w05: rgba(255, 255, 255, 0.05);--color-w08: rgba(255, 255, 255, 0.08);--color-w10: rgba(255, 255, 255, 0.1);--color-w16: rgba(255, 255, 255, 0.16);--color-w21: rgba(255, 255, 255, 0.21);--color-w50: rgba(255, 255, 255, 0.5);--color-w70: rgba(255, 255, 255, 0.7);--color-w80: rgba(255, 255, 255, 0.8);--color-w100: rgba(255, 255, 255, 1);--color-b05: rgba(0, 0, 0, 0.05);--color-b08: rgba(0, 0, 0, 0.08);--color-b20: rgba(0, 0, 0, 0.2);--color-b50: rgba(0, 0, 0, 0.5);--color-b70: rgba(0, 0, 0, 0.7);--color-b100: rgba(0, 0, 0, 1);--color-background-inline-code: var(--color-b08);--color-background-code-block: rgba(25, 25, 28, 0.05);--color-cd-punctuation: rgb(153, 153, 153);--color-cd-keyword: rgb(0, 51, 179);--color-cd-keyword-alternative: rgba(204, 120, 50);--color-cd-builtin: rgb(6, 125, 23);--color-cd-builtin-alternative: rgb(231, 191, 106);--color-cd-function: rgb(0, 98, 122);--color-cd-function-alternative: rgb(255, 198, 109);--color-cd-operator: rgb(154, 110, 58);--color-cd-operator-alternative: rgb(169, 183, 198);--color-cd-number: rgba(135, 16, 148, 1);--color-cd-number-alternative: rgba(109, 185, 243, 1);--color-generic: rgb(83, 157, 243);--color-jvm: rgb(77, 187, 95);--color-js: rgb(255, 199, 0);--color-wasm: rgb(255, 255, 255);--copy-icon-color: var(--color-b50);--copy-icon-hover-color: var(--color-b70)}/*!
+ * Copyright 2014-2024 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */:root{--size-s1: 4px;--size-s2: 8px;--size-s3: 16px;--size-m1: 24px;--size-m2: 32px;--size-m3: 48px;--size-l1: 64px;--size-l2: 72px;--size-ta1: 40px;--size-ta2: 52px}/*!
+ * Copyright 2014-2024 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */:root{--font-family-default: Inter, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Droid Sans, Helvetica Neue, Arial, sans-serif;--font-family-mono: JetBrains Mono, SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace;--font-h1: 600 44px/44px var(--font-family-default);--font-h2: 600 32px/32px var(--font-family-default);--font-h3: 600 24px/24px var(--font-family-default);--font-h4: 600 16px/24px var(--font-family-default);--font-text-m: 400 16px/24px var(--font-family-default);--font-text-s: 400 14px/20px var(--font-family-default);--font-code: 400 15.5px/24px var(--font-family-mono)}/*!
+ * Copyright 2014-2024 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */:root{--hover-transition: background-color 200ms ease-in-out;--rotate-transition: transform 200ms ease-in-out}#pages-search{width:40px;height:40px;padding:0;cursor:pointer;border:none;border-radius:var(--size-s1);background:rgba(0,0,0,0);font-size:0}#pages-search:focus-visible{outline:var(--focus-outline)}@media(width < 900px){#pages-search{width:52px;height:52px;border-radius:0;outline-offset:-4px}}.search,.search [data-test=ring-select],.search [data-test=ring-tooltip],.search [data-test=ring-select_focus]{display:inline-block;margin:0;padding:0;font-size:0;line-height:0}.search-hotkey-popup{padding:4px;background-color:var(--background-color) !important}span[data-test-custom=ring-select-popup-filter-icon]{top:10px;left:11px}@media(width < 900px){span[data-test-custom=ring-select-popup-filter-icon]{top:16px;left:11px}}span[data-test-custom=ring-select-popup-filter-icon] svg{width:20px !important;height:20px !important}.popup-wrapper{min-width:636px !important;margin-top:-42px;color:rgba(255,255,255,.96);border:1px solid rgba(255,255,255,.2) !important;background-color:#262628 !important}@media(width < 900px){.popup-wrapper{top:-1px !important;right:-1px !important;bottom:-1px !important;left:-1px !important;overflow-y:hidden !important;margin-top:0}}.popup-wrapper [class^=filterWrapper]{margin-bottom:4px;padding-right:0;border-bottom:1px solid rgba(255,255,255,.2)}.popup-wrapper input{--outline-width: 4px;width:calc(100% - var(--outline-width));height:39px;margin-left:-40px;padding-right:52px;padding-left:40px;color:#fff;border-radius:0;font-size:16px;font-weight:normal !important}.popup-wrapper input::placeholder{color:rgba(0,0,0,0)}@media(width < 900px){.popup-wrapper input{height:51px}}.popup-wrapper span[data-test-custom=ring-select-popup-filter-icon]{color:#fff}@media(width < 900px){.popup-wrapper div[data-test=ring-input]{overflow:hidden}}.popup-wrapper button[data-test=ring-input-clear]{top:0;right:40px;height:39px;padding:9px 12px;transition:none;color:#fff !important;border-radius:0;line-height:21px}@media(width < 900px){.popup-wrapper button[data-test=ring-input-clear]{right:52px;height:52px}}.popup-wrapper button[data-test=ring-input-clear]:focus-visible{box-shadow:inset 4px 0 0 var(--color-key-blue-50),inset -4px 0 0 var(--color-key-blue-50),0 -4px 0 var(--color-key-blue-50),0 4px 0 var(--color-key-blue-50)}@media(width < 900px){.popup-wrapper button[data-test=ring-input-clear]:focus-visible{outline:var(--focus-outline);outline-offset:-4px;box-shadow:none}}.popup-wrapper button[data-test=ring-input-clear]:hover{background-color:var(--color-w10)}@media(width < 900px){.popup-wrapper button[data-test=ring-input-clear]{padding:15.5px 12px}}.popup-wrapper button[data-test=ring-input-clear] span{display:none}.popup-wrapper button[data-test=ring-input-clear]::after{content:"Clear"}@media screen and (width <= 759px){.popup-wrapper{min-width:100% !important}.search-hotkey-popup{display:none}}.search--close-button{position:absolute;top:-1px;right:-1px;width:41px;height:41px !important;border-radius:0 !important}@media(width < 900px){.search--close-button{width:52px;height:52px !important;background-color:rgba(0,0,0,0) !important}.search--close-button:hover{background-color:var(--color-w10) !important}.search--close-button:active{background-color:var(--color-w16) !important}.search--close-button:focus-visible{outline:var(--focus-outline);outline-offset:-4px}}.template-wrapper{display:flex;overflow:hidden;flex-direction:column;height:auto;padding:4px 24px;grid-template-columns:auto auto}.template-wrapper strong{color:rgba(255,255,255,.96);background:rgba(48,127,255,.3)}.template-title{display:-webkit-box;overflow:hidden;white-space:normal;word-break:break-all;color:#fff;font-size:16px;font-weight:600;line-height:24px;-webkit-box-orient:vertical;-webkit-line-clamp:2}.template-description{display:block;display:-webkit-box;overflow:hidden;white-space:normal;word-break:break-all;color:rgba(255,255,255,.7);font-size:14px;font-weight:normal;line-height:20px;justify-self:end;-webkit-box-orient:vertical;-webkit-line-clamp:2}@media screen and (width <= 759px){.template-wrapper{display:flex;flex-direction:column;height:auto}.template-wrapper span{line-height:unset}.template-title{font-size:14px;line-height:20px}.template-description{font-size:14px;line-height:20px}}.template-name{justify-self:start}[class^=fade]{display:none}[class*=hover]{background-color:rgba(255,255,255,.1) !important}div[data-test=ring-select-popup-filter]{padding-left:40px}div[data-test=ring-popup]{overflow:visible;border-radius:0}div[data-test=ring-popup] .ReactVirtualized__List{max-height:412px !important}div[data-test=ring-popup] .ReactVirtualized__List:focus-visible{outline:var(--focus-outline)}@media(width < 900px){div[data-test=ring-popup] .ReactVirtualized__List{max-height:calc(100vh - 51px) !important}}
+/* stylelint-disable color-no-hex */
+
+.light,
+:root {
+  --ring-unit: 8px;
+
+  /* Element */
+  --ring-line-components: 223, 229, 235;
+  --ring-line-color: rgb(var(--ring-line-components)); /* #dfe5eb */
+  --ring-borders-components: 197, 209, 219;
+  --ring-borders-color: rgb(var(--ring-borders-components)); /* #c5d1db */
+  --ring-icon-components: 184, 209, 229;
+  --ring-icon-color: rgb(var(--ring-icon-components)); /* #b8d1e5 */
+  --ring-icon-secondary-components: 153, 153, 153;
+  --ring-icon-secondary-color: rgb(var(--ring-icon-secondary-components)); /* #999 */
+  --ring-border-disabled-components: 232, 232, 232;
+  --ring-border-disabled-color: rgb(var(--ring-border-disabled-components)); /* #e8e8e8 */
+  --ring-border-selected-disabled-components: 212, 212, 212;
+  --ring-border-selected-disabled-color: rgb(var(--ring-border-selected-disabled-components)); /* #d4d4d4 */
+  --ring-border-unselected-disabled-components: 232, 232, 232;
+  --ring-border-unselected-disabled-color: rgb(var(--ring-border-unselected-disabled-components)); /* #e8e8e8 */ /* TODO remove in 6.0 */
+  --ring-icon-disabled-components: 212, 212, 212;
+  --ring-icon-disabled-color: rgb(var(--ring-icon-disabled-components)); /* #d4d4d4 */
+  --ring-border-hover-components: 128, 198, 255;
+  --ring-border-hover-color: rgb(var(--ring-border-hover-components)); /* #80c6ff */
+  --ring-icon-hover-components: var(--ring-link-hover-color);
+  --ring-icon-hover-color: var(--ring-link-hover-color);
+  --ring-main-components: 0, 128, 229;
+  --ring-main-color: rgb(var(--ring-main-components)); /* #0080e5 */
+  --ring-action-link-components: var(--ring-main-components);
+  --ring-action-link-color: rgb(var(--ring-main-components)); /* #0080e5 */
+  --ring-main-hover-components: 0, 112, 204;
+  --ring-main-hover-color: rgb(var(--ring-main-hover-components)); /* #0070cc */
+  --ring-icon-error-components: 219, 88, 96;
+  --ring-icon-error-color: rgb(var(--ring-icon-error-components)); /* #db5860 */
+  --ring-icon-warning-components: 237, 162, 0;
+  --ring-icon-warning-color: rgb(var(--ring-icon-warning-components)); /* #eda200 */
+  --ring-icon-success-components: 89, 168, 105;
+  --ring-icon-success-color: rgb(var(--ring-icon-success-components)); /* #59a869 */
+  --ring-pale-control-components: 207, 219, 229;
+  --ring-pale-control-color: rgb(var(--ring-pale-control-components)); /* #cfdbe5 */
+  --ring-popup-border-components: 0, 28, 54;
+  --ring-popup-border-color: var(--ring-line-color);
+  --ring-popup-shadow-components: rgba(var(--ring-popup-border-components), 0.1);
+  --ring-popup-shadow-color: rgba(var(--ring-popup-border-components), 0.1);
+  --ring-popup-secondary-shadow-color: rgba(var(--ring-popup-border-components), 0.04);
+  --ring-message-shadow-color: rgba(var(--ring-popup-border-components), 0.3);
+  --ring-pinned-shadow-components: 115, 117, 119;
+  --ring-pinned-shadow-color: rgb(var(--ring-pinned-shadow-components)); /* #737577 */
+  --ring-button-danger-hover-components: var(--ring-icon-error-color);
+  --ring-button-danger-hover-color: var(--ring-icon-error-color);
+  --ring-button-primary-border-components: 0, 98, 178;
+  --ring-button-primary-border-color: rgb(var(--ring-button-primary-border-components)); /* #0062b2 */
+  --ring-popup-shadow: 0 2px 8px var(--ring-popup-shadow-color), 0 1px 2px var(--ring-popup-secondary-shadow-color);
+  --ring-dialog-shadow: 0 4px 24px var(--ring-popup-shadow-color), 0 2px 6px var(--ring-popup-secondary-shadow-color);
+
+  /* Text */
+  --ring-search-components: 102, 158, 204;
+  --ring-search-color: rgb(var(--ring-search-components)); /* #669ecc */
+  --ring-hint-components: 64, 99, 128;
+  --ring-hint-color: rgb(var(--ring-hint-components)); /* #406380 */
+  --ring-link-components: 15, 91, 153;
+  --ring-link-color: rgb(var(--ring-link-components)); /* #0f5b99 */
+  --ring-link-hover-components: 255, 0, 140;
+  --ring-link-hover-color: rgb(var(--ring-link-hover-components)); /* #ff008c */
+  --ring-error-components: 169, 15, 26;
+  --ring-error-color: rgb(var(--ring-error-components)); /* #a90f1a */
+  --ring-warning-components: 178, 92, 0;
+  --ring-warning-color: rgb(var(--ring-warning-components)); /* #b25c00 */
+  --ring-success-components: 12, 117, 35;
+  --ring-success-color: rgb(var(--ring-success-components)); /* #0c7523 */
+  --ring-text-components: 31, 35, 38;
+  --ring-text-color: rgb(var(--ring-text-components)); /* #1f2326 */
+  --ring-active-text-color: var(--ring-text-color);
+  --ring-white-text-components: 255, 255, 255;
+  --ring-white-text-color: rgb(var(--ring-white-text-components)); /* #fff */
+  --ring-heading-color: var(--ring-text-color);
+  --ring-secondary-components: 115, 117, 119;
+  --ring-secondary-color: rgb(var(--ring-secondary-components)); /* #737577 */
+  --ring-disabled-components: 153, 153, 153;
+  --ring-disabled-color: rgb(var(--ring-disabled-components)); /* #999 */
+
+  /* Background */
+  --ring-content-background-components: 255, 255, 255;
+  --ring-content-background-color: rgb(var(--ring-content-background-components)); /* #fff */
+  --ring-popup-background-components: 255, 255, 255;
+  --ring-popup-background-color: rgb(var(--ring-popup-background-components)); /* #fff */
+  --ring-sidebar-background-components: 247, 249, 250;
+  --ring-sidebar-background-color: rgb(var(--ring-sidebar-background-components)); /* #f7f9fa */
+  --ring-selected-background-components: 212, 237, 255;
+  --ring-selected-background-color: rgb(var(--ring-selected-background-components)); /* #d4edff */
+  --ring-hover-background-components: 235, 246, 255;
+  --ring-hover-background-color: rgb(var(--ring-hover-background-components)); /* #ebf6ff */
+  --ring-navigation-background-components: 255, 255, 255;
+  --ring-navigation-background-color: rgb(var(--ring-navigation-background-components)); /* #fff */
+  --ring-tag-background-components: 230, 236, 242;
+  --ring-tag-background-color: rgb(var(--ring-tag-background-components)); /* #e6ecf2 */
+  --ring-tag-hover-background-components: 211, 218, 224;
+  --ring-tag-hover-background-color: rgb(var(--ring-tag-hover-background-components)); /* #d3dae0 */
+  --ring-removed-background-components: 255, 213, 203;
+  --ring-removed-background-color: rgb(var(--ring-removed-background-components)); /* #ffd5cb */
+  --ring-warning-background-components: 250, 236, 205;
+  --ring-warning-background-color: rgb(var(--ring-warning-background-components)); /* #faeccd */
+  --ring-added-background-components: 216, 240, 216;
+  --ring-added-background-color: rgb(var(--ring-added-background-components)); /* #d8f0d8 */
+  --ring-disabled-background-components: 245, 245, 245;
+  --ring-disabled-background-color: rgb(var(--ring-disabled-background-components)); /* #f5f5f5 */
+  --ring-disabled-selected-background-components: 232, 232, 232;
+  --ring-disabled-selected-background-color: rgb(var(--ring-disabled-selected-background-components)); /* #e8e8e8 */
+  --ring-button-danger-active-components: 255, 231, 232;
+  --ring-button-danger-active-color: rgb(var(--ring-button-danger-active-components)); /* #ffe7e8 */
+  --ring-button-loader-background-components: 51, 163, 255;
+  --ring-button-loader-background: rgb(var(--ring-button-loader-background-components)); /* #33a3ff */
+  --ring-button-primary-background-components: 26, 152, 255;
+  --ring-button-primary-background-color: rgb(var(--ring-button-primary-background-components)); /* #1a98ff */
+  --ring-table-loader-background-color: rgba(var(--ring-content-background-components), 0.5); /* #ffffff80 */
+
+  /* Code */
+  --ring-code-background-color: var(--ring-content-background-color);
+  --ring-code-components: 0, 0, 0;
+  --ring-code-color: rgb(var(--ring-code-components)); /* #000 */
+  --ring-code-comment-components: 112, 112, 112;
+  --ring-code-comment-color: rgb(var(--ring-code-comment-components)); /* #707070 */
+  --ring-code-meta-components: 112, 112, 112;
+  --ring-code-meta-color: rgb(var(--ring-code-meta-components)); /* #707070 */
+  --ring-code-keyword-components: 0, 0, 128;
+  --ring-code-keyword-color: rgb(var(--ring-code-keyword-components)); /* #000080 */
+  --ring-code-tag-background-components: 239, 239, 239;
+  --ring-code-tag-background-color: rgb(var(--ring-code-tag-background-components)); /* #efefef */
+  --ring-code-tag-color: var(--ring-code-keyword-color);
+  --ring-code-tag-font-weight: bold;
+  --ring-code-field-components: 102, 14, 122;
+  --ring-code-field-color: rgb(var(--ring-code-field-components)); /* #660e7a */
+  --ring-code-attribute-components: 0, 0, 255;
+  --ring-code-attribute-color: rgb(var(--ring-code-attribute-components)); /* #00f */
+  --ring-code-number-color: var(--ring-code-attribute-color);
+  --ring-code-string-components: 0, 122, 0;
+  --ring-code-string-color: rgb(var(--ring-code-string-components)); /* #007a00 */
+  --ring-code-addition-components: 170, 222, 170;
+  --ring-code-addition-color: rgb(var(--ring-code-addition-components)); /* #aadeaa */
+  --ring-code-deletion-components: 200, 200, 200;
+  --ring-code-deletion-color: rgb(var(--ring-code-deletion-components)); /* #c8c8c8 */
+
+  /* Metrics */
+  --ring-border-radius: 4px;
+  --ring-border-radius-small: 2px;
+  --ring-font-size-larger: 15px;
+  --ring-font-size: 14px;
+  --ring-font-size-smaller: 12px;
+  --ring-line-height-taller: 21px;
+  --ring-line-height: 20px;
+  --ring-line-height-lower: 18px;
+  --ring-line-height-lowest: 16px;
+  --ring-ease: 0.3s ease-out;
+  --ring-fast-ease: 0.15s ease-out;
+  --ring-font-family: system-ui, Arial, sans-serif;
+  --ring-font-family-monospace:
+    Menlo,
+    "Bitstream Vera Sans Mono",
+    "Ubuntu Mono",
+    Consolas,
+    "Courier New",
+    Courier,
+    monospace;
+
+  /* Common z-index-values */
+
+  /* Invisible element is an absolutely positioned element which should be below */
+  /* all other elements on the page */
+  --ring-invisible-element-z-index: -1;
+
+  /* z-index for position: fixed elements */
+  --ring-fixed-z-index: 1;
+
+  /* Elements that should overlay all other elements on the page */
+  --ring-overlay-z-index: 5;
+
+  /* Alerts should de displayed above overlays */
+  --ring-alert-z-index: 6;
+}
+
+/*!
+ * Copyright 2014-2024 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ *//*!
+ * Copyright 2014-2024 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */html,.app-root{height:100%}.search-root{margin:0;padding:0;background:var(--ring-content-background-color);font-family:var(--ring-font-family);font-size:var(--ring-font-size);line-height:var(--ring-line-height)}.search-content{z-index:8}
+
+/*# sourceMappingURL=main.css.map*/
\ No newline at end of file
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/styles/prism.css b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/styles/prism.css
new file mode 100644
index 0000000000..f160ebb9e0
--- /dev/null
+++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/styles/prism.css
@@ -0,0 +1,114 @@
+/*
+ * Custom Dokka styles
+ */
+code .token {
+    white-space: pre;
+}
+
+/**
+ * Styles based on webhelp's prism.js styles
+ * Changes:
+ * - Since webhelp's styles are in .pcss, they use nesting which is not achievable in native CSS
+ *   so nested css blocks have been unrolled (like dark theme).
+ * - Webhelp uses "Custom Class" prism.js plugin, so all of their prism classes are prefixed with "--prism".
+ *   Dokka doesn't seem to need this plugin at the moment, so all "--prism" prefixes have been removed.
+ * - Removed all styles related to `pre` and `code` tags. Kotlinlang's resulting styles are so spread out and complicated
+ *   that it's difficult to gather in one place. Instead use code styles defined in the main Dokka styles,
+ *   which at the moment looks fairly similar.
+ *
+ * Based on prism.js default theme
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+
+:root {
+	--code-area-punctuation: var(--color-cd-punctuation);
+	--code-area-string: var(--color-cd-builtin);
+	--code-area-keyword: var(--color-cd-keyword);
+	--code-area-function: var(--color-cd-function);
+	--code-area-operator: var(--color-cd-operator);
+	--code-area-number: var(--color-cd-number);
+}
+
+:root.theme-dark {
+	--code-area-string: var(--color-cd-builtin-alternative);
+	--code-area-keyword: var(--color-cd-keyword-alternative);
+	--code-area-function: var(--color-cd-function-alternative);
+	--code-area-operator: var(--color-cd-operator-alternative);
+	--code-area-number: var(--color-cd-number-alternative);
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata,
+.token.punctuation {
+	color: var(--code-area-punctuation);
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+	color: var(--code-area-number);
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+	color: var(--code-area-string);
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+	color: var(--code-area-operator);
+	background: none;
+}
+
+.token.interpolation-punctuation {
+	color: var(--code-area-keyword);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword,
+.token.interpolation-punctuation {
+	color: var(--code-area-keyword);
+}
+
+.token.function {
+	color: var(--code-area-function);
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+	color: var(--code-area-number);
+}
+
+.token.important,
+.token.bold {
+	font-weight: bold;
+}
+
+.token.italic {
+	font-style: italic;
+}
+
+.token.entity {
+	cursor: help;
+}
+
+:root.theme-dark .language-plaintext .token {
+	/* plaintext code should be colored as article text */
+	color: inherit !important;
+}
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/styles/style.css b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/styles/style.css
new file mode 100644
index 0000000000..a5762e4c27
--- /dev/null
+++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/styles/style.css
@@ -0,0 +1,458 @@
+/*
+ * Copyright 2014-2024 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+/* --- root styles --- */
+:root {
+    --default-gray: #f4f4f4;
+    --default-font-color: rgb(0, 0, 0);
+    --header-font-color: var(--default-font-color);
+
+    --hover-link-color: #5B5DEF;
+
+    --color-scrollbar: rgba(39, 40, 44, 0.40);
+    --color-scrollbar-track: var(--default-gray);
+    --default-white: #fff;
+    --background-color: var(--default-white);
+    --dark-mode-and-search-icon-color: var(--default-white);
+    --color-dark: #27282c;
+    --default-font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Droid Sans, Helvetica Neue, Arial, sans-serif;
+    --default-monospace-font-family: JetBrains Mono, SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace;
+    --default-font-size: 16px;
+    --blockquote-background: rgba(39, 40, 44, .05);
+    --border-color: rgba(39, 40, 44, .2);
+    --navigation-highlight-color: rgba(39, 40, 44, 0.05);
+    --top-navigation-height: 73px;
+    --white-10: hsla(0, 0%, 100%, .1);
+
+    --active-tab-border-color: var(--color-key-blue);
+    --inactive-tab-border-color: rgba(164, 164, 170, 0.7);
+
+    --active-section-color: #7F52FF;
+    --inactive-section-color: rgba(25, 25, 28, .7);
+
+    --sidemenu-section-active-color: #7F52FF;
+}
+
+html {
+    height: 100%;
+    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+    scrollbar-color: rgba(39, 40, 44, 0.40) #F4F4F4;
+    scrollbar-color: var(--color-scrollbar) var(--color-scrollbar-track);
+    text-rendering: optimizeLegibility;
+    -webkit-font-smoothing: antialiased;
+    color: var(--default-font-color);
+}
+
+html ::-webkit-scrollbar {
+    width: 8px;
+    height: 8px;
+}
+
+html ::-webkit-scrollbar-track {
+    background-color: var(--color-scrollbar-track);
+}
+
+html ::-webkit-scrollbar-thumb {
+    width: 8px;
+    border-radius: 6px;
+    background: rgba(39, 40, 44, 0.40);
+    background: var(--color-scrollbar);
+}
+
+html, body {
+    margin: 0;
+    padding: 0;
+    height: 100%;
+    width: 100%;
+}
+
+/* /--- root styles --- */
+
+/* --- global tags styles --- */
+
+h1 {
+    font-size: 44px;
+    line-height: 44px;
+    margin-bottom: 24px;
+    margin-top: 48px;
+}
+
+h2 {
+    font-size: 32px;
+    line-height: 32px;
+    margin-bottom: 24px;
+    margin-top: 48px;
+}
+
+h3 {
+    font-size: 24px;
+    line-height: 24px;
+    margin-bottom: 24px;
+    margin-top: 48px;
+}
+
+h4, h5 {
+    font-size: 16px;
+    line-height: 24px;
+    margin-bottom: 24px;
+    margin-top: 24px;
+}
+
+p, ul, ol, table, pre, dl {
+    margin: 0;
+}
+
+u {
+    text-decoration: none;
+    padding-bottom: 2px;
+    border-bottom: 1px solid var(--border-color);
+}
+
+blockquote {
+    border-left: 1ch solid var(--default-gray);
+    margin: 0;
+    padding-left: 1ch;
+    font-style: italic;
+    color: var(--color-dark);
+}
+
+.theme-dark blockquote {
+    color: var(--default-font-color);
+    border-left-color: var(--blockquote-background);
+}
+
+pre {
+    display: block;
+}
+
+dt {
+    color: #444;
+}
+
+img {
+    max-width: 100%;
+}
+
+/* /---  global tags styles --- */
+
+/* ---  utils classes --- */
+.w-100 {
+    width: 100%;
+}
+
+.no-gutters {
+    margin: 0;
+    padding: 0;
+}
+
+.d-flex {
+    display: flex;
+}
+
+.floating-right {
+    float: right;
+}
+
+.pull-right {
+    float: right;
+    margin-left: auto
+}
+
+.clearfix::after {
+    display: block;
+    content: '';
+    clear: both;
+    height: 0;
+}
+
+/* /---  utils classes --- */
+
+/* ---dark theme --- */
+.theme-dark {
+    --background-color: #262628;
+    --color-dark: #3d3d41;
+    --default-font-color: rgba(255, 255, 255, 0.96);
+    --border-color: hsla(0, 0%, 100%, 0.2);
+    --blockquote-background: hsla(0, 0%, 100%, 0.05);
+    --copy-icon-color: hsla(0, 0%, 100%, 0.6);
+    --copy-icon-hover-color: #fff;
+
+    --active-tab-border-color: var(--color-key-blue);
+    --inactive-tab-border-color: hsla(0, 0%, 100%, 0.4);
+
+    --active-section-color: var(--default-font-color);
+    --inactive-section-color: hsla(0, 0%, 100%, 0.4);
+
+    --navigation-highlight-color: rgba(255, 255, 255, 0.05);
+    --footer-background: hsla(0, 0%, 100%, 0.05);
+    --footer-font-color: hsla(0, 0%, 100%, 0.6);
+    --footer-go-to-top-color: var(--footer-font-color);
+
+    --sidemenu-section-active-color: var(--color-dark);
+}
+
+/* /---dark theme --- */
+
+.main-content :is(h1, h2) {
+    font-weight: 600;
+}
+
+.cover > .platform-hinted {
+    margin-bottom: 24px;
+}
+
+.cover {
+    display: flex;
+    flex-direction: column;
+}
+
+.cover .sourceset-dependent-content > .block {
+    padding: 16px 0;
+    font-size: 18px;
+    line-height: 28px;
+}
+
+.cover .platform-hinted.with-platform-tabs .sourceset-dependent-content > .block {
+    padding: 0;
+    font-size: var(--default-font-size);
+}
+
+.cover ~ .divergent-group {
+    margin-top: 24px;
+    padding: 24px 8px 8px 8px;
+}
+
+.cover ~ .divergent-group .main-subrow .symbol {
+    width: 100%;
+}
+
+.main-content p.paragraph,
+.sample-container, blockquote,
+.content > .symbol {
+    margin-top: 8px;
+}
+
+/**
+first block on a page
+http://localhost:8001/jvm/org.jetbrains.dokka.uitest.internal/function-to-be-used-as-sample.html
+ */
+blockquote,
+.content > .symbol:first-of-type,
+p.paragraph:first-child,
+.brief p.paragraph {
+    margin-top: 0;
+}
+
+.content .kdoc-tag > p.paragraph {
+    margin-top: 0;
+}
+
+.divergent-group {
+    background-color: var(--color-background);
+    padding: 16px 0 8px 0;
+    margin-bottom: 2px;
+}
+
+.divergent-group .table-row, tbody > tr {
+    border-bottom: 1px solid var(--border-color);
+}
+
+.divergent-group .table-row:last-of-type, tbody > tr:last-of-type {
+    border-bottom: none;
+}
+
+.title > .divergent-group:first-of-type {
+    padding-top: 0;
+}
+
+.strikethrough {
+    text-decoration: line-through;
+}
+
+/* Workaround for Firefox  https://github.com/Kotlin/dokka/issues/3156 */
+@-moz-document url-prefix() {
+    .strikethrough {
+        position: relative;
+        text-decoration: none;
+    }
+
+    /* complex selectors here are required to handle multiline cases */
+    .strikethrough::after, .strikethrough span:after  {
+        content: '';
+        position: absolute;
+        top: 7px;
+        left: 0;
+        right: 0;
+        height: 1px;
+        background-color: currentColor;
+        z-index: 1;
+    }
+}
+
+.symbol:empty {
+    padding: 0;
+}
+
+.brief {
+    white-space: pre-wrap;
+    overflow: hidden;
+}
+
+h1.cover {
+    margin-bottom: 24px;
+    display: block;
+}
+
+@media (max-width: 899px) {
+    h1.cover {
+        font-size: 32px;
+        line-height: 32px;
+        margin-bottom: 24px;
+    }
+}
+
+.UnderCoverText table {
+    margin: 8px 0 8px 0;
+    word-break: break-word;
+}
+
+@media (max-width: 960px) {
+    .UnderCoverText table {
+        display: block;
+        word-break: normal;
+        overflow: auto;
+    }
+}
+
+p.paragraph img {
+    display: block;
+}
+
+.deprecation-content {
+    margin: 16px 0;
+    border: 1px solid var(--border-color);
+    padding: 16px;
+}
+
+.deprecation-content > h3 {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+.deprecation-content > h4 {
+    font-size: 16px;
+    margin-top: 16px;
+    margin-bottom: 0;
+}
+
+/** https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.native.concurrent/atomic-lazy.html **/
+.deprecation-content .footnote {
+    display: block;
+}
+
+.deprecation-content .footnote > p {
+    margin: 0;
+}
+
+[data-filterable-current=''] {
+    display: none !important;
+}
+
+.inline-flex {
+    display: inline-flex;
+}
+
+/* Work around an issue: https://github.com/JetBrains/kotlin-playground/issues/91
+Applies for main description blocks with platform tabs.
+Just in case of possible performance degradation it excluding tabs with briefs on classlike page */
+#content > div:not(.tabbedcontent) .sourceset-dependent-content:not([data-active]) {
+    display: block !important;
+    visibility: hidden;
+    height: 0;
+    position: fixed;
+    top: 0;
+}
+
+.with-platform-tags {
+    display: flex;
+}
+
+.with-platform-tags ~ .main-subrow {
+    padding-top: 8px;
+}
+
+.cover .with-platform-tabs {
+    font-size: var(--default-font-size);
+}
+
+.cover > .block {
+    padding-top: 48px;
+    padding-bottom: 24px;
+    font-size: 18px;
+    line-height: 28px;
+}
+
+.cover > .block:empty {
+    padding-bottom: 0;
+}
+
+.parameters.wrapped > .parameter {
+    display: block;
+}
+
+.platform-dependent-row {
+    display: grid;
+    padding-top: 8px;
+}
+
+@media print, (max-width: 960px) {
+    div.wrapper {
+        width: auto;
+        margin: 0;
+    }
+
+    header, section, footer {
+        float: none;
+        position: static;
+        width: auto;
+    }
+
+    header {
+        padding-right: 320px;
+    }
+
+    section {
+        border: 1px solid #e5e5e5;
+        border-width: 1px 0;
+        padding: 20px 0;
+        margin: 0 0 20px;
+    }
+
+    header a small {
+        display: inline;
+    }
+
+    header ul {
+        position: absolute;
+        right: 50px;
+        top: 52px;
+    }
+}
+
+.anchor-highlight {
+    border: 1px solid var(--hover-link-color) !important;
+    box-shadow: 0 0 0 0.2em #c8e1ff;
+    margin-top: 0.2em;
+    margin-bottom: 0.2em;
+}
+
+.filtered-message {
+    margin: 25px;
+    font-size: 20px;
+    font-weight: 600;
+}
+
+div.runnablesample {
+    height: fit-content;
+}
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/inter-latin-400-italic.woff b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/inter-latin-400-italic.woff
new file mode 100644
index 0000000000..131b25952c
Binary files /dev/null and b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/inter-latin-400-italic.woff differ
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/inter-latin-400-italic.woff2 b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/inter-latin-400-italic.woff2
new file mode 100644
index 0000000000..ec07ef7dd6
Binary files /dev/null and b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/inter-latin-400-italic.woff2 differ
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/inter-latin-400-normal.woff b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/inter-latin-400-normal.woff
new file mode 100644
index 0000000000..2468d6f027
Binary files /dev/null and b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/inter-latin-400-normal.woff differ
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/inter-latin-400-normal.woff2 b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/inter-latin-400-normal.woff2
new file mode 100644
index 0000000000..33002f1285
Binary files /dev/null and b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/inter-latin-400-normal.woff2 differ
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/inter-latin-600-normal.woff b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/inter-latin-600-normal.woff
new file mode 100644
index 0000000000..71a902b548
Binary files /dev/null and b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/inter-latin-600-normal.woff differ
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/inter-latin-600-normal.woff2 b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/inter-latin-600-normal.woff2
new file mode 100644
index 0000000000..fb50a02b2a
Binary files /dev/null and b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/inter-latin-600-normal.woff2 differ
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/jetbrains-mono-latin-400-normal.woff b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/jetbrains-mono-latin-400-normal.woff
new file mode 100644
index 0000000000..2a9fff0e7c
Binary files /dev/null and b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/jetbrains-mono-latin-400-normal.woff differ
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/jetbrains-mono-latin-400-normal.woff2 b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/jetbrains-mono-latin-400-normal.woff2
new file mode 100644
index 0000000000..585887339e
Binary files /dev/null and b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/jetbrains-mono-latin-400-normal.woff2 differ
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/jetbrains-mono-latin-600-normal.woff b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/jetbrains-mono-latin-600-normal.woff
new file mode 100644
index 0000000000..23e642dacc
Binary files /dev/null and b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/jetbrains-mono-latin-600-normal.woff differ
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/jetbrains-mono-latin-600-normal.woff2 b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/jetbrains-mono-latin-600-normal.woff2
new file mode 100644
index 0000000000..59c24e7cb8
Binary files /dev/null and b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/fonts/jetbrains-mono-latin-600-normal.woff2 differ
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/ui-kit.min.css b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/ui-kit.min.css
new file mode 100644
index 0000000000..2ccc0adcdb
--- /dev/null
+++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/ui-kit.min.css
@@ -0,0 +1 @@
+.breadcrumbs{--breadcrumb-size:24px;margin-top:var(--breadcrumb-size);min-height:var(--breadcrumb-size);word-wrap:break-word}.breadcrumbs .delimiter{color:var(--text-outline);margin:0 4px}.button{align-items:center;background-color:transparent;border:none;border-radius:4px;border-radius:var(--size-s1);box-sizing:border-box;color:#000;color:var(--color-text);cursor:pointer;display:flex;height:40px;justify-content:center;letter-spacing:.045em;padding:8px 12px;padding:var(--size-s2) 12px}.button[\:has\(\:first-child\)]{gap:8px;gap:var(--size-s2);padding:8px;padding:var(--size-s2)}.button:has(:first-child){gap:8px;gap:var(--size-s2);padding:8px;padding:var(--size-s2)}@media(hover:hover){.button:hover{background-color:rgba(0,0,0,.08);background-color:var(--color-b08)}}.button:active{background-color:#307fff;background-color:var(--color-key-blue)}.button:disabled{cursor:not-allowed;opacity:.5}.button.focus-visible{outline:var(--focus-outline)}.button:focus-visible{outline:var(--focus-outline)}.theme-dark .button{color:hsla(0,0%,100%,.96);color:var(--color-text-dt)}.theme-dark .button:hover{background-color:hsla(0,0%,100%,.1);background-color:var(--color-w10)}.button_background{background-color:#fff;background-color:var(--color-w100)}.theme-dark .button_background{background-color:hsla(0,0%,100%,.1);background-color:var(--color-w10)}.theme-dark .button_background:hover{background-color:hsla(0,0%,100%,.05);background-color:var(--color-w05)}.button_dropdown{font:400 14px/20px Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,Oxygen,Droid Sans,Helvetica Neue,Arial;font:var(--font-text-s);padding:8px;padding:var(--size-s2)}.button_dropdown:after{background-image:url(../images/arrow-down.svg);background-repeat:no-repeat;content:"";display:block;filter:invert(1);height:24px;height:var(--size-m1);transform:rotate(0);width:24px;width:var(--size-m1);will-change:transform}.theme-dark .button_dropdown:after{filter:none}@media(max-width:899px){.button_dropdown.search--close-button:after{background-image:url(../images/cross.svg)}}.button_dropdown_active{background-color:#307fff;background-color:var(--color-key-blue);color:hsla(0,0%,100%,.96);color:var(--color-text-dt)}.button_dropdown_active:hover,.theme-dark .button_dropdown_active:hover{background-color:#458cff;background-color:var(--color-key-blue-hover)}.button_dropdown_active:after{filter:invert(0);transform:rotate(-180deg)}.checkbox{cursor:pointer;display:inline-block;position:relative}.checkbox--input{-webkit-appearance:none;-moz-appearance:none;appearance:none;position:absolute;visibility:hidden}.checkbox--icon{background-image:url(../images/checkbox-off.svg);height:24px;height:var(--size-m1);margin-left:-32px;margin-left:calc(var(--size-m2)*-1);position:absolute;width:24px;width:var(--size-m1)}.checkbox--input:checked+.checkbox--icon{background-image:url(../images/checkbox-on.svg)}.checkbox--input:disabled+.checkbox--icon{opacity:.2}.checkbox--input.focus-visible{outline:var(--focus-outline)}.checkbox--input:focus-visible{outline:var(--focus-outline)}.symbol:not(.token):not(.wrapped),code.block{background-color:rgba(25,25,28,.05);background-color:var(--color-background-code-block);border-radius:4px;border-radius:var(--size-s1);box-sizing:border-box;display:block;font:400 15.5px/24px JetBrains Mono,SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font:var(--font-code);overflow:auto;padding:12px 16px;position:relative;white-space:pre-wrap;word-break:break-word}code.block{max-width:100%;overflow-x:auto}.source-link-wrapper:after{clear:both;content:"";display:block;height:0}@media screen and (max-width:899px){.source-link-wrapper{display:block;margin-top:8px}}.source-link{float:right}.sample-container,div.CodeMirror{display:flex;flex-direction:column;position:relative}pre[runnable-code-sample]:after,pre[runnable-code-sample]:before{display:none}.copy-tooltip{align-items:center;display:flex;justify-content:center;position:absolute;right:4px;right:var(--size-s1);top:4px;top:var(--size-s1)}.copy-icon{border-radius:8px;border-radius:var(--size-s2);cursor:pointer;display:none;padding:8px;padding:var(--size-s2)}.copy-icon:hover{background:hsla(0,0%,100%,.5);background:var(--color-w50)}.copy-icon:before{background-color:var(--text-color);content:"";display:block;flex:0 0 auto;height:24px;-webkit-mask:url(../images/copy-icon.svg) no-repeat center/contain;mask:url(../images/copy-icon.svg) no-repeat center/contain;width:24px}.theme-dark .copy-icon:hover{background:hsla(0,0%,100%,.1);background:var(--color-w10)}.js .sample-container:hover .copy-icon,.js-touched .copy-icon{display:block}.copy-popup-wrapper{background-color:#262628;background-color:var(--color-background-page-dt);border:1px solid hsla(0,0%,100%,.16);border:1px solid var(--color-w16);border-radius:4px;border-radius:var(--size-s1);color:hsla(0,0%,100%,.96);color:var(--color-text-dt);cursor:default;display:none;padding:7px 16px 7px 8px;padding:7px var(--size-s3) 7px var(--size-s2);z-index:1}.copy-popup-wrapper>span{flex:0 0 auto}.copy-popup-wrapper.popup-to-left{margin-right:4px;margin-right:var(--size-s1)}.sample-container:hover .copy-popup-wrapper.active-popup,.table-row:hover .copy-popup-wrapper.active-popup{align-items:center;display:flex;justify-content:flex-start}.copy-popup-icon{background-image:url(../images/success-icon.svg);background-position:50%;background-repeat:no-repeat;background-size:contain;height:24px;width:24px}.anchor-wrapper{margin-left:4px;margin-left:var(--size-s1);position:relative}.anchor-wrapper .copy-popup-wrapper{left:100%;margin-left:4px;margin-left:var(--size-s1);position:absolute;top:-8px;width:-moz-max-content;width:max-content}.anchor-wrapper .copy-popup-wrapper_bottom{left:calc(100% - 36px);top:32px}.anchor-wrapper .copy-popup-wrapper_bottom-right{left:auto;right:calc(100% - 32px);top:32px}.anchor-icon{align-items:center;background:rgba(0,0,0,.08);background:var(--color-b08);border-radius:4px;border-radius:var(--size-s1);color:#000;color:var(--color-text);display:flex;justify-content:center;margin:-4px 0;opacity:0;padding:4px;padding:var(--size-s1);transition:opacity .2s ease-in-out}.anchor-icon:hover{cursor:pointer}.anchor-icon:before{background-color:#000;background-color:var(--color-text);content:"";display:block;height:24px;-webkit-mask:url(../images/anchor-copy-icon.svg) no-repeat center/contain;mask:url(../images/anchor-copy-icon.svg) no-repeat center/contain;width:24px}.theme-dark .anchor-icon{background:hsla(0,0%,100%,.1);background:var(--color-w10)}.theme-dark .anchor-icon:before{background-color:#fff;background-color:var(--color-w100)}.js .main-subrow:hover .anchor-icon{opacity:1}.dropdown{position:relative}@media(max-width:899px){.dropdown{position:static}}.dropdown--list{background-color:#323237;background-color:var(--color-background-nav-dt);border:1px solid #56565f;box-shadow:0 2px 8px 0 rgba(0,0,0,.251);display:none;max-height:400px;max-width:360px;min-width:272px;overflow-y:auto;padding:12px 0;position:absolute;right:0;top:44px;transform:translateZ(0);width:-moz-fit-content;width:fit-content;z-index:10}@media(max-width:899px){.dropdown--list{border:none;height:100vh;max-height:none;min-width:min(360px,100vw);padding:0;right:0;top:0}}@media(max-width:439px){.dropdown--list{max-width:none;width:100vw}}.dropdown--list_positioned_right{right:0}.dropdown--list_positioned_left{left:0}@media(max-width:899px){.dropdown--list_positioned_left{left:auto}}.dropdown--list_expanded{display:block}@media(min-width:900px){.dropdown--list_toc-list{background-color:transparent;border:none;box-shadow:none;display:block;max-height:none;max-width:none;min-width:100%;padding:0;position:relative;top:0}}@media(min-width:440px)and (max-width:899px){.dropdown--list_toc-list{width:408px}}.dropdown--option{align-items:center;background-color:#323237;background-color:var(--color-background-nav-dt);border:none;color:var(--color-text-nav-dt);cursor:pointer;display:flex;font:400 16px/24px Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,Oxygen,Droid Sans,Helvetica Neue,Arial;font:var(--font-text-m);gap:8px;letter-spacing:-.03em;list-style-type:none;padding:8px 12px;padding:var(--size-s2) 12px;position:relative}@media(max-width:899px){.dropdown--option{padding:14px 12px}}.dropdown--option:hover{background-color:#4a4a52}.dropdown--option.focus-visible{box-shadow:inset 4px 0 0 rgba(48,127,255,.5),inset -4px 0 0 rgba(48,127,255,.5);box-shadow:inset 4px 0 0 var(--color-key-blue-50),inset -4px 0 0 var(--color-key-blue-50);outline:var(--focus-outline);outline-offset:0;z-index:1}.dropdown--option:focus-visible{box-shadow:inset 4px 0 0 rgba(48,127,255,.5),inset -4px 0 0 rgba(48,127,255,.5);box-shadow:inset 4px 0 0 var(--color-key-blue-50),inset -4px 0 0 var(--color-key-blue-50);outline:var(--focus-outline);outline-offset:0;z-index:1}.dropdown--option:visited{color:var(--color-text-nav-dt)}.dropdown--option_active{background-color:#307fff;background-color:var(--color-key-blue)}.dropdown--option_active:hover{background-color:#458cff;background-color:var(--color-key-blue-hover)}.dropdown--option_link{color:var(--color-text-nav-dt);text-decoration:none}.dropdown--option_link.focus-visible{outline:var(--focus-outline);outline-offset:-4px}.dropdown--option_link:focus-visible{outline:var(--focus-outline);outline-offset:-4px}.dropdown--option .checkbox{pointer-events:none}.dropdown--option .checkbox:first-letter{text-transform:uppercase}.dropdown--option-icon{display:inline-block;flex-shrink:0;height:24px;height:var(--size-m1);width:24px;width:var(--size-m1)}.dropdown--option-icon_selected{background-image:url(../images/check.svg)}.dropdown--option-text{display:inline-block;overflow:hidden;text-overflow:ellipsis}.dropdown--overlay{background-color:rgba(0,0,0,.5);background-color:var(--color-b50);bottom:0;content:"";display:none;height:100vh;left:0;position:absolute;right:0;top:0;width:100vw;z-index:4}.dropdown--list_expanded+.dropdown--overlay{display:block}@media(min-width:900px){.dropdown--list_expanded+.dropdown--overlay{display:none}}.dropdown--header{align-items:center;background-color:#323237;background-color:var(--color-background-nav-dt);border-bottom:1px solid #56565f;color:hsla(0,0%,100%,.7);color:var(--color-w70);display:flex;height:52px;justify-content:space-between;padding-left:16px;padding-left:var(--size-s3);position:sticky;top:0;z-index:2}@media(min-width:900px){.dropdown--header{display:none}}@media(max-width:899px){.dropdown--header+:not(.sidebar--inner){margin-top:12px}.dropdown--header .button{border-radius:0;outline-offset:-4px}}.dropdown--header .button:hover{background-color:hsla(0,0%,100%,.1);background-color:var(--color-w10)}.dropdown--header .button:active{background-color:hsla(0,0%,100%,.16);background-color:var(--color-w16)}.filter-section{align-items:center;display:flex;flex-wrap:wrap;gap:2px;justify-content:flex-end;margin-right:12px;max-height:40px;padding-left:0;position:static;z-index:1}.filter-section_loading{overflow:hidden}@media(min-width:900px){.filter-section--dropdown{display:none}}.filter-section--dropdown-toggle_as-filters{background-image:url(../images/filter.svg);background-position:50% 50%;background-repeat:no-repeat;min-width:40px}.filter-section--dropdown-toggle_as-filters:after{display:none}@media(max-width:899px){.filter-section{margin-right:0;max-height:none}.filter-section>:not(.dropdown){display:none}.filter-section--dropdown-toggle{background-image:url(../images/filter.svg);background-position:50% 50%;background-repeat:no-repeat;position:relative}.filter-section--dropdown-toggle:after{display:none}}@media(max-width:899px)and (max-width:899px){.filter-section--dropdown-toggle{border-radius:0;outline-offset:-4px}.filter-section--dropdown-toggle:hover{background-color:hsla(0,0%,100%,.16)!important;background-color:var(--color-w16)!important}.filter-section--dropdown-toggle:active{background-color:hsla(0,0%,100%,.21)!important;background-color:var(--color-w21)!important}}.no-js .filter-section{display:none}.footer{background-color:#ebebeb;background-color:var(--color-background-footer);color:rgba(0,0,0,.7);color:var(--color-text-light);font:400 14px/20px Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,Oxygen,Droid Sans,Helvetica Neue,Arial;font:var(--font-text-s);letter-spacing:.15px;margin-top:auto;min-height:var(--footer-height);position:relative}.theme-dark .footer{background-color:#323237;background-color:var(--color-background-footer-dt);color:hsla(0,0%,100%,.7);color:var(--color-text-light-dt)}.footer--container{align-items:flex-start;box-sizing:border-box;display:flex;justify-content:space-between;margin-left:auto;margin-right:auto;max-width:var(--content-max-width);padding:0 48px;padding:0 var(--size-m3)}@media(max-width:439px){.footer--container{padding:0 16px;padding:0 var(--size-s3)}}.footer--button{align-items:center;background-color:transparent;background-position:50% 50%;background-repeat:no-repeat;background-size:24px 24px;border:none;border-radius:4px;border-radius:var(--size-s1);cursor:pointer;display:inline-flex;filter:invert(1);flex-shrink:0;font-size:0;height:40px;justify-content:center;line-height:0;margin-bottom:12px;margin-top:12px;outline-color:#6c4a00!important;padding:0;width:40px;z-index:0}.theme-dark .footer--button{filter:none;outline-color:rgba(48,127,255,.5)!important;outline-color:var(--color-key-blue-50)!important}@media(hover:hover){.footer--button:hover{background-color:hsla(0,0%,100%,.1);background-color:var(--color-w10)}}.footer--button:active{background-color:hsla(0,0%,100%,.16);background-color:var(--color-w16)}.footer--button.focus-visible{outline:var(--focus-outline)}.footer--button:focus-visible{outline:var(--focus-outline)}.footer--button_go-to-top{background-image:url(../images/go-to-top-icon.svg)}.footer--link{border-bottom:1px solid rgba(0,0,0,.7);border-bottom:1px solid var(--color-text-light);color:inherit}.theme-dark .footer--link{border-bottom-color:hsla(0,0%,100%,.7);border-bottom-color:var(--color-text-light-dt)}.footer--link.focus-visible{outline:var(--focus-outline)}.footer--link:focus-visible{outline:var(--focus-outline)}.footer--link:hover{border-bottom-color:#000;border-bottom-color:var(--color-text)}.theme-dark .footer--link:hover{border-bottom-color:hsla(0,0%,100%,.96);border-bottom-color:var(--color-text-dt)}.footer--content{align-items:center;display:flex;margin:12px 0;min-height:40px;text-align:right}.ui-kit-icon{background-color:transparent;background-position:50% 50%;background-repeat:no-repeat;background-size:24px 24px;filter:invert(1);font-size:0;height:24px;height:var(--size-m1);line-height:0;width:24px;width:var(--size-m1);will-change:background-color}.theme-dark .ui-kit-icon{filter:none}@media(max-width:899px){.theme-dark_mobile .ui-kit-icon{filter:none}}.ui-kit-icon_arrow-down{background-image:url(../images/arrow-down.svg)}.ui-kit-icon_placeholder{background-image:url(../images/placeholder.svg)}.ui-kit-icon_cross{background-image:url(../images/cross.svg)}code:not(.block){background:rgba(0,0,0,.08);background:var(--color-background-inline-code);border-radius:2px;display:inline-block;font:400 15.5px/24px JetBrains Mono,SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font:var(--font-code);padding:0 4px}.root{display:flex;flex-direction:column;height:100%}#container{display:flex;flex:1 1 auto;min-height:0}#main{display:flex;flex:1 1 0;flex-direction:column;margin-left:-5px;overflow:auto!important;scrollbar-gutter:stable}.main-content{box-sizing:border-box;margin-left:auto;margin-right:auto;max-width:var(--content-max-width);padding:0 48px 72px;padding:0 var(--size-m3) var(--size-l2);width:100%;z-index:0}@media(max-width:439px){.main-content{padding-left:16px;padding-left:var(--size-s3);padding-right:16px;padding-right:var(--size-s3)}}.resizer{cursor:ew-resize;flex:0 0 5px!important;left:-3px;position:relative;z-index:1}.table+hr{display:none}.main-content .content>hr{border:none;border-top:1px solid rgba(0,0,0,.2);border-top:1px solid var(--color-b20);margin:24px 0;margin:var(--size-m1) 0}.theme-dark .main-content .content>hr{border-top:1px solid hsla(0,0%,100%,.16);border-top:1px solid var(--color-w16)}.library-name--link{align-items:center;border-radius:4px;border-radius:var(--size-s1);color:hsla(0,0%,100%,.96);color:var(--color-text-dt);display:flex;font:600 16px/24px Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,Oxygen,Droid Sans,Helvetica Neue,Arial;font:var(--font-h4);margin-right:8px;margin-right:var(--size-s2);position:relative;white-space:nowrap}.library-name--link.focus-visible{outline:var(--focus-outline)}.library-name--link:focus-visible{outline:var(--focus-outline)}@media(max-width:899px){.library-name--link{border-radius:0;height:52px;margin-left:12px;outline-offset:-4px}}.library-name--link:before{background:var(--dokka-logo-image-url) center no-repeat;background-size:min(var(--dokka-logo-height),120px) min(var(--dokka-logo-width),36px);content:"";height:var(--dokka-logo-height);margin-right:8px;margin-right:var(--size-s2);max-height:36px;max-width:120px;width:var(--dokka-logo-width)}.library-version{box-sizing:border-box;color:hsla(0,0%,100%,.96);color:var(--color-text-dt);font:400 16px/24px Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,Oxygen,Droid Sans,Helvetica Neue,Arial;font:var(--font-text-m);padding-top:1px}@media(max-width:899px){.library-version{align-items:center;background-color:#000;background-color:var(--color-b100);display:flex;flex-grow:100;height:52px;padding-top:0}}a{text-decoration:none}.main-content a:not([data-name]){border-bottom:1px solid var(--text-outline);cursor:pointer;font-size:inherit;font-style:normal;line-height:inherit;outline:none;padding-bottom:1px;transition:color .2s,border-color .2s;word-break:break-word;word-wrap:break-word}.main-content a:not([data-name]),.main-content a:not([data-name]):active,.main-content a:not([data-name]):focus,.main-content a:not([data-name]):hover{color:var(--text-color);text-decoration:none}.main-content a:not([data-name]):hover{border-bottom-color:var(--text-color)}.main-content a:not([data-name]).focus-visible{box-shadow:0 0 0 4px rgba(48,127,255,.5);box-shadow:0 0 0 4px var(--color-key-blue-50)}.main-content a:not([data-name]):focus-visible{box-shadow:0 0 0 4px rgba(48,127,255,.5);box-shadow:0 0 0 4px var(--color-key-blue-50)}.navigation{align-items:center;background-color:#27282c;background-color:var(--color-background-nav);box-sizing:border-box;color:hsla(0,0%,100%,.96);color:var(--color-text-dt);display:flex;flex-wrap:nowrap;justify-content:flex-start;padding:12px 24px;padding:12px var(--size-m1);z-index:4}@media(max-width:899px){.navigation{flex-wrap:wrap;height:auto;padding:0}}.theme-dark .navigation{background-color:#323237;background-color:var(--color-background-nav-dt)}@media(max-width:899px){.navigation .button{height:52px;min-width:52px}}.navigation-controls{align-items:center;display:flex;gap:4px;gap:var(--size-s1);margin-left:auto}@media(max-width:899px){.navigation-controls{background-color:#000;background-color:var(--color-text);flex-grow:1;gap:0;justify-content:flex-end}}.no-js .navigation-controls{display:none}.navigation-controls--btn{align-items:center;background-color:transparent;background-position:50% 50%;background-repeat:no-repeat;background-size:24px 24px;border:none;border-radius:4px;border-radius:var(--size-s1);cursor:pointer;display:inline-flex;flex-shrink:0;font-size:0;height:40px;justify-content:center;line-height:0;padding:0;width:40px;z-index:0}.navigation-controls--btn:hover{background-color:hsla(0,0%,100%,.1);background-color:var(--color-w10)}@media(max-width:899px){.navigation-controls .navigation-controls--btn:hover{background-color:hsla(0,0%,100%,.16);background-color:var(--color-w16)}.navigation-controls .navigation-controls--btn:active{background-color:hsla(0,0%,100%,.21);background-color:var(--color-w21)}}.navigation-controls--btn:active{background-color:hsla(0,0%,100%,.16);background-color:var(--color-w16)}.navigation-controls--btn.focus-visible{outline:var(--focus-outline)}.navigation-controls--btn:focus-visible{outline:var(--focus-outline)}@media(max-width:899px){.navigation-controls--btn{border-radius:0;height:52px;outline-offset:-4px;width:52px}}.navigation-controls--break{flex-basis:100%}.navigation-controls--btn_theme{background-image:url(../images/theme-toggle.svg)}.navigation-controls--btn_homepage{background-image:url(../images/homepage.svg)}.navigation-controls--btn_toc{background-image:url(../images/burger.svg);margin-left:auto}.navigation-controls--btn_go-to-top{background-image:url(../images/go-to-top-icon.svg)}.platform-tags{display:flex;flex-wrap:wrap;margin-bottom:-6px;margin-left:-4px;position:relative;top:-2px}@media(max-width:439px){.platform-tags{margin-left:0;margin-top:0}.platform-tags--wrapper{flex-basis:100%;float:none;margin-left:-16px;margin-top:8px}}.platform-tag{--platform-tag-color:#bababb;border:0;border-radius:4px;border-radius:var(--size-s1);cursor:pointer;font:400 14px/20px Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,Oxygen,Droid Sans,Helvetica Neue,Arial;font:var(--font-text-s);padding:10px 12px;position:relative;text-transform:capitalize}.platform-tags .platform-tag{align-items:center;display:flex;font-size:13px;padding:5px 8px}button.platform-tag{cursor:pointer;position:relative}button.platform-tag.focus-visible{outline:var(--focus-outline);z-index:1}button.platform-tag:focus-visible{outline:var(--focus-outline);z-index:1}.platform-selector-option{padding-left:44px}.platform-selector-option.js-like,.platform-selector-option.jvm-like,.platform-selector-option.wasm-like,.platform-tag.js-like,.platform-tag.jvm-like,.platform-tag.wasm-like{text-transform:uppercase}.filter-section .platform-tag[data-active]{background-color:var(--platform-tag-color);color:#19191c}.filter-section .platform-tag.jvm-like[data-active],.platform-tags .platform-tag.jvm-like{--platform-tag-color:#4dbb5f}.filter-section .platform-tag.js-like[data-active],.platform-tags .platform-tag.js-like{--platform-tag-color:#ffc700}.filter-section .platform-tag.native-like[data-active],.platform-tags .platform-tag.native-like{--platform-tag-color:#e082f3}.filter-section .platform-tag.wasm-like[data-active],.platform-tags .platform-tag.wasm-like{--platform-tag-color:#9585f9}@media(hover:hover){.filter-section .platform-tag[data-active]:hover{background-image:linear-gradient(rgba(0,0,0,.08),rgba(0,0,0,.08),rgba(0,0,0,.08));background-image:linear-gradient(var(--color-b08),var(--color-b08),var(--color-b08))}}.filter-section .platform-tag[data-active]:active{background-color:hsla(240,1%,73%,.7);color:#fff}.filter-section .platform-tag:not([data-active]){background-color:hsla(0,0%,100%,.1);background-color:var(--color-w10);color:hsla(0,0%,100%,.5);color:var(--color-w50);text-decoration:none}.filter-section .platform-tag:not([data-active]):hover{background-color:hsla(0,0%,100%,.16);background-color:var(--color-w16)}.filter-section .platform-tag:not([data-active]):after{background-color:currentColor;content:"";height:1px;left:12px;position:absolute;right:12px;top:20px;z-index:1}.platform-tags .platform-tag:before{background:var(--platform-tag-color);border-radius:50%;content:"";display:inline-block;font-size:13px;height:8px;line-height:1.6;margin:0 4px 0 8px;width:8px}.table-row .inline-comment{padding-bottom:8px;padding-top:8px}.table-row .platform-hinted .sourceset-dependent-content .brief,.table-row .platform-hinted .sourceset-dependent-content .inline-comment{padding:8px}.table{display:flex;flex-direction:column;margin-bottom:32px}.tableheader{background-color:rgba(25,25,28,.05);background-color:var(--color-background-code-block);border:1px rgba(0,0,0,.2);border-style:solid solid none;border:1px solid var(--color-b20);border-bottom:1px var(--color-b20);font:600 16px/24px Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,Oxygen,Droid Sans,Helvetica Neue,Arial;font:var(--font-h4);margin-bottom:0;margin-top:0;padding:7px 16px}.theme-dark .tableheader{border-color:hsla(0,0%,100%,.16);border-color:var(--color-w16)}@media(max-width:439px){.tableheader{border-left:none;border-right:none;margin-left:-16px;margin-right:-16px}}.table-row{background-color:var(--color-background);border:1px rgba(0,0,0,.2);border-style:solid solid none;border:1px solid var(--color-b20);border-bottom:1px var(--color-b20);display:flex;flex-direction:column;padding:16px 16px 15px}.theme-dark .table-row{border-color:hsla(0,0%,100%,.16);border-color:var(--color-w16)}.table-row_multimodule,.table-row_platform-tagged{border-left:none;border-right:none;padding-left:0;padding-right:0}.table-row_multimodule:first-of-type,.table-row_platform-tagged:first-of-type{border-top:none}@media(max-width:439px){.table-row:not(.table-row_multimodule):not(.table-row_platform-tagged){border-left:none;border-right:none;margin-left:-16px;margin-right:-16px}}.table-row:last-of-type{border-bottom-style:solid;border-bottom-width:1px}.table-row_multimodule:last-of-type,.table-row_platform-tagged:last-of-type{border-bottom:none}.table-row .brief-comment{color:#27282c;color:var(--color-background-nav)}.theme-dark .table-row .brief-comment{color:hsla(0,0%,100%,.4)}td.content{display:flex;flex-direction:column;padding-left:24px;padding-top:16px}.main-subrow{display:flex;flex-direction:row;flex-wrap:wrap;padding:0}.title-row{display:grid;grid-template-columns:auto auto 7em;width:100%}@media (min-width:901px),print{.title-row{grid-template-columns:20% auto 7em}}.keyValue{display:grid;grid-gap:16px}@media (min-width:901px),print{.keyValue{grid-template-columns:1fr 4fr}.keyValue>div:first-child{word-break:break-word}}.table--container{overflow:auto}@media(max-width:439px){.table--container{margin-left:-16px;overflow:auto;width:calc(100% + 32px)}}table{border-collapse:collapse;margin-bottom:24px;margin-top:24px;width:100%}td,th{border:1px solid rgba(0,0,0,.2);border:1px solid var(--color-b20);min-width:40px;text-align:left;vertical-align:top}th{background-color:rgba(25,25,28,.05);background-color:var(--color-background-code-block);padding:7.5px 15.5px}td{padding:15.5px}.theme-dark td,.theme-dark th{border-color:hsla(0,0%,100%,.16);border-color:var(--color-w16)}@media(max-width:439px){td:first-child,th:first-child{border-left:none}td:last-child,th:last-child{border-right:none}}tbody>tr{min-height:56px}td:first-child{width:20vw}.platform-hinted>.platform-bookmarks-row,.tabs-section{border-bottom:1px solid var(--text-outline);margin-bottom:32px;margin-bottom:var(--size-m2)}.platform-hinted>.platform-bookmarks-row.tabs_wrapping,.tabs-section.tabs_wrapping{border-bottom:none}.platform-hinted>.platform-bookmarks-row>.platform-bookmark,.section-tab{background-color:transparent;border:0;border-bottom:4px solid transparent;border-top-left-radius:4px;border-top-right-radius:4px;color:var(--text-color);cursor:pointer;font:400 14px/20px Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,Oxygen,Droid Sans,Helvetica Neue,Arial;font:var(--font-text-s);padding:10px 16px 6px;position:relative;top:1px}.no-js .platform-bookmarks-row+.sourceset-dependent-content{margin-top:8px;margin-top:var(--size-s2)}.no-js .platform-bookmarks-row+.sourceset-dependent-content:last-of-type{margin-top:0}.section-tab:hover{background-color:var(--color-background-hover)}.section-tab.focus-visible{outline:var(--focus-outline);outline-offset:-4px}.section-tab:focus-visible{outline:var(--focus-outline);outline-offset:-4px}.section-tab[data-active=""]{border-bottom:4px solid var(--active-tab-border-color)}.tabs-section-body>div{margin-top:12px}.tabs-section-body .with-platform-tabs{padding-bottom:12px;padding-top:12px}.platform-hinted{display:block;flex:auto}.platform-hinted>.platform-bookmarks-row>.platform-bookmark{align-self:flex-start;background:inherit;flex:none;min-width:64px;min-width:var(--size-l1);order:5}.platform-hinted>.platform-bookmarks-row>.platform-bookmark.focus-visible{outline:var(--focus-outline);outline-offset:-4px}.platform-hinted>.platform-bookmarks-row>.platform-bookmark:focus-visible{outline:var(--focus-outline);outline-offset:-4px}.platform-hinted>.platform-bookmarks-row>.platform-bookmark:hover{background-color:var(--color-background-hover)}.platform-hinted>.platform-bookmarks-row>.platform-bookmark[data-active=""]{border-bottom:4px solid var(--active-tab-border-color)}.js .platform-hinted>.content:not([data-active]),.js .tabs-section-body [data-togglable]:not([data-active]),.main-content[data-page-type=package] .tabs-section-body h2,.no-js .platform-bookmarks-row,.no-js .tabs-section{display:none}:root{--toc-hover-color:var(--color-b08);--toc-font:400 13px/24px var(--font-family-default);--toc-color:var(--color-text);--toc-link-hover-gradient:linear-gradient(90deg,hsla(0,0%,100%,.08),rgba(17,0,0,.08));--toc-button-hover-gradient:linear-gradient(270deg,transparent,rgba(0,0,0,.08));--toc-item-padding-left:8px;--toc-item-padding-right:4px;--toc-item-padding-top:8px;--toc-item-padding-bottom:8px;--toc-item-padding-left-mobile:8px;--toc-item-padding-right-mobile:4px;--toc-item-padding-top-mobile:14px;--toc-item-padding-bottom-mobile:14px;--toc-icon-size:24px;--toc-button-width:calc(var(--toc-icon-size) + var(--toc-item-padding-left)*2)}.theme-dark{--toc-hover-color:var(--color-w08);--toc-color:var(--color-text-dt);--toc-link-hover-gradient:linear-gradient(270deg,hsla(0,0%,100%,.08),rgba(17,0,0,0));--toc-button-hover-gradient:linear-gradient(90deg,hsla(0,0%,100%,.08),rgba(17,0,0,0))}@media(max-width:899px){.theme-dark_mobile{--toc-color:var(--color-text-dt);--toc-hover-color:var(--color-w08);--toc-link-hover-gradient:linear-gradient(270deg,hsla(0,0%,100%,.08),rgba(17,0,0,0));--toc-button-hover-gradient:linear-gradient(90deg,hsla(0,0%,100%,.08),rgba(17,0,0,0))}}.toc--part{color:#000;color:var(--toc-color);font:400 13px/24px Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,Oxygen,Droid Sans,Helvetica Neue,Arial;font:var(--toc-font)}.toc--part,.toc--row{box-sizing:border-box}.toc--row{align-items:center;display:flex;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.toc--button{align-items:flex-start;background-color:inherit;border:none;cursor:pointer;display:inline-flex;flex-shrink:0;height:100%;justify-content:flex-end;min-width:40px;min-width:var(--toc-button-width);padding:0 4px 0 0;padding:0 var(--toc-item-padding-right) 0 0;position:absolute}.toc--button:after{background-image:url(../images/arrow-down.svg);background-position:50%;background-repeat:no-repeat;background-size:24px 24px;content:" ";filter:invert(1);font-size:0;height:24px;height:var(--toc-icon-size);line-height:0;margin-top:-12px;margin-top:calc(var(--toc-icon-size)/-2);position:absolute;top:50%;transform:rotate(0deg);width:24px;width:var(--toc-icon-size)}.toc--part_hidden .toc--button:after{transform:rotate(-90deg)}.theme-dark .toc--button:after{filter:invert(0)}@media(max-width:899px){.theme-dark_mobile .toc--button:after{filter:invert(0)}}.toc--button:hover{background:linear-gradient(270deg,transparent,rgba(0,0,0,.08));background:var(--toc-button-hover-gradient)}.toc--button.focus-visible{box-shadow:inset 4px 0 0 rgba(48,127,255,.5);box-shadow:inset 4px 0 0 var(--color-key-blue-50);outline:var(--focus-outline)}.toc--button:focus-visible{box-shadow:inset 4px 0 0 rgba(48,127,255,.5);box-shadow:inset 4px 0 0 var(--color-key-blue-50);outline:var(--focus-outline)}.toc--link{box-sizing:border-box;color:inherit;padding:8px 4px 8px 0;padding:var(--toc-item-padding-top) var(--toc-item-padding-right) var(--toc-item-padding-bottom) 0;width:100%}@media(max-width:899px){.toc--link{padding:14px 4px 14px 0;padding:var(--toc-item-padding-top-mobile) var(--toc-item-padding-right-mobile) var(--toc-item-padding-bottom-mobile) 0}}.toc--link:hover{background:rgba(0,0,0,.08);background:var(--toc-hover-color)}.toc--link.focus-visible{box-shadow:inset 4px 0 0 rgba(48,127,255,.5),inset -4px 0 0 rgba(48,127,255,.5);box-shadow:inset 4px 0 0 var(--color-key-blue-50),inset -4px 0 0 var(--color-key-blue-50);outline:var(--focus-outline);outline-offset:0}.toc--link:focus-visible{box-shadow:inset 4px 0 0 rgba(48,127,255,.5),inset -4px 0 0 rgba(48,127,255,.5);box-shadow:inset 4px 0 0 var(--color-key-blue-50),inset -4px 0 0 var(--color-key-blue-50);outline:var(--focus-outline);outline-offset:0}.toc--button~.toc--link.focus-visible{box-shadow:inset -4px 0 0 rgba(48,127,255,.5);box-shadow:inset -4px 0 0 var(--color-key-blue-50)}.toc--button~.toc--link:focus-visible{box-shadow:inset -4px 0 0 rgba(48,127,255,.5);box-shadow:inset -4px 0 0 var(--color-key-blue-50)}.toc--skip-link{background-color:#458cff;background-color:var(--color-key-blue-hover);color:#fff;color:var(--color-w100);font:400 13px/24px Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,Oxygen,Droid Sans,Helvetica Neue,Arial;font:var(--toc-font);margin-top:36px;padding:1px;position:absolute;z-index:100}.toc--skip-link:not(:focus){overflow:hidden!important;clip:rect(1px,1px,1px,1px)!important;border:0!important;height:1px!important;padding:0!important;width:1px!important}.toc--skip-link:focus{outline:var(--focus-outline);outline-offset:0}.sidebar>.toc--skip-link{margin-top:0}.toc--part_hidden>.toc--row>.toc--button~.toc--skip-link{display:none}@media(max-width:899px){.toc--skip-link{display:none}}.toc--part[data-nesting-level="0"] .toc--row>.toc--link:first-child{padding-left:40px;padding-left:calc(var(--toc-button-width) + var(--toc-icon-size)*0)}.toc--part[data-nesting-level="0"] .toc--button+.toc--link{margin-left:40px;margin-left:calc(var(--toc-button-width) + var(--toc-icon-size)*0)}.toc--part[data-nesting-level="0"] .toc--button{width:40px;width:calc(var(--toc-button-width) + var(--toc-icon-size)*0)}.toc--part[data-nesting-level="1"] .toc--row>.toc--link:first-child{padding-left:64px;padding-left:calc(var(--toc-button-width) + var(--toc-icon-size)*1)}.toc--part[data-nesting-level="1"] .toc--button+.toc--link{margin-left:64px;margin-left:calc(var(--toc-button-width) + var(--toc-icon-size)*1)}.toc--part[data-nesting-level="1"] .toc--button{width:64px;width:calc(var(--toc-button-width) + var(--toc-icon-size)*1)}.toc--part[data-nesting-level="2"] .toc--row>.toc--link:first-child{padding-left:88px;padding-left:calc(var(--toc-button-width) + var(--toc-icon-size)*2)}.toc--part[data-nesting-level="2"] .toc--button+.toc--link{margin-left:88px;margin-left:calc(var(--toc-button-width) + var(--toc-icon-size)*2)}.toc--part[data-nesting-level="2"] .toc--button{width:88px;width:calc(var(--toc-button-width) + var(--toc-icon-size)*2)}.toc--part[data-nesting-level="3"] .toc--row>.toc--link:first-child{padding-left:112px;padding-left:calc(var(--toc-button-width) + var(--toc-icon-size)*3)}.toc--part[data-nesting-level="3"] .toc--button+.toc--link{margin-left:112px;margin-left:calc(var(--toc-button-width) + var(--toc-icon-size)*3)}.toc--part[data-nesting-level="3"] .toc--button{width:112px;width:calc(var(--toc-button-width) + var(--toc-icon-size)*3)}.toc--part[data-nesting-level="4"] .toc--row>.toc--link:first-child{padding-left:136px;padding-left:calc(var(--toc-button-width) + var(--toc-icon-size)*4)}.toc--part[data-nesting-level="4"] .toc--button+.toc--link{margin-left:136px;margin-left:calc(var(--toc-button-width) + var(--toc-icon-size)*4)}.toc--part[data-nesting-level="4"] .toc--button{width:136px;width:calc(var(--toc-button-width) + var(--toc-icon-size)*4)}.toc--part[data-nesting-level="5"] .toc--row>.toc--link:first-child{padding-left:160px;padding-left:calc(var(--toc-button-width) + var(--toc-icon-size)*5)}.toc--part[data-nesting-level="5"] .toc--button+.toc--link{margin-left:160px;margin-left:calc(var(--toc-button-width) + var(--toc-icon-size)*5)}.toc--part[data-nesting-level="5"] .toc--button{width:160px;width:calc(var(--toc-button-width) + var(--toc-icon-size)*5)}.toc--part[data-nesting-level="6"] .toc--row>.toc--link:first-child{padding-left:184px;padding-left:calc(var(--toc-button-width) + var(--toc-icon-size)*6)}.toc--part[data-nesting-level="6"] .toc--button+.toc--link{margin-left:184px;margin-left:calc(var(--toc-button-width) + var(--toc-icon-size)*6)}.toc--part[data-nesting-level="6"] .toc--button{width:184px;width:calc(var(--toc-button-width) + var(--toc-icon-size)*6)}.toc--part[data-nesting-level="7"] .toc--row>.toc--link:first-child{padding-left:208px;padding-left:calc(var(--toc-button-width) + var(--toc-icon-size)*7)}.toc--part[data-nesting-level="7"] .toc--button+.toc--link{margin-left:208px;margin-left:calc(var(--toc-button-width) + var(--toc-icon-size)*7)}.toc--part[data-nesting-level="7"] .toc--button{width:208px;width:calc(var(--toc-button-width) + var(--toc-icon-size)*7)}.toc--part[data-nesting-level="8"] .toc--row>.toc--link:first-child{padding-left:232px;padding-left:calc(var(--toc-button-width) + var(--toc-icon-size)*8)}.toc--part[data-nesting-level="8"] .toc--button+.toc--link{margin-left:232px;margin-left:calc(var(--toc-button-width) + var(--toc-icon-size)*8)}.toc--part[data-nesting-level="8"] .toc--button{width:232px;width:calc(var(--toc-button-width) + var(--toc-icon-size)*8)}.toc--part[data-nesting-level="9"] .toc--row>.toc--link:first-child{padding-left:256px;padding-left:calc(var(--toc-button-width) + var(--toc-icon-size)*9)}.toc--part[data-nesting-level="9"] .toc--button+.toc--link{margin-left:256px;margin-left:calc(var(--toc-button-width) + var(--toc-icon-size)*9)}.toc--part[data-nesting-level="9"] .toc--button{width:256px;width:calc(var(--toc-button-width) + var(--toc-icon-size)*9)}.toc--part[data-nesting-level="10"] .toc--row>.toc--link:first-child{padding-left:280px;padding-left:calc(var(--toc-button-width) + var(--toc-icon-size)*10)}.toc--part[data-nesting-level="10"] .toc--button+.toc--link{margin-left:280px;margin-left:calc(var(--toc-button-width) + var(--toc-icon-size)*10)}.toc--part[data-nesting-level="10"] .toc--button{width:280px;width:calc(var(--toc-button-width) + var(--toc-icon-size)*10)}.filtered>.toc--button,.toc .filtered>a{display:none}.toc #nav-submenu{padding-left:24px}.toc--part_hidden>.toc--part{display:none}.toc--row .toc--link-grid{display:grid;grid-template-columns:16px auto;grid-gap:6px}.toc--icon{height:16px;line-height:32px;width:16px}.toc--button+.toc--link:hover{background:linear-gradient(90deg,hsla(0,0%,100%,.08),rgba(17,0,0,.08));background:var(--toc-link-hover-gradient)}.toc--icon.class:before{content:url(../images/class.svg)}.toc--icon.class-kt:before{content:url(../images/class-kotlin.svg)}.toc--icon.function:before{content:url(../images/function.svg)}.toc--icon.enum-class:before{content:url(../images/enum.svg)}.toc--icon.enum-class-kt:before{content:url(../images/enum-kotlin.svg)}.toc--icon.annotation-class:before{content:url(../images/annotation.svg)}.toc--icon.annotation-class-kt:before{content:url(../images/annotation-kotlin.svg)}.toc--icon.abstract-class:before{content:url(../images/abstract-class.svg)}.toc--icon.abstract-class-kt:before{content:url(../images/abstract-class-kotlin.svg)}.toc--icon.exception-class:before{content:url(../images/exception-class.svg)}.toc--icon.interface:before{content:url(../images/interface.svg)}.toc--icon.interface-kt:before{content:url(../images/interface-kotlin.svg)}.toc--icon.object:before{content:url(../images/object.svg)}.toc--icon.typealias-kt:before{content:url(../images/typealias-kotlin.svg)}.toc--icon.val:before{content:url(../images/field-value.svg)}.toc--icon.var:before{content:url(../images/field-variable.svg)}.toc--part[data-active]>.toc--row .toc--button,.toc--part[data-active]>.toc--row .toc--link{background-color:#307fff;background-color:var(--color-key-blue);color:hsla(0,0%,100%,.96);color:var(--color-text-dt)}.toc--part[data-active]>.toc--row .toc--button:after,.toc--part[data-active]>.toc--row .toc--link:after{filter:invert(0)}.toc--part[data-active]>.toc--row .toc--link:hover{background-color:#458cff;background-color:var(--color-key-blue-hover)}.toc--part[data-active]>.toc--row .toc--button~.toc--link:hover{background:linear-gradient(270deg,hsla(0,0%,100%,.16),rgba(17,0,0,0)),#307fff;background:linear-gradient(270deg,hsla(0,0%,100%,.16) 0,rgba(17,0,0,0) 100%),var(--color-key-blue)}.toc--part[data-active]>.toc--row .toc--button:hover{background:linear-gradient(90deg,hsla(0,0%,100%,.16),rgba(17,0,0,0)),#307fff;background:linear-gradient(90deg,hsla(0,0%,100%,.16) 0,rgba(17,0,0,0) 100%),var(--color-key-blue)}.sidebar{border-right:1px solid rgba(39,40,44,.2);box-sizing:border-box;overflow:auto!important;width:var(--sidebar-width)}@media(max-width:899px){.sidebar{border:none;width:0}}@media(min-width:900px){.sidebar{position:relative;z-index:1}}@media(max-width:899px){.sidebar .button{min-height:52px;min-width:52px}}.theme-dark .sidebar{border-right-color:#56565f}.no-js .sidebar{display:none}.sidebar--inner{padding-bottom:12px;padding-top:12px}@media(max-width:899px){.ui-kit_desktop-only{display:none}}@media(min-width:900px){.ui-kit_mobile-only{display:none}}:root{--breakpoint-desktop-min:900px;--breakpoint-tablet-max:899px;--breakpoint-tablet-min:440px;--breakpoint-mobile-max:439px;--breakpoint-mobile-min:360px;--color-key-blue:#307fff;--color-key-blue-hover:#458cff;--color-key-blue-50:rgba(48,127,255,.5);--color-background-nav:#27282c;--color-background-nav-dt:#323237;--color-background-page:#fff;--color-background-page-dt:#262628;--color-background-footer:#ebebeb;--color-background-footer-dt:#323237;--color-text:#000;--color-text-dt:hsla(0,0%,100%,.96);--color-text-light:rgba(0,0,0,.7);--color-text-light-dt:hsla(0,0%,100%,.7);--color-w05:hsla(0,0%,100%,.05);--color-w08:hsla(0,0%,100%,.08);--color-w10:hsla(0,0%,100%,.1);--color-w16:hsla(0,0%,100%,.16);--color-w21:hsla(0,0%,100%,.21);--color-w50:hsla(0,0%,100%,.5);--color-w70:hsla(0,0%,100%,.7);--color-w80:hsla(0,0%,100%,.8);--color-w100:#fff;--color-b05:rgba(0,0,0,.05);--color-b08:rgba(0,0,0,.08);--color-b20:rgba(0,0,0,.2);--color-b50:rgba(0,0,0,.5);--color-b70:rgba(0,0,0,.7);--color-b100:#000;--color-background-inline-code:var(--color-b08);--color-background-code-block:rgba(25,25,28,.05);--color-cd-punctuation:#999;--color-cd-keyword:#0033b3;--color-cd-keyword-alternative:#cc7832;--color-cd-builtin:#067d17;--color-cd-builtin-alternative:#e7bf6a;--color-cd-function:#00627a;--color-cd-function-alternative:#ffc66d;--color-cd-operator:#9a6e3a;--color-cd-operator-alternative:#a9b7c6;--color-cd-number:#871094;--color-cd-number-alternative:#6db9f3;--color-generic:#539df3;--color-jvm:#4dbb5f;--color-js:#ffc700;--color-wasm:#fff;--copy-icon-color:var(--color-b50);--copy-icon-hover-color:var(--color-b70);--size-s1:4px;--size-s2:8px;--size-s3:16px;--size-m1:24px;--size-m2:32px;--size-m3:48px;--size-l1:64px;--size-l2:72px;--size-ta1:40px;--size-ta2:52px;--font-family-default:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Droid Sans,Helvetica Neue,Arial,sans-serif;--font-family-mono:JetBrains Mono,SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;--font-h1:600 44px/44px var(--font-family-default);--font-h2:600 32px/32px var(--font-family-default);--font-h3:600 24px/24px var(--font-family-default);--font-h4:600 16px/24px var(--font-family-default);--font-text-m:400 16px/24px var(--font-family-default);--font-text-s:400 14px/20px var(--font-family-default);--font-code:400 15.5px/24px var(--font-family-mono);--hover-transition:background-color 200ms ease-in-out;--rotate-transition:transform 200ms ease-in-out;--color-background:var(--color-background-page);--color-background-hover:var(--color-b08);--focus-outline:4px solid var(--color-key-blue-50);--content-max-width:1128px;--text-color:var(--color-text);--text-outline:var(--color-b20);--sidebar-width:280px}.theme-dark{--color-background:var(--color-background-page-dt);--color-background-hover:var(--color-w10);--text-color:var(--color-text-dt);--text-outline:var(--color-w16);--color-background-inline-code:var(--color-w10);--color-background-code-block:var(--color-w05)}body{background-color:#fff;background-color:var(--color-background);color:#000;color:var(--text-color);font:400 16px/24px Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,Oxygen,Droid Sans,Helvetica Neue,Arial;font:var(--font-text-m);margin:0}small{font:400 14px/20px Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,Oxygen,Droid Sans,Helvetica Neue,Arial;font:var(--font-text-s)}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(fonts/inter-latin-400-normal.woff2) format("woff2"),url(fonts/inter-latin-400-normal.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(fonts/inter-latin-600-normal.woff2) format("woff2"),url(fonts/inter-latin-600-normal.woff) format("woff")}@font-face{font-display:swap;font-family:JetBrains Mono;font-style:normal;font-weight:400;src:url(fonts/jetbrains-mono-latin-400-normal.woff2) format("woff2"),url(fonts/jetbrains-mono-latin-400-normal.woff) format("woff")}@font-face{font-display:swap;font-family:JetBrains Mono;font-style:normal;font-weight:600;src:url(fonts/jetbrains-mono-latin-600-normal.woff2) format("woff2"),url(fonts/jetbrains-mono-latin-600-normal.woff) format("woff")}
\ No newline at end of file
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/ui-kit.min.js b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/ui-kit.min.js
new file mode 100644
index 0000000000..5149af6769
--- /dev/null
+++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/expectedData/html/ui-kit/ui-kit.min.js
@@ -0,0 +1 @@
+(()=>{"use strict";document.addEventListener("DOMContentLoaded",(function(){document.querySelectorAll("div.button").forEach((function(e){e.addEventListener("keyup",(function(t){var n=t.key;"Enter"!==n&&" "!==n||e.dispatchEvent(new MouseEvent("click"))}))}))}));var e=new ResizeObserver((function(e){return requestAnimationFrame((function(){return e.forEach(n)}))}));function t(){document.querySelectorAll("div.symbol").forEach((function(t){return e.observe(t)}))}function n(e){var t,n=e.target,i=e.borderBoxSize&&e.borderBoxSize[0]&&e.borderBoxSize[0].inlineSize,o=(null===(t=n.querySelector('[data-element-type="source-link"]'))||void 0===t?void 0:t.getBoundingClientRect().width)||0;if(i>0){var r=n.querySelectorAll(".parameters");if(0===r.length)return;r.forEach((function(e){if(e){e.classList.remove("wrapped"),e.querySelectorAll(".parameter .nbsp-indent").forEach((function(e){return e.remove()}));var t=Array.from(n.children).filter((function(e){return!e.classList.contains("block")})).map((function(e){return e.getBoundingClientRect().width})).reduce((function(e,t){return e+t}),0);t>i-32-o&&(e.classList.add("wrapped"),e.querySelectorAll(".parameter").forEach((function(e){var t;e.prepend(((t=document.createElement("span")).append(document.createTextNode("    ")),t.classList.add("nbsp-indent"),t))})))}}))}}function i(e,t){return!(!e||!e.classList.contains(t))||!!e.parentElement&&i(e.parentElement,t)}function o(){return window.innerWidth>=900}function r(){return window.innerWidth<440?"mobile":window.innerWidth>=440&&window.innerWidth<900?"tablet":"desktop"}function a(e){var t=e;if(-1===t.tabIndex)return!1;for(;t;){var n=getComputedStyle(t);if("none"===n.display||"hidden"===n.visibility)return!1;t=t.parentElement}return!0}function s(){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.overflow="scroll",document.body.appendChild(e);var t=e.offsetWidth-e.clientWidth;return document.body.removeChild(e),t}function c(e,t){var n=null;return function(){for(var i=this,o=[],r=0;rwindow.innerWidth)if(n.classList.add("copy-popup-wrapper_bottom"),i.right-o.width>=0)n.classList.add("copy-popup-wrapper_bottom-right");else{var r=s(),a=i.right+o.width-window.innerWidth+r;n.style.left="calc(100% - ".concat(a,"px)")}setTimeout((function(){n.classList.remove("active-popup","copy-popup-wrapper_bottom","copy-popup-wrapper_bottom-right"),n.style.left=""}),1200)}}"loading"===document.readyState?window.addEventListener("DOMContentLoaded",t):t(),document.addEventListener("click",(function(e){var t,n,i;e.target instanceof Element&&(e.target.matches("span.copy-icon")?(t=e.target,(i=null===(n=t.closest(".sample-container"))||void 0===n?void 0:n.querySelector("code"))&&l(i.textContent||"",t)):e.target.matches("span.anchor-icon")&&function(e){e.hasAttribute("pointing-to")&&l(window.location.origin+window.location.pathname+window.location.search+"#"+e.getAttribute("pointing-to"),e)}(e.target))})),function(){if("ontouchstart"in window||navigator.maxTouchPoints>0){var e="js-touched";document.addEventListener("touchstart",(function(t){var n=t.target.closest(".sample-container");document.querySelectorAll(".".concat(e)).forEach((function(t){t!==n&&t.classList.remove(e)})),n&&n.classList.add(e)})),document.addEventListener("touchend",(function(t){t.target.closest(".".concat(e))||document.querySelectorAll(".".concat(e)).forEach((function(t){t.classList.remove(e)}))}))}}();var f=function(){function e(e){var t=e.trapElement,n=e.navigationKeys,i=e.interactiveElementsSelector;this.getInteractiveElementsSelector=function(){return'button, a, input, textarea, select, [tabindex]:not([tabindex="-1"])'},this.navigationKeys=["Tab"],this.trapElement=t,n&&(this.navigationKeys=n),i&&(this.getInteractiveElementsSelector=i),this.handleKeyDown=this.handleKeyDown.bind(this),this.trapElement.addEventListener("keydown",this.handleKeyDown)}return e.prototype.handleKeyDown=function(e){var t=Array.from(this.trapElement.querySelectorAll(this.getInteractiveElementsSelector())).filter(a);if(this.navigationKeys.includes(e.key)&&0!==t.length){var n=Array.from(this.trapElement.querySelectorAll('[data-role="dropdown-toggle"]')).filter(a),i=o()||1===n.length?n[0]:n[1];i&&t.unshift(i);var r=t[0],s=t[t.length-1];if("ArrowUp"===e.key)if(document.activeElement===r)s.focus();else{var c=t.indexOf(document.activeElement);t[c-1].focus()}if("ArrowDown"===e.key&&(document.activeElement===s?r.focus():(c=t.indexOf(document.activeElement),t[c+1].focus())),"Tab"===e.key){var l=t.findIndex((function(e){return e&&document.activeElement===e}));-1!==l&&(t[e.shiftKey?(l-1+t.length)%t.length:(l+1)%t.length].focus(),e.preventDefault())}}},e.prototype.destroy=function(){this.trapElement.removeEventListener("keydown",this.handleKeyDown)},e}(),h='[data-role="dropdown"]',v='[data-role="dropdown-toggle"]',m='[data-role="dropdown-listbox"]',g="dropdownToggled";function p(e){var t=e.querySelectorAll(v);null==t||t.forEach(y);var n=e.querySelector(m);!function(e,t){e&&(e.classList.toggle("dropdown--list_expanded"),e.classList.contains("dropdown--list_expanded")&&o()?b(e,t):b(e,void 0))}(n,t[0].offsetWidth),document.dispatchEvent(new CustomEvent(g,{detail:{dropdownId:e.id,isExpanded:null==n?void 0:n.classList.contains("dropdown--list_expanded")}}))}function y(e){e.classList.contains("button_dropdown")&&e.classList.toggle("button_dropdown_active")}function b(e,t){if(t){var n=parseInt(getComputedStyle(e).minWidth,10),i=isNaN(n)?t:Math.max(n,t);e.style.minWidth="".concat(i,"px")}else e.style.minWidth=""}function S(e){var t=e.target;i(t,"dropdown")&&"dropdown--overlay"!==t.className||document.querySelectorAll(h).forEach((function(e){var t,n;null===(t=e.querySelectorAll(v))||void 0===t||t.forEach((function(e){e.classList.remove("button_dropdown_active")})),null===(n=e.querySelectorAll(m))||void 0===n||n.forEach((function(e){e.classList.remove("dropdown--list_expanded"),e.style.minWidth=""}))}))}function w(e){e.tag.removeAttribute("style"),e.option.setAttribute("style","display: none")}function E(e){e.tag.setAttribute("style","display: none"),e.option.removeAttribute("style")}function z(e){var t,n=null===(t=e.querySelector(".checkbox--input"))||void 0===t?void 0:t.getAttribute("data-filter");n&&(-1===filteringContext.activeFilters.findIndex((function(e){return e===n}))?unfilterSourceset(n):filterSourceset(n)),refreshFiltering()}document.addEventListener("DOMContentLoaded",(function(){document.querySelectorAll(h).forEach((function(e){var t;null===(t=e.querySelectorAll(v))||void 0===t||t.forEach((function(t){t.addEventListener("click",(function(){return p(e)}))})),function(e){new f({trapElement:e,navigationKeys:["Tab","ArrowUp","ArrowDown"],interactiveElementsSelector:function(){return o()?'[role="option"]':'[role="option"], .toc--link, .toc--button'}}),e.addEventListener("keyup",(function(t){var n;"Escape"===t.key&&(p(e),null===(n=e.querySelector(v))||void 0===n||n.focus())})),e.addEventListener("keydown",(function(e){var t=e.target;(null==t?void 0:t.matches(".dropdown--option"))&&function(e){" "===e.key&&(e.preventDefault(),e.stopPropagation())}(e)}))}(e)})),document.addEventListener("click",S)})),document.addEventListener("DOMContentLoaded",(function(){var e=document.getElementById("navigation-wrapper"),t=document.getElementById("library-version"),n=document.getElementById("filter-section"),i=document.querySelector("#filter-section + .navigation-controls--btn"),o=document.getElementById("filter-section-dropdown");if(e&&t&&n&&i&&o){var a=null==n?void 0:n.querySelectorAll(".dropdown--option"),s=null==n?void 0:n.querySelectorAll(".platform-selector");if(s&&a)if(s.length===a.length){var c=Array.from({length:s.length}).map((function(e,t){return{tag:s[t],option:a[t]}})),l=c.map((function(e){return e.tag.getBoundingClientRect().width})),d=r(),u=new ResizeObserver((function(){var t=r();d!==t&&(c.forEach(w),l=function(e){return e.map((function(e){return e.tag.getBoundingClientRect().width}))}(c)),d=t,h(),u.unobserve(e)})),f=function(){u.observe(e)};h(),f(),a.forEach((function(e){e.addEventListener("click",(function(e){z(e.target)})),e.addEventListener("keyup",(function(e){var t=e.key;"Enter"!==t&&" "!==t||z(e.target)}))})),window.addEventListener("resize",f)}else console.warn("Dokka: filter section items are not equal");else console.warn("Dokka: filter section items are not found")}function h(){var r,a;if(e&&o){if(e.getBoundingClientRect().width<900)return c.forEach(E),void o.removeAttribute("style");var s=(t&&i?i.getBoundingClientRect().left-t.getBoundingClientRect().right:0)-44-10,d=0;o.removeAttribute("style");var u=!1;c.forEach((function(e,t){(d+=l[t]+4)({sizeInfoArray:e,flexGrowRatio:t/n})}}function k(e){return Number.isFinite(e)&&e>0}function B(e,t,n,i){let{collect:o,getResult:r}=C(),a=i?1:-1,s=O(e,t,a,n),c=O(e,-t,-a,n),l=t-s.remainingOffset,d=-t-c.remainingOffset;function u(t,i){t.forEach(o),o(n[e]),i.forEach(o)}if(l===-d)u(s.sizeInfoArray,c.sizeInfoArray);else if(Math.abs(l)=0:e<=i.length-1}return{sizeInfoArray:o,remainingOffset:r}}function q(e,t){if(t.isSolid)return{remainingOffset:e,sizeInfo:t};let{nextSize:n,remainingOffset:i}=function(e,{maxSize:t,minSize:n=0}){return et?{nextSize:t,remainingOffset:e-t}:{nextSize:e,remainingOffset:0}}(t.currentSize+e,t);return{sizeInfo:{...t,currentSize:n},remainingOffset:i}}var D={barIndex:-1,offset:0,type:"deactivate",originalCoordinate:R,defaultSizeInfoArray:[],sizeInfoArray:[],discard:!0,flexGrowRatio:0};function M(e,t,n){e?.dispatchEvent(new CustomEvent(t,{detail:n}))}var _=class{disposeFnSet=new Set;watchResizerEvent=(e,t,n)=>{e?.addEventListener(t,n);let i=()=>e?.removeEventListener(t,n);return this.disposeFnSet.add(i),i};reset=()=>{this.disposeFnSet.forEach((e=>e())),this.disposeFnSet.clear()}},T=class{infoMap=new Map;items=[];update(e){this.infoMap.clear(),this.items.forEach((e=>e.destroy())),this.items=e,e.forEach(((e,t)=>{this.infoMap.set(e.elm,{item:e,index:t})}))}reset(){this.update([])}getItems(){return this.items}getItem(e){return this.infoMap.get(e)?.item??null}getItemIndex(e){return this.infoMap.get(e)?.index??null}},N=!0;try{window.addEventListener("test",null,{get passive(){return N={passive:!1},!0}})}catch{}function W({size:e}){return k(e)}function G(e){let{disableResponsive:t}=e;return!(!W(e)||void 0!==t)||!!t}function K(e){return t=>({"data-item-type":e,"data-item-config":JSON.stringify(t)})}function F({elm:e}){try{let t=JSON.parse(e.getAttribute("data-item-config")??"");return t&&"object"==typeof t?t:{}}catch{return{}}}function V(e){return 2*e+1}function j(e){return 2*e}var H=class{constructor(e){this.resizeResult=e}isDiscarded=!1;resizeSection(e,t){if(this.isDiscarded)return;let n=j(e),i=this.getSize(n);if(i>=0&&t.toSize>=0){let o=t.toSize-i;n===this.resizeResult.sizeInfoArray.length-1||t.preferMoveLeftBar?this.moveBar(e-1,{withOffset:-o}):this.moveBar(e,{withOffset:o})}}moveBar(e,t){this.isDiscarded||(this.resizeResult=B(V(e),t.withOffset,this.resizeResult.sizeInfoArray,void 0))}discard(){this.isDiscarded=!0}isSectionResized(e){let t=j(e);return"defaultSizeInfoArray"in this.resizeResult&&this.getSize(t)!==this.resizeResult.defaultSizeInfoArray[t].currentSize}isBarActivated(e){return"barIndex"in this.resizeResult&&this.resizeResult.barIndex===V(e)}getSectionSize(e){return this.getSize(j(e))}getResult(){return{...this.resizeResult,discard:this.isDiscarded}}getTotalSize(){return this.resizeResult.sizeInfoArray.filter(((e,t)=>e&&t%2==0)).reduce(((e,{currentSize:t})=>e+t),0)}getSize(e){let t=this.resizeResult.sizeInfoArray[e];return t?t.currentSize:-1}},J=class{constructor(e,t,n){this.type=e,this.elm=t,this.getConfig=n,this._config=this.getConfig(),this._observer=new MutationObserver((()=>this._config=this.getConfig())),this._observer.observe(t,{attributes:!0,attributeFilter:["data-item-config"]})}_config;_observer;get config(){return this._config}destroy(){this._observer.disconnect()}},$=class extends J{constructor(e,t){super("BAR",e.elm,(()=>function(e){let{size:t}=F(e);return{size:k(t)?t:10}}(e))),this.dispatchBarAction=t;let n=[this.attachListener(this.elm,"mousedown","activate"),this.attachListener(document,"mousemove","move"),this.attachListener(document,"mouseup","deactivate"),this.attachListener(this.elm,"touchstart","activate",N),this.attachListener(document,"touchmove","move",N),this.attachListener(document,"touchend","deactivate"),this.attachListener(document,"touchcancel","deactivate")];this.destroy=()=>{super.destroy(),n.forEach((e=>e()))}}static getStyle({size:e}){return{flex:`0 0 ${e}px`}}isActive=!1;isValidClick=!0;attachListener(e,t,n,i){let o=e=>{this.disableUserSelectIfResizing(e,n);let{clientX:t,clientY:i}=("touches"in e?e.touches[0]:e)||{clientX:0,clientY:0};this.triggerAction(this.elm,n,{x:t,y:i})};return e.addEventListener(t,o,i),()=>e.removeEventListener(t,o,i)}disableUserSelectIfResizing(e,t){(this.isActive||"activate"===t)&&e.preventDefault()}triggerAction(e,t,n){(this.isActive||"activate"===t)&&this.dispatchBarAction(e,{type:t,coordinate:n}),this.isActive&&this.isValidClick&&"deactivate"===t&&(this.isValidClick=!1,M(e,"bar:click",null)),this.updateStatusIfNeed(e,t),this.updateClickStatus(t)}updateStatusIfNeed(e,t){let n=t=>{this.isActive!==t&&(this.isActive=t,M(e,"bar:status-change",{isActive:t}))};"activate"===t?n(!0):"deactivate"===t&&n(!1)}updateClickStatus(e){this.isActive&&("activate"===e?this.isValidClick=!0:"move"===e&&(this.isValidClick=!1))}},P=class extends J{static getStyle({maxSize:e,minSize:t},n){let i=e=>k(e)?`${e}px`:void 0;return{overflow:"hidden",[n?"maxHeight":"maxWidth"]:i(e),[n?"minHeight":"minWidth"]:i(t)}}sizeInfo=null;flexGrowRatio=0;constructor(e){super("SECTION",e.elm,(()=>function(e){let{size:t,defaultSize:n,maxSize:i,minSize:o,disableResponsive:r}=F(e);return{size:k(t)?t:void 0,defaultSize:k(n)?n:void 0,maxSize:k(i)?i:void 0,minSize:k(o)?o:void 0,disableResponsive:!!r}}(e))),this.updateStyle()}update({sizeInfo:e,flexGrowRatio:t}){this.sizeInfo=e,this.flexGrowRatio=t,this.updateStyle(),M(this.elm,"section:size-change",{size:e.currentSize})}updateStyle(){let{flexGrow:e,flexShrink:t,flexBasis:n}=this.getStyle();this.elm.style.flexGrow=`${e}`,this.elm.style.flexShrink=`${t}`,this.elm.style.flexBasis=`${n}px`}getStyle(){let e=k(this.config.size)?0:this.config.disableResponsive?1:0;if(this.sizeInfo){let{disableResponsive:t,currentSize:n}=this.sizeInfo;return{flexShrink:e,flexGrow:t?0:this.flexGrowRatio*n,flexBasis:t?n:0}}{let t=this.config.size||this.config.defaultSize;return k(t)?{flexShrink:e,flexGrow:0,flexBasis:t}:{flexShrink:e,flexGrow:1,flexBasis:0}}}},U=class{constructor(e){this.config=e,this.barStore=function(e){let t=D,n=new Set;return{dispatch(i){t=(()=>{let n={barIndex:i.barIndex,type:i.type};switch(i.type){case"activate":let{sizeInfoArray:o,flexGrowRatio:r}=e.getSizeRelatedInfo();return{...D,...n,originalCoordinate:i.coordinate,defaultSizeInfoArray:o,sizeInfoArray:o,flexGrowRatio:r};case"move":let a=e.calculateOffset(i.coordinate,t.originalCoordinate);return{...n,...B(i.barIndex,a,t.defaultSizeInfoArray,e.flipResizeMoveDirection),offset:a,originalCoordinate:t.originalCoordinate,defaultSizeInfoArray:t.defaultSizeInfoArray,discard:!1};case"deactivate":return D}})(),n.forEach((e=>e(t)))},subscribe:e=>(n.add(e),()=>n.delete(e)),unsubscribeAll(){n.clear()}}}({calculateOffset:(e,t)=>function(e,t){return t?{x:e.x-t.x,y:e.y-t.y}:R}(e,t)[this.axis],getSizeRelatedInfo:()=>this.makeSizeInfos(),flipResizeMoveDirection:e.rtl&&!e.vertical})}styles={container:e=>({...e,display:"flex",flexDirection:this.direction}),section:(e,t)=>({...t,...P.getStyle(e,this.config.vertical)}),bar:(e,t)=>({...t,...$.getStyle(e)})};attributes={bar:K("BAR"),section:K("SECTION")};itemsCache=new T;eventHub=new _;container=null;barStore;get axis(){return this.config.vertical?"y":"x"}get dimension(){return this.config.vertical?"height":"width"}get direction(){return this.config.vertical?"column":"row"}get on(){return this.eventHub.watchResizerEvent}init(e){var t;this.dispose(),this.container=e,e&&(this.itemsCache.update((t=e,Array.from(t.childNodes).map((e=>{if(!(e instanceof HTMLElement))return null;let t=e.getAttribute("data-item-type");return function(e){return!!e&&e in I}(t)?{type:t,elm:e}:null})).filter((e=>!!e))).map((e=>{switch(e.type){case"BAR":return new $(e,this.dispatchBarAction);case"SECTION":return new P(e)}}))),this.initStyles(e,this.itemsCache.getItems()),this.sizeRelatedInfoChange(this.makeSizeInfos()),this.barStore.subscribe((e=>{this.monitorBarStatusChanges(e),this.sizeRelatedInfoChange(e)})))}dispose(){this.container=null,this.itemsCache.reset(),this.barStore.unsubscribeAll(),this.eventHub.reset()}getResizer(){return new H(this.makeSizeInfos())}applyResizer(e){this.sizeRelatedInfoChange(e.getResult())}dispatchBarAction=(e,t)=>{let n=this.itemsCache.getItemIndex(e);n&&this.barStore.dispatch({...t,barIndex:n})};sizeRelatedInfoChange(e){e.discard||(e=(()=>{if("function"==typeof this.config.beforeApplyResizer){let t=new H(e);return this.config.beforeApplyResizer(t),t.getResult()}return e})(),!e.discard&&e.sizeInfoArray.forEach((t=>{let n=this.itemsCache.getItem(t.elm);n instanceof P&&n.update({sizeInfo:t,flexGrowRatio:e.flexGrowRatio})})))}monitorBarStatusChanges({type:e}){switch(e){case"activate":return M(this.container,"column:activate",null);case"deactivate":return M(this.container,"column:after-resizing",null);default:return}}makeSizeInfos(){let{collect:e,getResult:t}=C();return this.itemsCache.getItems().forEach((t=>{t instanceof $&&e({elm:t.elm,disableResponsive:!0,isSolid:!0,currentSize:t.elm.getBoundingClientRect()[this.dimension]}),t instanceof P&&e({elm:t.elm,maxSize:t.config.maxSize,minSize:t.config.minSize,disableResponsive:G(t.config),isSolid:W(t.config),currentSize:t.elm.getBoundingClientRect()[this.dimension]})})),t()}initStyles(e,t){Object.assign(e.style,this.styles.container()),t.forEach((e=>{e instanceof $&&Object.assign(e.elm.style,this.styles.bar(e.config)),e instanceof P&&Object.assign(e.elm.style,this.styles.section(e.config))}))}},X=function(){return X=Object.assign||function(e){for(var t,n=1,i=arguments.length;ni){var o=n.scrollWidth-i+1,r=Math.floor(document.documentElement.clientWidth-e.getBoundingClientRect().right+48-s()),a=Math.min(o,r);n.style.marginRight="-".concat(a,"px")}}))}),200);new ResizeObserver((function(){n(e)})).observe(e),window.addEventListener("resize",(function(){n(e)}))}}));var ne=function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],i=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&i>=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},ie=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var i,o,r=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(i=r.next()).done;)a.push(i.value)}catch(e){o={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return a},oe=function(e,t,n){if(n||2===arguments.length)for(var i,o=0,r=t.length;o41?e.classList.add(i):e.classList.remove(i)}for(var l=[],d=function(e){var t=c(s,100),n=new ResizeObserver((function(){t(a[e])}));l.push(n)},u=0;u button[data-togglable="'+JSON.parse(n)+'"]');i&&re(i)}},window.toggleSections=re,document.addEventListener("DOMContentLoaded",(function(){document.querySelectorAll('[data-remove-style="true"]').forEach((function(e){e.removeAttribute("style")}))}))})();
\ No newline at end of file
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/settings.gradle.kts b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/settings.gradle.kts
new file mode 100644
index 0000000000..20d6d850a0
--- /dev/null
+++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/settings.gradle.kts
@@ -0,0 +1,20 @@
+rootProject.name = "it-multiplatform-android-jvm"
+
+pluginManagement {
+    repositories {
+        /* %{DOKKA_IT_MAVEN_REPO}% */
+        mavenCentral()
+        google()
+        gradlePluginPortal()
+    }
+}
+
+@Suppress("UnstableApiUsage")
+dependencyResolutionManagement {
+    repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
+    repositories {
+        /* %{DOKKA_IT_MAVEN_REPO}% */
+        mavenCentral()
+        google()
+    }
+}
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/src/androidAndJvmMain/kotlin/AndroidAndJvmMainClass.kt b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/src/androidAndJvmMain/kotlin/AndroidAndJvmMainClass.kt
new file mode 100644
index 0000000000..fb75e09a5d
--- /dev/null
+++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/src/androidAndJvmMain/kotlin/AndroidAndJvmMainClass.kt
@@ -0,0 +1,10 @@
+package it.mpp.android
+
+import java.io.File
+
+/**
+ * [File] should be resolved
+ */
+class AndroidAndJvmMainClass {
+    fun getFiles(root: File): List = emptyList()
+}
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/src/androidMain/AndroidManifest.xml b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/src/androidMain/AndroidManifest.xml
new file mode 100644
index 0000000000..3b467a5649
--- /dev/null
+++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/src/androidMain/AndroidManifest.xml
@@ -0,0 +1,5 @@
+
+
+ 
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/src/androidMain/kotlin/AndroidMainClass.kt b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/src/androidMain/kotlin/AndroidMainClass.kt
new file mode 100644
index 0000000000..f31deafcc8
--- /dev/null
+++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/src/androidMain/kotlin/AndroidMainClass.kt
@@ -0,0 +1,10 @@
+package it.mpp.android
+
+import java.io.File
+
+/**
+ * [File] should be resolved
+ */
+class AndroidMainClass {
+    fun getFiles(root: File): List = emptyList()
+}
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/src/commonMain/kotlin/CommonClass.kt b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/src/commonMain/kotlin/CommonClass.kt
new file mode 100644
index 0000000000..4c852aae44
--- /dev/null
+++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/src/commonMain/kotlin/CommonClass.kt
@@ -0,0 +1,10 @@
+package it.mpp.android
+
+import java.io.File
+
+/**
+ * [File] should be resolved
+ */
+class CommonClass {
+    fun getFiles(root: File): List = emptyList()
+}
diff --git a/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/src/jvmMain/kotlin/JvmMainClass.kt b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/src/jvmMain/kotlin/JvmMainClass.kt
new file mode 100644
index 0000000000..aa13e2c5fd
--- /dev/null
+++ b/dokka-integration-tests/gradle/projects/it-multiplatform-android-jvm/src/jvmMain/kotlin/JvmMainClass.kt
@@ -0,0 +1,10 @@
+package it.mpp.android
+
+import java.io.File
+
+/**
+ * [File] should be resolved
+ */
+class JvmMainClass {
+    fun getFiles(root: File): List = emptyList()
+}
diff --git a/dokka-integration-tests/gradle/src/test/kotlin/MultiplatformAndroidJvmProjectIT.kt b/dokka-integration-tests/gradle/src/test/kotlin/MultiplatformAndroidJvmProjectIT.kt
new file mode 100644
index 0000000000..aa80266567
--- /dev/null
+++ b/dokka-integration-tests/gradle/src/test/kotlin/MultiplatformAndroidJvmProjectIT.kt
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2014-2024 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+package org.jetbrains.dokka.it.gradle
+
+import io.kotest.assertions.withClue
+import io.kotest.inspectors.shouldForAll
+import io.kotest.matchers.paths.shouldBeAFile
+import io.kotest.matchers.shouldBe
+import io.kotest.matchers.string.shouldNotContain
+import org.gradle.testkit.runner.TaskOutcome.SUCCESS
+import org.jetbrains.dokka.gradle.utils.addArguments
+import org.jetbrains.dokka.gradle.utils.build
+import org.jetbrains.dokka.gradle.utils.findFiles
+import org.jetbrains.dokka.gradle.utils.shouldBeADirectoryWithSameContentAs
+import org.jetbrains.dokka.gradle.utils.shouldNotContainAnyOf
+import org.jetbrains.dokka.gradle.utils.sideBySide
+import org.jetbrains.dokka.gradle.utils.toTreeString
+import org.jetbrains.dokka.it.gradle.junit.*
+import kotlin.io.path.name
+import kotlin.io.path.readText
+
+/**
+ * Integration test for the `it-multiplatform-android-jvm` project.
+ */
+@TestsAndroid
+@TestsDGPv2
+@WithGradleProperties(GradlePropertiesProvider.Android::class)
+class MultiplatformAndroidJvmProjectIT {
+
+    @DokkaGradlePluginTest(sourceProjectName = "it-multiplatform-android-jvm")
+    fun `generate dokka HTML`(project: DokkaGradleProjectRunner) {
+        project.runner
+            .addArguments(
+                "clean",
+                ":dokkaGenerate",
+                "--stacktrace",
+                "--rerun-tasks",
+            )
+            .build {
+                withClue("expect project builds successfully") {
+                    shouldHaveTask(":dokkaGenerate").shouldHaveOutcome(SUCCESS)
+                }
+
+                withClue("expect all dokka workers are successful") {
+                    project
+                        .findFiles { it.name == "dokka-worker.log" }
+                        .shouldForAll { dokkaWorkerLog ->
+                            dokkaWorkerLog.shouldBeAFile()
+                            dokkaWorkerLog.readText().shouldNotContainAnyOf(
+                                "[ERROR]",
+                                "[WARN]",
+                            )
+                        }
+                }
+
+                withClue("expect configurations are not resolved during configuration time") {
+                    output shouldNotContain Regex("""Configuration '.*' was resolved during configuration time""")
+                    output shouldNotContain "https://github.com/gradle/gradle/issues/2298"
+                }
+            }
+
+        withClue("expect the same HTML is generated") {
+            val expectedHtml = project.projectDir.resolve("expectedData/html")
+            val actualHtmlDir = project.projectDir.resolve("build/dokka/html")
+
+            withClue(
+                """
+                expectedHtml: ${expectedHtml.toUri()}
+                actualHtmlDir: ${actualHtmlDir.toUri()}
+                """.trimIndent()
+            ) {
+                val expectedFileTree = expectedHtml.toTreeString()
+                val actualFileTree = actualHtmlDir.toTreeString()
+                withClue((actualFileTree to expectedFileTree).sideBySide()) {
+                    actualFileTree shouldBe expectedFileTree
+
+                    actualHtmlDir.shouldBeADirectoryWithSameContentAs(expectedHtml, TestConstants.DokkaHtmlAssetsFiles)
+                }
+            }
+
+            assertNoUnknownClassErrorsInHtml(actualHtmlDir)
+        }
+    }
+}
diff --git a/dokka-runners/dokka-gradle-plugin/src/main/kotlin/adapters/KotlinAdapter.kt b/dokka-runners/dokka-gradle-plugin/src/main/kotlin/adapters/KotlinAdapter.kt
index e5e65edcf9..ff4d95b1cb 100644
--- a/dokka-runners/dokka-gradle-plugin/src/main/kotlin/adapters/KotlinAdapter.kt
+++ b/dokka-runners/dokka-gradle-plugin/src/main/kotlin/adapters/KotlinAdapter.kt
@@ -178,12 +178,18 @@ abstract class KotlinAdapter @Inject constructor(
             val singlePlatform = allPlatforms.singleOrNull()
 
             if (singlePlatform == null) {
+                val defaultPlatform =
+                    if (allPlatforms.all { it == KotlinPlatform.JVM || it == KotlinPlatform.AndroidJVM }) {
+                        KotlinPlatform.JVM
+                    } else {
+                        KotlinPlatform.Common
+                    }
                 logger.info(
                     "[$projectPath] Dokka could not determine KotlinPlatform for ${details.name} from targets ${compilations.map { it.target }}. " +
-                            "Dokka will assume this is a ${KotlinPlatform.Common} source set. " +
+                            "Dokka will assume this is a ${defaultPlatform} source set. " +
                             "(All platforms: $allPlatforms)"
                 )
-                KotlinPlatform.Common
+                defaultPlatform
             } else {
                 singlePlatform
             }