@import url("https://fonts.googleapis.com/css2?family=Comfortaa:wght@300..700&display=swap");

/* -------------- Basic setup -------------- */
:root {
  --navbar-height: 4rem;

  --container-width: 1536px;
  --content-margin: 2ch;

  --toggle-switch-width: 60px;
  --toggle-switch-height: 30px;
  --toggle-switch-border: 2px;
}

* {
  box-sizing: border-box;
  color: inherit;
  font-family: inherit;

  list-style-type: none;

  margin: 0;
  padding: 0;

  text-decoration: none;
}

/* -------------- Colors & fonts -------------- */
body::before {
  /* Site background */
  content: "";
  position: fixed;
  width: 100%;
  height: 100%;

  background-color: var(--color-bg);
  transition: background-color 0.25s;

  z-index: -100;
}
body::after {
  /* vignette */
  content: "";
  position: fixed;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  z-index: 1000;
  pointer-events: none;

  background: radial-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2));
}

body {
  background-color: var(--color-bg);
  color: var(--color-fg);
  font-family: "Comfortaa", sans-serif;
}

h1 {
  font-size: 1.5rem;
}
h2 {
  font-size: 1.2rem;
}
h3 {
  font-size: 1.1rem;
}
i {
  line-height: inherit;
  vertical-align: middle;
}

/* -------------- Basic layout -------------- */
.anchor {
  scroll-margin-top: var(--navbar-height);
}
.no-display {
  display: none !important;
}
.page-content {
  padding: 1rem calc(var(--content-margin) + 10px);
}

.textbox {
  min-width: 55ch;
  max-width: 75ch;

  a {
    text-decoration: underline;
  }
}

.vertical-center {
  position: relative;
  top: 50%;
  transform: translateY(-50%);
}

.contact-info {
  display: flex;
  justify-content: center;
  align-items: center;

  li > a {
    display: flex;
    align-items: center;

    padding: 10px;
  }
}

.quick-access {
  position: sticky;
  top: calc(var(--navbar-height) + 1em);

  li {
    margin-top: 1ch;

    a {
      margin-left: 1ch;
    }
    a::before {
      content: "> ";
    }
  }
}

/* -------------- Responsive design -------------- */
.container {
  margin: 0 auto;
  max-width: var(--container-width);
  padding: 0;
}

/* xl */
@media (max-width: 1536px) {
  :root {
    --container-width: 1280px;
  }
}

/* lg */
@media (max-width: 1280px) {
  :root {
    --container-width: 1024px;
  }
}

/* md */
@media (max-width: 1024px) {
  :root {
    --container-width: 768px;
    --content-margin: 0;
  }
}

/* sm */
@media (max-width: 768px) {
  :root {
    --container-width: 640px;
  }

  .navbar-content {
    /* collapse the nav list into a hamburger menu */

    .navbar-title {
      display: block !important;
      flex-grow: 1;
    }

    .navbar-menu-button {
      display: flex;
      justify-content: center;
      align-items: center;

      width: var(--toggle-switch-height);
      height: var(--toggle-switch-height);
      border-radius: 5px;

      margin: auto 0 auto 10px;
    }

    .navbar-page-list {
      display: none;
      flex-direction: column;

      position: fixed;
      right: calc(50% - var(--container-width) / 2 + 12px);
      top: var(--navbar-height);

      width: auto;
      height: auto;

      .navbar-home {
        display: block !important;
      }

      li .vertical-center {
        transform: unset;
      }
    }
  }
}

/* xs */
@media (max-width: 640px) {
  :root {
    --container-width: 475px;
  }
  .textbox {
    min-width: 0;
  }
}

/* 2xs */
@media (max-width: 475px) {
  :root {
    --container-width: 100%;
  }
}

/* -------------- Navbar -------------- */
.navbar-wrapper::before {
  content: "";
  position: absolute;
  width: 100%;
  height: 0;
  z-index: -1;

  box-shadow: 0 0 calc(var(--navbar-height) / 2) var(--navbar-height)
    var(--color-bg);
  transition: box-shadow 0.125s;
}
.navbar-wrapper {
  position: sticky;
  top: 0;
  z-index: 100;

  height: var(--navbar-height);
}
.navbar-content {
  display: flex;
  justify-content: space-between;
  padding: 0 var(--content-margin);

  .navbar-title,
  .navbar-page-list {
    height: calc(var(--navbar-height));
  }

  .navbar-page-list {
    display: flex;

    li {
      height: 100%;

      a {
        display: block;
        height: 100%;
      }
    }
  }

  .navbar-menu-button {
    display: none;
  }
}
.navbar-title,
.navbar-page-list > li > a,
.style-toggle,
.navbar-menu-button {
  padding: 0 10px;
}

.navbar-title#navbar-selected,
.navbar-home:not(#navbar-selected) {
  display: none;
}

.navbar-title,
.navbar-page-list > li {
  margin-top: 2px;
  height: calc(var(--navbar-height) - 4px);

  border-bottom: 2px solid transparent;
  transition: border-bottom 0.25s;
}
.navbar-title:hover,
.navbar-page-list > li:hover,
#navbar-selected {
  border-color: var(--color-fg);
}

/* -------------- Style toggle -------------- */
.style-toggle {
  --slider-size: calc(
    var(--toggle-switch-height) - 2 * var(--toggle-switch-border)
  );
  --slider-movement: calc(
    var(--toggle-switch-width) - var(--slider-size) - 2 *
      var(--toggle-switch-border)
  );

  display: flex;
  justify-content: space-around;
  align-items: center;

  font-size: calc(var(--slider-size) - 4 * var(--toggle-switch-border));

  cursor: pointer;

  width: var(--toggle-switch-width);
  height: var(--toggle-switch-height);
  border-radius: calc(var(--toggle-switch-height) / 2);

  margin: auto 0;

  background-color: var(--color-fg);
  transition: background-color 0.25s, box-shadow 0.25s;

  .slider {
    /* display: flex; */
    /* align-items: center; */

    position: absolute;
    width: var(--slider-size);
    height: var(--slider-size);
    border-radius: calc(var(--slider-size) / 2);

    background-color: var(--color-bg);

    margin: var(--toggle-switch-border);

    transition: 0.25s;
    z-index: 1;
  }
  .fa-moon,
  .fa-sun {
    position: absolute;

    padding: calc(2 * var(--toggle-switch-border));

    z-index: 2;
    transition: color 0 0.25s;
  }
  .fa-moon {
    transform: translateX(calc(0.5 * var(--slider-movement)));
  }
  .fa-sun {
    transform: translateX(calc(-0.5 * var(--slider-movement)));
  }
}
.style-toggle:hover {
  box-shadow: 0 0 2px 2px var(--color-fg);
}

/* -------------- Home page layout -------------- */
.page-home {
  display: grid;
  margin: 0 auto;

  .name-and-title {
    grid-column: 2 / span 1;
    grid-row: 2 / span 1;

    margin: 1em 1ch;

    h1 {
      font-weight: normal;
      font-size: 72pt;
    }
    h2 {
      font-weight: normal;
      font-size: 56pt;
    }
    h3 {
      font-weight: normal;
      font-size: 24pt;
    }
  }

  .contact-info {
    grid-column: 2 / span 1;
    grid-row: 3 / span 1;

    margin: 1em 1ch;

    display: flex;

    li > a {
      border-radius: 50%;

      transition: background-color 0.25s, color 0.25s;
    }
    li > a:hover {
      background-color: var(--color-fg);
      color: var(--color-bg);
    }
  }

  .headshot-wrapper {
    grid-column: 3 / span 1;
    grid-row: 1 / span 4;

    justify-self: center;

    .headshot {
      width: 400px;
      height: 400px;
      overflow: hidden;

      border-radius: 200px;

      img {
        margin: -500px 0 0 -680px;
      }
    }
  }

  .textbox {
    grid-column: 2 / span 2;
    grid-row: 5 / span 1;

    margin: 1em 1ch;

    h3 {
      font-size: 25px;
    }
  }
}
.page-home::before {
  content: "";
  grid-row: 1 / span 1;
  height: 50px;
}
.page-home::after {
  content: "";
  grid-column: 4 / span 1;
}

/* -------------- Portfolio & Service page layouts -------------- */
.page-portfolio,
.page-service {
  .card-list {
    display: flex;
    flex-direction: column;

    .card {
      display: grid;
      grid-template-columns: auto 300px auto auto;

      border-bottom: 2px solid var(--color-fg);

      margin: 0 auto;
      padding: 1em 0;

      .card-cover {
        grid-column: 2 / span 1;
        grid-row: 1 / span 5;

        width: 300px;
        height: 300px;

        border-radius: 150px;
        overflow: hidden;

        * {
          width: 100%;
          height: 100%;
          object-fit: cover;
        }
      }

      .card-header {
        grid-column: 3 / span 1;
        grid-row: 2 / span 1;

        padding: 1em 1ch 0;
      }

      .card-content {
        grid-column: 3 / span 1;
        grid-row: 3 / span 1;

        padding: 1em 1ch 0;

        q {
          display: block;

          font-size: 0.8em;

          border-left: 2px solid var(--color-fg);
          padding: 0 1ch;
          margin: 1ch 0;
        }
        q::before {
          content: "";
        }
      }

      .card-footer {
        grid-column: 3 / span 1;
        grid-row: 4 / span 1;

        padding: 1em 1ch 0;
      }
    }
    .card:last-child {
      border-bottom: none;
    }
  }
}

/* -------------- Qualifications page layout -------------- */
.page-qualifications {
  display: grid;

  margin: 0 auto;

  .quick-access {
    grid-column: 3 / span 1;
    grid-row: 1 / span 1;
    padding: 1em 1ch;

    position: sticky;
    top: calc(var(--navbar-height) + 1em);

    li {
      margin-top: 1ch;

      a {
        margin-left: 1ch;

        border-bottom: 2px solid transparent;
        transition: border-bottom 0.25s;
      }
      a:hover {
        border-bottom: 2px solid var(--color-fg);
      }
      a::before {
        content: "> ";
      }
    }
  }

  .textbox {
    grid-column: 2 / span 1;
    padding: 1em 1ch;
  }
  .textbox#experience {
    grid-row: 1 / span 1;
  }
  .textbox#areas-of-interest {
    grid-row: 2 / span 1;
  }
  .textbox#resume {
    grid-row: 3 / span 1;

    img {
      max-width: 100%;
      max-height: 100%;
    }
  }
}
.page-qualifications::after {
  content: "";
  grid-column: 4 / span 1;
}

/* -------------- Responsive design -------------- */
@media (max-width: 1280px) {
  .page-home {
    .name-and-title {
      h1 {
        font-size: 48pt;
      }
      h2 {
        font-size: 36pt;
      }
    }
  }
  .page-home::before {
    height: 75px;
  }
}

@media (max-width: 1024px) {
  .page-home {
    .name-and-title {
      h1 {
        font-size: 30pt;
      }
      h2 {
        font-size: 18pt;
      }
      h3 {
        font-size: 12pt;
      }
    }
    .headshot-wrapper {
      width: 300px;
      height: 300px;
      transform: translate(-12.5%, -12.5%) scale(75%);
    }
  }

  .page-portfolio,
  .page-service {
    .card-list {
      .card {
        grid-template-columns: auto auto 300px auto auto;
        grid-template-rows: 300px auto auto;

        .card-cover {
          grid-column: 3 / span 1;
          grid-row: 1 / span 1;
        }

        .card-header {
          grid-column: 2 / span 3;
        }

        .card-content {
          grid-column: 2 / span 3;
        }
      }
      .card::after {
        content: "";
        grid-column: 5;
      }
    }
  }

  .page-qualifications {
    grid-template-columns: auto auto 0 auto;

    .quick-access {
      display: none;
    }
  }
}

@media (max-width: 768px) {
  /* collapse the nav list into a hamburger menu */

  .navbar-content {
    .navbar-title#navbar-selected {
      border-color: transparent !important;
    }

    .navbar-menu-button {
      background-color: var(--color-fg);
      color: var(--color-bg);

      transition: box-shadow 0.25s;
    }
    .navbar-menu-button:hover {
      box-shadow: 0 0 2px 2px var(--color-fg);
    }

    .navbar-page-list {
      li {
        border: 2px solid transparent;

        transition: border-left 0.25s;
      }
      li:hover,
      #navbar-selected {
        border-color: transparent;
        border-left: 2px solid var(--color-fg);
      }
    }
    .navbar-page-list::before {
      content: "";
      position: absolute;

      width: 100%;
      height: 100%;

      background-color: var(--color-bg);

      box-shadow: 0 0 10px 10px var(--color-bg);

      z-index: -1;
    }
  }

  .page-home {
    .name-and-title {
      width: 300px;
    }

    .headshot-wrapper {
      grid-column: 2 / span 2;
      grid-row: 1 / span 1;
    }

    .contact-info {
      grid-column: 3 / span 1;
      grid-row: 2 / span 1;

      justify-self: end;

      flex-direction: column;
    }
  }
}

@media (max-width: 640px) {
  .page-home {
    .name-and-title {
      h1 {
        font-size: 24pt;
      }
    }
  }
}
