:root{--ink:#514f3e;--paper:#f7f2e7;--accent:#8d4d39}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;color:var(--ink);background:var(--paper);font:16px/1.7 'Trebuchet MS',sans-serif;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%238e775b' opacity='.045' filter='url(%23n)' d='M0 0h180v180H0z'/%3E%3C/svg%3E")}button,a{-webkit-tap-highlight-color:transparent}a{color:inherit;text-underline-offset:5px}button{font:inherit;color:inherit;cursor:pointer}header{max-width:1280px;margin:auto;padding:28px 5%;display:flex;align-items:center;justify-content:space-between}.wordmark{font:italic 25px Georgia,serif;text-decoration:none}.wordmark span{display:block;font:8px/2.5 sans-serif;letter-spacing:2px}.rsvp{font-size:12px;border-bottom:1px solid;padding:7px 0;text-decoration:none}.intro{text-align:center;padding:32px 20px 0}.eyebrow{font-size:10px;letter-spacing:2.4px}h1{font:normal clamp(42px,5.7vw,76px)/1.07 Georgia,serif;letter-spacing:-2px;margin:24px 0 15px}h1 em{color:var(--accent);font-weight:normal}.intro p{font-size:14px;margin:0 0 24px}.date{font-size:11px;letter-spacing:2px}.date i{margin:0 18px;color:var(--accent);font-size:18px}.room-wrap{max-width:1040px;margin:10px auto 0}.room{position:relative;width:100%;aspect-ratio:1000/680}.room>svg{width:100%;height:100%;display:block}.object{position:absolute;background:none;border:0;padding:0;transition:transform .25s;filter:drop-shadow(0 4px 2px #66503915)}.object:hover,.object:focus-visible{transform:translateY(-5px) rotate(-2deg)}.object span{position:absolute;white-space:nowrap;background:#fff7e8ee;font:italic 12px Georgia;padding:4px 9px;border-radius:3px;top:100%;left:50%;transform:translateX(-50%);opacity:0;transition:opacity .2s}.object:hover span,.object:focus-visible span{opacity:1}.object svg{width:100%;display:block}.frame{left:44.5%;top:34%;width:16%;height:21%;padding:8px;background:#9b7755;box-shadow:0 0 0 3px #e6c8a0;transform:rotate(-3deg)}.frame img{width:100%;height:100%;object-fit:cover;display:block}.clock{left:74%;top:25%;width:10%}.record{left:75%;top:55%;width:14.5%}.envelope{left:44%;top:78%;width:10%;transform:rotate(-9deg)}.book{left:57%;top:79%;width:9%;transform:rotate(4deg)}.room-hint{text-align:center;font:italic 14px Georgia;margin:0 12px 34px}.mobile-nav{display:flex;justify-content:center;gap:8px;flex-wrap:wrap;padding:0 20px 25px}.mobile-nav button{background:none;border:1px solid #c9bea7;border-radius:20px;padding:7px 13px;font-size:11px}.details{max-width:880px;margin:35px auto 0;padding:55px 30px;display:grid;grid-template-columns:1.2fr 1fr;gap:45px;border-top:1px solid #cfc4ad}.details h2,h2{font:normal 38px/1.2 Georgia,serif;letter-spacing:-.7px;margin:20px 0}.details p{font-size:14px}.details a{font-size:12px;display:inline-block;margin:6px 0}#rsvp{text-align:center;padding:70px 20px 80px;background:#e7e7d8}#rsvp p{font-size:14px}.primary{display:inline-block;background:#795c46;color:#fff9ed;text-decoration:none;padding:12px 37px;margin:14px 0}.small{font-size:11px!important;opacity:.8}footer{padding:32px 5%;font:italic 12px Georgia;display:flex;justify-content:space-between;gap:25px}footer span{font-style:normal;font-size:10px;letter-spacing:2px}dialog{border:1px solid #bcaa8d;padding:54px 42px 40px;background:var(--paper);color:var(--ink);max-width:720px;width:calc(100% - 28px);max-height:88dvh;box-shadow:0 20px 100px #332e3466}dialog::backdrop{background:#3b392b77;backdrop-filter:blur(4px)}.close{position:absolute;right:14px;top:8px;border:0;background:none;font-size:30px;width:44px;height:44px}dialog h2{font-size:36px}dialog p{font:17px/1.85 Georgia,serif}.signature{font-style:italic!important;color:var(--accent)}.gallery{display:grid;grid-template-columns:1fr 1fr;gap:14px}.gallery figure{margin:0;background:#fff9ed;padding:8px 8px 16px}.gallery img{width:100%;height:auto;display:block}.gallery figcaption{font:italic 12px/1.5 Georgia;margin-top:8px}.timeline{list-style:none;padding:0}.timeline li{display:grid;grid-template-columns:85px 1fr;gap:10px;padding:17px 0;border-bottom:1px solid #d9cdb8}.timeline time{font-size:12px;color:var(--accent)}.timeline strong{font:normal 19px Georgia}.timeline p{font:13px/1.6 sans-serif;margin:6px 0}iframe{width:100%;aspect-ratio:16/9;border:0}button:focus-visible,a:focus-visible{outline:3px solid #92543b;outline-offset:6px}@media(max-width:600px){header{padding:20px 23px}.wordmark{font-size:23px}.intro{padding-top:28px}h1{letter-spacing:-1.5px}.eyebrow{font-size:8px}.date{font-size:9px}.room-wrap{margin-top:25px;overflow:hidden}.room{width:145%;margin-left:-22.5%}.object span{display:none}.room-hint{font-size:12px;margin:10px 20px 25px}.mobile-nav{gap:7px}.mobile-nav button{min-height:40px}.details{margin:10px 24px 0;padding:35px 0;grid-template-columns:1fr;gap:6px}.details h2{font-size:33px}.details p{margin-top:10px}#rsvp{padding:55px 23px}#rsvp h2{font-size:32px}footer{flex-direction:column;text-align:center;gap:15px}dialog{padding:45px 23px 28px}.gallery{gap:10px}dialog p{font-size:16px}.frame{padding:5px}.clock{width:11%}.envelope{width:12%;left:43%}.book{width:10%}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
/* Painted room and tactile details */
@font-face{font-family:Caveat;src:url('assets/caveat.ttf') format('truetype');font-weight:400 700;font-display:swap}
.intro{padding-top:18px}h1{font-size:clamp(42px,5vw,68px)}.room-wrap{max-width:1120px;margin:30px auto 0}.painted-room{aspect-ratio:3/2;isolation:isolate;overflow:visible}.room-art{width:100%;height:100%;object-fit:contain;display:block;mask-image:linear-gradient(to bottom,transparent,black 5%,black 96%,transparent);-webkit-mask-image:linear-gradient(to bottom,transparent,black 5%,black 96%,transparent)}.fx-defs{position:absolute!important;width:0!important;height:0!important;overflow:hidden}.object{filter:none}.frame{left:41.16%;top:21.9%;width:15.62%;height:29.7%;padding:0;background:none;box-shadow:none;transform:none}.frame img{object-position:center;box-shadow:inset 0 0 12px #59452d}.clock{left:72%;top:19%;width:9%}.hotspot{border:1px solid transparent;min-width:44px;min-height:44px}.hotspot:after{content:'';position:absolute;inset:0;border-radius:45%;box-shadow:0 0 0 3px #f5e2b777;opacity:0;transition:opacity .25s}.hotspot:hover:after,.hotspot:focus-visible:after{opacity:1}.record{left:81%;top:44.5%;width:15%;height:16%;transform:none}.envelope{left:53.8%;top:78%;width:8.8%;height:6.6%;transform:none}.book{left:49.7%;top:74%;width:11.5%;height:6.5%;transform:none}.record-note{position:absolute;top:-15px;right:8%;font:25px Georgia;color:#8d4d39;opacity:0;transition:opacity .3s}.record:hover .record-note,.record[aria-expanded=true] .record-note{opacity:1}.object span{z-index:5;pointer-events:none}.floor-lamp{left:27.7%;top:13%;width:13%;height:72%;z-index:2;transform:none!important}.floor-lamp>svg{height:100%;overflow:visible}.floor-lamp .lamp-aura{position:absolute;left:-65%;top:8%;width:190%;height:62%;border-radius:50%;background:radial-gradient(ellipse,#ffcd5a70,transparent 65%);opacity:0;transform:none;pointer-events:none;transition:opacity .4s;filter:blur(7px);z-index:-1}.floor-lamp:hover .lamp-aura,.floor-lamp:focus-visible .lamp-aura,.floor-lamp[aria-pressed=true] .lamp-aura{opacity:1}.floor-lamp:hover .bulb,.floor-lamp[aria-pressed=true] .bulb{fill:#fff5b4;filter:drop-shadow(0 0 8px #ffd050)}.floor-lamp:hover .shade,.floor-lamp[aria-pressed=true] .shade{fill:#f4c86a}.pendant{left:59.5%;top:0;width:13%;height:34%;transform-origin:50% 0;transform:none;z-index:3}.pendant svg{height:100%;overflow:visible}.pendant:hover{transform:none}.pendant.swaying{animation:lamp-sway 2.2s ease-in-out both}.pendant.swaying span{opacity:1}@keyframes lamp-sway{0%{transform:rotate(0)}18%{transform:rotate(9deg)}38%{transform:rotate(-7deg)}58%{transform:rotate(4deg)}77%{transform:rotate(-2deg)}100%{transform:rotate(0)}}
.room-hint{margin:18px 15px 25px}.mobile-nav button{border-color:#bdad90;background:#fff9ed66}.mobile-nav button:hover{background:#e5d8bf}
/* The evening: six small pictures, six little moments. */
.venue-caption{font:14px/1.5 Georgia!important;margin:0 0 25px}.evening-icons{list-style:none;padding:0;margin:26px 0;display:grid;grid-template-columns:repeat(3,1fr);gap:28px 12px}.evening-icons li{display:flex;align-items:center;flex-direction:column;text-align:center}.evening-icons svg{width:64px;height:64px;color:#8d6244;margin-bottom:13px;background:radial-gradient(ellipse,#e5d3ad50,transparent 70%)}.evening-icons time{font:10px/1.5 sans-serif;letter-spacing:1.3px;color:#8d4d39}.evening-icons li>span{font:21px/1.4 Caveat,cursive;margin-top:6px}.centered{text-align:center}
/* A letter that unfolds into a short handwritten invitation. */
dialog.panel-letter{max-width:650px;padding-bottom:20px;overflow-x:hidden}.letter-scene{position:relative;height:550px;margin-top:24px;perspective:1200px;isolation:isolate}.mail-back{position:absolute;width:88%;height:190px;left:6%;bottom:14px;background:#c9ab80;border-radius:3px}.mail-flap{position:absolute;width:88%;height:170px;left:6%;bottom:180px;background:#d5b98d;clip-path:polygon(0 100%,50% 0,100% 100%);transform-origin:50% 100%;transform:rotateX(180deg);animation:open-flap .7s .2s ease forwards;z-index:3}.handwritten-letter{position:absolute;left:9%;width:82%;bottom:27px;background:#fffbef;padding:26px 27px 20px;box-shadow:0 1px 16px #735b3926;transform:translateY(170px) scale(.8);opacity:0;animation:letter-rise 1.1s .65s cubic-bezier(.2,.7,.2,1) forwards;z-index:2;border-top:1px solid #eee0c6}.handwritten-letter h2{font:30px/1.2 Caveat,cursive;margin:0 0 18px;letter-spacing:0}.handwritten-letter p{font:26px/1.23 Caveat,cursive;margin:17px 0;color:#5c5141}.handwritten-letter .signature{font-size:27px;color:#92543e}.mail-front{position:absolute;width:88%;height:190px;left:6%;bottom:14px;background:linear-gradient(30deg,#e0c59d 48%,transparent 49%) left/50.2% 100% no-repeat,linear-gradient(-30deg,#e6d0ac 48%,transparent 49%) right/50.2% 100% no-repeat;z-index:4;pointer-events:none;animation:envelope-settle .8s 1s forwards}.mail-seal{position:absolute;bottom:63px;left:calc(50% - 20px);width:40px;height:40px;border-radius:50%;text-align:center;background:#a65a45;color:#efd7bb;z-index:5;font:26px/40px Georgia;animation:seal-away .4s .1s forwards}@keyframes open-flap{to{transform:rotateX(0deg);z-index:1}}@keyframes letter-rise{0%{opacity:0;transform:translateY(150px) scale(.8)}20%{opacity:1}100%{opacity:1;transform:translateY(-98px) rotate(-1deg) scale(1)}}@keyframes seal-away{to{opacity:0;transform:translateY(30px) rotate(20deg)}}@keyframes envelope-settle{to{opacity:.75;transform:translateY(20px)}}
/* Four illustrated beats, with captions kept outside the artwork. */
dialog.panel-story{max-width:800px}.comic-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px 18px}.comic-grid figure{margin:0}.comic-panel{position:relative;aspect-ratio:1;overflow:hidden;background:#eadbc0}.comic-panel img{position:absolute;width:200%;height:200%;max-width:none;display:block}.comic-panel.panel-1 img{left:-100%;top:0}.comic-panel.panel-2 img{left:0;top:-100%}.comic-panel.panel-3 img{left:-100%;top:-100%}.comic-grid figcaption{font:22px/1.2 Caveat,cursive;display:flex;gap:10px;padding-top:10px}.comic-grid figcaption span{font:10px/2 sans-serif;color:#9d7b57;flex:none}
/* The official player stays visible, and only loads after a click. */
#music-dock[hidden]{display:none}#music-dock{position:fixed;bottom:20px;right:20px;width:340px;max-width:calc(100vw - 32px);background:#fff8ea;border:1px solid #bba17d;z-index:8;box-shadow:0 10px 45px #4a382d33;padding:10px}.music-heading{display:flex;justify-content:space-between;align-items:center;padding:0 0 8px;font-size:12px}.music-heading button{border:0;background:none;font:25px/1 Georgia;width:36px;height:36px}#music-player iframe{width:100%;height:210px;aspect-ratio:auto;display:block}#music-dock p{font-size:10px;line-height:1.5;margin:8px 0 2px}#music-dock>a{font-size:10px}dialog .small{line-height:1.6}
@media(max-width:600px){.intro{padding-top:18px}.room-wrap{margin-top:20px;overflow:visible}.painted-room{width:100%;margin-left:0;aspect-ratio:3/2}.room-art{mask-image:linear-gradient(to bottom,transparent,black 6%,black 95%,transparent)}.frame{left:41.16%;top:21.9%;width:15.62%;height:29.7%;padding:0}.clock{width:10%;left:72%;top:18%}.envelope{left:53.8%;top:77%;width:10%;height:9%}.book{left:49%;top:71%;width:12%;height:9%}.floor-lamp{left:27.7%;top:13%;width:13%;height:72%}.record{left:81%;top:44.5%;width:15%;height:16%}.room-hint{font-size:12px;margin:16px 20px 22px}.mobile-nav{padding-bottom:16px}.mobile-nav button{font-size:12px}.evening-icons{grid-template-columns:repeat(2,1fr);gap:23px 12px}.evening-icons svg{width:58px;height:58px}.evening-icons li>span{font-size:22px}dialog.panel-evening h2{font-size:30px}dialog.panel-letter{padding:43px 16px 18px}.letter-scene{height:560px;margin-top:8px}.handwritten-letter{left:5%;width:90%;padding:23px 18px}.handwritten-letter h2{font-size:29px}.handwritten-letter p{font-size:25px}.mail-back,.mail-front,.mail-flap{width:96%;left:2%}.comic-grid{grid-template-columns:1fr;gap:25px}.comic-grid figcaption{font-size:24px}.comic-panel{max-width:420px}#music-dock{right:16px;bottom:16px}.hotspot{min-width:32px;min-height:32px}.room .object:focus-visible{outline-offset:2px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}.mail-flap{transform:rotateX(0);z-index:1}.handwritten-letter{opacity:1;transform:translateY(-98px)}.mail-seal{opacity:0}.mail-front{transform:translateY(20px);opacity:.75}}

@media(max-width:600px){.book.hotspot{top:74%;height:4.5%;min-width:0;min-height:0}.envelope.hotspot{top:79%;height:6%;min-width:0;min-height:0}}
#music-dock{width:340px;padding:12px 16px}.music-heading{padding:0;font-family:Georgia,serif}.audio-controls{display:grid;grid-template-columns:42px 1fr;gap:8px;align-items:center}.audio-controls>button{border:1px solid #b4a084;background:#f0e5ce;color:#71513d;border-radius:50%;width:38px;height:38px;font-size:16px}.audio-controls #music-status{font:12px/1.4 Caveat,cursive}.audio-controls label{grid-column:2;display:flex;align-items:center;gap:10px;font:9px sans-serif;letter-spacing:.5px}.audio-controls input{width:90px;accent-color:#8d6244;height:20px}#music-dock>a{display:block;margin-top:10px;font-size:9px}.record[aria-pressed=true] .record-note{opacity:1;animation:music-note 2s ease-in-out infinite}.record[aria-pressed=false] .record-note{opacity:0}@keyframes music-note{0%,100%{transform:translateY(0) rotate(-8deg)}50%{transform:translateY(-6px) rotate(8deg)}}
/* Replies */
#reply-form{display:grid;gap:18px;margin-top:24px}#reply-form label{display:grid;gap:6px;font-size:13px}#reply-form input:not([type=radio]),#reply-form textarea,.admin-filters input,.admin-filters select{width:100%;border:1px solid #b9aa90;border-radius:2px;background:#fffcf3;padding:11px 12px;font:16px/1.4 'Trebuchet MS',sans-serif;color:var(--ink)}#reply-form textarea{resize:vertical}#reply-form small{font-size:10px;line-height:1.5;color:#746855}#reply-form fieldset{border:0;padding:0;margin:0}#reply-form legend{font:14px/1.5 Georgia;margin-bottom:10px}#reply-form .radio-option{display:flex;align-items:center;gap:9px;min-height:40px}#reply-form input[type=radio]{accent-color:#8d6244;width:18px;height:18px}.guest-counts{display:grid;grid-template-columns:1fr 1fr;gap:20px}#attending-fields{display:grid;gap:18px}#attending-fields[hidden]{display:none}#additional-guests{display:grid;gap:14px}#reply-form .honey{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}.form-error{font:13px/1.5 sans-serif!important;color:#963e2e;margin:0!important}.rsvp-date{font:14px Georgia!important}#reply-form .primary{border:0;margin:0;min-height:48px;font-size:14px;cursor:pointer}#reply-form .primary:disabled{opacity:.6;cursor:wait}.reply-success{font:18px/1.7 Caveat,cursive!important}#reply-form h3{font:28px/1.3 Georgia}.panel-rsvp h2{margin-bottom:10px}#guest-list-link[hidden]{display:none}footer #guest-list-link{font:11px sans-serif}#music-dock .music-heading{padding:0}
.admin-shell{max-width:1220px;margin:auto;padding:44px 28px 80px}.admin-shell>a{font-size:12px}.admin-heading{display:flex;justify-content:space-between;align-items:center;margin:40px 0 30px;gap:20px}.admin-heading h1{font-size:44px;letter-spacing:1px;margin:10px 0}.admin-heading p{font-size:13px}.admin-heading .primary{border:0;font-size:12px;cursor:pointer}.primary:disabled{opacity:.45;cursor:default}.reply-totals{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid #c5b69c;border-bottom:1px solid #c5b69c;padding:25px 0;margin-bottom:35px}.reply-totals>div{display:flex;flex-direction:column;gap:5px}.reply-totals strong{font:38px Georgia}.reply-totals span{font-size:11px}.admin-filters{display:flex;gap:18px;align-items:end}.admin-filters label{font-size:11px;display:grid;gap:6px}.admin-filters label:first-child{flex:1}.admin-filters button{border:1px solid #b9aa90;background:transparent;padding:13px 16px;font-size:12px;cursor:pointer}.guest-table-wrap{overflow-x:auto}.guest-table{width:100%;border-collapse:collapse;font-size:12px}.guest-table th{text-align:left;font-weight:400;font-size:11px;padding:14px 12px;border-bottom:1px solid #a99575;white-space:nowrap}.guest-table td{padding:20px 12px;border-bottom:1px solid #ded2bc;vertical-align:top;white-space:pre-line;min-width:125px;word-break:break-word}.guest-table td:first-child{min-width:210px}.guest-table td:nth-child(4){min-width:190px}.contact-text{font-size:11px;margin-top:5px}.attendance-tag{display:inline-block;padding:3px 9px;background:#e1e6d8;border-radius:15px;font-size:11px}.attendance-tag.no{background:#eee1d6}.test-label,.duplicate-label{display:block;font-size:10px;color:#95553c;margin-top:7px}.guest-table button{font-size:10px;background:none;border:0;text-decoration:underline;padding:5px 0}.sr-only{position:absolute;width:1px;height:1px;clip-path:inset(50%);overflow:hidden}#admin-status{font-size:12px;margin:20px 0}@media(max-width:600px){.admin-shell{padding:25px 20px 50px}.admin-heading{align-items:start;flex-direction:column;gap:0}.admin-heading h1{font-size:36px}.reply-totals{gap:20px;grid-template-columns:1fr 1fr}.admin-filters{flex-wrap:wrap}.admin-filters label:first-child{flex-basis:100%}.guest-counts{gap:12px}#reply-form{gap:16px}}
