◊(Local Yarn Code "martin.css.pp at [2821ed4e]")

File web-extra/martin.css.pp artifact da2f0e11 part of check-in 2821ed4e


#lang pollen/pre

/* Welcome to my CSS File!    
     I have named it `martin.css`, after Martin Pale.

   So here, broadly, is the approach we are taking here:

   1. The site shall look decent and readable even when CSS is unavailable.
   2. There's a vertical rhythm of ◊x-lineheight[1] that everything follows.

   3. Define the mobile (smallest screen) layout first...            [Lines 026-???]
      ...then do some dynamic type sizing on screens 768px+ wide     [Lines ???-???]
   
   4. If CSS Grid support is detected, we'll do some nice-looking    [Lines ???-???]
      layout on screens 768px+ wide.
*/
@import url('font.css');
@import url('normalize.css');

/* Let us first address the matter of font size in different screen sizes. */

/* Mobile portrait screens will see a minimum 18px font. */
html { font-size: 18px; } 

/* Start increasing type size dynamically at screen widths of 768px */
@media only screen and (min-width: 768px) { 
    html { font-size: 2.3vw; } 
}

/* Top out at 23px for screens up to 800px TALL */
@media only screen and (min-width: 1000px) and (max-height: 800px) {
    html { font-size: 23px; } /* =  2.3% of 1000px (min-width) */
}

/* Top out at 26px for screens 801px-1000px TALL */
@media only screen and (min-width: 1130px) and (min-height: 801px) and (max-height: 1000px) {
    html { font-size: 26px; }     /* =  2.3% of 1130px (min-width) */
}
/* For screens taller than 1000 px, top out at 32px */
@media only screen and (min-width: 1400px) and (min-height: 1001px) {
    html { font-size: 32px; }    /* =  2.3% of 1400px (min-width) */
}

◊; Since line height is used in so many places...
◊(define LINEHEIGHT 1.3)
◊(define lineheight (string-append (number->string LINEHEIGHT) "rem"))
◊(define (x-lineheight multiple) 
    (string-append (real->decimal-string (* LINEHEIGHT multiple) 2) "rem"))
◊(define (derive-lineheight lines #:per-lines per)
    (string-append (real->decimal-string (/ (* LINEHEIGHT per) lines) 3) "rem"))

◊(define color-bodytext   "#2a3d45") ◊; Japanese indigo, baby
◊(define color-pagehead   "#a29555") ◊; Faded gold 
◊(define color-link       "#ab2a23")
◊(define color-linkhover  "#c14337")
◊(define color-xrefmark   "#c14337")
◊(define color-background "#f7f7f7")
◊(define color-linkbackground "#f7f7f7")

◊(define body-font "Fabiol, serif")
◊(define mono-font "'Triplicate T4c', monospace")

/*
 **** 1. Mobile-first layout ***
      1.1 All Pages
      1.2 Front page
      1.3 Individual post body markup
      1.4 Journal views (article listings)  
 */

@media screen {
    body {
        margin: 0;
        background: ◊color-background;

        /* Typography: `line-height` is important!
           All verticle rhythm based on this value. */
        line-height: ◊lineheight;
        font-family: ◊body-font;

        font-feature-settings: "calt" on, "liga" on, "clig" on, "dlig" on, "kern" on, "onum" on, "pnum" on;
        color: ◊color-bodytext; /* Japanese Indigo, baby */
    }

    /* This is used to hide certain punctuation and things as long as CSS is available. 
       Turn off CSS and voila: stuff appears. */
    .x {
        display: none;
    }

    .hist p {
        font-variant-alternates: historical-forms;
    }
    .nonhist {
        font-variant-alternates: normal;
    }

    /* <main> is the white box of content with the flat-looking drop shadow. */
    main {
        background: white;
        margin: 0;
        padding: ◊x-lineheight[0.5] ◊x-lineheight[1];
    }

    main>header {
        text-align: center;
    }

    main>header h1 {
        font-size: ◊x-lineheight[1.5];
        line-height: ◊x-lineheight[2];
        margin: 0 0 ◊x-lineheight[0.5] 0;
        font-weight: normal;
        font-feature-settings: "smcp" on, "liga" on, "clig" on, "dlig" on, "kern" on, "onum" on, "pnum" on;
        text-transform: lowercase;
        color: ◊color-pagehead;
    }

    /* Links. Generally, we want them colored that weird springy green, underlines
       only when hovered, thanks.

       I read somewhere years ago that you should specify styling for links in the
       following order: Link, Visited, Hover, Active. 
           → Remember the mnemonic: Lord Vader Has Arrived.
       
       Not sure if that's relevant advice any more but I still follow it. It can't hurt. */
       
    a:link, a:visited {         /* [L]ord [V]ader… */
        color: ◊color-link;
        text-decoration: none;
    }

    a:hover, a:active {         /* …[H]as [A]rrived */
        color: ◊color-linkhover;
        background: ◊color-linkbackground;
    }
    

    /* On mobile, an <ARTICLE> is just a box. Later we'll do fancy stuff if grid support is detected. */
    article {
        margin: 0 0 ◊x-lineheight[1] 0;
    }

    /* Here's my thing these days about article titles: they shouldn't be required. When you write in a
       paper journal, do you think of a title for every entry? No! You just write the date. The date is
       the heading. Makes sense. But, this means I've had to think long and hard about how to present two
       different types of articles (those with titles AND dates, and those with just a date for the title). 

       For now: By default, the title-less article is assumed to be the norm. On these, we use <H1> to 
       show the date in italics. */
    article>h1 {
        font-size: ◊x-lineheight[1];
        line-height: ◊x-lineheight[1];
        margin: 0 0 ◊x-lineheight[1] 0;
        font-style: italic;
        font-weight: normal;
    }

    /* If you DO add an actual, formal title to an article, we’ll put it in small caps (Fabiol comes with
       some really nice small caps).
    */ 
    article>h1.entry-title {
        margin: 0 0 0 0;
        font-feature-settings: "smcp" on;
        text-transform: none;
        font-style: normal;
        line-height: 1.7rem;
    }

    /* This <SPAN> class is used in titles for Notes appended to earlier articles */
    h1.entry-title .cross-reference {
        font-feature-settings: "scmp" off, "liga" on, "clig" on, "dlig" on, "kern" on, "onum" on, "pnum" on;
        font-style: italic;
        text-transform: none;
    }

    /* I want my *title* permlinks not to be green or underlined. Just your basic raven black, dark green on hover.

       Normally with links, you _don’t_ want to rely on hovers to differentiate them, because there’s no way
       to “hover” a link with your finger when using a smartphone. But these are titles. Everyone knows titles
       are clickable. But we’ll also put a little green leaf glyph in the margin to help people figure it out.
    */

    /* `a.rel-bookmark` is only used in individual article or ‘journal’ views, 
        not in listings; see the design docs.
    */
    a.rel-bookmark:link,        /* Lord  */
    a.rel-bookmark:visited {    /* Vader */
        text-decoration: none;
        background: none;
        color: ◊color-bodytext;
    }

    a.rel-bookmark:hover,       /* Has     */
    a.rel-bookmark:active {     /* Arrived */
        text-decoration: none;
        background: #f1f1f1;
        color: #006400;
    }

    /* Here's where we add the minty fresh maple leaf glyph. */
    a.rel-bookmark::after {
        content: '\f894'; 
        margin-left: 4px;
        font-style: normal;
        color: #809102;
    }
    a.rel-bookmark.note-permlink::after {
        content: '-';       /* NB: this is not a hyphen! It is a U+002D glyph, the Unicode “minus sign” */
        margin-left: 4px;
    }

    a.rel-bookmark:hover::after {
        color: #aaba16;
    }

    a.cross-reference:link,
    a.cross-reference:visited {
        color: ◊color-bodytext;
    }

    a.cross-reference::before {
        content: '☞\00a0';      /* Non-breaking space */
        font-style: normal;
        color: ◊color-xrefmark;
    }

    p.time {
        margin: 0 0 ◊x-lineheight[1] 0;
    }
    footer.article-info {
        margin: ◊x-lineheight[1] 0;
        text-align: center;
        font-feature-settings: "smcp" on, "liga" on, "clig" on, "dlig" on, "kern" on, "onum" on, "pnum" on;
        text-transform: lowercase;
        letter-spacing: 0;
        color: #888;
    }

    footer.article-info::before {
        content: "☞\00a0";
    }

    p.time::before {
        content: none;
    }

    p.time {
        font-size: ◊x-lineheight[0.75];
        line-height: ◊x-lineheight[1];
        font-feature-settings: "scmp" off, "liga" on, "clig" on, "dlig" on, "kern" on, "onum" on, "pnum" on;
        text-transform: none;
        font-style: italic;
    }
    
    article>:last-child::after {
        content: '\f88d';  /* Round glyph */
        color: ◊color-bodytext;
        font-size: ◊x-lineheight[1];
        line-height: ◊x-lineheight[1];
        text-align: center;
        display: block;
        margin: ◊x-lineheight[1] 0;
    }

    p {
        margin: 0;
        text-indent: 0;
    }

    p + p {
        text-indent: 1em;
    }

    section.entry-content blockquote {
        font-size: ◊x-lineheight[0.7];
        line-height: ◊derive-lineheight[7 #:per-lines 6];
    }

    section.entry-content h2 {
        font-size: 1.2rem;
        font-style: italic;
        margin: ◊x-lineheight[1] 0;
        font-weight: normal;
    }

    .caps, .small-caps {
        font-feature-settings: "smcp" on, "liga" on, "clig" on, "dlig" on, "kern" on, "onum" on, "pnum" on;
        font-style: normal;
    }

    .caps {
        text-transform: lowercase;
        font-size: 1.1em;
    }

    p.newthought {
        margin-top: ◊x-lineheight[2];
        text-indent: 0;
    }

    section.entry-content ul,
    section.entry-content ol {
        margin: ◊x-lineheight[0.5] 0 ◊x-lineheight[0.5] 0;
        padding: 0;
    }

    section.entry-content li {
        margin: 0;
        padding: 0;
        text-indent: 0; 
    }

    code {
        font-size: 0.75rem;
        font-family: ◊mono-font;
    }

    pre {
        line-height: ◊derive-lineheight[7 #:per-lines 6];
        max-width: 100%;
        overflow-x: auto;
        tab-size: 4;
    }

    pre code {
        border: 0;
        background: none;
        font-style: italic;
        font-size: 0.75rem;
    }

    pre.verse {
        font-family: ◊body-font;
        font-size: 1rem;
        line-height: ◊x-lineheight[1];
        width: auto;
        margin: ◊x-lineheight[1] auto;
        display: table;
        white-space: pre-wrap;
        /* Whitespace is preserved by the browser.
           Text will wrap when necessary, and on line breaks */
    }

    section.entry-content figure {
        margin: ◊x-lineheight[1] 0;
        padding: 0;
    }

    figure>a {
        margin: 0;
        padding: 0;
        font-family: arial, sans-serif;
    }
    figure img {
        max-width: 100%;
    }

    figcaption {
        font-size: 0.8rem;
        line-height: 0.8rem;
        margin-bottom: 0.3rem;
        text-align: left;
    }

    dl {
        margin: ◊x-lineheight[1] 0;
    }

    dl.dialogue dt {
        font-feature-settings: "smcp" on, "liga" on, "clig" on, "dlig" on, "kern" on, "onum" on, "pnum" on;
        font-style: normal;
        text-transform: lowercase;
    }

    section.entry-content p.signoff {
        margin-top: ◊x-lineheight[1];
        font-size: 1.2rem;
    }

    section.footnotes {
        margin-top: ◊x-lineheight[1];
        font-size: 0.9rem;
        line-height: ◊derive-lineheight[7 #:per-lines 6];
    }

    section.footnotes hr {
        border: 0;
        background: ◊color-bodytext;
        height: 1px;
        margin: 0;
        width: 75%;
        text-align: left;
    }

    section.footnotes ol {
        margin: ◊x-lineheight[0.5] 0 0 0;
    }

    /* ******* (Mobile first) Journal View styling *******
     */
    section.article-listing h2 {
        font-weight: normal; 
        font-style: italic; 
        font-size: ◊x-lineheight[1]; 
        margin: 0 0 ◊x-lineheight[0.5] 0;
    }

    section.article-listing h2::before {
        content: '§\00a0';
        font-family: ◊body-font;
        font-style: normal;
        color: #d0d0d0;
    }

    section.article-listing aside {
        margin-bottom: ◊x-lineheight[1];
        font-style: italic;
    }

    ul.article-list {
        margin: 0; 
        padding: 0;
    }

    ul.article-list li {
        list-style-type: none;
        display: block;
        margin: 0;
        padding: 0; 
        margin-bottom: ◊x-lineheight[1];
    }

    ul.article-list li>a {
        display: block;
    }

    div.article-list-date {
        color: #999;
    }

    div.article-list-title {
        font-size: 1.2rem;
    }

    /* End of mobile-first typography and layout */
}


/* Here’s where we start getting funky for any viewport wider than mobile portrait.
   An iPhone 6 is 667px wide in landscape mode, so that’s our breakpoint. */

@media only screen and (min-width: 667px) {
    main {
        box-shadow: 0.4em 0.4em 10px #e3e3e3; 
        margin: 2em auto;
        /*border: solid 1px #ccc; */
        padding-left: 1rem;
        padding-right: 1rem;
        width: 30rem;
        max-width: 90%;
    }

    @supports (grid-area: auto) {
        main { 
            width: 42rem;
        }

        main>header {
            display: grid;
            grid-template-columns: 9rem 12fr 1fr;
            grid-column-gap: 0;
            grid-template-areas: "logo masthead .";
            align-items: center;
            text-align: left;
            margin-bottom: ◊x-lineheight[2];
        }

        header img.logo {
            grid-area: logo;
            height: ◊x-lineheight[3];
            max-height: 103px;
            width: auto;
            justify-self: end;
            margin-right: 1rem;
        }

        main>header h1 {
            grid-area: masthead;
            margin: 0;
            line-height: 1em;
        }

        article {
            display: grid;
            grid-template-columns: 8rem 7fr 1fr;
            grid-template-rows: auto auto auto;
            grid-template-areas: 
               "corner title title"
               "margin main  .";
            align-items: start;     /* Puts everything at the top */
            margin-bottom: 0;
            grid-column-gap: 1rem;
        }
        
        article>h1 {
            grid-area: margin;
            font-size: 1.1rem;
            text-align: right;
            /* padding-right: 1rem; */
            color: ◊color-bodytext;
        }

        article>h1.entry-title {
            grid-area: title;
            font-size: ◊x-lineheight[1];
            text-align: left;
            padding-right: 0;
            margin-bottom: 0.9rem;

        }

        p.time {
            grid-area: corner;
            text-align: right;
            font-size: 1.1rem;
            line-height: 1.7rem;
        }

        footer.article-info {
            padding-top: 0.09rem;
            grid-area: margin;
            text-align: right;
            font-size: 0.8rem;
            line-height: ◊derive-lineheight[4 #:per-lines 3];
            margin: 0;
        }
        
        section.entry-content {
            grid-area: main;
        }

        section.entry-content:first-child {
            margin-top: 0 !important;
        }

        article>:last-child::after {
            content: none;
            margin 0;
            display: none;
        }

        section.entry-content::after {
            content: '\f88d';
            color: ◊color-bodytext;
            font-size: ◊x-lineheight[1];
            line-height: ◊x-lineheight[1];
            text-align: center;
            display: block;
            margin: ◊x-lineheight[1] 0;
        }

        section.entry-content figure {
            display: grid;
            width: calc(112.5% + 8rem);
            margin-left: -8rem;
            grid-template-columns: 7rem 1fr;
            grid-column-gap: 1rem;
            grid-template-areas: "margin main";
        }

        section.entry-content figure img {
            grid-area: main;
        }
        section.entry-content figure figcaption {
            grid-area: margin;
            text-align: right;
            align-self: end;
        }

        /* ******* (Grid support) Journal View styling *******
         */

        section.article-listing {
            display: grid;
            grid-template-columns: 8rem 7fr 1fr;
            grid-template-rows: auto auto auto;
            grid-template-areas: 
               ". title title"
               "margin main  .";
            align-items: start;     /* Puts everything at the top */
            margin-bottom: 0;
            grid-column-gap: 1rem;
        }

        section.article-listing>h2 {
            grid-area: title;
        }
        section.article-listing>aside {
            grid-area: margin;
            font-size: 0.8rem;
            line-height: ◊derive-lineheight[4 #:per-lines 3];
            text-align: right;
            color: #6b6b6b;
        }
        ul.article-list {
            grid-area: main;
        }
    }
}