]> git.draconx.ca Git - homepage.git/blobdiff - content/style.scss
cdecl99-1.3 bash-5 hotfix
[homepage.git] / content / style.scss
index e517d90c08b7270b49c70d24ae9fbfdb5e3e59cd..17aff0ba0352f3a0ccf5ab9117e82c2c6e27e11e 100644 (file)
@@ -1,7 +1,7 @@
-/*
+/*!
  * Nick's web site: default stylesheet
  *
- * Copyright © 2018-2021 Nick Bowler
+ * Copyright © 2018-2022 Nick Bowler
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
 
-// colour definitions
-$backgroundcolour:  #ffffff;
-$foregroundcolour:  #000000;
+@import "lib/colourmap.scss";
 
-$linkdefaultcolour: #0000cd;
-$linkactivecolour:  #ff0000;
-$linkvisitedcolour: #800080;
+@include defcolours
+    ( $background:  #ffffff #000000
+    , $foreground:  #000000 #ffffff
 
-$ruledefaultcolour: #d3d3d3;
-$rulestrongcolour:  #696969;
+    , $linkdefault: #0000cd #a3aaff
+    , $linkactive:  #ff0000
+    , $linkvisited: #800080 #e493f7
+    , $focusring:   #628cb2
 
-$annotationcolour:  #708090;
+    , $annotation:  #708090
+    , $tableshade:  #f5f5f5 #101010
 
-$tableshadecolour:  #f5f5f5;
+    , $ruledefault: #d3d3d3 #494949
+    , $rulestrong:  #696969 #939393
+    );
 
 @mixin header_size($maxwidth, $fontsize) {
     font-size: $fontsize;
     max-width: 1em * ($maxwidth / $fontsize);
 }
 
+html { @include usecolours($background-color: background); }
 body {
-    background-color: $backgroundcolour;
-    color: $foregroundcolour;
+    @include usecolours($color: foreground);
     font-family: sans-serif;
     margin: 1em;
 }
 
-a:link { color: $linkdefaultcolour; }
-a:visited { color: $linkvisitedcolour; }
-a:active { color: $linkactivecolour; }
+a:link {
+    @include usecolours($color: linkdefault, $border-color: linkdefault);
+}
+a:visited {
+    @include usecolours($color: linkvisited, $border-color: linkvisited);
+}
+a:active {
+    @include usecolours($color: linkactive, $border-color: linkactive);
+}
+
+@supports (outline-style: auto) {
+    a:link { border-width: 0; }
+    a:focus { @include usecolour(outline, focusring, auto); }
+    li, td, dt { &>a:link { border: solid 1px transparent; } }
+}
 
 h1 { @include header_size(60em, 2em); }
 h2 { @include header_size(60em, 1.5em); }
 h5 { @include header_size(60em, 1em); }
 
-p>img { max-width: 40em; width: 100%; height: auto; }
+h1, h2 { abbr { text-decoration: none; } }
+
+@supports (display: grid) {
+    .gallery {
+        display: grid;
+        grid-column-gap: 1em;
+        grid-template-columns: repeat( auto-fill, minmax(18em, 1fr) );
+        align-items: center;
+
+        p.img { margin: 0.5em 0; }
+    }
+
+    @media (max-width: 45em) {
+        .inline.gallery {
+            display: block;
+            p.img {
+                a { max-width: 24em; }
+                margin: 1em 0;
+            }
+        }
+    }
+}
+
+p.img {
+    text-align: center;
+
+    img {
+        vertical-align: bottom;
+        max-width: 40em;
+        width: 100%;
+        height: auto;
+    }
+
+    a {
+        text-decoration: none;
+        display: inline-block;
+        border: solid 2px;
+    }
+
+    a.left { margin: 0 1em 0.5em 0; float: left; clear: left; }
+    a.right { margin: 0 0 0.5em 1em; float: right; clear: right; }
+    a.left, a.right {
+        @media (max-width: 45em) { float: none; margin: 0; }
+
+        max-width: 24em;
+    }
+
+    small {
+        @include usecolours($color: foreground);
+        @media (max-width: 24em) { text-align: left; }
+        padding: 0.5ex;
+        display: block;
+        display: -moz-inline-box;
+        display: inline-block;
+        text-align: justify;
+        font-size: 0.9em;
+    }
+}
 
 p, dt, dd, li {
     text-align: justify;
@@ -80,17 +152,19 @@ hr {
     clear: both;
     margin: 0.5em 0;
     border: 0;
-    border-top: 1px solid $ruledefaultcolour;
+    @include usecolour(border-top, ruledefault, 1px solid);
 }
 
 kbd {
     font-family: monospace;
     font-size: 0.95em;
     &:before { content: "% "; }
+    &.ok:before { content: "ok "; }
     &>span { white-space: nowrap; }
 
     blockquote & {
         display: block;
+        & + br { display: none; }
         text-align: left;
         padding-left: 3em;
         text-indent: -3em;
@@ -98,17 +172,19 @@ kbd {
 }
 
 .permalink {
+    @include usecolours($color: annotation);
     font-size: small;
-    color: $annotationcolour;
 
     a:link, a:visited { color: inherit; }
+    a:active { @include usecolours($color: linkactive); }
     @media not screen { visibility: hidden; }
 }
 
 // General table styles.
 table {
-    border: 1px solid $ruledefaultcolour;
+    @include usecolour(border-top, ruledefault, 1px solid);
     border-collapse: collapse;
+    clear: both;
     width: 100%;
 }
 
@@ -128,18 +204,20 @@ td, th {
     margin: 0;
 }
 
-thead>tr, tbody>tr { border: solid $ruledefaultcolour; }
-th, thead>tr { border-bottom: 1px solid $rulestrongcolour; }
-tbody+tbody { border-bottom: 1px solid $ruledefaultcolour; }
+thead>tr, tbody>tr { @include usecolour(border, ruledefault, solid); }
+th, thead>tr { @include usecolour(border-bottom, rulestrong, 1px solid); }
+tbody+tbody { @include usecolour(border-bottom, ruledefault, 1px solid); }
 *>table, *>th { border: none; }
 thead>tr { border-width: 1px; }
 tbody>tr { border-width: 0 1px; }
 
-td + td { box-shadow: -1px 0 $backgroundcolour; }
+td + td {
+    @include usecolour(box-shadow, background, -1px 0);
+}
 
 tbody>tr {
-    &:nth-of-type(even) { background-color: $tableshadecolour; }
-    &:last-child { border-bottom: solid 1px $ruledefaultcolour; }
+    &:nth-of-type(even) { @include usecolours($background-color: tableshade); }
+    &:last-child { @include usecolour(border-bottom, ruledefault, solid 1px); }
 }
 
 // Specific table styles
@@ -150,8 +228,8 @@ table.cc {
     }
 }
 
-// CSS rules for stortable clicky table headers: Update the display of
-// the /table based on the current state.  Each column has its own set
+// CSS rules for sortable clicky table headers: Update the display of
+// the table based on the current state.  Each column has its own set
 // nearly-identical rules, only the class names differ.
 //
 // The clickytables.xsl stylesheet generates two inputs for each column.
@@ -240,10 +318,6 @@ $clickynames: name, date, size;
             }
         }
 
-        &:focus ~ table th.clicky-#{$col}>label~label>span:first-child {
-            border-color: $foregroundcolour;
-        }
-
         // Unhide to allow keyboard navigation
         display: block !important;
         pointer-events: none;
@@ -264,15 +338,22 @@ $clickynames: name, date, size;
             }
         }
 
-        &:focus ~ table th.clicky-#{$col}>label~label .svg {
-            border-color: $foregroundcolour;
-        }
-
         pointer-events: none;
         position: absolute;
         opacity: 0;
         z-index: -2;
     }
+
+    $focuslabel: ":focus ~ table th.clicky-#{$col}>label~label";
+    #{"input.clicky-#{$col+$focuslabel}"}>span:first-child
+    , #{"input.clicky-#{$col}-rev#{$focuslabel}"} .svg
+    {
+        @include usecolours($border-color: foreground);
+        @at-root { @supports (outline-style: auto) { & {
+            @include usecolour(outline, focusring, auto);
+            border-color: transparent !important;
+        }}}
+    }
 }
 
 thead.clicky label {
@@ -294,9 +375,13 @@ thead.clicky label {
         padding-right: 2px;
     }
 
-    &:active { color: $linkactivecolour; }
+    &:active { @include usecolours($color: linkactive); }
     &:first-child:active>span, &~label:active>.svg {
-        border-color: $linkactivecolour;
+        @include usecolours($border-color: linkactive);
+        @at-root { @supports (outline-style: auto) { & {
+            @include usecolour(outline, focusring, auto);
+            border-color: transparent;
+        }}}
     }
 
     .svg {
@@ -319,6 +404,7 @@ table.filelist {
 
     tbody {
         .svg, svg, img.svgfallback {
+            vertical-align: middle;
             height: 1.5em;
             width: auto;
         }
@@ -363,9 +449,11 @@ table.filelist {
     }
 }
 
-#footer p { color: $annotationcolour; }
+#footer p { @include usecolours($color: annotation); }
 #article-info p { font-style: italic; }
 
+.wbr:after { content: "\200b"; }
+
 // "unordered" lists with explicit ordering in content
 ul.ordered > {
     li { list-style: none; }
@@ -387,3 +475,25 @@ ul.ordered > {
     #sitetitle * { float: none; }
     #footer { padding: 0 1em; }
 }
+
+// lighten icon shadows in dark mode
+@media (prefers-color-scheme: dark) {
+    svg.icons { path.shadow, g.shadow>* { opacity: 0.7; } }
+    svg.icons .shadow>stop { stop-color: #aaa; }
+    svg.return path.shadow { opacity: 0.45; }
+}
+
+// page-specific dark mode styles
+@media (prefers-color-scheme: dark) and (min-width: 35em) {
+    #page_weblog_responsive_tables {
+        @each $tN in t6 t7 t8 {
+            ##{$tN}>tbody>tr.#{$tN}-split {
+                @include usecolour_dark_(border-bottom, ruledefault);
+
+                &:nth-of-type(odd) ~ tr:nth-of-type(odd) {
+                    @include usecolour_dark_(background-color, tableshade);
+                }
+            }
+        }
+    }
+}