Welcome back
Sign in to your Den account
or continue with
HTML
<div class="mascot-wrapper">
<svg class="mascot-svg">
<!-- Ears, Head, Eyes -->
<g class="mascot-eyes">
<circle class="pupil"
cx="76" cy="91" r="7"/>
</g>
<!-- Paws over card edge -->
<g class="mascot-paws">...</g>
</svg>
</div>
<button class="btn-signin">
<div class="door-scene">
<div class="door-frame">
<div class="door-panel">
<span class="door-knob"></span>
</div>
</div>
<svg class="stickman">...</svg>
</div>
</button>
CSS
.door-scene {
perspective: 600px;
}
.door-panel {
transform-origin: left center;
transition: transform 0.8s
cubic-bezier(.4,0,.2,1);
}
.is-open .door-panel {
transform: rotateY(-72deg);
}
.is-open .door-glow {
opacity: 1;
background: radial-gradient(
#fffbe6, #fbbf24 70%
);
}
@keyframes walk {
0%,100% { rotate: -15deg; }
50% { rotate: 15deg; }
}
.is-walking .stick-leg-l,
.is-walking .stick-leg-r {
animation: walk 0.3s infinite
alternate;
}
JavaScript
document.addEventListener(
'mousemove', (e) => {
const rect =
mascot.getBoundingClientRect();
const dx = e.clientX - rect.x;
const dy = e.clientY - rect.y;
const angle = Math.atan2(dy, dx);
const dist = Math.min(
Math.hypot(dx, dy) / 80, 1
);
pupils.forEach(p => {
p.style.transform =
`translate(
${Math.cos(angle)*5*dist}px,
${Math.sin(angle)*5*dist}px
)`;
});
});
form.addEventListener('submit', () => {
btn.classList.add('is-open');
stickman.classList.add('is-walking');
mascot.classList.add('is-happy');
});