:root{--forest:#21483f;--deep:#17382f;--ink:#2d4037;--paper:#faf7ee;--muted:#737966;--line:#d6d8c6;--serif:"Songti SC","STSong","Noto Serif CJK SC","SimSun",serif;--sans:"PingFang SC","Microsoft YaHei",sans-serif}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--forest);color:var(--ink);font-family:var(--serif);-webkit-font-smoothing:antialiased}body.sealed{overflow:hidden}button{font:inherit}button:focus-visible{outline:3px solid #b9a577;outline-offset:8px}button{-webkit-tap-highlight-color:transparent}.entry{position:fixed;inset:0;z-index:10;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:64px;min-height:100svh;padding:34px 20px;background:radial-gradient(ellipse at 50% 35%,#355c4f 0,#21483f 55%,#183a32 100%);color:#f7f2e6;transition:opacity .7s ease,visibility .7s}.entry::after{content:"";pointer-events:none;position:absolute;inset:14px;border:1px solid #eae8d62b}.entry-heading{text-align:center}.eyebrow{font-family:Georgia,serif;font-size:12px;letter-spacing:.24em;font-weight:400}.entry-heading .eyebrow{color:#d0d9c3}.entry-heading p{font-size:16px;letter-spacing:.16em;margin:17px 0 0}.envelope{display:block;position:relative;width:min(520px,88vw);height:320px;max-height:55vw;min-height:205px;padding:0;border:0;background:transparent;cursor:pointer;perspective:1400px;isolation:isolate;filter:drop-shadow(0 28px 32px #09201866);transform:rotate(-3deg);transition:transform .5s ease}.envelope:hover{transform:rotate(-1deg) translateY(-4px)}.envelope-back{position:absolute;inset:0;border-radius:4px;background:#dedfce;box-shadow:inset 0 0 0 1px #d9d4bf}.inner-card{position:absolute;left:6%;right:6%;top:7%;bottom:8%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;background:var(--paper);color:var(--ink);border:1px solid #d7d3c1;transition:transform 1s cubic-bezier(.2,.6,.3,1),opacity .7s;z-index:1}.inner-card>span{font-size:14px;letter-spacing:.5em}.inner-card strong{font-size:24px;font-weight:400;letter-spacing:.12em}.inner-card i{font:italic 25px Georgia;color:#7e866f;margin:0 10px}.inner-card small{font:14px Georgia;letter-spacing:.25em}.envelope-fold{position:absolute;inset:0;z-index:3;background:#f1ecdb}.fold-left{clip-path:polygon(0 0,58% 54%,0 100%)}.fold-right{clip-path:polygon(100% 0,42% 54%,100% 100%);background:#eae5d4}.envelope-bottom{position:absolute;inset:0;z-index:4;background:linear-gradient(170deg,#f8f3e4,#ede7d7);clip-path:polygon(0 100%,0 97%,50% 40%,100% 97%,100% 100%)}.envelope-flap{position:absolute;inset:0;z-index:5;background:linear-gradient(175deg,#f8f4e9,#e6dfcc);clip-path:polygon(0 0,100% 0,50% 57%);transform-origin:top center;backface-visibility:hidden;transition:transform .8s ease,z-index 0s .4s}.wax-seal{position:absolute;z-index:6;left:50%;top:47%;transform:translate(-50%,-50%);height:76px;width:76px;border-radius:50%;color:#d5dcb8;background:radial-gradient(circle at 34% 25%,#647759,#3d5844 70%);border:3px solid #718066;box-shadow:0 3px 5px #38423155,inset 0 0 0 3px #314c3b,inset 1px 3px 6px #bdc7a25c;display:grid;place-items:center;transition:transform .45s,opacity .4s}.wax-seal>span{font-size:34px;font-weight:500;text-shadow:0 1px 1px #182e25}.envelope-addressee{position:absolute;left:0;right:0;bottom:12%;z-index:6;font-size:16px;letter-spacing:.18em;color:#73745d}.entry-footer{text-align:center}.open-hint{font:14px var(--sans);letter-spacing:.2em;color:#d6d9c6}.entry-footer p{font-size:22px;letter-spacing:.12em;margin:24px 0 10px}.entry-footer p span{font:italic 23px Georgia;color:#aebc9f;padding:0 12px}.entry-footer time{font:12px Georgia;letter-spacing:.2em;color:#c2ceba}.opening .wax-seal{transform:translate(-50%,-50%) scale(1.25);opacity:0}.opening .envelope-flap{transform:rotateX(180deg);z-index:0}.opening .inner-card{transform:translateY(-48%);transition-delay:.45s}.opening .envelope{transform:rotate(0)}.entry.is-gone{opacity:0;visibility:hidden;pointer-events:none}.letter{max-width:700px;margin:0 auto;background:var(--paper);box-shadow:0 0 90px #071f284d;min-height:100vh;padding:30px 32px 0;position:relative}.letter[hidden]{display:none}.letter-topline{display:flex;justify-content:space-between;gap:20px;font:11px Georgia;letter-spacing:.18em;border-bottom:1px solid var(--line);padding-bottom:18px;color:#687563}.letter-header{text-align:center;padding:55px 0 32px}.letter-header .eyebrow{color:var(--muted);font-size:11px}.letter-header h1{font-size:clamp(30px,5vw,44px);line-height:1.75;letter-spacing:.12em;font-weight:400;margin:25px 0 28px;outline:none}.couple{font-size:24px;letter-spacing:.16em;margin:0 0 20px}.couple i{font:italic 26px Georgia;color:#8c937a;margin:0 10px}.letter-date{font-size:14px;letter-spacing:.15em;color:#6a735f}.hero-photo{margin:0}.hero-photo img{display:block;width:100%;height:auto}.hero-photo figcaption{text-align:center;font:10px Georgia;letter-spacing:.22em;color:#758069;padding-top:17px}.personal-letter{padding:70px 24px 40px}.personal-letter>.eyebrow{color:#8b9078}.personal-letter h2{font-weight:400;font-size:22px;margin:25px 0 30px;letter-spacing:.05em}.personal-letter p{font-size:17px;line-height:2.3;margin:0 0 28px}.personal-letter .signature{text-align:right;font-size:23px;margin:38px 0 0}.signature small{display:block;font-size:13px;letter-spacing:.2em;color:var(--muted)}.letter-end{text-align:center;padding:65px 0 45px;border-top:1px solid var(--line)}.letter-end>p{font:20px Georgia;letter-spacing:.25em}.letter-end h2{font-size:25px;font-weight:400;letter-spacing:.1em;margin:28px 0 45px}.text-button{background:none;border:0;border-bottom:1px solid #9da58d;padding:9px 0;font-size:13px;color:#6c775f;cursor:pointer;letter-spacing:.12em}
@media(max-width:600px){.entry{gap:58px}.entry-heading p{font-size:14px;letter-spacing:.1em}.envelope{height:250px;min-height:205px}.wax-seal{width:65px;height:65px}.wax-seal>span{font-size:29px}.envelope-addressee{font-size:14px;bottom:10%}.inner-card strong{font-size:20px}.inner-card{gap:12px}.entry-footer p{font-size:20px}.letter{padding:24px 22px 0}.letter-topline{font-size:10px;letter-spacing:.12em}.letter-header{padding:44px 0 24px}.letter-header h1{font-size:32px;margin:22px 0}.couple{font-size:22px;letter-spacing:.1em}.personal-letter{padding:58px 3px 34px}.personal-letter p{font-size:16px;line-height:2.2}.personal-letter h2{font-size:21px}.letter-end{padding:50px 0 38px}}
@media(max-height:700px){.entry{gap:32px}.entry-footer p{margin-top:16px}.envelope{max-height:37vh;min-height:160px}}
.scroll-note{display:block;margin:25px 0 0;font:12px var(--sans);letter-spacing:.1em;color:#787f69}.garden-photo{margin:20px 0 0;position:relative}.garden-photo img{width:100%;height:auto;display:block}.garden-photo figcaption{display:flex;flex-direction:column;align-items:center;gap:8px;position:absolute;top:7%;left:0;right:0;color:#fffbed;font-size:18px;letter-spacing:.17em;text-shadow:0 2px 12px #102d15}.wedding-day{text-align:center;padding:68px 24px 42px}.wedding-day>.eyebrow{color:#7f896f}.wedding-day h2{font-size:25px;font-weight:400;letter-spacing:.1em;margin:23px 0 37px}.date-display{display:flex;flex-direction:column;align-items:center;gap:14px}.date-display>span:first-child{font:20px Georgia;letter-spacing:.35em;padding-left:.35em}.date-display strong{font:400 76px Georgia;letter-spacing:-.03em;line-height:1}.date-display strong i{font-size:55px;color:#a0a58a;font-style:normal;padding:0 9px}.date-display>span:last-child{font-size:13px;letter-spacing:.2em;color:#6a775f}.date-intro{font-size:17px;line-height:2.1;letter-spacing:.08em;margin:30px 0 34px}.itinerary{border-top:1px solid var(--line);text-align:left}.occasion{display:grid;grid-template-columns:105px 1fr;gap:24px;padding:30px 0;border-bottom:1px solid var(--line)}.occasion-time{display:flex;flex-direction:column;gap:8px;padding-top:5px;color:#43533c}.occasion-time time{font:30px Georgia;font-variant-numeric:tabular-nums}.occasion-time>span{font:11px Georgia;letter-spacing:.15em;color:#7c846b}.occasion-label{font:10px Georgia;letter-spacing:.17em;color:#80856e;margin:0 0 10px}.occasion-detail h3{font-size:22px;font-weight:400;letter-spacing:.12em;margin:0 0 12px}.venue{font-size:18px;line-height:1.6;margin:0 0 8px}.occasion-message{font-size:14px;color:#727c65;line-height:1.8;margin:0}.gentle-note{font-size:13px;line-height:2;color:#748069;margin:25px 0 0;letter-spacing:.03em}.memories{padding:25px 0 48px}.paired-photos{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}.paired-photos figure{margin:0}.paired-photos figure:last-child{margin-top:44px}.paired-photos img,.close-photo img{display:block;width:100%;height:auto}.photo-words{text-align:center;font-size:22px;line-height:1.9;letter-spacing:.12em;margin:45px 0}.close-photo{margin:0 35px}.letter-end{padding-top:42px}.letter-end .eyebrow{color:#818b74;font-size:11px}.letter-end h2{margin:27px 0 25px}.letter-end .ending-copy{font:16px/2.1 var(--serif);letter-spacing:.12em;margin:0 0 35px}.letter-end .ending-names{font:22px var(--serif);letter-spacing:.12em}.ending-names i{font:italic 22px Georgia;color:#858f76;margin:0 10px}.letter-end .ending-date{font:14px Georgia;letter-spacing:.2em;margin:18px 0 42px}.letter-end .text-button{min-height:44px}.entry.is-gone .envelope{filter:none}
@media(max-width:600px){.wedding-day{padding:57px 2px 30px}.wedding-day h2{font-size:23px}.date-display strong{font-size:67px}.occasion{grid-template-columns:78px 1fr;gap:17px;padding:26px 0}.occasion-time time{font-size:27px}.occasion-detail h3{font-size:21px}.venue{font-size:17px}.occasion-message{font-size:13px}.occasion-label{font-size:10px;letter-spacing:.09em}.paired-photos{gap:12px}.paired-photos figure:last-child{margin-top:30px}.close-photo{margin:0 14px}.photo-words{font-size:21px;margin:38px 0}.garden-photo figcaption{font-size:16px;letter-spacing:.08em}.gentle-note{font-size:12px}.letter-end h2{font-size:24px}.letter-end .ending-copy{font-size:16px}.entry::after{inset:10px}}
@media(max-width:360px){.letter{padding-left:18px;padding-right:18px}.letter-header h1{font-size:29px}.personal-letter p{font-size:15px}.occasion{grid-template-columns:70px 1fr;gap:12px}.venue{font-size:16px}.entry-heading p{font-size:13px}.envelope{min-height:178px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}}

/* Three stationery editions share a natural embossed wood-fibre paper stock. */
:root,[data-theme="champagne"]{--forest:#e9e0d4;--deep:#c6b49c;--ink:#5b493a;--paper:#fcf8ee;--muted:#85765f;--line:#d8cbbb;--scene-center:#f4eee4;--scene-edge:#d9cbb9;--envelope-back:#d7c6b0;--fold-left:#f0e5d2;--fold-right:#e7d8c2;--fold-bottom:#efe2cf;--flap-top:#f8efdd;--flap-end:#deccb0;--seal-light:#c5a271;--seal-dark:#8e693c;--seal-border:#c3a77c;--seal-ink:#f6ead1;--shadow:#5c49382b;--soft:#978269;--music-bg:#fcf8eede}
[data-theme="rose"]{--forest:#eadbd7;--deep:#c4aaa7;--ink:#714c50;--paper:#fff7f2;--muted:#997b7d;--line:#e0c7c3;--scene-center:#f5e9e4;--scene-edge:#d9bab6;--envelope-back:#d6b5b0;--fold-left:#f1dcd5;--fold-right:#e9ccc5;--fold-bottom:#f0d8cf;--flap-top:#fae9df;--flap-end:#e0bbb2;--seal-light:#b4797b;--seal-dark:#784e54;--seal-border:#b98082;--seal-ink:#fbe4da;--shadow:#603c432b;--soft:#ab8b85;--music-bg:#fff7f2e8}
[data-theme="blue"]{--forest:#dce3e8;--deep:#aabac5;--ink:#415866;--paper:#f6f8f8;--muted:#708591;--line:#c4d1d6;--scene-center:#edf2f3;--scene-edge:#bdcdd5;--envelope-back:#b2c6d0;--fold-left:#e0e9ed;--fold-right:#ccdde5;--fold-bottom:#dce7ed;--flap-top:#f0f5f7;--flap-end:#bfd0da;--seal-light:#889fac;--seal-dark:#486571;--seal-border:#96acb8;--seal-ink:#eaf1f4;--shadow:#374d5b2b;--soft:#7a929f;--music-bg:#f6f8f8e8}
body{background:var(--forest);transition:background-color .3s,color .3s}.entry{background:radial-gradient(ellipse at 50% 35%,var(--scene-center),var(--scene-edge));color:var(--ink)}.entry::before{content:"";position:absolute;inset:0;background:url('assets/paper-texture.jpg') center/680px;mix-blend-mode:multiply;opacity:.42;pointer-events:none}.entry::after{border-color:color-mix(in srgb,var(--ink) 18%,transparent)}.entry-heading,.entry-footer{position:relative}.entry-heading .eyebrow,.entry-footer time,.open-hint{color:var(--muted)}.entry-footer p span{color:var(--soft)}.envelope{filter:drop-shadow(0 24px 26px var(--shadow))}.envelope-back{background:var(--envelope-back);box-shadow:inset 0 0 0 1px var(--line)}.inner-card{background:var(--paper) url('assets/paper-texture.jpg') center/540px;background-blend-mode:multiply;border-color:var(--line)}.inner-card i{color:var(--soft)}.envelope-fold{background:var(--fold-left) url('assets/paper-texture.jpg') center/500px;background-blend-mode:multiply}.fold-right{background-color:var(--fold-right)}.envelope-bottom{background:var(--fold-bottom) url('assets/paper-texture.jpg') center/500px;background-blend-mode:multiply}.envelope-flap{background-image:url('assets/paper-texture.jpg'),linear-gradient(175deg,var(--flap-top),var(--flap-end));background-size:500px,100%;background-blend-mode:multiply}.wax-seal{color:var(--seal-ink);background:radial-gradient(circle at 34% 25%,var(--seal-light),var(--seal-dark) 75%);border-color:var(--seal-border);box-shadow:0 3px 5px var(--shadow),inset 0 0 0 3px var(--seal-dark),inset 1px 3px 6px #fff4d659}.wax-seal>span{text-shadow:0 1px 1px var(--seal-dark)}.envelope-addressee{color:var(--ink)}.letter{background:var(--paper) url('assets/paper-texture.jpg') center top/720px;background-blend-mode:multiply;box-shadow:0 0 90px var(--shadow)}.letter-topline,.letter-date,.hero-photo figcaption,.scroll-note,.personal-letter>.eyebrow,.wedding-day>.eyebrow,.date-display>span:last-child,.occasion-label,.occasion-time>span,.occasion-message,.gentle-note,.letter-end .eyebrow,.text-button{color:var(--muted)}.couple i,.date-display strong i,.ending-names i{color:var(--soft)}.occasion-time{color:var(--ink)}.text-button{border-color:var(--line)}.music-player{position:fixed;top:max(20px,env(safe-area-inset-top));right:22px;z-index:30;display:flex;align-items:flex-start;gap:12px;flex-direction:row-reverse}.music-player button{width:42px;height:42px;display:grid;place-items:center;padding:0;border:1px solid var(--line);border-radius:50%;background:var(--music-bg);color:var(--ink);font:25px Georgia;cursor:pointer;box-shadow:0 3px 12px var(--shadow)}.music-player button.is-playing span{animation:record-turn 10s linear infinite}.music-info{background:var(--music-bg);padding:14px 18px;border:1px solid var(--line);box-shadow:0 5px 15px var(--shadow);text-align:left;border-radius:3px;color:var(--ink)}.music-info[hidden]{display:none}.music-info strong{display:block;font:13px Georgia;letter-spacing:.1em}.music-info>span{display:block;font:12px Georgia;margin-top:7px;color:var(--muted)}.music-info small{display:block;font:12px var(--sans);margin-top:11px;color:var(--muted)}.theme-review{position:fixed;z-index:40;bottom:20px;left:50%;transform:translateX(-50%);display:flex;gap:20px;align-items:center;padding:10px 14px 10px 20px;border:1px solid #cfc5b5;background:#fffaf2f5;border-radius:40px;box-shadow:0 6px 25px #3b302726;font-family:var(--sans);color:#67594e;white-space:nowrap}.theme-review[hidden]{display:none}.review-label{font-size:12px;letter-spacing:.05em}.theme-options{display:flex;gap:5px}.theme-options button{display:flex;align-items:center;gap:7px;background:transparent;border:1px solid transparent;border-radius:24px;min-height:38px;padding:8px 12px;font-size:13px;color:#67594e;cursor:pointer}.theme-options button[aria-pressed="true"]{border-color:#bcad98;background:#e9dfcf73}.color-dot{width:14px;height:14px;border-radius:50%;box-shadow:inset 0 0 0 1px #665a4622}.champagne-dot{background:#d6bd95}.rose-dot{background:#bb8e91}.blue-dot{background:#849daa}.design-review .entry{padding-bottom:100px}.design-review .letter{padding-bottom:88px}@keyframes record-turn{to{transform:rotate(360deg)}}
@media(max-width:600px){.music-player{right:19px;top:max(17px,env(safe-area-inset-top))}.music-player button{width:38px;height:38px;font-size:22px}.entry-heading{padding:0 10px}.theme-review{bottom:max(15px,env(safe-area-inset-bottom));gap:0;padding:7px 8px;border-radius:30px}.review-label{display:none}.theme-options button{padding:8px 10px;font-size:12px}.theme-options{gap:1px}.design-review .entry{padding-bottom:92px;gap:48px}.entry-heading p{font-size:14px}.letter-topline{padding-right:30px}}
@media(max-height:740px){.design-review .entry{gap:29px}}
@media(prefers-reduced-motion:reduce){.music-player button.is-playing span{animation:none}}
.letter-topline{padding-right:56px}
