/* =========================================================
   Quantum Success Club — Coming Soon
   Cosmic-luxury / atomic. Gold on deep black. "James Bond"-edel.
   ========================================================= */

:root {
  --black:        #000000;
  --gold:         #d4af37;
  --gold-soft:    #c9a227;
  --gold-bright:  #f3d488;
  --off-white:    #f3efe6;
  --muted:        rgba(243, 239, 230, 0.55);

  --ls-wide:   0.42em;
  --ls-wider:  0.58em;

  --ease: cubic-bezier(0.22, 1, 0.36, 1);

  /* parallax offsets, driven by JS */
  --px: 0px;
  --py: 0px;
  /* scroll-driven parallax (set on <body> by JS) */
  --scroll: 0;
}

* { box-sizing: border-box; margin: 0; padding: 0; }

/* Accessible visually-hidden: readable by crawlers + screen readers,
   invisible on screen. Used for the GEO definition sentence. */
.visually-hidden {
  position: absolute !important;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

html { -webkit-text-size-adjust: 100%; }

body {
  min-height: 100vh;
  min-height: 100dvh;
  background: radial-gradient(ellipse 120% 90% at 50% 30%, #14110a 0%, #070604 44%, #000000 100%);
  color: var(--off-white);
  font-family: "Montserrat", -apple-system, BlinkMacSystemFont, sans-serif;
  font-weight: 300;
  overflow-x: hidden;
  position: relative;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

/* ---------- Background layers ---------- */
#cosmos {
  position: fixed;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 0;
  display: block;
}

/* Far starfield: a slow, deep layer of static points rendered with two
   radial-gradient "dust" fields. It drifts on mouse + scroll at a slower
   rate than the canvas orbits and the logo, creating real depth parallax.
   GPU-cheap: only transform/opacity animate. */
.stars-far {
  position: fixed;
  inset: -8%;
  z-index: 0;
  pointer-events: none;
  opacity: 0;
  background-image:
    radial-gradient(1.4px 1.4px at 18% 32%, rgba(243,212,136,0.55), transparent 60%),
    radial-gradient(1.1px 1.1px at 73% 18%, rgba(255,255,255,0.45), transparent 60%),
    radial-gradient(1.6px 1.6px at 42% 71%, rgba(255,255,255,0.40), transparent 60%),
    radial-gradient(1.2px 1.2px at 88% 64%, rgba(243,212,136,0.42), transparent 60%),
    radial-gradient(1px 1px at 9% 84%, rgba(255,255,255,0.36), transparent 60%),
    radial-gradient(1.3px 1.3px at 61% 48%, rgba(255,255,255,0.30), transparent 60%),
    radial-gradient(1px 1px at 31% 12%, rgba(243,212,136,0.34), transparent 60%),
    radial-gradient(1.1px 1.1px at 52% 91%, rgba(255,255,255,0.32), transparent 60%);
  transform: translate3d(var(--px), calc(var(--py) + var(--scroll) * -36px), 0);
  animation: fade-stars 2.4s var(--ease) 0.35s forwards, drift-far 64s linear infinite;
  will-change: transform, opacity;
}

/* Subtle film grain for atmosphere (SVG noise, GPU-cheap, fixed) */
.grain {
  position: fixed;
  inset: -50%;
  z-index: 1;
  pointer-events: none;
  opacity: 0.05;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  mix-blend-mode: overlay;
}

.vignette {
  position: fixed;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background:
    radial-gradient(ellipse 75% 60% at 50% 36%, transparent 38%, rgba(0,0,0,0.55) 100%),
    linear-gradient(to bottom, rgba(0,0,0,0.40) 0%, transparent 20%, transparent 76%, rgba(0,0,0,0.72) 100%);
}

/* ---------- Stage layout ---------- */
.stage {
  position: relative;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: clamp(3.5rem, 8vh, 7rem) 1.5rem 8.5rem;
  min-height: 100vh;
  min-height: 100dvh;
}

.inner {
  width: 100%;
  max-width: 760px;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  /* gentle scroll-coupled lift + fade so the short page still "breathes"
     as you scroll toward the footer. transform/opacity only. */
  transform: translate3d(0, calc(var(--scroll) * -22px), 0);
  will-change: transform;
}

/* ---------- Logo (the "nucleus") ---------- */
.brand {
  position: relative;
  display: flex;
  justify-content: center;
}

.logo-wrap {
  position: relative;
  width: clamp(230px, 56vw, 440px);
  aspect-ratio: 1 / 1;
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  transform: translate3d(var(--px), calc(18px + var(--py)), 0) scale(0.97);
  animation: rise 1.7s var(--ease) 0.15s forwards;
  will-change: transform;
}

/* soft radiant core glow behind the mark */
.logo-halo {
  position: absolute;
  inset: 2%;
  border-radius: 50%;
  background: radial-gradient(circle at 50% 48%,
    rgba(243,212,136,0.34) 0%,
    rgba(212,175,55,0.16) 34%,
    rgba(212,175,55,0.04) 56%,
    transparent 70%);
  filter: blur(22px);
  animation: breathe 7s ease-in-out infinite;
  will-change: opacity, transform;
}

/* thin rotating conic gold sheen — a soft crafted orbital edge to the mark.
   Feathered mask band (no hard ring) so it reads as light, not a disc. */
.logo-ring {
  position: absolute;
  inset: -2%;
  border-radius: 50%;
  background: conic-gradient(from 0deg,
    transparent 0deg,
    rgba(243,212,136,0.0) 50deg,
    rgba(243,212,136,0.55) 96deg,
    rgba(212,175,55,0.0) 160deg,
    transparent 250deg,
    rgba(212,175,55,0.32) 322deg,
    transparent 360deg);
  -webkit-mask: radial-gradient(circle, transparent 60%, #000 70%, transparent 80%);
  mask: radial-gradient(circle, transparent 60%, #000 70%, transparent 80%);
  filter: blur(1.5px);
  opacity: 0.6;
  animation: spin 26s linear infinite;
  will-change: transform;
}

.logo {
  position: relative;
  z-index: 2;
  width: 100%;
  height: auto;
  /* Current asset is qsc-logo-black.jpg (opaque, black background).
     screen blend melts the dark field into the live canvas behind it, so the
     golden orbits of the animation read THROUGH and around the mark; a radial
     mask feathers the square JPEG edge to nothing so the outer orbits are not
     clipped by a visible box.
     TODO: transparentes weisses QSC-Logo einsetzen (von Martin), dann Maske
     entfernen (mix-blend-mode + mask-image loeschen, dann scheint die
     Animation direkt durch die transparenten Logo-Flaechen). */
  mix-blend-mode: screen;
  -webkit-mask-image: radial-gradient(circle at 50% 50%, #000 50%, rgba(0,0,0,0.55) 68%, transparent 84%);
  mask-image: radial-gradient(circle at 50% 50%, #000 50%, rgba(0,0,0,0.55) 68%, transparent 84%);
  filter: drop-shadow(0 0 28px rgba(212,175,55,0.20));
  user-select: none;
  -webkit-user-drag: none;
}

/* ---------- Text-Logo (ersetzt das Bild-Logo) ---------- */
.logo-mark {
  position: relative;
  z-index: 2;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: clamp(0.5rem, 1.6vw, 1rem);
  text-align: center;
  user-select: none;
}
.logo-qsc {
  font-family: "Cinzel", serif;
  font-weight: 700;
  font-size: clamp(3.4rem, 13vw, 8rem);
  line-height: 0.92;
  letter-spacing: 0.06em;
  padding-left: 0.06em;
  background: linear-gradient(100deg, #f6e6b4 0%, #d4af37 40%, #f3d488 60%, #b8902c 100%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: var(--gold);
  text-shadow: 0 0 50px rgba(212,175,55,0.18);
}
.logo-name {
  font-family: "Montserrat", sans-serif;
  font-weight: 500;
  font-size: clamp(0.6rem, 1.9vw, 1rem);
  letter-spacing: 0.42em;
  padding-left: 0.42em;
  text-transform: uppercase;
  color: rgba(243,212,136,0.82);
}

/* ---------- Claim ---------- */
.claim {
  font-family: "Cinzel", serif;
  font-weight: 600;
  font-size: clamp(1.4rem, 5.6vw, 3.4rem);
  line-height: 1.12;
  letter-spacing: 0.05em;
  overflow-wrap: break-word;
  width: 100%;
  max-width: 100%;
  margin-top: clamp(0.4rem, 2vh, 1.6rem);
  background: linear-gradient(100deg, #f6e6b4 0%, #d4af37 38%, #f3d488 58%, #b8902c 100%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: var(--gold);
  text-shadow: 0 0 40px rgba(212,175,55,0.10);
  transform: translate3d(var(--px), var(--py), 0);
  opacity: 0;
  animation: rise 1.5s var(--ease) 0.6s forwards;
}

.subtitle {
  font-family: "Cormorant Garamond", serif;
  font-style: italic;
  font-weight: 400;
  font-size: clamp(1rem, 2.6vw, 1.5rem);
  color: var(--off-white);
  letter-spacing: 0.02em;
  margin-top: clamp(0.7rem, 2vh, 1.15rem);
  opacity: 0;
  animation: rise 1.5s var(--ease) 0.85s forwards;
}

/* ---------- Divider ---------- */
.divider {
  position: relative;
  width: min(280px, 60%);
  height: 1px;
  margin: clamp(1.8rem, 5vh, 3rem) 0 clamp(1.4rem, 4vh, 2.2rem);
  background: linear-gradient(to right, transparent, rgba(212,175,55,0.55), transparent);
  opacity: 0;
  animation: fade 1.6s var(--ease) 1.1s forwards;
}

.divider .dot {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--gold-bright);
  transform: translate(-50%, -50%);
  box-shadow: 0 0 10px 2px rgba(212,175,55,0.7);
}

/* ---------- Status ---------- */
.status {
  font-family: "Montserrat", sans-serif;
  font-weight: 400;
  font-size: clamp(0.95rem, 3.2vw, 1.45rem);
  text-transform: uppercase;
  letter-spacing: var(--ls-wider);
  text-indent: var(--ls-wider); /* compensate trailing letter-spacing for centering */
  background: linear-gradient(100deg, #b8902c 0%, #f3d488 30%, #ffffff 50%, #f3d488 70%, #b8902c 100%);
  background-size: 220% auto;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: var(--gold);
  animation: shimmer 6.5s linear infinite, fade 1.6s var(--ease) 1.25s backwards;
}

.invite-note {
  font-family: "Cormorant Garamond", serif;
  font-style: italic;
  font-size: clamp(0.9rem, 2.2vw, 1.15rem);
  color: var(--muted);
  letter-spacing: 0.03em;
  margin-top: clamp(0.9rem, 2.5vh, 1.4rem);
  opacity: 0;
  animation: fade 1.6s var(--ease) 1.45s forwards;
}

/* ---------- Footer ---------- */
.footer {
  position: relative;
  z-index: 2;
  text-align: center;
  padding: 0 1.5rem clamp(2rem, 5vh, 3rem);
  margin-top: -5rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.6rem;
  opacity: 0;
  animation: fade 2s var(--ease) 1.9s forwards;
}

/* WU crest sits cleanly on the black footer.
   Source is wu-logo.jpeg (WHITE background, dark wordmark) — on black it would
   read as a "cut-out" white square. We only want the heraldic emblem, so we
   crop to its top portion, feather the square edge into the black via a radial
   mask, and use mix-blend-mode:screen so the white field drops to transparent.
   A soft dark coin behind keeps the centre grounded on pure black. */
.wu-coin {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: clamp(46px, 9vw, 62px);
  height: clamp(46px, 9vw, 62px);
  border-radius: 50%;
  overflow: hidden;
}
.wu-coin::before {
  content: "";
  position: absolute;
  inset: -18%;
  border-radius: 50%;
  background: radial-gradient(circle at 50% 50%,
    rgba(212,175,55,0.10) 0%,
    rgba(0,0,0,0) 70%);
  pointer-events: none;
}
.wu-crest {
  width: 150%;          /* crop in: drop the lower wordmark, keep the emblem */
  height: auto;
  margin-top: -8%;
  object-fit: cover;
  /* white background -> transparent on black; feather the square edge */
  mix-blend-mode: screen;
  -webkit-mask-image: radial-gradient(circle at 50% 42%, #000 46%, rgba(0,0,0,0.5) 64%, transparent 78%);
  mask-image: radial-gradient(circle at 50% 42%, #000 46%, rgba(0,0,0,0.5) 64%, transparent 78%);
  opacity: 0.62;
  transition: opacity 0.5s var(--ease);
}
.wu-coin:hover .wu-crest { opacity: 0.9; }

.footer-meta {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.45rem;
  margin-top: 0.4rem;
}

.copyright {
  font-family: "Montserrat", sans-serif;
  font-size: 0.62rem;
  text-transform: uppercase;
  letter-spacing: 0.28em;
  color: rgba(243,239,230,0.4);
}

.footer-links {
  font-family: "Montserrat", sans-serif;
  font-size: 0.6rem;
  text-transform: uppercase;
  letter-spacing: 0.22em;
  display: flex;
  align-items: center;
  gap: 0.65rem;
}
.footer-links a {
  color: rgba(243,239,230,0.4);
  text-decoration: none;
  transition: color 0.4s var(--ease);
}
.footer-links a:hover { color: var(--gold); }
.footer-links .sep { color: rgba(212,175,55,0.4); }

/* ---------- Animations ---------- */
@keyframes rise   { to { opacity: 1; transform: translate3d(var(--px), var(--py), 0) scale(1); } }
@keyframes fade   { to { opacity: 1; } }
@keyframes fade-stars { to { opacity: 1; } }
@keyframes breathe{ 0%,100% { opacity: 0.7; transform: scale(1); } 50% { opacity: 1; transform: scale(1.06); } }
@keyframes spin   { to { transform: rotate(360deg); } }
@keyframes shimmer{ 0% { background-position: 200% center; } 100% { background-position: -20% center; } }
/* very slow lateral drift for the far star layer; transform-only, 60fps */
@keyframes drift-far {
  0%   { background-position: 0 0, 0 0, 0 0, 0 0, 0 0, 0 0, 0 0, 0 0; }
  100% { background-position: -40px 18px, 26px -22px, -30px 24px, 20px 16px, -18px -28px, 24px 20px, -22px 26px, 18px -20px; }
}

/* ---------- Responsive ---------- */
@media (max-width: 540px) {
  .footer { margin-top: -3rem; }
  :root { --ls-wider: 0.4em; }
}
@media (min-width: 1100px) {
  .inner { max-width: 820px; }
}

/* ---------- Reduced motion: elegant static frame ---------- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
  }
  .logo-wrap, .claim, .subtitle, .divider, .status,
  .invite-note, .footer, .inner { opacity: 1 !important; transform: none !important; }
  .stars-far { opacity: 1 !important; transform: none !important; }
  .logo-ring { opacity: 0.5; }
}

/* QSC: Animation hinter dem Logo entfernt (Adrian-Wunsch 30.06.2026).
   Canvas-Atome + rotierender Ring raus, Halo als statischer Glow, Sterne statisch. */
#cosmos { display: none !important; }
.logo-ring { display: none !important; }
.logo-halo { animation: none !important; opacity: 0.85 !important; transform: none !important; }
.stars-far { animation: none !important; opacity: 1 !important; transform: none !important; }

/* QSC: sauber schwarz - Maskenkante um das Logo entfernt (Daniel 30.06.).
   screen-Blend bleibt, damit der schwarze Logo-Grund nahtlos in den Seiten-Schwarz uebergeht. */
.logo { -webkit-mask-image: none !important; mask-image: none !important; }

/* QSC: sauber schwarz final - keine Blend/Glow-Wechselwirkung mehr, Logo blendet selbst per Vignette ins Schwarz. */
.logo { mix-blend-mode: normal !important; -webkit-mask-image: none !important; mask-image: none !important; }
.logo-halo, .logo-ring { display: none !important; }

/* QSC Footer: weisses Weinstock-Wappen (Daniel 01.07.), ersetzt das farbige.
   Schon weiss-auf-transparent -> kein Coin-Crop, kein Blend, kein Mask. */
.wu-coin { width: auto !important; height: auto !important; border-radius: 0 !important; overflow: visible !important; }
.wu-coin::before { display: none !important; }
.wu-crest { width: auto !important; height: clamp(66px, 12vw, 92px) !important; margin-top: 0 !important; object-fit: contain !important; mix-blend-mode: normal !important; -webkit-mask-image: none !important; mask-image: none !important; filter: none !important; opacity: 0.95 !important; }
