/* ==========================================================================
   Deccanvalley — launch curtain (entrance layer only)
   Self-contained: removing this file, js/curtain.js and the #curtain markup
   leaves the site exactly as it was.
   ========================================================================== */
.curtain { display: none; }
html.dv-curtain, html.dv-curtain body { overflow: hidden; }
html.dv-curtain .curtain, html.dv-curtain-out .curtain {
  --mag: #CC227B;
  --fold: clamp(38px, 6.6vw, 118px);
  position: fixed; inset: 0; z-index: 2147482000; display: block; overflow: hidden;
  width: 100vw; height: 100vh; height: 100dvh;
  color: #F2EFE8; isolation: isolate; contain: layout paint;
  transition: opacity .7s cubic-bezier(.2,.7,.2,1);
}

/* dim stage veil over the site: lifts as the curtains part */
.curtain__veil { position: absolute; inset: 0; z-index: 0; background: radial-gradient(70% 90% at 50% 45%, rgba(23,25,30,.55), rgba(10,11,14,.92)); transition: opacity 1.6s cubic-bezier(.4,0,.2,1) .5s; }

/* light behind the seam */
.curtain__light { position: absolute; z-index: 1; left: 50%; top: -10%; width: 60vw; height: 120%; transform: translateX(-50%) scaleX(.04); opacity: 0;
  background: radial-gradient(50% 50% at 50% 50%, rgba(255,246,236,.55), rgba(255,232,242,.18) 45%, rgba(255,232,242,0) 72%);
  pointer-events: none; mix-blend-mode: screen; }

/* ---------- the two panels of fabric ---------- */
.curtain__panel { position: absolute; top: 0; bottom: 0; z-index: 2; width: calc(50% + 1px); will-change: transform;
  background-color: #8A1554;
  background-image:
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 .55 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>"),
    linear-gradient(180deg, rgba(18,3,10,.62) 0%, rgba(18,3,10,.12) 16%, rgba(18,3,10,0) 34%, rgba(18,3,10,0) 66%, rgba(18,3,10,.28) 88%, rgba(18,3,10,.6) 100%),
    repeating-linear-gradient(90deg,
      rgba(25,2,12,.56) 0,
      rgba(25,2,12,.18) calc(var(--fold) * .16),
      rgba(255,214,232,.10) calc(var(--fold) * .38),
      rgba(255,228,240,.20) calc(var(--fold) * .47),
      rgba(255,214,232,.06) calc(var(--fold) * .58),
      rgba(25,2,12,.22) calc(var(--fold) * .82),
      rgba(25,2,12,.56) var(--fold)),
    repeating-linear-gradient(90deg, rgba(0,0,0,0) 0, rgba(20,0,10,.22) calc(var(--fold) * 1.7), rgba(0,0,0,0) calc(var(--fold) * 2.9)),
    linear-gradient(90deg, #4E0B2E 0%, #9A1A5E 30%, var(--mag) 62%, #A51C63 100%);
  background-size: 160px 160px, 100% 100%, auto, auto, 100% 100%;
  background-blend-mode: soft-light, normal, normal, normal, normal;
}
.curtain__panel--l { left: 0; transform-origin: 0 50%; box-shadow: inset -26px 0 34px -16px rgba(18,2,10,.75); }
.curtain__panel--r { right: 0; transform-origin: 100% 50%; box-shadow: inset 26px 0 34px -16px rgba(18,2,10,.75);
  background-image:
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 .55 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>"),
    linear-gradient(180deg, rgba(18,3,10,.62) 0%, rgba(18,3,10,.12) 16%, rgba(18,3,10,0) 34%, rgba(18,3,10,0) 66%, rgba(18,3,10,.28) 88%, rgba(18,3,10,.6) 100%),
    repeating-linear-gradient(270deg,
      rgba(25,2,12,.56) 0,
      rgba(25,2,12,.18) calc(var(--fold) * .16),
      rgba(255,214,232,.10) calc(var(--fold) * .38),
      rgba(255,228,240,.20) calc(var(--fold) * .47),
      rgba(255,214,232,.06) calc(var(--fold) * .58),
      rgba(25,2,12,.22) calc(var(--fold) * .82),
      rgba(25,2,12,.56) var(--fold)),
    repeating-linear-gradient(270deg, rgba(0,0,0,0) 0, rgba(20,0,10,.22) calc(var(--fold) * 1.7), rgba(0,0,0,0) calc(var(--fold) * 2.9)),
    linear-gradient(270deg, #4E0B2E 0%, #9A1A5E 30%, var(--mag) 62%, #A51C63 100%);
}
/* leading edge: a rolled hem catching the light, meeting at the seam */
.curtain__panel::after { content: ""; position: absolute; top: 0; bottom: 0; width: 14px;
  background: linear-gradient(90deg, rgba(255,226,238,.0), rgba(255,226,238,.22) 45%, rgba(40,4,20,.55)); }
.curtain__panel--l::after { right: 0; }
.curtain__panel--r::after { left: 0; transform: scaleX(-1); }
/* pooled hem at the floor */
.curtain__panel::before { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 9vh;
  background: linear-gradient(180deg, rgba(255,220,236,0), rgba(255,220,236,.07) 40%, rgba(16,2,9,.55)); }

/* valance across the top */
.curtain__valance { position: absolute; z-index: 3; left: 0; right: 0; top: 0; height: clamp(54px, 10vh, 104px); will-change: transform;
  background:
    repeating-linear-gradient(90deg, rgba(20,0,10,.35) 0, rgba(255,220,236,.12) calc(var(--fold) * .25), rgba(20,0,10,.3) calc(var(--fold) * .5)),
    linear-gradient(180deg, #3F0925, #8A1554 70%, #6B1041);
  -webkit-mask: radial-gradient(calc(var(--fold) * .9) 26px at 50% 0, #000 98%, transparent) 0 100% / calc(var(--fold) * 1.8) 52px repeat-x, linear-gradient(#000, #000) 0 0 / 100% calc(100% - 26px) no-repeat;
          mask: radial-gradient(calc(var(--fold) * .9) 26px at 50% 0, #000 98%, transparent) 0 100% / calc(var(--fold) * 1.8) 52px repeat-x, linear-gradient(#000, #000) 0 0 / 100% calc(100% - 26px) no-repeat;
  filter: drop-shadow(0 10px 14px rgba(12,1,7,.55)); }
.curtain__valance::after { content: ""; position: absolute; left: 0; right: 0; bottom: 30px; height: 1px; background: rgba(242,239,232,.28); }

/* ---------- centre branding ---------- */
.curtain__content { position: absolute; z-index: 4; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: clamp(18px, 3vh, 28px);
  padding: clamp(80px, 14vh, 140px) 24px max(40px, env(safe-area-inset-bottom)); text-align: center;
  transition: opacity .55s cubic-bezier(.2,.7,.2,1), transform .8s cubic-bezier(.2,.7,.2,1); }
.curtain__content::before { content: ""; position: absolute; z-index: -1; left: 50%; top: 50%; width: min(720px, 120vw); height: min(560px, 90vh); transform: translate(-50%, -50%);
  background: radial-gradient(closest-side, rgba(30,3,16,.62), rgba(30,3,16,.25) 60%, rgba(30,3,16,0)); pointer-events: none; }
.curtain__logo { width: clamp(150px, min(19vw, 26vh), 230px); height: auto; filter: drop-shadow(0 6px 18px rgba(10,0,6,.45)); }
.curtain__title { font-family: var(--serif, "Instrument Serif", Georgia, serif); font-weight: 400; font-size: clamp(42px, 6.4vw, 92px); line-height: .95; letter-spacing: -.015em; text-shadow: 0 4px 30px rgba(12,1,7,.5); }
.curtain__rule { width: 48px; height: 1px; background: rgba(242,239,232,.45); }
.curtain__hint { font-family: var(--mono, "Geist Mono", ui-monospace, monospace); font-size: 11px; letter-spacing: .24em; text-transform: uppercase; color: rgba(242,239,232,.78); }

.curtain__btn { position: relative; display: inline-flex; align-items: center; justify-content: center; min-width: 200px; min-height: 52px; padding: 0 34px;
  border: 1px solid rgba(242,239,232,.72); border-radius: 999px; background: rgba(30,3,16,.28); color: #F2EFE8; cursor: pointer;
  -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px);
  font-family: var(--sans, "Geist", system-ui, sans-serif); font-size: 12.5px; font-weight: 500; letter-spacing: .32em; text-indent: .32em; text-transform: uppercase;
  box-shadow: 0 0 0 0 rgba(242,239,232,.0), 0 0 34px rgba(255,214,232,.16), inset 0 0 18px rgba(255,214,232,.08);
  transition: transform .5s cubic-bezier(.2,.7,.2,1), background .4s, border-color .4s, box-shadow .5s; }
.curtain__btn::after { content: ""; position: absolute; inset: -7px; border-radius: inherit; border: 1px solid rgba(242,239,232,.25); animation: curtain-breathe 3.2s ease-in-out infinite; pointer-events: none; }
.curtain__btn:hover { transform: scale(1.045); background: rgba(242,239,232,.12); border-color: #F2EFE8; box-shadow: 0 0 0 0 rgba(242,239,232,0), 0 0 48px rgba(255,214,232,.32), inset 0 0 22px rgba(255,214,232,.14); }
.curtain__btn:active { transform: scale(.98); }
.curtain__btn:focus-visible { outline: 2px solid #F2EFE8; outline-offset: 6px; }
@keyframes curtain-breathe { 0%, 100% { opacity: .25; transform: scale(.97); } 50% { opacity: .9; transform: scale(1.03); } }

/* entrance: content settles in once */
html.dv-curtain .curtain__content > * { animation: curtain-rise 1.2s cubic-bezier(.2,.7,.2,1) both; }
html.dv-curtain .curtain__content > :nth-child(2) { animation-delay: .12s; }
html.dv-curtain .curtain__content > :nth-child(3) { animation-delay: .24s; }
html.dv-curtain .curtain__content > :nth-child(4) { animation-delay: .34s; }
html.dv-curtain .curtain__content > :nth-child(5) { animation-delay: .44s; }
@keyframes curtain-rise { from { opacity: 0; transform: translateY(16px); } }

/* ---------- opening ---------- */
.curtain.is-open { pointer-events: none; }
.curtain.is-open .curtain__content { opacity: 0; transform: scale(.97); }
.curtain.is-open .curtain__veil { opacity: 0; }
.curtain.is-open .curtain__light { animation: curtain-light 2.3s cubic-bezier(.4,0,.2,1) .15s forwards; }
.curtain.is-open .curtain__panel--l { animation: curtain-l 2.2s cubic-bezier(.66,0,.18,1) .25s forwards; }
.curtain.is-open .curtain__panel--r { animation: curtain-r 2.2s cubic-bezier(.66,0,.18,1) .25s forwards; }
.curtain.is-open .curtain__valance { transition: transform 1s cubic-bezier(.6,0,.2,1) 1.7s, opacity .8s ease 1.9s; transform: translateY(-110%); opacity: 0; }
.curtain.is-gone { opacity: 0; }

@keyframes curtain-l {
  0%   { transform: none; }
  12%  { transform: translateX(-.8%) scaleX(1.01); }
  100% { transform: translateX(-3%) scaleX(.07); }
}
@keyframes curtain-r {
  0%   { transform: none; }
  12%  { transform: translateX(.8%) scaleX(1.01); }
  100% { transform: translateX(3%) scaleX(.07); }
}
@keyframes curtain-light {
  0%   { opacity: 0; transform: translateX(-50%) scaleX(.04); }
  25%  { opacity: 1; transform: translateX(-50%) scaleX(.35); }
  100% { opacity: 0; transform: translateX(-50%) scaleX(2.2); }
}

/* reduced motion: a short, calm fade instead of the full sequence */
@media (prefers-reduced-motion: reduce) {
  html.dv-curtain .curtain__content > *, .curtain__btn::after { animation: none; }
  .curtain.is-open .curtain__panel--l, .curtain.is-open .curtain__panel--r, .curtain.is-open .curtain__light { animation: none; }
  .curtain.is-open .curtain__valance { transition: none; }
  .curtain.is-open { opacity: 0; transition: opacity .45s ease; }
  .curtain__btn:hover { transform: none; }
}
@media (max-width: 560px) {
  .curtain__btn { min-width: 180px; min-height: 54px; }
  .curtain__hint { letter-spacing: .2em; }
}
