:root {
  --magnetic: #00b4c9;
  --magnetic-dim: rgba(0, 180, 201, 0.16);
  --magnetic-glow: rgba(0, 180, 201, 0.45);
  --lava: #323c46;
  --lava-2: #263039;
  --white: #ffffff;
  --void: #07090b;
  --ink: #f4f7f8;
  --mute: #8b949e;
  --mute-2: #5c6670;
  --line: rgba(255, 255, 255, 0.08);
  --glass: rgba(50, 60, 70, 0.24);
  --glass-2: rgba(14, 18, 22, 0.50);
  --live: #00b4c9;
  --building: #c9a227;
  --discovery: #8b949e;
  --radius: 18px;
  --nav-h: 72px;
}

* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
html, body { background: var(--void); color: var(--ink); }
body {
  font-family: "Inter Tight", "Inter", ui-sans-serif, system-ui, sans-serif;
  font-weight: 400;
  line-height: 1.55;
  /* `clip`, NO `hidden`: overflow-x:hidden obliga a overflow-y a computar
     `auto`, lo que convierte al <body> en contenedor de scroll y deja al nav
     sticky pegado a un scrollport que no se desplaza -- por eso el menu de la
     home se iba con la pagina. `clip` recorta sin crear scroller. */
  overflow-x: clip;
  min-height: 100%;
}

#sky {
  position: fixed;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 0;
  pointer-events: none;
  background:
    radial-gradient(900px 500px at 52% 28%, rgba(0, 180, 201, 0.09), transparent 60%),
    radial-gradient(700px 400px at 10% 90%, rgba(50, 60, 70, 0.35), transparent 55%),
    var(--void);
}

.orb {
  position: absolute;
  left: 38%;
  top: 12%;
  width: min(36vw, 400px);
  height: min(36vw, 400px);
  border-radius: 50%;
  background:
    radial-gradient(circle at 38% 32%, rgba(255,255,255,0.28), transparent 24%),
    radial-gradient(circle at 50% 50%, rgba(0,180,201,0.42), rgba(7,9,11,0.05) 64%);
  box-shadow:
    0 0 120px 36px rgba(0,180,201,0.18),
    inset 0 0 70px rgba(0,180,201,0.22);
  border: 1px solid rgba(0,180,201,0.28);
  animation: breathe 8s ease-in-out infinite;
  pointer-events: none;
  z-index: 1;
}
.orb::before,
.orb::after {
  content: "";
  position: absolute;
  inset: -18%;
  border-radius: 50%;
  border: 1px solid rgba(0,180,201,0.16);
}
.orb::after {
  inset: -34%;
  border-color: rgba(0,180,201,0.08);
  animation: spin 48s linear infinite;
}
.orb::before { animation: spin 36s linear infinite reverse; }

@keyframes breathe {
  0%, 100% { transform: scale(1); opacity: 0.9; }
  50% { transform: scale(1.035); opacity: 1; }
}
@keyframes spin { to { transform: rotate(360deg); } }

.wrap {
  position: relative;
  z-index: 2;
}

a { color: inherit; text-decoration: none; }
button, input, textarea, select { font: inherit; }

.nav {
  position: sticky;
  top: 0;
  z-index: 20;
  height: var(--nav-h);
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 28px;
  backdrop-filter: blur(16px);
  background: rgba(7, 9, 11, 0.55);
  border-bottom: 1px solid var(--line);
}
.brand {
  font-weight: 600;
  letter-spacing: 0.14em;
  font-size: 13px;
}
.nav-center {
  display: flex;
  align-items: center;
  gap: 8px;
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  font-size: 11px;
  letter-spacing: 0.12em;
  color: var(--mute);
}
.dot {
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--magnetic);
  box-shadow: 0 0 10px var(--magnetic-glow);
  animation: pulse 1.6s ease-in-out infinite;
}
@keyframes pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50% { opacity: 0.55; transform: scale(0.85); }
}
.nav-right { display: flex; align-items: center; gap: 22px; }
.nav a.quiet {
  font-size: 12px;
  letter-spacing: 0.16em;
  color: var(--mute);
}
.nav a.quiet:hover { color: var(--white); }

.btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: var(--magnetic);
  color: #042126;
  font-weight: 600;
  font-size: 12px;
  letter-spacing: 0.12em;
  padding: 11px 16px;
  border-radius: 999px;
  border: 0;
  cursor: pointer;
}
.btn:hover { filter: brightness(1.08); }
.btn-ghost {
  background: transparent;
  color: var(--ink);
  border: 1px solid var(--line);
}
.btn-ghost:hover { border-color: var(--magnetic); color: var(--magnetic); }

.page { width: min(1240px, calc(100% - 48px)); margin: 0 auto; }

.hero {
  min-height: calc(100vh - var(--nav-h));
  display: grid;
  grid-template-columns: 1.15fr 0.85fr;
  gap: 48px;
  align-items: center;
  padding: 48px 0 72px;
}
.kicker {
  font-size: 11px;
  letter-spacing: 0.22em;
  color: var(--mute);
  margin-bottom: 22px;
}
h1 {
  font-size: clamp(40px, 5.4vw, 72px);
  line-height: 0.98;
  letter-spacing: -0.04em;
  font-weight: 600;
  margin-bottom: 22px;
}
.lede {
  max-width: 540px;
  color: var(--mute);
  font-size: 17px;
  margin-bottom: 28px;
}
.rule {
  width: 160px;
  height: 2px;
  background: var(--magnetic);
  margin-bottom: 18px;
}
.mantra {
  color: var(--magnetic);
  font-size: 12px;
  letter-spacing: 0.14em;
  font-weight: 600;
  line-height: 1.7;
}

.panel {
  background: var(--glass);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  backdrop-filter: blur(18px);
  box-shadow: 0 20px 60px rgba(0,0,0,0.28);
}
.status {
  padding: 22px 22px 8px;
  margin-bottom: 14px;
}
.status-top {
  display: flex;
  justify-content: space-between;
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  font-size: 10px;
  letter-spacing: 0.16em;
  color: var(--mute);
  margin-bottom: 16px;
}
.status-nums {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 8px;
  padding-bottom: 14px;
  border-bottom: 1px solid var(--line);
}
.status-nums b {
  display: block;
  font-size: 28px;
  letter-spacing: -0.04em;
  line-height: 1;
}
.status-nums span {
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  font-size: 10px;
  letter-spacing: 0.12em;
  color: var(--mute);
}
.status-nums .c-live b { color: var(--magnetic); }
.status-nums .c-build b { color: var(--building); }
.chain {
  display: flex;
  justify-content: space-between;
  padding: 12px 0 16px;
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  font-size: 10px;
  letter-spacing: 0.12em;
  color: var(--mute);
}

.shelf-list { padding: 8px 8px 12px; }
.shelf-list h3 {
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  font-size: 10px;
  letter-spacing: 0.16em;
  color: var(--mute);
  padding: 8px 14px 10px;
  font-weight: 500;
}
.shelf-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 9px 14px;
  border-top: 1px solid var(--line);
  font-size: 14px;
}
.shelf-row small {
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  font-size: 10px;
  letter-spacing: 0.12em;
  color: var(--mute);
}
.shelf-row .live { color: var(--magnetic); }
.shelf-row .building { color: var(--building); }
.pill-dot {
  width: 7px; height: 7px; border-radius: 50%; display: inline-block; margin-right: 10px;
}
.pill-dot.live { background: var(--magnetic); box-shadow: 0 0 8px var(--magnetic-glow); }
.pill-dot.building { background: var(--building); }
.pill-dot.discovery { background: var(--discovery); }

section { padding: 88px 0; }
.sec-kicker {
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  font-size: 11px;
  letter-spacing: 0.18em;
  color: var(--magnetic);
  margin-bottom: 10px;
}
.sec-kicker.long {
  letter-spacing: 0.06em;
  max-width: 720px;
  line-height: 1.5;
}
.sec-title {
  font-size: clamp(36px, 5vw, 64px);
  letter-spacing: -0.035em;
  font-weight: 600;
  line-height: 1;
  margin-bottom: 12px;
}
.sec-sub { color: var(--mute); max-width: 560px; margin-bottom: 28px; }

.filters {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 28px;
}
.filter {
  border: 1px solid var(--line);
  background: transparent;
  color: var(--ink);
  border-radius: 999px;
  padding: 8px 12px;
  font-size: 11px;
  letter-spacing: 0.08em;
  cursor: pointer;
}
.filter.on, .filter:hover {
  background: var(--magnetic);
  color: #042126;
  border-color: var(--magnetic);
}

.grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
}
.card {
  background: var(--glass);
  border: 1px solid var(--line);
  border-radius: 20px;
  padding: 26px;
  backdrop-filter: blur(16px);
  min-height: 240px;
  display: flex;
  flex-direction: column;
  transition: border-color 0.2s, transform 0.2s;
}
.card:hover { border-color: rgba(0,180,201,0.35); transform: translateY(-2px); }
.card-top {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 12px;
  margin-bottom: 12px;
}
.card h3 { font-size: 26px; letter-spacing: -0.03em; font-weight: 600; }
.badge {
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  font-size: 10px;
  letter-spacing: 0.12em;
  border-radius: 999px;
  padding: 5px 9px;
  border: 1px solid var(--line);
  color: var(--magnetic);
}
.badge.building { color: var(--building); }
.badge.discovery { color: var(--discovery); }
.card p { color: var(--mute); font-size: 15px; flex: 1; }
.meta {
  margin-top: 18px;
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  font-size: 11px;
  letter-spacing: 0.08em;
  color: var(--magnetic);
}
.tags { margin-top: 10px; color: var(--mute-2); font-size: 11px; letter-spacing: 0.08em; }
.card a.more {
  margin-top: 16px;
  color: var(--ink);
  font-size: 13px;
  letter-spacing: 0.08em;
}
.card a.more:hover { color: var(--magnetic); }

.vlab {
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  font-size: 10px;
  letter-spacing: 0.12em;
  color: var(--mute);
  margin: 16px 0 8px;
}
.spark { height: 28px; display: flex; gap: 3px; align-items: flex-end; }
.spark i { flex: 1; background: rgba(0,180,201,0.35); border-radius: 2px; }
.spark i:last-child { background: var(--magnetic); }
.kpi {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1px;
  background: var(--line);
  border: 1px solid var(--line);
  border-radius: 12px;
  overflow: hidden;
}
.kpi div { background: rgba(7,9,11,0.45); padding: 10px 9px; }
.kpi b { display: block; font-size: 16px; letter-spacing: -0.03em; }
.kpi span { display: block; font-size: 9px; color: var(--mute); letter-spacing: 0.07em; margin-top: 5px; font-family: "IBM Plex Mono", ui-monospace, monospace; }
.kpi .hero b { color: var(--magnetic); }
.lc { display: block; width: 100%; height: 56px; }
.lc.tall { height: 68px; }
.axis {
  display: flex;
  justify-content: space-between;
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  font-size: 9px;
  color: var(--mute);
  margin-top: 4px;
  letter-spacing: 0.06em;
}
.band { display: flex; gap: 1px; height: 32px; align-items: flex-end; }
.band i { flex: 1; border-radius: 1px; background: var(--magnetic); height: 100%; }
.step { display: flex; margin: 6px 0 4px; padding: 0 4px; }
.step div {
  flex: 1; text-align: center; position: relative;
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  font-size: 9px; letter-spacing: 0.06em; color: var(--mute);
}
.step div::before {
  content: ""; display: block; width: 9px; height: 9px; border-radius: 50%;
  margin: 0 auto 8px; background: var(--lava); position: relative; z-index: 1;
}
.step div::after {
  content: ""; position: absolute; top: 4px; left: 50%; width: 100%; height: 1px;
  background: var(--line); z-index: 0;
}
.step div:last-child::after { display: none; }
.step div.on { color: var(--magnetic); }
.step div.on::before { background: var(--magnetic); box-shadow: 0 0 8px var(--magnetic-glow); }
.beats { margin: 4px 0; }
.beatrow { display: flex; align-items: center; gap: 10px; padding: 5px 0; }
.beatrow b {
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  font-size: 9px; letter-spacing: 0.1em; color: var(--mute); width: 48px; flex: none;
}
.beatline { flex: 1; display: flex; align-items: center; justify-content: space-between; position: relative; }
.beatline::before {
  content: ""; position: absolute; left: 5px; right: 5px; top: 50%; height: 1px; background: var(--line);
}
.beatline i {
  width: 10px; height: 10px; border-radius: 2px; background: var(--magnetic);
  position: relative; z-index: 1; box-shadow: 0 0 0 2px var(--void);
}
.wkgrid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 3px; }
.wkgrid i { height: 10px; border-radius: 2px; background: rgba(0,180,201,0.28); }
.wkgrid i.now { background: var(--magnetic); }
.scale {
  height: 22px; border-radius: 4px;
  background: linear-gradient(to right, #C5392A, #D85A30, #EF9F27, #B2C235, #639922, #4A7A14);
}
.flow { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.flow i { font-style: normal; color: var(--mute); font-family: "IBM Plex Mono", ui-monospace, monospace; }
.node {
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  font-size: 10px; letter-spacing: 0.1em; padding: 8px 10px; border-radius: 8px;
  border: 1px solid var(--line); color: var(--ink);
}
.node.on { border-color: var(--magnetic); color: var(--magnetic); }
.node.off { border-style: dashed; color: var(--mute); text-decoration: line-through; }
.lgnd {
  display: flex; gap: 12px; flex-wrap: wrap; align-items: center;
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  font-size: 9px; color: var(--mute); margin-top: 8px; letter-spacing: 0.06em;
}
.lgnd i { width: 8px; height: 8px; border-radius: 2px; display: inline-block; margin-right: 4px; vertical-align: -1px; }
svg.map { width: 100%; height: auto; display: block; margin-top: 4px; }

.stats {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
  margin-top: 16px;
}
.stat {
  background: rgba(0,0,0,0.22);
  border-radius: 12px;
  padding: 10px;
}
.stat b { display: block; font-size: 16px; letter-spacing: -0.03em; }
.stat span { font-size: 10px; color: var(--mute); letter-spacing: 0.08em; }

.notes { display: grid; gap: 10px; }
.note {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 16px;
  align-items: center;
  padding: 18px 20px;
  border: 1px solid var(--line);
  border-radius: 14px;
  background: var(--glass-2);
}
.note:hover { border-color: rgba(0,180,201,0.3); }
.note small {
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  color: var(--magnetic);
  letter-spacing: 0.12em;
  font-size: 10px;
}
.note span { color: var(--mute); font-size: 12px; }

.principles { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.principle {
  padding: 26px;
  border: 1px solid var(--line);
  border-radius: 18px;
  background: var(--glass);
}
.principle h3 { font-size: 22px; letter-spacing: -0.03em; margin-bottom: 8px; }
.principle p { color: var(--mute); }

.split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 48px;
  align-items: start;
}
.work { display: grid; gap: 16px; }
.work-item {
  padding: 26px;
  border: 1px solid var(--line);
  border-radius: 18px;
  background: var(--glass);
}
.work-item .n {
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  color: var(--magnetic);
  font-size: 11px;
  letter-spacing: 0.16em;
  margin-bottom: 8px;
}
.work-item h3 { font-size: 22px; letter-spacing: -0.03em; margin-bottom: 8px; }
.work-item p { color: var(--mute); margin-bottom: 14px; }

#reach { padding-bottom: 40px; }
.contact {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 28px;
}
form { display: grid; gap: 10px; }
input, textarea {
  background: rgba(7,9,11,0.55);
  border: 1px solid var(--line);
  color: var(--ink);
  border-radius: 12px;
  padding: 12px 14px;
  outline: none;
}
input:focus, textarea:focus { border-color: var(--magnetic); }
textarea { min-height: 120px; resize: vertical; }
.socials { display: flex; gap: 16px; margin-top: 18px; color: var(--mute); font-size: 13px; letter-spacing: 0.08em; }
.socials a:hover { color: var(--magnetic); }
.foot {
  border-top: 1px solid var(--line);
  padding: 22px 0 40px;
  display: flex;
  justify-content: space-between;
  color: var(--mute-2);
  font-size: 12px;
}

.story-hero { padding: 72px 0 40px; max-width: 820px; }
.story-hero .path {
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  color: var(--magnetic);
  letter-spacing: 0.14em;
  font-size: 11px;
  margin-bottom: 18px;
}
.metrics {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
  margin: 36px 0 8px;
}
.metric {
  padding: 16px;
  border: 1px solid var(--line);
  border-radius: 14px;
  background: var(--glass);
}
.metric b { display: block; font-size: 22px; letter-spacing: -0.03em; }
.metric span { color: var(--mute); font-size: 11px; letter-spacing: 0.06em; }

.chapters { display: grid; gap: 12px; }
.chapter {
  border: 1px solid var(--line);
  border-radius: 16px;
  background: var(--glass);
  overflow: hidden;
}
.chapter summary {
  list-style: none;
  cursor: pointer;
  padding: 20px 22px;
  display: grid;
  grid-template-columns: 140px 1fr auto;
  gap: 16px;
  align-items: baseline;
}
.chapter summary::-webkit-details-marker { display: none; }
.chapter .when {
  font-family: "IBM Plex Mono", ui-monospace, monospace;
  font-size: 11px;
  color: var(--magnetic);
  letter-spacing: 0.08em;
}
.chapter .who { font-weight: 600; }
.chapter .role { color: var(--mute); font-size: 13px; }
.chapter .body { padding: 0 22px 22px 178px; color: var(--mute); max-width: 760px; }
.beliefs { display: grid; gap: 12px; }
.belief {
  padding: 22px 24px;
  border: 1px solid var(--line);
  border-radius: 16px;
  background: var(--glass);
}
.belief .n { color: var(--magnetic); font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 12px; }
.belief h3 { margin: 6px 0 8px; font-size: 20px; letter-spacing: -0.03em; }
.belief p { color: var(--mute); }
.beyond { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.quote {
  margin: 28px 0;
  padding: 28px;
  border-left: 2px solid var(--magnetic);
  color: var(--ink);
  font-size: 22px;
  letter-spacing: -0.03em;
  line-height: 1.35;
}
.quote cite { display: block; margin-top: 12px; color: var(--mute); font-size: 12px; font-style: normal; letter-spacing: 0.14em; }

.hidden { display: none !important; }
.menu-btn { display: none; background: none; border: 0; color: var(--ink); font-size: 18px; }

@media (max-width: 900px) {
  .hero, .grid, .principles, .split, .contact, .beyond, .metrics { grid-template-columns: 1fr; }
  .nav-center { display: none; }
  .orb { opacity: 0.7; left: auto; right: -18%; top: 6%; width: min(70vw, 340px); height: min(70vw, 340px); }
  .chapter summary { grid-template-columns: 1fr; }
  .chapter .body { padding: 0 22px 22px; }
  .page { width: min(1240px, calc(100% - 28px)); }
  .menu-btn { display: block; }
  .nav-right .quiet { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .orb, .orb::before, .orb::after, .dot { animation: none; }
}



/* --- fixes 2026-08-27 --- */
/* `.hero` era a la vez la portada (min-height:100vh) y una celda de KPI: la
   colisión estiraba esa celda a 1072px y con ella toda la fila del workbench. */
.kpi .kpi-hero b { color: var(--magnetic); }
.kpi.six { grid-template-columns: repeat(3, 1fr); }
.kpi > div { padding: 14px 16px; background: var(--glass-2); }
.kpi > div b { display: block; font-size: 20px; letter-spacing: -.02em; }
.kpi > div span { display: block; font-family: "IBM Plex Mono", ui-monospace, monospace;
  font-size: 10px; letter-spacing: .08em; color: var(--mute); margin-top: 4px; }

/* Cards de una misma fila con la MISMA altura: el grid las estira (stretch, el
   defecto) y dentro de cada card el pie se ancla abajo con margin-top:auto, de
   modo que el aire sobrante queda antes del pie y no dentro del párrafo. */
.grid { align-items: stretch; }
.card { align-self: auto; height: 100%; }
.card p { flex: 0 0 auto; }
.card .tags { margin-top: auto; padding-top: 14px; }
.card .more { margin-top: 10px; }


/* --- AI Personal Training --- */
.tgrid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-top: 30px; align-items: stretch; }
.tcard { padding: 26px 28px; height: 100%; }
.tcard h3 { font-size: 20px; letter-spacing: -.02em; }
.tcard p, .tcard li { color: var(--mute); font-size: 15px; line-height: 1.6; }
.tcard b { color: var(--ink); font-weight: 600; }
.tlist { margin: 6px 0 0; padding-left: 1.1em; display: flex; flex-direction: column; gap: 12px; }
.tout { margin: 6px 0 0; padding-left: 1.1em; display: flex; flex-direction: column; gap: 11px; }
.arc { display: flex; flex-direction: column; gap: 12px; margin-top: 10px; }
.arcrow { display: grid; grid-template-columns: 58px 1fr; gap: 12px; align-items: baseline; }
.arcn { font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 11px;
  letter-spacing: .08em; color: var(--magnetic); }
.arcrow span:last-child { color: var(--mute); font-size: 15px; line-height: 1.6; }
.quote { margin: 18px 0; padding: 16px 20px; border-left: 2px solid var(--magnetic);
  background: var(--glass-2); border-radius: 0 10px 10px 0; color: var(--ink); font-size: 15px; line-height: 1.6; }
.quote cite { display: block; margin-top: 10px; font-style: normal;
  font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 11px;
  letter-spacing: .07em; color: var(--mute); }
.trainer { padding: 30px 32px; margin-top: 16px; }
#reach form select { width: 100%; appearance: none; cursor: pointer;
  background-image: linear-gradient(45deg, transparent 50%, var(--mute) 50%),
                    linear-gradient(135deg, var(--mute) 50%, transparent 50%);
  background-position: calc(100% - 20px) 50%, calc(100% - 15px) 50%;
  background-size: 5px 5px, 5px 5px; background-repeat: no-repeat; }
#reach form select option { background: #0d1116; color: var(--ink); }
@media (max-width: 900px) { .tgrid { grid-template-columns: 1fr; } }


/* el <select> no hereda el tema del navegador: forzarlo explícitamente */
#reach form select {
  background-color: rgba(7,9,11,0.55) !important;
  color: var(--ink) !important;
  border: 1px solid var(--line);
  border-radius: 12px;
  padding: 12px 14px;
}
#reach form select:focus { border-color: var(--magnetic); }
#reach form select:invalid { color: var(--mute) !important; }


/* --- fixes 2026-08-27 (b): tokens con los nombres del sitio viejo ---------
   Los <script> de life-grid / health-lake / race-ledger piden sus colores con
   getComputedStyle().getPropertyValue('--acc') y el porter habia renombrado
   esas definiciones a --pg-*. La variable no existia, getPropertyValue
   devolvia "" y cada <rect fill=""> caia al negro por defecto: de ahi las
   barras negras ilegibles. Se declaran como alias de la paleta ORBIT.
   HEX literal obligatorio: hexA() hace slice(1,3) sobre el valor. */
:root {
  --acc:   #00b4c9;
  --aqua:  #4dd3e3;
  --ink2:  #c4ccd3;
  --mut:   #8b949e;
  --rule:  rgba(255, 255, 255, 0.10);
  --card:  rgba(50, 60, 70, 0.24);
  --tint:  rgba(255, 255, 255, 0.045);
  --tint2: rgba(255, 255, 255, 0.10);
  --mono:  "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  --gold:   #c9a227;
  --violet: #a97bc0;
  /* Un color por disciplina. El porter habia mapeado run Y bike al mismo
     magenta-cian, asi que en la barra apilada de horas los dos deportes eran
     el mismo bloque. Misma paleta que los carriles del life grid. */
  --c-run:   #00b4c9;
  --c-bike:  #4dd3e3;
  --c-swim:  #5c9be0;
  --c-str:   #8fb56a;
  --c-tri:   #a97bc0;
}

/* Una card de articulo no es una card del workbench: `.card{height:100%}` +
   `.grid{align-items:stretch}` estiraban el contenedor de una grafica hasta la
   altura de su columna de texto, dejando media pantalla vacia bajo el SVG. */
.article .card { height: auto; align-self: start; }

/* `.hero` de ORBIT es la portada a pantalla completa en dos columnas; las
   paginas portadas traen su propio <header class="hero"> centrado, que asi
   quedaba estirado a 100vh con los KPI aplastados en la columna de 0.85fr. */
.article header.hero {
  min-height: 0;
  display: block;
  grid-template-columns: none;
  align-items: initial;
}


/* --- movil 2026-08-27 ----------------------------------------------------
   1) El scroll lateral: `body{overflow-x:hidden}` no ata a <html>, que seguia
      desplazandose. Se cierra en los dos. Pero cerrar sin mas RECORTARIA el
      SQL del ledger, asi que lo que de verdad desbordaba (bloques <pre> y una
      tabla) scrollea ahora DENTRO de su propia caja.
   2) `.card{min-height:240px}` es una card del workbench: en el movil dejaba
      hasta 197px de vacio bajo una grafica de 43px de alto. */
html { overflow-x: clip; }   /* nunca `hidden` aqui: ver la nota en body */
.article .card { min-height: 0; }
.article pre { max-width: 100%; overflow-x: auto; }

@media (max-width: 640px) {
  /* Los paddings se apilaban -- wrap + page + glasswrap + card -- y de 375px
     de pantalla solo llegaban 183px al SVG. Recuperados ~120px. */
  .page { width: 100%; }
  .wrap { padding-left: 12px; padding-right: 12px; }
  .article { padding: 26px 0 56px; }
  .article .glasswrap { padding: 16px 13px; margin: 16px 0; border-radius: 14px; }
  .article .card { padding: 12px 8px; border-radius: 12px; }
  /* La tabla NO se convierte en su propio scroller si ya vive dentro de uno.
     race-ledger la envuelve en .tblwrap (overflow-x:auto) y su <table> lleva
     min-width:680px: al hacerla ademas display:block + overflow:auto, la tabla
     se recortaba a si misma 88px y la ultima columna ("Result") quedaba
     inalcanzable por mucho que se arrastrara. */
  .article table { max-width: 100%; }
  .article :not(.tblwrap) > table { display: block; overflow-x: auto; }
  .article h1 { font-size: clamp(28px, 8vw, 38px); }
  .article .kpi.six, .article .kpi { grid-template-columns: repeat(2, 1fr); }
}


/* --- fixes 2026-08-27 (c) ------------------------------------------------
   `.note` es un COMPONENTE del workbench (grid 1fr/auto con caja propia) y solo
   se usa asi en la home. En los articulos `.note` es un parrafo de pie de
   grafica: el grid lo partia en dos columnas, el <b> saltaba a la segunda y la
   frase quedaba en una columna de nueve caracteres. Mismo tipo de colision que
   `.hero` y `.card`. La caja propia tambien sobra: cada pagina portada le da su
   borde superior. */
.article .note {
  display: block;
  grid-template-columns: none;
  gap: 0;
  border: 0;
  border-radius: 0;
  background: none;
  padding: 0;
}
.article .note:hover { border-color: transparent; }

/* El `.orb` es decorativo y esta en position:absolute fuera de `.wrap`: a 375px
   se salia 68px por la derecha. Se confiaba en que el clip de <html> lo tapara,
   pero en iOS Safari el overflow del elemento raiz se propaga al viewport y ese
   clip se ignora -- de ahi que el telefono siguiera desplazandose de lado.
   Ahora no desborda de entrada; los halos ::before/::after (inset -18% y -34%)
   entran en la cuenta y NO los ve un getBoundingClientRect. */
@media (max-width: 900px) {
  .orb {
    /* Centrado con `left`, NO con transform: la animacion `breathe` anima
       `transform: scale()` y una animacion gana sobre una declaracion normal,
       asi que un translateX(-50%) aqui se pierde (medido: el orb se quedaba
       en left:187 en vez de 105). */
    left: calc(50% - min(22vw, 130px));
    width: min(44vw, 260px);
    height: min(44vw, 260px);
  }
  .orb::before, .orb::after { animation: none; }
}

/* cinturon y tirantes para el scroll lateral en iOS */
body { position: relative; width: 100%; }


/* Una tarjeta de grafica es item de un grid de dos columnas: por defecto el
   grid la ESTIRA a la altura de la fila. Con el texto al lado mas alto que el
   SVG (pasa sobre 768px, donde el texto envuelve mas), quedaba hasta 526px de
   hueco muerto bajo la grafica. No se estira: se alinea arriba. */
.article .chart { align-self: start; }


/* --- barra superior consistente (28.08.2026) ------------------------------
   Medido a 1440 px: la barra iba a sangre en la home (marca a x=28) y
   encajonada dentro del wrap de 1240 en los articulos (marca a x=150). El
   menu saltaba 122 px al navegar entre la portada y cualquier subpagina.
   Ahora la barra va a sangre en TODAS y su contenido se alinea con la columna
   de contenido, unificada en 1240 px.
   `.wrap:has(> .nav)` tiene especificidad (0,2,0) y gana al `.wrap` (0,1,0)
   que declaran las paginas portadas en su <style> inline. */
.wrap:has(> .nav) { max-width: none; padding-left: 0; padding-right: 0; }
.nav { padding-inline: max(24px, calc((100% - 1240px) / 2)); }

/* ORBIT patch — append to orbit.css. Do not replace the file. */

/* Readable glass on data pages (Life Grid, Health Lake, ledgers) */
:root {
  --glass: rgba(50, 60, 70, 0.48);
  --glass-2: rgba(14, 18, 22, 0.78);
}

/* Mobile: orb lives in empty sky, never over the H1 */
@media (max-width: 900px) {
  .orb {
    opacity: 0.32 !important;
    left: auto !important;
    right: -30% !important;
    top: auto !important;
    bottom: 4% !important;
    width: min(52vw, 200px) !important;
    height: min(52vw, 200px) !important;
    z-index: 0 !important;
  }
  .hero, .hero h1, .wrap { position: relative; }
  .hero h1, .hero .lede, .hero .kicker, .hero .mantra { position: relative; z-index: 2; }
}

/* Article / table contrast on void */
.article p, .article li { color: var(--mute); }
.article h1, .article h2, .article h3 { color: var(--ink); }
.article table {
  width: 100%;
  border-collapse: collapse;
  background: rgba(7, 9, 11, 0.55);
}
.article th, .article td {
  border: 1px solid var(--line);
  padding: 8px 10px;
  color: var(--ink);
  font-size: 13px;
}
.article th { color: var(--mute); font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 10px; letter-spacing: 0.08em; }
/* Sólo enlaces de CUERPO. Con `.article a` a secas (0,1,1) esta regla le gana a
   .btn / .golink / .more (0,1,0) y les pinta el texto del mismo cian que su fondo
   → botón invisible. Reportado 28.08 en el CTA de health-lake. */
.article a:not([class]) { color: var(--magnetic); }

/* ---------- Menú móvil ----------
   Hasta ahora `.nav-right .quiet { display:none }` escondía MY STORY y AI TRAINING
   en móvil y sólo quedaba el CTA. `.menu-btn` existía en el CSS pero NUNCA en el
   markup: era regla muerta. El panel lo construye orbit.js clonando los enlaces
   que ya hay en `.nav-right`, así cada página conserva sus rutas relativas. */
.menu-btn {
  display: none;
  align-items: center;
  justify-content: center;
  width: 40px; height: 40px;
  margin-right: -8px;
  background: none;
  border: 1px solid var(--line);
  border-radius: 8px;
  color: var(--ink);
  cursor: pointer;
}
.menu-btn:hover { border-color: var(--magnetic); color: var(--magnetic); }
.menu-btn svg { width: 18px; height: 18px; display: block; }
.menu-btn .ico-close { display: none; }
.menu-btn[aria-expanded="true"] .ico-open { display: none; }
.menu-btn[aria-expanded="true"] .ico-close { display: block; }
.menu-btn[aria-expanded="true"] { border-color: var(--magnetic); color: var(--magnetic); }

.navmenu {
  position: absolute;
  top: calc(var(--nav-h) - 6px);
  right: max(24px, calc((100% - 1240px) / 2));
  left: max(24px, calc((100% - 1240px) / 2));
  z-index: 30;
  display: none;
  flex-direction: column;
  gap: 2px;
  padding: 8px;
  border: 1px solid var(--line);
  border-radius: 12px;
  /* Un menú tiene que OCLUIR. Con --glass-2 (0.78) el H1 se transparentaba
     por debajo y parecía roto. Casi opaco, y el blur sólo como acabado. */
  background: rgba(9, 12, 15, 0.985);
  -webkit-backdrop-filter: blur(18px);
  backdrop-filter: blur(18px);
  box-shadow: 0 18px 40px rgba(0, 0, 0, 0.6);
}
.navmenu.open { display: flex; }
.navmenu a {
  display: block;
  padding: 13px 14px;
  border-radius: 8px;
  font-size: 13px;
  letter-spacing: 0.16em;
  text-decoration: none;
  color: var(--ink);
}
.navmenu a:hover, .navmenu a:focus-visible { background: var(--tint); color: var(--white); }
/* el CTA conserva su aspecto de botón, centrado y a todo el ancho */
.navmenu a.btn { justify-content: center; margin-top: 4px; color: #042126; }
.navmenu a.btn:hover { color: #042126; }

@media (max-width: 900px) {
  .nav { position: relative; }
  .nav-right { display: none; }
  .menu-btn { display: inline-flex; }
}
@media (min-width: 901px) {
  .navmenu, .menu-btn { display: none !important; }
}
