diff --git a/media/css/main.css b/media/css/main.css
index 71364f19..558d7197 100644
--- a/media/css/main.css
+++ b/media/css/main.css
@@ -15,8 +15,8 @@
 */
 
 /** CUSTOM FONTS */
-@import url('/media/css/open-sans-woff.css');
-@import url('/media/css/open-sans-woff2.css');
+@import url("/media/css/open-sans-woff.css");
+@import url("/media/css/open-sans-woff2.css");
 
 /** STANDARD COLOR DEFINITIONS (complete list) **/
 :root {
@@ -59,7 +59,7 @@
   --carousel-image-bdr-color: #ddd;
   --carousel-li-active-bg-color: #555;
   --carousel-li-bg-color: #999;
-  --carousel-li-sdw-color: rgba(0,0,0,0.2);
+  --carousel-li-sdw-color: rgba(0, 0, 0, 0.2);
   --cta-bg-color: #336791;
   --cta-fg-color: #fff;
   --cta-header-fg-color: #fff;
@@ -118,7 +118,7 @@
   --i-fas-fg-color: #336791;
   --navbar-bg-color: inherit;
   --navbar-fg-color: inherit;
-  --navbar-sdw-color: rgba(0,0,0,0.2);
+  --navbar-sdw-color: rgba(0, 0, 0, 0.2);
   --navbar-toggler-img: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E");
   --pg-bdr-blue-color: #336791;
   --pg-bg-blue-color: #336791;
@@ -161,89 +161,91 @@
 
 /** DARK COLOR (overrides only) **/
 [data-theme="dark"] {
-    --a-fg-color: #699eca;
-    --a-highlight-fg-color: #50b0f0;
-    --alert-warning-bg-color: #bcb5b5;
-    --alert-warning-bdr-color: #bcb5b5;
-    --b-fg-color: #f3f5f9;
-    --body-bg-color: #212121;
-    --body-fg-color: #f3f5f9;
-    --btn-download-bdr-color: #699eca;
-    --btn-download-decoration-bdr-color: #d4d4d4;
-    --btn-download-decoration-bg-color: #4a4a4a;
-    --btn-download-bg-color: #212121;
-    --btn-download-active-bg-color: #4A4A4A;
-    --btn-download-fg-color: #699eca;
-    --btn-primary-bdr-color: #699eca;
-    --btn-primary-bg-color: #699eca;
-    --btn-primary-fg-color: #000;
-    --btn-secondary-bdr-color: #6b6b6b;
-    --btn-secondary-bg-color: #212121;
-    --btn-secondary-fg-color: #fff;
-    --btn-light-bdr-color: #ccc;
-    --btn-light-bg-color: #d4d4d4;
-    --btn-light-fg-color: rgb(1, 1, 1);
-    --button-input-bdr-color: #6b6b6b;
-    --button-input-bg-color: #4a4a4a;
-    --button-input-fg-color: #f3f5f9;
-    --custom-select-bdr-color: #6b6b6b;
-    --custom-select-bg-color: #4a4a4a;
-    --custom-select-fg-color: #f3f5f9;
-    --cta-header-fg-color: #f3f5f9;
-    --doccontent-blockquote-table-caution-bg-color: #171709;
-    --doccontent-blockquote-table-note-bdr-color: #84c578;
-    --doccontent-blockquote-table-note-bg-color: #4a4a4a;
-    --doccontent-blockquote-table-tip-bdr-color: #84c578;
-    --doccontent-blockquote-table-tip-bg-color: none;
-    --doccontent-blockquote-table-warning-bg-color: #1e0c0c;
-    --doccontent-callout-fg-color: #f3f5f9;
-    --doccontent-pre-code-bg-color: #4a4a4a;
-    --doccontent-table-bdr-color: #6b6b6b;
-    --doccontent-table-bg-color: #4a4a4a;
-    --doccontent-table-td-bdr-color: #6b6b6b;
-    --doccontent-table-td-bg-color: #212121;
-    --doccontent-table-td-fg-color: #f3f5f9;
-    --doccontent-table-th-bdr-color: #6b6b6b;
-    --doccontent-table-th-bg-color: #6b6b6b;
-    --doccontent-table-th-fg-color: #f3f5f9;
-    --footer-a-fg-color: #699eca;
-    --h2-decoration-bg-color: #6b6b6b;
-    --header-fg-color: #699eca;
-    --hr-bdr-color: #6b6b6b;
-    --navbar-bg-color: #212121;
-    --navbar-fg-color: #f3f5f9;
-    --navbar-toggler-img: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(243, 245, 249, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E");
-    --pg-bg-gray-color: #2e2e2e;
-    --pg-shoutbox-bg-color: #699eca;
-    --pg-shoutbox-fg-color: #000;
-    --pg-sidenav-a-fg-color: #699eca;
-    --pgcontent-a-decoration-fg-color: #50b0f0;
-    --pgcontent-doccontent-a-fg-color: #699eca;
-    --pgcontent-fa-fg-color: #6b6b6b;
-    --table-td-bdr-color: #4a4a4a;
-    --table-td-fg-color: #f3f5f9;
-    --table-th-bdr-color: #4a4a4a;
-    --table-th-bg-color: #303030;
-    --table-th-fg-color: #f3f5f9;
-    --td-fm-no-bg-color: #ff8882;
-    --td-fm-no-fg-color: #000;
-    --td-fm-obs-fg-color: #000;
-    --td-fm-unk-fg-color: #000;
-    --td-fm-yes-bg-color: #89ff96;
-    --td-fm-yes-fg-color: #000;
+  --a-fg-color: #699eca;
+  --a-highlight-fg-color: #50b0f0;
+  --alert-warning-bg-color: #bcb5b5;
+  --alert-warning-bdr-color: #bcb5b5;
+  --b-fg-color: #f3f5f9;
+  --body-bg-color: #212121;
+  --body-fg-color: #f3f5f9;
+  --btn-download-bdr-color: #699eca;
+  --btn-download-decoration-bdr-color: #d4d4d4;
+  --btn-download-decoration-bg-color: #4a4a4a;
+  --btn-download-bg-color: #212121;
+  --btn-download-active-bg-color: #4a4a4a;
+  --btn-download-fg-color: #699eca;
+  --btn-primary-bdr-color: #699eca;
+  --btn-primary-bg-color: #699eca;
+  --btn-primary-fg-color: #000;
+  --btn-secondary-bdr-color: #6b6b6b;
+  --btn-secondary-bg-color: #212121;
+  --btn-secondary-fg-color: #fff;
+  --btn-light-bdr-color: #ccc;
+  --btn-light-bg-color: #d4d4d4;
+  --btn-light-fg-color: rgb(1, 1, 1);
+  --button-input-bdr-color: #6b6b6b;
+  --button-input-bg-color: #4a4a4a;
+  --button-input-fg-color: #f3f5f9;
+  --custom-select-bdr-color: #6b6b6b;
+  --custom-select-bg-color: #4a4a4a;
+  --custom-select-fg-color: #f3f5f9;
+  --cta-header-fg-color: #f3f5f9;
+  --doccontent-blockquote-table-caution-bg-color: #171709;
+  --doccontent-blockquote-table-note-bdr-color: #84c578;
+  --doccontent-blockquote-table-note-bg-color: #4a4a4a;
+  --doccontent-blockquote-table-tip-bdr-color: #84c578;
+  --doccontent-blockquote-table-tip-bg-color: none;
+  --doccontent-blockquote-table-warning-bg-color: #1e0c0c;
+  --doccontent-callout-fg-color: #f3f5f9;
+  --doccontent-pre-code-bg-color: #4a4a4a;
+  --doccontent-table-bdr-color: #6b6b6b;
+  --doccontent-table-bg-color: #4a4a4a;
+  --doccontent-table-td-bdr-color: #6b6b6b;
+  --doccontent-table-td-bg-color: #212121;
+  --doccontent-table-td-fg-color: #f3f5f9;
+  --doccontent-table-th-bdr-color: #6b6b6b;
+  --doccontent-table-th-bg-color: #6b6b6b;
+  --doccontent-table-th-fg-color: #f3f5f9;
+  --footer-a-fg-color: #699eca;
+  --h2-decoration-bg-color: #6b6b6b;
+  --header-fg-color: #699eca;
+  --hr-bdr-color: #6b6b6b;
+  --navbar-bg-color: #212121;
+  --navbar-fg-color: #f3f5f9;
+  --navbar-toggler-img: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(243, 245, 249, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E");
+  --pg-bg-gray-color: #2e2e2e;
+  --pg-shoutbox-bg-color: #699eca;
+  --pg-shoutbox-fg-color: #000;
+  --pg-sidenav-a-fg-color: #699eca;
+  --pgcontent-a-decoration-fg-color: #50b0f0;
+  --pgcontent-doccontent-a-fg-color: #699eca;
+  --pgcontent-fa-fg-color: #6b6b6b;
+  --table-td-bdr-color: #4a4a4a;
+  --table-td-fg-color: #f3f5f9;
+  --table-th-bdr-color: #4a4a4a;
+  --table-th-bg-color: #303030;
+  --table-th-fg-color: #f3f5f9;
+  --td-fm-no-bg-color: #ff8882;
+  --td-fm-no-fg-color: #000;
+  --td-fm-obs-fg-color: #000;
+  --td-fm-unk-fg-color: #000;
+  --td-fm-yes-bg-color: #89ff96;
+  --td-fm-yes-fg-color: #000;
 }
 
-
 /** GLOBAL CONFIGURATION */
 body {
-  font-family: 'Open Sans', sans-serif;
+  font-family: "Open Sans", sans-serif;
   font-weight: 400;
   color: var(--body-fg-color);
   background-color: var(--body-bg-color);
   font-size: 11.5pt;
 }
 
-input, select, textarea, .btn-default {
+input,
+select,
+textarea,
+.btn-default {
   background-color: var(--button-input-bg-color);
   border-color: var(--button-input-bdr-color);
   color: var(--button-input-fg-color);
@@ -273,16 +275,24 @@ p {
   margin-bottom: 0.5rem;
 }
 
-dl, ol, ul {
+dl,
+ol,
+ul {
   margin-bottom: 0.5rem;
 }
 
-.table td, .table th {
+.table td,
+.table th {
   padding: 0.5rem;
 }
 
-h1, h2, h3, h4, h5, h6 {
-  font-family: 'Open Sans', sans-serif;
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+  font-family: "Open Sans", sans-serif;
   font-weight: 600;
   color: var(--header-fg-color);
   /*margin: 0 0 0.5em 0;*/
@@ -298,25 +308,29 @@ h3 {
   font-weight: initial;
 }
 
-.h4, h4 {
+.h4,
+h4 {
   font-size: 1.1rem;
   text-transform: capitalize !important;
 }
 
-.h5, h5 {
+.h5,
+h5 {
   font-size: 0.98rem;
 }
 
-#pgContentWrap h2:after, #pgSideNav h2:after {
+#pgContentWrap h2:after,
+#pgSideNav h2:after {
   background-color: var(--h2-decoration-bg-color);
-  content: '\a0';
+  content: "\a0";
   flex-grow: 1;
   height: 2px;
   position: relative;
-  margin: .5em 0 .5em .75em;
+  margin: 0.5em 0 0.5em 0.75em;
 }
 
-#pgContentWrap h2, #pgSideNav h2 {
+#pgContentWrap h2,
+#pgSideNav h2 {
   display: flex;
   flex-direction: row;
 }
@@ -328,9 +342,10 @@ h2.centered-lines {
   text-align: center;
 }
 
-h2.centered-lines:after, h2.centered-lines:before {
+h2.centered-lines:after,
+h2.centered-lines:before {
   background-color: var(--h2-decoration-bg-color);
-  content: '\a0';
+  content: "\a0";
   flex-grow: 1;
   height: 2px;
   position: relative;
@@ -345,32 +360,42 @@ h2.centered-lines:before {
   margin-right: 0.75em;
 }
 
-h1 a, h2 a, h3 a, h4 a, h5 a, h6 a {
+h1 a,
+h2 a,
+h3 a,
+h4 a,
+h5 a,
+h6 a {
   text-decoration: none;
   color: var(--header-a-fg-color);
 }
 
-a, .news a {
+a,
+.news a {
   color: var(--a-fg-color);
   font-weight: 600;
   text-decoration: none;
-  -moz-transition: color .2s ease-in-out;
-  -webkit-transition: color .2s ease-in-out;
-  -ms-transition: color .2s ease-in-out;
-  transition: color .2s ease-in-out;
+  -moz-transition: color 0.2s ease-in-out;
+  -webkit-transition: color 0.2s ease-in-out;
+  -ms-transition: color 0.2s ease-in-out;
+  transition: color 0.2s ease-in-out;
 }
 
-a:hover, a:active {
+a:hover,
+a:active {
   color: var(--a-highlight-fg-color);
   text-decoration: none;
 }
 
-b, strong, th {
+b,
+strong,
+th {
   font-weight: 600;
   color: var(--b-fg-color) !important;
 }
 
-i, em {
+i,
+em {
   font-style: italic;
 }
 
@@ -425,7 +450,7 @@ p, ul, ol, dl, table {
 }
 
 .pg-text-blue {
-  color: var(--pg-text-blue-color)
+  color: var(--pg-text-blue-color);
 }
 
 .pg-text-light-blue {
@@ -433,7 +458,8 @@ p, ul, ol, dl, table {
 }
 
 .pgFrontFeature {
-  background: var(--pg-feature-bg-color) url(/media/img/feature/feature_elephant.png) right bottom no-repeat;
+  background: var(--pg-feature-bg-color)
+    url(/media/img/feature/feature_elephant.png) right bottom no-repeat;
   /* background: var(--pg-feature-bg-color) url(/media/img/feature/feature_elephant.png) right bottom no-repeat; */
 }
 
@@ -450,7 +476,7 @@ p, ul, ol, dl, table {
 
 blockquote {
   border-left: solid 5px var(--blockquote-bdr-color);
-  padding: 0 4em 0 .5em;
+  padding: 0 4em 0 0.5em;
   margin: 1em 0 1em 0;
   font-style: italic;
 }
@@ -466,7 +492,7 @@ blockquote {
 
 .item blockquote p:before {
   content: "\f10d";
-  font-family: 'Fontawesome';
+  font-family: "Fontawesome";
   float: left;
   margin-right: 10px;
 }
@@ -525,12 +551,14 @@ blockquote {
   position: absolute;
   display: inline-block;
   color: var(--carousel-i-fg-color);
-  text-shadow: 0 3px 3px var(--carousel-i-sdw-v-color), 0 0 0 var(--carousel-i-sdw-color);
+  text-shadow: 0 3px 3px var(--carousel-i-sdw-v-color),
+    0 0 0 var(--carousel-i-sdw-color);
 }
 .carousel .carousel-indicators {
   bottom: -40px;
 }
-.carousel-indicators li, .carousel-indicators li.active {
+.carousel-indicators li,
+.carousel-indicators li.active {
   width: 10px;
   height: 10px;
   margin: 1px 3px;
@@ -559,7 +587,8 @@ blockquote {
   padding: 2em;
 }
 
-.feature ul, ul.feature {
+.feature ul,
+ul.feature {
   padding: 0;
 }
 
@@ -628,7 +657,7 @@ footer img {
 #footer ul li {
   list-style-type: none;
   display: inline-block;
-  margin: 0 .2em;
+  margin: 0 0.2em;
   font-size: 2em;
 }
 
@@ -718,7 +747,11 @@ ul.bold {
 /* #JUMBOTRON */
 
 .pg-jumbotron {
-  background-image: linear-gradient( var(--pg-jumbotron-grdt-start-color), var(--pg-jumbotron-grdt-end-color) ), url("/media/img/misc/banner.jpg");
+  background-image: linear-gradient(
+      var(--pg-jumbotron-grdt-start-color),
+      var(--pg-jumbotron-grdt-end-color)
+    ),
+    url("/media/img/misc/banner.jpg");
   background-position: center;
   background-repeat: no-repeat;
   background-size: cover;
@@ -753,7 +786,6 @@ ul.bold {
 }
 
 .cta-1 {
-
 }
 
 .cta-2 {
@@ -805,7 +837,7 @@ ul.actions {
 }
 
 .navbar-light .navbar-toggler-icon {
-  background-image: var(--navbar-toggler-img)
+  background-image: var(--navbar-toggler-img);
 }
 
 .nav-item > a {
@@ -913,8 +945,8 @@ code,
   font-size: 0.9rem !important;
   color: var(--doccontent-pre-code-fg-color) !important;
   background-color: var(--doccontent-pre-code-bg-color);
-  border-radius: .25rem;
-  margin: .6rem 0;
+  border-radius: 0.25rem;
+  margin: 0.6rem 0;
   font-weight: 400;
 }
 
@@ -976,15 +1008,15 @@ code,
 }
 
 #docContent table.table,
- #docContent table.informaltable,
- #docContent table.CALSTABLE {
-   background-color: var(--doccontent-table-bg-color);
-   border: 2px solid var(--doccontent-table-bdr-color);
-   border-spacing: 0;
-   border-collapse: collapse;
-   width: initial;
-   margin: 2ex 0;
- }
+#docContent table.informaltable,
+#docContent table.CALSTABLE {
+  background-color: var(--doccontent-table-bg-color);
+  border: 2px solid var(--doccontent-table-bdr-color);
+  border-spacing: 0;
+  border-collapse: collapse;
+  width: initial;
+  margin: 2ex 0;
+}
 
 #docContent table.table th,
 #docContent table.informaltable th,
@@ -1147,13 +1179,17 @@ code,
   margin-bottom: 1rem;
 }
 
-#docContent .TOC tt, #docContent .TOC dt a,
-#docContent .toc tt, #docContent .toc dt a {
+#docContent .TOC tt,
+#docContent .TOC dt a,
+#docContent .toc tt,
+#docContent .toc dt a {
   font-weight: 400;
 }
 
-#docContent .TOC dd, #docContent .TOC dl,
-#docContent .toc dd, #docContent .toc dl {
+#docContent .TOC dd,
+#docContent .TOC dl,
+#docContent .toc dd,
+#docContent .toc dl {
   margin: 0;
 }
 
@@ -1206,10 +1242,16 @@ code,
 /**
   * Various callout boxes for docs, including warning, caution, note, tip
   */
-#docContent table.CAUTION, table.WARNING,
-#docContent blockquote.CAUTION, #docContent blockquote.NOTE, #docContent blockquote.TIP, #docContent blockquote.WARNING,
-#docContent .caution, #docContent .note, #docContent .tip, #docContent .warning
-{
+#docContent table.CAUTION,
+table.WARNING,
+#docContent blockquote.CAUTION,
+#docContent blockquote.NOTE,
+#docContent blockquote.TIP,
+#docContent blockquote.WARNING,
+#docContent .caution,
+#docContent .note,
+#docContent .tip,
+#docContent .warning {
   border-width: 1px;
   border-style: solid;
   font-style: initial;
@@ -1226,25 +1268,30 @@ code,
   border-color: var(--doccontent-table-warning-bdr-color);
 }
 
-#docContent table.CAUTION, table.WARNING {
+#docContent table.CAUTION,
+table.WARNING {
   display: block;
   overflow: auto;
   padding: 0;
 }
 
-#docContent table.CAUTION td, #docContent table.CAUTION th,
-#docContent table.WARNING td, #docContent table.WARNING th {
+#docContent table.CAUTION td,
+#docContent table.CAUTION th,
+#docContent table.WARNING td,
+#docContent table.WARNING th {
   border-width: 0;
   padding-left: 2ex;
   padding-right: 2ex;
 }
 
-#docContent table.CAUTION td, #docContent table.CAUTION th {
+#docContent table.CAUTION td,
+#docContent table.CAUTION th {
   background-color: var(--doccontent-table-td-caution-bg-color);
   border-color: var(--doccontent-table-td-caution-bdr-color);
 }
 
-#docContent table.WARNING td, #docContent table.WARNING th {
+#docContent table.WARNING td,
+#docContent table.WARNING th {
   background-color: var(--doccontent-table-td-warning-bg-color);
   border-color: var(--doccontent-table-td-warning-bdr-color);
 }
@@ -1258,8 +1305,7 @@ code,
 #docContent .caution p:last-child,
 #docContent .note p:last-child,
 #docContent .tip p:last-child,
-#docContent .warning p:last-child
-{
+#docContent .warning p:last-child {
   margin-bottom: 0 !important;
 }
 
@@ -1288,16 +1334,23 @@ code,
   border-color: var(--doccontent-blockquote-table-warning-bdr-color);
 }
 
-#docContent blockquote.TIP h3, #docContent blockquote.NOTE h3, #docContent blockquote.CAUTION h3, #docContent blockquote.WARNING h3,
-#docContent .tip h3, #docContent .note h3, #docContent .caution h3, #docContent .warning h3 {
+#docContent blockquote.TIP h3,
+#docContent blockquote.NOTE h3,
+#docContent blockquote.CAUTION h3,
+#docContent blockquote.WARNING h3,
+#docContent .tip h3,
+#docContent .note h3,
+#docContent .caution h3,
+#docContent .warning h3 {
   text-align: center;
   margin: 0.25rem 0 0.5rem 0;
   color: var(--doccontent-callout-fg-color);
 }
 
-
-#docContent blockquote.WARNING td.c2, #docContent blockquote.WARNING td,
-#docContent .warning td.c2, #docContent .warning td {
+#docContent blockquote.WARNING td.c2,
+#docContent blockquote.WARNING td,
+#docContent .warning td.c2,
+#docContent .warning td {
   border: 1px solid var(--doccontent-td-warning-bdr-color);
 }
 
@@ -1317,7 +1370,7 @@ code,
 
 #docContent table.WARNING code,
 #docContent blockquote.NOTE code {
-   background-color: var(--doccontent-code-warning-note-bg-color) !important;
+  background-color: var(--doccontent-code-warning-note-bg-color) !important;
 }
 
 /**
@@ -1356,7 +1409,7 @@ code,
 #docContent .variablelist p,
 #docContent .VARIABLELIST pre,
 #docContent .variablelist pre {
-  margin: 1rem 0 1rem 2rem !important;;
+  margin: 1rem 0 1rem 2rem !important;
 }
 /**
  * Footnotes
@@ -1374,16 +1427,18 @@ code,
   color: var(--pgcontent-doccontent-a-not-tabindex-fg-color) !important;
 }
 
-#pgContentWrap a, #docContent a {
+#pgContentWrap a,
+#docContent a {
   color: var(--pgcontent-doccontent-a-fg-color);
   text-decoration: none;
-  -moz-transition: color .2s ease-in-out;
-  -webkit-transition: color .2s ease-in-out;
-  -ms-transition: color .2s ease-in-out;
-  transition: color .2s ease-in-out;
+  -moz-transition: color 0.2s ease-in-out;
+  -webkit-transition: color 0.2s ease-in-out;
+  -ms-transition: color 0.2s ease-in-out;
+  transition: color 0.2s ease-in-out;
 }
 
-#pgContentWrap a:hover, #pgContentWrap a:active {
+#pgContentWrap a:hover,
+#pgContentWrap a:active {
   color: var(--pgcontent-a-decoration-fg-color);
   text-decoration: none;
 }
@@ -1394,11 +1449,15 @@ code,
   width: 100%;
 }
 
-#pgContentWrap h3, #pgContentWrap h4 {
+#pgContentWrap h3,
+#pgContentWrap h4 {
   margin: 1em 0;
 }
 
-#pgContentWrap .fa, #pgContentWrap .far, #pgContentWrap .fas, #pgContentWrap .fab {
+#pgContentWrap .fa,
+#pgContentWrap .far,
+#pgContentWrap .fas,
+#pgContentWrap .fab {
   color: var(--pgcontent-fa-fg-color);
   margin: 0 5px;
 }
@@ -1424,9 +1483,9 @@ pre {
 }
 
 pre.code {
-  padding: .2rem .4rem;
+  padding: 0.2rem 0.4rem;
   font-size: 90%;
-  border-radius: .25rem;
+  border-radius: 0.25rem;
 }
 
 /* News and events getting markdown from end users */
@@ -1438,7 +1497,7 @@ pre.code {
   font-size: 1.1em;
 }
 #pgContentWrap .newseventwrap h3 {
-  font-size: 1.0em;
+  font-size: 1em;
 }
 #pgContentWrap strong.event-highlight {
   font-weight: 600;
@@ -1448,14 +1507,14 @@ hr.eventseparator {
   margin-bottom: 1em;
 }
 
-
 /* #STYLEDSELECT */
 
 /**
 * Used on mailinglists.html as part of the mailinglist subscribe functionality.
 */
 
-.styledSelect, .styledInput {
+.styledSelect,
+.styledInput {
   width: 100%;
   height: 34px;
   overflow: hidden;
@@ -1490,7 +1549,12 @@ hr.eventseparator {
   color: var(--btn-primary-fg-color) !important;
 }
 
-.btn-primary:hover, .btn-primary:active, .btn-primary:focus, .btn-primary.active, .btn:active:focus, .btn.active:focus {
+.btn-primary:hover,
+.btn-primary:active,
+.btn-primary:focus,
+.btn-primary.active,
+.btn:active:focus,
+.btn.active:focus {
   background-color: var(--btn-decoration-bg-color);
   border-color: var(--btn-decoration-bdr-color);
   cursor: pointer;
@@ -1535,20 +1599,20 @@ input.form-control {
 
 input#q {
   font-size: 1em;
-  font-family: 'Open Sans', sans-serif;
+  font-family: "Open Sans", sans-serif;
 }
 
 input {
   padding-left: 0.5em;
 }
 
-input[type=checkbox] {
+input[type="checkbox"] {
   vertical-align: middle;
   margin-left: 5px;
   width: auto;
 }
 
-input[type=checkbox]:focus {
+input[type="checkbox"]:focus {
   outline: none;
   box-shadow: none;
 }
@@ -1569,7 +1633,8 @@ th.formfieldnamecontainer {
   padding-right: 1em;
 }
 
-.pgGenericFormTable input, .pgGenericFormTable textarea {
+.pgGenericFormTable input,
+.pgGenericFormTable textarea {
   margin: 0.5em 0;
 }
 
@@ -1578,8 +1643,8 @@ th.formfieldnamecontainer {
   font-style: italic;
 }
 
-.form-check-input[type=radio] {
-  margin-top: .4rem;
+.form-check-input[type="radio"] {
+  margin-top: 0.4rem;
 }
 
 .text-center.fixed-height h3 {
@@ -1587,12 +1652,12 @@ th.formfieldnamecontainer {
 }
 
 fieldset.form-group {
-    border: 1px groove var(--fieldset-form-group-bdr-color);
+  border: 1px groove var(--fieldset-form-group-bdr-color);
 }
 fieldset.form-group legend {
-    width:inherit;
-    padding-left: 1rem;
-    padding-right: 1rem;
+  width: inherit;
+  padding-left: 1rem;
+  padding-right: 1rem;
 }
 
 /** This code is for pgarchives */
@@ -1601,16 +1666,17 @@ fieldset.form-group legend {
  * general navigation padding just for the archives; removable after the
  * universal notifier is available
  */
- .archive {
-   margin-top: 4rem;
- }
+.archive {
+  margin-top: 4rem;
+}
 
 /** Thread Lists */
 .thread-list {
   font-size: 0.8em;
 }
 
-.thread-list th, .thread-list td {
+.thread-list th,
+.thread-list td {
   padding: 0;
 }
 
@@ -1627,9 +1693,10 @@ h3.messages {
   padding-bottom: 0.3em;
 }
 
-.message-header th, .message-header td {
+.message-header th,
+.message-header td {
   padding: 0;
- }
+}
 
 .message-header select {
   height: auto;
@@ -1654,7 +1721,8 @@ h3.messages {
   line-height: 1.5em;
 }
 
-.message-attachments, .message-nav {
+.message-attachments,
+.message-nav {
   font-size: 0.7em;
   line-height: 1.2em;
 }
@@ -1697,7 +1765,7 @@ td.fm_unk {
 }
 
 div#feature-matrix-filter {
-    border-color: var(--hr-bdr-color) !important;
+  border-color: var(--hr-bdr-color) !important;
 }
 
 /* Code of Conduct Committee */
@@ -1716,16 +1784,16 @@ table.contributor-table thead tr th {
 
 /* News archive */
 #pgContentWrap span.newstag {
-    white-space: nowrap;
+  white-space: nowrap;
 }
 #pgContentWrap span.newstag a i.fa {
-    color: var(--pgcontent-span-newstag-fg-color);
+  color: var(--pgcontent-span-newstag-fg-color);
 }
 #pgContentWrap div.newsdate span.badge i.fa {
-    color: var(--pgcontent-span-newsdatefg-color);
+  color: var(--pgcontent-span-newsdatefg-color);
 }
 #pgContentWrap div.newstags {
-    padding-bottom: 3rem;
+  padding-bottom: 3rem;
 }
 
 /* Downloads/products */
@@ -1831,10 +1899,9 @@ th.organisation-logo {
 
 /* Moderation preview */
 .moderation-mdpreview-wrap {
-    max-width: 650px;
+  max-width: 650px;
 }
 
-
 /** ALL RESPONSIVE QUERIES HERE */
 /* Small devices (landscape phones, 576px and up)*/
 
@@ -1842,7 +1909,7 @@ th.organisation-logo {
   input#q {
     display: none;
   }
-   #docSearchForm input#q {
+  #docSearchForm input#q {
     display: block;
   }
 }
@@ -1864,12 +1931,12 @@ th.organisation-logo {
 }
 
 @media (max-width: 768px) {
-
   .jumbotron.jumbotron-fluid.pg-jumbotron {
     padding: 4em;
   }
 
-  .pg-jumbotron .btn, button.btn.btn-primary {
+  .pg-jumbotron .btn,
+  button.btn.btn-primary {
     margin: 5px auto;
   }
 
@@ -1885,7 +1952,9 @@ th.organisation-logo {
     padding: 6em;
   }
 
-  ul.divided, ul.menu, #footer ul {
+  ul.divided,
+  ul.menu,
+  #footer ul {
     padding: 0;
     text-align: center;
   }
@@ -1922,7 +1991,6 @@ th.organisation-logo {
   #docContent table.table {
     font-size: 50%;
   }
-
 }
 
 @media (min-width: 576px) {
diff --git a/media/js/main.js b/media/js/main.js
index 9ee883bd..e4f2132a 100644
--- a/media/js/main.js
+++ b/media/js/main.js
@@ -1,23 +1,33 @@
 /*
  * Initialize google tag manager for analytics integration
  */
-var DNT = navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack || window.msDoNotTrack;
-if ((DNT != "1") && (DNT != "yes")) {
-    (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
-    new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
-    j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
-    'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
-    })(window,document,'script','dataLayer','GTM-WC97NKC');
+var DNT =
+  navigator.doNotTrack ||
+  window.doNotTrack ||
+  navigator.msDoNotTrack ||
+  window.msDoNotTrack;
+if (DNT != "1" && DNT != "yes") {
+  (function (w, d, s, l, i) {
+    w[l] = w[l] || [];
+    w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js" });
+    var f = d.getElementsByTagName(s)[0],
+      j = d.createElement(s),
+      dl = l != "dataLayer" ? "&l=" + l : "";
+    j.async = true;
+    j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
+    f.parentNode.insertBefore(j, f);
+  })(window, document, "script", "dataLayer", "GTM-WC97NKC");
 }
 
 /*
  * Fix scrolling of anchor links
  */
-var shiftWindow = function() { scrollBy(0, -80) };
+var shiftWindow = function () {
+  scrollBy(0, -80);
+};
 if (location.hash) shiftWindow();
 window.addEventListener("hashchange", shiftWindow);
 
-
 /* Copy a script from an HTML element to the clipboard,
  * removing comments and blank lines.
  * Arguments:
@@ -26,52 +36,51 @@ window.addEventListener("hashchange", shiftWindow);
  */
 
 function copyScript(trigger, elem) {
-    var raw = document.getElementById(elem).innerHTML;
-
-    // Create a scratch div to copy from
-    var scratch = document.createElement("div");
-    document.body.appendChild(scratch);
-
-    // Copy the contents of the script box into the scratch div, removing
-    // comments and blank lines
-    var lines = raw.split("\n");
-    var output = '';
-    for (var l = 0; l < lines.length; l++) {
-        if (lines[l][0] != '#' && lines[l].trim() != '')
-            output += lines[l] + '<br />';
-    }
-    scratch.innerHTML = output.trim();
-
-    // Perform the copy
-    if(document.body.createTextRange) {
-        // IE 11
-        var range = document.body.createTextRange();
-        range.moveToElementText(scratch);
-        range.select();
-        document.execCommand("Copy");
-        document.getSelection().removeAllRanges()
-    }
-    else if(window.getSelection) {
-        // Sane browsers
-        var selection = window.getSelection();
-        var range = document.createRange();
-        range.selectNodeContents(scratch);
-        selection.removeAllRanges();
-        selection.addRange(range);
-        document.execCommand("Copy");
-        selection.removeAllRanges();
-    }
+  var raw = document.getElementById(elem).innerHTML;
+
+  // Create a scratch div to copy from
+  var scratch = document.createElement("div");
+  document.body.appendChild(scratch);
+
+  // Copy the contents of the script box into the scratch div, removing
+  // comments and blank lines
+  var lines = raw.split("\n");
+  var output = "";
+  for (var l = 0; l < lines.length; l++) {
+    if (lines[l][0] != "#" && lines[l].trim() != "")
+      output += lines[l] + "<br />";
+  }
+  scratch.innerHTML = output.trim();
+
+  // Perform the copy
+  if (document.body.createTextRange) {
+    // IE 11
+    var range = document.body.createTextRange();
+    range.moveToElementText(scratch);
+    range.select();
+    document.execCommand("Copy");
+    document.getSelection().removeAllRanges();
+  } else if (window.getSelection) {
+    // Sane browsers
+    var selection = window.getSelection();
+    var range = document.createRange();
+    range.selectNodeContents(scratch);
+    selection.removeAllRanges();
+    selection.addRange(range);
+    document.execCommand("Copy");
+    selection.removeAllRanges();
+  }
 
-    // Remove the scratch div
-    scratch.parentNode.removeChild(scratch);
+  // Remove the scratch div
+  scratch.parentNode.removeChild(scratch);
 
-    // Indicate to the user that the script was copied
-    var label = trigger.innerHTML;
-    trigger.innerHTML = 'Copied!';
+  // Indicate to the user that the script was copied
+  var label = trigger.innerHTML;
+  trigger.innerHTML = "Copied!";
 
-    setTimeout(function() {
-        trigger.innerHTML = label;
-    }, 3000);
+  setTimeout(function () {
+    trigger.innerHTML = label;
+  }, 3000);
 }
 
 /*
@@ -79,73 +88,141 @@ function copyScript(trigger, elem) {
  * families on the Download page
  */
 function showDistros(btn, osDiv) {
-    // Disable everything
-    document.getElementById('btn-download-bsd').classList.remove("btn-download-active");;
-    document.getElementById('download-subnav-bsd').style.display = 'none';
-    document.getElementById('btn-download-linux').classList.remove("btn-download-active");
-    document.getElementById('download-subnav-linux').style.display = 'none';
-
-    // Enable the one we want
-    btn.classList.add("btn-download-active");
-    document.getElementById(osDiv).style.display = 'block';
+  // Disable everything
+  document
+    .getElementById("btn-download-bsd")
+    .classList.remove("btn-download-active");
+  document.getElementById("download-subnav-bsd").style.display = "none";
+  document
+    .getElementById("btn-download-linux")
+    .classList.remove("btn-download-active");
+  document.getElementById("download-subnav-linux").style.display = "none";
+
+  // Enable the one we want
+  btn.classList.add("btn-download-active");
+  document.getElementById(osDiv).style.display = "block";
 }
 
-
 /*
  * Register a confirm handler for forms that, well, requires confirmation
  * for someting.
  */
-document.querySelectorAll('button[data-confirm]').forEach((button) => {
-    button.addEventListener('click', (event) => {
-        if (confirm(event.target.dataset.confirm)) {
-            return true;
-        }
-        event.preventDefault();
-        return false;
-    });
+document.querySelectorAll("button[data-confirm]").forEach((button) => {
+  button.addEventListener("click", (event) => {
+    if (confirm(event.target.dataset.confirm)) {
+      return true;
+    }
+    event.preventDefault();
+    return false;
+  });
 });
 
-
 /*
  * Theme switching
  */
 function theme_apply() {
-  'use strict';
-  if (theme === 'light') {
-    document.getElementById('btn-theme').innerHTML = '<i class="fas fa-moon"></i>';
-    document.documentElement.setAttribute('data-theme', 'light');
-    localStorage.setItem('theme', 'light');
+  "use strict";
+  if (theme === "light") {
+    document.getElementById("btn-theme").innerHTML =
+      '<i class="fas fa-moon"></i>';
+    document.documentElement.setAttribute("data-theme", "light");
+    localStorage.setItem("theme", "light");
   } else {
-    document.getElementById('btn-theme').innerHTML = '<i class="fas fa-lightbulb"></i>';
-    document.documentElement.setAttribute('data-theme', 'dark');
-    localStorage.setItem('theme', 'dark');
+    document.getElementById("btn-theme").innerHTML =
+      '<i class="fas fa-lightbulb"></i>';
+    document.documentElement.setAttribute("data-theme", "dark");
+    localStorage.setItem("theme", "dark");
   }
 }
 
 theme_apply();
-document.getElementById("form-theme").classList.remove("d-none")
+document.getElementById("form-theme").classList.remove("d-none");
 
 function theme_switch() {
-  'use strict';
-  if (theme === 'light') {
-    theme = 'dark';
+  "use strict";
+  if (theme === "light") {
+    theme = "dark";
   } else {
-    theme = 'light';
+    theme = "light";
   }
   theme_apply();
 }
 
-let theme_OS = window.matchMedia('(prefers-color-scheme: light)');
-theme_OS.addEventListener('change', function (e) {
-  'use strict';
+let theme_OS = window.matchMedia("(prefers-color-scheme: light)");
+theme_OS.addEventListener("change", function (e) {
+  "use strict";
   if (e.matches) {
-    theme = 'light';
+    theme = "light";
   } else {
-    theme = 'dark';
+    theme = "dark";
   }
   theme_apply();
 });
 
-document.querySelector('#btn-theme').addEventListener('click', function () {
-    theme_switch();
+document.querySelector("#btn-theme").addEventListener("click", function () {
+  theme_switch();
 });
+
+/*
+ * Reading width switching
+ */
+const readingWidths = {
+  narrow: "narrow",
+  wide: wide,
+};
+
+var reading_width = localStorage.getItem("readingWidth") || readingWidths.wide;
+
+const getPgWrap = () => document.getElementById("pgContentWrap");
+const setReadingWidth = (newWidth) => {
+  const el = getPgWrap();
+  if (!el) {
+    return;
+  }
+
+  switch (newWidth) {
+    case readingWidths.narrow: {
+      el.classList.remove("col-11");
+      el.classList.add("col-6", true);
+      break;
+    }
+    case readingWidths.narrow: {
+      el.classList.remove("col-6");
+      el.classList.toggle("col-11", true);
+      break;
+    }
+  }
+
+  localStorage.setItem("reading_width", newWidth);
+};
+
+function reading_width_apply() {
+  "use strict";
+  if (reading_width === readingWidths.narrow) {
+    document.getElementById("btn-reading_width").innerHTML =
+      '<i class="fas fa-up-right-and-down-left-from-center"></i>';
+  } else {
+    document.getElementById("btn-reading_width").innerHTML =
+      '<i class="fas fa-text-width"></i>';
+  }
+  setReadingWidth(readingWidths);
+}
+
+reading_width_apply();
+document.getElementById("form-reading_width").classList.remove("d-none");
+
+function reading_width_switch() {
+  "use strict";
+  if (reading_width === readingWidths.narrow) {
+    reading_width = readingWidths.wide;
+  } else {
+    reading_width = readingWidths.narrow;
+  }
+  reading_width_apply();
+}
+
+document
+  .querySelector("#btn-reading_width")
+  .addEventListener("click", function () {
+    reading_width_switch();
+  });
diff --git a/templates/docs/docspage.html b/templates/docs/docspage.html
index 2a5fef78..98292343 100644
--- a/templates/docs/docspage.html
+++ b/templates/docs/docspage.html
@@ -70,6 +70,9 @@
               <form id="form-theme" class="form-inline d-none">
                 <button id="btn-theme" class="btn btn-default ml-1" type="button"></button>
               </form>
+              <form id="form-reading_width" class="form-inline d-none">
+                <button id="btn-reading_width" class="btn btn-default ml-1" type="button"></button>
+              </form>
             </div>
           </nav>
         </div>
