3D Maze using HTML and CSS Only

Share your love

What if you could step into the world of 3D gaming without writing a single line of JavaScript? Welcome to the fascinating challenge of creating a fully functional 3D maze using only HTML and CSS! With clever use of CSS properties like transforms, perspective, and transitions, we’ll craft an immersive experience where users can navigate through a visually striking maze. This blog will guide you step-by-step through the process of combining structural HTML and advanced CSS techniques to build a lightweight, browser-friendly 3D environment. Ready to push the boundaries of what’s possible with pure CSS? Let’s get started!

I would recommend you don’t just copy and paste the code, just look at the code and type by understanding it.

Demo

See the Pen A Pure CSS 3D Maze! by Ben Evans (@ivorjetski) on CodePen.

HTML Code 

Starter Template

<!doctype html>
<html lang="en">

<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- CSS -->
    <link rel="stylesheet" href="style.css">

    <title>Coding Torque</title>
</head>

<body>
    <!-- Further code here -->

</body>

</html>

Paste the below code in your <body> tag.

<div>
  <input type="radio" id="ilift1" title="lift1" class="liftmove ilower" name="liftup" />Lift 1
  <input type="radio" id="ilift2" title="lift2" class="liftmove iupper" name="liftup" />Lift 2
  <input type="radio" id="ilift3" title="lift3" class="liftmove ilower" name="liftup" />Lift 3
  <input type="radio" id="ilift4" title="lift4" class="liftmove ilower" name="liftup" />Lift 4
  <input type="radio" id="ilift5" title="lift5" class="liftmove iupper" name="liftup" />Lift 5
  <input type="radio" id="ilift6" title="lift6" class="liftmove ilower" name="liftup" />Lift 6
  <input type="radio" id="ilift7" title="lift7" class="liftmove ilower" name="liftup" />Lift 7

  <input type="radio" id="iliftup" title="liftup" class="liftmove ilower d-none" name="liftup" checked />

  <br />

  <input type="checkbox" id="top-view" />Top view
  <input type="checkbox" id="bottom-floor" />Bottom floor

  <input type="radio" name="gfx" id="gfx1" class="d-none" />
  <input type="radio" name="gfx" id="gfx2" checked class="d-none" />
  <input type="radio" name="num" id="numon" checked class="d-none" />
  <input type="radio" name="num" id="numoff" class="d-none" />

  <input type="radio" id="win" name="x" class="d-none" />

  <br />

  <input type="radio" id="z-1" name="room" title="z-1" />Z-1
  <input type="radio" id="z-2" name="room" title="z-2" checked />Z-2
  <input type="radio" id="z-3" name="room" title="z-3" />Z-3
  <input type="radio" id="z-4" name="room" title="z-4" />Z-4
  <input type="radio" id="z-5" name="room" title="z-5" />Z-5
  <input type="radio" id="z-6" name="room" title="z-6" />Z-6

  <br />

  <input type="radio" id="x-1" name="x" title="x-1" />X-1
  <input type="radio" id="x-2" name="x" title="x-2" />X-2
  <input type="radio" id="x-3" name="x" title="x-3" checked />X-3
  <input type="radio" id="x-4" name="x" title="x-4" />X-4
  <input type="radio" id="x-5" name="x" title="x-5" />X-5
  <input type="radio" id="x-6" name="x" title="x-6" />X-6
  <input type="radio" id="x-7" name="x" title="x-7" />X-7

  <input type="radio" id="original" checked name="rotate" class="d-none" />

  <br />

  <input type="radio" id="left1" name="rotate" class="x-rotation" />L-1
  <input type="radio" id="left2" name="rotate" class="z-rotation" />L-2
  <input type="radio" id="left3" name="rotate" class="x-rotation" />L-3
  <input type="radio" id="left4" name="rotate" class="z-rotation" />L-4

  <br />

  <input type="radio" id="right1" name="rotate" class="x-rotation" />R-1
  <input type="radio" id="right2" name="rotate" class="z-rotation" />R-2
  <input type="radio" id="right3" name="rotate" class="x-rotation" />R-3
  <input type="radio" id="right4" name="rotate" class="z-rotation" />R-4

  <content>
    <w>

      <x>

        <y>

          <z>

            <darkness>
              <u></u> <u></u> <u></u> <u></u> <u></u>
            </darkness>
            <darkness>
              <u></u> <u></u> <u></u> <u></u> <u></u><u></u>
            </darkness>

            <room>1</room>
            <room>2</room>

            <room class="lift lower">

              <lift id="lift1">
                <label for="ilift1"></label>
                <floor></floor>
                <floor></floor>
              </lift>
            </room>

            <room class="lift upper">

              <lift id="lift2">

                <label for="ilift2"></label>
                <floor></floor>
                <floor></floor>
              </lift>
            </room>
            <room>5</room>
            <room>6</room>
            <room>7</room>
            <room>8</room>
            <room>9</room>
            <room>10</room>
            <room>11</room>
            <room>12</room>

            <room class="lift lower">

              <lift id="lift3">
                <label for="ilift3"></label>
                <floor></floor>
                <floor></floor>
              </lift>
            </room>
            <room>14</room>
            <room>15</room>
            <room>16</room>
            <room>17</room>

            <room class="lift lower">

              <lift id="lift4">

                <label for="ilift4"></label>
                <floor></floor>
                <floor></floor>
              </lift>
            </room>
            <room>19</room>
            <room>20</room>
            <room>21</room>
            <room>22</room>
            <room>23</room>
            <room>24</room>
            <room>25</room>
            <room>26</room>

            <room class="lift upper">

              <lift id="lift5">

                <label for="ilift5"></label>
                <floor></floor>
                <floor></floor>
              </lift>
            </room>
            <room>28</room>
            <room>29</room>
            <room>30</room>
            <room>31</room>

            <room class="lift lower">

              <lift id="lift6">

                <label for="ilift6"></label>

                <floor></floor>
                <floor></floor>
              </lift>
            </room>

            <room>33</room>

            <room class="lift lower">

              <lift id="lift7">

                <label for="ilift7"></label>
                <floor></floor>
                <floor></floor>
              </lift>
            </room>
            <room>35</room>
            <room>36</room>
            <room>37</room>
            <room>38</room>
            <room>39</room>
            <room>40</room>
            <room>41</room>
            <room>42</room>
          </z>

          <z>

            <room>1</room>
            <room>2</room>
            <room class="lift"></room>
            <room class="lift"></room>
            <room>5</room>
            <room>6</room>
            <room>7</room>
            <room>8</room>
            <room>9</room>
            <room>10</room>
            <room>11</room>
            <room>12</room>
            <room class="lift"></room>
            <room>14</room>
            <room>15</room>
            <room>16</room>
            <room>17</room>
            <room class="lift"></room>
            <room>19</room>
            <room>20</room>
            <room>21</room>
            <room>22</room>
            <room>23</room>
            <room>24</room>
            <room>25</room>
            <room>26</room>
            <room class="lift"></room>
            <room>28</room>
            <room>29</room>
            <room>30</room>
            <room>31</room>
            <room class="lift"></room>
            <room>33</room>
            <room class="lift"></room>
            <room>35</room>
            <room>36</room>
            <room>37</room>
            <room>38</room>
            <room>39</room>
            <room>40</room>
            <room>41</room>
            <room>42</room>
          </z>
        </y>
      </x>
    </w>

    <win>
      <u><u></u></u>
      <u><u></u></u>
      <u><u></u></u>
      <u><u></u></u>
      <u><u></u></u>
      <u><u></u></u>
      <u><u></u></u>
      <u><u></u></u>
      <u><u></u></u>
      <u><u></u></u>
      <u><u></u></u>
      <u><u></u></u>
    </win>
  </content>

  <wintext>
    <div class="badge">
      <div></div>
    </div>
    <h1>Well Done!</h1>
    <h3>You have solved the maze :)</h3>
    <h4>Today is a good day.</h4>
    <div class="button">
      <label id="wintest" for="x-2">Return?</label>
    </div>
  </wintext>

  <buttons>

    <!--x-->
    <label class="upb bx dead" for="x-0"></label>
    <label class="upb bx" for="x-1"></label>
    <label class="upb bx" for="x-2"></label>
    <label class="upb bx" for="x-3"></label>
    <label class="upb bx" for="x-4"></label>
    <label class="upb bx" for="x-5"></label>
    <label class="upb bx" for="x-6"></label>
    <label class="upb bx" for="x-7"></label>
    <label class="upb bx dead" for="x-8"></label>

    <label class="upb bx" for="win"></label>

    <!--z-->
    <label class="upb bz dead" for="z-0"></label>
    <label class="upb bz" for="z-1"></label>
    <label class="upb bz" for="z-2"></label>
    <label class="upb bz" for="z-3"></label>
    <label class="upb bz" for="z-4"></label>
    <label class="upb bz" for="z-5"></label>
    <label class="upb bz" for="z-6"></label>
    <label class="upb bz dead" for="z-7"></label>

    <label class="leftb lb1" for="left1"></label>
    <label class="leftb lb2" for="left2"></label>
    <label class="leftb lb3" for="left3"></label>
    <label class="leftb lb4" for="left4"></label>

    <label class="leftb lb5" for="right1"></label>
    <label class="leftb lb6" for="right2"></label>

    <!--z-->
    <label class="downb bz dead" for="z-0"></label>
    <label class="downb bz" for="z-1"></label>
    <label class="downb bz" for="z-2"></label>
    <label class="downb bz" for="z-3"></label>
    <label class="downb bz" for="z-4"></label>
    <label class="downb bz" for="z-5"></label>
    <label class="downb bz" for="z-6"></label>
    <label class="downb bz dead" for="z-7"></label>

    <!--x-->
    <label class="downb bx dead" for="x-0"></label>
    <label class="downb bx" for="x-1"></label>
    <label class="downb bx" for="x-2"></label>
    <label class="downb bx" for="x-3"></label>
    <label class="downb bx" for="x-4"></label>
    <label class="downb bx" for="x-5"></label>
    <label class="downb bx" for="x-6"></label>
    <label class="downb bx" for="x-7"></label>
    <label class="downb bx dead" for="x-8"></label>

    <label class="rightb rb1" for="right1"></label>
    <label class="rightb rb2" for="right2"></label>
    <label class="rightb rb3" for="right3"></label>
    <label class="rightb rb4" for="right4"></label>

    <label class="rightb rb5" for="left1"></label>
    <label class="rightb rb6" for="left2"></label>
  </buttons>

  <graphics>
    <label for="gfx2">Graphics: Low</label>
    <label for="gfx1">Graphics: High</label>
  </graphics>
  <numbers>
    <label for="numon">Help: On</label>
    <label for="numoff">Help: Off</label>
  </numbers>

  <a href="https://tinydesign.co.uk/" title="Ben Evans Portfolio">
    <sig><u></u></sig>
  </a>
</div>

CSS Code 

Create a file style.css and paste the code below.

$blk: #1a0606;
$none: rgba(#fff,0);
$key: #BDBBAF;
$white: lighten($key,20);
$floor: #D73A4D;
$red: $floor;
$body: #4B4640;
$kk: rgba($key,.5);
$blk2: lighten($blk,5);

:root {
    --white: #e6e0e0;
    --floor: #D73A4D;
}

:root:has(#gfx1:checked) {
    --white: #574444;
    --floor: #69262e;

    div:before, darkness {
        display: none;
    }
}

html {
    font-size: clamp(6px, 1vh, 22px);
    background: $blk;
}

@media (orientation: portrait) {
    html {
        font-size: .8vh;
    }
}

body {
    margin: 0;
    text-align: center;
    color: $none;
    font-size: 2rem;
    height: 100vh;
    font-family: Arial, Helvetica, sans-serif;

    & > div {
        overflow: hidden;
        width: 100%;
        height: 100%;
        position: absolute;
        top: 0;
        left: 0;

        &:before {
            content: '';
            top: 0;
            left: 0;
            position: absolute;
            width: 100%;
            height: 100%;
            pointer-events: none;
            z-index: 2;
        }

        @media (min-width: 480px) {
            &:before {
                background: radial-gradient($none, rgba($blk,.7));
                box-shadow: inset 0 1rem 3rem $blk,inset 0 -1rem 3rem $blk,inset 0 0 5rem $blk;
                transform: translate3d(0,0,0);
            }
        }
    }

    content *, content *:before, content *:after {
        box-sizing: border-box;
        position: absolute;
        content: '';
        left: 0;
        top: 0;
        transform-style: preserve-3d;
    }
}

content, room {
    width: 100rem;
    height: 100rem;
}

content {
    margin: auto;
    position: absolute;
    perspective: 100rem;
    display: block;
    inset: 0;
    left: -100rem;
    right: -100rem;

    @media (max-width: 480px) {
        transform: scale(.8);
    }
}

input {
    position: relative;
    z-index: 1;
    margin-top: 1rem;
    display: none;
}

#top-view:checked {
    ~ content > w {
        transform: translate3d(50rem,200rem,-600rem) rotateX(-90deg) !important;
    }
}

#bottom-floor:checked {
    ~ content > w > x > y > z:nth-of-type(1) room {
        display: none;
    }
}

w, x, y, z {
    width: 100%;
    height: 100%;
}

w {
    transform-origin: 50rem -50rem 0;
    transition: all 1s ease-in-out;
    animation: enter 1s ease-in-out backwards;
    transform: translate3d(0,100rem,0);

    @keyframes enter {
        0% {
            transform: translate3d(50rem,300rem,-800rem) rotateX(-90deg);
        }
    }
}

y {
    transform-origin: -50rem 0;
}

x {
    transform-origin: 50rem 0 50rem;
}

z {
    transform-origin: 0 0;
}

$starscolour: #fff,lighten($red,20 );

@function stars ($a, $b) {
    $value: '#{random(100)}vw #{random(90)}vh '+ $b + ' ' + '#{nth($starscolour, random(length($starscolour)))}';

    @for $i from 2 through $a {
        $value: '#{$value} , #{random(100)}vw #{random(90)}vh '+ $b + ' ' + '#{nth($starscolour, random(length($starscolour)))}';
    }

    @return unquote($value);
}

$stars: stars(50, .1rem);

w {
    &:before, &:after {
        transform: translate3d(-500vw,-600vh, -1000rem) scale(10);
        content: '';
        width: .3rem;
        height: .3rem;
        background: #fff;
        box-shadow: $stars;
        right: 0;
        margin: auto;
    }
}

graphics, numbers {
    bottom: 1rem;
    left: 1rem;
    position: absolute;
    z-index: 2;

    label {
        padding: .5rem 1rem;
        background: $blk;
        color: $white;
        border-radius: 1rem;
        cursor: pointer;
        font-size: 1.5rem;
    }
}

#gfx2:checked ~ graphics > [for="gfx2"],
#gfx1:checked ~ graphics > [for="gfx1"],
#numon:checked ~ numbers > [for="numon"],
#numoff:checked ~ numbers > [for="numoff"] {
    display: none;
}

numbers {
    bottom: 1rem;
    left: 14rem;
    position: absolute;
    z-index: 2;
}

:root:has(#numoff:checked) {
    body, room {
        color: #fff;
    }

    input {
        display: inline;
    }
}

.d-none {
    display: none !important;
}
//@import "css-sig";
sig {
    &, * {
        height: 9.25em;
        overflow: hidden;
        border-radius: .5em;
    }

    position: absolute;
    right: 1rem;
    top: 1rem;
    font-size: .5rem;
    color: $white;
    width: 10em;
    transform: skewX(10deg) scaleY(.45) rotate(2deg);
    mix-blend-mode: difference;

    &:before, *:before {
        content: '';
        position: absolute;
        top: 0;
        left: 0;
        width: 5em;
        height: 5em;
        background: currentColor;
        transform: translate3d(-2.5em,0,0) rotate(-45deg);
        box-shadow: -3em 3em 0 0 currentColor;
        border-radius: .5em 2em .5em 2em;
    }

    * {
        width: 5em;
        transform: translate3d(3.75em,0,0) scaleY(.95);
        display: block !important;

        &:before {
            transform: translate3d(-3em,-2em,0) rotate(-45deg);
            box-shadow: -3em 3em 0 0 currentColor, -6em 6em 0 0 currentColor;
            border-radius: .5em;
        }
    }
}
//@import "maze";
room {
    transform: translate3d(0,0,0) rotateX(90deg);
    transform-origin: 0 0 0;
    color: $none;
    font-size: 30rem;
    background: var(--floor);

    &:before, &:after {
        width: 100%;
        height: 100%;
        background: var(--white);
        transform-origin: 0 0 0;
    }

    &:before {
        transform: translate3d(0,0,100rem) rotateY(90deg);
    }

    &:after {
        transform: translate3d(100rem,0,0) rotateY(-90deg);
    }
}

z:nth-of-type(1) room {
    &:nth-of-type(36), //
    &:nth-of-type(37), //
    &:nth-of-type(39), //
    &:nth-of-type(40), //
    &:nth-of-type(41), //
    &:nth-of-type(42), //
    &:nth-of-type(35), //
    &:nth-of-type(28) {
        &:after {
            filter: brightness(.5);
        }
    }

    &:nth-of-type(14), //
    &:nth-of-type(6), //
    &:nth-of-type(38), //
    &:nth-of-type(5), //
    &:nth-of-type(12), //
    &:nth-of-type(26), //
    &:nth-of-type(33) {
        &:before {
            filter: brightness(.5);
        }
    }

    &:nth-of-type(22), //
    &:nth-of-type(8), //
    &:nth-of-type(38), //
    &:nth-of-type(7), //
    &:nth-of-type(21), //
    &:nth-of-type(18), //
    &:nth-of-type(17) {
        &:after {
            filter: brightness(.75);
        }
    }

    &:nth-of-type(31), //
    &:nth-of-type(14), //
    &:nth-of-type(36), //
    &:nth-of-type(22), //
    &:nth-of-type(8), //
    &:nth-of-type(16), //
    &:nth-of-type(21), //
    &:nth-of-type(35), //
    &:nth-of-type(42), //
    &:nth-of-type(28), //
    &:nth-of-type(4) {
        &:before {
            filter: brightness(.75);
        }
    }

    &:nth-of-type(1) {
        transform: translate3d(-300rem, 0, -400rem) rotateX(90deg) rotateZ(90deg);
    }

    &:nth-of-type(2) {
        transform: translate3d(-200rem, 0, -400rem) rotateX(90deg) rotateZ(90deg);
    }

    &:nth-of-type(3) {
        transform: translate3d(-100rem, 0, -400rem) rotateX(90deg) rotateZ(90deg);
    }

    &:nth-of-type(4) {
        transform: translate3d(-100rem, 0, -400rem) rotateX(90deg);

        &:after {
            transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
        }
    }

    &:nth-of-type(5) {
        transform: translate3d(0,0,-400rem) rotateX(90deg);

        &:after {
            transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
        }
    }

    &:nth-of-type(6) {
        transform: translate3d(100rem,0,-300rem) rotateX(90deg) rotateZ(-90deg);
    }

    &:nth-of-type(7) {
        transform: translate3d(200rem,0,-400rem) rotateX(90deg);

        &:before {
            transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
        }
    }

    &:nth-of-type(8) {
        transform: translate3d(-300rem, 0, -200rem) rotateX(90deg) rotateZ(180deg);

        &:before {
            transform: translate3d(100rem, -100rem, 100rem) rotateY(90deg) rotateX(0deg);
        }
    }

    &:nth-of-type(9) {
        transform: translate3d(-300rem, 0, -300rem) rotateX(90deg);

        &:before, &:after {
            display: none;
        }
    }

    &:nth-of-type(10) {
        transform: translate3d(-200rem, 0, -300rem) rotateX(90deg);

        &:before, &:after {
            display: none;
        }
    }

    &:nth-of-type(11) {
        transform: translate3d(-100rem, 0, -300rem) rotateX(90deg);

        &:before, &:after {
            display: none;
        }
    }

    &:nth-of-type(12) {
        transform: translate3d(0,0,-300rem) rotateX(90deg);
    }

    &:nth-of-type(13) {
        transform: translate3d(100rem, 0, -300rem) rotateX(90deg);

        &:before, &:after {
            display: none;
        }
    }

    &:nth-of-type(14) {
        transform: translate3d(300rem, 0, -300rem) rotateX(90deg) rotateZ(90deg);

        &:before {
            transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
        }
    }

    &:nth-of-type(15) {
        transform: translate3d(-400rem, 0, -200rem) rotateX(90deg);

        &:before, &:after {
            display: none;
        }
    }

    &:nth-of-type(16) {
        transform: translate3d(-200rem, 0, -100rem) rotateX(90deg) rotateZ(-180deg);

        &:before {
            transform: translate3d(0, 100rem, 100rem) rotateY(90deg) rotateX(90deg);
        }
    }

    &:nth-of-type(17) {
        transform: translate3d(-200rem,0,-100rem) rotateX(90deg) rotateZ(-90deg);
    }

    &:nth-of-type(18) {
        transform: translate3d(0,0,-100rem) rotateX(90deg) rotateZ(-180deg);

        &:after {
            transform: translate3d(0,100rem,0) rotateY(-90deg) rotateX(-90deg);
        }

        &:before {
            transform: translate3d(100rem,0,100rem) rotateY(90deg) rotateX(-90deg);
        }
    }

    &:nth-of-type(19) {
        transform: translate3d(0,0,-200rem) rotateX(90deg);

        &:before {
            display: none;
        }
    }

    &:nth-of-type(20) {
        transform: translate3d(100rem,0,-200rem) rotateX(90deg);

        &:before, &:after {
            display: none;
        }
    }

    &:nth-of-type(21) {
        transform: translate3d(200rem, 0, -200rem) rotateX(90deg);

        &:after {
            transform: translate3d(-100rem,100rem,0) rotateY(-90deg) rotateX(-90deg);
        }

        &:before {
            transform: translate3d(100rem,0,100rem) rotateY(90deg);
        }
    }

    &:nth-of-type(22) {
        transform: translate3d(-300rem, 0, 0) rotateX(90deg) rotateZ(180deg);

        &:before {
            transform: translate3d(100rem, -100rem, 100rem) rotateY(90deg) rotateX(0deg);
        }
    }

    &:nth-of-type(23) {
        transform: translate3d(-200rem, 0, 0) rotateX(90deg) rotateZ(-180deg);

        &:before {
            display: none;
        }
    }

    &:nth-of-type(24) {
        transform: translate3d(-200rem, 0, -100rem) rotateX(90deg);

        &:before, &:after {
            display: none;
        }
    }

    &:nth-of-type(25) {
        transform: translate3d(-100rem, 0, -100rem) rotateX(90deg);

        &:before, &:after {
            display: none;
        }
    }

    &:nth-of-type(26) {
        transform: translate3d(0,0,-100rem) rotateX(90deg);
    }

    &:nth-of-type(27) {
        transform: translate3d(100rem,0,-100rem) rotateX(90deg);

        &:before, &:after {
            display: none;
        }
    }

    &:nth-of-type(28) {
        transform: translate3d(300rem, 0, 0rem) rotateX(90deg) rotateZ(180deg);
    }

    &:nth-of-type(29) {
        transform: translate3d(-400rem,0,0) rotateX(90deg);

        &:before, &:after {
            display: none;
        }
    }

    &:nth-of-type(30) {
        transform: translate3d(-200rem, 0, 100rem) rotateX(90deg) rotateZ(-180deg);

        &:before {
            display: none;
        }
    }

    &:nth-of-type(31) {
        transform: translate3d(-200rem, 0, 0rem) rotateX(90deg) rotateZ(0deg);

        &:after {
            transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
        }
    }

    &:nth-of-type(32) {
        transform: translate3d(0,0,0) rotateX(90deg) rotateZ(90deg);

        &:before, &:after {
            display: none;
        }
    }

    &:nth-of-type(34) {
        transform: translate3d(100rem,0,0) rotateX(90deg);

        &:before, &:after {
            display: none;
        }
    }

    &:nth-of-type(35) {
        transform: translate3d(300rem, 0, 100rem) rotateX(90deg) rotateZ(180deg);
    }

    &:nth-of-type(36) {
        transform: translate3d(-300rem, 0, 100rem) rotateX(90deg) rotateZ(90deg);

        &:before {
            transform: translate3d(0, 100rem, 100rem) rotateY(90deg) rotateX(90deg);
        }
    }

    &:nth-of-type(37) {
        transform: translate3d(-200rem, 0, 100rem) rotateX(90deg) rotateZ(90deg);

        &:before {
            display: none;
        }
    }

    &:nth-of-type(38) {
        transform: translate3d(-200rem, 0, 200rem) rotateX(90deg) rotateZ(-90deg);

        &:after {
            transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
        }
    }

    &:nth-of-type(39) {
        transform: translate3d(0,0,100rem) rotateX(90deg) rotateZ(90deg);
    }

    &:nth-of-type(40) {
        transform: translate3d(100rem,0,200rem) rotateX(90deg) rotateZ(180deg);

        &:after {
            transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
        }
    }

    &:nth-of-type(41) {
        transform: translate3d(200rem, 0, 200rem) rotateX(90deg) rotateZ(180deg);

        &:after {
            transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
        }

        &:before {
            display: none;
        }
    }

    &:nth-of-type(42) {
        transform: translate3d(300rem, 0, 200rem) rotateX(90deg) rotateZ(180deg);

        &:after {
            transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
        }
    }
}

z:nth-of-type(2) room {
    transform: translate3d(0,100rem,0) rotateX(90deg);

    &:nth-of-type(36), //
    &:nth-of-type(37), //
    &:nth-of-type(39), //
    &:nth-of-type(40), //
    &:nth-of-type(41), //
    &:nth-of-type(42), //
    &:nth-of-type(38), //
    &:nth-of-type(2), //
    &:nth-of-type(3) {
        &:after {
            filter: brightness(.5);
        }
    }

    &:nth-of-type(14), //
    &:nth-of-type(6), //
    &:nth-of-type(38), //
    &:nth-of-type(5), //
    &:nth-of-type(12), //
    &:nth-of-type(26), //
    &:nth-of-type(33), //
    &:nth-of-type(11), //
    &:nth-of-type(16), //
    &:nth-of-type(24), //
    &:nth-of-type(25), //
    &:nth-of-type(27) {
        &:before {
            filter: brightness(.5);
        }
    }

    &:nth-of-type(1), //
    &:nth-of-type(4), //
    &:nth-of-type(10), //
    &:nth-of-type(14), //
    &:nth-of-type(22), //
    &:nth-of-type(8), //
    &:nth-of-type(7), //
    &:nth-of-type(21), //
    &:nth-of-type(17), //
    &:nth-of-type(27) {
        &:after {
            filter: brightness(.75);
        }
    }

    &:nth-of-type(15), //
    &:nth-of-type(14), //
    &:nth-of-type(36), //
    &:nth-of-type(22), //
    &:nth-of-type(21), //
    &:nth-of-type(35), //
    &:nth-of-type(42), //
    &:nth-of-type(28), //
    &:nth-of-type(37), //
    &:nth-of-type(38), //
    &:nth-of-type(39) {
        &:before {
            filter: brightness(.75);
        }
    }

    &:nth-of-type(1) {
        transform: translate3d(-300rem, 100rem, -400rem) rotateX(90deg) rotateZ(90deg);

        &:after {
            transform: translate3d(100rem,100rem,0) rotateY(-90deg) rotateX(90deg);
        }
    }

    &:nth-of-type(2) {
        transform: translate3d(-200rem, 100rem, -400rem) rotateX(90deg) rotateZ(90deg);
    }

    &:nth-of-type(3) {
        transform: translate3d(-100rem, 100rem, -400rem) rotateX(90deg) rotateZ(90deg);
    }

    &:nth-of-type(4) {
        transform: translate3d(0, 100rem, -400rem) rotateX(90deg) rotateZ(90deg);

        &:after {
            transform: translate3d(0,100rem,0) rotateY(-90deg) rotateX(-90deg);
        }
    }

    &:nth-of-type(5) {
        transform: translate3d(0,100rem,-300rem) rotateX(90deg) rotateZ(-90deg);
    }

    &:nth-of-type(6) {
        transform: translate3d(100rem,100rem,-300rem) rotateX(90deg) rotateZ(-90deg);
    }

    &:nth-of-type(7) {
        transform: translate3d(200rem,100rem,-400rem) rotateX(90deg);

        &:before {
            transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
        }
    }

    &:nth-of-type(8) {
        transform: translate3d(-300rem, 100rem, -200rem) rotateX(90deg) rotateZ(180deg);

        &:before {
            transform: translate3d(0, 0, 100rem) rotateY(90deg) rotateX(90deg);
        }
    }

    &:nth-of-type(9) {
        transform: translate3d(-300rem, 100rem, -300rem) rotateX(90deg);

        &:before, &:after {
            display: none;
        }
    }

    &:nth-of-type(10) {
        transform: translate3d(-200rem, 100rem, -300rem) rotateX(90deg);

        &:before, &:after {
            display: none;
        }
    }

    &:nth-of-type(11) {
        transform: translate3d(0, 100rem, -300rem) rotateX(90deg) rotateZ(90deg);

        &:after {
            transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
        }
    }

    &:nth-of-type(12) {
        transform: translate3d(100rem,100rem,-300rem) rotateX(90deg) rotateZ(90deg);

        &:after {
            display: none;
        }
    }

    &:nth-of-type(13) {
        transform: translate3d(200rem, 100rem, -300rem) rotateX(90deg) rotateZ(90deg);

        &:before {
            transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
        }
    }

    &:nth-of-type(14) {
        transform: translate3d(200rem, 100rem, -300rem) rotateX(90deg);
    }

    &:nth-of-type(15) {
        transform: translate3d(-400rem, 100rem, -200rem) rotateX(90deg);

        &:after {
            display: none;
        }
    }

    &:nth-of-type(16) {
        transform: translate3d(-300rem, 100rem, -100rem) rotateX(90deg) rotateZ(-90deg);
    }

    &:nth-of-type(17) {
        transform: translate3d(-200rem,100rem,-100rem) rotateX(90deg) rotateZ(-90deg);

        &:after {
            transform: translate3d(0, 100rem, 100rem) rotateY(90deg) rotateX(90deg);
        }
    }

    &:nth-of-type(18) {
        transform: translate3d(-100rem,100rem,-100rem) rotateX(90deg) rotateZ(-90deg);

        &:after {
            transform: translate3d(0, 100rem, 100rem) rotateY(90deg) rotateX(90deg);
        }
    }

    &:nth-of-type(19) {
        transform: translate3d(100rem,100rem,-200rem) rotateX(90deg) rotateZ(90deg);

        &:before {
            display: none;
        }
    }

    &:nth-of-type(20) {
        transform: translate3d(200rem,100rem,-200rem) rotateX(90deg) rotateZ(90deg);
    }

    &:nth-of-type(21) {
        transform: translate3d(200rem, 100rem, -200rem) rotateX(90deg);

        &:before {
            display: none;
        }
    }

    &:nth-of-type(22) {
        transform: translate3d(-300rem, 100rem, 0) rotateX(90deg) rotateZ(180deg);

        &:before {
            transform: translate3d(100rem, -100rem, 100rem) rotateY(90deg) rotateX(0deg);
        }
    }

    &:nth-of-type(23) {
        transform: translate3d(-200rem, 100rem, 0) rotateX(90deg) rotateZ(-180deg);

        &:before {
            display: none;
        }
    }

    &:nth-of-type(24) {
        transform: translate3d(-100rem, 100rem, -100rem) rotateX(90deg) rotateZ(90deg);
    }

    &:nth-of-type(25) {
        transform: translate3d(0, 100rem, -100rem) rotateX(90deg) rotateZ(90deg);
    }

    &:nth-of-type(26) {
        transform: translate3d(100rem,100rem,-100rem) rotateX(90deg) rotateZ(90deg);

        &:after {
            display: none;
        }
    }

    &:nth-of-type(27) {
        transform: translate3d(200rem,100rem,-100rem) rotateX(90deg) rotateZ(90deg);
    }

    &:nth-of-type(28) {
        transform: translate3d(300rem, 100rem, 0rem) rotateX(90deg) rotateZ(180deg);
    }

    &:nth-of-type(29) {
        transform: translate3d(-400rem,100rem,0) rotateX(90deg);

        &:before, &:after {
            display: none;
        }
    }

    &:nth-of-type(30) {
        transform: translate3d(-200rem, 100rem, 100rem) rotateX(90deg) rotateZ(-180deg);

        &:before {
            display: none;
        }
    }

    &:nth-of-type(31) {
        transform: translate3d(-100rem, 100rem, 0rem) rotateX(90deg) rotateZ(90deg);
    }

    &:nth-of-type(32) {
        transform: translate3d(-100rem,100rem,0) rotateX(90deg);

        &:before, &:after {
            display: none;
        }
    }

    &:nth-of-type(34) {
        transform: translate3d(100rem,100rem,0) rotateX(90deg);

        &:before, &:after {
            display: none;
        }
    }

    &:nth-of-type(35) {
        transform: translate3d(300rem, 100rem, 100rem) rotateX(90deg) rotateZ(180deg);
    }

    &:nth-of-type(36) {
        transform: translate3d(-300rem, 100rem, 100rem) rotateX(90deg) rotateZ(90deg);

        &:before {
            transform: translate3d(0, 100rem, 100rem) rotateY(90deg) rotateX(90deg);
        }
    }

    &:nth-of-type(37) {
        transform: translate3d(-200rem, 100rem, 100rem) rotateX(90deg) rotateZ(90deg);
    }

    &:nth-of-type(38) {
        transform: translate3d(-100rem, 100rem, 100rem) rotateX(90deg) rotateZ(90deg);
    }

    &:nth-of-type(39) {
        transform: translate3d(0,100rem,100rem) rotateX(90deg) rotateZ(90deg);
    }

    &:nth-of-type(40) {
        transform: translate3d(100rem,100rem,200rem) rotateX(90deg) rotateZ(180deg);

        &:after {
            transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
        }
    }

    &:nth-of-type(41) {
        transform: translate3d(200rem, 100rem, 200rem) rotateX(90deg) rotateZ(180deg);

        &:after {
            transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
        }

        &:before {
            display: none;
        }
    }

    &:nth-of-type(42) {
        transform: translate3d(300rem, 100rem, 200rem) rotateX(90deg) rotateZ(180deg);

        &:after {
            transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
        }
    }
}
//@import "buttons";
buttons {
    position: absolute;
    bottom: 0;
    right: 0;
    transform: translate3d(0,0,0);
    width: 40rem;
    height: 30rem;
    z-index: 2;

    label {
        font-size: 3rem;
        border-radius: 1rem;
        padding: 1em;
        color: $white;
        cursor: pointer;
        font-weight: bold;
        width: 3em;
        height: 3em;
        transition: all .15s ease-in-out;
        position: absolute;
        box-sizing: border-box;
        background: $body;
        border: .2rem solid $blk;

        &.leftb {
            bottom: 1rem;
            right: 21rem;
        }

        &.rightb {
            bottom: 1rem;
            right: 1rem;
        }

        &.upb {
            bottom: 11rem;
            right: 11rem;
        }

        &.downb {
            bottom: 1rem;
            right: 11rem;
        }

        &:before, &:after {
            content: '';
            width: 100%;
            height: 100%;
            position: absolute;
            border-radius: 1rem;
            left: 0;
            right: 0;
            top: 0;
        }

        &:after {
            content: '\2191';
            font-size: 4rem;
        }

        &.leftb:after {
            content: '\2190';
        }

        &.rightb:after {
            content: '\2192';
        }

        &.downb:after {
            content: '\2193';
        }

        &:hover, &:focus, &:active {
            transform: translate3d(0,.5rem,-10rem) scale(.98);
            color: $blk;
        }
    }
}

@supports not (-webkit-touch-callout: none) {
    #gfx2:checked ~ {
        @media (min-width: 480px) {
            buttons {
                label {
                    text-shadow: 0 0 .2rem currentColor, 0 0 .2rem currentColor, 0 0 .2rem currentColor, 0 0 .2rem currentColor;
                    border: none;
                    color: $body;

                    &:before {
                        transform: translate3d(0, 0, -.6rem);
                        background: linear-gradient($kk, rgba($body,.5)), //
                        linear-gradient(90deg, lighten($kk,10), rgba($body,.5)), //
                        conic-gradient(from 20deg, currentColor, $kk, currentColor, currentColor, currentColor, $kk, currentColor,currentColor,currentColor, $kk, currentColor,currentColor,currentColor, $kk, currentColor, currentColor,currentColor), $key;
                        box-shadow: .5rem .5rem 1rem $blk;
                    }

                    &:after {
                        transform: translate3d( 0, -.5rem, -.3rem) scale(.75);
                        background: radial-gradient( rgba($body,.5), $key), $key;
                        box-shadow: inset 0 0 .5rem lighten($kk,10), 0 0 .5rem lighten($kk,10);
                    }
                }
            }
        }
    }
}

.dead {
    filter: brightness(.8);
}
//@import "movement";
x, y, z, room {
    transition: all 1s ease-in-out;
}

.upb, .downb, .rightb, .leftb, .dead {
    display: none;
}

#original:checked {
    ~ buttons > {
        .rb1, .lb1 {
            display: block;
        }
    }
}

// <- left

#left1:checked {
    ~ content > w > x {
        transform: rotateY(-90deg);
    }

    ~ buttons > {
        .rb4, .lb2 {
            display: block;
        }
    }
}

// <- backwards

#left2:checked {
    ~ content > w > x {
        transform: rotateY(-180deg);
    }

    ~ buttons > {
        .rb5, .lb3 {
            display: block;
        }
    }
}
// <-- right

#left3:checked {
    ~ content > w > x {
        transform: rotateY(-270deg);
    }

    ~ buttons > {
        .rb6, .lb4 {
            display: block;
        }
    }
}
// <- start

#left4:checked {
    ~ content > w > x {
        animation: killrotate 1s ease-in-out;

        @keyframes killrotate {
            0% {
                transform: rotateY(-270deg);
            }

            99% {
                transform: rotateY(-360deg);
            }

            100% {
                transform: rotateY(0deg);
            }
        }
    }

    ~ buttons > {
        .rb1, .lb1 {
            display: block;
        }
    }
}

// -> right
#right1:checked {
    ~ content > w > x {
        transform: rotateY(90deg);
    }

    ~ buttons > {
        .rb2, .lb4 {
            display: block;
        }
    }
}
// -> backwards

#right2:checked {
    ~ content > w > x {
        transform: rotateY(180deg);
    }

    ~ buttons > {
        .rb3, .lb5 {
            display: block;
        }
    }
}
// -> left

#right3:checked {
    ~ content > w > x {
        transform: rotateY(270deg);
    }

    ~ buttons > {
        .rb4, .lb6 {
            display: block;
        }
    }
}

// -> start

#right4:checked {
    ~ content > w > x {
        animation: killrotate2 1s ease-in-out;

        @keyframes killrotate2 {
            0% {
                transform: rotateY(270deg);
            }

            99% {
                transform: rotateY(360deg);
            }

            100% {
                transform: rotateY(0deg);
            }
        }
    }

    ~ buttons > {
        .rb1, .lb1 {
            display: block;
        }
    }
}
// swap them
#left2:checked, #left3:checked, #right1:checked, #right2:checked {
    ~ buttons > {
        .upb {
            bottom: 1rem;

            &:after {
                content: '\2193';
            }
        }

        .downb {
            bottom: 11rem;

            &:after {
                content: '\2191';
            }
        }
    }
}

// z loop

@for $i from 0 through 7 {
    #z-#{$i}:checked {
        ~ content > w > x > y > z {
            transform: translate3d(0,0,(($i - 2 ) * 100rem));
        }

        ~ buttons > {
            .upb[for="z-#{$i + 1}"], .downb[for="z-#{$i - 1}"] {
                display: block;
            }
        }
    }
}

// x loop

@for $i from 0 through 9 {
    #x-#{$i}:checked {
        ~ content > w > x > y {
            transform: translate3d((($i - 3) * 100rem),0,0);
        }

        ~ buttons > {
            .upb[for="x-#{$i + 1}"], .downb[for="x-#{$i - 1}"] {
                display: block;
            }
        }
    }
}

#left2, #left4, #original, #right2, #right4 {
    &:checked ~ buttons > {
        .bx {
            display: none !important;
        }
    }
}

#left1, #left3, #right1, #right3 {
    &:checked ~ buttons > {
        .bz {
            display: none !important;
        }
    }
}
//@import "movement-blockers";
body:has(.ilower:checked) {
    #z-2:checked ~ #x-3:checked ~ .x-rotation:checked,
    #z-3:checked ~ #x-3:checked ~ .x-rotation:checked,
    #z-5:checked ~ #x-3:checked ~ .x-rotation:checked,
    #z-2:checked ~ #x-6:checked ~ .x-rotation:checked,
    #z-2:checked ~ #x-2:checked ~ .x-rotation:checked,
    #z-3:checked ~ #x-2:checked ~ .x-rotation:checked,
    #z-6:checked ~ #x-4:checked ~ .x-rotation:checked {
        ~ buttons > {
            .upb, .downb {
                display: none;
            }

            .upb[for="x-8"], .downb[for="x-8"] {
                display: block;
            }
        }
    }
    //just down blocked x
    #z-4:checked ~ #x-3:checked ~ .x-rotation:checked,
    #z-1:checked ~ #x-3:checked ~ .x-rotation:checked,
    #z-2:checked ~ #x-4:checked ~ .x-rotation:checked,
    #z-3:checked ~ #x-4:checked ~ .x-rotation:checked,
    #z-1:checked ~ #x-6:checked ~ .x-rotation:checked,
    #z-2:checked ~ #x-7:checked ~ .x-rotation:checked,
    #z-3:checked ~ #x-7:checked ~ .x-rotation:checked,
    #z-4:checked ~ #x-7:checked ~ .x-rotation:checked,
    #z-5:checked ~ #x-4:checked ~ .x-rotation:checked,
    #z-6:checked ~ #x-1:checked ~ .x-rotation:checked {
        ~ buttons > {
            .downb {
                display: none;
            }

            .downb[for="x-8"] {
                display: block;
            }
        }
    }
    // just up blocked x
    #z-6:checked ~ #x-3:checked ~ .x-rotation:checked,
    #z-1:checked ~ #x-2:checked ~ .x-rotation:checked,
    #z-1:checked ~ #x-5:checked ~ .x-rotation:checked,
    #z-2:checked ~ #x-5:checked ~ .x-rotation:checked,
    #z-3:checked ~ #x-6:checked ~ .x-rotation:checked,
    #z-4:checked ~ #x-6:checked ~ .x-rotation:checked,
    #z-5:checked ~ #x-2:checked ~ .x-rotation:checked,
    #z-4:checked ~ #x-2:checked ~ .x-rotation:checked {
        ~ buttons > {
            .upb {
                display: none;
            }

            .upb[for="x-8"] {
                display: block;
            }
        }
    }
    // walls z
    // walls z
    // walls z
    //up and down blocked z
    #z-1:checked ~ #x-4:checked ~ .z-rotation:checked,
    #z-3:checked ~ #x-5:checked ~ .z-rotation:checked,
    #z-4:checked ~ #x-4:checked ~ .z-rotation:checked,
    #z-4:checked ~ #x-5:checked ~ .z-rotation:checked,
    #z-5:checked ~ #x-6:checked ~ .z-rotation:checked,
    #z-5:checked ~ #x-5:checked ~ .z-rotation:checked,
    #z-6:checked ~ #x-2:checked ~ .z-rotation:checked {
        ~ buttons > {
            .upb, .downb {
                display: none;
            }

            .upb[for="z-7"], .downb[for="z-7"] {
                display: block;
            }
        }
    }
    //up blocked z
    #z-2:checked ~ #x-5:checked ~ .z-rotation:checked,
    #z-3:checked ~ #x-4:checked ~ .z-rotation:checked,
    #z-3:checked ~ #x-2:checked ~ .z-rotation:checked,
    #z-4:checked ~ #x-6:checked ~ .z-rotation:checked,
    #z-5:checked ~ #x-7:checked ~ .z-rotation:checked,
    #z-5:checked ~ #x-2:checked ~ .z-rotation:checked {
        ~ buttons > {
            .upb {
                display: none;
            }

            .upb[for="z-7"] {
                display: block;
            }
        }
    }
    //down blocked z
    #z-2:checked ~ #x-4:checked ~ .z-rotation:checked,
    #z-5:checked ~ #x-4:checked ~ .z-rotation:checked,
    #z-5:checked ~ #x-1:checked ~ .z-rotation:checked,
    #z-4:checked ~ #x-2:checked ~ .z-rotation:checked {
        ~ buttons > {
            .downb {
                display: none;
            }

            .downb[for="z-7"] {
                display: block;
            }
        }
    }
}

body:has(.iupper:checked) {
    /* background: blue;*/
    /// walls x
    /// walls x
    /// walls x
    // up and down blocked x
    // z5 x4 needs fixing

    #z-5:checked ~ #x-1:checked ~ .x-rotation:checked,
    #z-3:checked ~ #x-1:checked ~ .x-rotation:checked,
    #z-2:checked ~ #x-1:checked ~ .x-rotation:checked,
    #z-2:checked ~ #x-2:checked ~ .x-rotation:checked,
    #z-4:checked ~ #x-4:checked ~ .x-rotation:checked,
    #z-2:checked ~ #x-3:checked ~ .x-rotation:checked {
        ~ buttons > {
            .upb, .downb {
                display: none;
            }

            .upb[for="x-8"], .downb[for="x-8"] {
                display: block;
            }
        }
    }
    //just down blocked x
    #z-1:checked ~ #x-3:checked ~ .x-rotation:checked,
    #z-2:checked ~ #x-4:checked ~ .x-rotation:checked,
    #z-2:checked ~ #x-7:checked ~ .x-rotation:checked,
    #z-3:checked ~ #x-7:checked ~ .x-rotation:checked,
    #z-6:checked ~ #x-5:checked ~ .x-rotation:checked,
    #z-3:checked ~ #x-2:checked ~ .x-rotation:checked,
    #z-5:checked ~ #x-2:checked ~ .x-rotation:checked,
    #z-5:checked ~ #x-4:checked ~ .x-rotation:checked,
    #z-4:checked ~ #x-5:checked ~ .x-rotation:checked,
    #z-6:checked ~ #x-1:checked ~ .x-rotation:checked {
        ~ buttons > {
            .downb {
                display: none;
            }

            .downb[for="x-8"] {
                display: block;
            }
        }
    }
    // just up blocked x
    #z-5:checked ~ #x-3:checked ~ .x-rotation:checked,
    #z-4:checked ~ #x-3:checked ~ .x-rotation:checked,
    #z-4:checked ~ #x-7:checked ~ .x-rotation:checked,
    #z-1:checked ~ #x-2:checked ~ .x-rotation:checked,
    #z-3:checked ~ #x-6:checked ~ .x-rotation:checked,
    #z-6:checked ~ #x-4:checked ~ .x-rotation:checked,
    #z-6:checked ~ #x-7:checked ~ .x-rotation:checked,
    #z-2:checked ~ #x-6:checked ~ .x-rotation:checked {
        ~ buttons > {
            .upb {
                display: none;
            }

            .upb[for="x-8"] {
                display: block;
            }
        }
    }
    // walls z
    // walls z
    // walls z
    //up and down blocked z
    #z-1:checked ~ #x-4:checked ~ .z-rotation:checked,
    #z-1:checked ~ #x-5:checked ~ .z-rotation:checked,
    #z-2:checked ~ #x-4:checked ~ .z-rotation:checked,
    #z-3:checked ~ #x-2:checked ~ .z-rotation:checked,
    #z-3:checked ~ #x-5:checked ~ .z-rotation:checked,
    #z-5:checked ~ #x-6:checked ~ .z-rotation:checked,
    #z-2:checked ~ #x-5:checked ~ .z-rotation:checked,
    #z-5:checked ~ #x-2:checked ~ .z-rotation:checked,
    #z-1:checked ~ #x-6:checked ~ .z-rotation:checked,
    #z-4:checked ~ #x-2:checked ~ .z-rotation:checked,
    #z-6:checked ~ #x-6:checked ~ .z-rotation:checked,
    #z-6:checked ~ #x-5:checked ~ .z-rotation:checked,
    #z-6:checked ~ #x-2:checked ~ .z-rotation:checked,
    #z-4:checked ~ #x-6:checked ~ .z-rotation:checked,
    #z-6:checked ~ #x-3:checked ~ .z-rotation:checked,
    #z-6:checked ~ #x-4:checked ~ .z-rotation:checked,
    #z-3:checked ~ #x-4:checked ~ .z-rotation:checked {
        ~ buttons > {
            .upb, .downb {
                display: none;
            }

            .upb[for="z-7"], .downb[for="z-7"] {
                display: block;
            }
        }
    }
    //up blocked z
    #z-3:checked ~ #x-3:checked ~ .z-rotation:checked,
    #z-2:checked ~ #x-2:checked ~ .z-rotation:checked,
    #z-3:checked ~ #x-6:checked ~ .z-rotation:checked,
    #z-4:checked ~ #x-7:checked ~ .z-rotation:checked,
    #z-5:checked ~ #x-3:checked ~ .z-rotation:checked,
    #z-5:checked ~ #x-5:checked ~ .z-rotation:checked,
    #z-6:checked ~ #x-7:checked ~ .z-rotation:checked,
    #z-5:checked ~ #x-4:checked ~ .z-rotation:checked {
        ~ buttons > {
            .upb {
                display: none;
            }

            .upb[for="z-7"] {
                display: block;
            }
        }
    }
    //down blocked z

    #z-2:checked ~ #x-6:checked ~ .z-rotation:checked,
    #z-4:checked ~ #x-3:checked ~ .z-rotation:checked,
    #z-4:checked ~ #x-5:checked ~ .z-rotation:checked,
    #z-4:checked ~ #x-4:checked ~ .z-rotation:checked,
    #z-5:checked ~ #x-7:checked ~ .z-rotation:checked {
        ~ buttons > {
            .downb {
                display: none;
            }

            .downb[for="z-7"] {
                display: block;
            }
        }
    }
}

#ilift7:checked ~ #z-2:checked ~ #x-2:checked ~ .z-rotation:checked {
    ~ buttons > {
        .upb {
            display: none;
        }

        .upb[for="z-7"] {
            display: block;
        }
    }
}
//@import "lifts";
.lift {
    background: none;

    *, *:before, *:after {
        transform-origin: 0 0 0;
    }

    lift, floor {
        width: 100%;
        height: 100%;
    }

    lift {
        transform: translate3d(0,0,0);
        transition: all 1s ease-in-out;

        &:before {
            width: 100%;
            height: 100%;
            background: var(--white);
            transform-origin: 0 0 0;
            transform: translate3d(0,0,100rem) rotateY(90deg) rotateX(90deg);
            filter: brightness(.75);
        }
    }

    &.lower lift {
        transform: translate3d(0,0,-100rem);
    }

    label {
        background: darken($red,20);
        height: 5rem;
        width: 5rem;
        cursor: pointer;
        transform: translate3d(47.5rem,1.25rem, 25rem) rotateX(90deg);
        border-radius: 50%;
        transition: all 1s ease-in-out;
        pointer-events: none;

        &:before, &:after {
            height: 5rem;
            width: 5rem;
            transform: translate3d(0, 0, .25rem);
            border-radius: 50%;
            background: darken($red,10);
        }

        &:after {
            transform: translate3d(0, 0, .5rem);
        }

        &:hover, &:focus {
            transform: translate3d(47.5rem,.9rem, 25rem) rotateX(90deg);
        }
    }

    @keyframes light {
        90% {
            background: lighten($red,10);
            box-shadow: inset 0 0 3rem $red, 0 0 5rem $red, 0 0 2rem $red;
        }

        100% {
            background: lighten($red,10);
            box-shadow: inset 0 0 1rem $blk,inset 0 0 3rem $red, 0 0 2rem $red;
        }
    }

    floor {
        background: var(--floor);

        &:before, &:after {
            width: 10rem;
            transform: translate3d( 45rem, .5rem, 0) rotateX(90deg);
            background: $body;
            height: 33rem;
            border-radius: 0 0 5rem 5rem;
        }

        &:before {
            transform: translate3d( 45rem, .1rem, 0) rotateX(90deg);
            background: $blk;
        }

        &:nth-of-type(1) {
            border-radius: 1rem;
            background: darken($body,10);
        }

        &:nth-of-type(2) {
            transform: translate3d(0,0,100rem);

            &:before, &:after {
                display: none;
            }
        }
    }
}

body:has(#gfx2:checked) {
    @media (min-width: 480px) {
        .lift {
            label {
                box-shadow: inset 0 0 1rem $blk;

                &:hover, &:focus {
                    box-shadow: inset 0 0 3rem $blk;
                }
            }
        }

        floor {
            &:nth-of-type(1) {
                box-shadow: inset 0 0 0 2rem $body, inset -1rem -1rem 0 3rem darken($floor,10), inset 1rem 1rem 0 3rem lighten($floor,10);
                background: repeating-linear-gradient(to right, $body, $body 1rem, $none 1rem, $none 2.6rem);
            }
        }
    }
}
//upper level

#ilift5:checked ~ content > w {
    transform: translate3d(0,-10rem,0);

    > x > y > z > room > #lift5 {
        transform: translate3d(0,0,-100rem);
    }
}

#ilift2:checked ~ content > w {
    transform: translate3d(0,-10rem,0);

    > x > y > z > room > #lift2 {
        transform: translate3d(0,0,-100rem);
    }
}
//lower level

#ilift1:checked ~ content > w {
    transform: translate3d(0,100rem,0);

    > x > y > z > room > #lift1 {
        transform: translate3d(0,0,0);
    }
}

#ilift3:checked ~ content > w {
    transform: translate3d(0,100rem,0);

    > x > y > z > room > #lift3 {
        transform: translate3d(0,0,0);
    }
}

#ilift4:checked ~ content > w {
    transform: translate3d(0,100rem,0);

    > x > y > z > room > #lift4 {
        transform: translate3d(0,0,0);
    }
}

#ilift6:checked ~ content > w {
    transform: translate3d(0,100rem,0);

    > x > y > z > room > #lift6 {
        transform: translate3d(0,0,0);
    }
}

#ilift7:checked ~ content > w {
    transform: translate3d(0,100rem,0);

    > x > y > z > room > #lift7 {
        transform: translate3d(0,0,0);
    }
}

#z-6:checked ~ #x-5:checked ~ content > w > x > y > z > room:nth-of-type(3) > lift >,
#z-6:checked ~ #x-4:checked ~ content > w > x > y > z > room:nth-of-type(4) > lift >,
#z-5:checked ~ #x-2:checked ~ content > w > x > y > z > room:nth-of-type(13) > lift >,
#z-4:checked ~ #x-4:checked ~ content > w > x > y > z > room:nth-of-type(18) > lift >,
#z-3:checked ~ #x-3:checked ~ content > w > x > y > z > room:nth-of-type(26) > lift >,
#z-3:checked ~ #x-2:checked ~ content > w > x > y > z > room:nth-of-type(27) > lift >,
#z-2:checked ~ #x-4:checked ~ content > w > x > y > z > room:nth-of-type(32) > lift >,
#z-2:checked ~ #x-2:checked ~ content > w > x > y > z > room:nth-of-type(34) > lift > {
    label {
        pointer-events: all;
        animation: light 1s cubic-bezier(0.5, 0, 1, 0.5) forwards;
    }
}

.iupper:checked ~ #z-3:checked ~ #x-2:checked ~ content > w > x > y > z > room:nth-of-type(27) > lift >,
.iupper:checked ~ #z-6:checked ~ #x-4:checked ~ content > w > x > y > z > room:nth-of-type(4) > lift >,
.ilower:checked ~ #z-2:checked ~ #x-4:checked ~ content > w > x > y > z > room:nth-of-type(32) > lift >,
.ilower:checked ~ #z-6:checked ~ #x-5:checked ~ content > w > x > y > z > room:nth-of-type(3) > lift >,
.ilower:checked ~ #z-5:checked ~ #x-2:checked ~ content > w > x > y > z > room:nth-of-type(13) > lift >,
.ilower:checked ~ #z-4:checked ~ #x-4:checked ~ content > w > x > y > z > room:nth-of-type(18) > lift >,
.ilower:checked ~ #z-3:checked ~ #x-3:checked ~ content > w > x > y > z > room:nth-of-type(26) > lift >,
.ilower:checked ~ #z-2:checked ~ #x-2:checked ~ content > w > x > y > z > room:nth-of-type(34) > lift > {
    label {
        animation: light2 1s ease-in-out forwards;
    }
}

@keyframes light2 {
    0%, 80% {
        background: lighten($red,10);
        box-shadow: inset 0 0 3rem $red, 0 0 5rem $red, 0 0 2rem $red;
    }

    100% {
        background: darken($red,20);
        box-shadow: inset 0 0 1rem $blk;
        pointer-events: none;
    }
}
//@import "win";
wintext {
    transform: scale(0);
    position: absolute;
    top: 10rem;
    left: 0;
    right: 0;
    margin: auto;
    width: 100%;
    max-width: 80rem;
    font-size: 4rem;
    text-align: center;
    line-height: 1.5em;
    background: $white;
    color: $blk;
    padding: 1rem;
    border-radius: 2rem;
    border: 1rem solid $red;
    box-shadow: inset 0 0 0 .25rem $blk,inset 0 .25rem .5rem $blk;
    background: repeating-radial-gradient(circle at 50% 30%, darken($white,1), darken($white,1) 1rem, $white 1rem, $white 2rem);

    h4 {
        margin-top: -1rem;
    }

    h1, h3, h4 {
        font-weight: normal;
    }

    label {
        display: inline-block;
        font-size: 3rem;
        border-radius: 1rem;
        padding: 1em 2rem;
        color: $body;
        cursor: pointer;
        font-weight: bold;
        transition: all .15s ease-in-out;
        position: relative;
        margin-bottom: .5rem;

        &:before, &:after {
            content: '';
            width: 100%;
            height: 100%;
            position: absolute;
            border-radius: 1rem;
            left: 0;
            right: 0;
            top: 0;
            transition: all .15s ease-in-out;
        }

        &:before {
            background: linear-gradient($kk, rgba($body,.5)), //
            linear-gradient(90deg, lighten($kk,20), rgba($body,.5)), //
            conic-gradient(from 20deg, currentColor, $kk, currentColor, currentColor, currentColor, $kk, currentColor,currentColor,currentColor, $kk, currentColor,currentColor,currentColor, $kk, currentColor, currentColor,currentColor), $key;
            transform: translate3d(0, 0, -.2rem);
            box-shadow: 0 .5rem .5rem .5rem rgba($blk,.3);
        }

        &:after {
            background: radial-gradient( rgba($body,.5), $key), $key;
            transform: translate3d( 0, -.5rem, -.1rem) scale(.75);
            box-shadow: inset 0 0 .5rem lighten($kk,30), 0 0 .5rem lighten($kk,20);
            font-size: 4rem;
            content: 'Return ↵';
        }

        &:hover, &:focus {
            transform: translate3d(0,.5rem,-10rem) scale(.98);
            color: $blk;

            &:before {
                box-shadow: 0 .1rem .5rem .25rem rgba($blk,.8);
            }
        }
    }

    .badge {
        padding: 1rem;
        border-radius: 50%;
        width: 11rem;
        height: 11rem;
        margin: 2rem auto;
        box-shadow: 0 .5rem .5rem .5rem rgba($blk,.3), inset 0 0 0 5rem $blk;
        transform: scale(.9);
        position: relative;
        border: dashed .5rem $blk;
        background: $red;

        &:before, &:after, div:before, div:after {
            content: '';
            position: absolute;
        }

        &:before {
            height: 1rem;
            border: 3rem solid $none;
            top: 10rem;
            border-left: 3rem solid $blk;
            border-right: 3rem solid $blk;
            left: 3.5rem;
        }

        & > div {
            width: 9rem;
            height: 9rem;
            background: $red;
            border-radius: 1rem;
            margin: auto;
            position: relative;
            border: 1rem solid $red;
            box-shadow: inset 0 0 0 1rem $white;
            transform: rotate(45deg);

            &:before, &:after {
                width: 4rem;
                height: 2rem;
            }

            &:before {
                border-bottom: 1rem solid $white;
                border-right: 1rem solid $white;
                left: 2rem;
                top: 4rem;
            }

            &:after {
                border-top: 1rem solid $white;
                border-left: 1rem solid $white;
                left: 4rem;
                top: 2rem;
                box-shadow: 0 -1rem 0 $red, -1rem 0 0 $red, -2rem 0 0 $white;
            }
        }
    }

    .button {
        background: radial-gradient( farthest-corner at bottom, rgba($blk,.5), rgba($red,.1));
        filter: brightness(1.5);
        padding: 1rem;
        box-shadow: 0 -1rem 2rem $white;
    }
}

// do stuff

#z-6:checked ~ #x-7:checked ~ .x-rotation:checked,
{
    ~ buttons > {
        .upb[for="x-8"] {
            display: none;
        }

        .upb[for="win"] {
            display: block;
        }
    }
}

#win:checked {
    ~ buttons > {
        .leftb, .rightb {
            display: none;
        }
    }

    ~ content {
        > w > x > y {
            transform: translate3d(500rem,0,0);
        }

        > win {
            display: block;
        }
    }

    ~ wintext {
        animation: wintext 7s forwards cubic-bezier(0, 0, 1, 0.5);
    }
}

@keyframes wintext {
    80% {
        transform: scale(0);
    }

    99% {
        transform: scale(1.5) rotate(710deg);
    }

    100% {
        transform: scale(1) rotate(720deg);
    }
}

//stars

@function stars ($a, $b, $c) {
    $value: '#{random(100) - 50}vmin #{random(100) - 50}vmin '+ $b + ' ' + $c;

    @for $i from 2 through $a {
        $value: '#{$value} , #{random(100) - 50}vmin #{random(100) - 50}vmin '+ $b + ' ' + $c;
    }

    @return unquote($value);
}

@function stars2 ($a, $b, $c) {
    $value: '#{random(110) - 55}vmin #{random(110) - 55}vmin '+ $b + ' ' + $c;

    @for $i from 2 through $a {
        $value: '#{$value} , #{random(110) - 55}vmin #{random(110) - 55}vmin '+ $b + ' ' + $c;
    }

    @return unquote($value);
}

$stars1: stars(5, 0, $white);
$stars2: stars2(7, 0, $red);
$stars3: stars(10, 0, $white);

@-webkit-keyframes stars {
    50% {
        opacity: 1;
    }

    100% {
        transform: translate3d(0vmin,0vmin,1000rem) scale(5);
        opacity: 0;
    }
}

win {
    display: none;

    & > u {
        width: 1rem;
        height: 1rem;
        position: absolute;
        top: -10vmin;
        left: 0;
        box-shadow: $stars1;
        animation: stars 10s -10s infinite linear;
        transform: translate3d(0vmin,0vmin,-1000rem) scale(5);
        opacity: 0;
    }

    & > u:nth-of-type(2) {
        animation: stars 9s infinite linear -1s;
        box-shadow: $stars2;
    }

    & > u:nth-of-type(3) {
        animation: stars 8s infinite linear -2s;
        box-shadow: $stars3;
    }

    & > u:nth-of-type(4) {
        animation: stars 7s infinite linear -3s;
        box-shadow: $stars1;
    }

    & > u:nth-of-type(5) {
        animation: stars 6s infinite linear -4s;
        box-shadow: $stars2;
    }

    & > u:nth-of-type(6) {
        animation: stars 5s infinite linear -5s;
        box-shadow: $stars3;
    }

    & > u:nth-of-type(7) {
        animation: stars 4s infinite linear -6s;
        box-shadow: $stars1;
    }

    & > u:nth-of-type(8) {
        animation: stars 3s infinite linear -7s;
        box-shadow: $stars3;
    }

    & > u:nth-of-type(9) {
        animation: stars 2s infinite linear -8s;
        box-shadow: $stars2;
    }

    & > u:nth-of-type(10) {
        animation: stars 1s infinite linear -9s;
        box-shadow: $stars1;
    }
}
//@import "darkness2";
darkness {
    width: 700rem;
    height: 300rem;
    transform: translate3d(-400rem,-160rem, 201rem);
    pointer-events: none;

    u {
        width: 700rem;
        height: 300rem;
        background: rgba($blk2,.075);
        transform: translate3d(0,0,-100rem) rotateX(-5deg);

        &:before {
            width: 700rem;
            height: 300rem;
            background: rgba($blk2,.075);
            transform: translate3d(0,0,-30rem);
        }
    }

    u:nth-of-type(2) {
        transform: translate3d(0,0,-200rem) rotateX(-5deg);
    }

    u:nth-of-type(3) {
        transform: translate3d(0,0,-300rem) rotateX(-5deg);
    }

    u:nth-of-type(4) {
        transform: translate3d(0,0,-400rem) rotateX(-5deg);
    }

    u:nth-of-type(5) {
        transform: translate3d(0,0,-500rem) rotateX(-5deg);
    }

    u:nth-of-type(6) {
        transform: translate3d(0,0,-600rem) rotateX(-5deg);
    }

    &:nth-of-type(2) {
        transform: translate3d(-45rem,-100rem,-100rem) rotateY(90deg);
    }
}
//@import "ios";
@supports (-webkit-touch-callout: none) {
    wall, content, room {
        width: 10rem;
        height: 10rem;
    }

    content {
        perspective: 100rem;
        transform: scale(.8);
    }

    w {
        transform-origin: 5rem -5rem 0;
        transform: translate3d(0,10rem,100rem);
    }

    y {
        transform-origin: -5rem 0;
    }

    x {
        transform-origin: 5rem 0 -5rem;
    }

    x, y, z, room {
        transition: none;
    }

    room {
        font-size: 3rem;

        &:before {
            transform: translate3d(0,0,10rem) rotateY(90deg) scaleY(1.009);
        }

        &:after {
            transform: translate3d(10rem,0,0) rotateY(-90deg) scaleY(1.009);
        }
    }

    z:nth-of-type(1) room {
        &:nth-of-type(1) {
            transform: translate3d(-30rem, 0, -40rem) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(2) {
            transform: translate3d(-20rem, 0, -40rem) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(3) {
            transform: translate3d(-10rem, 0, -40rem) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(4) {
            transform: translate3d(-10rem, 0, -40rem) rotateX(90deg);

            &:after {
                transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
            }
        }

        &:nth-of-type(5) {
            transform: translate3d(0,0,-40rem) rotateX(90deg);

            &:after {
                transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
            }
        }

        &:nth-of-type(6) {
            transform: translate3d(10rem,0,-30rem) rotateX(90deg) rotateZ(-90deg);
        }

        &:nth-of-type(7) {
            transform: translate3d(20rem,0,-40rem) rotateX(90deg);

            &:before {
                transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
            }
        }

        &:nth-of-type(8) {
            transform: translate3d(-30rem, 0, -20rem) rotateX(90deg) rotateZ(180deg);

            &:before {
                transform: translate3d(10rem, -10rem, 10rem) rotateY(90deg) rotateX(0deg);
            }
        }

        &:nth-of-type(9) {
            transform: translate3d(-30rem, 0, -30rem) rotateX(90deg);
        }

        &:nth-of-type(10) {
            transform: translate3d(-20rem, 0, -30rem) rotateX(90deg);
        }

        &:nth-of-type(11) {
            transform: translate3d(-10rem, 0, -30rem) rotateX(90deg);
        }

        &:nth-of-type(12) {
            transform: translate3d(0,0,-30rem) rotateX(90deg);
        }

        &:nth-of-type(13) {
            transform: translate3d(10rem, 0, -30rem) rotateX(90deg);
        }

        &:nth-of-type(14) {
            transform: translate3d(30rem, 0, -30rem) rotateX(90deg) rotateZ(90deg);

            &:before {
                transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
            }
        }

        &:nth-of-type(15) {
            transform: translate3d(-40rem, 0, -20rem) rotateX(90deg);
        }

        &:nth-of-type(16) {
            transform: translate3d(-20rem, 0, -10rem) rotateX(90deg) rotateZ(-180deg);

            &:before {
                transform: translate3d(0, 10rem, 10rem) rotateY(90deg) rotateX(90deg);
            }
        }

        &:nth-of-type(17) {
            transform: translate3d(-20rem,0,-10rem) rotateX(90deg) rotateZ(-90deg);
        }

        &:nth-of-type(18) {
            transform: translate3d(0,0,-10rem) rotateX(90deg) rotateZ(-180deg);

            &:after {
                transform: translate3d(0,10rem,0) rotateY(-90deg) rotateX(-90deg);
            }

            &:before {
                transform: translate3d(10rem,0,10rem) rotateY(90deg) rotateX(-90deg);
            }
        }

        &:nth-of-type(19) {
            transform: translate3d(0,0,-20rem) rotateX(90deg);
        }

        &:nth-of-type(20) {
            transform: translate3d(10rem,0,-20rem) rotateX(90deg);
        }

        &:nth-of-type(21) {
            transform: translate3d(20rem, 0, -20rem) rotateX(90deg);

            &:after {
                transform: translate3d(-10rem,10rem,0) rotateY(-90deg) rotateX(-90deg);
            }

            &:before {
                transform: translate3d(10rem,0,10rem) rotateY(90deg);
            }
        }

        &:nth-of-type(22) {
            transform: translate3d(-30rem, 0, 0) rotateX(90deg) rotateZ(180deg);

            &:before {
                transform: translate3d(10rem, -10rem, 10rem) rotateY(90deg) rotateX(0deg);
            }
        }

        &:nth-of-type(23) {
            transform: translate3d(-20rem, 0, 0) rotateX(90deg) rotateZ(-180deg);
        }

        &:nth-of-type(24) {
            transform: translate3d(-20rem, 0, -10rem) rotateX(90deg);
        }

        &:nth-of-type(25) {
            transform: translate3d(-10rem, 0, -10rem) rotateX(90deg);
        }

        &:nth-of-type(26) {
            transform: translate3d(0,0,-10rem) rotateX(90deg);
        }

        &:nth-of-type(27) {
            transform: translate3d(10rem,0,-10rem) rotateX(90deg);
        }

        &:nth-of-type(28) {
            transform: translate3d(30rem, 0, 0rem) rotateX(90deg) rotateZ(180deg);
        }

        &:nth-of-type(29) {
            transform: translate3d(-40rem,0,0) rotateX(90deg);
        }

        &:nth-of-type(30) {
            transform: translate3d(-20rem, 0, 10rem) rotateX(90deg) rotateZ(-180deg);
        }

        &:nth-of-type(31) {
            transform: translate3d(-20rem, 0, 0rem) rotateX(90deg) rotateZ(0deg);

            &:after {
                transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
            }
        }

        &:nth-of-type(32) {
            transform: translate3d(0,0,0) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(34) {
            transform: translate3d(10rem,0,0) rotateX(90deg);
        }

        &:nth-of-type(35) {
            transform: translate3d(30rem, 0, 10rem) rotateX(90deg) rotateZ(180deg);
        }

        &:nth-of-type(36) {
            transform: translate3d(-30rem, 0, 10rem) rotateX(90deg) rotateZ(90deg);

            &:before {
                transform: translate3d(0, 10rem, 10rem) rotateY(90deg) rotateX(90deg);
            }
        }

        &:nth-of-type(37) {
            transform: translate3d(-20rem, 0, 10rem) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(38) {
            transform: translate3d(-20rem, 0, 20rem) rotateX(90deg) rotateZ(-90deg);

            &:after {
                transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
            }
        }

        &:nth-of-type(39) {
            transform: translate3d(0,0,10rem) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(40) {
            transform: translate3d(10rem,0,20rem) rotateX(90deg) rotateZ(180deg);

            &:after {
                transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
            }
        }

        &:nth-of-type(41) {
            transform: translate3d(20rem, 0, 20rem) rotateX(90deg) rotateZ(180deg);

            &:after {
                transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
            }
        }

        &:nth-of-type(42) {
            transform: translate3d(30rem, 0, 20rem) rotateX(90deg) rotateZ(180deg);

            &:after {
                transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
            }
        }
    }

    z:nth-of-type(2) room {
        transform: translate3d(0,10rem,0) rotateX(90deg);

        &:nth-of-type(1) {
            transform: translate3d(-30rem, 10rem, -40rem) rotateX(90deg) rotateZ(90deg);

            &:after {
                transform: translate3d(10rem,10rem,0) rotateY(-90deg) rotateX(90deg);
            }
        }

        &:nth-of-type(2) {
            transform: translate3d(-20rem, 10rem, -40rem) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(3) {
            transform: translate3d(-10rem, 10rem, -40rem) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(4) {
            transform: translate3d(0, 10rem, -40rem) rotateX(90deg) rotateZ(90deg);

            &:after {
                transform: translate3d(0,10rem,0) rotateY(-90deg) rotateX(-90deg);
            }
        }

        &:nth-of-type(5) {
            transform: translate3d(0,10rem,-30rem) rotateX(90deg) rotateZ(-90deg);
        }

        &:nth-of-type(6) {
            transform: translate3d(10rem,10rem,-30rem) rotateX(90deg) rotateZ(-90deg);
        }

        &:nth-of-type(7) {
            transform: translate3d(20rem,10rem,-40rem) rotateX(90deg);

            &:before {
                transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
            }
        }

        &:nth-of-type(8) {
            transform: translate3d(-30rem, 10rem, -20rem) rotateX(90deg) rotateZ(180deg);

            &:before {
                transform: translate3d(0, 0, 10rem) rotateY(90deg) rotateX(90deg);
            }
        }

        &:nth-of-type(9) {
            transform: translate3d(-30rem, 10rem, -30rem) rotateX(90deg);
        }

        &:nth-of-type(10) {
            transform: translate3d(-20rem, 10rem, -30rem) rotateX(90deg);
        }

        &:nth-of-type(11) {
            transform: translate3d(0, 10rem, -30rem) rotateX(90deg) rotateZ(90deg);

            &:after {
                transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
            }
        }

        &:nth-of-type(12) {
            transform: translate3d(10rem,10rem,-30rem) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(13) {
            transform: translate3d(20rem, 10rem, -30rem) rotateX(90deg) rotateZ(90deg);

            &:before {
                transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
            }
        }

        &:nth-of-type(14) {
            transform: translate3d(20rem, 10rem, -30rem) rotateX(90deg);
        }

        &:nth-of-type(15) {
            transform: translate3d(-40rem, 10rem, -20rem) rotateX(90deg);
        }

        &:nth-of-type(16) {
            transform: translate3d(-30rem, 10rem, -10rem) rotateX(90deg) rotateZ(-90deg);
        }

        &:nth-of-type(17) {
            transform: translate3d(-20rem,10rem,-10rem) rotateX(90deg) rotateZ(-90deg);

            &:after {
                transform: translate3d(0, 10rem, 10rem) rotateY(90deg) rotateX(90deg);
            }
        }

        &:nth-of-type(18) {
            transform: translate3d(-10rem,10rem,-10rem) rotateX(90deg) rotateZ(-90deg);

            &:after {
                transform: translate3d(0, 10rem, 10rem) rotateY(90deg) rotateX(90deg);
            }
        }

        &:nth-of-type(19) {
            transform: translate3d(10rem,10rem,-20rem) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(20) {
            transform: translate3d(20rem,10rem,-20rem) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(21) {
            transform: translate3d(20rem, 10rem, -20rem) rotateX(90deg);
        }

        &:nth-of-type(22) {
            transform: translate3d(-30rem, 10rem, 0) rotateX(90deg) rotateZ(180deg);

            &:before {
                transform: translate3d(10rem, -10rem, 10rem) rotateY(90deg) rotateX(0deg);
            }
        }

        &:nth-of-type(23) {
            transform: translate3d(-20rem, 10rem, 0) rotateX(90deg) rotateZ(-180deg);
        }

        &:nth-of-type(24) {
            transform: translate3d(-10rem, 10rem, -10rem) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(25) {
            transform: translate3d(0, 10rem, -10rem) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(26) {
            transform: translate3d(10rem,10rem,-10rem) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(27) {
            transform: translate3d(20rem,10rem,-10rem) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(28) {
            transform: translate3d(30rem, 10rem, 0rem) rotateX(90deg) rotateZ(180deg);
        }

        &:nth-of-type(29) {
            transform: translate3d(-40rem,10rem,0) rotateX(90deg);
        }

        &:nth-of-type(30) {
            transform: translate3d(-20rem, 10rem, 10rem) rotateX(90deg) rotateZ(-180deg);
        }

        &:nth-of-type(31) {
            transform: translate3d(-10rem, 10rem, 0rem) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(32) {
            transform: translate3d(-10rem,10rem,0) rotateX(90deg);
        }

        &:nth-of-type(34) {
            transform: translate3d(10rem,10rem,0) rotateX(90deg);
        }

        &:nth-of-type(35) {
            transform: translate3d(30rem, 10rem, 10rem) rotateX(90deg) rotateZ(180deg);
        }

        &:nth-of-type(36) {
            transform: translate3d(-30rem, 10rem, 10rem) rotateX(90deg) rotateZ(90deg);

            &:before {
                transform: translate3d(0, 10rem, 10rem) rotateY(90deg) rotateX(90deg);
            }
        }

        &:nth-of-type(37) {
            transform: translate3d(-20rem, 10rem, 10rem) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(38) {
            transform: translate3d(-10rem, 10rem, 10rem) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(39) {
            transform: translate3d(0,10rem,10rem) rotateX(90deg) rotateZ(90deg);
        }

        &:nth-of-type(40) {
            transform: translate3d(10rem,10rem,20rem) rotateX(90deg) rotateZ(180deg);

            &:after {
                transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
            }
        }

        &:nth-of-type(41) {
            transform: translate3d(20rem, 10rem, 20rem) rotateX(90deg) rotateZ(180deg);

            &:after {
                transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
            }
        }

        &:nth-of-type(42) {
            transform: translate3d(30rem, 10rem, 20rem) rotateX(90deg) rotateZ(180deg);

            &:after {
                transform: translate3d(0,0,0) rotateY(-90deg) rotateX(-90deg);
            }
        }
    }

    .lift {
        lift {
            &:before {
                transform: translate3d(0,0,10rem) rotateY(90deg) rotateX(90deg);
            }
        }

        &.lower lift {
            transform: translate3d(0,0,-10rem);
        }

        label {
            height: .5rem;
            width: .5rem;
            transform: translate3d(4.725rem,.125rem, 2.5rem) rotateX(90deg);

            &:before, &:after {
                height: .5rem;
                width: .5rem;
                transform: translate3d(0, 0, .025rem);
            }

            &:after {
                transform: translate3d(0, 0, .05rem);
            }

            &:hover, &:focus {
                transform: translate3d(4.75rem,.09rem, 2.5rem) rotateX(90deg);
            }
        }

        @keyframes light {
            90% {
                box-shadow: inset 0 0 .3rem $red, 0 0 .5rem $red, 0 0 .2rem $red;
            }

            100% {
                box-shadow: inset 0 0 .1rem $blk,inset 0 0 .3rem $red, 0 0 .2rem $red;
            }
        }

        floor {
            &:before, &:after {
                width: 1rem;
                transform: translate3d( 4.5rem, .05rem, 0) rotateX(90deg);
                height: 3.3rem;
                border-radius: 0 0 .5rem .5rem;
            }

            &:before {
                transform: translate3d( 4.5rem, .01rem, 0) rotateX(90deg);
            }

            &:nth-of-type(1) {
                border-radius: .1rem;
            }

            &:nth-of-type(2) {
                transform: translate3d(0,0,10rem);
            }
        }
    }

    body:has(#gfx2:checked) {
        @media (min-width: 480px) {
            .lift {
                label {
                    box-shadow: inset 0 0 .1rem $blk;

                    &:hover, &:focus {
                        box-shadow: inset 0 0 .3rem $blk;
                    }
                }
            }

            floor {
                &:nth-of-type(1) {
                    box-shadow: inset 0 0 0 .2rem $body, inset -.1rem -.1rem 0 .3rem darken($floor,10), inset .1rem .1rem 0 .3rem lighten($floor,10);
                    background: lighten($body,10);
                }
            }
        }
    }
    //upper level

    #ilift5:checked ~ content > w {
        transform: translate3d(0,-1rem,100rem);

        > x > y > z > room > #lift5 {
            transform: translate3d(0,0,-10rem);
        }
    }

    #ilift2:checked ~ content > w {
        transform: translate3d(0,-10rem,100rem);

        > x > y > z > room > #lift2 {
            transform: translate3d(0,0,-10rem);
        }
    }
    //lower level

    #ilift1:checked ~ content > w {
        transform: translate3d(0,10rem,100rem);
    }

    #ilift3:checked ~ content > w {
        transform: translate3d(0,10rem,100rem);
    }

    #ilift4:checked ~ content > w {
        transform: translate3d(0,10rem,100rem);
    }

    #ilift6:checked ~ content > w {
        transform: translate3d(0,10rem,100rem);
    }

    #ilift7:checked ~ content > w {
        transform: translate3d(0,10rem,100rem);
    }
    // z loop

    @for $i from 0 through 7 {
        #z-#{$i}:checked {
            ~ content > w > x > y > z {
                transform: translate3d(0,0,(($i - 3 ) * 10rem));
            }
        }
    }
    // x loop

    @for $i from 0 through 9 {
        #x-#{$i}:checked {
            ~ content > w > x > y {
                transform: translate3d((($i - 3) * 10rem),0,0);
            }
        }
    }

    #top-view:checked {
        ~ content > w {
            transform: translate3d(5rem,20rem,-60rem) rotateX(-90deg) !important;
        }
    }

    darkness {
        width: 70rem;
        height: 30rem;
        transform: translate3d(-40rem,-16rem, 20.1rem);

        u {
            width: 70rem;
            height: 30rem;
            transform: translate3d(0,0,-10rem) rotateX(-5deg);

            &:before {
                width: 70rem;
                height: 30rem;
                transform: translate3d(0,0,-3rem);
            }
        }

        u:nth-of-type(2) {
            transform: translate3d(0,0,-20rem) rotateX(-5deg);
        }

        u:nth-of-type(3) {
            transform: translate3d(0,0,-30rem) rotateX(-5deg);
        }

        u:nth-of-type(4) {
            transform: translate3d(0,0,-40rem) rotateX(-5deg);
        }

        u:nth-of-type(5) {
            transform: translate3d(0,0,-50rem) rotateX(-5deg);
        }

        u:nth-of-type(6) {
            transform: translate3d(0,0,-60rem) rotateX(-5deg);
        }

        &:nth-of-type(2) {
            transform: translate3d(-4.5rem,-10rem,-10rem) rotateY(90deg);
        }
    }
}

Final Output

Written by: Piyush Patil

Code Credits: https://codepen.io/ivorjetski/pen/poQpveN

If you found any mistakes or have any doubts please feel free to Contact Us

Hope you find this post helpful💖

Share your love