<!-- original art and inspiration https://twitter.com/84Aleha/status/1570778115928117248 -->
<div class="frame">
  <div class="ambient"></div>

  <div class="weather">
    <div class="snow" id="snow">

    </div>

  </div>

  <div class="bat-1"></div>
  <div class="bat-4">
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window tv"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window yellow"></div>
    </div>
    <div class="level">
      <div class="window white"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window green"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window blue"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window blue"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window yellow"></div>
      <div class="window"></div>
    </div>
  </div>
  <div class="bat-3">
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window yellow"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window white"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
  </div>
  <div class="bat-2">
    <div class="level">
      <div class="window tv"></div>
      <div class="window blue"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window green"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window white"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window blue"></div>
      <div class="window green"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window blue"></div>
      <div class="window blue"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
    <div class="level">
      <div class="window"></div>
      <div class="window"></div>
      <div class="window"></div>
    </div>
  </div>

  <div class="pole"></div>
  <div class="pole-curve"></div>
  <div class="lamp"></div>
</div>
// original art and inspiration https://twitter.com/84Aleha/status/1570778115928117248
.frame {
  position: relative;
  margin: auto;
  aspect-ratio: 1/1.5;
  height: 99%;
  background: linear-gradient(to bottom, #3E383A, #4D4A4E, #444452);
  overflow: hidden;

  .ambient {
    z-index: 1;
    position: absolute;
    background: yellow;
    inset: -35%;
    top: -56%;
    left: -29%;
    mask-image: radial-gradient(circle, #ffffffff, #ffffff66 13%, #ffffff00 100%);
    -webkit-mask-image: radial-gradient(circle, #ffffffff, #ffffff66 13%, #ffffff00 100%);
    opacity: .25;
  }

  .weather {
    z-index: 1;
    position: absolute;
    inset: -2%;
    mask-image: radial-gradient(circle, #ffffffff, #ffffff66 13%, #ffffff33 30%, #ffffff11 100%);
    -webkit-mask-image: radial-gradient(circle, #ffffffff, #ffffff66 13%, #ffffff33 30%, #ffffff15 100%);
    top: -15%;
    left: -4%;
  }

  .snow {
    z-index: 1;
    position: absolute;
    inset: 0;

      .dot {
        height: .35vh;
        width: .35vh;
        max-width: 4px;
        max-height: 4px;
        border-radius: 40%;
        position: absolute;
        background: whitesmoke;
      }
  }

  [class^="bat"] {
    .level {
      padding-right: 6%;
      display: flex;
      align-items: center;
      justify-content: space-evenly;
      rotate: -16deg;
      margin-bottom: 27%;

      .window {
        aspect-ratio: 1/1;
        background: #20181599;
        transform: skew(-10deg);
        width: 14%;
        
        &.tv {
          animation-name: watchingtv;
          animation-duration: 4s;
          animation-timing-function: linear;
          animation-iteration-count: infinite;
          box-shadow: 0 0 16px #7AABC6;
        }
        &.yellow {
          background: #DF9A62AA !important;
          box-shadow: 0 0 16px #DF9A62;
        }
        &.green {
          background: #67A796AA !important;
          box-shadow: 0 0 16px #67A796;
        }
        &.white {
          background: #CDC4BCAA !important;
          box-shadow: 0 0 16px #CDC4BC;
        }
        &.blue {
          background: #7AABC6AA !important;
          box-shadow: 0 0 16px #7AABC6;
        }
      }
    }
  }

  .bat-1 {
    position: absolute;
    right: -21%;
    bottom: 0;
    width: 45%;
    height: 80%;
    background: linear-gradient(to bottom, #201815, #2D2320);
    clip-path: polygon(13% 15%, 100% 0%, 100% 100%, 0% 100%);
  }

  .bat-2 {
    rotate: -6deg;
    position: absolute;
    right: 2%;
    bottom: -10%;
    width: 23%;
    height: 80%;
    background: linear-gradient(to bottom, #3B3332, #483B3E);
    clip-path: polygon(0 6%, 69% 0%, 100% 100%, 0% 100%);

    filter: blur(0.5px);
    padding-top: 10%;
    padding-right: 6%;
    box-sizing: border-box;

    .level {
      @for $i from 2 through 14 {
        &:nth-child(#{$i}) {
          width: calc(100% + #{$i * 1.7}#{"%"});
          rotate: calc(-14deg + #{$i * 1.7}#{"deg"});

          .window {
            transform: skew(calc(-14deg + #{$i * 2}#{"deg"}));
          }
        }
      }
    }
  }

  .bat-3 {
    rotate: 0deg;
    position: absolute;
    right: 12%;
    bottom: -10%;
    width: 40%;
    height: 75%;
    background: linear-gradient(to bottom, #494341, #493C3F);
    clip-path: polygon(0 10%, 69% 0%, 100% 100%, 0% 100%);

    filter: blur(1px);
    padding-top: 10%;
    padding-right: 15%;
    box-sizing: border-box;

    .level {
      rotate: -14deg;
      margin-bottom: 25%;

      .window {
        width: 10%;
        background: #20181560;
        transform: skew(-10deg);
      }

      @for $i from 2 through 14 {
        &:nth-child(#{$i}) {
          width: calc(100% + #{$i * 2}#{"%"});
          rotate: calc(-14deg + #{$i * 2}#{"deg"});

          .window {
            transform: skew(calc(-14deg + #{$i * 1}#{"deg"}));
          }
        }
      }
    }
  }

  .bat-4 {
    rotate: 4deg;
    position: absolute;
    right: 26%;
    bottom: -10%;
    width: 40%;
    height: 65%;
    background: linear-gradient(to bottom, #4A474D, #4A4049);
    clip-path: polygon(0 13%, 69% 0%, 100% 100%, 0% 100%);

    filter: blur(1.5px);
    padding-top: 10%;
    padding-right: 25%;
    box-sizing: border-box;

    .level {
      rotate: -16deg;
      margin-bottom: 27%;

      .window {
        width: 10%;
        background: #20181544;
        transform: skew(-10deg);
      }

      @for $i from 2 through 14 {
        &:nth-child(#{$i}) {
          width: calc(100% + #{$i * 1.7}#{"%"});
          rotate: calc(-14deg + #{$i * 1.7}#{"deg"});

          .window {
            transform: skew(calc(-14deg + #{$i * 1}#{"deg"}));
          }
        }
      }
    }
  }

  .pole {
    rotate: 14deg;
    position: absolute;
    right: 68%;
    bottom: -10%;
    width: 10%;
    height: 68%;
    clip-path: polygon(0 0, 21% 0, 100% 100%, 0% 100%);
    background: linear-gradient(31deg, #29180E, #29180E, #614121 90%, #614121);
  }

  .lamp {
    rotate: -90deg;
    position: absolute;
    right: 45%;
    top: 37.5%;
    border-radius: 40% 50% 50% 40%;
    height: 4%;
    width: 3.5%;
    background: yellow;
    box-shadow: 0 0 16px yellow;
  }

  .pole-curve {
    rotate: 14deg;
    position: absolute;
    right: 68%;
    bottom: -10%;
    width: 10%;
    height: 68%;

    &::after {
      rotate: -9deg;
      content: "";
      position: absolute;
      background: #614121;
      top: -12%;
      left: -7%;
      width: 220%;
      height: 12%;
      clip-path: polygon(62% 41%, 37% 48%, 16% 59%, 0% 80%, 0 100%, 11% 100%, 13% 80%, 25% 66%, 42% 55%, 56% 50%, 100% 44%, 100% 39%);
    }
  }
}


@keyframes watchingtv {
  0% { background-color: #67A796AA; }
  25% { background-color: #7AABC6; }
  25.5% { background-color: #67A796AA; }
  97% { background-color: #67A796AA; }
  99% { background-color: #FFBF00AA; }
  100% { background-color: #67A796AA; }
}

body, html {
  margin: 0;
  padding: 0;
  height: 100%;
  background-color: black;
  color: #ffffffAA;
  font-family: 'Avenir', sans-serif;
}
View Compiled
let flocons = null;
const maxOverflow = 110;
const nbFlocons = 5000;


function randomIntFromInterval(min = 0, max = maxOverflow) {
  return Math.random() * (max - min + 1) + min;
}

function downFall() {
  const list = flocons || document.getElementsByClassName('dot');
  flocons = Array.from(list);
  if (!flocons) {
    throw new Error('flocons undefined');
  }
  for (let flocon of Array.from(flocons)) {
    const x = +flocon.style.top.replace('%', '');
    const y = +flocon.style.left.replace('%', '');
    let top = randomIntFromInterval(0, 1) + x;
    let left = randomIntFromInterval(-4, 0) + y;
    top = top > maxOverflow ? 0 : top;
    left = left < 0 ? maxOverflow : left;
    flocon.style.top = `${top}%`;
    flocon.style.left = `${left}%`;
  }
}

const snowContainer = document.getElementById('snow');
if (!snowContainer) {
  throw new Error('snowContainer undefined');
}
for (let i = 0; i < nbFlocons; i++) {
  const flocon = document.createElement('div');
  flocon.classList.add('dot');
  const top = randomIntFromInterval();
  const left = randomIntFromInterval();
  flocon.style.top = `${top}%`;
  flocon.style.left = `${left}%`;
  snowContainer.appendChild(flocon);
}
setInterval(() => this.downFall(), 100); 

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.