From 2f9a256e6ec42dd10c71db3b865bfe83811ecf3a Mon Sep 17 00:00:00 2001 From: Rasmus Andersson Date: Tue, 26 Sep 2023 17:10:58 -0700 Subject: new v4 website --- docs/res/base.css | 1160 +++++++++++++++++++++++------------------------------ 1 file changed, 492 insertions(+), 668 deletions(-) (limited to 'docs/res/base.css') diff --git a/docs/res/base.css b/docs/res/base.css index c399fc9d3..49823ceaa 100644 --- a/docs/res/base.css +++ b/docs/res/base.css @@ -1,120 +1,273 @@ -:root { - --fontSize: 15px; - /*--emsAcrossViewport: 80; - --fontSize: calc(100vw / var(--emsAcrossViewport));*/ +--- +layout: none +--- +{%- assign font_v = site.data.fontinfo[0].version -%} +@font-face { + font-family: InterVariable; font-style: normal; font-weight: 100 900; + font-display: block; /* <-- block, not swap */ + src: url('../font-files/Inter-Variable.woff2?v={{font_v}}') format('woff2'); +} +@font-face { + font-family: InterVariable; font-style: italic; font-weight: 100 900; + font-display: block; /* <-- block, not swap */ + src: url('../font-files/Inter-Variable-Italic.woff2?v={{font_v}}') format('woff2'); +} +@font-face { + font-family: "jbmono"; + font-style: normal; + font-weight: 100 800; + font-display: swap; + src: url("JetBrainsMono.woff2") format("woff2"); +} +@font-face { + font-family: "jbmono"; + font-style: italic; + font-weight: 100 800; + font-display: swap; + src: url("JetBrainsMono-Italic.woff2") format("woff2"); +} +@font-feature-values InterVariable { + @styleset { + alt-digits: 1; + disambiguation: 2; + round-quotes: 2; + } + @character-variant { + cv01: 1; alt-one: 1; + cv02: 2; alt-four: 2; + cv03: 3; alt-six: 3; + cv04: 4; alt-nine: 4; + cv05: 5; l-tail: 5; + cv06: 6; simple-u: 6; + cv07: 7; alt-german-s: 7; + cv08: 8; cap-i-serif: 8; + cv09: 9; alt-three: 9; + cv10: 10; cap-g-spur: 10; + cv11: 11; simple-a: 11; + cv12: 12; compact-f: 12; + cv13: 13; compact-t: 13; + } +} - --lineHeight: calc(var(--fontSize) * 1.5); +:root { + --font-size: 16px; + --line-height: 1.5; --spacing: 2rem; - --spacingv: calc(var(--lineHeight) / 2); - + --spacingv: 0.75rem; /* line-height / 2 = ((16*1.5)/2)/16 */ --columnGap: 2rem; + --line-width: 2px; + --header-height: 48px; + --row-padding: 4rem; /* .row */ + --row-padding-vertical: var(--row-padding); + + --background-color: #fff; + --foreground-color: #000; + --foreground-color-bright: #000; + --foreground-color-5: rgba(0, 0, 0, 0.5); + --foreground-color-1: rgba(0, 0, 0, 0.08); + --underline-color: rgba(0, 0, 0, 0.3); + --underline-color-bright: rgba(0, 0, 0, 0.6); + --link-hover-color: var(--blue); + --grid-color: #ccc; /* must be opaque */ + --unit-background-color: var(--foreground-color-1); - /* colors */ --red: color(display-p3 0.94 0.19 0.04); + --hot-orange: color(display-p3 1 0.38 0.19); --yellow: color(display-p3 1 0.96 0.05); - --warm-yellow: color(display-p3 1 0.87 0.05); + --warm-yellow: color(display-p3 1 0.83 0.2); --light-yellow: color(display-p3 1 1 0.7); + --light-yellow2: color(display-p3 1 0.98 0.59); --blue: rgb(3, 102, 230); --green: rgb(38, 220, 78); - --mediumGreen: rgb(119, 221, 134); + --medium-green: rgb(119, 221, 134); + + --font-family: InterVariable; + + /* font-size needed at :root for rem to work as expected */ + font-family: var(--font-family), sans-serif; + font-synthesis: none; + font-size: var(--font-size); + font-feature-settings: 'liga' 1, 'calt' 1; /* workaround for bug in Chrome */ +} +@supports not (font-variation-settings: normal) { :root { + --font-family: Inter; +}} +@supports not (color: color(display-p3 1 1 1)) { :root { /* sRGB colors */ + --red: #F03009; + --yellow: #FFF310; + --warm-yellow: #FFE310; + --light-yellow: rgb(255, 255, 179); + --light-yellow2: rgb(255, 250, 135); +}} +@media (prefers-color-scheme: dark) { :root { + --background-color: #111; + --foreground-color: #fafafa; + --foreground-color-bright: #fff; + --foreground-color-5: rgba(255, 255, 255, 0.5); + --underline-color: rgba(255, 255, 255, 0.3); + --underline-color-bright: rgba(255, 255, 255, 0.6); + --link-hover-color: var(--light-yellow); + --grid-color: #555; /* must be opaque */ + --unit-background-color: #333; + font-weight: 400; +}} - --font-family: 'Inter'; +/* narrow windows */ +@media only screen and (max-width: 1391px) { /* window width <= 1391 */ + .only-huge-screen { display: none !important; } } - -@supports (font-variation-settings: normal) { - :root { - --font-family: 'Inter var'; - } +@media only screen and (max-width: 719px) { /* window width <= 719 */ + :root { --row-padding: 2rem; } + .only-large-screen { display: none !important; } } - -@supports not (color: color(display-p3 1 1 1)) { - /* sRGB colors */ - :root { - --red: #F03009; - --yellow: #FFF310; - --warm-yellow: #FFE310; - --light-yellow: rgb(255, 255, 179); - } +@media only screen and (max-width: 500px) { /* window width <= 500 */ + :root { --row-padding: 1rem; --row-padding-vertical: 2rem } +} +/* wide windows */ +@media only screen and (min-width: 720px) { /* window width >= 720 */ + .only-small-screen { display: none !important; } +} +@media only screen and (min-width: 1392px) { /* window width >= 1392 */ + :root { font-size: calc(100vw / 87); } } -* { margin:0; padding:0; font-synthesis: none; } - -html.debug *:nth-child(4n) { outline:1px solid rgba(0,0,255,0.5); } -html.debug *:nth-child(4n+1) { outline:1px solid rgba(0,255,255,0.5); } -html.debug *:nth-child(4n+2) { outline:1px solid rgba(255,0,255,0.5); } -html.debug *:nth-child(4n+3) { outline:1px solid rgba(255,0,0,0.5); } - -html { } body { - background-color: #f4f4f4; - color: #111; - font: 15px/22px var(--font-family), system-ui, sans-serif; + background-color: var(--background-color); + color: var(--foreground-color); + line-height: var(--line-height); + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + -webkit-overflow-scrolling: touch; + scroll-behavior: smooth; + margin: 0; + padding: var(--header-height) 0 0 0; +} - /*font-size: 15px; - line-height: 1.5;*/ +* { scroll-padding-top: var(--header-height); } + +header { + position: sticky; top: 0; left: 0; right: 0; + height: var(--header-height); + overflow: hidden; + z-index: 2; + background: var(--background-color); + display: flex; + flex-direction: row; + justify-content: center; + align-items: stretch; + padding: 0; + font-size: 14px; +} + header > div { + width:100%; + /*max-width: calc(1392px - 8rem);*/ + flex: 1 0 100%; + display: flex; + flex-direction: row; + align-items: stretch; + } + header > div > * { padding: 0 var(--row-padding); } + header .menu { + flex: 1 0 auto; + display: flex; + flex-direction: row; + justify-content: flex-end; + align-items: center; + gap: 2em; + } + header h4 { + flex: 0 0 auto; + margin: 0; + display: flex; + align-items: center; + } + header a { padding: 0; text-decoration: none } + header a:hover { text-decoration: none; color:inherit } + header .scroll-reveal { + pointer-events: none; + user-select: none; + opacity: 0; + transition: opacity 200ms ease-in-out; + } + header .scroll-reveal.visible { + opacity: 1; + pointer-events: all; + } +@media only screen and (max-width: 500px) { /* window width <= 500 */ + header { position: fixed; } + header .scroll-reveal { opacity: 1; pointer-events: all; } + header .menu { gap: 8px } + header .menu > * { flex: 1 1 auto } +} - font-size: var(--fontSize); - line-height: var(--lineHeight); +footer { opacity: 0.4; } +footer:hover { opacity: 1; } - letter-spacing: -0.004em; +/* blocks */ +div, p, pre, ol, ul, h1, h2, h3, h4, h5, h6 { + margin: 0; + padding: 0; +} +p, pre, ol, ul { + margin-bottom: calc(var(--spacingv) * 2); +} +h1 { + font-weight: 600; + font-size: 4rem; + letter-spacing: -0.01em; + line-height: 1.0; + margin-left: calc(3rem / -19); + margin-bottom: calc(var(--spacingv) * 2); + color: var(--foreground-color-bright); +} +h2 { + font-weight: 600; + font-size: 2rem; + letter-spacing: -0.01em; + line-height: calc(var(--spacingv) * 3); + margin-bottom: calc(var(--spacingv) * 2); +} +h3 { + font-weight: 600; + font-size: 1.2rem; + /*letter-spacing: -0.018em;*/ + /*line-height: calc(var(--spacingv) * 2);*/ + margin-bottom: calc(var(--spacingv) * 2); +} +h3 q { font-weight: 400; + padding-left: 0.5em; +} +h4, h5, h6 { + font-weight: 640; + margin-bottom: calc(var(--spacingv) * 1); +} - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; +h1 > a, +h2 > a, +h3 > a, +h4 > a { + display: inline-block; + color: inherit; + text-decoration: none !important; + text-shadow: none; + background: none; + outline:none; +} - -webkit-overflow-scrolling: touch; - scroll-behavior: smooth; +/* add top margin to Hn when it follows another element */ +* + h1 { margin-top: calc(var(--spacingv) * 6); } +* + h2 { margin-top: calc(var(--spacingv) * 4); } +* + h3 { margin-top: calc(var(--spacingv) * 3); } +* + h4 { margin-top: calc(var(--spacingv) * 2); } - font-kerning: normal; - -webkit-font-kerning: normal; - -ms-font-kerning: normal; - -moz-font-kerning: normal; - -o-font-kerning: normal; - - font-variant-ligatures: contextual common-ligatures; - -webkit-font-variant-ligatures: contextual common-ligatures; - -ms-font-variant-ligatures: contextual common-ligatures; - -moz-font-variant-ligatures: contextual common-ligatures; - -o-font-variant-ligatures: contextual common-ligatures; - - /* required to work around letter-spacing bug in Chrome: */ - font-feature-settings: 'kern' 1, 'liga' 1, 'calt' 1; -} - -/* Font style classifiers used by samples and dynmetrics */ -/* Note: font-variation-settings is needed for Safari. */ -.font-style-thin { font-variation-settings: "wght" 100, "slnt" 0 !important; font-weight:100 !important; font-style:normal !important; } -.font-style-thin-italic { font-variation-settings: "wght" 100, "slnt" 100 !important; font-weight:100 !important; font-style:oblique !important; } -.font-style-extra-light { font-variation-settings: "wght" 200, "slnt" 0 !important; font-weight:100 !important; font-style:normal !important; } -.font-style-extra-light-italic { font-variation-settings: "wght" 200, "slnt" 100 !important; font-weight:100 !important; font-style:oblique !important; } -.font-style-light { font-variation-settings: "wght" 300, "slnt" 0 !important; font-weight:300 !important; font-style:normal !important; } -.font-style-light-italic { font-variation-settings: "wght" 300, "slnt" 100 !important; font-weight:300 !important; font-style:oblique !important; } -.font-style-regular { font-variation-settings: "wght" 400, "slnt" 0 !important; font-weight:400 !important; font-style:normal !important; } -.font-style-italic { font-variation-settings: "wght" 400, "slnt" 100 !important; font-weight:400 !importants; font-style:oblique !important; } -.font-style-medium { font-variation-settings: "wght" 500, "slnt" 0 !important; font-weight:500 !important; font-style:normal !important; } -.font-style-medium-italic { font-variation-settings: "wght" 500, "slnt" 100 !important; font-weight:500 !important; font-style:oblique !important; } -.font-style-semi-bold { font-variation-settings: "wght" 600, "slnt" 0 !important; font-weight:600 !important; font-style:normal !important; } -.font-style-semi-bold-italic { font-variation-settings: "wght" 600, "slnt" 100 !important; font-weight:600 !important; font-style:oblique !important; } -.font-style-bold { font-variation-settings: "wght" 700, "slnt" 0 !important; font-weight:700 !important; font-style:normal !important; } -.font-style-bold-italic { font-variation-settings: "wght" 700, "slnt" 100 !important; font-weight:700 !important; font-style:oblique !important; } -.font-style-extra-bold { font-variation-settings: "wght" 800, "slnt" 0 !important; font-weight:800 !important; font-style:normal !important; } -.font-style-extra-bold-italic { font-variation-settings: "wght" 800, "slnt" 100 !important; font-weight:800 !important; font-style:oblique !important; } -.font-style-black { font-variation-settings: "wght" 900, "slnt" 0 !important; font-weight:900 !important; font-style:normal !important; } -.font-style-black-italic { font-variation-settings: "wght" 900, "slnt" 100 !important; font-weight:900 !important; font-style:oblique !important; } - -DISABLED:target:before { - content:""; - display: block; - height: 20px; /* fixed header height*/ - margin: -20px 0 0; /* negative fixed header height */ - visibility: hidden; -} a { - text-decoration: underline rgba(0, 0, 0, 0.3); - color: black; + text-decoration: underline; + text-decoration-color: var(--underline-color); + color: var(--foreground-color); word-break: break-word; word-wrap: break-word; } @@ -123,7 +276,8 @@ a.fat { color: #333; } a:hover { - color: var(--red); + color: var(--link-hover-color); + text-decoration-color: var(--link-hover-color); text-decoration: underline; } a.plain, a.fat { @@ -136,25 +290,34 @@ a[href^="#"]:hover { text-decoration-style: dashed; } -/*p, pre { - margin: 1rem 0; -}*/ -code, pre, q, tt { - font-family: 'IBM Plex Mono', monospace; - font-feature-settings: 'kern' 1, 'liga' 1, 'calt' 1, 'ss02' 1, 'zero' 1; +code, pre, q, tt, r-feat, .feat { + font-family: jbmono, Menlo, monospace; + font-size: 92%; + font-feature-settings: "calt" 0; line-height: inherit; + font-weight: 440; } -code { - display: block; - border-radius:1px; - padding: 0.5em 0; - overflow: auto; +code, r-feat, .feat { + padding: 0 .1em; + white-space: pre; } pre { white-space: pre-wrap; line-break: loose; overflow-x: auto; } +r-feat, .feat { + padding: 0 .3em; + /*margin: 0 .1em;*/ + border-radius: 0.3em; + user-select: all; + background: var(--unit-background-color); +} +a.feat:hover { + text-decoration: none; + background: var(--foreground-color); + color:var(--background-color); +} q { display: inline; white-space: pre-wrap; @@ -184,158 +347,47 @@ dem { /* de-emphasize */ opacity: 0.7; } num { /* number */ - /*-moz-font-feature-settings: 'calt' 1, 'ss01' 1; - -ms-font-feature-settings: 'calt' 1, 'ss01' 1; - -o-font-feature-settings: 'calt' 1, 'ss01' 1; - -webkit-font-feature-settings: 'kern' 1, 'calt' 1, 'ss01' 1; - font-feature-settings: 'calt' 1, 'ss01' 1;*/ letter-spacing:0.01em; - white-space: pre; + white-space: nowrap; + font-variant: tabular-nums slashed-zero; } - em, i, .italic { - font-style: oblique; + font-style: italic; } - -small { - font-size: 11px; +small, .small { + font-size: 1vw; letter-spacing: 0.012em; } - -h1, h2, h3, h4, h5, h6 { - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -/*h1, .h1 { - color: #222; - font-size: 55px; - letter-spacing: -0.038em; - line-height: 1.1em; - text-indent: -2px; - font-weight: 700; -} -h1 { - margin-bottom: 30px; - margin-top: 10px; -}*/ -h1, .h1 { - margin-left: calc(3rem / -20); - font-weight: 700; - font-size: 4rem; - letter-spacing: -0.07em; - line-height: calc(var(--spacingv) * 6); -} -h1 { - margin-bottom: calc(var(--spacingv) * 2); -} - -h2, .h2 { - font-weight: 700; - font-size: 1.8rem; - letter-spacing: -0.03em; - line-height: calc(var(--spacingv) * 3); -} -h2 { - margin-bottom: calc(var(--spacingv) * 2); -} -h3, .h3 { - font-weight: 700; - font-weight: 650; - font-size: 1.2rem; - letter-spacing: -0.018em; - line-height: calc(var(--spacingv) * 2); -} -h3 { - margin-bottom: calc(var(--spacingv) * 2); -} - -h3 q, h3. q { - font-weight: 400; - padding-left: 0.5em; +@media only screen and (max-width: 1200px) { + small, .small { font-size: 12px; } } -h1 > a, h2 > a, h3 > a, h4 > a, -.h1 > a, .h2 > a, .h3 > a, .h4 > a { - display:block; - color: inherit; - text-decoration: none !important; - text-shadow: none; - background: none; - outline:none; -} - -h4, h5, h6, .h4, .h5, .h6 { - font-weight: 640; - letter-spacing: -0.015em; -} -h4, h5, h6 { - margin-bottom: calc(var(--spacingv) * 1); -} -/* add top margin to Hn when it follows another element */ -* + h1 { margin-top: calc(var(--spacingv) * 6); } -* + h2 { margin-top: calc(var(--spacingv) * 4); } -* + h3 { margin-top: calc(var(--spacingv) * 3); } -* + h4 { margin-top: calc(var(--spacingv) * 2); } - -p, pre, p + grid, pre + grid { - margin-bottom: var(--lineHeight); +hr { + border: none; + background: var(--foreground-color); + /*width: 100%;*/ + height: var(--line-width); + margin-top: calc(1em * var(--line-height)); + margin-bottom: calc(1em * var(--line-height)); } +ol, ul { padding-left:1.2rem; } -.row.dark h2, -.row.black h2 { - letter-spacing: -0.014em; -} -h2.back { - color:rgba(0,0,0,0.2); - font-size: inherit; - letter-spacing: inherit; - font-weight:400; - margin:0; - margin-top:-1.9em; -} -h2.back a:hover { - color: black; - margin-left:-1.3em; -} -h2.back a:hover::before { - content: "<- "; -} -h2.banner { - text-align: center; - display: flex; - justify-content: center; -} - h2.banner > * { - flex: 0 1 auto; - padding: 0.8em 1.2em; - border-radius: 4em; - display: block; - background: white; - } - h2.banner > a:hover { - color: black; - background: rgba(0,0,0,0.1); - } - -.row.dark h3, -.row.black h3 { - letter-spacing: -0.012em; -} +input, select { font: inherit } -.row.yellow { - background: var(--yellow); - color: rgba(0, 0, 0, 0.98); +.leading-trim { + margin-top: -0.235em; + line-height: 1.2; } .row { - padding: 50px; + padding: var(--row-padding-vertical) var(--row-padding); display: flex; justify-content: center; } .row > * { width:100%; - max-width: 888px; + max-width: calc(100vw - calc(var(--row-padding) * 2)); flex: 1 0 100%; } .row .learn-more { @@ -360,374 +412,6 @@ h2.banner { max-width: initial; } -.row-divider { - height: 1rem; - /*margin: 0 auto; - max-width: 888px; - height: 0.11rem; - background: black;*/ -} - -.row.menu { - padding: 0; - border-bottom:1px solid rgba(0,0,0,0.1); - background: #111; - color: white; - border-top: 40px solid red; - margin-top: -40px; -} - .row.menu ul { - width: auto; - max-width: 888px; - flex: 1 1 auto; - list-style: none; - padding: 0; - margin: 0 50px; - display: flex; - flex-wrap: wrap; - white-space: nowrap; - } - .row.menu ul li { - margin-bottom: -1px; - text-indent: -0.5px; - text-align: center; - } - .row.menu ul li > a { - color: inherit; - opacity: 0.8; - text-decoration:none; - display: inline-block; - padding: 15px 20px 13px 20px; - margin-right: 1px; - font-weight: 450; - /*transition: 80ms all cubic-bezier(0.25, 0.47, 0.44, 0.93);*/ - } - .row.menu ul li > a:hover, - .row.menu ul li > a.active { - color: white; - background: var(--red); - opacity: 1; - } - .row.menu ul li:first-child > a { - padding-left:0; - padding-right:0; - margin-right: 25px; - background:transparent; - } - .row.menu ul li:first-child > a:hover { - text-decoration:underline; - } - .row.menu ul li.nav-home > a { - font-weight: 600; - color: white; - opacity: 1; - } - -/* narrow windows */ -@media only screen and (max-width: 565px) { - .row { - padding-left: 24px; - padding-right: 24px; - } - .row.menu ul { - display: grid; - grid-template-columns: repeat(4,1fr); - margin: 0 20px; - } - .row.menu ul { - } - .row.menu ul li { - display: flex; - } - .row.menu ul li > a { - flex: 0 1 100%; - margin: 0; - padding-right:0; - padding-left:0; - box-shadow: inset 1px 0 0 0 rgba(255,255,255,0.1); - } - .row.menu ul li:first-child > a { - margin-right: 0; - box-shadow: none; - } - .row.menu ul li.nav-home a { - text-align: left; - } -} - -/* progressively hide menu items */ -@media only screen and (max-width: 680px) { - .row.menu .nav-lab { display: none; } -} -@media only screen and (max-width: 565px) { - .row.menu .nav-download { display: none; } -} -@media only screen and (max-width: 280px) { - .row.menu ul { grid-template-columns: repeat(3,1fr); } - .row.menu .nav-dynmetrics { display: none; } -} - - -.row.white { - background: white; -} - -.row.dark, -.row.black { - background: #2b2b2b; - color: #99999b; -} -.row.green { - background: var(--mediumGreen); - color: black; -} -.row.blue { - background: var(--blue); - color: white; -} -.row.black { - background: #010101; -} -.row.dark a, -.row.black a { - text-decoration-color: rgba(255, 255, 255, 0.2); - color: #aaa; -} -.row.dark a:hover, -.row.black a:hover { - color: rgb(95, 170, 255); - text-decoration: underline rgb(95, 170, 255); -} -.row.dark h2, .row.dark h2 > a, -.row.black h2, .row.black h2 > a { - color: #ccc; - background: none; -} -.row.green h2 > a:hover { - color: inherit; - text-decoration-style: solid !important; - text-decoration: underline !important; - text-decoration: underline rgba(0, 0, 0, 0.3) !important; -} -.row.green > * > p > a:hover { - color: inherit; -} - -.row.color1 { - background: #C0CDE2; - color: #3B414A; -} - -footer { opacity: 0.4; } -footer:hover { opacity: 1; } - - -/* --------------------------------------------------------------------- */ - -ul { margin-left:1.1em; } -a > img { display: block; } - -/* --------------------------------------------------------------------- */ -/* generic helpers */ - -.low-contrast { opacity: 0.4; } -.center-text { text-align: center; } - -/* --------------------------------------------------------------------- */ - -#repertoire-image { - display:block; - width:100%; - height:40vw; - background-image: url(res/repertoire.png); - background-repeat: no-repeat; - background-size: cover; - background-blend-mode: multiply; - background-color: #f4f4f4; -} - -.sample-images {} - .sample-images img, .sample-images svg { - display: block; - width: 100%; - } - -/* --------------------------------------------------------------------- */ -/* grid */ - -grid { - grid-column-gap: var(--columnGap); - grid-row-gap: 0; -} -grid > c.spacer { - grid-column: 1 / -1; - height: calc(var(--spacingv) * 6); -} - -@media only screen and (max-width: 565px) { - grid { grid-column-gap: 1rem; } - grid > c.spacer { height: calc(var(--spacingv) * 3); } -} - -.row.features { display:none; } -@supports (display: grid) { - .row.features { display:flex; } -} -.row.features p.example { margin-top:2rem; opacity:0.4; } - -.row.features grid { - grid-column-gap: 1rem; - grid-row-gap: 0.5rem; - margin-bottom: 0; -} - -/* --------------------------------------------------------------------- */ -/* flow */ - -flow { display:block; appearance: none; -webkit-appearance: none } -flow[columns] { - column-gap: var(--columnGap); - column-fill: balance; -} -flow[columns="2"] { - column-count: 2; -} -@media only screen and (max-width: 565px) { - flow[columns-s="1"] { - column-count: 1; - } -} - -/* column flow */ -[flow-cols], [flow-cols-s], [flow-cols-l] { - column-gap: var(--columnGap); - column-fill: balance; -} -[flow-cols="1"] { column-count: 1 } -[flow-cols="2"] { column-count: 2 } -[flow-cols="3"] { column-count: 3 } -[flow-cols="4"] { column-count: 4 } -[flow-cols="5"] { column-count: 5 } -[flow-cols="6"] { column-count: 6 } -[flow-cols="7"] { column-count: 7 } -[flow-cols="8"] { column-count: 8 } - -@media only screen and (max-width: 565px) { - [flow-cols-s="1"] { column-count: 1 } - [flow-cols-s="2"] { column-count: 2 } - [flow-cols-s="3"] { column-count: 3 } - [flow-cols-s="4"] { column-count: 4 } - [flow-cols-s="5"] { column-count: 5 } - [flow-cols-s="6"] { column-count: 6 } - [flow-cols-s="7"] { column-count: 7 } - [flow-cols-s="8"] { column-count: 8 } -} - - -/* --------------------------------------------------------------------- */ - -boxes { - display: flex; - flex-wrap: wrap; - justify-content: stretch; - margin-right:-1em; -} -box { - overflow: auto; - flex: 1 1 0; - box-sizing: border-box; - min-width: 270px; - max-width: 100%; - display: flex; - flex-direction: column; - background: white; - padding: 2em; - border-radius: 3px; - margin-right:1em; - margin-bottom:1em; - flex-basis: 40%; -} -box:first-child { - margin-left:0; -} -box h3 { - margin-bottom:0.8em; -} - -box.large tablex r { - line-height: 1.5; -} -box.large tablex r in, -box.large tablex r to, -box.large tablex r out { - font-size: 2rem; - padding-bottom: 0; -} - -#hud-notification { - position: fixed; - bottom: 20px; - left: 0; - right: 0; - display: flex; - justify-content: center; - z-index: 9; - pointer-events: none; -} - #hud-notification .msg { - background: #000; - color: white; - height: 32px; - line-height: 32px; - font-size: 14px; - letter-spacing: 0em; - padding: 0 0.7em; - border-radius: 4px; - opacity: 0.1; - transition: 250ms all ease-in; - transform: translate3d(0, 71px, 0); /* height + bottom offset + 1 */ - } - #hud-notification.visible .msg { - transform: translate3d(0, 0, 0); - transition: 120ms all cubic-bezier(0.25, 0.47, 0.44, 0.93); - opacity: 1; - } - - -/* ------------------------------------------------------ */ - - -/* wide windows */ -@media only screen and (min-width: 566px) { - .narrow-window, .only-small-screen { display: none; } -} - -/* narrow windows */ -@media only screen and (max-width: 565px) { - .wide-window, .only-large-screen { display: none; } -} - -/* small devices (<= iPhone 6+) */ -@media only screen and (max-device-width: 414px) { - box { padding: 1em; } - box tablex r { font-size: 0.9em; } - body { - font-size: 14px; - line-height: 20px; - } - .row { - padding-left: 20px; - padding-right: 20px; - } -} - -/* small devices (<= iPhone 5) */ -@media only screen and (max-device-width: 320px) { - box { - font-size: 0.8em; - min-width: 240px; - } -} /* Feature helpers. @@ -735,9 +419,7 @@ Feature helpers. Note: font-variant-alternates:character-variant is not yet supported by most browsers, which is why we use the "low leve" font-feature-settings instead. - */ - .ff-none { font-feature-settings: 'kern' 1, 'calt' 0, 'liga' 0, 'ccmp' 0; -webkit-font-feature-settings: 'kern' 1, 'calt' 0, 'liga' 0, 'ccmp' 0; -ms-font-feature-settings: 'kern' 1, 'calt' 0, 'liga' 0, 'ccmp' 0; -moz-font-feature-settings: 'kern' 1, 'calt' 0, 'liga' 0, 'ccmp' 0; } .ff-liga, @@ -772,69 +454,26 @@ instead. .ff-cv11 { font-feature-settings: 'kern' 1, 'cv11' 1; -webkit-font-feature-settings: 'kern' 1, 'cv11' 1; -ms-font-feature-settings: 'kern' 1, 'cv11' 1; -moz-font-feature-settings: 'kern' 1, 'cv11' 1; } - -.row.charset { - padding-top: 1rem; - padding-left: 0; - padding-right: 0; - /* maintain cascading margin-bottom */ -} - -.charset-table { - --gridColor: #bbb; - --columns: 24; - --columnsL: 32; - --columnsS: 16; - --columnsXS: 8; - --tableWidth: 95vw; - - flex: 1 1 auto; - padding: 0; - margin: 1rem auto; - - max-width: var(--tableWidth); - width: var(--tableWidth); +.button, a.button { + font: inherit; + display: inline-block; + padding: 0.25rem 0.8rem; + margin: 0.5rem 0; + border: none; + border-radius: 6px; + text-decoration: none; + user-select: none; + font-weight: 470; + letter-spacing: 0.02em; + background: var(--foreground-color); + color: var(--background-color); + white-space: nowrap; overflow: hidden; - - display: flex; - flex-wrap: wrap; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - - box-shadow: -1px -1px 0 var(--gridColor), - -1px 0 0 var(--gridColor), - 0 -1px 0 var(--gridColor); -} - .charset-table > a { - flex: 0 0 auto; - - margin: 0; - padding: 0; - - display: flex; - align-items: center; - justify-content: center; - - width: calc(var(--tableWidth) / var(--columns)); - height: calc(var(--tableWidth) / var(--columns)); - - font-size: calc(100vw / calc(var(--columns) * 2)); - line-height: 100%; - text-align: center; - font-feature-settings: "calt" 0; /* disable all */ - - box-shadow: inset -1px -1px 0 var(--gridColor); - text-decoration: none; - } -/* for window width >= 1600 */ -@media only screen and (min-width: 1599px) { - .charset-table { --columns: var(--columnsL); } + text-overflow: ellipsis; + flex: 0 1 auto; } -@media only screen and (max-width: 800px) { - .charset-table { --columns: var(--columnsS); } -} -@media only screen and (max-width: 565px) { - .charset-table { --columns: var(--columnsXS); } +.button:hover, a.button:hover { + background: var(--link-hover-color); } @@ -845,14 +484,14 @@ instead. height: 2em; line-height: 2em; border-radius: 0.25em; - border: 1px solid rgba(0,0,0,0.2); + border: 1px solid var(--underline-color); font-weight: 500; font-weight: 480; text-decoration: none; padding: 0 0.6em; user-select: none; -webkit-user-select: none; } #sponsor-button:hover { - border-color: rgba(0,0,0,0.6); + border-color: var(--foreground-color); color: inherit; } #sponsor-button span { @@ -867,3 +506,188 @@ instead. font-size: 1.1em; line-height: 1em; } + + +.cv01 { font-variant-alternates: character-variant(cv01); } +.cv02 { font-variant-alternates: character-variant(cv02); } +.cv03 { font-variant-alternates: character-variant(cv03); } +.cv04 { font-variant-alternates: character-variant(cv04); } +.cv05 { font-variant-alternates: character-variant(cv05); } +.cv06 { font-variant-alternates: character-variant(cv06); } +.cv07 { font-variant-alternates: character-variant(cv07); } +.cv08 { font-variant-alternates: character-variant(cv08); } +.cv09 { font-variant-alternates: character-variant(cv09); } +.cv10 { font-variant-alternates: character-variant(cv10); } +.cv11 { font-variant-alternates: character-variant(cv11); } +.cv12 { font-variant-alternates: character-variant(cv12); } +.cv13 { font-variant-alternates: character-variant(cv13); } +.zero { font-variant-numeric: slashed-zero; } + + +/* Raster grid subsystem (rsms.me/raster) */ +r-grid { + display: grid; + --grid-tc: repeat(4, 1fr); + grid-template-columns: var(--grid-tc); + --grid-cs: 1; /* column start */ + --grid-ce: -1; /* column end */ + grid-column-gap: var(--columnGap); + grid-row-gap: 0; +} + +r-grid > r-cell.spacer { + grid-column: 1 / -1; + height: calc(var(--spacingv) * 6); +} +@media only screen and (max-width: 719px) { + r-grid { grid-column-gap: 1rem; } + r-cell.spacer { height: calc(var(--spacingv) * 3); } +} +r-grid > hr { grid-column: 1 / -1; width: 100% } + + +/* r-cell -- cell or column */ +r-grid > r-cell { display: block; appearance: none; -webkit-appearance: none } + +r-grid[columns="1"] { --grid-tc: repeat(1, 1fr) } +r-grid[columns="2"] { --grid-tc: repeat(2, 1fr) } +r-grid[columns="3"] { --grid-tc: repeat(3, 1fr) } +r-grid[columns="4"] { --grid-tc: repeat(4, 1fr) } +r-grid[columns="5"] { --grid-tc: repeat(5, 1fr) } +r-grid[columns="6"] { --grid-tc: repeat(6, 1fr) } +r-grid[columns="7"] { --grid-tc: repeat(7, 1fr) } +r-grid[columns="8"] { --grid-tc: repeat(8, 1fr) } + +/* span=start... */ +r-grid > r-cell[span^="1"] { --grid-cs: 1 } +r-grid > r-cell[span^="2"] { --grid-cs: 2 } +r-grid > r-cell[span^="3"] { --grid-cs: 3 } +r-grid > r-cell[span^="4"] { --grid-cs: 4 } +r-grid > r-cell[span^="5"] { --grid-cs: 5 } +r-grid > r-cell[span^="6"] { --grid-cs: 6 } +r-grid > r-cell[span^="7"] { --grid-cs: 7 } +r-grid > r-cell[span^="8"] { --grid-cs: 8 } + +/* span=...+width, span=...-end */ +r-grid > r-cell[span$="+1"], r-grid > r-cell[span="1"] { --grid-ce: 1 } +r-grid > r-cell[span$="+2"], r-grid > r-cell[span$="-1"], r-grid > r-cell[span="2"] { --grid-ce: 2 } +r-grid > r-cell[span$="+3"], r-grid > r-cell[span$="-2"], r-grid > r-cell[span="3"] { --grid-ce: 3 } +r-grid > r-cell[span$="+4"], r-grid > r-cell[span$="-3"], r-grid > r-cell[span="4"] { --grid-ce: 4 } +r-grid > r-cell[span$="+5"], r-grid > r-cell[span$="-4"], r-grid > r-cell[span="5"] { --grid-ce: 5 } +r-grid > r-cell[span$="+6"], r-grid > r-cell[span$="-5"], r-grid > r-cell[span="6"] { --grid-ce: 6 } +r-grid > r-cell[span$="+7"], r-grid > r-cell[span$="-6"], r-grid > r-cell[span="7"] { --grid-ce: 7 } +r-grid > r-cell[span$="+8"], r-grid > r-cell[span$="-7"], r-grid > r-cell[span="8"] { --grid-ce: 8 } +r-grid > r-cell[span$="-8"] { --grid-ce: 9 } + +/* connect vars */ +r-grid > r-cell[span] { grid-column-end: span var(--grid-ce) } +r-grid > r-cell[span*="+"], r-grid > r-cell[span*="-"], r-grid > r-cell[span*=".."] { + grid-column-start: var(--grid-cs) } +r-grid > r-cell[span*="-"], r-grid > r-cell[span*=".."] { + grid-column-end: var(--grid-ce) } +r-grid > r-cell[span="row"] { grid-column: 1 / -1 } + +@media only screen and (max-width: 719px) { + r-grid[columns-s="1"] { --grid-tc: repeat(1, 1fr) } + r-grid[columns-s="2"] { --grid-tc: repeat(2, 1fr) } + r-grid[columns-s="3"] { --grid-tc: repeat(3, 1fr) } + r-grid[columns-s="4"] { --grid-tc: repeat(4, 1fr) } + r-grid[columns-s="5"] { --grid-tc: repeat(5, 1fr) } + r-grid[columns-s="6"] { --grid-tc: repeat(6, 1fr) } + r-grid[columns-s="7"] { --grid-tc: repeat(7, 1fr) } + r-grid[columns-s="8"] { --grid-tc: repeat(8, 1fr) } + + /* span-s=start... */ + r-grid > r-cell[span-s^="1"] { --grid-cs: 1 } + r-grid > r-cell[span-s^="2"] { --grid-cs: 2 } + r-grid > r-cell[span-s^="3"] { --grid-cs: 3 } + r-grid > r-cell[span-s^="4"] { --grid-cs: 4 } + r-grid > r-cell[span-s^="5"] { --grid-cs: 5 } + r-grid > r-cell[span-s^="6"] { --grid-cs: 6 } + r-grid > r-cell[span-s^="7"] { --grid-cs: 7 } + r-grid > r-cell[span-s^="8"] { --grid-cs: 8 } + + /* span-s=...+width, span-s=...-end */ + r-grid > r-cell[span-s$="+1"], r-grid > r-cell[span-s="1"] { --grid-ce: 1 } + r-grid > r-cell[span-s$="+2"], r-grid > r-cell[span-s$="-1"], r-grid > r-cell[span-s="2"] { --grid-ce: 2 } + r-grid > r-cell[span-s$="+3"], r-grid > r-cell[span-s$="-2"], r-grid > r-cell[span-s="3"] { --grid-ce: 3 } + r-grid > r-cell[span-s$="+4"], r-grid > r-cell[span-s$="-3"], r-grid > r-cell[span-s="4"] { --grid-ce: 4 } + r-grid > r-cell[span-s$="+5"], r-grid > r-cell[span-s$="-4"], r-grid > r-cell[span-s="5"] { --grid-ce: 5 } + r-grid > r-cell[span-s$="+6"], r-grid > r-cell[span-s$="-5"], r-grid > r-cell[span-s="6"] { --grid-ce: 6 } + r-grid > r-cell[span-s$="+7"], r-grid > r-cell[span-s$="-6"], r-grid > r-cell[span-s="7"] { --grid-ce: 7 } + r-grid > r-cell[span-s$="+8"], r-grid > r-cell[span-s$="-7"], r-grid > r-cell[span-s="8"] { --grid-ce: 8 } + r-grid > r-cell[span-s$="-8"] { --grid-ce: 9 } + + /* connect vars */ + r-grid > r-cell[span-s] { grid-column-end: span var(--grid-ce) } + r-grid > r-cell[span-s*="+"], r-grid > r-cell[span-s*="-"], r-grid > r-cell[span-s*=".."] { + grid-column-start: var(--grid-cs) } + r-grid > r-cell[span-s*="-"], r-grid > r-cell[span-s*=".."] { + grid-column-end: var(--grid-ce) } + r-grid > r-cell[span-s="row"] { grid-column: 1 / -1 } +} + +/* for window width >= 1392 */ +@media only screen and (min-width: 1392px) { + r-grid[columns-l="1"] { --grid-tc: repeat(1, 1fr) } + r-grid[columns-l="2"] { --grid-tc: repeat(2, 1fr) } + r-grid[columns-l="3"] { --grid-tc: repeat(3, 1fr) } + r-grid[columns-l="4"] { --grid-tc: repeat(4, 1fr) } + r-grid[columns-l="5"] { --grid-tc: repeat(5, 1fr) } + r-grid[columns-l="6"] { --grid-tc: repeat(6, 1fr) } + r-grid[columns-l="7"] { --grid-tc: repeat(7, 1fr) } + r-grid[columns-l="8"] { --grid-tc: repeat(8, 1fr) } + + /* span-l=start... */ + r-grid > r-cell[span-l^="1"] { --grid-cs: 1 } + r-grid > r-cell[span-l^="2"] { --grid-cs: 2 } + r-grid > r-cell[span-l^="3"] { --grid-cs: 3 } + r-grid > r-cell[span-l^="4"] { --grid-cs: 4 } + r-grid > r-cell[span-l^="5"] { --grid-cs: 5 } + r-grid > r-cell[span-l^="6"] { --grid-cs: 6 } + r-grid > r-cell[span-l^="7"] { --grid-cs: 7 } + r-grid > r-cell[span-l^="8"] { --grid-cs: 8 } + + /* span-l=...+width, span-l=...-end */ + r-grid > r-cell[span-l$="+1"], r-grid > r-cell[span-l="1"] { --grid-ce: 1 } + r-grid > r-cell[span-l$="+2"], r-grid > r-cell[span-l$="-1"], r-grid > r-cell[span-l="2"] { --grid-ce: 2 } + r-grid > r-cell[span-l$="+3"], r-grid > r-cell[span-l$="-2"], r-grid > r-cell[span-l="3"] { --grid-ce: 3 } + r-grid > r-cell[span-l$="+4"], r-grid > r-cell[span-l$="-3"], r-grid > r-cell[span-l="4"] { --grid-ce: 4 } + r-grid > r-cell[span-l$="+5"], r-grid > r-cell[span-l$="-4"], r-grid > r-cell[span-l="5"] { --grid-ce: 5 } + r-grid > r-cell[span-l$="+6"], r-grid > r-cell[span-l$="-5"], r-grid > r-cell[span-l="6"] { --grid-ce: 6 } + r-grid > r-cell[span-l$="+7"], r-grid > r-cell[span-l$="-6"], r-grid > r-cell[span-l="7"] { --grid-ce: 7 } + r-grid > r-cell[span-l$="+8"], r-grid > r-cell[span-l$="-7"], r-grid > r-cell[span-l="8"] { --grid-ce: 8 } + r-grid > r-cell[span-l$="-8"] { --grid-ce: 9 } + + /* connect vars */ + r-grid > r-cell[span-l] { grid-column-end: span var(--grid-ce) } + r-grid > r-cell[span-l*="+"], r-grid > r-cell[span-l*="-"], r-grid > r-cell[span-l*=".."] { + grid-column-start: var(--grid-cs) } + r-grid > r-cell[span-l*="-"], r-grid > r-cell[span-l*=".."] { + grid-column-end: var(--grid-ce) } + r-grid > r-cell[span-l="row"] { grid-column: 1 / -1 } +} + +/* .debug can be added to a r-grid to visualize its effective cells */ +r-grid.debug > * { + --color: rgba(248,110,91 ,0.3); + background-image: + linear-gradient(to bottom, var(--color) 0%, var(--color) 100%); +} +r-grid.debug > :nth-child(6n+2) { --color: rgba(103,126,208,0.3) } +r-grid.debug > :nth-child(6n+3) { --color: rgba(224,174,72 ,0.3) } +r-grid.debug > :nth-child(6n+4) { --color: rgba(77, 214,115,0.3) } +r-grid.debug > :nth-child(6n+5) { --color: rgba(217,103,219,0.3) } +r-grid.debug > :nth-child(6n+6) { --color: rgba(94, 204,211,0.3) } +r-grid.debug > :nth-child(6n+7) { --color: rgba(248,110,91 ,0.3) } + + +[contenteditable] { + outline:none; +} + + +:root.debug *:nth-child(4n) { outline:1px solid rgba(0,0,255,0.5); } +:root.debug *:nth-child(4n+1) { outline:1px solid rgba(0,255,255,0.5); } +:root.debug *:nth-child(4n+2) { outline:1px solid rgba(255,0,255,0.5); } +:root.debug *:nth-child(4n+3) { outline:1px solid rgba(255,0,0,0.5); } -- cgit v1.2.3