From d459097a7d760d71c88670d1a6eb70dc33de416f Mon Sep 17 00:00:00 2001 From: Dorian Date: Mon, 9 Mar 2026 09:15:37 +0000 Subject: [PATCH] feat: add WTF explainer modal on home page Co-Authored-By: Claude Opus 4.6 --- frontend/src/components/WTFModal.vue | 250 +++++++++++++++++++++++++++ frontend/src/pages/HomePage.vue | 29 +++- 2 files changed, 278 insertions(+), 1 deletion(-) create mode 100644 frontend/src/components/WTFModal.vue diff --git a/frontend/src/components/WTFModal.vue b/frontend/src/components/WTFModal.vue new file mode 100644 index 0000000..b2641ce --- /dev/null +++ b/frontend/src/components/WTFModal.vue @@ -0,0 +1,250 @@ + + + + + diff --git a/frontend/src/pages/HomePage.vue b/frontend/src/pages/HomePage.vue index 2e8e297..b964a7c 100644 --- a/frontend/src/pages/HomePage.vue +++ b/frontend/src/pages/HomePage.vue @@ -4,6 +4,7 @@ import { RouterLink } from 'vue-router' import PixelGlove from '../components/PixelGlove.vue' import SpritePreview from '../components/SpritePreview.vue' import HumanPreview from '../components/HumanPreview.vue' +import WTFModal from '../components/WTFModal.vue' interface FightResult { id: string @@ -231,6 +232,7 @@ const taglines = [ const tagline = ref('') const isTypingDone = ref(false) +const showWTF = ref(false) const recentFights = ref([]) function shuffle(arr: T[]): T[] { @@ -456,7 +458,7 @@ onUnmounted(() => { -
+
+ +
+

@@ -508,6 +523,9 @@ onUnmounted(() => {

+ + + @@ -557,4 +575,13 @@ onUnmounted(() => { 0%, 100% { opacity: 0.6; transform: scale(1); } 50% { opacity: 1; transform: scale(1.1); } } + +.wtf-glow { + animation: wtfPulse 2s ease-in-out infinite; +} + +@keyframes wtfPulse { + 0%, 100% { box-shadow: 0 0 8px rgba(168, 85, 247, 0.2); } + 50% { box-shadow: 0 0 20px rgba(168, 85, 247, 0.4), 0 0 40px rgba(168, 85, 247, 0.15); } +}