/* Shared generator/public Cruise Timeline presentation. */
:is(#fpwRouteGen, .fpw-cruise-timeline) {
      --rg-bg: #07111c;
      --rg-bg-2: #091827;
      --rg-panel: rgba(16, 28, 42, 0.92);
      --rg-panel-2: rgba(20, 35, 52, 0.88);
      --rg-line: rgba(114, 159, 214, 0.16);
      --rg-line-strong: rgba(91, 199, 255, 0.34);
      --rg-text: #eef6ff;
      --rg-muted: #9db1c8;
      --rg-soft: #7f95ac;
      --rg-accent: #52b9ff;
      --rg-accent-2: #31d7b5;
      --rg-warn: #ffcf67;
      --rg-good: #34d183;
      --rg-danger: #ff7171;
      --rg-shadow: 0 16px 40px rgba(0, 0, 0, 0.34);
      --rg-r-xl: 22px;
      --rg-r-lg: 16px;
      --rg-r-md: 12px;
      --rg-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
      color: var(--rg-text);
      font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

.fpw-cruise-timeline, .fpw-cruise-timeline * { box-sizing: border-box; }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-section-title {
      color: #d8e7f6;
      font-size: 13px;
      font-weight: 850;
      letter-spacing: 0.12em;
      text-transform: uppercase;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-section-note {
      color: var(--rg-soft);
      font-size: 12px;
      line-height: 1.35;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__empty {
      border: 1px dashed var(--rg-line);
      border-radius: 10px;
      padding: 12px;
      color: var(--rg-muted);
      font-style: italic;
      font-size: 13px;
      margin: 8px;
    }

:is(#fpwRouteGen, .fpw-cruise-timeline) .rg-timeline-shell {
  border: 1px solid rgba(114, 159, 214, 0.14);
  border-radius: 14px;
  background: rgba(255, 255, 255, 0.022);
}

    :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-timeline-wrap {
      min-height: 0;
      display: flex;
      flex: 1 1 420px;
      min-height: 420px;
      gap: 8px;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-timeline-shell {
      min-height: 0;
      flex: 1 1 auto;
      padding: 0;
      display: grid;
      grid-template-rows: auto auto 1fr;
      overflow: hidden;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-timeline-head {
      display: flex;
      align-items: center;
      justify-content: space-between;
      gap: 10px;
      min-width: 0;
      padding: 12px 12px 10px;
      border-bottom: 1px solid rgba(114, 159, 214, 0.14);
      background: linear-gradient(180deg, rgba(255, 255, 255, 0.02), rgba(255, 255, 255, 0));
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-timeline-headline {
      display: flex;
      align-items: baseline;
      gap: 6px;
      flex: 1 1 auto;
      white-space: nowrap;
      min-width: 0;
      overflow: hidden;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-timeline-headline .rg-section-title {
      flex: 0 0 auto;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-timeline-headline .rg-section-note {
      flex: 1 1 auto;
      min-width: 0;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-timeline-actions {
      display: flex;
      gap: 8px;
      align-items: center;
      flex-wrap: wrap;
      justify-content: flex-end;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-timeline-actions label {
      margin: 0;
      color: var(--rg-muted);
      font-size: 12px;
      font-weight: 700;
      white-space: nowrap;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-timeline-actions .form-control {
      width: 88px;
      min-height: 36px;
      padding: 0 10px;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-timeline-actions .btn-secondary {
      min-height: 36px;
      white-space: nowrap;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-leg-columns {
      display: grid;
      grid-template-columns: 32px minmax(0, 1fr) 62px 78px 110px;
      gap: 8px;
      align-items: center;
      padding: 10px 12px;
      border-bottom: 1px solid rgba(114, 159, 214, 0.14);
      background: rgba(12, 20, 31, 0.98);
      color: var(--rg-muted);
      font-size: 11px;
      letter-spacing: 0.15em;
      text-transform: uppercase;
      font-weight: 900;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-leg-columns span:nth-child(1) { text-align: center; }
    :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-leg-columns span:nth-child(3),
    :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-leg-columns span:nth-child(4),
    :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-leg-columns span:nth-child(5) { text-align: right; }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-leg-list {
      min-height: 0;
      overflow: auto;
      padding: 0;
      display: block;
      background: rgba(255, 255, 255, 0.01);
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__legwrap {
      display: block;
      margin-bottom: 0;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__leg {
      display: grid;
      grid-template-columns: 32px minmax(0, 1fr) 62px 78px 110px;
      gap: 8px;
      align-items: center;
      padding: 12px;
      border-bottom: 1px solid rgba(114, 159, 214, 0.08);
      cursor: pointer;
      transition: background 0.18s ease, border-color 0.18s ease;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__leg:hover {
      background: rgba(255, 255, 255, 0.02);
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__leg.is-selected {
      background: rgba(45, 212, 191, 0.12);
      box-shadow: inset 0 0 0 1px rgba(45, 212, 191, 0.35);
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__leg.is-expanded {
      border-color: rgba(45, 212, 191, 0.55);
      box-shadow: inset 0 0 0 1px rgba(45, 212, 191, 0.2);
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__legidx {
      text-align: center;
      color: var(--rg-muted);
      font-family: var(--rg-mono);
      font-size: 12px;
      font-weight: 800;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__legroute {
      min-width: 0;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__legname {
      font-size: 13px;
      font-weight: 900;
      line-height: 1.3;
      overflow-wrap: anywhere;
      color: #d7e7f8;
      display: inline-flex;
      gap: 6px;
      align-items: center;
      flex-wrap: wrap;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__flag {
      border: 1px solid rgba(82, 185, 255, 0.36);
      background: rgba(82, 185, 255, 0.12);
      color: #dff2ff;
      border-radius: 999px;
      padding: 2px 8px;
      font-size: 10px;
      letter-spacing: 0.06em;
      text-transform: uppercase;
      font-weight: 800;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__flag--override {
      border-color: rgba(245, 158, 11, 0.46);
      background: rgba(245, 158, 11, 0.14);
      color: #fde6b0;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__leglocks,
    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__legnm {
      font-family: var(--rg-mono);
      font-size: 13px;
      color: #d7e7f8;
      text-align: right;
      white-space: nowrap;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__legmapaction {
      display: flex;
      justify-content: flex-end;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__legmapbtn {
      min-width: 110px;
      font-size: 13px;
      white-space: nowrap;
      padding: 6px 10px;
      line-height: 1.2;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__leglockpanel {
      margin: 6px 2px 0 40px;
      border: 1px solid rgba(45, 212, 191, 0.22);
      border-radius: 12px;
      background: rgba(7, 16, 29, 0.92);
      padding: 10px;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__leglockhead {
      display: flex;
      justify-content: space-between;
      gap: 10px;
      align-items: center;
      margin-bottom: 8px;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__leglockheadactions,
    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__leglockinlineactions {
      display: flex;
      gap: 8px;
      flex-wrap: wrap;
      justify-content: flex-end;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__lockstate {
      border: 1px solid rgba(114, 159, 214, 0.2);
      border-radius: 10px;
      background: rgba(255, 255, 255, 0.02);
      padding: 8px;
      color: var(--rg-muted);
      font-size: 12px;
      margin-bottom: 8px;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__lockstate--error {
      border-color: rgba(251, 113, 133, 0.5);
      background: rgba(251, 113, 133, 0.13);
      color: #ffd4dc;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__locksummary {
      display: grid;
      grid-template-columns: repeat(4, minmax(0, 1fr));
      gap: 8px;
      margin-bottom: 8px;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__lockchip {
      border: 1px solid var(--rg-line);
      border-radius: 10px;
      background: rgba(255, 255, 255, 0.02);
      padding: 8px;
      display: grid;
      gap: 4px;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__lockchip span {
      font-size: 10px;
      letter-spacing: 0.12em;
      text-transform: uppercase;
      color: var(--rg-muted);
      font-weight: 800;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__lockchip strong {
      font-family: var(--rg-mono);
      font-size: 14px;
      color: #e5f2ff;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__locklist {
      display: grid;
      gap: 8px;
      margin-bottom: 8px;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__lockitem {
      border: 1px solid var(--rg-line);
      border-radius: 10px;
      background: rgba(255, 255, 255, 0.02);
      padding: 8px;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__lockitemhead {
      display: flex;
      justify-content: space-between;
      gap: 8px;
      align-items: center;
      margin-bottom: 6px;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__lockitemtitle {
      font-size: 13px;
      font-weight: 900;
      color: #d7e7f8;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__lockitemcode {
      font-size: 11px;
      font-family: var(--rg-mono);
      color: var(--rg-muted);
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__lockitemmeta {
      display: grid;
      grid-template-columns: repeat(2, minmax(0, 1fr));
      gap: 4px 8px;
      color: var(--rg-muted);
      font-size: 12px;
      line-height: 1.3;
    }

    :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__legtimeline {
      border-top: 1px dashed rgba(114, 159, 214, 0.2);
      padding-top: 8px;
      margin-top: 8px;
    }


@media (max-width: 1120px) {
  :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__locksummary,
  :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__lockitemmeta { grid-template-columns: 1fr; }
  :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-timeline-actions { justify-content: flex-start; }
  :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__leglockpanel { margin-left: 0; }
}

@media (max-width: 760px) {
      :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-leg-columns,
      :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__leg {
        grid-template-columns: 26px minmax(0, 1fr) 52px 66px 90px;
        gap: 6px;
      }
      :is(#fpwRouteGen, .fpw-cruise-timeline) .rg-leg-columns { padding: 8px; }
      :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__leg { padding: 8px; }
      :is(#fpwRouteGen, .fpw-cruise-timeline) .fpw-routegen__legmapbtn { min-width: 84px; padding: 4px 6px; }
}

/* Public timeline utilities: do not import Bootstrap or change other page content. */
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public { font-size: 16px; line-height: 1.5; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .rg-timeline-wrap { min-height: 0; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .rg-timeline-headline { white-space: normal; flex-wrap: wrap; overflow: visible; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .rg-timeline-head .rg-section-title { margin: 0; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .rg-timeline-headline .rg-section-note { white-space: normal; overflow: visible; text-overflow: clip; flex-basis: 100%; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .fpw-routegen__geometry-status { color: var(--rg-muted); font-size: 12px; text-align: right; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .btn-secondary { border-radius: 11px; min-height: 36px; font-size: 14px; font-weight: 700; padding: 0 12px; border: 1px solid rgba(255,255,255,.08); background: linear-gradient(180deg,rgba(255,255,255,.06),rgba(255,255,255,.03)); color: var(--rg-text); cursor: pointer; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .btn-secondary.btn-sm { min-height: 36px; line-height: 1.2; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .card { display: flex; flex-direction: column; min-width: 0; color: #f8f9fa; border: 1px solid #6c757d; border-radius: .375rem; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .card-body { flex: 1 1 auto; padding: 1rem; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .row { display: flex; flex-wrap: wrap; margin: 0 -.25rem; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .row > * { flex-shrink: 0; width: 100%; max-width: 100%; padding: 0 .25rem; margin-top: .5rem; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .g-2 { margin-top: -.5rem; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .small { font-size: .875em; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .text-light { color: #f8f9fa; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .text-dark { color: #212529; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .text-uppercase { text-transform: uppercase; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .opacity-75 { opacity: .75; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .fw-semibold { font-weight: 600; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .d-flex { display: flex; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .align-items-center { align-items: center; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .justify-content-between { justify-content: space-between; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .gap-2 { gap: .5rem; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .mb-0 { margin-bottom: 0; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .mb-1 { margin-bottom: .25rem; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .mb-2 { margin-bottom: .5rem; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .mt-2 { margin-top: .5rem; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .mt-3 { margin-top: 1rem; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .py-2 { padding-top: .5rem; padding-bottom: .5rem; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .px-3 { padding-left: 1rem; padding-right: 1rem; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .bg-transparent { background-color: transparent; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .badge { display: inline-block; width: auto; height: auto; padding: .35em .65em; font-size: .75em; font-weight: 700; line-height: 1; color: #fff; text-align: center; white-space: nowrap; border: 0; border-radius: .375rem; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .bg-success { background-color: #198754; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .bg-warning { background-color: #ffc107; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .bg-danger { background-color: #dc3545; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .alert { padding: 1rem; border: 1px solid transparent; border-radius: .375rem; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .alert-danger { color: #f1aeb5; background: #2c0b0e; border-color: #842029; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .alert-secondary { color: var(--rg-muted); background: rgba(255,255,255,.03); border-color: var(--rg-line); }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .spinner-border { display: inline-block; width: 1rem; height: 1rem; border: .2em solid currentColor; border-right-color: transparent; border-radius: 50%; animation: fpw-timeline-spin .75s linear infinite; }
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public [role="button"]:focus-visible,
:is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public button:focus-visible { outline: 2px solid var(--rg-accent); outline-offset: 2px; }
@keyframes fpw-timeline-spin { to { transform: rotate(360deg); } }
@media (min-width: 576px) {
  :is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .col-sm-4 { flex: 0 0 auto; width: 33.33333333%; }
  :is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .col-sm-6 { flex: 0 0 auto; width: 50%; }
}
@media (max-width: 430px) {
  :is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .rg-leg-columns,
  :is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .fpw-routegen__leg { grid-template-columns: 24px minmax(0,1fr) 36px 52px 60px; gap: 4px; }
  :is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .rg-leg-columns { font-size: 9px; letter-spacing: .06em; }
  :is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .fpw-routegen__legnm { font-size: 11px; }
}
@media (prefers-reduced-motion: reduce) {
  :is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .spinner-border { animation: none; }
  :is(#fpwRouteGen, .fpw-cruise-timeline).fpw-cruise-timeline--public .fpw-routegen__leg { transition: none; }
}
