dialog[data-block-receipt] {
  --receipt-page-width: 80mm;
  --receipt-paper-width: 72mm;
  --receipt-top-teeth: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 2 1' preserveAspectRatio='none'%3E%3Cpath fill='black' d='M0 1 1 0 2 1z'/%3E%3C/svg%3E");
  --receipt-bottom-teeth: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 2 1' preserveAspectRatio='none'%3E%3Cpath fill='black' d='M0 0 2 0 1 1z'/%3E%3C/svg%3E");
  --receipt-dialog-padding-block: var(--page-x);
  --receipt-tooth-count: 36;
  --receipt-tooth-size: 0.16rem;

  position: fixed;
  inset: 0 0 auto;
  width: min(100% - 2rem, 28rem);
  height: 100dvh;
  max-height: 100dvh;
  margin: 0 auto;
  border-radius: 0;
  overflow: hidden;
  padding: 0;
  color: var(--black);
  background: transparent;
  font-family: var(--font-mono);
  translate: none;

  > main {
    height: 100%;
    overflow-y: auto;
    padding-block: var(--receipt-dialog-padding-block);
    overscroll-behavior: contain;
    scrollbar-width: none;
  }

  :is(
    [data-receipt-section] > h3,
    [data-receipt-row] > span,
    [data-receipt-row] > strong,
    [data-receipt-row] small,
    [data-receipt-note],
    [data-receipt-qr] > span,
    [data-receipt-qr] > a
  ) {
    font-size: var(--font-size-xs);
    line-height: var(--line-height-xs);
  }

  [data-receipt-paper] {
    position: relative;
    display: grid;
    gap: 0.375rem;
    width: min(100%, var(--receipt-paper-width));
    margin-inline: auto;
    padding: calc(var(--receipt-tooth-size) + 0.5rem) 1rem
      calc(var(--receipt-tooth-size) + 0.75rem);
    border-radius: 0;
    background: var(--white);
    mask:
      var(--receipt-top-teeth) top left / calc(100% / var(--receipt-tooth-count))
        var(--receipt-tooth-size) repeat-x,
      linear-gradient(#000 0 0) 0 var(--receipt-tooth-size) / 100%
        calc(
          100% - var(--receipt-tooth-size) - var(--receipt-tooth-size)
        )
        no-repeat,
      var(--receipt-bottom-teeth) bottom left /
        calc(100% / var(--receipt-tooth-count)) var(--receipt-tooth-size)
        repeat-x;
  }

  [data-receipt-head] {
    --block-title-color: var(--black);
    --block-title-height-color: color-mix(in oklch, var(--black) 62%, transparent);
    --block-title-height-line-height: var(--line-height-base);
    --block-title-height-size: var(--font-size-base);
    --block-title-justify: center;
    --block-title-label-size: 1.375rem;

    display: grid;
    gap: 0.3125rem;
    align-items: center;
    justify-items: center;
    margin-block-start: 0.5rem;
    text-align: center;
  }

  [data-receipt-section] {
    display: grid;
    gap: 0.25rem;
    min-width: 0;
    border-top: 1px dashed color-mix(in oklch, var(--black) 35%, transparent);
    padding-top: 0.75rem;

    > h3 {
      color: var(--black);
      font-family: var(--font-mono);
      font-weight: var(--font-weight-strong);
      text-transform: uppercase;
    }
  }

  [data-receipt-row] {
    display: grid;
    grid-template-columns: minmax(5rem, auto) minmax(0, 1fr);
    gap: 0.75rem;
    align-items: baseline;
    min-width: 0;

    > span {
      color: color-mix(in oklch, var(--black) 58%, transparent);
      text-transform: uppercase;
    }

    > strong {
      min-width: 0;
      overflow-wrap: anywhere;
      color: var(--black);
      font-weight: var(--font-weight-strong);
      text-align: right;

      small {
        display: block;
        color: color-mix(in oklch, var(--black) 52%, transparent);
        font-weight: var(--font-weight-regular);
      }
    }

    &[data-receipt-row="wide"] {
      grid-template-columns: minmax(0, 1fr);
      gap: 0.125rem;

      > strong {
        word-break: break-all;
        text-align: left;
      }
    }

    &[data-receipt-row="amount"],
    &[data-receipt-row="total"] {
      align-items: start;

      > strong {
        display: grid;
        gap: 0.125rem;
      }
    }

    &[data-receipt-row="total"] {
      border-block: 1px dashed
        color-mix(in oklch, var(--black) 35%, transparent);
      padding-block: 0.375rem;

      > span,
      > strong {
        color: var(--black);
      }
    }
  }

  [data-receipt-note] {
    overflow: hidden;
    color: var(--black);
    font-style: italic;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  [data-receipt-brand] {
    display: grid;
    justify-items: center;
    border-top: 1px dashed color-mix(in oklch, var(--black) 35%, transparent);
    padding-top: 0.5rem;
  }

  [data-receipt-qr] {
    display: grid;
    justify-items: center;
    gap: 0.5rem;
    border-top: 1px dashed color-mix(in oklch, var(--black) 35%, transparent);
    padding-top: 0.75rem;
    text-align: center;

    > span {
      color: var(--black);
      text-transform: uppercase;
    }

    img {
      width: min(100%, 10rem);
      aspect-ratio: 1;
      image-rendering: pixelated;
    }

    a {
      min-width: 0;
      overflow-wrap: anywhere;
      color: var(--black);
      text-decoration: none;
    }
  }

  [data-receipt-controls] {
    position: absolute;
    bottom: 0.5rem;
    left: 50%;
    z-index: 1;
    display: flex;
    flex-wrap: wrap;
    gap: 0.375rem;
    justify-content: center;
    width: min(100% - 2rem, var(--receipt-paper-width));
    transform: translateX(-50%);

    form {
      display: contents;
    }

    button {
      padding: 0.25rem 0.375rem;
      font-size: var(--font-size-xs);
    }

    [data-receipt-action="close"] {
      --button-background: var(--red);
      --button-hover-background: var(--black);
      --button-color: var(--black);
    }

    [data-receipt-action="print"] {
      --button-background: var(--green);
      --button-hover-background: var(--black);
      --button-color: var(--black);
    }

    @media (hover: hover) and (pointer: fine) {
      [data-receipt-action="close"]:hover {
        color: var(--red);
      }

      [data-receipt-action="print"]:hover {
        color: var(--green);
      }
    }

    [data-receipt-action="close"][data-press] {
      color: var(--red);
    }

    [data-receipt-action="print"][data-press] {
      color: var(--green);
    }

    [data-receipt-action]:active {
      color: var(--black);
    }
  }
}

@media print {
  @page {
    size: 80mm auto;
    margin: 4mm;
  }

  html,
  body {
    background: white !important;
  }

  body > :not(dialog[data-block-receipt]) {
    display: none !important;
  }

  dialog[data-block-receipt] {
    position: static;
    display: block;
    width: var(--receipt-page-width);
    height: auto;
    max-width: none;
    max-height: none;
    margin: 0;
    overflow: visible;
    padding: 0;
    color: black;
    background: white;
    overscroll-behavior: auto;
  }

  dialog[data-block-receipt] > main {
    height: auto;
    overflow: visible;
    padding: 0;
  }

  dialog[data-block-receipt]::backdrop {
    display: none;
  }

  dialog[data-block-receipt] [data-receipt-paper] {
    width: var(--receipt-paper-width);
    padding: calc(var(--receipt-tooth-size) + 0.5rem) 1rem
      calc(var(--receipt-tooth-size) + 0.75rem);
    border-radius: 0;
    color: black;
    background: white;
    font-size: 8pt;
    line-height: 1.25;
  }

  dialog[data-block-receipt] :is(
    [data-receipt-row] > span,
    [data-receipt-row] > strong,
    [data-receipt-row] small,
    [data-receipt-section] > h3,
    [data-receipt-qr] > span,
    [data-receipt-qr] > a
  ) {
    font-size: 8pt;
    line-height: 1.25;
  }

  dialog[data-block-receipt] [data-receipt-controls] {
    display: none;
  }
}
