:root {
  --sky: #26b3e7;
  --page: #06bafb;
  --blue: #1204fb;
  --navy: #0a1a8c;
  --grey: #d4d4d4;
  --win: #bdbdbd;
  --yellow: #fbfb01;
  --ink: #0a0a1e;
  --pixel: 'Jersey 20', 'Courier New', monospace;
  --body: Verdana, Geneva, Tahoma, sans-serif;
  --raised:
    inset 1px 1px 0 #fff, inset -1px -1px 0 #4a4a4a, inset 2px 2px 0 #ececec,
    inset -2px -2px 0 #8a8a8a;
  --sunken:
    inset 1px 1px 0 #4a4a4a, inset -1px -1px 0 #fff, inset 2px 2px 0 #8a8a8a,
    inset -2px -2px 0 #ececec;
  --spring: cubic-bezier(0.2, 0.9, 0.25, 1.12);
  --ease: cubic-bezier(0.22, 0.8, 0.3, 1);
  --spin: 0deg;
}
* {
  box-sizing: border-box;
}
html,
body {
  height: 100%;
  margin: 0;
  overflow: hidden;
}
body {
  font: 14px/1.55 var(--body);
  color: var(--ink);
  background: var(--sky);
  font-synthesis: none;
}
a {
  color: inherit;
}
h1,
h2,
h3,
p {
  margin: 0;
}
button {
  font: inherit;
  color: inherit;
  border: 0;
  background: none;
  cursor: pointer;
}
img {
  display: block;
}
[hidden] {
  display: none !important;
}

@font-face {
  font-family: 'Jersey 20';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(/assets/fonts/jersey-20-latin-400-normal.woff2) format('woff2');
}

/* One focus ring for everything a keyboard can reach: 3px, dark on the light surfaces and yellow
   on the dark ones, so it shows against the nav, the blue frames and the grey windows alike. */
:focus-visible {
  outline: 3px solid var(--ring, var(--ink));
  outline-offset: 2px;
}
.nav,
.tabbar,
.titlebar,
.booking,
.foot {
  --ring: var(--yellow);
}

/* ---- sky ---- */
.sky {
  position: fixed;
  inset: 0;
  overflow: hidden;
  background: linear-gradient(#149fe0, #3dbdf0 55%, #a5e5f8);
}
.sky i {
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  will-change: transform;
  animation: drift linear infinite;
}
.sky .far {
  width: calc(100% + 440px);
  --tile: 440px;
  background: url(/assets/art/clouds-far.png);
  animation-duration: 170s;
}
.sky .near {
  width: calc(100% + 520px);
  --tile: 520px;
  background: url(/assets/art/clouds-near.png);
  animation-duration: 80s;
}
@keyframes drift {
  to {
    transform: translate3d(calc(var(--tile) * -1), 0, 0);
  }
}

/* ---- window ---- */
.desk {
  position: fixed;
  inset: 0 0 40px 0;
  padding: 20px;
  display: flex;
  justify-content: center;
}
.desk.max {
  padding: 0;
}
.win {
  width: min(1080px, 100%);
  height: 100%;
  display: flex;
  flex-direction: column;
  background: var(--win);
  padding: 4px;
  box-shadow:
    var(--raised),
    0 18px 50px rgba(0, 30, 90, 0.32);
  transform-origin: 12% 100%;
  animation: winopen 0.62s var(--spring) both;
  transition:
    transform 0.3s var(--ease),
    opacity 0.22s;
}
.desk.max .win {
  width: 100%;
}
.win.min {
  transform: translateY(58vh) scale(0.14);
  opacity: 0;
  pointer-events: none;
}
@keyframes winopen {
  from {
    transform: translateY(24px) scale(0.93);
    opacity: 0;
  }
}

.titlebar {
  height: 28px;
  flex: none;
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 0 3px 0 6px;
  color: #fff;
  font-weight: 700;
  font-size: 13px;
  background: linear-gradient(90deg, #0a2fc4, #0a55cc 58%, #0b78c8);
  user-select: none;
}
.titlebar .ti {
  width: 18px;
  height: 18px;
  flex: none;
}
.titlebar .tt {
  flex: 1;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  text-shadow: 1px 1px 0 rgba(0, 0, 60, 0.5);
}
/* Windows 98 caption buttons: raised grey with a pixel glyph. 20 by 19 keeps the 10 by 9 glyph on
   whole pixels. The title bar's 6 px gap stays between them (Windows 98 had none between minimise
   and maximise): buttons this small need the space to be easy to hit (WCAG 2.2 target size). */
.wbtn {
  width: 20px;
  height: 19px;
  display: grid;
  place-items: center;
  background: var(--grey);
  box-shadow: var(--raised);
  color: #000;
  flex: none;
}
.wbtn .glyph {
  display: block;
}
.wbtn:active {
  box-shadow: var(--sunken);
}
.wbtn:active .glyph {
  transform: translate(1px, 1px);
}
.menubar {
  display: flex;
  gap: 18px;
  padding: 3px 9px;
  font-size: 13px;
  user-select: none;
  flex: none;
}
.menubar span::first-letter {
  text-decoration: underline;
}
.titlebar .ti {
  position: relative;
  --u: 18px;
  border-radius: 50%;
  background: url(/assets/art/logo-fox-48.png) 0 0/100% 100% no-repeat #fff;
}

.toolbar {
  display: flex;
  align-items: center;
  gap: 3px;
  padding: 3px 6px;
  border-top: 1px solid #8a8a8a;
  box-shadow: inset 0 1px 0 #fff;
  flex: none;
}
.tool {
  position: relative;
  width: 42px;
  height: 40px;
  display: grid;
  place-items: center;
  transition: transform 0.12s var(--ease);
}
.tool img {
  width: 32px;
  height: 32px;
  image-rendering: pixelated;
  transition: transform 0.18s var(--spring);
}
.tool:hover {
  box-shadow: var(--raised);
}
.tool:hover img {
  transform: translateY(-1px) scale(1.06);
}
.tool:active {
  box-shadow: var(--sunken);
}
.tool:active img {
  transform: translate(1px, 1px);
}
.tool::after {
  content: attr(data-tip);
  position: absolute;
  top: calc(100% + 4px);
  left: 50%;
  transform: translate(-50%, -4px);
  background: #ffffc8;
  border: 1px solid #000;
  font-size: 11px;
  padding: 1px 6px;
  white-space: nowrap;
  opacity: 0;
  pointer-events: none;
  transition:
    opacity 0.14s 0.3s,
    transform 0.14s 0.3s;
  z-index: 30;
}
.tool:hover::after {
  opacity: 1;
  transform: translate(-50%, 0);
}
.sep {
  width: 2px;
  height: 30px;
  margin: 0 6px;
  background: #8a8a8a;
  box-shadow: 1px 0 0 #fff;
}
.throb {
  margin-left: auto;
  width: 52px;
  height: 44px;
  display: grid;
  place-items: center;
  background: var(--page);
  box-shadow: var(--sunken);
  position: relative;
  --u: 40px;
}

.addr {
  display: flex;
  align-items: center;
  gap: 7px;
  padding: 3px 7px 6px;
  font-size: 13px;
  flex: none;
}
.addr .field {
  flex: 1;
  height: 26px;
  background: #fff;
  box-shadow: var(--sunken);
  padding: 0 8px;
  font:
    14px/26px 'Courier New',
    monospace;
  white-space: nowrap;
  overflow: hidden;
}
.addr .field b {
  font-weight: 400;
  border-right: 2px solid transparent;
}
.addr .field.typing b {
  border-right-color: #000;
}

/* her logo: JS sets --spin on the page and only the ring turns, smoothly */
.spr,
.fox {
  position: absolute;
  inset: 0;
  margin: auto;
  width: var(--u);
  height: var(--u);
}
.spr {
  background: url(/assets/art/logo-ring-80.png) 0 0/100% 100% no-repeat;
  transform: rotate(var(--spin, 0deg));
}
.fox {
  background: url(/assets/art/logo-fox-80.png) 0 0/100% 100% no-repeat;
}

/* ---- scrolling page ---- */
#view {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  overflow-x: hidden;
  background: var(--page);
  box-shadow: var(--sunken);
  position: relative;
}
#view:focus-visible {
  outline: 3px solid var(--navy);
  outline-offset: -3px;
}
#view::-webkit-scrollbar {
  width: 18px;
}
#view::-webkit-scrollbar-track {
  background: conic-gradient(#fff 25%, #c6c6c6 0 50%, #fff 0 75%, #c6c6c6 0) 0 0/2px 2px;
}
#view::-webkit-scrollbar-thumb {
  background: var(--grey);
  box-shadow: var(--raised);
}
#view::-webkit-scrollbar-button:single-button {
  height: 18px;
  background-color: var(--grey);
  box-shadow: var(--raised);
  background-repeat: no-repeat;
  background-position: center;
}
#view::-webkit-scrollbar-button:single-button:vertical:decrement {
  background-image: url(/assets/art/arrow-up.png);
}
#view::-webkit-scrollbar-button:single-button:vertical:increment {
  background-image: url(/assets/art/arrow-down.png);
}

.banner {
  position: relative;
  height: 208px;
  overflow: hidden;
  margin: 18px 22px 0;
  border: 2px solid var(--navy);
  background: linear-gradient(#22a6f2, #9be3ff 78%);
}
.hill {
  position: absolute;
  left: 0;
  right: -480px;
  bottom: 0;
  height: 132px;
  background-repeat: repeat-x;
  background-position: 0 100%;
  animation: roll linear infinite;
  will-change: transform;
}
.hill.far {
  background-image: url(/assets/art/hills-far.png);
  animation-duration: 64s;
  bottom: 16px;
}
.hill.near {
  background-image: url(/assets/art/hills-near.png);
  animation-duration: 30s;
  bottom: 12px;
}
@keyframes roll {
  to {
    transform: translate3d(-480px, 0, 0);
  }
}
.road {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 18px;
  background: #23233a;
  overflow: hidden;
}
.road::before {
  content: '';
  position: absolute;
  left: 0;
  right: -64px;
  top: 7px;
  height: 4px;
  background: repeating-linear-gradient(90deg, var(--yellow) 0 32px, transparent 32px 64px);
  animation: dash 1.1s linear infinite;
}
@keyframes dash {
  to {
    transform: translateX(-64px);
  }
}
.rider {
  position: absolute;
  right: 7%;
  bottom: 10px;
  width: 84px;
  height: 60px;
  overflow: hidden;
  animation: bob 0.64s ease-in-out infinite;
}
/* the two-frame sprite sheet steps sideways inside the box: transform only */
.rider::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 168px;
  height: 60px;
  background: url(/assets/art/rider.png) 0 0/168px 60px no-repeat;
  image-rendering: pixelated;
  animation: pedal 0.32s steps(1) infinite;
}
@keyframes pedal {
  50% {
    transform: translateX(-84px);
  }
}
@keyframes bob {
  50% {
    transform: translateY(-2px);
  }
}
.brand {
  position: absolute;
  inset: 0 0 18px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 22px;
  padding-right: 9%;
}
.logo {
  display: block;
  color: inherit;
  text-decoration: none;
  position: relative;
  width: 160px;
  height: 160px;
  flex: none;
  --u: 160px;
  filter: drop-shadow(4px 5px 0 rgba(0, 0, 70, 0.3));
  animation: logoin 0.7s 0.18s var(--spring) both;
}
.logo .spr {
  background-image: url(/assets/art/logo-ring-320.png);
}
.logo .fox {
  background-image: url(/assets/art/logo-fox-320.png);
}
@keyframes logoin {
  from {
    transform: scale(0.4) rotate(-14deg);
    opacity: 0;
  }
}
.wordmark {
  font: 400 clamp(56px, 8.6vw, 96px)/0.9 var(--pixel);
  color: #fff;
  letter-spacing: 0.01em;
  white-space: nowrap;
  text-shadow:
    3px 0 0 #000,
    -3px 0 0 #000,
    0 3px 0 #000,
    0 -3px 0 #000,
    3px 3px 0 #000,
    -3px -3px 0 #000,
    3px -3px 0 #000,
    -3px 3px 0 #000,
    7px 7px 0 var(--blue);
}
.wordmark .w {
  display: inline-block;
  white-space: nowrap;
}
/* A longer business name gets a smaller wordmark that may wrap, so it is never cut off.
   The size comes from the server (data-size) and stays inside the banner's fixed height. */
.wordmark:not([data-size='s']) {
  white-space: normal;
  overflow-wrap: anywhere;
  line-height: 0.95;
}
.wordmark:not([data-size='s']) .w {
  max-width: 100%;
  white-space: normal;
}
.wordmark[data-size='m'] {
  font-size: clamp(32px, 4.6vw, 52px);
}
.wordmark[data-size='l'] {
  font-size: clamp(24px, 3.2vw, 36px);
}
.wordmark[data-size='xl'] {
  font-size: clamp(18px, 2.2vw, 26px);
}
/* The outline is thinner on smaller letters, or each letter's outline covers its neighbour. */
.wordmark[data-size='m'] {
  text-shadow:
    2px 0 0 #000,
    -2px 0 0 #000,
    0 2px 0 #000,
    0 -2px 0 #000,
    2px 2px 0 #000,
    -2px -2px 0 #000,
    2px -2px 0 #000,
    -2px 2px 0 #000,
    4px 4px 0 var(--blue);
}
.wordmark[data-size='l'],
.wordmark[data-size='xl'] {
  text-shadow:
    1px 0 0 #000,
    -1px 0 0 #000,
    0 1px 0 #000,
    0 -1px 0 #000,
    1px 1px 0 #000,
    -1px -1px 0 #000,
    1px -1px 0 #000,
    -1px 1px 0 #000,
    2px 2px 0 var(--blue);
}
.tagline[data-long] {
  font-size: clamp(15px, 1.7vw, 19px);
  line-height: 1.05;
}
.brand > div:last-child {
  min-width: 0;
}
.tagline {
  max-width: 100%;
  overflow-wrap: anywhere;
}
/* Each letter's hop delay step comes from its data-i (set by the server; a style attribute is not allowed). */
.wordmark [data-i='0'] {
  --i: 0;
}
.wordmark [data-i='1'] {
  --i: 1;
}
.wordmark [data-i='2'] {
  --i: 2;
}
.wordmark [data-i='3'] {
  --i: 3;
}
.wordmark [data-i='4'] {
  --i: 4;
}
.wordmark [data-i='5'] {
  --i: 5;
}
.wordmark [data-i='6'] {
  --i: 6;
}
.wordmark [data-i='7'] {
  --i: 7;
}
.wordmark [data-i='8'] {
  --i: 8;
}
.wordmark [data-i='9'] {
  --i: 9;
}
.wordmark [data-i='10'] {
  --i: 10;
}
.wordmark [data-i='11'] {
  --i: 11;
}
.wordmark [data-i='12'] {
  --i: 12;
}
.wordmark [data-i='13'] {
  --i: 13;
}
.wordmark [data-i='14'] {
  --i: 14;
}
.wordmark [data-i='15'] {
  --i: 15;
}
.wordmark [data-i='16'] {
  --i: 16;
}
.wordmark [data-i='17'] {
  --i: 17;
}
.wordmark [data-i='18'] {
  --i: 18;
}
.wordmark [data-i='19'] {
  --i: 19;
}
.wordmark [data-i='20'] {
  --i: 20;
}
.wordmark [data-i='21'] {
  --i: 21;
}
.wordmark [data-i='22'] {
  --i: 22;
}
.wordmark [data-i='23'] {
  --i: 23;
}
.wordmark [data-i='24'] {
  --i: 24;
}
.wordmark [data-i='25'] {
  --i: 25;
}
.wordmark [data-i='26'] {
  --i: 26;
}
.wordmark [data-i='27'] {
  --i: 27;
}
.wordmark [data-i='28'] {
  --i: 28;
}
.wordmark [data-i='29'] {
  --i: 29;
}
.wordmark [data-i='30'] {
  --i: 30;
}
.wordmark .w span {
  display: inline-block;
  animation: hop 0.56s calc(0.34s + var(--i) * 0.036s) var(--spring) both;
}
@keyframes hop {
  from {
    transform: translateY(28px) scale(0.7);
    opacity: 0;
  }
}
.tagline {
  display: inline-block;
  margin-top: 12px;
  padding: 3px 10px 4px;
  background: var(--navy);
  box-shadow: 3px 3px 0 rgba(0, 0, 50, 0.3);
  font: 400 clamp(19px, 2.3vw, 25px)/1 var(--pixel);
  color: var(--yellow);
  letter-spacing: 0.03em;
  animation: rise 0.5s 0.85s var(--ease) both;
}
@keyframes rise {
  from {
    transform: translateY(10px);
    opacity: 0;
  }
}

.nav {
  position: sticky;
  top: 0;
  z-index: 20;
  display: flex;
  justify-content: center;
  gap: clamp(14px, 3.2vw, 38px);
  padding: 11px 0 12px;
  /* White letters need a dark ground to reach 4.5:1; the page sky is too light for them. */
  background: var(--navy);
  box-shadow: 0 2px 0 rgba(0, 0, 90, 0.16);
}
.nav a {
  position: relative;
  font: 400 25px/1 var(--pixel);
  color: #fff;
  text-decoration: none;
  text-shadow: 2px 2px 0 #000;
  transition: transform 0.16s var(--spring);
}
.nav a:hover {
  transform: translateY(-2px);
}
.nav a:active {
  transform: translateY(1px);
}
.nav .ink {
  position: absolute;
  left: 0;
  bottom: 6px;
  height: 5px;
  width: 1px;
  transform-origin: 0 0;
  transform: scaleX(40);
  background: linear-gradient(var(--yellow) 0 3px, var(--blue) 3px 5px);
  transition: transform 0.34s var(--spring);
}
.nav {
  flex-wrap: wrap;
  row-gap: 6px;
}
/* no menu link belongs to this page, so there is nothing to underline */
.nav .ink.none {
  opacity: 0;
}

.wrap {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 248px;
  gap: 24px;
  padding: 6px 22px 26px;
}
.stack {
  display: grid;
  gap: 24px;
  min-width: 0;
}
section,
.rev[id] {
  scroll-margin-top: 58px;
}
.panel {
  display: grid;
  grid-template-columns: 62px minmax(0, 1fr);
  gap: 12px;
  background: var(--blue);
  padding: 14px 14px 14px 10px;
}
.badge {
  width: 48px;
  height: 48px;
  margin: 0 auto;
  background: #fff;
  padding: 0;
  box-shadow: var(--sunken);
  display: grid;
  place-items: center;
}
.badge img {
  width: 32px;
  height: 32px;
  image-rendering: pixelated;
}
.card {
  overflow-wrap: anywhere;
  background: var(--grey);
  box-shadow: var(--raised);
  padding: 16px 18px;
  min-width: 0;
}
.card h2 {
  font: 400 33px/1.05 var(--pixel);
  color: var(--blue);
  margin-bottom: 9px;
  letter-spacing: 0.01em;
}
.card h3 {
  font: 400 22px/1.1 var(--pixel);
  color: var(--navy);
  margin: 0 0 5px;
}
.card > p + p {
  margin-top: 8px;
}
.demo-tag {
  display: inline-block;
  margin-left: 6px;
  vertical-align: 3px;
  font: 700 10px/1 var(--body);
  background: var(--yellow);
  padding: 3px 5px;
  color: #000;
}

.cta {
  display: flex;
  gap: 12px;
  align-items: center;
  flex-wrap: wrap;
  margin-top: 14px;
}
.btn {
  display: inline-block;
  background: var(--yellow);
  padding: 8px 20px 9px;
  font: 400 23px/1 var(--pixel);
  color: var(--blue);
  text-decoration: none;
  max-width: 100%;
  overflow-wrap: anywhere;
  box-shadow:
    inset 1px 1px 0 #fffbd0,
    inset -1px -1px 0 #4a4a00,
    inset -2px -2px 0 #b9b900,
    3px 3px 0 rgba(0, 0, 50, 0.35);
  transition: transform 0.12s var(--ease);
}
.btn:hover {
  transform: translate(-1px, -2px);
  box-shadow:
    inset 1px 1px 0 #fffbd0,
    inset -1px -1px 0 #4a4a00,
    inset -2px -2px 0 #b9b900,
    5px 6px 0 rgba(0, 0, 50, 0.32);
  background: #ffff5a;
}
.btn:active {
  transform: translate(2px, 2px);
  box-shadow:
    inset 1px 1px 0 #4a4a00,
    inset -1px -1px 0 #fffbd0,
    1px 1px 0 rgba(0, 0, 50, 0.35);
}
.btn.alt {
  background: var(--grey);
  color: #000;
  box-shadow:
    var(--raised),
    3px 3px 0 rgba(0, 0, 50, 0.25);
}
.btn.alt:hover {
  background: #e6e6e6;
}
.chip {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 5px 10px;
  background: var(--grey);
  box-shadow: var(--sunken);
  font-size: 13px;
  font-weight: 700;
  line-height: 1.2;
  color: #000;
  text-decoration: none;
}
.chip img {
  width: 16px;
  height: 16px;
  image-rendering: pixelated;
}
.wrap.solo {
  grid-template-columns: minmax(0, 1fr);
}
.btn.small {
  font-size: 20px;
  padding: 5px 12px;
}
.empty {
  margin-top: 4px;
  font-style: italic;
}
/* the page script focuses a section after an in-page link; no ring around the whole block */
section[tabindex='-1']:focus,
.rev[id][tabindex='-1']:focus {
  outline: none;
}

/* gallery */
.grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 12px;
  margin-top: 4px;
}
.thumb {
  position: relative;
  display: block;
  width: 100%;
  padding: 5px;
  background: var(--grey);
  box-shadow: var(--raised);
  text-align: left;
  text-decoration: none;
  transition: transform 0.22s var(--spring);
}
.thumb:hover {
  transform: translateY(-4px) rotate(-0.5deg);
  box-shadow:
    var(--raised),
    5px 7px 0 rgba(0, 0, 70, 0.3);
}
.thumb:active {
  transform: translateY(0) scale(0.98);
}
.thumb .frame {
  position: relative;
  display: block;
  aspect-ratio: 4/3;
  overflow: hidden;
  box-shadow: var(--sunken);
  background: #333;
}
.thumb img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.thumb .dith {
  image-rendering: pixelated;
}
.thumb .real {
  opacity: 0;
  transform: scale(1.07);
  transition:
    opacity 0.36s var(--ease),
    transform 0.5s var(--ease);
}
.thumb:hover .real,
.thumb:focus-visible .real {
  opacity: 1;
  transform: none;
}
.thumb small {
  display: block;
  padding: 4px 2px 1px;
  font-size: 11px;
  line-height: 1.3;
  overflow-wrap: anywhere;
}

/* prices */
.tabs {
  display: flex;
  flex-wrap: wrap;
  gap: 2px;
  margin: 2px 0 -1px;
  position: relative;
  z-index: 1;
}
.tab {
  padding: 6px 14px 5px;
  background: #c2c2c2;
  box-shadow:
    inset 1px 1px 0 #fff,
    inset -1px 0 0 #4a4a4a;
  font: 400 20px/1 var(--pixel);
  max-width: 100%;
  overflow-wrap: anywhere;
  transform: translateY(3px);
  transition: transform 0.18s var(--spring);
}
.tab[aria-selected='true'] {
  background: #e6e6e6;
  transform: none;
}
.sheet {
  background: #e6e6e6;
  box-shadow:
    inset 1px 1px 0 #fff,
    inset -1px -1px 0 #4a4a4a;
  padding: 8px;
}
.prices {
  width: 100%;
  border-collapse: collapse;
  /* a fixed price column: a very long label or price wraps in its own cell, never widens the sheet */
  table-layout: fixed;
}
.prices td {
  padding: 7px 9px;
  border-bottom: 1px dotted #8a8a8a;
}
.prices td:last-child {
  text-align: right;
  font: 400 23px/1 var(--pixel);
  width: 8em;
  overflow-wrap: anywhere;
}
.prices tr:hover td {
  background: var(--navy);
  color: #fff;
}
.prices caption {
  padding: 2px 9px 4px;
  text-align: left;
  font: 400 21px/1.1 var(--pixel);
  color: var(--navy);
}
.prices td:first-child {
  overflow-wrap: anywhere;
}
.prices tr {
  animation: rowin 0.3s var(--ease) both;
}
.prices tr:nth-child(2) {
  animation-delay: 0.04s;
}
.prices tr:nth-child(3) {
  animation-delay: 0.08s;
}
.prices tr:nth-child(4) {
  animation-delay: 0.12s;
}
.prices tr:nth-child(5) {
  animation-delay: 0.16s;
}
.prices tr:nth-child(n + 6) {
  animation-delay: 0.2s;
}
@keyframes rowin {
  from {
    opacity: 0;
    transform: translateX(-10px);
  }
}

/* map */
.two {
  display: grid;
  grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr);
  gap: 16px;
}
.map {
  display: block;
  width: 100%;
  height: auto;
  box-shadow: var(--sunken);
  background: #cfe9b8;
  image-rendering: pixelated;
}
.steps p {
  margin: 0;
}
.steps .btn {
  font-size: 20px;
  padding: 6px 13px;
}
.steps {
  margin: 0;
  padding: 0;
  list-style: none;
  display: grid;
  gap: 9px;
  font-size: 13px;
}
.steps b {
  display: block;
  font: 400 21px/1.1 var(--pixel);
  color: var(--navy);
}

/* form */
.form {
  display: grid;
  gap: 10px;
}
.form label {
  display: grid;
  gap: 3px;
  font-size: 12px;
  font-weight: 700;
}
.form input,
.form select,
.form textarea {
  font: 14px var(--body);
  padding: 8px 9px;
  border: 0;
  border-radius: 0;
  background: #fff;
  box-shadow: var(--sunken);
  outline: 2px solid transparent;
  outline-offset: 1px;
  width: 100%;
}
.form input:focus,
.form select:focus,
.form textarea:focus {
  outline-color: var(--blue);
  background: #fffff0;
}
.form textarea {
  min-height: 92px;
  resize: vertical;
}
.reach {
  display: grid;
  gap: 9px;
  align-content: start;
  font-size: 13px;
}
.hp {
  position: absolute;
  left: -9999px;
  width: 1px;
  height: 1px;
  overflow: hidden;
}
.reach a,
.reach div {
  display: block;
  background: #e6e6e6;
  padding: 8px 10px;
  box-shadow: var(--raised);
  text-decoration: none;
  transition: transform 0.16s var(--spring);
}
.reach a:hover {
  transform: translateX(3px);
}
.reach b {
  display: block;
  font: 400 21px/1.15 var(--pixel);
  color: var(--navy);
}

/* Frit lærred: pieces placed by percentage. The HTML is in reading order, so a phone, which gets
   the pieces in normal flow (no position, size, tilt or stacking), reads the same order as a
   computer. Position, size, rotation and z apply only above the phone breakpoint of
   90-mobile.css; "not all and (max-width: 760px)" is its exact complement. */
.fl-canvas {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 10px;
  min-width: 0;
}
.fl-piece {
  min-width: 0;
  overflow-wrap: anywhere;
}
.fl-text {
  padding: 10px 12px;
  background: var(--grey);
  box-shadow: var(--raised);
}
.fl-text p + p {
  margin-top: 6px;
}
.fl-photo {
  padding: 4px;
  background: var(--grey);
  box-shadow: var(--raised);
}
.fl-photo img {
  display: block;
  width: 100%;
  aspect-ratio: 4/3;
  object-fit: cover;
  background: #333;
  box-shadow: var(--sunken);
}
/* a box is decoration: a thin band between the stacked pieces on a phone */
.fl-box {
  height: 10px;
  background: var(--blue);
  box-shadow: var(--sunken);
}
@media not all and (max-width: 760px) {
  .fl-canvas {
    display: block;
    position: relative;
    overflow: hidden;
    /* z values stay inside the block: they must never reach the sticky nav's layer */
    isolation: isolate;
    /* height from the width, reserved before anything loads */
    aspect-ratio: calc(1 / var(--fl-r));
  }
  .fl-piece {
    position: absolute;
    left: calc(var(--fl-x) * 1%);
    top: calc(var(--fl-y) * 1%);
    width: calc(var(--fl-w) * 1%);
    height: calc(var(--fl-h) * 1%);
    z-index: var(--fl-z);
    transform: rotate(calc(var(--fl-a) * 1deg));
  }
  .fl-text {
    overflow: hidden;
  }
  .fl-photo img {
    height: 100%;
    aspect-ratio: auto;
  }
}

/* bikes: the Cykler cards and the bike page */
.bikes {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 200px), 1fr));
  gap: 12px;
  margin-top: 4px;
}
.bike {
  display: flex;
  flex-direction: column;
  gap: 5px;
  min-width: 0;
  padding: 5px 5px 8px;
  background: var(--grey);
  box-shadow: var(--raised);
  color: var(--ink);
  text-decoration: none;
  transition: transform 0.22s var(--spring);
}
.bike:hover,
.bike:focus-visible {
  transform: translateY(-4px) rotate(-0.5deg);
}
.bike:active {
  transform: translateY(0) scale(0.98);
}
.bike .frame {
  position: relative;
  display: block;
  aspect-ratio: 4/3;
  overflow: hidden;
  box-shadow: var(--sunken);
  background: #333;
}
.bike .frame img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: contain;
}
.bike .dith {
  image-rendering: pixelated;
}
/* The real photo covers the dithered one at once, so it shows on a phone with no hover. */
.bike .real,
.bike-photos .real {
  opacity: 1;
  transform: none;
}
/* The whole photo sits inside the 4:3 frame. Its own dark backdrop keeps the dithered
   placeholder, which is a 4:3 crop, from showing in the leftover space. */
.bike-photos img {
  object-fit: contain;
}
.bike .real,
.bike-photos .real {
  background: #333;
}
.bike-noimg {
  background: repeating-conic-gradient(#8a8a8a 0 25%, #b4b4b4 0 50%) 0 0 / 8px 8px;
}
.bike-name {
  padding: 0 3px;
  font: 400 22px/1.1 var(--pixel);
  overflow-wrap: anywhere;
}
.bike-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  padding: 0 3px;
}
.bike-price {
  font-weight: 700;
  overflow-wrap: anywhere;
}
.bike-tag {
  display: inline-block;
  padding: 0 7px;
  font: 400 17px/1.25 var(--pixel);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  background: var(--yellow);
  color: var(--ink);
  box-shadow: var(--raised);
}
/* Sold is a quiet grey label, so it does not read as a warning. */
.bike-tag.sold {
  background: #9a9a9a;
}
.bike-back {
  display: inline-block;
  margin-bottom: 6px;
  overflow-wrap: anywhere;
}
.bike-title {
  margin: 0 0 8px;
  font: 400 34px/1.1 var(--pixel);
  overflow-wrap: anywhere;
}
.bike-title .bike-tag {
  margin-left: 10px;
  vertical-align: middle;
}
/* One big cover over smaller photos. */
.bike-photos {
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 110px), 1fr));
  margin-bottom: 10px;
}
.bike-photos .bike-cover {
  grid-column: 1 / -1;
}
.bike-price.big {
  margin: 6px 0;
  font: 400 28px/1.1 var(--pixel);
}
.bike-facts {
  margin: 10px 0;
}
.bike-facts div {
  display: flex;
  flex-wrap: wrap;
  gap: 2px 12px;
  padding: 5px 0;
  border-bottom: 1px dotted #888;
}
.bike-facts dt {
  flex: 0 0 9em;
  max-width: 100%;
  font-weight: 700;
  overflow-wrap: anywhere;
}
.bike-facts dd {
  flex: 1 1 8em;
  min-width: 0;
  margin: 0;
  overflow-wrap: anywhere;
}

/* sidebar */
aside {
  position: sticky;
  top: 58px;
  align-self: start;
  display: grid;
  gap: 12px;
}
.sidehead {
  overflow-wrap: anywhere;
  background: var(--blue);
  color: #fff;
  font: 400 23px/1 var(--pixel);
  padding: 8px 11px 9px;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}
.booking {
  font-size: 12px;
  color: #fff;
  /* White on the page sky is 2.2:1; on navy it passes. */
  background: var(--navy);
  text-shadow: 1px 1px 0 rgba(0, 0, 90, 0.65);
}
.booking p {
  margin: 0;
  overflow-wrap: anywhere;
  padding: 6px 7px;
  border-bottom: 1px dotted rgba(255, 255, 255, 0.5);
}
.booking-rows {
  margin: 0;
  padding: 0;
  list-style: none;
}
.booking-rows li {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  overflow-wrap: anywhere;
  padding: 3px 7px;
  border-bottom: 1px dotted rgba(255, 255, 255, 0.5);
}
.booking-rows li span:last-child {
  min-width: 0;
  text-align: right;
}
.booking-rows a {
  color: #fff;
  text-decoration: underline;
}
.odo {
  display: inline-flex;
  gap: 1px;
  padding: 2px;
  background: linear-gradient(#3a3ad0, #8a5ae0);
  box-shadow: var(--raised);
}
.odo i {
  display: block;
  width: 24px;
  height: 32px;
  overflow: hidden;
  background: linear-gradient(#1c1078, #4a2ac0 50%, #1c1078);
  box-shadow: inset 0 0 0 1px rgba(0, 0, 60, 0.5);
}
.odo i b {
  display: block;
  transition: transform 1.5s calc(var(--p) * 0.1s) var(--ease);
}
.odo i b span {
  display: block;
  height: 32px;
  text-align: center;
  font: 400 30px/32px var(--pixel);
  background: linear-gradient(#fffb7a, #ffc03a 55%, #ff78c4);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
.odoc {
  display: block;
  overflow-wrap: anywhere;
  font-size: 11px;
  color: #fff;
  margin: 2px 0 8px;
  padding: 3px 7px;
  background: var(--navy);
  text-shadow: 1px 1px 0 rgba(0, 0, 90, 0.65);
}
.soon {
  position: relative;
  overflow: hidden;
  padding: 6px;
}
/* the stripes slide by one tile (34px) on a layer: transform only */
.soon::before {
  content: '';
  position: absolute;
  top: 0;
  bottom: 0;
  left: -34px;
  right: 0;
  background: repeating-linear-gradient(-45deg, #fbfb01 0 12px, #111 12px 24px);
  background-size: 34px 34px;
  animation: stripes 0.9s linear infinite;
}
@keyframes stripes {
  to {
    transform: translateX(34px);
  }
}
.soon div {
  position: relative;
  background: var(--grey);
  box-shadow: var(--raised);
  padding: 8px;
  text-align: center;
  font-size: 12px;
}
.soon h2 {
  display: block;
  font: 400 25px/1.05 var(--pixel);
  color: var(--blue);
}
.odos {
  padding: 9px 0 0 7px;
}
/* each wheel rolls a little after the one before it; set here because pages carry no inline styles */
.odo i:nth-child(1) {
  --p: 0;
}
.odo i:nth-child(2) {
  --p: 1;
}
.odo i:nth-child(3) {
  --p: 2;
}
.odo i:nth-child(4) {
  --p: 3;
}
.odo i:nth-child(5) {
  --p: 4;
}
.odo i:nth-child(6) {
  --p: 5;
}
.soon p {
  margin: 0;
}

/* footer */
.foot {
  padding: 2px 22px 22px;
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  align-items: center;
  color: #fff;
  font-size: 12px;
  text-shadow: 1px 1px 0 rgba(0, 0, 90, 0.6);
}
.b88 {
  width: 88px;
  height: 31px;
  display: grid;
  place-items: center;
  text-align: center;
  font: 400 16px/0.95 var(--pixel);
  text-shadow: none;
  box-shadow: var(--raised);
  transition: transform 0.16s var(--spring);
}
.b88:hover {
  transform: translateY(-3px);
}
.foot p {
  margin-left: auto;
  padding: 3px 8px;
  background: var(--navy);
  min-width: 0;
  overflow-wrap: anywhere;
}
.b88 {
  overflow: hidden;
}
.b88.blue {
  background: var(--blue);
  color: var(--yellow);
}
.b88.yellow {
  background: var(--yellow);
  color: var(--blue);
}
.b88.white {
  background: #fff;
  color: #d81e1e;
}

/* status + taskbar */
.statusbar {
  display: flex;
  gap: 3px;
  height: 24px;
  margin-top: 3px;
  font-size: 12px;
  flex: none;
}
.statusbar > * {
  box-shadow: var(--sunken);
  padding: 0 7px;
  line-height: 24px;
  white-space: nowrap;
  overflow: hidden;
}
.statusbar .st {
  flex: 1;
}
.meter {
  width: 128px;
  padding: 4px !important;
}
.meter i {
  display: block;
  height: 100%;
  width: 100%;
  transform: scaleX(0);
  transform-origin: 0 0;
  background: repeating-linear-gradient(90deg, #0a2fc4 0 8px, transparent 8px 10px);
}
.meter.run i {
  animation: load 0.5s var(--ease) forwards;
}
@keyframes load {
  to {
    transform: scaleX(1);
  }
}
.taskbar {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  height: 40px;
  background: var(--win);
  box-shadow:
    inset 0 1px 0 #fff,
    inset 0 2px 0 #ececec;
  display: flex;
  align-items: center;
  gap: 5px;
  padding: 4px 5px 2px;
  z-index: 40;
}
.start {
  height: 32px;
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 0 9px;
  background: var(--grey);
  box-shadow: var(--raised);
  font-weight: 700;
  transition: transform 0.1s;
}
.start img {
  width: 20px;
  height: 20px;
}
.start[aria-expanded='true'],
.start:active {
  box-shadow: var(--sunken);
}
.task {
  height: 32px;
  width: 220px;
  padding: 0 9px;
  text-align: left;
  font-size: 12px;
  font-weight: 700;
  box-shadow: var(--sunken);
  background: conic-gradient(#fff 25%, #d4d4d4 0 50%, #fff 0 75%, #d4d4d4 0) 0 0/2px 2px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.task.off {
  font-weight: 400;
  background: var(--grey);
  box-shadow: var(--raised);
}
.tray {
  margin-left: auto;
  height: 32px;
  padding: 0 11px;
  box-shadow: var(--sunken);
  display: flex;
  align-items: center;
  gap: 7px;
  font-size: 12px;
}
.tabbar {
  display: none;
}
.startmenu {
  position: fixed;
  left: 5px;
  bottom: 40px;
  width: 228px;
  display: flex;
  background: var(--grey);
  box-shadow:
    var(--raised),
    4px 4px 0 rgba(0, 0, 60, 0.3);
  z-index: 41;
  max-height: calc(100dvh - 56px);
  transform-origin: 0 100%;
  transform: scaleY(0.2);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition:
    transform 0.2s var(--spring),
    opacity 0.12s,
    visibility 0s linear 0.2s;
}
.startmenu.on {
  transform: none;
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transition-delay: 0s;
}
.startmenu .band {
  width: 28px;
  background: linear-gradient(0deg, #0a2fc4, #0b78c8);
  color: #fff;
  font: 400 23px/28px var(--pixel);
  writing-mode: vertical-rl;
  transform: rotate(180deg);
  padding: 9px 0;
  /* The band is as tall as the menu, never taller: a long name is cut off with dots. */
  contain: size;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.startmenu nav {
  flex: 1;
  min-width: 0;
  overflow-y: auto;
  padding: 4px;
}
.startmenu a {
  overflow-wrap: anywhere;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 6px 9px;
  text-decoration: none;
  font-size: 13px;
}
.startmenu a:hover {
  background: var(--navy);
  color: #fff;
}
.startmenu img {
  width: 24px;
  height: 24px;
  image-rendering: auto;
}
.morelist {
  display: none;
}

/* dialogs */
dialog {
  border: 0;
  padding: 4px;
  background: var(--win);
  box-shadow:
    var(--raised),
    8px 10px 0 rgba(0, 0, 50, 0.4);
  color: var(--ink);
  max-width: min(860px, calc(100vw - 28px));
  width: 100%;
}
dialog::backdrop {
  background: conic-gradient(
      rgba(0, 0, 60, 0.58) 25%,
      rgba(0, 0, 60, 0.28) 0 50%,
      rgba(0, 0, 60, 0.58) 0 75%,
      rgba(0, 0, 60, 0.28) 0
    )
    0 0/4px 4px;
  animation: fade 0.24s;
}
@keyframes fade {
  from {
    opacity: 0;
  }
}
.lbimg {
  display: block;
  width: 100%;
  height: auto;
  max-height: 78vh;
  object-fit: contain;
  box-shadow: var(--sunken);
  background: #333;
}
.lbfoot {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 3px 2px;
  font-size: 13px;
}
.lbfoot .c {
  flex: 1;
}
.pb {
  height: 24px;
  margin: 10px 0 4px;
  box-shadow: var(--sunken);
  background: #fff;
  position: relative;
  overflow: hidden;
}
.pb i {
  position: absolute;
  inset: 3px;
  transform: scaleX(0);
  transform-origin: 0 0;
  background: repeating-linear-gradient(90deg, #0a2fc4 0 10px, transparent 10px 12px);
  transition: transform 1.5s var(--ease);
}
.pb.run i {
  transform: scaleX(1);
}
#sendbox {
  max-width: 380px;
}
#sendbox .in {
  padding: 14px 14px 10px;
  font-size: 13px;
}
#sendbox .okrow {
  text-align: right;
  margin-top: 10px;
}

/* "Mailadressen er kopieret": the note that appears next to a clicked mail link. */
.mailnote {
  position: fixed;
  z-index: 60;
  max-width: calc(100vw - 16px);
  background: #ffffc8;
  border: 1px solid #000;
  box-shadow: 2px 2px 0 rgb(0 0 0 / 0.35);
  color: #000;
  font-size: 13px;
  padding: 2px 8px;
  pointer-events: none;
  transition: opacity 0.14s;
}
.mailnote:empty {
  opacity: 0;
  visibility: hidden;
}

.rev {
  opacity: 0;
  transform: translateY(16px);
  transition:
    opacity 0.5s var(--ease),
    transform 0.55s var(--spring);
  transition-delay: calc(var(--d, 0) * 0.06s);
}
.rev.in {
  opacity: 1;
  transform: none;
}
/* Failsafe: if the page script never runs (a bad connection, an early error), everything
   still fades in after about three seconds. The script's first action is to put `js` on the
   page, which switches this off and leaves the scroll reveal in charge. */
html:not(.js) .rev {
  animation: reveal-late 0.5s 3s var(--ease) both;
}
@keyframes reveal-late {
  from {
    opacity: 0;
    transform: translateY(16px);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

/* A page reached from another page of this site (boot.js puts `again` on the html element).
   The banner, window and blocks are the same furniture as on the page before, so they are
   simply there: no window opening, no logo or letters hopping in, no blocks fading in.
   Odometers still roll when they scroll into view (the script adds `in` as usual). */
html.again .win,
html.again .logo,
html.again .wordmark .w span,
html.again .tagline {
  animation: none;
}
html.again .rev {
  animation: none;
  opacity: 1;
  transform: none;
  transition: none;
}

@media (max-width: 760px) {
  :root {
    /* The bottom bar, plus the phone's home or gesture bar under it (viewport-fit=cover). */
    --tabbar-h: calc(58px + env(safe-area-inset-bottom, 0px));
  }
  body {
    font-size: 15px;
  }
  .desk,
  .desk.max {
    inset: 0 0 var(--tabbar-h) 0;
    padding: 0;
  }
  .win {
    padding: 0;
    box-shadow: none;
    width: 100%;
  }
  .menubar,
  .toolbar,
  .addr,
  .statusbar,
  .nav,
  .start,
  .task,
  .tray,
  .startmenu {
    display: none;
  }
  .titlebar {
    height: 40px;
    padding-left: 9px;
  }
  /* the window's own buttons go; the photo viewer keeps its close button, big enough to tap */
  .win .wbtn {
    display: none;
  }
  dialog .wbtn {
    width: 40px;
    height: 32px;
  }
  /* twice the size, still on whole pixels */
  dialog .wbtn .glyph {
    width: 20px;
    height: 18px;
  }
  #view {
    box-shadow: none;
  }
  #view::-webkit-scrollbar {
    display: none;
  }
  .banner {
    margin: 10px 10px 0;
    height: 150px;
  }
  .brand {
    gap: 10px;
    padding: 0 0 4px;
    inset: 0 0 14px;
    justify-content: flex-start;
    padding-left: 10px;
  }
  .logo {
    width: 80px;
    height: 80px;
    --u: 80px;
    filter: none;
  }
  .wordmark {
    /* The short name must fit beside the logo at every phone width. The name is about 5.1 times
       its font size wide; what is left of the screen after the banner's margin and border, the
       logo, the gaps and the outline shadow is about 100vw - 136px. 50px is the largest it gets. */
    font-size: clamp(24px, calc((100vw - 140px) / 5.15), 50px);
    white-space: nowrap;
    text-shadow:
      2px 0 0 #000,
      -2px 0 0 #000,
      0 2px 0 #000,
      0 -2px 0 #000,
      2px 2px 0 #000,
      -2px -2px 0 #000,
      2px -2px 0 #000,
      -2px 2px 0 #000,
      4px 4px 0 var(--blue);
  }
  .wordmark[data-size='m'] {
    font-size: 30px;
  }
  .wordmark[data-size='l'] {
    font-size: 22px;
  }
  .wordmark[data-size='xl'] {
    font-size: 16px;
  }
  .tagline[data-long] {
    font-size: 13px;
  }
  .tagline {
    font-size: 18px;
    margin-top: 5px;
    padding: 2px 7px 3px;
  }
  .hill {
    height: 90px;
  }
  .road {
    height: 14px;
  }
  .road::before {
    top: 5px;
  }
  .rider {
    width: 42px;
    height: 30px;
    right: 5%;
    bottom: 9px;
  }
  .rider::before {
    width: 84px;
    height: 30px;
    background-size: 84px 30px;
    animation-name: pedal-s;
  }
  .wrap {
    grid-template-columns: minmax(0, 1fr);
    padding: 10px;
    gap: 14px;
  }
  .stack {
    gap: 14px;
  }
  section,
  .rev[id] {
    scroll-margin-top: 10px;
  }
  .panel {
    grid-template-columns: minmax(0, 1fr);
    padding: 7px;
  }
  .badge {
    display: none;
  }
  .card {
    padding: 13px 12px;
  }
  .prices td:last-child {
    width: 44%;
  }
  .grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px;
  }
  .two {
    grid-template-columns: minmax(0, 1fr);
  }
  aside {
    position: static;
  }
  .foot {
    padding: 2px 10px 14px;
  }
  .foot p {
    margin-left: 0;
    width: 100%;
  }
  .tabbar {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    /* It grows past the home bar instead of squeezing its buttons into it. */
    height: var(--tabbar-h);
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    background: var(--win);
    box-shadow:
      inset 0 1px 0 #fff,
      inset 0 2px 0 #ececec;
    padding: 4px 3px calc(3px + env(safe-area-inset-bottom, 0px));
    gap: 3px;
    z-index: 40;
  }
  .tabbar a,
  .tabbar .more {
    min-width: 0;
    overflow: hidden;
    text-align: center;
    overflow-wrap: anywhere;
    display: grid;
    justify-items: center;
    align-content: center;
    gap: 1px;
    font-size: 10px;
    font-weight: 700;
    text-decoration: none;
    box-shadow: var(--raised);
    transition: transform 0.12s;
  }
  .tabbar a img {
    width: 24px;
    height: 24px;
    image-rendering: auto;
  }
  .tabbar a.on {
    box-shadow: var(--sunken);
    background: conic-gradient(#fff 25%, #d4d4d4 0 50%, #fff 0 75%, #d4d4d4 0) 0 0/2px 2px;
  }
  .tabbar a:active,
  .tabbar .more:active {
    transform: scale(0.95);
  }
  .tabbar .more .dots {
    font: 400 22px/20px var(--pixel);
  }
  .morelist {
    position: fixed;
    left: 6px;
    right: 6px;
    bottom: calc(var(--tabbar-h) + 4px);
    z-index: 41;
    display: grid;
    gap: 3px;
    padding: 4px;
    background: var(--grey);
    box-shadow:
      var(--raised),
      4px 4px 0 rgba(0, 0, 60, 0.3);
    max-height: 60vh;
    overflow-y: auto;
  }
  .morelist a {
    display: flex;
    align-items: center;
    gap: 10px;
    min-width: 0;
    padding: 8px 9px;
    text-decoration: none;
    font-size: 14px;
    overflow-wrap: anywhere;
  }
  .morelist a img {
    width: 24px;
    height: 24px;
    flex: none;
  }
}
@keyframes pedal-s {
  50% {
    transform: translateX(-42px);
  }
}

/* The page script adds `pause` to the page while the tab is hidden, and to the banner while it
   is scrolled out of sight, so looping animation stops using the processor. */
.pause,
.pause *,
.pause::before,
.pause::after,
.pause *::before,
.pause *::after {
  animation-play-state: paused !important;
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation: none !important;
    transition: none !important;
  }
  .rev {
    opacity: 1;
    transform: none;
  }
}
