.places-gallery{position:relative;min-height:100svh;height:100svh;min-height:680px;isolation:isolate;background:#eee5d7;color:#626858;overflow:hidden;display:grid;grid-template-columns:minmax(0,1fr) clamp(160px,17vw,300px)}
.places-heading{position:absolute;left:6%;top:9%;z-index:2;display:flex;align-items:center;gap:18px;pointer-events:none}
.places-heading>span{width:clamp(50px,8vw,140px);height:1px;background:#9a9d8d}
.places-heading p{margin:0;font-size:13px;letter-spacing:.15em;font-weight:400}
.places-heading p span{margin-left:15px;font:14px Georgia,serif;letter-spacing:.04em;color:#8d9183}
.places-gallery:before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:url('./assets/paper-texture.jpg') center/1400px auto repeat;mix-blend-mode:multiply;opacity:.34}
.places-viewport{display:flex;overflow-x:auto;overflow-y:hidden;scroll-snap-type:none;scrollbar-width:none;scroll-behavior:smooth;min-width:0;align-self:stretch}
.places-viewport::-webkit-scrollbar{display:none}
.places-viewport:before,.places-viewport:after{content:"";flex:0 0 17.5%;pointer-events:none}
.places-slide{flex:0 0 65%;min-width:0;display:grid;grid-template-columns:max-content minmax(0,680px);align-content:center;align-items:start;justify-content:center;gap:clamp(25px,4vw,70px);padding:100px 2vw 110px;box-sizing:border-box;scroll-snap-align:none}
.places-label{align-self:start;flex-shrink:0;display:flex;flex-direction:row-reverse;align-items:flex-start;gap:18px}
.places-label h2{writing-mode:vertical-rl;font-size:clamp(28px,2.8vw,48px);font-weight:400;letter-spacing:.2em;line-height:1.5;margin:0}
.places-label p{writing-mode:vertical-rl;margin:6px 0 0;font:11px/1.5 Georgia,serif;letter-spacing:.12em;color:#909481}
.places-slide figure{width:min(47vw,680px);margin:0;flex-shrink:1;min-width:0}
.places-slide figure img{display:block;width:100%;aspect-ratio:3/2;object-fit:cover}
.places-slide figcaption{font-size:12px;letter-spacing:.12em;margin-top:22px;line-height:1.8;color:#8c907f}
.places-caption-with-more{display:flex;justify-content:space-between;align-items:center;gap:22px}
.places-detail-link{display:inline-flex;align-items:center;gap:6px;flex:none;color:#33382d;text-decoration:none;font:14px Georgia,serif;letter-spacing:.1em;padding:4px 0}
.places-detail-link svg{width:70px;height:31px;stroke:#a69e83;stroke-width:1.25;overflow:visible}
.places-detail-line{transition:transform .35s;transform-origin:17px 21px}.places-detail-link:hover .places-detail-line{transform:scaleX(1.1)}.places-detail-link:hover{color:#677256}
.places-detail-hexagon{transform-origin:22px 21px;animation:places-more-clockwise 6s linear infinite;animation-play-state:paused}
.places-detail-link:hover .places-detail-hexagon,.places-detail-link:focus-visible .places-detail-hexagon{animation-play-state:running}
@keyframes places-more-clockwise{to{transform:rotate(360deg)}}
.places-detail-link:focus-visible{outline:1px solid #737c64;outline-offset:5px}
@media(max-width:700px){.places-caption-with-more{flex-wrap:wrap;gap:12px}.places-detail-link{margin-left:auto;font-size:12px}.places-detail-link svg{width:58px;height:26px}}
@media(prefers-reduced-motion:reduce){.places-detail-line{transition:none}.places-detail-hexagon{animation:none}}
.places-nodes{display:flex;flex-direction:row-reverse;align-self:stretch;z-index:2}
.places-node{position:relative;isolation:isolate;width:50%;border:0;border-left:1px solid #eee5d788;border-radius:0;margin:0;padding:0;overflow:hidden;background:#a09e8f;color:#fffaf0;cursor:pointer;display:flex;align-items:center;flex-direction:column;justify-content:center;gap:28px}
.places-node img{position:absolute;left:0;right:0;top:-15%;bottom:auto;display:block;width:100%;height:130%;max-width:none;max-height:none;object-fit:cover;object-position:center 55%;z-index:-2;filter:brightness(.67) saturate(.6);transition:filter .4s,transform .8s}
.places-node:after{content:"";position:absolute;inset:0;z-index:-1;background:#22251918}
.places-node span{font:11px/1.5 Georgia,serif;writing-mode:vertical-rl;letter-spacing:.06em;height:130px}
.places-node strong{writing-mode:vertical-rl;font-size:clamp(20px,1.8vw,30px);font-weight:400;letter-spacing:.25em}

.places-node[aria-pressed=true] img{filter:brightness(.85) saturate(.85);transform:scale(1.04)}
.places-controls{position:absolute;bottom:8%;left:9%;right:24%;display:flex;align-items:center;gap:12px}
.places-count{margin:0 0 0 clamp(24px,3vw,50px);font:17px Georgia,serif;letter-spacing:.1em}
.places-count span{font-size:12px;color:#929683;margin-left:10px}
.places-direction{margin-left:auto;margin-right:16px;color:#929683;font:14px Georgia,serif}
.places-controls button{display:grid;place-items:center;width:38px;height:38px;border:1px solid #9ca08f80;border-radius:50%;background:transparent;color:#686f5c;font:21px Georgia,serif;cursor:pointer}
.places-controls button:disabled{opacity:.3;cursor:default}
.places-gallery :focus-visible{outline:2px solid #8a916f;outline-offset:-5px}
@media(max-width:700px){
 .places-gallery{min-height:650px;grid-template-columns:minmax(0,1fr) 100px}
 .places-heading{left:7%;top:8%;gap:12px}.places-heading>span{width:28px}.places-heading p{font-size:11px}.places-heading p span{display:block;font-size:10px;margin:6px 0 0}
 .places-viewport:before,.places-viewport:after{display:none}
 .places-slide{display:flex;flex-basis:100%;flex-direction:column;gap:25px;padding:110px 6vw 125px;justify-content:center;align-items:flex-start}
 .places-label{align-self:flex-start;gap:12px}.places-label h2{font-size:26px}.places-label p{font-size:8px}
 .places-slide figure{width:100%;flex-shrink:0}.places-slide figcaption{font-size:10px;letter-spacing:.03em;margin-top:15px}
 .places-node{gap:20px}.places-node span{font-size:9px;height:110px}.places-node strong{font-size:18px}
 .places-controls{left:6%;right:calc(100px + 6%);bottom:6%;gap:8px}.places-direction{display:none}.places-count{font-size:13px;margin-right:auto}.places-count span{font-size:10px;margin-left:3px}.places-controls button{width:30px;height:30px;font-size:18px}
}
@media(prefers-reduced-motion:reduce){.places-viewport{scroll-behavior:auto}.places-node img{transition:none}}
/* Brand Spirit and Our Spaces share one continuous horizontal strip. */
.brand-spaces-journey{--garden-paper:#e5dbcf;position:relative;isolation:isolate}
.brand-spaces-journey>.garden-landscape-tail{z-index:2;height:24svh}
.brand-spaces-track{display:flex;width:100%;height:max(100svh,680px);overflow-x:auto;overflow-y:hidden;scroll-snap-type:none;scroll-behavior:smooth;scrollbar-width:none}
.brand-spaces-track::-webkit-scrollbar{display:none}
.brand-spaces-track>.aerial-arrival,.brand-spaces-track>.places-gallery{flex:0 0 100%;width:100%;height:100%;min-width:0;min-height:0;box-sizing:border-box;scroll-snap-align:none}
.scroll-prelude[data-palette=gold]~.brand-spaces-journey{--garden-paper:#e5dbcf}
.brand-spaces-track:focus-visible{outline:1px solid #8a916f;outline-offset:-4px}
@media(max-width:700px){.brand-spaces-track{height:max(100svh,820px)}}
@media(prefers-reduced-motion:reduce){.brand-spaces-track{scroll-behavior:auto}}
/* One compositor-driven movement replaces the two nested native scrollers. */
.brand-spaces-track{overflow:clip;touch-action:pan-y;scroll-behavior:auto}
.brand-spaces-content{display:flex;flex:0 0 100%;width:100%;height:100%;will-change:transform}
.brand-spaces-content>.aerial-arrival,.brand-spaces-content>.places-gallery{flex:0 0 100%;width:100%;height:100%;min-width:0;min-height:0;box-sizing:border-box}
.places-viewport{display:block;overflow:clip;scroll-behavior:auto}
.places-viewport:before,.places-viewport:after{display:none}
.places-content{display:flex;width:100%;height:100%;will-change:transform}
.places-content:before,.places-content:after{content:"";flex:0 0 17.5%;pointer-events:none}
.places-count{margin-left:clamp(65px,8vw,150px)}
@media(max-width:700px){.places-content:before,.places-content:after{display:none}.places-count{margin-left:30px}}

/* Single photograph with side margins and an overlapping vertical text card. */
.places-content:before,.places-content:after{display:none}
.places-slide{position:relative;isolation:isolate;flex-basis:84%;display:block;padding:0;overflow:hidden}
.places-slide:before{display:none}
.places-slide figure{position:absolute;inset:0;width:100%;height:100%;margin:0}
.places-slide figure img{width:100%;height:100%;aspect-ratio:auto;object-fit:cover;object-position:center}
.places-label{position:absolute;right:5%;top:8%;z-index:2;width:clamp(200px,19vw,280px);height:clamp(330px,56svh,520px);padding:30px 24px;box-sizing:border-box;gap:18px;background:#faf8f1;justify-content:center;align-items:flex-start}
.places-label h2{font-size:clamp(32px,2.7vw,44px);line-height:1.35;letter-spacing:.17em}
.places-label p[lang]{font-size:10px;margin-top:4px;letter-spacing:.1em}
.places-label .places-description{font:400 clamp(15px,1.2vw,18px)/1.9 WuhuVertical,"Noto Serif TC",serif;letter-spacing:.12em;color:#626858;margin:4px 0 0;writing-mode:vertical-rl;text-orientation:mixed}
.places-slide figcaption{position:absolute;left:4%;bottom:5%;margin:0}.places-slide .places-detail-link{color:#fffaf0;text-shadow:0 1px 5px #0008}.places-slide .places-detail-link svg{stroke:currentColor;filter:drop-shadow(0 1px 3px #0006)}.places-slide .places-detail-link:focus-visible{outline-color:#fffaf0}
@media(max-width:1000px) and (min-width:701px){.places-label{width:210px;padding:25px 18px;gap:12px}.places-label h2{font-size:32px}.places-label .places-description{font-size:15px}}
@media(max-width:700px){.places-slide{flex-basis:92%;padding:0}.places-slide figure{inset:0;width:100%;height:100%}.places-label{right:5%;top:44%;width:min(86%,260px);height:290px;min-height:0;padding:23px 18px;gap:12px}.places-label h2{font-size:28px}.places-label p[lang]{font-size:8px}.places-label .places-description{font-size:14px;line-height:1.8}.places-slide figcaption{bottom:5%;left:4%}}
/* Adjoining photo panels stay connected throughout the chapter. */
.places-content{gap:0}

/* The paper end slowly rolls back as the final photograph comes into view. */
.places-end-roll{position:absolute;left:0;top:0;bottom:0;width:clamp(95px,9.5vw,170px);z-index:3;pointer-events:none;opacity:var(--end-roll,0);transform:translateX(calc((var(--end-roll,0) - 1)*72% - 12%));transform-origin:left center}
.places-end-roll{will-change:transform,opacity;contain:layout paint}
.places-end-roll svg{display:block;width:100%;height:100%;overflow:visible}
.places-end-roll__shadow{filter:blur(13px);opacity:.19}
@media(max-width:700px){.places-end-roll{width:42px}.places-end-roll__shadow{opacity:.12}}
/* A moving cylindrical paper edge reveals each photograph from right to left. */
.places-unroll-roller{position:absolute;inset:0 auto 0 0;width:clamp(95px,9.5vw,170px);z-index:4;pointer-events:none;visibility:hidden;contain:layout paint;will-change:transform}
@media(prefers-reduced-motion:reduce){.places-unroll-roller{display:none}}

.places-unroll-roller svg{display:block;width:100%;height:100%;overflow:visible}
.places-is-unrolling>.places-end-roll{visibility:hidden}
@media(max-width:700px){.places-unroll-roller{width:42px}}

.places-viewport{position:relative}
/* Oversized English lettering serves as a quiet decorative watermark. */
.places-english-decoration{position:absolute;left:-.08em;bottom:-.04em;z-index:1;margin:0;color:#fffaf0;opacity:.2;font:300 clamp(36px,4.4vw,70px)/.95 "Bodoni MT",Didot,"Times New Roman",serif;letter-spacing:-.04em;writing-mode:vertical-rl;transform:rotate(180deg);white-space:nowrap;pointer-events:none;user-select:none}
@media(max-width:700px){.places-english-decoration{font-size:clamp(30px,7vw,48px);opacity:.18}}
/* Soft-focus photographs clear on hover, with the same hexagonal link as CONTACT. */
.places-slide figure{overflow:hidden}
.places-slide figure img{filter:blur(0);transform:scale(1.025);transition:filter 1.1s ease}
.places-slide:is(:hover,:focus-within) figure img{filter:blur(5px)}
.places-space-button{--space-hex:170px;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;isolation:isolate;display:flex;align-items:center;width:285px;height:calc(var(--space-hex)*.866025);color:#fff;text-decoration:none;font:400 20px/1.4 Georgia,"Times New Roman",serif;letter-spacing:.2em;text-shadow:0 1px 6px #24392f88}
.places-space-button:before{content:"";position:absolute;left:0;top:0;width:var(--space-hex);height:100%;z-index:-1;clip-path:polygon(25% 0,75% 0,100% 50%,75% 100%,25% 100%,0 50%);background:#ffffff59;pointer-events:none}
.places-space-button__content{position:relative;display:flex;align-items:center;width:200px;flex:none;margin-left:calc(var(--space-hex)*.5);padding-bottom:16px;transform:translateY(12px)}
.places-space-button__content:after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:#fff;transform-origin:left}
.places-space-button:is(:hover,:focus-visible) .places-space-button__content:after{animation:places-space-line .9s cubic-bezier(.22,.65,.2,1) both}
.places-space-button__halo{position:absolute;left:0;top:0;width:var(--space-hex);height:100%;z-index:-1;pointer-events:none;opacity:0;transform:scale(.05);transform-origin:center;transition:opacity .65s ease,transform 1.1s cubic-bezier(.22,.65,.2,1)}
.places-space-button:is(:hover,:focus-visible) .places-space-button__halo{opacity:1;transform:scale(1.18)}
@keyframes places-space-line{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@media(max-width:700px){.places-space-button{--space-hex:140px;width:250px;font-size:18px}.places-space-button__content{width:180px;padding-bottom:14px}}
@media(hover:none){.places-slide figure img{filter:none}}
@media(prefers-reduced-motion:reduce){.places-slide figure img,.places-space-button__halo{transition:none}.places-space-button__content:after{animation:none!important}}
/* Vertical copy rests directly over the right side of the photograph. */
.places-vertical-copy{position:absolute;right:5%;top:12%;z-index:2;display:flex;flex-direction:row-reverse;align-items:flex-start;gap:22px;color:#fffaf0;text-shadow:0 1px 7px #30281dcc;pointer-events:none}
.places-vertical-copy h2,.places-vertical-copy p{margin:0;writing-mode:vertical-rl;text-orientation:mixed;font-family:WuhuVertical,"Noto Serif TC",serif;font-weight:400}
.places-vertical-copy h2{font-size:clamp(28px,2.6vw,40px);line-height:1.4;letter-spacing:.2em}
.places-vertical-copy p{font-size:clamp(15px,1.2vw,18px);line-height:1.8;letter-spacing:.12em;padding-top:4px}
@media(max-width:700px){.places-vertical-copy{right:6%;top:9%;gap:12px}.places-vertical-copy h2{font-size:27px}.places-vertical-copy p{font-size:14px}}
/* Leave room for the final paper curl so it cannot cover the Hall lettering. */
.places-slide[aria-label="復活堂"] .places-english-decoration{left:calc(clamp(95px,9.5vw,170px)*.68);bottom:0;opacity:.3;text-shadow:0 1px 3px #33281b33}
@media(max-width:700px){.places-slide[aria-label="復活堂"] .places-english-decoration{left:28px}}
/* A soft shade behind the vertical copy keeps white lettering readable. */
.places-vertical-copy{isolation:isolate}
.places-vertical-copy:before{content:"";position:absolute;inset:-55px -70px -65px -65px;z-index:-1;pointer-events:none;background:radial-gradient(ellipse at 65% 35%,#211d17a6 0%,#211d1770 38%,#211d1730 62%,transparent 78%);filter:blur(12px)}
@media(max-width:700px){.places-vertical-copy:before{inset:-40px -45px -50px -40px;filter:blur(9px)}}
/* Reference composition: left copy, central translucent polygon, right link. */
.places-slide:after{content:"";position:absolute;left:50%;top:54%;width:clamp(220px,25vw,320px);aspect-ratio:1/.866025;transform:translate(-50%,-50%);z-index:1;clip-path:polygon(25% 0,75% 0,100% 50%,75% 100%,25% 100%,0 50%);background:#ffffff40;pointer-events:none}
.places-vertical-copy{left:31.5%;right:auto;top:54%;transform:translateY(-50%);max-width:36%;flex-direction:column;gap:0}
.places-vertical-copy h2,.places-vertical-copy p{writing-mode:horizontal-tb;padding:0}
.places-vertical-copy h2{font-size:clamp(26px,2.7vw,36px);line-height:1.4;letter-spacing:.16em}
.places-vertical-copy p{font-size:clamp(15px,1.6vw,20px);line-height:1.8;letter-spacing:.1em}
.places-vertical-copy:before{inset:-70px -90px;filter:blur(24px);background:radial-gradient(ellipse,#211d1780,transparent 75%)}
.places-space-button{left:58%;top:54%;transform:translateY(-50%);width:clamp(185px,21vw,250px);height:44px;font-size:17px;letter-spacing:.08em}
.places-space-button:before,.places-space-button__halo{display:none}
.places-space-button__content{width:100%;margin:0;padding:0;transform:none;gap:14px}
.places-space-button__content:after{position:static;order:-1;width:auto;flex:1 1 auto;height:1px}
@media(max-width:700px){.places-slide:after{width:260px}.places-vertical-copy{left:8%;top:42%;max-width:80%;gap:16px}.places-vertical-copy h2{font-size:30px}.places-vertical-copy p{font-size:16px}.places-space-button{left:auto;right:8%;top:64%;transform:translateY(-50%);width:132px;font-size:15px}.places-space-button__content{width:100%;padding:0}.places-space-button__content:after{width:60px;flex-basis:60px}}
/* The inner hexagon grows from the center while the existing outer layer stays still. */
.places-hex-interaction{position:absolute;left:50%;top:54%;width:clamp(220px,25vw,320px);aspect-ratio:1/.866025;transform:translate(-50%,-50%);z-index:1;clip-path:polygon(25% 0,75% 0,100% 50%,75% 100%,25% 100%,0 50%)}
.places-hex-interaction:before{content:"";position:absolute;inset:0;clip-path:inherit;background:#ffffff38;opacity:0;transform:scale(.02);transform-origin:center;transition:transform 1.1s cubic-bezier(.22,.65,.2,1),opacity .6s ease}
.places-hex-interaction:hover:before,.places-slide:has(.places-space-button:focus-visible) .places-hex-interaction:before{opacity:1;transform:scale(.94)}
@media(max-width:700px){.places-hex-interaction{width:260px}}
@media(prefers-reduced-motion:reduce){.places-hex-interaction:before{transition:none}}
/* Redraw the MORE line together with the inner hexagon on either photo. */
.places-slide:has(.places-hex-interaction:hover) .places-space-button__content:after{animation:places-space-line 1.1s cubic-bezier(.22,.65,.2,1) both}
.places-slide:has(.places-space-button:hover) .places-hex-interaction:before{opacity:1;transform:scale(.94)}
@media(prefers-reduced-motion:reduce){.places-slide:has(.places-hex-interaction:hover) .places-space-button__content:after{animation:none}}

/* Space selectors have no decorative marker above the active item. */
.places-nodes .places-node::before{content:none;display:none}

/* Hover remains visible even on the currently selected space. */
.places-node:is(:hover,:focus-visible) img{filter:brightness(1) saturate(1);transform:scale(1.08)}
.places-node span,.places-node strong{transition:transform .6s ease,text-shadow .6s ease}
.places-node:is(:hover,:focus-visible) span,.places-node:is(:hover,:focus-visible) strong{transform:translateY(-4px);text-shadow:0 2px 9px #1b241b99}
@media(prefers-reduced-motion:reduce){.places-node span,.places-node strong{transition:none}.places-node:is(:hover,:focus-visible) span,.places-node:is(:hover,:focus-visible) strong{transform:none}}

/* Shift the Pagoda heading and description slightly toward the center. */
.places-slide[aria-label="慈恩塔"] .places-vertical-copy,.places-slide[aria-label="復活堂"] .places-vertical-copy{left:36%}
@media(max-width:700px){.places-slide[aria-label="慈恩塔"] .places-vertical-copy,.places-slide[aria-label="復活堂"] .places-vertical-copy{left:12%}}

.places-slide[aria-label="慈恩塔"] .places-vertical-copy p,.places-slide[aria-label="復活堂"] .places-vertical-copy p{letter-spacing:.2em}

/* A single stacked photo surface crossfades without changing the scroll geometry. */
.places-slide .places-photo-carousel img{position:absolute;inset:0;opacity:0;transition:opacity 2.2s ease-in-out,filter 1.1s ease}
.places-slide .places-photo-carousel img.is-current{opacity:1}
@media(hover:none){.places-slide:is(:hover,:focus-within) figure img{filter:none}}
@media(prefers-reduced-motion:reduce){.places-slide .places-photo-carousel img{transition:none}}

/* Keep the photograph clear of the former dark text backdrop. */
.places-vertical-copy:before{display:none}
/* Repeat the same inner-hexagon and line rhythm used by CONTACT. */
.places-hex-interaction:before{animation:places-hex-loop 4.5s cubic-bezier(.22,.65,.2,1) infinite}
.places-space-button__content:after{animation:places-line-loop 4.5s cubic-bezier(.22,.65,.2,1) infinite}
.places-hex-interaction:after{content:"";position:absolute;inset:0;clip-path:inherit;background:#ffffff66;opacity:0;transform:scale(.02);transition:transform .9s cubic-bezier(.22,.65,.2,1),opacity .45s ease}
.places-hex-interaction:hover:after,.places-slide:has(.places-space-button:is(:hover,:focus-visible)) .places-hex-interaction:after{opacity:1;transform:scale(.94)}
@keyframes places-hex-loop{0%{opacity:0;transform:scale(.02)}12%{opacity:.8}48%,72%{opacity:1;transform:scale(.94)}94%,100%{opacity:0;transform:scale(.94)}}
@keyframes places-line-loop{0%{transform:scaleX(0)}40%,100%{transform:scaleX(1)}}
.places-slide.ambient-paused .places-hex-interaction:before,.places-slide.ambient-paused .places-space-button__content:after{animation-play-state:paused!important}
@media(prefers-reduced-motion:reduce){.places-hex-interaction:before,.places-space-button__content:after{animation:none}.places-hex-interaction:after{transition:none}}
