/* Hallmark · macrostructure: Map / Diagram · theme: Helio dual void
 * nav: tools-only · footer: none · enrichment: atom + moon icons (no HUD shots)
 * pre-emit critique: P5 H5 E5 S5 R5 V4
 */

@font-face {
  font-family: "IBM Plex Sans";
  font-style: normal;
  font-weight: 400 500;
  font-display: swap;
  src: url("/assets/fonts/ibm-plex-sans-latin.woff2") format("woff2");
}

@font-face {
  font-family: "JetBrains Mono";
  font-style: normal;
  font-weight: 400 600;
  font-display: swap;
  src: url("/assets/fonts/jetbrains-mono-latin.woff2") format("woff2");
}

@font-face {
  font-family: "Silkscreen";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/moon/assets/fonts/Silkscreen-Regular.ttf") format("truetype");
}

:root {
  --void: #000000;
  --ink: #f2f5f2;
  --muted: rgba(242, 245, 242, 0.62);
  --neon: #39ff14;
  --cyan: #00d4ff;
  --focus: #c44dff;
  --font-body: "IBM Plex Sans", system-ui, sans-serif;
  --font-mono: "JetBrains Mono", ui-monospace, monospace;
  --font-pixel: "Silkscreen", ui-monospace, monospace;
  --ease: cubic-bezier(0.16, 1, 0.3, 1);
  color-scheme: dark;
}

*, *::before, *::after { box-sizing: border-box; }

html, body {
  overflow-x: clip;
  height: 100%;
}

body {
  margin: 0;
  min-height: 100dvh;
  background: var(--void);
  color: var(--ink);
  font-family: var(--font-body);
  -webkit-font-smoothing: antialiased;
}

::selection {
  background: rgba(57, 255, 20, 0.35);
  color: #fff;
}

a { color: inherit; text-decoration: none; }

/* —— tools —— */
.tools {
  position: fixed;
  top: 0.85rem;
  right: 0.9rem;
  z-index: 40;
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
}

.lang-toggle {
  display: inline-flex;
  border: 1px solid rgba(255, 255, 255, 0.2);
  border-radius: 999px;
  overflow: hidden;
  background: rgba(0, 0, 0, 0.55);
}

.lang-toggle button {
  appearance: none;
  border: 0;
  background: transparent;
  color: rgba(255, 255, 255, 0.6);
  font-family: var(--font-mono);
  font-size: 0.68rem;
  letter-spacing: 0.08em;
  padding: 0.35rem 0.55rem;
  cursor: pointer;
}

.lang-toggle button[aria-pressed="true"] {
  color: #041004;
  background: var(--neon);
}

.lang-toggle button:focus-visible,
.luipy-out:focus-visible,
.door:focus-visible {
  outline: 2px solid var(--focus);
  outline-offset: 3px;
}

.luipy-out {
  font-family: var(--font-mono);
  font-size: 0.68rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: #00ff00;
  padding: 0.35rem 0.6rem;
  border: 1px solid color-mix(in srgb, #00ff00 45%, transparent);
  border-radius: 999px;
  background: rgba(0, 0, 0, 0.55);
}

.luipy-out:hover { color: #b8ffb8; }

/* —— stage: left icon | center links | right icon —— */
.stage {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(16rem, 22rem) minmax(0, 1fr);
  align-items: center;
  min-height: 100dvh;
  min-width: 0;
  padding: 4.5rem 1.25rem 2.5rem;
  gap: 1rem;
}

/* shared black base; nebulas only on Lab side */
.stage::before,
.stage::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
}

.stage::before {
  /* Lab wing — black + visible nebulas */
  background:
    radial-gradient(42% 55% at 18% 42%, rgba(0, 212, 255, 0.28), transparent 62%),
    radial-gradient(38% 48% at 8% 68%, rgba(57, 255, 20, 0.18), transparent 58%),
    radial-gradient(28% 36% at 30% 78%, rgba(255, 180, 84, 0.12), transparent 55%),
    radial-gradient(22% 30% at 4% 28%, rgba(196, 77, 255, 0.1), transparent 50%),
    linear-gradient(90deg, rgba(0, 20, 18, 0.9) 0%, rgba(0, 0, 0, 0) 48%);
}

.stage::after {
  /* soft vignette so icons read on pure black right */
  background: radial-gradient(55% 70% at 82% 50%, rgba(255, 255, 255, 0.03), transparent 60%);
}

.wing {
  position: relative;
  z-index: 1;
  display: grid;
  place-items: center;
  min-width: 0;
  min-height: 0;
  overflow: visible;
}

/* Atom only from operator standalone (no circular ball / nebula disc) */
.wing-lab .atom {
  --atom: min(44vw, 320px);
  width: var(--atom);
  aspect-ratio: 1;
  position: relative;
  overflow: visible;
  background: transparent;
  flex-shrink: 0;
}

.wing-lab .system {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
}

.wing-lab .orbit {
  position: absolute;
  width: 76%;
  height: 37%;
  left: 12%;
  top: 31.5%;
  border-radius: 50%;
  filter: drop-shadow(0 0 4px #05bfe5aa);
}

.wing-lab .orbit::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: var(--orbit-color);
  -webkit-mask: radial-gradient(ellipse closest-side, transparent calc(100% - 4px), #000 100%);
  mask: radial-gradient(ellipse closest-side, transparent calc(100% - 4px), #000 100%);
}

.wing-lab .orbit.a { transform: rotate(10deg); --orbit-color: #0cd7f5; }
.wing-lab .orbit.b { transform: rotate(60deg); --orbit-color: #0aa1b8; }
.wing-lab .orbit.c { transform: rotate(-55deg); --orbit-color: #035263; }

.wing-lab .nucleus {
  position: absolute;
  width: 11%;
  aspect-ratio: 1;
  left: 44.5%;
  top: 44.5%;
  border-radius: 50%;
  background: #03c7f4;
  border: 1px solid #40e9ff;
  box-shadow:
    0 0 0 1px #12dfff33,
    0 0 30px 13px #00d9fc6e,
    0 0 68px 35px #00dcff2b;
  display: grid;
  place-items: center;
}

.wing-lab .nucleus::after {
  content: "";
  width: 37%;
  aspect-ratio: 1;
  border-radius: 50%;
  background: #fff;
  box-shadow: 0 0 0 4px #e2fcffaf, 0 0 12px white;
}

.wing-lab .electron-track {
  position: absolute;
  width: 76%;
  height: 37%;
  left: 12%;
  top: 31.5%;
  border-radius: 50%;
  transform: rotate(var(--angle));
}

.wing-lab .electron {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 3.9%;
  aspect-ratio: 1;
  border-radius: 50%;
  background: white;
  border: 3px solid #54eaff;
  box-shadow: 0 0 0 4px #2ddcff55, 0 0 12px 4px #00dfff;
  offset-path: ellipse(50% 50% at 50% 50%);
  offset-rotate: 0deg;
  animation: atom-travel var(--duration) linear infinite;
  animation-delay: var(--delay);
}

@keyframes atom-travel {
  from { offset-distance: 0%; }
  to { offset-distance: 100%; }
}

/* enter: atom from left, moon from right */

.wing-lab {
  --wing-y: -7vh;
  animation: hub-enter-lab 1.15s var(--ease) 0.08s both;
}

.wing-moon {
  --wing-y: 7vh;
  animation: hub-enter-moon 1.15s var(--ease) 0.22s both;
}


@keyframes hub-enter-lab {
  from {
    opacity: 0;
    transform: translate3d(-16vw, var(--wing-y), 0) scale(0.92);
  }
  to {
    opacity: 1;
    transform: translate3d(0, var(--wing-y), 0) scale(1);
  }
}

@keyframes hub-enter-moon {
  from {
    opacity: 0;
    transform: translate3d(16vw, var(--wing-y), 0) scale(0.92);
  }
  to {
    opacity: 1;
    transform: translate3d(0, var(--wing-y), 0) scale(1);
  }
}

@keyframes hub-enter-center {
  from {
    opacity: 0;
    transform: translate3d(0, 12px, 0);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

.wing-moon .stars {
  position: absolute;
  inset: 8% 10%;
  pointer-events: none;
}

.wing-moon .star {
  position: absolute;
  width: var(--star-size, 2px);
  height: var(--star-size, 2px);
  border-radius: 1px;
  background: #fff;
  box-shadow: 0 0 var(--star-glow, 2px) rgba(255, 255, 255, 0.35);
  opacity: var(--star-min, 0.25);
  animation: star-twinkle var(--twinkle-dur, 4.5s) ease-in-out var(--twinkle-delay, 0s) infinite;
  will-change: opacity, filter;
}

@keyframes star-twinkle {
  0%, 100% {
    opacity: var(--star-min, 0.22);
    filter: brightness(0.85);
  }
  40% {
    opacity: var(--star-max, 0.85);
    filter: brightness(1.35);
  }
  55% {
    opacity: var(--star-max, 0.85);
    filter: brightness(1.2);
  }
  70% {
    opacity: calc((var(--star-min, 0.22) + var(--star-max, 0.85)) / 2);
    filter: brightness(1);
  }
}

.wing-moon .moon {
  width: min(42vw, 320px);
  height: auto;
  image-rendering: pixelated;
  filter: drop-shadow(0 0 18px rgba(255, 255, 255, 0.2));
  /* seno + reposo breve arriba y abajo */
  animation: moon-float 5.6s linear infinite;
  will-change: transform;
}

@keyframes moon-float {
  /* y = -12px * (1 - cos) / 2, con plateaus en 0 y en el pico */
  0%     { transform: translate3d(0, 0, 0); }
  8%     { transform: translate3d(0, 0, 0); }
  12%    { transform: translate3d(0, -0.6px, 0); }
  16%    { transform: translate3d(0, -2.3px, 0); }
  20%    { transform: translate3d(0, -4.9px, 0); }
  24%    { transform: translate3d(0, -7.6px, 0); }
  28%    { transform: translate3d(0, -10px, 0); }
  32%    { transform: translate3d(0, -11.4px, 0); }
  36%    { transform: translate3d(0, -11.9px, 0); }
  40%    { transform: translate3d(0, -12px, 0); }
  50%    { transform: translate3d(0, -12px, 0); }
  60%    { transform: translate3d(0, -12px, 0); }
  64%    { transform: translate3d(0, -11.9px, 0); }
  68%    { transform: translate3d(0, -11.4px, 0); }
  72%    { transform: translate3d(0, -10px, 0); }
  76%    { transform: translate3d(0, -7.6px, 0); }
  80%    { transform: translate3d(0, -4.9px, 0); }
  84%    { transform: translate3d(0, -2.3px, 0); }
  88%    { transform: translate3d(0, -0.6px, 0); }
  92%    { transform: translate3d(0, 0, 0); }
  100%   { transform: translate3d(0, 0, 0); }
}

/* —— center column —— */
.hub {
  position: relative;
  z-index: 2;
  animation: hub-enter-center 0.95s var(--ease) 0.12s both;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 1.35rem;
  min-width: 0;
  padding: 0 0.35rem;
}

.hub-brand {
  margin: 0;
  font-family: var(--font-mono);
  font-style: normal;
  font-weight: 600;
  font-size: clamp(2rem, 5vw, 3rem);
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--neon);
  text-shadow: 0 0 24px rgba(57, 255, 20, 0.35);
  overflow-wrap: anywhere;
}

.hub-lead {
  margin: 0;
  max-width: 22rem;
  font-size: clamp(0.98rem, 2.2vw, 1.1rem);
  line-height: 1.45;
  color: var(--muted);
}

.hub-lead strong {
  color: var(--ink);
  font-weight: 500;
}

.doors {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
  width: min(100%, 18rem);
  margin-top: 0.35rem;
}

.door {
  --frame: rgba(0, 212, 255, 0.72);
  --frame-mid: rgba(0, 212, 255, 0.55);
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.28rem;
  width: 100%;
  padding: 0.95rem 1.15rem;
  border: 0;
  background-color: rgba(0, 0, 0, 0.28);
  /* open mid rails (gaps at corners) */
  background-image:
    linear-gradient(var(--frame-mid), var(--frame-mid)),
    linear-gradient(var(--frame-mid), var(--frame-mid));
  background-size: 42% 1px, 42% 1px;
  background-position: center top, center bottom;
  background-repeat: no-repeat;
  text-align: left;
  transition: background-color 0.2s var(--ease), transform 0.2s var(--ease), filter 0.2s var(--ease);
}

.door::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  /* corner brackets only — open sides */
  background:
    linear-gradient(var(--frame), var(--frame)) left top / 14px 1px no-repeat,
    linear-gradient(var(--frame), var(--frame)) left top / 1px 14px no-repeat,
    linear-gradient(var(--frame), var(--frame)) right top / 14px 1px no-repeat,
    linear-gradient(var(--frame), var(--frame)) right top / 1px 14px no-repeat,
    linear-gradient(var(--frame), var(--frame)) left bottom / 14px 1px no-repeat,
    linear-gradient(var(--frame), var(--frame)) left bottom / 1px 14px no-repeat,
    linear-gradient(var(--frame), var(--frame)) right bottom / 14px 1px no-repeat,
    linear-gradient(var(--frame), var(--frame)) right bottom / 1px 14px no-repeat;
}

.door:hover {
  transform: translateY(-2px);
  background-color: rgba(0, 212, 255, 0.06);
  filter: drop-shadow(0 0 10px rgba(0, 212, 255, 0.18));
}

.door:focus-visible {
  outline: 2px solid var(--focus);
  outline-offset: 3px;
}

.door-row {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
}

.door-play {
  width: 0;
  height: 0;
  border-style: solid;
  border-width: 5px 0 5px 8px;
  border-color: transparent transparent transparent var(--cyan);
  flex-shrink: 0;
  filter: drop-shadow(0 0 4px rgba(0, 212, 255, 0.55));
}

.door-name {
  font-style: normal;
  font-size: 1.15rem;
  line-height: 1.2;
}

.door-note {
  font-size: 0.88rem;
  line-height: 1.35;
  color: var(--muted);
  padding-left: calc(8px + 0.55rem);
}

.door-lab {
  --frame: rgba(0, 212, 255, 0.85);
  --frame-mid: rgba(0, 212, 255, 0.62);
}

.door-lab .door-name {
  font-family: var(--font-mono);
  font-weight: 600;
  letter-spacing: 0.06em;
  color: var(--cyan);
  text-shadow: 0 0 12px rgba(0, 212, 255, 0.28);
}

.door-lab .door-note {
  font-family: var(--font-body);
}

.door-moon {
  --frame: rgba(255, 255, 255, 0.7);
  --frame-mid: rgba(255, 255, 255, 0.42);
  image-rendering: pixelated;
}

.door-moon .door-play {
  border-left-color: #fff;
  filter: none;
}

.door-moon:hover {
  background-color: rgba(255, 255, 255, 0.05);
  filter: drop-shadow(0 0 8px rgba(255, 255, 255, 0.12));
}

.door-moon .door-name {
  font-family: var(--font-pixel);
  font-weight: 400;
  color: #fff;
  -webkit-font-smoothing: none;
}

.door-moon .door-note {
  font-family: var(--font-pixel);
  font-size: 0.72rem;
  line-height: 1.45;
  -webkit-font-smoothing: none;
}

@media (max-width: 820px) {
  .stage {
    grid-template-columns: 1fr 1fr;
    grid-template-areas:
      "hub hub"
      "lab moon";
    align-items: start;
    justify-items: center;
    padding: 4.25rem 1.1rem 2.5rem;
    gap: 1.5rem 0.75rem;
  }

  .hub { grid-area: hub; width: 100%; }
  .wing-lab {
    grid-area: lab;
    width: 100%;
    --wing-y: -2vh;
  }
  .wing-moon {
    grid-area: moon;
    width: 100%;
    --wing-y: 2vh;
  }

  .stage::before {
    background:
      radial-gradient(70% 45% at 22% 78%, rgba(0, 212, 255, 0.22), transparent 58%),
      radial-gradient(55% 40% at 12% 90%, rgba(57, 255, 20, 0.14), transparent 52%);
  }

  .wing-lab .atom {
    --atom: min(42vw, 170px);
  }

  .wing-moon .moon {
    width: min(40vw, 160px);
  }
}

@media (prefers-reduced-motion: reduce) {
  .wing-lab,
  .wing-moon,
  .hub,
  .wing-moon .moon,
  .wing-moon .star { animation: none; }
  .wing-lab .electron { animation-play-state: paused; }
  .wing-lab { opacity: 1; transform: translate3d(0, var(--wing-y, -7vh), 0); }
  .wing-moon { opacity: 1; transform: translate3d(0, var(--wing-y, 7vh), 0); }
  .hub { opacity: 1; transform: none; }
  .wing-moon .star { opacity: var(--star-max, 0.7); filter: none; }
  .door { transition: none; }
}
