<article role="img" aria-label="CSS drawing of a cup with black coffee next to a coffee stain (seen from above)">
  <section class="stain">
    <div class="main-stain"></div>
    <div class="splash-stain"></div>
  </section>
  <section class="coffee-cup">
    <div class="handle"></div>
    <div class="cup">
      <div class="coffee">
        <div class="foam"></div>
        <div class="bubbles">
          <div class="bubble bubble-00"></div>
          <div class="bubble bubble-01"></div>
          <div class="bubble bubble-02"></div>
          <div class="bubble bubble-03"></div>
          <div class="bubble bubble-04"></div>
          <div class="bubble bubble-05"></div>
          <div class="bubble bubble-06"></div>
          <div class="bubble bubble-07"></div>
          <div class="bubble bubble-08"></div>
          <div class="bubble bubble-09"></div>
          <div class="bubble bubble-10"></div>
          <div class="bubble bubble-11"></div>
          <div class="bubble bubble-12"></div>
          <div class="bubble bubble-13"></div>
          <div class="bubble bubble-14"></div>
          <div class="bubble bubble-15"></div>
          <div class="bubble bubble-16"></div>
          <div class="bubble bubble-17"></div>
          <div class="bubble bubble-18"></div>
          <div class="bubble bubble-19"></div>
          <div class="bubble bubble-20"></div>
          <div class="bubble bubble-21"></div>
          <div class="bubble bubble-22"></div>
          <div class="bubble bubble-23"></div>
          <div class="bubble bubble-24"></div>
          <div class="bubble bubble-25"></div>
          <div class="bubble bubble-26"></div>
          <div class="bubble bubble-27"></div>
          <div class="bubble bubble-28"></div>
          <div class="bubble bubble-29"></div>
          <div class="bubble bubble-30"></div>
          <div class="bubble bubble-31"></div>
          <div class="bubble bubble-32"></div>
          <div class="bubble bubble-33"></div>
          <div class="bubble bubble-34"></div>
          <div class="bubble bubble-35"></div>
          <div class="bubble bubble-36"></div>
          <div class="bubble bubble-37"></div>
          <div class="bubble bubble-38"></div>
          <div class="bubble bubble-39"></div>
        </div>
      </div>
    </div>
  </section>
</article>
body {
  margin: 0;
  min-height: 100vh;
  overflow: hidden;
  background: radial-gradient(circle at calc(50% + 12vmin) calc(50% - 4vmin), #fff 29vmin, #eee)
}

article {
  width: 90vmin;
  height: 40vmin;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
/*   display: flex;
  justify-content: space-between; */
}

section {
  width: 40vmin;
  aspect-ratio: 1;
  position: absolute;
}

section *,
section *::before,
section *::after {
  position: absolute;
  box-sizing: border-box;
}

.stain {
  opacity: 0.35;
  left: 40%;
  top: -5%;
  filter: sepia(200%) brightness(360%) contrast(130%) hue-rotate(-15deg) grayscale(20%);
  background: #eee;
  mix-blend-mode: darken;
  -webkit-mask:
    radial-gradient(farthest-side at 25% 40%, #000 20%, #0000 45%),
    radial-gradient(#0004, #0000) 10% 25% / 17% 21%,
    radial-gradient(#0006, #0000) 30% 30% / 20% 20%,
    radial-gradient(#000c, #0000),
    radial-gradient(farthest-side, #0000 80%, #000)
}

.main-stain {
  top: 50%;
  left: 55%;
  transform: translate(-50%, -50%);
  width: 80%;
  aspect-ratio: 1;
  border-radius: 50%;
  background: 
    radial-gradient(circle at 70% 20%, #00f 10%, #0000 0),
    radial-gradient(circle at 81% 40%, #00f 6%, #0000 0),
    radial-gradient(circle at 20% 20%, #00f 6%, #0000 0),
    #fff
    ;
  box-shadow: 
    inset 5vmin -0.75vmin 0 -2.75vmin #006,
    inset -1vmin -1vmin blue,
    inset -1.5vmin 2.5vmin blue,
    1vmin 2vmin blue,
    -1vmin 2vmin 0 -1vmin blue,
    0 0 0 16vmin #fff;
  filter: blur(1.5vmin) contrast(500);
  
}

.splash-stain {
  width: 12vmin;
  aspect-ratio: 1;
  background:
    repeating-conic-gradient(#00f 0 3%, #0000 0 11%),
    repeating-conic-gradient(#0000 0 5%, #00f 0 7%) 50% / 60% 60%,
    repeating-conic-gradient(#0000 0 7%, #00f 0 9%) 50% / 70% 70%,
    repeating-conic-gradient(#0000 0 11%, #00f 0 13%) 50% / 80% 80%,
    radial-gradient(#00f 22%, #0000 0),
    #fff;
  background-repeat: no-repeat;
  filter: blur(0.78vmin) contrast(50) drop-shadow(0 0 0.75vmin #f008);
  box-shadow: 0 0 0 6vmin #fff;
  mix-blend-mode: darken;
  top: -1%;
  left:63%;
  border-radius: 50%
}

.coffee-cup {
  --c: #fff;
  --d: #e0e0e0;
  --s: #fffc;
  left: 10%;
  top: 20%;
  border-radius: 50%;
  background: #fff;
  box-shadow:
    -3.5vmin -2vmin 2vmin -1vmin #0001,
    -0.5vmin -0.5vmin 2vmin #0002,
    0 0 5vmin #0001
}

.handle {
  width: 32%;
  height: 18%;
  top: 99%;
  left: 49%;
  transform: rotate(75.5deg);
  box-shadow: 
    inset 0.5vmin 0 1vmin #0001,
   -7vmin 1vmin 2vmin #0001,
    -2.5vmin 0.5vmin 2vmin #0001,
    0 0 5vmin #0001;
  background:radial-gradient(13% 45% at 83% 50%, #fff, #0000),
   
    radial-gradient(100% 300% at 0% 70%, #00000018 15%, #0000 30%),
    
    radial-gradient(100% 300% at 0% 50%, #0001 15%, #0000 30%),
    linear-gradient(90deg, #0000 60%, #eee),
     radial-gradient(at 0 100%, #fffc, #ffff),
    var(--c);
  border-radius: 0 2vmin 2vmin 1vmin;
}

.cup {
  width: 100%;
  height: 100%;
  border-radius: 50%;
  background:
    radial-gradient(farthest-side at 49% 49%, var(--s) 85%, #fff0 90%),
    radial-gradient(farthest-side at 51% 51%, #0002 86.5%, #fff0 90%),
    radial-gradient(farthest-side, #ffff, var(--d));
  box-shadow:
    inset -0.5vmin -0.5vmin 1vmin 0.125vmin var(--s),
    inset 0.5vmin 0.5vmin 1vmin var(--s)
}

.coffee {
  width: 90%;
  aspect-ratio: 1;
  background: 
/*     radial-gradient(farthest-side at 80% 100%, #0000 95%, #63585633), */
    radial-gradient(50% 150% at 0 50%, #63585644 30%, #0000 35%),
    radial-gradient(125% 50% at 60% 0, #63585655 30%, #0000 40%),
    radial-gradient( closest-side circle at 45% 47%, #0000 92%, #140401 94%),
    radial-gradient(circle at 110% 80%, #837876, #635856 40%, #332422 50%, #33242200 55%),
    #080301;
  border-radius: 50%;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  overflow: hidden;
}

.foam {
  width: 100%;
  border-radius: 50%;
  aspect-ratio: 1;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  box-shadow:
    inset 0.2vmin 1.5vmin red,
    inset 0.65vmin 0 red,
    inset -0.5vmin 1.25vmin red,
    0 0 0 3vmin red
    ;
  background:
    linear-gradient(140deg, #0000 84%, red 0),
    radial-gradient(35% 100% at 0 50%, red 20%, #0000 0),
    radial-gradient(125% 40% at 60% 0, red 25%, #0000 0),
    radial-gradient(farthest-side, #0000 75%, #140401 0)
    ;
  filter: blur(1vmin) contrast(300) hue-rotate(63deg) brightness(2.5) sepia(60%) blur(0.05vmin);
  opacity: 0.8;
}

.bubbles {
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  box-shadow: inset 3vmin 1.5vmin 0.75vmin -2.5vmin #ffe57966;
}

.bubble {
  --s: 0.75vmin;
  aspect-ratio: 1;
  border-radius: 100%;
  background: #140401;
  box-shadow: 
    inset -1vmin -1vmin 1vmin -1vmin #ff84,
    inset 0 0 0.25vmin #14040188,
    0 0 var(--s) #ff86;
  background-image: 
    radial-gradient(circle at 60% 75%, #fffc 5%, #fff0 20%),
    radial-gradient(at 80% 65%, #fff7 2%, #fff0 15%)
}

/* big bubbles */
.bubble-00 { 
  width: 9%;
  height: 7%;
  top: 1%;
  left: 42%;
  background-image: radial-gradient(at 60% 75%, #fffc 5%, #fff0 20%),radial-gradient(at 80% 65%, #fffc 2%, #fff0 15%)
}

.bubble-01 { 
  width: 8%;
  top: 1.5%;
  left: 52%;
  background-image: radial-gradient(at 60% 65%, #fffc 5%, #fff0 20%),radial-gradient(at 40% 25%, #fff7 9%, #fff0 15%)
}

.bubble-02 { 
  width: 6%;
  height: 8%;
  left: 0.8%;
  top: 42%;
  background-image: radial-gradient(circle at 60% 75%, #fffc 5%, #fff0 20%),radial-gradient(at 80% 65%, #fff2 2%, #fff0 15%)
}

/* bottom right */
.bubble-03 { 
  width: 1.7%;
  top: 80%;
  left: 88%;
  background-image: radial-gradient(at 60% 65%, #fffc 5%, #fff0 20%),radial-gradient(at 40% 25%, #fff7 9%, #fff0 15%);
  border: 1px solid #ff88;
}

.bubble-04 { 
  width: 2%;
  top: 87%;
  left: 80%;
  background-image: radial-gradient(at 60% 65%, #fffc 5%, #fff0 20%),radial-gradient(at 40% 25%, #fff7 9%, #fff0 15%)
}

.bubble-05 { 
  width: 1.25%;
  top: 88.75%;
  left: 78.5%;
}

.bubble-06 { 
  width:1.5%;
  top: 84.5%;
  left: 83%;
  background-image: radial-gradient(at 60% 65%, #fffc 5%, #fff0 20%),radial-gradient(at 40% 25%, #fff7 9%, #fff0 15%)
}

.bubble-07 { 
  width: 1.5%;
  top: 82.3%;
  left: 84.75%;
  background-image: radial-gradient(at 60% 65%, #fff 5%, #fff0 20%),radial-gradient(at 40% 25%, #fff 9%, #fff0 15%);
  outline: 1px solid #ff84;
}

.bubble-08 { 
  width: 1.7%;
  top: 92%;
  left: 74%;
  background-image: radial-gradient(at 60% 65%, #fff 5%, #fff0 20%),radial-gradient(at 40% 25%, #fff 9%, #fff0 15%);
  outline: 1px solid #ff84;
}


.bubble-09 { 
  width: 1.5%;
  top: 90.5%;
  left: 75%;
  background-image: radial-gradient(at 60% 65%, #fff 5%, #fff0 20%),radial-gradient(at 40% 25%, #fff 9%, #fff0 15%);
  outline: 1px solid #ff84;
  box-shadow: 
    0.5vmin 0 0 -0.2vmin #140401,
    2.5vmin -1.5vmin 0 -0.1vmin #140404;
}

.bubble-10 {
  width: 3%;
  top: 50%;
}

.bubble-11 {
  width: 4%;
  top: 54%;
  left: 3%;
  box-shadow: 0 0 0.2vmin 0.1vmin #ff84;
}

.bubble-12 {
  width: 2.5%;
  top: 49.25%;
  left: 5%;
  box-shadow: 0 0 0.2vmin 0.2vmin #ff84;
}

.bubble-13 {
  width: 3.5%;
  top: 36.65%;
  left: 2%;
}

.bubble-14 {
  width: 1.5%;
  top: 40.25%;
  left: 2%;
}

.bubble-15 {
  width: 2%;
  top: 40%;
  left: 4.25%;
}

.bubble-16 {
  width: 2%;
  top: 50.35%;
  left: 3%;
}

.bubble-17 {
  width: 2.3%;
  top: 51.7%;
  left: 4.5%;
}

.bubble-18 {
  width: 1.5%;
  top: 48.5%;
  left: 0.125%;
}

.bubble-19 {
  aspect-ratio: 3/5;
  width: 4%;
  top: 60%;
  left: 1.5%;
  box-shadow: 0 0 0.04vmin 0.2vmin #ff82;
}

.bubble-20 {
  width: 4%;
  left: 49%;
  top: 7%;
  box-shadow: 0 0 0.1vmin 0.1vmin #ff84;
}

.bubble-21 {
  width: 3%;
  left: 50.2%;
  top: 0.3%;
  box-shadow: 0 0 0.1vmin 0.1vmin #ff84;
}

.bubble-22 {
  width: 1.2%;
  left: 50.75%;
  top: 5.75%;
  box-shadow: 
    0 0 0.1vmin 0.1vmin #ff84,
    0.9vmin 1.2vmin #140401,
    1.35vmin 1.3vmin 0 -0.07vmin #140401,
    1.7vmin 1.3vmin 0 -0.1vmin #140401,
    0.1vmin -0.85vmin 0 -0.07vmin #140401
}

.bubble-23 {
  width: 2%;
  left: 57.5%;
  top: 8.75%;
  box-shadow: 0 0 0.1vmin 0.1vmin #ff84
}

.bubble-24 {
  width: 3.7%;
  left: 37%;
  top: 2.75%;
  box-shadow: 0 0 0.1vmin 0.1vmin #ff84
}

.bubble-25 {
  width: 2%;
  left: 40%;
  top: 1.75%;
  box-shadow: 0 0 0.1vmin 0.1vmin #ff84
}

.bubble-26 {
  width: 2.25%;
  left: 40%;
  top: 5.75%;
  box-shadow: 0 0 0.1vmin 0.1vmin #ff84
}

.bubble-27 {
  width: 5%;
  left: 60.5%;
  top: 2%;
}

.bubble-28 {
  aspect-ratio: 5/4;
  width:4%;
  left: 60%;
  top: 7%;
  box-shadow: 0 0 0.1vmin 0.1vmin #ff84
}

.bubble-29 {
  aspect-ratio: 9/8;
  width: 5.5%;
  left: 65%;
  top: 5.2%;
  box-shadow: 0 0.1vmin 0.2vmin 0.1vmin #ff84
}

.bubble-30 {
  aspect-ratio: 5/3;
  width: 6%;
  left: 25%;
  top: 5.8%;
  border-radius: 50% / 25% 25% 100% 100%;
  box-shadow: 0 0.1vmin 0.2vmin 0.1vmin #ff84;
  box-shadow: 
    inset -1vmin -1vmin 1vmin -1vmin #ff84,
    inset 0 0 0.25vmin #14040188,
    0 0.1vmin 0.025vmin 0.1vmin #ff82,
    0 0 var(--s) #ff86;
  transform: rotate(-28deg)
}

.bubble-31 {
  aspect-ratio: 9/8;
  width: 3.5%;
  left: 20%;
  top: 10.2%;
  box-shadow: 0 0.1vmin 0.2vmin 0.1vmin #ff84
}

.bubble-32 {
  width: 1.5%;
  left: 23.5%;
  top: 10%;
  box-shadow: 0 0.1vmin 0.2vmin 0.1vmin #ff84
}

.bubble-33 {
  width: 2.5%;
  left: 22.5%;
  top: 8.2%;
}

.bubble-34 {
  width: 1.15%;
  left: 25.25%;
  top: 9.5%;
}

.bubble-35 {
  width: 1.25%;
  left: 18.7%;
  top: 12%;
}

.bubble-36 {
  width: 2%;
  left: 19%;
  top: 13%;
  box-shadow: 0 0.1vmin 0vmin 0.1vmin #ff84
}

.bubble-37 {
  width: 3%;
  left: 16%;
  top: 13.4%;
  box-shadow: 0 0.1vmin 0vmin 0.1vmin #ff84
}

.bubble-38 {
  width: 2.2%;
  left: 13%;
  top: 16.84%;
  box-shadow: 0 0.1vmin 0vmin 0.1vmin #ff84
}


.bubble-39 {
  aspect-ratio: 5/3;
  width: 6%;
  left: 82.2%;
  top: 15.8%;
  border-radius: 50% / 25% 25% 100% 100%;
  box-shadow: 0 0.1vmin 0.2vmin 0.1vmin #ff84;
  box-shadow: 
    inset -1vmin -1vmin 1vmin -1vmin #ff84,
    inset 0 0 0.25vmin #14040188,
    0vmin 0.1vmin 0.06vmin #ff54,
    0 0 var(--s) #ff86;
  transform: rotate(45deg)
}

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.