<div class="controls">
  <label>
    <input class="hide-error" type="checkbox">
    Hide errors
  </label>
  <label>
    <input class="hide-warning" type="checkbox">
    Hide warnings
  </label>
  <label>
    <input class="hide-success" type="checkbox">
    Hide success
  </label>
</div>
<div class="list">
  <div class="card card-warning">
    <svg aria-hidden="true">
      <use xlink:href="#warning" />
    </svg>
    <span class="sr-only">Warning</span>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras convallis sodales erat vel accumsan. Nam eget massa nec sem vulputate ullamcorper vel quis justo.</p>
  </div>
  <div class="card card-error">
    <svg aria-hidden="true">
      <use xlink:href="#error" />
    </svg>
    <span class="sr-only">Error</span>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras convallis sodales erat vel accumsan. Nam eget massa nec sem vulputate ullamcorper vel quis justo.</p>
  </div>
  <div class="card card-success">
    <svg aria-hidden="true">
      <use xlink:href="#success" />
    </svg>
    <span class="sr-only">Success</span>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras convallis sodales erat vel accumsan. Nam eget massa nec sem vulputate ullamcorper vel quis justo.</p>
  </div>
  <div class="card card-warning">
    <svg aria-hidden="true">
      <use xlink:href="#warning" />
    </svg>
    <span class="sr-only">Warning</span>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras convallis sodales erat vel accumsan. Nam eget massa nec sem vulputate ullamcorper vel quis justo.</p>
  </div>
  <div class="card card-error">
    <svg aria-hidden="true">
      <use xlink:href="#error" />
    </svg>
    <span class="sr-only">Error</span>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras convallis sodales erat vel accumsan. Nam eget massa nec sem vulputate ullamcorper vel quis justo.</p>
  </div>
  <div class="card card-success">
    <svg aria-hidden="true">
      <use xlink:href="#success" />
    </svg>
    <span class="sr-only">Success</span>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras convallis sodales erat vel accumsan. Nam eget massa nec sem vulputate ullamcorper vel quis justo.</p>
  </div>
  <div class="card card-success">
    <svg aria-hidden="true">
      <use xlink:href="#success" />
    </svg>
    <span class="sr-only">Success</span>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras convallis sodales erat vel accumsan. Nam eget massa nec sem vulputate ullamcorper vel quis justo.</p>
  </div>
  <div class="card card-success">
    <svg aria-hidden="true">
      <use xlink:href="#success" />
    </svg>
    <span class="sr-only">Success</span>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras convallis sodales erat vel accumsan. Nam eget massa nec sem vulputate ullamcorper vel quis justo.</p>
  </div>
  <div class="card card-warning">
    <svg aria-hidden="true">
      <use xlink:href="#warning" />
    </svg>
    <span class="sr-only">Warning</span>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras convallis sodales erat vel accumsan. Nam eget massa nec sem vulputate ullamcorper vel quis justo.</p>
  </div>
  <div class="card card-error">
    <svg aria-hidden="true">
      <use xlink:href="#error" />
    </svg>
    <span class="sr-only">Error</span>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras convallis sodales erat vel accumsan. Nam eget massa nec sem vulputate ullamcorper vel quis justo.</p>
  </div>

  <div class="card card-warning">
    <svg aria-hidden="true">
      <use xlink:href="#warning" />
    </svg>
    <span class="sr-only">Warning</span>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras convallis sodales erat vel accumsan. Nam eget massa nec sem vulputate ullamcorper vel quis justo.</p>
  </div>
  <div class="card card-error">
    <svg aria-hidden="true">
      <use xlink:href="#error" />
    </svg>
    <span class="sr-only">Error</span>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras convallis sodales erat vel accumsan. Nam eget massa nec sem vulputate ullamcorper vel quis justo.</p>
  </div>
  <div class="card card-success">
    <svg aria-hidden="true">
      <use xlink:href="#success" />
    </svg>
    <span class="sr-only">success</span>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras convallis sodales erat vel accumsan. Nam eget massa nec sem vulputate ullamcorper vel quis justo.</p>
  </div>

  <div class="card card-success">
    <svg aria-hidden="true">
      <use xlink:href="#success" />
    </svg>
    <span class="sr-only">Success</span>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras convallis sodales erat vel accumsan. Nam eget massa nec sem vulputate ullamcorper vel quis justo.</p>
  </div>
  <div class="card card-warning">
    <svg aria-hidden="true">
      <use xlink:href="#warning" />
    </svg>
    <span class="sr-only">Warning</span>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras convallis sodales erat vel accumsan. Nam eget massa nec sem vulputate ullamcorper vel quis justo.</p>
  </div>
  <div class="card card-error">
    <svg aria-hidden="true">
      <use xlink:href="#error" />
    </svg>
    <span class="sr-only">Error</span>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras convallis sodales erat vel accumsan. Nam eget massa nec sem vulputate ullamcorper vel quis justo.</p>
  </div>
</div>
<svg width="0" height="0" class="hidden">
  <symbol viewBox="0 0 24 24" id="error" fill="none">
    <path stroke-linecap="round" stroke-linejoin="round" stroke="currentColor" d="M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z" />
  </symbol>
  <symbol fill="none" id="warning" viewBox="0 0 24 24" stroke-width="1.5">
    <path stroke-linecap="round" stroke-linejoin="round" stroke="currentColor" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z" />
  </symbol>
  <symbol fill="none" id="success" viewBox="0 0 24 24" stroke-width="1.5">
    <path stroke-linecap="round" stroke-linejoin="round" stroke="currentColor" d="M9 12.75L11.25 15 15 9.75M21 12c0 1.268-.63 2.39-1.593 3.068a3.745 3.745 0 01-1.043 3.296 3.745 3.745 0 01-3.296 1.043A3.745 3.745 0 0112 21c-1.268 0-2.39-.63-3.068-1.593a3.746 3.746 0 01-3.296-1.043 3.745 3.745 0 01-1.043-3.296A3.745 3.745 0 013 12c0-1.268.63-2.39 1.593-3.068a3.745 3.745 0 011.043-3.296 3.746 3.746 0 013.296-1.043A3.746 3.746 0 0112 3c1.268 0 2.39.63 3.068 1.593a3.746 3.746 0 013.296 1.043 3.746 3.746 0 011.043 3.296A3.745 3.745 0 0121 12z" />
  </symbol>
</svg>
@import url("https://fonts.googleapis.com/css2?family=Martian+Mono&display=swap");
@layer reset, theme, layout, cards, demo;

@layer demo {
  .list > * {
    animation: zoomIn 0.3s linear forwards;
  }

  :root:has(.hide-error:checked) .card-error {
    animation: zoomOut 0.3s linear forwards;
  }
  :root:has(.hide-success:checked) .card-success {
    animation: zoomOut 0.3s linear forwards;
  }
  :root:has(.hide-warning:checked) .card-warning {
    animation: zoomOut 0.3s linear forwards;
  }

  @keyframes zoomOut {
    from {
      opacity: 1;
    }

    50% {
      opacity: 0;
      transform: scale3d(0.3, 0.3, 0.3);
    }

    to {
      opacity: 0;
      display: none;
    }
  }

  @keyframes zoomIn {
    from {
      display: none;
      opacity: 0;
      transform: scale3d(0.3, 0.3, 0.3);
    }

    50% {
      opacity: 1;
    }
  }
}

@layer theme {
  :root {
    --layout-column-min: 400px;
    --layout-gap: 3vmax;
  }
}

@layer cards {
  .card {
    --_bg: var(--bg, grey);
    --_color: var(--color, black);
    display: flex;
    gap: 8px;
    color: var(--_color);
    background: var(--_bg);
    border-radius: 1.8rem;
    padding: 30px;
    & svg {
      flex: 0 0 30px;
      width: 1.9rem;
      height: 1.9rem;
    }
    & p {
      padding-top: 0.3rem;
    }
  }
  .card-error {
    --bg: indianred;
    --color: white;
  }
  .card-success {
    --bg: PaleGreen;
    --color: darkgreen;
  }
  .card-warning {
    --bg: LemonChiffon;
    --color: darkorange;
  }
}

@layer layout {
  .controls {
    display: flex;
    gap: 30px;
    justify-content: center;
    align-items: center;
    padding-bottom: 30px;
  }
  .list {
    display: flex;
    flex-direction: column;
    gap: 1vmax;
    max-width: 700px;
    margin-inline: auto;
  }
}

@layer reset {
  *,
  *::before,
  *::after {
    box-sizing: border-box;
  }

  body {
    margin: 0;
    padding: 3vmax;
    font-family: "Martian Mono", monospace;
    color: white;
    min-height: 100vh;
    background-image: linear-gradient(
      153deg in oklch,
      oklch(79% 0.31 280) 0%,
      45%,
      oklch(46% 0.31 322) 131% 131%
    );
  }

  p {
    margin: 0 0 1rem 0;
    &:last-of-type {
      margin: 0;
    }
  }
  .sr-only:not(:focus):not(:active) {
    clip: rect(0 0 0 0);
    clip-path: inset(50%);
    height: 1px;
    overflow: hidden;
    position: absolute;
    white-space: nowrap;
    width: 1px;
  }
}
Run Pen

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.