/* UFN mobile navigation stacking fix
   Keeps the slide-out menu below the ACTUAL measured topbar and above all page content. */

@media (max-width: 900px) {
  :root {
    --ufn-topbar-height: 82px;
  }

  .topbar {
    position: sticky !important;
    top: 0 !important;
    z-index: 10020 !important;
    isolation: isolate;
  }

  .sidebar {
    position: fixed !important;
    top: var(--ufn-topbar-height) !important;
    left: 0 !important;
    bottom: 0 !important;
    height: auto !important;
    max-height: calc(100dvh - var(--ufn-topbar-height)) !important;
    z-index: 10010 !important;
    background: rgba(2, 11, 24, .985) !important;
    border-right-color: rgba(126, 190, 245, .34) !important;
    box-shadow: 22px 0 60px rgba(0, 0, 0, .58);
    backdrop-filter: blur(18px);
    -webkit-backdrop-filter: blur(18px);
    overscroll-behavior: contain;
  }

  .nav-scrim {
    position: fixed !important;
    inset: var(--ufn-topbar-height) 0 0 0 !important;
    z-index: 10000 !important;
    background: rgba(0, 4, 11, .72) !important;
    backdrop-filter: blur(2px);
    -webkit-backdrop-filter: blur(2px);
  }

  .app-layout,
  .content,
  .tab-panel,
  .page-head,
  .hero-panel,
  .document-banner,
  .station-intro-card {
    z-index: auto;
  }

  body.ufn-nav-open .content {
    pointer-events: none;
  }

  body.ufn-nav-open {
    overflow-x: hidden;
  }
}

/* Older mobile browsers without dynamic viewport units. */
@supports not (height: 100dvh) {
  @media (max-width: 900px) {
    .sidebar {
      max-height: calc(100vh - var(--ufn-topbar-height)) !important;
    }
  }
}

/* ============================================================
   V3 // SHORT-LANDSCAPE DRAWER BEHAVIOUR
   On phone/foldable landscape, force the sidebar into a true off-canvas
   drawer so it never appears as a shallow horizontal strip in the layout.
   ============================================================ */

@media (orientation: landscape) and (max-height: 650px) and (min-width: 560px) and (max-width: 1180px) {
  .app-layout {
    display: block !important;
    grid-template-columns: 1fr !important;
  }

  .content {
    width: 100% !important;
    min-width: 0 !important;
  }

  .sidebar {
    width: min(370px, 88vw) !important;
    min-width: 0 !important;
    max-width: min(370px, 88vw) !important;
    overflow-x: hidden !important;
    overflow-y: auto !important;
    scrollbar-width: thin;
    scrollbar-gutter: stable;
    touch-action: pan-y;
    display: flex !important;
    flex-direction: column !important;
    align-items: stretch !important;
    transform: translateX(calc(-100% - 18px)) !important;
    opacity: 0 !important;
    visibility: hidden !important;
    pointer-events: none !important;
    transition:
      transform 240ms ease,
      opacity 180ms ease,
      visibility 0s linear 240ms !important;
  }

  .sidebar.open {
    transform: translateX(0) !important;
    opacity: 1 !important;
    visibility: visible !important;
    pointer-events: auto !important;
    transition:
      transform 240ms ease,
      opacity 180ms ease !important;
  }

  .sidebar .side-section {
    min-width: 0;
    flex: 0 0 auto;
  }

  .sidebar .nav-item {
    min-width: 0;
    max-width: 100%;
  }

  .sidebar .nav-item > span:last-child {
    min-width: 0;
    overflow-wrap: anywhere;
  }

  .sidebar .sidebar-footer {
    display: none !important;
  }

  .nav-scrim[hidden] {
    display: none !important;
  }
}

@media (orientation: landscape) and (max-height: 430px) and (min-width: 560px) and (max-width: 1180px) {
  .sidebar {
    gap: 4px !important;
    padding-top: 5px !important;
    padding-bottom: 6px !important;
  }
}


/* ============================================================
   V4 // RESTORE ORIGINAL RESPONSIVE NAV MODEL
   Portrait = hamburger drawer.
   Landscape = permanent horizontal nav bar.
   This deliberately overrides the generic mobile drawer rules above.
   ============================================================ */

@media (orientation: landscape) {
  /* Header returns to the clean landscape layout: brand left, status right. */
  .topbar {
    grid-template-columns: minmax(0, 1fr) auto !important;
  }

  .menu-button {
    display: none !important;
  }

  /* The app becomes a simple vertical stack:
     header -> horizontal navigation -> page content. */
  .app-layout {
    display: block !important;
    grid-template-columns: none !important;
    min-height: 0 !important;
  }

  .sidebar {
    position: sticky !important;
    top: var(--ufn-topbar-height, 84px) !important;
    left: auto !important;
    right: auto !important;
    bottom: auto !important;

    z-index: 10010 !important;

    width: 100% !important;
    max-width: none !important;
    min-width: 0 !important;

    height: auto !important;
    max-height: none !important;
    min-height: 0 !important;

    display: flex !important;
    flex-direction: row !important;
    align-items: center !important;
    justify-content: flex-start !important;

    gap: 5px !important;
    padding: 6px 10px !important;

    transform: none !important;
    opacity: 1 !important;
    visibility: visible !important;
    pointer-events: auto !important;

    overflow-x: auto !important;
    overflow-y: hidden !important;
    overscroll-behavior-x: contain;
    scrollbar-width: thin;
    scrollbar-gutter: auto;

    border-right: 0 !important;
    border-bottom: 1px solid rgba(126, 190, 245, .28) !important;

    background: rgba(2, 11, 24, .975) !important;
    box-shadow: 0 10px 28px rgba(0, 0, 0, .22) !important;
    backdrop-filter: blur(16px);
    -webkit-backdrop-filter: blur(16px);

    transition: none !important;
  }

  .sidebar.open {
    transform: none !important;
  }

  .sidebar .side-section {
    display: flex !important;
    flex: 0 0 auto !important;
    flex-direction: row !important;
    align-items: center !important;
    gap: 4px !important;
    min-width: max-content !important;
  }

  .sidebar .side-label,
  .sidebar .sidebar-footer {
    display: none !important;
  }

  .sidebar .nav-item {
    display: grid !important;
    grid-template-columns: 28px auto !important;
    align-items: center !important;
    gap: 6px !important;

    width: auto !important;
    min-width: max-content !important;
    max-width: none !important;
    min-height: 38px !important;

    padding: 4px 8px !important;
    border-radius: 6px !important;

    font-size: clamp(.68rem, 1.15vw, .82rem) !important;
    line-height: 1 !important;
    white-space: nowrap !important;
  }

  .sidebar .nav-code,
  .sidebar .nav-code.station-icon-host,
  .sidebar .other-resources-code {
    width: 28px !important;
    height: 28px !important;
    min-height: 28px !important;
    padding: 3px !important;
    border-radius: 7px !important;
  }

  .sidebar .nav-code.station-icon-host .station-icon-image {
    width: 22px !important;
    height: 22px !important;
  }

  .sidebar .other-resources-sidebar .other-resources-nav {
    grid-column: auto !important;
  }

  .nav-scrim {
    display: none !important;
  }

  .content {
    width: 100% !important;
    min-width: 0 !important;
  }

  body.ufn-nav-open .content {
    pointer-events: auto !important;
  }
}

/* Compact the permanent nav slightly on short landscape devices
   without changing it back into a drawer. */
@media (orientation: landscape) and (max-height: 650px) {
  .sidebar {
    padding: 4px 8px !important;
    gap: 3px !important;
  }

  .sidebar .side-section {
    gap: 3px !important;
  }

  .sidebar .nav-item {
    grid-template-columns: 25px auto !important;
    gap: 5px !important;
    min-height: 34px !important;
    padding: 3px 6px !important;
    font-size: .72rem !important;
  }

  .sidebar .nav-code,
  .sidebar .nav-code.station-icon-host,
  .sidebar .other-resources-code {
    width: 25px !important;
    height: 25px !important;
    min-height: 25px !important;
    padding: 2px !important;
  }

  .sidebar .nav-code.station-icon-host .station-icon-image {
    width: 20px !important;
    height: 20px !important;
  }
}

/* Portrait explicitly retains the hamburger/drawer interaction. */
@media (orientation: portrait) and (max-width: 900px) {
  .menu-button {
    display: grid !important;
    place-items: center !important;
  }

  .sidebar {
    position: fixed !important;
    top: var(--ufn-topbar-height, 82px) !important;
    left: 0 !important;
    bottom: 0 !important;

    width: min(310px, 86vw) !important;
    max-width: min(310px, 86vw) !important;

    height: auto !important;
    max-height: calc(100dvh - var(--ufn-topbar-height, 82px)) !important;

    display: flex !important;
    flex-direction: column !important;

    transform: translateX(-103%) !important;
    opacity: 1 !important;
    visibility: visible !important;
    pointer-events: auto !important;

    overflow-x: hidden !important;
    overflow-y: auto !important;
  }

  .sidebar.open {
    transform: translateX(0) !important;
  }

  .sidebar .side-section {
    display: grid !important;
    min-width: 0 !important;
  }

  .sidebar .side-label {
    display: block !important;
  }

  .nav-scrim:not([hidden]) {
    display: block !important;
  }
}


/* ============================================================
   V5 // FULL-WIDTH LANDSCAPE NAV GRID
   Every destination is always visible. No horizontal scrolling.
   ============================================================ */

@media (orientation: landscape) {
  .sidebar {
    display: grid !important;
    grid-template-columns:
      minmax(0, .72fr)
      minmax(0, 1.16fr)
      minmax(0, .88fr)
      minmax(0, .84fr)
      minmax(0, .96fr)
      minmax(0, 1.16fr)
      minmax(0, .88fr)
      minmax(0, .82fr)
      minmax(0, 1.18fr) !important;
    align-items: stretch !important;
    justify-items: stretch !important;
    gap: 4px !important;

    width: 100% !important;
    max-width: none !important;
    min-width: 0 !important;

    padding: 5px 8px !important;
    overflow: hidden !important;
    scrollbar-width: none !important;
  }

  .sidebar::-webkit-scrollbar {
    display: none !important;
  }

  /* Flatten the visual groups so all nine buttons participate in the
     same width-aware grid. */
  .sidebar .side-section,
  .sidebar .other-resources-sidebar {
    display: contents !important;
  }

  .sidebar .side-label,
  .sidebar .sidebar-footer {
    display: none !important;
  }

  .sidebar .nav-item,
  .sidebar .other-resources-nav {
    width: 100% !important;
    min-width: 0 !important;
    max-width: none !important;
    min-height: 42px !important;

    display: grid !important;
    grid-template-columns: 22px minmax(0, 1fr) !important;
    align-items: center !important;
    justify-items: center !important;
    gap: 3px !important;

    padding: 4px 5px !important;
    border-radius: 7px !important;

    font-size: clamp(.58rem, .82vw, .78rem) !important;
    line-height: 1.04 !important;
    text-align: center !important;
    white-space: normal !important;
    overflow: hidden !important;
  }

  .sidebar .nav-item > span:last-child,
  .sidebar .other-resources-nav > span:last-child {
    min-width: 0 !important;
    max-width: 100% !important;
    overflow: hidden !important;
    text-overflow: clip !important;
    overflow-wrap: normal !important;
    word-break: normal !important;
    white-space: normal !important;
    text-align: center !important;
  }

  .sidebar .nav-code,
  .sidebar .nav-code.station-icon-host,
  .sidebar .other-resources-code {
    width: 22px !important;
    height: 22px !important;
    min-height: 22px !important;
    padding: 2px !important;
    border-radius: 6px !important;
  }

  .sidebar .nav-code.station-icon-host .station-icon-image {
    width: 18px !important;
    height: 18px !important;
  }

  .sidebar .other-resources-code {
    font-size: .58rem !important;
    letter-spacing: 0 !important;
  }
}

/* Short landscape: tighten the same full-width grid rather than introducing
   any scrolling or changing navigation mode. */
@media (orientation: landscape) and (max-height: 650px) {
  .sidebar {
    gap: 2px !important;
    padding: 3px 5px !important;
  }

  .sidebar .nav-item,
  .sidebar .other-resources-nav {
    grid-template-columns: 21px minmax(0, 1fr) !important;
    gap: 3px !important;
    min-height: 36px !important;
    padding: 2px 3px !important;
    font-size: clamp(.54rem, .74vw, .69rem) !important;
  }

  .sidebar .nav-code,
  .sidebar .nav-code.station-icon-host,
  .sidebar .other-resources-code {
    width: 21px !important;
    height: 21px !important;
    min-height: 21px !important;
  }

  .sidebar .nav-code.station-icon-host .station-icon-image {
    width: 17px !important;
    height: 17px !important;
  }
}


/* Engineering is the widest single-word station label.
   Give it a tiny type safeguard on narrower landscape screens. */
@media (orientation: landscape) and (max-width: 1500px) {
  .sidebar .nav-item[data-nav="engineering"] {
    font-size: clamp(.56rem, .72vw, .70rem) !important;
    letter-spacing: .01em !important;
  }
}


/* ============================================================
   V7 // LANDSCAPE PHONE NO-CUT GUARANTEE
   On phone/tablet landscape, stack icon over label so every item gets the
   full tile width for text. This prevents Weapons / Engineering clipping.
   ============================================================ */

@media (orientation: landscape) and (max-width: 1600px) {
  .sidebar .nav-item,
  .sidebar .other-resources-nav {
    grid-template-columns: 1fr !important;
    grid-template-rows: auto auto !important;
    align-content: center !important;
    justify-items: center !important;
    row-gap: 2px !important;
    column-gap: 0 !important;

    min-height: 46px !important;
    padding: 4px 3px !important;

    font-size: clamp(.52rem, .72vw, .70rem) !important;
    line-height: 0.96 !important;
    letter-spacing: 0.01em !important;
    overflow: visible !important;
  }

  .sidebar .nav-item > span:last-child,
  .sidebar .other-resources-nav > span:last-child {
    display: block !important;
    width: 100% !important;
    max-width: 100% !important;
    overflow: visible !important;
    text-overflow: clip !important;
    white-space: normal !important;
    overflow-wrap: anywhere !important;
    word-break: normal !important;
    hyphens: auto !important;
    line-height: 0.96 !important;
    text-align: center !important;
  }

  .sidebar .nav-code,
  .sidebar .nav-code.station-icon-host,
  .sidebar .other-resources-code {
    justify-self: center !important;
    align-self: end !important;
    width: 20px !important;
    height: 20px !important;
    min-height: 20px !important;
    padding: 2px !important;
    border-radius: 6px !important;
  }

  .sidebar .nav-code.station-icon-host .station-icon-image {
    width: 16px !important;
    height: 16px !important;
  }

  .sidebar .other-resources-code {
    font-size: .54rem !important;
  }
}

@media (orientation: landscape) and (max-width: 1100px) {
  .sidebar {
    gap: 2px !important;
    padding: 3px 4px !important;
  }

  .sidebar .nav-item,
  .sidebar .other-resources-nav {
    min-height: 44px !important;
    padding: 3px 2px !important;
    font-size: clamp(.48rem, .68vw, .64rem) !important;
  }

  .sidebar .nav-item[data-nav="basic-training"],
  .sidebar .other-resources-nav {
    font-size: clamp(.46rem, .64vw, .61rem) !important;
  }
}


/* ============================================================
   V8 // LANDSCAPE NAV VISUAL POLISH
   Cosmetic only. No responsive/layout-mode changes.
   ============================================================ */

@media (orientation: landscape) {
  .sidebar {
    background:
      linear-gradient(180deg, rgba(5, 18, 32, .985), rgba(2, 10, 20, .985)) !important;
    border-top: 1px solid rgba(91, 184, 235, .14) !important;
    border-bottom: 1px solid rgba(91, 184, 235, .34) !important;
    box-shadow:
      inset 0 1px 0 rgba(255,255,255,.018),
      inset 0 -1px 0 rgba(91,184,235,.055),
      0 8px 22px rgba(0,0,0,.18) !important;
  }

  .sidebar .nav-item,
  .sidebar .other-resources-nav {
    position: relative !important;
    border: 1px solid transparent !important;
    background: rgba(5, 18, 32, .20) !important;
    box-shadow: inset 0 1px 0 rgba(255,255,255,.012);
    transition:
      background 150ms ease,
      border-color 150ms ease,
      box-shadow 150ms ease,
      color 150ms ease,
      filter 150ms ease !important;
  }

  .sidebar .nav-item > span:last-child,
  .sidebar .other-resources-nav > span:last-child {
    font-weight: 600 !important;
    text-wrap: balance;
    opacity: .88;
    transition: opacity 150ms ease, text-shadow 150ms ease !important;
  }

  .sidebar .nav-code,
  .sidebar .nav-code.station-icon-host,
  .sidebar .other-resources-code {
    display: grid !important;
    place-items: center !important;
    align-self: center !important;
    justify-self: center !important;
    background: rgba(3, 12, 24, .46) !important;
    box-shadow:
      inset 0 1px 0 rgba(255,255,255,.025),
      0 3px 9px rgba(0,0,0,.16);
    transition:
      transform 150ms ease,
      filter 150ms ease,
      border-color 150ms ease,
      box-shadow 150ms ease !important;
  }

  .sidebar .nav-code.station-icon-host .station-icon-image {
    object-position: center !important;
    transform: translateZ(0);
  }

  /* Generic active state for Home / Basic Training / Other Resources. */
  .sidebar .nav-item.active,
  .sidebar .other-resources-nav.active {
    border-color: rgba(105, 194, 242, .56) !important;
    background:
      linear-gradient(180deg, rgba(19, 68, 101, .42), rgba(8, 31, 51, .34)) !important;
    box-shadow:
      inset 0 0 0 1px rgba(105, 194, 242, .08),
      inset 0 -2px 0 rgba(105, 194, 242, .72),
      0 0 16px rgba(75, 171, 226, .10) !important;
  }

  .sidebar .nav-item.active > span:last-child,
  .sidebar .other-resources-nav.active > span:last-child {
    opacity: 1 !important;
    color: #edf9ff !important;
    text-shadow: 0 0 10px rgba(91, 190, 240, .18);
  }

  /* Station active states inherit the station RGB variables already used
     by the hover-pulse system. */
  .sidebar .nav-item.active[data-nav="captain"],
  .sidebar .nav-item.active[data-nav="helms"],
  .sidebar .nav-item.active[data-nav="weapons"],
  .sidebar .nav-item.active[data-nav="engineering"],
  .sidebar .nav-item.active[data-nav="science"],
  .sidebar .nav-item.active[data-nav="relay"] {
    border-color: rgba(var(--ufn-station-rgb), .58) !important;
    background:
      linear-gradient(
        180deg,
        rgba(var(--ufn-station-rgb), .16),
        rgba(var(--ufn-station-rgb), .07)
      ) !important;
    box-shadow:
      inset 0 0 0 1px rgba(var(--ufn-station-rgb), .08),
      inset 0 -2px 0 rgba(var(--ufn-station-rgb), .82),
      0 0 17px rgba(var(--ufn-station-rgb), .12) !important;
  }

  .sidebar .nav-item.active[data-nav="captain"] > span:last-child,
  .sidebar .nav-item.active[data-nav="helms"] > span:last-child,
  .sidebar .nav-item.active[data-nav="weapons"] > span:last-child,
  .sidebar .nav-item.active[data-nav="engineering"] > span:last-child,
  .sidebar .nav-item.active[data-nav="science"] > span:last-child,
  .sidebar .nav-item.active[data-nav="relay"] > span:last-child {
    opacity: 1 !important;
    color: rgb(var(--ufn-station-rgb)) !important;
    text-shadow: 0 0 10px rgba(var(--ufn-station-rgb), .24);
  }

  .sidebar .nav-item.active[data-nav="captain"] .nav-code,
  .sidebar .nav-item.active[data-nav="helms"] .nav-code,
  .sidebar .nav-item.active[data-nav="weapons"] .nav-code,
  .sidebar .nav-item.active[data-nav="engineering"] .nav-code,
  .sidebar .nav-item.active[data-nav="science"] .nav-code,
  .sidebar .nav-item.active[data-nav="relay"] .nav-code {
    border-color: rgba(var(--ufn-station-rgb), .68) !important;
    box-shadow:
      inset 0 0 0 1px rgba(var(--ufn-station-rgb), .12),
      0 0 10px rgba(var(--ufn-station-rgb), .18) !important;
  }

  /* Portal-level items get complementary accents rather than station colours. */
  .sidebar .nav-item.active[data-nav="home"] {
    border-color: rgba(92, 190, 241, .58) !important;
  }

  .sidebar .nav-item.active[data-nav="general"] {
    border-color: rgba(222, 176, 70, .62) !important;
    background:
      linear-gradient(180deg, rgba(222,176,70,.14), rgba(96,70,20,.06)) !important;
    box-shadow:
      inset 0 -2px 0 rgba(222,176,70,.78),
      0 0 15px rgba(222,176,70,.08) !important;
  }

  .sidebar .nav-item.active[data-nav="general"] > span:last-child {
    color: #f2d27a !important;
    text-shadow: 0 0 10px rgba(222,176,70,.18);
  }

  @media (hover: hover) and (pointer: fine) {
    .sidebar .nav-item:hover,
    .sidebar .other-resources-nav:hover {
      background: rgba(18, 55, 80, .28) !important;
      border-color: rgba(112, 188, 228, .28) !important;
    }

    .sidebar .nav-item:hover > span:last-child,
    .sidebar .other-resources-nav:hover > span:last-child {
      opacity: 1;
    }

    .sidebar .nav-item:hover .nav-code,
    .sidebar .other-resources-nav:hover .nav-code {
      transform: translateY(-1px);
      filter: brightness(1.08);
    }
  }
}

@media (prefers-reduced-motion: reduce) {
  .sidebar .nav-item,
  .sidebar .nav-code,
  .sidebar .nav-item > span:last-child {
    transition: none !important;
  }
}
