0% found this document useful (0 votes)
10 views36 pages

Possessive Adjective Adventure Guide

This document is an HTML template for an educational web application titled 'Possessive Adjective Adventure' aimed at 7th-grade students. It includes various styling elements using Tailwind CSS, animations, and interactive components for a memory game and other activities. The design incorporates a vibrant color scheme and user-friendly interface elements to enhance the learning experience.

Uploaded by

Ismia Agustina
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views36 pages

Possessive Adjective Adventure Guide

This document is an HTML template for an educational web application titled 'Possessive Adjective Adventure' aimed at 7th-grade students. It includes various styling elements using Tailwind CSS, animations, and interactive components for a memory game and other activities. The design incorporates a vibrant color scheme and user-friendly interface elements to enhance the learning experience.

Uploaded by

Ismia Agustina
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

<!

DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-
scale=1.0, user-scalable=no">
<title>Possessive Adjective Adventure - Kelas 7 SMP</title>
<!-- Tailwind CSS -->
<script src="[Link]
<!-- FontAwesome for Icons -->
<link rel="stylesheet" href="[Link]
awesome/6.4.0/css/[Link]">
<!-- Google Fonts -->
<style>
@import url('[Link]
family=Comic+Neue:wght@400;700&family=Bangers&family=Chewy&family=Fredoka:wght@400;
700&display=swap');

/* --- GLOBAL STYLES --- */


body {
font-family: 'Comic Neue', 'Comic Sans MS', cursive, sans-serif;
overflow-x: hidden;
margin: 0;
padding: 0;
background-color: #be185d;
color: #333;
user-select: none;
-webkit-tap-highlight-color: transparent;
/* Custom Cursor removed as requested */
}

/* --- MAGIC SPARKLES --- */


.sparkle {
position: fixed;
width: 10px;
height: 10px;
background-color: gold;
border-radius: 50%;
pointer-events: none;
z-index: 9999;
animation: sparkle-anim 0.8s linear forwards;
box-shadow: 0 0 5px orange;
}

@keyframes sparkle-anim {
0% { transform: scale(1); opacity: 1; }
100% { transform: scale(0) translate(10px, 20px); opacity: 0; }
}

/* --- SCENE TRANSITIONS --- */


.scene-container {
animation: slideUpFade 0.6s cubic-bezier(0.16, 1, 0.3, 1);
}

@keyframes slideUpFade {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
/* Canvas Background Layer */
#bg-canvas {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
pointer-events: none;
}

/* Main Container */
#app-container {
position: relative;
z-index: 10;
min-height: 100vh;
width: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 1rem;
box-sizing: border-box;
}

/* --- NEUMORPHISM UI --- */


.neumorph-panel {
background: rgba(255, 255, 255, 0.95);
border-radius: 20px;
border: 4px solid #60a5fa;
box-shadow: 10px 10px 20px rgba(0,0,0,0.2),
-5px -5px 15px rgba(255,255,255,0.3);
backdrop-filter: blur(5px);
transition: all 0.3s ease;
width: 100%;
}

.neumorph-btn {
background: linear-gradient(145deg, #3b82f6, #2563eb);
color: white;
border: none;
border-radius: 15px;
font-weight: bold;
box-shadow: 5px 5px 10px rgba(0,0,0,0.2),
-2px -2px 5px rgba(255,255,255,0.3);
transition: all 0.2s ease;
cursor: pointer;
text-transform: uppercase;
letter-spacing: 1px;
position: relative;
overflow: hidden;
}

.neumorph-btn:hover {
transform: translateY(-3px) scale(1.02);
box-shadow: 7px 7px 14px rgba(0,0,0,0.25);
filter: brightness(1.1);
}
.neumorph-btn:active {
transform: translateY(2px);
box-shadow: inset 4px 4px 8px rgba(0,0,0,0.2);
}

.[Link] { background: linear-gradient(145deg, #f59e0b,


#d97706); }
.[Link] { background: linear-gradient(145deg, #ef4444,
#dc2626); }
.[Link] { background: linear-gradient(145deg, #10b981,
#059669); }

/* Mood Selection Styles */


.mood-btn { transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); }
.[Link] {
transform: scale(1.2);
background: #fef3c7;
box-shadow: inset 4px 4px 8px rgba(0,0,0,0.1);
border: 4px solid #f59e0b;
}

/* --- ANIMATIONS --- */


@keyframes float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-15px); }
}
.animate-float { animation: float 3s ease-in-out infinite; }

@keyframes popIn {
0% { transform: scale(0); opacity: 0; }
80% { transform: scale(1.1); opacity: 1; }
100% { transform: scale(1); opacity: 1; }
}
.animate-pop { animation: popIn 0.5s cubic-bezier(0.175, 0.885, 0.32,
1.275) forwards; }

@keyframes shake {
0%, 100% { transform: translateX(0); }
25% { transform: translateX(-5px); }
75% { transform: translateX(5px); }
}
.shake { animation: shake 0.3s ease-in-out; }

.hidden-scene { display: none !important; }

@keyframes wave-text {
0%, 100% { transform: rotate(-3deg) translateY(0); }
50% { transform: rotate(3deg) translateY(-5px); }
}
.animate-wave-text { animation: wave-text 3s ease-in-out infinite; }

@keyframes cloud-float {
0% { transform: translateX(-150px); opacity: 0; }
10% { opacity: 0.8; }
90% { opacity: 0.8; }
100% { transform: translateX(100vw); opacity: 0; }
}
.cloud-anim {
position: absolute;
color: rgba(255, 255, 255, 0.8);
animation: cloud-float linear infinite;
z-index: 1;
}

@keyframes bird-fly {
0% { transform: translateX(-50px) translateY(50px) scale(0.5); opacity:
0; }
10% { opacity: 1; }
50% { transform: translateX(50vw) translateY(0px) scale(0.7); }
100% { transform: translateX(100vw) translateY(50px) scale(0.5);
opacity: 0; }
}
.bird-anim {
position: absolute;
color: #fef08a;
animation: bird-fly linear infinite;
z-index: 2;
}

@keyframes btn-cloud-move {
0% { transform: translateX(-50px); opacity: 0; }
20% { opacity: 0.6; }
80% { opacity: 0.6; }
100% { transform: translateX(250px); opacity: 0; }
}
.btn-cloud-anim {
position: absolute;
color: rgba(255, 255, 255, 0.7);
animation: btn-cloud-move linear infinite;
pointer-events: none;
}

@keyframes march-right {
0% { transform: translateX(-50px); }
100% { transform: translateX(450px); }
}
.ant-walker { animation: march-right linear infinite; }

@keyframes balloonFloat {
0% { bottom: -150px; transform: translateX(0) rotate(0deg); }
25% { transform: translateX(10px) rotate(2deg); }
50% { transform: translateX(-10px) rotate(-2deg); }
75% { transform: translateX(10px) rotate(1deg); }
100% { bottom: 120%; transform: translateX(0) rotate(0deg); }
}

.balloon-item {
position: absolute;
width: 90px;
height: 110px;
border-radius: 50% 50% 50% 50% / 40% 40% 60% 60%;
display: flex;
justify-content: center;
align-items: center;
color: white;
font-weight: bold;
font-size: 1.1rem;
cursor: pointer;
box-shadow: inset -10px -10px 20px rgba(0,0,0,0.1), 5px 10px 15px
rgba(0,0,0,0.2);
z-index: 20;
transition: transform 0.1s;
animation: balloonFloat linear forwards;
text-align: center;
line-height: 1.1;
padding: 5px;
text-shadow: 1px 1px 2px rgba(0,0,0,0.3);
}
.balloon-item::after { content: ''; position: absolute; bottom: -30px;
left: 50%; width: 2px; height: 30px; background: rgba(255,255,255,0.7); transform:
translateX(-50%); }
.balloon-item::before { content: ''; position: absolute; bottom: -4px;
left: 50%; width: 10px; height: 6px; background: inherit; transform: translateX(-
50%); border-radius: 2px; }
.balloon-item:active { transform: scale(0.95); }
.balloon-pop { animation: popAnim 0.2s forwards !important; }
@keyframes popAnim { 0% { transform: scale(1); opacity: 1; } 50%
{ transform: scale(1.4); opacity: 0.8; } 100% { transform: scale(0); opacity:
0; } }

@keyframes pulse-ring { 0% { transform: scale(0.8); box-shadow: 0 0 0 0


rgba(59, 130, 246, 0.7); } 70% { transform: scale(1); box-shadow: 0 0 0 10px
rgba(59, 130, 246, 0); } 100% { transform: scale(0.8); box-shadow: 0 0 0 0 rgba(59,
130, 246, 0); } }
.animate-pulse-ring { animation: pulse-ring 2s infinite; }

@keyframes emoji-float-up { 0% { transform: translateY(0) scale(0.5);


opacity: 1; } 100% { transform: translateY(-150px) scale(1.5) rotate(20deg);
opacity: 0; } }
.celebration-emoji { position: fixed; pointer-events: none; z-index: 100;
animation: emoji-float-up 1.5s ease-out forwards; }

/* Memory Game */
.memory-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap:
10px; perspective: 1000px; width: 100%; max-width: 600px; margin: 0 auto; }
@media (min-width: 768px) { .memory-grid { grid-template-columns: repeat(4,
1fr); gap: 15px; } }
.memory-card { background-color: transparent; aspect-ratio: 3/4; cursor:
pointer; position: relative; transform-style: preserve-3d; transition: transform
0.5s; }
.[Link] { transform: rotateY(180deg); }
.memory-card .front-face, .memory-card .back-face { width: 100%; height:
100%; position: absolute; backface-visibility: hidden; border-radius: 12px;
display: flex; flex-direction: column; justify-content: center; align-items:
center; box-shadow: 0 4px 6px rgba(0,0,0,0.1); font-weight: bold; font-size:
1.2rem; user-select: none; }
.memory-card .front-face { background: linear-gradient(135deg, #fff,
#f0f9ff); transform: rotateY(180deg); border: 4px solid #3b82f6; color: #1e40af; }
.memory-card .back-face { background: linear-gradient(135deg, #f472b6,
#db2777); background-image: radial-gradient(circle, rgba(255,255,255,0.2) 2px,
transparent 2px); background-size: 10px 10px; border: 4px solid #fff; color: white;
font-size: 2rem; }
.[Link] .front-face { background: #dcfce7; border-color:
#22c55e; color: #15803d; animation: pulse-ring 1s infinite; }

/* Game 1 */
.drop-zone { transition: all 0.3s ease; }
.[Link] { background-color: #dbeafe; border-color: #3b82f6;
transform: scale(1.02); }
.draggable-item { cursor: pointer; transition: all 0.2s; }
.[Link] { background: #fcd34d; transform: scale(1.1)
rotate(5deg); box-shadow: 0 10px 15px rgba(0,0,0,0.2); border: 2px solid #b45309;
z-index: 50; }

/* Progress Bar */
.progress-bar-container { width: 100%; height: 20px; background: #e5e7eb;
border-radius: 999px; overflow: hidden; border: 3px solid white; box-shadow: inset
0 2px 4px rgba(0,0,0,0.1); }
.progress-bar-fill { height: 100%; background: linear-gradient(90deg,
#34d399, #10b981); width: 0%; transition: width 0.5s ease; }

.text-3d { text-shadow: 4px 4px 0 #1e3a8a, 6px 6px 5px rgba(0,0,0,0.3); }


.font-alasassy-style { font-family: 'Bangers', cursive; letter-spacing:
3px; text-transform: uppercase; text-shadow: 3px 3px 0px #b45309, 6px 6px 0px
#78350f, 8px 8px 10px rgba(0,0,0,0.4); }

::-webkit-scrollbar { width: 8px; }


::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 4px; }
::-webkit-scrollbar-thumb { background: #fcd34d; border-radius: 4px; }
</style>
</head>
<body>

<!-- 1. BACKGROUND CANVAS (Visual Utama) -->


<canvas id="bg-canvas"></canvas>

<!-- 2. UI CONTAINER -->


<div id="app-container" class="w-full max-w-7xl mx-auto">

<!-- Top Navigation -->


<div id="nav-bar" class="fixed top-4 right-4 z-50 flex gap-2 md:gap-3
hidden-scene">
<button onclick="toggleMusic()" class="neumorph-btn px-3 py-2 md:px-4
text-xs md:text-sm bg-purple-500 rounded-full hover:bg-purple-600 transition-
colors">
<i id="music-icon" class="fas fa-volume-mute"></i> Musik
</button>
<button onclick="goBack()" class="neumorph-btn danger px-3 py-2 md:px-4
text-xs md:text-sm rounded-full">
<i class="fas fa-arrow-left"></i> Menu
</button>
</div>

<!-- Custom Confirm Modal -->


<div id="modal-confirm" class="fixed inset-0 z-[60] hidden flex items-
center justify-center bg-black/50 backdrop-blur-sm p-4">
<div class="bg-white p-6 md:p-8 rounded-2xl shadow-2xl text-center max-
w-sm w-full mx-auto transform scale-100 animate-pop border-4 border-yellow-400">
<div class="text-6xl mb-4">🤔</div>
<h2 class="text-2xl font-bold text-gray-800 mb-4">Keluar dari game?
</h2>
<p class="text-gray-600 mb-6">Progress permainanmu akan hilang.</p>
<div class="flex gap-4 justify-center">
<button onclick="closeConfirmModal()" class="neumorph-btn px-6
py-2 bg-gray-400">Batal</button>
<button onclick="confirmExitGame()" class="neumorph-btn danger
px-6 py-2">Ya, Keluar</button>
</div>
</div>
</div>

<!-- SCENE 1: WELCOME SCREEN (PARALLAX EFFECT) -->


<div id="scene-welcome" class="scene-container flex flex-col items-center
justify-center min-h-screen text-center w-full relative overflow-hidden bg-
gradient-to-b from-sky-300 to-blue-200">

<!-- SKY DECORATIONS -->


<div id="welcome-sky" class="absolute inset-0 w-full h-full pointer-
events-none select-none z-0 transition-transform duration-100 ease-out">
<!-- Shining Sun (Interactive) -->
<div onclick="toggleSunGlasses()" class="absolute top-5 right-5
md:top-10 md:right-10 animate-spin pointer-events-auto cursor-pointer hover:scale-
110 transition" style="animation-duration: 60s;">
<i id="sun-icon" class="fas fa-sun text-yellow-300 text-8xl
md:text-9xl lg:text-[10rem] filter drop-shadow-[0_0_30px_rgba(253,224,71,0.8)]
opacity-100 relative">
<!-- Sunglasses (Hidden by default) -->
<div id="sun-glasses" class="hidden absolute top-1/2 left-
1/2 transform -translate-x-1/2 -translate-y-1/2 text-black text-6xl"></div>
</i>
</div>

<!-- Moving Clouds -->


<i class="fas fa-cloud cloud-anim text-8xl lg:text-9xl text-white
opacity-90" style="top: 10%; left: -150px; animation-duration: 35s;"></i>
<i class="fas fa-cloud cloud-anim text-9xl lg:text-[10rem] text-
white opacity-80" style="top: 25%; left: -300px; animation-duration: 45s;
animation-delay: 5s;"></i>
<i class="fas fa-cloud cloud-anim text-7xl lg:text-8xl text-white
opacity-85" style="top: 5%; left: -200px; animation-duration: 40s; animation-delay:
15s;"></i>

<!-- Birds -->


<i class="fas fa-dove bird-anim text-2xl lg:text-4xl text-white
drop-shadow-md" style="top: 20%; animation-duration: 18s;"></i>
<i class="fas fa-dove bird-anim text-xl lg:text-3xl text-white
drop-shadow-md" style="top: 35%; animation-duration: 22s; animation-delay:
3s;"></i>
</div>

<!-- SCHOOL BACKGROUND (PARALLAX) -->


<div id="welcome-school" class="absolute bottom-0 left-0 w-full flex
justify-center items-end z-0 pointer-events-none opacity-90 transition-transform
duration-100 ease-out">
<svg viewBox="0 0 400 280" class="w-full max-w-6xl lg:max-w-full h-
auto drop-shadow-2xl" preserveAspectRatio="xMidYMax meet">
<!-- TREES BEHIND -->
<g id="trees-behind">
<rect x="5" y="80" width="15" height="100"
fill="#78350f"/><circle cx="12" cy="70" r="25" fill="#15803d"/><circle cx="25"
cy="80" r="20" fill="#166534"/><circle cx="0" cy="80" r="20" fill="#166534"/>
<rect x="80" y="70" width="12" height="80"
fill="#78350f"/><circle cx="86" cy="60" r="22" fill="#16a34a"/><circle cx="70"
cy="70" r="18" fill="#15803d"/><circle cx="100" cy="70" r="18" fill="#15803d"/>
<rect x="310" y="70" width="12" height="80"
fill="#78350f"/><circle cx="316" cy="60" r="22" fill="#16a34a"/><circle cx="300"
cy="70" r="18" fill="#15803d"/><circle cx="330" cy="70" r="18" fill="#15803d"/>
<rect x="380" y="80" width="15" height="100"
fill="#78350f"/><circle cx="387" cy="70" r="25" fill="#15803d"/><circle cx="370"
cy="80" r="20" fill="#166534"/><circle cx="395" cy="80" r="20" fill="#166534"/>
</g>

<!-- BUILDING -->


<rect x="20" y="100" width="100" height="150" fill="#fef3c7"
stroke="#d97706" stroke-width="2"/>
<path d="M10,100 L120,100 L65,60 Z" fill="#ef4444"
stroke="#b91c1c" stroke-width="2"/>
<rect x="280" y="100" width="100" height="150" fill="#fef3c7"
stroke="#d97706" stroke-width="2"/>
<path d="M280,100 L390,100 L335,60 Z" fill="#ef4444"
stroke="#b91c1c" stroke-width="2"/>
<rect x="100" y="80" width="200" height="170" fill="#fffbeb"
stroke="#d97706" stroke-width="2"/>
<path d="M90,80 L310,80 L200,20 Z" fill="#ef4444"
stroke="#b91c1c" stroke-width="2"/>
<circle cx="200" cy="55" r="18" fill="white" stroke="#d97706"
stroke-width="2"/>
<line x1="200" y1="55" x2="200" y2="45" stroke="black" stroke-
width="2"/>
<line x1="200" y1="55" x2="210" y2="55" stroke="black" stroke-
width="2"/>
<rect x="160" y="150" width="80" height="100" fill="#fde68a"
stroke="none"/>
<rect x="165" y="150" width="10" height="100" fill="white"
stroke="#d1d5db"/>
<rect x="225" y="150" width="10" height="100" fill="white"
stroke="#d1d5db"/>
<path d="M180,250 L180,190 A20,20 0 0,1 220,190 L220,250 Z"
fill="#78350f" stroke="#451a03" stroke-width="2"/>
<line x1="200" y1="190" x2="200" y2="250" stroke="#451a03"
stroke-width="1"/>
<rect x="140" y="250" width="120" height="10" fill="#d1d5db"
stroke="#9ca3af"/>
<rect x="130" y="260" width="140" height="10" fill="#9ca3af"
stroke="#6b7280"/>
<rect x="35" y="120" width="25" height="30" fill="#93c5fd"
stroke="#3b82f6" stroke-width="1"/><rect x="75" y="120" width="25" height="30"
fill="#93c5fd" stroke="#3b82f6" stroke-width="1"/><rect x="35" y="170" width="25"
height="30" fill="#93c5fd" stroke="#3b82f6" stroke-width="1"/><rect x="75" y="170"
width="25" height="30" fill="#93c5fd" stroke="#3b82f6" stroke-width="1"/>
<rect x="295" y="120" width="25" height="30" fill="#93c5fd"
stroke="#3b82f6" stroke-width="1"/><rect x="335" y="120" width="25" height="30"
fill="#93c5fd" stroke="#3b82f6" stroke-width="1"/><rect x="295" y="170" width="25"
height="30" fill="#93c5fd" stroke="#3b82f6" stroke-width="1"/><rect x="335" y="170"
width="25" height="30" fill="#93c5fd" stroke="#3b82f6" stroke-width="1"/>
<rect x="120" y="100" width="20" height="30" fill="#60a5fa"
stroke="#2563eb" stroke-width="1"/><rect x="260" y="100" width="20" height="30"
fill="#60a5fa" stroke="#2563eb" stroke-width="1"/>
<line x1="200" y1="20" x2="200" y2="-10" stroke="#4b5563"
stroke-width="2"/><path d="M200,-10 Q230,-5 200,10" fill="#ef4444" stroke="#b91c1c"
stroke-width="1"/>

<!-- FENCE -->


<g id="fence">
<g transform="translate(0, 235)"><rect x="0" y="10"
width="130" height="5" fill="#f3f4f6" stroke="#9ca3af"/><rect x="0" y="28"
width="130" height="5" fill="#f3f4f6" stroke="#9ca3af"/><g fill="#ffffff"
stroke="#9ca3af" stroke-width="1"><path d="M5,0 L5,45 M5,0 L10,-5 L15,0 L15,45
L5,45" /><path d="M25,0 L25,45 M25,0 L30,-5 L35,0 L35,45 L25,45" /><path d="M45,0
L45,45 M45,0 L50,-5 L55,0 L55,45 L45,45" /><path d="M65,0 L65,45 M65,0 L70,-5 L75,0
L75,45 L65,45" /><path d="M85,0 L85,45 M85,0 L90,-5 L95,0 L95,45 L85,45" /><path
d="M105,0 L105,45 M105,0 L110,-5 L115,0 L115,45 L105,45" /></g></g>
<g transform="translate(270, 235)"><rect x="0" y="10"
width="130" height="5" fill="#f3f4f6" stroke="#9ca3af"/><rect x="0" y="28"
width="130" height="5" fill="#f3f4f6" stroke="#9ca3af"/><g fill="#ffffff"
stroke="#9ca3af" stroke-width="1"><path d="M15,0 L15,45 M15,0 L20,-5 L25,0 L25,45
L15,45" /><path d="M35,0 L35,45 M35,0 L40,-5 L45,0 L45,45 L35,45" /><path d="M55,0
L55,45 M55,0 L60,-5 L65,0 L65,45 L55,45" /><path d="M75,0 L75,45 M75,0 L80,-5 L85,0
L85,45 L75,45" /><path d="M95,0 L95,45 M95,0 L100,-5 L105,0 L105,45 L95,45" /><path
d="M115,0 L115,45 M115,0 L120,-5 L125,0 L125,45 L115,45" /></g></g>
</g>

<!-- GRASS FOREGROUND -->


<g id="front-grass">
<path d="M0,280 L400,280 L400,250 Q380,240 360,250 Q340,260
320,250 Q300,240 280,250 Q260,260 240,250 Q220,240 200,250 Q180,260 160,250
Q140,240 120,250 Q100,260 80,250 Q60,240 40,250 Q20,260 0,250 Z" fill="#15803d"/>
<path d="M0,280 L400,280 L400,265 Q390,255 380,265 Q370,255
360,265 Q350,255 340,265 Q300,260 270,265 L130,265 Q100,260 60,265 Q50,255 40,265
Q30,255 20,265 Q10,255 0,265 Z" fill="#16a34a"/>
<path d="M0,280 L400,280 L400,270 Q395,260 390,270 Q385,260
380,270 Q360,260 340,270 Q320,260 300,270 Q250,265 200,270 Q150,265 100,270 Q80,260
60,270 Q40,260 20,270 Q10,260 0,270 Z" fill="#4ade80" />
<g class="ant-walker" style="animation-duration: 25s;"><g
transform="translate(0, 275) scale(0.8)"><circle cx="0" cy="0" r="2.5"
fill="#3f2c22"/><circle cx="5" cy="0" r="2" fill="#3f2c22"/><circle cx="10" cy="0"
r="2.5" fill="#3f2c22"/><line x1="0" y1="0" x2="0" y2="5" stroke="#3f2c22" stroke-
width="0.8"/><line x1="5" y1="0" x2="5" y2="5" stroke="#3f2c22" stroke-
width="0.8"/><line x1="10" y1="0" x2="10" y2="5" stroke="#3f2c22" stroke-
width="0.8"/></g><g transform="translate(30, 275) scale(0.8)"><circle cx="0" cy="0"
r="2.5" fill="#3f2c22"/><circle cx="5" cy="0" r="2" fill="#3f2c22"/><circle cx="10"
cy="0" r="2.5" fill="#3f2c22"/><line x1="0" y1="0" x2="0" y2="5" stroke="#3f2c22"
stroke-width="0.8"/><line x1="5" y1="0" x2="5" y2="5" stroke="#3f2c22" stroke-
width="0.8"/><line x1="10" y1="0" x2="10" y2="5" stroke="#3f2c22" stroke-
width="0.8"/></g><g transform="translate(60, 275) scale(0.8)"><circle cx="0" cy="0"
r="2.5" fill="#3f2c22"/><circle cx="5" cy="0" r="2" fill="#3f2c22"/><circle cx="10"
cy="0" r="2.5" fill="#3f2c22"/><line x1="0" y1="0" x2="0" y2="5" stroke="#3f2c22"
stroke-width="0.8"/><line x1="5" y1="0" x2="5" y2="5" stroke="#3f2c22" stroke-
width="0.8"/><line x1="10" y1="0" x2="10" y2="5" stroke="#3f2c22" stroke-
width="0.8"/></g></g>
<g transform="translate(30, 240)"><path d="M10,40 L10,15
Q10,0 20,0 Q30,0 30,15 L30,40 Z" fill="#86efac" stroke="#166534" stroke-
width="1.5"/><path d="M10,25 Q0,25 0,17 Q0,10 8,13 L10,17" fill="#86efac"
stroke="#166534" stroke-width="1.5"/><circle cx="16" cy="15" r="1.5"
fill="#1e293b"/><circle cx="24" cy="15" r="1.5" fill="#1e293b"/><path d="M18,19
Q20,21 22,19" fill="none" stroke="#1e293b" stroke-width="1" stroke-
linecap="round"/><circle cx="20" cy="0" r="4" fill="#f43f5e"/><circle cx="20"
cy="0" r="1.5" fill="yellow"/></g>
<g transform="translate(350, 235)"><path d="M15,45 L15,15
Q15,0 25,0 Q35,0 35,15 L35,45 Z" fill="#4ade80" stroke="#15803d" stroke-
width="1.5"/><path d="M35,27 Q45,27 45,17 Q45,12 38,14 L35,20" fill="#4ade80"
stroke="#15803d" stroke-width="1.5"/><circle cx="21" cy="15" r="1.5"
fill="#1e293b"/><circle cx="29" cy="15" r="1.5" fill="#1e293b"/><path d="M23,19
Q25,22 27,19" fill="none" stroke="#1e293b" stroke-width="1" stroke-
linecap="round"/><circle cx="20" cy="-2" r="4" fill="#fbbf24"/><circle cx="20"
cy="-2" r="1.5" fill="white"/></g>
<g transform="translate(80, 260)"><path d="M5,15 Q5,20 0,20
L10,20 Q5,20 5,15 L5,10" fill="#fcd34d" /><path d="M-2,10 Q5,-5 12,10 Z"
fill="#ef4444" /><circle cx="2" cy="5" r="1" fill="white" opacity="0.8"/><circle
cx="8" cy="8" r="1" fill="white" opacity="0.8"/></g>
<g transform="translate(320, 260)"><path d="M5,15 Q5,20
0,20 L10,20 Q5,20 5,15 L5,10" fill="#fcd34d" /><path d="M-2,10 Q5,-5 12,10 Z"
fill="#a855f7" /><circle cx="3" cy="4" r="1.5" fill="white" opacity="0.8"/></g>
<path d="M10,270 L10,260 M20,270 L20,263 M30,270 L30,258"
stroke="#166534" stroke-width="1.5" fill="none"/><path d="M370,270 L370,260
M380,270 L380,263 M390,270 L390,258" stroke="#166534" stroke-width="1.5"
fill="none"/><path d="M150,270 L150,262 M160,270 L160,265" stroke="#166534" stroke-
width="1.5" fill="none"/>
<circle cx="40" cy="275" r="2.5" fill="#f472b6" /><circle
cx="60" cy="265" r="2.5" fill="#60a5fa" /><circle cx="340" cy="275" r="2.5"
fill="#facc15" /><circle cx="360" cy="265" r="2.5" fill="#f472b6" /><circle
cx="200" cy="275" r="2" fill="white" /><circle cx="250" cy="272" r="2" fill="white"
/>
</g>
</svg>
</div>

<!-- Content Z-Index 10 (Foreground) -->


<div class="relative z-10 mb-2 animate-pop mt-10 lg:mt-4">
<h2 class="text-4xl md:text-5xl lg:text-6xl text-yellow-300 font-
alasassy-style mb-4 animate-wave-text inline-block filter drop-shadow-lg stroke-
black">Welcome to English Class</h2>

<!-- Enhanced Title -->


<div class="animate-float mt-2 lg:mt-6">
<h1 class="text-6xl md:text-9xl lg:text-[10rem] leading-none
select-none pointer-events-none" style="font-family: 'Chewy', cursive;">
<div class="transform -rotate-3 hover:scale-105 transition
duration-300 z-10 relative">
<span class="block text-red-500 tracking-wider"
style="text-shadow: 5px 5px 0 #7f1d1d, -2px -2px 0 #fff; -webkit-text-stroke: 3px
black;">POSSESSIVE</span>
</div>
<div class="transform rotate-2 hover:scale-105 transition
duration-300 z-20 relative mt-[-10px] md:mt-[-20px] lg:mt-[-30px]">
<span class="block text-yellow-400 tracking-wider"
style="text-shadow: 5px 5px 0 #b45309, -2px -2px 0 #fff; -webkit-text-stroke: 3px
black;">ADJECTIVE</span>
</div>
<div class="transform -rotate-2 hover:scale-105 transition
duration-300 z-10 relative mt-[-5px] md:mt-[-15px] lg:mt-[-20px]">
<span class="block text-green-500 tracking-wider"
style="text-shadow: 5px 5px 0 #14532d, -2px -2px 0 #fff; -webkit-text-stroke: 3px
black;">ADVENTURE</span>
</div>
</h1>
</div>
</div>

<!-- FOREGROUND CENTER (Character Only) -->


<div class="flex items-end justify-center mb-40 md:mb-32 lg:mb-16
relative z-20 w-full mt-auto pointer-events-none">
<!-- Character: Ibu Guru Hijab Cantik (3D Cartoon Style) -->
<div class="w-48 h-48 md:w-72 md:h-72 lg:w-96 lg:h-96 animate-float
filter drop-shadow-2xl">
<svg viewBox="0 0 200 200" xmlns="[Link]
<defs>
<radialGradient id="skinGrad" cx="40%" cy="40%" r="50%"
fx="30%" fy="30%"><stop offset="0%" stop-color="#fff1f2" /><stop offset="100%"
stop-color="#fca5a5" /></radialGradient>
<linearGradient id="hijabGrad" x1="0%" y1="0%"
x2="100%" y2="100%"><stop offset="0%" stop-color="#fbcfe8" /><stop offset="60%"
stop-color="#f472b6" /><stop offset="100%" stop-color="#db2777" /></linearGradient>
<linearGradient id="clothGrad" x1="0%" y1="0%" x2="0%"
y2="100%"><stop offset="0%" stop-color="#2dd4bf" /><stop offset="100%" stop-
color="#0f766e" /></linearGradient>
<linearGradient id="bookGrad" x1="0%" y1="0%" x2="100%"
y2="100%"><stop offset="0%" stop-color="#3b82f6" /><stop offset="100%" stop-
color="#1e3a8a" /></linearGradient>
</defs>
<path d="M50,160 Q100,170 150,160 L160,220 L40,220 Z"
fill="url(#clothGrad)"/>
<path d="M40,70 Q100,-20 160,70 Q185,130 160,170 Q100,210
40,170 Q15,130 40,70" fill="url(#hijabGrad)" filter="drop-shadow(0px 4px 4px
rgba(0,0,0,0.2))"/>
<ellipse cx="100" cy="95" rx="45" ry="50"
fill="url(#skinGrad)"/>
<path d="M60,70 Q100,45 140,70 Q138,125 140,135 Q100,155
60,135 Q62,125 60,70" fill="none" stroke="#db2777" stroke-width="1.5"
opacity="0.4"/>
<ellipse cx="70" cy="112" rx="8" ry="5" fill="#fda4af"
opacity="0.5" filter="blur(1px)"/><ellipse cx="130" cy="112" rx="8" ry="5"
fill="#fda4af" opacity="0.5" filter="blur(1px)"/>
<path d="M65,82 Q75,76 87,82" fill="none" stroke="#78350f"
stroke-width="2.5" stroke-linecap="round"/><path d="M113,82 Q125,76 135,82"
fill="none" stroke="#78350f" stroke-width="2.5" stroke-linecap="round"/>
<g transform="translate(75, 96)"><ellipse cx="0" cy="0"
rx="10" ry="11" fill="white"/><circle cx="0" cy="0" r="7" fill="#854d0e"/><circle
cx="0" cy="0" r="4" fill="#1e293b"/><circle cx="3" cy="-3" r="2.5"
fill="white"/><circle cx="-3" cy="3" r="1.5" fill="white" opacity="0.8"/><path
d="M-10,-2 Q-5,-12 10,-2" fill="none" stroke="#1e293b" stroke-width="2.5" stroke-
linecap="round"/><path d="M10,-2 L13,-5" stroke="#1e293b" stroke-width="2" stroke-
linecap="round"/></g>
<g transform="translate(125, 96)"><ellipse cx="0" cy="0"
rx="10" ry="11" fill="white"/><circle cx="0" cy="0" r="7" fill="#854d0e"/><circle
cx="0" cy="0" r="4" fill="#1e293b"/><circle cx="3" cy="-3" r="2.5"
fill="white"/><circle cx="-3" cy="3" r="1.5" fill="white" opacity="0.8"/><path
d="M-10,-2 Q-5,-12 10,-2" fill="none" stroke="#1e293b" stroke-width="2.5" stroke-
linecap="round"/><path d="M10,-2 L13,-5" stroke="#1e293b" stroke-width="2" stroke-
linecap="round"/></g>
<g stroke="#be123c" stroke-width="2" fill="none"
opacity="0.9"><ellipse cx="75" cy="96" rx="16" ry="13"
fill="rgba(255,255,255,0.1)"/><ellipse cx="125" cy="96" rx="16" ry="13"
fill="rgba(255,255,255,0.1)"/><path d="M91,96 Q100,92 109,96"
stroke-width="2"/><path d="M59,96 L50,92"/><path d="M141,96 L150,92"/></g>
<path d="M98,108 Q100,110 102,108" fill="none"
stroke="#d97706" stroke-width="2" opacity="0.5"/>
<path d="M88,128 Q100,138 112,128" fill="none"
stroke="#be123c" stroke-width="2.5" stroke-linecap="round"/>
<path d="M90,129 Q100,135 110,129" fill="#fda4af"
opacity="0.6"/>
<g transform="rotate(-5, 100, 180)"><rect x="70" y="150"
width="60" height="75" rx="3" fill="url(#bookGrad)" stroke="#1e3a8a" stroke-
width="1"/><rect x="75" y="150" width="50" height="70" rx="2" fill="white"/><text
x="82" y="180" font-family="sans-serif" font-weight="bold" font-size="14"
fill="#1e3a8a">ENG</text><text x="82" y="195" font-family="sans-serif" font-
weight="bold" font-size="14" fill="#1e3a8a">LISH</text><path d="M70,150 L75,150
L75,225 L70,225 Z" fill="#1d4ed8"/></g>
<ellipse cx="70" cy="190" rx="10" ry="12"
fill="url(#skinGrad)" transform="rotate(20, 70, 190)"/><ellipse cx="130" cy="180"
rx="10" ry="12" fill="url(#skinGrad)" transform="rotate(-20, 130, 180)"/>
</svg>
</div>
</div>

<!-- Start Button -->


<button onclick="navigate('menu'); startMusicOnInteraction();
speakText('Welcome to Possessive Adjective Adventure');" class="absolute bottom-16
left-4 md:left-8 lg:bottom-24 lg:left-20 z-30 neumorph-btn px-16 py-5 lg:px-20
lg:py-6 text-3xl lg:text-4xl animate-pop hover:scale-110 transition shadow-xl
border-4 border-green-500 !bg-gradient-to-br !from-green-700 !to-green-900 text-
white relative overflow-visible group !rounded-full">
<div class="absolute -top-8 -right-8 lg:-top-12 lg:-right-12 text-
6xl lg:text-8xl animate-bounce group-hover:rotate-12 transition duration-300 filter
drop-shadow-md">🚀</div>
Let's Start!
</button>
<p class="text-white mt-4 opacity-80 text-sm absolute bottom-4 left-1/2
transform -translate-x-1/2 z-20 font-bold bg-pink-600/30 px-3 py-1 rounded-full
lg:text-lg">Created for Grade 7 SMP</p>
</div>

<!-- SCENE 2: MAIN MENU (POLISHED) -->


<div id="scene-menu" class="hidden-scene scene-container w-full max-w-6xl
mx-auto text-center">
<div class="neumorph-panel p-8 relative overflow-hidden bg-gradient-to-
br from-pink-100 via-rose-100 to-pink-200 border-4 border-pink-300 shadow-2xl h-
full flex flex-col justify-center">
<!-- Decorations -->
<div class="absolute inset-0 w-full h-full pointer-events-none
select-none z-0">
<!-- Big Flowers -->
<div class="absolute -top-10 -left-10 opacity-80 animate-spin-
slow" style="animation-duration: 30s;">
<svg width="180" height="180" viewBox="0 0 100 100"><path
d="M50,50 Q20,0 50,0 Q80,0 50,50" fill="#f472b6" stroke="#db2777" stroke-
width="1"/><path d="M50,50 Q80,0 100,50 Q80,100 50,50" fill="#fb7185"
stroke="#e11d48" stroke-width="1"/><path d="M50,50 Q80,100 50,100 Q20,100 50,50"
fill="#f472b6" stroke="#db2777" stroke-width="1"/><path d="M50,50 Q20,100 0,50
Q20,0 50,50" fill="#fb7185" stroke="#e11d48" stroke-width="1"/><circle cx="50"
cy="50" r="12" fill="#fde047" stroke="#eab308" stroke-width="2"/></svg>
</div>
<div class="absolute -bottom-10 -right-10 opacity-80 animate-
spin-slow" style="animation-duration: 25s; animation-direction: reverse;">
<svg width="200" height="200" viewBox="0 0 100 100"><circle
cx="50" cy="50" r="45" fill="#fbcfe8" opacity="0.5"/><path d="M50,20 L60,40 L80,40
L65,55 L70,75 L50,65 L30,75 L35,55 L20,40 L40,40 Z" fill="#ec4899" /><circle
cx="50" cy="50" r="10" fill="#fff" /></svg>
</div>
<!-- Garden Row -->
<div class="absolute bottom-0 left-0 w-full flex justify-around
items-end opacity-90 pb-2">
<div class="text-6xl transform translate-y-2 hover:animate-
bounce transition">🌷</div><div class="text-5xl transform translate-y-0 animate-
bounce" style="animation-duration: 3s;">🌻</div><div class="text-7xl transform
translate-y-4 hover:rotate-12 transition">🌺</div><div class="text-4xl transform -
translate-y-4 animate-pulse">🦋</div><div class="text-6xl transform translate-y-2
hover:animate-bounce transition">🌹</div><div class="text-5xl transform translate-y-
0 animate-bounce" style="animation-duration: 4s;">🌻</div><div class="text-7xl
transform translate-y-4 hover:-rotate-12 transition">🌸</div>
</div>
</div>

<h2 class="text-5xl font-bold text-pink-600 mb-10 border-b-8


border-white inline-block pb-4 pt-2 relative z-10 drop-shadow-md tracking-wider bg-
yellow-300 px-10 rounded-full transform -rotate-2 shadow-xl hover:scale-105
transition" style="font-family: 'Fredoka', sans-serif;">Main Menu</h2>

<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6


relative z-10 w-full">
<!-- Buttons with Shapes & Stickers -->
<button onclick="navigate('objective')" class="neumorph-btn p-6
flex flex-col items-center gap-3 !bg-gradient-to-br !from-green-400/80 !to-green-
600/80 hover:!from-green-500/90 hover:!to-green-700/90 group border-4 border-green-
200/50 relative overflow-hidden shadow-lg transform transition hover:scale-105
backdrop-blur-md !rounded-tl-[50px] !rounded-br-[50px] !rounded-tr-lg !rounded-bl-
lg">
<div class="absolute top-2 left-2 text-3xl animate-bounce
pointer-events-none" style="animation-duration: 2s;">🐛</div>
<div class="absolute bottom-8 right-2 text-2xl animate-
wiggle pointer-events-none transform rotate-12">🐞</div>
<div class="bg-white/30 p-4 rounded-full group-hover:bg-
white/40 transition backdrop-blur-sm"><i class="fas fa-bullseye text-5xl text-white
drop-shadow-md"></i></div>
<span class="text-xl text-white font-bold drop-shadow-sm
relative z-10">Tujuan</span>
<div class="absolute -bottom-1 left-0 w-full text-center
text-lg opacity-80 pointer-events-none">🌱🌿🌱🌿🌱</div>
</button>

<button onclick="navigate('material')" class="neumorph-btn p-6


flex flex-col items-center gap-3 !bg-gradient-to-br !from-sky-300/80 !to-sky-500/80
hover:!from-sky-400/90 hover:!to-sky-600/90 group border-4 border-sky-200/50
relative overflow-hidden shadow-lg transform transition hover:scale-105 backdrop-
blur-md !rounded-[50px]">
<div class="absolute top-4 right-4 text-3xl animate-float
pointer-events-none transform rotate-12">✈️</div>
<div class="absolute bottom-4 left-4 text-3xl animate-pulse
pointer-events-none" style="animation-duration: 1.5s;">🚁</div>
<i class="fas fa-cloud btn-cloud-anim text-2xl top-2 left-
2" style="animation-duration: 8s;"></i>
<i class="fas fa-cloud btn-cloud-anim text-3xl bottom-4
left-0" style="animation-duration: 12s; animation-delay: 2s;"></i>
<div class="bg-white/30 p-4 rounded-full group-hover:bg-
white/40 transition backdrop-blur-sm relative z-10"><i class="fas fa-book-open
text-5xl text-white drop-shadow-md"></i></div>
<span class="text-xl text-white font-bold drop-shadow-sm
relative z-10">Materi</span>
</button>
<button onclick="navigate('games-menu')" class="neumorph-btn p-
6 flex flex-col items-center gap-3 !bg-gradient-to-br !from-yellow-300/80 !to-
yellow-500/80 hover:!from-yellow-400/90 hover:!to-yellow-600/90 group border-4
border-yellow-200/50 relative overflow-hidden shadow-lg transform transition
hover:scale-105 backdrop-blur-md !rounded-tr-[50px] !rounded-bl-[50px] !rounded-tl-
lg !rounded-br-lg">
<div class="absolute top-2 left-2 text-3xl animate-wiggle
pointer-events-none transform -rotate-12">👻</div>
<div class="absolute bottom-8 right-2 text-3xl animate-
bounce pointer-events-none" style="animation-duration: 1.2s;">👾</div>
<div class="absolute -bottom-4 left-1/2 transform -
translate-x-1/2 w-40 h-20 opacity-70 pointer-events-none">
<svg viewBox="0 0 100 50" class="w-full h-full"><path
d="M5,50 A45,45 0 0,1 95,50" fill="none" stroke="#ef4444" stroke-width="5" /><path
d="M10,50 A40,40 0 0,1 90,50" fill="none" stroke="#f97316" stroke-width="5" /><path
d="M15,50 A35,35 0 0,1 85,50" fill="none" stroke="#eab308" stroke-width="5" /><path
d="M20,50 A30,30 0 0,1 80,50" fill="none" stroke="#22c55e" stroke-width="5" /><path
d="M25,50 A25,25 0 0,1 75,50" fill="none" stroke="#3b82f6" stroke-width="5" /><path
d="M30,50 A20,20 0 0,1 70,50" fill="none" stroke="#a855f7" stroke-width="5"
/></svg>
</div>
<div class="bg-white/30 p-4 rounded-full group-hover:bg-
white/40 transition backdrop-blur-sm relative z-10"><i class="fas fa-gamepad text-
5xl text-white drop-shadow-md"></i></div>
<span class="text-xl text-white font-bold drop-shadow-sm
relative z-10">Games</span>
</button>

<button onclick="navigate('closing')" class="neumorph-btn p-6


flex flex-col items-center gap-3 !bg-gradient-to-br !from-pink-500/80 !to-pink-
700/80 hover:!from-pink-600/90 hover:!to-pink-800/90 group border-4 border-pink-
300/50 relative overflow-hidden shadow-lg transform transition hover:scale-105
backdrop-blur-md !rounded-t-[50px] !rounded-b-xl">
<div class="absolute top-2 right-2 text-3xl animate-pulse
pointer-events-none transform rotate-12">🐝</div>
<div class="absolute bottom-8 left-2 text-3xl animate-
float pointer-events-none transform -scale-x-100">🦋</div>
<div class="absolute top-2 left-2 text-2xl opacity-80
animate-spin pointer-events-none" style="animation-duration: 8s;">🌸</div><div
class="absolute bottom-2 right-2 text-2xl opacity-80 animate-pulse pointer-events-
none">🌺</div>
<div class="bg-white/30 p-4 rounded-full group-hover:bg-
white/40 transition backdrop-blur-sm relative z-10"><i class="fas fa-list-alt text-
5xl text-white drop-shadow-md"></i></div>
<span class="text-xl text-white font-bold drop-shadow-sm
relative z-10">Ringkasan</span>
</button>
</div>
</div>
</div>

<!-- OTHER SCENES (Restored and Polished) -->

<!-- OBJECTIVE -->


<div id="scene-objective" class="hidden-scene scene-container w-full max-w-
4xl mx-auto">
<div class="neumorph-panel p-10 text-center relative overflow-hidden
bg-gradient-to-br from-green-50 to-green-100">
<div class="absolute top-0 left-0 w-full h-full pointer-events-none
select-none">
<div class="absolute bottom-0 left-0 w-full text-4xl opacity-60
flex justify-between overflow-hidden whitespace-nowrap transform translate-y-
2"><span>🌱🌿🌱🌿🌱🌿🌱🌿🌱🌿🌱🌿🌱🌿🌱🌿🌱🌿🌱</span></div>
<div class="absolute -top-5 -right-5 text-8xl opacity-20
animate-spin">🍀</div>
</div>
<div class="absolute top-2 left-2 text-4xl animate-wiggle pointer-
events-none z-20 transform -rotate-12 filter drop-shadow-md">🎓</div>
<div class="absolute top-2 right-2 text-4xl animate-bounce pointer-
events-none z-20 filter drop-shadow-md">📚</div>
<div class="absolute bottom-2 left-2 text-4xl animate-float
pointer-events-none z-20 transform rotate-12">🐨</div>
<div class="absolute bottom-2 right-2 text-4xl animate-pulse
pointer-events-none z-20 filter drop-shadow-sm text-yellow-400">💡</div>
<div class="absolute inset-0 w-full h-full pointer-events-none z-10
overflow-hidden rounded-2xl"><i class="fas fa-dove bird-anim text-2xl text-white/90
drop-shadow-sm" style="top: 15%;"></i></div>

<h2 class="text-3xl font-bold text-green-800 mb-6 uppercase


tracking-wider relative z-10">Tujuan Pembelajaran</h2>
<div class="bg-white/80 p-6 rounded-xl border-2 border-green-300
shadow-sm mb-6 relative z-10 backdrop-blur-sm">
<p class="text-2xl text-gray-700 leading-relaxed font-
bold">"Siswa mampu mengenali dan menggunakan <br><span class="text-green-700 bg-
yellow-100 px-3 py-1 rounded inline-block mt-2 transform -rotate-1 border border-
yellow-300">Possessive Adjective</span><br>(Kata Sifat Kepemilikan) dengan
benar."</p>
</div>
<h3 class="text-green-600 font-bold mb-4 relative z-10">Kata Kunci
(Klik untuk dengar 🔊):</h3>
<div class="grid grid-cols-2 md:grid-cols-4 gap-4 text-lg font-bold
text-green-900 relative z-10">
<button onclick="speakText('My')" class="bg-green-100 p-3
rounded shadow-sm hover:scale-105 transition border border-green-200 flex items-
center justify-center gap-2"><i class="fas fa-volume-up text-green-600"></i> My
(Ku)</button>
<button onclick="speakText('Your')" class="bg-green-100 p-3
rounded shadow-sm hover:scale-105 transition border border-green-200 flex items-
center justify-center gap-2"><i class="fas fa-volume-up text-green-600"></i> Your
(Mu)</button>
<button onclick="speakText('His')" class="bg-green-100 p-3
rounded shadow-sm hover:scale-105 transition border border-green-200 flex items-
center justify-center gap-2"><i class="fas fa-volume-up text-green-600"></i> His
(Dia Lk)</button>
<button onclick="speakText('Her')" class="bg-green-100 p-3
rounded shadow-sm hover:scale-105 transition border border-green-200 flex items-
center justify-center gap-2"><i class="fas fa-volume-up text-green-600"></i> Her
(Dia Pr)</button>
<button onclick="speakText('Its')" class="bg-green-100 p-3
rounded shadow-sm hover:scale-105 transition border border-green-200 flex items-
center justify-center gap-2"><i class="fas fa-volume-up text-green-600"></i> Its
(Hewan)</button>
<button onclick="speakText('Our')" class="bg-green-100 p-3
rounded shadow-sm hover:scale-105 transition border border-green-200 flex items-
center justify-center gap-2"><i class="fas fa-volume-up text-green-600"></i> Our
(Kami)</button>
<button onclick="speakText('Their')" class="bg-green-100 p-3
rounded shadow-sm hover:scale-105 transition border border-green-200 flex items-
center justify-center gap-2"><i class="fas fa-volume-up text-green-600"></i> Their
(Mereka)</button>
</div>
<button onclick="navigate('material')" class="mt-8 neumorph-btn px-
8 py-3 bg-green-600 hover:bg-green-700 relative z-10 border-2 border-green-
400">Next <i class="fas fa-arrow-right ml-2"></i></button>
</div>
</div>

<!-- MATERIAL -->


<div id="scene-material" class="hidden-scene scene-container w-full max-w-
6xl mx-auto">
<div class="neumorph-panel p-6 min-h-[85vh] flex flex-col relative
overflow-hidden bg-gradient-to-br from-pink-200 to-rose-300">
<div class="absolute -bottom-20 -right-20 pointer-events-none z-0
opacity-60 animate-spin-slow" style="animation-duration: 60s;">
<svg width="500" height="500" viewBox="0 0 200 200"><g
fill="#fce7f3" stroke="#f472b6" stroke-width="1"><path d="M100,100 Q100,0 150,20
Q200,50 180,100 Z" /><path d="M100,100 Q200,100 180,150 Q150,200 100,180 Z" /><path
d="M100,100 Q100,200 50,180 Q0,150 20,100 Z" /><path d="M100,100 Q0,100 20,50 Q50,0
100,20 Z" /><path d="M100,100 Q150,50 180,20" stroke="none" fill="#fbcfe8"
opacity="0.5"/></g><g fill="#f9a8d4"><circle cx="100" cy="50" r="15" /><circle
cx="150" cy="100" r="15" /><circle cx="100" cy="150" r="15" /><circle cx="50"
cy="100" r="15" /></g><circle cx="100" cy="100" r="25" fill="#fde047"
stroke="#fbbf24" stroke-width="3" /></svg>
</div>
<!-- Stickers Repositioned -->
<div class="absolute inset-0 w-full h-full pointer-events-none z-20
overflow-hidden">
<div class="absolute top-2 left-2 text-5xl animate-bounce
filter drop-shadow-md">🦉</div>
<div class="absolute bottom-2 left-2 text-5xl animate-wiggle
transform -rotate-12 filter drop-shadow-md">✏️</div>
<div class="absolute top-1/2 right-4 text-5xl animate-float
filter drop-shadow-md">🧸</div>
<div class="absolute top-4 right-4 text-4xl text-yellow-300
animate-spin filter drop-shadow-lg">🌟</div>
<div class="absolute top-20 left-10 text-4xl animate-float
opacity-90 filter drop-shadow-md">🎈</div>
<div class="absolute bottom-40 right-8 text-4xl animate-pulse
filter drop-shadow-md">🍎</div>
<div class="absolute top-2 right-20 text-6xl opacity-90
animate-pulse filter drop-shadow-md">🌈</div>
<div class="absolute top-16 left-1/4 text-5xl animate-spin">🌞
</div>
<div class="absolute top-1/4 right-10 text-4xl animate-bounce
filter drop-shadow-md">📖</div>
<div class="absolute bottom-40 left-4 text-4xl animate-float
transform rotate-45 filter drop-shadow-md">🚀</div>
<div class="absolute bottom-20 right-2 text-4xl animate-spin-
slow opacity-80 filter drop-shadow-md">🌍</div>
</div>

<h2 class="text-3xl font-bold text-center text-rose-700 mb-6


border-b-4 border-rose-400 pb-2 drop-shadow-md relative z-10">Materi
Pembelajaran</h2>
<div class="flex flex-col md:flex-row gap-6 flex-grow relative z-
10">
<div class="w-full md:w-1/4 flex flex-col gap-2 bg-white/40 p-4
rounded-xl border-4 border-pink-200/60 backdrop-blur-md shadow-lg">
<h3 class="font-bold text-center text-pink-700 border-b-2
border-pink-300 pb-2 mb-2 text-shadow-sm">Subject ➔ Possessive</h3>
<div id="pronoun-list" class="space-y-2 overflow-y-auto
max-h-60 md:max-h-full pr-1"></div>
</div>
<div class="w-full md:w-3/4 flex flex-col">
<div id="slide-display" class="flex-grow bg-white/50
rounded-xl border-4 border-white/60 p-6 relative overflow-hidden flex flex-col
items-center text-center shadow-xl transition-all duration-500 backdrop-blur-md">
<div class="z-10 w-full flex flex-col items-center h-
full justify-center">
<div id="mat-icon" class="text-9xl mb-4 animate-
float filter drop-shadow-md"></div>
<h3 id="mat-title" class="text-6xl font-extrabold
text-blue-700 mb-2 font-comic text-3d"></h3>
<p id="mat-desc" class="text-2xl text-gray-800
font-bold mb-6 bg-white/60 px-4 py-2 rounded-lg backdrop-blur-sm shadow-sm"></p>
<div class="bg-yellow-50/60 border-2 border-yellow-
300/60 rounded-lg p-4 h-56 overflow-y-auto text-left w-full shadow-sm relative
backdrop-blur-sm">
<h4 class="font-bold text-yellow-900 mb-3 text-
center border-b border-yellow-200/60 pb-1 sticky top-0 bg-yellow-50/80 z-10 text-sm
md:text-base rounded"><i class="fas fa-headphones-alt text-blue-600 mr-2 animate-
bounce"></i> Klik kalimat untuk mendengarkan!</h4>
<ul id="mat-examples" class="list-none space-y-
2 text-lg text-gray-900 font-bold px-2 pb-2"></ul>
</div>
</div>
</div>
<div class="flex justify-between items-center mt-4 bg-
white/30 p-2 rounded-xl backdrop-blur-sm border border-white/40">
<button onclick="prevSlide()" class="neumorph-btn px-6
py-3 bg-gray-400 hover:bg-gray-500 border-2 border-white"><i class="fas fa-chevron-
left"></i> Prev</button>
<span id="slide-indicator" class="font-bold text-2xl
text-rose-800 font-mono bg-white/60 px-4 py-1 rounded shadow-inner border-2 border-
pink-200">1/7</span>
<button onclick="nextSlide()" class="neumorph-btn px-6
py-3 bg-pink-500 border-2 border-white">Next <i class="fas
fa-chevron-right"></i></button>
</div>
</div>
</div>
</div>
</div>

<!-- GAMES MENU -->


<div id="scene-games-menu" class="hidden-scene scene-container w-full max-
w-4xl mx-auto text-center">
<div class="neumorph-panel p-10 relative overflow-hidden bg-gradient-
to-br from-yellow-100 via-yellow-50 to-orange-100">
<div class="absolute inset-0 w-full h-full pointer-events-none z-
0">
<div class="absolute -top-20 left-1/2 transform -translate-x-
1/2 w-[120%] h-[300px] opacity-30">
<svg viewBox="0 0 200 100" class="w-full h-full"
preserveAspectRatio="none"><path d="M0,100 A100,100 0 0,1 200,100" fill="none"
stroke="#ef4444" stroke-width="8" /><path d="M10,100 A90,90 0 0,1 190,100"
fill="none" stroke="#f97316" stroke-width="8" /><path d="M20,100 A80,80 0 0,1
180,100" fill="none" stroke="#eab308" stroke-width="8" /><path d="M30,100 A70,70 0
0,1 170,100" fill="none" stroke="#22c55e" stroke-width="8" /><path d="M40,100
A60,60 0 0,1 160,100" fill="none" stroke="#3b82f6" stroke-width="8" /><path
d="M50,100 A50,50 0 0,1 150,100" fill="none" stroke="#a855f7" stroke-width="8"
/></svg>
</div>
<div class="absolute top-10 left-10 text-5xl opacity-60
animate-bounce">☁️</div>
<div class="absolute top-20 right-20 text-6xl opacity-50
animate-float">☁️</div>
<div class="absolute bottom-10 left-1/4 text-4xl text-yellow-
500 opacity-60 animate-pulse">✨</div>
</div>
<h2 class="text-4xl font-bold text-orange-600 mb-2 relative z-10
drop-shadow-sm border-b-4 border-orange-200 inline-block pb-2">Game Zone</h2>
<div class="flex flex-col md:flex-row gap-6 justify-center relative
z-10">
<button onclick="startGame(1)" class="neumorph-btn p-8 text-xl
flex-1 hover:scale-105 transition flex flex-col items-center justify-center gap-4
border-4 border-yellow-200 shadow-xl !bg-gradient-to-br !from-yellow-300 !to-
yellow-500 hover:!from-yellow-400 hover:!to-yellow-600 relative overflow-hidden
group !rounded-tl-[40px] !rounded-br-[40px]">
<div class="absolute -bottom-2 left-0 w-full flex justify-
center gap-1 text-2xl opacity-90 pointer-events-none select-none"><span
class="transform translate-y-1">🌱</span><span class="text-xl mt-2 transform -
translate-y-1">🌸</span><span class="transform translate-y-1">🌿</span></div>
<div class="absolute top-3 left-3 text-xl opacity-60
animate-spin pointer-events-none">🌻</div>
<div class="text-6xl filter drop-shadow-md relative z-10">🧩
</div><span class="font-bold text-white text-shadow relative z-10">Pasangkan
Kata</span><span class="text-sm opacity-90 font-normal bg-black/10 px-2 py-1
rounded relative z-10">Drag & Drop / Click</span>
</button>
<button onclick="startGame(2)" class="neumorph-btn p-8 text-xl
flex-1 hover:scale-105 transition flex flex-col items-center justify-center gap-4
border-4 border-green-200 shadow-xl !bg-gradient-to-br !from-green-400 !to-green-
600 hover:!from-green-500 hover:!to-green-700 relative overflow-hidden group !
rounded-[40px]">
<div class="absolute -bottom-2 left-0 w-full flex justify-
center gap-1 text-2xl opacity-90 pointer-events-none select-none"><span
class="transform translate-y-1">🌱</span><span class="text-xl mt-2 transform -
translate-y-1">🌿</span></div>
<div class="absolute top-4 left-4 text-xl opacity-60
animate-bounce pointer-events-none">🐞</div>
<div class="text-6xl filter drop-shadow-md relative z-10">🎈
</div><span class="font-bold text-white text-shadow relative z-10">Tangkap
Balon</span><span class="text-sm opacity-90 font-normal bg-black/10 px-2 py-1
rounded relative z-10">Pilihan Ganda</span>
</button>
<button onclick="startGame(3)" class="neumorph-btn p-8 text-xl
flex-1 hover:scale-105 transition flex flex-col items-center justify-center gap-4
border-4 border-pink-300 shadow-xl !bg-gradient-to-br !from-pink-500 !to-pink-700
hover:!from-pink-600 hover:!to-pink-800 relative overflow-hidden group !rounded-tr-
[40px] !rounded-bl-[40px]">
<div class="absolute -bottom-2 left-0 w-full flex justify-
center gap-1 text-2xl opacity-90 pointer-events-none select-none"><span
class="transform translate-y-1 hover:animate-bounce">🌷</span><span class="text-xl
mt-2 transform -translate-y-1">🍃</span></div>
<div class="text-6xl filter drop-shadow-md relative z-
10">🃏</div><span class="font-bold text-white text-shadow relative z-10">Memory
Match</span><span class="text-sm opacity-90 font-normal bg-black/10 px-2 py-1
rounded relative z-10">Ingatan Kuat</span>
</button>
</div>
</div>
</div>

<!-- GAME 1 -->


<div id="scene-game1" class="hidden-scene scene-container w-full max-w-6xl
mx-auto">
<div class="flex justify-between items-center mb-4 bg-white/90 p-3
rounded-xl shadow-lg border-2 border-purple-200 relative z-20">
<h2 class="text-2xl font-bold text-purple-700"><i class="fas fa-
puzzle-piece mr-2"></i> Pasangkan Kata!</h2>
<div class="text-xl font-bold bg-purple-100 px-4 py-1 rounded-lg
text-purple-800">Score: <span id="score-g1" class="text-2xl">0</span></div>
</div>
<div class="neumorph-panel p-6 bg-pink-50 flex flex-col md:flex-row
gap-6 min-h-[60vh] relative overflow-hidden">
<div class="absolute inset-0 w-full h-full pointer-events-none z-
0">
<div class="absolute top-4 left-4 text-6xl opacity-30 animate-
bounce">📚</div><div class="absolute bottom-10 right-10 text-6xl opacity-30 animate-
wiggle transform -rotate-12">✏️</div><div class="absolute top-1/2 left-2 text-5xl
opacity-20 animate-float">🎒</div><div class="absolute top-6 right-20 text-5xl
opacity-20 animate-spin-slow">📏</div><div class="absolute bottom-4 left-1/3 text-5xl
opacity-20 animate-pulse">✂️</div>
</div>
<div class="w-full md:w-3/4 relative z-10">
<h3 class="text-center text-gray-500 mb-2 text-sm italic font-
bold bg-white/50 inline-block px-4 py-1 rounded-full backdrop-blur-sm">Klik jawaban
di kanan, lalu klik kotak kosong di kiri.</h3>
<div id="g1-drop-area" class="grid grid-cols-1 sm:grid-cols-2
gap-4 h-full content-start"></div>
</div>
<div class="w-full md:w-1/4 bg-white/90 backdrop-blur-sm rounded-xl
p-4 border-4 border-dashed border-blue-400 flex flex-col shadow-inner relative z-
10">
<h3 class="text-center font-bold mb-4 text-blue-600 uppercase
border-b pb-2">Pilihan Jawaban</h3>
<div id="g1-drag-area" class="flex flex-wrap justify-center
gap-3 content-start"></div>
<div id="g1-message" class="mt-auto text-center font-bold text-
lg min-h-[2rem]"></div>
</div>
</div>
<button id="btn-finish-g1" onclick="finishGame(1)" class="hidden
neumorph-btn w-full mt-4 py-3 bg-green-500 text-xl shadow-lg animate-bounce
relative z-20">Next <i class="fas fa-check-circle"></i></button>
</div>

<!-- GAME 2 -->


<div id="scene-game2" class="hidden-scene scene-container w-full max-w-5xl
mx-auto">
<div class="neumorph-panel p-0 relative overflow-hidden bg-gradient-to-
b from-sky-300 to-sky-100 min-h-[80vh] flex flex-col border-4 border-sky-400">
<div class="absolute inset-0 w-full h-full pointer-events-none
select-none z-0">
<i class="fas fa-cloud cloud-anim text-8xl text-white/60"
style="top: 10%; left: -100px; animation-duration: 40s;"></i>
<i class="fas fa-cloud cloud-anim text-9xl text-white/50"
style="bottom: 20%; left: -200px; animation-duration: 55s; animation-delay:
5s;"></i>
</div>
<div class="relative z-30 p-4 flex justify-between items-center bg-
white/40 backdrop-blur-md border-b border-white/50 shadow-sm">
<span class="font-bold text-blue-800 text-xl flex items-center
gap-2"><i class="fas fa-parachute-box text-blue-600"></i> Tangkap Balon!</span>
<div class="flex gap-4"><span class="font-bold text-blue-800
bg-white/60 px-3 py-1 rounded-lg">Soal: <span id="g2-q-num">1</span>/10</span><span
class="font-bold text-green-700 bg-green-100/90 px-3 py-1 rounded-lg border border-
green-200">Score: <span id="score-g2">0</span></span></div>
</div>
<div class="progress-bar-container h-2 rounded-none bg-blue-200
border-none"><div id="g2-progress" class="progress-bar-fill
!bg-blue-500"></div></div>
<div id="g2-sky-zone" class="relative flex-grow w-full overflow-
hidden z-10 h-full min-h-[400px]"></div>

<!-- Question Box with Flower Sticker -->


<div class="absolute bottom-0 left-0 w-full p-6 bg-white/90
backdrop-blur-lg border-t-4 border-blue-400 z-30 text-center shadow-[0_-
5px_20px_rgba(0,0,0,0.1)]">
<!-- Added Flower Sticker -->
<div class="absolute -top-8 right-8 text-6xl animate-bounce
drop-shadow-md pointer-events-none" style="animation-duration: 3s;">🌻</div>
<div class="absolute -top-5 left-8 text-4xl animate-pulse drop-
shadow-md pointer-events-none">🌷</div>

<p class="text-gray-500 text-sm font-bold uppercase mb-1


tracking-wider">Pertanyaan:</p>
<p id="g2-question" class="text-2xl md:text-3xl font-bold text-
blue-900 leading-snug font-comic"></p>
</div>
<div id="g2-feedback" class="absolute inset-0 z-40 hidden flex-col
items-center justify-center bg-black/40 backdrop-blur-sm">
<div class="bg-white p-8 rounded-3xl shadow-2xl text-center
max-w-sm animate-pop border-4 border-blue-300 relative">
<div id="g2-face" class="text-8xl mb-4
animate-bounce"></div>
<h2 id="g2-msg" class="text-3xl font-bold mb-4"></h2>
<button onclick="nextG2Question()" class="neumorph-btn px-
10 py-3 text-xl shadow-xl bg-blue-500 hover:bg-blue-600 text-white border-2 border-
white">Next <i class="fas fa-arrow-right"></i></button>
</div>
</div>
</div>
</div>

<!-- GAME 3 -->


<div id="scene-game3" class="hidden-scene scene-container w-full max-w-5xl
mx-auto">
<div class="neumorph-panel p-8 flex flex-col items-center gap-4 min-h-
[80vh] bg-gradient-to-br from-pink-100 to-purple-100 border-4 border-pink-300">
<div class="w-full flex justify-between items-center bg-white/60
p-4 rounded-xl backdrop-blur-md shadow-sm mb-4">
<h2 class="text-2xl font-bold text-pink-700 flex items-center
gap-2"><span class="text-3xl">🃏</span> Jodohkan Kartu!</h2>
<div class="flex gap-4">
<div class="text-lg font-bold text-purple-700 bg-purple-
100 px-3 py-1 rounded-lg border border-purple-200">Matches: <span id="g3-
matches">0</span>/6</div>
<div class="text-lg font-bold text-green-700 bg-green-100
px-3 py-1 rounded-lg border border-green-200">Score: <span
id="score-g3">0</span></div>
</div>
</div>
<div class="w-full flex justify-center items-start flex-grow"><div
id="g3-board" class="memory-grid"></div></div>
<div id="g3-info" class="text-gray-500 font-bold text-lg animate-
pulse mt-4">Klik kartu untuk mencari pasangannya!</div>
<button onclick="navigate('games-menu')" class="neumorph-btn bg-
gray-400 text-white py-2 px-6 mt-2">Keluar</button>
<div id="g3-win-overlay" class="absolute inset-0 z-50 hidden flex-
col items-center justify-center bg-black/60 backdrop-blur-sm rounded-2xl">
<div class="bg-white p-8 rounded-3xl shadow-2xl text-center
max-w-sm animate-pop border-4 border-pink-400">
<div class="text-8xl mb-4 animate-bounce">🎉</div>
<h2 class="text-4xl font-bold text-pink-600 mb-2">Hebat!
</h2>
<p class="text-gray-600 mb-6 font-bold">Semua kartu cocok!
</p>
<button onclick="navigate('evaluation');
calculateFinal();" class="neumorph-btn secondary px-10 py-3 text-xl shadow-xl
border-2 border-white">Lanjut</button>
</div>
</div>
</div>
</div>

<!-- EVALUATION -->


<div id="scene-evaluation" class="hidden-scene scene-container w-full max-
w-3xl mx-auto text-center">
<div class="neumorph-panel p-10 bg-gradient-to-b from-blue-50 to-white
relative overflow-hidden">
<i class="fas fa-certificate text-yellow-100 text-9xl absolute -
top-10 -right-10 transform rotate-12"></i>
<h2 class="text-4xl font-bold text-blue-800 mb-6 relative z-
10">Rapor Petualangan</h2>
<div class="w-48 h-48 mx-auto bg-gradient-to-br from-yellow-300 to-
yellow-500 rounded-full flex flex-col items-center justify-center border-8 border-
white shadow-2xl mb-6 relative z-10">
<span class="text-sm font-bold text-yellow-900 uppercase">Total
Score</span>
<span id="final-score" class="text-7xl font-extrabold text-
white text-3d">0</span>
</div>
<h3 id="motivation-text" class="text-2xl font-bold text-pink-600
mb-8 animate-pulse bg-white/80 inline-block px-4 py-1 rounded"></h3>
<div class="grid grid-cols-3 gap-4 mb-8 text-sm md:text-base
relative z-10">
<div class="bg-pink-100 p-4 rounded-xl border border-pink-
200"><div class="font-bold text-pink-800 mb-1">Game 1</div><div class="text-xs
text-pink-600 mb-2">Drag & Drop</div><div id="res-g1" class="text-2xl font-black
text-pink-700">0</div></div>
<div class="bg-blue-100 p-4 rounded-xl border border-blue-
200"><div class="font-bold text-blue-800 mb-1">Game 2</div><div class="text-xs
text-blue-600 mb-2">Quiz</div><div id="res-g2" class="text-2xl font-black text-
blue-700">0</div></div>
<div class="bg-green-100 p-4 rounded-xl border border-green-
200"><div class="font-bold text-green-800 mb-1">Game 3</div><div class="text-xs
text-green-600 mb-2">Memory</div><div id="res-g3" class="text-2xl font-black text-
green-700">0</div></div>
</div>
<div class="flex flex-col md:flex-row justify-center gap-4 relative
z-10">
<button onclick="[Link]()" class="neumorph-btn px-8
py-3 bg-gray-500 text-gray-100"><i class="fas fa-redo"></i> Ulangi</button>
<button onclick="navigate('closing')" class="neumorph-btn
secondary px-8 py-3 text-lg shadow-lg">Ringkasan Akhir <i class="fas fa-arrow-
right"></i></button>
</div>
</div>
</div>

<!-- CLOSING -->


<div id="scene-closing" class="hidden-scene scene-container w-full max-w-
4xl mx-auto text-center">
<div class="neumorph-panel p-10 relative overflow-hidden bg-gradient-
to-br from-purple-100 to-fuchsia-100">
<div class="absolute inset-0 w-full h-full pointer-events-none
select-none z-0"><div class="absolute -top-5 -left-5 text-7xl opacity-20 animate-
spin" style="animation-duration: 25s;">🌸</div><div class="absolute top-20 right-5
text-5xl opacity-30 animate-float" style="animation-duration: 5s;">🌺</div><div
class="absolute bottom-10 left-10 text-4xl opacity-30 animate-bounce"
style="animation-duration: 3s;">🌷</div></div>
<h2 class="text-4xl font-bold text-purple-800 mb-6 border-b-4
border-purple-300 inline-block pb-2 relative z-10">Ringkasan Materi</h2>
<div class="bg-white/80 p-6 rounded-xl border-2 border-purple-200
text-left grid grid-cols-1 md:grid-cols-2 gap-4 text-xl mb-8 shadow-inner relative
z-10 backdrop-blur-sm">
<div class="flex items-center gap-2 border-b border-purple-100
pb-2"><span class="bg-purple-500 text-white w-8 h-8 rounded-full flex items-center
justify-center text-sm font-bold shadow-sm">1</span> I ➔ <b class="text-purple-
600">My</b></div>
<div class="flex items-center gap-2 border-b border-purple-100
pb-2"><span class="bg-purple-500 text-white w-8 h-8 rounded-full flex items-center
justify-center text-sm font-bold shadow-sm">2</span> You ➔ <b class="text-purple-
600">Your</b></div>
<div class="flex items-center gap-2 border-b border-purple-100
pb-2"><span class="bg-purple-500 text-white w-8 h-8 rounded-full flex items-center
justify-center text-sm font-bold shadow-sm">3</span> He ➔ <b class="text-purple-
600">His</b></div>
<div class="flex items-center gap-2 border-b border-purple-100
pb-2"><span class="bg-purple-500 text-white w-8 h-8 rounded-full flex items-center
justify-center text-sm font-bold shadow-sm">4</span> She ➔ <b class="text-purple-
600">Her</b></div>
<div class="flex items-center gap-2 border-b border-purple-100
pb-2"><span class="bg-purple-500 text-white w-8 h-8 rounded-full flex items-center
justify-center text-sm font-bold shadow-sm">5</span> It ➔ <b class="text-purple-
600">Its</b></div>
<div class="flex items-center gap-2 border-b border-purple-100
pb-2"><span class="bg-purple-500 text-white w-8 h-8 rounded-full flex items-center
justify-center text-sm font-bold shadow-sm">6</span> We ➔ <b class="text-purple-
600">Our</b></div>
<div class="flex items-center gap-2 border-b border-purple-100
pb-2"><span class="bg-purple-500 text-white w-8 h-8 rounded-full flex items-center
justify-center text-sm font-bold shadow-sm">7</span> They ➔ <b class="text-purple-
600">Their</b></div>
</div>
<h3 class="text-2xl font-bold text-purple-700 mb-8 relative z-
10">Satu langkah lagi sebelum selesai...</h3>
<button onclick="navigate('feedback')" class="neumorph-btn
secondary px-12 py-3 text-xl hover:scale-105 shadow-xl relative z-10 !bg-gradient-
to-br !from-purple-500 !to-fuchsia-600 hover:!from-purple-600 hover:!to-fuchsia-700
border-2 border-purple-200">Berikan Feedback <i class="fas fa-comment-dots ml-
2"></i></button>
</div>
</div>

<!-- FEEDBACK -->


<div id="scene-feedback" class="hidden-scene scene-container w-full max-w-
3xl mx-auto text-center">
<div class="neumorph-panel p-10 relative overflow-hidden bg-gradient-
to-br from-pink-100 via-rose-50 to-pink-200">
<div class="absolute inset-0 w-full h-full pointer-events-none
select-none z-0">
<div class="absolute bottom-0 left-0 w-full text-3xl opacity-60
flex justify-between overflow-hidden whitespace-nowrap transform translate-y-
2"><span>🌱🌿🌷🌱🌿🌻🌱🌿🌷🌱🌿🌻🌱🌿🌷🌱🌿</span></div>
<div class="absolute top-10 left-10 text-5xl opacity-30
animate-spin">🌸</div><div class="absolute top-20 right-10 text-4xl opacity-40
animate-float">🌺</div>
</div>
<div class="relative z-10">
<h2 class="text-3xl font-bold text-rose-700 mb-2 drop-shadow-
sm">Refleksi Belajar</h2>
<p class="text-xl text-rose-800 mb-8 font-semibold">Bagaimana
perasaanmu setelah belajar hari ini?</p>
<div class="flex justify-center gap-4 md:gap-8 mb-8 flex-wrap">
<button onclick="selectMood(this, 'happy')" class="mood-btn
neumorph-btn p-4 rounded-3xl flex flex-col items-center gap-2 border-4 border-pink-
400 !bg-gradient-to-br !from-pink-500 !to-pink-700 hover:!from-pink-600 hover:!to-
pink-800 shadow-lg transform transition hover:scale-110 group">
<div class="w-16 h-16 filter drop-shadow-md group-
hover:animate-bounce"><svg viewBox="0 0 100 100"><defs><radialGradient
id="gradHappy" cx="40%" cy="40%" r="55%" fx="25%" fy="25%"><stop offset="0%" stop-
color="#fef08a" /><stop offset="100%" stop-color="#eab308"
/></radialGradient></defs><circle cx="50" cy="50" r="45" fill="url(#gradHappy)"
stroke="#ca8a04" stroke-width="2"/><path d="M25,35 L30,20 L35,35 L50,40 L35,45
L30,60 L25,45 L10,40 Z" fill="#1d4ed8" transform="scale(0.8)
translate(15,10)"/><path d="M65,35 L70,20 L75,35 L90,40 L75,45 L70,60 L65,45 L50,40
Z" fill="#1d4ed8" transform="scale(0.8) translate(35,10)"/><path d="M25,65 Q50,90
75,65" fill="#be123c" stroke="#9f1239" stroke-width="2"/><path d="M30,65 Q50,75
70,65" fill="white" opacity="0.6"/><circle cx="20" cy="55" r="5" fill="#f43f5e"
opacity="0.4"/><circle cx="80" cy="55" r="5" fill="#f43f5e"
opacity="0.4"/></svg></div>
<span class="text-base text-white font-bold tracking-
wide">Senang</span>
</button>
<button onclick="selectMood(this, 'neutral')" class="mood-
btn neumorph-btn p-4 rounded-3xl flex flex-col items-center gap-2 border-4 border-
pink-400 !bg-gradient-to-br !from-pink-500 !to-pink-700 hover:!from-pink-600
hover:!to-pink-800 shadow-lg transform transition hover:scale-110 group">
<div class="w-16 h-16 filter drop-shadow-md group-
hover:rotate-12 transition"><svg viewBox="0 0 100 100"><defs><radialGradient
id="gradNeutral" cx="40%" cy="40%" r="55%" fx="25%" fy="25%"><stop offset="0%"
stop-color="#fde047" /><stop offset="100%" stop-color="#d97706"
/></radialGradient></defs><circle cx="50" cy="50" r="45" fill="url(#gradNeutral)"
stroke="#b45309" stroke-width="2"/><circle cx="35" cy="40" r="6"
fill="#374151"/><circle cx="65" cy="40" r="6" fill="#374151"/><line x1="35" y1="70"
x2="65" y2="70" stroke="#374151" stroke-width="4" stroke-linecap="round"/><line
x1="30" y1="30" x2="40" y2="30" stroke="#374151" stroke-width="2"/><line x1="60"
y1="30" x2="70" y2="30" stroke="#374151" stroke-width="2"/></svg></div>
<span class="text-base text-white font-bold tracking-
wide">Biasa</span>
</button>
<button onclick="selectMood(this, 'confused')" class="mood-
btn neumorph-btn p-4 rounded-3xl flex flex-col items-center gap-2 border-4 border-
pink-400 !bg-gradient-to-br !from-pink-500 !to-pink-700 hover:!from-pink-600
hover:!to-pink-800 shadow-lg transform transition hover:scale-110 group">
<div class="w-16 h-16 filter drop-shadow-md group-
hover:animate-wiggle"><svg viewBox="0 0 100 100"><defs><radialGradient
id="gradConfused" cx="40%" cy="40%" r="55%" fx="25%" fy="25%"><stop offset="0%"
stop-color="#fef9c3" /><stop offset="100%" stop-color="#ca8a04"
/></radialGradient></defs><circle cx="50" cy="50" r="45" fill="url(#gradConfused)"
stroke="#a16207" stroke-width="2"/><circle cx="35" cy="40" r="7"
fill="#374151"/><circle cx="65" cy="38" r="5" fill="#374151"/><path d="M28,28
Q35,20 42,28" fill="none" stroke="#374151" stroke-width="2"/><line x1="60" y1="28"
x2="70" y2="30" stroke="#374151" stroke-width="2"/><path d="M35,70 Q45,60 50,70
T65,70" fill="none" stroke="#374151" stroke-width="3" stroke-linecap="round"/><path
d="M75,25 Q70,20 75,15 Q80,20 75,25" fill="#60a5fa" opacity="0.8"/></svg></div>
<span class="text-base text-white font-bold tracking-
wide">Bingung</span>
</button>
</div>
<div class="mb-8">
<label class="block text-left text-lg font-bold text-rose-
800 mb-2 ml-2">Pesan atau Kesan (Opsional):</label>
<textarea id="feedback-text" class="w-full p-4 rounded-xl
border-2 border-rose-300 focus:border-rose-500 outline-none text-gray-700 shadow-
inner bg-white/60 resize-none font-sans" rows="3" placeholder="Tuliskan
pengalamanmu di sini..."></textarea>
</div>
<button onclick="submitFeedback()" class="neumorph-btn success
px-10 py-3 text-xl w-full md:w-auto shadow-lg border-2 border-green-400 !bg-
gradient-to-br !from-green-500 !to-green-700 hover:!from-green-600 hover:!to-green-
800">Kirim & Selesai <i class="fas fa-paper-plane"></i></button>
</div>
</div>
</div>

<!-- FINAL -->


<div id="scene-final" class="hidden-scene scene-container w-full max-w-4xl
mx-auto text-center">
<div class="neumorph-panel p-10 md:p-16 flex flex-col items-center
justify-center min-h-[70vh] relative overflow-visible bg-white/80">
<div class="absolute inset-0 pointer-events-none overflow-hidden
rounded-2xl">
<div class="absolute top-10 left-10 text-4xl animate-bounce"
style="animation-duration: 2s;">🎉</div>
<div class="absolute top-20 right-20 text-5xl animate-spin"
style="animation-duration: 5s;">✨</div>
<div class="absolute bottom-10 left-20 text-4xl animate-
pulse">🎊</div>
</div>
<div class="text-9xl mb-6 animate-bounce filter drop-shadow-xl">🎉
</div>
<h2 class="text-5xl font-bold text-blue-800 mb-6 drop-shadow-
sm">Thank You!</h2>
<p class="text-2xl text-gray-600 mb-12 font-bold">Kamu telah
menyelesaikan petualangan ini dengan hebat.<br>Sampai jumpa lagi!</p>
<button onclick="[Link]()" class="neumorph-btn px-14 py-4
text-xl !bg-gradient-to-br !from-pink-600 !to-pink-800 hover:!from-pink-700 hover:!
to-pink-900 border-4 border-pink-400 relative overflow-visible group shadow-2xl
transition transform hover:scale-110 mb-4">
<div class="absolute -top-5 -left-5 text-5xl animate-spin
pointer-events-none" style="animation-duration: 12s;">🌸</div><div class="absolute -
bottom-4 -right-5 text-5xl animate-bounce pointer-events-none" style="animation-
duration: 3s;">🌺</div><div class="absolute top-1/2 -right-8 transform -translate-y-
1/2 text-4xl animate-pulse pointer-events-none">🌷</div><div class="absolute -
bottom-6 left-1/2 transform -translate-x-1/2 text-3xl animate-wiggle pointer-
events-none">🌻</div>
<span class="text-white drop-shadow-md leading-none tracking-
wider" style="font-family: 'Bangers', cursive; font-size: 3rem;">Main Lagi</span>
</button>
</div>
</div>

</div>

<!-- JAVASCRIPT LOGIC -->


<script>
// GLOBAL
var audioCtx = null;
var noiseBuffer = null;
var bgmInterval = null;

function initAudio() {
if (!audioCtx) {
const AudioContext = [Link] ||
[Link];
audioCtx = new AudioContext();
const bufferSize = [Link] * 2;
noiseBuffer = [Link](1, bufferSize,
[Link]);
const data = [Link](0);
for (let i = 0; i < bufferSize; i++) { data[i] = [Link]() * 2
- 1; }
}
if ([Link] === 'suspended') [Link]();
}

function startMusicOnInteraction() { initAudio(); }

const state = {
scene: 'welcome',
musicOn: false,
scores: { g1: 0, g2: 0, g3: 0 },
slides: { current: 0 },
g2Index: 0,
g3Pos: 1,
g3QuestionIdx: 0,
g1Selection: null,
feedback: { mood: '', text: '' }
};

// PARALLAX & SPARKLES


[Link]('mousemove', (e) => {
// Sparkles
if ([Link]() < 0.1) {
const sparkle = [Link]('div');
[Link] = 'sparkle';
[Link] = [Link] + 'px';
[Link] = [Link] + 'px';
[Link](sparkle);
setTimeout(() => [Link](), 800);
}

// Parallax on Welcome Screen


if ([Link] === 'welcome') {
const moveX = ([Link] - [Link]/2) * 0.02;
const moveY = ([Link] - [Link]/2) * 0.02;

const sky = [Link]('welcome-sky');


const school = [Link]('welcome-school');
if (sky) [Link] = `translate(${moveX}px, ${moveY}px)`;
if (school) [Link] = `translate(${-moveX * 0.5}px,
${-moveY * 0.5}px)`;
}
});

// EASTER EGG
function toggleSunGlasses() {
const glasses = [Link]('sun-glasses');
if (glasses) {
[Link]('hidden');
playClick();
}
}

const feedbackMessages = {
correct: ["Excellent! 🌟", "Great Job! 👍", "Spot On! 🎯", "You're
Amazing! 🚀", "Fantastic! 🔥", "Wow, Cool! 🤩", "Perfect Score! 💯", "Perfect! ✨"],
wrong: ["Try Again! 💪", "Almost There! 🤏", "Don't Give Up! ✨", "Oops,
Not Quite 🙈", "Keep Going! 🌈", "Think Again 🤔", "Not Quite, Try Again! 🚀"]
};

function getRandomFeedback(isCorrect) {
const list = isCorrect ? [Link] :
[Link];
return list[[Link]([Link]() * [Link])];
}

function playApplause() {
if (![Link] && !audioCtx) return;
playCorrect();
const now = [Link];
for (let i = 0; i < 15; i++) {
const source = [Link]();
[Link] = noiseBuffer;
const gain = [Link]();
const filter = [Link]();
[Link] = 'bandpass';
[Link] = 800 + [Link]() * 400;
const start = now + [Link]() * 0.4;
const duration = 0.1 + [Link]() * 0.05;
[Link](0, start);
[Link](0.15, start + 0.01);
[Link](0.001, start + duration);
[Link](filter); [Link](gain);
[Link]([Link]);
[Link](start); [Link](start + duration + 0.1);
}
}

function triggerCelebration() {
const emojis = ['👏', '🎉', '🌟', '🤩', '💯', '✨'];
const container = [Link];
for (let i = 0; i < 15; i++) {
const el = [Link]('div');
[Link] = emojis[[Link]([Link]() * [Link])];
[Link] = 'celebration-emoji text-4xl md:text-6xl';
[Link] = [Link]() * 80 + 10 + 'vw';
[Link] = [Link]() * 60 + 20 + 'vh';
[Link] = [Link]() * 0.5 + 's';
[Link](el);
setTimeout(() => [Link](), 1500);
}
}

function speakText(input, defaultLang = 'en-US') {


if (![Link]) return;
[Link]();
const queue = [Link](input) ? input : [{ text: input, lang:
defaultLang }];
[Link](item => {
const utterance = new SpeechSynthesisUtterance([Link]);
[Link] = [Link] || defaultLang;
[Link] = 0.9; [Link] = 1.1; [Link] = 1;
const voices = [Link]();
if ([Link] > 0) {
const targetLang = [Link];
const specificVoice = [Link](v => [Link] === targetLang)
|| [Link](v => [Link](targetLang));
if (specificVoice) [Link] = specificVoice;
}
[Link](utterance);
});
}

function playTone(freq, type, duration, vol = 0.1) {


if (!audioCtx) return;
const osc = [Link]();
const gainNode = [Link]();
[Link] = type;
[Link](freq, [Link]);
[Link](0, [Link]);
[Link](vol, [Link] +
0.05);
[Link](0.001, [Link]
+ duration);
[Link](gainNode);
[Link]([Link]);
[Link]();
[Link]([Link] + duration);
}

function startBGM() {
if (bgmInterval) clearInterval(bgmInterval);
playMelodySequence();
bgmInterval = setInterval(playMelodySequence, 1900);
}

function stopBGM() {
if (bgmInterval) { clearInterval(bgmInterval); bgmInterval = null; }
}

function playMelodySequence() {
if (![Link]) return;
const volume = 0.07;
const type = 'square';
// Funky Loop
playTone(523.25, type, 0.1, volume);
setTimeout(() => playTone(659.25, type, 0.1, volume), 150);
setTimeout(() => playTone(783.99, type, 0.1, volume), 300);
setTimeout(() => playTone(880.00, type, 0.2, volume), 450);
setTimeout(() => playTone(698.46, type, 0.1, volume), 700);
setTimeout(() => playTone(587.33, type, 0.1, volume), 850);
setTimeout(() => playTone(493.88, type, 0.1, volume), 1000);
setTimeout(() => playTone(392.00, type, 0.1, volume), 1150);
setTimeout(() => playTone(523.25, type, 0.1, volume), 1400);
setTimeout(() => playTone(783.99, type, 0.1, volume), 1550);
setTimeout(() => playTone(1046.50, type, 0.3, volume), 1700);
}

function playCorrect() { if([Link] || audioCtx) { playTone(600,


'sine', 0.1, 0.2); setTimeout(() => playTone(800, 'sine', 0.3, 0.2), 100); } }
function playWrong() { if([Link] || audioCtx) { playTone(200,
'sawtooth', 0.2, 0.15); setTimeout(() => playTone(150, 'sawtooth', 0.3, 0.15),
150); } }
function playClick() { if([Link] || audioCtx) { playTone(400,
'triangle', 0.1, 0.1); } }

function toggleMusic() {
initAudio();
[Link] = ![Link];
const btn = [Link]('music-icon');
if ([Link]) { [Link] = "fas fa-volume-up"; startBGM(); }
else { [Link] = "fas fa-volume-mute"; stopBGM(); }
}

const materials = [
{ sub: 'I', poss: 'My', icon: ' ', bg: 'bg-pink-100/50', desc:
'Digunakan ketika "SAYA" memiliki sesuatu.', examples: ["I have a book. It is
<b>my</b> book.", "This is <b>my</b> new bag.", "<b>My</b> name is Budi.", "I love
<b>my</b> cat."] },
{ sub: 'You', poss: 'Your', icon: '🫵', bg: 'bg-green-100/50', desc:
'Digunakan ketika "KAMU" memiliki sesuatu.', examples: ["You have a pen. It is
<b>your</b> pen.", "Is this <b>your</b> bike?", "Open <b>your</b> book.", "Wash
<b>your</b> hands."] },
{ sub: 'He', poss: 'His', icon: '👦', bg: 'bg-blue-100/50', desc: 'Milik
DIA (Laki-laki).', examples: ["He has a car. It is <b>his</b> car.", "<b>His</b>
hair is short.", "He likes <b>his</b> job.", "Budi plays <b>his</b> guitar."] },
{ sub: 'She', poss: 'Her', icon: '👧', bg: 'bg-purple-100/50', desc:
'Milik DIA (Perempuan).', examples: ["She has a doll. It is <b>her</b> doll.",
"<b>Her</b> dress is red.", "Sinta cooks <b>her</b> food.", "She loves <b>her</b>
mom."] },
{ sub: 'It', poss: 'Its', icon: '🐱', bg: 'bg-orange-100/50', desc:
'Milik HEWAN atau BENDA.', examples: ["The cat eats <b>its</b> food.", "The tree
loses <b>its</b> leaves.", "The dog wags <b>its</b> tail.", "The car has <b>its</b>
wheels."] },
{ sub: 'We', poss: 'Our', icon: '', bg: 'bg-teal-100/50', desc: 'Milik
KITA/KAMI.', examples: ["We have a house. It is <b>our</b> house.", "This is
<b>our</b> class.", "We love <b>our</b> country.", "<b>Our</b> teacher is
nice."] },
{ sub: 'They', poss: 'Their', icon: '👥', bg: 'bg-red-100/50', desc:
'Milik MEREKA.', examples: ["They have books. Those are <b>their</b> books.",
"<b>Their</b> house is big.", "They play with <b>their</b> friends.", "Look at
<b>their</b> shoes."] }
];

const g1Data = [
{ id: 1, q: "I have a pen. It is ___ pen.", a: "My" }, { id: 2, q: "You
look tired. Wash ___ face.", a: "Your" },
{ id: 3, q: "He is smart. ___ grades are good.", a: "His" }, { id: 4,
q: "She is a singer. ___ voice is nice.", a: "Her" },
{ id: 5, q: "The cat is hungry. This is ___ food.", a: "Its" }, { id:
6, q: "We live here. This is ___ house.", a: "Our" },
{ id: 7, q: "They are students. ___ school is big.", a: "Their" },
{ id: 8, q: "Budi (Boy) lost ___ bag.", a: "His" }
];

const g2Data = [
{ q: "I have a brother. ___ name is Andi.", opts: ["My", "His", "Her"],
a: 1 }, { q: "We are students. This is ___ class.", opts: ["Their", "Our", "We"],
a: 1 },
{ q: "She washes ___ hands.", opts: ["Her", "She", "His"], a: 0 }, { q:
"You must do ___ homework.", opts: ["You", "My", "Your"], a: 2 },
{ q: "The dog hurts ___ leg.", opts: ["It", "Its", "His"], a: 1 }, { q:
"They visit ___ grandmother.", opts: ["Their", "There", "They"], a: 0 },
{ q: "I love ___ country, Indonesia.", opts: ["My", "Me", "I"], a: 0 },
{ q: "Doni and Dini are twins. ___ birthday is in May.", opts: ["His", "Her",
"Their"], a: 2 },
{ q: "Look at the tree! ___ leaves are green.", opts: ["It", "Its",
"My"], a: 1 }, { q: "Mr. Budi drives ___ car to work.", opts: ["Her", "Him",
"His"], a: 2 }
];

const memoryData = [
{ id: 1, text: "I", pair: "My" }, { id: 1, text: "My", pair: "I" },
{ id: 2, text: "You", pair: "Your" }, { id: 2, text: "Your", pair: "You" },
{ id: 3, text: "He", pair: "His" }, { id: 3, text: "His", pair: "He" },
{ id: 4, text: "She", pair: "Her" }, { id: 4, text: "Her", pair: "She" },
{ id: 5, text: "We", pair: "Our" }, { id: 5, text: "Our", pair: "We" },
{ id: 6, text: "They", pair: "Their" }, { id: 6, text: "Their", pair: "They" }
];

function navigate(sceneId) {
playClick();
[Link]('.scene-container').forEach(el =>
[Link]('hidden-scene'));
[Link](`scene-${sceneId}`).[Link]('hidden-
scene');

const nav = [Link]('nav-bar');


if (sceneId === 'welcome') [Link]('hidden-scene'); else
[Link]('hidden-scene');

[Link] = sceneId;
[Link](0, 0);

if (sceneId === 'material') renderSlide(0);


if (sceneId === 'games-menu') { /* reset games? */ }
}

function goBack() {
playClick();
if ([Link] === 'welcome') return;
if (['game1', 'game2', 'game3'].includes([Link])) {
[Link]('modal-
confirm').[Link]('hidden');
[Link]('modal-confirm').[Link]('flex');
} else {
if ([Link] === 'menu') navigate('welcome'); else
navigate('menu');
}
}

function closeConfirmModal() {
playClick();
[Link]('modal-confirm').[Link]('hidden');
[Link]('modal-confirm').[Link]('flex');
}

function confirmExitGame() { playClick(); closeConfirmModal();


navigate('games-menu'); }

function renderSlide(index) {
if (index < 0 || index >= [Link]) return;
[Link] = index;
const m = materials[index];
const listContainer = [Link]('pronoun-list');
[Link] = [Link]((item, idx) => `<div
onclick="renderSlide(${idx})" class="p-2 rounded cursor-pointer transition ${idx
=== index ? 'bg-pink-500 text-white font-bold shadow-md' : 'bg-white/50 hover:bg-
white text-gray-700'}">${[Link]} ➔ ${[Link]}</div>`).join('');
[Link]('mat-icon').textContent = [Link];
[Link]('mat-title').innerHTML = `${[Link]} <span
class="text-gray-400 text-4xl">➔</span> ${[Link]}`;
[Link]('mat-desc').textContent = [Link];
[Link]('mat-examples').innerHTML = [Link](ex
=> {
const cleanText = [Link](/<[^>]*>/g, '').replace(/'/g, "\\'");
return `<li onclick="speakText('${cleanText}')" class="group
border-b border-yellow-200/60 pb-2 mb-1 flex items-start gap-3 cursor-pointer
hover:bg-white/40 p-2 rounded-lg transition-all duration-200 transform hover:scale-
[1.02] shadow-sm hover:shadow-md"><button class="bg-blue-100 text-blue-600 w-8 h-8
rounded-full flex items-center justify-center flex-shrink-0 group-hover:bg-blue-500
group-hover:text-white transition-colors shadow-sm"><i class="fas
fa-volume-up"></i></button><span class="text-gray-900 group-hover:text-blue-800
font-bold leading-tight self-center">${ex}</span></li>`;
}).join('');
[Link]('slide-indicator').textContent = `${index +
1}/${[Link]}`;
const display = [Link]('slide-display');
[Link] = `flex-grow rounded-xl border-4 p-6 relative
overflow-hidden flex flex-col items-center text-center shadow-xl transition-all
duration-500 backdrop-blur-md ${[Link]} border-white/60`;
}

function nextSlide() { renderSlide([Link] + 1 <


[Link] ? [Link] + 1 : 0); playClick(); }
function prevSlide() { renderSlide([Link] - 1 >= 0 ?
[Link] - 1 : [Link] - 1); playClick(); }

function startGame(id) { playClick(); if (id === 1) initGame1(); if (id ===


2) initGame2(); if (id === 3) initGame3(); navigate(`game${id}`); }

function initGame1() {
[Link].g1 = 0;
updateScoreDisplay('g1');
[Link]('btn-finish-g1').[Link]('hidden');
const questions = [...g1Data].sort(() => 0.5 - [Link]()).slice(0,
6);
const answers = [Link](q => ({ val: q.a, id: [Link] })).sort(() =>
0.5 - [Link]());
const dropArea = [Link]('g1-drop-area');

// Updated to include Flower Sticker in each Drop Zone


[Link] = [Link](q => `
<div class="drop-zone bg-white/90 backdrop-blur-sm p-4 rounded-lg
border-2 border-gray-300 shadow-sm flex flex-col justify-center items-center
cursor-pointer hover:border-blue-400 relative overflow-hidden" data-id="${[Link]}"
onclick="handleDropZoneClick(this)">
<div class="absolute top-1 right-1 text-xl opacity-60">🌸</div>
<p class="text-lg font-bold text-center pointer-events-none
text-gray-800 relative z-10">${[Link]('___', '<span class="inline-block w-12
border-b-2 border-black">?</span>')}</p>
<div class="filled-answer hidden mt-2 text-blue-600 font-bold
text-xl bg-blue-100 px-3 py-1 rounded relative z-10"></div>
</div>
`).join('');

const dragArea = [Link]('g1-drag-area');


[Link] = [Link](a => `<button class="draggable-item
neumorph-btn px-4 py-2 text-lg m-1 !bg-gradient-to-br !from-sky-400 !to-sky-500
hover:!from-sky-500 hover:!to-sky-600 border-2 border-sky-200 text-white shadow-md"
data-val="${[Link]}" data-id="${[Link]}"
onclick="handleAnswerClick(this)">${[Link]}</button>`).join('');
}

function handleAnswerClick(el) {
playClick();
[Link]('.draggable-item').forEach(b =>
[Link]('selected'));
[Link]('selected');
state.g1Selection = { val: [Link], id: [Link], el: el };
[Link]('g1-message').textContent = `Pilih kotak untuk
"${[Link]}"`;
[Link]('g1-message').className = "mt-auto text-center
font-bold text-blue-600 animate-pulse";
}

function handleDropZoneClick(zone) {
if (!state.g1Selection) { [Link]('shake'); setTimeout(() =>
[Link]('shake'), 300); return; }
const qId = [Link];
const aId = [Link];
if (qId === aId) {
playApplause(); triggerCelebration();
[Link]('border-gray-300');
[Link]('border-green-500', 'bg-green-50');
[Link]('p').innerHTML =
[Link]('p').[Link]('?', [Link]);
[Link](); state.g1Selection = null;
const msg = getRandomFeedback(true);
[Link]('g1-message').textContent = msg;
[Link]('g1-message').className = "mt-auto text-
center font-bold text-green-600 animate-bounce";
speakText(msg);
[Link] = null; [Link]('cursor-pointer');
[Link].g1 += 10; updateScoreDisplay('g1');
if ([Link]('g1-drag-area').[Link] === 0)
{
setTimeout(() => { triggerCelebration();
[Link]('btn-finish-g1').[Link]('hidden'); }, 1000);
}
} else {
playWrong(); [Link]('shake', 'border-red-400');
setTimeout(() => [Link]('shake', 'border-red-400'), 500);
const msg = getRandomFeedback(false);
[Link]('g1-message').textContent = msg;
[Link]('g1-message').className = "mt-auto text-
center font-bold text-red-600";
speakText(msg);
}
}

function initGame2() {
[Link].g2 = 0; state.g2Index = 0; updateScoreDisplay('g2');
renderG2Question();
}

function renderG2Question() {
const q = g2Data[state.g2Index];
[Link]('g2-q-num').textContent = state.g2Index + 1;
[Link]('g2-question').textContent = q.q;
[Link]('g2-progress').[Link] = `$
{((state.g2Index) / [Link]) * 100}%`;
const skyZone = [Link]('g2-sky-zone');
[Link] = '';
const colors = ['from-red-400 to-red-600', 'from-blue-400 to-blue-600',
'from-green-400 to-green-600', 'from-yellow-400 to-orange-500', 'from-purple-400
to-purple-600'];
const positions = [20, 50, 80];
for (let i = [Link] - 1; i > 0; i--) { const j =
[Link]([Link]() * (i + 1)); [positions[i], positions[j]] = [positions[j],
positions[i]]; }
[Link]((opt, idx) => {
const balloon = [Link]('div');
const colorClass = colors[idx % [Link]];
[Link] = `balloon-item bg-gradient-to-br ${colorClass}`;
[Link] = `<span>${opt}</span>`;
[Link] = `${positions[idx]}%`;
[Link] = 'translateX(-50%)';
const duration = 8 + [Link]() * 4;
[Link] = `${duration}s`;
[Link] = `${[Link]() * 1}s`;
[Link] = () => checkG2Answer(idx, balloon);
[Link](balloon);
});
[Link]('g2-feedback').[Link]('hidden');
[Link]('g2-feedback').[Link]('flex');
}

function checkG2Answer(idx, balloonEl) {


const q = g2Data[state.g2Index];
const isCorrect = idx === q.a;
[Link]('balloon-pop');
playClick();
setTimeout(() => {
const fb = [Link]('g2-feedback');
const face = [Link]('g2-face');
const msg = [Link]('g2-msg');
[Link]('hidden'); [Link]('flex');
if (isCorrect) {
playApplause(); triggerCelebration();
[Link].g2 += 10; [Link] = "🎈";
const msgText = getRandomFeedback(true);
[Link] = msgText; speakText(msgText);
[Link] = "text-3xl font-bold mb-4 text-green-500 drop-
shadow-md";
} else {
playWrong(); [Link] = "💨";
const msgText = getRandomFeedback(false);
speakText(msgText);
[Link] = `${msgText}<br><span class="text-lg text-gray-
600 font-normal mt-2 block bg-gray-100 px-3 py-1 rounded-lg">Jawaban: <b>$
{[Link][q.a]}</b></span>`;
[Link] = "text-3xl font-bold mb-4 text-red-500 drop-
shadow-md";
}
updateScoreDisplay('g2');
}, 300);
}

function nextG2Question() {
state.g2Index++;
if (state.g2Index < [Link]) { renderG2Question(); }
else { [Link]('g2-progress').[Link] = "100%";
setTimeout(() => navigate('evaluation'), 500); calculateFinal(); }
}

function initGame3() {
[Link].g3 = 0; matchCount = 0; updateScoreDisplay('g3');
[Link]('g3-matches').textContent = 0;
[Link]('g3-win-overlay').[Link]('hidden');
[Link]('g3-win-overlay').[Link]('flex');
const board = [Link]('g3-board'); [Link] =
'';
const cards = [...memoryData].sort(() => 0.5 - [Link]());
[Link](item => {
const card = [Link]('div');
[Link]('memory-card'); [Link] = [Link];

// Added Flower Sticker to Memory Cards


[Link] = `
<div class="front-face relative">
<div class="absolute top-1 right-1 text-sm
opacity-50">🌹</div>
<div class="text-3xl mb-1 text-pink-500">❓</div>
${[Link]}
</div>
<div class="back-face relative">
<div class="absolute top-1 left-1 text-xs
opacity-50">🌸</div>
<i class="fas fa-star text-yellow-300 drop-shadow-md"></i>
</div>
`;

[Link]('click', flipCard); [Link](card);


});
}

let hasFlippedCard = false; let lockBoard = false; let firstCard,


secondCard; let matchCount = 0;

function flipCard() {
if (lockBoard) return; if (this === firstCard) return;
[Link]('flip'); playClick();
if (!hasFlippedCard) { hasFlippedCard = true; firstCard = this; return;
}
secondCard = this; checkForMatch();
}

function checkForMatch() {
let isMatch = [Link] === [Link];
if (isMatch) { disableCards(); } else { unflipCards(); }
}

function disableCards() {
[Link]('click', flipCard);
[Link]('click', flipCard);
[Link]('matched');
[Link]('matched');
playCorrect(); const msg = getRandomFeedback(true); speakText(msg);
[Link].g3 += 10; matchCount++; updateScoreDisplay('g3');
[Link]('g3-matches').textContent = matchCount;
resetBoard();
if (matchCount === 6) { setTimeout(() => { playApplause();
triggerCelebration(); [Link]('g3-win-
overlay').[Link]('hidden'); [Link]('g3-win-
overlay').[Link]('flex'); }, 500); }
}

function unflipCards() {
lockBoard = true; playWrong();
setTimeout(() => { [Link]('flip');
[Link]('flip'); resetBoard(); }, 1000);
}

function resetBoard() { [hasFlippedCard, lockBoard] = [false, false];


[firstCard, secondCard] = [null, null]; }

function finishGame(id) { navigate('games-menu'); }


function updateScoreDisplay(game) { [Link](`score-$
{game}`).textContent = [Link][game]; }

function calculateFinal() {
[Link]('res-g1').textContent = [Link].g1;
[Link]('res-g2').textContent = [Link].g2;
[Link]('res-g3').textContent = [Link].g3;
const total = [Link].g1 + [Link].g2 + [Link].g3;
[Link]('final-score').textContent = total;
const mt = [Link]('motivation-text');
if (total > 200) [Link] = "Luar Biasa! Kamu Juara! 🏆"; else if
(total > 100) [Link] = "Bagus Sekali! Terus Belajar! 👍"; else
[Link] = "Jangan Menyerah! Coba Lagi! 💪";
}

function selectMood(btn, mood) {


playClick(); [Link] = mood;
[Link]('.mood-btn').forEach(b =>
[Link]('selected')); [Link]('selected');
}

function submitFeedback() {
playClick(); [Link] = [Link]('feedback-
text').value;
navigate('final'); playApplause(); setTimeout(() => speakText("Thank
You!"), 500);
}

// --- VISUALS ---


const canvas = [Link]('bg-canvas'); const ctx =
[Link]('2d'); let particles = [];
function resizeCanvas() { [Link] = [Link]; [Link] =
[Link]; }
[Link]('resize', resizeCanvas); resizeCanvas();
class Particle {
constructor() { this.x = [Link]() * [Link]; this.y =
[Link]() * [Link]; [Link] = [Link]() * 20 + 5; [Link] =
[Link]() * 2 - 1; [Link] = [Link]() * 2 - 1; [Link] = `rgba(255,
255, 255, ${[Link]() * 0.3})`; [Link] = [Link]() > 0.5 ? 'circle' :
'square'; }
update() { this.x += [Link]; this.y += [Link]; if (this.x >
[Link]) this.x = 0; if (this.x < 0) this.x = [Link]; if (this.y >
[Link]) this.y = 0; if (this.y < 0) this.y = [Link]; }
draw() { [Link] = [Link]; [Link](); if ([Link]
=== 'circle') { [Link](this.x, this.y, [Link], 0, [Link] * 2); } else
{ [Link](this.x, this.y, [Link], [Link]); } [Link](); }
}
function initParticles() { for (let i = 0; i < 50; i++) [Link](new
Particle()); }
function animateBg() { [Link](0, 0, [Link], [Link]);
[Link](p => { [Link](); [Link](); });
requestAnimationFrame(animateBg); }
initParticles(); animateBg();
</script>
</body>
</html>

You might also like