@charset "utf-8";
/* ==========================================================================
   MoA — Memories of Art  /  "A Night at the Ballet"
   ========================================================================== */

:root {
  --ink: #0b0708;
  --ink-2: #130b0d;
  --ivory: #f5eee2;
  --ivory-dim: rgba(245, 238, 226, .7);
  --ivory-faint: rgba(245, 238, 226, .14);
  --gold: #d8b46e;
  --gold-hi: #f4e0ae;
  --gold-lo: #9b7336;
  --gold-line: rgba(216, 180, 110, .36);
  --rose: #ff8fab;
  --rose-hi: #ffd3de;

  --serif: "Shippori Mincho", "Hiragino Mincho ProN", "Yu Mincho", "YuMincho", serif;
  --en: "Cormorant Garamond", "Times New Roman", serif;
  --caps: "Cinzel", "Cormorant Garamond", serif;
  --script: "Pinyon Script", "Cormorant Garamond", cursive;

  --gutter: clamp(20px, 5vw, 76px);
  --ease: cubic-bezier(.16, 1, .3, 1);
  --ease-io: cubic-bezier(.76, 0, .24, 1);
  --fold: clamp(54px, 7vw, 118px);

  --velvet-fold: linear-gradient(90deg,
      #1c0206 0%, #3a0510 9%, #690b1b 22%, #9a1427 36%, #bf233a 46%,
      #d83d52 50%, #b61f36 55%, #86101f 67%, #52080f 81%, #2a0309 93%, #1c0206 100%);
}

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
html.lenis, html.lenis body { height: auto; }
.lenis.lenis-smooth { scroll-behavior: auto !important; }
.lenis.lenis-stopped { overflow: hidden; }
html.is-locked, html.is-locked body { overflow: hidden; }

body {
  margin: 0;
  background: var(--ink);
  color: var(--ivory);
  font-family: var(--serif);
  font-size: clamp(15px, 1.02vw, 17px);
  line-height: 2.1;
  letter-spacing: .06em;
  -webkit-font-smoothing: antialiased;
  overflow-x: clip;
}
img { display: block; max-width: 100%; height: auto; }
a { color: inherit; }
button { font: inherit; color: inherit; }
h1, h2, h3, h4, p, figure, dl, dd, ul { margin: 0; }
ul { padding: 0; list-style: none; }
::selection { background: var(--gold); color: var(--ink); }
:focus-visible { outline: 1px solid var(--gold); outline-offset: 4px; }

.skip { position: fixed; left: 12px; top: -80px; z-index: 300; background: var(--gold); color: var(--ink); padding: 10px 18px; text-decoration: none; }
.skip:focus { top: 12px; }
.pc { display: inline; }
.sp { display: none; }
@media (max-width: 767px) { .pc { display: none; } .sp { display: inline; } }

/* film grain — the air of a dim theatre */
.grain {
  position: fixed; inset: -8%; z-index: 150; pointer-events: none; opacity: .06; will-change: transform;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  animation: grain 1.2s steps(6) infinite;
}
@keyframes grain {
  0% { transform: translate(0, 0); } 20% { transform: translate(-5.17%, 3.45%); } 40% { transform: translate(3.45%, -5.17%); }
  60% { transform: translate(-3.45%, -1.72%); } 80% { transform: translate(5.17%, 5.17%); } 100% { transform: translate(0, 0); }
}

#fx { position: fixed; inset: 0; width: 100%; height: 100%; z-index: 70; pointer-events: none; mix-blend-mode: screen; }

/* ---------- typographic helpers ---------- */
.label {
  display: inline-flex; align-items: center; gap: 14px;
  font-family: var(--caps); font-size: 11px; letter-spacing: .34em; text-transform: uppercase;
  color: var(--gold); line-height: 1.6;
}
.label::before { content: ""; width: 34px; height: 1px; background: currentColor; flex: none; }
.label small { font-family: var(--serif); font-size: 12px; letter-spacing: .18em; text-transform: none; color: var(--ivory-dim); }
.label--center::after { content: ""; width: 34px; height: 1px; background: currentColor; flex: none; }

.script { font-family: var(--script); font-weight: 400; letter-spacing: 0; line-height: 1.15; }

.gold-grad {
  background: linear-gradient(100deg, #a47a3a 0%, #f4e0ae 24%, #d8b46e 40%, #fff7de 52%, #c99d55 64%, #f4e0ae 82%, #a47a3a 100%);
  background-size: 240% 100%;
  -webkit-background-clip: text; background-clip: text; color: transparent;
  animation: goldflow 9s linear infinite;
}
@keyframes goldflow { from { background-position: 120% 0; } to { background-position: -120% 0; } }

.copy p + p { margin-top: 1.4em; }
.copy p { color: var(--ivory-dim); }

.heading {
  font-weight: 500; font-size: clamp(1.7rem, 3.5vw, 3.1rem); line-height: 1.62; letter-spacing: .1em;
}
.heading--sm { font-size: clamp(1.35rem, 2.3vw, 2rem); }

/* split characters */
.ch { display: inline-block; white-space: pre; }
.w { display: inline-block; white-space: nowrap; }

.flourish { display: block; width: min(260px, 64%); height: 20px; margin: 0 auto; color: var(--gold); }

/* ---------- reveal system (only when JS runs) ---------- */
html.js [data-reveal] {
  opacity: 0; transform: translate3d(0, 44px, 0);
  transition: opacity 1.2s var(--ease), transform 1.4s var(--ease);
  transition-delay: var(--d, 0s);
}
html.js [data-reveal].is-in { opacity: 1; transform: none; }

html.js [data-split] .ch {
  opacity: 0; transform: translate3d(0, .55em, 0) rotate(5deg); filter: blur(10px);
  transition: opacity 1s var(--ease), transform 1.3s var(--ease), filter 1s var(--ease);
  transition-delay: calc(var(--i) * 42ms + var(--d, 0s));
}
html.js [data-split].is-in .ch { opacity: 1; transform: none; filter: blur(0); }

html.js [data-spot] .spot-inner {
  clip-path: circle(0% at var(--cx, 50%) var(--cy, 45%));
  transition: clip-path 2.2s var(--ease);
}
html.js [data-spot] .spot-inner img { transform: scale(1.25); transition: transform 2.8s var(--ease); }
html.js [data-spot].is-in .spot-inner { clip-path: circle(85% at var(--cx, 50%) var(--cy, 45%)); }
html.js [data-spot].is-in .spot-inner img { transform: scale(1.02); }
.spot-inner { height: 100%; }
.plx { position: absolute; left: 0; right: 0; top: -9%; bottom: -9%; }
.plx img { width: 100%; height: 100%; object-fit: cover; }
[data-magnetic] { transition: transform .6s var(--ease), border-color .5s, background-color .5s, color .5s !important; }
html.js .hero__title[data-split] .ch { transition-duration: 1.4s, 1.8s, 1.4s; transition-delay: calc(var(--i) * 95ms + .1s); transform: translate3d(0, .4em, 0) scale(1.08); filter: blur(16px); }
html.js .hero__title[data-split].is-in .ch { transform: none; filter: blur(0); }

/* ==========================================================================
   Curtain (intro + page transitions)
   ========================================================================== */
.curtain { display: none; }
html.js .curtain { display: block; position: fixed; inset: 0; z-index: 200; overflow: hidden; }
.curtain.is-gone { visibility: hidden; pointer-events: none; }
.curtain__panel {
  position: absolute; top: 0; bottom: 0; width: 50.5%; overflow: hidden;
  will-change: transform, clip-path;
}
.curtain__panel--l { left: 0; }
.curtain__panel--r { right: 0; }
.curtain__fabric {
  position: absolute; top: 0; bottom: 0; left: -40%; right: -40%;
  background:
    linear-gradient(180deg, rgba(0, 0, 0, .7) 0%, rgba(0, 0, 0, 0) 26%, rgba(0, 0, 0, 0) 72%, rgba(0, 0, 0, .55) 100%),
    linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, rgba(255, 220, 220, .05) 50%, rgba(255, 255, 255, 0) 100%) 0 0 / 37% 100%,
    var(--velvet-fold) 0 0 / var(--fold) 100%;
  will-change: transform;
}
.curtain__panel--l .curtain__fabric { transform-origin: 22.2% 0; }
.curtain__panel--r .curtain__fabric { transform-origin: 77.8% 0; background-position: 0 0, 18% 0, calc(var(--fold) * .5) 0; }
.curtain__fabric::after {
  content: ""; position: absolute; inset: 0; opacity: .35; mix-blend-mode: multiply;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='v'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.6 .02' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23v)'/%3E%3C/svg%3E");
}
/* shading toward the inner edge so the lifted hem reads as heavy velvet */
.curtain__panel::after { content: ""; position: absolute; inset: 0; pointer-events: none; }
.curtain__panel--l::after { background: linear-gradient(90deg, rgba(0, 0, 0, 0) 55%, rgba(0, 0, 0, .45)); }
.curtain__panel--r::after { background: linear-gradient(270deg, rgba(0, 0, 0, 0) 55%, rgba(0, 0, 0, .45)); }
.curtain__hem { position: absolute; z-index: 1; left: 0; right: 0; bottom: 0; height: 12px; background: repeating-linear-gradient(90deg, #6d4b1c 0 3px, #d6b36c 3px 6px, #8f6a2c 6px 9px); opacity: .9; }
.curtain__valance {
  position: absolute; left: -2%; right: -2%; top: 0; height: clamp(70px, 13vh, 140px); z-index: 3;
  background:
    linear-gradient(180deg, rgba(0, 0, 0, .6), rgba(0, 0, 0, 0) 60%, rgba(0, 0, 0, .35)),
    var(--velvet-fold) 0 0 / calc(var(--fold) * .55) 100%;
  box-shadow: 0 18px 40px rgba(0, 0, 0, .6);
  will-change: transform;
}
.curtain__valance::before {
  content: ""; position: absolute; left: 0; right: 0; bottom: 18px; height: 3px;
  background: linear-gradient(90deg, #8f6a2c, #f4e0ae, #b88e45, #f4e0ae, #8f6a2c);
}
.curtain__valance::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -2px; height: 20px;
  background: repeating-linear-gradient(90deg, rgba(232, 200, 130, .95) 0 1px, rgba(0, 0, 0, 0) 1px 4px);
  -webkit-mask-image: linear-gradient(180deg, #000 30%, transparent);
  mask-image: linear-gradient(180deg, #000 30%, transparent);
}
.curtain__dark { position: absolute; inset: 0; z-index: 4; background: #050203; opacity: .82; pointer-events: none; }
.curtain__glow {
  position: absolute; inset: 0; z-index: 4; pointer-events: none; mix-blend-mode: screen; opacity: 0;
  background: radial-gradient(90% 50% at 50% 108%, rgba(255, 196, 120, .55), rgba(255, 150, 80, .16) 45%, transparent 72%);
}
.curtain__title {
  position: absolute; inset: 0; z-index: 5; display: grid; place-content: center; text-align: center; gap: 14px;
  pointer-events: none; opacity: 0;
}
.curtain__presents { font-family: var(--caps); font-size: clamp(10px, 1.1vw, 13px); letter-spacing: .6em; color: var(--gold-hi); padding-left: .6em; }
.curtain__name { font-family: var(--script); font-size: clamp(3.4rem, 10vw, 7.5rem); line-height: 1.1; padding: 0 .2em; }
.curtain__line { width: min(260px, 50vw); height: 1px; margin: 4px auto 0; background: var(--gold); transform: scaleX(0); }
.curtain__skip { position: absolute; z-index: 6; right: var(--gutter); bottom: 26px; font-family: var(--caps); font-size: 10px; letter-spacing: .3em; color: var(--ivory-dim); background: none; border: 0; cursor: pointer; padding: 8px 0; opacity: 0; }

/* ==========================================================================
   Header / navigation
   ========================================================================== */
.hdr {
  position: fixed; inset: 0 0 auto; z-index: 80;
  display: flex; align-items: center; justify-content: space-between; gap: 20px;
  padding: 16px var(--gutter);
  transition: transform .7s var(--ease);
}
.hdr::before {
  content: ""; position: absolute; inset: 0 0 -30px; z-index: -1; pointer-events: none; opacity: 0; transition: opacity .5s;
  background: linear-gradient(180deg, rgba(11, 7, 8, .92), rgba(11, 7, 8, .55) 60%, rgba(11, 7, 8, 0));
}
.hdr.is-scrolled::before { opacity: 1; }
.hdr.is-hidden { transform: translate3d(0, -110%, 0); }

.brand { display: inline-flex; align-items: center; gap: 14px; text-decoration: none; }
.brand__mark { font-family: var(--en); font-size: 32px; font-weight: 500; font-style: italic; letter-spacing: .02em; line-height: 1; }
.brand__mark span { color: var(--gold); }
.brand__sub { font-family: var(--caps); font-size: 8.5px; letter-spacing: .34em; line-height: 1.7; color: var(--ivory-dim); border-left: 1px solid var(--gold-line); padding-left: 14px; }

.nav { display: flex; align-items: center; gap: clamp(22px, 2.6vw, 40px); }
.nav a {
  position: relative; padding: 6px 0; text-decoration: none;
  font-family: var(--caps); font-size: 11px; letter-spacing: .24em; text-transform: uppercase;
}
.nav a:not(.ticket)::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 1px; background: var(--gold);
  transform: scaleX(0); transform-origin: 100% 50%; transition: transform .6s var(--ease);
}
.nav a:not(.ticket):hover::after, .nav a[aria-current="page"]::after { transform: scaleX(1); transform-origin: 0 50%; }

.ticket {
  display: inline-flex; align-items: center; gap: 12px;
  padding: 11px 24px 10px !important; background: var(--gold); color: var(--ink) !important;
  -webkit-mask: radial-gradient(circle 6px at 0 50%, transparent 97%, #000) 0 0 / 51% 100% no-repeat,
                radial-gradient(circle 6px at 100% 50%, transparent 97%, #000) 100% 0 / 51% 100% no-repeat;
  mask: radial-gradient(circle 6px at 0 50%, transparent 97%, #000) 0 0 / 51% 100% no-repeat,
        radial-gradient(circle 6px at 100% 50%, transparent 97%, #000) 100% 0 / 51% 100% no-repeat;
  transition: background-color .4s;
}
.ticket:hover { background: var(--gold-hi); }
.ticket i { width: 1px; height: 14px; border-left: 1px dashed rgba(11, 7, 8, .5); }

.prog-btn {
  display: none; align-items: center; gap: 12px; background: none; border: 0; cursor: pointer; padding: 8px 0; -webkit-tap-highlight-color: transparent;
  font-family: var(--caps); font-size: 11px; letter-spacing: .28em; text-transform: uppercase;
}
.prog-btn__icon { position: relative; width: 26px; height: 10px; }
.prog-btn__icon::before, .prog-btn__icon::after {
  content: ""; position: absolute; right: 0; height: 1px; background: var(--gold); transition: transform .5s var(--ease), width .5s var(--ease);
}
.prog-btn__icon::before { top: 0; width: 100%; }
.prog-btn__icon::after { bottom: 0; width: 62%; }
.is-menu .prog-btn__icon::before { width: 18px; right: 4px; transform: translateY(4.5px) rotate(45deg); }
.is-menu .prog-btn__icon::after { width: 18px; right: 4px; transform: translateY(-4.5px) rotate(-45deg); }
@media (max-width: 1023px) { .nav { display: none; } .prog-btn { display: inline-flex; } }

/* Programme (menu overlay) */
.programme { position: fixed; inset: 0; z-index: 78; visibility: hidden; pointer-events: none; transition: visibility 0s 1s; }
.programme.is-open { visibility: visible; pointer-events: auto; transition: none; }
.programme__bg {
  position: absolute; inset: 0; transform: translate3d(0, -101%, 0); transition: transform .9s var(--ease-io);
  background:
    radial-gradient(70% 50% at 50% 100%, rgba(255, 170, 100, .22), transparent 70%),
    linear-gradient(180deg, rgba(0, 0, 0, .75), rgba(0, 0, 0, .35) 40%, rgba(0, 0, 0, .8)),
    var(--velvet-fold) 0 0 / var(--fold) 100%;
}
.programme.is-open .programme__bg { transform: none; }
.programme__card {
  position: absolute; inset: clamp(76px, 12vh, 110px) var(--gutter) clamp(24px, 5vh, 50px);
  display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center;
  border: 1px solid var(--gold-line); outline: 1px solid var(--gold-line); outline-offset: -8px;
  background: rgba(11, 7, 8, .74);
  opacity: 0; transform: translateY(-20px); transition: opacity .5s, transform .9s var(--ease);
  overflow-y: auto; padding: 24px 12px;
}
.programme.is-open .programme__card { opacity: 1; transform: none; transition-delay: .35s; }
.programme__title { font-family: var(--script); font-size: clamp(3rem, 12vw, 5rem); line-height: 1.1; }
.programme__sub { font-family: var(--caps); font-size: 10px; letter-spacing: .4em; color: var(--gold); margin-bottom: clamp(18px, 4vh, 40px); }
.programme__list { display: grid; gap: clamp(8px, 1.8vh, 18px); }
.programme__list a {
  display: grid; grid-template-columns: 3.4em auto; align-items: baseline; text-align: left; text-decoration: none;
  opacity: 0; transform: translateY(18px); transition: opacity .6s, transform .8s var(--ease);
}
.programme.is-open .programme__list a { opacity: 1; transform: none; transition-delay: calc(.5s + var(--i) * .07s); }
.programme__list b { font-family: var(--en); font-style: italic; font-weight: 400; font-size: 16px; color: var(--gold); }
.programme__list span { font-family: var(--en); font-size: clamp(1.7rem, 7vw, 2.4rem); line-height: 1.2; letter-spacing: .02em; }
.programme__list small { display: block; font-family: var(--serif); font-size: 11px; letter-spacing: .2em; color: var(--ivory-dim); line-height: 1.7; }
.programme__foot { margin-top: clamp(20px, 4vh, 40px); font-family: var(--caps); font-size: 10px; letter-spacing: .3em; color: var(--ivory-dim); display: flex; gap: 22px; }
.programme__foot a { text-decoration: none; }

/* Act rail (desktop) */
.rail {
  position: fixed; right: clamp(16px, 2vw, 30px); top: 50%; z-index: 65; transform: translateY(-50%);
  display: grid; gap: 14px; opacity: 0; transition: opacity .8s; pointer-events: none;
}
.rail.is-on { opacity: 1; pointer-events: auto; }
.rail a {
  display: flex; align-items: center; justify-content: flex-end; gap: 12px; text-decoration: none;
  font-family: var(--caps); font-size: 9px; letter-spacing: .26em; color: var(--ivory-dim); line-height: 1.4;
}
.rail a span { opacity: 0; transform: translateX(8px); transition: opacity .5s, transform .5s var(--ease); }
.rail a::after {
  content: ""; width: 7px; height: 7px; transform: rotate(45deg); border: 1px solid var(--gold-line); transition: background-color .5s, border-color .5s, box-shadow .5s;
}
.rail a.is-current span, .rail:hover a span { opacity: 1; transform: none; }
.rail a.is-current::after { background: var(--gold); border-color: var(--gold); box-shadow: 0 0 12px var(--gold); }
@media (max-width: 1023px) { .rail { display: none; } }

/* ==========================================================================
   Hero — Overture
   ========================================================================== */
.hero {
  position: relative; isolation: isolate; overflow: hidden;
  height: 100vh; height: 100svh; min-height: 600px;
  display: grid; place-items: center; text-align: center;
}
.hero--sub { height: 92vh; height: 92svh; min-height: 560px; }
.hero__media { position: absolute; inset: 0; z-index: -4; will-change: transform; }
.hero__media img { width: 100%; height: 100%; object-fit: cover; animation: kenburns 26s ease-in-out infinite alternate; }
@keyframes kenburns { from { transform: scale(1.04); } to { transform: scale(1.14) translate3d(-1%, 1%, 0); } }

.hero__beams { position: absolute; inset: 0; z-index: -3; pointer-events: none; mix-blend-mode: screen; overflow: hidden; }
.beam {
  position: absolute; top: -12%; left: 50%; width: 46vmax; height: 125%; margin-left: -23vmax;
  transform-origin: 50% 0;
  background: linear-gradient(180deg, rgba(255, 224, 170, .6), rgba(255, 206, 150, .14) 52%, rgba(255, 200, 140, 0) 86%);
  clip-path: polygon(46% 0, 54% 0, 100% 100%, 0 100%);
  filter: blur(16px); opacity: .45;
  animation: sway 11s ease-in-out infinite alternate;
}
.beam--2 { left: 18%; opacity: .26; animation-duration: 14s; animation-delay: -5s; --r: 18deg; }
.beam--3 { left: 82%; opacity: .26; animation-duration: 13s; animation-delay: -8s; --r: -18deg; }
@keyframes sway { from { transform: rotate(calc(var(--r, 0deg) - 7deg)); } to { transform: rotate(calc(var(--r, 0deg) + 7deg)); } }

.hero__shade {
  position: absolute; left: -50%; top: -50%; width: 200%; height: 200%; z-index: -2; pointer-events: none;
  transform: translate3d(0, -3%, 0); will-change: transform;
  background: radial-gradient(circle at 50% 50%, rgba(11, 7, 8, 0) 0, rgba(11, 7, 8, .12) 12vmax, rgba(11, 7, 8, .66) 32vmax, rgba(11, 7, 8, .9) 60vmax);
}
.hero::after {
  content: ""; position: absolute; inset: auto 0 0; height: 32%; z-index: -1; pointer-events: none;
  background: linear-gradient(180deg, rgba(11, 7, 8, 0), var(--ink));
}
.hero__content { position: relative; padding: 0 var(--gutter); will-change: transform; }
.hero__presents { font-family: var(--caps); font-size: clamp(10px, 1vw, 12.5px); letter-spacing: .55em; padding-left: .55em; color: var(--gold-hi); }
.hero__title {
  margin: .36em 0 .32em;
  font-weight: 500; font-size: clamp(2.65rem, 8.4vw, 8.4rem); line-height: 1.18; letter-spacing: .08em;
  filter: drop-shadow(0 0 34px rgba(255, 186, 104, .28));
}
.hero__title .line { display: block; }
.hero--sub .hero__title { font-size: clamp(2rem, 5.4vw, 5.2rem); line-height: 1.42; }
.hero__en { font-family: var(--en); font-style: italic; font-size: clamp(1.15rem, 2.1vw, 1.8rem); color: var(--gold-hi); letter-spacing: .02em; line-height: 1.5; }
.hero__lead { margin-top: 1.4em; font-size: clamp(.9rem, 1.15vw, 1.05rem); letter-spacing: .22em; line-height: 2.3; color: var(--ivory-dim); }

/* shimmering gold per character */
.shine .ch {
  background-image: linear-gradient(105deg, #b98d4a 0%, #ecd29a 30%, #fff8e2 50%, #ecd29a 70%, #b98d4a 100%);
  background-size: 320% 100%; background-position: 100% 0;
  -webkit-background-clip: text; background-clip: text; color: transparent;
  animation: glint 7s linear infinite; animation-delay: calc(var(--i) * .08s + 3s);
}
@keyframes glint { 0% { background-position: 100% 0; } 28% { background-position: 0% 0; } 100% { background-position: 0% 0; } }

.hero__foot {
  position: absolute; left: 0; right: 0; bottom: clamp(18px, 4vh, 38px);
  display: grid; grid-template-columns: 1fr auto 1fr; align-items: end; gap: 20px; padding: 0 var(--gutter);
  font-family: var(--caps); font-size: 9.5px; letter-spacing: .3em; color: var(--ivory-dim); line-height: 1.9; text-align: left;
}
.hero__foot > :last-child { text-align: right; }
.hero__foot b { display: block; color: var(--gold); font-weight: 400; }
.scroll-cue { display: grid; justify-items: center; gap: 10px; text-decoration: none; }
.scroll-cue i { position: relative; width: 1px; height: 54px; background: rgba(216, 180, 110, .25); overflow: hidden; }
.scroll-cue i::after { content: ""; position: absolute; left: 0; top: 0; width: 1px; height: 40%; background: var(--gold-hi); transform: translateY(-100%); animation: drop 2.2s var(--ease-io) infinite; }
@keyframes drop { from { transform: translateY(-100%); } to { transform: translateY(275%); } }
.breadcrumb { font-family: var(--caps); font-size: 10px; letter-spacing: .3em; color: var(--ivory-dim); margin-bottom: 22px; }
.breadcrumb a { text-decoration: none; color: var(--gold); }
@media (max-width: 767px) {
  .hero__foot { grid-template-columns: 1fr 1fr; }
  .hero__foot .scroll-cue { position: absolute; left: 50%; bottom: 0; transform: translateX(-50%); }
  .hero__foot .scroll-cue span { display: none; }
  .hero__lead { letter-spacing: .14em; }
}

/* ==========================================================================
   Sections
   ========================================================================== */
.section { position: relative; padding: clamp(110px, 17vh, 220px) var(--gutter); }
.wrap { max-width: 1320px; margin: 0 auto; }

/* Prologue */
.prologue { text-align: center; overflow: hidden; }
.prologue__halo {
  position: absolute; left: 50%; top: 40%; width: min(1100px, 130vw); aspect-ratio: 1; transform: translate(-50%, -50%);
  border-radius: 50%; pointer-events: none;
  background: radial-gradient(circle, rgba(216, 180, 110, .1), transparent 62%);
}
.prologue__ring {
  position: absolute; left: 50%; top: 40%; width: min(760px, 118vw); aspect-ratio: 1; transform: translate(-50%, -50%);
  border-radius: 50%; border: 1px solid rgba(216, 180, 110, .12); pointer-events: none;
}
.prologue__ring::after { content: ""; position: absolute; inset: 7%; border-radius: 50%; border: 1px dashed rgba(216, 180, 110, .12); animation: spin 90s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }
.lightup {
  position: relative; margin: 42px auto 0;
  /* each character is 1.12em wide (1em + letter-spacing); the longest line is 17 characters on
     wide screens and 15 on phones, so the type shrinks with the screen to keep every line whole */
  font-weight: 500; font-size: min(3.8rem, calc((100vw - 2 * var(--gutter)) / 19.8)); line-height: 1.8; letter-spacing: .12em;
}
@media (max-width: 767px) { .lightup { font-size: min(2.4rem, calc((100vw - 2 * var(--gutter)) / 17.6)); } }
html.has-gsap .lightup .ch { color: rgba(245, 238, 226, .13); }
.lightup em { color: #ecd29a; }
.lightup em { font-style: normal; }
.prologue__body { position: relative; max-width: 36em; margin: clamp(56px, 9vh, 100px) auto 0; text-align: left; }
.prologue__sign { font-family: var(--script); font-size: clamp(2.4rem, 5vw, 3.8rem); text-align: center; margin: 40px 0 0; line-height: 1.3; }

/* Proscenium — walk into the stage */
.pro { position: relative; height: 100vh; height: 100svh; overflow: hidden; background: #060304; --pt: 17%; --pr: 21%; --pb: 19%; --pl: 21%; --rad: 29vw; }
@media (max-width: 767px) { .pro { --pt: 22%; --pr: 8%; --pb: 26%; --pl: 8%; --rad: 42vw; } }
.pro__house { position: absolute; inset: 0; }
.pro__house img { width: 100%; height: 100%; object-fit: cover; opacity: .34; }
.pro__house::after { content: ""; position: absolute; inset: 0; background: radial-gradient(60% 60% at 50% 45%, rgba(6, 3, 4, .2), rgba(6, 3, 4, .92)); }
.pro__window { position: absolute; inset: 0; overflow: hidden; }
.pro__window img { width: 100%; height: 100%; object-fit: cover; will-change: transform; transform-origin: 50% 50%; }
.pro__window::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(6, 3, 4, .1) 45%, rgba(6, 3, 4, .85)); }
.pro__frame {
  position: absolute; top: var(--pt); right: var(--pr); bottom: var(--pb); left: var(--pl);
  border-radius: var(--rad) var(--rad) 0 0; border: 1px solid var(--gold);
  box-shadow: 0 0 0 11px rgba(216, 180, 110, 0), 0 0 0 12px var(--gold-line), 0 0 90px rgba(216, 180, 110, .22), inset 0 0 60px rgba(0, 0, 0, .6);
  pointer-events: none; will-change: transform, opacity;
}
.pro__frame::before {
  content: "✦"; position: absolute; left: 50%; top: -34px; transform: translateX(-50%);
  font-size: 14px; line-height: 1; color: var(--gold); text-shadow: 0 0 12px var(--gold);
}
.pro__curtain { position: absolute; top: var(--pt); right: var(--pr); bottom: var(--pb); left: var(--pl); z-index: 2; }
.pro__curtain .curtain__panel { will-change: clip-path; }
.pro__curtain .curtain__fabric { background-size: auto, 37% 100%, calc(var(--fold) * .5) 100%; }
.pro__valance {
  position: absolute; left: -2%; right: -2%; top: 0; height: 14%; z-index: 3;
  background: linear-gradient(180deg, rgba(0, 0, 0, .55), rgba(0, 0, 0, 0) 60%, rgba(0, 0, 0, .4)), var(--velvet-fold) 0 0 / calc(var(--fold) * .3) 100%;
  box-shadow: 0 10px 24px rgba(0, 0, 0, .55);
}
.pro__valance::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 3px; background: linear-gradient(90deg, #8f6a2c, #f4e0ae, #b88e45, #f4e0ae, #8f6a2c); }
html:not(.has-gsap) .pro__curtain { display: none; }
.pro__copy {
  position: absolute; left: var(--gutter); right: var(--gutter); bottom: clamp(30px, 8vh, 80px);
  display: flex; justify-content: space-between; align-items: flex-end; gap: 30px;
}
.pro__copy .script { font-size: clamp(2.6rem, 6.4vw, 6.2rem); color: var(--gold-hi); text-shadow: 0 4px 30px rgba(0, 0, 0, .6); }
.pro__copy p:last-child { max-width: 22em; font-size: 14px; letter-spacing: .18em; color: var(--ivory); line-height: 2.1; text-align: right; }
@media (max-width: 767px) { .pro__copy { flex-direction: column; align-items: flex-start; gap: 12px; } .pro__copy p:last-child { text-align: left; } }
html.has-gsap .pro__copy > * { opacity: 0; }

/* Behind the Art */
.work { display: grid; grid-template-columns: minmax(0, .95fr) minmax(0, 1.05fr); gap: clamp(50px, 8vw, 130px); align-items: center; }
.work__en { font-family: var(--en); font-style: italic; font-weight: 300; font-size: clamp(3.4rem, 8vw, 8rem); line-height: .95; letter-spacing: -.01em; margin: 26px 0 40px; }
.work__en em { color: transparent; -webkit-text-stroke: 1px var(--gold); }
.arch { position: relative; border-radius: 999px 999px 0 0; overflow: hidden; }
.arch::after { content: ""; position: absolute; inset: 0; border-radius: inherit; box-shadow: inset 0 0 0 1px var(--gold-line); pointer-events: none; }
.arch-frame { position: relative; padding: 14px; }
.arch-frame::before { content: ""; position: absolute; inset: 0; border: 1px solid var(--gold-line); border-radius: 999px 999px 0 0; }
.work__media { position: relative; }
.work__media .arch { aspect-ratio: 4 / 5; }
.work__media img { width: 100%; height: 100%; object-fit: cover; }
.work__tag {
  position: absolute; right: -10px; bottom: 40px; z-index: 2;
  font-family: var(--script); font-size: clamp(2.2rem, 3.8vw, 3.4rem); line-height: 1.2; color: var(--gold-hi); transform: rotate(-6deg);
  text-shadow: 0 6px 24px rgba(0, 0, 0, .8);
}
@media (max-width: 900px) {
  .work { grid-template-columns: 1fr; }
  .work__media { max-width: 460px; width: 86%; margin: 0 auto; }
  .work__tag { right: -4%; }
}

/* Act heads */
.act-head { position: relative; display: grid; grid-template-columns: auto 1fr; gap: clamp(20px, 5vw, 80px); align-items: end; }
.act-num {
  font-family: var(--en); font-weight: 300; line-height: .78; letter-spacing: -.02em;
  font-size: clamp(8rem, 22vw, 21rem); color: rgba(216, 180, 110, .07); -webkit-text-stroke: 1.5px rgba(216, 180, 110, .6); text-shadow: 0 0 60px rgba(216, 180, 110, .25);
  user-select: none;
}
.act-title { font-family: var(--en); font-weight: 400; font-size: clamp(2.8rem, 7vw, 7rem); line-height: .98; letter-spacing: -.005em; margin-top: 18px; }
.act-title em { font-style: italic; color: var(--gold); }
.act-body { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr); gap: clamp(30px, 6vw, 100px); margin-top: clamp(50px, 8vh, 90px); }
@media (max-width: 900px) {
  .act-head { grid-template-columns: 1fr; gap: 0; }
  .act-num { font-size: clamp(7rem, 38vw, 11rem); margin-bottom: .12em; }
  .act-body { grid-template-columns: 1fr; }
}

/* text link */
.tlink {
  display: inline-flex; align-items: center; gap: 18px; margin-top: 40px; text-decoration: none;
  font-family: var(--caps); font-size: 12px; letter-spacing: .24em;
}
.tlink__txt { background: linear-gradient(var(--gold), var(--gold)) 0 100% / 0 1px no-repeat; transition: background-size .7s var(--ease); padding-bottom: 4px; }
.tlink:hover .tlink__txt { background-size: 100% 1px; }
.tlink__arrow {
  position: relative; flex: none; width: 58px; height: 58px; border-radius: 50%; border: 1px solid var(--gold-line);
  display: grid; place-items: center; transition: border-color .5s, background-color .5s, color .5s;
  font-family: var(--en); font-size: 18px; color: var(--gold);
}
.tlink:hover .tlink__arrow { background: var(--gold); color: var(--ink); border-color: var(--gold); }
.tlink__jp { font-family: var(--serif); letter-spacing: .14em; font-size: 14px; }

/* Horizontal gallery */
.hs { position: relative; overflow: hidden; }
.hs__track {
  display: flex; align-items: center; gap: clamp(26px, 4vw, 70px);
  padding: 8vh var(--gutter); overflow-x: auto; scroll-snap-type: x mandatory;
}
.hs.is-pinned { height: 100vh; height: 100svh; }
.hs.is-pinned .hs__track { height: 100%; width: max-content; overflow: visible; scroll-snap-type: none; padding-block: 0; will-change: transform; }
.hcard { position: relative; flex: none; margin: 0; scroll-snap-align: center; }
.hcard__img { position: relative; overflow: hidden; height: min(64vh, 620px); }
.hcard--land .hcard__img { aspect-ratio: 3 / 2; }
.hcard--port .hcard__img { aspect-ratio: 2 / 3; border-radius: 999px 999px 0 0; }
.hcard__img img { width: 118%; max-width: none; height: 100%; object-fit: cover; margin-left: -9%; will-change: transform; }
.hcard__img::after { content: ""; position: absolute; inset: 0; box-shadow: inset 0 0 0 2px rgba(216, 180, 110, .6); border-radius: inherit; pointer-events: none; }
.hcard figcaption { display: flex; gap: 16px; align-items: baseline; margin-top: 18px; font-size: 13px; letter-spacing: .14em; color: var(--ivory-dim); line-height: 1.7; }
.hcard figcaption b { font-family: var(--en); font-style: italic; font-weight: 400; font-size: 20px; color: var(--gold); letter-spacing: 0; }
.hs__intro { flex: none; width: max-content; max-width: min(34vw, 480px); }
/* the space before and after the intro text matches: both use the page gutter */
.hs__intro + .hcard { margin-left: calc(var(--gutter) - clamp(26px, 4vw, 70px)); }
.hs__intro .script { font-size: clamp(3rem, 6vw, 5.6rem); color: var(--gold-hi); }
.hs__intro p:not(.script) { margin-top: 18px; color: var(--ivory-dim); font-size: 14px; letter-spacing: .16em; }
.hs__end { flex: none; width: min(30vw, 420px); display: grid; align-content: center; justify-items: start; }
.hs__progress { position: absolute; left: var(--gutter); right: var(--gutter); bottom: clamp(20px, 5vh, 44px); height: 1px; background: var(--ivory-faint); display: none; }
.hs.is-pinned .hs__progress { display: block; }
.hs__progress i { position: absolute; inset: 0; background: var(--gold); transform-origin: 0 50%; transform: scaleX(0); }
@media (max-width: 767px) {
  .hcard__img { height: 54svh; }
  .hcard--land .hcard__img { height: auto; width: 84vw; }
  .hs__intro { max-width: 78vw; }
  .hs .hs__track { gap: 44px; padding-inline: 44px; }
  .hs .hs__intro + .hcard { margin-left: 0; }
  .hs__end { width: 78vw; }
}

/* Marquee */
.marquee { position: relative; overflow: hidden; padding: clamp(26px, 5vh, 50px) 0; border-block: 1px solid rgba(216, 180, 110, .18); }
.marquee__track { display: flex; width: max-content; will-change: transform; }
.marquee__track > div { display: flex; align-items: center; gap: .4em; padding-right: .4em; font-family: var(--en); font-weight: 300; font-style: italic; font-size: clamp(3rem, 9vw, 9rem); line-height: 1.15; white-space: nowrap; }
.marquee .o { color: transparent; -webkit-text-stroke: 1px rgba(216, 180, 110, .7); }
.marquee .star { font-style: normal; font-size: .35em; color: var(--gold); }
html:not(.has-gsap) .marquee__track { animation: marquee 38s linear infinite; }
@keyframes marquee { to { transform: translateX(-50%); } }

/* ==========================================================================
   Act II — Loopon (the lights turn rose)
   ========================================================================== */
.loopon { position: relative; overflow: hidden; isolation: isolate; }
.loopon__lights {
  position: absolute; inset: 0; z-index: -2;
  background:
    radial-gradient(55% 45% at 28% 42%, rgba(255, 128, 166, .34), transparent 70%),
    radial-gradient(45% 50% at 82% 18%, rgba(190, 160, 255, .22), transparent 70%),
    radial-gradient(60% 40% at 70% 100%, rgba(255, 180, 120, .16), transparent 70%),
    linear-gradient(180deg, var(--ink) 0%, #2a0b1b 20%, #3b1027 55%, #230a17 84%, var(--ink) 100%);
}
html.has-gsap .loopon__lights { opacity: 0; }
.loopon__beams { position: absolute; inset: 0; z-index: -1; pointer-events: none; mix-blend-mode: screen; overflow: hidden; }
.loopon__beams .beam { background: linear-gradient(180deg, rgba(255, 160, 190, .5), rgba(255, 150, 190, .1) 55%, transparent 88%); }
.loopon__grid { position: relative; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: clamp(40px, 7vw, 120px); align-items: center; max-width: 1320px; margin: 0 auto; }
.loopon__visual { position: relative; aspect-ratio: 1; display: grid; place-items: center; perspective: 1200px; }
.loopon__halo { position: absolute; inset: 6%; border-radius: 50%; background: radial-gradient(circle, rgba(255, 170, 196, .55), rgba(255, 140, 180, .12) 45%, transparent 68%); animation: breathe 5s ease-in-out infinite; }
@keyframes breathe { 50% { transform: scale(1.08); opacity: .8; } }
.loopon__ring { position: absolute; inset: 3%; border-radius: 50%; border: 1.5px dashed rgba(255, 196, 214, .45); animation: spin 50s linear infinite; }
.loopon__ring--2 { inset: 13%; border-style: solid; border-width: 1px; border-color: rgba(255, 196, 214, .2); animation-direction: reverse; animation-duration: 70s; }
.orbit { position: absolute; inset: 0; animation: spin 16s linear infinite; pointer-events: none; }
.orbit--2 { inset: 10%; animation-duration: 11s; animation-direction: reverse; }
.orbit i { position: absolute; width: 16px; height: 16px; background: #fff; clip-path: polygon(50% 0, 60% 40%, 100% 50%, 60% 60%, 50% 100%, 40% 60%, 0 50%, 40% 40%); animation: twinkle 2.4s ease-in-out infinite; }
.orbit i:nth-child(1) { left: 50%; top: -8px; }
.orbit i:nth-child(2) { right: 2%; top: 60%; width: 10px; height: 10px; animation-delay: -.8s; }
.orbit i:nth-child(3) { left: 8%; top: 72%; width: 12px; height: 12px; animation-delay: -1.6s; }
@keyframes twinkle { 0%, 100% { transform: scale(.4) rotate(0deg); opacity: .4; } 50% { transform: scale(1.15) rotate(45deg); opacity: 1; } }
.loopon__card { position: relative; width: min(56%, 320px); animation: float 6s ease-in-out infinite; }
@keyframes float { 50% { transform: translateY(-16px); } }
.loopon__tilt { position: relative; transform-style: preserve-3d; transition: transform .6s var(--ease); will-change: transform; }
.loopon__tilt img { border-radius: 16px; box-shadow: 0 50px 80px -20px rgba(0, 0, 0, .7), 0 0 0 1px rgba(255, 255, 255, .12); }
.loopon__tilt::after {
  content: ""; position: absolute; inset: 0; border-radius: 16px; pointer-events: none; mix-blend-mode: soft-light;
  background: linear-gradient(115deg, transparent 30%, rgba(255, 255, 255, .75) 48%, transparent 62%);
  background-size: 250% 100%; background-position: var(--glare, 100%) 0;
}
.loopon__badge {
  position: absolute; z-index: 2; right: 1%; top: 10%; width: clamp(92px, 10vw, 128px); aspect-ratio: 1; border-radius: 50%;
  display: grid; place-content: center; text-align: center; line-height: 1.35;
  background: radial-gradient(circle at 35% 30%, #fff 0%, #ffd6e1 45%, #ff9fb8 100%); color: #8a1d44;
  font-weight: 800; font-size: clamp(12px, 1.2vw, 14px); letter-spacing: .08em;
  box-shadow: 0 16px 40px rgba(194, 58, 100, .45);
  animation: bob 4s ease-in-out infinite;
}
.loopon__badge small { display: block; font-family: var(--caps); font-size: 9px; letter-spacing: .2em; font-weight: 400; }
@keyframes bob { 0%, 100% { transform: rotate(10deg); } 50% { transform: rotate(4deg) translateY(-10px); } }
.loopon__label { color: var(--rose); }
.loopon__label small { color: rgba(255, 211, 222, .8); }
.loopon__title {
  margin: 26px 0 10px; font-weight: 800; font-size: clamp(3.1rem, 7.2vw, 6.8rem); line-height: 1.1; letter-spacing: .04em;
  filter: drop-shadow(0 8px 30px rgba(255, 110, 150, .35));
}
.loopon__title .row { display: block; }
.loopon__title .ch {
  background: linear-gradient(120deg, #fff 10%, #ffd3de 45%, #ff8fab 80%, #ffc6d6 100%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
html.js .loopon__title[data-split] .ch { transform: translate3d(0, .7em, 0) scale(.6) rotate(-8deg); transition-timing-function: cubic-bezier(.34, 1.8, .5, 1); }
html.js .loopon__title[data-split].is-in .ch { transform: none; }
.loopon__brand { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 16px; font-family: var(--en); font-style: italic; font-size: clamp(2rem, 3.4vw, 3rem); line-height: 1.2; }
.loopon__brand sup { font-size: .4em; }
.loopon__brand small { font-family: var(--serif); font-style: normal; font-size: 13px; letter-spacing: .3em; color: var(--rose-hi); }
.loopon__h3 { margin-top: 30px; font-weight: 500; font-size: clamp(1.25rem, 2vw, 1.7rem); line-height: 1.7; letter-spacing: .12em; }
.loopon__copy .copy p { color: rgba(255, 235, 240, .8); }
.loopon__copy .copy { margin-top: 20px; }
.loopon__tags { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 28px; }
.loopon__tags li {
  padding: 8px 16px; border-radius: 999px; border: 1px solid rgba(255, 170, 196, .45); background: rgba(255, 143, 171, .08);
  font-size: 12.5px; letter-spacing: .12em; line-height: 1.6; color: var(--rose-hi);
}
.loopon__bye { margin-top: 26px; font-weight: 600; letter-spacing: .12em; color: #fff; }
.loopon__bye span { background: linear-gradient(transparent 62%, rgba(255, 143, 171, .45) 62%); padding: 0 .2em; }
.loopon .tlink__arrow { border-color: rgba(255, 170, 196, .5); color: var(--rose); }
.loopon .tlink:hover .tlink__arrow { background: var(--rose); color: #3b1027; border-color: var(--rose); }
.loopon .tlink__txt { background-image: linear-gradient(var(--rose), var(--rose)); }
.stitch { position: absolute; inset: 0; width: 100%; height: 100%; z-index: -1; pointer-events: none; }
.stitch__line { fill: none; stroke: rgba(255, 190, 210, .6); stroke-width: 2; stroke-dasharray: 10 9; stroke-linecap: round; vector-effect: non-scaling-stroke; }
.needle { position: absolute; left: 0; top: 0; width: 70px; height: 10px; margin: -5px 0 0 -70px; z-index: -1; pointer-events: none; transform-origin: 100% 50%; opacity: 0; }
@media (max-width: 900px) {
  .loopon__grid { grid-template-columns: 1fr; }
  .loopon__visual { width: min(100%, 440px); margin: 0 auto; }
}

/* ==========================================================================
   Act III — About (chandelier)
   ========================================================================== */
.about { display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(0, .85fr); gap: clamp(40px, 6vw, 110px); align-items: center; }
.chand { position: relative; will-change: transform; }
.chand__rig { transform-origin: 50% -60%; animation: swing 9s ease-in-out infinite; }
@keyframes swing { 0%, 100% { transform: rotate(-.9deg); } 50% { transform: rotate(.9deg); } }
.chand__img { position: relative; -webkit-mask-image: radial-gradient(ellipse 58% 60% at 50% 44%, #000 38%, rgba(0,0,0,.6) 58%, transparent 80%); mask-image: radial-gradient(ellipse 58% 60% at 50% 44%, #000 38%, rgba(0,0,0,.6) 58%, transparent 80%); }
.chand__img img { filter: contrast(1.08) brightness(.95); }
.chand__img img { width: 100%; }
.flame {
  position: absolute; left: var(--x); top: var(--y); width: 8%; aspect-ratio: 1; border-radius: 50%;
  background: radial-gradient(circle, rgba(255, 244, 214, .95) 0, rgba(255, 196, 110, .5) 22%, rgba(255, 160, 70, .12) 50%, transparent 70%);
  mix-blend-mode: screen; animation: flicker 3.2s ease-in-out infinite; animation-delay: var(--d, 0s);
  translate: -50% -50%;
}
@keyframes flicker { 0%, 100% { opacity: .85; transform: scale(1); } 30% { opacity: 1; transform: translateY(-4%) scale(1.14); } 55% { opacity: .7; transform: scale(.92); } 80% { opacity: .95; transform: translateY(-2%) scale(1.06); } }
.glint {
  position: absolute; left: var(--x); top: var(--y); width: clamp(14px, 2vw, 26px); aspect-ratio: 1; translate: -50% -50%;
  background: radial-gradient(circle, #fff 0 16%, rgba(255, 255, 255, .7) 28%, transparent 70%);
  clip-path: polygon(50% 0, 56% 44%, 100% 50%, 56% 56%, 50% 100%, 44% 56%, 0 50%, 44% 44%);
  animation: twinkle 2.8s ease-in-out infinite; animation-delay: var(--d, 0s); mix-blend-mode: screen;
}
.moa-unfold { font-family: var(--en); font-weight: 300; font-size: clamp(3rem, 6vw, 5.8rem); line-height: 1.05; letter-spacing: -.01em; margin: 22px 0 36px; white-space: nowrap; }
.moa-unfold .k { font-style: italic; font-weight: 500; color: var(--gold); }
.moa-unfold .x { display: inline-grid; grid-template-columns: 0fr; transition: grid-template-columns 1.8s var(--ease); vertical-align: bottom; }
.moa-unfold .x > span { overflow: hidden; opacity: 0; transition: opacity 1.2s .35s; }
.moa-unfold.is-open .x { grid-template-columns: 1fr; }
.moa-unfold.is-open .x > span { opacity: 1; }
.moa-unfold .gap { display: inline-block; width: .06em; transition: width 1.8s var(--ease); }
.moa-unfold.is-open .gap { width: .26em; }
@media (max-width: 900px) {
  .about { grid-template-columns: 1fr; }
  .moa-unfold { font-size: clamp(2.3rem, 11vw, 4rem); }
}

/* ==========================================================================
   Finale — Curtain call
   ========================================================================== */
.finale { position: relative; isolation: isolate; overflow: hidden; min-height: 100vh; min-height: 100svh; display: grid; place-items: center; text-align: center; padding: 140px var(--gutter) 110px; }
.finale__bg { position: absolute; inset: 0; z-index: -2; }
.finale__bg img { width: 100%; height: 100%; object-fit: cover; opacity: .6; }
.finale::before { content: ""; position: absolute; inset: 0; z-index: -1; background: radial-gradient(70% 60% at 50% 55%, rgba(11, 7, 8, .25), rgba(11, 7, 8, .9)), linear-gradient(180deg, var(--ink), rgba(11, 7, 8, 0) 25%, rgba(11, 7, 8, 0) 75%, var(--ink)); }
.finale__call { font-family: var(--script); font-size: clamp(4.2rem, 13vw, 12rem); line-height: 1.15; margin: 14px 0 6px; padding: 0 .15em; }
.finale h2 { font-weight: 500; font-size: clamp(1.6rem, 3.6vw, 3rem); line-height: 1.7; letter-spacing: .12em; }
.finale__txt { max-width: 34em; margin: 26px auto 0; color: var(--ivory-dim); }
.mail {
  display: inline-block; margin-top: 42px; text-decoration: none;
  font-family: var(--en); font-style: italic; font-weight: 400; font-size: clamp(2rem, 5.6vw, 4.8rem); line-height: 1.2; letter-spacing: .01em;
  background: linear-gradient(var(--gold), var(--gold)) 50% 100% / 30% 1px no-repeat; padding-bottom: 6px;
  transition: background-size .8s var(--ease), color .5s;
}
.mail:hover { background-size: 100% 1px; color: var(--gold-hi); }
.finale__actions { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 14px 28px; margin-top: 44px; }
.applause {
  display: inline-flex; align-items: center; gap: 14px; cursor: pointer;
  padding: 14px 26px 14px 20px; border-radius: 999px; border: 1px solid var(--gold-line); background: rgba(11, 7, 8, .45);
  font-family: var(--serif); font-size: 13px; letter-spacing: .18em; line-height: 1.4; color: var(--ivory);
  transition: border-color .4s, background-color .4s, transform .3s var(--ease);
  -webkit-tap-highlight-color: transparent; touch-action: manipulation;
}
.applause:hover { border-color: var(--gold); background: rgba(216, 180, 110, .12); }
.applause:active { transform: scale(.94); }
.applause svg { width: 22px; height: 22px; color: var(--rose); flex: none; }
.applause output { font-family: var(--en); font-style: italic; font-size: 18px; color: var(--gold); min-width: 1.4em; }
.finale__tel { font-family: var(--caps); font-size: 11px; letter-spacing: .26em; color: var(--ivory-dim); text-decoration: none; }
.bravo-pop {
  position: fixed; z-index: 75; pointer-events: none; font-family: var(--script); color: var(--gold-hi); white-space: nowrap; line-height: 1.2;
  text-shadow: 0 0 20px rgba(255, 190, 110, .7); animation: bravo 1.9s var(--ease) forwards;
}
@keyframes bravo { 0% { opacity: 0; transform: translate(-50%, 0) scale(.6); } 20% { opacity: 1; } 100% { opacity: 0; transform: translate(-50%, -150px) scale(1.2) rotate(var(--r, 0deg)); } }

/* ==========================================================================
   Footer — the back of the programme
   ========================================================================== */
.foot { position: relative; overflow: hidden; background: #070405; border-top: 1px solid rgba(216, 180, 110, .2); padding: clamp(70px, 11vh, 120px) var(--gutter) 30px; }
.foot__grid { display: grid; grid-template-columns: 1.3fr 1fr 1fr 1fr; gap: 40px; max-width: 1320px; margin: 0 auto; font-size: 13px; line-height: 2; letter-spacing: .1em; }
.foot h4 { margin: 0 0 16px; font-family: var(--caps); font-weight: 400; font-size: 10px; letter-spacing: .32em; color: var(--gold); }
.foot a { text-decoration: none; color: var(--ivory-dim); transition: color .3s; }
.foot a:hover { color: var(--gold-hi); }
.foot__brand .brand__mark { font-size: 54px; }
.foot__brand p { margin-top: 14px; color: var(--ivory-dim); }
.foot__list { display: grid; justify-items: start; }
.foot__address { color: var(--ivory-dim); font-style: normal; }
.foot__script { font-family: var(--script); font-size: min(15rem, calc((100vw - 2 * var(--gutter)) * .145)); line-height: 1.3; text-align: center; margin: 50px 0 -.3em; color: transparent; -webkit-text-stroke: 1px rgba(216, 180, 110, .28); white-space: nowrap; user-select: none; }
.foot__bottom { position: relative; display: flex; justify-content: space-between; gap: 20px; max-width: 1320px; margin: 0 auto; padding-top: 22px; border-top: 1px solid rgba(216, 180, 110, .16); font-family: var(--caps); font-size: 10px; letter-spacing: .26em; color: var(--ivory-dim); }
@media (max-width: 900px) {
  .foot__grid { grid-template-columns: 1fr 1fr; }
  .foot__brand { grid-column: 1 / -1; }
}
@media (max-width: 520px) { .foot__bottom { flex-direction: column; } }

/* ==========================================================================
   Sub pages
   ========================================================================== */
.statement { display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: clamp(36px, 7vw, 120px); align-items: start; }
.statement .heading { margin-top: 28px; }
@media (max-width: 900px) { .statement { grid-template-columns: 1fr; } }

.scene { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr); gap: clamp(40px, 7vw, 120px); align-items: center; }
.scene + .scene { margin-top: clamp(120px, 18vh, 220px); }
.scene--rev .scene__media { order: 2; }
.scene__media { position: relative; }
.scene__media .frame { position: relative; overflow: hidden; aspect-ratio: 4 / 3; }
.scene__media .frame::after { content: ""; position: absolute; inset: 0; box-shadow: inset 0 0 0 2px rgba(216, 180, 110, .6); border-radius: inherit; pointer-events: none; }
.scene__media .frame.arch { aspect-ratio: 3 / 4; max-width: 500px; margin: 0 auto; }
.scene__media img { width: 100%; height: 100%; object-fit: cover; }
.scene__no { font-family: var(--en); font-style: italic; font-size: clamp(4rem, 9vw, 8rem); line-height: 1; color: transparent; -webkit-text-stroke: 1px var(--gold); position: absolute; top: -.5em; left: -.12em; z-index: 2; pointer-events: none; }
.scene--rev .scene__no { left: auto; right: -.12em; }
.scene h2 { margin: 22px 0 30px; }
@media (max-width: 900px) {
  .scene { grid-template-columns: 1fr; }
  .scene--rev .scene__media { order: 0; }
  .scene__no { left: 0; }
  .scene--rev .scene__no { right: 0; }
}

.values { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(18px, 2.4vw, 36px); margin-top: clamp(60px, 10vh, 110px); perspective: 1400px; }
.value { position: relative; padding: 16px 16px 34px; border: 2px solid rgba(216, 180, 110, .6); background: linear-gradient(180deg, rgba(255, 255, 255, .03), rgba(255, 255, 255, 0)); transition: border-color .5s, box-shadow .8s var(--ease); }
.value:hover { border-color: var(--gold); box-shadow: 0 30px 60px -20px rgba(216, 180, 110, .25); }
.value .arch { aspect-ratio: 4 / 3; }
.value .arch::after { box-shadow: inset 0 0 0 2px rgba(216, 180, 110, .6); z-index: 1; }
.value .arch img { width: 100%; height: 100%; object-fit: cover; transition: transform 1.6s var(--ease); }
.value:hover .arch img { transform: scale(1.08); }
.value__num { font-family: var(--en); font-style: italic; font-size: 44px; color: var(--gold); line-height: 1; display: block; margin: 26px 12px 12px; }
.value h3 { margin: 0 12px 14px; font-weight: 500; font-size: clamp(1.1rem, 1.5vw, 1.35rem); letter-spacing: .1em; line-height: 1.6; }
.value p { margin: 0 12px; color: var(--ivory-dim); font-size: 14px; }
html.js .value[data-reveal] { transform: rotateY(-22deg) translate3d(40px, 30px, 0); transform-origin: 0 50%; }
html.js .value[data-reveal].is-in { transform: none; }
@media (max-width: 900px) { .values { grid-template-columns: 1fr; max-width: 520px; margin-inline: auto; } }

.members { display: grid; grid-template-columns: repeat(2, minmax(0, 360px)); justify-content: center; gap: clamp(30px, 8vw, 120px); margin-top: clamp(60px, 10vh, 100px); }
.member { text-align: center; }
.member__photo { position: relative; aspect-ratio: 4 / 5; border-radius: 999px 999px 0 0; overflow: hidden; isolation: isolate; }
.member__photo img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(1) contrast(1.05) brightness(.82); transition: filter 1s var(--ease), transform 1.6s var(--ease); }
.member__photo::after { content: ""; position: absolute; inset: 0; border-radius: inherit; box-shadow: inset 0 0 0 1px var(--gold-line); background: radial-gradient(circle at var(--mx, 50%) var(--my, 32%), rgba(255, 220, 160, 0) 20%, rgba(11, 7, 8, .6) 75%); transition: opacity .8s; }
.member:hover .member__photo img { filter: grayscale(.3) sepia(.25) contrast(1.05) brightness(1.02); transform: scale(1.04); }
.member:hover .member__photo::after { opacity: .4; }
.member h3 { margin-top: 26px; font-weight: 500; font-size: 1.6rem; letter-spacing: .3em; padding-left: .3em; line-height: 1.6; }
.member p { font-family: var(--caps); font-size: 10px; letter-spacing: .32em; color: var(--gold); line-height: 1.9; }
.member p span { display: block; font-family: var(--serif); font-size: 13px; letter-spacing: .2em; color: var(--ivory-dim); }
@media (max-width: 640px) { .members { grid-template-columns: minmax(0, 300px); } }

.credits { max-width: 820px; margin: clamp(50px, 8vh, 80px) auto 0; }
.credits div { display: flex; align-items: baseline; gap: 16px; padding: 18px 0; border-bottom: 1px solid rgba(216, 180, 110, .14); }
.credits dt { flex: none; font-family: var(--caps); font-size: 11px; letter-spacing: .3em; color: var(--gold); min-width: 7.5em; line-height: 1.6; }
.credits dt small { display: block; font-family: var(--serif); font-size: 12px; letter-spacing: .2em; color: var(--ivory-dim); }
.credits .dots { flex: 1; border-bottom: 1px dotted rgba(216, 180, 110, .4); transform: translateY(-5px); min-width: 20px; }
.credits dd { text-align: right; letter-spacing: .12em; line-height: 1.8; }
.credits dd a { text-decoration: none; }
@media (max-width: 600px) {
  .credits div { flex-wrap: wrap; gap: 4px; }
  .credits .dots { display: none; }
  .credits dd { text-align: left; width: 100%; }
}

.center { text-align: center; }
.mt-l { margin-top: clamp(40px, 7vh, 80px); }

/* ==========================================================================
   Reduced motion
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; transition-delay: 0s !important; }
  .grain { display: none; }
}

/* Search-engine rendering (stage.js BOT): the renderer stretches the viewport to the
   whole page height, so full-screen blocks would push every heading out of its screenshot. */
html.is-static .hero, html.is-static .pro, html.is-static .hs.is-pinned { height: 900px; }
html.is-static .finale { min-height: 0; }

/* sub-page hero on a bright performance photo */
.hero--photo .hero__media img { filter: brightness(.5) saturate(.95) contrast(1.05); }
.hero--photo .hero__shade { background: radial-gradient(circle at 50% 50%, rgba(11, 7, 8, 0) 0, rgba(11, 7, 8, .28) 14vmax, rgba(11, 7, 8, .78) 34vmax, rgba(11, 7, 8, .92) 60vmax); }
.hero--photo .hero__content::before {
  content: ""; position: absolute; inset: -12% -8%; z-index: -1; pointer-events: none;
  background: radial-gradient(closest-side, rgba(11, 7, 8, .72), rgba(11, 7, 8, .35) 60%, rgba(11, 7, 8, 0));
}

/* phones */
@media (max-width: 767px) {
  .label { flex-wrap: wrap; row-gap: 6px; }
  .label small { flex-basis: 100%; order: 3; white-space: nowrap; }
  .label--center { justify-content: center; }
  .label--center small { text-align: center; }
  .finale__call { font-size: clamp(3rem, 15vw, 4.4rem); }
  .hero--sub .hero__title { font-size: clamp(1.5rem, 7vw, 2.2rem); letter-spacing: .06em; }
  .mail { font-size: clamp(1.9rem, 9vw, 2.6rem); }

}

/* company name: MoA Inc. */
.brand__mark small { margin-left: .22em; font-size: .46em; font-style: italic; font-weight: 400; letter-spacing: .04em; color: var(--ivory-dim); }

/* home hero on phones uses its own portrait stage photo (real curtains) */
.hero__media picture { display: contents; }

/* focus ring only for keyboard navigation */
.prog-btn:focus:not(:focus-visible) { outline: none; }

/* Act numerals: a gentle float, like a prop hanging on a line */
.act-num { display: inline-block; animation: numfloat 6.5s ease-in-out infinite; will-change: transform; }
@keyframes numfloat {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0deg); }
  30% { transform: translate3d(0, -14px, 0) rotate(-1.2deg); }
  65% { transform: translate3d(0, -4px, 0) rotate(.8deg); }
}

/* gallery cards open the Studio Performance page */
.hcard__link { position: absolute; inset: 0; z-index: 3; border-radius: 999px 999px 0 0; }
.hcard--land .hcard__link { border-radius: 0; }
.hcard { cursor: pointer; }
.hcard:hover .hcard__img::after { box-shadow: inset 0 0 0 2px var(--gold), 0 0 30px rgba(216, 180, 110, .35); }
.hcard__link:focus-visible { outline: 2px solid var(--gold); outline-offset: 6px; }

/* Loopon package on the home page links to the product page */
.loopon__link { display: block; border-radius: 16px; cursor: pointer; }

/* member portraits: room for a slow parallax */
.member__photo .plx { top: 0; bottom: -18%; }
.member__photo .plx img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 0; }

/* Nothing animates where nobody can see it: sections off screen, the hidden menu,
   the curtain once it has gone. They resume from the same frame when they return. */
.is-offstage, .is-offstage *, .is-offstage::before, .is-offstage::after, .is-offstage *::before, .is-offstage *::after,
.curtain.is-gone *, .programme:not(.is-open) * { animation-play-state: paused !important; }
