body:has(dialog.drawer[open]) {
  overflow: hidden;
}

@layer components {
  .drawer {
    position: fixed;
    inset: 0;
    margin: 0;
    padding: 0;
    border: none;
    background: transparent;
    overflow: hidden;
    width: 100vw;
    height: 100vh;
    max-width: 100vw;
    max-height: 100vh;

    &::backdrop {
      background-color: rgba(17, 24, 39, 0.5);
      transition: opacity 0.2s ease;
    }

    & .drawer-container {
      position: absolute;
      inset-block: 0;
      inset-inline-end: 0;
      block-size: 100%;
      inline-size: 100%;
      max-inline-size: 72rem;
      overflow-y: auto;
      background-color: var(--color-bg);
      box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);
      border-start-start-radius: 0.375rem;
      border-end-start-radius: 0.375rem;
      transition: transform 0.25s ease-out;
    }
  }

  @media (width >= 40rem) {
    .drawer .drawer-container {
      inline-size: min(50%, 72rem);
    }
  }

  @media (width < 40rem) {
    .drawer .drawer-container {
      inline-size: 95%;
      border-start-start-radius: 0;
      border-end-start-radius: 0;
    }
  }

  .drawer-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    border-block-end: 1px solid var(--color-border);
    padding-block: 1rem;
    padding-inline: 1.5rem;
  }

  .drawer-header:not(:has(.drawer-title)) {
    justify-content: flex-end;
    border-block-end: none;
    padding-block-start: 0.5rem;
    padding-inline: 1rem;
  }

  .drawer-title {
    font-size: 1.125rem;
    font-weight: 600;
    color: var(--color-text);
  }

  .drawer-close-button {
    color: var(--color-border-darker);
    transition: color 0.2s;
    cursor: pointer;
    background: none;
    border: none;
  }

  .drawer-close-button:not(:disabled):hover {
    color: var(--color-neutral-text);
  }

  .drawer-close-icon {
    inline-size: 1.5rem;
    block-size: 1.5rem;
  }

  .drawer-body {
    padding-block: 0.75rem;
    padding-inline: 1rem;
  }

  @media (width >= 40rem) {
    .drawer-body {
      padding-block: 1rem;
      padding-inline: 1.5rem;
    }
  }

  .drawer-container:not(:has(.drawer-header)) .drawer-body {
    padding-block: 2rem;
    padding-inline: 1.5rem;
  }

  @media (width >= 40rem) {
    .drawer-container:not(:has(.drawer-header)) .drawer-body {
      padding-block: 2.5rem;
      padding-inline: 2rem;
    }
  }

  .drawer-container:has(.drawer-header:not(:has(.drawer-title))) .drawer-body {
    padding-block: 0.5rem;
    padding-inline: 1rem;
  }

  .drawer-footer {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 0.75rem;
    border-block-start: 1px solid var(--color-border);
    padding-block: 1rem;
    padding-inline: 1.5rem;
  }

  .drawer:focus-visible {
    outline: none;
    box-shadow: none;
  }

  .drawer-container:focus-visible {
    outline: none;
    box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);
  }

  .drawer-container :is(button, .btn):focus-visible,
  .drawer-container :is(button, .btn):active {
    outline: none;
    box-shadow: none;
  }

  .drawer-container :where(.drawer-body input, .drawer-body select, .drawer-body textarea):focus-visible {
    outline: none;
    box-shadow: var(--shadow-focus);
  }
}
