#ts-loader {
  position: fixed;
  inset: 0;
  z-index: 999999;
  background: #0a0a0a; /* Slightly deeper luxury black */
  display: flex;
  flex-direction: column; /* Stacks vessel and text cleanly */
  align-items: center;
  justify-content: center;
  gap: 24px; /* Perfectly calculated minimal spacing */
  overflow: hidden;
  will-change: transform;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}

/* ── The vessel ─────────────────────────────── */
.ld-vessel {
  position: relative;
  width: 72px; /* Marginally downscaled for a more elegant, high-end feel */
  height: 72px;
}

/* Outer circle border — the glass container */
.ld-vessel::before {
  content: '';
  position: absolute;
  inset: -8px;
  border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, 0.05); /* Softer, highly premium boundary */
}

/* Ghost logo — dimmed, always visible as the empty container */
.ld-ghost {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: contain;
  border-radius: 50%;
  opacity: 0.06; /* Ghosted back even more for higher contrast with fill */
  filter: grayscale(1) brightness(0.5);
}

/* Clip wrapper — this is what rises */
.ld-fill {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  overflow: hidden;
  clip-path: inset(100% 0 0 0 round 50%);
  will-change: clip-path;
}

.ld-fill img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: contain;
  border-radius: 50%;
}

/* ── Water surface — the meniscus ───────────── */
.ld-meniscus {
  position: absolute;
  left: -2px;
  right: -2px;
  height: 1.5px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.6);
  filter: blur(0.4px);
  pointer-events: none;
  opacity: 0;
  will-change: bottom, opacity;
  z-index: 3;
}

/* ── Top-Tier Minimal Brand Tagline ────────── */
.ld-brand-wrap {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  opacity: 0;
  transform: translateY(6px);
  /* Uses CSS transitions triggered smoothly via JS */
  transition: opacity 0.8s cubic-bezier(0.215, 0.610, 0.355, 1), 
              transform 0.8s cubic-bezier(0.215, 0.610, 0.355, 1);
}

/* Becomes active smoothly alongside the filling sequence */
.ld-brand-wrap.active {
  opacity: 1;
  transform: translateY(0);
}

.ld-brand-name {
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.45); /* Low-lit, off-color branding */
}

.ld-brand-tag {
  font-size: 9px;
  font-weight: 400;
  letter-spacing: 0.05em;
  color: rgba(255, 255, 255, 0.2); /* Hyper-muted subtle tagline */
}

/* ── Exit ───────────────────────────────────── */
#ts-loader.ts-exit {
  animation: ldExit 0.9s cubic-bezier(0.85, 0, 0.15, 1) forwards;
}
@keyframes ldExit {
  to { transform: translateY(-100%); }
}

/* ── Page reveal ────────────────────────────── */
[data-reveal] {
  clip-path: inset(100% 0 0 0);
  will-change: clip-path;
}
body.ts-revealed [data-reveal] {
  animation: ldReveal 0.9s cubic-bezier(0.85, 0, 0.15, 1) forwards;
}
@keyframes ldReveal {
  from { clip-path: inset(100% 0 0 0); }
  to   { clip-path: inset(0% 0 0 0); }
}