JSFiddle - React, Tailwind, and code Playground

by joshmoto

HTML

<div id="order-items-meta-box" class="postbox ">
  <div class="postbox-header">

    <div data-plate="standard-uk-car" data-plate-option-value="front-rear">
      <div class="plate-builder-preview">
        <div class="plate plate-standard-uk-car">
          <div class="row justify-content-center">
            <div class="col-12">
              <div class="front">
                <div class="plate-chars"><svg class="char char_l" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 178.34 314.22">
                    <g>
                      <polygon class="char-jig" points="178.34 314.22 178.34 156.96 172.68 156.96 172.68 0 5.66 0 0 0 0 156.82 5.66 156.82 5.66 314.22 178.34 314.22"></polygon>
                      <path class="char-letter" d="M154.28,268.92H24.06a5.65,5.65,0,0,1-5.66-5.66V51a5.66,5.66,0,0,1,5.66-5.66H52.37A5.66,5.66,0,0,1,58,51V224.76a5.66,5.66,0,0,0,5.66,5.67h90.59a5.66,5.66,0,0,1,5.66,5.66v27.17A5.66,5.66,0,0,1,154.28,268.92Z"></path>
                    </g>
                  </svg><svg class="char char_r" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 178.34 314.22">
                    <g>
                      <polygon class="char-jig" points="178.34 314.22 178.34 156.96 172.68 156.96 172.68 0 5.66 0 0 0 0 156.82 5.66 156.82 5.66 314.22 178.34 314.22"></polygon>
                      <path class="char-letter" d="M151.8,268.92H121.43a5.65,5.65,0,0,1-5.31-3.71L84.87,180.07a5.66,5.66,0,0,0-5.32-3.71H63.69A5.65,5.65,0,0,0,58,182v81.24a5.65,5.65,0,0,1-5.66,5.66H24.06a5.65,5.65,0,0,1-5.66-5.66V51a5.66,5.66,0,0,1,5.66-5.66H109a51,51,0,0,1,51,51v28.87c0,25.86-11.1,42.27-29.21,49a5.64,5.64,0,0,0-3.26,7.24l29.64,79.91A5.66,5.66,0,0,1,151.8,268.92ZM120.31,103.61c0-12.74-7.36-19.82-19.82-19.82H63.69A5.66,5.66,0,0,0,58,89.45V132.2a5.65,5.65,0,0,0,5.66,5.66h36.8A19.82,19.82,0,0,0,120.31,118Z"></path>
                    </g>
                  </svg><svg class="char char_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 76.54 314.65">
                   ...

CSS

#plate-builder-plate-ajax {
  min-height: 100%;
}

#plate-builder-plate-ajax.loading {
  opacity: 0.25;
}

#plate-builder-input {
  text-align: center;
  font-weight: 700;
  text-transform: uppercase;
  resize: none;
}

#plate-builder-plates {
  font-size: 1.2rem;
}

#plate-builder-add-ons {
  font-size: 1.2rem;
}

#plate-builder-cart {
  padding-bottom: 1rem;
  margin-bottom: 2rem;
  border-bottom: 2px solid #373737;
}

#plate-builder-log {
  font-size: 80%;
  font-weight: 400;
  position: relative;
}

#plate-builder-log .default-message {
  position: absolute;
  opacity: 1;
  transition: opacity 0.25s ease;
  padding-left: 0.25rem;
  color: #a9a9a9;
}

#plate-builder-log .log-message {
  position: absolute;
  opacity: 0;
  transition: opacity 0.25s ease;
  padding-left: 0.25rem;
}

#plate-builder-log.active .default-message {
  opacity: 0;
}

#plate-builder-log.active .log-message {
  opacity: 1;
}

.plate-builder-preview {
  padding-bottom: 3rem;
}

.plate-builder-preview .plate-background {
  display: block;
}

.modal .plate-builder-preview {
  padding: 0;
}

.plate-builder-preview .plate-fill:after {
  z-index: 1;
  content: "";
  display: block;
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  mix-blend-mode: overlay;
  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 3 3"><rect x="0" fill="%23fff" width="1" height="1"/><polygon points="1,0 1,1 0,1 0,3 1,3 3,3 3,0 " fill="%23000" /></svg>');
  background-repeat: repeat;
  background-size: 3px 3px;
}

.plate-builder-preview .front {
  position: relative;
  cursor: pointer;
}

[data-plate-option-value=front-rear] .plate-builder-preview .front {
  margin-bottom: 2rem;
}

#plate-added-basket-modal [data-plate-option-value=front-rear] .plate-builder-preview .front {
  margin-bottom: 1.5rem;
}

[data-plate-option-value=rear] .plate-builder-preview .front {
  display: none;
}

.plate-builder-preview .front .plate-fill {
  fill:...