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