@font-face {
  font-family: 'Wedding Chinese';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url('assets/noto-serif-tc-106-400-normal.woff2') format('woff2');
  unicode-range: U+2cb,U+5d1,U+5d9,U+5e2,U+5e8,U+5ea,U+633,U+e32,U+2252,U+2267,U+2573,U+25b3,U+25c4,U+2713,U+2715,U+30e2,U+4e28,U+4e3c,U+4e4d,U+4e70,U+4f88,U+4fef,U+5018,U+501a,U+5026,U+5137,U+513f,U+51f3,U+524b,U+5254,U+52d8,U+5308,U+5384,U+53cc,U+5443,U+5466,U+54a7-54a8,U+54bd,U+54c9,U+54cb,U+555e,U+556a,U+5580,U+560e,U+5614,U+561f,U+562f,U+566c,U+5679,U+56bc,U+56cd,U+56e7,U+56ed,U+572d,U+57d7,U+582f,U+589f,U+5b09,U+5ba5,U+5c51,U+5c90,U+5cef,U+5d16,U+5d84,U+5dd4,U+5e08,U+5e26,U+5f0a,U+5f20,U+606c,U+61c7,U+620f,U+625b,U+62a4,U+62d0,U+62f1,U+63a0,U+63c6,U+63f9,U+6413,U+6417,U+6483,U+64f7,U+650f,U+65a7,U+665f,U+66ae,U+66d6,U+66e0,U+6746,U+6756,U+67d1,U+6837,U+68d7,U+68e0,U+68f5,U+6977,U+6995,U+69a8,U+69b4,U+69d3,U+6a3d,U+6abb,U+6bb7,U+6bd3,U+6c47,U+6cc4,U+6cd3,U+6dae,U+6e26,U+6e29,U+6e5b,U+6eaf,U+6eba,U+7028,U+70b3,U+711a,U+733f,U+73c0,U+73ee,U+7444,U+745a,U+7487,U+7540,U+75a4,U+7729,U+779e,U+798e,U+79cd,U+79e9,U+7a3d,U+7a4c,U+7a9f,U+7ac4,U+7aff,U+7b77,U+7c27,U+7ca7,U+7cd9,U+7d76,U+7e43,U+7ea6,U+7ed9,U+7ff1,U+808b,U+809b,U+80fa,U+827a,U+8309,U+8328,U+832b,U+8396,U+83e0,U+840e,U+8425,U+852d,U+853b,U+8588,U+85e9,U+86b5,U+8718,U+87ec,U+8910,U+893b,U+89c1-89c2,U+8b3e,U+8baf,U+8bc1,U+8bcd,U+8bdd,U+8c41,U+8c48,U+8d2d,U+8d5e,U+8fbe,U+9015,U+90a8,U+90b5,U+90e1,U+9169,U+9183,U+91d0,U+91dc,U+9293,U+92f8,U+9472,U+9598,U+95ed,U+95fb,U+9605,U+96c7,U+9739,U+9742,U+9761,U+99ad,U+9ae6,U+9b1a,U+9b44,U+9bc9,U+9d3f,U+9dd7,U+9e7c,U+9e92,U+fe5d-fe5e,U+ff22-ff24,U+ff2f-ff30,U+ff33;
}
@font-face {
  font-family: 'Wedding Chinese';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url('assets/noto-serif-tc-119-400-normal.woff2') format('woff2');
  unicode-range: U+23-25,U+3d,U+2026,U+4e03,U+4e45,U+4e5d,U+4eae,U+4ed4,U+4ed8,U+4f01,U+4f11,U+4f3c,U+4f8b,U+4fc2,U+5019,U+505c,U+50c5,U+5145,U+51b7,U+5207,U+521d,U+525b,U+5287,U+52e2,U+535a,U+537b,U+5426,U+542b,U+5438,U+5462,U+54ea,U+555f,U+5566,U+5584,U+5609,U+570d,U+571f,U+5747,U+5802,U+58d3,U+591c,U+5920,U+5922,U+5957,U+5979,U+5a92,U+5abd,U+5b63,U+5b69,U+5b83,U+5b9c,U+5bb3,U+5bc4,U+5bf5,U+5c3c,U+5c40,U+5c4b,U+5c64,U+5cf6,U+5de6,U+5e0c,U+5e55,U+5eab,U+5ead,U+5ee0,U+5f85,U+5f8b,U+5fa9,U+5fd7-5fd8,U+5ff5,U+600e,U+6298,U+62db,U+62ff,U+639b,U+63a7,U+642d,U+6469,U+64ad,U+651d,U+653b,U+65b7,U+65cf,U+665a,U+666e,U+66fe,U+6728,U+674e,U+67b6,U+6821,U+6839,U+6843,U+6a94,U+6b50,U+6b62,U+6b72,U+6b7b,U+6bcd,U+6bdb,U+6c38,U+6c7a,U+6c7d,U+6c99,U+6cb9,U+6ce2,U+6cf0,U+6d17,U+6d32,U+6e2c,U+6fb3,U+7206,U+723e,U+725b,U+734e,U+7387,U+73ed,U+7565,U+7570,U+76ca,U+76e4,U+773e,U+77ed,U+77f3,U+7814,U+7834,U+7968,U+79d8,U+7a76,U+7a7f,U+7b11,U+7b46,U+7b54,U+7bc4,U+7d19,U+7d20,U+7d22,U+7d42,U+7d55,U+7e7c,U+7f85,U+7ffb,U+8077,U+8089,U+80cc,U+81c9,U+81f4,U+81fa,U+820a,U+822c,U+826f,U+85cd,U+86cb,U+88dc,U+8986,U+8a0e,U+8a2a,U+8a73,U+8a8c,U+8b1b,U+8b9a,U+8c50,U+8c61,U+8ca0,U+8cde,U+8cfd,U+8d8a,U+8df3,U+8e64,U+8ecd,U+8edf,U+8f38,U+8ff7,U+9000,U+9047,U+9060,U+90f5,U+9152,U+91ce,U+9280,U+9418,U+9435,U+9589,U+9592,U+9678,U+967d,U+968a,U+96aa,U+96c5,U+96d6,U+96dc,U+96f6,U+9732,U+9748,U+9802,U+9806,U+9808,U+9818,U+983b,U+984d,U+9867,U+98db,U+98f2,U+98fe,U+9a5a,U+9b06,U+9b5a,U+9bae,U+9e97,U+ff1b,U+ff5e;
}
@font-face {
  font-family: 'Wedding Chinese';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url('assets/noto-serif-tc-121-400-normal.woff2') format('woff2');
  unicode-range: U+3e,U+7e,U+3000,U+300a-300b,U+3010-3011,U+4e16,U+4e26,U+4e94,U+4e9b,U+4ea4,U+4eca-4ecb,U+4efb,U+4efd,U+4f46,U+4f55,U+4f9b,U+4f9d,U+4fbf,U+505a,U+5065,U+5099,U+50cf,U+50f9,U+512a,U+5143,U+5148,U+514d,U+5152,U+5169,U+5171,U+5177,U+518a,U+5217,U+5225,U+5247,U+5275,U+529f,U+52a9,U+5305,U+5341,U+5357,U+5361,U+5373,U+53bb,U+53c3,U+53c8,U+53d6-53d7,U+53e3,U+53ea,U+53f8,U+5404,U+559c,U+5668,U+56db,U+56e0,U+5712,U+5718,U+578b,U+57fa,U+58eb,U+592a,U+5c0b,U+5c0e,U+5c11,U+5c1a,U+5c55,U+5c71,U+5df1,U+5e2b,U+5e36,U+5e97,U+5eb7,U+5ee3,U+5efa,U+5f35,U+5f37,U+5f88,U+5f9e,U+5fc5,U+606f,U+60a8,U+6232,U+624d,U+6253,U+627e,U+6280,U+62cd,U+6301,U+6307,U+6392,U+63a5,U+6539,U+653e-653f,U+6559,U+6574,U+65c5,U+6613,U+66f8,U+672a,U+6797,U+67e5,U+6a19,U+6a23,U+6b61,U+6bcf,U+6bd4,U+6c11,U+6c42,U+6d41,U+6d77,U+6d88,U+6e05,U+6e2f,U+6eff,U+7136,U+7167,U+71df,U+738b,U+73a9,U+7403,U+7531,U+7537,U+754c,U+7559,U+767d-767e,U+76f4,U+793a,U+795e,U+79c1,U+79d1,U+7a2e,U+7a31,U+7a7a,U+7ae0,U+7ba1,U+7bc0,U+7c21,U+7cfb,U+7d04-7d05,U+7d1a,U+7d44,U+7d66,U+7d71,U+7de8,U+7e3d,U+8001,U+800c,U+805e,U+8072,U+81f3,U+82b1,U+82f1,U+83ef,U+842c,U+8457,U+85a6,U+8655,U+8853,U+88ab,U+88dd,U+88fd,U+897f,U+898f,U+89aa,U+89bd,U+89c0,U+89e3,U+8a02,U+8a3b,U+8a55,U+8a8d,U+8a9e,U+8ad6,U+8b49,U+8b77,U+8b8a,U+8b93,U+8cb7,U+8ce3,U+8cea,U+8cfc,U+8f09,U+8fd1,U+9001,U+901f-9020,U+9054,U+90a3,U+914d,U+91cf,U+9304,U+95b1,U+9650,U+9664,U+969b,U+96b1,U+96c6,U+9700,U+975e,U+97f3,U+98a8,U+98df,U+9999,U+99ac,U+9a57,U+9ebc;
}
@font-face {
  font-family: 'Wedding Chinese';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url('assets/noto-serif-tc-122-400-normal.woff2') format('woff2');
  unicode-range: U+d,U+2b,U+7c,U+a0,U+a9,U+300c-300d,U+4e09,U+4e3b,U+4e4b,U+4e5f,U+4e86,U+4e8b-4e8c,U+4eab,U+4ed6,U+4ee3-4ee4,U+4ef6,U+4f1a,U+4f4d,U+4f60,U+4f7f,U+4f86,U+4fdd,U+4fe1,U+5011,U+50b3,U+5149,U+5167,U+5176,U+518d,U+5229,U+524d,U+529b,U+52a0,U+52d9,U+5316-5317,U+5340,U+539f,U+53ca-53cb,U+5408,U+540c-540d,U+544a,U+548c,U+54c1,U+54e1,U+5546,U+554f,U+55ae,U+56de,U+5716,U+5831,U+5834,U+5916,U+5929,U+5973,U+597d,U+5982,U+5b57,U+5b78,U+5b89,U+5b8c,U+5b9a,U+5ba2,U+5bb9,U+5be6,U+5c07-5c08,U+5c0d,U+5c31,U+5de5,U+5df2,U+5e02,U+5e38,U+5e73-5e74,U+5ea6,U+5f0f,U+5f71,U+5f8c,U+5f97,U+5feb,U+6027,U+60c5,U+60f3,U+610f,U+611b,U+611f,U+61c9,U+6210,U+6216,U+6240,U+624b,U+63a8,U+63d0,U+641c,U+6536,U+6578,U+6599,U+65b9,U+660e,U+661f,U+662d,U+66f4,U+670d,U+671f,U+6771,U+679c,U+682a,U+683c,U+689d,U+696d,U+6a02,U+6a5f,U+6b0a,U+6b21,U+6b3e,U+6b64,U+6c23,U+6c34,U+6c92,U+6cbb,U+6cd5,U+6d3b,U+7063,U+7121,U+71b1,U+7247-7248,U+7269,U+7279,U+73fe,U+7406,U+7522,U+7576,U+767b,U+76ee,U+76f8,U+770b,U+771f,U+77e5,U+793e,U+7a0b,U+7acb,U+7ad9,U+7b2c,U+7b49,U+7cbe,U+7d50,U+7d61,U+7d93,U+7dda,U+7f8e,U+8005,U+806f,U+80fd,U+81ea,U+8207,U+8272,U+865f,U+8868,U+8981,U+898b,U+8996,U+8a00,U+8a08,U+8a0a,U+8a18,U+8a2d,U+8a71,U+8aaa,U+8acb,U+8cbb,U+8cc7,U+8d77,U+8d85,U+8def,U+8eab,U+8eca,U+8f49,U+9019-901a,U+9023,U+9032,U+904a-904b,U+904e,U+9053,U+9078,U+9084,U+90e8,U+90fd,U+91cd,U+91d1,U+9577,U+9580,U+9593,U+9762,U+982d,U+984c,U+985e,U+9996,U+9ad4,U+9ad8,U+9ede,U+ff01,U+ff08-ff09,U+ff1f;
}
@font-face {
  font-family: 'Wedding Chinese';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url('assets/noto-serif-tc-123-400-normal.woff2') format('woff2');
  unicode-range: U+20-22,U+27-2a,U+2c-3b,U+3f,U+41-5d,U+61-7b,U+7d,U+ab,U+ae,U+b2-b3,U+bb,U+bf-c2,U+c8-ca,U+cc-ce,U+d2-d4,U+d6,U+d9-db,U+e0-ef,U+f1-f4,U+f6,U+f9-fd,U+100-103,U+110-115,U+11a-11b,U+12a-12d,U+131,U+143-144,U+147-148,U+14c-151,U+16a-16d,U+170-171,U+1a1,U+1b0,U+1cd-1d4,U+1f8-1f9,U+300-302,U+304,U+306,U+30b-30d,U+358,U+1d3a,U+1e3e-1e3f,U+1ea1,U+1ea3,U+1ebf,U+1ec7,U+2013-2014,U+2039-203a,U+203c,U+207f,U+2122,U+3001-3002,U+3113-3114,U+3118,U+311a-3129,U+4e00,U+4e0a-4e0b,U+4e0d,U+4e2d,U+4eba,U+4ee5,U+4f5c,U+500b,U+5165,U+5168,U+516c,U+51fa,U+5206,U+5230,U+52d5,U+53ef-53f0,U+570b,U+5728,U+5730,U+591a,U+5927,U+5b50,U+5bb6,U+5c0f,U+5fc3,U+6211,U+6587,U+65b0,U+65bc,U+65e5,U+662f,U+6642,U+6700,U+6703,U+6708-6709,U+672c,U+6b63,U+70b9-70ba,U+751f,U+7528,U+767c,U+7684,U+7db2,U+884c,U+958b,U+95dc,U+96fb,U+9801,U+ff0c,U+ff1a;
}
:root{--wine:#521d28;--wine-dark:#31111b;--paper:#faf4e9;--ink:#452f29;--gold:#a88045;--pale-gold:#e7cc94;--muted:#7f6e62;--serif:Georgia,'Times New Roman',serif;--sans:-apple-system,BlinkMacSystemFont,'Segoe UI',Arial,sans-serif}
*{box-sizing:border-box}html{background:var(--wine);scroll-behavior:smooth}body{margin:0;color:var(--ink);background:var(--paper);font-family:var(--sans)}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit}button,a{touch-action:manipulation}button{cursor:pointer}button:focus-visible,a:focus-visible{outline:3px solid #c2964d;outline-offset:6px}button:disabled{cursor:default}[hidden]{display:none!important}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}body:not([data-stage="home"]){overflow:hidden}.eyebrow{font-size:12px;font-weight:500;letter-spacing:.23em;text-transform:uppercase}i{font-family:var(--serif);font-weight:400}h1,h2,h3,p{margin:0}.opening-screen{position:relative;isolation:isolate;min-height:100svh;height:100svh;overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:46px 24px 38px;background:radial-gradient(ellipse at 50% 39%,#76383f 0%,#521d28 55%,#35121f 100%);color:var(--paper);transition:opacity .7s ease,transform .9s cubic-bezier(.2,.7,.2,1)}.opening-screen::before,.invitation-screen::before{content:'';position:absolute;inset:0;z-index:-1;pointer-events:none;opacity:.13;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='.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%23fff' filter='url(%23n)' opacity='.45' d='M0 0h180v180H0z'/%3E%3C/svg%3E")}.edge-frame{position:absolute;inset:22px;border:1px solid #d4b87733;pointer-events:none}.edge-frame::before,.edge-frame::after{content:'';position:absolute;width:46px;height:46px;border:1px solid #d4b87777}.edge-frame::before{left:6px;top:6px;border-right:0;border-bottom:0}.edge-frame::after{bottom:6px;right:6px;border-left:0;border-top:0}.edge-frame>span{position:absolute;bottom:-8px;left:50%;transform:translateX(-50%);background:#3c1521;padding:0 18px;font:12px var(--serif);letter-spacing:.22em;color:var(--pale-gold)}.opening-heading{text-align:center;z-index:1;margin-bottom:62px}.opening-heading .eyebrow{color:#e7cc94c9;margin-bottom:15px}.opening-heading h1{font:clamp(32px,5vw,56px)/1.14 var(--serif);font-weight:400;letter-spacing:-.035em}.opening-heading h1 i{color:var(--pale-gold);margin:0 .12em;font-size:.83em}.opening-date{font-size:13px;letter-spacing:.18em;margin-top:19px;color:#eee1cd}.opening-date span{display:inline-block;margin-left:16px;padding-left:16px;border-left:1px solid #e7cc9477;font-size:11px;text-transform:uppercase;letter-spacing:.18em}.envelope-control{position:relative;flex-shrink:0;display:block;width:min(580px,82vw);aspect-ratio:1.58;border:0;padding:0;background:none;perspective:1600px;overflow:visible;outline-offset:20px!important}.envelope-scene{display:block;position:absolute;inset:0;transform-style:preserve-3d;transform:rotate(-3deg);transition:transform 1s cubic-bezier(.22,.75,.18,1)}.envelope-control:hover:not(:disabled) .envelope-scene{transform:rotate(-1deg) translateY(-5px)}.envelope-shadow{position:absolute;inset:26% 4% -9%;background:#17050e99;filter:blur(25px);border-radius:50%;transform:translateY(12px);transition:opacity 1s}.envelope-back{position:absolute;inset:0;background:#e6d5b8;border-radius:5px;box-shadow:0 1px 0 #fff9,0 24px 40px #21071155}.envelope-lining{position:absolute;inset:3px;border-radius:4px;background:repeating-linear-gradient(45deg,#814037 0,#814037 1px,#652e2b 1px,#652e2b 13px)}.mini-invitation{position:absolute;top:3%;left:8%;width:84%;height:94%;border-radius:3px;background:linear-gradient(125deg,#fffcf6,#f7ebd5);box-shadow:0 1px 5px #36221644;z-index:1;transition:transform 1.5s cubic-bezier(.22,.7,.22,1),box-shadow 1.5s;transform:translateY(0)}.mini-border{position:absolute;inset:12px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;border:1px solid #b58e4f77;color:var(--ink);padding:12px}.mini-kicker{font-size:clamp(6px,1.3vw,9px);letter-spacing:.19em}.mini-happiness{font:clamp(28px,6vw,45px)/1.1 'Wedding Chinese','Songti SC','STSong',serif;color:#922d29}.mini-names{font:clamp(22px,4.3vw,37px)/1.05 var(--serif);text-align:center}.mini-names i{color:#9b783a;font-size:.6em}.mini-rule{width:35%;height:1px;background:#b58e4f88;margin:4px}.mini-date{font:clamp(7px,1.5vw,11px) var(--serif);letter-spacing:.16em}.envelope-pocket{position:absolute;inset:0;z-index:3;pointer-events:none;border-radius:4px;filter:drop-shadow(0 -1px 1px #89735644)}.pocket-left,.pocket-right,.pocket-bottom{position:absolute;inset:0;border-radius:3px}.pocket-left{background:linear-gradient(130deg,#f9f0dc,#ead9ba);clip-path:polygon(0 0,54% 55%,0 100%)}.pocket-right{background:linear-gradient(240deg,#fcf5e7,#edddc3);clip-path:polygon(100% 0,46% 55%,100% 100%)}.pocket-bottom{background:linear-gradient(175deg,#f8edd8,#eee0c6);clip-path:polygon(0 100%,0 97%,50% 43%,100% 97%,100% 100%)}.envelope-address{position:absolute;top:71%;left:0;width:100%;font:italic clamp(16px,3.2vw,26px) var(--serif);color:#8c703d}.envelope-mark{position:absolute;bottom:9%;left:0;width:100%;font-size:clamp(7px,1.5vw,10px);letter-spacing:.25em;color:#9a865c}.envelope-flap{position:absolute;top:0;left:0;width:100%;height:59%;z-index:4;transform-origin:center top;transition:transform 1.1s cubic-bezier(.4,0,.15,1);transform-style:preserve-3d;filter:drop-shadow(0 3px 2px #917c5944)}.flap-face{position:absolute;inset:0;clip-path:polygon(0 0,100% 0,50% 100%);background:linear-gradient(160deg,#fcf5e6 0%,#ecdbbc 92%);backface-visibility:visible}.wax-seal{position:absolute;left:50%;top:48%;transform:translate(-50%,-50%);width:clamp(62px,13vw,90px);aspect-ratio:1;border-radius:46% 52% 48% 50%;background:radial-gradient(circle at 32% 20%,#be5d58,#8e2f32 57%,#641e28 100%);box-shadow:inset 2px 3px 2px #efa69a66,inset -2px -2px 2px #46131b99,0 5px 8px #39251f55;z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;transition:transform .6s ease,opacity .45s ease}.seal-rim{position:absolute;inset:8%;border:1px solid #e99b7a88;border-radius:50%;box-shadow:0 0 0 2px #50131f22,inset 0 0 0 2px #4a182044}.seal-monogram{font:clamp(19px,4vw,29px) var(--serif);color:#e8b792;text-shadow:0 1px 1px #541a26}.seal-monogram i{font-size:.65em;margin:0 1px}.seal-caption{font-size:5px;letter-spacing:.2em;margin-top:5px;color:#e8b792}.opening-prompt{display:flex;align-items:center;gap:17px;margin-top:55px;color:#e7cc94dc;font-size:14px;letter-spacing:.06em}.prompt-line{width:27px;height:1px;background:#e7cc9466}.opening-footer{position:absolute;bottom:51px;font:italic 13px var(--serif);color:#dfc5b199;max-width:80vw;text-align:center}.opening-screen.is-opening .envelope-scene{transform:rotate(0)}.opening-screen.is-opening .wax-seal{transform:translate(-50%,-65%) scale(.75);opacity:0;pointer-events:none}.opening-screen.flap-open .envelope-flap{transform:rotateX(180deg);z-index:0}.opening-screen.card-out .mini-invitation{transform:translateY(-55%) rotate(0deg);box-shadow:0 16px 20px #21071133}.opening-screen.is-leaving{opacity:0;transform:scale(1.035);pointer-events:none}.opening-screen.is-opening .opening-heading,.opening-screen.is-opening .opening-footer{transition:opacity .65s;opacity:.3}.opening-screen.card-out .opening-heading{opacity:0}
.invitation-screen{position:fixed;inset:0;z-index:8;overflow:auto;display:grid;place-items:center;background:radial-gradient(ellipse at 50% 40%,#75413c,#35151e);padding:28px;isolation:isolate;opacity:1;transition:opacity .65s,transform .7s}.invitation-screen.arriving{animation:inviteArrive .85s cubic-bezier(.22,.7,.2,1) both}.invitation-card{position:relative;isolation:isolate;width:min(480px,100%);height:min(780px,calc(100svh - 56px));min-height:580px;background:var(--paper);box-shadow:0 26px 65px #16050a77;border-radius:3px;overflow:hidden}.invitation-photo{position:absolute;inset:0 0 27%;z-index:-2;background:url('assets/couple.jpg') center 35%/cover}.invitation-card::before{content:'';position:absolute;inset:0;z-index:-1;background:linear-gradient(180deg,#faf4e900 0%,#faf4e905 32%,#faf4e973 51%,#faf4e9f7 69%,var(--paper) 81%)}.invitation-frame{position:absolute;inset:16px;border:1px solid #af864dcc;pointer-events:none;z-index:2}.corner{position:absolute;width:23px;height:23px;border:3px double #af864daa}.c1{top:6px;left:6px;border-right:0;border-bottom:0}.c2{top:6px;right:6px;border-left:0;border-bottom:0}.c3{bottom:6px;left:6px;border-top:0;border-right:0}.c4{bottom:6px;right:6px;border-top:0;border-left:0}.vertical-blessing{position:absolute;top:70px;right:29px;writing-mode:vertical-rl;display:flex;gap:12px;font:17px/1.45 'Wedding Chinese','Songti SC','STSong',serif;letter-spacing:.15em;color:#765328;text-shadow:0 1px 4px #fff9}.vertical-blessing span{opacity:.5}.invitation-copy{position:absolute;left:22px;right:22px;bottom:40px;text-align:center}.double-happiness{font:58px/1 'Wedding Chinese','Songti SC','STSong',serif;color:#982c29;margin-bottom:8px}.invitation-copy .eyebrow{font-size:10px;letter-spacing:.2em;color:var(--gold);margin:0 0 11px}.invitation-copy h2{font:clamp(28px,7.5vw,39px)/1.15 var(--serif);letter-spacing:-.035em}.invitation-copy h2 i{color:#912b2a;font-size:.85em}.date-rule{display:flex;align-items:center;gap:9px;width:190px;margin:14px auto 12px;color:var(--gold);font-size:11px}.date-rule::before,.date-rule::after{content:'';flex:1;height:1px;background:#af864d77}.invitation-date{font:16px var(--serif);letter-spacing:.2em;color:#896536}.location{font:12px var(--serif);letter-spacing:.28em;text-transform:uppercase;color:#896536;margin:8px 0 23px}.enter-button{height:50px;min-width:220px;border:1px solid #c39755;background:linear-gradient(145deg,#6f2631,#481623);color:var(--paper);letter-spacing:.25em;font:14px var(--serif);border-radius:2px;box-shadow:0 6px 16px #4f15252b;outline:1px solid #e7cc9466;outline-offset:-5px;transition:background .25s,transform .25s}.enter-button:hover{background:#78303b;transform:translateY(-2px)}.invitation-screen.is-leaving{opacity:0;transform:translateY(-15px);pointer-events:none}
.links{position:relative;padding:80px 24px 84px;text-align:center;background:var(--paper);overflow:hidden}.main-monogram{display:inline-block;font:28px var(--serif);color:var(--gold);border-top:1px solid #a8804555;border-bottom:1px solid #a8804555;padding:10px 9px;margin-bottom:42px;letter-spacing:.04em}.main-monogram i{font-size:.7em;margin:0 3px}.family-message{max-width:600px;margin:auto}.family-message .eyebrow{color:var(--gold);margin-bottom:18px}.family-message h2{font:clamp(38px,7vw,58px)/1.08 var(--serif);font-weight:400;letter-spacing:-.04em}.small-rule{width:38px;height:1px;background:var(--gold);margin:23px auto}.family-message>p:last-child{font:16px/1.8 var(--sans);color:var(--muted);max-width:460px;margin:auto}.cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;width:min(640px,100%);margin:43px auto 0}.card{position:relative;text-decoration:none;color:var(--ink);border:1px solid #a8804544;background:#fffaf2;padding:26px 14px 22px;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:175px;transition:transform .25s,box-shadow .25s,border-color .25s}.card::after{content:'';position:absolute;inset:5px;border:1px solid #a880451a;pointer-events:none}.card:hover{transform:translateY(-3px);box-shadow:0 10px 22px #452f2910;border-color:#a8804599}.card-number{position:absolute;top:13px;left:15px;font:11px var(--serif);color:#9b8154}.card-icon{width:31px;height:31px;fill:none;stroke:var(--gold);stroke-width:1.2;stroke-linejoin:round;stroke-linecap:round;margin:0 0 15px}.card-title{font:20px/1.2 var(--serif)}.card-sub{font-size:12px;color:var(--muted);margin-top:7px}.dogs{position:relative;background:#32191d;display:flex;flex-direction:column;align-items:center;color:#fff8ec;text-align:center}.dogs-photo{width:min(100%,1040px);aspect-ratio:706/569;background:url('assets/family.jpg') center 50.4%/100% auto no-repeat}.dogs-copy{padding:44px 24px 48px}.dogs-copy .eyebrow{color:#e7cc94;margin-bottom:15px;font-size:11px}.dogs h3{font:clamp(35px,6vw,54px)/1.08 var(--serif);margin-bottom:18px;letter-spacing:-.03em}.dogs-copy>p:last-child{font-size:14px;line-height:1.5}footer{background:#32191d;color:var(--paper);padding:46px 24px 56px;text-align:center}.footer-names{font:28px var(--serif)}.footer-names i{color:var(--pale-gold)}footer p{margin-top:13px;font-size:12px;color:#c6b39d;letter-spacing:.08em}.music-toggle{position:fixed;z-index:30;bottom:calc(18px + env(safe-area-inset-bottom));right:18px;display:flex;align-items:center;gap:9px;min-height:42px;padding:10px 13px;border:1px solid #a8804588;border-radius:30px;background:#fffaf2f2;color:#735235;box-shadow:0 5px 18px #23101725;backdrop-filter:blur(10px)}.music-label{font-size:11px;letter-spacing:.025em}.music-bars{height:16px;width:17px;display:flex;align-items:center;gap:2px}.music-bars i{display:block;width:2px;height:5px;background:currentColor}.music-bars i:nth-child(2){height:13px}.music-bars i:nth-child(3){height:9px}.music-bars i:nth-child(4){height:15px}.music-toggle.playing .music-bars i{animation:equalizer 1s ease-in-out infinite alternate}.music-toggle.playing .music-bars i:nth-child(2){animation-delay:-.4s}.music-toggle.playing .music-bars i:nth-child(3){animation-delay:-.7s}.music-toggle.playing .music-bars i:nth-child(4){animation-delay:-.2s}.noscript-note{padding:20px;background:var(--paper);font-size:14px}body[data-stage="home"] main{animation:mainArrive .8s ease both}@keyframes inviteArrive{from{opacity:0;transform:translateY(24px) scale(.97)}to{opacity:1;transform:none}}@keyframes mainArrive{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}@keyframes equalizer{to{transform:scaleY(.4)}}
@media(min-width:1100px){.links{padding-top:95px;padding-bottom:100px}.dogs-copy{padding:52px 24px}.opening-heading{margin-bottom:67px}}
@media(max-width:600px){.opening-screen{padding:30px 20px 48px}.edge-frame{inset:15px}.opening-heading{margin-bottom:60px}.opening-heading h1{font-size:clamp(29px,8vw,42px)}.opening-heading .eyebrow{font-size:10px;letter-spacing:.15em}.opening-date{font-size:12px}.opening-date span{font-size:10px;margin-left:10px;padding-left:10px}.envelope-control{width:85vw}.opening-prompt{margin-top:44px;font-size:12px}.opening-footer{font-size:11px;bottom:42px;line-height:1.5}.invitation-screen{padding:12px}.invitation-card{height:calc(100svh - 24px);max-height:800px;min-height:530px}.invitation-copy{bottom:35px}.invitation-photo{background-position:center 35%}.links{padding:56px 18px 60px}.main-monogram{margin-bottom:32px}.cards{gap:10px}.card{min-height:158px;padding:24px 9px 20px}.card-title{font-size:18px}.card-sub{font-size:11px}.dogs-copy{padding:38px 20px 42px}.music-toggle{bottom:calc(12px + env(safe-area-inset-bottom));right:12px}}
@media(max-height:700px){.opening-heading{margin-bottom:42px}.opening-prompt{margin-top:28px}.opening-footer{bottom:30px}.envelope-control{width:min(470px,75vw)}.opening-heading h1{font-size:34px}.invitation-copy{bottom:30px}.double-happiness{font-size:46px}.location{margin-bottom:17px}.invitation-copy h2{font-size:32px}}
@media(max-height:530px) and (min-width:600px){.opening-screen{display:grid;grid-template-columns:1fr 1fr;gap:28px;padding:45px}.opening-heading{margin:0}.opening-heading h1{font-size:32px}.envelope-control{width:100%;max-width:440px}.opening-prompt{position:absolute;bottom:35px;right:14%;margin:0}.opening-footer{display:none}.invitation-card{min-height:580px}.invitation-screen{align-items:start}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}.opening-screen.flap-open .envelope-flap{transform:rotateX(180deg)}}
/* Invitation: engraved paper, botanical border and the original four-photo story. */
.invitation-screen{padding:22px 16px;background:radial-gradient(ellipse at 50% 35%,#794641,#35151e);align-items:start}
.invitation-card{width:min(560px,100%);height:auto;min-height:0;max-height:none;margin:auto;padding:28px 30px 32px;overflow:hidden;border-radius:4px;background:radial-gradient(ellipse at 30% 10%,#fffdf8,#f6eddd 75%);box-shadow:0 25px 65px #16050a70,0 0 0 1px #e4c79555}
.invitation-card::before{inset:9px;z-index:0;pointer-events:none;border:1px solid #c4a36642;background:none}
.invitation-card::after{content:'';position:absolute;inset:0;z-index:0;pointer-events:none;opacity:.12;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='p'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.7' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' opacity='.5' filter='url(%23p)'/%3E%3C/svg%3E")}
.invitation-frame{inset:15px;border-color:#b28c4866}.corner{width:26px;height:26px;border-color:#b28c4899}
.opening-blessing{position:relative;z-index:1;font:14px/1.6 'Wedding Chinese',serif;color:#8d6a32;text-align:center;letter-spacing:.16em;margin:0 0 19px}.opening-blessing span{color:#a8894b;margin:0 9px;font-size:12px}
.photo-stage{position:relative;width:100%;display:flex;justify-content:center;align-items:center}
.portrait-mount{position:relative;z-index:1;padding:7px;width:auto;border:1px solid #a8804599;background:#fffbf2;box-shadow:3px 8px 18px #59422024,0 0 0 4px #c5a57517;transform:rotate(-1.5deg)}
.hero-carousel{position:relative;height:clamp(235px,37svh,340px);aspect-ratio:3/4;overflow:hidden;background:#e6dfd2;touch-action:pan-y}
.hero-slides{position:absolute;inset:0}.hero-slide{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .8s ease;pointer-events:none}.hero-slide.is-active{opacity:1}.hero-slide:nth-child(3),.hero-slide:nth-child(4){object-fit:contain;background:#e8dfd2}
.portrait-corner{position:absolute;width:17px;height:17px;border:2px solid #b99355;z-index:2}.pc1{top:3px;left:3px;border-right:0;border-bottom:0}.pc2{top:3px;right:3px;border-left:0;border-bottom:0}.pc3{bottom:3px;left:3px;border-right:0;border-top:0}.pc4{bottom:3px;right:3px;border-left:0;border-top:0}
.botanical{position:absolute;z-index:0;width:23%;max-width:95px;height:100%;stroke:#ad8949;stroke-width:1;opacity:.74}.botanical-left{left:-10px;transform:rotate(-8deg)}.botanical-right{right:-10px;transform:scaleX(-1) rotate(-8deg)}
.slideshow-toggle{position:absolute;bottom:7px;right:7px;width:29px;height:29px;border:1px solid #fff8;border-radius:50%;background:#31111b66;color:#fff;line-height:1;font-size:11px;z-index:3}
.hero-dots{position:relative;z-index:3;display:flex;justify-content:center;gap:2px;margin:11px auto 0}.hero-dots button{width:28px;height:25px;padding:0;border:0;background:transparent;display:grid;place-items:center}.hero-dots button::before{content:'';width:5px;height:5px;border:1px solid #b49463;border-radius:50%;transition:transform .2s}.hero-dots button.is-active::before{background:#987442;transform:scale(1.3)}
.invitation-copy{position:relative;z-index:3;bottom:auto;left:auto;right:auto;text-align:center}.happiness-row{display:flex;align-items:center;justify-content:center;gap:24px;margin:3px 0 12px}.happiness-row>span{font:31px var(--serif);color:#b38b45}.double-happiness{font:38px/1 'Wedding Chinese',serif;margin:0;color:#8e2e2c;background:linear-gradient(125deg,#a94336,#7b242b);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}
.invitation-copy .eyebrow{font-size:9px;letter-spacing:.22em;margin-bottom:11px}.invitation-copy h2{font:clamp(29px,7.8vw,43px)/1.1 var(--serif);font-weight:400;letter-spacing:-.025em}.invitation-copy h2 i{color:#a58043;font-size:.86em}.date-rule{margin:15px auto 13px;width:180px}.event-details{display:flex;align-items:center;justify-content:center;gap:14px}.invitation-date{font:14px var(--serif);letter-spacing:.05em;color:#71522d}.invitation-time{font:12px var(--serif);border-left:1px solid #b1936355;padding-left:14px;letter-spacing:.06em;color:#71522d}.location{font:10px var(--serif);letter-spacing:.15em;margin:10px 0 21px}.enter-button{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:28px;height:49px;min-width:210px;font-size:12px;text-decoration:none;letter-spacing:.2em}.enter-button>span{font:18px var(--serif);color:#e7cc94}
.comment-panel{width:min(640px,100%);margin:28px auto 0;padding:27px;text-align:left;background:#fffaf2;border:1px solid #a8804555;box-shadow:0 12px 28px #5235200c;scroll-margin-top:22px}.comment-panel-head{display:flex;justify-content:space-between;align-items:start;margin-bottom:25px}.comment-kicker{font-size:9px;letter-spacing:.2em;color:var(--gold);margin-bottom:9px}.comment-panel h3{font:29px var(--serif);font-weight:400}.comment-close{width:38px;height:38px;border:1px solid #a8804544;background:transparent;color:#735235;font:27px var(--serif);margin-left:10px}.comment-field{margin-top:20px}.comment-field label{display:block;font:15px/1.55 var(--serif);color:#67523e;margin-bottom:8px}.comment-field input,.comment-field textarea{width:100%;background:#fffdf8;border:1px solid #b3997755;border-radius:2px;padding:13px;font:16px/1.55 var(--sans);color:var(--ink);resize:vertical}.comment-field input:focus,.comment-field textarea:focus{outline:2px solid #b99a65;outline-offset:2px}.comment-actions{display:flex;gap:12px;margin-top:23px;flex-wrap:wrap}.comment-submit{border:1px solid #aa844b;background:var(--wine);color:var(--paper);padding:13px 21px;font:14px var(--serif)}.comment-reset{border:1px solid #aa844b55;background:transparent;color:#78603d;padding:13px 21px;font:14px var(--serif)}.comment-status{font-size:13px;line-height:1.6;margin-top:18px;color:#725435;min-height:21px}.comment-submit:disabled{opacity:.65}.comment-field textarea:invalid:not(:placeholder-shown){border-color:#982c29}
body[data-stage="venue"]{overflow:auto;background:var(--paper)}.venue-page{min-height:100svh;background:var(--paper);padding-bottom:65px}.venue-topbar{height:74px;display:flex;align-items:center;justify-content:space-between;width:min(1100px,100%);margin:auto;padding:0 24px;color:#9b7841;font:22px var(--serif);border-bottom:1px solid #a8804522}.venue-topbar button{border:0;background:none;color:#6f5034;font-size:13px;min-height:42px;padding:0 12px 0 0}.venue-layout{width:min(1050px,100%);margin:34px auto 0;display:grid;grid-template-columns:1.1fr 1fr;align-items:center;padding:0 24px;gap:35px}.venue-photo{display:block;width:100%;height:480px;object-fit:cover;border:7px solid #fffbf2;outline:1px solid #b5926044;box-shadow:0 10px 30px #533b2818}.venue-card{text-align:center;position:relative;padding:40px 22px;border:1px solid #a8804544;background:#faf4e9}.venue-card::before{content:'';position:absolute;inset:7px;border:1px solid #a8804522;pointer-events:none}.venue-flourish{font:54px var(--serif);color:#a88752}.venue-card .eyebrow{font-size:9px;color:var(--gold);margin:17px 0}.venue-card h2{font:44px var(--serif);font-weight:400}.venue-room{font:15px var(--serif);color:#9b7841;letter-spacing:.06em;margin-top:13px}.venue-directions{font:16px/1.8 var(--serif);color:#796958;margin:21px 0}.venue-date{font:12px var(--serif);letter-spacing:.05em;color:#8e7144;margin-bottom:27px}.map-button{font-size:11px;min-width:210px;letter-spacing:.07em}
@media(max-width:600px){.invitation-screen{padding:12px 10px 18px}.invitation-card{padding:24px 24px 29px}.opening-blessing{font-size:12px;margin-bottom:18px;letter-spacing:.13em}.invitation-frame{inset:14px}.invitation-copy h2{font-size:31px}.botanical{width:24%;stroke-width:1.1}.botanical-left{left:-13px}.botanical-right{right:-13px}.comment-panel{padding:22px 18px}.comment-panel h3{font-size:26px}.venue-topbar{height:64px;padding:0 22px}.venue-layout{display:flex;flex-direction:column;padding:0 20px;gap:23px;margin-top:25px}.venue-photo{height:auto;max-height:360px;object-fit:contain}.venue-card{width:100%;padding:30px 18px}.venue-card h2{font-size:39px}}
@media(max-height:650px){.hero-carousel{height:240px}.invitation-screen{place-items:start center}.invitation-card{margin:0 auto}.opening-blessing{margin-bottom:16px}.invitation-copy h2{font-size:30px}}
@media(prefers-reduced-motion:reduce){.hero-slide{transition:none!important}}
