From dc5aee0f8f8c8c53e6e3a46935d9ff5c953916af Mon Sep 17 00:00:00 2001
From: Parker Lougheed <parlough@gmail.com>
Date: Thu, 24 Oct 2024 20:52:11 -0500
Subject: [PATCH 1/5] Generate same CSS file with sass

---
 lib/resources/styles.css |  197 +++---
 pubspec.yaml             |    1 +
 tool/task.dart           |    8 +
 web/styles/styles.scss   | 1340 ++++++++++++++++++++++++++++++++++++++
 4 files changed, 1438 insertions(+), 108 deletions(-)
 create mode 100644 web/styles/styles.scss

diff --git a/lib/resources/styles.css b/lib/resources/styles.css
index cdb7346ce3..039525502a 100644
--- a/lib/resources/styles.css
+++ b/lib/resources/styles.css
@@ -1,3 +1,4 @@
+@charset "UTF-8";
 .light-theme {
   /*background-color body, listdropdown*/
   --main-bg-color: #fff;
@@ -19,7 +20,6 @@
   --main-hyperlinks-color: #0175C2;
   /*search background*/
   --main-search-background: transparent;
-
   /*code snippets*/
   --main-code-bg: #f8f8f8;
   --main-keyword-color: #333;
@@ -28,10 +28,8 @@
   --main-comment-color: #998;
   --main-var-color: #008080;
   --main-string-color: #d14;
-
   --main-number-filter: invert(0%);
   --main-icon-color: black;
-
   /* alerts */
   --alert-info: #e7f8ff;
   --alert-tip: #ecfaf7;
@@ -59,7 +57,6 @@
   --main-hyperlinks-color: #00D2FA;
   /*search background*/
   --main-search-background: black;
-
   /*code snippets*/
   --main-code-bg: #10161E;
   --main-keyword-color: white;
@@ -68,10 +65,8 @@
   --main-comment-color: #909CC3;
   --main-var-color: #55A09B;
   --main-string-color: #FF2D64;
-
   --main-number-filter: invert(100%);
   --main-icon-color: white;
-
   /* alerts */
   --alert-info: #043875;
   --alert-tip: #065517;
@@ -202,13 +197,32 @@ main {
   margin: 5px 20px 0 0;
 }
 
-::-webkit-scrollbar-button{ display: none; height: 13px; border-radius: 0; background-color: #AAA; }
-::-webkit-scrollbar-button:hover{ background-color: #AAA; }
-::-webkit-scrollbar-thumb{ background-color: var(--main-scrollbar-color); }
-::-webkit-scrollbar-thumb:hover{ background-color: var(--main-scrollbar-color); }
-::-webkit-scrollbar{ width: 4px; }
+::-webkit-scrollbar-button {
+  display: none;
+  height: 13px;
+  border-radius: 0;
+  background-color: #AAA;
+}
+
+::-webkit-scrollbar-button:hover {
+  background-color: #AAA;
+}
+
+::-webkit-scrollbar-thumb {
+  background-color: var(--main-scrollbar-color);
+}
+
+::-webkit-scrollbar-thumb:hover {
+  background-color: var(--main-scrollbar-color);
+}
+
+::-webkit-scrollbar {
+  width: 4px;
+}
 
-.main-content::-webkit-scrollbar{ width: 8px; }
+.main-content::-webkit-scrollbar {
+  width: 8px;
+}
 
 .main-content {
   flex: 1;
@@ -225,8 +239,8 @@ main {
   margin-top: 5px;
   margin-right: 20px;
 }
-/* end for layout */
 
+/* end for layout */
 body {
   -webkit-text-size-adjust: 100%;
   overflow-x: hidden;
@@ -248,13 +262,11 @@ nav.navbar {
     display: none !important;
   }
 }
-
 @media (min-width: 841px) {
   .hidden-l {
     display: none !important;
   }
 }
-
 nav.navbar .row {
   padding-top: 8px;
 }
@@ -265,48 +277,48 @@ nav .container {
 
 header {
   background-color: var(--main-header-color);
-  box-shadow: 0 3px 5px rgba(0,0,0,0.1);
+  box-shadow: 0 3px 5px rgba(0, 0, 0, 0.1);
 }
 
 .pre {
-    border: 1px solid #ddd;
-    font-size: 14px;
+  border: 1px solid #ddd;
+  font-size: 14px;
 }
 
 .hljs-string, .hljs-doctag {
-    color: var(--main-string-color);
+  color: var(--main-string-color);
 }
 
 .hljs-number, .hljs-literal, .hljs-variable, .hljs-template-variable, .hljs-tag .hljs-attr {
-    color: var(--main-var-color);
+  color: var(--main-var-color);
 }
 
 .hljs-comment, .hljs-quote {
-    color: var(--main-comment-color);
-    font-style: italic;
+  color: var(--main-comment-color);
+  font-style: italic;
 }
 
 .hljs-title, .hljs-section, .hljs-selector-id {
-    color: var(--main-section-color);
-    font-weight: bold;
+  color: var(--main-section-color);
+  font-weight: bold;
 }
 
 .hljs-tag, .hljs-name, .hljs-attribute {
-    color: var(--main-tag-color);
-    font-weight: normal;
+  color: var(--main-tag-color);
+  font-weight: normal;
 }
 
 .hljs-keyword, .hljs-selector-tag, .hljs-subst {
-    color: var(--main-keyword-color);
-    font-weight: bold;
+  color: var(--main-keyword-color);
+  font-weight: bold;
 }
 
 .hljs {
-    display: block;
-    overflow-x: auto;
-    padding: 0.5em;
-    color: var(--main-text-color);
-    background: var(--main-code-bg);
+  display: block;
+  overflow-x: auto;
+  padding: 0.5em;
+  color: var(--main-text-color);
+  background: var(--main-code-bg);
 }
 
 a {
@@ -368,7 +380,7 @@ a:hover {
 }
 
 pre.prettyprint {
-  font-family: 'Roboto Mono', Menlo, monospace;
+  font-family: "Roboto Mono", Menlo, monospace;
   color: black;
   border-radius: 0;
   font-size: 15px;
@@ -382,7 +394,7 @@ pre.prettyprint {
 pre code {
   white-space: pre;
   word-wrap: initial;
-  font-size: 100%
+  font-size: 100%;
 }
 
 .fixed {
@@ -396,28 +408,25 @@ pre {
 }
 
 code {
-  font-family: 'Roboto Mono', Menlo, monospace;
+  font-family: "Roboto Mono", Menlo, monospace;
   color: inherit;
   padding: 0.2em 0.4em;
   font-size: 85%;
-  background-color: rgba(27,31,35,0.05);
+  background-color: rgba(27, 31, 35, 0.05);
   border-radius: 3px;
 }
 
-@media(max-width: 840px) {
+@media (max-width: 840px) {
   nav .container {
-    width: 100%
+    width: 100%;
   }
-
   h1 {
     font-size: 24px;
   }
-
   pre {
     margin: 16px 0;
   }
 }
-
 header h1 {
   font-weight: 400;
   margin-bottom: 16px;
@@ -554,27 +563,27 @@ dl dt.callable .name {
 
 /* Colors for category based on categoryOrder in dartdoc_options.config. */
 .category.cp-0 {
-  background-color: #54b7c4
+  background-color: #54b7c4;
 }
 
 .category.cp-1 {
-  background-color: #54c47f
+  background-color: #54c47f;
 }
 
 .category.cp-2 {
-  background-color: #c4c254
+  background-color: #c4c254;
 }
 
 .category.cp-3 {
-  background-color: #c49f54
+  background-color: #c49f54;
 }
 
 .category.cp-4 {
-  background-color: #c45465
+  background-color: #c45465;
 }
 
 .category.cp-5 {
-  background-color: #c454c4
+  background-color: #c454c4;
 }
 
 .category a {
@@ -588,7 +597,7 @@ dl dt.callable .name {
   background-color: #999;
   text-transform: uppercase;
   color: white;
-  opacity: .5;
+  opacity: 0.5;
 }
 
 h1 .category {
@@ -619,7 +628,6 @@ sup.muted {
   border: 1px solid var(--main-hyperlinks-color);
   border-radius: 20px;
   color: var(--main-hyperlinks-color);
-
   font-size: 12px;
   padding: 1px 6px;
   margin: 0 8px 0 0;
@@ -646,7 +654,6 @@ h1 .feature {
     font-size: 10px;
   }
 }
-
 #external-links {
   float: right;
 }
@@ -740,7 +747,7 @@ td {
 .gt-separated li:before {
   background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='%23DDDDDD' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>");
   background-position: center;
-  content: "\00a0";
+  content: " ";
   margin: 0 6px 0 4px;
   padding: 0 3px 0 0;
 }
@@ -779,15 +786,13 @@ td {
     float: left;
   }
 }
-
 @media screen and (max-width: 840px) {
   .breadcrumbs {
     margin: 0 0 24px 0;
     overflow-x: hidden;
   }
 }
-
-.breadcrumbs .gt-separated .dark .hidden-xs li+li:before {
+.breadcrumbs .gt-separated .dark .hidden-xs li + li:before {
   color: var(--main-h-text);
 }
 
@@ -848,7 +853,6 @@ div.multi-line-signature div.parameters {
 }
 
 /* sidebar styles */
-
 .sidebar ol {
   list-style: none;
   line-height: 22px;
@@ -919,7 +923,7 @@ button {
 }
 
 /* left-nav disappears, and can transition in from the left */
-@media screen and (max-width:840px) {
+@media screen and (max-width: 840px) {
   #sidenav-left-toggle {
     display: inline;
     width: 24px;
@@ -929,7 +933,6 @@ button {
     margin-left: 24px;
     font-size: 24px;
   }
-
   #overlay-under-drawer.active {
     opacity: 0.4;
     height: 100%;
@@ -942,13 +945,12 @@ button {
     background-color: black;
     display: block;
   }
-
   .sidebar-offcanvas-left {
     left: -100%;
     position: fixed;
-    -webkit-transition:all .25s ease-out;
-    -o-transition:all .25s ease-out;
-    transition:all .25s ease-out;
+    -webkit-transition: all 0.25s ease-out;
+    -o-transition: all 0.25s ease-out;
+    transition: all 0.25s ease-out;
     z-index: 2000;
     top: 0;
     width: 280px; /* works all the way down to an iphone 4 */
@@ -959,22 +961,18 @@ button {
     margin: 10px 10px;
     box-shadow: 5px 5px 5px 5px #444444;
   }
-
   ol#sidebar-nav {
     font-size: 18px;
     white-space: pre-line;
   }
-
   .sidebar-offcanvas-left.active {
     left: 0; /* this animates our drawer into the page */
   }
-
   .self-name {
     display: inline-block;
     color: var(--main-hyperlinks-color);
   }
 }
-
 .sidebar-offcanvas-left h5 {
   margin-bottom: 10px;
 }
@@ -987,16 +985,14 @@ button {
 /* the right nav disappears out of view when the window shrinks */
 @media screen and (max-width: 992px) {
   .sidebar-offcanvas-right {
-     display: none;
-   }
+    display: none;
+  }
 }
-
 #overlay-under-drawer {
   display: none;
 }
 
 /* find-as-you-type search box */
-
 .form-control {
   border-radius: 0;
   border: 0;
@@ -1007,7 +1003,6 @@ button {
     display: none;
   }
 }
-
 .typeahead {
   width: 200px;
   padding: 2px 7px 1px 7px;
@@ -1046,12 +1041,11 @@ button {
   margin: 0;
   background-color: var(--main-bg-color);
   border: 1px solid var(--main-header-color);
-  -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);
-     -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);
-          box-shadow: 0 5px 10px rgba(0,0,0,.2);
+  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+  -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
 }
 
-
 .typeahead {
   padding: 17px 17px 17px 50px;
   width: 422px;
@@ -1063,7 +1057,7 @@ button {
   outline: 0;
   background-size: 20px;
   filter: var(--main-number-filter);
-    -webkit-filter: var(--main-number-filter);
+  -webkit-filter: var(--main-number-filter);
 }
 
 .search-summary {
@@ -1121,9 +1115,7 @@ a.tt-container {
   color: var(--main-text-color);
 }
 
-
 /* Search results formatting for mini results below search bar. */
-
 .tt-search-results .tt-container {
   margin-top: 5px;
   margin-bottom: 5px;
@@ -1131,7 +1123,7 @@ a.tt-container {
 
 /* Do not show the container as a section. */
 .tt-search-results .tt-container-text {
-  display: none
+  display: none;
 }
 
 /* An inline style. */
@@ -1163,7 +1155,6 @@ a.tt-container {
   margin-left: 0;
 }
 
-
 .tt-search-results .one-line-description::before {
   content: open-quote;
 }
@@ -1173,7 +1164,6 @@ a.tt-container {
 }
 
 /* Search results formatting for `search.html`. */
-
 /* A block style. */
 #dartdoc-main-content .tt-suggestion {
   color: var(--main-text-color);
@@ -1201,31 +1191,27 @@ a.tt-container {
 }
 
 @media screen and (max-width: 840px) {
- .typeahead {
-   padding: 17px 17px 17px 33px;
-   width: 240px;
-   height: 17px;
-   border: 1px solid #f5f5f5;
-   background-position: 3%;
-   margin: 10px 10px 10px 9px;
- }
-
+  .typeahead {
+    padding: 17px 17px 17px 33px;
+    width: 240px;
+    height: 17px;
+    border: 1px solid #f5f5f5;
+    background-position: 3%;
+    margin: 10px 10px 10px 9px;
+  }
   header {
     padding-left: 0;
   }
 }
-
 @media screen and (max-width: 320px) {
   #sidenav-left-toggle {
     margin-right: 10px;
     margin-left: 20px;
   }
-
   .self-name {
     margin-right: 10px;
   }
 }
-
 ::placeholder {
   filter: brightness(0.85);
 }
@@ -1233,7 +1219,7 @@ a.tt-container {
 .search-body {
   border: 1px solid #7f7f7f;
   max-width: 400px;
-  box-shadow: 3px 3px 5px rgba(0,0,0,0.1);
+  box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.1);
 }
 
 /* Note that the generated HTML for pub packages may have `section` tags
@@ -1265,21 +1251,18 @@ li.inherited a {
   .subnav, .sidebar {
     display: none;
   }
-
   a[href]:after {
-   content: "" !important;
+    content: "" !important;
   }
 }
-
 /* github alert styles */
-
 .markdown-alert {
   margin-top: 1rem;
   margin-bottom: 1rem;
   padding: 1.25rem;
 }
 
-.markdown-alert>:last-child {
+.markdown-alert > :last-child {
   margin-bottom: 0;
 }
 
@@ -1288,23 +1271,21 @@ li.inherited a {
   align-items: center;
   gap: 0.4rem;
   margin-bottom: 0.5rem;
-
   font-weight: bold;
   -webkit-font-smoothing: antialiased;
 }
 
 .markdown-alert-title:before {
-  font: 24px / 1 'Material Symbols Outlined';
+  font: 24px/1 "Material Symbols Outlined";
 }
 
 /* note, tip, important, warning, caution */
-
 .markdown-alert.markdown-alert-note {
   background-color: var(--alert-info);
 }
 
 .markdown-alert-note .markdown-alert-title:before {
-  content: 'info';
+  content: "info";
 }
 
 .markdown-alert.markdown-alert-tip {
@@ -1312,7 +1293,7 @@ li.inherited a {
 }
 
 .markdown-alert-tip .markdown-alert-title:before {
-  content: 'lightbulb';
+  content: "lightbulb";
 }
 
 .markdown-alert.markdown-alert-important {
@@ -1320,7 +1301,7 @@ li.inherited a {
 }
 
 .markdown-alert-important .markdown-alert-title:before {
-  content: 'feedback';
+  content: "feedback";
 }
 
 .markdown-alert.markdown-alert-warning {
@@ -1328,7 +1309,7 @@ li.inherited a {
 }
 
 .markdown-alert-warning .markdown-alert-title:before {
-  content: 'warning';
+  content: "warning";
 }
 
 .markdown-alert.markdown-alert-caution {
@@ -1336,5 +1317,5 @@ li.inherited a {
 }
 
 .markdown-alert-caution .markdown-alert-title:before {
-  content: 'report';
-}
+  content: "report";
+}
\ No newline at end of file
diff --git a/pubspec.yaml b/pubspec.yaml
index 334e5b7224..cac30bc795 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -27,6 +27,7 @@ dev_dependencies:
   dart_style: ^2.3.7
   lints: ^5.0.0
   matcher: ^0.12.15
+  sass: ^1.80.4
   test: ^1.24.2
   test_descriptor: ^2.0.1
   test_process: ^2.0.3
diff --git a/tool/task.dart b/tool/task.dart
index d6eb083c1b..d198271744 100644
--- a/tool/task.dart
+++ b/tool/task.dart
@@ -12,6 +12,7 @@ import 'package:crypto/crypto.dart' as crypto;
 import 'package:dartdoc/src/io_utils.dart';
 import 'package:dartdoc/src/package_meta.dart';
 import 'package:path/path.dart' as path;
+import 'package:sass/sass.dart' as sass;
 import 'package:yaml/yaml.dart' as yaml;
 import 'package:yaml/yaml.dart';
 
@@ -177,6 +178,13 @@ Future<void> buildWeb({bool debug = false}) async {
   ]);
   _delete(File('lib/resources/docs.dart.js.deps'));
 
+  final compileResult = sass.compileToResult('web/styles/styles.scss');
+  if (compileResult.css.isNotEmpty) {
+    File('lib/resources/styles.css').writeAsStringSync(compileResult.css);
+  } else {
+    throw StateError('Compiled CSS was empty.');
+  }
+
   var compileSig = await _calcDartFilesSig(Directory('web'));
   File(path.join('web', 'sig.txt')).writeAsStringSync('$compileSig\n');
 }
diff --git a/web/styles/styles.scss b/web/styles/styles.scss
new file mode 100644
index 0000000000..cdb7346ce3
--- /dev/null
+++ b/web/styles/styles.scss
@@ -0,0 +1,1340 @@
+.light-theme {
+  /*background-color body, listdropdown*/
+  --main-bg-color: #fff;
+  /*header id-tittle*/
+  --main-header-color: #eeeeee;
+  /*package-name*/
+  --main-sidebar-color: #727272;
+  /*section-title and section subtitle, desc markdown(body, dd, h3), header a*/
+  --main-text-color: #111111;
+  /*typehead search-box*/
+  --main-search-bar: #fff;
+  /* scrollbar-thumb */
+  --main-scrollbar-color: #CCC;
+  /* footer */
+  --main-footer-background: #111111;
+  /*header text color*/
+  --main-h-text: black;
+  /* hyperlinks*/
+  --main-hyperlinks-color: #0175C2;
+  /*search background*/
+  --main-search-background: transparent;
+
+  /*code snippets*/
+  --main-code-bg: #f8f8f8;
+  --main-keyword-color: #333;
+  --main-tag-color: #000080;
+  --main-section-color: #900;
+  --main-comment-color: #998;
+  --main-var-color: #008080;
+  --main-string-color: #d14;
+
+  --main-number-filter: invert(0%);
+  --main-icon-color: black;
+
+  /* alerts */
+  --alert-info: #e7f8ff;
+  --alert-tip: #ecfaf7;
+  --alert-important: #e2dbff;
+  --alert-warning: #fcf8e3;
+  --alert-error: #fde9ee;
+}
+
+.dark-theme {
+  /*background-color body, listdropdown*/
+  --main-bg-color: #10161E;
+  /*header id-tittle*/
+  --main-header-color: #1C2834;
+  /*package-name*/
+  --main-sidebar-color: #fff;
+  /*section-title and section subtitle, desc markdown(body, dd, h3), header a*/
+  --main-text-color: #fff;
+  /*typehead search-box*/
+  --main-search-bar: #454545;
+  /* scrollbar-thumb */
+  --main-scrollbar-color: #5f6368;
+  /* footer */
+  --main-footer-background: #27323a;
+  /* hyperlinks*/
+  --main-hyperlinks-color: #00D2FA;
+  /*search background*/
+  --main-search-background: black;
+
+  /*code snippets*/
+  --main-code-bg: #10161E;
+  --main-keyword-color: white;
+  --main-tag-color: #00D2FA;
+  --main-section-color: #FF2D64;
+  --main-comment-color: #909CC3;
+  --main-var-color: #55A09B;
+  --main-string-color: #FF2D64;
+
+  --main-number-filter: invert(100%);
+  --main-icon-color: white;
+
+  /* alerts */
+  --alert-info: #043875;
+  --alert-tip: #065517;
+  --alert-important: #4a00b4;
+  --alert-warning: #7b6909;
+  --alert-error: #7a0c17;
+}
+
+#theme {
+  display: none;
+}
+
+#theme-button {
+  position: absolute;
+  right: 30px;
+  height: 24px;
+}
+
+#theme-button .material-symbols-outlined {
+  color: var(--main-icon-color);
+  user-select: none;
+  cursor: pointer;
+}
+
+#theme-button .material-symbols-outlined:hover {
+  color: var(--main-hyperlinks-color);
+}
+
+li .material-symbols-outlined, dt .material-symbols-outlined {
+  font-size: 1em;
+  vertical-align: text-bottom;
+}
+
+dt .material-symbols-outlined {
+  text-indent: 0;
+}
+
+.light-theme #light-theme-button {
+  display: none;
+}
+
+.dark-theme #dark-theme-button {
+  display: none;
+}
+
+/*
+Only show images that fit their theme using GitHub's syntax, see:
+https://github.blog/changelog/2021-11-24-specify-theme-context-for-images-in-markdown/
+*/
+.dark-theme img[src$="#gh-light-mode-only"] {
+  display: none;
+}
+
+.light-theme img[src$="#gh-dark-mode-only"] {
+  display: none;
+}
+
+/* for layout */
+html,
+body {
+  margin: 0;
+  padding: 0;
+  height: 100%;
+  width: 100%;
+  overflow: hidden;
+  box-sizing: border-box;
+}
+
+*, *:before, *:after {
+  box-sizing: inherit;
+}
+
+body {
+  display: flex;
+  flex-direction: column;
+  -webkit-overflow-scrolling: touch;
+}
+
+header {
+  flex: 0 0 50px;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  padding-left: 30px;
+  padding-right: 30px;
+  background-color: var(--main-header-color);
+}
+
+header ol {
+  list-style: none;
+  margin: 0;
+  padding: 0;
+}
+
+header ol li {
+  display: inline;
+}
+
+header form {
+  display: flex;
+  flex: 1;
+  justify-content: flex-end;
+}
+
+header#header-search-sidebar {
+  height: 50px;
+  margin-bottom: 25px;
+}
+
+footer {
+  flex: 0 0 16px;
+  text-align: center;
+  padding: 16px 20px;
+}
+
+main {
+  flex: 1;
+  display: flex;
+  flex-direction: row;
+  min-height: 0;
+}
+
+.sidebar-offcanvas-left {
+  flex: 0 1 230px;
+  order: 1;
+  overflow-y: scroll;
+  padding: 20px 0 15px 30px;
+  margin: 5px 20px 0 0;
+}
+
+::-webkit-scrollbar-button{ display: none; height: 13px; border-radius: 0; background-color: #AAA; }
+::-webkit-scrollbar-button:hover{ background-color: #AAA; }
+::-webkit-scrollbar-thumb{ background-color: var(--main-scrollbar-color); }
+::-webkit-scrollbar-thumb:hover{ background-color: var(--main-scrollbar-color); }
+::-webkit-scrollbar{ width: 4px; }
+
+.main-content::-webkit-scrollbar{ width: 8px; }
+
+.main-content {
+  flex: 1;
+  order: 2;
+  overflow-y: scroll;
+  padding: 10px 20px 0 20px;
+}
+
+.sidebar-offcanvas-right {
+  flex: 0 1 12em;
+  order: 3;
+  overflow-y: scroll;
+  padding: 20px 15px 15px 15px;
+  margin-top: 5px;
+  margin-right: 20px;
+}
+/* end for layout */
+
+body {
+  -webkit-text-size-adjust: 100%;
+  overflow-x: hidden;
+  font-family: Roboto, sans-serif;
+  font-size: 16px;
+  line-height: 1.42857143;
+  color: var(--main-text-color);
+  background-color: var(--main-bg-color);
+}
+
+nav.navbar {
+  background-color: inherit;
+  min-height: 50px;
+  border: 0;
+}
+
+@media (max-width: 840px) {
+  .hidden-xs {
+    display: none !important;
+  }
+}
+
+@media (min-width: 841px) {
+  .hidden-l {
+    display: none !important;
+  }
+}
+
+nav.navbar .row {
+  padding-top: 8px;
+}
+
+nav .container {
+  white-space: nowrap;
+}
+
+header {
+  background-color: var(--main-header-color);
+  box-shadow: 0 3px 5px rgba(0,0,0,0.1);
+}
+
+.pre {
+    border: 1px solid #ddd;
+    font-size: 14px;
+}
+
+.hljs-string, .hljs-doctag {
+    color: var(--main-string-color);
+}
+
+.hljs-number, .hljs-literal, .hljs-variable, .hljs-template-variable, .hljs-tag .hljs-attr {
+    color: var(--main-var-color);
+}
+
+.hljs-comment, .hljs-quote {
+    color: var(--main-comment-color);
+    font-style: italic;
+}
+
+.hljs-title, .hljs-section, .hljs-selector-id {
+    color: var(--main-section-color);
+    font-weight: bold;
+}
+
+.hljs-tag, .hljs-name, .hljs-attribute {
+    color: var(--main-tag-color);
+    font-weight: normal;
+}
+
+.hljs-keyword, .hljs-selector-tag, .hljs-subst {
+    color: var(--main-keyword-color);
+    font-weight: bold;
+}
+
+.hljs {
+    display: block;
+    overflow-x: auto;
+    padding: 0.5em;
+    color: var(--main-text-color);
+    background: var(--main-code-bg);
+}
+
+a {
+  text-decoration: none;
+}
+
+section {
+  /* Note that the generated HTML for pub packages may have `section` tags
+     transformed into `div` tags. */
+  margin-bottom: 36px;
+}
+
+dl {
+  margin: 0;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+  font-family: Roboto, sans-serif;
+  font-weight: 400;
+  margin-top: 1.5em;
+  color: var(--main-text-color);
+}
+
+h1.title {
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+h1 {
+  font-size: 37px;
+  margin-top: 0;
+  margin-bottom: 0.67em;
+}
+
+h2 {
+  font-size: 28px;
+}
+
+h5 {
+  font-size: 16px;
+}
+
+p {
+  margin-bottom: 1em;
+  margin-top: 0;
+}
+
+a {
+  color: var(--main-hyperlinks-color);
+}
+
+a:hover {
+  color: #13B9FD;
+}
+
+pre.prettyprint {
+  font-family: 'Roboto Mono', Menlo, monospace;
+  color: black;
+  border-radius: 0;
+  font-size: 15px;
+  word-wrap: normal;
+  line-height: 1.4;
+  border: 0;
+  margin: 16px 0 16px 0;
+  padding: 8px;
+}
+
+pre code {
+  white-space: pre;
+  word-wrap: initial;
+  font-size: 100%
+}
+
+.fixed {
+  white-space: pre;
+}
+
+pre {
+  border: 1px solid #ddd;
+  background-color: #eee;
+  font-size: 14px;
+}
+
+code {
+  font-family: 'Roboto Mono', Menlo, monospace;
+  color: inherit;
+  padding: 0.2em 0.4em;
+  font-size: 85%;
+  background-color: rgba(27,31,35,0.05);
+  border-radius: 3px;
+}
+
+@media(max-width: 840px) {
+  nav .container {
+    width: 100%
+  }
+
+  h1 {
+    font-size: 24px;
+  }
+
+  pre {
+    margin: 16px 0;
+  }
+}
+
+header h1 {
+  font-weight: 400;
+  margin-bottom: 16px;
+}
+
+header a,
+header p,
+header li {
+  color: #0175C2;
+}
+
+header a:hover {
+  color: #0175C2;
+}
+
+header h1 .kind {
+  color: #555;
+}
+
+dt {
+  font-weight: normal;
+}
+
+dd {
+  color: var(--main-text-color);
+  margin-bottom: 1em;
+  margin-left: 0;
+}
+
+dd.callable, dd.constant, dd.property {
+  margin-bottom: 24px;
+}
+
+dd p {
+  overflow-x: hidden;
+  text-overflow: ellipsis;
+  margin-bottom: 0;
+}
+
+/* Enum values do not have their own pages; their full docs are presented on the
+ * enum class's page. */
+dt.constant + dd p {
+  margin-bottom: 1em;
+}
+
+/* indents wrapped lines */
+/* Note that the generated HTML for pub packages may have `section` tags
+   transformed into `div` tags, so we have two selectors here. */
+section.summary dt, div.summary dt {
+  margin-left: 24px;
+  text-indent: -24px;
+}
+
+.dl-horizontal dd {
+  margin-left: initial;
+}
+
+dl.dl-horizontal dt {
+  font-style: normal;
+  text-align: left;
+  color: #727272;
+  margin-right: 20px;
+  width: initial;
+}
+
+dt .name {
+  font-weight: 500;
+}
+
+dl dt.callable .name {
+  float: none;
+  width: auto;
+}
+
+.type-parameter {
+  white-space: nowrap;
+}
+
+.multi-line-signature .type-parameter .parameter {
+  margin-left: 0;
+  display: unset;
+}
+
+.parameter-list {
+  display: table-cell;
+  margin-left: 10px;
+  list-style-type: none;
+  padding-inline-start: unset;
+}
+
+.parameter-list.single-line {
+  display: inline;
+  margin-left: 0;
+}
+
+.parameter-list.single-line > li {
+  display: inline;
+}
+
+.parameter-list.single-line > li > .parameter {
+  display: inline;
+  margin-left: 0;
+  text-indent: 0;
+}
+
+.signature {
+  color: var(--main-text-color);
+}
+
+.signature a {
+  color: var(--main-hyperlinks-color);
+}
+
+.optional {
+  font-style: italic;
+}
+
+.undocumented {
+  font-style: italic;
+}
+
+.is-const {
+  font-style: italic;
+}
+
+.deprecated {
+  text-decoration: line-through;
+}
+
+.category.linked {
+  font-weight: bold;
+  opacity: 1;
+}
+
+/* Colors for category based on categoryOrder in dartdoc_options.config. */
+.category.cp-0 {
+  background-color: #54b7c4
+}
+
+.category.cp-1 {
+  background-color: #54c47f
+}
+
+.category.cp-2 {
+  background-color: #c4c254
+}
+
+.category.cp-3 {
+  background-color: #c49f54
+}
+
+.category.cp-4 {
+  background-color: #c45465
+}
+
+.category.cp-5 {
+  background-color: #c454c4
+}
+
+.category a {
+  color: white;
+}
+
+.category {
+  padding: 2px 4px;
+  font-size: 12px;
+  border-radius: 4px;
+  background-color: #999;
+  text-transform: uppercase;
+  color: white;
+  opacity: .5;
+}
+
+h1 .category {
+  vertical-align: middle;
+}
+
+/* Do not display "provided by X extension" text on extension pages. */
+.main-content.extension-page .from-extension {
+  display: none;
+}
+
+sup.muted {
+  color: var(--main-sidebar-color);
+  font-size: 0.6em;
+}
+
+.from-extension > span {
+  background-color: var(--alert-warning);
+  font-style: italic;
+  padding: 2px;
+}
+
+/* The badge under a declaration for things like "const", "read-only", etc. and for the badges inline like sealed or interface */
+/* See https://github.com/dart-lang/dartdoc/blob/main/lib/src/model/feature.dart */
+.feature {
+  display: inline-block;
+  background: var(--main-bg-color);
+  border: 1px solid var(--main-hyperlinks-color);
+  border-radius: 20px;
+  color: var(--main-hyperlinks-color);
+
+  font-size: 12px;
+  padding: 1px 6px;
+  margin: 0 8px 0 0;
+}
+
+a.feature:hover {
+  border-color: #13B9FD;
+}
+
+h1 .feature {
+  vertical-align: middle;
+  margin: 0 -2px 0 0;
+}
+
+.source-link {
+  padding: 18px 4px;
+  font-size: 18px;
+  vertical-align: middle;
+}
+
+@media (max-width: 840px) {
+  .source-link {
+    padding: 7px 2px;
+    font-size: 10px;
+  }
+}
+
+#external-links {
+  float: right;
+}
+
+.btn-group {
+  position: relative;
+  display: inline-flex;
+  vertical-align: middle;
+}
+
+footer {
+  color: #fff;
+  background-color: var(--main-footer-background);
+  width: 100%;
+}
+
+footer p {
+  margin: 0;
+}
+
+footer .no-break {
+  white-space: nowrap;
+}
+
+footer .container {
+  padding-left: 0;
+  padding-right: 0;
+}
+
+footer a, footer a:hover {
+  color: #fff;
+}
+
+.markdown.desc {
+  margin-bottom: 1em;
+  max-width: 700px;
+}
+
+.markdown h1 {
+  font-size: 24px;
+  margin-bottom: 8px;
+}
+
+.markdown h2 {
+  font-size: 20px;
+  margin-top: 24px;
+  margin-bottom: 8px;
+}
+
+.markdown h3 {
+  font-size: 18px;
+  margin-bottom: 8px;
+  color: var(--main-text-color);
+}
+
+.markdown h4 {
+  font-size: 16px;
+  margin-bottom: 0;
+}
+
+.markdown li p {
+  margin: 0;
+}
+
+table {
+  margin-bottom: 1em;
+}
+
+table,
+th,
+td {
+  border: 1px solid lightgrey;
+  border-collapse: collapse;
+}
+
+th,
+td {
+  padding: 8px;
+}
+
+.gt-separated {
+  list-style: none;
+  padding: 0;
+  margin: 0;
+}
+
+.gt-separated li {
+  display: inline-block;
+}
+
+.gt-separated li:before {
+  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='%23DDDDDD' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>");
+  background-position: center;
+  content: "\00a0";
+  margin: 0 6px 0 4px;
+  padding: 0 3px 0 0;
+}
+
+.gt-separated.dark li:before {
+  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='%23727272' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>");
+}
+
+.gt-separated li:first-child:before {
+  background-image: none;
+  content: "";
+  margin: 0;
+  padding: 0;
+}
+
+.multi-line-signature {
+  font-size: 17px;
+  color: #727272;
+}
+
+.multi-line-signature .parameter {
+  margin-left: 60px;
+  display: block;
+  text-indent: -36px;
+}
+
+.breadcrumbs {
+  padding: 0;
+  margin: 8px 0 8px 0;
+  white-space: nowrap;
+  line-height: 1;
+}
+
+@media screen and (min-width: 840px) {
+  nav ol.breadcrumbs {
+    float: left;
+  }
+}
+
+@media screen and (max-width: 840px) {
+  .breadcrumbs {
+    margin: 0 0 24px 0;
+    overflow-x: hidden;
+  }
+}
+
+.breadcrumbs .gt-separated .dark .hidden-xs li+li:before {
+  color: var(--main-h-text);
+}
+
+ol.breadcrumbs li a {
+  color: var(--main-hyperlinks-color);
+}
+
+.self-crumb {
+  color: var(--main-h-text);
+}
+
+.self-name {
+  color: #555;
+  display: none;
+}
+
+.annotation-list {
+  list-style: none;
+  padding: 0;
+  display: inline;
+}
+
+.comma-separated {
+  list-style: none;
+  padding: 0;
+  display: inline;
+}
+
+.comma-separated li {
+  display: inline;
+}
+
+.comma-separated li:after {
+  content: ", ";
+}
+
+.comma-separated li:last-child:after {
+  content: "";
+}
+
+.end-with-period li:last-child:after {
+  content: ".";
+}
+
+.container > section:first-child {
+  border: 0;
+}
+
+.constructor-modifier {
+  font-style: italic;
+}
+
+/* Note that the generated HTML for pub packages may have `section` tags
+   transformed into `div` tags, so we have two selectors here. */
+section.multi-line-signature div.parameters,
+div.multi-line-signature div.parameters {
+  margin-left: 24px;
+}
+
+/* sidebar styles */
+
+.sidebar ol {
+  list-style: none;
+  line-height: 22px;
+  margin-top: 0;
+  margin-bottom: 0;
+  padding: 0 0 15px 0;
+}
+
+.sidebar h5 a,
+.sidebar h5 a:hover {
+  color: var(--main-sidebar-color);
+}
+
+.sidebar h5,
+.sidebar ol li {
+  text-overflow: ellipsis;
+  overflow: hidden;
+  padding: 3px 0 3px 3px;
+}
+
+.sidebar h5 {
+  color: var(--main-sidebar-color);
+  font-size: 18px;
+  margin: 0 0 22px 0;
+  padding-top: 0;
+}
+
+.sidebar ol li.section-title {
+  font-size: 18px;
+  font-weight: normal;
+  text-transform: uppercase;
+  padding-top: 25px;
+}
+
+.sidebar ol li.section-subtitle a {
+  color: inherit;
+}
+
+.sidebar ol li.section-subtitle {
+  font-weight: 400;
+  text-transform: uppercase;
+}
+
+.sidebar ol li.section-subitem {
+  margin-left: 12px;
+}
+
+.sidebar ol li:first-child {
+  padding-top: 3px;
+  margin-top: 0;
+}
+
+button {
+  padding: 0;
+}
+
+#sidenav-left-toggle {
+  display: none;
+  vertical-align: text-bottom;
+  padding: 0;
+  color: var(--main-icon-color);
+  user-select: none;
+  cursor: pointer;
+}
+
+#sidenav-left-toggle:hover {
+  color: var(--main-hyperlinks-color);
+}
+
+/* left-nav disappears, and can transition in from the left */
+@media screen and (max-width:840px) {
+  #sidenav-left-toggle {
+    display: inline;
+    width: 24px;
+    height: 24px;
+    border: none;
+    margin-right: 24px;
+    margin-left: 24px;
+    font-size: 24px;
+  }
+
+  #overlay-under-drawer.active {
+    opacity: 0.4;
+    height: 100%;
+    z-index: 1999;
+    position: fixed;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    background-color: black;
+    display: block;
+  }
+
+  .sidebar-offcanvas-left {
+    left: -100%;
+    position: fixed;
+    -webkit-transition:all .25s ease-out;
+    -o-transition:all .25s ease-out;
+    transition:all .25s ease-out;
+    z-index: 2000;
+    top: 0;
+    width: 280px; /* works all the way down to an iphone 4 */
+    height: 90%;
+    background-color: var(--main-bg-color);
+    overflow-y: scroll; /* TODO: how to hide scroll bars? */
+    padding: 10px;
+    margin: 10px 10px;
+    box-shadow: 5px 5px 5px 5px #444444;
+  }
+
+  ol#sidebar-nav {
+    font-size: 18px;
+    white-space: pre-line;
+  }
+
+  .sidebar-offcanvas-left.active {
+    left: 0; /* this animates our drawer into the page */
+  }
+
+  .self-name {
+    display: inline-block;
+    color: var(--main-hyperlinks-color);
+  }
+}
+
+.sidebar-offcanvas-left h5 {
+  margin-bottom: 10px;
+}
+
+.sidebar-offcanvas-left h5:last-of-type {
+  border: 0;
+  margin-bottom: 25px;
+}
+
+/* the right nav disappears out of view when the window shrinks */
+@media screen and (max-width: 992px) {
+  .sidebar-offcanvas-right {
+     display: none;
+   }
+}
+
+#overlay-under-drawer {
+  display: none;
+}
+
+/* find-as-you-type search box */
+
+.form-control {
+  border-radius: 0;
+  border: 0;
+}
+
+@media screen and (max-width: 840px) {
+  form.search {
+    display: none;
+  }
+}
+
+.typeahead {
+  width: 200px;
+  padding: 2px 7px 1px 7px;
+  line-height: 20px;
+  outline: none;
+}
+
+.tt-wrapper {
+  position: relative;
+  display: inline-block;
+}
+
+.tt-input {
+  position: relative;
+  vertical-align: top;
+}
+
+.navbar-right .tt-menu {
+  right: 0;
+  left: inherit !important;
+  width: 540px;
+  max-height: 280px;
+  overflow-y: scroll;
+}
+
+.navbar-right {
+  padding-right: 60px;
+}
+
+.tt-menu {
+  position: absolute;
+  top: 100%;
+  left: 0;
+  z-index: 100;
+  font-size: 14px;
+  margin: 0;
+  background-color: var(--main-bg-color);
+  border: 1px solid var(--main-header-color);
+  -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);
+     -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);
+          box-shadow: 0 5px 10px rgba(0,0,0,.2);
+}
+
+
+.typeahead {
+  padding: 17px 17px 17px 50px;
+  width: 422px;
+  height: 20px;
+  font-size: 13px;
+  background-image: url("./search.svg");
+  background-repeat: no-repeat;
+  background-position: 4%;
+  outline: 0;
+  background-size: 20px;
+  filter: var(--main-number-filter);
+    -webkit-filter: var(--main-number-filter);
+}
+
+.search-summary {
+  margin-bottom: 10px;
+}
+
+a.tt-container {
+  font-size: 16px;
+  color: var(--main-hyperlinks-color);
+}
+
+.enter-search-message {
+  position: -webkit-sticky;
+  position: sticky;
+  top: 0;
+  background-color: #AAA;
+  padding: 0;
+  font-size: 14px;
+  margin: 0;
+  clear: both;
+  text-align: center;
+  color: black;
+}
+
+.tt-suggestion:hover {
+  cursor: pointer;
+  color: #fff;
+  background-color: #0097cf;
+}
+
+.tt-suggestion:hover .search-from-lib {
+  color: #ddd;
+}
+
+.tt-suggestion.tt-cursor {
+  color: #fff;
+  background-color: #0097cf;
+}
+
+.tt-suggestion.tt-cursor .search-from-lib {
+  color: #ddd;
+}
+
+.tt-suggestion p {
+  margin: 0;
+}
+
+.tt-container {
+  font-size: 14px;
+  margin-bottom: 0;
+  margin-top: 15px;
+}
+
+.tt-container-text {
+  color: var(--main-text-color);
+}
+
+
+/* Search results formatting for mini results below search bar. */
+
+.tt-search-results .tt-container {
+  margin-top: 5px;
+  margin-bottom: 5px;
+}
+
+/* Do not show the container as a section. */
+.tt-search-results .tt-container-text {
+  display: none
+}
+
+/* An inline style. */
+.tt-search-results .tt-suggestion {
+  color: var(--main-text-color);
+  margin-top: 5px;
+  overflow: hidden;
+  padding-left: 10px;
+  padding-right: 10px;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.tt-search-results .tt-suggestion-title {
+  font-size: 14px;
+  padding-right: 5px;
+}
+
+.tt-search-results .tt-suggestion-container {
+  color: var(--main-keyword-color);
+  font-size: 14px;
+  font-style: italic;
+  padding-right: 5px;
+}
+
+.tt-search-results .one-line-description {
+  color: var(--main-keyword-color);
+  display: inline;
+  margin-left: 0;
+}
+
+
+.tt-search-results .one-line-description::before {
+  content: open-quote;
+}
+
+.tt-search-results .one-line-description::after {
+  content: close-quote;
+}
+
+/* Search results formatting for `search.html`. */
+
+/* A block style. */
+#dartdoc-main-content .tt-suggestion {
+  color: var(--main-text-color);
+  margin-top: 5px;
+  margin-bottom: 10px;
+  border-style: solid;
+  border-color: lightgrey;
+  border-width: 0.5px;
+}
+
+#dartdoc-main-content .tt-suggestion-title {
+  display: block;
+  font-weight: 500;
+  margin: 4px 10px 0;
+}
+
+#dartdoc-main-content .one-line-description {
+  display: block;
+  margin: 2px 10px 3px;
+}
+
+/* Do not show a result's container. */
+#dartdoc-main-content .tt-suggestion-container {
+  display: none;
+}
+
+@media screen and (max-width: 840px) {
+ .typeahead {
+   padding: 17px 17px 17px 33px;
+   width: 240px;
+   height: 17px;
+   border: 1px solid #f5f5f5;
+   background-position: 3%;
+   margin: 10px 10px 10px 9px;
+ }
+
+  header {
+    padding-left: 0;
+  }
+}
+
+@media screen and (max-width: 320px) {
+  #sidenav-left-toggle {
+    margin-right: 10px;
+    margin-left: 20px;
+  }
+
+  .self-name {
+    margin-right: 10px;
+  }
+}
+
+::placeholder {
+  filter: brightness(0.85);
+}
+
+.search-body {
+  border: 1px solid #7f7f7f;
+  max-width: 400px;
+  box-shadow: 3px 3px 5px rgba(0,0,0,0.1);
+}
+
+/* Note that the generated HTML for pub packages may have `section` tags
+   transformed into `div` tags, so we have two selectors here. */
+section#setter, div#setter {
+  border-top: 1px solid #ddd;
+  padding-top: 36px;
+}
+
+li.inherited a {
+  opacity: 0.65;
+  font-style: italic;
+}
+
+#instance-methods dt.inherited .name,
+#instance-properties dt.inherited .name,
+#operators dt.inherited .name {
+  font-weight: 400;
+  font-style: italic;
+}
+
+#instance-methods dt.inherited .signature,
+#instance-properties dt.inherited .signature,
+#operators dt.inherited .signature {
+  font-weight: 400;
+}
+
+@media print {
+  .subnav, .sidebar {
+    display: none;
+  }
+
+  a[href]:after {
+   content: "" !important;
+  }
+}
+
+/* github alert styles */
+
+.markdown-alert {
+  margin-top: 1rem;
+  margin-bottom: 1rem;
+  padding: 1.25rem;
+}
+
+.markdown-alert>:last-child {
+  margin-bottom: 0;
+}
+
+.markdown-alert-title {
+  display: flex;
+  align-items: center;
+  gap: 0.4rem;
+  margin-bottom: 0.5rem;
+
+  font-weight: bold;
+  -webkit-font-smoothing: antialiased;
+}
+
+.markdown-alert-title:before {
+  font: 24px / 1 'Material Symbols Outlined';
+}
+
+/* note, tip, important, warning, caution */
+
+.markdown-alert.markdown-alert-note {
+  background-color: var(--alert-info);
+}
+
+.markdown-alert-note .markdown-alert-title:before {
+  content: 'info';
+}
+
+.markdown-alert.markdown-alert-tip {
+  background-color: var(--alert-tip);
+}
+
+.markdown-alert-tip .markdown-alert-title:before {
+  content: 'lightbulb';
+}
+
+.markdown-alert.markdown-alert-important {
+  background-color: var(--alert-important);
+}
+
+.markdown-alert-important .markdown-alert-title:before {
+  content: 'feedback';
+}
+
+.markdown-alert.markdown-alert-warning {
+  background-color: var(--alert-warning);
+}
+
+.markdown-alert-warning .markdown-alert-title:before {
+  content: 'warning';
+}
+
+.markdown-alert.markdown-alert-caution {
+  background-color: var(--alert-error);
+}
+
+.markdown-alert-caution .markdown-alert-title:before {
+  content: 'report';
+}

From e063d5e75dccbfa0d0532a029cf0e349235149d5 Mon Sep 17 00:00:00 2001
From: Parker Lougheed <parlough@gmail.com>
Date: Thu, 24 Oct 2024 21:10:37 -0500
Subject: [PATCH 2/5] Build compressed css from sass file

---
 lib/resources/styles.css | 1322 +-------------------------------------
 tool/task.dart           |    3 +-
 2 files changed, 3 insertions(+), 1322 deletions(-)

diff --git a/lib/resources/styles.css b/lib/resources/styles.css
index 039525502a..a0bb09e06e 100644
--- a/lib/resources/styles.css
+++ b/lib/resources/styles.css
@@ -1,1321 +1 @@
-@charset "UTF-8";
-.light-theme {
-  /*background-color body, listdropdown*/
-  --main-bg-color: #fff;
-  /*header id-tittle*/
-  --main-header-color: #eeeeee;
-  /*package-name*/
-  --main-sidebar-color: #727272;
-  /*section-title and section subtitle, desc markdown(body, dd, h3), header a*/
-  --main-text-color: #111111;
-  /*typehead search-box*/
-  --main-search-bar: #fff;
-  /* scrollbar-thumb */
-  --main-scrollbar-color: #CCC;
-  /* footer */
-  --main-footer-background: #111111;
-  /*header text color*/
-  --main-h-text: black;
-  /* hyperlinks*/
-  --main-hyperlinks-color: #0175C2;
-  /*search background*/
-  --main-search-background: transparent;
-  /*code snippets*/
-  --main-code-bg: #f8f8f8;
-  --main-keyword-color: #333;
-  --main-tag-color: #000080;
-  --main-section-color: #900;
-  --main-comment-color: #998;
-  --main-var-color: #008080;
-  --main-string-color: #d14;
-  --main-number-filter: invert(0%);
-  --main-icon-color: black;
-  /* alerts */
-  --alert-info: #e7f8ff;
-  --alert-tip: #ecfaf7;
-  --alert-important: #e2dbff;
-  --alert-warning: #fcf8e3;
-  --alert-error: #fde9ee;
-}
-
-.dark-theme {
-  /*background-color body, listdropdown*/
-  --main-bg-color: #10161E;
-  /*header id-tittle*/
-  --main-header-color: #1C2834;
-  /*package-name*/
-  --main-sidebar-color: #fff;
-  /*section-title and section subtitle, desc markdown(body, dd, h3), header a*/
-  --main-text-color: #fff;
-  /*typehead search-box*/
-  --main-search-bar: #454545;
-  /* scrollbar-thumb */
-  --main-scrollbar-color: #5f6368;
-  /* footer */
-  --main-footer-background: #27323a;
-  /* hyperlinks*/
-  --main-hyperlinks-color: #00D2FA;
-  /*search background*/
-  --main-search-background: black;
-  /*code snippets*/
-  --main-code-bg: #10161E;
-  --main-keyword-color: white;
-  --main-tag-color: #00D2FA;
-  --main-section-color: #FF2D64;
-  --main-comment-color: #909CC3;
-  --main-var-color: #55A09B;
-  --main-string-color: #FF2D64;
-  --main-number-filter: invert(100%);
-  --main-icon-color: white;
-  /* alerts */
-  --alert-info: #043875;
-  --alert-tip: #065517;
-  --alert-important: #4a00b4;
-  --alert-warning: #7b6909;
-  --alert-error: #7a0c17;
-}
-
-#theme {
-  display: none;
-}
-
-#theme-button {
-  position: absolute;
-  right: 30px;
-  height: 24px;
-}
-
-#theme-button .material-symbols-outlined {
-  color: var(--main-icon-color);
-  user-select: none;
-  cursor: pointer;
-}
-
-#theme-button .material-symbols-outlined:hover {
-  color: var(--main-hyperlinks-color);
-}
-
-li .material-symbols-outlined, dt .material-symbols-outlined {
-  font-size: 1em;
-  vertical-align: text-bottom;
-}
-
-dt .material-symbols-outlined {
-  text-indent: 0;
-}
-
-.light-theme #light-theme-button {
-  display: none;
-}
-
-.dark-theme #dark-theme-button {
-  display: none;
-}
-
-/*
-Only show images that fit their theme using GitHub's syntax, see:
-https://github.blog/changelog/2021-11-24-specify-theme-context-for-images-in-markdown/
-*/
-.dark-theme img[src$="#gh-light-mode-only"] {
-  display: none;
-}
-
-.light-theme img[src$="#gh-dark-mode-only"] {
-  display: none;
-}
-
-/* for layout */
-html,
-body {
-  margin: 0;
-  padding: 0;
-  height: 100%;
-  width: 100%;
-  overflow: hidden;
-  box-sizing: border-box;
-}
-
-*, *:before, *:after {
-  box-sizing: inherit;
-}
-
-body {
-  display: flex;
-  flex-direction: column;
-  -webkit-overflow-scrolling: touch;
-}
-
-header {
-  flex: 0 0 50px;
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  padding-left: 30px;
-  padding-right: 30px;
-  background-color: var(--main-header-color);
-}
-
-header ol {
-  list-style: none;
-  margin: 0;
-  padding: 0;
-}
-
-header ol li {
-  display: inline;
-}
-
-header form {
-  display: flex;
-  flex: 1;
-  justify-content: flex-end;
-}
-
-header#header-search-sidebar {
-  height: 50px;
-  margin-bottom: 25px;
-}
-
-footer {
-  flex: 0 0 16px;
-  text-align: center;
-  padding: 16px 20px;
-}
-
-main {
-  flex: 1;
-  display: flex;
-  flex-direction: row;
-  min-height: 0;
-}
-
-.sidebar-offcanvas-left {
-  flex: 0 1 230px;
-  order: 1;
-  overflow-y: scroll;
-  padding: 20px 0 15px 30px;
-  margin: 5px 20px 0 0;
-}
-
-::-webkit-scrollbar-button {
-  display: none;
-  height: 13px;
-  border-radius: 0;
-  background-color: #AAA;
-}
-
-::-webkit-scrollbar-button:hover {
-  background-color: #AAA;
-}
-
-::-webkit-scrollbar-thumb {
-  background-color: var(--main-scrollbar-color);
-}
-
-::-webkit-scrollbar-thumb:hover {
-  background-color: var(--main-scrollbar-color);
-}
-
-::-webkit-scrollbar {
-  width: 4px;
-}
-
-.main-content::-webkit-scrollbar {
-  width: 8px;
-}
-
-.main-content {
-  flex: 1;
-  order: 2;
-  overflow-y: scroll;
-  padding: 10px 20px 0 20px;
-}
-
-.sidebar-offcanvas-right {
-  flex: 0 1 12em;
-  order: 3;
-  overflow-y: scroll;
-  padding: 20px 15px 15px 15px;
-  margin-top: 5px;
-  margin-right: 20px;
-}
-
-/* end for layout */
-body {
-  -webkit-text-size-adjust: 100%;
-  overflow-x: hidden;
-  font-family: Roboto, sans-serif;
-  font-size: 16px;
-  line-height: 1.42857143;
-  color: var(--main-text-color);
-  background-color: var(--main-bg-color);
-}
-
-nav.navbar {
-  background-color: inherit;
-  min-height: 50px;
-  border: 0;
-}
-
-@media (max-width: 840px) {
-  .hidden-xs {
-    display: none !important;
-  }
-}
-@media (min-width: 841px) {
-  .hidden-l {
-    display: none !important;
-  }
-}
-nav.navbar .row {
-  padding-top: 8px;
-}
-
-nav .container {
-  white-space: nowrap;
-}
-
-header {
-  background-color: var(--main-header-color);
-  box-shadow: 0 3px 5px rgba(0, 0, 0, 0.1);
-}
-
-.pre {
-  border: 1px solid #ddd;
-  font-size: 14px;
-}
-
-.hljs-string, .hljs-doctag {
-  color: var(--main-string-color);
-}
-
-.hljs-number, .hljs-literal, .hljs-variable, .hljs-template-variable, .hljs-tag .hljs-attr {
-  color: var(--main-var-color);
-}
-
-.hljs-comment, .hljs-quote {
-  color: var(--main-comment-color);
-  font-style: italic;
-}
-
-.hljs-title, .hljs-section, .hljs-selector-id {
-  color: var(--main-section-color);
-  font-weight: bold;
-}
-
-.hljs-tag, .hljs-name, .hljs-attribute {
-  color: var(--main-tag-color);
-  font-weight: normal;
-}
-
-.hljs-keyword, .hljs-selector-tag, .hljs-subst {
-  color: var(--main-keyword-color);
-  font-weight: bold;
-}
-
-.hljs {
-  display: block;
-  overflow-x: auto;
-  padding: 0.5em;
-  color: var(--main-text-color);
-  background: var(--main-code-bg);
-}
-
-a {
-  text-decoration: none;
-}
-
-section {
-  /* Note that the generated HTML for pub packages may have `section` tags
-     transformed into `div` tags. */
-  margin-bottom: 36px;
-}
-
-dl {
-  margin: 0;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
-  font-family: Roboto, sans-serif;
-  font-weight: 400;
-  margin-top: 1.5em;
-  color: var(--main-text-color);
-}
-
-h1.title {
-  overflow: hidden;
-  text-overflow: ellipsis;
-}
-
-h1 {
-  font-size: 37px;
-  margin-top: 0;
-  margin-bottom: 0.67em;
-}
-
-h2 {
-  font-size: 28px;
-}
-
-h5 {
-  font-size: 16px;
-}
-
-p {
-  margin-bottom: 1em;
-  margin-top: 0;
-}
-
-a {
-  color: var(--main-hyperlinks-color);
-}
-
-a:hover {
-  color: #13B9FD;
-}
-
-pre.prettyprint {
-  font-family: "Roboto Mono", Menlo, monospace;
-  color: black;
-  border-radius: 0;
-  font-size: 15px;
-  word-wrap: normal;
-  line-height: 1.4;
-  border: 0;
-  margin: 16px 0 16px 0;
-  padding: 8px;
-}
-
-pre code {
-  white-space: pre;
-  word-wrap: initial;
-  font-size: 100%;
-}
-
-.fixed {
-  white-space: pre;
-}
-
-pre {
-  border: 1px solid #ddd;
-  background-color: #eee;
-  font-size: 14px;
-}
-
-code {
-  font-family: "Roboto Mono", Menlo, monospace;
-  color: inherit;
-  padding: 0.2em 0.4em;
-  font-size: 85%;
-  background-color: rgba(27, 31, 35, 0.05);
-  border-radius: 3px;
-}
-
-@media (max-width: 840px) {
-  nav .container {
-    width: 100%;
-  }
-  h1 {
-    font-size: 24px;
-  }
-  pre {
-    margin: 16px 0;
-  }
-}
-header h1 {
-  font-weight: 400;
-  margin-bottom: 16px;
-}
-
-header a,
-header p,
-header li {
-  color: #0175C2;
-}
-
-header a:hover {
-  color: #0175C2;
-}
-
-header h1 .kind {
-  color: #555;
-}
-
-dt {
-  font-weight: normal;
-}
-
-dd {
-  color: var(--main-text-color);
-  margin-bottom: 1em;
-  margin-left: 0;
-}
-
-dd.callable, dd.constant, dd.property {
-  margin-bottom: 24px;
-}
-
-dd p {
-  overflow-x: hidden;
-  text-overflow: ellipsis;
-  margin-bottom: 0;
-}
-
-/* Enum values do not have their own pages; their full docs are presented on the
- * enum class's page. */
-dt.constant + dd p {
-  margin-bottom: 1em;
-}
-
-/* indents wrapped lines */
-/* Note that the generated HTML for pub packages may have `section` tags
-   transformed into `div` tags, so we have two selectors here. */
-section.summary dt, div.summary dt {
-  margin-left: 24px;
-  text-indent: -24px;
-}
-
-.dl-horizontal dd {
-  margin-left: initial;
-}
-
-dl.dl-horizontal dt {
-  font-style: normal;
-  text-align: left;
-  color: #727272;
-  margin-right: 20px;
-  width: initial;
-}
-
-dt .name {
-  font-weight: 500;
-}
-
-dl dt.callable .name {
-  float: none;
-  width: auto;
-}
-
-.type-parameter {
-  white-space: nowrap;
-}
-
-.multi-line-signature .type-parameter .parameter {
-  margin-left: 0;
-  display: unset;
-}
-
-.parameter-list {
-  display: table-cell;
-  margin-left: 10px;
-  list-style-type: none;
-  padding-inline-start: unset;
-}
-
-.parameter-list.single-line {
-  display: inline;
-  margin-left: 0;
-}
-
-.parameter-list.single-line > li {
-  display: inline;
-}
-
-.parameter-list.single-line > li > .parameter {
-  display: inline;
-  margin-left: 0;
-  text-indent: 0;
-}
-
-.signature {
-  color: var(--main-text-color);
-}
-
-.signature a {
-  color: var(--main-hyperlinks-color);
-}
-
-.optional {
-  font-style: italic;
-}
-
-.undocumented {
-  font-style: italic;
-}
-
-.is-const {
-  font-style: italic;
-}
-
-.deprecated {
-  text-decoration: line-through;
-}
-
-.category.linked {
-  font-weight: bold;
-  opacity: 1;
-}
-
-/* Colors for category based on categoryOrder in dartdoc_options.config. */
-.category.cp-0 {
-  background-color: #54b7c4;
-}
-
-.category.cp-1 {
-  background-color: #54c47f;
-}
-
-.category.cp-2 {
-  background-color: #c4c254;
-}
-
-.category.cp-3 {
-  background-color: #c49f54;
-}
-
-.category.cp-4 {
-  background-color: #c45465;
-}
-
-.category.cp-5 {
-  background-color: #c454c4;
-}
-
-.category a {
-  color: white;
-}
-
-.category {
-  padding: 2px 4px;
-  font-size: 12px;
-  border-radius: 4px;
-  background-color: #999;
-  text-transform: uppercase;
-  color: white;
-  opacity: 0.5;
-}
-
-h1 .category {
-  vertical-align: middle;
-}
-
-/* Do not display "provided by X extension" text on extension pages. */
-.main-content.extension-page .from-extension {
-  display: none;
-}
-
-sup.muted {
-  color: var(--main-sidebar-color);
-  font-size: 0.6em;
-}
-
-.from-extension > span {
-  background-color: var(--alert-warning);
-  font-style: italic;
-  padding: 2px;
-}
-
-/* The badge under a declaration for things like "const", "read-only", etc. and for the badges inline like sealed or interface */
-/* See https://github.com/dart-lang/dartdoc/blob/main/lib/src/model/feature.dart */
-.feature {
-  display: inline-block;
-  background: var(--main-bg-color);
-  border: 1px solid var(--main-hyperlinks-color);
-  border-radius: 20px;
-  color: var(--main-hyperlinks-color);
-  font-size: 12px;
-  padding: 1px 6px;
-  margin: 0 8px 0 0;
-}
-
-a.feature:hover {
-  border-color: #13B9FD;
-}
-
-h1 .feature {
-  vertical-align: middle;
-  margin: 0 -2px 0 0;
-}
-
-.source-link {
-  padding: 18px 4px;
-  font-size: 18px;
-  vertical-align: middle;
-}
-
-@media (max-width: 840px) {
-  .source-link {
-    padding: 7px 2px;
-    font-size: 10px;
-  }
-}
-#external-links {
-  float: right;
-}
-
-.btn-group {
-  position: relative;
-  display: inline-flex;
-  vertical-align: middle;
-}
-
-footer {
-  color: #fff;
-  background-color: var(--main-footer-background);
-  width: 100%;
-}
-
-footer p {
-  margin: 0;
-}
-
-footer .no-break {
-  white-space: nowrap;
-}
-
-footer .container {
-  padding-left: 0;
-  padding-right: 0;
-}
-
-footer a, footer a:hover {
-  color: #fff;
-}
-
-.markdown.desc {
-  margin-bottom: 1em;
-  max-width: 700px;
-}
-
-.markdown h1 {
-  font-size: 24px;
-  margin-bottom: 8px;
-}
-
-.markdown h2 {
-  font-size: 20px;
-  margin-top: 24px;
-  margin-bottom: 8px;
-}
-
-.markdown h3 {
-  font-size: 18px;
-  margin-bottom: 8px;
-  color: var(--main-text-color);
-}
-
-.markdown h4 {
-  font-size: 16px;
-  margin-bottom: 0;
-}
-
-.markdown li p {
-  margin: 0;
-}
-
-table {
-  margin-bottom: 1em;
-}
-
-table,
-th,
-td {
-  border: 1px solid lightgrey;
-  border-collapse: collapse;
-}
-
-th,
-td {
-  padding: 8px;
-}
-
-.gt-separated {
-  list-style: none;
-  padding: 0;
-  margin: 0;
-}
-
-.gt-separated li {
-  display: inline-block;
-}
-
-.gt-separated li:before {
-  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='%23DDDDDD' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>");
-  background-position: center;
-  content: " ";
-  margin: 0 6px 0 4px;
-  padding: 0 3px 0 0;
-}
-
-.gt-separated.dark li:before {
-  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='%23727272' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>");
-}
-
-.gt-separated li:first-child:before {
-  background-image: none;
-  content: "";
-  margin: 0;
-  padding: 0;
-}
-
-.multi-line-signature {
-  font-size: 17px;
-  color: #727272;
-}
-
-.multi-line-signature .parameter {
-  margin-left: 60px;
-  display: block;
-  text-indent: -36px;
-}
-
-.breadcrumbs {
-  padding: 0;
-  margin: 8px 0 8px 0;
-  white-space: nowrap;
-  line-height: 1;
-}
-
-@media screen and (min-width: 840px) {
-  nav ol.breadcrumbs {
-    float: left;
-  }
-}
-@media screen and (max-width: 840px) {
-  .breadcrumbs {
-    margin: 0 0 24px 0;
-    overflow-x: hidden;
-  }
-}
-.breadcrumbs .gt-separated .dark .hidden-xs li + li:before {
-  color: var(--main-h-text);
-}
-
-ol.breadcrumbs li a {
-  color: var(--main-hyperlinks-color);
-}
-
-.self-crumb {
-  color: var(--main-h-text);
-}
-
-.self-name {
-  color: #555;
-  display: none;
-}
-
-.annotation-list {
-  list-style: none;
-  padding: 0;
-  display: inline;
-}
-
-.comma-separated {
-  list-style: none;
-  padding: 0;
-  display: inline;
-}
-
-.comma-separated li {
-  display: inline;
-}
-
-.comma-separated li:after {
-  content: ", ";
-}
-
-.comma-separated li:last-child:after {
-  content: "";
-}
-
-.end-with-period li:last-child:after {
-  content: ".";
-}
-
-.container > section:first-child {
-  border: 0;
-}
-
-.constructor-modifier {
-  font-style: italic;
-}
-
-/* Note that the generated HTML for pub packages may have `section` tags
-   transformed into `div` tags, so we have two selectors here. */
-section.multi-line-signature div.parameters,
-div.multi-line-signature div.parameters {
-  margin-left: 24px;
-}
-
-/* sidebar styles */
-.sidebar ol {
-  list-style: none;
-  line-height: 22px;
-  margin-top: 0;
-  margin-bottom: 0;
-  padding: 0 0 15px 0;
-}
-
-.sidebar h5 a,
-.sidebar h5 a:hover {
-  color: var(--main-sidebar-color);
-}
-
-.sidebar h5,
-.sidebar ol li {
-  text-overflow: ellipsis;
-  overflow: hidden;
-  padding: 3px 0 3px 3px;
-}
-
-.sidebar h5 {
-  color: var(--main-sidebar-color);
-  font-size: 18px;
-  margin: 0 0 22px 0;
-  padding-top: 0;
-}
-
-.sidebar ol li.section-title {
-  font-size: 18px;
-  font-weight: normal;
-  text-transform: uppercase;
-  padding-top: 25px;
-}
-
-.sidebar ol li.section-subtitle a {
-  color: inherit;
-}
-
-.sidebar ol li.section-subtitle {
-  font-weight: 400;
-  text-transform: uppercase;
-}
-
-.sidebar ol li.section-subitem {
-  margin-left: 12px;
-}
-
-.sidebar ol li:first-child {
-  padding-top: 3px;
-  margin-top: 0;
-}
-
-button {
-  padding: 0;
-}
-
-#sidenav-left-toggle {
-  display: none;
-  vertical-align: text-bottom;
-  padding: 0;
-  color: var(--main-icon-color);
-  user-select: none;
-  cursor: pointer;
-}
-
-#sidenav-left-toggle:hover {
-  color: var(--main-hyperlinks-color);
-}
-
-/* left-nav disappears, and can transition in from the left */
-@media screen and (max-width: 840px) {
-  #sidenav-left-toggle {
-    display: inline;
-    width: 24px;
-    height: 24px;
-    border: none;
-    margin-right: 24px;
-    margin-left: 24px;
-    font-size: 24px;
-  }
-  #overlay-under-drawer.active {
-    opacity: 0.4;
-    height: 100%;
-    z-index: 1999;
-    position: fixed;
-    top: 0;
-    left: 0;
-    right: 0;
-    bottom: 0;
-    background-color: black;
-    display: block;
-  }
-  .sidebar-offcanvas-left {
-    left: -100%;
-    position: fixed;
-    -webkit-transition: all 0.25s ease-out;
-    -o-transition: all 0.25s ease-out;
-    transition: all 0.25s ease-out;
-    z-index: 2000;
-    top: 0;
-    width: 280px; /* works all the way down to an iphone 4 */
-    height: 90%;
-    background-color: var(--main-bg-color);
-    overflow-y: scroll; /* TODO: how to hide scroll bars? */
-    padding: 10px;
-    margin: 10px 10px;
-    box-shadow: 5px 5px 5px 5px #444444;
-  }
-  ol#sidebar-nav {
-    font-size: 18px;
-    white-space: pre-line;
-  }
-  .sidebar-offcanvas-left.active {
-    left: 0; /* this animates our drawer into the page */
-  }
-  .self-name {
-    display: inline-block;
-    color: var(--main-hyperlinks-color);
-  }
-}
-.sidebar-offcanvas-left h5 {
-  margin-bottom: 10px;
-}
-
-.sidebar-offcanvas-left h5:last-of-type {
-  border: 0;
-  margin-bottom: 25px;
-}
-
-/* the right nav disappears out of view when the window shrinks */
-@media screen and (max-width: 992px) {
-  .sidebar-offcanvas-right {
-    display: none;
-  }
-}
-#overlay-under-drawer {
-  display: none;
-}
-
-/* find-as-you-type search box */
-.form-control {
-  border-radius: 0;
-  border: 0;
-}
-
-@media screen and (max-width: 840px) {
-  form.search {
-    display: none;
-  }
-}
-.typeahead {
-  width: 200px;
-  padding: 2px 7px 1px 7px;
-  line-height: 20px;
-  outline: none;
-}
-
-.tt-wrapper {
-  position: relative;
-  display: inline-block;
-}
-
-.tt-input {
-  position: relative;
-  vertical-align: top;
-}
-
-.navbar-right .tt-menu {
-  right: 0;
-  left: inherit !important;
-  width: 540px;
-  max-height: 280px;
-  overflow-y: scroll;
-}
-
-.navbar-right {
-  padding-right: 60px;
-}
-
-.tt-menu {
-  position: absolute;
-  top: 100%;
-  left: 0;
-  z-index: 100;
-  font-size: 14px;
-  margin: 0;
-  background-color: var(--main-bg-color);
-  border: 1px solid var(--main-header-color);
-  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-}
-
-.typeahead {
-  padding: 17px 17px 17px 50px;
-  width: 422px;
-  height: 20px;
-  font-size: 13px;
-  background-image: url("./search.svg");
-  background-repeat: no-repeat;
-  background-position: 4%;
-  outline: 0;
-  background-size: 20px;
-  filter: var(--main-number-filter);
-  -webkit-filter: var(--main-number-filter);
-}
-
-.search-summary {
-  margin-bottom: 10px;
-}
-
-a.tt-container {
-  font-size: 16px;
-  color: var(--main-hyperlinks-color);
-}
-
-.enter-search-message {
-  position: -webkit-sticky;
-  position: sticky;
-  top: 0;
-  background-color: #AAA;
-  padding: 0;
-  font-size: 14px;
-  margin: 0;
-  clear: both;
-  text-align: center;
-  color: black;
-}
-
-.tt-suggestion:hover {
-  cursor: pointer;
-  color: #fff;
-  background-color: #0097cf;
-}
-
-.tt-suggestion:hover .search-from-lib {
-  color: #ddd;
-}
-
-.tt-suggestion.tt-cursor {
-  color: #fff;
-  background-color: #0097cf;
-}
-
-.tt-suggestion.tt-cursor .search-from-lib {
-  color: #ddd;
-}
-
-.tt-suggestion p {
-  margin: 0;
-}
-
-.tt-container {
-  font-size: 14px;
-  margin-bottom: 0;
-  margin-top: 15px;
-}
-
-.tt-container-text {
-  color: var(--main-text-color);
-}
-
-/* Search results formatting for mini results below search bar. */
-.tt-search-results .tt-container {
-  margin-top: 5px;
-  margin-bottom: 5px;
-}
-
-/* Do not show the container as a section. */
-.tt-search-results .tt-container-text {
-  display: none;
-}
-
-/* An inline style. */
-.tt-search-results .tt-suggestion {
-  color: var(--main-text-color);
-  margin-top: 5px;
-  overflow: hidden;
-  padding-left: 10px;
-  padding-right: 10px;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-.tt-search-results .tt-suggestion-title {
-  font-size: 14px;
-  padding-right: 5px;
-}
-
-.tt-search-results .tt-suggestion-container {
-  color: var(--main-keyword-color);
-  font-size: 14px;
-  font-style: italic;
-  padding-right: 5px;
-}
-
-.tt-search-results .one-line-description {
-  color: var(--main-keyword-color);
-  display: inline;
-  margin-left: 0;
-}
-
-.tt-search-results .one-line-description::before {
-  content: open-quote;
-}
-
-.tt-search-results .one-line-description::after {
-  content: close-quote;
-}
-
-/* Search results formatting for `search.html`. */
-/* A block style. */
-#dartdoc-main-content .tt-suggestion {
-  color: var(--main-text-color);
-  margin-top: 5px;
-  margin-bottom: 10px;
-  border-style: solid;
-  border-color: lightgrey;
-  border-width: 0.5px;
-}
-
-#dartdoc-main-content .tt-suggestion-title {
-  display: block;
-  font-weight: 500;
-  margin: 4px 10px 0;
-}
-
-#dartdoc-main-content .one-line-description {
-  display: block;
-  margin: 2px 10px 3px;
-}
-
-/* Do not show a result's container. */
-#dartdoc-main-content .tt-suggestion-container {
-  display: none;
-}
-
-@media screen and (max-width: 840px) {
-  .typeahead {
-    padding: 17px 17px 17px 33px;
-    width: 240px;
-    height: 17px;
-    border: 1px solid #f5f5f5;
-    background-position: 3%;
-    margin: 10px 10px 10px 9px;
-  }
-  header {
-    padding-left: 0;
-  }
-}
-@media screen and (max-width: 320px) {
-  #sidenav-left-toggle {
-    margin-right: 10px;
-    margin-left: 20px;
-  }
-  .self-name {
-    margin-right: 10px;
-  }
-}
-::placeholder {
-  filter: brightness(0.85);
-}
-
-.search-body {
-  border: 1px solid #7f7f7f;
-  max-width: 400px;
-  box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.1);
-}
-
-/* Note that the generated HTML for pub packages may have `section` tags
-   transformed into `div` tags, so we have two selectors here. */
-section#setter, div#setter {
-  border-top: 1px solid #ddd;
-  padding-top: 36px;
-}
-
-li.inherited a {
-  opacity: 0.65;
-  font-style: italic;
-}
-
-#instance-methods dt.inherited .name,
-#instance-properties dt.inherited .name,
-#operators dt.inherited .name {
-  font-weight: 400;
-  font-style: italic;
-}
-
-#instance-methods dt.inherited .signature,
-#instance-properties dt.inherited .signature,
-#operators dt.inherited .signature {
-  font-weight: 400;
-}
-
-@media print {
-  .subnav, .sidebar {
-    display: none;
-  }
-  a[href]:after {
-    content: "" !important;
-  }
-}
-/* github alert styles */
-.markdown-alert {
-  margin-top: 1rem;
-  margin-bottom: 1rem;
-  padding: 1.25rem;
-}
-
-.markdown-alert > :last-child {
-  margin-bottom: 0;
-}
-
-.markdown-alert-title {
-  display: flex;
-  align-items: center;
-  gap: 0.4rem;
-  margin-bottom: 0.5rem;
-  font-weight: bold;
-  -webkit-font-smoothing: antialiased;
-}
-
-.markdown-alert-title:before {
-  font: 24px/1 "Material Symbols Outlined";
-}
-
-/* note, tip, important, warning, caution */
-.markdown-alert.markdown-alert-note {
-  background-color: var(--alert-info);
-}
-
-.markdown-alert-note .markdown-alert-title:before {
-  content: "info";
-}
-
-.markdown-alert.markdown-alert-tip {
-  background-color: var(--alert-tip);
-}
-
-.markdown-alert-tip .markdown-alert-title:before {
-  content: "lightbulb";
-}
-
-.markdown-alert.markdown-alert-important {
-  background-color: var(--alert-important);
-}
-
-.markdown-alert-important .markdown-alert-title:before {
-  content: "feedback";
-}
-
-.markdown-alert.markdown-alert-warning {
-  background-color: var(--alert-warning);
-}
-
-.markdown-alert-warning .markdown-alert-title:before {
-  content: "warning";
-}
-
-.markdown-alert.markdown-alert-caution {
-  background-color: var(--alert-error);
-}
-
-.markdown-alert-caution .markdown-alert-title:before {
-  content: "report";
-}
\ No newline at end of file
+.light-theme{--main-bg-color: #fff;--main-header-color: #eeeeee;--main-sidebar-color: #727272;--main-text-color: #111111;--main-search-bar: #fff;--main-scrollbar-color: #CCC;--main-footer-background: #111111;--main-h-text: black;--main-hyperlinks-color: #0175C2;--main-search-background: transparent;--main-code-bg: #f8f8f8;--main-keyword-color: #333;--main-tag-color: #000080;--main-section-color: #900;--main-comment-color: #998;--main-var-color: #008080;--main-string-color: #d14;--main-number-filter: invert(0%);--main-icon-color: black;--alert-info: #e7f8ff;--alert-tip: #ecfaf7;--alert-important: #e2dbff;--alert-warning: #fcf8e3;--alert-error: #fde9ee}.dark-theme{--main-bg-color: #10161E;--main-header-color: #1C2834;--main-sidebar-color: #fff;--main-text-color: #fff;--main-search-bar: #454545;--main-scrollbar-color: #5f6368;--main-footer-background: #27323a;--main-hyperlinks-color: #00D2FA;--main-search-background: black;--main-code-bg: #10161E;--main-keyword-color: white;--main-tag-color: #00D2FA;--main-section-color: #FF2D64;--main-comment-color: #909CC3;--main-var-color: #55A09B;--main-string-color: #FF2D64;--main-number-filter: invert(100%);--main-icon-color: white;--alert-info: #043875;--alert-tip: #065517;--alert-important: #4a00b4;--alert-warning: #7b6909;--alert-error: #7a0c17}#theme{display:none}#theme-button{position:absolute;right:30px;height:24px}#theme-button .material-symbols-outlined{color:var(--main-icon-color);user-select:none;cursor:pointer}#theme-button .material-symbols-outlined:hover{color:var(--main-hyperlinks-color)}li .material-symbols-outlined,dt .material-symbols-outlined{font-size:1em;vertical-align:text-bottom}dt .material-symbols-outlined{text-indent:0}.light-theme #light-theme-button{display:none}.dark-theme #dark-theme-button{display:none}.dark-theme img[src$="#gh-light-mode-only"]{display:none}.light-theme img[src$="#gh-dark-mode-only"]{display:none}html,body{margin:0;padding:0;height:100%;width:100%;overflow:hidden;box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}body{display:flex;flex-direction:column;-webkit-overflow-scrolling:touch}header{flex:0 0 50px;display:flex;flex-direction:row;align-items:center;padding-left:30px;padding-right:30px;background-color:var(--main-header-color)}header ol{list-style:none;margin:0;padding:0}header ol li{display:inline}header form{display:flex;flex:1;justify-content:flex-end}header#header-search-sidebar{height:50px;margin-bottom:25px}footer{flex:0 0 16px;text-align:center;padding:16px 20px}main{flex:1;display:flex;flex-direction:row;min-height:0}.sidebar-offcanvas-left{flex:0 1 230px;order:1;overflow-y:scroll;padding:20px 0 15px 30px;margin:5px 20px 0 0}::-webkit-scrollbar-button{display:none;height:13px;border-radius:0;background-color:#aaa}::-webkit-scrollbar-button:hover{background-color:#aaa}::-webkit-scrollbar-thumb{background-color:var(--main-scrollbar-color)}::-webkit-scrollbar-thumb:hover{background-color:var(--main-scrollbar-color)}::-webkit-scrollbar{width:4px}.main-content::-webkit-scrollbar{width:8px}.main-content{flex:1;order:2;overflow-y:scroll;padding:10px 20px 0 20px}.sidebar-offcanvas-right{flex:0 1 12em;order:3;overflow-y:scroll;padding:20px 15px 15px 15px;margin-top:5px;margin-right:20px}body{-webkit-text-size-adjust:100%;overflow-x:hidden;font-family:Roboto,sans-serif;font-size:16px;line-height:1.42857143;color:var(--main-text-color);background-color:var(--main-bg-color)}nav.navbar{background-color:inherit;min-height:50px;border:0}@media(max-width: 840px){.hidden-xs{display:none !important}}@media(min-width: 841px){.hidden-l{display:none !important}}nav.navbar .row{padding-top:8px}nav .container{white-space:nowrap}header{background-color:var(--main-header-color);box-shadow:0 3px 5px rgba(0,0,0,.1)}.pre{border:1px solid #ddd;font-size:14px}.hljs-string,.hljs-doctag{color:var(--main-string-color)}.hljs-number,.hljs-literal,.hljs-variable,.hljs-template-variable,.hljs-tag .hljs-attr{color:var(--main-var-color)}.hljs-comment,.hljs-quote{color:var(--main-comment-color);font-style:italic}.hljs-title,.hljs-section,.hljs-selector-id{color:var(--main-section-color);font-weight:bold}.hljs-tag,.hljs-name,.hljs-attribute{color:var(--main-tag-color);font-weight:normal}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:var(--main-keyword-color);font-weight:bold}.hljs{display:block;overflow-x:auto;padding:.5em;color:var(--main-text-color);background:var(--main-code-bg)}a{text-decoration:none}section{margin-bottom:36px}dl{margin:0}h1,h2,h3,h4,h5,h6{font-family:Roboto,sans-serif;font-weight:400;margin-top:1.5em;color:var(--main-text-color)}h1.title{overflow:hidden;text-overflow:ellipsis}h1{font-size:37px;margin-top:0;margin-bottom:.67em}h2{font-size:28px}h5{font-size:16px}p{margin-bottom:1em;margin-top:0}a{color:var(--main-hyperlinks-color)}a:hover{color:#13b9fd}pre.prettyprint{font-family:"Roboto Mono",Menlo,monospace;color:#000;border-radius:0;font-size:15px;word-wrap:normal;line-height:1.4;border:0;margin:16px 0 16px 0;padding:8px}pre code{white-space:pre;word-wrap:initial;font-size:100%}.fixed{white-space:pre}pre{border:1px solid #ddd;background-color:#eee;font-size:14px}code{font-family:"Roboto Mono",Menlo,monospace;color:inherit;padding:.2em .4em;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}@media(max-width: 840px){nav .container{width:100%}h1{font-size:24px}pre{margin:16px 0}}header h1{font-weight:400;margin-bottom:16px}header a,header p,header li{color:#0175c2}header a:hover{color:#0175c2}header h1 .kind{color:#555}dt{font-weight:normal}dd{color:var(--main-text-color);margin-bottom:1em;margin-left:0}dd.callable,dd.constant,dd.property{margin-bottom:24px}dd p{overflow-x:hidden;text-overflow:ellipsis;margin-bottom:0}dt.constant+dd p{margin-bottom:1em}section.summary dt,div.summary dt{margin-left:24px;text-indent:-24px}.dl-horizontal dd{margin-left:initial}dl.dl-horizontal dt{font-style:normal;text-align:left;color:#727272;margin-right:20px;width:initial}dt .name{font-weight:500}dl dt.callable .name{float:none;width:auto}.type-parameter{white-space:nowrap}.multi-line-signature .type-parameter .parameter{margin-left:0;display:unset}.parameter-list{display:table-cell;margin-left:10px;list-style-type:none;padding-inline-start:unset}.parameter-list.single-line{display:inline;margin-left:0}.parameter-list.single-line>li{display:inline}.parameter-list.single-line>li>.parameter{display:inline;margin-left:0;text-indent:0}.signature{color:var(--main-text-color)}.signature a{color:var(--main-hyperlinks-color)}.optional{font-style:italic}.undocumented{font-style:italic}.is-const{font-style:italic}.deprecated{text-decoration:line-through}.category.linked{font-weight:bold;opacity:1}.category.cp-0{background-color:#54b7c4}.category.cp-1{background-color:#54c47f}.category.cp-2{background-color:#c4c254}.category.cp-3{background-color:#c49f54}.category.cp-4{background-color:#c45465}.category.cp-5{background-color:#c454c4}.category a{color:#fff}.category{padding:2px 4px;font-size:12px;border-radius:4px;background-color:#999;text-transform:uppercase;color:#fff;opacity:.5}h1 .category{vertical-align:middle}.main-content.extension-page .from-extension{display:none}sup.muted{color:var(--main-sidebar-color);font-size:.6em}.from-extension>span{background-color:var(--alert-warning);font-style:italic;padding:2px}.feature{display:inline-block;background:var(--main-bg-color);border:1px solid var(--main-hyperlinks-color);border-radius:20px;color:var(--main-hyperlinks-color);font-size:12px;padding:1px 6px;margin:0 8px 0 0}a.feature:hover{border-color:#13b9fd}h1 .feature{vertical-align:middle;margin:0 -2px 0 0}.source-link{padding:18px 4px;font-size:18px;vertical-align:middle}@media(max-width: 840px){.source-link{padding:7px 2px;font-size:10px}}#external-links{float:right}.btn-group{position:relative;display:inline-flex;vertical-align:middle}footer{color:#fff;background-color:var(--main-footer-background);width:100%}footer p{margin:0}footer .no-break{white-space:nowrap}footer .container{padding-left:0;padding-right:0}footer a,footer a:hover{color:#fff}.markdown.desc{margin-bottom:1em;max-width:700px}.markdown h1{font-size:24px;margin-bottom:8px}.markdown h2{font-size:20px;margin-top:24px;margin-bottom:8px}.markdown h3{font-size:18px;margin-bottom:8px;color:var(--main-text-color)}.markdown h4{font-size:16px;margin-bottom:0}.markdown li p{margin:0}table{margin-bottom:1em}table,th,td{border:1px solid #d3d3d3;border-collapse:collapse}th,td{padding:8px}.gt-separated{list-style:none;padding:0;margin:0}.gt-separated li{display:inline-block}.gt-separated li:before{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='%23DDDDDD' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>");background-position:center;content:" ";margin:0 6px 0 4px;padding:0 3px 0 0}.gt-separated.dark li:before{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='%23727272' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>")}.gt-separated li:first-child:before{background-image:none;content:"";margin:0;padding:0}.multi-line-signature{font-size:17px;color:#727272}.multi-line-signature .parameter{margin-left:60px;display:block;text-indent:-36px}.breadcrumbs{padding:0;margin:8px 0 8px 0;white-space:nowrap;line-height:1}@media screen and (min-width: 840px){nav ol.breadcrumbs{float:left}}@media screen and (max-width: 840px){.breadcrumbs{margin:0 0 24px 0;overflow-x:hidden}}.breadcrumbs .gt-separated .dark .hidden-xs li+li:before{color:var(--main-h-text)}ol.breadcrumbs li a{color:var(--main-hyperlinks-color)}.self-crumb{color:var(--main-h-text)}.self-name{color:#555;display:none}.annotation-list{list-style:none;padding:0;display:inline}.comma-separated{list-style:none;padding:0;display:inline}.comma-separated li{display:inline}.comma-separated li:after{content:", "}.comma-separated li:last-child:after{content:""}.end-with-period li:last-child:after{content:"."}.container>section:first-child{border:0}.constructor-modifier{font-style:italic}section.multi-line-signature div.parameters,div.multi-line-signature div.parameters{margin-left:24px}.sidebar ol{list-style:none;line-height:22px;margin-top:0;margin-bottom:0;padding:0 0 15px 0}.sidebar h5 a,.sidebar h5 a:hover{color:var(--main-sidebar-color)}.sidebar h5,.sidebar ol li{text-overflow:ellipsis;overflow:hidden;padding:3px 0 3px 3px}.sidebar h5{color:var(--main-sidebar-color);font-size:18px;margin:0 0 22px 0;padding-top:0}.sidebar ol li.section-title{font-size:18px;font-weight:normal;text-transform:uppercase;padding-top:25px}.sidebar ol li.section-subtitle a{color:inherit}.sidebar ol li.section-subtitle{font-weight:400;text-transform:uppercase}.sidebar ol li.section-subitem{margin-left:12px}.sidebar ol li:first-child{padding-top:3px;margin-top:0}button{padding:0}#sidenav-left-toggle{display:none;vertical-align:text-bottom;padding:0;color:var(--main-icon-color);user-select:none;cursor:pointer}#sidenav-left-toggle:hover{color:var(--main-hyperlinks-color)}@media screen and (max-width: 840px){#sidenav-left-toggle{display:inline;width:24px;height:24px;border:none;margin-right:24px;margin-left:24px;font-size:24px}#overlay-under-drawer.active{opacity:.4;height:100%;z-index:1999;position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000;display:block}.sidebar-offcanvas-left{left:-100%;position:fixed;-webkit-transition:all .25s ease-out;-o-transition:all .25s ease-out;transition:all .25s ease-out;z-index:2000;top:0;width:280px;height:90%;background-color:var(--main-bg-color);overflow-y:scroll;padding:10px;margin:10px 10px;box-shadow:5px 5px 5px 5px #444}ol#sidebar-nav{font-size:18px;white-space:pre-line}.sidebar-offcanvas-left.active{left:0}.self-name{display:inline-block;color:var(--main-hyperlinks-color)}}.sidebar-offcanvas-left h5{margin-bottom:10px}.sidebar-offcanvas-left h5:last-of-type{border:0;margin-bottom:25px}@media screen and (max-width: 992px){.sidebar-offcanvas-right{display:none}}#overlay-under-drawer{display:none}.form-control{border-radius:0;border:0}@media screen and (max-width: 840px){form.search{display:none}}.typeahead{width:200px;padding:2px 7px 1px 7px;line-height:20px;outline:none}.tt-wrapper{position:relative;display:inline-block}.tt-input{position:relative;vertical-align:top}.navbar-right .tt-menu{right:0;left:inherit !important;width:540px;max-height:280px;overflow-y:scroll}.navbar-right{padding-right:60px}.tt-menu{position:absolute;top:100%;left:0;z-index:100;font-size:14px;margin:0;background-color:var(--main-bg-color);border:1px solid var(--main-header-color);-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.typeahead{padding:17px 17px 17px 50px;width:422px;height:20px;font-size:13px;background-image:url("./search.svg");background-repeat:no-repeat;background-position:4%;outline:0;background-size:20px;filter:var(--main-number-filter);-webkit-filter:var(--main-number-filter)}.search-summary{margin-bottom:10px}a.tt-container{font-size:16px;color:var(--main-hyperlinks-color)}.enter-search-message{position:-webkit-sticky;position:sticky;top:0;background-color:#aaa;padding:0;font-size:14px;margin:0;clear:both;text-align:center;color:#000}.tt-suggestion:hover{cursor:pointer;color:#fff;background-color:#0097cf}.tt-suggestion:hover .search-from-lib{color:#ddd}.tt-suggestion.tt-cursor{color:#fff;background-color:#0097cf}.tt-suggestion.tt-cursor .search-from-lib{color:#ddd}.tt-suggestion p{margin:0}.tt-container{font-size:14px;margin-bottom:0;margin-top:15px}.tt-container-text{color:var(--main-text-color)}.tt-search-results .tt-container{margin-top:5px;margin-bottom:5px}.tt-search-results .tt-container-text{display:none}.tt-search-results .tt-suggestion{color:var(--main-text-color);margin-top:5px;overflow:hidden;padding-left:10px;padding-right:10px;text-overflow:ellipsis;white-space:nowrap}.tt-search-results .tt-suggestion-title{font-size:14px;padding-right:5px}.tt-search-results .tt-suggestion-container{color:var(--main-keyword-color);font-size:14px;font-style:italic;padding-right:5px}.tt-search-results .one-line-description{color:var(--main-keyword-color);display:inline;margin-left:0}.tt-search-results .one-line-description::before{content:open-quote}.tt-search-results .one-line-description::after{content:close-quote}#dartdoc-main-content .tt-suggestion{color:var(--main-text-color);margin-top:5px;margin-bottom:10px;border-style:solid;border-color:#d3d3d3;border-width:.5px}#dartdoc-main-content .tt-suggestion-title{display:block;font-weight:500;margin:4px 10px 0}#dartdoc-main-content .one-line-description{display:block;margin:2px 10px 3px}#dartdoc-main-content .tt-suggestion-container{display:none}@media screen and (max-width: 840px){.typeahead{padding:17px 17px 17px 33px;width:240px;height:17px;border:1px solid #f5f5f5;background-position:3%;margin:10px 10px 10px 9px}header{padding-left:0}}@media screen and (max-width: 320px){#sidenav-left-toggle{margin-right:10px;margin-left:20px}.self-name{margin-right:10px}}::placeholder{filter:brightness(0.85)}.search-body{border:1px solid #7f7f7f;max-width:400px;box-shadow:3px 3px 5px rgba(0,0,0,.1)}section#setter,div#setter{border-top:1px solid #ddd;padding-top:36px}li.inherited a{opacity:.65;font-style:italic}#instance-methods dt.inherited .name,#instance-properties dt.inherited .name,#operators dt.inherited .name{font-weight:400;font-style:italic}#instance-methods dt.inherited .signature,#instance-properties dt.inherited .signature,#operators dt.inherited .signature{font-weight:400}@media print{.subnav,.sidebar{display:none}a[href]:after{content:"" !important}}.markdown-alert{margin-top:1rem;margin-bottom:1rem;padding:1.25rem}.markdown-alert>:last-child{margin-bottom:0}.markdown-alert-title{display:flex;align-items:center;gap:.4rem;margin-bottom:.5rem;font-weight:bold;-webkit-font-smoothing:antialiased}.markdown-alert-title:before{font:24px/1 "Material Symbols Outlined"}.markdown-alert.markdown-alert-note{background-color:var(--alert-info)}.markdown-alert-note .markdown-alert-title:before{content:"info"}.markdown-alert.markdown-alert-tip{background-color:var(--alert-tip)}.markdown-alert-tip .markdown-alert-title:before{content:"lightbulb"}.markdown-alert.markdown-alert-important{background-color:var(--alert-important)}.markdown-alert-important .markdown-alert-title:before{content:"feedback"}.markdown-alert.markdown-alert-warning{background-color:var(--alert-warning)}.markdown-alert-warning .markdown-alert-title:before{content:"warning"}.markdown-alert.markdown-alert-caution{background-color:var(--alert-error)}.markdown-alert-caution .markdown-alert-title:before{content:"report"}
\ No newline at end of file
diff --git a/tool/task.dart b/tool/task.dart
index d198271744..fec2f4f815 100644
--- a/tool/task.dart
+++ b/tool/task.dart
@@ -178,7 +178,8 @@ Future<void> buildWeb({bool debug = false}) async {
   ]);
   _delete(File('lib/resources/docs.dart.js.deps'));
 
-  final compileResult = sass.compileToResult('web/styles/styles.scss');
+  final compileResult = sass.compileToResult('web/styles/styles.scss',
+      style: debug ? sass.OutputStyle.expanded : sass.OutputStyle.compressed);
   if (compileResult.css.isNotEmpty) {
     File('lib/resources/styles.css').writeAsStringSync(compileResult.css);
   } else {

From 1da353503990259f450ca443b4b29bca3c8fbe89 Mon Sep 17 00:00:00 2001
From: Parker Lougheed <parlough@gmail.com>
Date: Thu, 24 Oct 2024 21:45:41 -0500
Subject: [PATCH 3/5] Update signature generation and validation to check scss
 files

---
 tool/task.dart | 23 ++++++++++++++---------
 web/sig.txt    |  2 +-
 2 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/tool/task.dart b/tool/task.dart
index fec2f4f815..4ade613f85 100644
--- a/tool/task.dart
+++ b/tool/task.dart
@@ -186,7 +186,8 @@ Future<void> buildWeb({bool debug = false}) async {
     throw StateError('Compiled CSS was empty.');
   }
 
-  var compileSig = await _calcDartFilesSig(Directory('web'));
+  var compileSig =
+      await _calcFilesSig(Directory('web'), extensions: {'.dart', '.scss'});
   File(path.join('web', 'sig.txt')).writeAsStringSync('$compileSig\n');
 }
 
@@ -198,14 +199,14 @@ void _delete(FileSystemEntity entity) {
   }
 }
 
-/// Yields all of the trimmed lines of all of the `.dart` files in [dir].
-Stream<String> _dartFileLines(Directory dir) {
+/// Yields all of the trimmed lines of all of the files in [dir] with
+/// one of the specified [extensions].
+Stream<String> _fileLines(Directory dir, {required Set<String> extensions}) {
   var files = dir
       .listSync(recursive: true)
       .whereType<File>()
-      .where((file) => file.path.endsWith('.dart'))
-      .toList()
-    ..sort((a, b) => compareAsciiLowerCase(a.path, b.path));
+      .where((file) => extensions.contains(path.extension(file.path)))
+      .sorted((a, b) => compareAsciiLowerCase(a.path, b.path));
 
   return Stream.fromIterable([
     for (var file in files)
@@ -833,7 +834,8 @@ Rebuild them with "dart tool/task.dart build" and check the results in.
   }
 
   // Verify that the web frontend has been compiled.
-  final currentCodeSig = await _calcDartFilesSig(Directory('web'));
+  final currentCodeSig =
+      await _calcFilesSig(Directory('web'), extensions: {'.dart', '.scss'});
   final lastCompileSig =
       File(path.join('web', 'sig.txt')).readAsStringSync().trim();
   if (currentCodeSig != lastCompileSig) {
@@ -994,8 +996,11 @@ int _findCount(String str, String match) {
   return count;
 }
 
-Future<String> _calcDartFilesSig(Directory dir) async {
-  final digest = await _dartFileLines(dir)
+Future<String> _calcFilesSig(
+  Directory dir, {
+  required Set<String> extensions,
+}) async {
+  final digest = await _fileLines(dir, extensions: extensions)
       .transform(utf8.encoder)
       .transform(crypto.md5)
       .single;
diff --git a/web/sig.txt b/web/sig.txt
index 8ab527bda2..4e651a1037 100644
--- a/web/sig.txt
+++ b/web/sig.txt
@@ -1 +1 @@
-A6336370D9A2C5AE421600C7D9356FC6
+3E2408ED7DD4454C55FBF018B65003E7

From 2a13463ed548abe75c2f5a0b434cbab6d3401366 Mon Sep 17 00:00:00 2001
From: Parker Lougheed <parlough@gmail.com>
Date: Fri, 25 Oct 2024 14:17:21 -0500
Subject: [PATCH 4/5] Mostly 1-1 update styles to use scss nesting

---
 lib/resources/styles.css |    2 +-
 web/sig.txt              |    2 +-
 web/styles/styles.scss   | 1148 ++++++++++++++++++--------------------
 3 files changed, 555 insertions(+), 597 deletions(-)

diff --git a/lib/resources/styles.css b/lib/resources/styles.css
index a0bb09e06e..65f847867b 100644
--- a/lib/resources/styles.css
+++ b/lib/resources/styles.css
@@ -1 +1 @@
-.light-theme{--main-bg-color: #fff;--main-header-color: #eeeeee;--main-sidebar-color: #727272;--main-text-color: #111111;--main-search-bar: #fff;--main-scrollbar-color: #CCC;--main-footer-background: #111111;--main-h-text: black;--main-hyperlinks-color: #0175C2;--main-search-background: transparent;--main-code-bg: #f8f8f8;--main-keyword-color: #333;--main-tag-color: #000080;--main-section-color: #900;--main-comment-color: #998;--main-var-color: #008080;--main-string-color: #d14;--main-number-filter: invert(0%);--main-icon-color: black;--alert-info: #e7f8ff;--alert-tip: #ecfaf7;--alert-important: #e2dbff;--alert-warning: #fcf8e3;--alert-error: #fde9ee}.dark-theme{--main-bg-color: #10161E;--main-header-color: #1C2834;--main-sidebar-color: #fff;--main-text-color: #fff;--main-search-bar: #454545;--main-scrollbar-color: #5f6368;--main-footer-background: #27323a;--main-hyperlinks-color: #00D2FA;--main-search-background: black;--main-code-bg: #10161E;--main-keyword-color: white;--main-tag-color: #00D2FA;--main-section-color: #FF2D64;--main-comment-color: #909CC3;--main-var-color: #55A09B;--main-string-color: #FF2D64;--main-number-filter: invert(100%);--main-icon-color: white;--alert-info: #043875;--alert-tip: #065517;--alert-important: #4a00b4;--alert-warning: #7b6909;--alert-error: #7a0c17}#theme{display:none}#theme-button{position:absolute;right:30px;height:24px}#theme-button .material-symbols-outlined{color:var(--main-icon-color);user-select:none;cursor:pointer}#theme-button .material-symbols-outlined:hover{color:var(--main-hyperlinks-color)}li .material-symbols-outlined,dt .material-symbols-outlined{font-size:1em;vertical-align:text-bottom}dt .material-symbols-outlined{text-indent:0}.light-theme #light-theme-button{display:none}.dark-theme #dark-theme-button{display:none}.dark-theme img[src$="#gh-light-mode-only"]{display:none}.light-theme img[src$="#gh-dark-mode-only"]{display:none}html,body{margin:0;padding:0;height:100%;width:100%;overflow:hidden;box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}body{display:flex;flex-direction:column;-webkit-overflow-scrolling:touch}header{flex:0 0 50px;display:flex;flex-direction:row;align-items:center;padding-left:30px;padding-right:30px;background-color:var(--main-header-color)}header ol{list-style:none;margin:0;padding:0}header ol li{display:inline}header form{display:flex;flex:1;justify-content:flex-end}header#header-search-sidebar{height:50px;margin-bottom:25px}footer{flex:0 0 16px;text-align:center;padding:16px 20px}main{flex:1;display:flex;flex-direction:row;min-height:0}.sidebar-offcanvas-left{flex:0 1 230px;order:1;overflow-y:scroll;padding:20px 0 15px 30px;margin:5px 20px 0 0}::-webkit-scrollbar-button{display:none;height:13px;border-radius:0;background-color:#aaa}::-webkit-scrollbar-button:hover{background-color:#aaa}::-webkit-scrollbar-thumb{background-color:var(--main-scrollbar-color)}::-webkit-scrollbar-thumb:hover{background-color:var(--main-scrollbar-color)}::-webkit-scrollbar{width:4px}.main-content::-webkit-scrollbar{width:8px}.main-content{flex:1;order:2;overflow-y:scroll;padding:10px 20px 0 20px}.sidebar-offcanvas-right{flex:0 1 12em;order:3;overflow-y:scroll;padding:20px 15px 15px 15px;margin-top:5px;margin-right:20px}body{-webkit-text-size-adjust:100%;overflow-x:hidden;font-family:Roboto,sans-serif;font-size:16px;line-height:1.42857143;color:var(--main-text-color);background-color:var(--main-bg-color)}nav.navbar{background-color:inherit;min-height:50px;border:0}@media(max-width: 840px){.hidden-xs{display:none !important}}@media(min-width: 841px){.hidden-l{display:none !important}}nav.navbar .row{padding-top:8px}nav .container{white-space:nowrap}header{background-color:var(--main-header-color);box-shadow:0 3px 5px rgba(0,0,0,.1)}.pre{border:1px solid #ddd;font-size:14px}.hljs-string,.hljs-doctag{color:var(--main-string-color)}.hljs-number,.hljs-literal,.hljs-variable,.hljs-template-variable,.hljs-tag .hljs-attr{color:var(--main-var-color)}.hljs-comment,.hljs-quote{color:var(--main-comment-color);font-style:italic}.hljs-title,.hljs-section,.hljs-selector-id{color:var(--main-section-color);font-weight:bold}.hljs-tag,.hljs-name,.hljs-attribute{color:var(--main-tag-color);font-weight:normal}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:var(--main-keyword-color);font-weight:bold}.hljs{display:block;overflow-x:auto;padding:.5em;color:var(--main-text-color);background:var(--main-code-bg)}a{text-decoration:none}section{margin-bottom:36px}dl{margin:0}h1,h2,h3,h4,h5,h6{font-family:Roboto,sans-serif;font-weight:400;margin-top:1.5em;color:var(--main-text-color)}h1.title{overflow:hidden;text-overflow:ellipsis}h1{font-size:37px;margin-top:0;margin-bottom:.67em}h2{font-size:28px}h5{font-size:16px}p{margin-bottom:1em;margin-top:0}a{color:var(--main-hyperlinks-color)}a:hover{color:#13b9fd}pre.prettyprint{font-family:"Roboto Mono",Menlo,monospace;color:#000;border-radius:0;font-size:15px;word-wrap:normal;line-height:1.4;border:0;margin:16px 0 16px 0;padding:8px}pre code{white-space:pre;word-wrap:initial;font-size:100%}.fixed{white-space:pre}pre{border:1px solid #ddd;background-color:#eee;font-size:14px}code{font-family:"Roboto Mono",Menlo,monospace;color:inherit;padding:.2em .4em;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}@media(max-width: 840px){nav .container{width:100%}h1{font-size:24px}pre{margin:16px 0}}header h1{font-weight:400;margin-bottom:16px}header a,header p,header li{color:#0175c2}header a:hover{color:#0175c2}header h1 .kind{color:#555}dt{font-weight:normal}dd{color:var(--main-text-color);margin-bottom:1em;margin-left:0}dd.callable,dd.constant,dd.property{margin-bottom:24px}dd p{overflow-x:hidden;text-overflow:ellipsis;margin-bottom:0}dt.constant+dd p{margin-bottom:1em}section.summary dt,div.summary dt{margin-left:24px;text-indent:-24px}.dl-horizontal dd{margin-left:initial}dl.dl-horizontal dt{font-style:normal;text-align:left;color:#727272;margin-right:20px;width:initial}dt .name{font-weight:500}dl dt.callable .name{float:none;width:auto}.type-parameter{white-space:nowrap}.multi-line-signature .type-parameter .parameter{margin-left:0;display:unset}.parameter-list{display:table-cell;margin-left:10px;list-style-type:none;padding-inline-start:unset}.parameter-list.single-line{display:inline;margin-left:0}.parameter-list.single-line>li{display:inline}.parameter-list.single-line>li>.parameter{display:inline;margin-left:0;text-indent:0}.signature{color:var(--main-text-color)}.signature a{color:var(--main-hyperlinks-color)}.optional{font-style:italic}.undocumented{font-style:italic}.is-const{font-style:italic}.deprecated{text-decoration:line-through}.category.linked{font-weight:bold;opacity:1}.category.cp-0{background-color:#54b7c4}.category.cp-1{background-color:#54c47f}.category.cp-2{background-color:#c4c254}.category.cp-3{background-color:#c49f54}.category.cp-4{background-color:#c45465}.category.cp-5{background-color:#c454c4}.category a{color:#fff}.category{padding:2px 4px;font-size:12px;border-radius:4px;background-color:#999;text-transform:uppercase;color:#fff;opacity:.5}h1 .category{vertical-align:middle}.main-content.extension-page .from-extension{display:none}sup.muted{color:var(--main-sidebar-color);font-size:.6em}.from-extension>span{background-color:var(--alert-warning);font-style:italic;padding:2px}.feature{display:inline-block;background:var(--main-bg-color);border:1px solid var(--main-hyperlinks-color);border-radius:20px;color:var(--main-hyperlinks-color);font-size:12px;padding:1px 6px;margin:0 8px 0 0}a.feature:hover{border-color:#13b9fd}h1 .feature{vertical-align:middle;margin:0 -2px 0 0}.source-link{padding:18px 4px;font-size:18px;vertical-align:middle}@media(max-width: 840px){.source-link{padding:7px 2px;font-size:10px}}#external-links{float:right}.btn-group{position:relative;display:inline-flex;vertical-align:middle}footer{color:#fff;background-color:var(--main-footer-background);width:100%}footer p{margin:0}footer .no-break{white-space:nowrap}footer .container{padding-left:0;padding-right:0}footer a,footer a:hover{color:#fff}.markdown.desc{margin-bottom:1em;max-width:700px}.markdown h1{font-size:24px;margin-bottom:8px}.markdown h2{font-size:20px;margin-top:24px;margin-bottom:8px}.markdown h3{font-size:18px;margin-bottom:8px;color:var(--main-text-color)}.markdown h4{font-size:16px;margin-bottom:0}.markdown li p{margin:0}table{margin-bottom:1em}table,th,td{border:1px solid #d3d3d3;border-collapse:collapse}th,td{padding:8px}.gt-separated{list-style:none;padding:0;margin:0}.gt-separated li{display:inline-block}.gt-separated li:before{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='%23DDDDDD' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>");background-position:center;content:" ";margin:0 6px 0 4px;padding:0 3px 0 0}.gt-separated.dark li:before{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='%23727272' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>")}.gt-separated li:first-child:before{background-image:none;content:"";margin:0;padding:0}.multi-line-signature{font-size:17px;color:#727272}.multi-line-signature .parameter{margin-left:60px;display:block;text-indent:-36px}.breadcrumbs{padding:0;margin:8px 0 8px 0;white-space:nowrap;line-height:1}@media screen and (min-width: 840px){nav ol.breadcrumbs{float:left}}@media screen and (max-width: 840px){.breadcrumbs{margin:0 0 24px 0;overflow-x:hidden}}.breadcrumbs .gt-separated .dark .hidden-xs li+li:before{color:var(--main-h-text)}ol.breadcrumbs li a{color:var(--main-hyperlinks-color)}.self-crumb{color:var(--main-h-text)}.self-name{color:#555;display:none}.annotation-list{list-style:none;padding:0;display:inline}.comma-separated{list-style:none;padding:0;display:inline}.comma-separated li{display:inline}.comma-separated li:after{content:", "}.comma-separated li:last-child:after{content:""}.end-with-period li:last-child:after{content:"."}.container>section:first-child{border:0}.constructor-modifier{font-style:italic}section.multi-line-signature div.parameters,div.multi-line-signature div.parameters{margin-left:24px}.sidebar ol{list-style:none;line-height:22px;margin-top:0;margin-bottom:0;padding:0 0 15px 0}.sidebar h5 a,.sidebar h5 a:hover{color:var(--main-sidebar-color)}.sidebar h5,.sidebar ol li{text-overflow:ellipsis;overflow:hidden;padding:3px 0 3px 3px}.sidebar h5{color:var(--main-sidebar-color);font-size:18px;margin:0 0 22px 0;padding-top:0}.sidebar ol li.section-title{font-size:18px;font-weight:normal;text-transform:uppercase;padding-top:25px}.sidebar ol li.section-subtitle a{color:inherit}.sidebar ol li.section-subtitle{font-weight:400;text-transform:uppercase}.sidebar ol li.section-subitem{margin-left:12px}.sidebar ol li:first-child{padding-top:3px;margin-top:0}button{padding:0}#sidenav-left-toggle{display:none;vertical-align:text-bottom;padding:0;color:var(--main-icon-color);user-select:none;cursor:pointer}#sidenav-left-toggle:hover{color:var(--main-hyperlinks-color)}@media screen and (max-width: 840px){#sidenav-left-toggle{display:inline;width:24px;height:24px;border:none;margin-right:24px;margin-left:24px;font-size:24px}#overlay-under-drawer.active{opacity:.4;height:100%;z-index:1999;position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000;display:block}.sidebar-offcanvas-left{left:-100%;position:fixed;-webkit-transition:all .25s ease-out;-o-transition:all .25s ease-out;transition:all .25s ease-out;z-index:2000;top:0;width:280px;height:90%;background-color:var(--main-bg-color);overflow-y:scroll;padding:10px;margin:10px 10px;box-shadow:5px 5px 5px 5px #444}ol#sidebar-nav{font-size:18px;white-space:pre-line}.sidebar-offcanvas-left.active{left:0}.self-name{display:inline-block;color:var(--main-hyperlinks-color)}}.sidebar-offcanvas-left h5{margin-bottom:10px}.sidebar-offcanvas-left h5:last-of-type{border:0;margin-bottom:25px}@media screen and (max-width: 992px){.sidebar-offcanvas-right{display:none}}#overlay-under-drawer{display:none}.form-control{border-radius:0;border:0}@media screen and (max-width: 840px){form.search{display:none}}.typeahead{width:200px;padding:2px 7px 1px 7px;line-height:20px;outline:none}.tt-wrapper{position:relative;display:inline-block}.tt-input{position:relative;vertical-align:top}.navbar-right .tt-menu{right:0;left:inherit !important;width:540px;max-height:280px;overflow-y:scroll}.navbar-right{padding-right:60px}.tt-menu{position:absolute;top:100%;left:0;z-index:100;font-size:14px;margin:0;background-color:var(--main-bg-color);border:1px solid var(--main-header-color);-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.typeahead{padding:17px 17px 17px 50px;width:422px;height:20px;font-size:13px;background-image:url("./search.svg");background-repeat:no-repeat;background-position:4%;outline:0;background-size:20px;filter:var(--main-number-filter);-webkit-filter:var(--main-number-filter)}.search-summary{margin-bottom:10px}a.tt-container{font-size:16px;color:var(--main-hyperlinks-color)}.enter-search-message{position:-webkit-sticky;position:sticky;top:0;background-color:#aaa;padding:0;font-size:14px;margin:0;clear:both;text-align:center;color:#000}.tt-suggestion:hover{cursor:pointer;color:#fff;background-color:#0097cf}.tt-suggestion:hover .search-from-lib{color:#ddd}.tt-suggestion.tt-cursor{color:#fff;background-color:#0097cf}.tt-suggestion.tt-cursor .search-from-lib{color:#ddd}.tt-suggestion p{margin:0}.tt-container{font-size:14px;margin-bottom:0;margin-top:15px}.tt-container-text{color:var(--main-text-color)}.tt-search-results .tt-container{margin-top:5px;margin-bottom:5px}.tt-search-results .tt-container-text{display:none}.tt-search-results .tt-suggestion{color:var(--main-text-color);margin-top:5px;overflow:hidden;padding-left:10px;padding-right:10px;text-overflow:ellipsis;white-space:nowrap}.tt-search-results .tt-suggestion-title{font-size:14px;padding-right:5px}.tt-search-results .tt-suggestion-container{color:var(--main-keyword-color);font-size:14px;font-style:italic;padding-right:5px}.tt-search-results .one-line-description{color:var(--main-keyword-color);display:inline;margin-left:0}.tt-search-results .one-line-description::before{content:open-quote}.tt-search-results .one-line-description::after{content:close-quote}#dartdoc-main-content .tt-suggestion{color:var(--main-text-color);margin-top:5px;margin-bottom:10px;border-style:solid;border-color:#d3d3d3;border-width:.5px}#dartdoc-main-content .tt-suggestion-title{display:block;font-weight:500;margin:4px 10px 0}#dartdoc-main-content .one-line-description{display:block;margin:2px 10px 3px}#dartdoc-main-content .tt-suggestion-container{display:none}@media screen and (max-width: 840px){.typeahead{padding:17px 17px 17px 33px;width:240px;height:17px;border:1px solid #f5f5f5;background-position:3%;margin:10px 10px 10px 9px}header{padding-left:0}}@media screen and (max-width: 320px){#sidenav-left-toggle{margin-right:10px;margin-left:20px}.self-name{margin-right:10px}}::placeholder{filter:brightness(0.85)}.search-body{border:1px solid #7f7f7f;max-width:400px;box-shadow:3px 3px 5px rgba(0,0,0,.1)}section#setter,div#setter{border-top:1px solid #ddd;padding-top:36px}li.inherited a{opacity:.65;font-style:italic}#instance-methods dt.inherited .name,#instance-properties dt.inherited .name,#operators dt.inherited .name{font-weight:400;font-style:italic}#instance-methods dt.inherited .signature,#instance-properties dt.inherited .signature,#operators dt.inherited .signature{font-weight:400}@media print{.subnav,.sidebar{display:none}a[href]:after{content:"" !important}}.markdown-alert{margin-top:1rem;margin-bottom:1rem;padding:1.25rem}.markdown-alert>:last-child{margin-bottom:0}.markdown-alert-title{display:flex;align-items:center;gap:.4rem;margin-bottom:.5rem;font-weight:bold;-webkit-font-smoothing:antialiased}.markdown-alert-title:before{font:24px/1 "Material Symbols Outlined"}.markdown-alert.markdown-alert-note{background-color:var(--alert-info)}.markdown-alert-note .markdown-alert-title:before{content:"info"}.markdown-alert.markdown-alert-tip{background-color:var(--alert-tip)}.markdown-alert-tip .markdown-alert-title:before{content:"lightbulb"}.markdown-alert.markdown-alert-important{background-color:var(--alert-important)}.markdown-alert-important .markdown-alert-title:before{content:"feedback"}.markdown-alert.markdown-alert-warning{background-color:var(--alert-warning)}.markdown-alert-warning .markdown-alert-title:before{content:"warning"}.markdown-alert.markdown-alert-caution{background-color:var(--alert-error)}.markdown-alert-caution .markdown-alert-title:before{content:"report"}
\ No newline at end of file
+.light-theme{--main-bg-color: #fff;--main-header-color: #eeeeee;--main-sidebar-color: #727272;--main-text-color: #111111;--main-search-bar: #fff;--main-scrollbar-color: #CCC;--main-footer-background: #111111;--main-h-text: black;--main-hyperlinks-color: #0175C2;--main-search-background: transparent;--main-code-bg: #f8f8f8;--main-keyword-color: #333;--main-tag-color: #000080;--main-section-color: #900;--main-comment-color: #998;--main-var-color: #008080;--main-string-color: #d14;--main-number-filter: invert(0%);--main-icon-color: black;--alert-info: #e7f8ff;--alert-tip: #ecfaf7;--alert-important: #e2dbff;--alert-warning: #fcf8e3;--alert-error: #fde9ee}.light-theme #light-theme-button{display:none}.light-theme img[src$="#gh-dark-mode-only"]{display:none}.dark-theme{--main-bg-color: #10161E;--main-header-color: #1C2834;--main-sidebar-color: #fff;--main-text-color: #fff;--main-search-bar: #454545;--main-scrollbar-color: #5f6368;--main-footer-background: #27323a;--main-hyperlinks-color: #00D2FA;--main-search-background: black;--main-code-bg: #10161E;--main-keyword-color: white;--main-tag-color: #00D2FA;--main-section-color: #FF2D64;--main-comment-color: #909CC3;--main-var-color: #55A09B;--main-string-color: #FF2D64;--main-number-filter: invert(100%);--main-icon-color: white;--alert-info: #043875;--alert-tip: #065517;--alert-important: #4a00b4;--alert-warning: #7b6909;--alert-error: #7a0c17}.dark-theme #dark-theme-button{display:none}.dark-theme img[src$="#gh-light-mode-only"]{display:none}#theme{display:none}#theme-button{position:absolute;right:30px;height:24px}#theme-button .material-symbols-outlined{color:var(--main-icon-color);user-select:none;cursor:pointer}#theme-button .material-symbols-outlined:hover{color:var(--main-hyperlinks-color)}li .material-symbols-outlined,dt .material-symbols-outlined{font-size:1em;vertical-align:text-bottom}dt .material-symbols-outlined{text-indent:0}html,body{margin:0;padding:0;height:100%;width:100%;overflow:hidden;box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}body{display:flex;flex-direction:column;-webkit-overflow-scrolling:touch}button{padding:0}header{flex:0 0 50px;display:flex;flex-direction:row;align-items:center;padding-left:30px;padding-right:30px;background-color:var(--main-header-color);box-shadow:0 3px 5px rgba(0,0,0,.1)}header ol{list-style:none;margin:0;padding:0}header ol li{display:inline}header form{display:flex;flex:1;justify-content:flex-end}header #header-search-sidebar{height:50px;margin-bottom:25px}footer{flex:0 0 16px;text-align:center;padding:16px 20px}main{flex:1;display:flex;flex-direction:row;min-height:0}.sidebar-offcanvas-left{flex:0 1 230px;order:1;overflow-y:scroll;padding:20px 0 15px 30px;margin:5px 20px 0 0}.sidebar-offcanvas-left h5{margin-bottom:10px}.sidebar-offcanvas-left h5:last-of-type{border:0;margin-bottom:25px}::-webkit-scrollbar-button{display:none;height:13px;border-radius:0;background-color:#aaa}::-webkit-scrollbar-button:hover{background-color:#aaa}::-webkit-scrollbar-thumb{background-color:var(--main-scrollbar-color)}::-webkit-scrollbar-thumb:hover{background-color:var(--main-scrollbar-color)}::-webkit-scrollbar{width:4px}.main-content::-webkit-scrollbar{width:8px}.main-content{flex:1;order:2;overflow-y:scroll;padding:10px 20px 0 20px}.main-content.extension-page .from-extension{display:none}.sidebar-offcanvas-right{flex:0 1 12em;order:3;overflow-y:scroll;padding:20px 15px 15px 15px;margin-top:5px;margin-right:20px}body{-webkit-text-size-adjust:100%;overflow-x:hidden;font-family:Roboto,sans-serif;font-size:16px;line-height:1.42857143;color:var(--main-text-color);background-color:var(--main-bg-color)}nav.navbar{background-color:inherit;min-height:50px;border:0}nav.navbar .row{padding-top:8px}nav .container{white-space:nowrap}@media(max-width: 840px){.hidden-xs{display:none !important}}@media(min-width: 841px){.hidden-l{display:none !important}}a{text-decoration:none}section{margin-bottom:36px}dl{margin:0}h1,h2,h3,h4,h5,h6{font-family:Roboto,sans-serif;font-weight:400;margin-top:1.5em;color:var(--main-text-color)}h1{font-size:37px;margin-top:0;margin-bottom:.67em}h1.title{overflow:hidden;text-overflow:ellipsis}h2{font-size:28px}h5{font-size:16px}p{margin-bottom:1em;margin-top:0}a{color:var(--main-hyperlinks-color)}a:hover{color:#13b9fd}.fixed{white-space:pre}pre{border:1px solid #ddd;background-color:#eee;font-size:14px}pre code{white-space:pre;word-wrap:initial;font-size:100%}code{font-family:"Roboto Mono",Menlo,monospace;color:inherit;padding:.2em .4em;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}@media(max-width: 840px){nav .container{width:100%}h1{font-size:24px}pre{margin:16px 0}}header h1{font-weight:400;margin-bottom:16px}header h1 .kind{color:#555}header a,header p,header li{color:#0175c2}header a:hover{color:#0175c2}header h1 .kind{color:#555}dt{font-weight:normal}dt.constant+dd p{margin-bottom:1em}dt .name{font-weight:500}dd{color:var(--main-text-color);margin-bottom:1em;margin-left:0}dd .callable,dd .constant,dd .property{margin-bottom:24px}dd p{overflow-x:hidden;text-overflow:ellipsis;margin-bottom:0}section.summary dt,div.summary dt{margin-left:24px;text-indent:-24px}dl.dl-horizontal dd{margin-left:initial}dl.dl-horizontal dt{font-style:normal;text-align:left;color:#727272;margin-right:20px;width:initial}dl dt.callable .name{float:none;width:auto}.multi-line-signature .type-parameter{white-space:nowrap}.multi-line-signature .type-parameter .parameter{margin-left:0;display:unset}.multi-line-signature .parameter-list{display:table-cell;margin-left:10px;list-style-type:none;padding-inline-start:unset}.multi-line-signature .parameter-list.single-line{display:inline;margin-left:0}.multi-line-signature .parameter-list.single-line>li{display:inline}.multi-line-signature .parameter-list.single-line>li>.parameter{display:inline;margin-left:0;text-indent:0}.multi-line-signature .signature{color:var(--main-text-color)}.multi-line-signature .signature a{color:var(--main-hyperlinks-color)}.multi-line-signature .optional{font-style:italic}.multi-line-signature .undocumented{font-style:italic}.multi-line-signature .is-const{font-style:italic}.multi-line-signature .deprecated{text-decoration:line-through}.category{padding:2px 4px;font-size:12px;border-radius:4px;background-color:#999;text-transform:uppercase;color:#fff;opacity:.5}.category.linked{font-weight:bold;opacity:1}.category.cp-0{background-color:#54b7c4}.category.cp-1{background-color:#54c47f}.category.cp-2{background-color:#c4c254}.category.cp-3{background-color:#c49f54}.category.cp-4{background-color:#c45465}.category.cp-5{background-color:#c454c4}.category a{color:#fff}h1 .category{vertical-align:middle}sup.muted{color:var(--main-sidebar-color);font-size:.6em}.from-extension>span{background-color:var(--alert-warning);font-style:italic;padding:2px}a.feature{display:inline-block;background:var(--main-bg-color);border:1px solid var(--main-hyperlinks-color);border-radius:20px;color:var(--main-hyperlinks-color);font-size:12px;padding:1px 6px;margin:0 8px 0 0}a.feature:hover{border-color:#13b9fd}h1 .feature{vertical-align:middle;margin:0 -2px 0 0}.source-link{padding:18px 4px;font-size:18px;vertical-align:middle}@media(max-width: 840px){.source-link{padding:7px 2px;font-size:10px}}#external-links{float:right}.btn-group{position:relative;display:inline-flex;vertical-align:middle}footer{color:#fff;background-color:var(--main-footer-background);width:100%}footer p{margin:0}footer .no-break{white-space:nowrap}footer .container{padding-left:0;padding-right:0}footer a,footer a:hover{color:#fff}.markdown.desc{margin-bottom:1em;max-width:700px}.markdown h1{font-size:24px;margin-bottom:8px}.markdown h2{font-size:20px;margin-top:24px;margin-bottom:8px}.markdown h3{font-size:18px;margin-bottom:8px;color:var(--main-text-color)}.markdown h4{font-size:16px;margin-bottom:0}.markdown li p{margin:0}table{margin-bottom:1em}table,th,td{border:1px solid #d3d3d3;border-collapse:collapse}th,td{padding:8px}.gt-separated{list-style:none;padding:0;margin:0}.gt-separated li{display:inline-block}.gt-separated li:before{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='%23DDDDDD' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>");background-position:center;content:" ";margin:0 6px 0 4px;padding:0 3px 0 0}.gt-separated li:first-child:before{background-image:none;content:"";margin:0;padding:0}.gt-separated.dark li:before{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='%23727272' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>")}.gt-separated.dark li:first-child:before{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='%23727272' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>")}.multi-line-signature{font-size:17px;color:#727272}.multi-line-signature .parameter{margin-left:60px;display:block;text-indent:-36px}ol.breadcrumbs{padding:0;margin:8px 0 8px 0;white-space:nowrap;line-height:1}@media screen and (max-width: 840px){ol.breadcrumbs{margin:0 0 24px 0;overflow-x:hidden}}@media screen and (min-width: 841px){ol.breadcrumbs{float:left}}ol.breadcrumbs li a{color:var(--main-hyperlinks-color)}ol.breadcrumbs .gt-separated .dark .hidden-xs li+li:before{color:var(--main-h-text)}ol.breadcrumbs .self-crumb{color:var(--main-h-text)}.self-name{color:#555;display:none}.annotation-list{list-style:none;padding:0;display:inline}.comma-separated{list-style:none;padding:0;display:inline}.comma-separated li{display:inline}.comma-separated li:after{content:", "}.comma-separated li:last-child:after{content:""}.end-with-period li:last-child:after{content:"."}.container>section:first-child{border:0}.constructor-modifier{font-style:italic}section.multi-line-signature div.parameters,div.multi-line-signature div.parameters{margin-left:24px}.sidebar ol{list-style:none;line-height:22px;margin-top:0;margin-bottom:0;padding:0 0 15px 0}.sidebar ol li.section-title{font-size:18px;font-weight:normal;text-transform:uppercase;padding-top:25px}.sidebar ol li.section-subtitle{font-weight:400;text-transform:uppercase}.sidebar ol li.section-subtitle a{color:inherit}.sidebar ol li.section-subitem{margin-left:12px}.sidebar ol li:first-child{padding-top:3px;margin-top:0}.sidebar h5{color:var(--main-sidebar-color);font-size:18px;margin:0 0 22px 0;padding-top:0}.sidebar h5 a,.sidebar h5 a:hover{color:var(--main-sidebar-color)}.sidebar h5,.sidebar ol li{text-overflow:ellipsis;overflow:hidden;padding:3px 0 3px 3px}#sidenav-left-toggle{display:none;vertical-align:text-bottom;padding:0;color:var(--main-icon-color);user-select:none;cursor:pointer}#sidenav-left-toggle:hover{color:var(--main-hyperlinks-color)}@media screen and (max-width: 840px){#sidenav-left-toggle{display:inline;width:24px;height:24px;border:none;margin-right:24px;margin-left:24px;font-size:24px}#overlay-under-drawer.active{opacity:.4;height:100%;z-index:1999;position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000;display:block}.sidebar-offcanvas-left{left:-100%;position:fixed;-webkit-transition:all .25s ease-out;-o-transition:all .25s ease-out;transition:all .25s ease-out;z-index:2000;top:0;width:280px;height:90%;background-color:var(--main-bg-color);overflow-y:scroll;padding:10px;margin:10px 10px;box-shadow:5px 5px 5px 5px #444}.sidebar-offcanvas-left.active{left:0}ol#sidebar-nav{font-size:18px;white-space:pre-line}.self-name{display:inline-block;color:var(--main-hyperlinks-color)}}@media screen and (max-width: 992px){.sidebar-offcanvas-right{display:none}}#overlay-under-drawer{display:none}.form-control{border-radius:0;border:0}@media screen and (max-width: 840px){form.search{display:none}}.tt-wrapper{position:relative;display:inline-block}.tt-input{position:relative;vertical-align:top}.navbar-right{padding-right:60px}.navbar-right .tt-menu{right:0;left:inherit !important;width:540px;max-height:280px;overflow-y:scroll}.tt-menu{position:absolute;top:100%;left:0;z-index:100;font-size:14px;margin:0;background-color:var(--main-bg-color);border:1px solid var(--main-header-color);-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.typeahead{padding:17px 17px 17px 50px;width:422px;height:20px;font-size:13px;background-image:url("./search.svg");background-repeat:no-repeat;background-position:4%;outline:0;background-size:20px;filter:var(--main-number-filter);-webkit-filter:var(--main-number-filter)}.search-summary{margin-bottom:10px}a.tt-container{font-size:16px;color:var(--main-hyperlinks-color)}.enter-search-message{position:sticky;top:0;background-color:#aaa;padding:0;font-size:14px;margin:0;clear:both;text-align:center;color:#000}.tt-suggestion:hover{cursor:pointer;color:#fff;background-color:#0097cf}.tt-suggestion .search-from-lib{color:#ddd}.tt-suggestion p{margin:0}.tt-suggestion.tt-cursor{color:#fff;background-color:#0097cf}.tt-suggestion.tt-cursor .search-from-lib{color:#ddd}.tt-container{font-size:14px;margin-bottom:0;margin-top:15px}.tt-container .tt-container-text{color:var(--main-text-color)}.tt-search-results .tt-container{margin-top:5px;margin-bottom:5px}.tt-search-results .tt-container-text{display:none}.tt-search-results .tt-suggestion{color:var(--main-text-color);margin-top:5px;overflow:hidden;padding-left:10px;padding-right:10px;text-overflow:ellipsis;white-space:nowrap}.tt-search-results .tt-suggestion-title{font-size:14px;padding-right:5px}.tt-search-results .tt-suggestion-container{color:var(--main-keyword-color);font-size:14px;font-style:italic;padding-right:5px}.tt-search-results .one-line-description{color:var(--main-keyword-color);display:inline;margin-left:0}.tt-search-results .one-line-description::before{content:open-quote}.tt-search-results .one-line-description::after{content:close-quote}#dartdoc-main-content .tt-suggestion{color:var(--main-text-color);margin-top:5px;margin-bottom:10px;border-style:solid;border-color:#d3d3d3;border-width:.5px}#dartdoc-main-content .tt-suggestion-title{display:block;font-weight:500;margin:4px 10px 0}#dartdoc-main-content .one-line-description{display:block;margin:2px 10px 3px}#dartdoc-main-content .tt-suggestion-container{display:none}@media screen and (max-width: 840px){.typeahead{padding:17px 17px 17px 33px;width:240px;height:17px;border:1px solid #f5f5f5;background-position:3%;margin:10px 10px 10px 9px}header{padding-left:0}}@media screen and (max-width: 320px){#sidenav-left-toggle{margin-right:10px;margin-left:20px}.self-name{margin-right:10px}}::placeholder{filter:brightness(0.85)}.search-body{border:1px solid #7f7f7f;max-width:400px;box-shadow:3px 3px 5px rgba(0,0,0,.1)}section#setter,div#setter{border-top:1px solid #ddd;padding-top:36px}li.inherited a{opacity:.65;font-style:italic}#instance-methods dt.inherited .name,#instance-properties dt.inherited .name,#operators dt.inherited .name{font-weight:400;font-style:italic}#instance-methods dt.inherited .signature,#instance-properties dt.inherited .signature,#operators dt.inherited .signature{font-weight:400}.markdown-alert{margin-top:1rem;margin-bottom:1rem;padding:1.25rem}.markdown-alert>:last-child{margin-bottom:0}.markdown-alert.markdown-alert-title{display:flex;align-items:center;gap:.4rem;margin-bottom:.5rem;font-weight:bold;-webkit-font-smoothing:antialiased}.markdown-alert.markdown-alert-title:before{font:24px/1 "Material Symbols Outlined"}.markdown-alert.markdown-alert-note{background-color:var(--alert-info)}.markdown-alert.markdown-alert-note .markdown-alert-title:before{content:"info"}.markdown-alert.markdown-alert-tip{background-color:var(--alert-tip)}.markdown-alert.markdown-alert-tip .markdown-alert-title:before{content:"lightbulb"}.markdown-alert.markdown-alert-important{background-color:var(--alert-important)}.markdown-alert.markdown-alert-important .markdown-alert-title:before{content:"feedback"}.markdown-alert.markdown-alert-warning{background-color:var(--alert-warning)}.markdown-alert.markdown-alert-warning .markdown-alert-title:before{content:"warning"}.markdown-alert.markdown-alert-caution{background-color:var(--alert-error)}.markdown-alert.markdown-alert-caution .markdown-alert-title:before{content:"report"}@media print{.subnav,.sidebar{display:none}a[href]:after{content:"" !important}}
\ No newline at end of file
diff --git a/web/sig.txt b/web/sig.txt
index 4e651a1037..d4c1090519 100644
--- a/web/sig.txt
+++ b/web/sig.txt
@@ -1 +1 @@
-3E2408ED7DD4454C55FBF018B65003E7
+E234CE5931E162BC482C911853CEB828
diff --git a/web/styles/styles.scss b/web/styles/styles.scss
index cdb7346ce3..80735eb2c8 100644
--- a/web/styles/styles.scss
+++ b/web/styles/styles.scss
@@ -38,6 +38,16 @@
   --alert-important: #e2dbff;
   --alert-warning: #fcf8e3;
   --alert-error: #fde9ee;
+
+  #light-theme-button {
+    display: none;
+  }
+
+  // If image is specified as dark mode only using GitHub's documented method,
+  // hide it in our light theme as well.
+  img[src$="#gh-dark-mode-only"] {
+    display: none;
+  }
 }
 
 .dark-theme {
@@ -78,6 +88,16 @@
   --alert-important: #4a00b4;
   --alert-warning: #7b6909;
   --alert-error: #7a0c17;
+
+  #dark-theme-button {
+    display: none;
+  }
+
+  // If image is specified as light mode only using GitHub's documented method,
+  // hide it in our dark theme as well.
+  img[src$="#gh-light-mode-only"] {
+    display: none;
+  }
 }
 
 #theme {
@@ -88,48 +108,29 @@
   position: absolute;
   right: 30px;
   height: 24px;
-}
 
-#theme-button .material-symbols-outlined {
-  color: var(--main-icon-color);
-  user-select: none;
-  cursor: pointer;
-}
+  .material-symbols-outlined {
+    color: var(--main-icon-color);
+    user-select: none;
+    cursor: pointer;
 
-#theme-button .material-symbols-outlined:hover {
-  color: var(--main-hyperlinks-color);
+    &:hover {
+      color: var(--main-hyperlinks-color);
+    }
+  }
 }
 
-li .material-symbols-outlined, dt .material-symbols-outlined {
-  font-size: 1em;
-  vertical-align: text-bottom;
+li, dt {
+  .material-symbols-outlined {
+    font-size: 1em;
+    vertical-align: text-bottom;
+  }
 }
 
 dt .material-symbols-outlined {
   text-indent: 0;
 }
 
-.light-theme #light-theme-button {
-  display: none;
-}
-
-.dark-theme #dark-theme-button {
-  display: none;
-}
-
-/*
-Only show images that fit their theme using GitHub's syntax, see:
-https://github.blog/changelog/2021-11-24-specify-theme-context-for-images-in-markdown/
-*/
-.dark-theme img[src$="#gh-light-mode-only"] {
-  display: none;
-}
-
-.light-theme img[src$="#gh-dark-mode-only"] {
-  display: none;
-}
-
-/* for layout */
 html,
 body {
   margin: 0;
@@ -150,6 +151,10 @@ body {
   -webkit-overflow-scrolling: touch;
 }
 
+button {
+  padding: 0;
+}
+
 header {
   flex: 0 0 50px;
   display: flex;
@@ -158,27 +163,28 @@ header {
   padding-left: 30px;
   padding-right: 30px;
   background-color: var(--main-header-color);
-}
+  box-shadow: 0 3px 5px rgba(0, 0, 0, 0.1);
 
-header ol {
-  list-style: none;
-  margin: 0;
-  padding: 0;
-}
+  ol {
+    list-style: none;
+    margin: 0;
+    padding: 0;
 
-header ol li {
-  display: inline;
-}
+    li {
+      display: inline;
+    }
+  }
 
-header form {
-  display: flex;
-  flex: 1;
-  justify-content: flex-end;
-}
+  form {
+    display: flex;
+    flex: 1;
+    justify-content: flex-end;
+  }
 
-header#header-search-sidebar {
-  height: 50px;
-  margin-bottom: 25px;
+  #header-search-sidebar {
+    height: 50px;
+    margin-bottom: 25px;
+  }
 }
 
 footer {
@@ -200,6 +206,15 @@ main {
   overflow-y: scroll;
   padding: 20px 0 15px 30px;
   margin: 5px 20px 0 0;
+
+  h5 {
+    margin-bottom: 10px;
+
+    &:last-of-type {
+      border: 0;
+      margin-bottom: 25px;
+    }
+  }
 }
 
 ::-webkit-scrollbar-button{ display: none; height: 13px; border-radius: 0; background-color: #AAA; }
@@ -215,6 +230,11 @@ main {
   order: 2;
   overflow-y: scroll;
   padding: 10px 20px 0 20px;
+
+  /* Do not display "provided by X extension" text on extension pages. */
+  &.extension-page .from-extension {
+    display: none;
+  }
 }
 
 .sidebar-offcanvas-right {
@@ -225,7 +245,6 @@ main {
   margin-top: 5px;
   margin-right: 20px;
 }
-/* end for layout */
 
 body {
   -webkit-text-size-adjust: 100%;
@@ -237,10 +256,20 @@ body {
   background-color: var(--main-bg-color);
 }
 
-nav.navbar {
-  background-color: inherit;
-  min-height: 50px;
-  border: 0;
+nav {
+  &.navbar {
+    background-color: inherit;
+    min-height: 50px;
+    border: 0;
+
+    .row {
+      padding-top: 8px;
+    }
+  }
+
+  .container {
+    white-space: nowrap;
+  }
 }
 
 @media (max-width: 840px) {
@@ -255,60 +284,6 @@ nav.navbar {
   }
 }
 
-nav.navbar .row {
-  padding-top: 8px;
-}
-
-nav .container {
-  white-space: nowrap;
-}
-
-header {
-  background-color: var(--main-header-color);
-  box-shadow: 0 3px 5px rgba(0,0,0,0.1);
-}
-
-.pre {
-    border: 1px solid #ddd;
-    font-size: 14px;
-}
-
-.hljs-string, .hljs-doctag {
-    color: var(--main-string-color);
-}
-
-.hljs-number, .hljs-literal, .hljs-variable, .hljs-template-variable, .hljs-tag .hljs-attr {
-    color: var(--main-var-color);
-}
-
-.hljs-comment, .hljs-quote {
-    color: var(--main-comment-color);
-    font-style: italic;
-}
-
-.hljs-title, .hljs-section, .hljs-selector-id {
-    color: var(--main-section-color);
-    font-weight: bold;
-}
-
-.hljs-tag, .hljs-name, .hljs-attribute {
-    color: var(--main-tag-color);
-    font-weight: normal;
-}
-
-.hljs-keyword, .hljs-selector-tag, .hljs-subst {
-    color: var(--main-keyword-color);
-    font-weight: bold;
-}
-
-.hljs {
-    display: block;
-    overflow-x: auto;
-    padding: 0.5em;
-    color: var(--main-text-color);
-    background: var(--main-code-bg);
-}
-
 a {
   text-decoration: none;
 }
@@ -335,15 +310,15 @@ h6 {
   color: var(--main-text-color);
 }
 
-h1.title {
-  overflow: hidden;
-  text-overflow: ellipsis;
-}
-
 h1 {
   font-size: 37px;
   margin-top: 0;
   margin-bottom: 0.67em;
+
+  &.title {
+    overflow: hidden;
+    text-overflow: ellipsis;
+  }
 }
 
 h2 {
@@ -361,28 +336,10 @@ p {
 
 a {
   color: var(--main-hyperlinks-color);
-}
 
-a:hover {
-  color: #13B9FD;
-}
-
-pre.prettyprint {
-  font-family: 'Roboto Mono', Menlo, monospace;
-  color: black;
-  border-radius: 0;
-  font-size: 15px;
-  word-wrap: normal;
-  line-height: 1.4;
-  border: 0;
-  margin: 16px 0 16px 0;
-  padding: 8px;
-}
-
-pre code {
-  white-space: pre;
-  word-wrap: initial;
-  font-size: 100%
+  &:hover {
+    color: #13B9FD;
+  }
 }
 
 .fixed {
@@ -393,6 +350,12 @@ pre {
   border: 1px solid #ddd;
   background-color: #eee;
   font-size: 14px;
+
+  code {
+    white-space: pre;
+    word-wrap: initial;
+    font-size: 100%
+  }
 }
 
 code {
@@ -418,169 +381,148 @@ code {
   }
 }
 
-header h1 {
-  font-weight: 400;
-  margin-bottom: 16px;
-}
+header {
+  h1 {
+    font-weight: 400;
+    margin-bottom: 16px;
 
-header a,
-header p,
-header li {
-  color: #0175C2;
-}
+    .kind {
+      color: #555;
+    }
+  }
 
-header a:hover {
-  color: #0175C2;
-}
+  a, p, li {
+    color: #0175C2;
+  }
 
-header h1 .kind {
-  color: #555;
+  a:hover {
+    color: #0175C2;
+  }
+
+  h1 .kind {
+    color: #555;
+  }
 }
 
 dt {
   font-weight: normal;
+
+  // Enum values do not have their own pages; their full docs are
+  // presented on the enum class's page.
+  &.constant + dd p {
+    margin-bottom: 1em;
+  }
+
+  .name {
+    font-weight: 500;
+  }
 }
 
 dd {
   color: var(--main-text-color);
   margin-bottom: 1em;
   margin-left: 0;
-}
 
-dd.callable, dd.constant, dd.property {
-  margin-bottom: 24px;
-}
-
-dd p {
-  overflow-x: hidden;
-  text-overflow: ellipsis;
-  margin-bottom: 0;
-}
+  .callable, .constant, .property {
+    margin-bottom: 24px;
+  }
 
-/* Enum values do not have their own pages; their full docs are presented on the
- * enum class's page. */
-dt.constant + dd p {
-  margin-bottom: 1em;
+  p {
+    overflow-x: hidden;
+    text-overflow: ellipsis;
+    margin-bottom: 0;
+  }
 }
 
 /* indents wrapped lines */
 /* Note that the generated HTML for pub packages may have `section` tags
    transformed into `div` tags, so we have two selectors here. */
-section.summary dt, div.summary dt {
-  margin-left: 24px;
-  text-indent: -24px;
-}
-
-.dl-horizontal dd {
-  margin-left: initial;
-}
-
-dl.dl-horizontal dt {
-  font-style: normal;
-  text-align: left;
-  color: #727272;
-  margin-right: 20px;
-  width: initial;
-}
-
-dt .name {
-  font-weight: 500;
-}
-
-dl dt.callable .name {
-  float: none;
-  width: auto;
-}
-
-.type-parameter {
-  white-space: nowrap;
-}
-
-.multi-line-signature .type-parameter .parameter {
-  margin-left: 0;
-  display: unset;
+section, div {
+  &.summary dt {
+    margin-left: 24px;
+    text-indent: -24px;
+  }
 }
 
-.parameter-list {
-  display: table-cell;
-  margin-left: 10px;
-  list-style-type: none;
-  padding-inline-start: unset;
-}
+dl {
+  &.dl-horizontal {
+    dd {
+      margin-left: initial;
+    }
+
+    dt {
+      font-style: normal;
+      text-align: left;
+      color: #727272;
+      margin-right: 20px;
+      width: initial;
+    }
+  }
 
-.parameter-list.single-line {
-  display: inline;
-  margin-left: 0;
+  dt.callable .name {
+    float: none;
+    width: auto;
+  }
 }
 
-.parameter-list.single-line > li {
-  display: inline;
-}
+.multi-line-signature {
+  .type-parameter {
+    white-space: nowrap;
 
-.parameter-list.single-line > li > .parameter {
-  display: inline;
-  margin-left: 0;
-  text-indent: 0;
-}
+    .parameter {
+      margin-left: 0;
+      display: unset;
+    }
+  }
 
-.signature {
-  color: var(--main-text-color);
-}
+  .parameter-list {
+    display: table-cell;
+    margin-left: 10px;
+    list-style-type: none;
+    padding-inline-start: unset;
+
+    &.single-line {
+      display: inline;
+      margin-left: 0;
+
+      > li {
+        display: inline;
+
+        > .parameter {
+          display: inline;
+          margin-left: 0;
+          text-indent: 0;
+        }
+      }
+    }
+  }
 
-.signature a {
-  color: var(--main-hyperlinks-color);
-}
+  .signature {
+    color: var(--main-text-color);
 
-.optional {
-  font-style: italic;
-}
+    a {
+      color: var(--main-hyperlinks-color);
+    }
+  }
 
-.undocumented {
-  font-style: italic;
-}
+  .optional {
+    font-style: italic;
+  }
 
-.is-const {
-  font-style: italic;
-}
+  .undocumented {
+    font-style: italic;
+  }
 
-.deprecated {
-  text-decoration: line-through;
-}
+  .is-const {
+    font-style: italic;
+  }
 
-.category.linked {
-  font-weight: bold;
-  opacity: 1;
+  .deprecated {
+    text-decoration: line-through;
+  }
 }
 
 /* Colors for category based on categoryOrder in dartdoc_options.config. */
-.category.cp-0 {
-  background-color: #54b7c4
-}
-
-.category.cp-1 {
-  background-color: #54c47f
-}
-
-.category.cp-2 {
-  background-color: #c4c254
-}
-
-.category.cp-3 {
-  background-color: #c49f54
-}
-
-.category.cp-4 {
-  background-color: #c45465
-}
-
-.category.cp-5 {
-  background-color: #c454c4
-}
-
-.category a {
-  color: white;
-}
-
 .category {
   padding: 2px 4px;
   font-size: 12px;
@@ -589,15 +531,43 @@ dl dt.callable .name {
   text-transform: uppercase;
   color: white;
   opacity: .5;
-}
 
-h1 .category {
-  vertical-align: middle;
-}
+  &.linked {
+    font-weight: bold;
+    opacity: 1;
+  }
 
-/* Do not display "provided by X extension" text on extension pages. */
-.main-content.extension-page .from-extension {
-  display: none;
+  &.cp-0 {
+    background-color: #54b7c4
+  }
+
+  &.cp-1 {
+    background-color: #54c47f
+  }
+
+  &.cp-2 {
+    background-color: #c4c254
+  }
+
+  &.cp-3 {
+    background-color: #c49f54
+  }
+
+  &.cp-4 {
+    background-color: #c45465
+  }
+
+  &.cp-5 {
+    background-color: #c454c4
+  }
+
+  a {
+    color: white;
+  }
+
+  @at-root h1 & {
+    vertical-align: middle;
+  }
 }
 
 sup.muted {
@@ -613,7 +583,7 @@ sup.muted {
 
 /* The badge under a declaration for things like "const", "read-only", etc. and for the badges inline like sealed or interface */
 /* See https://github.com/dart-lang/dartdoc/blob/main/lib/src/model/feature.dart */
-.feature {
+a.feature {
   display: inline-block;
   background: var(--main-bg-color);
   border: 1px solid var(--main-hyperlinks-color);
@@ -623,10 +593,10 @@ sup.muted {
   font-size: 12px;
   padding: 1px 6px;
   margin: 0 8px 0 0;
-}
 
-a.feature:hover {
-  border-color: #13B9FD;
+  &:hover {
+    border-color: #13B9FD;
+  }
 }
 
 h1 .feature {
@@ -638,10 +608,8 @@ h1 .feature {
   padding: 18px 4px;
   font-size: 18px;
   vertical-align: middle;
-}
 
-@media (max-width: 840px) {
-  .source-link {
+  @media (max-width: 840px) {
     padding: 7px 2px;
     font-size: 10px;
   }
@@ -661,54 +629,56 @@ footer {
   color: #fff;
   background-color: var(--main-footer-background);
   width: 100%;
-}
 
-footer p {
-  margin: 0;
-}
+  p {
+    margin: 0;
+  }
 
-footer .no-break {
-  white-space: nowrap;
-}
+  .no-break {
+    white-space: nowrap;
+  }
 
-footer .container {
-  padding-left: 0;
-  padding-right: 0;
-}
+  .container {
+    padding-left: 0;
+    padding-right: 0;
+  }
 
-footer a, footer a:hover {
-  color: #fff;
+  a, a:hover {
+    color: #fff;
+  }
 }
 
-.markdown.desc {
-  margin-bottom: 1em;
-  max-width: 700px;
-}
+.markdown {
+  &.desc {
+    margin-bottom: 1em;
+    max-width: 700px;
+  }
 
-.markdown h1 {
-  font-size: 24px;
-  margin-bottom: 8px;
-}
+  h1 {
+    font-size: 24px;
+    margin-bottom: 8px;
+  }
 
-.markdown h2 {
-  font-size: 20px;
-  margin-top: 24px;
-  margin-bottom: 8px;
-}
+  h2 {
+    font-size: 20px;
+    margin-top: 24px;
+    margin-bottom: 8px;
+  }
 
-.markdown h3 {
-  font-size: 18px;
-  margin-bottom: 8px;
-  color: var(--main-text-color);
-}
+  h3 {
+    font-size: 18px;
+    margin-bottom: 8px;
+    color: var(--main-text-color);
+  }
 
-.markdown h4 {
-  font-size: 16px;
-  margin-bottom: 0;
-}
+  h4 {
+    font-size: 16px;
+    margin-bottom: 0;
+  }
 
-.markdown li p {
-  margin: 0;
+  li p {
+    margin: 0;
+  }
 }
 
 table {
@@ -731,72 +701,74 @@ td {
   list-style: none;
   padding: 0;
   margin: 0;
-}
 
-.gt-separated li {
-  display: inline-block;
-}
+  li {
+    display: inline-block;
 
-.gt-separated li:before {
-  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='%23DDDDDD' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>");
-  background-position: center;
-  content: "\00a0";
-  margin: 0 6px 0 4px;
-  padding: 0 3px 0 0;
-}
+    &:before {
+      background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='%23DDDDDD' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>");
+      background-position: center;
+      content: "\00a0";
+      margin: 0 6px 0 4px;
+      padding: 0 3px 0 0;
+    }
+
+    &:first-child:before {
+      background-image: none;
+      content: "";
+      margin: 0;
+      padding: 0;
+    }
+  }
 
-.gt-separated.dark li:before {
-  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='%23727272' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>");
-}
+  &.dark li {
+    &:before {
+      background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='%23727272' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>");
+    }
 
-.gt-separated li:first-child:before {
-  background-image: none;
-  content: "";
-  margin: 0;
-  padding: 0;
+    &:first-child:before {
+      background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='%23727272' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>");
+    }
+  }
 }
 
 .multi-line-signature {
   font-size: 17px;
   color: #727272;
-}
 
-.multi-line-signature .parameter {
-  margin-left: 60px;
-  display: block;
-  text-indent: -36px;
+  .parameter {
+    margin-left: 60px;
+    display: block;
+    text-indent: -36px;
+  }
 }
 
-.breadcrumbs {
+ol.breadcrumbs {
   padding: 0;
   margin: 8px 0 8px 0;
   white-space: nowrap;
   line-height: 1;
-}
 
-@media screen and (min-width: 840px) {
-  nav ol.breadcrumbs {
-    float: left;
-  }
-}
-
-@media screen and (max-width: 840px) {
-  .breadcrumbs {
+  @media screen and (max-width: 840px) {
     margin: 0 0 24px 0;
     overflow-x: hidden;
   }
-}
 
-.breadcrumbs .gt-separated .dark .hidden-xs li+li:before {
-  color: var(--main-h-text);
-}
+  @media screen and (min-width: 841px) {
+    float: left;
+  }
 
-ol.breadcrumbs li a {
-  color: var(--main-hyperlinks-color);
-}
+  li a {
+    color: var(--main-hyperlinks-color);
+  }
 
-.self-crumb {
-  color: var(--main-h-text);
+  .gt-separated .dark .hidden-xs li+li:before {
+    color: var(--main-h-text);
+  }
+
+  .self-crumb {
+    color: var(--main-h-text);
+  }
 }
 
 .self-name {
@@ -814,18 +786,18 @@ ol.breadcrumbs li a {
   list-style: none;
   padding: 0;
   display: inline;
-}
 
-.comma-separated li {
-  display: inline;
-}
+  li {
+    display: inline;
 
-.comma-separated li:after {
-  content: ", ";
-}
+    &:after {
+      content: ", ";
+    }
 
-.comma-separated li:last-child:after {
-  content: "";
+    &:last-child:after {
+      content: "";
+    }
+  }
 }
 
 .end-with-period li:last-child:after {
@@ -842,67 +814,66 @@ ol.breadcrumbs li a {
 
 /* Note that the generated HTML for pub packages may have `section` tags
    transformed into `div` tags, so we have two selectors here. */
-section.multi-line-signature div.parameters,
-div.multi-line-signature div.parameters {
-  margin-left: 24px;
+section, div {
+  &.multi-line-signature div.parameters {
+    margin-left: 24px;
+  }
 }
 
 /* sidebar styles */
 
-.sidebar ol {
-  list-style: none;
-  line-height: 22px;
-  margin-top: 0;
-  margin-bottom: 0;
-  padding: 0 0 15px 0;
-}
-
-.sidebar h5 a,
-.sidebar h5 a:hover {
-  color: var(--main-sidebar-color);
-}
-
-.sidebar h5,
-.sidebar ol li {
-  text-overflow: ellipsis;
-  overflow: hidden;
-  padding: 3px 0 3px 3px;
-}
-
-.sidebar h5 {
-  color: var(--main-sidebar-color);
-  font-size: 18px;
-  margin: 0 0 22px 0;
-  padding-top: 0;
-}
-
-.sidebar ol li.section-title {
-  font-size: 18px;
-  font-weight: normal;
-  text-transform: uppercase;
-  padding-top: 25px;
-}
-
-.sidebar ol li.section-subtitle a {
-  color: inherit;
-}
-
-.sidebar ol li.section-subtitle {
-  font-weight: 400;
-  text-transform: uppercase;
-}
+.sidebar {
+  ol {
+    list-style: none;
+    line-height: 22px;
+    margin-top: 0;
+    margin-bottom: 0;
+    padding: 0 0 15px 0;
+
+    li {
+      &.section-title {
+        font-size: 18px;
+        font-weight: normal;
+        text-transform: uppercase;
+        padding-top: 25px;
+      }
+
+      &.section-subtitle {
+        font-weight: 400;
+        text-transform: uppercase;
+
+        a {
+          color: inherit;
+        }
+      }
+
+      &.section-subitem {
+        margin-left: 12px;
+      }
+
+      &:first-child {
+        padding-top: 3px;
+        margin-top: 0;
+      }
+    }
+  }
 
-.sidebar ol li.section-subitem {
-  margin-left: 12px;
-}
+  h5 {
+    color: var(--main-sidebar-color);
+    font-size: 18px;
+    margin: 0 0 22px 0;
+    padding-top: 0;
 
-.sidebar ol li:first-child {
-  padding-top: 3px;
-  margin-top: 0;
-}
+    a, a:hover {
+      color: var(--main-sidebar-color);
+    }
+  }
 
-button {
-  padding: 0;
+  h5, ol li {
+    text-overflow: ellipsis;
+    overflow: hidden;
+    padding: 3px 0 3px 3px;
+  }
 }
 
 #sidenav-left-toggle {
@@ -912,10 +883,10 @@ button {
   color: var(--main-icon-color);
   user-select: none;
   cursor: pointer;
-}
 
-#sidenav-left-toggle:hover {
-  color: var(--main-hyperlinks-color);
+  &:hover {
+    color: var(--main-hyperlinks-color);
+  }
 }
 
 /* left-nav disappears, and can transition in from the left */
@@ -951,13 +922,17 @@ button {
     transition:all .25s ease-out;
     z-index: 2000;
     top: 0;
-    width: 280px; /* works all the way down to an iphone 4 */
+    width: 280px;
     height: 90%;
     background-color: var(--main-bg-color);
-    overflow-y: scroll; /* TODO: how to hide scroll bars? */
+    overflow-y: scroll;
     padding: 10px;
     margin: 10px 10px;
     box-shadow: 5px 5px 5px 5px #444444;
+
+    &.active {
+      left: 0; /* this animates our drawer into the page */
+    }
   }
 
   ol#sidebar-nav {
@@ -965,25 +940,12 @@ button {
     white-space: pre-line;
   }
 
-  .sidebar-offcanvas-left.active {
-    left: 0; /* this animates our drawer into the page */
-  }
-
   .self-name {
     display: inline-block;
     color: var(--main-hyperlinks-color);
   }
 }
 
-.sidebar-offcanvas-left h5 {
-  margin-bottom: 10px;
-}
-
-.sidebar-offcanvas-left h5:last-of-type {
-  border: 0;
-  margin-bottom: 25px;
-}
-
 /* the right nav disappears out of view when the window shrinks */
 @media screen and (max-width: 992px) {
   .sidebar-offcanvas-right {
@@ -1008,13 +970,6 @@ button {
   }
 }
 
-.typeahead {
-  width: 200px;
-  padding: 2px 7px 1px 7px;
-  line-height: 20px;
-  outline: none;
-}
-
 .tt-wrapper {
   position: relative;
   display: inline-block;
@@ -1025,16 +980,16 @@ button {
   vertical-align: top;
 }
 
-.navbar-right .tt-menu {
-  right: 0;
-  left: inherit !important;
-  width: 540px;
-  max-height: 280px;
-  overflow-y: scroll;
-}
-
 .navbar-right {
   padding-right: 60px;
+
+  .tt-menu {
+    right: 0;
+    left: inherit !important;
+    width: 540px;
+    max-height: 280px;
+    overflow-y: scroll;
+  }
 }
 
 .tt-menu {
@@ -1051,7 +1006,6 @@ button {
           box-shadow: 0 5px 10px rgba(0,0,0,.2);
 }
 
-
 .typeahead {
   padding: 17px 17px 17px 50px;
   width: 422px;
@@ -1076,7 +1030,6 @@ a.tt-container {
 }
 
 .enter-search-message {
-  position: -webkit-sticky;
   position: sticky;
   top: 0;
   background-color: #AAA;
@@ -1088,116 +1041,121 @@ a.tt-container {
   color: black;
 }
 
-.tt-suggestion:hover {
-  cursor: pointer;
-  color: #fff;
-  background-color: #0097cf;
-}
+.tt-suggestion {
+  &:hover {
+    cursor: pointer;
+    color: #fff;
+    background-color: #0097cf;
+  }
 
-.tt-suggestion:hover .search-from-lib {
-  color: #ddd;
-}
+  .search-from-lib {
+    color: #ddd;
+  }
 
-.tt-suggestion.tt-cursor {
-  color: #fff;
-  background-color: #0097cf;
-}
+  p {
+    margin: 0;
+  }
 
-.tt-suggestion.tt-cursor .search-from-lib {
-  color: #ddd;
-}
+  &.tt-cursor {
+    color: #fff;
+    background-color: #0097cf;
 
-.tt-suggestion p {
-  margin: 0;
+    .search-from-lib {
+      color: #ddd;
+    }
+  }
 }
 
 .tt-container {
   font-size: 14px;
   margin-bottom: 0;
   margin-top: 15px;
-}
 
-.tt-container-text {
-  color: var(--main-text-color);
+  .tt-container-text {
+    color: var(--main-text-color);
+  }
 }
 
 
 /* Search results formatting for mini results below search bar. */
 
-.tt-search-results .tt-container {
-  margin-top: 5px;
-  margin-bottom: 5px;
-}
-
-/* Do not show the container as a section. */
-.tt-search-results .tt-container-text {
-  display: none
-}
+.tt-search-results {
+  .tt-container {
+    margin-top: 5px;
+    margin-bottom: 5px;
+  }
 
-/* An inline style. */
-.tt-search-results .tt-suggestion {
-  color: var(--main-text-color);
-  margin-top: 5px;
-  overflow: hidden;
-  padding-left: 10px;
-  padding-right: 10px;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
+  /* Do not show the container as a section. */
+  .tt-container-text {
+    display: none
+  }
 
-.tt-search-results .tt-suggestion-title {
-  font-size: 14px;
-  padding-right: 5px;
-}
+  /* An inline style. */
+  .tt-suggestion {
+    color: var(--main-text-color);
+    margin-top: 5px;
+    overflow: hidden;
+    padding-left: 10px;
+    padding-right: 10px;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
 
-.tt-search-results .tt-suggestion-container {
-  color: var(--main-keyword-color);
-  font-size: 14px;
-  font-style: italic;
-  padding-right: 5px;
-}
+  .tt-suggestion-title {
+    font-size: 14px;
+    padding-right: 5px;
+  }
 
-.tt-search-results .one-line-description {
-  color: var(--main-keyword-color);
-  display: inline;
-  margin-left: 0;
-}
+  .tt-suggestion-container {
+    color: var(--main-keyword-color);
+    font-size: 14px;
+    font-style: italic;
+    padding-right: 5px;
+  }
 
+  .one-line-description {
+    color: var(--main-keyword-color);
+    display: inline;
+    margin-left: 0;
 
-.tt-search-results .one-line-description::before {
-  content: open-quote;
-}
+    &::before {
+      content: open-quote;
+    }
 
-.tt-search-results .one-line-description::after {
-  content: close-quote;
+    &::after {
+      content: close-quote;
+    }
+  }
 }
 
 /* Search results formatting for `search.html`. */
 
 /* A block style. */
-#dartdoc-main-content .tt-suggestion {
-  color: var(--main-text-color);
-  margin-top: 5px;
-  margin-bottom: 10px;
-  border-style: solid;
-  border-color: lightgrey;
-  border-width: 0.5px;
-}
+#dartdoc-main-content {
+  .tt-suggestion {
+    color: var(--main-text-color);
+    margin-top: 5px;
+    margin-bottom: 10px;
+    border-style: solid;
+    border-color: lightgrey;
+    border-width: 0.5px;
+  }
 
-#dartdoc-main-content .tt-suggestion-title {
-  display: block;
-  font-weight: 500;
-  margin: 4px 10px 0;
-}
+  .tt-suggestion-title {
+    display: block;
+    font-weight: 500;
+    margin: 4px 10px 0;
+  }
 
-#dartdoc-main-content .one-line-description {
-  display: block;
-  margin: 2px 10px 3px;
-}
+  .one-line-description {
+    display: block;
+    margin: 2px 10px 3px;
+  }
 
-/* Do not show a result's container. */
-#dartdoc-main-content .tt-suggestion-container {
-  display: none;
+  /* Do not show a result's container. */
+  .tt-suggestion-container {
+    display: none;
+  }
 }
 
 @media screen and (max-width: 840px) {
@@ -1248,26 +1206,18 @@ li.inherited a {
   font-style: italic;
 }
 
-#instance-methods dt.inherited .name,
-#instance-properties dt.inherited .name,
-#operators dt.inherited .name {
-  font-weight: 400;
-  font-style: italic;
-}
-
-#instance-methods dt.inherited .signature,
-#instance-properties dt.inherited .signature,
-#operators dt.inherited .signature {
-  font-weight: 400;
-}
-
-@media print {
-  .subnav, .sidebar {
-    display: none;
-  }
+#instance-methods,
+#instance-properties,
+#operators {
+  dt.inherited {
+    .name {
+      font-weight: 400;
+      font-style: italic;
+    }
 
-  a[href]:after {
-   content: "" !important;
+    .signature {
+      font-weight: 400;
+    }
   }
 }
 
@@ -1277,64 +1227,72 @@ li.inherited a {
   margin-top: 1rem;
   margin-bottom: 1rem;
   padding: 1.25rem;
-}
 
-.markdown-alert>:last-child {
-  margin-bottom: 0;
-}
+  >:last-child {
+    margin-bottom: 0;
+  }
 
-.markdown-alert-title {
-  display: flex;
-  align-items: center;
-  gap: 0.4rem;
-  margin-bottom: 0.5rem;
+  &.markdown-alert-title {
+    display: flex;
+    align-items: center;
+    gap: 0.4rem;
+    margin-bottom: 0.5rem;
 
-  font-weight: bold;
-  -webkit-font-smoothing: antialiased;
-}
+    font-weight: bold;
+    -webkit-font-smoothing: antialiased;
 
-.markdown-alert-title:before {
-  font: 24px / 1 'Material Symbols Outlined';
-}
+    &:before {
+      font: 24px / 1 'Material Symbols Outlined';
+    }
+  }
 
-/* note, tip, important, warning, caution */
+  &.markdown-alert-note {
+    background-color: var(--alert-info);
 
-.markdown-alert.markdown-alert-note {
-  background-color: var(--alert-info);
-}
+    .markdown-alert-title:before {
+      content: 'info';
+    }
+  }
 
-.markdown-alert-note .markdown-alert-title:before {
-  content: 'info';
-}
+  &.markdown-alert-tip {
+    background-color: var(--alert-tip);
 
-.markdown-alert.markdown-alert-tip {
-  background-color: var(--alert-tip);
-}
+    .markdown-alert-title:before {
+      content: 'lightbulb';
+    }
+  }
 
-.markdown-alert-tip .markdown-alert-title:before {
-  content: 'lightbulb';
-}
+  &.markdown-alert-important {
+    background-color: var(--alert-important);
 
-.markdown-alert.markdown-alert-important {
-  background-color: var(--alert-important);
-}
+    .markdown-alert-title:before {
+      content: 'feedback';
+    }
+  }
 
-.markdown-alert-important .markdown-alert-title:before {
-  content: 'feedback';
-}
+  &.markdown-alert-warning {
+    background-color: var(--alert-warning);
 
-.markdown-alert.markdown-alert-warning {
-  background-color: var(--alert-warning);
-}
+    .markdown-alert-title:before {
+      content: 'warning';
+    }
+  }
 
-.markdown-alert-warning .markdown-alert-title:before {
-  content: 'warning';
-}
+  &.markdown-alert-caution {
+    background-color: var(--alert-error);
 
-.markdown-alert.markdown-alert-caution {
-  background-color: var(--alert-error);
+    .markdown-alert-title:before {
+      content: 'report';
+    }
+  }
 }
 
-.markdown-alert-caution .markdown-alert-title:before {
-  content: 'report';
+@media print {
+  .subnav, .sidebar {
+    display: none;
+  }
+
+  a[href]:after {
+    content: "" !important;
+  }
 }

From ac97552c118141f7825791eb8c24563df33f9e1a Mon Sep 17 00:00:00 2001
From: Parker Lougheed <parlough@gmail.com>
Date: Fri, 25 Oct 2024 14:46:15 -0500
Subject: [PATCH 5/5] Mark as generated

---
 .gitattributes | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/.gitattributes b/.gitattributes
index 6b049d6c54..f4ac216e83 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,6 +1,8 @@
 *.dart text eol=lf
 *.yaml text eol=lf
 
+lib/resources/styles.css linguist-generated=true
+
 # Don't collapse in github code reviews by default.
 lib/src/version.dart linguist-generated=false
 lib/src/html/resources.g.dart linguist-generated=false
@@ -9,6 +11,7 @@ lib/src/html/resources.g.dart linguist-generated=false
 # At the end of a rebase or a merge, the dev may still need to regenerate
 # these files with `dart run tool/task.dart build`.
 lib/resources/docs.dart.js merge=theirs
+lib/resources/styles.css merge=theirs
 lib/resources/docs.dart.js.map merge=theirs
 lib/src/generator/templates.aot_renderers_for_html.dart merge=theirs
 lib/src/generator/templates.aot_renderers_for_md.dart merge=theirs