/* ==========================================================================
   WFS-CISS components
   Every class is wfs- prefixed and expects a .wfs-app ancestor, so nothing
   here collides with the JustDo theme or Bootstrap component classes.
   ========================================================================== */

/* ---- page shell ------------------------------------------------------ */
.wfs-page {
  max-width: var(--wfs-content-max);
  margin: 0 auto;
}

.wfs-page-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--wfs-s4);
  flex-wrap: wrap;
  margin-bottom: var(--wfs-s5);
}

.wfs-page-title {
  font-size: var(--wfs-fs-xl);
  font-weight: 600;
  display: flex;
  align-items: center;
  gap: var(--wfs-s2);
}

.wfs-page-sub {
  font-size: var(--wfs-fs-sm);
  font-weight: 400;
  color: var(--wfs-text-muted);
}

.wfs-page-actions {
  display: flex;
  align-items: center;
  gap: var(--wfs-s2);
  flex-wrap: wrap;
}

/* ---- card ------------------------------------------------------------ */
.wfs-card {
  background: var(--wfs-surface);
  border: 1px solid var(--wfs-border);
  border-radius: var(--wfs-r-lg);
  box-shadow: var(--wfs-e1);
  margin-bottom: var(--wfs-s4);
  overflow: hidden;
}

.wfs-card__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--wfs-s3);
  padding: var(--wfs-s3) var(--wfs-s4);
  border-bottom: 1px solid var(--wfs-border);
  background: var(--wfs-surface-sunken);
  flex-wrap: wrap;
}

.wfs-card__title {
  font-size: var(--wfs-fs-md);
  font-weight: 600;
  display: flex;
  align-items: center;
  gap: var(--wfs-s2);
}

.wfs-card__meta {
  font-size: var(--wfs-fs-xs);
  color: var(--wfs-text-muted);
  text-align: right;
  line-height: 1.4;
}

.wfs-card__body { padding: var(--wfs-s4); }
.wfs-card__body--flush { padding: 0; }

.wfs-card__footer {
  padding: var(--wfs-s3) var(--wfs-s4);
  border-top: 1px solid var(--wfs-border);
  background: var(--wfs-surface-sunken);
}

/* ---- pills ----------------------------------------------------------- */
.wfs-pill {
  display: inline-flex;
  align-items: center;
  gap: var(--wfs-s1);
  padding: 2px var(--wfs-s2);
  border-radius: var(--wfs-r-pill);
  font-size: var(--wfs-fs-xs);
  font-weight: 600;
  line-height: 1.6;
  white-space: nowrap;
  background: var(--wfs-surface-sunken);
  color: var(--wfs-text-muted);
  border: 1px solid var(--wfs-border);
}

.wfs-pill--success { background: var(--wfs-success-soft); color: var(--wfs-success-fg); border-color: transparent; }
.wfs-pill--warn    { background: var(--wfs-warn-soft);    color: var(--wfs-warn-fg);    border-color: transparent; }
.wfs-pill--danger  { background: var(--wfs-danger-soft);  color: var(--wfs-danger-fg);  border-color: transparent; }
.wfs-pill--info    { background: var(--wfs-info-soft);    color: var(--wfs-info-fg);    border-color: transparent; }
.wfs-pill--primary { background: var(--wfs-primary-soft); color: var(--wfs-primary-fg); border-color: transparent; }
.wfs-pill--arrival   { background: var(--wfs-arrival-soft);   color: var(--wfs-arrival);   border-color: transparent; }
.wfs-pill--departure { background: var(--wfs-departure-soft); color: var(--wfs-departure); border-color: transparent; }

.wfs-pill--mono {
  font-family: var(--wfs-font-mono);
  font-variant-numeric: tabular-nums;
  letter-spacing: 0;
}

.wfs-pill-group {
  display: flex;
  flex-wrap: wrap;
  gap: var(--wfs-s1);
}

/* ramp: current is live, previous is historical */
.wfs-ramp {
  display: inline-flex;
  align-items: center;
  gap: var(--wfs-s1);
}

.wfs-ramp__arrow {
  color: var(--wfs-text-faint);
  font-size: var(--wfs-fs-xs);
}

/* ---- status (cdmFlightState) ----------------------------------------- */
.wfs-status {
  display: inline-flex;
  align-items: center;
  gap: var(--wfs-s1);
  font-size: var(--wfs-fs-xs);
  font-weight: 600;
  font-family: var(--wfs-font-mono);
  color: var(--wfs-text-muted);
}

.wfs-status__dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--wfs-text-faint);
  flex: none;
}

.wfs-status--ok    .wfs-status__dot { background: var(--wfs-success); }
.wfs-status--air   .wfs-status__dot { background: var(--wfs-primary); }
.wfs-status--warn  .wfs-status__dot { background: var(--wfs-warn); }
.wfs-status--alert .wfs-status__dot { background: var(--wfs-danger); }

.wfs-status--ok    { color: var(--wfs-success-fg); }
.wfs-status--air   { color: var(--wfs-primary-fg); }
.wfs-status--warn  { color: var(--wfs-warn-fg); }
.wfs-status--alert { color: var(--wfs-danger-fg); }

/* ---- buttons --------------------------------------------------------- */
.wfs-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--wfs-s2);
  padding: var(--wfs-s2) var(--wfs-s4);
  min-height: 38px;
  border: 1px solid var(--wfs-border-strong);
  border-radius: var(--wfs-r-md);
  background: var(--wfs-surface);
  color: var(--wfs-text);
  font-family: inherit;
  font-size: var(--wfs-fs-md);
  font-weight: 500;
  cursor: pointer;
  transition: background var(--wfs-t-fast) var(--wfs-ease),
              border-color var(--wfs-t-fast) var(--wfs-ease),
              color var(--wfs-t-fast) var(--wfs-ease);
}

.wfs-btn:hover:not(:disabled) { background: var(--wfs-surface-hover); text-decoration: none; }
.wfs-btn:disabled { opacity: .5; cursor: not-allowed; }

.wfs-btn--primary {
  background: var(--wfs-primary);
  border-color: var(--wfs-primary);
  color: #fff;
}

.wfs-btn--primary:hover:not(:disabled) {
  background: var(--wfs-primary-hover);
  border-color: var(--wfs-primary-hover);
  color: #fff;
}

.wfs-btn--danger {
  background: var(--wfs-danger);
  border-color: var(--wfs-danger);
  color: #fff;
}

.wfs-btn--danger:hover:not(:disabled) { filter: brightness(.92); color: #fff; }

.wfs-btn--ghost {
  background: transparent;
  border-color: transparent;
  color: var(--wfs-text-muted);
}

.wfs-btn--ghost:hover:not(:disabled) { background: var(--wfs-surface-hover); color: var(--wfs-text); }

.wfs-btn--sm {
  min-height: 30px;
  padding: var(--wfs-s1) var(--wfs-s3);
  font-size: var(--wfs-fs-sm);
}

.wfs-btn--icon {
  padding: 0;
  width: 38px;
  min-height: 38px;
  border-color: transparent;
  background: transparent;
  color: var(--wfs-text-muted);
}

.wfs-btn--icon:hover:not(:disabled) { background: var(--wfs-surface-hover); color: var(--wfs-text); }

.wfs-btn--block { width: 100%; }

/* ---- forms ----------------------------------------------------------- */
.wfs-field {
  display: flex;
  flex-direction: column;
  gap: var(--wfs-s1);
}

.wfs-field__label {
  font-size: var(--wfs-fs-xs);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: var(--wfs-ls-caps);
  color: var(--wfs-text-muted);
}

.wfs-field__hint {
  font-size: var(--wfs-fs-xs);
  color: var(--wfs-text-faint);
}

.wfs-field__hint strong { color: var(--wfs-text-muted); font-weight: 600; }
.wfs-field__hint.is-valid { color: var(--wfs-success-fg); }

.wfs-input {
  width: 100%;
  min-height: 38px;
  padding: var(--wfs-s2) var(--wfs-s3);
  background: var(--wfs-surface);
  color: var(--wfs-text);
  border: 1px solid var(--wfs-border-strong);
  border-radius: var(--wfs-r-md);
  font-family: inherit;
  font-size: var(--wfs-fs-md);
  transition: border-color var(--wfs-t-fast) var(--wfs-ease),
              box-shadow var(--wfs-t-fast) var(--wfs-ease);
}

.wfs-input::placeholder { color: var(--wfs-text-faint); }

.wfs-input:focus {
  outline: none;
  border-color: var(--wfs-primary);
  box-shadow: 0 0 0 3px var(--wfs-primary-soft);
}

.wfs-input--mono {
  font-family: var(--wfs-font-mono);
  text-transform: uppercase;
  letter-spacing: .04em;
}

.wfs-input-group {
  position: relative;
  display: flex;
  align-items: center;
}

.wfs-input-group .wfs-input { padding-left: var(--wfs-s7); }

.wfs-input-group__icon {
  position: absolute;
  left: var(--wfs-s3);
  color: var(--wfs-text-faint);
  pointer-events: none;
  font-size: var(--wfs-fs-md);
}

.wfs-input-group__clear {
  position: absolute;
  right: var(--wfs-s2);
  border: 0;
  background: transparent;
  color: var(--wfs-text-faint);
  cursor: pointer;
  font-size: var(--wfs-fs-lg);
  line-height: 1;
  padding: var(--wfs-s1);
  border-radius: var(--wfs-r-sm);
}

.wfs-input-group__clear:hover { color: var(--wfs-text); background: var(--wfs-surface-hover); }

.wfs-form-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: var(--wfs-s4);
}

/* ---- segmented control (arrival / departure) ------------------------- */
.wfs-segmented {
  display: inline-flex;
  padding: var(--wfs-s1);
  gap: var(--wfs-s1);
  background: var(--wfs-surface-sunken);
  border: 1px solid var(--wfs-border);
  border-radius: var(--wfs-r-md);
  max-width: 100%;
}

.wfs-segmented__item {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--wfs-s2);
  padding: var(--wfs-s2) var(--wfs-s4);
  border: 0;
  border-radius: var(--wfs-r-sm);
  background: transparent;
  color: var(--wfs-text-muted);
  font-family: inherit;
  font-size: var(--wfs-fs-md);
  font-weight: 600;
  cursor: pointer;
  white-space: nowrap;
  transition: background var(--wfs-t-fast) var(--wfs-ease),
              color var(--wfs-t-fast) var(--wfs-ease);
}

.wfs-segmented__item:hover { color: var(--wfs-text); text-decoration: none; }

.wfs-segmented__item.active,
.wfs-segmented__item[aria-selected="true"] {
  background: var(--wfs-surface);
  color: var(--wfs-text);
  box-shadow: var(--wfs-e1);
}

.wfs-segmented__item[data-dir="A"].active { color: var(--wfs-arrival); }
.wfs-segmented__item[data-dir="D"].active { color: var(--wfs-departure); }

/* ---- search bar ------------------------------------------------------ */
.wfs-searchbar {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--wfs-s3);
  margin-bottom: var(--wfs-s4);
}

@media (min-width: 768px) {
  .wfs-searchbar { grid-template-columns: 210px 1fr; align-items: start; }
}

/* ---- states (idle / empty / hint / error) ---------------------------- */
.wfs-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--wfs-s2);
  padding: var(--wfs-s8) var(--wfs-s4);
  text-align: center;
  color: var(--wfs-text-muted);
}

.wfs-state__icon { font-size: 28px; color: var(--wfs-text-faint); }

.wfs-state__title {
  font-size: var(--wfs-fs-lg);
  font-weight: 600;
  color: var(--wfs-text);
}

.wfs-state__msg {
  font-size: var(--wfs-fs-sm);
  max-width: 46ch;
}

.wfs-state--hint {
  color: var(--wfs-warn-fg);
  background: var(--wfs-warn-soft);
  border-radius: var(--wfs-r-md);
}

.wfs-state--hint .wfs-state__icon,
.wfs-state--hint .wfs-state__title { color: var(--wfs-warn-fg); }

.wfs-state--error {
  color: var(--wfs-danger-fg);
  background: var(--wfs-danger-soft);
  border-radius: var(--wfs-r-md);
}

.wfs-state--error .wfs-state__icon,
.wfs-state--error .wfs-state__title { color: var(--wfs-danger-fg); }

/* ---- skeletons ------------------------------------------------------- */
.wfs-skel {
  background: linear-gradient(90deg,
    var(--wfs-surface-sunken) 25%,
    var(--wfs-surface-hover) 37%,
    var(--wfs-surface-sunken) 63%);
  background-size: 400% 100%;
  animation: wfs-shimmer 1.4s ease infinite;
  border-radius: var(--wfs-r-sm);
  height: 12px;
}

@keyframes wfs-shimmer {
  0%   { background-position: 100% 50%; }
  100% { background-position: 0 50%; }
}

.wfs-skel-rows {
  display: flex;
  flex-direction: column;
  gap: var(--wfs-s4);
  padding: var(--wfs-s4);
}

.wfs-skel-rows > div {
  display: flex;
  gap: var(--wfs-s3);
  align-items: center;
}

.wfs-skel--flight { flex: 0 0 76px; }
.wfs-skel--time   { flex: 0 0 46px; }
.wfs-skel--grow   { flex: 1 1 auto; }
.wfs-skel--tail   { flex: 0 0 90px; }

/* ---- pager ----------------------------------------------------------- */
.wfs-pager {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--wfs-s3);
  padding: var(--wfs-s3);
  border-top: 1px solid var(--wfs-border);
  flex-wrap: wrap;
}

.wfs-pager__status {
  font-size: var(--wfs-fs-sm);
  color: var(--wfs-text-muted);
  font-family: var(--wfs-font-mono);
}

/* ---- banners --------------------------------------------------------- */
.wfs-banner {
  display: flex;
  align-items: flex-start;
  gap: var(--wfs-s2);
  padding: var(--wfs-s3);
  border-radius: var(--wfs-r-md);
  font-size: var(--wfs-fs-sm);
  margin-bottom: var(--wfs-s4);
}

.wfs-banner--danger { background: var(--wfs-danger-soft); color: var(--wfs-danger-fg); }
.wfs-banner--warn   { background: var(--wfs-warn-soft);   color: var(--wfs-warn-fg); }
.wfs-banner--info   { background: var(--wfs-primary-soft); color: var(--wfs-primary-fg); }

/* ---- generic data table (users, and anything server-rendered) --------- */
/* Same mobile-first card transform as the flight list: rows become cards
   below 900px and print their column name from data-label. */

.wfs-dtable { width: 100%; border-collapse: collapse; }

.wfs-dtable,
.wfs-dtable tbody,
.wfs-dtable tr,
.wfs-dtable td { display: block; }

.wfs-dtable thead {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

.wfs-dtable tbody tr {
  border: 1px solid var(--wfs-border);
  border-radius: var(--wfs-r-md);
  margin: 0 var(--wfs-s3) var(--wfs-s3);
  padding: var(--wfs-s3);
  background: var(--wfs-surface);
}

.wfs-dtable td {
  display: grid;
  grid-template-columns: 96px 1fr;
  gap: var(--wfs-s3);
  align-items: baseline;
  padding: 3px 0;
  font-size: var(--wfs-fs-sm);
}

.wfs-dtable td::before {
  content: attr(data-label);
  font-size: var(--wfs-fs-xs);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: var(--wfs-ls-caps);
  color: var(--wfs-text-faint);
}

@media (min-width: 900px) {
  .wfs-dtable { display: table; }
  .wfs-dtable thead {
    display: table-header-group;
    position: static;
    width: auto;
    height: auto;
    clip-path: none;
  }
  .wfs-dtable tbody { display: table-row-group; }

  .wfs-dtable th {
    text-align: left;
    padding: var(--wfs-s2) var(--wfs-s3);
    font-size: var(--wfs-fs-xs);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: var(--wfs-ls-caps);
    color: var(--wfs-text-faint);
    border-bottom: 1px solid var(--wfs-border);
    background: var(--wfs-surface-sunken);
    white-space: nowrap;
  }

  .wfs-dtable tbody tr {
    display: table-row;
    border: 0;
    border-radius: 0;
    margin: 0;
    padding: 0;
    background: transparent;
  }

  .wfs-dtable tbody td {
    display: table-cell;
    padding: var(--wfs-s2) var(--wfs-s3);
    vertical-align: middle;
    border-bottom: 1px solid var(--wfs-border);
  }

  .wfs-dtable td::before { content: none; }
}

.wfs-rowactions {
  display: flex;
  align-items: center;
  gap: var(--wfs-s2);
  flex-wrap: wrap;
}

.wfs-rowactions form { display: flex; align-items: center; gap: var(--wfs-s1); margin: 0; }
.wfs-rowactions .wfs-input { width: auto; min-width: 140px; }

/* ---- airline board ---------------------------------------------------- */

.wfs-board-toolbar {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--wfs-s3);
  align-items: end;
  margin-bottom: var(--wfs-s5);
}

@media (min-width: 768px) {
  .wfs-board-toolbar { grid-template-columns: 200px 1fr auto; }
}

.wfs-board-status {
  display: flex;
  align-items: center;
  gap: var(--wfs-s2);
  flex-wrap: wrap;
  font-size: var(--wfs-fs-xs);
  color: var(--wfs-text-muted);
}

.wfs-board-columns {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--wfs-s5);
}

/* Two columns only when there is genuinely room for two flight tables. */
@media (min-width: 1100px) {
  .wfs-board-columns { grid-template-columns: 1fr 1fr; }
}

.wfs-board-column__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--wfs-s3);
  padding-bottom: var(--wfs-s2);
  margin-bottom: var(--wfs-s3);
  border-bottom: 2px solid var(--wfs-border);
}

.wfs-board-column__title {
  display: flex;
  align-items: center;
  gap: var(--wfs-s2);
  font-size: var(--wfs-fs-md);
  text-transform: uppercase;
  letter-spacing: var(--wfs-ls-caps);
}

.wfs-board-column[data-dir="A"] .wfs-board-column__head { border-bottom-color: var(--wfs-arrival); }
.wfs-board-column[data-dir="D"] .wfs-board-column__head { border-bottom-color: var(--wfs-departure); }

.wfs-board-card__toggle {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--wfs-s3);
  width: 100%;
  padding: var(--wfs-s3) var(--wfs-s4);
  border: 0;
  background: var(--wfs-surface-sunken);
  color: var(--wfs-text);
  font-family: inherit;
  text-align: left;
  cursor: pointer;
  border-bottom: 1px solid var(--wfs-border);
}

.wfs-board-card__toggle:hover { background: var(--wfs-surface-hover); }

.wfs-board-card__label {
  font-size: var(--wfs-fs-md);
  font-weight: 700;
  letter-spacing: var(--wfs-ls-caps);
  font-family: var(--wfs-font-mono);
}

.wfs-board-card__chevron { transition: transform var(--wfs-t-fast) var(--wfs-ease); }
.wfs-board-card__toggle[aria-expanded="false"] .wfs-board-card__chevron { transform: rotate(-90deg); }

.wfs-board-empty {
  padding: var(--wfs-s4);
  color: var(--wfs-text-faint);
  font-size: var(--wfs-fs-sm);
  font-style: italic;
}
