:root {
  --fontSize: 15px;
  /*--emsAcrossViewport: 80;
  --fontSize: calc(100vw / var(--emsAcrossViewport));*/

  --lineHeight: calc(var(--fontSize) * 1.5);

  --spacing: 2rem;
  --spacingv: calc(var(--lineHeight) / 2);

  --columnGap: 2rem;

  /* colors */
  --red:    color(display-p3 0.94 0.19 0.04);
  --yellow: color(display-p3 1 0.96 0.05);
  --warm-yellow: color(display-p3 1 0.87 0.05);
  --light-yellow: color(display-p3 1 1 0.7);
  --blue:   rgb(3, 102, 230);
  --green:  rgb(38, 220, 78);
  --mediumGreen: rgb(119, 221, 134);
}

@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);
  }
}

* { 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 'Inter', system-ui, sans-serif;

  /*font-size: 15px;
  line-height: 1.5;*/

  font-size: var(--fontSize);
  line-height: var(--lineHeight);

  letter-spacing: -0.004em;

  font-weight: 400;

  -webkit-text-size-adjust: 100%;
  -ms-text-size-adjust: 100%;

  -webkit-overflow-scrolling: touch;
  scroll-behavior: smooth;

  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; }

@supports (font-variation-settings: normal) {
  body {
    font-family: 'Inter var', system-ui, sans-serif;
  }
  body.chrome-win {
    /* Chrome has some VF issues; worst are on Windows with incorrect kerning.
       We disable VF on Chrome on Windows for that reason.
    */
    font-family: Inter, system-ui, sans-serif;
  }
}

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;
  word-break: break-word;
  word-wrap: break-word;
}
a.fat {
  font-weight:500;
  color: #333;
}
a:hover {
  color: var(--red);
  text-decoration: underline;
}
a.plain, a.fat {
  background: none;
  text-shadow: none;
  text-decoration: none;
  cursor: pointer;
}
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;
  line-height: inherit;
}
code {
  display: block;
  border-radius:1px;
  padding: 0.5em 0;
  overflow: auto;
}
pre {
  white-space: pre-wrap;
  line-break: loose;
  overflow-x: auto;
}
q {
  display: inline;
  white-space: pre-wrap;
}
q {
  display: inline;
}
q:before {
  content: "";
}
q:after {
  content: "";
}
kbd {
  -moz-font-feature-settings:    'liga' 1, 'calt' 1, 'kern' 1, 'case' 1;
  -ms-font-feature-settings:     'liga' 1, 'calt' 1, 'kern' 1, 'case' 1;
  -o-font-feature-settings:      'liga' 1, 'calt' 1, 'kern' 1, 'case' 1;
  -webkit-font-feature-settings: 'liga' 1, 'calt' 1, 'kern' 1, 'case' 1;
  font-feature-settings:         'liga' 1, 'calt' 1, 'kern' 1, 'case' 1;
  border: 1px solid rgba(0,0,0,0.18);
  border-radius: 3px;
  padding:0.1em 0.2em;
  margin:0 0.1em;
}
dem { /* de-emphasize */
  font-weight: 400;
  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;
}

em, i, .italic {
  font-style: oblique;
}

small {
  font-size: 11px;
  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;
}

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);
}


.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;
}

.row.yellow {
  background: var(--yellow);
  color: rgba(0, 0, 0, 0.98);
}

.row {
  padding: 50px;
  display: flex;
  justify-content: center;
}
  .row > * {
    width:100%;
    max-width: 888px;
    flex: 1 0 100%;
  }
  .row .learn-more {
    margin-top: 2em;
    text-align: center;
    font-size: 11px;
    letter-spacing: 0.007em;
  }
  .row .learn-more a {
    color: rgba(0,0,0,0.4);
    text-decoration-color: rgba(0, 0, 0, 0);
  }
  .row .learn-more a:hover {
    color: inherit;
  }

.row.full-width {
  padding: 50px 0;
  justify-content: flex-start;
}
  .row.full-width > * {
    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;
}

.noise-layer {
  background-image: url(noise512.png);
  background-size: 256px;
  opacity: 0.03;
  pointer-events: none;
  position: absolute;
  top:0;
  left:0;
  right:0;
  /*bottom:0;*/
}


/* --------------------------------------------------------------------- */

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;
}
body.safari box {
  /* Fix for broken flex wrap in safari */
  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.

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; -webkit-font-feature-settings: 'kern' 1, 'calt' 0, 'liga' 0; -ms-font-feature-settings: 'kern' 1, 'calt' 0, 'liga' 0; -moz-font-feature-settings: 'kern' 1, 'calt' 0, 'liga' 0; }

.ff-liga,
.ff-calt { font-feature-settings: 'liga' 1, 'calt' 1; -webkit-font-feature-settings: 'liga' 1, 'calt' 1; -ms-font-feature-settings: 'liga' 1, 'calt' 1; -moz-font-feature-settings: 'liga' 1, 'calt' 1; }
.ff-dlig { font-feature-settings: 'kern' 1, 'dlig' 1; -webkit-font-feature-settings: 'kern' 1, 'dlig' 1; -ms-font-feature-settings: 'kern' 1, 'dlig' 1; -moz-font-feature-settings: 'kern' 1, 'dlig' 1; }
.ff-numr { font-feature-settings: 'kern' 1, 'numr' 1; -webkit-font-feature-settings: 'kern' 1, 'numr' 1; -ms-font-feature-settings: 'kern' 1, 'numr' 1; -moz-font-feature-settings: 'kern' 1, 'numr' 1; }
.ff-dnom { font-feature-settings: 'kern' 1, 'dnom' 1; -webkit-font-feature-settings: 'kern' 1, 'dnom' 1; -ms-font-feature-settings: 'kern' 1, 'dnom' 1; -moz-font-feature-settings: 'kern' 1, 'dnom' 1; }
.ff-tnum { font-feature-settings: 'kern' 1, 'tnum' 1; -webkit-font-feature-settings: 'kern' 1, 'tnum' 1; -ms-font-feature-settings: 'kern' 1, 'tnum' 1; -moz-font-feature-settings: 'kern' 1, 'tnum' 1; }
.ff-case { font-feature-settings: 'kern' 1, 'case' 1; -webkit-font-feature-settings: 'kern' 1, 'case' 1; -ms-font-feature-settings: 'kern' 1, 'case' 1; -moz-font-feature-settings: 'kern' 1, 'case' 1; }
.ff-zero { font-feature-settings: 'kern' 1, 'zero' 1; -webkit-font-feature-settings: 'kern' 1, 'zero' 1; -ms-font-feature-settings: 'kern' 1, 'zero' 1; -moz-font-feature-settings: 'kern' 1, 'zero' 1; }
.ff-frac { font-feature-settings: 'kern' 1, 'frac' 1; -webkit-font-feature-settings: 'kern' 1, 'frac' 1; -ms-font-feature-settings: 'kern' 1, 'frac' 1; -moz-font-feature-settings: 'kern' 1, 'frac' 1; }
.ff-sups { font-feature-settings: 'kern' 1, 'sups' 1; -webkit-font-feature-settings: 'kern' 1, 'sups' 1; -ms-font-feature-settings: 'kern' 1, 'sups' 1; -moz-font-feature-settings: 'kern' 1, 'sups' 1; }
.ff-subs { font-feature-settings: 'kern' 1, 'subs' 1; -webkit-font-feature-settings: 'kern' 1, 'subs' 1; -ms-font-feature-settings: 'kern' 1, 'subs' 1; -moz-font-feature-settings: 'kern' 1, 'subs' 1; }
.ff-cpsp { font-feature-settings: 'kern' 1, 'cpsp' 1; -webkit-font-feature-settings: 'kern' 1, 'cpsp' 1; -ms-font-feature-settings: 'kern' 1, 'cpsp' 1; -moz-font-feature-settings: 'kern' 1, 'cpsp' 1; }
.ff-salt { font-feature-settings: 'kern' 1, 'salt' 1; -webkit-font-feature-settings: 'kern' 1, 'salt' 1; -ms-font-feature-settings: 'kern' 1, 'salt' 1; -moz-font-feature-settings: 'kern' 1, 'salt' 1; }
.ff-salt-zero { font-feature-settings: 'kern' 1, 'salt' 1, 'zero' 1; }
.ff-cv07-salt-zero { font-feature-settings: 'kern' 1, 'cv07' 1, 'salt' 1, 'zero' 1; }

.ff-ss01 { font-feature-settings: 'kern' 1, 'ss01' 1; -webkit-font-feature-settings: 'kern' 1, 'ss01' 1; -ms-font-feature-settings: 'kern' 1, 'ss01' 1; -moz-font-feature-settings: 'kern' 1, 'ss01' 1; }
.ff-ss02 { font-feature-settings: 'kern' 1, 'ss02' 1; -webkit-font-feature-settings: 'kern' 1, 'ss02' 1; -ms-font-feature-settings: 'kern' 1, 'ss02' 1; -moz-font-feature-settings: 'kern' 1, 'ss02' 1; }
.ff-ss03 { font-feature-settings: 'kern' 1, 'ss03' 1; -webkit-font-feature-settings: 'kern' 1, 'ss03' 1; -ms-font-feature-settings: 'kern' 1, 'ss03' 1; -moz-font-feature-settings: 'kern' 1, 'ss03' 1; }
.ff-cv01 { font-feature-settings: 'kern' 1, 'cv01' 1; -webkit-font-feature-settings: 'kern' 1, 'cv01' 1; -ms-font-feature-settings: 'kern' 1, 'cv01' 1; -moz-font-feature-settings: 'kern' 1, 'cv01' 1; }
.ff-cv02 { font-feature-settings: 'kern' 1, 'cv02' 1; -webkit-font-feature-settings: 'kern' 1, 'cv02' 1; -ms-font-feature-settings: 'kern' 1, 'cv02' 1; -moz-font-feature-settings: 'kern' 1, 'cv02' 1; }
.ff-cv03 { font-feature-settings: 'kern' 1, 'cv03' 1; -webkit-font-feature-settings: 'kern' 1, 'cv03' 1; -ms-font-feature-settings: 'kern' 1, 'cv03' 1; -moz-font-feature-settings: 'kern' 1, 'cv03' 1; }
.ff-cv04 { font-feature-settings: 'kern' 1, 'cv04' 1; -webkit-font-feature-settings: 'kern' 1, 'cv04' 1; -ms-font-feature-settings: 'kern' 1, 'cv04' 1; -moz-font-feature-settings: 'kern' 1, 'cv04' 1; }
.ff-cv05 { font-feature-settings: 'kern' 1, 'cv05' 1; -webkit-font-feature-settings: 'kern' 1, 'cv05' 1; -ms-font-feature-settings: 'kern' 1, 'cv05' 1; -moz-font-feature-settings: 'kern' 1, 'cv05' 1; }
.ff-cv06 { font-feature-settings: 'kern' 1, 'cv06' 1; -webkit-font-feature-settings: 'kern' 1, 'cv06' 1; -ms-font-feature-settings: 'kern' 1, 'cv06' 1; -moz-font-feature-settings: 'kern' 1, 'cv06' 1; }
.ff-cv07 { font-feature-settings: 'kern' 1, 'cv07' 1; -webkit-font-feature-settings: 'kern' 1, 'cv07' 1; -ms-font-feature-settings: 'kern' 1, 'cv07' 1; -moz-font-feature-settings: 'kern' 1, 'cv07' 1; }
.ff-cv08 { font-feature-settings: 'kern' 1, 'cv08' 1; -webkit-font-feature-settings: 'kern' 1, 'cv08' 1; -ms-font-feature-settings: 'kern' 1, 'cv08' 1; -moz-font-feature-settings: 'kern' 1, 'cv08' 1; }
.ff-cv09 { font-feature-settings: 'kern' 1, 'cv09' 1; -webkit-font-feature-settings: 'kern' 1, 'cv09' 1; -ms-font-feature-settings: 'kern' 1, 'cv09' 1; -moz-font-feature-settings: 'kern' 1, 'cv09' 1; }
.ff-cv10 { font-feature-settings: 'kern' 1, 'cv10' 1; -webkit-font-feature-settings: 'kern' 1, 'cv10' 1; -ms-font-feature-settings: 'kern' 1, 'cv10' 1; -moz-font-feature-settings: 'kern' 1, 'cv10' 1; }
.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);
  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); }
}
@media only screen and (max-width: 800px) {
  .charset-table { --columns: var(--columnsS); }
}
@media only screen and (max-width: 565px) {
  .charset-table { --columns: var(--columnsXS); }
}
