JSFiddle - React, Tailwind, and code Playground

HTML

<div class="page-layout">
  <div class="elem-outer">
    <div class="elem-content">
      <p>
        Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus duis convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar vivamus fringilla lacus nec metus bibendum egestas. Iaculis massa nisl malesuada lacinia integer nunc posuere. Ut hendrerit semper vel class aptent taciti sociosqu. Ad litora torquent per conubia nostra inceptos himenaeos.
      </p>
      <p>
        Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus duis convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar vivamus fringilla lacus nec metus bibendum egestas. Iaculis massa nisl malesuada lacinia integer nunc posuere. Ut hendrerit semper vel class aptent taciti sociosqu. Ad litora torquent per conubia nostra inceptos himenaeos.
      </p>
      <p>
        Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus duis convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar vivamus fringilla lacus nec metus bibendum egestas. Iaculis massa nisl malesuada lacinia integer nunc posuere. Ut hendrerit semper vel class aptent taciti sociosqu. Ad litora torquent per conubia nostra inceptos himenaeos.
      </p>
      <p>
        Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus duis convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar vivamus fringilla lacus nec metus bibendum egestas. Iaculis massa nisl malesuada lacinia integer nunc posuere. Ut hendrerit semper vel class aptent taciti sociosqu. Ad litora torquent per conubia nostra inceptos himenaeos.
      </p>
      <p>
        Lorem ipsum...

CSS

.page-layout {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 80px;
  overflow: scroll;
  background: darkgrey;
}

.elem-outer {
  max-width: 300px;
  max-height: 400px;
  border-radius: 16px;
  corner-shape: squircle;
  overflow: hidden;
  background: repeating-conic-gradient(#333 0% 25%, #111 0% 50%) 50%/20px 20px;
  color: white;
  display: flex;
}

.elem-content {
  --padding-horizontal: 20px; /* Whatever you choose, ensure padding-right is wide enough to accomodate scrollbars. */
  --fade-size: 40px;
  
  --gradient-fade-edges: linear-gradient(to bottom, transparent 0%, black var(--fade-size) calc(100% - var(--fade-size)), transparent 100%);
  --gradient-keep-scrollbar: linear-gradient(to left, black var(--padding-horizontal), transparent var(--padding-horizontal));
  
  overflow: auto;
  scrollbar-gutter: stable;
  padding: 40px var(--padding-horizontal);
}

.elem-outer.visible-gradient {
  background: magenta;
}

.elem-outer.visible-gradient .elem-content {
  background-image: var(--gradient-fade-edges), var(--gradient-keep-scrollbar);
  overflow: hidden;
}

.elem-outer:not(.visible-gradient) .elem-content {
  mask-image: var(--gradient-fade-edges), var(--gradient-keep-scrollbar);
}