Design: Envelope back with distinct V-flap closure, top-left sender address only, and completely sealed interior
This commit is contained in:
+65
-84
@@ -329,131 +329,110 @@ body {
|
||||
}
|
||||
|
||||
/* =========================================
|
||||
FOUR-FLAP REALISTIC CLOSED ENVELOPE SYSTEM
|
||||
Flaps: Left, Right, Bottom, and Top Flap
|
||||
ENVELOPE BACK WITH V-FLAP CLOSURE
|
||||
- Solid back body
|
||||
- Sender address in top-left
|
||||
- Prominent triangular V-flap
|
||||
- Sketched wax seal at apex
|
||||
========================================= */
|
||||
.envelope-flap {
|
||||
|
||||
/* Solid Envelope Back Body */
|
||||
.envelope-back-body {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* Left Triangular Flap */
|
||||
.envelope-flap.flap-left {
|
||||
background-color: #ebdcb9;
|
||||
border-radius: 6px;
|
||||
background-color: #ebd8ae;
|
||||
background-image:
|
||||
radial-gradient(ellipse at 0% 50%, rgba(255, 255, 255, 0.22) 0%, rgba(130, 95, 45, 0.22) 100%),
|
||||
radial-gradient(ellipse at 50% 60%, rgba(255, 255, 255, 0.22) 0%, rgba(130, 95, 45, 0.22) 100%),
|
||||
url('/static/img/parchment_texture.jpg');
|
||||
background-size: cover;
|
||||
clip-path: polygon(0 0, 50% 50%, 0 100%);
|
||||
border: 1.5px solid #8e6c43;
|
||||
z-index: 3;
|
||||
filter: drop-shadow(2px 0 4px rgba(60, 40, 15, 0.25));
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Right Triangular Flap */
|
||||
.envelope-flap.flap-right {
|
||||
background-color: #ebdcb9;
|
||||
background-image:
|
||||
radial-gradient(ellipse at 100% 50%, rgba(255, 255, 255, 0.22) 0%, rgba(130, 95, 45, 0.22) 100%),
|
||||
url('/static/img/parchment_texture.jpg');
|
||||
background-size: cover;
|
||||
clip-path: polygon(100% 0, 50% 50%, 100% 100%);
|
||||
z-index: 3;
|
||||
filter: drop-shadow(-2px 0 4px rgba(60, 40, 15, 0.25));
|
||||
}
|
||||
|
||||
/* Bottom Flap (Folds up from bottom, overlaps left/right flaps, holds the address) */
|
||||
.envelope-flap.flap-bottom {
|
||||
background-color: #dfcd9f;
|
||||
background-image:
|
||||
radial-gradient(ellipse at 50% 80%, rgba(255, 255, 255, 0.28) 0%, rgba(130, 95, 45, 0.25) 100%),
|
||||
url('/static/img/parchment_texture.jpg');
|
||||
background-size: cover;
|
||||
clip-path: polygon(0 100%, 50% 48%, 100% 100%);
|
||||
z-index: 4;
|
||||
filter: drop-shadow(0 -4px 6px rgba(50, 35, 10, 0.35));
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
justify-content: center;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
.envelope-sketch-border {
|
||||
/* Absender oben links auf der Rückseite (sonst kein Text) */
|
||||
.envelope-sender-block {
|
||||
position: absolute;
|
||||
bottom: 8px;
|
||||
left: 8px;
|
||||
right: 8px;
|
||||
height: 48%;
|
||||
border: 1px dashed rgba(120, 85, 45, 0.4);
|
||||
border-radius: 3px;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* Handwritten Address in Emerald Ink on Envelope Bottom Flap */
|
||||
.envelope-address-block {
|
||||
position: relative;
|
||||
z-index: 5;
|
||||
text-align: center;
|
||||
top: 14px;
|
||||
left: 16px;
|
||||
z-index: 8;
|
||||
text-align: left;
|
||||
font-family: 'Marck Script', 'Caveat', cursive;
|
||||
color: #0d3820; /* Authentic Hogwarts Emerald Ink */
|
||||
padding: 0 15px;
|
||||
text-shadow: 0 0 1px rgba(13, 56, 32, 0.35);
|
||||
max-width: 48%;
|
||||
line-height: 1.25;
|
||||
pointer-events: none;
|
||||
transition: opacity 0.4s ease;
|
||||
}
|
||||
|
||||
.envelope-opened .envelope-sender-block {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.sender-label {
|
||||
display: block;
|
||||
font-size: clamp(0.72rem, 2.2vw, 0.85rem);
|
||||
font-family: 'MedievalSharp', serif;
|
||||
color: #4a6352;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.8px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.addr-school {
|
||||
font-size: clamp(0.85rem, 2.9vw, 1.08rem);
|
||||
.sender-name {
|
||||
font-size: clamp(0.92rem, 2.9vw, 1.15rem);
|
||||
font-weight: 700;
|
||||
color: #082816;
|
||||
margin-bottom: 1px;
|
||||
text-shadow: 0 0 1px rgba(8, 40, 22, 0.35);
|
||||
}
|
||||
|
||||
.addr-recipient {
|
||||
font-size: clamp(1.05rem, 3.4vw, 1.28rem);
|
||||
font-weight: 700;
|
||||
color: #0b3a20;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
.addr-location {
|
||||
font-size: clamp(0.8rem, 2.5vw, 0.96rem);
|
||||
.sender-location {
|
||||
font-size: clamp(0.78rem, 2.4vw, 0.95rem);
|
||||
font-style: italic;
|
||||
color: #1e4530;
|
||||
}
|
||||
|
||||
/* Top Closing Flap (Folds down from top, overlaps all flaps, sealed by wax seal) */
|
||||
.envelope-closing-flap.flap-top {
|
||||
/* Distinct Triangular V-Closure Flap */
|
||||
.envelope-closing-flap.envelope-v-flap {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #e5d4a6;
|
||||
background-color: #dfcd9b;
|
||||
background-image:
|
||||
radial-gradient(ellipse at 50% 20%, rgba(255, 255, 255, 0.35) 0%, rgba(130, 95, 45, 0.25) 100%),
|
||||
radial-gradient(ellipse at 50% 18%, rgba(255, 255, 255, 0.35) 0%, rgba(125, 90, 40, 0.28) 100%),
|
||||
url('/static/img/parchment_texture.jpg');
|
||||
background-size: cover;
|
||||
clip-path: polygon(0 0, 100% 0, 50% 54%);
|
||||
clip-path: polygon(0 0, 100% 0, 50% 56%);
|
||||
transform-origin: top center;
|
||||
transform-style: preserve-3d;
|
||||
transition: transform 0.8s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
z-index: 6;
|
||||
border-top: 2px solid #8e6c43;
|
||||
filter: drop-shadow(0 6px 9px rgba(45, 30, 10, 0.55));
|
||||
border-top: 2px solid #7c5830;
|
||||
filter: drop-shadow(0 7px 14px rgba(35, 18, 5, 0.65));
|
||||
}
|
||||
|
||||
.flap-sketch-line {
|
||||
.envelope-opened .envelope-closing-flap.envelope-v-flap {
|
||||
transform: rotateX(180deg);
|
||||
z-index: 1;
|
||||
filter: drop-shadow(0 -4px 6px rgba(50, 35, 10, 0.4));
|
||||
}
|
||||
|
||||
.v-flap-sketch-line {
|
||||
position: absolute;
|
||||
inset: 4px;
|
||||
clip-path: polygon(2% 2%, 98% 2%, 50% 52%);
|
||||
border-top: 1px dashed rgba(120, 85, 45, 0.4);
|
||||
clip-path: polygon(2% 2%, 98% 2%, 50% 53.5%);
|
||||
border-top: 1.5px dashed rgba(110, 75, 35, 0.45);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* Sketched Wax Seal placed right over the flap intersection in the center */
|
||||
/* Sketched Wax Seal placed right at the tip of the V-flap */
|
||||
.sketched-wax-seal {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
top: 56%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%) rotate(-3deg);
|
||||
width: 74px;
|
||||
@@ -772,7 +751,12 @@ body {
|
||||
.sketched-wax-seal {
|
||||
width: 62px;
|
||||
height: 62px;
|
||||
top: 50%;
|
||||
top: 56%;
|
||||
}
|
||||
.envelope-sender-block {
|
||||
top: 10px;
|
||||
left: 12px;
|
||||
max-width: 55%;
|
||||
}
|
||||
.letter-sheet {
|
||||
top: 10px;
|
||||
@@ -790,9 +774,6 @@ body {
|
||||
line-height: 1.42;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
.envelope-flap.flap-bottom {
|
||||
padding-bottom: 12px;
|
||||
}
|
||||
.btn-launch-quiz {
|
||||
padding: 12px 20px;
|
||||
font-size: 1.0rem;
|
||||
|
||||
+12
-11
@@ -14,9 +14,9 @@ const UI_TEXT = {
|
||||
de: {
|
||||
pageTitle: "✨ Magisches Hogwarts-Escape-Quiz ✨",
|
||||
pageSubtitle: "10 knifflige Rätsel aus der Zauberwelt warten auf dich",
|
||||
envelopeLetter: "Hogwarts-Schule für Hexerei und Zauberei",
|
||||
envelopeRecipient: "An den ehrenwerten Zauberschüler",
|
||||
envelopeLocation: "Auf dem Prüfungspfad • Schloss Hogwarts",
|
||||
senderLabel: "Absender:",
|
||||
envelopeSender: "Hogwarts-Schule für Hexerei und Zauberei",
|
||||
envelopeSenderLocation: "Schulleitung • Schloss Hogwarts",
|
||||
letterSchoolTitle: "Hogwarts-Schule für Hexerei und Zauberei",
|
||||
letterHeadmaster: "Schulleiter: Albus Dumbledore<br><span>(Großhexenmeister, Träger des Merlin-Ordens Erster Klasse)</span>",
|
||||
letterSalutation: "Liebe Hexe, lieber Zauberer,",
|
||||
@@ -59,9 +59,9 @@ const UI_TEXT = {
|
||||
en: {
|
||||
pageTitle: "✨ Magical Hogwarts Escape Quiz ✨",
|
||||
pageSubtitle: "10 tricky wizarding world puzzles await you",
|
||||
envelopeLetter: "Hogwarts School of Witchcraft and Wizardry",
|
||||
envelopeRecipient: "To the Esteemed Wizarding Student",
|
||||
envelopeLocation: "On the Path of Trials • Hogwarts Castle",
|
||||
senderLabel: "Sender:",
|
||||
envelopeSender: "Hogwarts School of Witchcraft and Wizardry",
|
||||
envelopeSenderLocation: "Headmaster's Office • Hogwarts Castle",
|
||||
letterSchoolTitle: "Hogwarts School of Witchcraft and Wizardry",
|
||||
letterHeadmaster: "Headmaster: Albus Dumbledore<br><span>(Order of Merlin, First Class, Grand Sorc.)</span>",
|
||||
letterSalutation: "Dear Witch or Wizard,",
|
||||
@@ -180,17 +180,18 @@ function applyQuizTranslations(lang) {
|
||||
const letterSignature = document.getElementById("letterSignature");
|
||||
const letterSignTitle = document.getElementById("letterSignTitle");
|
||||
|
||||
const envelopeRecipient = document.getElementById("envelopeRecipient");
|
||||
const envelopeLocation = document.getElementById("envelopeLocation");
|
||||
const senderLabel = document.getElementById("senderLabel");
|
||||
const envelopeSender = document.getElementById("envelopeSender");
|
||||
const envelopeSenderLocation = document.getElementById("envelopeSenderLocation");
|
||||
const breakSealBtn = document.getElementById("breakSealBtn");
|
||||
const startQuizBtn = document.getElementById("startQuizBtn");
|
||||
const closeLetterBtn = document.getElementById("closeLetterBtn");
|
||||
|
||||
if (pageTitle) pageTitle.innerText = t.pageTitle;
|
||||
if (pageSubtitle) pageSubtitle.innerText = t.pageSubtitle;
|
||||
if (envelopeLetter) envelopeLetter.innerText = t.envelopeLetter;
|
||||
if (envelopeRecipient && t.envelopeRecipient) envelopeRecipient.innerText = t.envelopeRecipient;
|
||||
if (envelopeLocation && t.envelopeLocation) envelopeLocation.innerText = t.envelopeLocation;
|
||||
if (senderLabel && t.senderLabel) senderLabel.innerText = t.senderLabel;
|
||||
if (envelopeSender && t.envelopeSender) envelopeSender.innerText = t.envelopeSender;
|
||||
if (envelopeSenderLocation && t.envelopeSenderLocation) envelopeSenderLocation.innerText = t.envelopeSenderLocation;
|
||||
if (letterSchoolTitle && t.letterSchoolTitle) letterSchoolTitle.innerText = t.letterSchoolTitle;
|
||||
if (letterHeadmaster && t.letterHeadmaster) letterHeadmaster.innerHTML = t.letterHeadmaster;
|
||||
if (letterSalutation && t.letterSalutation) letterSalutation.innerText = t.letterSalutation;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Caveat:wght@500;700&family=Marck+Script&family=MedievalSharp&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="/static/css/style.css?v=2.7">
|
||||
<link rel="stylesheet" href="/static/css/style.css?v=2.8">
|
||||
{% block head %}{% endblock %}
|
||||
</head>
|
||||
<body>
|
||||
|
||||
+11
-17
@@ -55,25 +55,19 @@
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
<!-- Linke Klappe des Umschlags -->
|
||||
<div class="envelope-flap flap-left"></div>
|
||||
|
||||
<!-- Rechte Klappe des Umschlags -->
|
||||
<div class="envelope-flap flap-right"></div>
|
||||
|
||||
<!-- Untere Klappe des Umschlags mit handschriftlicher Smaragd-Anschrift -->
|
||||
<div class="envelope-flap flap-bottom">
|
||||
<div class="envelope-sketch-border"></div>
|
||||
<div class="envelope-address-block">
|
||||
<p class="addr-line addr-school" id="envelopeLetter">Hogwarts-Schule für Hexerei und Zauberei</p>
|
||||
<p class="addr-line addr-recipient" id="envelopeRecipient">An den ehrenwerten Zauberschüler</p>
|
||||
<p class="addr-line addr-location" id="envelopeLocation">Auf dem Prüfungspfad • Schloss Hogwarts</p>
|
||||
<!-- Solide Rückseite des Briefumschlags -->
|
||||
<div class="envelope-back-body">
|
||||
<!-- Absender oben links auf der Rückseite (sonst kein Text) -->
|
||||
<div class="envelope-sender-block" id="envelopeSenderBlock">
|
||||
<span class="sender-label" id="senderLabel">Absender:</span>
|
||||
<p class="sender-name" id="envelopeSender">Hogwarts-Schule für Hexerei und Zauberei</p>
|
||||
<p class="sender-location" id="envelopeSenderLocation">Schulleitung • Schloss Hogwarts</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Obere Klappe des Umschlags (überdeckt alle Falten und wird vom Siegel gehalten) -->
|
||||
<div class="envelope-closing-flap flap-top" id="envelopeFlap">
|
||||
<div class="flap-sketch-line"></div>
|
||||
<!-- Markante dreieckige V-Verschluss-Lasche -->
|
||||
<div class="envelope-closing-flap envelope-v-flap" id="envelopeFlap">
|
||||
<div class="v-flap-sketch-line"></div>
|
||||
</div>
|
||||
|
||||
<!-- Handgezeichnetes Wachssiegel über der Klappenspitze -->
|
||||
@@ -189,5 +183,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block scripts %}
|
||||
<script src="/static/js/quiz.js?v=2.7"></script>
|
||||
<script src="/static/js/quiz.js?v=2.8"></script>
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user