/* Theme 2: invitation letter inside the animated cover envelope */
.envelope-container .letter { background: #2e2620 url(assets/img/afff8329-cd26-4fc8-abd8-cc74e38a0a26-b49d344f.jpg) center 38px / 100% auto no-repeat; }
.envelope-container .letter::before { content: ''; position: absolute; inset: 0; background: linear-gradient(#2e2620 14%, rgba(46, 38, 32, .78) 30%, rgba(46, 38, 32, .25) 48%, rgba(46, 38, 32, 0) 60%); }
.invite-letter { position: absolute; left: 0; right: 0; top: 2%; z-index: 1; text-align: center; color: #fff; text-shadow: 0 1px 6px rgba(0, 0, 0, .45); }
.invite-letter p { margin: 0; }
.invite-kicker { display: inline-block; padding: 0 18px 4px; border-bottom: 1px solid rgba(255, 255, 255, .8); font: 700 15px 'PlayfairDisplay', serif; letter-spacing: .04em; }
.invite-names { margin-top: 4px !important; font: 400 30px/1.15 'HoaTay1', 'Signora', cursive; }
.invite-date { margin-top: 4px !important; font: 700 14px 'PlayfairDisplay', serif; letter-spacing: .18em; }
.invite-guest { margin-top: 5px !important; font: italic 400 13px 'Signora', 'PlayfairDisplay', serif; color: #f7d774; }

/* Chibi couple beside the opened envelope: run sprites while moving, reaching poses while standing */
.env-mascots { position: absolute; z-index: 5; pointer-events: none; }
.env-mascot { position: absolute; bottom: -14px; height: 118px; width: max-content; opacity: 0; transition: transform 1.3s cubic-bezier(.25, .7, .35, 1), opacity .35s ease; }
.env-mascot > div { height: 100%; }
.env-mascot img { display: block; height: 100%; width: auto; max-width: none; filter: drop-shadow(0 5px 5px rgba(0, 0, 0, .22)); }
.env-mascot.groom { right: calc(100% - 22px); transform: translateX(-240px); }
.env-mascot.bride { left: calc(100% - 30px); transform: translateX(240px); }
.env-mascots.show .env-mascot { opacity: 1; transform: none; }
.env-mascots.show .env-mascot.bride { transition-delay: .15s; }
.env-mascot .pose-reach { display: none; }
.env-mascots.show:not(.running) .pose-run { display: none; }
.env-mascots.show:not(.running) .pose-reach { display: block; }
/* face the direction of travel: bride runs in leftwards, groom runs out leftwards */
.env-mascots.show .bride .pose-run, .env-mascots:not(.show) .groom .pose-run { transform: scaleX(-1); }
.env-mascots.running .pose-run img { animation: env-mascot-run .3s ease-in-out infinite; }
.env-mascots.show:not(.running) .pose-reach img { animation: env-mascot-idle 1.6s ease-in-out infinite; transform-origin: 50% 100%; }
.env-mascots.show:not(.running) .bride .pose-reach img { animation-delay: .4s; }
@keyframes env-mascot-run { 0%, 100% { transform: translateY(0) rotate(-3deg); } 50% { transform: translateY(-7px) rotate(3deg); } }
@keyframes env-mascot-idle { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-5px); } }
@media (prefers-reduced-motion: reduce) { .env-mascot { transition: opacity .3s; transform: none !important; } .env-mascot img { animation: none !important; } }

/* Canvas items are decorative: only the ones wired up in JS (inline pointer-events) and the RSVP form take taps,
   so overlapping photos/flowers cannot swallow taps meant for the envelope */
#root-page-container .w-full.h-full > [data-node-id] { pointer-events: none; }
#root-page-container .w-full.h-full > [data-node-id]:has(form) { pointer-events: auto; }

/* Calendar weekday header (Monday-first) */
.template-three .cal-dow { font-size: 12px; font-weight: 700; letter-spacing: .04em; opacity: .9; }
.template-three .cal-dow.sun { color: #ffc2d1; }
