/* Estelar · Home · "Ya están en órbita"
   Proyectos en órbita alrededor del imagotipo 3D (estrella.js) con capa DOM sincronizada (orbita.js).
   Todo va acotado a .orbita para no pisar los estilos del sitio. */
.orbita{
  --o-paper:#e8e7e1;--o-muted:#a3a5a5;--o-soft:#c0c8d5;
  --o-line:#dce7fc26;--o-line-2:#dce7fc45;--o-accent:#527aff;
  --o-ease:cubic-bezier(.22,.8,.2,1);--o-expo:cubic-bezier(.16,1,.3,1);
  --o-pad:5%;--o-safe-b:env(safe-area-inset-bottom,0px);
  position:relative;z-index:6;height:100vh;height:100svh;min-height:600px;overflow:hidden;
  touch-action:pan-y;user-select:none;-webkit-user-select:none;cursor:grab;color:var(--o-paper)
}
.orbita.is-dragging{cursor:grabbing}
.orbita.is-dragging .o-card{cursor:grabbing}
:where(.orbita) button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer;-webkit-tap-highlight-color:transparent}
:where(.orbita) :is(h2,h3,p){margin:0;font-weight:400}
:where(.orbita) :is(img,video){display:block}
.orbita a:focus-visible,.orbita button:focus-visible{outline:2px solid var(--o-accent);outline-offset:4px}
.orbita .o-micro{font:500 10px/1.5 var(--font-mono),monospace;letter-spacing:.08em;text-transform:uppercase;color:var(--o-muted)}

/* ---------- arriba: línea de sección + título ---------- */
.o-top{position:absolute;z-index:140;left:var(--o-pad);right:var(--o-pad);top:28px;display:flex;justify-content:space-between;gap:20px;padding-top:17px;border-top:1px solid #dce7fc40;color:#b2bfd1;font:10px/1.5 var(--font-mono),monospace;letter-spacing:.04em;pointer-events:none}
.o-hint{display:flex;align-items:center;gap:10px}
.o-hint:before{content:'';width:22px;height:1px;background:var(--o-line-2)}
.o-hint-touch{display:none}
@media (hover:none),(pointer:coarse){.o-hint-fine{display:none}.o-hint-touch{display:inline}}

.o-head{position:absolute;z-index:130;left:var(--o-pad);top:96px;pointer-events:none;text-shadow:0 4px 30px #000c}
.o-title{font-size:clamp(40px,min(4.7vw,9vh),86px);line-height:1;letter-spacing:-.055em}
.o-title .ln{display:block;overflow:hidden;padding-bottom:.08em;margin-bottom:-.08em}
.o-title .ln>span{display:block;transform:translateY(105%);transition:transform 1.5s var(--o-expo)}
.o-title .ln:nth-child(2)>span{transition-delay:.09s}

.orbita.is-in .o-title .ln>span{transform:none}
.o-sub{margin-top:clamp(14px,2.2vh,22px);max-width:430px;font-size:14px;line-height:1.6;color:var(--o-soft);opacity:0;transform:translateY(14px);transition:opacity 1.2s var(--o-ease) .35s,transform 1.4s var(--o-expo) .35s}
.orbita.is-in .o-sub{opacity:1;transform:none}

/* ---------- escenario ---------- */
.o-stage{position:absolute;inset:0;z-index:5}
.o-ring{position:absolute;left:0;top:0;pointer-events:none}
.o-ring--back{z-index:0}
.o-ring--front{z-index:51}
.o-orbit{position:absolute;left:0;top:0;width:100%;height:100%;overflow:visible;pointer-events:none}
.o-orbit--back{z-index:0}
.o-orbit--front{z-index:51}
.o-orbit-line{fill:none;stroke:#b9cdf5;stroke-width:1;vector-effect:non-scaling-stroke}
.o-orbit--back .o-orbit-line{stroke-opacity:.14}
.o-orbit--front .o-orbit-line{stroke-opacity:.3}
.o-orbit-line--main{stroke-dasharray:1 1}
.o-orbit-line--outer{stroke-dasharray:1 7;stroke-opacity:.08!important}

.o-star{position:absolute;left:0;top:0;z-index:50;pointer-events:none;opacity:0}
.gl-on .o-star{opacity:1}
.o-star-fallback{position:absolute;left:0;top:0;z-index:50;pointer-events:none;perspective:900px;opacity:0;transition:opacity 1.6s var(--o-ease) .3s}
.orbita.is-in .o-star-fallback{opacity:1}
.gl-on .o-star-fallback{display:none}
.o-star-fallback svg{width:100%;height:100%;overflow:visible;filter:drop-shadow(0 0 8px #527aff55) drop-shadow(0 0 30px #527aff33);animation:o-fb-spin 22s linear infinite}
@keyframes o-fb-spin{0%{transform:rotateY(0)}100%{transform:rotateY(360deg)}}

.o-cards{position:absolute;left:0;top:0;width:0;height:0}
.o-card{position:absolute;left:0;top:0;width:var(--cw,400px);height:var(--ch,225px);margin:calc(var(--ch,225px) / -2) 0 0 calc(var(--cw,400px) / -2);border-radius:var(--cr,14px);overflow:hidden;background:#0b0f18;transform-origin:50% 50%;will-change:transform;cursor:pointer;opacity:0;
  box-shadow:0 24px 60px -28px #000;contain:layout style;color:var(--o-paper);text-decoration:none}
.o-card:after{content:'';position:absolute;inset:0;border-radius:inherit;box-shadow:inset 0 0 0 1px #dce7fc22;pointer-events:none;transition:box-shadow .5s var(--o-ease)}
.o-card.is-focus:after{box-shadow:inset 0 0 0 1px #9cc4ff70,inset 0 0 60px #527aff1a}
.o-card-media{position:absolute;inset:0;overflow:hidden;background:#0b0f18 center/cover no-repeat}
.o-card-media img,.o-card-media video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;-webkit-user-drag:none;user-select:none;pointer-events:none}
.o-card-shade{position:absolute;inset:0;background:#03050a;opacity:0;pointer-events:none;will-change:opacity}
.o-card-label{position:absolute;left:0;right:0;bottom:0;display:flex;align-items:flex-end;gap:14px;padding:calc(var(--cw) * .05) calc(var(--cw) * .045) calc(var(--cw) * .04);background:linear-gradient(#03050a00,#03050ad0 70%);opacity:0;transform:translateY(12px);transition:opacity .45s var(--o-ease),transform .7s var(--o-expo);pointer-events:none}
.o-card.is-focus .o-card-label{opacity:1;transform:none;transition-delay:.06s}
.o-card-txt{display:flex;flex-direction:column;gap:4px;min-width:0}
.o-card-name{font-size:calc(var(--cw) * .045);font-weight:600;letter-spacing:-.02em;line-height:1.05}
.o-card-who{font:500 calc(var(--cw) * .021)/1.4 var(--font-mono),monospace;letter-spacing:.06em;text-transform:uppercase;color:#c6d0e0}
.o-card-who b{font:inherit;color:#fff;letter-spacing:inherit}
.o-card-go{margin-left:auto;flex:none;width:calc(var(--cw) * .075);height:calc(var(--cw) * .075);border-radius:50%;display:grid;place-items:center;background:var(--o-paper);color:#0b0d12;font-size:calc(var(--cw) * .032)}

/* ---------- abajo: info, dock, flechas ---------- */
.o-bottom{position:absolute;z-index:150;left:var(--o-pad);right:var(--o-pad);bottom:calc(clamp(18px,3.4vh,34px) + var(--o-safe-b));display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:end;gap:28px;pointer-events:none}
.o-bottom>*{pointer-events:auto}
.o-info{max-width:350px;display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-areas:"count count" "name cta" "meta meta";justify-content:start;column-gap:14px;align-items:center;opacity:0;transform:translateY(16px);transition:opacity 1.2s var(--o-ease) .9s,transform 1.4s var(--o-expo) .9s}
.orbita.is-in .o-info{opacity:1;transform:none}
.o-count{grid-area:count;display:flex;align-items:baseline;gap:2px}
.o-count-cur{color:var(--o-paper)}
.o-name{grid-area:name;margin-top:8px;font-size:clamp(26px,2.2vw,36px);line-height:1.05;letter-spacing:-.045em;font-weight:500;overflow:hidden;padding-bottom:.08em;max-width:290px;font-size:clamp(24px,2vw,32px)}
.o-name-in{display:block}
.o-meta{grid-area:meta;margin-top:6px;font:500 10px/1.5 var(--font-mono),monospace;letter-spacing:.07em;text-transform:uppercase;color:var(--o-soft);white-space:nowrap}
.o-meta b{font:inherit;color:#fff;letter-spacing:inherit}
.o-desc{display:none}
.o-cta{grid-area:cta;align-self:center;justify-self:start;margin-top:8px;display:inline-flex;align-items:center;height:38px;padding:0 6px;border:1px solid var(--o-line-2);border-radius:999px;font-size:13px;white-space:nowrap;background:#0a0e18a8;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);transition:background .35s var(--o-ease),border-color .35s var(--o-ease),color .35s,padding .5s var(--o-expo);color:var(--o-paper);text-decoration:none}
.o-cta>span:first-child{max-width:0;overflow:hidden;opacity:0;transition:max-width .55s var(--o-expo),opacity .3s,margin .55s var(--o-expo)}
.o-cta-arrow{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;background:var(--o-paper);color:#0b0d12;font-size:12px;transition:transform .45s var(--o-expo),background .35s}
.o-cta:hover,.o-cta:focus-visible{background:var(--o-accent);border-color:var(--o-accent);color:#fff;padding-left:16px}
.o-cta:hover>span:first-child,.o-cta:focus-visible>span:first-child{max-width:120px;opacity:1;margin-right:12px}
.o-cta:hover .o-cta-arrow{transform:rotate(45deg);background:#fff}

.o-dock{position:relative;justify-self:center;height:calc(var(--dh) + 20px);width:calc(var(--dw-total) + 20px);opacity:0;transform:translateY(20px);transition:opacity 1.2s var(--o-ease) 1.05s,transform 1.4s var(--o-expo) 1.05s;
  --di:34px;--dh:22px;--dg:5px;--dw-total:calc(var(--n,16) * var(--di) + (var(--n,16) - 1) * var(--dg))}
.orbita.is-in .o-dock{opacity:1;transform:none}
.o-dock-pill{position:absolute;left:50%;bottom:0;height:calc(var(--dh) + 20px);width:calc(var(--dw-total) + 20px);transform:translateX(-50%);border-radius:16px;background:#0b101cb8;border:1px solid #dce7fc1f;box-shadow:0 20px 50px -20px #000,inset 0 1px 0 #ffffff0d;-webkit-backdrop-filter:blur(16px) saturate(140%);backdrop-filter:blur(16px) saturate(140%)}
.o-dock-items{position:absolute;left:10px;bottom:10px;width:var(--dw-total);height:var(--dh)}
.o-dock-item{position:absolute;left:0;bottom:0;width:var(--di);height:var(--dh);border-radius:6px;overflow:hidden;transform-origin:50% 100%;will-change:transform;background:#111726;box-shadow:inset 0 0 0 1px #dce7fc1c}
.o-dock-item img{width:100%;height:100%;object-fit:cover;transform:scale(1.9);transform-origin:50% 46%;pointer-events:none;-webkit-user-drag:none;filter:saturate(.85) brightness(.82);transition:filter .3s}
.o-dock-item:hover img,.o-dock-item.is-active img{filter:none}
.o-dock-item:after{content:'';position:absolute;inset:0;border-radius:inherit;box-shadow:inset 0 0 0 1px #dce7fc1c}
.o-dock-item.is-active:after{box-shadow:inset 0 0 0 1px #cfe0ffaa}
.orbita .o-dock-dot{position:absolute;left:0;bottom:-7px;width:4px;height:4px;margin:0 0 0 -2px;border-radius:50%;background:var(--o-paper);box-shadow:0 0 8px #9cc4ff;will-change:transform;pointer-events:none}
.o-dock-tip{position:absolute;left:0;bottom:0;pointer-events:none;opacity:0;transition:opacity .2s;will-change:transform}
.o-dock-tip.on{opacity:1}
.o-dock-tip span{display:block;transform:translateX(-50%);white-space:nowrap;padding:6px 10px;border-radius:8px;background:#e8e7e1;color:#0b0d12;font:600 11px/1 var(--font-sans),sans-serif;letter-spacing:.02em;box-shadow:0 8px 24px -8px #000}

.o-ctrl{justify-self:end;display:flex;gap:10px;opacity:0;transform:translateY(16px);transition:opacity 1.2s var(--o-ease) 1.15s,transform 1.4s var(--o-expo) 1.15s}
.orbita.is-in .o-ctrl{opacity:1;transform:none}
.o-arrow{width:48px;height:48px;border-radius:50%;display:grid;place-items:center;border:1px solid var(--o-line-2)!important;background:#0a0e18a8!important;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);transition:background .35s var(--o-ease),border-color .35s,transform .35s var(--o-expo)}
.o-arrow svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.o-arrow:hover{background:var(--o-paper)!important;border-color:var(--o-paper)!important;color:#0b0d12}
.o-arrow:active{transform:scale(.92)}

.o-scrub-tip{display:none}

/* link al portfolio completo, debajo de la órbita */
.orbita-mas{position:relative;z-index:6;padding:0 5% 40px}
.orbita-mas .portfolio-link{margin-top:0}

/* ---------- compus con pantalla baja: más lugar para la órbita ---------- */
@media (min-width:768px) and (max-height:820px){
  .o-sub{display:none}
  .o-head{top:84px}
}

/* ---------- pantallas medianas ---------- */
@media (max-width:1180px) and (min-width:768px){
  .o-dock{--di:28px;--dh:18px;--dg:4px}
  .o-name{max-width:220px;font-size:24px}
}

/* ---------- celular ---------- */
@media (max-width:767px){
  .orbita{--o-pad:6%;min-height:560px}
  .o-top{top:18px;font-size:8px;gap:25px}
  .o-hint:before{width:14px}
  .o-head{top:58px;right:var(--o-pad)}
  .o-title{font-size:clamp(36px,10.4vw,46px)}
  .o-sub{font-size:13.5px;max-width:300px;margin-top:12px;line-height:1.5}
  .o-bottom{grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:"info info info" "prev dock next";row-gap:14px;column-gap:10px;align-items:center;bottom:calc(14px + var(--o-safe-b))}
  .o-info{grid-area:info;max-width:none;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"count cta" "name cta" "meta cta";column-gap:14px;align-items:end}
  .o-name{font-size:clamp(22px,6.6vw,27px);margin-top:4px;max-width:none}
  .o-meta{font-size:9.5px;margin-top:4px}
  .o-cta{margin:0;padding:0;width:52px;height:52px;justify-content:center;border-radius:50%;align-self:center}
  .o-cta>span:first-child{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  .o-cta-arrow{width:36px;height:36px;font-size:15px}
  .o-ctrl{display:contents}
  .o-prev{grid-area:prev}
  .o-next{grid-area:next}
  .o-arrow{width:44px;height:44px;opacity:0;transition:opacity 1.2s var(--o-ease) 1.15s,background .35s}
  .orbita.is-in .o-arrow{opacity:1}
  .o-dock{grid-area:dock;justify-self:stretch;width:auto;height:44px;--dh:44px;touch-action:none}
  .o-dock-pill{left:0;width:100%;transform:none;height:44px;border-radius:22px}
  .o-dock-items{left:14px;right:14px;bottom:0;width:auto;height:44px}
  .o-dock-item{width:2px;height:12px;bottom:16px;border-radius:2px;background:#9aa6bb;box-shadow:none;margin-left:-1px}
  .o-dock-item img{display:none}
  .o-dock-item:after{display:none}
  .o-dock-item.is-active{background:#fff;box-shadow:0 0 10px #9cc4ff}
  .orbita .o-dock-dot,.o-dock-tip{display:none}
  .o-scrub-tip{display:block;position:fixed;z-index:300;left:0;top:0;width:150px;pointer-events:none;opacity:0;transition:opacity .2s;will-change:transform}
  .o-scrub-tip.on{opacity:1}
  .o-scrub-img{width:150px;aspect-ratio:16/9;border-radius:10px;background:#111 center/cover no-repeat;box-shadow:0 0 0 1px #dce7fc33,0 16px 40px -10px #000}
  .o-scrub-tip span{display:block;margin-top:8px;text-align:center;font:600 13px/1.2 var(--font-sans),sans-serif;text-shadow:0 2px 12px #000}
  .orbita-mas{padding:0 6% 30px}
}
@media (max-width:767px) and (max-height:700px){
  .o-sub{display:none}
}

/* ---------- movimiento reducido ---------- */
@media (prefers-reduced-motion:reduce){
  .orbita *,.orbita *:before,.orbita *:after{transition-duration:.01s!important;transition-delay:0s!important;animation:none!important}
}

@media (hover:hover) and (pointer:fine){
  .o-card:not(.is-focus):hover .o-card-shade{opacity:.12!important;transition:opacity .25s}
}

/* al tocar una tarjeta: respuesta inmediata mientras se abre el proyecto */
.o-card.is-opening{filter:brightness(1.18)}
.o-card.is-opening:after{box-shadow:inset 0 0 0 2px #cfe0ffcc}

/* "Explorar proyectos" / "Seguí explorando": la órbita ocupa la pantalla entera, así que llega sin el margen
   de 92 px que el sitio deja para el encabezado (que igual se esconde al bajar). Si no, se cortaba abajo. */
.orbita{scroll-margin-top:-92px}
