:root{
  --ivory:#fbf9f1;
  --gold:#9c7142;
  --brown:#2d1b0e;
  --maxw:560px;
}
*{box-sizing:border-box;margin:0;padding:0}
html{background:var(--ivory);-webkit-text-size-adjust:100%}
body{
  background:var(--ivory);color:var(--brown);
  font-family:"Optima","Candara","Segoe UI","Helvetica Neue",Arial,sans-serif;
  overflow-x:hidden;-webkit-tap-highlight-color:transparent;
}
body.locked{overflow:hidden;height:100%;touch-action:none}

#invite{width:100%;max-width:var(--maxw);margin:0 auto;background:var(--ivory)}

/* ---------- scenes ---------- */
.scene{position:relative;width:100%;aspect-ratio:1080/1500;overflow:hidden;background:var(--ivory)}
.stage{position:absolute;inset:0}
.stage picture{display:block;position:absolute;inset:0}
.base{position:absolute;inset:0;width:100%;height:100%;display:block;user-select:none;-webkit-user-drag:none}

/* JS-built layers */
.ghost{position:absolute;inset:0;width:100%;height:100%;display:block;pointer-events:none}
.rg-outer{position:absolute;pointer-events:none}
.rg{position:absolute;overflow:hidden;pointer-events:none;will-change:opacity,transform}
.rg-outer > .rg{inset:0;width:100%;height:100%}
.rg img{position:absolute;height:auto;max-width:none;display:block;pointer-events:none;user-select:none;-webkit-user-drag:none}

/* ---------- map hotspot: card at x 205–1415, y 1222–2140 of 1633×2268 ---------- */
.map-link{
  position:absolute;z-index:50;display:block;
  left:12.55%;top:53.88%;width:74.1%;height:40.43%;
  border-radius:5.6% / 6.2%;
  pointer-events:auto;cursor:pointer;
  background:rgba(255,255,255,.01);          /* gives iOS Safari a real hit-test surface; visually imperceptible */
  touch-action:manipulation;
  -webkit-tap-highlight-color:rgba(156,113,66,.12);
  -webkit-transform:translateZ(0);transform:translateZ(0);   /* own layer, always above animated layers */
  text-decoration:none;
}
.map-link:focus-visible{outline:2px solid var(--gold);outline-offset:3px}

/* ---------- intro overlay ---------- */
#intro{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center}
.intro-half{
  position:absolute;top:0;bottom:0;width:50.2%;
  background:#fbf9f1 url("assets/ghost-02.webp") no-repeat;
  transition:transform 1.7s cubic-bezier(.77,0,.18,1);
  will-change:transform;
}
.intro-left{left:0;background-size:200% 100%;background-position:left top}
.intro-right{right:0;background-size:200% 100%;background-position:right top}
.intro-frame{
  position:absolute;inset:max(16px,env(safe-area-inset-top)) 16px max(16px,env(safe-area-inset-bottom)) 16px;
  border:1px solid rgba(156,113,66,.45);pointer-events:none;
  transition:opacity .7s ease;
}
.intro-frame::after{content:"";position:absolute;inset:5px;border:1px solid rgba(156,113,66,.22)}
.open-btn{
  position:relative;z-index:2;
  display:inline-flex;align-items:center;gap:.7em;
  padding:1.05em 1.9em 1.05em 2.1em;
  font:inherit;font-size:13px;font-weight:600;letter-spacing:.3em;text-transform:uppercase;
  color:var(--brown);background:rgba(251,249,241,.55);
  border:1px solid var(--gold);border-radius:999px;cursor:pointer;
  -webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);
  animation:breathe 3.2s ease-in-out infinite;
  transition:opacity .6s ease,transform .6s ease,background .3s ease;
}
.open-btn:hover{background:rgba(156,113,66,.1)}
.open-btn:focus-visible{outline:2px solid var(--gold);outline-offset:4px}
.open-btn .heart{color:var(--gold);font-size:1.25em;letter-spacing:0;transform:translateY(-1px)}
@keyframes breathe{0%,100%{box-shadow:0 0 0 0 rgba(156,113,66,.28)}50%{box-shadow:0 0 0 9px rgba(156,113,66,0)}}

#intro.open .open-btn{opacity:0;transform:scale(1.06);animation:none;pointer-events:none}
#intro.open .intro-frame{opacity:0}
#intro.open .intro-left{transform:translateX(-101%);transition-delay:.35s}
#intro.open .intro-right{transform:translateX(101%);transition-delay:.35s}
#intro.gone{display:none}

/* ---------- music button ---------- */
.music-btn{
  position:fixed;z-index:90;
  top:calc(14px + env(safe-area-inset-top));right:calc(14px + env(safe-area-inset-right));
  width:40px;height:40px;display:grid;place-items:center;
  color:var(--gold);background:rgba(251,249,241,.78);
  border:1px solid rgba(156,113,66,.55);border-radius:50%;cursor:pointer;
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  opacity:0;transition:opacity .8s ease,background .2s ease;
}
.music-btn.show{opacity:.92}
.music-btn:hover{background:rgba(251,249,241,.95)}
.music-btn:focus-visible{outline:2px solid var(--gold);outline-offset:3px}
.music-btn .ico-off{display:none}
.music-btn[aria-pressed="false"] .ico-on{display:none}
.music-btn[aria-pressed="false"] .ico-off{display:block}
.music-btn.hint{animation:breathe 2.6s ease-in-out infinite}

@media (prefers-reduced-motion:reduce){
  .open-btn,.music-btn.hint{animation:none}
  .intro-half{transition-duration:.01s}
}
