From 5ea37606edf781f25d9661a09dcc02b8a9f3c7dc Mon Sep 17 00:00:00 2001 From: George Grigalashvili Date: Sun, 24 Dec 2023 02:17:31 +0100 Subject: [PATCH] ci: update workflows to Java 21 (#3191) This also makes the Javadoc stylesheet compatible with Java 21 and updates highlight.js from 11.5.1 to 11.9.0. Co-authored-by: martinfrancois Co-authored-by: georgebax Co-authored-by: grigala Co-authored-by: Stefano Cordio --- .github/workflows/binary-compatibility.yml | 4 +- .github/workflows/cross-version.yml | 2 +- .github/workflows/dependency-graph.yml | 6 +- .github/workflows/main.yml | 8 +- .github/workflows/pitest-receive-pr.yml | 2 +- .github/workflows/pitest-updated-pr.yml | 2 +- .github/workflows/release.yml | 2 +- assertj-core/pom.xml | 2 +- .../core/api/AbstractStringAssert.java | 16 +- .../src/main/javadoc/assertj-javadoc.css | 871 +++++++++++++----- assertj-guava/pom.xml | 3 +- .../src/main/javadoc/assertj-javadoc.css | 871 +++++++++++++----- 12 files changed, 1300 insertions(+), 489 deletions(-) diff --git a/.github/workflows/binary-compatibility.yml b/.github/workflows/binary-compatibility.yml index 13135f7b976..f9dafea80fa 100644 --- a/.github/workflows/binary-compatibility.yml +++ b/.github/workflows/binary-compatibility.yml @@ -22,7 +22,7 @@ jobs: - uses: actions/setup-java@v4 with: distribution: 'zulu' - java-version: 17 + java-version: '21' cache: 'maven' - name: Checkout `${{ github.base_ref }}` into subfolder @@ -54,7 +54,7 @@ jobs: - uses: actions/setup-java@v4 with: distribution: 'zulu' - java-version: 17 + java-version: '21' cache: 'maven' - name: Compare with the latest release diff --git a/.github/workflows/cross-version.yml b/.github/workflows/cross-version.yml index f3cf3769e13..b554210dfc9 100644 --- a/.github/workflows/cross-version.yml +++ b/.github/workflows/cross-version.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - java: [21, 22, 23] + java: [22, 23] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/dependency-graph.yml b/.github/workflows/dependency-graph.yml index 66960de9d85..9e3dbde2f8a 100644 --- a/.github/workflows/dependency-graph.yml +++ b/.github/workflows/dependency-graph.yml @@ -17,8 +17,8 @@ jobs: - name: Set up JDK 17 uses: actions/setup-java@v4 with: - java-version: '17' - distribution: 'temurin' - cache: maven + distribution: 'zulu' + java-version: '21' + cache: 'maven' - name: Update dependency graph uses: advanced-security/maven-dependency-submission-action@v3 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 81d87fb2bc5..4629c885588 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,7 +22,7 @@ jobs: uses: actions/setup-java@v4 with: distribution: 'zulu' - java-version: 17 + java-version: '21' cache: 'maven' - name: Test run: ./mvnw $MAVEN_ARGS verify @@ -38,8 +38,8 @@ jobs: uses: actions/setup-java@v4 with: distribution: 'zulu' - java-version: '17' - cache: maven + java-version: '21' + cache: 'maven' - name: Generate Javadoc run: ./mvnw $MAVEN_ARGS -DskipTests package javadoc:javadoc @@ -57,7 +57,7 @@ jobs: uses: actions/setup-java@v4 with: distribution: 'zulu' - java-version: 17 + java-version: '21' cache: 'maven' - name: Test with Sonar run: > diff --git a/.github/workflows/pitest-receive-pr.yml b/.github/workflows/pitest-receive-pr.yml index 384380b4a1c..d28791cc01c 100644 --- a/.github/workflows/pitest-receive-pr.yml +++ b/.github/workflows/pitest-receive-pr.yml @@ -35,7 +35,7 @@ jobs: uses: actions/setup-java@v4 with: distribution: 'zulu' - java-version: 17 + java-version: '21' cache: 'maven' - name: run pitest # pitest has been bound to a profile called pitest for normal running diff --git a/.github/workflows/pitest-updated-pr.yml b/.github/workflows/pitest-updated-pr.yml index 394c7ae162f..97dbe411691 100644 --- a/.github/workflows/pitest-updated-pr.yml +++ b/.github/workflows/pitest-updated-pr.yml @@ -33,7 +33,7 @@ jobs: uses: actions/setup-java@v4 with: distribution: 'zulu' - java-version: 17 + java-version: '21' - name: Download artifact uses: dawidd6/action-download-artifact@v3 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 35842f1e1b0..4cd8bbab215 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,7 +18,7 @@ jobs: uses: actions/setup-java@v4 with: distribution: 'zulu' - java-version: 17 + java-version: '21' server-id: ossrh server-username: OSSRH_USERNAME server-password: OSSRH_TOKEN diff --git a/assertj-core/pom.xml b/assertj-core/pom.xml index 000c9bce026..21d5474a9ce 100644 --- a/assertj-core/pom.xml +++ b/assertj-core/pom.xml @@ -453,7 +453,7 @@ - + ]]> diff --git a/assertj-core/src/main/java/org/assertj/core/api/AbstractStringAssert.java b/assertj-core/src/main/java/org/assertj/core/api/AbstractStringAssert.java index 164f2727045..0dcad5786b5 100644 --- a/assertj-core/src/main/java/org/assertj/core/api/AbstractStringAssert.java +++ b/assertj-core/src/main/java/org/assertj/core/api/AbstractStringAssert.java @@ -53,7 +53,7 @@ protected AbstractStringAssert(String actual, Class selfType) { * assertThat("abc").isLessThan("bcd") * .isLessThan("b") * .isLessThan("abca") - * .usingComparator(CASE_INSENSITIVE) + * .usingComparator(String.CASE_INSENSITIVE_ORDER) * .isLessThan("BCD"); * * // assertions fail @@ -84,7 +84,7 @@ public SELF isLessThan(String other) { * .isLessThanOrEqualTo("abc") * .isLessThanOrEqualTo("b") * .isLessThanOrEqualTo("abca") - * .usingComparator(CASE_INSENSITIVE) + * .usingComparator(String.CASE_INSENSITIVE_ORDER) * .isLessThanOrEqualTo("ABC"); * * // assertions fail @@ -113,7 +113,7 @@ public SELF isLessThanOrEqualTo(String other) { * assertThat("xyz").isGreaterThan("abc") * .isGreaterThan("xy") * .isGreaterThan("ABC"); - * assertThat("XYZ").usingComparator(CASE_INSENSITIVE) + * assertThat("XYZ").usingComparator(String.CASE_INSENSITIVE_ORDER) * .isGreaterThan("abc"); * * // assertions fail @@ -144,7 +144,7 @@ public SELF isGreaterThan(String other) { * .isGreaterThanOrEqualTo("xyz") * .isGreaterThanOrEqualTo("xy") * .isGreaterThanOrEqualTo("ABC"); - * assertThat("XYZ").usingComparator(CASE_INSENSITIVE) + * assertThat("XYZ").usingComparator(String.CASE_INSENSITIVE_ORDER) * .isGreaterThanOrEqualTo("abc"); * * // assertions fail @@ -175,7 +175,7 @@ public SELF isGreaterThanOrEqualTo(String other) { * .isBetween("aa", "ab") * .isBetween("ab", "ab") * .isBetween("a", "c") - * .usingComparator(CASE_INSENSITIVE) + * .usingComparator(String.CASE_INSENSITIVE_ORDER) * .isBetween("AA", "AC"); * * // assertions fail @@ -206,7 +206,7 @@ public SELF isBetween(String startInclusive, String endInclusive) { *
 // assertions succeed
    * assertThat("ab").isStrictlyBetween("aa", "ac")
    *                 .isStrictlyBetween("a", "c")
-   *                 .usingComparator(CASE_INSENSITIVE)
+   *                 .usingComparator(String.CASE_INSENSITIVE_ORDER)
    *                 .isStrictlyBetween("AA", "AC");
    *
    * // assertions fail
@@ -314,7 +314,7 @@ public AbstractByteArrayAssert decodedAsBase64() {
    * 

* Examples : *

 // assertions succeed
-   * assertThat("abc").usingComparator(CASE_INSENSITIVE)
+   * assertThat("abc").usingComparator(String.CASE_INSENSITIVE_ORDER)
    *                  .isEqualTo("Abc")
    *                  .isEqualTo("ABC");
    *
@@ -339,7 +339,7 @@ public SELF usingComparator(Comparator customComparator) {
    * 

* Examples : *

 // assertions succeed
-   * assertThat("abc").usingComparator(CASE_INSENSITIVE, "String case insensitive comparator")
+   * assertThat("abc").usingComparator(String.CASE_INSENSITIVE_ORDER, "String case insensitive comparator")
    *                  .isEqualTo("Abc")
    *                  .isEqualTo("ABC");
    *
diff --git a/assertj-core/src/main/javadoc/assertj-javadoc.css b/assertj-core/src/main/javadoc/assertj-javadoc.css
index e1b1f401efd..b80f2f971d7 100644
--- a/assertj-core/src/main/javadoc/assertj-javadoc.css
+++ b/assertj-core/src/main/javadoc/assertj-javadoc.css
@@ -4,18 +4,73 @@
 
 @import url('resources/fonts/dejavu.css');
 
+/*
+ * These CSS custom properties (variables) define the core color and font
+ * properties used in this stylesheet.
+ */
+:root {
+    /* body, block and code fonts */
+    --body-font-family: Verdana, Geneva, sans-serif;
+    --block-font-family: Verdana, Geneva, serif;
+    --code-font-family: 'DejaVu Sans Mono', monospace;
+    /* Base font sizes for body and code elements */
+    --body-font-size: 14px;
+    --code-font-size: 14px;
+    /* Text colors for body and block elements */
+    --body-text-color: #000000;
+    --block-text-color: #000000;
+    /* Background colors for various structural elements */
+    --body-background-color: #edd9a6;
+    --section-background-color: #e9d195;
+    --detail-background-color: #edd9a6;
+    /* Colors for navigation bar and table captions */
+    --navbar-background-color: #232323;
+    --navbar-text-color: #edd9a6;
+    /* Background color for subnavigation and various headers */
+    --subnav-background-color: #e5c880;
+    /* Background and text colors for selected tabs and navigation items */
+    --selected-background-color: #e5c880;
+    --selected-text-color: #000000;
+    --selected-link-color: #861203;
+    /* Background colors for generated tables */
+    --even-row-color: #edd9a6;
+    --odd-row-color: #e7ce8e;
+    /* Text color for page title */
+    --title-color: #000000;
+    /* Text colors for links */
+    --link-color: #861203;
+    --link-color-active: #641003;
+    /* Snippet colors */
+    --snippet-background-color: #ebecee;
+    --snippet-text-color: var(--block-text-color);
+    --snippet-highlight-color: #f7c590;
+    /* Border colors for structural elements and user defined tables */
+    --border-color: #e5c880;
+    --table-border-color: #000000;
+    /* Search input colors */
+    --search-input-background-color: #edd9a6;
+    --search-input-text-color: #000000;
+    --search-input-placeholder-color: #909090;
+    /* Highlight color for active search tag target */
+    --search-tag-highlight-color: #ffff00;
+    /* Adjustments for icon and active background colors of copy-to-clipboard buttons */
+    --copy-icon-brightness: 100%;
+    --copy-button-background-color-active: rgba(168, 168, 176, 0.3);
+    /* Colors for invalid tag notifications */
+    --invalid-tag-background-color: #ffe6e6;
+    --invalid-tag-text-color: #000000;
+}
 /*
  * Styles for individual HTML elements.
  *
  * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular
  * HTML element throughout the page.
  */
-
 body {
-    background-color:#EDD9A6;
-    color:#000000;
-    font-family:Verdana, Geneva, sans-serif;
-    font-size:14px;
+    background-color:var(--body-background-color);
+    color:var(--body-text-color);
+    font-family:var(--body-font-family);
+    font-size:var(--body-font-size);
     margin:0;
     padding:0;
     height:100%;
@@ -31,59 +86,59 @@ iframe {
 }
 a:link, a:visited {
     text-decoration:none;
-    color:#861203;
-    font-weight: bold;
+    color:var(--link-color);
 }
 a[href]:hover, a[href]:focus {
     text-decoration:none;
-    color:#470C03;
-}
-a[name] {
-    color:#000000;
+    color:var(--link-color-active);
 }
 pre {
-    font-family:'DejaVu Sans Mono', monospace;
-    font-size:14px;
+    font-family:var(--code-font-family);
+    font-size:1em;
 }
 h1 {
-    font-size:20px;
+    font-size:1.428em;
 }
 h2 {
-    font-size:18px;
+    font-size:1.285em;
 }
 h3 {
-    font-size:16px;
+    font-size:1.14em;
 }
 h4 {
-    font-size:15px;
+    font-size:1.072em;
 }
 h5 {
-    font-size:14px;
+    font-size:1.001em;
 }
 h6 {
-    font-size:13px;
+    font-size:0.93em;
+}
+/* Disable font boosting for selected elements */
+h1, h2, h3, h4, h5, h6, div.member-signature {
+    max-height: 1000em;
 }
 ul {
     list-style-type:disc;
 }
 code, tt {
-    font-family:'DejaVu Sans Mono', monospace;
+    font-family:var(--code-font-family);
 }
 :not(h1, h2, h3, h4, h5, h6) > code,
 :not(h1, h2, h3, h4, h5, h6) > tt {
-    font-size:14px;
+    font-size:var(--code-font-size);
     padding-top:4px;
     margin-top:8px;
     line-height:1.4em;
 }
 dt code {
-    font-family:'DejaVu Sans Mono', monospace;
-    font-size:14px;
+    font-family:var(--code-font-family);
+    font-size:1em;
     padding-top:4px;
 }
 .summary-table dt code {
-    font-family:'DejaVu Sans Mono', monospace;
-    font-size:14px;
+    font-family:var(--code-font-family);
+    font-size:1em;
     vertical-align:top;
     padding-top:4px;
 }
@@ -91,8 +146,8 @@ sup {
     font-size:8px;
 }
 button {
-    font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif;
-    font-size: 14px;
+    font-family: var(--body-font-family);
+    font-size: 1em;
 }
 /*
  * Styles for HTML generated by javadoc.
@@ -103,74 +158,67 @@ button {
 /*
  * Styles for document title and copyright.
  */
-.clear {
-    clear:both;
-    height:0;
-    overflow:hidden;
-}
 .about-language {
     float:right;
     padding:0 21px 8px 8px;
-    font-size:11px;
+    font-size:0.915em;
     margin-top:-9px;
     height:2.9em;
 }
 .legal-copy {
     margin-left:.5em;
 }
-.tab {
-    background-color:#0066FF;
-    color:#EDD9A6;
-    padding:8px;
-    width:5em;
-    font-weight:bold;
-}
 /*
  * Styles for navigation bar.
  */
 @media screen {
-    .flex-box {
+    div.flex-box {
         position:fixed;
         display:flex;
         flex-direction:column;
         height: 100%;
         width: 100%;
     }
-    .flex-header {
+    header.flex-header {
         flex: 0 0 auto;
     }
-    .flex-content {
+    div.flex-content {
         flex: 1 1 auto;
         overflow-y: auto;
     }
 }
 .top-nav {
-    background-color:#232323;
-    color:#EDD9A6;
+    background-color:var(--navbar-background-color);
+    color:var(--navbar-text-color);
     float:left;
-    padding:0;
     width:100%;
     clear:right;
     min-height:2.8em;
-    padding-top:10px;
+    padding:10px 0 0 0;
     overflow:hidden;
-    font-size:12px;
+    font-size:0.857em;
+}
+button#navbar-toggle-button {
+    display:none;
+}
+ul.sub-nav-list-small {
+    display: none;
 }
 .sub-nav {
-    background-color:#e5c880;
+    background-color:var(--subnav-background-color);
     float:left;
     width:100%;
     overflow:hidden;
-    font-size:12px;
+    font-size:0.857em;
 }
 .sub-nav div {
     clear:left;
     float:left;
-    padding:0 0 5px 6px;
+    padding:6px;
     text-transform:uppercase;
 }
-.sub-nav .nav-list {
-    padding-top:5px;
+.sub-nav .sub-nav-list {
+    padding-top:4px;
 }
 ul.nav-list {
     display:block;
@@ -190,34 +238,28 @@ ul.nav-list li {
 }
 .sub-nav .nav-list-search {
     float:right;
-    margin:0 0 0 0;
-    padding:5px 6px;
+    margin:0;
+    padding:6px;
     clear:none;
-}
-.nav-list-search label {
+    text-align:right;
     position:relative;
-    right:-16px;
 }
 ul.sub-nav-list li {
     list-style:none;
     float:left;
-    padding-top:10px;
 }
 .top-nav a:link, .top-nav a:active, .top-nav a:visited {
-    color:#EDD9A6;
+    color:var(--navbar-text-color);
     text-decoration:none;
     text-transform:uppercase;
 }
 .top-nav a:hover {
-    text-decoration:none;
-    color:#470C03;
-    text-transform:uppercase;
+    color:var(--link-color-active);
 }
 .nav-bar-cell1-rev {
-    background-color:#e5c880;
-    color:#000000;
+    background-color:var(--selected-background-color);
+    color:var(--selected-text-color);
     margin: auto 5px;
-    font-weight: bold;
 }
 .skip-nav {
     position:absolute;
@@ -234,30 +276,30 @@ ul.sub-nav-list li {
     }
 }
 /*
- * Styles for page header and footer.
+ * Styles for page header.
  */
 .title {
-    color:#000000;
+    color:var(--title-color);
     margin:10px 0;
 }
 .sub-title {
     margin:5px 0 0 0;
 }
-.header ul {
-    margin:0 0 15px 0;
-    padding:0;
+ul.contents-list {
+    margin: 0 0 15px 0;
+    padding: 0;
+    list-style: none;
 }
-.header ul li, .footer ul li {
-    list-style:none;
-    font-size:13px;
+ul.contents-list li {
+    font-size:0.93em;
 }
 /*
  * Styles for headings.
  */
 body.class-declaration-page .summary h2,
 body.class-declaration-page .details h2,
-body.class-use-page  h2,
-body.module-declaration-page  .block-list h2 {
+body.class-use-page h2,
+body.module-declaration-page .block-list h2 {
     font-style: italic;
     padding:0;
     margin:15px 0;
@@ -265,8 +307,8 @@ body.module-declaration-page  .block-list h2 {
 body.class-declaration-page .summary h3,
 body.class-declaration-page .details h3,
 body.class-declaration-page .summary .inherited-list h2 {
-    background-color:#e5c880;
-    border:1px solid #e5c880;
+    background-color:var(--subnav-background-color);
+    border:1px solid var(--border-color);
     margin:0 0 6px -8px;
     padding:7px 5px;
 }
@@ -279,16 +321,16 @@ main {
     position:relative;
 }
 dl.notes > dt {
-    font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif;
-    font-size:12px;
+    font-family: var(--body-font-family);
+    font-size:0.856em;
     font-weight:bold;
     margin:10px 0 0 0;
-    color:#000000;
+    color:var(--body-text-color);
 }
 dl.notes > dd {
     margin:5px 10px 10px 0;
-    font-size:14px;
-    font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
+    font-size:1em;
+    font-family:var(--block-font-family)
 }
 dl.name-value > dt {
     margin-left:1px;
@@ -333,121 +375,160 @@ ul.summary-list > li {
     margin-bottom:15px;
     line-height:1.4;
 }
+ul.ref-list {
+  padding:0;
+  margin:0;
+}
+ul.ref-list > li {
+    list-style:none;
+}
 .summary-table dl, .summary-table dl dt, .summary-table dl dd {
     margin-top:0;
     margin-bottom:1px;
 }
-ul.see-list, ul.see-list-long {
+ul.tag-list, ul.tag-list-long {
     padding-left: 0;
     list-style: none;
 }
-ul.see-list li {
+ul.tag-list li {
     display: inline;
 }
-ul.see-list li:not(:last-child):after,
-ul.see-list-long li:not(:last-child):after {
+ul.tag-list li:not(:last-child):after,
+ul.tag-list-long li:not(:last-child):after
+{
     content: ", ";
     white-space: pre-wrap;
 }
+ul.preview-feature-list {
+    list-style: none;
+    margin:0;
+    padding:0.1em;
+    line-height: 1.6em;
+}
 /*
  * Styles for tables.
  */
 .summary-table, .details-table {
     width:100%;
     border-spacing:0;
-    border-left:1px solid #e9d195;
-    border-right:1px solid #e9d195;
-    border-bottom:1px solid #e9d195;
+    border:1px solid var(--border-color);
+    border-top:0;
     padding:0;
 }
 .caption {
     position:relative;
     text-align:left;
     background-repeat:no-repeat;
-    color:#000000;
-    font-weight:bold;
+    color:var(--selected-text-color);
     clear:none;
     overflow:hidden;
-    padding:0;
-    padding-top:10px;
-    padding-left:1px;
+    padding: 10px 0 0 1px;
     margin:0;
-    white-space:pre;
 }
 .caption a:link, .caption a:visited {
-    color:#861203;
+    color:var(--selected-link-color);
 }
 .caption a:hover,
 .caption a:active {
-    color:#470C03;
+    color:var(--navbar-text-color);
 }
 .caption span {
+    font-weight:bold;
     white-space:nowrap;
-    padding-top:5px;
-    padding-left:12px;
-    padding-right:12px;
-    padding-bottom:7px;
+    padding:5px 12px 7px 12px;
     display:inline-block;
     float:left;
-    background-color:#E5C880;
+    background-color:var(--selected-background-color);
     border: none;
     height:16px;
 }
 div.table-tabs {
     padding:10px 0 0 1px;
-    margin:0;
+    margin:10px 0 0 0;
 }
 div.table-tabs > button {
-   border: none;
-   cursor: pointer;
-   padding: 5px 12px 7px 12px;
-   font-weight: bold;
-   margin-right: 3px;
+    border: none;
+    cursor: pointer;
+    padding: 5px 12px 7px 12px;
+    font-weight: bold;
+    margin-right: 8px;
 }
-div.table-tabs > button.active-table-tab {
-   background: #E5C880;
-   color: #000000;
+div.table-tabs > .active-table-tab {
+    background: var(--selected-background-color);
+    color: var(--selected-text-color);
 }
 div.table-tabs > button.table-tab {
-   background: #232323;
-   color: #EDD9A6;
+    background: var(--navbar-background-color);
+    color: var(--navbar-text-color);
+}
+.two-column-search-results {
+    display: grid;
+    grid-template-columns: minmax(400px, max-content) minmax(400px, auto);
+}
+div.checkboxes {
+    line-height: 2em;
+}
+div.checkboxes > span {
+    margin-left: 10px;
+}
+div.checkboxes > label {
+    margin-left: 8px;
+    white-space: nowrap;
+}
+div.checkboxes > label > input {
+    margin: 0 2px;
 }
 .two-column-summary {
     display: grid;
-    grid-template-columns: minmax(15%, max-content) minmax(15%, auto);
+    grid-template-columns: minmax(25%, max-content) minmax(25%, auto);
 }
 .three-column-summary {
     display: grid;
-    grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, auto);
+    grid-template-columns: minmax(15%, max-content) minmax(20%, max-content) minmax(20%, auto);
+}
+.three-column-release-summary {
+    display: grid;
+    grid-template-columns: minmax(40%, max-content) minmax(10%, max-content) minmax(40%, auto);
 }
 .four-column-summary {
     display: grid;
-    grid-template-columns: minmax(10%, max-content) minmax(10%, max-content) minmax(10%, max-content) minmax(10%, auto);
+    grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, max-content) minmax(15%, auto);
 }
-@media screen and (max-width: 600px) {
-    .two-column-summary {
+@media screen and (max-width: 1000px) {
+    .four-column-summary {
         display: grid;
-        grid-template-columns: 1fr;
+        grid-template-columns: minmax(15%, max-content) minmax(15%, auto);
     }
 }
 @media screen and (max-width: 800px) {
+    .two-column-search-results {
+        display: grid;
+        grid-template-columns: minmax(40%, max-content) minmax(40%, auto);
+    }
     .three-column-summary {
         display: grid;
         grid-template-columns: minmax(10%, max-content) minmax(25%, auto);
     }
-    .three-column-summary .col-last {
+    .three-column-release-summary {
+        display: grid;
+        grid-template-columns: minmax(70%, max-content) minmax(30%, max-content)
+    }
+    .three-column-summary .col-last,
+    .three-column-release-summary .col-last{
         grid-column-end: span 2;
     }
 }
-@media screen and (max-width: 1000px) {
-    .four-column-summary {
+@media screen and (max-width: 600px) {
+    .two-column-summary {
         display: grid;
-        grid-template-columns: minmax(15%, max-content) minmax(15%, auto);
+        grid-template-columns: 1fr;
     }
 }
 .summary-table > div, .details-table > div {
     text-align:left;
     padding: 8px 3px 3px 7px;
+    overflow-x: auto;
+    scrollbar-width: thin;
 }
 .col-first, .col-second, .col-last, .col-constructor-name, .col-summary-item-name {
     vertical-align:top;
@@ -456,14 +537,43 @@ div.table-tabs > button.table-tab {
     padding-bottom:3px;
 }
 .table-header {
-    background:#E5C880;
+    background:var(--subnav-background-color);
     font-weight: bold;
 }
+/* Sortable table columns */
+.table-header[onclick] {
+    cursor: pointer;
+}
+.table-header[onclick]::after {
+    content:"";
+    display:inline-block;
+    background-image:url('data:image/svg+xml; utf8, \
+     \
+    ');
+    background-size:100% 100%;
+    width:9px;
+    height:14px;
+    margin-left:4px;
+    margin-bottom:-3px;
+}
+.table-header[onclick].sort-asc::after {
+    background-image:url('data:image/svg+xml; utf8, \
+     \
+     \
+    ');
+
+}
+.table-header[onclick].sort-desc::after {
+    background-image:url('data:image/svg+xml; utf8, \
+     \
+     \
+    ');
+}
 .col-first, .col-first {
-    font-size:13px;
+    font-size:0.93em;
 }
 .col-second, .col-second, .col-last, .col-constructor-name, .col-summary-item-name, .col-last {
-    font-size:13px;
+    font-size:0.93em;
 }
 .col-first, .col-second, .col-constructor-name {
     vertical-align:top;
@@ -477,31 +587,21 @@ div.table-tabs > button.table-tab {
 .col-first a:link, .col-first a:visited,
 .col-second a:link, .col-second a:visited,
 .col-constructor-name a:link, .col-constructor-name a:visited,
-.col-summary-item-name a:link, .col-summary-item-name a:visited,
-.constant-values-container a:link, .constant-values-container a:visited,
-.all-classes-container a:link, .all-classes-container a:visited,
-.all-packages-container a:link, .all-packages-container a:visited {
+.col-summary-item-name a:link, .col-summary-item-name a:visited {
     font-weight:bold;
 }
-.table-sub-heading-color {
-    background-color:#EEEEFF;
-}
 .even-row-color, .even-row-color .table-header {
-    background-color:#EDD9A6;
+    background-color:var(--even-row-color);
 }
 .odd-row-color, .odd-row-color .table-header {
-    background-color:#E7CE8E;
+    background-color:var(--odd-row-color);
 }
 /*
  * Styles for contents.
  */
-.deprecated-content {
-    margin:0;
-    padding:10px 0;
-}
 div.block {
-    font-size:14px;
-    font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
+    font-size:var(--body-font-size);
+    font-family:var(--block-font-family);
 }
 .col-last div {
     padding-top:0;
@@ -513,8 +613,8 @@ div.block {
 .package-signature,
 .type-signature,
 .member-signature {
-    font-family:'DejaVu Sans Mono', monospace;
-    font-size:14px;
+    font-family:var(--code-font-family);
+    font-size:1em;
     margin:14px 0;
     white-space: pre-wrap;
 }
@@ -537,21 +637,17 @@ div.block {
  * Styles for formatting effect.
  */
 .source-line-no {
-    color:green;
+    /* Color of line numbers in source pages can be set via custom property below */
+    color:var(--source-linenumber-color, green);
     padding:0 30px 0 0;
 }
-h1.hidden {
-    visibility:hidden;
-    overflow:hidden;
-    font-size:10px;
-}
 .block {
     display:block;
     margin:0 10px 5px 0;
-    color:#000000;
+    color:var(--block-text-color);
 }
-.deprecated-label, .descfrm-type-label, .implementation-label, .member-name-label, .member-name-link,
-.module-label-in-package, .module-label-in-type, .override-specify-label, .package-label-in-type,
+.deprecated-label, .description-from-type-label, .implementation-label, .member-name-link,
+.module-label-in-package, .module-label-in-type, .package-label-in-type,
 .package-hierarchy-label, .type-name-label, .type-name-link, .search-tag-link, .preview-label {
     font-weight:bold;
 }
@@ -559,8 +655,8 @@ h1.hidden {
     font-style:italic;
 }
 .deprecation-block {
-    font-size:14px;
-    font-family:Verdana, Geneva, sans-serif;
+    font-size:1em;
+    font-family:var(--block-font-family);
     border-style:solid;
     border-width:thin;
     border-radius:10px;
@@ -570,8 +666,8 @@ h1.hidden {
     display:inline-block;
 }
 .preview-block {
-    font-size:14px;
-    font-family:Verdana, Geneva, sans-serif;
+    font-size:1em;
+    font-family:var(--block-font-family);
     border-style:solid;
     border-width:thin;
     border-radius:10px;
@@ -583,6 +679,19 @@ h1.hidden {
 div.block div.deprecation-comment {
     font-style:normal;
 }
+details.invalid-tag, span.invalid-tag {
+    font-size:1em;
+    font-family:var(--block-font-family);
+    color: var(--invalid-tag-text-color);
+    background: var(--invalid-tag-background-color);
+    border: thin solid var(--table-border-color);
+    border-radius:2px;
+    padding: 2px 4px;
+    display:inline-block;
+}
+details summary {
+    cursor: pointer;
+}
 /*
  * Styles specific to HTML5 elements.
  */
@@ -592,62 +701,93 @@ main, nav, header, footer, section {
 /*
  * Styles for javadoc search.
  */
+.ui-state-active {
+    /* Overrides the color of selection used in jQuery UI */
+    background: var(--selected-background-color);
+    border: 1px solid var(--selected-background-color);
+    color: var(--selected-text-color);
+}
 .ui-autocomplete-category {
     font-weight:bold;
     font-size:15px;
     padding:7px 0 7px 3px;
-    background-color:#232323;
-    color:#EDD9A6;
-}
-.result-item {
-    font-size:13px;
+    background-color:var(--navbar-background-color);
+    color:var(--navbar-text-color);
 }
 .ui-autocomplete {
     max-height:85%;
     max-width:65%;
-    overflow-y:scroll;
-    overflow-x:scroll;
+    overflow-y:auto;
+    overflow-x:auto;
+    scrollbar-width: thin;
     white-space:nowrap;
     box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23);
 }
 ul.ui-autocomplete {
     position:fixed;
-    z-index:999999;
+    z-index:1;
+    background-color: var(--body-background-color);
 }
-ul.ui-autocomplete  li {
+ul.ui-autocomplete li {
     float:left;
     clear:both;
-    width:100%;
+    min-width:100%;
+}
+ul.ui-autocomplete li.ui-static-link {
+    position:sticky;
+    bottom:0;
+    left:0;
+    background: var(--subnav-background-color);
+    padding: 5px 0;
+    font-family: var(--body-font-family);
+    font-size: 0.93em;
+    font-weight: bolder;
+    z-index: 2;
+}
+li.ui-static-link a, li.ui-static-link a:visited {
+    text-decoration:none;
+    color:var(--link-color);
+    float:right;
+    margin-right:20px;
+}
+.ui-autocomplete .result-item {
+    font-size: inherit;
 }
-.result-highlight {
+.ui-autocomplete .result-highlight {
     font-weight:bold;
 }
-#search-input {
+#search-input, #page-search-input {
     background-image:url('resources/glass.png');
     background-size:13px;
     background-repeat:no-repeat;
     background-position:2px 3px;
+    background-color: var(--search-input-background-color);
+    color: var(--search-input-text-color);
+    border-color: var(--border-color);
     padding-left:20px;
-    position:relative;
-    right:-18px;
-    width:400px;
+    width: 250px;
+    margin: 0;
+}
+#search-input {
+    margin-left: 4px;
 }
 #reset-button {
-    background-color: rgb(255,255,255);
+    background-color: transparent;
     background-image:url('resources/x.png');
-    background-position:center;
     background-repeat:no-repeat;
-    background-size:12px;
-    border:0 none;
-    width:16px;
-    height:16px;
-    position:relative;
-    left:-4px;
-    top:-4px;
-    font-size:0px;
+    background-size:contain;
+    border:0;
+    border-radius:0;
+    width:12px;
+    height:12px;
+    position:absolute;
+    right:12px;
+    top:10px;
+    font-size:0;
 }
-.watermark {
-    color:#545454;
+::placeholder {
+    color:var(--search-input-placeholder-color);
+    opacity: 1;
 }
 .search-tag-desc-result {
     font-style:italic;
@@ -658,13 +798,55 @@ ul.ui-autocomplete  li {
     font-size:12px;
 }
 .search-tag-result:target {
-    background-color:yellow;
+    background-color:var(--search-tag-highlight-color);
 }
-.module-graph span {
+details.page-search-details {
+    display: inline-block;
+}
+div#result-container {
+    font-size: 1em;
+}
+div#result-container a.search-result-link {
+    padding: 0;
+    margin: 4px 0;
+    width: 100%;
+}
+#result-container .result-highlight {
+    font-weight:bolder;
+}
+.page-search-info {
+    background-color: var(--subnav-background-color);
+    border-radius: 3px;
+    border: 0 solid var(--border-color);
+    padding: 0 8px;
+    overflow: hidden;
+    height: 0;
+    transition: all 0.2s ease;
+}
+div.table-tabs > button.table-tab {
+    background: var(--navbar-background-color);
+    color: var(--navbar-text-color);
+}
+.page-search-header {
+    padding: 5px 12px 7px 12px;
+    font-weight: bold;
+    margin-right: 3px;
+    background-color:var(--navbar-background-color);
+    color:var(--navbar-text-color);
+    display: inline-block;
+}
+button.page-search-header {
+    border: none;
+    cursor: pointer;
+}
+span#page-search-link {
+    text-decoration: underline;
+}
+.module-graph span, .sealed-graph span {
     display:none;
     position:absolute;
 }
-.module-graph:hover span {
+.module-graph:hover span, .sealed-graph:hover span {
     display:block;
     margin: -100px 0 0 100px;
     z-index: 1;
@@ -677,14 +859,14 @@ section.class-description {
 }
 .summary section[class$="-summary"], .details section[class$="-details"],
 .class-uses .detail, .serialized-class-details {
-    padding: 0px 20px 5px 10px;
-    border: 1px solid #e5c880;
-    background-color: #e9d195;
+    padding: 0 20px 5px 10px;
+    border: 1px solid var(--border-color);
+    background-color: var(--section-background-color);
 }
 .inherited-list, section[class$="-details"] .detail {
     padding:0 0 5px 8px;
-    background-color:#EDD9A6;
-    border:1px solid #d8ad41;
+    background-color:var(--detail-background-color);
+    border:none;
 }
 .vertical-separator {
     padding: 0 5px;
@@ -701,7 +883,7 @@ ul.help-subtoc > li::before {
   content: "\2022" ;
   padding-right:2px;
 }
-span.help-note {
+.help-note {
     font-style: italic;
 }
 /*
@@ -729,7 +911,111 @@ main a[href*="://"]:focus::after {
         132-240 240 120 120 240-240 132 132V0z" fill="%23470c03"/>\
       ');
 }
-
+/*
+ * Styles for header/section anchor links
+ */
+a.anchor-link {
+    opacity: 0;
+    transition: opacity 0.1s;
+}
+:hover > a.anchor-link {
+    opacity: 80%;
+}
+a.anchor-link:hover,
+a.anchor-link:focus-visible,
+a.anchor-link.visible {
+    opacity: 100%;
+}
+a.anchor-link > img {
+    width: 0.9em;
+    height: 0.9em;
+}
+/*
+ * Styles for copy-to-clipboard buttons
+ */
+button.copy {
+    opacity: 70%;
+    border: none;
+    border-radius: 3px;
+    position: relative;
+    background:none;
+    transition: opacity 0.3s;
+    cursor: pointer;
+}
+:hover > button.copy {
+    opacity: 80%;
+}
+button.copy:hover,
+button.copy:active,
+button.copy:focus-visible,
+button.copy.visible {
+    opacity: 100%;
+}
+button.copy img {
+    position: relative;
+    background: none;
+    filter: brightness(var(--copy-icon-brightness));
+}
+button.copy:active {
+    background-color: var(--copy-button-background-color-active);
+}
+button.copy span {
+    color: var(--body-text-color);
+    position: relative;
+    top: -0.1em;
+    transition: all 0.1s;
+    font-size: 0.76rem;
+    line-height: 1.2em;
+    opacity: 0;
+}
+button.copy:hover span,
+button.copy:focus-visible span,
+button.copy.visible span {
+    opacity: 100%;
+}
+/* search page copy button */
+button#page-search-copy {
+    margin-left: 0.4em;
+    padding:0.3em;
+    top:0.13em;
+}
+button#page-search-copy img {
+    width: 1.2em;
+    height: 1.2em;
+    padding: 0.01em 0;
+    top: 0.15em;
+}
+button#page-search-copy span {
+    color: var(--body-text-color);
+    line-height: 1.2em;
+    padding: 0.2em;
+    top: -0.18em;
+}
+div.page-search-info:hover button#page-search-copy span {
+    opacity: 100%;
+}
+/* snippet copy button */
+button.snippet-copy {
+    position: absolute;
+    top: 6px;
+    right: 6px;
+    height: 1.7em;
+    padding: 2px;
+}
+button.snippet-copy img {
+    width: 18px;
+    height: 18px;
+    padding: 0.05em 0;
+}
+button.snippet-copy span {
+    line-height: 1.2em;
+    padding: 0.2em;
+    position: relative;
+    top: -0.5em;
+}
+div.snippet-container:hover button.snippet-copy span {
+    opacity: 100%;
+}
 /*
  * Styles for user-provided tables.
  *
@@ -776,67 +1062,146 @@ table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless >
 }
 table.plain {
     border-collapse: collapse;
-    border: 1px solid black;
+    border: 1px solid var(--table-border-color);
 }
 table.plain > thead > tr, table.plain > tbody tr, table.plain > tr {
     background-color: transparent;
 }
 table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th,
 table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td {
-    border: 1px solid black;
+    border: 1px solid var(--table-border-color);
 }
 table.striped {
     border-collapse: collapse;
-    border: 1px solid black;
+    border: 1px solid var(--table-border-color);
 }
 table.striped > thead {
-    background-color: #E3E3E3;
+    background-color: var(--subnav-background-color);
 }
 table.striped > thead > tr > th, table.striped > thead > tr > td {
-    border: 1px solid black;
+    border: 1px solid var(--table-border-color);
 }
 table.striped > tbody > tr:nth-child(even) {
-    background-color: #EEE
+    background-color: var(--odd-row-color)
 }
 table.striped > tbody > tr:nth-child(odd) {
-    background-color: #FFF
+    background-color: var(--even-row-color)
 }
 table.striped > tbody > tr > th, table.striped > tbody > tr > td {
-    border-left: 1px solid black;
-    border-right: 1px solid black;
+    border-left: 1px solid var(--table-border-color);
+    border-right: 1px solid var(--table-border-color);
 }
 table.striped > tbody > tr > th {
     font-weight: normal;
 }
 /**
- * Tweak font sizes and paddings for small screens.
+ * Tweak style for small screens.
  */
-@media screen and (max-width: 1050px) {
-    #search-input {
-        width: 300px;
+@media screen and (max-width: 920px) {
+    header.flex-header {
+        max-height: 100vh;
+        overflow-y: auto;
     }
-}
-@media screen and (max-width: 800px) {
-    #search-input {
-        width: 200px;
+    div#navbar-top {
+        height: 2.8em;
+        transition: height 0.35s ease;
+    }
+    ul.nav-list {
+        display: block;
+        width: 40%;
+        float:left;
+        clear: left;
+        margin: 10px 0 0 0;
+        padding: 0;
+    }
+    ul.nav-list li {
+        float: none;
+        padding: 6px;
+        margin-left: 10px;
+        margin-top: 2px;
+    }
+    ul.sub-nav-list-small {
+        display:block;
+        height: 100%;
+        width: 50%;
+        float: right;
+        clear: right;
+        background-color: var(--subnav-background-color);
+        color: var(--body-text-color);
+        margin: 6px 0 0 0;
+        padding: 0;
+    }
+    ul.sub-nav-list-small ul {
+        padding-left: 20px;
+    }
+    ul.sub-nav-list-small a:link, ul.sub-nav-list-small a:visited {
+        color:var(--link-color);
+    }
+    ul.sub-nav-list-small a:hover {
+        color:var(--link-color-active);
     }
-    .top-nav,
-    .bottom-nav {
-        font-size: 11px;
-        padding-top: 6px;
+    ul.sub-nav-list-small li {
+        list-style:none;
+        float:none;
+        padding: 6px;
+        margin-top: 1px;
+        text-transform:uppercase;
+    }
+    ul.sub-nav-list-small > li {
+        margin-left: 10px;
+    }
+    ul.sub-nav-list-small li p {
+        margin: 5px 0;
     }
-    .sub-nav {
-        font-size: 11px;
+    div#navbar-sub-list {
+        display: none;
+    }
+    .top-nav a:link, .top-nav a:active, .top-nav a:visited {
+        display: block;
+    }
+    button#navbar-toggle-button {
+        width: 3.4em;
+        height: 2.8em;
+        background-color: transparent;
+        display: block;
+        float: left;
+        border: 0;
+        margin: 0 10px;
+        cursor: pointer;
+        font-size: 10px;
     }
+    button#navbar-toggle-button .nav-bar-toggle-icon {
+        display: block;
+        width: 24px;
+        height: 3px;
+        margin: 1px 0 4px 0;
+        border-radius: 2px;
+        transition: all 0.1s;
+        background-color: var(--navbar-text-color);
+    }
+    button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(1) {
+        transform: rotate(45deg);
+        transform-origin: 10% 10%;
+        width: 26px;
+    }
+    button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(2) {
+        opacity: 0;
+    }
+    button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(3) {
+        transform: rotate(-45deg);
+        transform-origin: 10% 90%;
+        width: 26px;
+    }
+}
+@media screen and (max-width: 800px) {
     .about-language {
         padding-right: 16px;
     }
-    ul.nav-list li,
-    .sub-nav .nav-list-search {
-        padding: 6px;
+    ul.nav-list li {
+        margin-left: 5px;
     }
-    ul.sub-nav-list li {
-        padding-top: 5px;
+    ul.sub-nav-list-small > li {
+        margin-left: 5px;
     }
     main {
         padding: 10px;
@@ -849,22 +1214,62 @@ table.striped > tbody > tr > th {
         -webkit-text-size-adjust: none;
     }
 }
-@media screen and (max-width: 500px) {
-    #search-input {
-        width: 150px;
-    }
-    .top-nav,
-    .bottom-nav {
-        font-size: 10px;
-    }
-    .sub-nav {
-        font-size: 10px;
-    }
+@media screen and (max-width: 400px) {
     .about-language {
         font-size: 10px;
         padding-right: 12px;
     }
 }
+@media screen and (max-width: 400px) {
+    .nav-list-search {
+        width: 94%;
+    }
+    #search-input, #page-search-input {
+        width: 70%;
+    }
+}
+@media screen and (max-width: 320px) {
+    .nav-list-search > label {
+        display: none;
+    }
+    .nav-list-search {
+        width: 90%;
+    }
+    #search-input, #page-search-input {
+        width: 80%;
+    }
+}
+
+pre.snippet {
+    background-color: var(--snippet-background-color);
+    color: var(--snippet-text-color);
+    padding: 10px;
+    margin: 12px 0;
+    overflow: auto;
+    white-space: pre;
+}
+div.snippet-container {
+    position: relative;
+}
+@media screen and (max-width: 800px) {
+    pre.snippet {
+        padding-top: 26px;
+    }
+    button.snippet-copy {
+        top: 4px;
+        right: 4px;
+    }
+}
+pre.snippet .italic {
+    font-style: italic;
+}
+pre.snippet .bold {
+    font-weight: bold;
+}
+pre.snippet .highlighted {
+    background-color: var(--snippet-highlight-color);
+    border-radius: 10%;
+}
 
 /*
 
diff --git a/assertj-guava/pom.xml b/assertj-guava/pom.xml
index 6ee3bed477e..e16257f8cb7 100644
--- a/assertj-guava/pom.xml
+++ b/assertj-guava/pom.xml
@@ -195,8 +195,9 @@
           
           true
           
-            
+            
             
         ]]>
         
diff --git a/assertj-guava/src/main/javadoc/assertj-javadoc.css b/assertj-guava/src/main/javadoc/assertj-javadoc.css
index e1b1f401efd..b80f2f971d7 100644
--- a/assertj-guava/src/main/javadoc/assertj-javadoc.css
+++ b/assertj-guava/src/main/javadoc/assertj-javadoc.css
@@ -4,18 +4,73 @@
 
 @import url('resources/fonts/dejavu.css');
 
+/*
+ * These CSS custom properties (variables) define the core color and font
+ * properties used in this stylesheet.
+ */
+:root {
+    /* body, block and code fonts */
+    --body-font-family: Verdana, Geneva, sans-serif;
+    --block-font-family: Verdana, Geneva, serif;
+    --code-font-family: 'DejaVu Sans Mono', monospace;
+    /* Base font sizes for body and code elements */
+    --body-font-size: 14px;
+    --code-font-size: 14px;
+    /* Text colors for body and block elements */
+    --body-text-color: #000000;
+    --block-text-color: #000000;
+    /* Background colors for various structural elements */
+    --body-background-color: #edd9a6;
+    --section-background-color: #e9d195;
+    --detail-background-color: #edd9a6;
+    /* Colors for navigation bar and table captions */
+    --navbar-background-color: #232323;
+    --navbar-text-color: #edd9a6;
+    /* Background color for subnavigation and various headers */
+    --subnav-background-color: #e5c880;
+    /* Background and text colors for selected tabs and navigation items */
+    --selected-background-color: #e5c880;
+    --selected-text-color: #000000;
+    --selected-link-color: #861203;
+    /* Background colors for generated tables */
+    --even-row-color: #edd9a6;
+    --odd-row-color: #e7ce8e;
+    /* Text color for page title */
+    --title-color: #000000;
+    /* Text colors for links */
+    --link-color: #861203;
+    --link-color-active: #641003;
+    /* Snippet colors */
+    --snippet-background-color: #ebecee;
+    --snippet-text-color: var(--block-text-color);
+    --snippet-highlight-color: #f7c590;
+    /* Border colors for structural elements and user defined tables */
+    --border-color: #e5c880;
+    --table-border-color: #000000;
+    /* Search input colors */
+    --search-input-background-color: #edd9a6;
+    --search-input-text-color: #000000;
+    --search-input-placeholder-color: #909090;
+    /* Highlight color for active search tag target */
+    --search-tag-highlight-color: #ffff00;
+    /* Adjustments for icon and active background colors of copy-to-clipboard buttons */
+    --copy-icon-brightness: 100%;
+    --copy-button-background-color-active: rgba(168, 168, 176, 0.3);
+    /* Colors for invalid tag notifications */
+    --invalid-tag-background-color: #ffe6e6;
+    --invalid-tag-text-color: #000000;
+}
 /*
  * Styles for individual HTML elements.
  *
  * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular
  * HTML element throughout the page.
  */
-
 body {
-    background-color:#EDD9A6;
-    color:#000000;
-    font-family:Verdana, Geneva, sans-serif;
-    font-size:14px;
+    background-color:var(--body-background-color);
+    color:var(--body-text-color);
+    font-family:var(--body-font-family);
+    font-size:var(--body-font-size);
     margin:0;
     padding:0;
     height:100%;
@@ -31,59 +86,59 @@ iframe {
 }
 a:link, a:visited {
     text-decoration:none;
-    color:#861203;
-    font-weight: bold;
+    color:var(--link-color);
 }
 a[href]:hover, a[href]:focus {
     text-decoration:none;
-    color:#470C03;
-}
-a[name] {
-    color:#000000;
+    color:var(--link-color-active);
 }
 pre {
-    font-family:'DejaVu Sans Mono', monospace;
-    font-size:14px;
+    font-family:var(--code-font-family);
+    font-size:1em;
 }
 h1 {
-    font-size:20px;
+    font-size:1.428em;
 }
 h2 {
-    font-size:18px;
+    font-size:1.285em;
 }
 h3 {
-    font-size:16px;
+    font-size:1.14em;
 }
 h4 {
-    font-size:15px;
+    font-size:1.072em;
 }
 h5 {
-    font-size:14px;
+    font-size:1.001em;
 }
 h6 {
-    font-size:13px;
+    font-size:0.93em;
+}
+/* Disable font boosting for selected elements */
+h1, h2, h3, h4, h5, h6, div.member-signature {
+    max-height: 1000em;
 }
 ul {
     list-style-type:disc;
 }
 code, tt {
-    font-family:'DejaVu Sans Mono', monospace;
+    font-family:var(--code-font-family);
 }
 :not(h1, h2, h3, h4, h5, h6) > code,
 :not(h1, h2, h3, h4, h5, h6) > tt {
-    font-size:14px;
+    font-size:var(--code-font-size);
     padding-top:4px;
     margin-top:8px;
     line-height:1.4em;
 }
 dt code {
-    font-family:'DejaVu Sans Mono', monospace;
-    font-size:14px;
+    font-family:var(--code-font-family);
+    font-size:1em;
     padding-top:4px;
 }
 .summary-table dt code {
-    font-family:'DejaVu Sans Mono', monospace;
-    font-size:14px;
+    font-family:var(--code-font-family);
+    font-size:1em;
     vertical-align:top;
     padding-top:4px;
 }
@@ -91,8 +146,8 @@ sup {
     font-size:8px;
 }
 button {
-    font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif;
-    font-size: 14px;
+    font-family: var(--body-font-family);
+    font-size: 1em;
 }
 /*
  * Styles for HTML generated by javadoc.
@@ -103,74 +158,67 @@ button {
 /*
  * Styles for document title and copyright.
  */
-.clear {
-    clear:both;
-    height:0;
-    overflow:hidden;
-}
 .about-language {
     float:right;
     padding:0 21px 8px 8px;
-    font-size:11px;
+    font-size:0.915em;
     margin-top:-9px;
     height:2.9em;
 }
 .legal-copy {
     margin-left:.5em;
 }
-.tab {
-    background-color:#0066FF;
-    color:#EDD9A6;
-    padding:8px;
-    width:5em;
-    font-weight:bold;
-}
 /*
  * Styles for navigation bar.
  */
 @media screen {
-    .flex-box {
+    div.flex-box {
         position:fixed;
         display:flex;
         flex-direction:column;
         height: 100%;
         width: 100%;
     }
-    .flex-header {
+    header.flex-header {
         flex: 0 0 auto;
     }
-    .flex-content {
+    div.flex-content {
         flex: 1 1 auto;
         overflow-y: auto;
     }
 }
 .top-nav {
-    background-color:#232323;
-    color:#EDD9A6;
+    background-color:var(--navbar-background-color);
+    color:var(--navbar-text-color);
     float:left;
-    padding:0;
     width:100%;
     clear:right;
     min-height:2.8em;
-    padding-top:10px;
+    padding:10px 0 0 0;
     overflow:hidden;
-    font-size:12px;
+    font-size:0.857em;
+}
+button#navbar-toggle-button {
+    display:none;
+}
+ul.sub-nav-list-small {
+    display: none;
 }
 .sub-nav {
-    background-color:#e5c880;
+    background-color:var(--subnav-background-color);
     float:left;
     width:100%;
     overflow:hidden;
-    font-size:12px;
+    font-size:0.857em;
 }
 .sub-nav div {
     clear:left;
     float:left;
-    padding:0 0 5px 6px;
+    padding:6px;
     text-transform:uppercase;
 }
-.sub-nav .nav-list {
-    padding-top:5px;
+.sub-nav .sub-nav-list {
+    padding-top:4px;
 }
 ul.nav-list {
     display:block;
@@ -190,34 +238,28 @@ ul.nav-list li {
 }
 .sub-nav .nav-list-search {
     float:right;
-    margin:0 0 0 0;
-    padding:5px 6px;
+    margin:0;
+    padding:6px;
     clear:none;
-}
-.nav-list-search label {
+    text-align:right;
     position:relative;
-    right:-16px;
 }
 ul.sub-nav-list li {
     list-style:none;
     float:left;
-    padding-top:10px;
 }
 .top-nav a:link, .top-nav a:active, .top-nav a:visited {
-    color:#EDD9A6;
+    color:var(--navbar-text-color);
     text-decoration:none;
     text-transform:uppercase;
 }
 .top-nav a:hover {
-    text-decoration:none;
-    color:#470C03;
-    text-transform:uppercase;
+    color:var(--link-color-active);
 }
 .nav-bar-cell1-rev {
-    background-color:#e5c880;
-    color:#000000;
+    background-color:var(--selected-background-color);
+    color:var(--selected-text-color);
     margin: auto 5px;
-    font-weight: bold;
 }
 .skip-nav {
     position:absolute;
@@ -234,30 +276,30 @@ ul.sub-nav-list li {
     }
 }
 /*
- * Styles for page header and footer.
+ * Styles for page header.
  */
 .title {
-    color:#000000;
+    color:var(--title-color);
     margin:10px 0;
 }
 .sub-title {
     margin:5px 0 0 0;
 }
-.header ul {
-    margin:0 0 15px 0;
-    padding:0;
+ul.contents-list {
+    margin: 0 0 15px 0;
+    padding: 0;
+    list-style: none;
 }
-.header ul li, .footer ul li {
-    list-style:none;
-    font-size:13px;
+ul.contents-list li {
+    font-size:0.93em;
 }
 /*
  * Styles for headings.
  */
 body.class-declaration-page .summary h2,
 body.class-declaration-page .details h2,
-body.class-use-page  h2,
-body.module-declaration-page  .block-list h2 {
+body.class-use-page h2,
+body.module-declaration-page .block-list h2 {
     font-style: italic;
     padding:0;
     margin:15px 0;
@@ -265,8 +307,8 @@ body.module-declaration-page  .block-list h2 {
 body.class-declaration-page .summary h3,
 body.class-declaration-page .details h3,
 body.class-declaration-page .summary .inherited-list h2 {
-    background-color:#e5c880;
-    border:1px solid #e5c880;
+    background-color:var(--subnav-background-color);
+    border:1px solid var(--border-color);
     margin:0 0 6px -8px;
     padding:7px 5px;
 }
@@ -279,16 +321,16 @@ main {
     position:relative;
 }
 dl.notes > dt {
-    font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif;
-    font-size:12px;
+    font-family: var(--body-font-family);
+    font-size:0.856em;
     font-weight:bold;
     margin:10px 0 0 0;
-    color:#000000;
+    color:var(--body-text-color);
 }
 dl.notes > dd {
     margin:5px 10px 10px 0;
-    font-size:14px;
-    font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
+    font-size:1em;
+    font-family:var(--block-font-family)
 }
 dl.name-value > dt {
     margin-left:1px;
@@ -333,121 +375,160 @@ ul.summary-list > li {
     margin-bottom:15px;
     line-height:1.4;
 }
+ul.ref-list {
+  padding:0;
+  margin:0;
+}
+ul.ref-list > li {
+    list-style:none;
+}
 .summary-table dl, .summary-table dl dt, .summary-table dl dd {
     margin-top:0;
     margin-bottom:1px;
 }
-ul.see-list, ul.see-list-long {
+ul.tag-list, ul.tag-list-long {
     padding-left: 0;
     list-style: none;
 }
-ul.see-list li {
+ul.tag-list li {
     display: inline;
 }
-ul.see-list li:not(:last-child):after,
-ul.see-list-long li:not(:last-child):after {
+ul.tag-list li:not(:last-child):after,
+ul.tag-list-long li:not(:last-child):after
+{
     content: ", ";
     white-space: pre-wrap;
 }
+ul.preview-feature-list {
+    list-style: none;
+    margin:0;
+    padding:0.1em;
+    line-height: 1.6em;
+}
 /*
  * Styles for tables.
  */
 .summary-table, .details-table {
     width:100%;
     border-spacing:0;
-    border-left:1px solid #e9d195;
-    border-right:1px solid #e9d195;
-    border-bottom:1px solid #e9d195;
+    border:1px solid var(--border-color);
+    border-top:0;
     padding:0;
 }
 .caption {
     position:relative;
     text-align:left;
     background-repeat:no-repeat;
-    color:#000000;
-    font-weight:bold;
+    color:var(--selected-text-color);
     clear:none;
     overflow:hidden;
-    padding:0;
-    padding-top:10px;
-    padding-left:1px;
+    padding: 10px 0 0 1px;
     margin:0;
-    white-space:pre;
 }
 .caption a:link, .caption a:visited {
-    color:#861203;
+    color:var(--selected-link-color);
 }
 .caption a:hover,
 .caption a:active {
-    color:#470C03;
+    color:var(--navbar-text-color);
 }
 .caption span {
+    font-weight:bold;
     white-space:nowrap;
-    padding-top:5px;
-    padding-left:12px;
-    padding-right:12px;
-    padding-bottom:7px;
+    padding:5px 12px 7px 12px;
     display:inline-block;
     float:left;
-    background-color:#E5C880;
+    background-color:var(--selected-background-color);
     border: none;
     height:16px;
 }
 div.table-tabs {
     padding:10px 0 0 1px;
-    margin:0;
+    margin:10px 0 0 0;
 }
 div.table-tabs > button {
-   border: none;
-   cursor: pointer;
-   padding: 5px 12px 7px 12px;
-   font-weight: bold;
-   margin-right: 3px;
+    border: none;
+    cursor: pointer;
+    padding: 5px 12px 7px 12px;
+    font-weight: bold;
+    margin-right: 8px;
 }
-div.table-tabs > button.active-table-tab {
-   background: #E5C880;
-   color: #000000;
+div.table-tabs > .active-table-tab {
+    background: var(--selected-background-color);
+    color: var(--selected-text-color);
 }
 div.table-tabs > button.table-tab {
-   background: #232323;
-   color: #EDD9A6;
+    background: var(--navbar-background-color);
+    color: var(--navbar-text-color);
+}
+.two-column-search-results {
+    display: grid;
+    grid-template-columns: minmax(400px, max-content) minmax(400px, auto);
+}
+div.checkboxes {
+    line-height: 2em;
+}
+div.checkboxes > span {
+    margin-left: 10px;
+}
+div.checkboxes > label {
+    margin-left: 8px;
+    white-space: nowrap;
+}
+div.checkboxes > label > input {
+    margin: 0 2px;
 }
 .two-column-summary {
     display: grid;
-    grid-template-columns: minmax(15%, max-content) minmax(15%, auto);
+    grid-template-columns: minmax(25%, max-content) minmax(25%, auto);
 }
 .three-column-summary {
     display: grid;
-    grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, auto);
+    grid-template-columns: minmax(15%, max-content) minmax(20%, max-content) minmax(20%, auto);
+}
+.three-column-release-summary {
+    display: grid;
+    grid-template-columns: minmax(40%, max-content) minmax(10%, max-content) minmax(40%, auto);
 }
 .four-column-summary {
     display: grid;
-    grid-template-columns: minmax(10%, max-content) minmax(10%, max-content) minmax(10%, max-content) minmax(10%, auto);
+    grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, max-content) minmax(15%, auto);
 }
-@media screen and (max-width: 600px) {
-    .two-column-summary {
+@media screen and (max-width: 1000px) {
+    .four-column-summary {
         display: grid;
-        grid-template-columns: 1fr;
+        grid-template-columns: minmax(15%, max-content) minmax(15%, auto);
     }
 }
 @media screen and (max-width: 800px) {
+    .two-column-search-results {
+        display: grid;
+        grid-template-columns: minmax(40%, max-content) minmax(40%, auto);
+    }
     .three-column-summary {
         display: grid;
         grid-template-columns: minmax(10%, max-content) minmax(25%, auto);
     }
-    .three-column-summary .col-last {
+    .three-column-release-summary {
+        display: grid;
+        grid-template-columns: minmax(70%, max-content) minmax(30%, max-content)
+    }
+    .three-column-summary .col-last,
+    .three-column-release-summary .col-last{
         grid-column-end: span 2;
     }
 }
-@media screen and (max-width: 1000px) {
-    .four-column-summary {
+@media screen and (max-width: 600px) {
+    .two-column-summary {
         display: grid;
-        grid-template-columns: minmax(15%, max-content) minmax(15%, auto);
+        grid-template-columns: 1fr;
     }
 }
 .summary-table > div, .details-table > div {
     text-align:left;
     padding: 8px 3px 3px 7px;
+    overflow-x: auto;
+    scrollbar-width: thin;
 }
 .col-first, .col-second, .col-last, .col-constructor-name, .col-summary-item-name {
     vertical-align:top;
@@ -456,14 +537,43 @@ div.table-tabs > button.table-tab {
     padding-bottom:3px;
 }
 .table-header {
-    background:#E5C880;
+    background:var(--subnav-background-color);
     font-weight: bold;
 }
+/* Sortable table columns */
+.table-header[onclick] {
+    cursor: pointer;
+}
+.table-header[onclick]::after {
+    content:"";
+    display:inline-block;
+    background-image:url('data:image/svg+xml; utf8, \
+     \
+    ');
+    background-size:100% 100%;
+    width:9px;
+    height:14px;
+    margin-left:4px;
+    margin-bottom:-3px;
+}
+.table-header[onclick].sort-asc::after {
+    background-image:url('data:image/svg+xml; utf8, \
+     \
+     \
+    ');
+
+}
+.table-header[onclick].sort-desc::after {
+    background-image:url('data:image/svg+xml; utf8, \
+     \
+     \
+    ');
+}
 .col-first, .col-first {
-    font-size:13px;
+    font-size:0.93em;
 }
 .col-second, .col-second, .col-last, .col-constructor-name, .col-summary-item-name, .col-last {
-    font-size:13px;
+    font-size:0.93em;
 }
 .col-first, .col-second, .col-constructor-name {
     vertical-align:top;
@@ -477,31 +587,21 @@ div.table-tabs > button.table-tab {
 .col-first a:link, .col-first a:visited,
 .col-second a:link, .col-second a:visited,
 .col-constructor-name a:link, .col-constructor-name a:visited,
-.col-summary-item-name a:link, .col-summary-item-name a:visited,
-.constant-values-container a:link, .constant-values-container a:visited,
-.all-classes-container a:link, .all-classes-container a:visited,
-.all-packages-container a:link, .all-packages-container a:visited {
+.col-summary-item-name a:link, .col-summary-item-name a:visited {
     font-weight:bold;
 }
-.table-sub-heading-color {
-    background-color:#EEEEFF;
-}
 .even-row-color, .even-row-color .table-header {
-    background-color:#EDD9A6;
+    background-color:var(--even-row-color);
 }
 .odd-row-color, .odd-row-color .table-header {
-    background-color:#E7CE8E;
+    background-color:var(--odd-row-color);
 }
 /*
  * Styles for contents.
  */
-.deprecated-content {
-    margin:0;
-    padding:10px 0;
-}
 div.block {
-    font-size:14px;
-    font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
+    font-size:var(--body-font-size);
+    font-family:var(--block-font-family);
 }
 .col-last div {
     padding-top:0;
@@ -513,8 +613,8 @@ div.block {
 .package-signature,
 .type-signature,
 .member-signature {
-    font-family:'DejaVu Sans Mono', monospace;
-    font-size:14px;
+    font-family:var(--code-font-family);
+    font-size:1em;
     margin:14px 0;
     white-space: pre-wrap;
 }
@@ -537,21 +637,17 @@ div.block {
  * Styles for formatting effect.
  */
 .source-line-no {
-    color:green;
+    /* Color of line numbers in source pages can be set via custom property below */
+    color:var(--source-linenumber-color, green);
     padding:0 30px 0 0;
 }
-h1.hidden {
-    visibility:hidden;
-    overflow:hidden;
-    font-size:10px;
-}
 .block {
     display:block;
     margin:0 10px 5px 0;
-    color:#000000;
+    color:var(--block-text-color);
 }
-.deprecated-label, .descfrm-type-label, .implementation-label, .member-name-label, .member-name-link,
-.module-label-in-package, .module-label-in-type, .override-specify-label, .package-label-in-type,
+.deprecated-label, .description-from-type-label, .implementation-label, .member-name-link,
+.module-label-in-package, .module-label-in-type, .package-label-in-type,
 .package-hierarchy-label, .type-name-label, .type-name-link, .search-tag-link, .preview-label {
     font-weight:bold;
 }
@@ -559,8 +655,8 @@ h1.hidden {
     font-style:italic;
 }
 .deprecation-block {
-    font-size:14px;
-    font-family:Verdana, Geneva, sans-serif;
+    font-size:1em;
+    font-family:var(--block-font-family);
     border-style:solid;
     border-width:thin;
     border-radius:10px;
@@ -570,8 +666,8 @@ h1.hidden {
     display:inline-block;
 }
 .preview-block {
-    font-size:14px;
-    font-family:Verdana, Geneva, sans-serif;
+    font-size:1em;
+    font-family:var(--block-font-family);
     border-style:solid;
     border-width:thin;
     border-radius:10px;
@@ -583,6 +679,19 @@ h1.hidden {
 div.block div.deprecation-comment {
     font-style:normal;
 }
+details.invalid-tag, span.invalid-tag {
+    font-size:1em;
+    font-family:var(--block-font-family);
+    color: var(--invalid-tag-text-color);
+    background: var(--invalid-tag-background-color);
+    border: thin solid var(--table-border-color);
+    border-radius:2px;
+    padding: 2px 4px;
+    display:inline-block;
+}
+details summary {
+    cursor: pointer;
+}
 /*
  * Styles specific to HTML5 elements.
  */
@@ -592,62 +701,93 @@ main, nav, header, footer, section {
 /*
  * Styles for javadoc search.
  */
+.ui-state-active {
+    /* Overrides the color of selection used in jQuery UI */
+    background: var(--selected-background-color);
+    border: 1px solid var(--selected-background-color);
+    color: var(--selected-text-color);
+}
 .ui-autocomplete-category {
     font-weight:bold;
     font-size:15px;
     padding:7px 0 7px 3px;
-    background-color:#232323;
-    color:#EDD9A6;
-}
-.result-item {
-    font-size:13px;
+    background-color:var(--navbar-background-color);
+    color:var(--navbar-text-color);
 }
 .ui-autocomplete {
     max-height:85%;
     max-width:65%;
-    overflow-y:scroll;
-    overflow-x:scroll;
+    overflow-y:auto;
+    overflow-x:auto;
+    scrollbar-width: thin;
     white-space:nowrap;
     box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23);
 }
 ul.ui-autocomplete {
     position:fixed;
-    z-index:999999;
+    z-index:1;
+    background-color: var(--body-background-color);
 }
-ul.ui-autocomplete  li {
+ul.ui-autocomplete li {
     float:left;
     clear:both;
-    width:100%;
+    min-width:100%;
+}
+ul.ui-autocomplete li.ui-static-link {
+    position:sticky;
+    bottom:0;
+    left:0;
+    background: var(--subnav-background-color);
+    padding: 5px 0;
+    font-family: var(--body-font-family);
+    font-size: 0.93em;
+    font-weight: bolder;
+    z-index: 2;
+}
+li.ui-static-link a, li.ui-static-link a:visited {
+    text-decoration:none;
+    color:var(--link-color);
+    float:right;
+    margin-right:20px;
+}
+.ui-autocomplete .result-item {
+    font-size: inherit;
 }
-.result-highlight {
+.ui-autocomplete .result-highlight {
     font-weight:bold;
 }
-#search-input {
+#search-input, #page-search-input {
     background-image:url('resources/glass.png');
     background-size:13px;
     background-repeat:no-repeat;
     background-position:2px 3px;
+    background-color: var(--search-input-background-color);
+    color: var(--search-input-text-color);
+    border-color: var(--border-color);
     padding-left:20px;
-    position:relative;
-    right:-18px;
-    width:400px;
+    width: 250px;
+    margin: 0;
+}
+#search-input {
+    margin-left: 4px;
 }
 #reset-button {
-    background-color: rgb(255,255,255);
+    background-color: transparent;
     background-image:url('resources/x.png');
-    background-position:center;
     background-repeat:no-repeat;
-    background-size:12px;
-    border:0 none;
-    width:16px;
-    height:16px;
-    position:relative;
-    left:-4px;
-    top:-4px;
-    font-size:0px;
+    background-size:contain;
+    border:0;
+    border-radius:0;
+    width:12px;
+    height:12px;
+    position:absolute;
+    right:12px;
+    top:10px;
+    font-size:0;
 }
-.watermark {
-    color:#545454;
+::placeholder {
+    color:var(--search-input-placeholder-color);
+    opacity: 1;
 }
 .search-tag-desc-result {
     font-style:italic;
@@ -658,13 +798,55 @@ ul.ui-autocomplete  li {
     font-size:12px;
 }
 .search-tag-result:target {
-    background-color:yellow;
+    background-color:var(--search-tag-highlight-color);
 }
-.module-graph span {
+details.page-search-details {
+    display: inline-block;
+}
+div#result-container {
+    font-size: 1em;
+}
+div#result-container a.search-result-link {
+    padding: 0;
+    margin: 4px 0;
+    width: 100%;
+}
+#result-container .result-highlight {
+    font-weight:bolder;
+}
+.page-search-info {
+    background-color: var(--subnav-background-color);
+    border-radius: 3px;
+    border: 0 solid var(--border-color);
+    padding: 0 8px;
+    overflow: hidden;
+    height: 0;
+    transition: all 0.2s ease;
+}
+div.table-tabs > button.table-tab {
+    background: var(--navbar-background-color);
+    color: var(--navbar-text-color);
+}
+.page-search-header {
+    padding: 5px 12px 7px 12px;
+    font-weight: bold;
+    margin-right: 3px;
+    background-color:var(--navbar-background-color);
+    color:var(--navbar-text-color);
+    display: inline-block;
+}
+button.page-search-header {
+    border: none;
+    cursor: pointer;
+}
+span#page-search-link {
+    text-decoration: underline;
+}
+.module-graph span, .sealed-graph span {
     display:none;
     position:absolute;
 }
-.module-graph:hover span {
+.module-graph:hover span, .sealed-graph:hover span {
     display:block;
     margin: -100px 0 0 100px;
     z-index: 1;
@@ -677,14 +859,14 @@ section.class-description {
 }
 .summary section[class$="-summary"], .details section[class$="-details"],
 .class-uses .detail, .serialized-class-details {
-    padding: 0px 20px 5px 10px;
-    border: 1px solid #e5c880;
-    background-color: #e9d195;
+    padding: 0 20px 5px 10px;
+    border: 1px solid var(--border-color);
+    background-color: var(--section-background-color);
 }
 .inherited-list, section[class$="-details"] .detail {
     padding:0 0 5px 8px;
-    background-color:#EDD9A6;
-    border:1px solid #d8ad41;
+    background-color:var(--detail-background-color);
+    border:none;
 }
 .vertical-separator {
     padding: 0 5px;
@@ -701,7 +883,7 @@ ul.help-subtoc > li::before {
   content: "\2022" ;
   padding-right:2px;
 }
-span.help-note {
+.help-note {
     font-style: italic;
 }
 /*
@@ -729,7 +911,111 @@ main a[href*="://"]:focus::after {
         132-240 240 120 120 240-240 132 132V0z" fill="%23470c03"/>\
       ');
 }
-
+/*
+ * Styles for header/section anchor links
+ */
+a.anchor-link {
+    opacity: 0;
+    transition: opacity 0.1s;
+}
+:hover > a.anchor-link {
+    opacity: 80%;
+}
+a.anchor-link:hover,
+a.anchor-link:focus-visible,
+a.anchor-link.visible {
+    opacity: 100%;
+}
+a.anchor-link > img {
+    width: 0.9em;
+    height: 0.9em;
+}
+/*
+ * Styles for copy-to-clipboard buttons
+ */
+button.copy {
+    opacity: 70%;
+    border: none;
+    border-radius: 3px;
+    position: relative;
+    background:none;
+    transition: opacity 0.3s;
+    cursor: pointer;
+}
+:hover > button.copy {
+    opacity: 80%;
+}
+button.copy:hover,
+button.copy:active,
+button.copy:focus-visible,
+button.copy.visible {
+    opacity: 100%;
+}
+button.copy img {
+    position: relative;
+    background: none;
+    filter: brightness(var(--copy-icon-brightness));
+}
+button.copy:active {
+    background-color: var(--copy-button-background-color-active);
+}
+button.copy span {
+    color: var(--body-text-color);
+    position: relative;
+    top: -0.1em;
+    transition: all 0.1s;
+    font-size: 0.76rem;
+    line-height: 1.2em;
+    opacity: 0;
+}
+button.copy:hover span,
+button.copy:focus-visible span,
+button.copy.visible span {
+    opacity: 100%;
+}
+/* search page copy button */
+button#page-search-copy {
+    margin-left: 0.4em;
+    padding:0.3em;
+    top:0.13em;
+}
+button#page-search-copy img {
+    width: 1.2em;
+    height: 1.2em;
+    padding: 0.01em 0;
+    top: 0.15em;
+}
+button#page-search-copy span {
+    color: var(--body-text-color);
+    line-height: 1.2em;
+    padding: 0.2em;
+    top: -0.18em;
+}
+div.page-search-info:hover button#page-search-copy span {
+    opacity: 100%;
+}
+/* snippet copy button */
+button.snippet-copy {
+    position: absolute;
+    top: 6px;
+    right: 6px;
+    height: 1.7em;
+    padding: 2px;
+}
+button.snippet-copy img {
+    width: 18px;
+    height: 18px;
+    padding: 0.05em 0;
+}
+button.snippet-copy span {
+    line-height: 1.2em;
+    padding: 0.2em;
+    position: relative;
+    top: -0.5em;
+}
+div.snippet-container:hover button.snippet-copy span {
+    opacity: 100%;
+}
 /*
  * Styles for user-provided tables.
  *
@@ -776,67 +1062,146 @@ table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless >
 }
 table.plain {
     border-collapse: collapse;
-    border: 1px solid black;
+    border: 1px solid var(--table-border-color);
 }
 table.plain > thead > tr, table.plain > tbody tr, table.plain > tr {
     background-color: transparent;
 }
 table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th,
 table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td {
-    border: 1px solid black;
+    border: 1px solid var(--table-border-color);
 }
 table.striped {
     border-collapse: collapse;
-    border: 1px solid black;
+    border: 1px solid var(--table-border-color);
 }
 table.striped > thead {
-    background-color: #E3E3E3;
+    background-color: var(--subnav-background-color);
 }
 table.striped > thead > tr > th, table.striped > thead > tr > td {
-    border: 1px solid black;
+    border: 1px solid var(--table-border-color);
 }
 table.striped > tbody > tr:nth-child(even) {
-    background-color: #EEE
+    background-color: var(--odd-row-color)
 }
 table.striped > tbody > tr:nth-child(odd) {
-    background-color: #FFF
+    background-color: var(--even-row-color)
 }
 table.striped > tbody > tr > th, table.striped > tbody > tr > td {
-    border-left: 1px solid black;
-    border-right: 1px solid black;
+    border-left: 1px solid var(--table-border-color);
+    border-right: 1px solid var(--table-border-color);
 }
 table.striped > tbody > tr > th {
     font-weight: normal;
 }
 /**
- * Tweak font sizes and paddings for small screens.
+ * Tweak style for small screens.
  */
-@media screen and (max-width: 1050px) {
-    #search-input {
-        width: 300px;
+@media screen and (max-width: 920px) {
+    header.flex-header {
+        max-height: 100vh;
+        overflow-y: auto;
     }
-}
-@media screen and (max-width: 800px) {
-    #search-input {
-        width: 200px;
+    div#navbar-top {
+        height: 2.8em;
+        transition: height 0.35s ease;
+    }
+    ul.nav-list {
+        display: block;
+        width: 40%;
+        float:left;
+        clear: left;
+        margin: 10px 0 0 0;
+        padding: 0;
+    }
+    ul.nav-list li {
+        float: none;
+        padding: 6px;
+        margin-left: 10px;
+        margin-top: 2px;
+    }
+    ul.sub-nav-list-small {
+        display:block;
+        height: 100%;
+        width: 50%;
+        float: right;
+        clear: right;
+        background-color: var(--subnav-background-color);
+        color: var(--body-text-color);
+        margin: 6px 0 0 0;
+        padding: 0;
+    }
+    ul.sub-nav-list-small ul {
+        padding-left: 20px;
+    }
+    ul.sub-nav-list-small a:link, ul.sub-nav-list-small a:visited {
+        color:var(--link-color);
+    }
+    ul.sub-nav-list-small a:hover {
+        color:var(--link-color-active);
     }
-    .top-nav,
-    .bottom-nav {
-        font-size: 11px;
-        padding-top: 6px;
+    ul.sub-nav-list-small li {
+        list-style:none;
+        float:none;
+        padding: 6px;
+        margin-top: 1px;
+        text-transform:uppercase;
+    }
+    ul.sub-nav-list-small > li {
+        margin-left: 10px;
+    }
+    ul.sub-nav-list-small li p {
+        margin: 5px 0;
     }
-    .sub-nav {
-        font-size: 11px;
+    div#navbar-sub-list {
+        display: none;
+    }
+    .top-nav a:link, .top-nav a:active, .top-nav a:visited {
+        display: block;
+    }
+    button#navbar-toggle-button {
+        width: 3.4em;
+        height: 2.8em;
+        background-color: transparent;
+        display: block;
+        float: left;
+        border: 0;
+        margin: 0 10px;
+        cursor: pointer;
+        font-size: 10px;
     }
+    button#navbar-toggle-button .nav-bar-toggle-icon {
+        display: block;
+        width: 24px;
+        height: 3px;
+        margin: 1px 0 4px 0;
+        border-radius: 2px;
+        transition: all 0.1s;
+        background-color: var(--navbar-text-color);
+    }
+    button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(1) {
+        transform: rotate(45deg);
+        transform-origin: 10% 10%;
+        width: 26px;
+    }
+    button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(2) {
+        opacity: 0;
+    }
+    button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(3) {
+        transform: rotate(-45deg);
+        transform-origin: 10% 90%;
+        width: 26px;
+    }
+}
+@media screen and (max-width: 800px) {
     .about-language {
         padding-right: 16px;
     }
-    ul.nav-list li,
-    .sub-nav .nav-list-search {
-        padding: 6px;
+    ul.nav-list li {
+        margin-left: 5px;
     }
-    ul.sub-nav-list li {
-        padding-top: 5px;
+    ul.sub-nav-list-small > li {
+        margin-left: 5px;
     }
     main {
         padding: 10px;
@@ -849,22 +1214,62 @@ table.striped > tbody > tr > th {
         -webkit-text-size-adjust: none;
     }
 }
-@media screen and (max-width: 500px) {
-    #search-input {
-        width: 150px;
-    }
-    .top-nav,
-    .bottom-nav {
-        font-size: 10px;
-    }
-    .sub-nav {
-        font-size: 10px;
-    }
+@media screen and (max-width: 400px) {
     .about-language {
         font-size: 10px;
         padding-right: 12px;
     }
 }
+@media screen and (max-width: 400px) {
+    .nav-list-search {
+        width: 94%;
+    }
+    #search-input, #page-search-input {
+        width: 70%;
+    }
+}
+@media screen and (max-width: 320px) {
+    .nav-list-search > label {
+        display: none;
+    }
+    .nav-list-search {
+        width: 90%;
+    }
+    #search-input, #page-search-input {
+        width: 80%;
+    }
+}
+
+pre.snippet {
+    background-color: var(--snippet-background-color);
+    color: var(--snippet-text-color);
+    padding: 10px;
+    margin: 12px 0;
+    overflow: auto;
+    white-space: pre;
+}
+div.snippet-container {
+    position: relative;
+}
+@media screen and (max-width: 800px) {
+    pre.snippet {
+        padding-top: 26px;
+    }
+    button.snippet-copy {
+        top: 4px;
+        right: 4px;
+    }
+}
+pre.snippet .italic {
+    font-style: italic;
+}
+pre.snippet .bold {
+    font-weight: bold;
+}
+pre.snippet .highlighted {
+    background-color: var(--snippet-highlight-color);
+    border-radius: 10%;
+}
 
 /*