:root{color-scheme:dark;--ink:#081c22;--deep:#062b30;--gold:#e6bd72;--pale:#fff7e7;--muted:#d6c9b1}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--ink);color:var(--pale);font-family:"DM Sans",sans-serif}button,a{font:inherit}a{color:inherit;text-decoration:none}button{cursor:pointer}.topbar{position:absolute;z-index:8;top:0;left:0;width:100%;display:flex;align-items:center;justify-content:space-between;padding:25px clamp(22px,4vw,65px);font-size:12px;font-weight:700;letter-spacing:.18em}.topbar button{border:1px solid #e6bd7280;background:#06191e99;color:var(--pale);padding:12px 18px;letter-spacing:.12em;border-radius:3px}.portal-stage{min-height:100svh;display:flex;align-items:center;justify-content:center;flex-direction:column;padding:96px 20px 42px;position:relative;overflow:hidden;background:radial-gradient(ellipse at 50% 45%,#0e565b 0%,#09383c 32%,#071f29 67%,#04161e 100%)}.portal-stage:before,.portal-stage:after{content:"";position:absolute;inset:3%;border:1px solid #d4a85325;border-radius:50%;pointer-events:none}.portal-stage:after{inset:9%;border-color:#d4a85316}.stars{position:absolute;inset:0;opacity:.8;background-image:radial-gradient(circle at 13% 22%,#fff0bc 1px,transparent 2px),radial-gradient(circle at 82% 17%,#fff0bc 1px,transparent 2px),radial-gradient(circle at 73% 72%,#fff0bc 1px,transparent 2px),radial-gradient(circle at 22% 78%,#fff0bc 1px,transparent 2px),radial-gradient(circle at 49% 9%,#fff0bc 1px,transparent 2px);animation:twinkle 5s ease-in-out infinite alternate}.stage-overline,.eyebrow{font-size:12px;letter-spacing:.3em;font-weight:700;color:var(--gold);text-align:center}.stage-overline{z-index:2;margin:0 0:18px}.portal{height:min(72vh,640px);width:min(76vw,570px);min-height:430px;position:relative;perspective:1400px;filter:drop-shadow(0 28px 34px #0008)}.inside{position:absolute;inset:0;border:8px solid #bf8d3f;border-radius:47% 47% 6px 6px / 24% 24% 6px 6px;background:radial-gradient(circle at 50% 25%,#b58d4c 0%,#5c593f 38%,#112f36 83%);overflow:hidden;display:flex;align-items:center;flex-direction:column;text-align:center;padding:38px 12px 0}.inside:before{content:"";position:absolute;inset:9px;border:1px solid #ffe1a999;border-radius:inherit;pointer-events:none;z-index:2}.halo{position:absolute;width:72%;aspect-ratio:1;top:15%;border-radius:50%;background:radial-gradient(circle,#ffde9caa,#e4ad5044 45%,transparent 68%);filter:blur(20px)}.inside-top,.inside-bottom{position:relative;z-index:3;font-size:10px;font-weight:700;letter-spacing:.25em;text-shadow:0 1px 8px #06161b}.inside h1{position:relative;z-index:3;font:500 clamp(29px,4vw,48px)/1.1 "Playfair Display",serif;max-width:95%;margin:8px 0;color:#fff9ed;text-shadow:0 3px 14px #04252c}.inside h1 i{color:#e6bd72;font-weight:400}.couple-art{position:absolute;z-index:2;bottom:-4%;left:50%;transform:translateX(-50%);height:79%;width:100%;object-fit:contain;object-position:bottom;filter:drop-shadow(0 15px 15px #071c20a6)}.inside-bottom{position:absolute;bottom:15px;margin:0}.door{position:absolute;z-index:4;top:0;bottom:0;width:50%;transform-style:preserve-3d;transition:transform 1.65s cubic-bezier(.23,.76,.22,1);backface-visibility:hidden}.door-left{left:0;transform-origin:left center}.door-right{right:0;transform-origin:right center}.door-panel{height:100%;border:8px solid #d9ae5d;background:repeating-linear-gradient(90deg,transparent 0 14px,#0002 15px 17px),linear-gradient(120deg,#f0cf83 0%,#ad7029 17%,#ecc573 44%,#744c20 78%,#d8a95c 100%);box-shadow:inset 0 0 0 12px #98662c,inset 0 0 0 14px #f6dc9a,inset 0 0 0 27px #ad7c39,10px 0 30px #0006;display:grid;place-items:center}.door-left .door-panel{border-radius:95% 0 0 0 / 47% 0 0 0}.door-right .door-panel{border-radius:0 95% 0 0 / 0 47% 0 0}.door-flower{font-size:70px;color:#ffe6a7;text-shadow:0 0 20px #472a0b}.lock{position:absolute;z-index:6;left:50%;top:51%;transform:translate(-50%,-50%);width:115px;height:150px;border:0;background:transparent;color:#fff;display:flex;align-items:center;flex-direction:column;filter:drop-shadow(0 8px 10px #1b130e);animation:swing 2.6s ease-in-out infinite;transform-origin:50% 0}.shackle{width:59px;height:59px;border:11px solid #f4d991;border-bottom:0;border-radius:38px 38px 0 0;box-shadow:inset 3px 0 #87551b,3px 0 #513410}.lock-body{width:88px;height:72px;border-radius:13px;background:linear-gradient(130deg,#ffe5a1,#bb8132 60%,#6d4318);border:4px ridge #fbe4a9;display:grid;place-items:center;box-shadow:inset 0 0 0 3px #96601c}.keyhole{font-size:26px;color:#60401d}.lock-hint{white-space:nowrap;margin-top:12px;font-size:10px;font-weight:700;letter-spacing:.22em;text-shadow:0 2px 5px #000}.portal.open .door-left{transform:rotateY(-112deg)}.portal.open .door-right{transform:rotateY(112deg)}.portal.open .lock{animation:unlock .7s forwards;pointer-events:none}.portal.open .shackle{transform:rotate(-35deg) translate(-5px,-6px);transform-origin:bottom left}.stage-caption{z-index:2;margin:20px 0 0;color:#e8d3ac;font:italic 21px "Playfair Display",serif;text-align:center}.enter-link{z-index:2;margin-top:17px;border:1px solid #e6bd72;padding:13px 20px;font-size:11px;font-weight:700;letter-spacing:.2em}.enter-link[hidden]{display:none}.invitation-intro{min-height:90svh;display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;padding:80px 20px;background:linear-gradient(180deg,#082d34,#061b24)}.intro-symbol{font-size:55px;color:var(--gold)}.invitation-intro h2,.section-head h2{font:500 clamp(50px,8vw,112px)/1 "Playfair Display",serif;letter-spacing:-.05em;max-width:850px;margin:20px 0}.invitation-intro h2 em{color:var(--gold);font-weight:400}.intro-copy{font:italic clamp(20px,2.5vw,28px)/1.5 "Playfair Display",serif;max-width:650px;color:#e7d9bf}.intro-rule{width:min(470px,70vw);border-top:1px solid #e6bd7280;position:relative;margin:33px auto 16px}.intro-rule span{position:absolute;top:-13px;left:50%;transform:translateX(-50%);background:#07252d;padding:0 10px;color:var(--gold)}.intro-date{font-size:13px;letter-spacing:.22em;color:var(--gold);text-transform:uppercase}.scroll-button{margin-top:28px;background:var(--gold);color:#062329;padding:15px 22px;font-size:12px;font-weight:700;letter-spacing:.13em}.events{padding:100px 24px 70px;background:#f5efdf;color:#132930}.section-head{text-align:center;max-width:800px;margin:0 auto 65px}.section-head h2{margin:12px auto;color:#12363a;font-size:clamp(46px,6vw,84px)}.section-head>p:last-child{font-size:17px;color:#4c5652}.event-card{max-width:1100px;margin:0 auto 25px;min-height:540px;display:grid;grid-template-columns:minmax(250px,38%) 1fr;background:#fffaf0;box-shadow:0 15px 35px #083b3320;border:1px solid #b08b52}.event-visual{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;background:radial-gradient(circle at 50% 30%,#276069,#07262e 72%);color:#fff6e6;padding:40px;position:relative;overflow:hidden}.event-visual:before{content:"";position:absolute;inset:20px;border:1px solid #d9b87770;border-radius:46% 46% 2px 2px / 24% 24% 2px 2px}.event-number{color:var(--gold);letter-spacing:.3em;font-size:13px}.event-symbol{font-size:70px;color:var(--gold);line-height:1.5}.event-visual h3{font:italic 500 clamp(42px,5vw,74px) "Playfair Display",serif;margin:14px 0}.event-visual p{font-size:12px;letter-spacing:.2em;color:#ecd8ac}.event-details{padding:clamp(28px,4vw,60px)}.event-details .eyebrow{text-align:left;color:#8d5f25}.event-details h3{font:500 clamp(43px,5vw,70px) "Playfair Display",serif;margin:5px 0 14px}.event-description{font:italic 24px/1.35 "Playfair Display",serif;color:#4b514d;margin:0 0 26px}.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px 28px;border-top:1px solid #a88e61;border-bottom:1px solid #a88e61;padding:20px 0}.detail-grid dt{color:#8b672e;font-size:11px;font-weight:700;letter-spacing:.14em}.detail-grid dd{margin:5px 0 0;font-size:16px;line-height:1.4}.program{margin:20px 0 0}.program summary{cursor:pointer;font-weight:700}.program li{margin:7px 0}.actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:23px}.actions a,.actions button{background:#0a3940;color:#fff;border:1px solid #0a3940;padding:13px 16px;font-size:13px;font-weight:700}.actions button{background:transparent;color:#0a3940}footer{display:flex;justify-content:space-between;gap:20px;padding:35px 5%;background:#061a20;color:var(--gold);font-size:13px;letter-spacing:.12em}#toast{position:fixed;bottom:25px;right:25px;background:#fff5dc;color:#14363c;padding:12px 17px;box-shadow:0 10px 30px #0005;opacity:0;transform:translateY(10px);transition:.25s;z-index:20}#toast.visible{opacity:1;transform:none}@keyframes swing{0%,100%{transform:translate(-50%,-50%) rotate(-8deg)}50%{transform:translate(-50%,-50%) rotate(8deg)}}@keyframes unlock{0%{opacity:1}35%{transform:translate(-50%,-50%) rotate(-15deg)}100%{transform:translate(-50%,150%) rotate(75deg);opacity:0}}@keyframes twinkle{from{opacity:.4}to{opacity:1}}@media(max-width:700px){.topbar{padding:19px 16px;font-size:9px}.topbar button{font-size:10px;padding:9px}.portal-stage{padding-top:90px}.portal{width:min(88vw,440px);height:min(67vh,580px);min-height:360px}.stage-overline{font-size:10px}.inside h1{font-size:clamp(25px,7vw,38px)}.couple-art{height:72%}.inside-top{font-size:8px}.event-card{grid-template-columns:1fr}.event-visual{min-height:250px}.event-details{padding:28px}.detail-grid{grid-template-columns:1fr}.invitation-intro h2{font-size:clamp(50px,12vw,80px)}footer{font-size:10px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.stars,.lock{animation:none}.door,.lock,#toast{transition:none}.portal.open .door-left{transform:translateX(-100%)}.portal.open .door-right{transform:translateX(100%)}.portal.open .lock{opacity:0;transform:translate(-50%,-50%)}}
