Enhance: Authentic seamless 4-flap closed envelope with 100% hidden interior letter

This commit is contained in:
kobold-ai
2026-09-21 17:12:05 +02:00
parent 1cbea5e84f
commit 3e5c3c1eeb
3 changed files with 78 additions and 38 deletions
+66 -32
View File
@@ -302,11 +302,14 @@ body {
padding: 16px 20px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.35);
z-index: 2;
/* In closed state: 100% completely hidden, invisible, non-rendered */
visibility: hidden;
opacity: 0;
transform: translateY(40px) scale(0.92);
transform: translateY(50px) scale(0.92);
pointer-events: none;
transition: transform 0.9s cubic-bezier(0.2, 0.85, 0.25, 1) 0.35s,
opacity 0.6s ease 0.35s,
visibility 0.6s ease 0.35s,
box-shadow 0.8s ease;
overflow-y: auto;
text-align: center;
@@ -325,25 +328,54 @@ body {
border-radius: 4px;
}
/* Front Pocket of envelope (covers the lower portion of the letter) */
.envelope-front-pocket {
/* =========================================
FOUR-FLAP REALISTIC CLOSED ENVELOPE SYSTEM
Flaps: Left, Right, Bottom, and Top Flap
========================================= */
.envelope-flap {
position: absolute;
inset: 0;
border-radius: 6px;
pointer-events: none;
}
/* Left Triangular Flap */
.envelope-flap.flap-left {
background-color: #ebdcb9;
background-image:
radial-gradient(ellipse at 50% 65%, rgba(255, 255, 255, 0.25) 0%, rgba(130, 95, 45, 0.2) 100%),
radial-gradient(ellipse at 0% 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(0 16%, 50% 50%, 100% 16%, 100% 100%, 0 100%);
clip-path: polygon(0 0, 50% 50%, 0 100%);
z-index: 3;
filter: drop-shadow(2px 0 4px rgba(60, 40, 15, 0.25));
}
/* 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;
border: 2px solid #8e6c43;
filter: drop-shadow(0 -3px 6px rgba(60, 40, 15, 0.3));
filter: drop-shadow(0 -4px 6px rgba(50, 35, 10, 0.35));
display: flex;
align-items: flex-end;
justify-content: center;
padding-bottom: 22px;
pointer-events: none;
padding-bottom: 20px;
}
.envelope-sketch-border {
@@ -357,7 +389,7 @@ body {
pointer-events: none;
}
/* Handwritten Address in Emerald Ink on Envelope Front */
/* Handwritten Address in Emerald Ink on Envelope Bottom Flap */
.envelope-address-block {
position: relative;
z-index: 5;
@@ -366,61 +398,62 @@ body {
color: #0d3820; /* Authentic Hogwarts Emerald Ink */
padding: 0 15px;
text-shadow: 0 0 1px rgba(13, 56, 32, 0.35);
margin-bottom: 2px;
}
.addr-school {
font-size: clamp(0.92rem, 3.2vw, 1.15rem);
font-size: clamp(0.85rem, 2.9vw, 1.08rem);
font-weight: 700;
color: #082816;
margin-bottom: 2px;
margin-bottom: 1px;
}
.addr-recipient {
font-size: clamp(1.15rem, 3.8vw, 1.4rem);
font-size: clamp(1.05rem, 3.4vw, 1.28rem);
font-weight: 700;
color: #0b3a20;
margin-bottom: 2px;
margin-bottom: 1px;
}
.addr-location {
font-size: clamp(0.85rem, 2.8vw, 1.02rem);
font-size: clamp(0.8rem, 2.5vw, 0.96rem);
font-style: italic;
color: #1e4530;
}
/* Top Triangular Flap (folds down over the pocket) */
.envelope-closing-flap {
/* Top Closing Flap (Folds down from top, overlaps all flaps, sealed by wax seal) */
.envelope-closing-flap.flap-top {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #dfcd9f;
background-color: #e5d4a6;
background-image:
radial-gradient(ellipse at 50% 25%, rgba(255, 255, 255, 0.3) 0%, rgba(130, 95, 45, 0.25) 100%),
radial-gradient(ellipse at 50% 20%, rgba(255, 255, 255, 0.35) 0%, rgba(130, 95, 45, 0.25) 100%),
url('/static/img/parchment_texture.jpg');
background-size: cover;
clip-path: polygon(0 0, 100% 0, 50% 57%);
clip-path: polygon(0 0, 100% 0, 50% 54%);
transform-origin: top center;
transform-style: preserve-3d;
transition: transform 0.75s cubic-bezier(0.4, 0, 0.2, 1);
transition: transform 0.8s cubic-bezier(0.4, 0, 0.2, 1);
z-index: 6;
border-top: 2px solid #8e6c43;
filter: drop-shadow(0 5px 8px rgba(50, 35, 10, 0.5));
filter: drop-shadow(0 6px 9px rgba(45, 30, 10, 0.55));
}
.flap-sketch-line {
position: absolute;
inset: 4px;
clip-path: polygon(2% 2%, 98% 2%, 50% 54%);
clip-path: polygon(2% 2%, 98% 2%, 50% 52%);
border-top: 1px dashed rgba(120, 85, 45, 0.4);
pointer-events: none;
}
/* Sketched Wax Seal placed right over the flap tip */
/* Sketched Wax Seal placed right over the flap intersection in the center */
.sketched-wax-seal {
position: absolute;
top: 55%;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) rotate(-3deg);
width: 74px;
@@ -430,8 +463,8 @@ body {
z-index: 7;
transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.3s ease, opacity 0.4s ease;
box-shadow:
0 8px 20px rgba(0, 0, 0, 0.7),
0 2px 5px rgba(0, 0, 0, 0.45);
0 8px 22px rgba(0, 0, 0, 0.75),
0 2px 6px rgba(0, 0, 0, 0.45);
}
.sketched-wax-seal:hover {
@@ -480,13 +513,14 @@ body {
pointer-events: none;
}
.envelope-opened .envelope-closing-flap {
.envelope-opened .envelope-closing-flap.flap-top {
transform: rotateX(180deg);
z-index: 1;
filter: drop-shadow(0 -4px 6px rgba(50, 35, 10, 0.4));
}
.envelope-opened .letter-sheet {
visibility: visible;
opacity: 1;
pointer-events: auto;
transform: translateY(-145px) scale(1.02);
@@ -738,7 +772,7 @@ body {
.sketched-wax-seal {
width: 62px;
height: 62px;
top: 55%;
top: 50%;
}
.letter-sheet {
top: 10px;
@@ -756,8 +790,8 @@ body {
line-height: 1.42;
margin-bottom: 6px;
}
.envelope-front-pocket {
padding-bottom: 14px;
.envelope-flap.flap-bottom {
padding-bottom: 12px;
}
.btn-launch-quiz {
padding: 12px 20px;
+1 -1
View File
@@ -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.6">
<link rel="stylesheet" href="/static/css/style.css?v=2.7">
{% block head %}{% endblock %}
</head>
<body>
+11 -5
View File
@@ -55,8 +55,14 @@
</footer>
</div>
<!-- Vordere Umschlagtasche mit handschriftlicher Smaragd-Anschrift -->
<div class="envelope-front-pocket">
<!-- 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>
@@ -65,8 +71,8 @@
</div>
</div>
<!-- Obere Klappe des Umschlags (überdeckt die Tasche und wird vom Siegel gehalten) -->
<div class="envelope-closing-flap">
<!-- 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>
</div>
@@ -183,5 +189,5 @@
{% endblock %}
{% block scripts %}
<script src="/static/js/quiz.js?v=2.6"></script>
<script src="/static/js/quiz.js?v=2.7"></script>
{% endblock %}