@font-face{font-family:Pinyon;src:url('assets/PinyonScript-Regular.ttf') format('truetype');font-weight:400;font-style:normal;font-display:swap}
:root{color-scheme:light;--butter:#f3e4ab;--white:#fff;--beige:#e8dfd2;--ink:#292824;--muted:#706b60;--ease:cubic-bezier(.22,1,.36,1)}
*{box-sizing:border-box}html{background:#faf9f6}body{margin:0;color:var(--ink);font-family:Georgia,'Times New Roman',serif;-webkit-font-smoothing:antialiased}button{font:inherit;color:inherit}button:focus-visible{outline:2px solid var(--ink);outline-offset:8px}button{touch-action:manipulation;-webkit-tap-highlight-color:transparent}p,h1,h2,figure{margin:0}.script{font-family:Pinyon,cursive;font-weight:400}main{overflow:clip;min-height:100svh;background:radial-gradient(ellipse at 50% 35%,#fff 20%,#faf9f6 75%)}[hidden]{display:none!important}
.welcome{min-height:100svh;min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:52px 24px 28px;transition:opacity .5s ease;position:relative}
.welcome-heading{text-align:center;z-index:2}.eyebrow{font-family:Arial,sans-serif;font-size:12px;letter-spacing:.22em;text-transform:uppercase}.welcome h1{font-size:clamp(53px,7.4vw,89px);line-height:1.3;margin-top:18px}.welcome h1 span{font-size:.67em;padding:0 .05em}
.letter-button{border:0;background:transparent;display:flex;align-items:center;flex-direction:column;padding:0;width:min(590px,100%);cursor:pointer;margin:58px 0 0;isolation:isolate}.envelope-scene{display:block;position:relative;width:100%;aspect-ratio:1.66;perspective:1400px}.envelope{position:absolute;inset:0 3%;display:block;transform:rotate(-5deg);transition:transform .7s var(--ease),opacity .55s;filter:drop-shadow(0 24px 22px #8c7d5930)}.letter-button:hover .envelope{transform:rotate(-3deg) translateY(-5px)}.envelope-back{position:absolute;inset:0;background:#e6d59d;border:1px solid #d9c894;border-radius:3px}.envelope-pocket{position:absolute;inset:0;background:linear-gradient(170deg,#f9edc7,#f3e4ab);clip-path:polygon(0 0,50% 48%,100% 0,100% 100%,0 100%);z-index:3}.envelope-fold-left,.envelope-fold-right{position:absolute;inset:0;z-index:4;pointer-events:none}.envelope-fold-left{clip-path:polygon(0 0,54% 59%,0 100%);background:linear-gradient(34deg,#f5e8b8,#ecdaa2)}.envelope-fold-right{clip-path:polygon(100% 0,46% 59%,100% 100%);background:linear-gradient(-34deg,#f5e8b8,#ecdaa2)}.envelope-flap{position:absolute;inset:0 0 37%;background:linear-gradient(173deg,#f9edc7,#f0dfa5);clip-path:polygon(0 0,100% 0,100% 9%,55% 95%,52% 99%,48% 99%,45% 95%,0 9%);transform-origin:top center;z-index:5;transition:transform 1s cubic-bezier(.4,0,.2,1);backface-visibility:visible;filter:drop-shadow(0 3px 1px #857b6130)}
.seal{position:absolute;z-index:6;left:50%;top:53%;transform:translate(-50%,-50%) rotate(5deg);width:82px;aspect-ratio:1;display:grid;place-items:center;border-radius:49% 47% 46% 51%;border:1px solid #e0cf9c;background:radial-gradient(ellipse at 35% 25%,#fbefc9,#e8d698);box-shadow:0 4px 6px #75694a25,inset 0 0 0 5px #eddda7,inset 0 0 0 6px #d9c78c;transition:opacity .3s,transform .4s}.seal>.script{display:block;width:100%;text-align:center;font-size:23px;line-height:1;transform:translate(-.07em,.03em);opacity:.75;text-shadow:0 1px 0 #fff8}.seal .script span{font-size:14px;margin:0 1px}.letter-peek{position:absolute;inset:5% 7%;background:#fffdf6;display:flex;align-items:center;flex-direction:column;justify-content:center;gap:20px;border:1px solid #e6dcc7;z-index:2;transition:transform 1s var(--ease);box-shadow:0 0 10px #aa986023}.letter-peek .script{font-size:50px}.letter-peek>span:last-child{font-family:Arial,sans-serif;font-size:12px;letter-spacing:.15em}.flower{position:absolute;pointer-events:none;object-fit:contain;width:45%;height:auto;opacity:.75}.flower-left{left:-11%;bottom:-18%;transform:rotate(-34deg);z-index:-1;transition:transform 1.3s var(--ease),opacity .7s}.open-label{font-family:Arial,sans-serif;font-size:14px;letter-spacing:.045em;margin-top:57px;padding:10px 0;border-bottom:1px solid #a39b885e}.open-label span{display:inline-block;margin-left:14px;transition:transform .25s}.letter-button:hover .open-label span{transform:translate(2px,-2px)}.welcome-note{font-size:14px;font-style:italic;color:var(--muted);margin-top:45px}
/* The paper layers form the requested interactive envelope, not a static mockup. */
.welcome.is-opening .envelope{transform:rotate(0deg) translateY(18px)}.welcome.is-opening .seal{opacity:0;transform:translate(-50%,-50%) scale(1.15)}.welcome.is-opening .envelope-flap{transform:rotateX(-180deg);z-index:1;transition-delay:.2s}.welcome.is-opening .open-label,.welcome.is-opening .welcome-note{opacity:0;transition:opacity .25s}.welcome.is-opening .flower{transform:rotate(-39deg) translateX(-12px)}.welcome.is-extracting .letter-peek{transform:translateY(-52%)}.welcome.is-leaving{opacity:0}.welcome.is-leaving .envelope{transform:translateY(100px);opacity:0}
.invitation{padding:46px 24px 30px;max-width:1140px;margin:0 auto;animation:invitation-in 1s var(--ease) both}.invitation-paper{background:#fff;position:relative;padding:44px 62px 38px;box-shadow:0 12px 65px #82785c12}.paper-outline{position:absolute;inset:17px;border:1px solid #c6b784;pointer-events:none}.invitation-top{display:flex;justify-content:space-between;gap:18px;font-family:Arial,sans-serif;font-size:12px;letter-spacing:.14em;text-transform:uppercase}.invitation-intro{display:grid;grid-template-columns:1fr 1fr;align-items:center;gap:24px;padding:53px 0 38px}.invitation-copy{position:relative;z-index:1;padding:0 0 0 12px}h2{font-size:clamp(65px,7vw,96px);line-height:.94;letter-spacing:-.055em;font-weight:400;outline:none}h2 em{font-size:.48em;letter-spacing:-.055em;font-weight:400}h2>span{margin-left:.62em}.couple{font-size:44px;line-height:1.4;white-space:nowrap;margin:27px 0 13px}.couple span{font-size:.7em}.message{font-size:17px;line-height:1.7;color:#625f55}.photo-composition{height:370px;position:relative;isolation:isolate;max-width:420px;width:100%;margin:0 auto}.polaroid{width:56%;padding:11px 11px 24px;background:#fff;box-shadow:0 8px 22px #6b604b25;position:absolute}.polaroid-back{left:2%;top:2%;transform:rotate(-10deg);z-index:1}.polaroid-front{right:0;top:33%;transform:rotate(9deg);z-index:2}.photo-window{position:relative;aspect-ratio:4/4.9;background:var(--beige);display:flex;align-items:center;justify-content:center;flex-direction:column;gap:12px;overflow:hidden}.polaroid-front .photo-window{background:var(--butter)}.photo-window .script{font-size:53px;line-height:1.2;color:#716b5b}.photo-window>span:last-child{font-family:Arial,sans-serif;font-size:10px;letter-spacing:.2em;color:#716b5b}.photo-window img{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:cover;object-position:center top}.invitation-flower{position:absolute;width:46%;height:auto;bottom:-8px;left:-17%;transform:rotate(-18deg);z-index:0;pointer-events:none}.date-block{text-align:center;background:var(--butter);margin:23px -22px 0;padding:33px 24px 35px}.date-block>p:first-child{font-size:15px;font-style:italic}.wedding-date{font-size:clamp(35px,4.8vw,57px);letter-spacing:-.04em;margin-top:13px;line-height:1.25}.weekday{font-family:Arial,sans-serif;font-size:12px;letter-spacing:.16em;text-transform:uppercase;margin-top:9px}.fine-rule{height:1px;width:40px;background:#80764f;margin:24px auto 21px}.venue{font-size:23px}.address{font-family:Arial,sans-serif;font-size:13px;line-height:1.6;margin-top:10px}.card-footer{text-align:center;padding-top:28px}.card-footer>p:first-child{font-size:15px;line-height:1.7;color:#625f55}.card-footer .script{font-size:34px;line-height:1.4;margin-top:19px}.replay{display:block;margin:25px auto 0;background:none;border:0;border-bottom:1px solid #bdb6a4;padding:10px 0;font-family:Arial,sans-serif;font-size:12px;cursor:pointer;min-height:44px}.replay span{font-size:16px;margin-left:9px}.replay:hover{border-color:var(--ink)}@keyframes invitation-in{from{opacity:0;transform:translateY(35px)}to{opacity:1;transform:translateY(0)}}
@media(min-width:1100px) and (min-height:850px){.welcome{padding-bottom:60px}.letter-button{margin-top:76px}.welcome-note{margin-top:65px}}
@media(max-width:640px){.welcome{padding:42px 24px 28px}.eyebrow{font-size:10px;letter-spacing:.18em}.welcome h1{font-size:clamp(43px,12vw,65px);margin-top:20px}.letter-button{margin-top:68px;width:100%;max-width:430px}.envelope-scene{aspect-ratio:1.55}.seal{width:63px}.seal>.script{font-size:18px}.seal .script span{font-size:11px}.open-label{margin-top:52px;font-size:13px}.welcome-note{margin-top:37px}.flower-left{left:-13%;bottom:-20%}.letter-peek .script{font-size:36px}.letter-peek>span:last-child{font-size:10px}.invitation{padding:17px 12px 22px}.invitation-paper{padding:32px 28px 30px}.paper-outline{inset:10px}.invitation-top{font-size:10px;letter-spacing:.08em;gap:12px}.invitation-intro{grid-template-columns:1fr;gap:20px;padding:40px 0 25px}.invitation-copy{text-align:center;padding:0}h2{font-size:78px;line-height:.96;display:inline-block;text-align:left}.couple{font-size:37px;margin:20px 0 10px}.message{font-size:16px;line-height:1.6}.photo-composition{height:330px;max-width:330px}.polaroid{width:55%;padding:9px 9px 18px}.polaroid-back{left:4%}.polaroid-front{right:3%;top:30%}.invitation-flower{bottom:8px;left:-10%}.photo-window .script{font-size:44px}.photo-window>span:last-child{font-size:9px}.date-block{margin:5px -8px 0;padding:28px 12px 30px}.wedding-date{font-size:clamp(29px,8vw,45px)}.venue{font-size:21px}.address{font-size:12px;max-width:220px;margin:8px auto 0}.card-footer>p:first-child{font-size:14px}.card-footer .script{font-size:29px}.date-block>p:first-child{font-size:14px}}
@media(max-height:700px) and (min-width:641px){.welcome{padding-top:30px}.welcome h1{font-size:63px;margin-top:10px}.letter-button{max-width:420px;margin-top:34px}.open-label{margin-top:30px}.welcome-note{margin-top:20px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.letter-button:hover .envelope{transform:rotate(-5deg)}}
@media print{.welcome,.replay{display:none!important}.invitation[hidden]{display:block!important}.invitation{padding:0}.invitation-paper{box-shadow:none;break-inside:avoid}body,main{background:white}}

/* Compact countdown in the invitation’s upper-right corner. */
.invitation-top{align-items:flex-start}
.countdown{display:flex;flex-direction:column;align-items:flex-end;gap:6px;text-align:right;text-transform:none;letter-spacing:0;flex-shrink:0}
.countdown-days{font-family:Georgia,'Times New Roman',serif;font-size:19px;line-height:1.1}
.countdown-clock{font-size:12px;line-height:1.4;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;min-height:1.4em}
@media(max-width:640px){.countdown-days{font-size:16px}.countdown-clock{font-size:11px}.invitation-top{gap:8px}}

/* Concentric semicircles: the white paper and inset frame share a centre.
   Container width supplies equal horizontal and vertical radii. */
.invitation{container-type:inline-size}
.invitation-paper{
  --frame-inset:17px;
  border-radius:50cqw 50cqw 0 0;
  padding-top:clamp(110px,24cqw,270px);
}
.paper-outline{
  inset:var(--frame-inset);
  border-radius:calc(50cqw - var(--frame-inset)) calc(50cqw - var(--frame-inset)) 0 0;
}
.invitation-top{padding-inline:8cqw}
@media(max-width:640px){
  .invitation-paper{--frame-inset:10px;padding-top:max(120px,calc(50cqw - 65px))}
  .invitation-top{padding-inline:0}
}

/* More breathing room through the lower half of the card. */
.invitation-paper{padding-bottom:76px}
.date-block{margin-top:58px;padding-top:48px;padding-bottom:50px}
.fine-rule{margin-top:32px;margin-bottom:29px}
.card-footer{padding-top:54px}
.card-footer .script{margin-top:32px}
@media(max-width:640px){
  .invitation-paper{padding-bottom:58px}
  .date-block{margin-top:32px;padding-top:38px;padding-bottom:40px}
  .fine-rule{margin-top:28px;margin-bottom:25px}
  .card-footer{padding-top:42px}
  .card-footer .script{margin-top:26px}
}
