/* A wrapped invitation: black satin loosens, then the paper opens. */
[hidden]{display:none!important}
.opening-active{overflow:hidden}
.opening{position:fixed;inset:0;width:100%;height:100dvh;max-width:none;max-height:none;margin:0;padding:24px 20px;border:0;border-radius:0;background:#f4f4f2;overflow:hidden;color:var(--ink)}
.opening[open]{display:grid;place-items:center}
.opening::backdrop{background:#f4f4f2}
.opening-content{width:100%;display:flex;flex-direction:column;align-items:center}
.opening-content:focus,#top:focus{outline:none}
.packet{position:relative;isolation:isolate;display:block;width:min(76vw,39dvh,350px);aspect-ratio:2/3;padding:0;border:0;outline-offset:12px;background:#fff;box-shadow:0 14px 42px #28352212;perspective:1000px;border-radius:1px;color:var(--ink)}
.packet-photo{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-1}
.paper-wing{position:absolute;top:0;bottom:0;width:50.1%;background:#fffffc;backface-visibility:hidden}
.paper-wing-left{left:0;transform-origin:left center;box-shadow:inset -1px 0 #dce0d544}
.paper-wing-right{right:0;transform-origin:right center}
.packet-frame{position:absolute;inset:6% 7%;border:1px solid var(--ink)}
.packet-script{position:absolute;top:10%;left:18%;width:64%;line-height:1}
.packet-script img{display:block;width:100%;height:auto}
.packet-names{position:absolute;bottom:13%;left:0;width:100%;font-family:'Wedding Latin',sans-serif;font-size:12px;line-height:1.6;letter-spacing:.065em}
.packet-names span{padding:0 4px;font-size:12px}
.packet-date{position:absolute;bottom:8%;left:0;width:100%;font-family:'Wedding Latin',sans-serif;font-size:10px;letter-spacing:.1em;font-variant-numeric:tabular-nums}
.ribbon-art{position:absolute;top:57%;left:2%;width:96%;aspect-ratio:1122/1402;transform:translateY(-31%);pointer-events:none}
.ribbon-art img{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:contain;transform-origin:50% 31%}
.ribbon-pieces{position:absolute;inset:0;opacity:0}
.ribbon-loop-left{clip-path:polygon(0 0,46% 0,46% 26%,45% 30%,0 33%)}
.ribbon-loop-right{clip-path:polygon(46% 0,100% 0,100% 35%,55% 35%,55% 26%,46% 26%)}
.ribbon-tail-left{clip-path:polygon(0 33%,45% 30%,46% 33%,51% 35%,51% 100%,0 100%)}
.ribbon-tail-right{clip-path:polygon(55% 35%,100% 35%,100% 100%,51% 100%,51% 35%)}
.ribbon-knot{clip-path:polygon(46% 26%,55% 26%,55% 35%,51% 35%,46% 33%,45% 30%)}
.ribbon-wrap{position:absolute;top:57%;height:7px;width:50.2%;background:#171717;box-shadow:0 2px 2px #00000016}
.ribbon-band-left{left:0}.ribbon-band-right{right:0}
.opening-hint{font-size:15px;text-align:center;margin-top:60px;color:#434b3e}
.opening-skip{min-height:48px;padding:12px 18px;margin-top:8px;background:transparent;border:0;font-size:13px;color:#62685e;text-decoration:underline;text-underline-offset:5px}
.untying .packet{animation:packet-release 1.95s cubic-bezier(.16,1,.3,1) both}
.untying .ribbon-whole{opacity:0}
.untying .ribbon-pieces{opacity:1}
.untying .ribbon-tail-right{animation:pull-ribbon 1.05s cubic-bezier(.65,0,.2,1) both}
.untying .ribbon-loop-right{animation:untie-right .85s cubic-bezier(.65,0,.2,1) .08s both}
.untying .ribbon-loop-left{animation:untie-left .85s cubic-bezier(.65,0,.2,1) .2s both}
.untying .ribbon-tail-left{animation:release-tail .9s cubic-bezier(.65,0,.2,1) .25s both}
.untying .ribbon-knot{animation:release-knot .7s cubic-bezier(.65,0,.2,1) .18s both}
.untying .ribbon-band-left{animation:slide-ribbon-left .65s cubic-bezier(.65,0,.2,1) .62s both}
.untying .ribbon-band-right{animation:slide-ribbon-right .65s cubic-bezier(.65,0,.2,1) .62s both}
.untying .paper-wing-left{animation:open-paper-left .9s cubic-bezier(.16,1,.3,1) .95s both}
.untying .paper-wing-right{animation:open-paper-right .9s cubic-bezier(.16,1,.3,1) 1s both}
.untying .packet-script,.untying .packet-names,.untying .packet-date,.untying .packet-frame{animation:paper-print-away .35s ease .88s both}
.untying .opening-hint,.untying .opening-skip{animation:paper-print-away .25s ease both}
.untying{animation:veil-away .45s ease 1.5s both}
.untying::backdrop{animation:veil-away .45s ease 1.5s both}
.replay-opening{display:block;min-height:44px;margin:4px auto 0;padding:10px 12px;background:transparent;border:0;font-size:12px;color:var(--muted);text-decoration:underline;text-underline-offset:4px}
@keyframes pull-ribbon{0%{transform:translate(0,0)}35%{transform:translate(26px,-8px) rotate(-6deg)}78%,100%{transform:translate(340px,-28px) rotate(-28deg);opacity:0}}
@keyframes untie-right{0%{transform:scale(1)}35%{transform:scale(1.1,.65) rotate(-7deg)}80%,100%{transform:translateX(130px) scale(.15,.08);opacity:0}}
@keyframes untie-left{0%{transform:scale(1)}35%{transform:scale(.9,.5) rotate(14deg)}85%,100%{transform:translateX(50px) scale(.1,.06);opacity:0}}
@keyframes release-tail{0%{transform:translate(0,0)}45%{transform:rotate(12deg) translateY(8px)}100%{transform:translate(-310px,55px) rotate(30deg);opacity:0}}
@keyframes release-knot{0%{transform:translateX(0)}50%{transform:translateX(20px) scale(1.2,.5)}100%{transform:translateX(110px) scale(.2,.1);opacity:0}}
@keyframes slide-ribbon-left{to{transform:translateX(-650px);opacity:0}}
@keyframes slide-ribbon-right{to{transform:translateX(650px);opacity:0}}
@keyframes open-paper-left{to{transform:translateX(-18%) rotateY(-105deg);opacity:0}}
@keyframes open-paper-right{to{transform:translateX(18%) rotateY(105deg);opacity:0}}
@keyframes paper-print-away{to{opacity:0}}
@keyframes packet-release{0%,58%{transform:scale(1)}100%{transform:scale(1.12);box-shadow:0 24px 65px #28352200}}
@keyframes veil-away{to{opacity:0}}

.calendar-dialog{width:calc(100% - 36px);max-width:416px;max-height:88dvh;padding:22px 24px 28px;border:0;border-radius:8px;overflow:auto;color:var(--ink)}
.calendar-dialog-header{display:flex;align-items:center;justify-content:space-between;gap:12px}
.calendar-dialog-header h2{font-size:23px;letter-spacing:-.03em}
.calendar-event{font-size:15px;line-height:1.9;margin:17px 0 24px}
.calendar-event strong{font-size:16px}
.calendar-options{display:flex;flex-direction:column;gap:12px}
.calendar-options a,.tmap-open{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:58px;padding:13px 15px;border:1px solid #cfd1cb;border-radius:3px;text-decoration:none;font-size:16px}
.calendar-options a span{font-size:12px;color:var(--muted)}
.calendar-options a.calendar-recommended,.tmap-open{background:var(--ink);border-color:var(--ink);color:#fff}
.calendar-options a.calendar-recommended{order:-1}
.calendar-options a.calendar-recommended span{color:#eee}
.calendar-platform-note{font-size:14px;line-height:1.9;margin-top:23px;color:#4f554d}
.calendar-file{display:inline-block;min-height:44px;padding:12px 0;font-size:14px;text-underline-offset:5px}
.calendar-browser-note{font-size:13px;line-height:1.8;color:var(--muted);margin-top:4px}
.tmap-open{justify-content:center}

/* Each group rises once, with text readable in its settled state. */
.reveal{transition:opacity .7s cubic-bezier(.16,1,.3,1),transform .7s cubic-bezier(.16,1,.3,1),filter .7s cubic-bezier(.16,1,.3,1)}
.reveal-waiting{opacity:0;transform:translateY(24px);filter:blur(2px)}
.quick-links a{font-size:12px;padding-left:4px;padding-right:4px}
.travel-notes h3{display:flex;align-items:center;gap:10px;font-size:18px}
.travel-notes h3 svg{width:21px;height:21px}
#transit-guide{white-space:pre-line}
#transit-guide strong:first-child{font-size:20px}
.travel-notes>div+div{margin-top:25px;padding-top:27px;border-top:1px solid var(--line)}
.travel-notes p.travel-detail{font-size:14px;color:#62685e;margin-top:16px}
.travel-notes p.travel-detail strong{font-size:15px;font-weight:400}
.travel-notes p+p{margin-top:15px}
.transport-source{display:inline-flex;align-items:center;gap:7px;min-height:46px;padding:12px 0;margin-top:25px;color:#555d50;font-size:13px;text-underline-offset:5px}
.transport-source svg{width:14px;height:14px}

.rsvp-section{border-top:1px solid var(--line);padding-top:74px;padding-bottom:74px}
.rsvp-section h2{font-size:24px}
.rsvp-section .dark-button{margin-top:28px}
.rsvp-receipt{font-size:14px;line-height:1.9;margin-top:20px;color:#4f554d}
.rsvp-dialog{width:calc(100% - 32px);max-width:420px;max-height:90dvh;border:0;padding:0 25px 28px;border-radius:8px;overflow:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#a5ad9e #fff}
.rsvp-dialog[open]{animation:form-arrive .3s cubic-bezier(.16,1,.3,1) both}
.rsvp-dialog-header{display:flex;align-items:center;justify-content:space-between;gap:12px;position:sticky;top:0;z-index:2;padding:22px 0 12px;background:#fff}
.rsvp-dialog h2{font-size:23px;letter-spacing:-.035em}
.icon-button{display:grid;place-items:center;min-width:46px;min-height:46px;padding:10px;margin-right:-10px;background:transparent;color:var(--ink);border:0}
.rsvp-form-intro{font-size:15px;line-height:1.9;color:#555d50;margin:8px 0 26px}
.rsvp-dialog fieldset{min-width:0;padding:0;margin:24px 0 0;border:0}
.rsvp-dialog legend,.field-label{display:block;font-size:16px;line-height:1.6;font-weight:700;margin-bottom:11px;padding:0}
.field-label{margin-top:24px}
.field-label span{font-size:13px;font-weight:400;color:#62685e;margin-left:8px}
.choices{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.choice{position:relative;display:block;min-width:0}
.choice input{position:absolute;width:1px;height:1px;opacity:0;margin:0}
.choice span{display:flex;justify-content:center;align-items:center;min-height:52px;padding:11px 6px;border:1px solid #c8cdc3;border-radius:4px;font-size:15px;line-height:1.5;text-align:center;cursor:pointer}
.choice input:checked+span{background:var(--pink-wash);border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink);color:var(--ink);font-weight:700}
.choice input:focus-visible+span{outline:2px solid var(--ink);outline-offset:3px}
.rsvp-dialog input.name-input,.rsvp-dialog select{display:block;width:100%;min-height:52px;padding:12px 13px;margin:0;border:1px solid #aeb7a6;border-radius:4px;background:#fff;color:var(--ink);font-size:16px;line-height:1.6}
.rsvp-dialog input::placeholder{color:#62685e}
.meal-choices{grid-template-columns:1fr 1fr 1fr;gap:8px}
.meal-choices .choice span{font-size:14px}
.consent{display:flex;align-items:flex-start;gap:11px;min-height:48px;margin-top:30px;font-size:14px;line-height:1.85;cursor:pointer}
.rsvp-dialog .consent input{width:20px;height:20px;flex:none;margin:4px 0 0;accent-color:var(--ink)}
.privacy-note{font-size:13px;color:#596151;margin-top:6px}
.privacy-note summary{cursor:pointer;min-height:44px;padding:9px 0;text-decoration:underline;text-underline-offset:4px}
.privacy-note p{font-size:13px;line-height:1.95;margin:4px 0 14px}
.rsvp-error{font-size:15px;font-weight:700;color:var(--ink);background:var(--pink-wash);padding:13px 15px;margin-top:20px;border-radius:4px}
.rsvp-dialog .dark-button{max-width:none;margin-top:23px;min-height:54px}
.rsvp-dialog .dark-button:disabled{background:#62685e;border-color:#62685e;color:#fff;cursor:wait}
.form-trap{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}
.rsvp-success{text-align:center;padding:24px 0 0}
.rsvp-success>svg{width:62px;height:62px;stroke:var(--pink);stroke-width:1.7;margin:6px auto 22px}
.rsvp-success h3{font-size:20px;line-height:1.7;font-weight:700;letter-spacing:-.025em}
.rsvp-success p{font-size:16px;line-height:1.95;margin-top:14px}
.rsvp-success .dark-button{margin-top:30px}
@keyframes form-arrive{from{opacity:.5;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:359px){.quick-links a{font-size:11px}.rsvp-dialog{padding-left:20px;padding-right:20px}.rsvp-dialog h2{font-size:21px}.choice span{font-size:14px}.meal-choices .choice span{font-size:13px}.opening-hint{font-size:14px}}
@media(prefers-reduced-motion:reduce){.reveal,.reveal-waiting{opacity:1;transform:none;filter:none;transition:none}.replay-opening{display:none}.rsvp-dialog[open]{animation:none}.rsvp-error{scroll-behavior:auto}}
