:root{
  --ink:#2b2623;--muted:#81716a;--paper:#f4ede9;--paper-2:#fbf7f4;--white:#fffdfa;
  --blush:#e7cec7;--rose:#bd9187;--rose-deep:#956a61;--gold:#aa8c68;--line:rgba(66,49,42,.15);
  --serif:"Times New Roman","Noto Serif TC",serif;--sans:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans TC",sans-serif
}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);letter-spacing:.01em}button,input,textarea{font:inherit}.hidden{display:none!important}
.grain{position:fixed;inset:0;pointer-events:none;z-index:50;opacity:.032;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='.88' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.5'/%3E%3C/svg%3E")}
.topbar{height:78px;position:sticky;top:0;z-index:40;padding:0 5vw;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;border-bottom:1px solid var(--line);background:rgba(244,237,233,.88);backdrop-filter:blur(18px)}.brand{display:flex;align-items:center;gap:7px;width:max-content;text-decoration:none;color:var(--ink);font:400 17px var(--serif);letter-spacing:.13em}.brand i{font-size:12px;color:var(--rose);font-style:italic}.topnav{display:flex;gap:34px}.topnav a,.nav-rsvp{font-size:10px;letter-spacing:.22em;text-transform:uppercase;text-decoration:none;color:var(--muted)}.nav-rsvp{justify-self:end;border-bottom:1px solid var(--muted);padding-bottom:4px}
.eyebrow{margin:0 0 24px;font-size:10px;line-height:1.4;letter-spacing:.3em;text-transform:uppercase;color:var(--muted)}
.hero{position:relative;min-height:calc(100vh - 78px);padding:7vw 6vw 7vw;display:grid;grid-template-columns:1.1fr .9fr;gap:7vw;align-items:center;overflow:hidden}.hero:before{content:"";position:absolute;width:420px;height:420px;border-radius:50%;background:rgba(255,255,255,.33);filter:blur(2px);top:-190px;left:34%}.hero-copy{position:relative;z-index:2}.hero h1{margin:0;font:400 clamp(72px,9.4vw,154px)/.78 var(--serif);letter-spacing:-.06em}.hero h1 span{display:block}.hero h1 span:last-child{margin-left:10%}.hero h1 em{display:block;margin-left:37%;font-size:.35em;line-height:1.15;color:var(--rose);font-weight:400}.hero-rule{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:15px;margin:40px 0 26px;max-width:540px}.hero-rule span{height:1px;background:var(--line)}.hero-rule b{font:400 12px var(--serif);letter-spacing:.18em}.hero-note{max-width:560px;color:var(--muted);line-height:2;font-size:14px}.hero-cta{display:inline-flex;align-items:center;gap:42px;margin-top:24px;padding:14px 2px 10px;border-bottom:1px solid var(--ink);text-decoration:none;color:var(--ink);font-size:12px;letter-spacing:.16em}.hero-cta b{font-size:20px;font-weight:400}.hero-visual{position:relative;display:flex;justify-content:center}.hero-frame{position:relative;width:min(470px,38vw);aspect-ratio:.73;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:hidden;border-radius:250px 250px 8px 8px;background:linear-gradient(150deg,#d5ada4 0%,#ead4ce 48%,#c99488 100%);box-shadow:0 35px 90px rgba(75,47,40,.15)}.hero-frame:before{content:"";position:absolute;inset:16px;border:1px solid rgba(255,255,255,.55);border-radius:235px 235px 5px 5px}.hero-frame:after{content:"";position:absolute;inset:33% -30%;height:1px;background:rgba(255,255,255,.38);transform:rotate(-21deg)}.frame-label{position:absolute;z-index:4;font-size:9px;letter-spacing:.32em;color:#654d47}.frame-label.top{top:48px}.frame-label.bottom{bottom:48px}.monogram{position:relative;z-index:3;display:flex;align-items:center;gap:14px;font:400 clamp(56px,6.2vw,94px) var(--serif);color:#342925}.monogram i{font-size:.32em;color:rgba(255,255,255,.95);font-style:italic}.hero-frame p{position:relative;z-index:3;margin:24px 0 0;text-align:center;font:400 11px/1.8 var(--serif);letter-spacing:.28em;color:#5e4740}.hero-ribbon{position:absolute;width:86%;height:25%;border:1px solid rgba(255,255,255,.5);border-radius:50%;z-index:1}.ribbon-a{transform:rotate(28deg)}.ribbon-b{width:118%;transform:rotate(-18deg)}.hero-stamp{position:absolute;right:-25px;bottom:4%;width:115px;height:115px;border-radius:50%;display:grid;place-content:center;text-align:center;background:var(--white);box-shadow:0 16px 38px rgba(74,49,42,.12);transform:rotate(8deg)}.hero-stamp strong{font:400 24px var(--serif)}.hero-stamp span{font-size:7px;letter-spacing:.18em;color:var(--muted)}.hero-scroll{position:absolute;left:6vw;bottom:28px;font-size:8px;letter-spacing:.27em;color:var(--muted)}.hero-scroll span{margin-left:12px}
.countdown{padding:62px 7vw;border-top:1px solid var(--line);border-bottom:1px solid var(--line);display:grid;grid-template-columns:1fr auto 1fr;align-items:end;gap:40px}.countdown-intro h2{margin:0;font:400 42px var(--serif)}.countdown-values{display:flex;gap:46px}.countdown-values div{text-align:center;min-width:78px}.countdown-values strong{display:block;font:400 46px var(--serif);letter-spacing:-.04em}.countdown-values span{font-size:8px;letter-spacing:.23em;text-transform:uppercase;color:var(--muted)}.countdown-caption{justify-self:end;margin:0;color:var(--muted);font-size:12px}
.story{padding:10vw 7vw;display:grid;grid-template-columns:80px 1.25fr .8fr;grid-template-areas:"num title art" "num copy art";gap:4vw;align-items:start}.section-number{grid-area:num;font:400 13px var(--serif);color:var(--rose);padding-top:6px}.story-title{grid-area:title}.story-title h2{margin:0;font:400 clamp(46px,6vw,88px)/1.04 var(--serif);letter-spacing:-.04em}.story-copy{grid-area:copy;max-width:520px;padding-top:30px;color:var(--muted);font-size:14px;line-height:2}.story-signature{margin-top:42px;font:italic 26px var(--serif);color:var(--rose)}.story-art{grid-area:art;position:relative;min-height:520px}.gallery-card{position:absolute;width:74%;aspect-ratio:.72;padding:22px;background:#dcc0b8;border:10px solid var(--paper-2);box-shadow:0 28px 60px rgba(67,44,38,.13);display:flex;flex-direction:column;justify-content:space-between}.gallery-card:after{content:"";position:absolute;inset:14%;border:1px solid rgba(255,255,255,.5);border-radius:50%}.gallery-card span,.gallery-card b{position:relative;z-index:2;font-size:9px;letter-spacing:.25em}.gallery-card span{align-self:flex-end}.gallery-card b{font-weight:500}.card-one{top:0;left:0;transform:rotate(-4deg);background:linear-gradient(145deg,#d6b0a7,#efdcd6)}.card-two{right:0;bottom:0;transform:rotate(5deg);background:linear-gradient(145deg,#e7d2cb,#cda298)}
.details{padding:9vw 7vw;background:var(--paper-2);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.details-head{display:flex;justify-content:space-between;gap:60px;align-items:end;margin-bottom:56px}.details-head h2{margin:0;font:400 clamp(48px,6vw,82px) var(--serif);letter-spacing:-.04em}.details-head>p{max-width:420px;color:var(--muted);font-size:13px;line-height:1.9}.detail-grid{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.detail-grid article{position:relative;min-height:260px;padding:36px 30px;border-right:1px solid var(--line)}.detail-grid article:last-child{border-right:0}.detail-grid article>span{position:absolute;right:26px;top:26px;font:400 11px var(--serif);color:var(--rose)}.detail-grid small{font-size:8px;letter-spacing:.26em;color:var(--muted)}.detail-grid h3{margin:62px 0 8px;font:400 32px var(--serif)}.detail-grid p{margin:0;color:var(--muted);font-size:12px}
.invitation-banner{padding:9vw 7vw;text-align:center;background:#d9b6ad;color:#392d29;position:relative;overflow:hidden}.invitation-banner:before,.invitation-banner:after{content:"";position:absolute;border:1px solid rgba(255,255,255,.38);border-radius:50%;width:540px;height:220px;left:50%;top:50%;transform:translate(-50%,-50%) rotate(12deg)}.invitation-banner:after{transform:translate(-50%,-50%) rotate(-17deg);width:720px}.invitation-banner p,.invitation-banner span,.invitation-banner h2{position:relative;z-index:2}.invitation-banner p{font-size:9px;letter-spacing:.34em}.invitation-banner h2{margin:30px 0;font:400 clamp(54px,8vw,112px) var(--serif);letter-spacing:.03em}.invitation-banner span{font-size:13px}
.rsvp{padding:10vw 7vw;display:grid;grid-template-columns:.8fr 1.2fr;gap:7vw;align-items:start}.rsvp-copy{position:sticky;top:130px}.rsvp-copy h2{margin:0 0 28px;font:400 clamp(44px,5vw,72px)/1.08 var(--serif);letter-spacing:-.04em}.rsvp-copy>p:not(.eyebrow){max-width:430px;color:var(--muted);font-size:14px;line-height:1.9}.rsvp-note{margin-top:46px;padding-top:20px;border-top:1px solid var(--line);max-width:430px;display:flex;justify-content:space-between;gap:20px}.rsvp-note span{font-size:8px;letter-spacing:.22em;color:var(--muted)}.rsvp-note strong{font-size:11px;font-weight:500}.rsvp-shell{min-width:0}.lookup-card,.guest-card,.receipt-card{background:var(--white);border:1px solid var(--line);padding:clamp(28px,4vw,54px);box-shadow:0 22px 70px rgba(72,47,40,.06)}.lookup-label{display:flex;align-items:center;gap:16px;margin-bottom:42px}.lookup-label span{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;border:1px solid var(--line);font:400 10px var(--serif);color:var(--rose)}.lookup-label p{margin:0;font-size:9px;letter-spacing:.25em;color:var(--muted)}.lookup-card label,.field-label{display:block;margin-bottom:10px;font-size:9px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}.lookup-row{display:grid;grid-template-columns:1fr auto;border-bottom:1px solid #cdbdb5}.lookup-row input{min-width:0;padding:15px 0;border:0;background:transparent;outline:none;font-size:17px;text-transform:uppercase;letter-spacing:.05em}.lookup-row button{border:0;background:transparent;color:var(--ink);padding:0 0 0 22px;display:flex;align-items:center;gap:22px;font-weight:600}.lookup-row button b{font-size:20px;font-weight:400}.lookup-row button:disabled{opacity:.45}.status{min-height:22px;margin-top:16px;font-size:12px;color:var(--muted)}.status.error{color:#a24d49}.guest-card{margin-top:18px}.guest-intro{padding-bottom:32px;margin-bottom:30px;border-bottom:1px solid var(--line)}.guest-label{font-size:8px;letter-spacing:.28em;color:var(--rose)}.guest-intro h3{margin:14px 0 8px;font:400 36px var(--serif)}.guest-intro p{margin:0;color:var(--muted);font-size:12px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}.form-group{display:block;margin:0 0 24px}.form-group input,.form-group textarea{width:100%;padding:14px 0;border:0;border-bottom:1px solid #d4c6bf;background:transparent;outline:none;color:var(--ink);resize:vertical}.form-group input:focus,.form-group textarea:focus{border-color:var(--rose)}.attendance-toggle{display:grid;grid-template-columns:1fr 1fr;gap:10px}.attendance-option{min-height:52px;border:1px solid #d9ccc6;background:transparent;color:var(--muted);cursor:pointer}.attendance-option span{display:none}.attendance-option.active{background:var(--ink);border-color:var(--ink);color:#fff}.attendance-option.active span{display:inline}.submit-rsvp{position:relative;width:100%;min-height:58px;margin-top:10px;border:1px solid var(--ink);background:var(--ink);color:#fff;letter-spacing:.16em;font-size:11px;cursor:pointer;overflow:hidden}.submit-rsvp:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.16),transparent);transform:translateX(-110%)}.submit-rsvp:hover:after{animation:shine .9s ease}.submit-rsvp.loading .button-label{opacity:0}.button-spinner{display:none;position:absolute;width:20px;height:20px;left:50%;top:50%;margin:-10px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}.submit-rsvp.loading .button-spinner{display:block}.receipt-card{text-align:center;margin-top:18px}.receipt-kicker{font-size:8px;letter-spacing:.3em;color:var(--rose)}.receipt-check{width:74px;height:74px;margin:28px auto;border-radius:50%;display:grid;place-items:center;border:1px solid #caaa9f;box-shadow:0 0 0 11px #f4e8e4}.receipt-check span{font-size:26px;color:var(--rose-deep)}.receipt-card h3{margin:24px 0 12px;font:400 38px var(--serif)}.receipt-card>p{max-width:470px;margin:0 auto 24px;color:var(--muted);line-height:1.8}.receipt-details{display:flex;justify-content:center;gap:14px 28px;flex-wrap:wrap;padding:22px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.receipt-details strong,.receipt-details span{font-size:12px}.receipt-table{margin:18px auto 0;padding:13px 18px;width:max-content;max-width:100%;border:1px solid var(--line);font-size:11px;letter-spacing:.08em}.receipt-time{margin:18px 0;color:#9b8b84;font-size:9px;letter-spacing:.14em}.receipt-edit{border:0;background:transparent;border-bottom:1px solid var(--ink);padding:7px 2px;color:var(--ink);cursor:pointer;font-size:11px}
.closing{padding:10vw 7vw;text-align:center;border-top:1px solid var(--line)}.closing h2{margin:0;font:italic 400 clamp(52px,8vw,108px)/.9 var(--serif);letter-spacing:-.05em}.closing h2 span{font-style:normal}.closing>p:not(.eyebrow){margin:32px 0;color:var(--muted);font-size:12px}.closing-mark{width:92px;height:92px;border-radius:50%;margin:48px auto 0;border:1px solid var(--line);display:grid;place-items:center;font:400 17px var(--serif);letter-spacing:.12em}.closing-mark i{color:var(--rose)}footer{padding:28px 5vw;display:flex;justify-content:space-between;border-top:1px solid var(--line);font-size:8px;letter-spacing:.22em;color:var(--muted)}
.success-layer{position:fixed;z-index:80;inset:0;display:grid;place-items:center;padding:24px;background:rgba(40,31,28,.68);backdrop-filter:blur(13px);overflow:hidden}.success-modal{position:relative;z-index:3;width:min(520px,100%);padding:54px 46px;text-align:center;background:var(--white);box-shadow:0 38px 110px rgba(28,18,15,.28);animation:modalIn .45s cubic-bezier(.2,.8,.2,1)}.success-mark{width:84px;height:84px;margin:0 auto 28px;border-radius:50%;display:grid;place-items:center;border:1px solid #c7a59a;box-shadow:0 0 0 13px #f2e3de;animation:pulseRing 1.3s ease both}.success-mark span{font-size:30px;color:var(--rose-deep)}.success-modal h2{margin:0 0 14px;font:400 42px var(--serif)}.success-modal>p:not(.eyebrow){margin:0 auto 25px;max-width:390px;color:var(--muted);line-height:1.8}.success-summary{display:grid;gap:7px;padding:20px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.success-summary strong,.success-summary span{font-size:12px}.success-modal button{min-width:180px;margin-top:28px;padding:14px 20px;border:1px solid var(--ink);background:var(--ink);color:#fff;cursor:pointer;letter-spacing:.15em}.success-petal{position:absolute;width:440px;height:180px;border:1px solid rgba(255,255,255,.25);border-radius:50%}.petal-a{transform:rotate(25deg)}.petal-b{transform:rotate(-25deg);width:620px}
.reveal{opacity:0;transform:translateY(22px);transition:opacity .85s ease,transform .85s ease}.reveal.revealed{opacity:1;transform:none}
@keyframes spin{to{transform:rotate(360deg)}}@keyframes shine{to{transform:translateX(110%)}}@keyframes modalIn{from{opacity:0;transform:translateY(18px) scale(.98)}to{opacity:1;transform:none}}@keyframes pulseRing{0%{transform:scale(.7);opacity:0}70%{transform:scale(1.05)}100%{transform:scale(1);opacity:1}}
@media(max-width:980px){.hero{grid-template-columns:1fr;min-height:auto;padding-top:11vw}.hero h1{font-size:clamp(72px,16vw,130px)}.hero-visual{margin-top:30px}.hero-frame{width:min(560px,75vw)}.hero-stamp{right:7vw}.countdown{grid-template-columns:1fr}.countdown-caption{justify-self:start}.story{grid-template-columns:48px 1fr;grid-template-areas:"num title" "num copy" "art art"}.story-art{margin-top:30px;min-height:580px}.details-head{display:block}.details-head>p{margin-top:30px}.rsvp{grid-template-columns:1fr}.rsvp-copy{position:static}.topbar{grid-template-columns:1fr auto}.topnav{display:none}.nav-rsvp{display:block}.detail-grid{grid-template-columns:1fr}.detail-grid article{border-right:0;border-bottom:1px solid var(--line);min-height:190px}.detail-grid article:last-child{border-bottom:0}.detail-grid h3{margin-top:42px}}
@media(max-width:620px){.topbar{height:66px;padding:0 20px}.hero{padding:58px 22px 70px;gap:35px}.hero:before{display:none}.hero .eyebrow{margin-bottom:17px}.hero h1{font-size:20vw}.hero h1 span:last-child{margin-left:4%}.hero h1 em{margin-left:32%}.hero-rule{margin:30px 0 22px}.hero-note{font-size:13px}.hero-visual{margin-top:6px}.hero-frame{width:84vw;max-width:390px}.hero-stamp{right:2vw;width:92px;height:92px}.hero-scroll{display:none}.countdown{padding:48px 22px;gap:26px}.countdown-intro h2{font-size:36px}.countdown-values{gap:18px;justify-content:space-between;width:100%}.countdown-values div{min-width:auto}.countdown-values strong{font-size:38px}.story{padding:80px 22px;grid-template-columns:26px 1fr;gap:20px}.story-title h2{font-size:49px}.story-art{min-height:420px}.gallery-card{width:70%}.details{padding:76px 22px}.details-head h2{font-size:52px}.detail-grid article{padding:28px 12px}.invitation-banner{padding:88px 20px}.rsvp{padding:82px 22px}.rsvp-copy h2{font-size:48px}.rsvp-note{display:block}.rsvp-note strong{display:block;margin-top:8px}.lookup-card,.guest-card,.receipt-card{padding:30px 22px}.lookup-row{grid-template-columns:1fr}.lookup-row button{padding:13px 0;justify-content:space-between;border-top:1px solid var(--line)}.form-grid{grid-template-columns:1fr}.attendance-toggle{grid-template-columns:1fr}.receipt-details{display:grid}.closing{padding:90px 22px}footer{padding:24px 20px;gap:20px;flex-direction:column}.success-modal{padding:44px 24px}.success-modal h2{font-size:36px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.reveal{opacity:1;transform:none;transition:none}.success-modal,.success-mark{animation:none}}

/* V1.6 · LINE linking */
.line-link-box{margin:24px 0 4px;padding:18px 20px;border:1px solid rgba(6,199,85,.25);background:linear-gradient(135deg,rgba(6,199,85,.06),rgba(255,255,255,.72));display:flex;align-items:center;justify-content:space-between;gap:18px;text-align:left}.line-link-copy{display:flex;align-items:center;gap:13px;min-width:0}.line-badge{flex:0 0 auto;min-width:46px;height:46px;padding:0 8px;border-radius:14px;display:grid;place-items:center;background:#06c755;color:#fff;font-size:9px;font-weight:800;letter-spacing:.05em}.line-link-copy strong{display:block;font-size:12px}.line-link-copy p{margin:5px 0 0;color:var(--muted);font-size:10px;line-height:1.55}.line-link-box button{flex:0 0 auto;border:0;border-radius:999px;background:#06c755;color:#fff;padding:11px 17px;font-size:10px;font-weight:700;cursor:pointer}.line-link-box.linked{border-color:var(--line);background:#f7f2ef}.line-link-box.linked .line-badge{background:#70635d}.line-link-box.linked button{display:none}@media(max-width:620px){.line-link-box{align-items:stretch;flex-direction:column}.line-link-box button{width:100%;padding:13px 17px}}
