feat: Add audio assets, UI escape room polish, requirements, and INSTALL.md

This commit is contained in:
Maxi
2026-10-29 08:51:59 +01:00
parent c07c0e10b9
commit 3d30d0812a
17 changed files with 1367 additions and 180 deletions
+114 -31
View File
@@ -39,13 +39,16 @@
<div class="brew-container">
<!-- Recipe Instruction Scroll -->
<div class="recipe-book">
<span id="stepBadge" class="recipe-step-badge">Schritt 1: Zutaten zugeben</span>
<span id="stepBadge" class="recipe-step-badge">Schritt 1: Zutaten dosieren</span>
<h3 id="stepInstruction" style="color: var(--gold); margin: 0.25rem 0; font-size: 1.25rem;">
Gib die 4 Essenzen in den Kessel!
Dosiere die 3 Essenzen nach Snapes Rezeptur!
</h3>
<p id="stepSubtext" style="color: var(--text-dim); font-size: 0.9rem; margin: 0;">
Tippe auf die Zutaten unten, um sie in den Kessel zu werfen.
<p id="stepSubtext" style="color: var(--text-dim); font-size: 0.9rem; margin: 0 0 0.4rem 0;">
Löse Snapes Rätselnotiz, um die Mengenangaben für Felix Felicis herauszufinden.
</p>
<button type="button" class="btn-subtle" style="font-size: 0.9rem; border-color: var(--gold); color: var(--gold); padding: 0.4rem 0.9rem;" onclick="openRecipeRiddleModal()">
📜 Snapes Rezeptur-Notiz öffnen
</button>
</div>
<!-- The SVG Cauldron Stage -->
@@ -125,36 +128,81 @@
</svg>
</div>
<!-- Step 1: Ingredient Shelf & Counter Bar -->
<div id="step1Wrapper" style="width: 100%; display: flex; flex-direction: column; align-items: center; gap: 0.6rem;">
<div style="font-size: 0.9rem; color: var(--gold); font-weight: bold;">
🧪 Essenzen im Kessel: <span id="totalIngredientsCount">0</span> / 4
<!-- Step 1: Ingredient Dosage Shelf & +/- Controls -->
<div id="step1Wrapper" style="width: 100%; display: flex; flex-direction: column; align-items: center; gap: 0.75rem;">
<div style="font-size: 0.95rem; color: var(--gold); font-weight: bold; text-align: center;">
⚗️ Dosiere die Essenzen laut Snapes Notiz:
</div>
<div id="ingredientsShelf" class="ingredients-shelf">
<button type="button" class="ingredient-btn" id="ingDragon" onclick="addIngredient('dragon')">
<span class="ing-icon">🐉</span>
<span class="ing-name">Drachenblut</span>
<span class="ing-count" id="countDragon">0 / 2</span>
</button>
<button type="button" class="ingredient-btn" id="ingMandrake" onclick="addIngredient('mandrake')">
<span class="ing-icon">🌿</span>
<span class="ing-name">Alraunenblatt</span>
<span class="ing-count" id="countMandrake">0 / 1</span>
</button>
<button type="button" class="ingredient-btn" id="ingStar" onclick="addIngredient('star')">
<span class="ing-icon">✨</span>
<span class="ing-name">Sternenstaub</span>
<span class="ing-count" id="countStar">0 / 1</span>
</button>
<div class="dose-grid">
<!-- Dragon Blood -->
<div class="dose-card">
<span style="font-size: 2.2rem;">🐉</span>
<strong style="color: var(--text-light); font-size: 0.85rem;">Drachenblut</strong>
<div class="dose-controls">
<button type="button" class="dose-btn" onclick="adjustDose('dragon', -1)">-</button>
<span id="doseValDragon" class="dose-val">0</span>
<button type="button" class="dose-btn" onclick="adjustDose('dragon', 1)">+</button>
</div>
</div>
<!-- Mandrake -->
<div class="dose-card">
<span style="font-size: 2.2rem;">🌿</span>
<strong style="color: var(--text-light); font-size: 0.85rem;">Alraune</strong>
<div class="dose-controls">
<button type="button" class="dose-btn" onclick="adjustDose('mandrake', -1)">-</button>
<span id="doseValMandrake" class="dose-val">0</span>
<button type="button" class="dose-btn" onclick="adjustDose('mandrake', 1)">+</button>
</div>
</div>
<!-- Star Dust -->
<div class="dose-card">
<span style="font-size: 2.2rem;">✨</span>
<strong style="color: var(--text-light); font-size: 0.85rem;">Sternenstaub</strong>
<div class="dose-controls">
<button type="button" class="dose-btn" onclick="adjustDose('star', -1)">-</button>
<span id="doseValStar" class="dose-val">0</span>
<button type="button" class="dose-btn" onclick="adjustDose('star', 1)">+</button>
</div>
</div>
</div>
<button type="button" id="brewVerifyBtn" class="btn-magical" style="padding: 0.85rem 1.8rem; font-size: 1.1rem; width: 100%; max-width: 340px;" onclick="verifyAndMixIngredients()">
🧪 Essenzen in den Kessel geben & prüfen
</button>
</div>
<!-- Step 2: Stir Control Panel -->
<div id="stirPanel" style="display: none; flex-direction: column; align-items: center; gap: 0.5rem; width: 100%;">
<button type="button" id="stirBtn" class="btn-magical" style="padding: 0.9rem 1.8rem; font-size: 1.15rem; width: 100%; max-width: 320px;" onclick="doStir()">
🥄 Kessel umrühren! (<span id="stirCount">0</span> / 3)
</button>
<span style="color: var(--text-dim); font-size: 0.85rem;">Tippe auf den Button, um den Sud umzurühren</span>
<!-- Step 2: Two-Way Stirring Gauge (Links ↺ und Rechts ↻) -->
<div id="stirPanel" style="display: none; flex-direction: column; align-items: center; gap: 0.75rem; width: 100%;">
<div class="stir-gauge-wrapper">
<div style="font-size: 0.95rem; color: var(--gold); font-weight: bold; text-align: center;">
🥄 Rühr-Takt: <span id="stirPhaseLabel" style="color: #4cc9f0;">↺ LINKS (Phase 1)</span>
</div>
<div class="stir-track">
<div class="stir-target-zone"></div>
<div id="stirIndicatorBar" class="stir-indicator-bar"></div>
</div>
<div style="display: flex; justify-content: space-between; width: 100%; font-size: 0.78rem; color: var(--text-dim);">
<span>Zu träge</span>
<span style="color: #2ecc71; font-weight: bold;">Ideal (40% - 75%)</span>
<span>Zu wild!</span>
</div>
<div style="font-size: 0.9rem; color: var(--text-light); font-weight: bold;">
Takt gehalten: <strong id="stirTimerVal" style="color: var(--gold);">0.0</strong> / 3.0s
</div>
</div>
<div class="stir-buttons-row">
<button type="button" id="btnStirLeft" class="stir-action-btn active-target" onclick="stirTap('left')">
<span style="font-size: 1.6rem;">↺</span>
<span>Linksherum</span>
</button>
<button type="button" id="btnStirRight" class="stir-action-btn" onclick="stirTap('right')">
<span style="font-size: 1.6rem;">↻</span>
<span>Rechtsherum</span>
</button>
</div>
<span style="color: var(--text-dim); font-size: 0.82rem; text-align: center;">
Tippe rhythmisch, um den Balken im grünen Idealbereich zu halten!
</span>
</div>
<!-- Step 3: Heat Control Panel -->
@@ -179,6 +227,41 @@
</button>
</div>
<!-- Snape Reprimand Modal -->
<div id="snapeReprimandModal" class="snape-reprimand-modal">
<div class="snape-card">
<div class="snape-avatar">🧙‍♂️</div>
<span style="display: inline-block; background: rgba(142, 68, 173, 0.25); border: 1px solid #8e44ad; color: #d2b4de; font-size: 0.8rem; font-weight: bold; padding: 0.2rem 0.75rem; border-radius: 20px; text-transform: uppercase;">
Professor Severus Snape
</span>
<h3 style="color: #e74c3c; margin: 0.5rem 0 0.2rem 0; font-size: 1.35rem;">Kläglicher Fehltritt!</h3>
<div id="snapeReprimandText" class="snape-quote-box">
»Kläglich. Sogar ein Bergtroll mit verbundenen Augen hätte die Mengen besser ergründet.«
</div>
<button type="button" class="btn-magical" style="padding: 0.75rem 1.6rem; font-size: 1.05rem;" onclick="closeSnapeModal()">
🧹 Kessel säubern (Evanesco) & neu ansetzen
</button>
</div>
</div>
<!-- Recipe Riddle Parchment Modal -->
<div id="recipeRiddleModal" class="snape-reprimand-modal">
<div class="snape-card" style="border-color: var(--gold); box-shadow: 0 0 45px rgba(229, 185, 72, 0.4);">
<div style="font-size: 3.2rem; margin-bottom: 0.3rem;">📜✨</div>
<h3 style="color: var(--gold); margin: 0.3rem 0; font-size: 1.4rem;">Snapes Felix-Felicis-Rezeptur</h3>
<div class="snape-quote-box" style="border-color: var(--gold);">
<em>»Drei Essenzen verlangt das flüssige Gold:<br><br>
• 🐉 <strong>Drachenblut:</strong> Die Köpfe des dreiköpfigen Wächters Fluffy (3 Tropfen)<br>
• 🌿 <strong>Alraunenblatt:</strong> Harrys treue Gefährten am Gryffindor-Tisch (Ron & Hermine = 2 Blätter)<br>
• ✨ <strong>Sternenstaub:</strong> Der eine Siegelring des Alchemisten (1 Prise)<br><br>
<strong>Rühren:</strong> 3 Sekunden gleichmäßig LINKS (↺), danach 3 Sekunden RECHTS (↻)! Zu hektisch oder zu heiß zerstört den Sud augenblicklich!«</em>
</div>
<button type="button" class="btn-magical" style="padding: 0.75rem 1.8rem; font-size: 1.05rem;" onclick="closeRecipeRiddleModal()">
➔ Verstanden, zum Kessel
</button>
</div>
</div>
<!-- Success Container -->
<div id="successPanel" style="display: none; text-align: center; margin-top: 1rem; width: 100%;">
<div class="dungeon-card" style="border-color: #2ecc71;">
@@ -199,5 +282,5 @@
{% endblock %}
{% block scripts %}
<script src="/static/js/brew.js?v=5.0"></script>
<script src="/static/js/brew.js?v=6.0"></script>
{% endblock %}