<div class="board  loaded">
  <div class="home"></div>  
  <div class="base r ">
     <div class="inner sparks"> 
        <div class="token red animate__animated animate__tada"> </div>  
     </div>
  </div>
  <div class="base g">
     <div class="inner ">  
        <div class="token green animate__animated animate__tada"> </div>
        <div class="token green animate__animated animate__tada"> </div>
        <div class="token green animate__animated animate__tada"> </div> 
     </div>
  </div>
  <div class="base y">
     <div class="inner  "> 
        <div class="token yellow animate__animated animate__tada"> </div> 
        <div class="token yellow animate__animated animate__tada"> </div>
        <div class="token yellow animate__animated animate__tada"> </div> 
     </div>
  </div>
  <div class="base b">
     <div class="inner "> 
        <div class="token blue animate__animated animate__tada"> </div>
        <div class="token blue animate__animated animate__tada"> </div> 
     </div>
  </div>
     
  <div class="cell race-1 safe-zone start-r " title="1"> 
    <div class="inner"><div class="token red animate__animated animate__tada"> </div> </div>
   
   </div>
   <div class="cell race-2" title="2"></div>
  <div class="cell race-3" title="3"></div>
  <div class="cell race-4" title="4">
    <div class="inner">
      <div class="token red animate__animated animate__tada"> </div> 
    <div class="token red animate__animated animate__tada"> </div> 
    </div>
    
  </div>
  <div class="cell race-5" title="5"></div>
  <div class="cell race-6" title="6"></div>
  <div class="cell race-7" title="7"></div>
  <div class="cell race-8" title="8"></div>
  <div class="cell race-9 safe-zone " title="9"></div>
  <div class="cell race-10" title="10"></div>
  <div class="cell race-11" title="11"></div>
  <div class="cell race-12   end-g" title="12"></div>
  <div class="cell race-13" title="13"></div>
  <div class="cell race-14 safe-zone start-g " title="14"></div>
  <div class="cell race-15" title="15"></div>
  <div class="cell race-16" title="16"></div>
  <div class="cell race-17" title="17"></div>
  <div class="cell race-18" title="18"></div>
  <div class="cell race-19" title="19"></div>
  <div class="cell race-20" title="20"></div>
  <div class="cell race-21" title="21"></div>
  <div class="cell race-22 safe-zone " title="22"></div>
  <div class="cell race-23" title="23"></div>
  <div class="cell race-24" title="24"></div>
  <div class="cell race-25   end-y" title="25"></div>
  <div class="cell race-26" title="26">
    <div class="inner">
      <div class="ficha green animate__animated animate__tada"> </div>
    </div>
  </div>
  <div class="cell race-27 safe-zone start-y " title="27"></div>
  <div class="cell race-28" title="28"></div>
  <div class="cell race-29" title="29"></div>
  <div class="cell race-30" title="30"></div>
  <div class="cell race-31" title="31"></div>
  <div class="cell race-32" title="32"></div>
  <div class="cell race-33" title="33"></div>
  <div class="cell race-34" title="34">
    <div class="inner">
      <div class="token yellow animate__animated animate__tada"></div> 
     </div>
  </div>
  <div class="cell race-35 safe-zone " title="35"></div>
  <div class="cell race-36" title="36"></div>
  <div class="cell race-37" title="37"></div>
  <div class="cell race-38   end-b" title="38"></div>
  <div class="cell race-39" title="39"></div>
  <div class="cell race-40 safe-zone start-b " title="40"></div>
  <div class="cell race-41" title="41"></div>
  <div class="cell race-42" title="42"></div>
  <div class="cell race-43" title="43"></div>
  <div class="cell race-44" title="44"> </div>
  <div class="cell race-45" title="45"></div>
  <div class="cell race-46" title="46"></div>
  <div class="cell race-47" title="47"></div>
  <div class="cell race-48 safe-zone " title="48">
    <div class="inner">
      <div class="token blue animate__animated animate__tada"> </div>
      <div class="token blue animate__animated animate__tada"> </div>
      <div class="token green animate__animated animate__tada"> </div>
     </div>
  </div>
  <div class="cell race-49" title="49"></div>
  <div class="cell race-50" title="50"></div>
  <div class="cell race-51   end-r" title="51"></div>
  <div class="cell race-52" title="52"></div>  
       
  <div class="r final">  
    <div  class="cell r-f-1 "> </div>
    <div  class="cell r-f-2 "> </div>
    <div  class="cell r-f-3 "> </div>
    <div  class="cell r-f-4 "> </div>
    <div  class="cell r-f-5 "> </div>
    <div  class="cell r-f-6 transparent "> </div>
  </div>
  <div class="g final">  
    <div  class="cell g-f-1 "> </div>
    <div  class="cell g-f-2 "> </div>
    <div  class="cell g-f-3 "> </div>
    <div  class="cell g-f-4 "> </div>
    <div  class="cell g-f-5 "> </div>
    <div  class="cell g-f-6 transparent "> </div>
  </div>
  <div class="y final">  
    <div  class="cell y-f-6 transparent "> </div>
    <div  class="cell y-f-5 "> </div>
    <div  class="cell y-f-4 "> </div>
    <div  class="cell y-f-3 "> </div>
    <div  class="cell y-f-2 "> </div>
    <div  class="cell y-f-1 "> </div>
  </div>
  <div class="b final">  
    <div  class="cell b-f-6 transparent "> </div>
    <div  class="cell b-f-5 "> </div>
    <div  class="cell b-f-4 "> </div>
    <div  class="cell b-f-3 "> </div>
    <div  class="cell b-f-2 "> </div>
    <div  class="cell b-f-1 "> </div>
  </div> 
</div>

<div  class="dice dice-r animate__animated "  >
  <div class="face-1 show">
    <span class="pip"></span>
  </div>
  <div class="face-2 ">
    <span class="pip"></span>
    <span class="pip"></span>
  </div>
  <div class=" face-3 ">
    <span class="pip"></span>
    <span class="pip"></span>
    <span class="pip"></span>
  </div>
  <div class="face-4 ">
    <div class="col">
      <span class="pip"></span>
      <span class="pip"></span>
    </div>
    <div class="col">
      <span class="pip"></span>
      <span class="pip"></span>
    </div>
  </div>
  <div class="face-5 ">
    <div class="col">
      <span class="pip"></span>
      <span class="pip"></span>
    </div>
    <div class="col">
      <span class="pip"></span>
    </div>
    <div class="col">
      <span class="pip"></span>
      <span class="pip"></span>
    </div>
  </div>
  <div class="face-6 ">
    <div class="col">
      <span class="pip"></span>
      <span class="pip"></span>
      <span class="pip"></span>
    </div>
    <div class="col">
      <span class="pip"></span>
      <span class="pip"></span>
      <span class="pip"></span>
    </div>
  </div>
</div>
$red : #ea4330 ;
$green : #34a853 ;
$yellow : #fbbc05 ;
$blue :  #4285f4 ;
$gate-color : #fff ;
$base-color : #ddd ;
$border : #aaa ; 

$break-sm : 800px;

@mixin box-shadow($settings) {
    -moz-box-shadow: $settings;
    -webkit-box-shadow: $settings; 
    box-shadow: $settings;
} 
  
@mixin simbolo($color) {
      position: absolute;
      top: 5px;
      left:0; 
      right:0; 
      text-align:center; 
      color:  $color ;
      font-size: 30px ;
      line-height:30px; 
  
    @media (max-width: $break-sm) {

      top: 2px;
      font-size: 22px ;
      line-height:22px; 

    }
} 
  

@mixin create-token-color($color ){
    background: darken($color, 20%);  
    &::before {  
     background: darken($color, 10%);  
    }
    &:hover, &:hover::before{
      background: darken($color, 10%);  
    } 
}
  @mixin create-token($size, $margin ){
     position: relative;
    display:inline-block;
    height: $size ;
    width: $size ;
    background: gray;
    border-radius: $size/2;
    margin: $margin;   
    cursor: pointer;
    border: 2px solid transparent;
    
    &::before { 
       content: "";
       position: absolute;
       bottom:1px;
       left:1px;
       top:1px;
       right:1px;
       border-radius: $size ; 
    } 
    
    &.active{
      border: 2px solid $border;
    }
     
    &.red{
      @include create-token-color($red);
    }
    &.green{
       @include create-token-color($green);
    }
    &.blue{
       @include create-token-color($blue);
    }
    &.yellow{
      @include create-token-color($yellow);
    }
  }
  
@mixin gradient-circle($a, $b) {
   background-color: $a;
background: -moz-radial-gradient(circle, $a 0%,$b 100%);
background: -webkit-radial-gradient(circle, $a 0%,$b 100%);
background: radial-gradient(circle,$a 0%, $b 100%);
 
} 

* {
    padding: 0px;
    margin: 0px;
    font-family: Arial;
    box-sizing: border-box;
} 


html, body{   
  height: 100%; 
  width: 100%; 
}
html{  
  @include gradient-circle(#0b51c5, #001435); 
}

body{
  flex:1; 
  display:flex; 
  flex-wrap: wrap;
  align-items:center;
  justify-content: center; 
}

.board { 
  display: none;
  
  height: 600px; 
  width: 600px;  
  grid-template-columns: repeat(15, 1fr);
  grid-template-rows: repeat(15, 1fr);
  gap: 0px 0px;
  //border: 1px solid $border;
  border-radius: 1rem;
  overflow: hidden;
  background: #fff;
   transform:  perspective(1000px) rotateX(30deg);
   transition: all .4s ease 0s;
  
   @include box-shadow((0 20px 50px -6px rgba(0,0,0,0.4)));
   &:hover , &.static{
    transform: perspective(2000px) rotateX(0deg);
    @include box-shadow((0 0 60px -6px rgba(0,0,0,0.4)));
   }
  
  &.loaded{
    display: grid;
  } 
  
   & * { 
    position: relative;
  } 
 
  .base{
    display: block;   
    
    z-index:2;  
    .inner{
      background-color: #fff;
      position: absolute; 
      top: 40px;
      left: 40px;
      right: 40px;
      bottom: 40px;
      border-radius: .8rem; 
      
      flex-wrap: wrap;
      display:flex; 
      align-items: space-between;
      justify-content: space-between;
      flex:1; 
      
      .token{
         @include create-token(36px,20px ); 
      } 
    }
    
    &.r  {  
      grid-area: 1 / 1 / 7 / 7;  
      background: $red; 
    }

    &.g{  
      grid-area: 1 / 10 / 7 / 16; 
      background: $green; 
    }  

    &.b {   
      grid-area: 10 / 1 / 16 / 7;  
     background: $blue; 
    }

    &.y {  
      grid-area: 10 / 10 / 16 / 16;  
     background: $yellow; 
    }
     
  }


 
.race-1 { grid-area: 7 / 2 / span 1 / span 1; }  
.race-2 { grid-area: 7 / 3 / span 1 / span 1; }  
.race-3 { grid-area: 7 / 4 / span 1 / span 1; }  
.race-4 { grid-area: 7 / 5 / span 1 / span 1; } 
.race-5 { grid-area: 7 / 6 / span 1 / span 1; }  
.race-6 { grid-area: 6 / 7 / span 1 / span 1; } 
.race-7 { grid-area: 5 / 7 / span 1 / span 1; } 
.race-8 { grid-area: 4 / 7 / span 1 / span 1; } 
.race-9 { grid-area: 3 / 7 / span 1 / span 1; } 
.race-10 { grid-area: 2 / 7 / span 1 / span 1; } 
.race-11 { grid-area: 1 / 7 / span 1 / span 1; } 
.race-12 { grid-area: 1 / 8 / span 1 / span 1; } 
.race-13 { grid-area: 1 / 9 / span 1 / span 1; } 
.race-10 { grid-area: 2 / 7 / span 1 / span 1; } 
.race-14 { grid-area: 2 / 9 / span 1 / span 1; }
.race-15 { grid-area: 3 / 9 / span 1 / span 1; }
.race-16 { grid-area: 4 / 9 / span 1 / span 1; }
.race-17 { grid-area: 5 / 9 / span 1 / span 1; }
.race-18 { grid-area: 6 / 9 / span 1 / span 1; } 
.race-19 { grid-area: 7 / 10 / span 1 / span 1; }
.race-20 { grid-area: 7 / 11 / span 1 / span 1; }
.race-21 { grid-area: 7 / 12 / span 1 / span 1; }
.race-22 { grid-area: 7 / 13 / span 1 / span 1; }
.race-23 { grid-area: 7 / 14 / span 1 / span 1; }
.race-24 { grid-area: 7 / 15 / span 1 / span 1; }
.race-25 { grid-area: 8 / 15 / span 1 / span 1; }
.race-26 { grid-area: 9 / 15 / span 1 / span 1; }
.race-27 { grid-area: 9 / 14 / span 1 / span 1; }
.race-28 { grid-area: 9 / 13 / span 1 / span 1; }
.race-29 { grid-area: 9 / 12 / span 1 / span 1; }
.race-30 { grid-area: 9 / 11 / span 1 / span 1; }
.race-31 { grid-area: 9 / 10 / span 1 / span 1; }
.race-32 { grid-area: 10 / 9 / span 1 / span 1; }
.race-33 { grid-area: 11 / 9 / span 1 / span 1; } 
.race-34 { grid-area: 12 / 9 / span 1 / span 1; }
.race-35 { grid-area: 13 / 9 / span 1 / span 1; }
.race-36 { grid-area: 14 / 9 / span 1 / span 1; } 
.race-37 { grid-area: 15 / 9 / span 1 / span 1; } 
.race-38 { grid-area: 15 / 8 / span 1 / span 1; } 
.race-39 { grid-area: 15 / 7 / span 1 / span 1; } 
.race-40 { grid-area: 14 / 7 / span 1 / span 1; } 
.race-41 { grid-area: 13 / 7 / span 1 / span 1; } 
.race-42 { grid-area: 12 / 7 / span 1 / span 1; } 
.race-43 { grid-area: 11 / 7 / span 1 / span 1; } 
.race-44 { grid-area: 10 / 7 / span 1 / span 1; } 
.race-45 { grid-area: 9 / 6 / span 1 / span 1; }  
.race-46 { grid-area: 9 / 5 / span 1 / span 1;  }
.race-47 { grid-area: 9 / 4 / span 1 / span 1; }
.race-48 { grid-area: 9 / 3 / span 1 / span 1; }
.race-49 { grid-area: 9 / 2 / span 1 / span 1; }
.race-50 { grid-area: 9 / 1 / span 1 / span 1; }
.race-51 { grid-area: 8 / 1 / span 1 / span 1; }
.race-52 { grid-area: 7 / 1 / span 1 / span 1; }


.home { 
  grid-area: 7 / 7 / 10 / 10; 
  border: 60px solid $border   ;
  border-left-color: $red;
  border-top-color: $green;
  border-right-color: $yellow;
  border-bottom-color: $blue; 
  z-index: 1;
 }
  
.r.final,.y.final {
  grid-area: 8 / 2 / 9 / 8; 
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  grid-template-rows:   1fr;
  grid-column-gap: 0px;
  grid-row-gap: 0px;
  background-color: $red;
}   
  .y.final {
    grid-area: 8 / 9 / 9 / 15; 
   background-color: $yellow;
  }
   
 
 .b.final, .g.final {
  grid-area: 9 / 8 / 15 / 9; 
  display: grid;
  grid-template-columns:1fr ;
  grid-template-rows:  repeat(6, 1fr);
  grid-column-gap: 0px;
  grid-row-gap: 0px;
  background-color: $blue;
}   
.g.final {
  grid-area: 2 / 8 / 8 / 9; 
  background-color: $green;
} 

  
.cell{  
  border: 1px solid $border;   
  z-index: 2;  
  flex-wrap: wrap;
  display:flex; 
  align-items: center;
  justify-content: center;
  flex:1  ;  
  
  .inner{
    flex-wrap: wrap;
    display:flex; 
    align-items: center;
    justify-content: center;
    flex:1 ; 
    position: absolute;
     top: 0px;
      left: 0px;
      right: 0px;
      bottom: 0px;
    
    .token{
      @include create-token(13px, 1px );
      z-index:10;
    }
  }
   
  &.transparent{
    border: 1px solid transparent; 
    background: transparent;
  }
  
  &.safe-zone{  
    &::before {
       content:  "★";
      @include simbolo((darken($base-color , 10%)));
    }
  }  
  
  &.start-r {
    background: $red;
    &::before { color:  lighten($red , 10%); }
  }
  &.start-b {
    background: $blue;
    &::before { color:  lighten($blue , 10%); }
  }
  &.start-g {
    background: $green;
    &::before { color:  lighten($green , 10%); }
  }
  &.start-y {
    background: $yellow;
    &::before { color:  lighten($yellow , 10%); }
  }
  
  
  &.end-r {  
    &::before { 
       content:  "\1F846";
      @include simbolo($red); 
    }
  }
  &.end-b {
   &::before { 
       content:  "\1F845";
      @include simbolo($blue); 
    }
  }
  &.end-g {
    &::before { 
       content:  "\1F847";
      @include simbolo($green); 
    }
  }
  &.end-y {
    &::before { 
       content:  "\1F844";
      @include simbolo($yellow); 
    }
  }
   
 }
  
}


$particles: 80;
$width: 600;
$height: 600; 
// Create the explosion...
$box-shadow: ();
$box-shadow2: ();
@for $i from 0 through $particles {
  $box-shadow: $box-shadow,
               random($width)-$width / 2 + px
               random($height)-$height / 1.2 + px
               hsl(random(360), 100, 50);
  $box-shadow2: $box-shadow2, 0 0 #fff600
}
@mixin keyframes ($animationName) {
    @-webkit-keyframes #{$animationName} {
        @content;
    } 
    @-moz-keyframes #{$animationName} {
        @content;
    } 
    @-o-keyframes #{$animationName} {
        @content;
    } 
    @-ms-keyframes #{$animationName} {
        @content;
    }  
    @keyframes #{$animationName} {
        @content;
    }
}

@mixin animation-delay ($settings) {
    -moz-animation-delay: $settings;
    -webkit-animation-delay: $settings;
    -o-animation-delay: $settings;
    -ms-animation-delay: $settings;
    animation-delay: $settings;
}

@mixin animation-duration ($settings) {
    -moz-animation-duration: $settings;
    -webkit-animation-duration: $settings;
    -o-animation-duration: $settings;
    -ms-animation-duration: $settings;
    animation-duration: $settings;
}

@mixin animation ($settings) {
    -moz-animation: $settings;
    -webkit-animation: $settings;
    -o-animation: $settings;
    -ms-animation: $settings;
    animation: $settings;
}

@mixin transform ($settings) {
    transform: $settings;
    -moz-transform: $settings;
    -webkit-transform: $settings;
    -o-transform: $settings;
    -ms-transform: $settings;
}

 

.sparks::before, .sparks::after {
  content:'';
  position: absolute;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  box-shadow: $box-shadow2;
  @include animation((1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards));
}
    
.sparks::after {
  @include animation-delay((1.25s, 1.25s, 1.25s));
  @include animation-duration((1.25s, 1.25s, 6.25s));
}
        
@include keyframes(bang) {
  to {
    box-shadow:$box-shadow;
  }
}
    
@include keyframes(gravity)  {
  to {
    @include transform(translateY(200px));
    opacity: 0;
  }
}
    
@include keyframes(position) {
  0%, 19.9% {
    margin-top: 50%;
    margin-left: 40%;
  }
  20%, 39.9% {
    margin-top: 60%;
    margin-left: 30%;
  }
  40%, 59.9% {  
    margin-top: 30%;
    margin-left: 70%
  }
  60%, 79.9% {  
    margin-top: 50%;
    margin-left: 20%;
  }
  80%, 99.9% {  
    margin-top: 80%;
    margin-left: 80%;
  }
}

//DICE 

.dice {
  position: fixed;   
  z-index: 1001;
  display: flex;
  align-items: center;
  justify-content: center;
  vertical-align: center;
  flex-wrap: wrap;
  align-content: center; 
  background: linear-gradient(top, #222, #333); 
  cursor: pointer;  
  
  &.dice-r, &.dice-g{
      top: 50px; 
  } 
  &.dice-r, &.dice-b{
      left: 50px; 
  } 
  &.dice-g, &.dice-y{
      right: 50px; 
  }
  &.dice-b, &.dice-y{
      bottom: 50px; 
  }  

  .face-1, .face-2, .face-3, .face-4, .face-5, .face-6{ 
    padding: 5px; 
    background-color: #fff;
    width: 60px;
    height: 60px;
    object-fit: contain;  
    border-radius: 10%;
    display: none;  
    @include box-shadow((0 0 40px -10px rgba(0,0,0,0.4)));
    
    &.show, .col{ 
      display: flex;
    } 
    .pip {
      display: block;
      width: 14px;
      height: 14px;
      border-radius: 7px; 
      background-color: #333; 
    } 
  }
  
   &.dice-r .pip {
      background-color: $red; 
  }
   &.dice-g .pip {
      background-color: $green; 
  }
   &.dice-y .pip {
      background-color: $yellow; 
  }
   &.dice-b .pip {
      background-color: $blue; 
  }
  
  
  .face-1 { 
    justify-content: center;
    align-items: center;
  }

  .face-2 { 
    justify-content: space-between;
  }

  .face-2 .pip:nth-of-type(2) {
    align-self: flex-end;
  }

  .face-3 { 
    justify-content: space-between;
  }

  .face-3 .pip:nth-of-type(2) {
    align-self: center;
  }

  .face-3 .pip:nth-of-type(3) {
    align-self: flex-end;
  }

  .face-4, .face-6 { 
    justify-content: space-between;
  }

  .face-4 .col, .face-6 .col { 
    flex-direction: column;
    justify-content: space-between;
  }

  .face-5 { 
    justify-content: space-between;
  }

  .face-5 .col { 
    flex-direction: column;
    justify-content: space-between;
  }

  .face-5 .col:nth-of-type(2) {
    justify-content: center;
  }
  
} 

 
/* Tamaño del scroll */
::-webkit-scrollbar {
  width: 8px;
}

 /* Estilos barra (thumb) de scroll */
::-webkit-scrollbar-thumb {
  background: #111;
  border-radius: 4px;
  
  &:active {
    background-color: #333;
  } 
  &:hover {
    background-color: #222;
  }
}



 /* Estilos track de scroll */
::-webkit-scrollbar-track {
  background: white;  
  &:hover,  &:active {
    background:white;
  }

}



@media (max-width: $break-sm) {
  .board {
     width: 400px;
     height: 400px; 
     .base .inner{ 
      top: 25px;
      left: 25px;
      right: 25px;
      bottom: 25px; 
      .token{
         @include create-token(30px,12px ); 
      } 
       
    }
    .cell .inner .token{
         @include create-token(10px,1px);  
    }
    .home{
      border-width:40px;
    }
  }
}
View Compiled

External CSS

  1. https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css

External JavaScript

This Pen doesn't use any external JavaScript resources.