update uwu

This commit is contained in:
2026-01-27 18:42:35 -05:00
parent 8c6b18c8a0
commit 66d7305690
3 changed files with 165 additions and 54 deletions

View File

@@ -1,36 +0,0 @@
html, body, #__nuxt {
height: 100%;
margin: 0;
background: #0b0b0b;
overflow: hidden;
font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
}
.caramel-wrapper {
position: fixed;
inset: 0;
display: grid;
place-items: center;
pointer-events: none;
}
.caramel-stage {
background-color: black;
padding: 25px;
border-radius: 10%;
filter:
drop-shadow(0 0 40px rgba(255, 255, 255, 0.6))
drop-shadow(0 0 80px rgba(255, 255, 255, 0.08));
}
.caramel-video {
width: min(90vw, 90vh);
height: auto;
max-height: 90vh;
image-rendering: pixelated;
}
body {
background: #0b0b0b;
}

View File

@@ -11,16 +11,15 @@ html, body, #__nuxt {
inset: 0; inset: 0;
display: grid; display: grid;
place-items: center; place-items: center;
pointer-events: none;
} }
.caramel-stage { .caramel-stage {
background-color: black; background-color: black;
padding: 25px; padding: 5px;
border-radius: 10%; border-radius: 1.5rem;
filter: filter:
drop-shadow(0 0 40px rgba(255, 255, 255, 0.6)) drop-shadow(0 0 40px rgba(255, 255, 255, 0.1))
drop-shadow(0 0 80px rgba(255, 255, 255, 0.08)); drop-shadow(0 0 80px rgba(255, 255, 255, 0.01))
} }
.caramel-video { .caramel-video {
@@ -28,9 +27,89 @@ html, body, #__nuxt {
height: auto; height: auto;
max-height: 90vh; max-height: 90vh;
image-rendering: pixelated; image-rendering: pixelated;
border-radius: 1.5rem;
} }
body { body {
background: #0b0b0b; background: #0b0b0b;
} }
.audio-toggle {
position: absolute;
bottom: -1.8rem;
right: 0.2rem;
background: rgba(0, 0, 0, 0.6);
color: white;
border: none;
border-radius: 999px;
padding: 0.35rem 0.55rem;
font-size: 0.9rem;
cursor: pointer;
opacity: 0.55;
transition:
opacity 0.2s ease,
transform 0.2s ease,
background 0.2s ease;
}
.audio-toggle:hover {
opacity: 1;
transform: translateY(-2px);
background: rgba(0, 0, 0, 0.8);
}
.caramel-float-anchor {
position: relative;
display: inline-block;
}
.uwu-floating {
position: absolute;
font-size: 25em;
opacity: 0.6;
pointer-events: none;
user-select: none;
white-space: nowrap;
animation: floaty 5.2s cubic-bezier(0.42, 0, 0.58, 1) infinite;
text-shadow:
0 0 8px rgba(92, 92, 92, 0.7),
0 0 16px rgba(11, 11, 11, 0.7);
}
@keyframes floaty {
0%, 100% { transform: translate(0, 0); }
50% { transform: translate(0, -0.1em); }
}
.uwu-floating[data-pos="top"] {
top: -2.4rem;
left: 50%;
top: 75%;
transform: translateX(-50%);
rotate: 0.25turn;
}
.uwu-floating[data-pos="bottom"] {
top: 50%;
left: 50%;
margin-top: 0.4rem;
transform: translateX(-50%);
rotate: 0.25turn;
}
.uwu-floating[data-pos="left"] {
left: -2.6rem;
top: 50%;
transform: translateY(-50%);
}
.uwu-floating[data-pos="right"] {
left: 115%;
top: 0%;
margin-left: 0.6rem;
transform: translateY(-50%);
}

View File

@@ -1,16 +1,34 @@
<template> <template>
<div class="uwu-floating">
</div>
<div class="caramel-wrapper"> <div class="caramel-wrapper">
<div class="caramel-stage"> <div class="caramel-stage">
<video class="caramel-video" autoplay loop playsinline muted preload="auto"> <div class="caramel-float-anchor">
<video
ref="videoEl"
class="caramel-video"
autoplay
loop
muted
playsinline
preload="auto"
>
<source src="~/assets/caramelldansen.webm" type="video/webm" /> <source src="~/assets/caramelldansen.webm" type="video/webm" />
quick turn on video
</video> </video>
<button
class="audio-toggle"
@click="toggleAudio"
:aria-label="muted ? 'Unmute video' : 'Mute video'"
>
{{ muted ? '🔇' : '🔊' }}
</button>
<div
class="uwu-floating"
:data-pos="position"
>
:3
</div>
</div>
</div> </div>
</div> </div>
@@ -18,3 +36,53 @@
gimme.pet gimme.pet
</div> </div>
</template> </template>
<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount } from 'vue'
const videoEl = ref<HTMLVideoElement | null>(null)
const muted = ref(true)
function toggleAudio() {
if (!videoEl.value) return
muted.value = !muted.value
videoEl.value.muted = muted.value
if (!muted.value) {
videoEl.value.volume = 0.8
videoEl.value.play().catch(() => {})
}
}
const position = ref<'top' | 'bottom' | 'left' | 'right'>('top')
function updatePosition() {
const vw = window.innerWidth
const vh = window.innerHeight
// prioritize not colliding with short screens
if (vh < 520) {
position.value = 'bottom'
} else if (vw < 480) {
position.value = 'left'
} else if (vw > 1200) {
position.value = 'right'
} else {
position.value = 'top'
}
}
onMounted(() => {
if (videoEl.value) {
videoEl.value.muted = true
}
updatePosition()
window.addEventListener('resize', updatePosition)
})
onBeforeUnmount(() => {
window.removeEventListener('resize', updatePosition)
})
</script>