Files
evilspins/app/components/molecule/atropos.vue
valere 9438394db8
All checks were successful
Deploy App / deploy (push) Successful in 30s
animations + cards
2025-09-30 01:10:12 +02:00

126 lines
2.9 KiB
Vue

<template>
<div class="w-96 m-6">
<atropos-component class="atropos game-box atropos-rotate-touch-scroll-y" rotate-touch="scroll-y" rotate-x-max="24"
rotate-y-max="24">
<div class="atropos-inner relative">
<div class="game-box-bg bg-gradient-to-t from-slate-800 to-zinc-900 h-96 relative" data-atropos-offset="-8" />
<img :src="id + '/object.png'" data-atropos-offset="-3" class="absolute bottom-0 inset-0 h-96 object-cover">
<img :src="id + '/name.png'" data-atropos-offset="0" class="absolute inset-0 self-end justify-self-end p-4">
<img src="/logo.svg" data-atropos-offset="0" width="70%"
class="logo absolute inset-0 self-center justify-self-center">
<!-- <img src="/play.svg" width="20%" class="absolute play"> -->
</div>
<span class="game-box-t" />
<span class="game-box-r" />
<span class="game-box-b" />
<span class="game-box-l" />
</atropos-component>
</div>
</template>
<script setup>
const id = 'ES01A'
</script>
<style>
.game-box .logo {
filter: drop-shadow(4px 4px 0 rgb(0 0 0 / 0.8));
}
.game-box {
--side-color: #004297;
--side-size: 32px;
aspect-ratio: 526 / 656;
}
.atropos-rotate {
position: relative;
}
.game-box .atropos-rotate:before {
content: "";
position: absolute;
left: 0;
width: calc(100% + 8px);
height: calc(100% + 16px);
top: -8px;
background: #086ef4;
z-index: 1;
}
.atropos-inner {
width: 100%;
height: 100%;
overflow: hidden;
transform-style: preserve-3d;
transform: translateZ(0);
display: block;
z-index: 1;
position: relative;
}
.game-box-t,
.game-box-r,
.game-box-b,
.game-box-l {
transform-style: preserve-3d;
backface-visibility: hidden;
position: absolute;
/* display: none; */
}
.game-box-t {
width: calc(100% + 8px);
height: var(--side-size);
background: var(--side-color);
left: 0;
top: -8px;
transform: translate3d(0, 0, -32px) rotateX(90deg);
transform-origin: center top;
top: -8px;
transform: translateZ(-32px) rotateX(90deg);
transform-origin: center top;
}
.game-box-b {
width: calc(100% + 8px);
height: var(--side-size);
background: var(--side-color);
left: 0;
bottom: -8px;
transform: translate3d(0, 0, -32px) rotateX(-90deg);
transform-origin: center bottom;
}
.game-box-r {
width: var(--side-size);
height: calc(100% + 16px);
background: var(--side-color);
right: -8px;
top: -8px;
transform: translate3d(0, 0, -32px) rotateY(90deg);
transform-origin: right center;
}
.game-box-l {
width: var(--side-size);
height: calc(100% + 16px);
background: var(--side-color);
left: 0px;
top: -8px;
transform: translate3d(0, 0, -32px) rotateY(-90deg);
transform-origin: left center;
overflow: hidden;
&::before {
content: '';
position: absolute;
width: 100%;
height: 10.4%;
background: #a5a5a5;
left: 0;
top: 9px;
}
}
</style>