@font-face {
  font-family: "DM Sans";
  font-weight: 400 500 600;
  src: url("../webfonts/DMSans-VariableFont_opsz,wght.ttf");
}

@font-face {
  font-family: "DM Sans";
  font-style: italic;
  font-weight: 400 500 600;
  src: url("../webfonts/DMSans-Italic-VariableFont_opsz,wght.ttf");
}

@font-face {
  font-family: "Racing Checkered";
  src: url("../webfonts/RacingCheckered.otf");
}

@font-face {
  font-family: "OpenSans-ExtraBoldItalic";
  src: url("../webfonts/OpenSans-ExtraBoldItalic.woff") format("woff"),
    url("../webfonts/OpenSans-ExtraBoldItalic.ttf") format("truetype"),
    url("../webfonts/OpenSans-ExtraBoldItalic.svg") format("svg");
}

:root {
  --primary-subdued: hsl(195, 53%, 79%);
  --primary-base: hsl(217, 63%, 57%);
  --accent-subdued: hsl(145, 95%, 92%);
  --accent-base: hsl(152, 69%, 31%);
  --white: hsl(0, 0%, 100%);
  --off-white: hsl(0, 0%, 96%);
  --black: hsl(0, 0%, 13%);

  --fs-desc: 1.125rem;
  --fs-reg: 1.25rem;
  --fs-md: 2rem;
  --fs-lg: 3rem;
  --fs-xl: 4rem;
}

@layer reset {

  *,
  *::before,
  *::after {
    box-sizing: border-box;
  }

  h1,
  h2,
  h3,
  h4,
  h5,
  h6,
  p,
  ul,
  ol,
  figure {
    margin: 0;
  }

  h1,
  h2,
  h3,
  h4,
  h5,
  h6 {
    font-weight: 500;
  }

  a {
    text-decoration: none;
  }

  img {
    max-width: 100%;
    display: block;
  }
}

dialog p:first-of-type {
  color: var(--primary-base);
}

video {
  max-width: 100%;
  height: auto;
  display: block;
  border-radius: 16px;
}

footer {
  margin-top: 1rem;
  font-size: 0.875rem;

  div {
    text-align: right;

    a {
      font-family: "OpenSans-ExtraBoldItalic";
      margin-right: 0.125rem;
      text-decoration: none;
      color: var(--black);
    }

    span {
      color: var(--accent-base);
    }

    span#year {
      color: var(--black);
    }
  }
}

@layer base {
  html {
    font-family: "DM Sans", sans-serif;
    line-height: 1.3;
  }

  body {
    margin: 32px;
    color: var(--black);
    font-size: var(--fs-reg);
    background: hsl(0, 0%, 94%);
  }

  h1,
  h2 {
    font-size: var(--heading-font-size, var(--fs-md));
    line-height: 1.1;
    text-wrap: balance;

    span {
      display: var(--heading-span-display, inline);
      color: var(--heading-span-color, var(--black));
      font-size: var(--heading-span-font-size, inherit);
      font-style: var(--heading-span-style, normal);
    }
  }
}

@layer layout {
  .b-grid {
    display: grid;
    gap: 24px;
    max-inline-size: 1208px;
    margin-inline: auto;
    grid-template-areas:
      'one'
      'four'
      'seven'
      'three'
      'two'
      'five'
      'eight'
      'six';

    @media (width > 660px) {
      grid-template-areas:
        "one one"
        "four seven"
        "three two"
        "five five"
        "eight six"
      ;
    }

    @media (width > 1016px) {
      grid-template-areas:
        "seven one one four"
        "eight two three four"
        "eight six three four"
        "eight six five five"
      ;
    }
  }

  .b-grid>* {
    color: var(--b-card-fg, var(--black));
    background-color: var(--b-card-bg, var(--white));
    min-width: var(--b-card-min-width, 220px);
    padding: var(--b-card-padding-vertical, 32px) var(--b-card-padding-horizontal, 32px);
    border-radius: var(--b-card-border-radius, 21px);

    overflow: clip;

    display: grid;
    gap: var(--b-card-gap, 32px);
    align-content: var(--b-card-vertical-alignment, start);
    align-items: var(--b-card-vertical-alignment, start);
    justify-items: var(--b-card-horizontal-alignment, start);
    text-align: var(--b-card-horizontal-alignment, start);
  }

  button.booking {
    min-width: 100px;
    min-height: 50px;
    border-radius: 30em;
    font-size: 1rem;
    font-family: inherit;
    cursor: pointer;
    border: none;
    position: relative;
    overflow: hidden;
    z-index: 1;
    box-shadow: 2px 2px 12px var(--off-white), -2px -2px 12px var(--white);
  }

  button.booking:hover {
    color: var(--white);
    transform: scale(1.1);
    outline: 2px solid var(--primary-subdued);
    box-shadow: 4px 5px 17px -4px var(--primary-base);
  }

  button.booking::before {
    content: "";
    position: absolute;
    left: -20px;
    top: 0;
    width: 0;
    height: 100%;
    background-color: var(--primary-base);
    transform: skewX(45deg);
    transform-origin: left;
    z-index: -1;
    transition: width 1000ms;
  }

  button.booking:hover::before {
    width: 150%;
  }

  /* START: bike <p> model content color (with 2 variants defined by id, where --accent-base is used as background-color) */

  .model {
    font-size: var(--fs-desc);
    color: var(--primary-base);
  }

  [id="3p"] {
    color: var(--off-white);
  }

  [id="8p"] {
    color: var(--off-white);
  }

  /* END: bike <p> model content color */

  .description {
    font-size: 1rem;
    text-wrap: balance;
  }

  .b-grid img {
    max-width: var(--b-card-image-width, 100%);
    width: var(--b-card-image-width, 100%);
    order: var(--b-card-image-order);
    border-radius: var(--b-card-image-border-radius, 16px);
  }

  .b-grid> :nth-child(1) {
    --heading-font-size: var(--fs-md);
    --b-card-fg: var(--white);
    --b-card-bg: var(--primary-base);
    --b-card-horizontal-alignment: center;
    --b-card-gap: 16px;

    grid-area: one;

    line-height: normal;

    span {
      color: hsl(152, 69%, 31%);
      font-size: 5rem;
      font-weight: bolder;
      text-shadow: 1px 1px 1px hsl(0, 0%, 100%);
    }

    h3 {
      justify-self: start;
      font-size: var(--fs-md);
    }

    p {
      margin-left: 0.5rem;
      font-family: "Racing Checkered";
      font-size: 8rem;
      line-height: 0.8;
      letter-spacing: 4px;
    }

    img.coming-soon {
      position: absolute;
      pointer-events: none;
      --b-card-vertical-alignment: center;
    }

    @media (width > 660px) {
      --heading-font-size: var(--fs-lg);

      p {
        margin-left: 0.75rem;
        font-size: 10rem;
        line-height: 0.85;
      }

      img.coming-soon {
        --b-card-image-width: 80%;
      }
    }

    @media (width > 1016px) {
      --heading-font-size: var(--fs-xl);

      p {
        margin-left: 0.75rem;
        font-size: 12rem;
        line-height: 1.1;
      }

      img.coming-soon {
        --b-card-image-width: 40%;
      }
    }
  }

  .b-grid> :nth-child(2) {
    --b-card-vertical-alignment: center;

    grid-area: two;

    p>span {
      color: var(--primary-base);
      font-weight: 600;
    }
  }

  .b-grid> :nth-child(3) {
    --b-card-bg: var(--accent-base);

    grid-area: three;

    button.booking {
      top: 50%;
      left: 50%;
      -ms-transform: translate(-50%, -50%);
      transform: translate(-50%, -50%);
    }

    @media (width > 1016px) {
      --b-card-vertical-alignment: center;
    }
  }

  .b-grid> :nth-child(4) {
    --b-card-bg: var(--primary-subdued);

    grid-area: four;

    button.booking {
      top: 50%;
      left: 50%;
      -ms-transform: translate(-50%, -50%);
      transform: translate(-50%, -50%);
    }

    p>span {
      color: var(--primary-base);
      font-weight: 600;
    }

    @media (width > 1016px) {
      --b-card-vertical-alignment: center;
    }
  }

  .b-grid> :nth-child(5) {
    --b-card-horizontal-alignment: center;
    --b-card-padding-vertical: 8px;
    --b-card-padding-horizontal: 8px;

    grid-area: five;

    @media (width > 660px) {
      --b-card-vertical-alignment: center;
    }
  }

  .b-grid> :nth-child(6) {

    grid-area: six;

  }

  .b-grid> :nth-child(7) {
    --b-card-bg: var(--accent-subdued);

    grid-area: seven;

    button.booking {
      top: 50%;
      left: 50%;
      -ms-transform: translate(-50%, -50%);
      transform: translate(-50%, -50%);
    }

    @media (width > 1016px) {
      --b-card-vertical-alignment: center;
    }
  }

  .b-grid> :nth-child(8) {
    --b-card-bg: var(--accent-base);
    --b-card-gap: 16px;

    grid-area: eight;

    @media (width > 1016px) {
      --b-card-vertical-alignment: center;
    }
  }
}

@layer utilities {
  .visually-first {
    order: -1;
  }
}

.modal {
  max-width: 50ch;
  font-size: 1rem;
  color: var(--black);
  border-radius: 10px;
  border: 4px solid #4c81d6;

  &>* {
    margin: 0 0 0.5rem 0;
  }
}

.modal::backdrop {
  background: rgb(0 0 0 / 0.5);
}

.modalButton {
  border: 0;
  border-radius: 4px;
  cursor: pointer;
  background-color: #4c81d6;
  color: #f5f5f5;
  font-weight: 700;
  padding: 4px 8px;
}

.modalButton:hover {
  background-color: hsl(240 64% 27% / 0.7);
}