/* Decorative cover. Startup, dismissal and fail-open behavior belong to intro.js. */
.salon-intro {
  --intro-night: #0b102d;
  --intro-ivory: #f1eade;
  --intro-gold: #c0a67e;
  --intro-top: max(12px, env(safe-area-inset-top, 0px));
  --intro-right: max(10px, env(safe-area-inset-right, 0px));
  --intro-bottom: max(12px, env(safe-area-inset-bottom, 0px));
  --intro-left: max(10px, env(safe-area-inset-left, 0px));
  position: fixed;
  inset: 0;
  z-index: 10001;
  display: grid;
  place-items: center;
  width: 100%;
  height: 100vh;
  height: 100dvh;
  padding: var(--intro-top) var(--intro-right) var(--intro-bottom) var(--intro-left);
  overflow: hidden;
  isolation: isolate;
  background: var(--intro-night);
  color: var(--intro-ivory);
  pointer-events: auto;
  touch-action: none;
  overscroll-behavior: contain;
  contain: layout paint;
}
.salon-intro[hidden] { display: none !important; }
html.intro-active {
  overflow: hidden;
  scrollbar-gutter: stable;
  overscroll-behavior: none;
}
.intro-stage {
  position: relative;
  width: min(520px, 100%, calc((100vh - var(--intro-top) - var(--intro-bottom)) * .56));
  width: min(520px, 100%, calc((100dvh - var(--intro-top) - var(--intro-bottom)) * .56));
  height: 100%;
  max-height: min(960px, calc((100vw - var(--intro-left) - var(--intro-right)) * 2.15));
  isolation: isolate;
}
.intro-stage > .intro-frame {
  position: absolute;
  inset: 0;
  z-index: 0;
  display: block;
  width: 100%;
  max-width: none;
  height: 100%;
  object-fit: fill;
  opacity: 0;
  pointer-events: none;
}
.intro-title,
.intro-art {
  position: absolute;
  z-index: 1;
  left: 8%;
  width: 84%;
  margin: 0;
  opacity: 0;
  pointer-events: none;
  transform-origin: center;
}
.intro-title {
  top: 8.8%;
  height: 30.6%;
}
.intro-art {
  top: 41.2%;
  left: 9%;
  width: 82%;
  height: 42.5%;
}
.intro-title > img,
.intro-art > img {
  display: block;
  width: 100%;
  max-width: 100%;
  height: 100%;
  margin: 0;
  object-fit: contain;
  object-position: center;
  mix-blend-mode: normal;
}
.intro-signature {
  position: absolute;
  z-index: 1;
  bottom: 7.3%;
  left: 12%;
  right: 12%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 13px;
  margin: 0;
  color: var(--intro-ivory);
  opacity: 0;
  pointer-events: none;
}
.intro-signature > svg {
  display: block;
  width: 118px;
  max-width: 54%;
  height: 17px;
  margin: 0;
  overflow: visible;
  color: var(--intro-gold);
  fill: none;
  stroke: currentColor;
  stroke-width: .85;
}
.intro-signature > span {
  display: block;
  font-family: var(--serif, Georgia, 'Times New Roman', serif);
  font-size: clamp(11px, 1.35vw, 14px);
  font-weight: 500;
  line-height: 1.4;
  letter-spacing: .24em;
  text-align: center;
  white-space: nowrap;
}

/* The root animation is the single completion signal consumed by intro.js. */
.salon-intro.intro-running {
  will-change: opacity;
  animation: salon-intro-out 1600ms linear both;
}
.salon-intro.intro-running .intro-stage {
  will-change: transform;
  animation: salon-stage-out 1600ms linear both;
}
.salon-intro.intro-running .intro-title {
  will-change: opacity, transform;
  animation: salon-title-enter 350ms cubic-bezier(.22, .61, .36, 1) both;
}
.salon-intro.intro-running .intro-art {
  will-change: opacity, transform;
  animation: salon-art-enter 300ms cubic-bezier(.22, .61, .36, 1) 350ms both;
}
.salon-intro.intro-running .intro-frame {
  animation: salon-frame-presence 1540ms linear both;
}
.salon-intro.intro-running .intro-signature {
  animation: salon-signature-presence 1540ms linear both;
}
@keyframes salon-title-enter {
  from { opacity: 0; transform: translateY(6px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes salon-art-enter {
  from { opacity: 0; transform: translateY(6px) scale(.985); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}
@keyframes salon-frame-presence {
  0% { opacity: 0; animation-timing-function: cubic-bezier(.22, .61, .36, 1); }
  22.7273%, 61.039% { opacity: .84; }
  61.039% { animation-timing-function: cubic-bezier(.4, 0, .2, 1); }
  100% { opacity: 0; }
}
@keyframes salon-signature-presence {
  0%, 25.974% { opacity: 0; animation-timing-function: cubic-bezier(.22, .61, .36, 1); }
  42.2078%, 61.039% { opacity: 1; }
  61.039% { animation-timing-function: cubic-bezier(.4, 0, .2, 1); }
  100% { opacity: 0; }
}
@keyframes salon-intro-out {
  0%, 62.5% { opacity: 1; }
  62.5% { animation-timing-function: cubic-bezier(.4, 0, .2, 1); }
  100% { opacity: 0; }
}
@keyframes salon-stage-out {
  0%, 62.5% { transform: translateY(0); }
  62.5% { animation-timing-function: cubic-bezier(.4, 0, .2, 1); }
  100% { transform: translateY(-6px); }
}

@media (max-width: 370px) {
  .intro-title { left: 7.5%; width: 85%; }
  .intro-signature { left: 10%; right: 10%; gap: 10px; }
  .intro-signature > span { font-size: 11px; letter-spacing: .2em; }
}
@media (orientation: landscape) and (max-height: 600px) {
  .salon-intro { --intro-top: max(8px, env(safe-area-inset-top, 0px)); --intro-bottom: max(8px, env(safe-area-inset-bottom, 0px)); }
  .intro-title { top: 9.5%; height: 30%; }
  .intro-art { top: 41%; height: 43%; }
  .intro-signature { bottom: 7%; left: 8%; right: 8%; gap: 5px; }
  .intro-signature > svg { width: 75px; height: 11px; }
  .intro-signature > span { font-size: 11px; letter-spacing: .12em; }
}
@media (prefers-reduced-motion: reduce) {
  .salon-intro.intro-running { animation-duration: 1ms; }
  .salon-intro.intro-running .intro-stage,
  .salon-intro.intro-running .intro-title,
  .salon-intro.intro-running .intro-art,
  .salon-intro.intro-running .intro-frame,
  .salon-intro.intro-running .intro-signature { animation: none; opacity: 1; transform: none; }
}
@media print {
  .salon-intro { display: none !important; }
  html.intro-active { overflow: visible; }
}
