/* ============================================
   Orbit de productos Rincosoft (portado del sitio anterior)
   Autocontenido: no depende de variables externas.
   ============================================ */
.orbit-wrap { position: relative; width: 100%; display: flex; justify-content: center; margin-top: 0; margin-bottom: 30px; }
.orbit-container {
    position: relative;
    width: min(540px, 76vmin); height: min(540px, 76vmin);
    animation: orbitFadeIn 1.2s cubic-bezier(.16, 1, .3, 1) .3s both;
}
@keyframes orbitFadeIn { from { opacity: 0; transform: scale(.9); } to { opacity: 1; transform: scale(1); } }

.orbit-container .ring { position: absolute; top: 50%; left: 50%; border-radius: 50%; transform: translate(-50%, -50%); }
.ring--outer { width: 100%; height: 100%; border: 1px solid rgba(255, 255, 255, .08); animation: ringSpin 80s linear infinite; }
.ring--outer::after { content: ''; position: absolute; top: -4px; left: 50%; transform: translateX(-50%); width: 7px; height: 7px; border-radius: 50%; background: #00d4ff; box-shadow: 0 0 12px rgba(0, 212, 255, .6); }
.ring--mid { width: 70%; height: 70%; border: 1px solid rgba(255, 255, 255, .06); animation: ringSpinReverse 60s linear infinite; }
.ring--mid::after { content: ''; position: absolute; bottom: -3px; left: 50%; transform: translateX(-50%); width: 5px; height: 5px; border-radius: 50%; background: rgba(255, 255, 255, .55); }
.ring--inner { width: 38%; height: 38%; border: 1px dashed rgba(255, 255, 255, .08); animation: ringSpin 40s linear infinite; }
@keyframes ringSpin { to { transform: translate(-50%, -50%) rotate(360deg); } }
@keyframes ringSpinReverse { to { transform: translate(-50%, -50%) rotate(-360deg); } }

.orbit-container .connections { position: absolute; inset: 0; pointer-events: none; width: 100%; height: 100%; }
.orbit-container .conn { stroke: rgba(255, 255, 255, .07); stroke-width: 1; fill: none; transition: all .6s cubic-bezier(.16, 1, .3, 1); }
.orbit-container .conn.lit { stroke-width: 1.5; }

.orbit-container .hub { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 20; cursor: pointer; }
.hub-core {
    width: min(150px, 21vmin); height: min(150px, 21vmin);
    border-radius: 50%;
    background: radial-gradient(circle at 32% 30%, rgba(255, 255, 255, .07), rgba(10, 11, 14, .96));
    border: 1px solid rgba(255, 255, 255, .18);
    display: flex; flex-direction: column; align-items: center; justify-content: center;
    box-shadow: 0 0 48px rgba(0, 212, 255, .1);
    transition: all .5s cubic-bezier(.16, 1, .3, 1);
}
.orbit-container .hub:hover .hub-core { transform: scale(1.04); border-color: rgba(0, 212, 255, .35); box-shadow: 0 0 64px rgba(0, 212, 255, .18); }
.hub-logo { max-width: 62%; max-height: 55%; filter: drop-shadow(0 0 10px rgba(0, 212, 255, .25)); }

.orbit-container .node {
    position: absolute; --size: min(104px, 15vmin);
    width: var(--size); height: var(--size); z-index: 15; cursor: pointer;
    animation: nodeFloat 6s ease-in-out infinite;
}
@keyframes nodeFloat { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-7px); } }

.node-glass {
    width: 100%; height: 100%; border-radius: 14px;
    background: rgba(14, 16, 19, .92); border: 1px solid rgba(255, 255, 255, .12);
    display: flex; flex-direction: column; align-items: center; justify-content: center;
    position: relative; overflow: hidden;
    transition: all .4s cubic-bezier(.16, 1, .3, 1);
    text-align: center; padding: 6px;
    animation: nodeIn .7s cubic-bezier(.16, 1, .3, 1) both;
}
@keyframes nodeIn { from { opacity: 0; transform: scale(.6) translateY(20px); } to { opacity: 1; transform: scale(1) translateY(0); } }
.node-glass::before {
    content: ''; position: absolute; top: 0; left: 20%; right: 20%; height: 2px;
    background: var(--node-color, #00d4ff); border-radius: 0 0 4px 4px; opacity: .45; transition: all .4s;
}
.orbit-container .node:hover .node-glass {
    border-color: color-mix(in srgb, var(--node-color, #00d4ff) 45%, transparent);
    transform: scale(1.08) translateY(-4px); background: rgba(22, 25, 30, .97);
    box-shadow: 0 16px 40px rgba(0, 0, 0, .4);
}
.orbit-container .node:hover .node-glass::before { left: 0; right: 0; opacity: .9; }
.node-icon { font-size: clamp(20px, 3.8vmin, 27px); margin-bottom: 4px; transition: transform .4s cubic-bezier(.16, 1, .3, 1); display: flex; align-items: center; justify-content: center; line-height: 1; }
.node-icon--img { width: clamp(32px, 5.5vmin, 44px); height: clamp(32px, 5.5vmin, 44px); background: #f5f5f5; border-radius: 8px; padding: 4px; box-shadow: 0 2px 8px rgba(0, 0, 0, .3); }
.node-icon--img img { max-width: 100%; max-height: 100%; object-fit: contain; }
.orbit-container .node:hover .node-icon { transform: scale(1.1); }
/* nowrap: el nombre nunca se parte a media palabra ("RVENTA/S"). Si no cabe,
   renderOrbit() le baja el tamaño hasta que entre en una línea. */
.node-label { font-weight: 700; font-size: clamp(9px, 1.6vmin, 12px); letter-spacing: 1px; color: var(--node-color, #00d4ff); line-height: 1.4; white-space: nowrap; max-width: 100%; }
.node-sub { font-size: clamp(7px, 1vmin, 9px); font-weight: 400; color: rgba(255, 255, 255, .5); letter-spacing: .5px; margin-top: 3px; max-width: 92%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; line-height: 1.4; }

/* ---------------------------------------------------------------
   Celular: la tarjeta queda solo con el icono.
   Con 9 nodos alrededor de un círculo que como máximo mide el ancho de la
   pantalla, no hay sitio para nombre ni subtítulo: el nombre se partía a media
   palabra ("RVENTA/S") y el subtítulo quedaba en 41px de los 110 que necesita,
   a 7px de alto. El nombre sigue disponible al tocar el nodo (abre el panel) y
   en la grilla "Un sistema para cada rubro" que va justo debajo.
   --------------------------------------------------------------- */
@media (max-width: 767px) {
    .orbit-container { width: min(540px, 88vmin); height: min(540px, 88vmin); }
    /* 15vmin es el techo para que ninguna esquina pise a la vecina: la distancia
       vertical entre los nodos más cercanos es 0.44·radio. */
    .orbit-container .node { --size: min(104px, 15vmin); }
    .node-glass { border-radius: 13px; padding: 4px; }
    .node-icon { font-size: clamp(22px, 7.5vmin, 30px); margin-bottom: 0; }
    .node-icon--img { width: clamp(30px, 9vmin, 42px); height: clamp(30px, 9vmin, 42px); }
    .node-label, .node-sub { display: none; }
    .hub-core { width: min(150px, 25vmin); height: min(150px, 25vmin); }
}

/* Panel de detalle (clic en un nodo) */
.orbit-panel {
    position: fixed; bottom: 32px; left: 50%; transform: translateX(-50%) translateY(140%);
    background: #14161b; border: 1px solid rgba(255, 255, 255, .16);
    border-radius: 14px; padding: 26px 30px; z-index: 9999;
    max-width: 480px; width: calc(100% - 32px);
    transition: all .6s cubic-bezier(.16, 1, .3, 1);
    opacity: 0; color: #e8eaee;
    box-shadow: 0 24px 64px rgba(0, 0, 0, .5);
}
.orbit-panel.open { transform: translateX(-50%) translateY(0); opacity: 1; }
.orbit-panel .panel-close { position: absolute; top: 12px; right: 14px; background: none; border: none; color: rgba(255,255,255,.55); font-size: 15px; cursor: pointer; }
.orbit-panel .panel-head { display: flex; align-items: center; gap: 14px; margin-bottom: 12px; }
.orbit-panel .panel-icon { font-size: 36px; }
.orbit-panel .panel-title { font-size: 20px; font-weight: 700; letter-spacing: -.2px; line-height: 1.3; }
.orbit-panel .panel-sub { font-size: 11px; font-weight: 500; letter-spacing: 2.5px; color: rgba(255,255,255,.45); text-transform: uppercase; margin-top: 2px; }
.orbit-panel .panel-body { font-size: 14px; line-height: 1.7; color: rgba(255,255,255,.72); font-weight: 400; margin-bottom: 18px; }
.orbit-panel .panel-btn {
    display: inline-block; width: 100%; padding: 11px 18px; border-radius: 100px;
    font-size: 13px; font-weight: 700; text-align: center; text-decoration: none;
    transition: all .2s; color: #05070a !important;
    background: var(--panel-color, #00d4ff);
}
.orbit-panel .panel-btn:hover { filter: brightness(1.1); }

@media (prefers-reduced-motion: reduce) {
    .orbit-container, .orbit-container .node, .node-glass, .orbit-container .ring { animation: none !important; }
}

