@font-face {
  font-family: 'Karla';
  src: url('assets/fonts/Karla-VariableFont_wght.ttf') format("truetype");
  font-weight: 400 700;
}

:root {
  --white:      hsl(0, 0%, 100%);
  --green200:   hsl(148, 38%, 91%);
  --grey500:    hsl(186, 15%, 59%);
  --green600:   hsl(169, 82%, 27%);
  --green900:   hsl(171, 83%, 14%);
  --grey900:    hsl(187, 24%, 22%);
  --red:        hsl(0, 66%, 54%);

  --ff-base:      "Karla", sans-serif
}

@layer reset {
  *,
  *::before,
  *::after {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
    min-width: 0;
  }

  body {
    accent-color: var(--green600);
    background-color: var(--green200);
    font-size: 1rem;
    font-family: var(--ff-base);
    line-height: 1.6;
    min-height: 100vh;
    display: flex;
    color: var(--grey900);
  }

  input,
  button,
  textarea {
    font: inherit;
  }
}

@layer layout {
  .span-all {
    grid-column: 1 / -1;
  }
}

@layer form {
  main {
    padding: 2rem;
    max-inline-size: 700px;
    margin: auto;
    background-color: var(--white);
    border-radius: 1rem;
  }

  h1 {
    padding-bottom: .5rem;
  }

  form {
    display: grid;
    gap: 1rem;

    @media (width > 500px) {
      grid-template-columns: 1fr 1fr;
    }
  }

  .form-group {
    display: grid;
    gap: .25rem;
  }

  fieldset {
    border: 0;
    display: grid;
    gap: inherit;
    grid-template-columns: inherit;
  }

  legend {
    line-height: 2.5;
  }

  textarea {
    box-sizing: content-box;
    height: 3lh;
    resize: block;
  }

  .form-group {
    display: grid;
    grid-auto-rows: min-content;
    grid-template-columns: repeat(auto-fit, minmax())
  }

  fieldset:has([required]) legend,
  .form-group:has(:not([type="radio"])[required]) label {
    display: flex;
    gap: 1ch;         /* 1 char wide. the width of 0 */
    
    &::after {
      content: '*';
      color: var(--green600);
    }
  }

  .form-group:has([type="text"], [type="email"], [type="radio"]) input, 
  .form-group:has([type="radio"]) label {
    &:hover {
      cursor: pointer;
      border-color: var(--green600);
    }
  }

  input,
  textarea,
  .form-group:has([type="radio"]) {
    border: 1px solid var(--grey900);
    border-radius: 6px;
    padding: .75em 1.5em;

    &:focus-visible {
      outline-color: var(--green);
    }
  }

  [type="radio"], 
  [type="checkbox"] {
    width: 1rem;
  }

  .form-group:has([type="radio"], [type="checkbox"]) {
    display: flex;
    gap: 1ch;
  }

  /* checks the radio button regardless of where its container is clicked */
  .form-group:has([type="radio"]) {
    position: relative;

    label:after {
      content: "";
      position: absolute;
      inset: 0;
    }
  }

  .form-group:has([type="radio"]:checked) {
    background-color: var(--green200);
    border-color: var(--green600);
  }

  button {
    background: var(--green600);
    color: var(--white);
    border: 0;
    padding: .75em 1.5em;
    border-radius: 6px;
    transition: .2s ease-in-out;

    &:hover,
    &:focus-visible {
      background-color: var(--green900);
      cursor: pointer;
    }
  }

  input:user-invalid {
    border-color: var(--red);
  }

  .error-message {
    color: var(--red);
    font-size: .83rem;
  }

  .error-message:empty {
    display: none;
  }
}

@layer modal {
  .submit-modal {
    background-color: var(--green900);
    color: var(--white);
    border: 0;
    padding: 1rem;
    border-radius: .5rem;
    justify-self: center;
    margin-top: 7px;
    line-height: 2;
    font-size: .8rem;
  }

  .check-icon {
    display: flex;
    gap: 1ch;
    font-size: 1rem;
    font-weight: 700;
  }
}
