diff --git a/arthur-maven-plugin/src/main/java/org/apache/geronimo/arthur/maven/mojo/NativeImageMojo.java b/arthur-maven-plugin/src/main/java/org/apache/geronimo/arthur/maven/mojo/NativeImageMojo.java
index 86c7880..e0995db 100644
--- a/arthur-maven-plugin/src/main/java/org/apache/geronimo/arthur/maven/mojo/NativeImageMojo.java
+++ b/arthur-maven-plugin/src/main/java/org/apache/geronimo/arthur/maven/mojo/NativeImageMojo.java
@@ -134,7 +134,7 @@
     private int maxRuntimeCompileMethods;
 
     /**
-     * Enforce {@link #maxRuntimeCompileMethods}.
+     * Enforce `maxRuntimeCompileMethods`.
      */
     @Parameter(property = "arthur.enforceMaxRuntimeCompileMethods", defaultValue = "true")
     private boolean enforceMaxRuntimeCompileMethods;
@@ -165,6 +165,7 @@
 
     /**
      * Behavior when native compilation fails, it is recommended to keep it to "no".
+     * Supported values are `no`, `force` and `auto`.
      */
     @Parameter(property = "arthur.fallbackMode", defaultValue = "no")
     private ArthurNativeImageConfiguration.FallbackMode fallbackMode;
@@ -223,25 +224,25 @@
     //
 
     /**
-     * Inline configuration model (appended to {@link #reflectionConfigurationFiles}.
+     * Inline configuration model (appended to `reflectionConfigurationFiles`).
      */
     @Parameter
     private List<ClassReflectionModel> reflections;
 
     /**
-     * Inline resource bundle model (appended to {@link #reflectionConfigurationFiles}.
+     * Inline resource bundle model (appended to `reflectionConfigurationFiles`).
      */
     @Parameter
     private List<ResourceBundleModel> bundles;
 
     /**
-     * Inline resources model (appended to {@link #resourcesConfigurationFiles}.
+     * Inline resources model (appended to `resourcesConfigurationFiles`).
      */
     @Parameter
     private List<ResourceModel> resources;
 
     /**
-     * Inline dynamic proxy configuration (appended to {@link #dynamicProxyConfigurationFiles}).
+     * Inline dynamic proxy configuration (appended to `dynamicProxyConfigurationFiles`).
      */
     @Parameter
     private List<DynamicProxyModel> dynamicProxies;
diff --git a/documentation/src/main/java/org/apache/geronimo/arthur/documentation/command/Generate.java b/documentation/src/main/java/org/apache/geronimo/arthur/documentation/command/Generate.java
index 55905bd..07e73cd 100644
--- a/documentation/src/main/java/org/apache/geronimo/arthur/documentation/command/Generate.java
+++ b/documentation/src/main/java/org/apache/geronimo/arthur/documentation/command/Generate.java
@@ -23,7 +23,10 @@
 import static java.util.stream.Collectors.joining;
 import static org.asciidoctor.SafeMode.UNSAFE;
 
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.PrintStream;
 import java.io.Writer;
 import java.nio.charset.StandardCharsets;
@@ -181,8 +184,17 @@
                     visitor.visit(staticConfiguration, file -> executor.execute(() -> {
                         final Path target = output.resolve(staticConfiguration.getLocation().relativize(file));
                         ensureExists(target.getParent());
+                        final String filename = file.getFileName().toString();
                         try {
-                            Files.copy(file, target, StandardCopyOption.REPLACE_EXISTING);
+                            if (filename.endsWith(".js") || filename.endsWith(".css")) { // strip ASF header
+                                try (final BufferedReader reader = Files.newBufferedReader(file);
+                                     final InputStream stream = new ByteArrayInputStream(
+                                             reader.lines().skip(16/*header*/).collect(joining("\n")).getBytes(StandardCharsets.UTF_8))) {
+                                    Files.copy(stream, target, StandardCopyOption.REPLACE_EXISTING);
+                                }
+                            } else {
+                                Files.copy(file, target, StandardCopyOption.REPLACE_EXISTING);
+                            }
                         } catch (final IOException e) {
                             throw new IllegalStateException(e);
                         }
@@ -224,7 +236,7 @@
         ensureExists(workdir);
         final Collection<MojoParser.Parameter> parameters = mojoParser.extractParameters(mojo);
         try (final Writer writer = Files.newBufferedWriter(workdir.resolve("generated_" + marker + "_mojo.adoc"))) {
-            writer.write("[opts=\"header\",role=\"table table-bordered\"]\n" +
+            writer.write("[opts=\"header\",role=\"table table-bordered\",cols=\"2,1,3\"]\n" +
                     "|===\n" +
                     "|Name|Type|Description\n\n" +
                     parameters.stream()
diff --git a/documentation/src/main/java/org/apache/geronimo/arthur/documentation/mojo/MojoParser.java b/documentation/src/main/java/org/apache/geronimo/arthur/documentation/mojo/MojoParser.java
index 2017fd2..a372048 100644
--- a/documentation/src/main/java/org/apache/geronimo/arthur/documentation/mojo/MojoParser.java
+++ b/documentation/src/main/java/org/apache/geronimo/arthur/documentation/mojo/MojoParser.java
@@ -66,6 +66,7 @@
                             if (generics > 0) {
                                 type = type.substring(0, generics);
                             }
+                            type = type.substring(type.indexOf('.') + 1); // nested classes dont need enclosing
                             parameters.add(new Parameter(
                                     line.substring(nameStart, line.length() - ";".length()),
                                     type,
diff --git a/documentation/src/static/css/arthur.css b/documentation/src/static/css/arthur.css
index c1a8ce8..69adc94 100644
--- a/documentation/src/static/css/arthur.css
+++ b/documentation/src/static/css/arthur.css
@@ -14,24 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+* {text-align: justify;}
+.page-header {padding-top: 100px;min-height: calc(100vh - 50px);}
+#footer {font-style: italic;font-size: smaller;}
+table > thead > tr > th {background-color: lightslategray;}
+.landing-images {padding-bottom: 1.5rem;}
+.center-p > p {text-align: center;}
+.admonitionblock {padding-top: 0.5rem;padding-bottom: 0.5rem;}
 
-* {
-  text-align: justify;
-}
-.page-header {
-  padding-top: 100px;
-  min-height: calc(100vh - 50px);
-}
-#footer {
-  font-style: italic;
-  font-size: smaller;
-}
-table > thead > tr > th {
-  background-color: lightslategray;
-}
-.landing-images {
-  padding-bottom: 1.5rem;
-}
-.center-p > p {
-  text-align: center;
-}
+// asciidoctor icons
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
