.dialog {
  max-width: none;
  max-height: none;
  margin: 0;
  padding: 0;
  border: 0;
  background: var(--bg-surface);
  color: var(--fg-body);
  overflow-y: auto;
  overscroll-behavior: contain;
}

.dialog::backdrop {
  background: var(--veil);
}

.dialog__body {
  position: relative;
  min-height: 100%;
}

.dialog__close {
  display: grid;
  place-items: center;
  width: var(--control-h);
  height: var(--control-h);
  padding: 0;
  border: 0;
  background: none;
  color: var(--fg-heading);
  cursor: pointer;
  transition: background-color var(--duration-quick) var(--ease);
}

.dialog__close--round {
  border-radius: 50%;
  background: var(--ivory);
  color: var(--ink);
}

.dialog__close--round:hover {
  background: var(--gold);
}

.dialog--sheet {
  position: fixed;
  inset: 0;
  width: 100%;
  height: 100dvh;
}

.dialog--sheet[open] {
  animation: dialog-drop-in var(--duration-enter) var(--ease);
}

.dialog--panel {
  --bg-surface: var(--ink-2);
  --fg-body: var(--ivory);

  position: fixed;
  inset: 0 0 0 auto;
  width: min(480px, 100vw);
  height: 100dvh;
  border-left: 1px solid var(--rule);
  touch-action: pan-y pinch-zoom;
  transition: transform var(--duration-enter) var(--ease);
}

.dialog--panel.is-dragging {
  transition: none;
}

.dialog--panel::backdrop {
  background: var(--veil-light);
}

.dialog--panel[open] {
  animation: dialog-slide-in var(--duration-panel) var(--ease-panel);
}

.dialog--panel[open]::backdrop {
  animation: dialog-fade-in var(--duration-panel) var(--ease);
}

.dialog--panel.is-closing {
  animation: dialog-slide-out var(--duration-enter) var(--ease) forwards;
}

.dialog--panel.is-closing::backdrop {
  animation: dialog-fade-in var(--duration-enter) var(--ease) reverse forwards;
}

.dialog--panel .dialog__body {
  padding: var(--s-9) var(--s-7) var(--s-7);
}

.dialog--panel .dialog__close {
  position: absolute;
  top: var(--s-5);
  right: var(--s-5);
}

@media (width <= 1023px) {
  .dialog--panel .dialog__body {
    padding-inline: var(--gutter);
  }
}

.dialog--letter {
  width: min(440px, calc(100% - 2 * var(--gutter)));
  max-height: calc(100dvh - 2 * var(--gutter));
  margin: auto;
}

.dialog--letter[open] {
  animation: dialog-drop-in var(--duration-enter) var(--ease);
}

.dialog--letter .dialog__close {
  position: absolute;
  top: var(--s-4);
  right: var(--s-4);
}

@keyframes dialog-drop-in {
  from {
    opacity: 0;
    transform: translateY(-12px);
  }
}

@keyframes dialog-slide-in {
  from {
    transform: translateX(100%);
  }
}

@keyframes dialog-slide-out {
  to {
    transform: translateX(100%);
  }
}

@keyframes dialog-fade-in {
  from {
    opacity: 0;
  }
}
