@font-face{font-family:Cormorant;src:url('./assets/fonts/cormorant-500.ttf') format('truetype');font-display:swap}
@font-face{font-family:Cormorant;src:url('./assets/fonts/cormorant-italic-500.ttf') format('truetype');font-style:italic;font-display:swap}
@font-face{font-family:Manrope;src:url('./assets/fonts/manrope-400.ttf') format('truetype');font-display:swap}
@font-face{font-family:Manrope;src:url('./assets/fonts/manrope-600.ttf') format('truetype');font-weight:600;font-display:swap}

:root{color-scheme:light;--cream:#fff7ec;--gold:#f4d4a5;--red:#cb304c;--wine:#741328}
*{box-sizing:border-box}
html,body{margin:0;min-height:100%;font-family:Manrope,Arial,sans-serif}
body{background:var(--wine);overflow:hidden}
button,input{font:inherit}button{cursor:pointer}
button:focus-visible,input:focus-visible{outline:3px solid var(--gold);outline-offset:4px}
[hidden]{display:none!important}

.lock-screen{position:relative;isolation:isolate;display:grid;place-items:center;width:100%;height:100dvh;padding:14px 18px;overflow-x:hidden;overflow-y:auto;color:var(--cream);background:radial-gradient(ellipse 68% 57% at 50% 40%,#d33a55 0%,#ad1e39 58%,#71142b 100%);transition:opacity .7s ease,transform .7s ease;z-index:2}
.lock-screen:before{content:'';position:absolute;inset:0;pointer-events:none;opacity:.22;background-image:radial-gradient(#ffe0cb 1px,transparent 1px);background-size:27px 27px;mask-image:linear-gradient(90deg,black,transparent 38%,transparent 62%,black)}
.lock-screen:after{content:'';position:absolute;inset:12px;border:1px solid #ffe6cd66;pointer-events:none}
.glow{position:absolute;border-radius:50%;pointer-events:none;filter:blur(12px)}
.glow-one{width:280px;height:280px;left:0;top:5%;background:#f2767040}
.glow-two{width:300px;height:300px;right:0;bottom:0;background:#ffba7a30}
.corner-ribbon{position:absolute;width:310px;height:23px;background:linear-gradient(#f9d8ae75,#eab27c75);border-block:1px solid #ffeac68c;pointer-events:none;opacity:.32}
.ribbon-left{left:8px;top:26%;transform:rotate(-35deg);transform-origin:left center}
.ribbon-right{right:8px;bottom:27%;transform:rotate(-35deg);transform-origin:right center}
.party-piece{position:absolute;color:#ffe2c2a8;line-height:1;pointer-events:none;animation:float-piece 4.5s ease-in-out infinite}
.piece-one{left:12%;top:13%;font-size:24px}.piece-two{right:13%;top:21%;font-size:30px;animation-delay:-1.3s}.piece-three{left:18%;bottom:21%;font-size:14px;animation-delay:-2s}.piece-four{right:18%;bottom:13%;font-size:24px;animation-delay:-3s}.piece-five{left:11%;top:48%;font-size:17px;animation-delay:-1s}.piece-six{right:10%;top:54%;font-size:13px;animation-delay:-2.5s}

.lock-card{text-align:center;width:min(100%,530px);min-width:0;position:relative;z-index:1;padding:13px 22px 15px}
.kicker{font-size:10px;font-weight:600;letter-spacing:2.5px;color:#ffe0cc;margin:0}
.gift-stage{height:clamp(155px,26dvh,220px);position:relative;display:grid;place-items:center;max-width:340px;margin:5px auto 0}
.gift-halo{position:absolute;width:min(37dvh,270px);height:min(31dvh,225px);border:1px dashed #ffe1b878;border-radius:50%;box-shadow:0 0 45px #f7b59433;animation:halo-breathe 5s ease-in-out infinite}
.stage-spark{position:absolute;color:#ffe9be;line-height:1;animation:twinkle 2.5s ease-in-out infinite}
.spark-one{font-size:27px;top:25px;right:45px}.spark-two{font-size:17px;left:46px;bottom:38px;animation-delay:.7s}.spark-three{font-size:20px;right:46px;bottom:28px;animation-delay:1.2s}

.present{--present-scale:.87;width:220px;height:190px;position:relative;filter:drop-shadow(0 15px 14px #4c0b1e66);animation:present-hover 3.2s ease-in-out infinite}
.present-shadow{position:absolute;left:16px;right:16px;bottom:4px;height:13px;background:#4d0b1e5c;border-radius:50%;filter:blur(6px)}
.present-box{position:absolute;left:16px;top:70px;width:188px;height:109px;border-radius:3px 3px 7px 7px;border:2px solid #f1747b;background:linear-gradient(115deg,#ef5365 0%,#c52646 53%,#971732 100%);box-shadow:inset -14px 0 23px #6611264d,inset 9px 0 13px #ffe1cc26}
.present-box:after{content:'';position:absolute;inset:7px;border:1px solid #ffd5c13d;pointer-events:none}
.box-ribbon-vertical,.lid-ribbon{position:absolute;left:calc(50% - 15px);width:30px;background:linear-gradient(90deg,#dfae76,#fff0ca 50%,#d9a06e);box-shadow:3px 0 7px #66112638}
.box-ribbon-vertical{top:0;bottom:0}
.box-ribbon-horizontal{position:absolute;left:0;right:0;top:24px;height:19px;background:linear-gradient(#f8dba9,#deb382);box-shadow:0 3px 6px #6611263d}
.box-heart{position:absolute;z-index:1;left:30px;bottom:18px;color:#fff0db;font-size:25px;line-height:1;text-shadow:0 2px 3px #73152c5c}
.present-lid{position:absolute;left:7px;top:55px;width:206px;height:32px;z-index:3;border-radius:5px;background:linear-gradient(150deg,#f26672,#c92e4c 70%,#a91d3c);border:1px solid #ff9a95;box-shadow:0 7px 7px #5e122b50;transition:transform .6s ease,opacity .6s ease}
.lid-ribbon{top:0;bottom:0}
.bow{position:absolute;bottom:26px;width:75px;height:51px;border:11px solid #ffe2b8;box-shadow:inset 2px 2px 3px #a95e5377,2px 2px 4px #6113284d}
.bow-left{left:33px;border-radius:55% 55% 15% 55%;transform:rotate(18deg)}
.bow-right{right:33px;border-radius:55% 55% 55% 15%;transform:rotate(-18deg)}
.bow-knot{position:absolute;left:calc(50% - 15px);bottom:27px;width:30px;height:29px;background:linear-gradient(90deg,#dfaa7d,#fff0cd 53%,#dba274);border-radius:8px;box-shadow:1px 3px 4px #6113284d}
.present-padlock{position:absolute;z-index:4;left:calc(50% - 22px);top:114px;width:44px;height:43px;border-radius:8px;background:linear-gradient(140deg,#ffe6b9,#c28b5b);border:2px solid #fff2ce;box-shadow:0 5px 9px #62112688,inset 0 2px 5px #9f634963;transition:transform .55s ease}
.shackle{position:absolute;width:26px;height:27px;left:7px;top:-23px;border:6px solid #e5bb8e;border-bottom:0;border-radius:20px 20px 0 0;box-shadow:inset 0 2px 2px #86433966;transform-origin:5px 26px;transition:transform .55s ease}
.keyhole:before{content:'';position:absolute;left:calc(50% - 5px);top:14px;width:10px;height:10px;background:#71324a;border-radius:50%}
.keyhole:after{content:'';position:absolute;left:calc(50% - 2px);top:22px;width:4px;height:10px;background:#71324a;border-radius:2px}

.lock-card h1{font:500 clamp(42px,6.8vw,57px)/.99 Cormorant,Georgia,serif;letter-spacing:-1px;overflow-wrap:break-word;margin:2px 0 8px}
.lock-card h1 em{color:#ffe0b8;font-weight:500}
.description{font-size:12px;color:#ffe1dd;margin:0 0 18px}
form{max-width:350px;margin:auto;text-align:left}
label{display:block;font-size:11px;font-weight:600;letter-spacing:1.5px;text-transform:uppercase;margin:0 0 7px;color:#fff0e6}
.password-field{display:flex;align-items:stretch;background:#fff8f1;border:1px solid #f3d4c6;border-radius:6px;box-shadow:0 7px 22px #50102633}
.password-field input{width:100%;min-width:0;padding:13px 14px;border:0;background:transparent;color:#532132;border-radius:6px;font-size:14px}
.password-field input::placeholder{color:#ae9292}
.password-field button{border:0;background:transparent;color:#92314a;padding:0 15px;font-size:11px;font-weight:600}
.message{min-height:26px;margin:7px 0 5px;font-size:11px;color:#fff2d8}
.unlock-button{width:100%;display:flex;align-items:center;justify-content:center;gap:12px;border:1px solid #f4dfc9;border-radius:6px;padding:12px 20px;background:linear-gradient(140deg,#f9e9d7,#f0c7bd);color:#76263b;font-weight:600;font-size:13px;box-shadow:0 9px 22px #45101e38;transition:transform .2s,box-shadow .2s}
.unlock-button:hover{transform:translateY(-2px);box-shadow:0 13px 26px #45101e55}
.unlock-button:disabled{opacity:.6;cursor:wait}
.unlock-button span:last-child{font-size:20px;line-height:.7}
.postscript{font:italic 22px Cormorant,Georgia,serif;color:#f7d2bf;margin:14px 0 0}
.unlocked-site{position:fixed;inset:0;z-index:1;background:#fbf7ef;opacity:0;transition:opacity .7s}
.unlocked-site iframe{width:100%;height:100%;border:0;display:block;background:#fbf7ef}
.unlocked .unlocked-site{opacity:1}
.unlocked .lock-screen{opacity:0;transform:scale(1.04);pointer-events:none}
.unlocked .present{animation:none;transform:scale(1.08)}
.unlocked .present-lid{transform:translateY(-65px) rotate(-12deg);opacity:.75}
.unlocked .shackle{transform:rotate(-37deg) translate(-4px,-3px)}
.unlocked .stage-spark{animation:burst .65s ease-out both}
.no-script{position:fixed;z-index:5;bottom:8px;left:8px;right:8px;background:#fff8ee;color:#632235;padding:16px;text-align:center}

@keyframes present-hover{0%,100%{transform:translateY(0) scale(var(--present-scale))}50%{transform:translateY(-5px) scale(var(--present-scale))}}
@keyframes halo-breathe{50%{opacity:.5;transform:scale(1.04)}}
@keyframes twinkle{50%{opacity:.3;transform:scale(.75)}}
@keyframes float-piece{50%{transform:translateY(-9px) rotate(14deg);opacity:.55}}
@keyframes burst{to{opacity:0;transform:scale(2.5) translateY(-20px)}}
@media(max-width:500px){.lock-screen{padding:12px 15px}.lock-screen:after{inset:8px}.lock-card{padding:10px 12px}.kicker{font-size:9px;letter-spacing:1.9px}.gift-stage{height:clamp(150px,25dvh,185px)}.present{--present-scale:.77}.lock-card h1{font-size:clamp(39px,10vw,45px)}.description{margin-bottom:15px}.postscript{font-size:20px;margin-top:12px}.party-piece{opacity:.65}.corner-ribbon{width:200px;height:16px}}
@media(max-height:680px){.lock-screen{padding-block:7px}.lock-card{padding-top:6px;padding-bottom:6px}.gift-stage{height:clamp(132px,24dvh,164px)}.present{--present-scale:.72}.postscript{margin-top:8px}}
@media(max-width:360px) and (max-height:600px){.gift-stage{height:132px}.present{--present-scale:.66;top:-18px}.lock-card h1{font-size:36px}.description{font-size:11px;margin-bottom:11px}.postscript{font-size:18px}.unlock-button{padding-block:10px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;transition-duration:.001ms!important}.present{animation:none;transform:scale(var(--present-scale))}.party-piece{animation:none}}
