<button>
  <svg class="heart" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 40">
    <!-- Sprinkles -->
    <g class="heart__fragments">
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
      <circle cx="20" cy="20" r="2" class="heart__fragment" />
    </g>
    <g class="heart__beat">
      <!-- First little stroke line -->
      <path d="M10.682 36.832a2.453 2.453 0 001.595-3.128 2.453 2.453 0 00-3.067-1.656 2.453 2.453 0 00-1.656 3.066 2.453 2.453 0 003.067 1.718z" class="heart__segment heart__segment--start"/>
      <path d="M11.202 36.895a2.446 2.446 0 002.14-2.751 2.446 2.446 0 00-2.752-2.201 2.446 2.446 0 00-2.2 2.812 2.446 2.446 0 002.812 2.14z" class="heart__segment heart__segment--start"/>
      <path d="M12.46 36.9a2.516 2.516 0 002.2-2.893 2.516 2.516 0 00-2.83-2.2 2.516 2.516 0 00-2.2 2.83 2.516 2.516 0 002.83 2.263z" class="heart__segment heart__segment--start"/>
      <path d="M13.993 36.706a2.584 2.584 0 002.261-2.907 2.584 2.584 0 00-2.907-2.262 2.584 2.584 0 00-2.326 2.908 2.584 2.584 0 002.972 2.26z" class="heart__segment heart__segment--start"/>
      <path d="M15.376 36.44a2.515 2.515 0 002.2-2.83 2.515 2.515 0 00-2.83-2.264 2.515 2.515 0 00-2.2 2.893 2.515 2.515 0 002.83 2.2z" class="heart__segment heart__segment--start"/>
      <path d="M16.556 36.184a2.521 2.521 0 002.143-2.9 2.521 2.521 0 00-2.899-2.142 2.521 2.521 0 00-2.143 2.899 2.521 2.521 0 002.9 2.143z" class="heart__segment heart__segment--start"/>
      <path d="M17.772 35.933a2.522 2.522 0 002.017-3.026 2.522 2.522 0 00-3.026-2.018 2.522 2.522 0 00-1.955 3.027 2.522 2.522 0 002.964 2.017z" class="heart__segment heart__segment--start"/>
      <path d="M18.976 35.641a2.443 2.443 0 001.833-3.054 2.443 2.443 0 00-3.054-1.771 2.443 2.443 0 00-1.772 3.054 2.443 2.443 0 003.054 1.771z" class="heart__segment heart__segment--start"/>
      <path d="M20.07 35.305a2.588 2.588 0 001.553-3.365 2.588 2.588 0 00-3.365-1.553 2.588 2.588 0 00-1.552 3.365 2.588 2.588 0 003.364 1.553z" class="heart__segment heart__segment--start"/>
      <path d="M21.368 34.712a2.599 2.599 0 001.3-3.509 2.599 2.599 0 00-3.38-1.3 2.599 2.599 0 00-1.364 3.444c.585 1.3 2.08 1.95 3.444 1.3z" class="heart__segment heart__segment--start"/>
      <!-- End little stroke line -->
      <path d="M12.297 30.225c1.073.975 2.682.975 3.706-.146.976-1.025.976-2.683-.097-3.658-1.073-.976-2.683-.976-3.707.097-.975 1.073-.975 2.683.098 3.707z" class="heart__segment heart__segment--middle"/>
      <path d="M11.224 29.103c.975 1.024 2.585 1.122 3.658.098 1.072-.976 1.121-2.585.146-3.658a2.585 2.585 0 00-3.707-.146 2.585 2.585 0 00-.146 3.706z" class="heart__segment heart__segment--middle"/>
      <path d="M10.151 27.884c.975 1.122 2.536 1.268 3.658.293 1.121-.976 1.268-2.536.341-3.658a2.585 2.585 0 00-3.706-.293 2.585 2.585 0 00-.293 3.658z" class="heart__segment heart__segment--middle"/>
      <path d="M9.127 26.665a2.585 2.585 0 003.706.439 2.585 2.585 0 00.39-3.707 2.585 2.585 0 00-3.657-.39 2.585 2.585 0 00-.44 3.658z" class="heart__segment heart__segment--middle"/>
      <path d="M8.2 25.445c.83 1.17 2.439 1.415 3.658.488 1.17-.829 1.414-2.438.536-3.609a2.585 2.585 0 00-3.657-.536c-1.17.878-1.463 2.438-.537 3.657z" class="heart__segment heart__segment--middle"/>
      <path d="M7.322 24.129c.78 1.219 2.341 1.56 3.56.731 1.22-.829 1.561-2.438.732-3.609a2.585 2.585 0 00-3.609-.731 2.585 2.585 0 00-.731 3.609z" class="heart__segment heart__segment--middle"/>
      <path d="M6.445 22.812a2.585 2.585 0 003.56.927 2.585 2.585 0 00.975-3.61 2.585 2.585 0 00-3.609-.926 2.585 2.585 0 00-.975 3.609z" class="heart__segment heart__segment--middle"/>
      <path d="M5.664 21.446a2.585 2.585 0 003.512 1.122 2.585 2.585 0 001.17-3.511 2.585 2.585 0 00-3.463-1.17 2.585 2.585 0 00-1.219 3.51z" class="heart__segment heart__segment--middle"/>
      <path d="M5.03 19.983c.537 1.317 2.049 1.951 3.414 1.463a2.585 2.585 0 001.463-3.413 2.585 2.585 0 00-3.414-1.463 2.585 2.585 0 00-1.463 3.413z" class="heart__segment heart__segment--middle"/>
      <path d="M4.543 18.472a2.585 2.585 0 003.218 1.755 2.585 2.585 0 001.805-3.218 2.585 2.585 0 00-3.268-1.805 2.585 2.585 0 00-1.804 3.268z" class="heart__segment heart__segment--middle"/>
      <path d="M4.152 16.911c.244 1.463 1.561 2.39 3.024 2.146a2.602 2.602 0 002.146-3.024 2.602 2.602 0 00-3.024-2.146c-1.463.244-2.39 1.56-2.146 3.024z" class="heart__segment heart__segment--middle"/>
      <path d="M4.006 15.35c0 1.463 1.22 2.536 2.731 2.439 1.463 0 2.536-1.22 2.439-2.682 0-1.464-1.22-2.585-2.683-2.488-1.463.05-2.584 1.22-2.487 2.731z" class="heart__segment heart__segment--middle"/>
      <path d="M4.006 13.741a2.587 2.587 0 002.439 2.78 2.512 2.512 0 002.78-2.341c.146-1.463-.976-2.731-2.39-2.829-1.463-.146-2.683.927-2.829 2.39z" class="heart__segment heart__segment--middle"/>
      <path d="M4.25 12.18c-.293 1.415.585 2.78 2 3.073 1.463.292 2.828-.537 3.12-1.95.293-1.464-.585-2.83-1.999-3.122-1.463-.341-2.828.536-3.121 1.95z" class="heart__segment heart__segment--middle"/>
      <path d="M4.689 10.62c-.488 1.365.146 2.828 1.512 3.414 1.365.487 2.877-.195 3.414-1.512.487-1.415-.196-2.878-1.512-3.414-1.415-.488-2.878.146-3.414 1.512z" class="heart__segment heart__segment--middle"/>
      <path d="M5.372 9.206a2.585 2.585 0 00.975 3.56 2.578 2.578 0 003.56-.927c.732-1.268.342-2.829-.975-3.56a2.585 2.585 0 00-3.56.927z" class="heart__segment heart__segment--middle"/>
      <path d="M6.347 7.889c-.975 1.121-.878 2.73.244 3.657 1.122.976 2.73.878 3.706-.243.976-1.073.83-2.731-.292-3.658a2.585 2.585 0 00-3.658.244z" class="heart__segment heart__segment--middle"/>
      <path d="M7.469 6.816a2.585 2.585 0 00-.39 3.609 2.585 2.585 0 003.657.487 2.585 2.585 0 00.44-3.706 2.585 2.585 0 00-3.707-.439z" class="heart__segment heart__segment--middle"/>
      <path d="M8.834 5.89a2.585 2.585 0 00-1.121 3.56 2.585 2.585 0 003.56 1.121 2.585 2.585 0 001.073-3.56 2.585 2.585 0 00-3.512-1.122z" class="heart__segment heart__segment--middle"/>
      <path d="M10.297 5.304A2.585 2.585 0 008.59 8.572a2.585 2.585 0 003.268 1.755 2.585 2.585 0 001.707-3.267 2.585 2.585 0 00-3.268-1.756z" class="heart__segment heart__segment--middle"/>
      <path d="M11.907 4.963c-1.463.195-2.439 1.463-2.341 2.926.195 1.463 1.463 2.438 2.926 2.292 1.463-.146 2.438-1.463 2.292-2.926-.195-1.463-1.463-2.439-2.926-2.292z" class="heart__segment heart__segment--middle"/>
      <path d="M13.467 4.963c-1.463-.098-2.633.975-2.78 2.438a2.587 2.587 0 002.439 2.78 2.587 2.587 0 002.78-2.439 2.587 2.587 0 00-2.439-2.78z" class="heart__segment heart__segment--middle"/>
      <path d="M15.077 5.206c-1.463-.34-2.78.488-3.122 1.951-.34 1.415.488 2.78 1.951 3.121 1.414.342 2.78-.487 3.121-1.95.342-1.463-.487-2.78-1.95-3.122z" class="heart__segment heart__segment--middle"/>
      <path d="M16.588 5.645c-1.365-.487-2.828.147-3.365 1.512-.487 1.366.147 2.878 1.463 3.414 1.415.488 2.927-.146 3.414-1.512.488-1.365-.146-2.877-1.463-3.414z" class="heart__segment heart__segment--middle"/>
      <path d="M18.052 6.328a2.585 2.585 0 00-3.56 1.073 2.585 2.585 0 001.072 3.56c1.317.683 2.878.195 3.56-1.073.683-1.316.196-2.877-1.072-3.56z" class="heart__segment heart__segment--middle"/>
      <path d="M19.417 7.157a2.585 2.585 0 00-3.658.683 2.585 2.585 0 00.683 3.658c1.22.829 2.829.487 3.658-.732.829-1.17.487-2.78-.683-3.609z" class="heart__segment heart__segment--middle"/>
      <path d="M20.636 8.133a2.585 2.585 0 00-3.657.292c-.976 1.122-.83 2.731.292 3.658 1.122.975 2.78.829 3.707-.293.975-1.121.829-2.73-.342-3.657z" class="heart__segment heart__segment--middle"/>
      <path d="M21.807 9.206a2.585 2.585 0 00-3.658-.05 2.585 2.585 0 00-.097 3.658c.975 1.073 2.633 1.073 3.706.098 1.024-1.024 1.073-2.634.049-3.706z" class="heart__segment heart__segment--middle"/>
      <path d="M22.83 10.425a2.585 2.585 0 00-3.657-.488 2.585 2.585 0 00-.487 3.658 2.585 2.585 0 003.657.487 2.585 2.585 0 00.488-3.657z" class="heart__segment heart__segment--middle"/>
      <path d="M23.757 11.693a2.585 2.585 0 00-3.56-.927 2.585 2.585 0 00-.975 3.56 2.585 2.585 0 003.56.976 2.585 2.585 0 00.975-3.56z" class="heart__segment heart__segment--middle"/>
      <path d="M24.391 13.156c-.487-1.366-1.95-2-3.316-1.512a2.6 2.6 0 101.805 4.877c1.365-.488 2.048-1.95 1.56-3.365z" class="heart__segment heart__segment--middle"/>
      <path d="M24.83 14.765c-.195-1.463-1.463-2.487-2.926-2.34-1.463.146-2.438 1.462-2.292 2.877.146 1.463 1.463 2.438 2.877 2.34 1.464-.195 2.439-1.463 2.341-2.926z" class="heart__segment heart__segment--middle"/>
      <path d="M24.782 16.375c.195-1.464-.78-2.732-2.244-2.927-1.463-.243-2.73.732-2.926 2.146a2.541 2.541 0 002.195 2.975c1.463.195 2.73-.731 2.926-2.194z" class="heart__segment heart__segment--middle"/>
      <path d="M24.343 17.935c.585-1.365 0-2.877-1.366-3.414a2.585 2.585 0 00-3.414 1.317 2.585 2.585 0 001.317 3.414c1.366.585 2.877 0 3.414-1.317z" class="heart__segment heart__segment--middle"/>
      <path d="M23.465 19.3c.975-1.121.878-2.73-.244-3.706a2.585 2.585 0 00-3.658.244c-.975 1.073-.877 2.731.195 3.658 1.122.975 2.731.878 3.707-.195z" class="heart__segment heart__segment--middle"/>
      <path d="M22.197 20.325a2.585 2.585 0 00.975-3.56 2.585 2.585 0 00-3.511-1.024 2.585 2.585 0 00-1.024 3.56 2.585 2.585 0 003.56.975z" class="heart__segment heart__segment--middle"/>
      <path d="M20.636 20.861c1.463-.244 2.439-1.56 2.146-3.023-.244-1.463-1.56-2.39-2.975-2.146-1.463.244-2.438 1.56-2.146 3.023.244 1.463 1.561 2.39 3.024 2.146z" class="heart__segment heart__segment--middle"/>
      <path d="M19.027 20.861c1.463.244 2.78-.683 3.024-2.146.243-1.414-.683-2.78-2.097-3.023-1.464-.244-2.78.683-3.024 2.097-.293 1.463.634 2.78 2.097 3.072z" class="heart__segment heart__segment--middle"/>
      <path d="M17.515 20.276a2.553 2.553 0 003.56-.975c.732-1.22.342-2.78-.926-3.512a2.585 2.585 0 00-3.56.927 2.585 2.585 0 00.926 3.56z" class="heart__segment heart__segment--middle"/>
      <path d="M16.247 19.203a2.585 2.585 0 003.707.341 2.585 2.585 0 00.34-3.657 2.585 2.585 0 00-3.657-.342 2.585 2.585 0 00-.39 3.658z" class="heart__segment heart__segment--middle"/>
      <path d="M15.418 17.838a2.708 2.708 0 003.414 1.463 2.585 2.585 0 001.463-3.414 2.585 2.585 0 00-3.414-1.463 2.585 2.585 0 00-1.463 3.414z" class="heart__segment heart__segment--middle"/>
      <path d="M15.028 16.277c.195 1.463 1.463 2.438 2.926 2.195 1.463-.196 2.438-1.463 2.243-2.927-.195-1.463-1.463-2.438-2.926-2.243-1.463.195-2.438 1.463-2.243 2.926z" class="heart__segment heart__segment--middle"/>
      <path d="M14.98 14.619c-.147 1.463.877 2.73 2.34 2.926 1.463.098 2.682-.878 2.829-2.34.195-1.464-.878-2.732-2.293-2.878-1.463-.147-2.73.878-2.926 2.34z" class="heart__segment heart__segment--middle"/>
      <path d="M15.37 13.107c-.488 1.317.097 2.829 1.462 3.365 1.366.488 2.926-.146 3.414-1.463a2.585 2.585 0 00-1.463-3.414 2.585 2.585 0 00-3.414 1.463z" class="heart__segment heart__segment--middle"/>
      <path d="M16.1 11.693a2.585 2.585 0 00.879 3.56c1.268.731 2.828.341 3.608-.927.732-1.268.342-2.828-.926-3.56a2.585 2.585 0 00-3.609.878z" class="heart__segment heart__segment--middle"/>
      <path d="M16.979 10.327a2.585 2.585 0 00.487 3.658 2.585 2.585 0 003.61-.39 2.585 2.585 0 00-.44-3.707 2.585 2.585 0 00-3.657.488z" class="heart__segment heart__segment--middle"/>
      <path d="M18.052 9.157c-1.025 1.024-1.025 2.633 0 3.706 1.072.976 2.682.976 3.706-.049a2.665 2.665 0 000-3.706 2.585 2.585 0 00-3.706 0z" class="heart__segment heart__segment--middle"/>
      <path d="M19.222 8.084a2.585 2.585 0 00-.341 3.657c.926 1.122 2.536 1.317 3.657.342a2.572 2.572 0 00.342-3.658 2.585 2.585 0 00-3.658-.341z" class="heart__segment heart__segment--middle"/>
      <path d="M20.49 7.108a2.585 2.585 0 00-.732 3.658c.83 1.17 2.439 1.512 3.61.732 1.219-.83 1.56-2.439.73-3.658a2.585 2.585 0 00-3.608-.732z" class="heart__segment heart__segment--middle"/>
      <path d="M21.855 6.328a2.585 2.585 0 00-1.121 3.512 2.585 2.585 0 003.511 1.121 2.585 2.585 0 001.122-3.511 2.585 2.585 0 00-3.512-1.122z" class="heart__segment heart__segment--middle"/>
      <path d="M23.319 5.694a2.609 2.609 0 101.853 4.877c1.317-.488 2-2 1.463-3.365-.488-1.366-1.95-2.048-3.316-1.512z" class="heart__segment heart__segment--middle"/>
      <path d="M24.83 5.206a2.585 2.585 0 00-1.95 3.122c.341 1.463 1.707 2.292 3.12 1.95 1.464-.292 2.293-1.706 1.952-3.12-.342-1.415-1.707-2.293-3.122-1.952z" class="heart__segment heart__segment--middle"/>
      <path d="M26.391 4.963c-1.463.097-2.487 1.365-2.39 2.828.147 1.463 1.366 2.487 2.829 2.39a2.561 2.561 0 002.39-2.829c-.098-1.463-1.366-2.487-2.829-2.39z" class="heart__segment heart__segment--middle"/>
      <path d="M28 4.963c-1.463-.147-2.73.877-2.877 2.34-.146 1.464.878 2.732 2.292 2.878 1.463.146 2.731-.878 2.926-2.341.147-1.463-.878-2.731-2.34-2.877z" class="heart__segment heart__segment--middle"/>
      <path d="M29.56 5.304c-1.365-.488-2.828.293-3.267 1.707-.487 1.365.293 2.829 1.659 3.267 1.463.488 2.877-.292 3.316-1.658.488-1.463-.293-2.877-1.707-3.316z" class="heart__segment heart__segment--middle"/>
      <path d="M31.073 5.938a2.585 2.585 0 00-3.56 1.073 2.585 2.585 0 001.073 3.511c1.268.732 2.828.244 3.51-1.024.732-1.317.245-2.877-1.072-3.56z" class="heart__segment heart__segment--middle"/>
      <path d="M32.39 6.816a2.585 2.585 0 00-3.658.439 2.585 2.585 0 00.439 3.657 2.585 2.585 0 003.657-.438 2.585 2.585 0 00-.438-3.658z" class="heart__segment heart__segment--middle"/>
      <path d="M33.56 7.889a2.585 2.585 0 00-3.706-.195 2.585 2.585 0 00-.196 3.706c.976 1.073 2.585 1.17 3.658.195 1.122-.975 1.22-2.585.244-3.706z" class="heart__segment heart__segment--middle"/>
      <path d="M34.535 9.206a2.585 2.585 0 00-3.609-.878 2.585 2.585 0 00-.877 3.609 2.585 2.585 0 003.609.829 2.585 2.585 0 00.877-3.56z" class="heart__segment heart__segment--middle"/>
      <path d="M35.218 10.62a2.585 2.585 0 00-3.414-1.463 2.585 2.585 0 00-1.463 3.414 2.682 2.682 0 003.414 1.463 2.585 2.585 0 001.463-3.414z" class="heart__segment heart__segment--middle"/>
      <path d="M35.706 12.18c-.293-1.463-1.707-2.34-3.121-1.95-1.463.292-2.293 1.658-1.951 3.072.292 1.463 1.658 2.292 3.121 1.95 1.414-.292 2.292-1.657 1.95-3.12z" class="heart__segment heart__segment--middle"/>
      <path d="M35.95 13.741c-.098-1.463-1.366-2.536-2.829-2.438-1.463.146-2.487 1.365-2.39 2.828.098 1.463 1.366 2.536 2.829 2.439 1.463-.147 2.487-1.366 2.39-2.829z" class="heart__segment heart__segment--middle"/>
      <path d="M35.998 15.302c.05-1.463-1.024-2.634-2.487-2.731a2.587 2.587 0 00-2.78 2.438c-.048 1.463 1.025 2.682 2.439 2.78 1.512.097 2.73-.976 2.828-2.439z" class="heart__segment heart__segment--middle"/>
      <path d="M35.755 16.911c.292-1.463-.634-2.78-2.049-3.072-1.463-.244-2.828.682-3.072 2.097-.293 1.463.634 2.78 2.097 3.023 1.463.293 2.78-.634 3.024-2.048z" class="heart__segment heart__segment--middle"/>
      <path d="M35.413 18.423c.39-1.366-.39-2.78-1.755-3.219-1.415-.439-2.83.341-3.268 1.756a2.532 2.532 0 001.756 3.218c1.414.44 2.828-.34 3.267-1.755z" class="heart__segment heart__segment--middle"/>
      <path d="M34.877 19.935a2.585 2.585 0 00-1.463-3.414A2.585 2.585 0 0030 17.984a2.585 2.585 0 001.463 3.414 2.585 2.585 0 003.414-1.463z" class="heart__segment heart__segment--middle"/>
      <path d="M34.243 21.398c.634-1.317.097-2.829-1.22-3.512a2.585 2.585 0 00-3.51 1.22 2.585 2.585 0 001.218 3.51c1.366.635 2.878.098 3.512-1.218z" class="heart__segment heart__segment--middle"/>
      <path d="M33.511 22.763c.732-1.268.293-2.78-.975-3.511a2.585 2.585 0 00-3.61.975 2.585 2.585 0 001.025 3.56c1.268.732 2.829.293 3.56-.975z" class="heart__segment heart__segment--middle"/>
      <path d="M32.682 24.129c.78-1.22.488-2.78-.78-3.56a2.585 2.585 0 00-3.609.78 2.585 2.585 0 00.78 3.609c1.268.78 2.829.439 3.61-.83z" class="heart__segment heart__segment--middle"/>
      <path d="M31.804 25.445a2.585 2.585 0 00-.634-3.608 2.585 2.585 0 00-3.609.585 2.585 2.585 0 00.634 3.657 2.585 2.585 0 003.61-.634z" class="heart__segment heart__segment--middle"/>
      <path d="M30.878 26.713a2.585 2.585 0 00-.488-3.657 2.585 2.585 0 00-3.658.488 2.585 2.585 0 00.488 3.657 2.585 2.585 0 003.658-.488z" class="heart__segment heart__segment--middle"/>
      <path d="M29.902 27.933c.976-1.073.78-2.731-.341-3.658a2.585 2.585 0 00-3.658.293c-.975 1.121-.829 2.73.293 3.706 1.122.927 2.73.78 3.706-.341z" class="heart__segment heart__segment--middle"/>
      <path d="M28.878 29.152c.976-1.073.927-2.682-.146-3.707-1.073-.975-2.731-.975-3.707.098-.975 1.122-.975 2.731.147 3.706 1.073.976 2.682.976 3.706-.097z" class="heart__segment heart__segment--middle"/>
      <path d="M27.757 30.225c1.024-.976 1.072-2.585.097-3.658a2.585 2.585 0 00-3.706-.097 2.585 2.585 0 00-.098 3.657c.975 1.073 2.634 1.122 3.707.147z" class="heart__segment heart__segment--middle"/>
      <path d="M26.537 31.298a2.572 2.572 0 00.342-3.658 2.585 2.585 0 00-3.658-.341 2.585 2.585 0 00-.341 3.657c.975 1.122 2.536 1.268 3.657.342z" class="heart__segment heart__segment--middle"/>
      <path d="M25.318 32.273c1.17-.878 1.414-2.438.537-3.658-.878-1.17-2.439-1.414-3.658-.536a2.585 2.585 0 00-.537 3.658c.878 1.17 2.439 1.414 3.658.536z" class="heart__segment heart__segment--middle"/>
      <path d="M24.001 33.15a2.585 2.585 0 00.78-3.56 2.585 2.585 0 00-3.608-.78 2.585 2.585 0 00-.78 3.61A2.585 2.585 0 0024 33.2z" class="heart__segment heart__segment--middle"/>
      <path d="M22.685 34.029a2.585 2.585 0 00.975-3.61 2.585 2.585 0 00-3.609-.974 2.585 2.585 0 00-.975 3.608 2.585 2.585 0 003.609.976z" class="heart__segment heart__segment--middle"/>
      <path d="M21.368 34.712a2.585 2.585 0 001.17-3.512 2.585 2.585 0 00-3.511-1.17 2.585 2.585 0 00-1.17 3.511 2.585 2.585 0 003.56 1.17z" class="heart__segment heart__segment--middle"/>
      <path d="M18.69 34.84c1.317.682 2.828.146 3.511-1.171a2.65 2.65 0 00-1.121-3.511 2.585 2.585 0 00-3.512 1.17 2.585 2.585 0 001.122 3.511z" class="heart__segment heart__segment--middle"/>
      <!-- Ending Overlap -->
      <path d="M17.076 33.785a2.438 2.438 0 003.414-.927c.731-1.219.341-2.73-.878-3.413a2.487 2.487 0 00-3.414.926 2.438 2.438 0 00.927 3.414z" class="heart__segment heart__segment--end"/>
      <path d="M16.003 33.15c1.22.781 2.829.489 3.61-.78a2.55 2.55 0 00-.732-3.608 2.585 2.585 0 00-3.61.78 2.585 2.585 0 00.732 3.609z" class="heart__segment heart__segment--end"/>
      <path d="M14.735 32.224a2.585 2.585 0 003.61-.536 2.585 2.585 0 00-.489-3.658 2.585 2.585 0 00-3.657.537 2.585 2.585 0 00.487 3.657z" class="heart__segment heart__segment--end"/>
      <path d="M13.467 31.249c1.122.975 2.731.829 3.707-.341.926-1.073.78-2.731-.342-3.658a2.585 2.585 0 00-3.657.341c-.976 1.122-.83 2.731.292 3.658z" class="heart__segment heart__segment--end"/>
      <!-- End that -->
      <path class="heart__stroke" d="M20 35.04c-4.16 0-16-10.752-16-20.928C4 9.248 8.032 4.96 12.576 4.96c3.648 0 6.144 2.56 7.424 4.352 1.28-1.856 3.776-4.352 7.424-4.352C31.968 4.96 36 9.248 36 14.112c0 10.176-11.84 20.864-16 20.928zM12.576 7.328c-3.264 0-6.208 3.2-6.208 6.784 0 9.152 11.2 18.496 13.632 18.56 2.432-.064 13.632-9.408 13.632-18.56 0-3.584-2.944-6.784-6.208-6.784-4.032 0-6.272 4.672-6.336 4.736-.32.896-1.792.896-2.176 0 0 0-2.304-4.736-6.336-4.736z"/>
      <path class="heart__fill" d="M20 35.052c-4.148-.119-16-10.785-16-20.919 0-4.918 4.03-9.185 8.593-9.185 3.674 0 6.103 2.548 7.407 4.385 1.304-1.837 3.733-4.385 7.407-4.385C31.97 4.948 36 9.215 36 14.133c0 10.074-11.852 20.8-16 20.919z"/>
    </g>
  </svg>
</button>
*
  box-sizing border-box

body
  min-height 100vh
  background hsl(214, 14%, 10%)
  display flex
  align-items center
  justify-content center

:root
  --size 100px

button
  height var(--size)
  width var(--size)
  border-radius 50%
  transition background-color 0.25s
  border 0
  display flex
  align-items center
  justify-content center
  cursor pointer
  background-color transparent
  outline transparent

  &:hover
    background-color hsla(339, 91%, 46%, 0.15)

    .heart__stroke
      fill hsl(339, 91%, 46%)

  &.active:hover
    background-color transparent

svg
  height 50%
  width 50%

.heart
  // These two handle the gradient
  overflow visible !important
  &__fragment
    opacity 0
    fill 'hsl(%s, 95%, 50%)' % var(--hue)
  &__stroke
    fill hsl(0, 0%, 50%)
  &__fill
    fill hsl(339, 91%, 46%)
    display none
  &__segment
    fill 'hsl(%s, 90%, %s)' % (var(--hue, 0) calc(var(--lightness, 50) * 1%))
View Compiled
const { gsap, Physics2DPlugin } = window
gsap.registerPlugin(Physics2DPlugin)

let timeline
const CLICK = new Audio('https://assets.codepen.io/605876/click.mp3')
const SPARKLE = new Audio('https://assets.codepen.io/605876/sparkle.mp3')
const BUTTON = document.querySelector('button')

const STARTERS = document.querySelectorAll('.heart__segment--start')
const MIDS = [...document.querySelectorAll('.heart__segment--middle')].reverse()
const ENDERS = [...document.querySelectorAll('.heart__segment--end')].reverse()
const SEGMENTS = [...STARTERS, ...MIDS, ...ENDERS]

gsap.set(SEGMENTS, {
  '--lightness': index =>
    gsap.utils.mapRange(0, SEGMENTS.length, 94, 60, index),
})

gsap.set(SEGMENTS, { opacity: 0 })
gsap.set('.heart__beat', { transformOrigin: '50% 50%', yPercent: 5 })
gsap.set('.heart__fragment', { opacity: 0 })

const LIKE = () =>
  gsap
    .timeline({
      onStart: () => {
        gsap.set([SEGMENTS, '.heart__fragments'], { display: 'block' })
        gsap.set('.heart__stroke', { display: 'none' })
        gsap.set('.heart__fragment', {
          opacity: 0,
          '--hue': () => gsap.utils.random(0, 359),
        })
      },
      onComplete: () => {
        gsap.set([SEGMENTS, '.heart__fragments'], { display: 'none' })
      },
    })
    .set('.heart__beat', { '--hue': 180 })
    .set('.heart__segment--start', { opacity: 1 })
    .to([MIDS, ENDERS], {
      stagger: 0.005,
      opacity: 1,
      duration: 0.05,
    })
    .to(
      '.heart__beat',
      {
        duration: 0.5,
        '--hue': 360,
        ease: 'power1.in',
      },
      0
    )
    .to(
      STARTERS,
      {
        stagger: 0.025,
        opacity: 0,
        duration: 0.05,
      },
      0.2
    )
    .to(
      '.heart__beat',
      {
        scale: 1.5,
        duration: 0.25,
      },
      '>-0.15'
    )
    .to('.heart__beat', {
      scale: 1,
      duration: 0.35,
      ease: 'back.out(5)',
    })
    .to(
      '.heart__fill',
      {
        display: 'block',
      },
      '>-0.25'
    )
    .to(SEGMENTS, { opacity: 0 }, '>-0.25')
    .fromTo(
      '.heart__fragment',
      {
        opacity: 1,
      },
      {
        onStart: () => {
          SPARKLE.play()
        },
        ease: 'power4.in',
        opacity: 0,
        physics2D: {
          velocity: 90,
          angle: gsap.utils.distribute({
            base: 0,
            amount: 360,
            from: 'start',
          }),
          gravity: 0,
        },
        duration: () => gsap.utils.random(0.15, 0.65),
      },
      '>-0.725'
    )
    .timeScale(1.15)

BUTTON.addEventListener('click', () => {
  CLICK.play()
  BUTTON.classList.toggle('active')
  if (BUTTON.className.includes('active')) timeline = LIKE()
  else {
    gsap.set('.heart__stroke', { display: 'block' })
    gsap.set([SEGMENTS, '.heart__fragments'], { display: 'none' })
    timeline.pause()
    timeline.time(0)
  }
})
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/Physics2DPlugin3.min.js
  2. https://cdnjs.cloudflare.com/ajax/libs/gsap/3.5.1/gsap.min.js