/* 照片为章节服务：原比例优先，按组控制留白与大小。 */
.photo{width:100%;min-width:0;margin:0;--photo-ratio:3 / 4;--photo-position:50% 50%;text-align:center}
.photo-mat{position:relative;aspect-ratio:var(--photo-ratio);background:#e9dfce;overflow:hidden}
.photo-placeholder{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;padding:18px 10px;color:#82694f;background:radial-gradient(ellipse at 30% 20%,#fffaf06b,transparent 70%),linear-gradient(145deg,#eee5d4,#dfd0b8)}
.photo-placeholder:before{content:'';position:absolute;inset:10px;border:1px solid #a98c6333;pointer-events:none}
.photo-number{font:italic 44px/1 Georgia,serif;color:#a98c63;opacity:.65;margin-bottom:17px}
.photo-theme{font:17px var(--heading-font);letter-spacing:.15em}.photo-scene{font-size:10px;line-height:1.8;margin-top:10px;letter-spacing:.06em}
.photo-hint,.photo-ratio{font:9px/1.9 var(--sans);color:#927d65;margin-top:16px}.photo-ratio{margin-top:3px}
.photo img{display:block;width:100%;height:100%;object-fit:contain;object-position:var(--photo-position)}
.photo[data-mode="cover"] img{object-fit:cover}
.photo[data-mode="natural"].has-image .photo-mat{aspect-ratio:auto}
.photo[data-mode="natural"].has-image img{height:auto;object-fit:initial}
.photo[data-mode="natural"]:not(.has-image) img{position:absolute;inset:0}
.photo-intro{padding-top:74px;padding-bottom:79px;justify-content:flex-start}
.photo-intro .kicker{margin-bottom:21px}.photo-intro .intro-title{flex-direction:row;gap:10px;align-items:center}.photo-intro .intro-title img{width:90px;height:46px}.photo-intro .names{margin:20px 0 26px;font-size:19px}.photo-intro .intro-copy{margin:23px 0 17px}
.hero-photo{width:100%}.hero-photo .photo-mat{max-height:none}
.photo-story{padding-top:82px;padding-bottom:91px;justify-content:flex-start}
.photo-story .fine-line{margin-bottom:9px}.story-sequence{width:100%;text-align:left;margin-top:51px}
.photo-story .story-memory{width:100%;margin:23px 0 0;font-size:12px;line-height:2.65;letter-spacing:.035em;transform:none}
.story-present-title{font:400 22px/1.8 var(--heading-font);letter-spacing:.16em;color:#f1dcc0;text-align:left;margin:0 0 25px}
.story-moment p{font-size:12px;line-height:2.5;letter-spacing:.07em;color:#e4ccb1}
.moment-one{margin-top:0}.moment-one .photo{width:89%;margin-top:0}
.moment-two{margin-top:30px;display:flex;flex-direction:column;align-items:flex-end}.moment-two .photo{width:66%}.moment-two p{width:100%;margin:0 0 25px;text-align:right}
.moment-three{margin-top:39px}.moment-three p{margin:25px 0 0;text-align:center}.photo-story .timeline{margin-top:30px}
.story .photo-placeholder{background:linear-gradient(140deg,#d7c19f,#bba080);color:#674f3d}.story .photo-number{color:#80623f}.story .photo-hint,.story .photo-ratio{color:#735b43}
.album{padding-top:80px;padding-bottom:95px;justify-content:flex-start}.album .chapter-title{font-size:25px;letter-spacing:.08em}.album-intro{font-size:11px;color:var(--muted);line-height:2;margin:17px 0 36px}
.album>div{width:100%}.group-label{font:10px/1.8 var(--body-font);letter-spacing:.18em;color:var(--muted);text-align:left;margin:0 0 17px}
.album-pair{margin-top:53px}.album-chinese{margin-top:58px}.album-slides{margin-top:57px}
.photo-combination{display:grid;gap:14px;align-items:start}
.photo-combination[data-layout="pair"]{grid-template-columns:1fr 1fr}.photo-combination[data-layout="pair"]>.photo:nth-child(2){margin-top:39px}
.photo-combination[data-layout="mixed"]{grid-template-columns:1fr}.photo-combination[data-layout="mixed"]>.photo:nth-child(2){width:59%;justify-self:end;margin-top:8px}
.photo-combination[data-layout="stack"]{grid-template-columns:1fr;gap:24px}.photo-combination[data-layout="stack"]>.photo:nth-child(2){width:86%;justify-self:end}
.photo-combination[data-layout="pair"] .photo-placeholder{padding:18px 8px}.photo-combination[data-layout="pair"] .photo-number{font-size:33px;margin-bottom:12px}.photo-combination[data-layout="pair"] .photo-theme{font-size:14px}.photo-combination[data-layout="pair"] .photo-scene{font-size:9px}.photo-combination[data-layout="pair"] .photo-hint{margin-top:12px;font-size:8px}.photo-combination[data-layout="pair"] .photo-ratio{font-size:8px}
.photo-carousel{position:relative;display:flex;gap:15px;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;overscroll-behavior-x:contain;align-items:center;padding:0 22px 0 0}
.photo-carousel::-webkit-scrollbar{display:none}.photo-carousel>.photo{flex:0 0 92%;scroll-snap-align:start}.photo-carousel>.photo:last-child{margin-right:8%}
.photo-carousel .photo-mat{height:310px;aspect-ratio:auto}.photo-carousel .photo[data-mode="natural"].has-image .photo-mat{height:310px;aspect-ratio:auto}.photo-carousel .photo[data-mode="natural"].has-image img{height:100%;object-fit:contain}
.carousel-controls{display:flex;align-items:center;justify-content:center;gap:24px;margin-top:20px}.carousel-controls button{border:1px solid #c5a16a77;background:transparent;color:var(--wine);width:40px;height:36px}.carousel-controls button:disabled{opacity:.3;cursor:default}.carousel-count{font:11px Georgia,serif;letter-spacing:.15em;color:var(--muted)}.carousel-hint{font-size:9px;letter-spacing:.15em;color:var(--muted);margin:12px 0 0}
.photo-invitation{padding-top:79px;padding-bottom:90px}.invite-photo{margin-bottom:37px}.photo-invitation .invite-copy{font-size:12px}
.route{padding-top:80px;padding-bottom:100px}.photo-ending{width:100%;margin-bottom:38px}.ending-line{font:17px/2 var(--heading-font);letter-spacing:.15em;color:var(--wine);margin:23px 0 0}
.reveal-photo{opacity:0;transform:translateY(12px);transition:opacity .65s ease,transform .65s ease}.reveal-photo.revealed{opacity:1;transform:none}
@media(max-width:350px){.page{padding-left:25px;padding-right:25px}.photo-combination{gap:10px}.photo-combination[data-layout="pair"] .photo-theme{font-size:12px}.photo-combination[data-layout="pair"] .photo-scene{font-size:8px}.photo-combination[data-layout="pair"] .photo-placeholder:before{inset:6px}.photo-carousel .photo-mat{height:270px}.photo-carousel .photo[data-mode="natural"].has-image .photo-mat{height:270px}.controls{gap:11px}.photo-intro .intro-title img{width:82px;height:43px}}
@media(prefers-reduced-motion:reduce){.reveal-photo{opacity:1;transform:none;transition:none}}
.photo:not(.has-image) .photo-mat{min-height:180px}
