/**
 * Freightton Core — component system.
 *
 * Single coherent component layer for every screen the plugin mounts.
 * All colors resolve through the theme's aviation tokens (--ft-*),
 * with fallbacks matching the SAME palette (cobalt #2E4BD1, ink
 * #0A0F1C, amber signal #F2A93B) so the plugin degrades gracefully if
 * the theme is missing — previous versions had legacy Tailwind-blue
 * fallbacks that clashed with the design system.
 *
 * Scales (used everywhere, never ad-hoc):
 *   radius: 8px controls · 12px cards · 999px pills
 *   motion: .15s ease (transform/opacity/border/background only)
 *   type:   13px meta · 14px body · 15px emphasis · mono for data
 */

.ft-app { font-size: 14.5px; color: var(--ft-text, #10131C); }

/* ===== Fields ===== */
.ft-form { display: flex; gap: 10px; margin-bottom: 16px; flex-wrap: wrap; align-items: center; }
.ft-form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.ft-form-grid button { grid-column: 1 / -1; }

.ft-form input, .ft-form select, .ft-app select {
  font-family: var(--ft-font-body, inherit); font-size: 14px; color: var(--ft-text, #10131C);
  background: var(--ft-surface, #fff);
  border: 1.5px solid var(--ft-line, #E4E7EE); border-radius: 8px; padding: 10px 12px;
  transition: border-color .15s ease, box-shadow .15s ease;
  min-width: 0;
}
.ft-form input::placeholder { color: #9AA1AD; }
.ft-form input:hover, .ft-form select:hover { border-color: #C9CFDA; }
.ft-form input:focus, .ft-form select:focus {
  outline: none; border-color: var(--ft-primary, #2E4BD1);
  box-shadow: 0 0 0 3px rgba(46, 75, 209, .12);
}
.ft-form input:invalid:not(:placeholder-shown) { border-color: var(--ft-danger, #D8483A); }

/* Airport codes, references, weights: manifest typography */
input[name="origin"], input[name="destination"], input[name="carrier_code"],
input[name="airline_code"], input[name="routing"], input[name="mawb"],
#ft-pickup-address, #ft-delivery-address { text-transform: none; }
input[name="origin"], input[name="destination"], input[name="carrier_code"],
input[name="airline_code"], input[name="mawb"] {
  font-family: var(--ft-font-mono, ui-monospace, monospace); text-transform: uppercase; letter-spacing: .04em;
}

/* ===== Buttons ===== */
.ft-form button, .ft-doc-actions button {
  font-family: var(--ft-font-body, inherit); font-size: 14px; font-weight: 600;
  background: var(--ft-primary, #2E4BD1); color: #fff; border: none; border-radius: 8px;
  padding: 10px 18px; cursor: pointer;
  transition: background .15s ease, transform .1s ease;
}
.ft-form button:hover, .ft-doc-actions button:hover { background: var(--ft-primary-hover, #2540B0); }
.ft-form button:active { transform: translateY(1px); }
.ft-form button:focus-visible, .ft-link-btn:focus-visible, .ft-tab:focus-visible {
  outline: 2px solid var(--ft-primary, #2E4BD1); outline-offset: 2px;
}
.ft-form button:disabled { opacity: .55; cursor: not-allowed; transform: none; }
.ft-form button.ft-btn-secondary {
  background: var(--ft-surface, #fff); color: var(--ft-primary, #2E4BD1);
  border: 1.5px solid var(--ft-primary, #2E4BD1);
}
.ft-form button.ft-btn-secondary:hover { background: var(--ft-primary-soft, #EDF1FC); }

.ft-link-btn {
  background: none; border: none; color: var(--ft-primary, #2E4BD1); font-size: 13px; font-weight: 600;
  cursor: pointer; padding: 4px 0; font-family: inherit; text-decoration: underline; text-underline-offset: 2px;
}
.ft-cta-link {
  display: inline-block; margin-top: 12px; padding: 9px 16px; border-radius: 8px;
  background: var(--ft-primary, #2E4BD1); color: #fff; font-weight: 600; font-size: 13.5px;
  transition: background .15s ease;
}
.ft-cta-link:hover { background: var(--ft-primary-hover, #2540B0); }

/* ===== Micro-labels ===== */
.ft-subform-label {
  font-size: 11.5px; font-weight: 700; color: var(--ft-muted, #69707D);
  text-transform: uppercase; letter-spacing: .07em; margin: 18px 0 8px;
}
.ft-subform-row { margin-bottom: 8px; align-items: center; }
.ft-subform-row input, .ft-subform-row select { max-width: 170px; }
.ft-row-remove {
  background: none; border: 1.5px solid var(--ft-line, #E4E7EE); border-radius: 8px;
  width: 32px; height: 38px; cursor: pointer; color: var(--ft-muted, #69707D); font-size: 16px; line-height: 1;
  transition: color .15s ease, border-color .15s ease;
}
.ft-row-remove:hover { color: var(--ft-danger, #D8483A); border-color: var(--ft-danger, #D8483A); }
.ft-row-add { margin-bottom: 4px; padding: 6px 12px !important; font-size: 13px !important; }

/* ===== Data rows ===== */
.ft-rate-row, .ft-event-row {
  display: flex; align-items: center; flex-wrap: wrap; gap: 2px;
  padding: 11px 10px; margin: 0 -10px; border-bottom: 1px solid var(--ft-line-2, #EDF0F5);
  font-size: 14px; border-radius: 8px;
  transition: background .15s ease;
}
.ft-rate-row:hover, .ft-event-row:hover { background: var(--ft-hover, #F0F3F9); }
.ft-rate-row:last-child, .ft-event-row:last-child { border-bottom: none; }
.ft-sep { color: #C9CFDA; margin: 0 7px; }
.ft-rate-row .ft-deactivate {
  margin-left: auto; background: none; border: none; color: var(--ft-muted, #69707D);
  font-size: 12.5px; font-weight: 600; cursor: pointer; font-family: inherit;
  padding: 4px 8px; border-radius: 6px; transition: color .15s ease, background .15s ease;
}
.ft-rate-row .ft-deactivate:hover { color: var(--ft-danger, #D8483A); background: var(--ft-danger-bg, #FBEAE8); }

/* ===== Shipment cards ===== */
.ft-ship-card {
  border: 1px solid var(--ft-line, #E4E7EE); border-radius: 12px;
  padding: 14px 16px; margin-bottom: 12px; background: var(--ft-surface, #fff);
  transition: box-shadow .15s ease, border-color .15s ease;
}
.ft-ship-card:hover { box-shadow: 0 4px 16px rgba(10, 15, 28, .07); border-color: #D6DBE5; }
.ft-ship-row { display: flex; justify-content: space-between; align-items: center; gap: 8px; padding: 3px 0; font-size: 14px; }

/* ===== Status badges (dot encodes state at a glance) ===== */
.ft-badge {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 11.5px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  padding: 3px 10px; border-radius: 999px; background: var(--ft-chip, #EAEEF6); color: var(--ft-muted, #69707D);
}
.ft-badge::before { content: ''; width: 5px; height: 5px; border-radius: 50%; background: currentColor; }
.ft-badge-quote { background: var(--ft-signal-bg, #FDF1DD); color: #8A5A10; }
.ft-badge-booking { background: var(--ft-success-bg, #E4F7EF); color: #116146; }
.ft-badge-signal { background: var(--ft-signal, #F2A93B); color: #402A04; }
.ft-badge-signal-soft { background: var(--ft-signal-bg, #FDF1DD); color: #8A5A10; }
.ft-badge-signal::before { background: #402A04; }

/* ===== Quote result card (document preview) ===== */
.ft-quote-card {
  border: 1px solid var(--ft-line, #E4E7EE); border-left: 3px solid var(--ft-signal, #F2A93B);
  border-radius: 12px; padding: 18px 20px; margin-top: 12px; background: var(--ft-surface, #fff);
  box-shadow: 0 2px 10px rgba(10, 15, 28, .05);
}
.ft-quote-card > div { padding: 2px 0; }
.ft-quote-ref { font-family: var(--ft-font-mono, monospace); font-weight: 700; font-size: 16px; color: var(--ft-ink, #0A0F1C); margin-bottom: 6px; }
.ft-quote-total {
  font-family: var(--ft-font-mono, monospace); font-weight: 700; font-size: 19px; color: var(--ft-ink, #0A0F1C);
  border-top: 1px solid var(--ft-line, #E4E7EE); margin-top: 10px; padding-top: 10px !important;
}
.ft-quote-agent { font-size: 13px; color: var(--ft-muted, #69707D); display: flex; align-items: center; gap: 6px; }
.ft-quote-agent::before { content: ''; width: 5px; height: 5px; border-radius: 50%; background: var(--ft-signal, #F2A93B); }

/* ===== Inline feedback ===== */
.ft-msg { font-size: 13.5px; padding: 4px 0; }
.ft-msg-loading { color: var(--ft-muted, #69707D); }
.ft-msg-loading::after { content: '…'; animation: ft-ellipsis 1.2s steps(4, end) infinite; }
@keyframes ft-ellipsis { 0% { content: ''; } 25% { content: '.'; } 50% { content: '..'; } 75% { content: '…'; } }
.ft-msg-success, .ft-msg-error {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 7px 12px; border-radius: 8px; font-weight: 600; margin: 4px 0;
}
.ft-msg-success { background: var(--ft-success-bg, #E4F7EF); color: #116146; }
.ft-msg-error { background: var(--ft-danger-bg, #FBEAE8); color: #A33327; }
.ft-msg-success::before, .ft-msg-error::before { content: ''; width: 6px; height: 6px; border-radius: 50%; background: currentColor; flex: none; }
.ft-msg-error a { color: inherit; text-decoration: underline; text-underline-offset: 2px; }

/* ===== Empty states (an invitation to act, not a shrug) ===== */
.ft-empty {
  color: var(--ft-muted, #69707D); font-size: 13.5px; text-align: center;
  padding: 28px 16px; border: 1.5px dashed var(--ft-line, #E4E7EE); border-radius: 12px; margin: 8px 0;
}
.ft-empty::before {
  content: ''; display: block; width: 44px; height: 5px; margin: 0 auto 12px;
  background:
    radial-gradient(circle 2.5px, var(--ft-signal, #F2A93B) 100%, transparent 0) left center / 5px 5px no-repeat,
    radial-gradient(circle 2.5px, var(--ft-signal, #F2A93B) 100%, transparent 0) right center / 5px 5px no-repeat,
    repeating-linear-gradient(90deg, var(--ft-line, #E4E7EE) 0 4px, transparent 4px 8px) center / 26px 1.5px no-repeat;
}

/* ===== Tabs (auth) ===== */
.ft-tabs { display: flex; margin-bottom: 18px; border-bottom: 1.5px solid var(--ft-line, #E4E7EE); }
.ft-tab {
  padding: 9px 2px; margin-right: 22px; border: none; background: none; cursor: pointer;
  font-size: 14px; font-weight: 600; color: var(--ft-muted, #69707D); font-family: inherit;
  border-bottom: 2px solid transparent; margin-bottom: -1.5px;
  transition: color .15s ease, border-color .15s ease;
}
.ft-tab:hover { color: var(--ft-text, #10131C); }
.ft-tab.is-active { color: var(--ft-primary, #2E4BD1); border-bottom-color: var(--ft-primary, #2E4BD1); }

/* ===== Static info card (profile) ===== */
.ft-card-static {
  border: 1px solid var(--ft-line, #E4E7EE); border-radius: 12px;
  padding: 6px 18px; margin-bottom: 18px; background: var(--ft-surface-2, #FAFBFD);
}
.ft-card-static .ft-ship-row { border-bottom: 1px solid var(--ft-line-2, #EDF0F5); padding: 9px 0; }
.ft-card-static .ft-ship-row:last-child { border-bottom: none; }
.ft-card-static .ft-ship-row > span:first-child {
  font-size: 11.5px; font-weight: 700; color: var(--ft-muted, #69707D);
  text-transform: uppercase; letter-spacing: .07em;
}

/* ===== Documents panel ===== */
.ft-docs-toggle {
  background: none; border: 1.5px solid var(--ft-line, #E4E7EE); border-radius: 8px;
  padding: 6px 12px; font-size: 12.5px; font-weight: 600; color: var(--ft-primary, #2E4BD1);
  cursor: pointer; font-family: inherit; margin-top: 8px; transition: background .15s ease, border-color .15s ease;
}
.ft-docs-toggle:hover { background: var(--ft-primary-soft, #EDF1FC); border-color: var(--ft-primary, #2E4BD1); }
.ft-docs-panel { margin-top: 12px; padding-top: 12px; border-top: 1px dashed var(--ft-line, #E4E7EE); }
.ft-doc-row { padding: 5px 0; font-size: 14px; }
.ft-doc-msg { margin-top: 8px; font-size: 13px; color: var(--ft-muted, #69707D); }

/* ===== Manifest typography for data ===== */
.ft-mono, .ft-num { font-family: var(--ft-font-mono, ui-monospace, monospace); }
.ft-rate-row span:last-of-type:not(.ft-badge), .ft-ship-row .ft-quote-ref { font-family: var(--ft-font-mono, ui-monospace, monospace); }

/* ===== Mini routing line (origin→destination, never a plain arrow) ===== */
.ft-mini-route { display: inline-flex; align-items: center; gap: 3px; margin: 0 7px; vertical-align: middle; }
.ft-mini-route .ft-mini-dot { width: 4px; height: 4px; border-radius: 50%; background: var(--ft-signal, #F2A93B); flex: none; }
.ft-mini-route .ft-mini-line { width: 18px; height: 1px; background: repeating-linear-gradient(90deg, var(--ft-signal, #F2A93B) 0 3px, transparent 3px 6px); }

/* ===== Toasts ===== */
#ft-toast-region { position: fixed; bottom: 20px; right: 20px; z-index: 999; display: flex; flex-direction: column; gap: 10px; max-width: 330px; }
.ft-toast {
  background: var(--ft-ink, #0A0F1C); color: #fff; padding: 12px 16px; border-radius: 10px;
  font-size: 13.5px; box-shadow: 0 12px 32px rgba(0, 0, 0, .3); display: flex; align-items: center; gap: 10px;
  animation: ft-toast-in .2s ease;
}
.ft-toast-success { border-left: 3px solid var(--ft-success, #1FAE7A); }
.ft-toast-error { border-left: 3px solid var(--ft-danger, #D8483A); }
.ft-toast.is-leaving { animation: ft-toast-out .18s ease forwards; }
@keyframes ft-toast-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
@keyframes ft-toast-out { to { opacity: 0; transform: translateX(8px); } }

/* ===== Skeletons ===== */
.ft-skeleton-row { display: flex; gap: 12px; padding: 13px 4px; align-items: center; }
.ft-skeleton-block {
  height: 12px; border-radius: 5px;
  background: linear-gradient(90deg, #EEF0F4 25%, #F7F8FA 37%, #EEF0F4 63%);
  background-size: 400% 100%; animation: ft-skeleton 1.4s ease infinite;
}
@keyframes ft-skeleton { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } }

/* ===== Rate comparison (search results) ===== */
.ft-compare-head { font-size: 13px; color: var(--ft-muted, #69707D); margin-bottom: 12px; display: flex; align-items: center; }
.ft-compare-card {
  border: 1px solid var(--ft-line, #E4E7EE); border-radius: 12px; padding: 15px 18px; margin-bottom: 10px;
  position: relative; background: var(--ft-surface, #fff);
  transition: box-shadow .15s ease, border-color .15s ease;
}
.ft-compare-card:hover { box-shadow: 0 4px 16px rgba(10, 15, 28, .08); }
.ft-compare-card.is-best { border-color: var(--ft-signal, #F2A93B); background: linear-gradient(180deg, var(--ft-signal-bg, #FDF1DD) 0%, #fff 64px); }
.ft-compare-card .ft-badge-signal { position: absolute; top: -10px; left: 14px; }
.ft-compare-row { display: grid; grid-template-columns: 64px 1fr auto auto auto; gap: 14px; align-items: center; }
.ft-compare-carrier { font-family: var(--ft-font-mono, monospace); font-weight: 700; font-size: 15px; }
.ft-compare-route, .ft-compare-transit { color: var(--ft-muted, #69707D); font-size: 13px; }
.ft-compare-transit { white-space: nowrap; }
.ft-compare-price { font-family: var(--ft-font-mono, monospace); font-weight: 700; font-size: 18px; color: var(--ft-ink, #0A0F1C); }
.ft-compare-price span { font-size: 12px; font-weight: 500; color: var(--ft-muted, #69707D); }
.ft-compare-cta {
  background: var(--ft-primary, #2E4BD1); color: #fff; padding: 8px 16px; border-radius: 8px;
  font-size: 13px; font-weight: 600; white-space: nowrap; transition: background .15s ease;
}
.ft-compare-cta:hover { background: var(--ft-primary-hover, #2540B0); }
@media (max-width: 640px) {
  .ft-compare-row { grid-template-columns: 1fr 1fr; grid-template-areas: "carrier price" "route transit" "cta cta"; row-gap: 6px; }
  .ft-compare-carrier { grid-area: carrier; } .ft-compare-price { grid-area: price; justify-self: end; }
  .ft-compare-route { grid-area: route; } .ft-compare-transit { grid-area: transit; justify-self: end; }
  .ft-compare-cta { grid-area: cta; text-align: center; }
}

/* ===== KPI cards ===== */
.ft-kpi-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 22px; }
.ft-kpi-card { background: var(--ft-surface, #fff); border: 1px solid var(--ft-line, #E4E7EE); border-radius: 12px; padding: 15px 17px; }
.ft-kpi-value { font-size: 23px; font-weight: 700; color: var(--ft-ink, #0A0F1C); margin-bottom: 3px; }
.ft-kpi-label { font-size: 11.5px; font-weight: 600; color: var(--ft-muted, #69707D); text-transform: uppercase; letter-spacing: .05em; }
@media (max-width: 640px) { .ft-kpi-row { grid-template-columns: repeat(2, 1fr); } }

/* ===== Quotation document (A4, print-ready) ===== */
.ft-doc-actions { display: flex; justify-content: flex-end; margin-bottom: 14px; }
.ft-doc {
  background: #fff; border: 1px solid var(--ft-line, #E4E7EE); border-radius: 12px;
  padding: 40px 44px; max-width: 800px; margin: 0 auto;
  font-size: 14px; line-height: 1.55; color: var(--ft-text, #10131C);
}
.ft-doc-head { display: flex; justify-content: space-between; align-items: flex-start; border-bottom: 2px solid var(--ft-ink, #0A0F1C); padding-bottom: 18px; margin-bottom: 22px; }
.ft-doc-brand { font-family: var(--ft-font-display, sans-serif); font-weight: 700; font-size: 20px; display: flex; align-items: center; gap: 9px; }
.ft-doc-meta { text-align: right; font-size: 13px; color: var(--ft-muted, #69707D); }
.ft-doc-title { font-family: var(--ft-font-display, sans-serif); font-weight: 700; font-size: 15px; letter-spacing: .14em; color: var(--ft-ink, #0A0F1C); }
.ft-doc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px 28px; margin-bottom: 24px; }
.ft-doc-label { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em; color: var(--ft-muted, #69707D); margin-bottom: 2px; }
.ft-doc-muted { color: var(--ft-muted, #69707D); font-size: 12.5px; }
.ft-doc-table { width: 100%; border-collapse: collapse; margin-bottom: 24px; }
.ft-doc-table th { text-align: left; font-size: 11px; text-transform: uppercase; letter-spacing: .06em; color: var(--ft-muted, #69707D); border-bottom: 1px solid var(--ft-line, #E4E7EE); padding: 8px 0; }
.ft-doc-table td { padding: 9px 0; border-bottom: 1px solid var(--ft-line-2, #EDF0F5); }
.ft-doc-table tfoot td { border-bottom: none; border-top: 2px solid var(--ft-ink, #0A0F1C); font-weight: 700; font-size: 16px; padding-top: 12px; font-family: var(--ft-font-mono, monospace); }
.ft-doc-amount { text-align: right; font-family: var(--ft-font-mono, monospace); }
.ft-doc-foot { font-size: 12px; color: var(--ft-muted, #69707D); border-top: 1px solid var(--ft-line, #E4E7EE); padding-top: 14px; }
.ft-doc-foot p { margin: 0 0 6px; }

@media print {
  body * { visibility: hidden; }
  .ft-doc, .ft-doc * { visibility: visible; }
  .ft-doc { position: absolute; left: 0; top: 0; width: 100%; max-width: none; border: none; border-radius: 0; padding: 0; }
  .ft-doc-actions { display: none; }
  @page { size: A4; margin: 18mm; }
}

/* ===== Responsive + motion preferences ===== */
@media (max-width: 520px) {
  .ft-form-grid { grid-template-columns: 1fr; }
  .ft-ship-row { flex-wrap: wrap; gap: 4px; }
}
@media (prefers-reduced-motion: reduce) {
  .ft-app *, .ft-toast, .ft-skeleton-block { animation: none !important; transition: none !important; }
}

/* ===== Search sort tabs (Cheapest / Fastest / Most direct) ===== */
.ft-compare-head { justify-content: space-between; flex-wrap: wrap; gap: 8px; }
.ft-sort-tabs { display: inline-flex; gap: 4px; background: var(--ft-chip, #EAEEF6); border-radius: 999px; padding: 3px; }
.ft-sort-tab {
  border: none; background: none; font-family: inherit; font-size: 12.5px; font-weight: 600;
  color: var(--ft-muted, #69707D); padding: 5px 12px; border-radius: 999px; cursor: pointer;
  transition: background .15s ease, color .15s ease;
}
.ft-sort-tab:hover { color: var(--ft-text, #10131C); }
.ft-sort-tab.is-active { background: var(--ft-surface, #fff); color: var(--ft-ink, #0A0F1C); box-shadow: 0 1px 3px rgba(10, 15, 28, .12); }

/* ===== Quote validity ===== */
.ft-quote-validity { font-size: 12.5px; color: var(--ft-muted, #69707D); }
.ft-doc-expired {
  background: var(--ft-danger-bg, #FBEAE8); color: #A33327; font-weight: 600; font-size: 13px;
  padding: 12px 16px; border-radius: 8px; margin-bottom: 20px; border-left: 3px solid var(--ft-danger, #D8483A);
}

/* ===== What a rate line covers (Blueprint Ch4 included/excluded) ===== */
.ft-compare-includes {
  display: flex; flex-wrap: wrap; gap: 6px 14px;
  margin-top: 12px; padding-top: 11px; border-top: 1px dashed var(--ft-line, #E4E7EE);
  font-size: 12.5px; color: var(--ft-muted, #69707D);
}
.ft-inc, .ft-exc { display: inline-flex; align-items: center; gap: 5px; }
.ft-inc::before { content: '✓'; color: var(--ft-success, #1FAE7A); font-weight: 700; }
.ft-exc::before { content: '·'; color: var(--ft-muted, #69707D); font-weight: 700; }
.ft-exc { font-style: italic; }

/* ===== Dashboard quick actions ===== */
.ft-quick-bar { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 20px; }
.ft-quick-form {
  display: flex; align-items: center; gap: 8px; flex: 1; min-width: 280px;
  background: var(--ft-surface, #fff); border: 1px solid var(--ft-line, #E4E7EE);
  border-radius: 12px; padding: 10px 12px;
}
.ft-quick-label {
  font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em;
  color: var(--ft-muted, #69707D); white-space: nowrap;
}
.ft-quick-form input {
  font-family: inherit; font-size: 13.5px; color: var(--ft-text, #10131C);
  border: 1px solid var(--ft-line, #E4E7EE); border-radius: 7px; padding: 7px 10px; min-width: 0; flex: 1;
  transition: border-color .15s ease;
}
.ft-quick-form input::placeholder { color: #9AA1AD; }
.ft-quick-form input:focus { outline: none; border-color: var(--ft-primary, #2E4BD1); }
.ft-quick-form button {
  background: var(--ft-ink, #0A0F1C); color: #fff; border: none; border-radius: 7px;
  padding: 8px 14px; font-family: inherit; font-size: 13px; font-weight: 600; cursor: pointer;
  white-space: nowrap; transition: background .15s ease;
}
.ft-quick-form button:hover { background: var(--ft-primary, #2E4BD1); }
@media (max-width: 620px) { .ft-quick-form { min-width: 100%; } }

/* ===== Base-rate validity on comparison cards ===== */
.ft-compare-valid {
  font-size: 11.5px; color: var(--ft-muted, #69707D); margin-top: 8px;
  display: flex; align-items: center; gap: 6px;
}
.ft-compare-valid::before { content: ''; width: 4px; height: 4px; border-radius: 50%; background: var(--ft-success, #1FAE7A); }

/* ===== Airport autocomplete (shared by homepage bar and app forms) ===== */
.ft-ac-list {
  position: absolute; top: calc(100% + 6px); left: 0; min-width: 280px; max-width: 360px;
  background: #fff; border: 1px solid var(--ft-line, #E4E7EE); border-radius: 12px;
  box-shadow: 0 16px 40px rgba(10, 15, 28, .16);
  padding: 6px; z-index: 60; overflow: hidden;
}
.ft-ac-item {
  display: flex; align-items: center; gap: 12px; width: 100%;
  background: none; border: none; cursor: pointer; text-align: left;
  padding: 9px 10px; border-radius: 8px; font-family: inherit;
  transition: background .12s ease;
}
.ft-ac-item:hover, .ft-ac-item.is-active { background: var(--ft-hover, #F0F3F9); }
.ft-ac-code {
  font-family: var(--ft-font-mono, monospace); font-size: 13px; font-weight: 700;
  color: var(--ft-ink, #0A0F1C); background: var(--ft-chip, #EAEEF6); border-radius: 6px;
  padding: 4px 8px; flex: none; letter-spacing: .04em;
}
.ft-ac-place { display: flex; flex-direction: column; min-width: 0; flex: 1; }
.ft-ac-place strong { font-size: 13.5px; font-weight: 600; color: var(--ft-text, #10131C); }
.ft-ac-place span { font-size: 11.5px; color: var(--ft-muted, #69707D); }
.ft-ac-net {
  font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: .05em;
  color: #116146; background: var(--ft-success-bg, #E4F7EF); border-radius: 999px;
  padding: 3px 8px; flex: none;
}

/* ===== Rate sheet CSV import ===== */
.ft-import-panel {
  background: var(--ft-surface-2, #FAFBFD); border: 1px solid var(--ft-line, #E4E7EE);
  border-radius: 12px; padding: 16px 18px; margin-bottom: 8px;
}
.ft-imp-date { display: flex; flex-direction: column; gap: 4px; }
.ft-imp-date > span {
  font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em;
  color: var(--ft-muted, #69707D);
}
.ft-imp-hint { font-size: 12.5px; color: var(--ft-muted, #69707D); margin: 2px 0 0; }
.ft-imp-cols {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 10px; margin-bottom: 14px;
}
.ft-imp-col {
  background: var(--ft-surface, #fff); border: 1px solid var(--ft-line, #E4E7EE);
  border-radius: 10px; padding: 10px;
}
.ft-imp-colname {
  font-size: 12.5px; font-weight: 700; color: var(--ft-text, #10131C);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ft-imp-sample {
  font-family: var(--ft-font-mono, monospace); font-size: 11.5px; color: var(--ft-muted, #69707D);
  margin: 2px 0 8px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ft-imp-col select { width: 100%; font-size: 12.5px; padding: 6px 8px; }
.ft-imp-summary { font-size: 13px; color: var(--ft-muted, #69707D); margin-bottom: 8px; }
.ft-imp-warn { color: #8A5A10; }
.ft-imp-rows {
  background: var(--ft-surface, #fff); border: 1px solid var(--ft-line, #E4E7EE);
  border-radius: 10px; padding: 4px 12px; margin-bottom: 10px;
}

/* ===== Control Tower (admin operations overview) =====
   Reads as a status board: a dark tower header with a live pulse,
   exceptions surfaced first, then throughput tiles, then a live feed.
   The boldness lives in the header band; tiles stay quiet and even. */
.ft-ct { display: flex; flex-direction: column; gap: 16px; }

.ft-ct-head {
  display: flex; justify-content: space-between; align-items: center;
  background: var(--ft-ink, #0A0F1C); color: #fff; border-radius: 14px; padding: 20px 24px;
  position: relative; overflow: hidden;
}
.ft-ct-head::after {
  content: ''; position: absolute; inset: 0;
  background: radial-gradient(ellipse 400px 120px at 90% 0%, rgba(46,75,209,.35), transparent);
  pointer-events: none;
}
.ft-ct-eyebrow {
  font-family: var(--ft-font-mono, monospace); font-size: 11px; letter-spacing: .14em;
  text-transform: uppercase; color: var(--ft-signal, #F2A93B); margin-bottom: 6px;
}
.ft-ct-clock { font-size: 20px; font-weight: 700; font-family: var(--ft-font-display, sans-serif); }
.ft-ct-live {
  display: inline-flex; align-items: center; gap: 8px; font-size: 12px; font-weight: 600;
  color: #B7C0D4; letter-spacing: .04em; text-transform: uppercase; z-index: 1;
}
.ft-ct-pulse {
  width: 8px; height: 8px; border-radius: 50%; background: var(--ft-success, #1FAE7A);
  box-shadow: 0 0 0 0 rgba(31,174,122,.6); animation: ft-ct-pulse 2s infinite;
}
@keyframes ft-ct-pulse {
  0% { box-shadow: 0 0 0 0 rgba(31,174,122,.6); }
  70% { box-shadow: 0 0 0 7px rgba(31,174,122,0); }
  100% { box-shadow: 0 0 0 0 rgba(31,174,122,0); }
}

/* Attention strip - exceptions worth acting on, each a link to the fix. */
.ft-ct-alerts { display: flex; flex-direction: column; gap: 8px; }
.ft-ct-alert {
  display: flex; align-items: center; gap: 14px; width: 100%; text-align: left;
  background: var(--ft-surface, #fff); border: 1px solid var(--ft-line, #E4E7EE);
  border-left-width: 3px; border-radius: 10px; padding: 12px 16px; cursor: pointer;
  font-family: inherit; transition: box-shadow .15s ease, transform .1s ease;
}
.ft-ct-alert:hover { box-shadow: 0 4px 14px rgba(10,15,28,.08); }
.ft-ct-alert:active { transform: translateY(1px); }
.ft-ct-alert-danger { border-left-color: var(--ft-danger, #D8483A); }
.ft-ct-alert-warn { border-left-color: var(--ft-signal, #F2A93B); }
.ft-ct-alert-n {
  font-family: var(--ft-font-mono, monospace); font-size: 20px; font-weight: 700;
  color: var(--ft-ink, #0A0F1C); min-width: 34px;
}
.ft-ct-alert-danger .ft-ct-alert-n { color: var(--ft-danger, #D8483A); }
.ft-ct-alert-label { flex: 1; font-size: 14px; color: var(--ft-text, #10131C); }
.ft-ct-alert-go { color: var(--ft-muted, #69707D); display: flex; }
.ft-ct-alert-go .ft-ct-ico { width: 18px; height: 18px; }

.ft-ct-clear {
  display: flex; align-items: center; gap: 10px; font-size: 14px; font-weight: 500;
  color: #116146; background: var(--ft-success-bg, #E4F7EF); border-radius: 10px; padding: 14px 18px;
}
.ft-ct-clear .ft-ct-ico { width: 18px; height: 18px; }

/* Metric tiles. */
.ft-ct-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
.ft-ct-tile {
  background: var(--ft-surface, #fff); border: 1px solid var(--ft-line, #E4E7EE);
  border-radius: 12px; padding: 16px 18px;
}
.ft-ct-tile-value {
  font-family: var(--ft-font-mono, monospace); font-size: 26px; font-weight: 700;
  color: var(--ft-ink, #0A0F1C); line-height: 1.1;
}
.ft-ct-tile-good .ft-ct-tile-value { color: #116146; }
.ft-ct-tile-label {
  font-size: 12px; font-weight: 600; color: var(--ft-text, #10131C); margin-top: 6px;
}
.ft-ct-tile-sub { font-size: 11.5px; color: var(--ft-muted, #69707D); margin-top: 2px; }

/* Live feed. */
.ft-ct-feed {
  background: var(--ft-surface, #fff); border: 1px solid var(--ft-line, #E4E7EE);
  border-radius: 12px; padding: 6px 18px 10px;
}
.ft-ct-feed-head {
  font-size: 11.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em;
  color: var(--ft-muted, #69707D); padding: 14px 0 8px;
}
.ft-ct-feed-row {
  display: flex; align-items: center; gap: 14px; padding: 11px 0;
  border-top: 1px solid var(--ft-line-2, #EDF0F5);
}
.ft-ct-feed-route { display: flex; align-items: center; gap: 2px; }
.ft-ct-feed-ref { flex: 1; color: var(--ft-muted, #69707D); font-size: 13px; }
.ft-ct-feed-amt { font-weight: 700; color: var(--ft-ink, #0A0F1C); }

@media (max-width: 860px) { .ft-ct-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 520px) {
  .ft-ct-feed-ref { display: none; }
  .ft-ct-head { padding: 16px 18px; }
}

/* ===== Account row actions ===== */
.ft-acct-activate, .ft-acct-suspend {
  margin-left: auto; border: none; border-radius: 7px; padding: 5px 12px;
  font-family: inherit; font-size: 12.5px; font-weight: 600; cursor: pointer;
  transition: background .15s ease;
}
.ft-acct-activate { background: var(--ft-success, #1FAE7A); color: #fff; }
.ft-acct-activate:hover { background: #189065; }
.ft-acct-suspend { background: none; color: var(--ft-muted, #69707D); }
.ft-acct-suspend:hover { color: var(--ft-danger, #D8483A); }
