/*
 * Lynora Liquid UI
 *
 * Capa visual compartida entre el portal público y la aplicación privada.
 * La sensación líquida se concentra en navegación y acciones principales:
 * no altera la jerarquía documental, el contenido ni los estados de negocio.
 */

.liquid-ui {
  --liquid-accent: var(--accent, var(--orange, #ff6e27));
  --liquid-accent-strong: var(--accent-strong, var(--orange-hover, #e95f20));
  --liquid-surface: rgba(255, 110, 39, 0.11);
  --liquid-line: rgba(255, 110, 39, 0.22);
  --liquid-ease: cubic-bezier(0.22, 1, 0.36, 1);
  --liquid-spring: cubic-bezier(0.22, 1, 0.36, 1);
}

/* --------------------------------------------------------------------------
   Indicador líquido de navegación
   -------------------------------------------------------------------------- */

[data-liquid-nav] {
  position: relative;
  isolation: isolate;
}

[data-liquid-nav] > :not(.liquid-nav-indicator) {
  position: relative;
  z-index: 1;
}

.liquid-nav-indicator {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 0;
  width: var(--liquid-width, 0px);
  height: var(--liquid-height, 0px);
  border: 0;
  border-radius: 999px;
  background: var(--liquid-surface);
  background: color-mix(in srgb, var(--liquid-accent) 12%, transparent);
  box-shadow: 0 7px 14px rgba(14, 22, 41, 0.14);
  opacity: 0;
  pointer-events: none;
  transform: translate3d(var(--liquid-x, 0px), var(--liquid-y, 0px), 0);
  transform-origin: center;
  transition:
    width 360ms var(--liquid-spring),
    height 280ms var(--liquid-ease),
    transform 360ms var(--liquid-spring),
    opacity 150ms ease;
  will-change: width, height, transform;
}

.liquid-nav-indicator.is-visible {
  opacity: 1;
}

@supports (filter: url("#lynora-liquid-goo")) {
  [data-liquid-nav].is-liquid-moving .liquid-nav-indicator,
  [data-liquid-nav].is-liquid-previewing .liquid-nav-indicator {
    filter: url("#lynora-liquid-goo");
  }
}

.liquid-nav-indicator::before,
.liquid-nav-indicator::after {
  content: "";
  position: absolute;
  top: 50%;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: inherit;
  opacity: 0;
  transform: translateY(-50%) scale(0.35);
}

.liquid-nav-indicator::before {
  left: -5px;
}

.liquid-nav-indicator::after {
  right: -5px;
}

[data-liquid-nav].is-liquid-moving .liquid-nav-indicator::before,
[data-liquid-nav].is-liquid-moving .liquid-nav-indicator::after {
  animation: liquid-droplet 360ms var(--liquid-ease);
}

.site-nav[data-liquid-nav] {
  gap: 2px;
}

.site-nav[data-liquid-nav] a {
  padding: 7px 8px;
  border-radius: 999px;
  transition: color 180ms ease;
}

.site-nav[data-liquid-nav] a[aria-current="location"],
.site-nav[data-liquid-nav] a[aria-current="page"],
.site-nav[data-liquid-nav] a:is(:hover, :focus-visible) {
  color: var(--ink);
  font-weight: 650;
}

.mobile-nav-links a[aria-current="location"],
.mobile-nav-links a[aria-current="page"] {
  position: relative;
  padding-left: 18px;
}

.mobile-nav-links a[aria-current="location"]::before,
.mobile-nav-links a[aria-current="page"]::before {
  content: "";
  position: absolute;
  top: 50%;
  left: 1px;
  width: 8px;
  height: 8px;
  border-radius: 55% 45% 58% 42%;
  background: var(--liquid-accent);
  transform: translateY(-50%) rotate(18deg);
  box-shadow: none;
}

.liquid-ui .top-actions[data-liquid-nav] .nav-button.is-active,
.liquid-ui .top-actions[data-liquid-nav] .nav-button[aria-current="page"],
.liquid-ui .top-actions[data-liquid-nav] .nav-button[aria-pressed="true"] {
  border-color: transparent;
  background: transparent;
  color: var(--accent);
  box-shadow: none;
}

.liquid-ui .top-actions[data-liquid-nav] .nav-button:hover:not(.is-active):not([aria-current="page"]):not([aria-pressed="true"]) {
  border-color: transparent;
  background: var(--panel-soft);
  color: var(--text);
}

.liquid-ui .top-actions[data-liquid-nav] .tariffs-nav-group {
  border-radius: 999px;
  background: color-mix(in srgb, var(--panel-soft) 76%, transparent);
}

/* El indicador debe poder pasar por encima del fondo del grupo, mientras el
   texto de cada opción permanece siempre en primer plano. */
.liquid-ui .top-actions[data-liquid-nav] > .liquid-nav-indicator {
  z-index: 2;
}

.liquid-ui .top-actions[data-liquid-nav] .nav-button {
  z-index: 3;
  border-radius: 999px;
}

.liquid-ui .top-actions[data-liquid-nav] .tariffs-nav-group {
  z-index: auto;
}

.liquid-ui .admin-nav[data-liquid-nav] .liquid-nav-indicator {
  border-color: rgba(255, 110, 39, 0.24);
  border-radius: 11px;
  background: rgba(255, 110, 39, 0.12);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05);
}

.liquid-ui .admin-nav[data-liquid-nav] a[aria-current="page"],
.liquid-ui .admin-nav[data-liquid-nav] a.is-active {
  background: transparent;
}

.liquid-ui .admin-nav[data-liquid-nav] a[aria-current="page"]::after,
.liquid-ui .admin-nav[data-liquid-nav] a.is-active::after {
  opacity: 0;
}

.liquid-ui .range-selector[data-liquid-nav] {
  border-radius: 999px;
}

.liquid-ui .range-selector[data-liquid-nav] .liquid-nav-indicator {
  border-color: color-mix(in srgb, var(--orange) 16%, var(--line));
  background: var(--surface);
  box-shadow: 0 2px 8px rgba(14, 22, 41, 0.09);
}

.liquid-ui .range-selector[data-liquid-nav] button.is-active,
.liquid-ui .range-selector[data-liquid-nav] button[aria-pressed="true"] {
  background: transparent;
  box-shadow: none;
}

/* --------------------------------------------------------------------------
   Acciones y campos: tactilidad sin ruido visual
   -------------------------------------------------------------------------- */

.liquid-ui :is(
  .btn-primary,
  .primary-button,
  .primary-action,
  .drawer-primary-action,
  .search-box button[type="submit"],
  .search-box #searchButton,
  .search-box #btnBuscar
) {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  border-radius: 999px;
  transform: translateZ(0);
}

.liquid-ui :is(
  .btn-primary,
  .primary-button,
  .primary-action,
  .drawer-primary-action,
  .search-box button[type="submit"],
  .search-box #searchButton,
  .search-box #btnBuscar
)::before {
  content: "";
  position: absolute;
  top: var(--liquid-pointer-y, 50%);
  left: var(--liquid-pointer-x, 50%);
  z-index: 0;
  width: 180%;
  aspect-ratio: 1;
  border-radius: 48% 52% 44% 56%;
  background: radial-gradient(circle, rgba(255, 255, 255, 0.26), rgba(255, 255, 255, 0) 62%);
  mix-blend-mode: soft-light;
  opacity: 0;
  pointer-events: none;
  transform: translate(-50%, -50%) scale(0.18) rotate(0deg);
  transition: opacity 180ms ease, transform 520ms var(--liquid-ease);
}

.liquid-ui :is(
  .btn-primary,
  .primary-button,
  .primary-action,
  .drawer-primary-action,
  .search-box button[type="submit"],
  .search-box #searchButton,
  .search-box #btnBuscar
):hover::before,
.liquid-ui :is(
  .btn-primary,
  .primary-button,
  .primary-action,
  .drawer-primary-action,
  .search-box button[type="submit"],
  .search-box #searchButton,
  .search-box #btnBuscar
).is-liquid-pressed::before {
  opacity: 1;
  transform: translate(-50%, -50%) scale(1) rotate(9deg);
}

.liquid-ui :is(button, a, input, select, textarea):focus-visible {
  outline: 2px solid var(--liquid-accent);
  outline-offset: 3px;
}

.liquid-ui .search-box {
  border-radius: 18px;
  transition:
    border-color 180ms ease,
    box-shadow 220ms ease,
    transform 220ms var(--liquid-ease);
}

.liquid-ui .search-box:focus-within {
  transform: translateY(-1px);
}

/* El campo vive dentro de un control compuesto. El foco se dibuja en el
   contenedor redondeado para evitar el rectángulo interior sobre la barra. */
.liquid-ui .search-box input:focus-visible {
  outline: 0;
}

.liquid-ui .search-box:has(input:focus-visible) {
  border-color: var(--liquid-accent);
  outline: 2px solid var(--liquid-accent);
  outline-offset: 2px;
  box-shadow: var(--shadow, 0 8px 16px rgba(14, 22, 41, 0.1));
}

.liquid-ui :is(.advanced-grid, .user-menu, .heor-detail-dialog) {
  border-radius: 18px;
}

/* --------------------------------------------------------------------------
   Desplegables líquidos: el movimiento aparece al revelar opciones
   -------------------------------------------------------------------------- */

.liquid-ui .advanced summary {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  border-radius: 999px;
}

.liquid-ui .advanced summary > * {
  position: relative;
  z-index: 1;
}

.liquid-ui .advanced summary::before {
  content: "";
  position: absolute;
  top: 50%;
  right: 5px;
  z-index: 0;
  width: 26px;
  height: 26px;
  border-radius: 58% 42% 54% 46%;
  background: color-mix(in srgb, var(--liquid-accent) 13%, transparent);
  pointer-events: none;
  transform: translateY(-50%) scale(0.72) rotate(12deg);
  transition:
    width 360ms var(--liquid-spring),
    border-radius 360ms var(--liquid-ease),
    opacity 180ms ease,
    transform 360ms var(--liquid-spring);
}

.liquid-ui .advanced summary:hover::before,
.liquid-ui .advanced[open] summary::before {
  width: calc(100% - 10px);
  border-radius: 999px 82% 999px 76%;
  transform: translateY(-50%) scale(1) rotate(0deg);
}

.liquid-ui .advanced[open] .summary-icon {
  border-radius: 58% 42% 55% 45%;
  background: color-mix(in srgb, var(--liquid-accent) 18%, var(--panel-soft));
}

.liquid-ui .advanced-grid {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  transform-origin: top center;
}

.liquid-ui .advanced-grid > * {
  position: relative;
  z-index: 1;
}

.liquid-ui .advanced-grid::before {
  content: "";
  position: absolute;
  top: -70px;
  right: 6%;
  z-index: 0;
  width: 170px;
  height: 125px;
  border-radius: 45% 55% 62% 38% / 58% 42% 58% 42%;
  background: radial-gradient(circle at 45% 55%, color-mix(in srgb, var(--liquid-accent) 10%, transparent), transparent 70%);
  pointer-events: none;
}

.liquid-ui .advanced.is-liquid-opening .advanced-grid {
  animation: liquid-panel-open 440ms var(--liquid-ease) both;
}

.liquid-ui .user-menu {
  isolation: isolate;
  transform-origin: calc(100% - 24px) -8px;
}

.liquid-ui .user-menu::before {
  content: "";
  position: absolute;
  top: -9px;
  right: 19px;
  z-index: 0;
  width: 31px;
  height: 18px;
  border: 1px solid var(--glass-border);
  border-bottom: 0;
  border-radius: 62% 38% 42% 58% / 68% 62% 38% 32%;
  background: var(--glass-strong);
  pointer-events: none;
  transform: rotate(-3deg);
}

.liquid-ui .user-menu > :not(.liquid-menu-highlight),
.liquid-ui .user-menu :is(button, .user-menu-link, .user-menu-fav-item) {
  position: relative;
  z-index: 1;
}

.liquid-ui .user-menu :is(button, .user-menu-link, .user-menu-fav-item):hover {
  background: transparent;
}

.liquid-ui .user-menu.is-liquid-opening {
  animation: liquid-menu-open 390ms var(--liquid-spring) both;
}

.liquid-ui .user-menu.is-liquid-opening > :not(.liquid-menu-highlight, .menu-divider) {
  animation: liquid-menu-item-open 280ms var(--liquid-ease) both;
  animation-delay: calc(45ms + var(--liquid-item-index, 0) * 22ms);
}

.liquid-menu-highlight {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 0;
  width: var(--liquid-menu-width, 0px);
  height: var(--liquid-menu-height, 0px);
  border: 1px solid color-mix(in srgb, var(--liquid-accent) 13%, transparent);
  border-radius: 999px;
  background: color-mix(in srgb, var(--liquid-accent) 11%, transparent);
  opacity: 0;
  pointer-events: none;
  transform: translate3d(var(--liquid-menu-x, 0px), var(--liquid-menu-y, 0px), 0);
  transition:
    width 300ms var(--liquid-spring),
    height 220ms var(--liquid-ease),
    opacity 130ms ease,
    transform 300ms var(--liquid-spring);
  will-change: width, height, transform;
}

.liquid-menu-highlight.is-visible {
  opacity: 1;
}

.liquid-menu-highlight::before,
.liquid-menu-highlight::after {
  content: "";
  position: absolute;
  top: 50%;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: inherit;
  opacity: 0;
  transform: translateY(-50%) scale(0.4);
}

.liquid-menu-highlight::before { left: -4px; }
.liquid-menu-highlight::after { right: -4px; }

.liquid-ui .user-menu.is-liquid-highlight-moving .liquid-menu-highlight::before,
.liquid-ui .user-menu.is-liquid-highlight-moving .liquid-menu-highlight::after {
  animation: liquid-droplet 300ms var(--liquid-ease);
}

/* --------------------------------------------------------------------------
   Landing: formas ambientales detrás de contenido real
   -------------------------------------------------------------------------- */

.landing-page.liquid-ui .hero-visual {
  z-index: 0;
}

.landing-page.liquid-ui .hero-visual::before,
.landing-page.liquid-ui .hero-visual::after {
  content: "";
  position: absolute;
  z-index: 0;
  border-radius: 46% 54% 58% 42% / 52% 42% 58% 48%;
  pointer-events: none;
  filter: blur(2px);
}

.landing-page.liquid-ui .workbench-window {
  position: relative;
  z-index: 1;
}

.landing-page.liquid-ui :is(.specimen-card, .source-trail) {
  z-index: 1;
}

.landing-page.liquid-ui .hero-visual::before {
  top: 4%;
  right: 2%;
  width: min(31vw, 360px);
  aspect-ratio: 1.08;
  background: radial-gradient(circle at 34% 30%, rgba(255, 132, 75, 0.24), rgba(253, 96, 107, 0.08) 58%, transparent 72%);
  animation: liquid-float-a 13s ease-in-out infinite alternate;
}

.landing-page.liquid-ui .hero-visual::after {
  bottom: 2%;
  left: 2%;
  width: min(23vw, 260px);
  aspect-ratio: 1;
  background: radial-gradient(circle at 58% 46%, rgba(15, 118, 110, 0.18), rgba(15, 118, 110, 0.04) 62%, transparent 74%);
  animation: liquid-float-b 15s ease-in-out infinite alternate;
}

.landing-page.liquid-ui :is(
  .workbench-window,
  .specimen-card,
  .data-readout,
  .tender-example-sheet,
  .heor-example-window,
  .library-index,
  .contact-form-panel
) {
  border-radius: 20px;
}

.landing-page.liquid-ui .product-shot img {
  border-radius: 18px;
}

.landing-page.liquid-ui :is(
  .solution-copy,
  .tenders-landing-copy,
  .heor-landing-copy,
  .library-landing-copy
) > .eyebrow::before {
  content: "";
  display: inline-block;
  width: 9px;
  height: 9px;
  margin-right: 8px;
  border-radius: 58% 42% 54% 46%;
  background: var(--liquid-accent);
  box-shadow: none;
  transform: rotate(18deg);
}

/* --------------------------------------------------------------------------
   Aplicación: continuidad visual entre los tres buscadores
   -------------------------------------------------------------------------- */

.liquid-ui .topbar .nav-shell {
  border-radius: 22px;
}

.liquid-ui .nav-utilities {
  position: relative;
  display: flex;
  flex: 0 0 auto;
  align-items: center;
  gap: 8px;
}

.liquid-ui :is(.search-view, .tender-main, .heor-main) {
  position: relative;
  isolation: isolate;
}

.liquid-ui :is(.search-view, .tender-main, .heor-main)::before {
  content: "";
  position: absolute;
  top: 6px;
  right: 4%;
  z-index: -1;
  width: clamp(170px, 22vw, 310px);
  aspect-ratio: 1.2;
  border-radius: 53% 47% 44% 56% / 44% 56% 44% 56%;
  background: radial-gradient(circle at 38% 42%, color-mix(in srgb, var(--liquid-accent) 11%, transparent), transparent 69%);
  filter: blur(8px);
  pointer-events: none;
}

.liquid-ui :is(.tender-result, .heor-result, .library-row, .library-resource-row) {
  transition:
    background-color 180ms ease,
    border-color 180ms ease,
    transform 240ms var(--liquid-ease),
    padding 180ms ease;
}

.liquid-ui :is(.tender-result, .heor-result):hover {
  transform: translateX(4px);
}

/* --------------------------------------------------------------------------
   Movimiento y accesibilidad
   -------------------------------------------------------------------------- */

@keyframes liquid-droplet {
  0%, 100% { opacity: 0; transform: translateY(-50%) scale(0.35); }
  45% { opacity: 0.62; transform: translateY(-50%) scale(1); }
}

@keyframes liquid-float-a {
  from { transform: translate3d(0, 0, 0) rotate(-3deg) scale(0.98); }
  to { transform: translate3d(-18px, 12px, 0) rotate(5deg) scale(1.04); }
}

@keyframes liquid-float-b {
  from { transform: translate3d(0, 0, 0) rotate(4deg); }
  to { transform: translate3d(16px, -10px, 0) rotate(-5deg) scale(1.05); }
}

@keyframes liquid-panel-open {
  0% {
    opacity: 0;
    border-radius: 42px 42px 52% 52% / 28px 28px 34% 34%;
    clip-path: inset(0 28% 84% 28% round 999px);
    transform: translateY(-7px) scale(0.975, 0.94);
  }
  62% {
    opacity: 1;
    border-radius: 24px 18px 22px 26px;
    clip-path: inset(0 round 21px);
    transform: translateY(1px) scale(1.006, 1.012);
  }
  100% {
    opacity: 1;
    border-radius: 18px;
    clip-path: inset(0 round 18px);
    transform: translateY(0) scale(1);
  }
}

@keyframes liquid-menu-open {
  0% {
    opacity: 0;
    border-radius: 48% 22px 46% 28px / 36px 22px 42% 28px;
    clip-path: inset(0 0 82% 58% round 999px);
    transform: translateY(-8px) scale(0.9, 0.72);
  }
  62% {
    opacity: 1;
    border-radius: 24px 18px 22px 26px;
    clip-path: inset(0 round 20px);
    transform: translateY(1px) scale(1.015, 1.025);
  }
  100% {
    opacity: 1;
    border-radius: 18px;
    clip-path: inset(0 round 18px);
    transform: translateY(0) scale(1);
  }
}

@keyframes liquid-menu-item-open {
  from { opacity: 0; transform: translateY(-4px); }
  to { opacity: 1; transform: translateY(0); }
}

@media (max-width: 900px) {
  .liquid-ui .topbar .nav-shell {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: 8px 12px;
    border-radius: 17px;
  }

  .liquid-ui .topbar .brand-lockup {
    grid-column: 1;
    grid-row: 1;
    min-width: 0;
  }

  .liquid-ui .topbar .nav-utilities {
    grid-column: 2;
    grid-row: 1;
    justify-self: end;
  }

  .liquid-ui .topbar .top-actions {
    grid-column: 1 / -1;
    grid-row: 2;
    width: 100%;
    flex-wrap: nowrap;
    justify-content: flex-start;
    overflow-x: auto;
    padding: 2px 12px 5px 2px;
    scroll-padding-inline: 8px;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
    mask-image: linear-gradient(90deg, #000 calc(100% - 24px), transparent);
  }

  .liquid-ui .topbar .top-actions::-webkit-scrollbar {
    display: none;
  }

  .liquid-ui .topbar .nav-button,
  .liquid-ui .topbar .tariffs-nav-group {
    flex: 0 0 auto;
  }

  .liquid-ui .top-actions .liquid-nav-indicator {
    transition-duration: 240ms;
  }
}

@media (max-width: 760px) {
  .landing-page.liquid-ui .hero-visual::before {
    width: 70vw;
  }

  .landing-page.liquid-ui .hero-visual::after {
    width: 48vw;
  }

  .liquid-ui :is(.tender-result, .heor-result):hover {
    transform: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  .liquid-nav-indicator,
  .liquid-menu-highlight,
  .liquid-ui .search-box,
  .liquid-ui .advanced summary::before,
  .liquid-ui :is(.tender-result, .heor-result, .library-row, .library-resource-row),
  .liquid-ui :is(
    .btn-primary,
    .primary-button,
    .primary-action,
    .drawer-primary-action,
    .search-box button[type="submit"],
    .search-box #searchButton,
    .search-box #btnBuscar
  )::before {
    transition: none !important;
  }

  .liquid-nav-indicator::before,
  .liquid-nav-indicator::after,
  .liquid-ui .advanced.is-liquid-opening .advanced-grid,
  .liquid-ui .user-menu.is-liquid-opening,
  .liquid-ui .user-menu.is-liquid-opening > :not(.liquid-menu-highlight, .menu-divider),
  .liquid-ui .user-menu.is-liquid-highlight-moving .liquid-menu-highlight::before,
  .liquid-ui .user-menu.is-liquid-highlight-moving .liquid-menu-highlight::after,
  .landing-page.liquid-ui .hero-visual::before,
  .landing-page.liquid-ui .hero-visual::after {
    animation: none !important;
  }
}
