:root{--mint-soft:#d3f2ee;--mint-200:#aee6e0;--mint:#89d9d1;--mint-600:#4fb1a7;--mint-deep:#2f8a80;--mint-ink:#1d5c55;--rose-soft:#fdeaf0;--rose:#f4c2ce;--rose-deep:#c25f7a;--butter-soft:#fdf6dd;--butter:#fbe6a2;--butter-deep:#b0821c;--pistachio-soft:#eaf6e2;--pistachio:#c3e3ae;--pistachio-deep:#5d8f46;--lilac-soft:#efecfa;--lilac:#c9c2e8;--lilac-deep:#6a5da8;--peach-soft:#fff0e4;--peach:#ffd2b2;--peach-deep:#cf6f38;--sky-soft:#e8f2fc;--sky:#aed4f2;--sky-deep:#3d76a8;--cocoa-soft:#f3e7e0;--cocoa:#d5ac96;--cocoa-deep:#8b5c44;--paper:#fffdfb;--shell:#f7f6f2;--shell-2:#efeee8;--line:#e3e0d8;--line-strong:#cfcbc0;--ink:#2c3a38;--ink-soft:#5c6d6a;--ink-mute:#93a19e;--ink-faint:#bcc5c3;--white:#fff;--text-heading:var(--ink);--text-body:var(--ink-soft);--text-muted:var(--ink-mute);--text-eyebrow:var(--ink-mute);--surface-card:#ffffffa8;--surface-card-solid:var(--white);--border-hairline:var(--line);--wash-page:radial-gradient(ellipse at top,#fff 0%,var(--paper) 45%,var(--mint-soft) 100%);--wash-band:linear-gradient(180deg,transparent 0%,var(--mint-soft) 50%,transparent 100%);--wash-envelope:radial-gradient(ellipse at center,#fff 0%,var(--mint-soft) 55%,var(--sky-soft) 100%);--font-display:var(--font-cormorant),"Noto Serif TC","Times New Roman",serif;--font-label:var(--font-italiana),"Noto Serif TC",serif;--font-body:var(--font-eb-garamond),Georgia,serif;--font-zh:var(--font-noto-serif-tc),serif;--track-label-wide:.35em;--weight-light:300;--radius-hair:1px;--radius-xs:2px;--radius-s:3px;--radius-m:6px;--radius-l:12px;--radius-pill:999px;--radius-round:50%;--shadow-inset-hair:inset 0 0 0 1px #2c3a3814;--shadow-float:0 4px 14px #2c3a381f;--shadow-card:0 4px 20px #2c3a3821,inset 0 1px 0 #fffc;--shadow-lift:0 24px 40px #2c3a3829,0 4px 10px #2c3a381a;--shadow-knob:0 1px 4px #2c3a3833;--ease-entrance:cubic-bezier(0,0,.2,1);--ease-spring:cubic-bezier(.22,1,.36,1);--ease-flap:cubic-bezier(.7,0,.4,1);--ease-drift:cubic-bezier(.5,0,.3,1);--dur-state:.3s}*,:before,:after{box-sizing:border-box}html,body{margin:0}body{-webkit-font-smoothing:antialiased;background:var(--wash-page);color:var(--text-heading);font-family:var(--font-body);background-attachment:fixed;min-height:100vh;font-size:17px;line-height:1.6}body.gate-locked{height:100dvh;overflow:hidden}img{max-width:100%;display:block}a{color:var(--mint-deep);text-decoration:none}a:hover{color:var(--mint-ink)}.grain:before{content:"";pointer-events:none;z-index:1;opacity:.4;mix-blend-mode:multiply;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='180' height='180'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.3  0 0 0 0 0.25  0 0 0 0 0.2  0 0 0 0.06 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");position:fixed;inset:0}@keyframes fadeUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes scrollHint{0%,to{transform-origin:top;opacity:.3;transform:scaleY(.3)}50%{transform-origin:top;opacity:1;transform:scaleY(1)}}.reveal{opacity:0;transform:translateY(20px)}.reveal.in{animation:fadeUp 1s var(--ease-entrance) both}.gate{z-index:60;background:var(--paper);cursor:pointer;transition:opacity 1.2s var(--ease-drift);justify-content:center;align-items:center;display:flex;position:fixed;inset:0;overflow:hidden}.gate.gone{opacity:0;pointer-events:none}.gate-video{object-fit:cover;background:var(--paper);width:100vw;height:100dvh;position:absolute;top:0;left:0}.gate-still{z-index:1;object-fit:cover;pointer-events:none;width:100vw;height:100dvh;transition:opacity .35s;position:absolute;top:0;left:0}.gate.video-live .gate-still,.gate.gone .gate-still{opacity:0}.gate-hint{text-align:center;z-index:2;font-family:var(--font-label);letter-spacing:.35em;text-transform:uppercase;color:#fff;text-shadow:0 1px 10px #00000080;pointer-events:none;font-size:11px;transition:opacity .4s;animation:2.2s ease-in-out infinite hintPulse;position:absolute;bottom:9%;left:0;right:0}.gate.playing-video .gate-hint{opacity:0}@keyframes hintPulse{0%,to{opacity:.55}50%{opacity:1}}.hero{flex-direction:column;justify-content:flex-end;min-height:100svh;padding:0 28px 64px;display:flex;position:relative;overflow:hidden}.hero img.bg{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.hero .veil{background:linear-gradient(#fffdfb8c 0%,#fffdfb0d 32%,#d3f2ee6b 72%,#2f8a8080 100%);position:absolute;inset:0}.hero .inner{text-align:center;color:var(--white);z-index:2;position:relative}.h-date{font-family:var(--font-label);letter-spacing:.4em;opacity:.92;margin-bottom:20px;font-size:10px}.h-name{font-family:var(--font-display);text-shadow:0 2px 20px #2c3a3859;font-size:clamp(48px,15vw,58px);font-weight:300;line-height:1}.h-amp{font-family:var(--font-display);text-shadow:0 2px 20px #2c3a3859;font-size:34px;font-style:italic;font-weight:300;line-height:1.5}.h-flourish{justify-content:center;margin:26px 0 22px;display:flex}.h-venue{font-family:var(--font-body);text-shadow:0 1px 12px #2c3a3866;font-size:16px;font-style:italic;line-height:1.6}.scroll-hint{z-index:2;justify-content:center;display:flex;position:absolute;bottom:22px;left:0;right:0}.scroll-hint span{background:#fffc;width:1px;height:34px;animation:2s ease-in-out infinite scrollHint}.anim-up{opacity:0}.playing .anim-up{animation:fadeUp 1.2s var(--ease-entrance) both}.playing .h-date{animation-delay:.3s}.playing .h-name-1{animation-delay:.55s}.playing .h-amp{animation-delay:.7s}.playing .h-name-2{animation-delay:.85s}.playing .h-flourish{animation-delay:1s}.playing .h-venue{animation-delay:1.15s}main{z-index:2;position:relative}.section{padding:56px 24px}.countdown-sec{text-align:center;padding:56px 24px 64px}.cd-caption{font-family:var(--font-label);color:var(--text-muted);letter-spacing:var(--track-label-wide);text-align:center;margin-bottom:16px;font-size:10px}.cd-row{justify-content:center;gap:clamp(16px,6vw,40px);display:flex}.cd-cell{text-align:center;min-width:60px}.cd-val{font-family:var(--font-display);font-size:clamp(36px,10vw,54px);font-weight:var(--weight-light);color:var(--text-heading);font-variant-numeric:tabular-nums;line-height:1}.cd-lab{font-family:var(--font-label);letter-spacing:.3em;color:var(--text-muted);text-transform:uppercase;margin-top:8px;font-size:10px}.divider{justify-content:center;align-items:center;gap:14px;padding:20px 0;display:flex}.divider .rule{background:var(--ink-mute);opacity:.25;width:80px;height:1px}.divider .dot{border-radius:var(--radius-round);opacity:.5;width:4px;height:4px}.eyebrow{font-family:var(--font-label);text-transform:uppercase;letter-spacing:var(--track-label-wide);color:var(--text-eyebrow);font-size:11px}.sec-head{text-align:center}.sec-head .eyebrow{margin-bottom:20px;display:block}.sec-head h2{font-family:var(--font-display);font-size:clamp(32px,6vw,44px);font-weight:var(--weight-light);color:var(--text-heading);margin:0;font-style:italic;line-height:1.15}.monogram{display:inline-block}.monogram .ring{border-radius:var(--radius-round);border:1px solid var(--mint-deep);background:#ffffff38;justify-content:center;align-items:center;display:flex;position:relative}.monogram .ring:before{content:"";border-radius:var(--radius-round);border:.5px solid var(--mint-deep);opacity:.45;position:absolute;inset:3px}.monogram .init{font-family:var(--font-display);color:var(--mint-deep);letter-spacing:-.04em;white-space:nowrap;font-style:italic;line-height:1}.monogram .init .amp{vertical-align:.18em;opacity:.85;margin:0 -1px}.photo-band{background:var(--wash-band);margin-top:24px;padding:40px 0;position:relative;overflow:hidden}.photo-track{will-change:transform;backface-visibility:hidden;width:max-content;animation:24s linear infinite strip;display:flex}.photo-track img{object-fit:cover;border-radius:var(--radius-m);background:var(--wash-band);flex-shrink:0;width:auto;height:300px;margin-right:16px}@media (max-width:640px){.photo-track img{height:220px}}@keyframes strip{0%{transform:translate(0,0)}to{transform:translate(-50%)}}.timeline{max-width:560px;margin:0 auto;padding:0 24px;position:relative}.timeline .spine{background:linear-gradient(to bottom,var(--mint-deep),var(--rose-deep));opacity:.35;width:1px;position:absolute;top:7px;bottom:7px;left:50%;transform:translate(-50%)}.tl-row{align-items:center;margin-bottom:40px;display:flex}.tl-row:last-child{margin-bottom:0}.tl-time{text-align:right;flex:0 0 calc(50% - 10px);padding-right:28px}.tl-time span{font-family:var(--font-display);font-size:clamp(22px,5vw,30px);font-weight:var(--weight-light);color:var(--text-heading);letter-spacing:.04em;font-variant-numeric:tabular-nums}.tl-dotwrap{z-index:1;flex:0 0 20px;justify-content:center;display:flex}.tl-dot{border-radius:var(--radius-round);background:var(--mint-deep);opacity:.75;border:2px solid var(--paper);width:14px;height:14px;box-shadow:0 0 0 2px var(--mint);flex-shrink:0}.tl-body{flex:0 0 calc(50% - 10px);padding-left:28px}.tl-zh{font-family:var(--font-zh);color:var(--text-heading);margin-bottom:4px;font-size:clamp(16px,4vw,22px);font-weight:500;line-height:1.2}.tl-en{font-family:var(--font-body);color:var(--text-muted);font-size:13px;font-style:italic}.couple-duo{justify-content:center;align-items:center;gap:clamp(14px,5vw,34px);max-width:560px;margin:0 auto;padding:44px 24px 8px;display:flex}.duo-item{flex-direction:column;align-items:center;gap:14px;margin:0;display:flex}.duo-frame{aspect-ratio:1;border-radius:var(--radius-round);background:radial-gradient(circle at 50% 35%,var(--mint-soft),var(--paper));border:1px solid var(--mint-200);width:clamp(120px,34vw,158px);box-shadow:var(--shadow-card),0 0 0 6px #ffffff80;overflow:hidden}.duo-frame img{object-fit:cover;object-position:center top;width:100%;height:100%}.duo-item figcaption{font-family:var(--font-display);font-size:clamp(20px,5vw,26px);font-style:italic;font-weight:var(--weight-light);color:var(--text-heading)}.duo-amp{font-family:var(--font-display);color:var(--rose-deep);opacity:.85;align-self:center;margin-top:-24px;font-size:clamp(26px,7vw,36px);font-style:italic}.duo-heart{filter:drop-shadow(0 3px 6px #c25f7a4d);width:clamp(30px,9vw,42px);animation:heartBeat 1.8s var(--ease-spring) infinite;flex-shrink:0;align-self:center;margin-top:-24px}.duo-heart svg{width:100%;height:auto;display:block}@keyframes heartBeat{0%,to{transform:scale(1)}15%{transform:scale(1.18)}30%{transform:scale(1)}45%{transform:scale(1.1)}}.venue-wrap{max-width:560px;margin:0 auto;padding:56px 24px 0}.card{background:var(--surface-card);border:1px solid var(--border-hairline);border-radius:var(--radius-xs);box-shadow:var(--shadow-inset-hair);text-align:center;flex-direction:column;align-items:center;padding:26px 22px;display:flex}.venue-name{font-family:var(--font-display);color:var(--text-heading);margin-bottom:8px;font-size:28px;font-style:italic}.venue-addr{font-family:var(--font-body);color:var(--text-body);margin-bottom:20px;font-size:15px;font-style:italic;line-height:1.6}.map{aspect-ratio:3/2;border-radius:var(--radius-xs);border:1px solid var(--line);background:var(--shell);width:100%;overflow:hidden}.map iframe{border:0;width:100%;height:100%;display:block}.closing{text-align:center;padding:56px 32px 0}.closing div{font-family:var(--font-display);color:var(--text-heading);font-size:26px;font-style:italic;font-weight:300;line-height:1.5}footer{text-align:center;border-top:1px solid var(--line);margin-top:48px;padding:40px 24px 72px}footer .mono-wrap{justify-content:center;margin-bottom:16px;display:flex}footer .f-label{font-family:var(--font-label);letter-spacing:.4em;color:var(--text-muted);font-size:10px}footer .f-loc{font-family:var(--font-body);color:var(--text-muted);margin-top:10px;font-size:13px;font-style:italic}.music-btn{z-index:40;border-radius:var(--radius-round);border:1px solid var(--mint-deep);background:var(--surface-card-solid);width:44px;height:44px;color:var(--mint-deep);cursor:pointer;box-shadow:var(--shadow-float);transition:all var(--dur-state) ease;justify-content:center;align-items:center;display:flex;position:fixed;bottom:24px;right:24px}.music-btn.off{border-color:var(--ink-mute);color:var(--ink-mute);background:0 0}@media (prefers-reduced-motion:reduce){*{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}
