Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save antoniopaolini/f21330d6aa1a68be6bb5e6292202187a to your computer and use it in GitHub Desktop.
Save antoniopaolini/f21330d6aa1a68be6bb5e6292202187a to your computer and use it in GitHub Desktop.
Optimus Prime Toggle with CSS Transform πŸ‘€πŸ˜… [cpc-toggles]
<h1>Tap anywhere</h1>
<label for="speed">Slow down?</label>
<input type="checkbox" role="switch" title="Change speed!" id="speed" />
<input type="checkbox" role="switch" title="Roll out!" id="transform" />
<label for="transform">
<span>Transform</span>
<span></span>
<span></span>
<span></span>
<span></span>
</label>
<div class="scene-jumper">
<div class="scene scene--optimus optimus">
<div class="scene-turner">
<div class="scene-roller">
<!-- Trick here is to map out everything in 2D. -->
<!-- Sections based off of Optimus' core. That's where the power comes from -->
<!-- He has the hips and he can bend forward or backward based on this point -->
<!-- Almost detach the legs as if they aren't there as it's easy to connect them when needed -->
<!-- Torso is where the magic happens. This part spins around on the top of the core. -->
<!-- Does it need to though? It doesn't in real life. Only because it's a toy and physics??? -->
<!-- Maybe we could just have it fold down like the G1 Cartoon??? -->
<div class="optimus__core">
<div class="core core--upper">
<div class="optimus__torso">
<!-- Some other spot here for a number plate or something. Bumper?? -->
<!-- Trick here is to put the torso at the top of the grill-->
<!-- Can always move this later if needed -->
<div class="optimus__top">
<div class="optimus__head">
<div class="optimus__head-door"></div>
<div class="optimus__helmet">
<div class="optimus__head-base"></div>
<div class="optimus__head-reactor">
<div class="optimus__head-twist">
<div class="optimus__neck">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="optimus__face">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="optimus__mouth">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="optimus__ear optimus__ear--left">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="optimus__ear optimus__ear--right">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="optimus__mohawk">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="optimus__helmet-top">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="optimus__helmet-back">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<!-- Each contains the top and bottom part -->
<div class="optimus__helmet-side optimus__helmet-side--left">
<div class="optimus__helmet-side-guard">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="optimus__helmet-mouth-guard">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
</div>
<div class="optimus__helmet-side optimus__helmet-side--right">
<div class="optimus__helmet-side-guard">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="optimus__helmet-mouth-guard">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="optimus__spine">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="chest">
<div class="cuboid">
<div class="cuboid__side">
<div class="cab-light cab-light--left">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="cab-light cab-light--right">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
</div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="hood">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="cab">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="arms">
<div class="arm arm--right">
<div class="arm-bar">
<div class="arm-cube">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="shoulder-port">
<div class="shoulder-gesture">
<div class="exhaust">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="shoulder">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side">
<img class="logo" src="/shared/images/bear-2022--white.svg" alt="" />
</div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="bicep">
<div class="bicep__strut">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="forearm">
<div class="forearm-cradle">
<div class="forearm-gesture">
<div class="forearm-strut">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="forearm-cap">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="fist">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side cuboid__side--no-filter">
<div class="hand">
<div class="hand__fist">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="hand__fingers">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
</div>
</div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="forearm-shell">
<div class="cuboid">
<div class="cuboid__side">
<img class="bracket" src="/shared/images/code-bracket.svg" alt="" />
</div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="arm arm--left">
<div class="arm-bar">
<div class="arm-cube">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="shoulder-port">
<div class="shoulder-gesture">
<div class="exhaust">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="shoulder">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side">
<img class="logo" src="/shared/images/bear-2022--white.svg" alt="" />
</div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="bicep">
<div class="bicep__strut">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="forearm">
<div class="forearm-cradle">
<div class="forearm-gesture">
<div class="forearm-flip">
<div class="forearm-strut">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="forearm-cap">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="fist">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side cuboid__side--no-filter">
<div class="hand">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
</div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="forearm-shell">
<div class="cuboid">
<div class="cuboid__side">
<img class="bracket" src="/shared/images/code-bracket.svg" alt="" />
</div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="core core--lower">
<!-- Hips are static. They actually hold the side of the grill which is interesting -->
<!-- The magic of the legs and the side piece of Optimus' grill -->
<div class="optimus__grill-hinge">
<div class="optimus__grill">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="optimus__plate">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
</div>
<div class="optimus__hips hips">
<div class="optimus__axle">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="hip hip--left">
<div class="hip__grill">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="hip__flexor">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="hip__flexor-low">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
</div>
<div class="hip hip--right">
<div class="hip__grill">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="hip__flexor">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="hip__flexor-low">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
</div>
</div>
<div class="optimus__belt">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side">
<div class="belt__segments">
<div class="belt__segment"></div>
<div class="belt__segment"></div>
<div class="belt__segment"></div>
<div class="belt__segment"></div>
<div class="belt__segment"></div>
</div>
</div>
</div>
</div>
<div class="optimus__leg leg optimus__leg--left">
<div class="leg__top">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="leg__bottom">
<div class="sock">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="wheel-arch">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="tank">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="boot">
<div class="foot">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
</div>
<div class="holster-wheel holster-wheel--right holster-wheel--rear-one">
<div class="wheel">
<div style="--index: 0" class="wheel__side"></div>
<div style="--index: 1" class="wheel__side"></div>
<div style="--index: 2" class="wheel__side"></div>
<div style="--index: 3" class="wheel__side"></div>
<div style="--index: 4" class="wheel__side"></div>
<div style="--index: 5" class="wheel__side"></div>
<div style="--index: 6" class="wheel__side"></div>
<div style="--index: 7" class="wheel__side"></div>
<div style="--index: 8" class="wheel__side"></div>
<div style="--index: 9" class="wheel__side"></div>
</div>
</div>
<div class="holster-wheel holster-wheel--right holster-wheel--rear-two">
<div class="wheel">
<div style="--index: 0" class="wheel__side"></div>
<div style="--index: 1" class="wheel__side"></div>
<div style="--index: 2" class="wheel__side"></div>
<div style="--index: 3" class="wheel__side"></div>
<div style="--index: 4" class="wheel__side"></div>
<div style="--index: 5" class="wheel__side"></div>
<div style="--index: 6" class="wheel__side"></div>
<div style="--index: 7" class="wheel__side"></div>
<div style="--index: 8" class="wheel__side"></div>
<div style="--index: 9" class="wheel__side"></div>
</div>
</div>
</div>
<div class="holster-wheel holster-wheel--right">
<div class="wheel">
<div style="--index: 0" class="wheel__side"></div>
<div style="--index: 1" class="wheel__side"></div>
<div style="--index: 2" class="wheel__side"></div>
<div style="--index: 3" class="wheel__side"></div>
<div style="--index: 4" class="wheel__side"></div>
<div style="--index: 5" class="wheel__side"></div>
<div style="--index: 6" class="wheel__side"></div>
<div style="--index: 7" class="wheel__side"></div>
<div style="--index: 8" class="wheel__side"></div>
<div style="--index: 9" class="wheel__side"></div>
</div>
</div>
</div>
<div class="optimus__leg optimus__leg--right">
<div class="leg__top">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="leg__bottom">
<div class="sock">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="wheel-arch">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="tank">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
<div class="boot">
<div class="foot">
<div class="cuboid">
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
<div class="cuboid__side"></div>
</div>
</div>
</div>
<div class="holster-wheel holster-wheel--left holster-wheel--rear-one">
<div class="wheel">
<div style="--index: 0" class="wheel__side"></div>
<div style="--index: 1" class="wheel__side"></div>
<div style="--index: 2" class="wheel__side"></div>
<div style="--index: 3" class="wheel__side"></div>
<div style="--index: 4" class="wheel__side"></div>
<div style="--index: 5" class="wheel__side"></div>
<div style="--index: 6" class="wheel__side"></div>
<div style="--index: 7" class="wheel__side"></div>
<div style="--index: 8" class="wheel__side"></div>
<div style="--index: 9" class="wheel__side"></div>
</div>
</div>
<div class="holster-wheel holster-wheel--left holster-wheel--rear-two">
<div class="wheel">
<div style="--index: 0" class="wheel__side"></div>
<div style="--index: 1" class="wheel__side"></div>
<div style="--index: 2" class="wheel__side"></div>
<div style="--index: 3" class="wheel__side"></div>
<div style="--index: 4" class="wheel__side"></div>
<div style="--index: 5" class="wheel__side"></div>
<div style="--index: 6" class="wheel__side"></div>
<div style="--index: 7" class="wheel__side"></div>
<div style="--index: 8" class="wheel__side"></div>
<div style="--index: 9" class="wheel__side"></div>
</div>
</div>
</div>
<div class="holster-wheel holster-wheel--left holster-wheel--front">
<div class="wheel">
<div style="--index: 0" class="wheel__side"></div>
<div style="--index: 1" class="wheel__side"></div>
<div style="--index: 2" class="wheel__side"></div>
<div style="--index: 3" class="wheel__side"></div>
<div style="--index: 4" class="wheel__side"></div>
<div style="--index: 5" class="wheel__side"></div>
<div style="--index: 6" class="wheel__side"></div>
<div style="--index: 7" class="wheel__side"></div>
<div style="--index: 8" class="wheel__side"></div>
<div style="--index: 9" class="wheel__side"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

Optimus Prime Toggle with CSS Transform πŸ‘€πŸ˜… [cpc-toggles]

A Pen by Jhey on CodePen.

License.

#transform {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
h1 {
position: fixed;
top: 2rem;
left: 2rem;
opacity: 0.25;
margin: 0;
}
[for=transform] {
color: transparent;
position: fixed;
inset: 0;
color: transparent;
font-weight: bold;
height: 100vh;
width: 100vw;
cursor: pointer;
transform: translate3d(0, 0, 500vmin);
display: grid;
grid-template-columns: repeat(5, 1fr);
z-index: 2;
}
body > [for=transform] span {
display: block;
}
:root:has([for=transform] span:nth-of-type(1):hover) {
--truck-turn: -10deg;
--head-turn: -20deg;
}
:root:has([for=transform] span:nth-of-type(2):hover) {
--truck-turn: -5deg;
--head-turn: -10deg;
}
:root:has([for=transform] span:nth-of-type(3):hover) {
--truck-turn: 0deg;
--head-turn: 0deg;
}
:root:has([for=transform] span:nth-of-type(4):hover) {
--truck-turn: 5deg;
--head-turn: 10deg;
}
:root:has([for=transform] span:nth-of-type(5):hover) {
--truck-turn: 10deg;
--head-turn: 20deg;
}
.optimus__head-reactor {
height: 100%;
width: 100%;
}
:root:has(#transform:checked) .optimus__head-reactor {
transform: rotateY(var(--head-turn, 0deg));
transition: transform 0.125s;
}
:root:not(:has(#transform:checked)) .scene-turner {
transform: rotateZ(var(--truck-turn, 0deg));
transition: transform 0.125s;
}
*,
*:after,
*:before {
box-sizing: border-box;
transform-style: preserve-3d;
touch-action: none;
}
:root {
--size: 4;
--optimus-rotation-y: -24;
--optimus-rotation-x: -32;
/* Optimus Colors */
/* Transition speed */
--transition-speed: 0.2s;
/* Colors */
--blue-1: hsl(215, 100%, 45%);
--blue-2: hsl(215, 100%, 40%);
--blue-3: hsl(215, 100%, 35%);
--blue-4: hsl(215, 100%, 30%);
--blue-5: hsl(215, 100%, 25%);
--grey-1: hsl(228, 3%, 65%);
--grey-2: hsl(228, 3%, 60%);
--grey-3: hsl(228, 3%, 55%);
--grey-4: hsl(228, 3%, 50%);
--grey-5: hsl(228, 3%, 45%);
--red-1: hsl(0, 74%, 50%);
--red-2: hsl(0, 74%, 45%);
--red-3: hsl(0, 74%, 40%);
--red-4: hsl(0, 74%, 35%);
--red-5: hsl(0, 74%, 30%);
--eye-blue: hsl(210 100% 70%);
--orange: hsl(42, 99%, 45%);
/* Sizing and random stuff */
--size: 5;
--cab-width: calc(var(--size) * 3.6vmin);
--cab-multiplier: 3.6;
--torso-depth: calc(var(--size) * 2.6);
--core-height: calc((var(--size) * 1 / 3) * 1);
--chest-depth: calc(var(--torso-depth) * 0.6);
--fist-dimension: calc((var(--size) * var(--cab-multiplier) - var(--size)) / 2);
--fist-width: calc(((var(--size) * var(--cab-multiplier) - var(--size)) / 2) * 1vmin);
--grill-height: calc(((var(--size) / 3) * 3.5) * 1vmin);
--cab-height: calc(var(--grill-height) * 1.4);
--wheel-depth: calc(var(--size) * 0.4);
--leg-height: calc(var(--size) * 6.4);
}
body {
display: grid;
place-items: center;
min-height: 100vh;
overflow: hidden;
background: hsl(210 20% 88%);
}
[for=speed] {
cursor: pointer;
position: fixed;
bottom: 2rem;
right: 2.24rem;
z-index: 10;
font-family: sans-serif, system-ui;
transform: translate3d(0, 0, 500vmin);
}
#speed {
position: fixed;
bottom: 2.2rem;
right: 1rem;
z-index: 10;
transform: translate3d(0, 0, 500vmin);
}
:root:has(#speed:checked) {
--transition-speed: 2s;
}
#speed:checked ~ .scene-jumper {
--transition-speed: 2s;
}
.scene {
position: relative;
}
.optimus * {
position: absolute;
}
/* Remember: The core is based on 3.5 x 6 so percentages can base off that. */
.optimus__core {
width: calc(var(--size) * 1vmin);
aspect-ratio: 3 / 1;
translate: -50% -50%;
}
.core {
height: 100%;
width: 100%;
}
.optimus__torso {
width: 100%;
height: 400%;
bottom: 50%;
}
.optimus__grill {
--color: var(--grey-1);
width: 100%;
bottom: 100%;
height: var(--grill-height);
--depth: calc(var(--torso-depth) * 1);
}
.optimus__grill .cuboid {
/* transform: translate3d(0, 0, calc(var(--torso-depth) * 0.1vmin));*/
}
.optimus__grill .cuboid__side:nth-of-type(6),
.optimus__grill .cuboid__side:nth-of-type(5) {
background: repeating-linear-gradient(var(--grey-1) 0 10%, var(--grey-5) 15% 15%);
}
.optimus__top {
width: var(--cab-width);
height: var(--cab-height);
bottom: 100%;
left: 50%;
translate: -50% 0;
}
@keyframes breathe {
50% {
transform: translateY(-2%);
}
}
.reference-box {
height: 100%;
width: 100%;
--depth: var(--torso-depth);
--color: hsl(0 100% 50% / 0.25);
}
.reference-box .cuboid__side {
border: 1px solid white;
}
.exhaust {
height: 200%;
bottom: 10%;
width: calc(var(--fist-width) * 0.2);
--depth: calc(var(--fist-dimension) * 0.2);
--color: var(--grey-3);
}
.arm--right .exhaust {
left: 100%;
}
.arm--left .exhaust {
right: 100%;
}
.chest {
height: 100%;
width: 100%;
transform: translate3d(0, 0, calc(var(--torso-depth) * 0.1vmin));
--depth: var(--chest-depth);
--color: var(--red-1);
}
.chest > .cuboid > .cuboid__side:nth-of-type(1) {
--h-stop-one: calc(50% - (var(--fist-width) * 0.5));
--h-stop-two: calc(50% + (var(--fist-width) * 0.5));
--v-stop-one: calc(var(--torso-depth) * 0.1vmin);
--v-stop-two: calc(100% - (var(--torso-depth) * 0.1vmin));
filter: none;
background:
linear-gradient(90deg, var(--red-1) 0 var(--h-stop-one), transparent var(--h-stop-one) var(--h-stop-two), var(--red-1) var(--h-stop-two)),
linear-gradient(var(--red-1) 0 var(--v-stop-one), transparent var(--v-stop-one) var(--v-stop-two), var(--red-1) var(--v-stop-two));
}
.chest > .cuboid > .cuboid__side:nth-of-type(2),
.chest > .cuboid > .cuboid__side:nth-of-type(4) {
background: linear-gradient(var(--red-1) 80%, var(--grey-1) 80%);
}
.chest > .cuboid > .cuboid__side:nth-of-type(2):after,
.chest > .cuboid > .cuboid__side:nth-of-type(4):after {
content: "";
height: 60%;
left: 4%;
top: 10%;
position: absolute;
background: var(--blue-5);
border: calc(var(--torso-depth) * 0.05vmin) solid var(--grey-3);
}
.logo {
width: 75%;
top: 50%;
left: 50%;
translate: -50% -50%;
opacity: 0.8;
}
.hood {
height: 20%;
width: 100%;
bottom: 0;
--depth: calc(var(--torso-depth) * 0.1);
--color: var(--grey-1);
transform: translate3d(0, 0, calc(var(--torso-depth) * 0.45vmin));
}
.cab {
height: 80%;
width: 100%;
top: 0;
--depth: calc(var(--torso-depth) * 0.1);
--color: var(--red-1);
transform: translate3d(0, 0, calc(var(--torso-depth) * 0.45vmin));
}
.cab-light {
height: 16%;
width: 20%;
bottom: 0%;
transform: translate3d(0, 0, calc(var(--torso-depth) * 0.05vmin));
--depth: calc(var(--torso-depth) * 0.1);
--color: var(--red-1);
}
.cab-light .cuboid__side:nth-of-type(3) {
background: radial-gradient(circle at 25% center, white 16%, transparent 16%),
radial-gradient(circle at 75% center, white 16%, transparent 16%),
var(--red-1);
}
.cab-light--left {
left: 10%;
}
.cab-light--right {
right: 10%;
}
.cab .cuboid .cuboid__side:nth-of-type(2),
.cab .cuboid__side:nth-of-type(4) {
filter: none !important;
}
.cab .cuboid__side:nth-of-type(2):after,
.cab .cuboid__side:nth-of-type(4):after {
content: "";
position: absolute;
height: 40%;
left: 50%;
width: 80%;
top: 26%;
background: var(--grey-2);
transform-origin: 0 50%;
transform: rotateY(-70deg);
}
.cab .cuboid__side:nth-of-type(4):after {
transform: rotateY(70deg);
}
.cab .cuboid__side:nth-of-type(5):after,
.cab .cuboid__side:nth-of-type(5):before {
position: absolute;
content: "";
width: 40%;
height: 70%;
top: 50%;
translate: 0 -50%;
background: var(--blue-5);
border: calc(var(--cab-height) * 0.05) solid var(--grey-1);
}
.cab .cuboid__side:nth-of-type(5):after {
left: 55%;
}
.cab .cuboid__side:nth-of-type(5):before {
background: linear-gradient(-40deg, transparent 0 50%, hsl(0 0% 100% / 0.75) 50% 70%, transparent 70% 80%, hsl(0 0% 100% / 0.75) 80% 90%, transparent 90%), var(--blue-5);
right: 55%;
}
.cab .cuboid__side:nth-of-type(6) {
display: none;
}
.optimus__spine {
height: 100%;
width: calc(100% - (2 * var(--fist-width)));
left: 50%;
translate: -50% 0;
transform: translate3d(0, 0, calc(var(--torso-depth) * -0.35vmin));
--depth: calc(var(--torso-depth) * 0.3);
--color: var(--red-2);
}
.optimus__head {
width: var(--fist-width);
height: var(--cab-height);
left: 50%;
translate: -50% 0;
top: 0;
}
.optimus__helmet {
height: 100%;
width: 100%;
}
.optimus__neck {
bottom: 0;
left: 50%;
height: 12%;
width: 50%;
translate: -50% 0;
--depth: calc(var(--head-depth) * 0.5);
--color: var(--grey-4);
}
.optimus__face {
bottom: 12%;
width: 60%;
height: 46%;
left: 50%;
translate: -50% 0;
--depth: calc(var(--head-depth) * 0.5);
--color: var(--grey-5);
}
.optimus__face .cuboid__side:nth-of-type(5):after {
content: "";
height: 14%;
left: 50%;
translate: -50% -50%;
background: linear-gradient(90deg, var(--eye-blue) 0 40%, transparent 20% 60%, var(--eye-blue) 60%);
top: 20%;
position: absolute;
width: 80%;
}
.optimus__mouth {
top: 58%;
width: 60%;
height: 32%;
left: 50%;
translate: -50% 0;
transform: translate3d(0, 0, calc(var(--head-depth) * 0.3vmin));
--depth: calc(var(--head-depth) * 0.2);
--color: var(--grey-2);
}
.optimus__mouth .cuboid__side:nth-of-type(5) {
background: linear-gradient(-90deg, var(--grey-2) 50%, var(--grey-4) 50.5%);
}
.optimus__ear {
height: 80%;
top: 1%;
width: 10%;
--depth: calc(var(--head-depth) * 0.2);
--color: var(--blue-4);
}
.optimus__ear--left {
left: 0%;
}
.optimus__ear--right {
right: 0%;
}
.optimus__mohawk {
width: 25%;
height: 25%;
left: 50%;
translate: -50% 0;
bottom: 58%;
--depth: calc(var(--head-depth) * 1);
--color: var(--blue-2);
}
.optimus__helmet-side-guard {
width: 100%;
height: 100%;
transform: translate3d(0, 0, calc(var(--head-depth) * -0.15vmin));
--depth: calc(var(--head-depth) * 0.6);
--color: var(--blue-3);
}
.optimus__helmet-mouth-guard {
width: 100%;
bottom: 0;
height: 50%;
--depth: calc(var(--head-depth) * 1);
--color: var(--blue-4);
}
.optimus__helmet-back {
width: 70%;
bottom: 12%;
height: 58%;
left: 50%;
translate: -50% 0;
transform: translate3d(0, 0, calc(var(--head-depth) * -0.36vmin));
--depth: calc(var(--head-depth) * 0.2);
--color: var(--blue-3);
}
.optimus__helmet-top {
height: 12%;
width: 70%;
left: 50%;
translate: -50% 0;
bottom: 58%;
--depth: calc(var(--head-depth) * 0.8);
--color: var(--blue-1);
}
.optimus__helmet-side {
bottom: 12%;
width: 10%;
height: 50%;
}
.optimus__helmet-side--left {
left: 10%;
}
.optimus__helmet-side--right {
right: 10%;
}
.optimus__head {
--head-depth: calc(var(--torso-depth) * 0.4);
}
.optimus__head .reference-box {
--depth: calc(var(--torso-depth) * 0.4);
}
/* Arms are interesting, gotta be rotate off of a spindle etc. */
.arms {
height: 100%;
width: 100%;
transform: translate3d(0, 0, calc(var(--torso-depth) * 0.1vmin));
}
.arm {
height: 20%;
width: var(--fist-width);
top: calc(var(--fist-width) * 0.5);
}
.arm-bar {
position: absolute;
left: 0;
height: 100%;
width: 100%;
}
.arm-cube {
height: 100%;
width: 100%;
--depth: calc(var(--torso-depth) * 0.1);
--color: var(--grey-4);
}
.arm--right .arm-bar {
left: 0;
}
.arm--left .arm-bar {
right: 0;
}
.shoulder-port {
width: var(--fist-width);
aspect-ratio: 1;
top: 50%;
/* translate: calc(var(--torso-depth) * -0.1vmin) -50%;*/
transform-origin: 0 50%;
}
.shoulder-gesture {
height: 100%;
width: 100%;
}
.arm--right .shoulder-port {
left: 100%;
}
.arm--left .shoulder-port {
right: 100%;
}
.shoulder {
height: 100%;
width: 100%;
--depth: var(--fist-dimension);
--color: var(--red-1);
}
.bicep {
width: 100%;
height: calc(var(--cab-height) + var(--grill-height));
top: 0%;
left: 50%;
translate: -50% 0;
}
.bicep__strut {
--depth: calc(var(--fist-dimension) * 0.4);
--color: var(--grey-2);
width: 40%;
height: calc(100% - (var(--fist-width) * 0.6));
left: 50%;
top: calc(var(--fist-width) * 0.2);
translate: -50% 0;
}
.arm--right .forearm {
right: 0;
}
.arm--left .forearm {
left: 0;
}
.forearm {
height: calc(var(--grill-height) * 1);
bottom: 0;
width: calc((var(--torso-depth) * 0.7vmin) + var(--fist-width));
}
:is(.forearm-cradle, .forearm-gesture) {
height: 100%;
width: 100%;
}
.forearm-cap {
width: 18%;
height: 100%;
left: 62%;
--depth: calc(var(--fist-dimension) * 0.75);
--color: var(--red-5);
}
.forearm-shell {
width: 90%;
height: 100%;
right: 0;
z-index: 2;
--color: var(--red-1);
--depth: var(--fist-dimension);
}
.forearm-shell .cuboid__side:nth-of-type(4) {
display: none;
}
.forearm-shell .cuboid__side:nth-of-type(3) {
mask: linear-gradient(90deg, white 10%, transparent 10% 58%, white 58%);
}
.forearm-shell .cuboid__side:nth-of-type(6),
.forearm-shell .cuboid__side:nth-of-type(5) {
clip-path: polygon(0 0, 0% 100%, 12% 100%, 16% 55%, 54% 55%, 58% 100%, 100% 100%, 100% 0);
}
.forearm-shell .cuboid__side:nth-of-type(6) {
--b: 0.7;
clip-path: polygon(100% 0, 100% 100%, 88% 100%, 84% 55%, 46% 55%, 42% 100%, 0% 100%, 0 0);
}
.forearm-strut {
width: 70%;
height: calc(var(--fist-width) * 0.32);
right: calc(var(--fist-width) * 0.5);
top: 50%;
translate: 0 -50%;
--depth: calc(var(--fist-dimension) * 0.32);
--color: var(--grey-3);
}
.fist {
height: 100%;
left: 10%;
width: 10%;
top: 0%;
transform-origin: 0 50%;
--depth: var(--fist-dimension);
--color: var(--red-2);
}
.fist > .cuboid > .cuboid__side:nth-of-type(3) {
--b: 1.1;
background: var(--red-1);
}
.fist > .cuboid > .cuboid__side:nth-of-type(2):after {
content: "";
position: absolute;
height: 30%;
width: 60%;
top: 50%;
left: 50%;
translate: -50% -50%;
border: calc(var(--cab-height) * 0.05) solid var(--grey-1);
}
.hand {
top: 50%;
left: 50%;
width: 50%;
aspect-ratio: 1;
translate: -50% -50%;
rotate: -20deg;
transform: translate3d(0, 0, calc(var(--fist-dimension) * -0.25vmin));
--depth: calc(var(--fist-dimension) * 0.5);
--color: var(--blue-5);
}
.arm--left .hand {
rotate: 20deg;
}
/* Lower half things */
.core--lower {
width: var(--cab-width);
height: 100%;
translate: -50% 0;
left: 50%;
}
/*2.5x8*/
.optimus__hips {
width: 100%;
height: 100%;
}
.hip {
position: absolute;
width: var(--fist-width);
aspect-ratio: 1;
bottom: 50%;
}
.optimus__axle {
height: 100%;
width: calc(100% - (var(--size) * 0.4vmin));
background: yellow;
left: 50%;
translate: -50% 0;
--depth: var(--core-height);
--color: var(--grey-4);
}
.hip__grill {
height: calc(var(--core-height) * 1vmin);
width: 100%;
transform: translate3d(0, 0, calc(var(--core-height) * 0.5vmin));
top: 0;
--depth: calc(var(--core-height) * 2);
--color: var(--grey-4);
}
.hip__grill .cuboid__side:nth-of-type(1):after {
content: "";
height: 25%;
width: 25%;
background: var(--orange);
position: absolute;
top: 50%;
translate: 0 -50%;
}
.hip--left .hip__grill .cuboid__side:nth-of-type(1):after {
left: 10%;
}
.hip--right .hip__grill .cuboid__side:nth-of-type(1):after {
right: 10%;
}
.hip__flexor {
top: calc(var(--core-height) * 1vmin);
height: calc(var(--core-height) * 0.9vmin);
transform: translate3d(0, 0, calc(var(--core-height) * 0.5vmin));
width: 100%;
--depth: calc(var(--core-height) * 2);
--color: var(--red-4);
}
.hip__flexor .cuboid__side:nth-of-type(2),
.hip__flexor .cuboid__side:nth-of-type(4) {
background: var(--grey-4);
}
.hip__flexor-low {
top: calc(var(--core-height) * 1vmin);
width: 60%;
bottom: 0;
--depth: var(--core-height);
--color: var(--red-4);
}
.hip--right .hip__flexor-low {
left: 0;
}
.hip--left .hip__flexor-low {
right: 0;
}
/*.hip--right .hip__flexor .cuboid__side:nth-of-type(2) {
background: linear-gradient(var(--red-4) 0 30%, transparent 30%);
}
.hip--right .hip__flexor .cuboid__side:nth-of-type(5) {
clip-path: polygon(0 0, 100% 0%, 100% 20%, 60% 100%, 0% 100%);
}*/
.hip--right {
right: 0;
}
.hip--left {
left: 0;
}
.holster-wheel {
width: calc(var(--size) * 1.25vmin);
aspect-ratio: 1;
top: calc(var(--core-height) * 0.5vmin);
transform: translateY(0%) rotateY(90deg);
--depth: var(--wheel-depth);
}
.holster-wheel--rear-one {
top: 40%;
}
.holster-wheel--rear-two {
top: 75%;
}
.wheel {
transform: translate3d(0, 0, calc(var(--depth) * 0.5vmin));
height: 100%;
width: 100%;
}
.leg__bottom .holster-wheel--left .wheel {
transform: translate3d(0, 0, calc(var(--depth) * 1vmin));
}
.leg__bottom .holster-wheel--right .wheel {
transform: translate3d(0, 0, calc(var(--depth) * -0vmin));
}
.wheel__side {
height: 100%;
width: 100%;
background: black;
border-radius: 50%;
transform: translate3d(0, 0, calc((var(--depth) * -0.1vmin) * var(--index)));
}
.wheel:before,
.wheel:after {
content: "";
position: absolute;
inset: 0;
border-radius: 50%;
background:
radial-gradient(circle at center, var(--grey-1) 30%, transparent 30.5%),
radial-gradient(circle at center, silver 40%, black 40.5%) black;
}
.wheel:before {
transform: translate3d(0, 0, calc(var(--depth) * -1vmin));
}
.holster-wheel--right {
left: 0;
translate: -50% -50%;
}
.holster-wheel--left {
right: 0;
translate: 50% -50%;
}
.optimus__leg {
transform-origin: 50% 0;
height: calc(var(--leg-height) * 1vmin);
width: 50%;
}
.optimus__leg--left {
left: 0;
}
.optimus__leg--right {
right: 0;
}
/* Upper half things */
.optimus__grill-hinge {
width: calc(var(--size) * 1vmin);
height: 100%;
translate: -50% 0;
transform-origin: 50% 50%;
left: 50%;
}
.optimus__plate {
width: 100%;
height: 200%;
transform: translate3d(0, 0, calc((var(--torso-depth) * 0.45vmin) - (var(--core-height) * 0.5vmin))) rotateX(0deg);
--depth: calc(var(--core-height) * 2);
--color: var(--grey-1);
}
.optimus__plate .cuboid__side:nth-of-type(5):after {
content: "JH3YY";
font-family: monospace;
font-weight: bold;
padding: calc(var(--core-height) * 0.2vmin);
background: var(--blue-5);
font-size: calc(var(--size) * 0.25vmin);
color: var(--orange);
position: absolute;
top: 50%;
left: 50%;
translate: -50% -50%;
}
.tank {
height: 24%;
width: calc(var(--wheel-depth) * 1vmin);
top: 0;
translate: 0 -25%;
--depth: calc(var(--wheel-depth) * 1);
--color: var(--grey-4);
}
.tank .cuboid__side:nth-of-type(2),
.tank .cuboid__side:nth-of-type(4) {
background: repeating-linear-gradient(90deg, var(--grey-3) 0 15%, var(--grey-5) 15% 20%);
}
.optimus__leg--left .tank {
right: 100%;
}
.optimus__leg--right .tank {
left: 100%;
}
.boot {
width: 100%;
height: 16%;
bottom: 0;
left: 50%;
translate: -50% 0;
--depth: calc(var(--size) * 1);
--color: var(--blue-5);
}
.foot {
height: 100%;
width: 100%;
transform: translate3d(0, 0, calc(var(--size) * -0.5vmin));
}
.optimus__belt {
width: calc(100% - (var(--wheel-depth) * 1.5vmin));
height: 260%;
left: 50%;
translate: -50% 0;
transform: translate3d(0, 0, calc(var(--size) * -0.5vmin));
--depth: calc(var(--size) * 1);
--color: var(--grey-4);
}
.belt__segments {
height: 100%;
width: 100%;
display: grid;
grid-template: 1fr 1fr / 1fr 2fr 1fr;
gap: calc(var(--core-height) * 0.25vmin);
padding: calc(var(--core-height) * 0.5vmin);
}
.belt__segment {
position: static;
background: var(--orange);
width: 100%;
height: 100%;
max-width: 100%;
}
.belt__segment:nth-of-type(2) {
grid-row: span 2;
}
.belt__segment:nth-of-type(4) {
clip-path: polygon(0 0, 100% 0, 100% 100%, 0 40%);
}
.belt__segment:nth-of-type(5) {
clip-path: polygon(0 0, 100% 0, 100% 40%, 0 100%);
}
/*.optimus__leg--right .foot {
translate: calc(-50% - (var(--wheel-depth) * -0.25vmin)) 0;
}
.optimus__leg--left .foot {
translate: calc(-50% - (var(--wheel-depth) * 0.25vmin)) 0;
}*/
.wheel-arch {
height: 75%;
width: 100%;
top: 20%;
transform: translate3d(0, 0, calc(var(--size) * -0.65vmin));
--color: var(--blue-5);
--depth: calc(var(--size) * 0.5);
}
.wheel-arch .cuboid__side:nth-of-type(5) {
display: none;
}
.optimus__leg--right .wheel-arch .cuboid__side:nth-of-type(2),
.optimus__leg--left .wheel-arch .cuboid__side:nth-of-type(4) {
background:
linear-gradient(270deg, var(--blue-5) 45%, transparent 20%),
linear-gradient(var(--blue-5) 5%, transparent 5% 95%, var(--blue-5) 95%);
}
.optimus__leg--right .wheel-arch .cuboid__side:nth-of-type(6):after,
.optimus__leg--left .wheel-arch .cuboid__side:nth-of-type(6):after {
content: "";
width: 40%;
height: 70%;
background:
repeating-linear-gradient(var(--grey-4) 0 2%, var(--grey-1) 2% 10%),
var(--grey-1);
position: absolute;
top: 50%;
left: 50%;
translate: -50% -60%;
}
.optimus__leg--left .wheel-arch {
translate: calc(var(--wheel-depth) * -0.5vmin) 0;
left: 0;
}
.optimus__leg--right .wheel-arch {
translate: calc(var(--wheel-depth) * 0.5vmin) 0;
right: 0;
}
.leg__top {
width: calc(100% - (var(--wheel-depth) * 2vmin));
width: calc(var(--size) * 0.9vmin);
height: 40%;
left: 50%;
translate: -50% 0;
--depth: calc(var(--size) * 0.9);
--color: var(--grey-2);
}
.leg__bottom {
top: 40%;
width: calc(100% - (var(--wheel-depth) * 1vmin));
height: 60%;
left: 50%;
translate: -50% 0;
--depth: calc(var(--size) * 1.1);
--color: var(--blue-4);
}
.sock {
height: 100%;
width: 100%;
}
/* Cuboid boilerplate code */
.cuboid {
width: 100%;
height: 100%;
position: relative;
}
.cuboid__side--no-filter {
filter: none !important;
}
.cuboid__side {
background: var(--color);
filter: brightness(var(--b, 1));
position: absolute;
}
.cuboid__side:nth-of-type(1) {
--b: 1.1;
height: calc(var(--depth, 20) * 1vmin);
width: 100%;
top: 0;
transform: translate(0, -50%) rotateX(90deg);
}
.cuboid__side:nth-of-type(2) {
--b: 0.9;
height: 100%;
width: calc(var(--depth, 20) * 1vmin);
top: 50%;
right: 0;
transform: translate(50%, -50%) rotateY(90deg);
}
.cuboid__side:nth-of-type(3) {
--b: 0.5;
width: 100%;
height: calc(var(--depth, 20) * 1vmin);
bottom: 0;
transform: translate(0%, 50%) rotateX(90deg);
}
.cuboid__side:nth-of-type(4) {
--b: 1;
height: 100%;
width: calc(var(--depth, 20) * 1vmin);
left: 0;
top: 50%;
transform: translate(-50%, -50%) rotateY(90deg);
}
.cuboid__side:nth-of-type(5) {
--b: 0.8;
height: 100%;
width: 100%;
transform: translate3d(0, 0, calc(var(--depth, 20) * 0.5vmin));
top: 0;
left: 0;
}
.cuboid__side:nth-of-type(6) {
--b: 1.2;
height: 100%;
width: 100%;
transform: translate3d(0, 0, calc(var(--depth, 20) * -0.5vmin)) rotateY(180deg);
top: 0;
left: 0;
}
/* START MOVING PARTS */
.optimus__head-door {
background: var(--red-1);
height: calc(var(--torso-depth) * 0.42vmin);
width: 102%;
transform-origin: 50% 0;
transform: rotateX(90deg) translateY(calc(var(--torso-depth) * -0.1vmin));
}
.optimus__head-base {
height: calc(var(--torso-depth) * 0.4vmin);
width: 100%;
background: var(--red-5);
transform-origin: 50% 100%;
transform: rotateX(90deg) translateY(50%);
bottom: 0;
}
/*.arm {
transform: rotateY(calc(var(--optimus-arm, 0) * 90deg));
}*/
.arm--right {
translate: 50% -50%;
right: 0;
transform-origin: 0 50%;
}
.arm--left {
left: 0;
transform-origin: 100% 50%;
translate: -50% -50%;
}
.arm--right {
--arm-destination: 90deg;
--arm-tilt: 89deg;
--shoulder-multiplier: -0.1vmin;
--bar-multiplier: -0.1;
}
.arm--left {
/* --forearm-start: -180deg;*/
--arm-destination: -90deg;
--arm-tilt: -89deg;
--shoulder-multiplier: 0.1vmin;
--bar-multiplier: 0.1;
}
.arm--right .forearm {
transform-origin: calc(100% - (var(--fist-width) * 0.5)) 50%;
}
.arm--left .forearm {
transform-origin: calc(var(--fist-width) * 0.5) 50%;
}
.forearm-flip {
height: 100%;
width: 100%;
transform: rotateY(180deg);
}
.bracket {
width: 25%;
rotate: 90deg;
top: 50%;
left: 50%;
translate: -100% -50%;
opacity: 0.8;
}
.arm--right :is(.forearm-cradle, .forearm-gesture) {
transform-origin: calc(100% - (var(--fist-width) * 0.5)) 50%;
}
.arm--left :is(.forearm-cradle, .forearm-gesture) {
transform-origin: calc(var(--fist-width) * 0.5) 50%;
}
/* Window sizing */
:root {
--transform: 1;
}
:root:has(#transform:checked) {
--transform: 0;
}
#transform:checked ~ .scene-jumper {
--transform: 0;
}
/* END ARM MOVING PARTS */
/* Transition stuff... */
/* List of things that are moving */
/**
* 1. .boot
* 2. .chest .cuboid__side:nth-of-type(2,4):after === Windows
* 3. .forearm-shell === slight rotation for face on view...?
* 4. .forearm-shell .cuboid__side:nth-of-type(2) === Forearm shell arm clipping BACK CAP
* 5. .forearm-shell .cuboid__side:nth-of-type(1) === Forearm shell arm clipping TOP ELBOW SLOT
* 6. .forearm-cradle === ARM TURNING DOWN AT THE ELBOW
* 7. .forearm === ARM TURNING OUT AT THE ELBOW
* 8. .arm === Turning the arms back into the cab
* 9. .arm-bar === Moving the bar on a translation and tucking it in
* 10. .fist === Spinning the fist around
* 11. .core-upper === Hip tilt
* 12. grill__hinge === Hip tilt
* 13. .optimus__helmet === Head popping up. Make sure to transition trapdoor as well for this
* 14. .core-lower === Hip spin */
/**/
:root {
--transition-speed: 0.35s;
}
.scene--optimus {
transform:
translate3d(0, calc(((1 - var(--transform)) * (var(--leg-height)) * 0.45) * -1vmin), 200vmin)
rotateX(calc(var(--optimus-rotation-y, 0) * 1deg))
rotateY(calc(var(--optimus-rotation-x, 0) * 1deg))
rotateX(calc(var(--transform, 0) * -90deg))
scale(var(--optimus-scale, 1))
scaleZ(var(--optimus-scale, 1));
}
.core--lower {
transform: rotateY(calc((1 - var(--transform)) * -180deg));
}
.fist > .cuboid > .cuboid__side:nth-of-type(2):after {
background: hsl(0 0% calc(((80 + (var(--transform) * 20)) * 1%)));
}
.boot {
transform: translate3d(0, 0, calc(var(--size) * -0.5vmin)) rotateX(calc(var(--transform) * 120deg));
}
.chest .cuboid__side:nth-of-type(2):after,
.chest .cuboid__side:nth-of-type(4):after {
width: calc(30% + (var(--transform) * 20%));
}
.forearm-cradle {
transform: rotate(calc((1 - var(--transform, 0)) * (var(--arm-destination) * -1)));
}
/*.arm--left .forearm-gesture {
rotate: -60deg;
}
.arm--right .forearm-gesture {
rotate: 60deg;
}*/
.forearm-shell .cuboid__side:nth-of-type(2) {
clip-path: inset(calc((1 - var(--transform, 0)) * 100%) 0 0 0);
}
.forearm-shell .cuboid__side:nth-of-type(1) {
--b: 0.9;
clip-path: inset(0 calc((1 - var(--transform)) * 25%) 0 0);
}
.fist {
rotate: calc(var(--transform) * -180deg);
}
.shoulder-port {
translate: calc((var(--torso-depth) * (var(--transform, 0) * var(--bar-multiplier))) * 1vmin) -50%;
}
.arm {
transform: rotateY(calc(var(--transform) * var(--arm-destination)));
}
.arm-bar {
translate: calc((var(--torso-depth) * (var(--transform) * var(--bar-multiplier))) * 1vmin);
}
.forearm {
transform: rotateY(calc((1 - var(--transform, 0)) * (var(--arm-tilt))));
}
.optimus__head-door {
clip-path: inset(0 0 calc((1 - var(--transform, 0)) * 100%) 0);
}
.optimus__helmet {
transform: translate3d(0, 0, calc(var(--torso-depth) * 0.1vmin)) translateY(calc((1 - var(--transform, 0)) * -100%));
}
.optimus__head-twist {
height: 100%;
width: 100%;
transform: rotateY(calc((1 - var(--transform)) * 25deg));
}
.core--upper {
transform-origin: 50% 50%;
transform: rotateX(calc(var(--transform) * 90deg));
}
.arm--right .forearm-gesture {
rotate: calc((1 - var(--transform)) * 70deg);
}
.arm--right .shoulder-gesture {
transform: rotateX(calc((1 - var(--transform)) * 20deg)) rotateY(calc((1 - var(--transform)) * 20deg)) rotate(calc((1 - var(--transform)) * -10deg));
}
.arm--right .hand {
rotate: calc(-20deg + ((1 - var(--transform)) * -80deg)) ;
}
.arm--left .shoulder-gesture {
transform: rotateX(calc((1 - var(--transform)) * 10deg)) rotateY(calc((1 - var(--transform)) * -20deg)) rotate(calc((1 - var(--transform)) * 16deg));
}
.arm--left .forearm-gesture {
rotate: calc((1 - var(--transform)) * -20deg);
}
.hand__fist {
height: 100%;
width: 100%;
}
.hand__fingers {
width: 150%;
height: 25%;
background: orange;
left: 50%;
translate: -50% 50%;
--depth: calc(var(--fist-dimension) * 0.25);
}
.optimus__grill-hinge {
transform: rotateX(calc(var(--transform) * 90deg));
}
/* Plan out the desired order and choreography on #transform:checked here */
:root:has(#transform:checked) :is(.scene-roller) {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 0);
}
#transform:checked ~ .scene-jumper :is(.scene-roller) {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 0);
}
#transform:checked ~ .scene-jumper .fist > .cuboid > .cuboid__side:nth-of-type(2):after {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 1),
clip-path var(--transition-speed) calc(var(--transition-speed) * 1),
rotate var(--transition-speed) calc(var(--transition-speed) * 1),
translate var(--transition-speed) calc(var(--transition-speed) * 1);
}
:root:has(#transform:checked) .fist > .cuboid > .cuboid__side:nth-of-type(2):after {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 1),
clip-path var(--transition-speed) calc(var(--transition-speed) * 1),
rotate var(--transition-speed) calc(var(--transition-speed) * 1),
translate var(--transition-speed) calc(var(--transition-speed) * 1);
}
:root:has(#transform:checked) :is(.arm-bar, .forearm) {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 1),
clip-path var(--transition-speed) calc(var(--transition-speed) * 1),
rotate var(--transition-speed) calc(var(--transition-speed) * 1),
translate var(--transition-speed) calc(var(--transition-speed) * 1);
}
#transform:checked ~ .scene-jumper :is(.arm-bar, .forearm) {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 1),
clip-path var(--transition-speed) calc(var(--transition-speed) * 1),
rotate var(--transition-speed) calc(var(--transition-speed) * 1),
translate var(--transition-speed) calc(var(--transition-speed) * 1);
}
#transform:checked ~ .scene-jumper .chest .cuboid__side:nth-of-type(2):after,
#transform:checked ~ .scene-jumper .chest .cuboid__side:nth-of-type(4):after {
transition:
width var(--transition-speed) calc(var(--transition-speed) * 1.5);
}
:root:has(#transform:checked) .chest .cuboid__side:nth-of-type(2):after,
:root:has(#transform:checked) .chest .cuboid__side:nth-of-type(4):after {
transition:
width var(--transition-speed) calc(var(--transition-speed) * 1.5);
}
:root:has(#transform:checked) :is(.arm, .shoulder-port, .optimus__head-door, .fist, .forearm-shell .cuboid__side:nth-of-type(1), .forearm-shell .cuboid__side:nth-of-type(2), .boot) {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 1.5),
clip-path var(--transition-speed) calc(var(--transition-speed) * 1.5),
rotate var(--transition-speed) calc(var(--transition-speed) * 1.5),
translate var(--transition-speed) calc(var(--transition-speed) * 1.5);
}
#transform:checked ~ .scene-jumper :is(.arm, .shoulder-port, .optimus__head-door, .fist, .forearm-shell .cuboid__side:nth-of-type(1), .forearm-shell .cuboid__side:nth-of-type(2), .boot) {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 1.5),
clip-path var(--transition-speed) calc(var(--transition-speed) * 1.5),
rotate var(--transition-speed) calc(var(--transition-speed) * 1.5),
translate var(--transition-speed) calc(var(--transition-speed) * 1.5);
}
:root:has(#transform:checked) :is(.optimus__helmet, .optimus__grill-hinge, .core--upper) {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 2),
clip-path var(--transition-speed) calc(var(--transition-speed) * 2),
rotate var(--transition-speed) calc(var(--transition-speed) * 2),
translate var(--transition-speed) calc(var(--transition-speed) * 2);
}
#transform:checked ~ .scene-jumper :is(.optimus__helmet, .optimus__grill-hinge, .core--upper) {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 2),
clip-path var(--transition-speed) calc(var(--transition-speed) * 2),
rotate var(--transition-speed) calc(var(--transition-speed) * 2),
translate var(--transition-speed) calc(var(--transition-speed) * 2);
}
:root:has(#transform:checked) :is(.forearm-cradle, .core--lower, .scene--optimus) {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 2.5),
clip-path var(--transition-speed) calc(var(--transition-speed) * 2.5),
rotate var(--transition-speed) calc(var(--transition-speed) * 2.5),
translate var(--transition-speed) calc(var(--transition-speed) * 2.5);
}
#transform:checked ~ .scene-jumper :is(.forearm-cradle, .core--lower, .scene--optimus) {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 2.5),
clip-path var(--transition-speed) calc(var(--transition-speed) * 2.5),
rotate var(--transition-speed) calc(var(--transition-speed) * 2.5),
translate var(--transition-speed) calc(var(--transition-speed) * 2.5);
}
/* Extras... */
:root:has(#transform:checked) :is(.arm--right .forearm-gesture, .arm--right .shoulder-gesture, .arm--left .shoulder-gesture, .arm--left .forearm-gesture, .arm--right .hand, .optimus__head-twist) {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 3.5),
clip-path var(--transition-speed) calc(var(--transition-speed) * 3.5),
rotate var(--transition-speed) calc(var(--transition-speed) * 3.5),
translate var(--transition-speed) calc(var(--transition-speed) * 3.5);
}
#transform:checked ~ .scene-jumper :is(.arm--right .forearm-gesture, .arm--right .shoulder-gesture, .arm--left .shoulder-gesture, .arm--left .forearm-gesture, .arm--right .hand, .optimus__head-twist) {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 3.5),
clip-path var(--transition-speed) calc(var(--transition-speed) * 3.5),
rotate var(--transition-speed) calc(var(--transition-speed) * 3.5),
translate var(--transition-speed) calc(var(--transition-speed) * 3.5);
}
/* Back to being a transformer */
:is(.forearm-cradle, .core--lower, .scene--optimus, .arm--right .forearm-gesture, .arm--right .shoulder-gesture, .arm--right .hand, .arm--left .shoulder-gesture, .arm--left .forearm-gesture, .optimus__head-twist) {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 0),
clip-path var(--transition-speed) calc(var(--transition-speed) * 0),
rotate var(--transition-speed) calc(var(--transition-speed) * 0),
translate var(--transition-speed) calc(var(--transition-speed) * 0);
}
:is(.optimus__helmet, .optimus__grill-hinge, .core--upper) {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 1),
clip-path var(--transition-speed) calc(var(--transition-speed) * 1),
rotate var(--transition-speed) calc(var(--transition-speed) * 1),
translate var(--transition-speed) calc(var(--transition-speed) * 1);
}
.chest .cuboid__side:nth-of-type(2):after,
.chest .cuboid__side:nth-of-type(4):after {
transition:
width var(--transition-speed) calc(var(--transition-speed) * 1.5);
}
:is(.arm, .shoulder-port, .optimus__head-door, .fist, .forearm-shell .cuboid__side:nth-of-type(1), .forearm-shell .cuboid__side:nth-of-type(2), .boot) {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 1.5),
clip-path var(--transition-speed) calc(var(--transition-speed) * 1.5),
rotate var(--transition-speed) calc(var(--transition-speed) * 1.5),
translate var(--transition-speed) calc(var(--transition-speed) * 1.5);
}
:is(.arm-bar, .forearm) {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 2),
clip-path var(--transition-speed) calc(var(--transition-speed) * 2),
rotate var(--transition-speed) calc(var(--transition-speed) * 2),
translate var(--transition-speed) calc(var(--transition-speed) * 2);
}
.fist > .cuboid > .cuboid__side:nth-of-type(2):after {
transition:
background var(--transition-speed) calc(var(--transition-speed) * 4),
transform var(--transition-speed) calc(var(--transition-speed) * 4),
clip-path var(--transition-speed) calc(var(--transition-speed) * 4),
rotate var(--transition-speed) calc(var(--transition-speed) * 4),
translate var(--transition-speed) calc(var(--transition-speed) * 4);
}
.scene-roller {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 4.5);
}
/*:root:has(#transform:checked) :is(.scene--optimus) {
transition:
transform var(--transition-speed) calc(var(--transition-speed) * 3),
clip-path var(--transition-speed) calc(var(--transition-speed) * 3),
rotate var(--transition-speed) calc(var(--transition-speed) * 3),
translate var(--transition-speed) calc(var(--transition-speed) * 3);
}*/
/* Hack to get the arms to show at rotation */
/*.arm--left .forearm-shell {
transform: rotateY(calc(1deg + ((1 - var(--transform)) * 1deg)));
}
.forearm-shell {
transform: rotateY(calc(-1deg + ((1 - var(--transform)) * 1deg)));
}*/
/* Random animations */
.scene-roller {
transform: translate3d(0, calc((var(--transform)) * (var(--leg-height) * -0.4vmin)), 0vmin);
}
:root:has(#transform:checked) .scene-jumper {
animation: jump var(--transition-speed) calc(var(--transition-speed) * 2.5);
}
#transform:checked ~ .scene-jumper {
animation: jump var(--transition-speed) calc(var(--transition-speed) * 2.5);
}
:root:has(#transform:checked) .arm--right .hand {
animation: ehhh 1s calc(var(--transition-speed) * 6) infinite linear;
}
#transform:checked ~ .scene-jumper .arm--right .hand {
animation: ehhh 1s calc(var(--transition-speed) * 6) infinite linear;
}
@keyframes ehhh {
50% { transform: rotateZ(-35deg); }
}
@keyframes jump {
50% {
transform: translateY(calc(var(--core-height) * -10vmin));
}
}
.optimus__mouth {
animation: mouth-breathe 3s infinite linear;
}
.optimus__face .cuboid__side:nth-of-type(5):after {
animation: blink 6s -2s infinite;
}
@keyframes mouth-breathe {
50% {
translate: -50% 5%;
}
}
@keyframes blink {
0%, 46%, 48%, 50%, 100% {
scale: 1 1;
}
47%, 49% {
scale: 1 0.01;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment