*{box-sizing:border-box}
:root{--bg:#21191b;--paper:#f3eee4;--ink:#382b2d;--muted:#7b6d67;--red:#8a263d;--gold:#d2b687;--sans:"Be Vietnam Pro",Arial,sans-serif;--serif:"Cormorant Garamond",Georgia,serif}
html{color-scheme:dark}
body{margin:0;background:var(--bg);color:#eee5d8;font-family:var(--sans);font-size:14px;min-height:100svh}
button,input,a{-webkit-tap-highlight-color:transparent;font:inherit}
button,a{touch-action:manipulation}button{cursor:pointer;color:inherit}button:disabled{cursor:default;opacity:.3}
a{color:inherit}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--gold);outline-offset:5px}
button{border:0}button,input{border-radius:0}button{background:none}
[hidden]{display:none!important}
.atmosphere{position:fixed;inset:0;overflow:hidden;pointer-events:none;z-index:-1;background:radial-gradient(ellipse at 50% 42%,#58303a44,transparent 60%),linear-gradient(120deg,#1d181b,#2c1b20 55%,#1d181a)}
.blueprint{position:absolute;inset:0;opacity:.14;background-image:linear-gradient(#bc9e7820 1px,transparent 1px),linear-gradient(90deg,#bc9e7820 1px,transparent 1px);background-size:80px 80px;mask-image:radial-gradient(ellipse,#000,transparent 75%)}
.blueprint:after{content:"";position:absolute;width:920px;height:920px;border:1px solid #c3a78755;border-radius:50%;left:50%;top:48%;transform:translate(-50%,-50%);box-shadow:0 0 0 100px #c3a7870a,0 0 0 220px #c3a78708}
.halo{position:absolute;left:25%;top:-25%;width:50%;height:90%;background:linear-gradient(140deg,#dec39913,transparent 60%);filter:blur(40px);transform:rotate(20deg)}
.dust{position:absolute;width:2px;height:2px;background:var(--gold);border-radius:50%;animation:float 18s linear infinite;opacity:0}
@keyframes float{10%,75%{opacity:.35}to{transform:translate3d(40px,-180px,0);opacity:0}}
.masthead{height:92px;max-width:1600px;margin:auto;padding:0 54px;display:flex;align-items:center;justify-content:space-between}
.brand{display:flex;gap:14px;align-items:center;text-decoration:none;font-size:10px;letter-spacing:1.9px}
.brand small{display:block;font-size:8px;color:#a99a91;margin-top:7px;letter-spacing:1.7px}
.brand-seal{font-family:var(--serif);font-size:21px;letter-spacing:-1px;border:1px solid #ab8d654d;width:43px;height:43px;display:grid;place-items:center;color:var(--gold)}
.quiet-button{display:flex;gap:10px;align-items:center;font-size:11px;color:#c7b8ad;padding:10px 0 10px 16px}
.equalizer{display:flex;gap:3px;align-items:center;height:16px}.equalizer i{width:2px;height:5px;background:var(--gold)}.equalizer i:nth-child(2){height:14px}.equalizer i:nth-child(3){height:10px}.quiet-button[aria-pressed=true] .equalizer i{animation:wave .9s ease-in-out infinite alternate}.equalizer i:nth-child(2){animation-delay:.2s!important}.equalizer i:nth-child(3){animation-delay:.4s!important}@keyframes wave{to{transform:scaleY(.35)}}
.opening{padding:6px 24px 12px;text-align:center}
.scene-eyebrow{display:flex;align-items:center;justify-content:center;gap:18px;font-size:9px;letter-spacing:3.6px;color:#bca68f;margin:0 0 27px}.scene-eyebrow span{width:34px;height:1px;background:#bca68f55}
.cover-stage{position:relative;max-width:1120px;margin:auto;perspective:1800px}
.cover-book{position:relative;width:350px;height:470px;margin:auto;transform:rotate(-3deg) rotateY(-8deg);animation:cover-arrive 1.6s ease both;transition:transform 1.2s cubic-bezier(.22,1,.36,1);isolation:isolate}
@keyframes cover-arrive{from{opacity:0;transform:translateY(24px) rotate(-5deg) rotateY(-16deg) scale(.94)}to{opacity:1;transform:rotate(-3deg) rotateY(-8deg)}}
.cover-book:after{content:"";position:absolute;inset:95% -25% -9%;background:#0009;filter:blur(20px);z-index:-1;border-radius:50%}
.cover-pages{position:absolute;inset:5px -10px -5px 8px;border-radius:2px 7px 7px 2px;background:repeating-linear-gradient(0deg,#dbd0bc 0 1px,#aa9d89 1px 2px);transform:rotate(1deg);border:4px solid #4c1625;box-shadow:20px 28px 60px #0005}
.cover{position:relative;width:100%;height:100%;padding:28px 32px 22px 38px;text-align:center;overflow:hidden;transform-origin:left center;backface-visibility:hidden;background:linear-gradient(90deg,#43101f 0,#80223a 4%,#571326 7%,#88273f 10%,#80243a 65%,#6e1b30);border-radius:3px 5px 5px 3px;box-shadow:inset 0 1px 1px #d08e8b66,inset -2px 0 3px #290613,3px 5px 12px #0005;transition:transform 1.3s cubic-bezier(.4,0,.15,1),opacity 1s}
.cover:before{content:"";position:absolute;inset:13px 13px 13px 23px;border:1px solid #dab37a55;pointer-events:none}
.cover:after{content:"";position:absolute;inset:0;pointer-events:none;opacity:.18;background-image:repeating-linear-gradient(0deg,transparent 0 2px,#f9d7b41b 2px 3px),repeating-linear-gradient(90deg,transparent 0 3px,#24041033 3px 4px)}
.cover-top{display:flex;align-items:center;justify-content:space-between;color:var(--gold);text-align:right;font-size:8px;line-height:1.7;letter-spacing:2px}
.cover-emblem{display:grid;place-items:center;border:1px solid #d2b68770;width:38px;height:38px;font-family:var(--serif);font-size:20px;letter-spacing:-1px}
.cover-title{margin-top:26px;color:#e9d8b6;text-shadow:0 1px 1px #2a060a}
.cover-the{font-size:12px;letter-spacing:6px}.cover h1{font-family:var(--serif);font-size:41px;line-height:1.1;letter-spacing:-1px;font-weight:600;margin:10px -14px 4px;white-space:nowrap}
.cover-chapter{font-family:var(--serif);font-size:28px;letter-spacing:7px}
.cover-line{width:35px;height:1px;background:#d2b6878c;margin:21px auto 13px}
.cover-owner{font-family:var(--serif);font-size:23px;margin:0;color:#edddbf}
.architecture{width:90%;height:73px;color:#dbb986;opacity:.48;margin:12px auto 0}
.cover-dedication{min-height:43px;display:flex;flex-direction:column;justify-content:center;gap:5px;color:#e8cf9d;position:relative}
.cover-dedication>span{font-size:7px;letter-spacing:1.7px}
.cover-dedication strong{display:none;font-family:var(--serif);font-size:30px;line-height:1.1;overflow-wrap:anywhere;max-height:76px}
.cover-bottom{display:flex;justify-content:space-between;font-size:7px;letter-spacing:1.6px;margin-top:16px;color:#ccb088}
.cover-aside{position:absolute;top:35%;text-align:left;width:230px;color:#c5b7a8}
.cover-aside>span{font-size:8px;letter-spacing:1.6px;color:#a58d7c}.cover-aside p{font-family:var(--serif);font-size:23px;line-height:1.5;font-style:italic}.cover-aside i{display:block;width:45px;height:1px;background:#b0916966}
.aside-left{left:25px}.aside-right{right:0;top:44%}
.guest-form{max-width:390px;margin:30px auto 0;transition:opacity .4s,transform .4s}
.guest-form label{display:block;font-family:var(--serif);font-size:23px;color:#eddfce;margin-bottom:12px}
.guest-entry{display:flex;border-bottom:1px solid #d2b68766;padding-bottom:8px;gap:8px}
.guest-entry input{color:#eee1d0;background:none;border:0;outline-offset:2px;min-width:0;width:100%;padding:9px 0;font-size:12px}
.guest-entry input::placeholder{color:#ad9c90}.guest-entry button{flex-shrink:0;color:#f0dfbe;font-size:11px;padding:8px 0 8px 14px}.guest-entry button span{margin-left:14px;font-size:18px}
.guest-form>p{font-size:9px;color:#a99a8f;line-height:1.7;margin:15px -15px 0}
.opening-message{min-height:18px;font-family:var(--serif);font-size:19px;color:var(--gold);margin:0}
.opening.personalizing .guest-form{opacity:0;pointer-events:none;transform:translateY(8px)}
.opening.personalizing .cover-book{animation:none;transform:rotate(0) rotateY(0) scale(1.035)}
.opening.personalizing .cover-dedication{background:linear-gradient(110deg,transparent,#e8c9941c,transparent);padding:8px 0;margin-top:-6px}
.opening.personalizing .cover-dedication strong{display:block;animation:engrave 1.15s ease both}
.opening.personalizing .architecture{height:57px;margin-top:4px}
@keyframes engrave{from{opacity:0;filter:blur(5px);letter-spacing:3px}to{opacity:1;filter:blur(0);letter-spacing:0}}
.opening.opening-book .cover{transform:rotateY(-105deg);opacity:0}
.opening.opening-book .cover-book{transform:translateX(30px) scale(1.03)}
.site-footer{max-width:1600px;margin:22px auto 0;padding:22px 54px;display:flex;justify-content:space-between;gap:16px;border-top:1px solid #c4a37b13;color:#a69386;font-size:8px;letter-spacing:1.7px}
.reader{max-width:1140px;margin:10px auto 0;padding:0 24px;animation:reader-in 1s ease both}
@keyframes reader-in{from{opacity:0;transform:translateY(16px) scale(.97)}to{opacity:1;transform:none}}
.reader-heading{display:flex;justify-content:space-between;align-items:center;margin:0 3px 17px;gap:12px;color:#bdab99;font-size:10px;letter-spacing:1.1px}
.text-button{padding:10px 0;color:inherit;font-size:11px}
.book{position:relative;border-radius:3px;background:#692033;padding:7px;box-shadow:0 32px 70px #0006,0 4px 0 #ad9a80,0 7px 0 #5b2631;perspective:1800px;outline:none}
.spread{display:grid;grid-template-columns:1fr 1fr;min-height:560px;height:clamp(560px,67vh,690px);position:relative;background:var(--paper);color:var(--ink)}
.spread:after{content:"";position:absolute;inset:0 auto 0 50%;width:44px;transform:translateX(-50%);pointer-events:none;z-index:3;background:linear-gradient(90deg,transparent,#39231b12 35%,#2c1b2129 49%,#fff5 53%,#6450450a 75%,transparent)}
.page{min-width:0;position:relative;padding:30px 38px 37px;display:flex;flex-direction:column;background:radial-gradient(ellipse at top left,#fff9e9aa,transparent 65%),var(--paper);overflow-wrap:anywhere}
.page.right{background:radial-gradient(ellipse at bottom right,#e6d8c244,transparent 65%),var(--paper)}
.page-top{display:flex;justify-content:space-between;gap:10px;align-items:center;border-bottom:1px solid #8a263d26;padding-bottom:12px;margin-bottom:23px;font-size:8px;letter-spacing:1.6px;color:#866456}
.page-top span:last-child{font-family:var(--serif);font-size:13px;color:#8a263d}
.page-content{display:flex;flex:1;min-height:0;flex-direction:column;gap:16px}
  .chapter-label{margin:0;font-size:11px;line-height:1.45;letter-spacing:1.1px;color:var(--red);font-weight:600;max-width:100%}
.page-title{font-family:var(--serif);font-size:clamp(32px,3.2vw,46px);font-weight:600;line-height:1.04;letter-spacing:-.8px;margin:0;white-space:pre-line}
.page-text{font-size:13px;line-height:1.9;color:#635651;margin:0;white-space:pre-line}
.page-text+.page-text{margin-top:-6px}
.page-quote{font-family:var(--serif);font-size:29px;line-height:1.17;color:var(--red);font-weight:500;margin:0;white-space:pre-line}
.page-note{font-size:10px;line-height:1.65;color:#846f60;margin:0}
.folio{position:absolute;bottom:15px;left:38px;right:38px;display:flex;justify-content:space-between;font-size:8px;letter-spacing:1.2px;color:#8f7869}
.photos{display:grid;grid-template-columns:1fr;gap:12px;min-height:110px;flex:1;max-height:205px;align-items:stretch;margin:3px 2px}
.photos.two{grid-template-columns:1fr 1fr;max-height:165px;min-height:130px}
.memory{min-width:0;margin:0;background:#fffbf2;padding:7px 7px 8px;display:flex;flex-direction:column;box-shadow:0 3px 10px #48322418;transform:rotate(-1.4deg);position:relative}
.memory:nth-child(2){transform:rotate(2deg)}.memory:before{content:"";position:absolute;top:-6px;left:35%;width:32%;height:12px;background:#dac9ac88;transform:rotate(-3deg);z-index:1}
.photo-frame{position:relative;width:100%;flex:1;min-height:65px;display:grid;place-items:center;overflow:hidden;background:linear-gradient(140deg,#dfd3c4,#e9dfd1 55%,#d4c6b5);color:#8f7763;border:0;padding:0}
.photo-frame:disabled{opacity:1}
.photo-frame:before,.photo-frame:after{content:"";position:absolute;pointer-events:none;border:1px solid #9d826e29;width:80%;height:70%;transform:rotate(-18deg)}
.photo-frame:after{width:100%;height:45%;transform:rotate(25deg)}
.photo-frame img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1}
.photo-placeholder{display:flex;align-items:center;flex-direction:column;gap:8px;z-index:1;padding:12px;text-align:center;font-size:8px;letter-spacing:.5px}
.photo-placeholder b{font-family:var(--serif);font-size:26px;font-weight:500;color:#a78b73}
.photo-placeholder small{font-size:8px;letter-spacing:0;overflow-wrap:anywhere}
.memory figcaption{font-size:8px;line-height:1.5;color:#806b5c;padding:7px 3px 0}
.type-quote .page-content{justify-content:center;gap:24px}.type-quote .page-quote{font-size:clamp(34px,3.4vw,49px);line-height:1.12}.type-quote .chapter-label{margin-bottom:6px}.type-quote .page-quote:before{content:"“";display:block;font-size:67px;line-height:.5;color:#bca181;margin:10px 0 8px}
.type-quote .page-note{border-top:1px solid #8a263d22;padding-top:17px;margin-top:6px}
.type-photo .photos{max-height:240px}
.type-memories .photos{max-height:210px}
.type-gratitude .page-title{color:var(--red);font-size:51px}
.type-ending{background:#7a2439!important;color:#f2e3c8}
.type-ending .page-top,.type-ending .folio,.type-ending .chapter-label,.type-ending .page-top span:last-child,.type-ending .page-note{color:#dfc598;border-color:#d2b68744}
.type-ending .page-title{font-size:48px;letter-spacing:1px}
.type-ending .page-quote{color:#f1dcbb;font-size:39px;font-style:italic}
.type-ending .page-text{color:#e2cbb8;font-family:var(--serif);font-size:25px;line-height:1.3}
.type-ending .photos{max-height:150px}
.guest-name{font-family:var(--serif);color:var(--red);font-size:clamp(36px,3.8vw,54px);line-height:1.05;font-weight:600;margin:0;overflow-wrap:anywhere}
.signature{font-family:"Great Vibes",cursive;font-size:32px;font-weight:400;color:var(--red);margin:-9px 0 0}
.type-invitation .photos{max-height:155px}
.event-details{display:grid;grid-template-columns:1fr 1fr;gap:16px 20px;margin:3px 0}
.event-detail{min-width:0}.event-detail.wide{grid-column:1/-1}.event-detail dt{font-size:8px;letter-spacing:1.5px;color:#876d5f;margin-bottom:6px}.event-detail dd{margin:0;font-size:12px;line-height:1.5;color:var(--ink)}.event-detail dd.pending{font-size:11px;color:#8e7b70;font-style:italic}
.event-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.event-action{display:flex;align-items:center;justify-content:center;text-align:center;padding:11px 7px;min-height:40px;color:var(--red);border:1px solid #8a263d33;font-size:10px;text-decoration:none;background:transparent}
.event-action.primary{background:var(--red);color:#f6e9d6;border-color:var(--red)}
.event-action:disabled{opacity:.45}
.turn-leaf{position:absolute;top:7px;bottom:7px;left:50%;right:7px;background:linear-gradient(90deg,#e7ddcc,#f3eee4 40%,#d4c4ab);transform-origin:left center;z-index:5;pointer-events:none;visibility:hidden;backface-visibility:hidden;box-shadow:-10px 0 30px #39261922}
.book.turning .turn-leaf{visibility:visible;animation:turn .72s cubic-bezier(.38,.08,.3,1) both}
.book.turning.backwards .turn-leaf{left:7px;right:50%;transform-origin:right center;animation-name:turn-back}
@keyframes turn{from{transform:rotateY(0);opacity:0}15%{opacity:1}to{transform:rotateY(-180deg);opacity:.5}}
@keyframes turn-back{from{transform:rotateY(0);opacity:0}15%{opacity:1}to{transform:rotateY(180deg);opacity:.5}}
.page-content>*{animation:none}
@keyframes reveal{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.reader-controls{display:flex;align-items:center;justify-content:center;gap:30px;margin:20px 0 6px}
.arrow-button{display:grid;place-items:center;width:42px;height:42px;border:1px solid #c6a57844;border-radius:50%;font-size:19px;color:#dfc6a0}
.playback{display:flex;flex-direction:column;align-items:center;min-width:180px}.playback .text-button{font-size:11px;padding:5px}.playback>span{font-size:9px;color:#b4a092;margin-top:4px;letter-spacing:1px}
.timeline-row{display:flex;align-items:center;gap:14px;max-width:440px;margin:auto;font-size:9px;color:#b5a18f;font-variant-numeric:tabular-nums}
.progress{flex:1;height:2px;background:#d2b68722}.progress>span{display:block;width:0;height:100%;background:#c6a578;transition:width .1s linear}
.reading-hint{text-align:center;font-size:8px;color:#ab9688;margin:15px 0 5px;line-height:1.7}.mobile-hint{display:none}
.lightbox{max-width:92vw;max-height:92svh;border:1px solid #cfb28c55;padding:24px;background:#24191c;color:#eee0cd;overflow:auto}
dialog::backdrop{background:#100b10df;backdrop-filter:blur(8px)}
.lightbox .arrow-button{position:absolute;right:12px;top:12px;background:#21191bcc;z-index:1}
.lightbox img{display:block;max-width:82vw;max-height:73svh;object-fit:contain}.lightbox p{font-size:12px;text-align:center}
.share-dialog{width:min(90vw,460px);padding:28px;border:1px solid #cfb28c55;background:#291d21;color:#eee0cd}.share-dialog h2{font:34px var(--serif);margin:0}.share-dialog p{font-size:12px;line-height:1.7}.share-dialog input{width:100%;padding:12px;border:1px solid #cfb28c55;background:#21191b;color:#eee0cd}.solid-button{padding:12px 20px;background:var(--red);margin-top:16px}
.toast{position:fixed;bottom:28px;left:50%;transform:translate(-50%,12px);max-width:90vw;width:max-content;background:#f1e7d6;color:#512330;box-shadow:0 8px 30px #0004;padding:13px 20px;font-size:12px;z-index:50;opacity:0;pointer-events:none;transition:.25s}
.toast.visible{opacity:1;transform:translate(-50%,0)}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.noscript{text-align:center;padding:20px}
@media(min-width:1500px) and (min-height:950px){.opening{padding-top:25px}.cover-book{width:390px;height:525px}.cover{padding:36px 40px 28px 46px}.cover h1{font-size:46px}.cover-title{margin-top:36px}.cover-chapter{font-size:33px}.architecture{height:83px;margin-top:19px}.cover-line{margin-top:26px}.cover-bottom{margin-top:24px}.guest-form{margin-top:37px}.scene-eyebrow{margin-bottom:38px}.site-footer{margin-top:38px}}
@media(max-width:1100px){.cover-aside{width:180px}.aside-left{left:0}.aside-right{right:0}.cover-aside p{font-size:20px}.masthead{padding:0 30px}.page{padding:25px 28px 36px}.page-content{gap:14px}.folio{left:28px;right:28px}.page-text{font-size:12px}.page-top{margin-bottom:20px}.type-gratitude .page-title{font-size:43px}}
@media(min-width:641px) and (max-width:850px){.cover-aside{display:none}.reader{padding:0 18px}.page{padding:23px 22px 36px}.page-title{font-size:32px}.type-quote .page-quote{font-size:35px}.page-quote{font-size:26px}.page-text{font-size:12px;line-height:1.75}.spread{height:620px}.type-ending .page-title{font-size:35px}.type-ending .page-quote{font-size:32px}.event-detail dd{font-size:11px}.event-actions{gap:6px}.event-action{font-size:9px}.guest-name{font-size:36px}.photos.two{gap:6px}.photo-placeholder{padding:5px}.type-gratitude .page-title{font-size:38px}}
@media(max-height:800px) and (min-width:641px){.masthead{height:70px}.scene-eyebrow{margin-bottom:18px}.cover-book{width:310px;height:418px}.cover{padding:23px 28px 17px 34px}.cover-title{margin-top:17px}.cover h1{font-size:36px}.cover-chapter{font-size:25px}.cover-line{margin:14px auto 10px}.architecture{height:60px;margin-top:7px}.cover-bottom{margin-top:10px}.cover-owner{font-size:22px}.guest-form{margin-top:22px}.guest-form label{font-size:21px;margin-bottom:6px}.site-footer{margin-top:12px;padding-top:15px;padding-bottom:15px}.reader{margin-top:0}.reader-heading{margin-bottom:12px}.spread{height:550px;min-height:550px}.reader-controls{margin-top:13px}.reading-hint{margin-top:9px}.reader~.site-footer{margin-top:10px}}
@media(max-width:640px){
.masthead{height:76px;padding:0 20px}.brand{gap:9px;font-size:7px;letter-spacing:1.2px}.brand small{font-size:6px;letter-spacing:1px}.brand-seal{width:32px;height:32px;font-size:17px}.quiet-button{font-size:9px;gap:7px}.opening{padding:9px 18px 12px}.scene-eyebrow{font-size:7px;letter-spacing:2.5px;margin-bottom:28px;gap:12px}.scene-eyebrow span{width:24px}.cover-aside{display:none}.cover-book{width:min(290px,82vw);height:400px}.cover{padding:23px 25px 19px 32px}.cover-top{font-size:7px}.cover-emblem{width:32px;height:32px;font-size:18px}.cover-title{margin-top:23px}.cover-the{font-size:10px}.cover h1{font-size:34px;margin-top:9px}.cover-chapter{font-size:24px;letter-spacing:5px}.cover-line{margin:17px auto 11px}.cover-owner{font-size:22px}.architecture{height:57px;margin-top:7px}.cover-dedication>span{font-size:6px;letter-spacing:1.3px}.cover-bottom{font-size:6px;letter-spacing:1.2px;margin-top:11px}.guest-form{margin-top:32px;max-width:320px}.guest-form label{font-size:24px}.guest-form>p{font-size:8px;margin-left:0;margin-right:0}.guest-entry input{font-size:12px}.guest-entry button{font-size:10px}.site-footer{padding:18px 20px;margin-top:18px;font-size:7px;letter-spacing:1px}.site-footer span:nth-child(2){display:none}.opening.personalizing .architecture{height:42px}.cover-dedication strong{font-size:26px}.reader{padding:0 16px;margin-top:0}.reader-heading{font-size:8px;letter-spacing:.5px;margin-bottom:11px}.reader-heading .text-button{font-size:9px}.book{padding:5px}.spread{display:block;height:clamp(575px,calc(100svh - 240px),690px);min-height:575px}.spread:after{display:none}.page{width:100%;height:100%;padding:23px 24px 35px}.page-top{font-size:7px;margin-bottom:23px;padding-bottom:11px}.page-content{gap:16px}.page-title{font-size:36px;line-height:1.06}.page-text{font-size:13px;line-height:1.8}.page-quote{font-size:29px}.type-quote .page-quote{font-size:40px}.type-quote .page-content{gap:23px}.chapter-label{font-size:10px;letter-spacing:.8px}.page-note{font-size:10px}.folio{left:24px;right:24px}.photos{max-height:190px}.photos.two{max-height:160px;gap:8px}.type-photo .photos{max-height:230px}.type-memories .photos{max-height:195px}.type-gratitude .page-title{font-size:44px}.type-ending .page-title{font-size:41px}.type-ending .page-quote{font-size:36px}.guest-name{font-size:44px}.event-detail dd{font-size:12px}.event-actions{gap:8px}.event-action{font-size:10px;padding:11px 5px}.type-event .page-content{gap:20px}.event-details{gap:20px}.reader-controls{margin-top:18px;gap:22px}.reading-hint{font-size:7px;margin-top:13px}.desktop-hint{display:none}.mobile-hint{display:inline}.turn-leaf{display:none}.book.turning .spread{animation:mobile-turn .38s ease both}.book.turning.backwards .spread{animation-name:mobile-back}.timeline-row{max-width:280px}.reader .arrow-button{width:39px;height:39px}.reader+.site-footer{margin-top:13px}
}
@keyframes mobile-turn{0%{opacity:1;transform:translateX(0)}49%{opacity:0;transform:translateX(-12px)}50%{opacity:0;transform:translateX(12px)}100%{opacity:1;transform:none}}
@keyframes mobile-back{0%{opacity:1;transform:translateX(0)}49%{opacity:0;transform:translateX(12px)}50%{opacity:0;transform:translateX(-12px)}100%{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.dust{display:none}.turn-leaf{display:none}}

/* Keep quote spreads readable on the narrowest phones. */
@media(max-width:380px){
  .type-quote .page-quote{font-size:36px;line-height:1.1}
  .type-quote .page-content{gap:20px}
  .type-quote .page-note{padding-top:13px}
}

/* Cinematic background and the existing book opening transition. */
.atmosphere{animation:scene-light 3s ease both}
.halo{animation:scene-light 3s .5s ease both}
.cover-book{animation-duration:3s}
.cover{transition:transform 2s cubic-bezier(.4,0,.15,1),opacity 1.9s}
.opening.opening-book .cover-pages{box-shadow:30px 20px 60px #0007;transition:box-shadow 2s}
@keyframes scene-light{from{opacity:0}to{opacity:1}}
@keyframes cover-information{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.volume-control{margin-left:auto;display:flex;align-items:center;gap:8px;font-size:9px;color:#c7b8ad}
.volume-control input{width:70px;accent-color:var(--gold)}
.event-location strong,.event-location span{display:block}
.event-location strong{font-size:18px;color:var(--red);margin-bottom:3px}
.event-location span{font-size:10px;letter-spacing:.4px}
.event-detail .event-date,.event-detail .event-time{font-family:var(--serif);font-size:25px;color:var(--red);font-weight:600}
.type-event .page-content{gap:12px}
.type-event .guest-name{font-size:clamp(40px,4.5vw,62px);color:var(--red);text-shadow:0 1px 0 #fff8,0 2px 9px #b2894922}
.event-greeting{font-family:var(--serif);font-size:23px;line-height:1.1;margin:0;color:#71504d}
.type-event .event-details{gap:12px 15px}
.calendar-dialog .event-action{width:100%;margin-top:12px;min-height:46px}
.calendar-dialog .calendar-help{font-size:11px;color:#c7b8ad}
@media(max-width:640px){
  .volume-control{font-size:0;gap:0;margin-right:6px}
  .volume-control input{width:48px}
  .opening.personalizing .cover-dedication strong{font-size:34px}
  .type-event .page-content{gap:12px}
  .type-event .event-details{gap:14px}
  .type-event .guest-name{font-size:48px}
}

/* Allow grid tracks to honor the measured shared paper height. */
.page{min-height:0}

/* Personal edition — only the closed cover and invitation finale. */
.opening{overflow-x:clip}
.opening .cover{display:flex;flex-direction:column}
.opening .cover-top{font-size:9px;letter-spacing:1.1px;text-align:right;min-height:32px}
.opening .cover-title{font:600 16px/1.5 var(--sans);letter-spacing:1.3px;margin:23px -8px 0;color:#dcc69f}
.opening .cover-line{margin:16px auto 10px;width:28px;flex-shrink:0}
.opening .cover-owner{font-size:24px}
.opening .cover-dedication{flex:1;min-height:0;gap:12px;justify-content:center;margin:0;padding:8px 0 38px;background:none}
.opening .cover-dedication>span{font:400 10px/1.6 var(--sans);letter-spacing:2px;color:#e3cda8}
.opening .cover .cover-guest{font:600 49px/1.08 var(--serif);letter-spacing:-1px;white-space:normal;text-wrap:balance;overflow-wrap:normal;margin:0 -10px;color:#f1d99f;background:linear-gradient(115deg,#caa365 5%,#fff1c9 30%,#e2bb78 49%,#fff0c7 70%,#d5af73 95%);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;filter:drop-shadow(0 1px 1px #421022);text-shadow:0 1px 12px #ecc78112}
.opening .cover-note{font:400 10px/1.8 var(--sans);color:#e8cdbf;margin:0 auto;max-width:235px;text-wrap:balance}
.opening .architecture,.opening.personalizing .architecture{position:absolute;bottom:43px;left:38px;width:calc(100% - 70px);height:35px;margin:0;opacity:.25}
.opening .cover-bottom{flex-shrink:0;margin-top:auto}
.opening .cover-top,.opening .cover-title,.opening .cover-owner,.opening .cover-line,.opening .cover-dedication>span,.opening .cover-guest,.opening .cover-note{opacity:0;animation:none}
.opening-action{margin:28px auto 0;opacity:0;visibility:hidden;transform:translateY(5px);transition:opacity .6s,transform .6s,visibility .6s}
.cover-ready .opening-action{opacity:1;visibility:visible;transform:none}
.open-book-button{display:inline-flex;align-items:center;justify-content:center;gap:32px;min-height:48px;padding:13px 27px;border:1px solid #d2b68788;border-radius:2px;background:linear-gradient(120deg,#d2b68712,#d2b68705);color:#f1dfbd;font-size:12px;letter-spacing:.3px;transition:background .25s,border-color .25s}
.open-book-button:hover{background:#d2b68720;border-color:#e6cfa7}
.open-book-button span{font-size:18px}
.opening-action>p{font-size:9px;line-height:1.7;color:#ad9b90;margin:13px 0 0}
.opening.personalizing .opening-action{opacity:0;visibility:hidden;transform:translateY(5px)}
.opening .opening-message{font:500 20px/1.5 var(--serif);min-height:30px;margin:8px 0 0}
.type-invitation .guest-name{font-size:clamp(42px,4.3vw,60px);line-height:1.08;text-wrap:balance;color:#8a263d;text-shadow:0 1px 0 #fff9,0 2px 10px #b2894922}
.type-invitation .personal-invitation{font:500 27px/1.25 var(--serif);color:#713044}
.type-invitation .page-note{color:#795d4d}
@media(max-height:800px) and (min-width:641px){
  .opening .cover-title{font-size:13px;margin-top:15px}
  .opening .cover-line{margin:11px auto 8px}
  .opening .cover-owner{font-size:22px}
  .opening .cover .cover-guest{font-size:44px}
  .opening .cover-dedication{gap:9px;padding-bottom:31px}
  .opening .cover-note{font-size:9px}
  .opening-action{margin-top:23px}
}
@media(max-width:640px){
  .opening .cover-top{font-size:8px}
  .opening .cover-title{font-size:12px;letter-spacing:1px;margin-top:16px}
  .opening .cover-line{margin:12px auto 9px}
  .opening .cover-owner{font-size:22px}
  .opening .cover .cover-guest{font-size:43px}
  .opening .cover-dedication{gap:9px;padding:6px 0 31px}
  .opening .cover-dedication>span{font-size:9px;letter-spacing:1.7px}
  .opening .cover-note{font-size:9px;max-width:220px}
  .opening .architecture,.opening.personalizing .architecture{left:32px;bottom:38px;width:calc(100% - 57px);height:29px}
  .opening-action{margin-top:26px}
  .opening-action>p{font-size:8px}
  .opening .opening-message{font-size:18px}
  .type-invitation .guest-name{font-size:46px}
  .type-invitation .personal-invitation{font-size:25px}
}
@media(forced-colors:active){.opening .cover .cover-guest{background:none;-webkit-text-fill-color:CanvasText}}
