/* ═══════════════════════════════════════════════════════════════════════════
   AVI DISPATCH · ui-unified.css — F0 · FOUNDATION (2026-09-18)
   Capa visual ÚNICA de la app, derivada del HTML de referencia
   AVI_Dispatch_previo_scan_inicio(2)(3)(1).html y del preview aprobado
   design_audit/design_preview/ui-unified.preview.css.
   ───────────────────────────────────────────────────────────────────────────
   REGLAS
   · SOLO presentación: color, tipografía, radios, bordes, espaciado, sombras.
   · NO toca id, name, data-atributos, href, action, method ni relaciones DOM.
   · NUNCA fija `display` en botones/controles genéricos: lo que el JS oculta
     (display:none / [hidden]) debe seguir oculto.
   · NO cambia display/grid/flex/width/order de formularios (regla del owner).
   · Se enlaza la ÚLTIMA en el <head> de cada plantilla: gana en cascada sobre
     app.css, theme-dark.css, redesign.css y las hojas por página.
   · Shell y breakpoints (barra píldora ≤834, riel/barra ≥835, padding del body)
     siguen viviendo en theme-dark.css: aquí solo se colorean.

   DECISIONES DEL OWNER APLICADAS
   · D1 inputs translúcidos oscuros (tema oscuro).
   · D2 tema claro CONSERVADO y unificado: mismos componentes, misma escala,
     solo cambia la paleta (bloque `html.u-light`).
   · D3 lienzo oscuro canónico #0e2140.
   · D5 /admin/fbos: solo color; el overflow de la tabla queda documentado.
   ═══════════════════════════════════════════════════════════════════════ */

/* ── 1 · TOKENS ────────────────────────────────────────────────────────────
   Escala (común a ambos temas) en :root; paleta OSCURA en :root + body.tdk;
   paleta CLARA en html.u-light (la clase la pone el server con theme_dark, igual
   que body.tdk). Todos los componentes usan solo tokens. */
:root{
  /* escala */
  --u-r-xs:6px; --u-r-sm:10px; --u-r-md:12px; --u-r-lg:14px; --u-r-xl:16px; --u-r-pill:999px;
  --u-sp-1:4px; --u-sp-2:8px; --u-sp-3:12px; --u-sp-4:14px; --u-sp-5:18px; --u-sp-6:24px;
  --u-fs-xs:.62rem; --u-fs-sm:.7rem; --u-fs-lbl:.68rem; --u-fs-body:.86rem; --u-fs-md:.92rem; --u-fs-lg:1.02rem; --u-fs-xl:1.15rem;
  --u-font:-apple-system,system-ui,"Segoe UI",Roboto,sans-serif; --u-mono:ui-monospace,SFMono-Regular,Menlo,monospace;
  --u-tap:44px; --u-tap-desk:40px;
  /* paleta OSCURA (predeterminada) */
  --u-scheme:dark;
  --u-canvas:#0e2140; --u-card:#132a4d; --u-card2:rgba(255,255,255,.03);
  --u-line:rgba(127,150,180,.3); --u-line-soft:rgba(127,150,180,.15);
  --u-tx:#e4eefb; --u-mut:#b3c6e0; --u-head:#fff; --u-on-navy:#fff;
  --u-green:#1f8f57; --u-green-2:#187a48; --u-green-hi:#1b8350; --u-green-hi2:#156f41;
  --u-green-tx:#9fe8c3; --u-green-s:rgba(47,174,110,.14); --u-green-bd:rgba(63,196,128,.7);
  --u-amber:#f2d59a; --u-amber-bd:#c47f00; --u-amber-s:rgba(196,127,0,.14); --u-amber-bd-s:rgba(214,150,30,.75);
  --u-red:#ffc9c9; --u-red-bd:#d64545; --u-red-s:rgba(200,50,50,.16); --u-red-bd-s:rgba(235,100,100,.8);
  --u-blue:#93bfff; --u-blue-bd:#4da3ff; --u-blue-s:rgba(77,163,255,.10); --u-blue-ring:rgba(147,191,255,.75); --u-blue-ic:#bfe0ff; --u-blue-ic-s:rgba(77,163,255,.16); --u-blue-fill:#1466B8;
  --u-purple-tx:#d6c4ff; --u-purple-s:rgba(140,100,255,.14); --u-purple-bd:rgba(180,150,255,.6);
  --u-na-tx:#a3b0c2; --u-na-bd:rgba(163,176,194,.45);
  --u-navy-hdr:#042C53; --u-navy-ic:#0F4E88; --u-hero:linear-gradient(160deg,#0b386a,#042C53);
  --u-badge-bg:#3d4b6b; --u-badge-tx:#fff;
  --u-inp-bg:rgba(255,255,255,.05); --u-inp-bd:rgba(179,198,224,.55); --u-inp-tx:#e4eefb; --u-inp-ph:#a6bad6;
  --u-inp-ro-bg:rgba(255,255,255,.03);
  --u-btn-bg:rgba(255,255,255,.10); --u-btn-bd:rgba(255,255,255,.45); --u-btn-tx:#fff; --u-btn-hover:rgba(255,255,255,.16);
  --u-hover:rgba(255,255,255,.03); --u-hover-2:rgba(255,255,255,.06); --u-soft:rgba(255,255,255,.04); --u-soft-2:rgba(255,255,255,.08); --u-soft-3:rgba(255,255,255,.12);
  --u-search-bg:rgba(255,255,255,.12); --u-search-tx:#dbe9fa;
  --u-recip-s:rgba(16,185,129,.1); --u-recip-bd:rgba(16,185,129,.4);
  --u-shadow:0 8px 28px rgba(0,0,0,.18); --u-backdrop:rgba(4,12,24,.7);
  --u-nav-tx:#b7cbe6; --u-nav-on:#fff; --u-nav-ctl:#dbe9fa;
  --u-tbar-bg:rgba(10,22,40,.92); --u-tbar-bd:rgba(255,255,255,.10); --u-tbar-sh:0 14px 40px rgba(0,0,0,.5);
  --u-titem:#a4b8d3; --u-titem-on-bg:rgba(77,163,255,.18); --u-titem-on:#fff;
  --u-rail-bg:rgba(4,16,31,.72); --u-rail-bd:rgba(127,176,255,.16); --u-rail-tx:#b7cbe6; --u-rail-hover:rgba(127,176,255,.10);
  --u-page:#e9eef4; --u-page-bd:#bcc7d6;
}
/* paleta CLARA (D2): mismos componentes, misma escala, otro color */
html.u-light{
  --u-scheme:light;
  --u-canvas:#EEF2F7; --u-card:#ffffff; --u-card2:rgba(27,51,82,.03);
  --u-line:rgba(27,51,82,.18); --u-line-soft:rgba(27,51,82,.10);
  --u-tx:#16202E; --u-mut:#50627a; --u-head:#0b2240; --u-on-navy:#fff;
  --u-green-tx:#166534; --u-green-s:#d9f2e4; --u-green-bd:#2f8f5f;
  --u-amber:#92600a; --u-amber-s:#fdeec9; --u-amber-bd-s:#a8842e;
  --u-red:#991b1b; --u-red-s:#fde2e2; --u-red-bd-s:#c94f4f;
  --u-blue:#0F4E88; --u-blue-bd:#1466B8; --u-blue-s:#e4eefb; --u-blue-ring:rgba(20,102,184,.8); --u-blue-ic:#0F4E88; --u-blue-ic-s:#e4eefb; --u-blue-fill:#0F4E88;
  --u-purple-tx:#5b3fb0; --u-purple-s:#ece6ff; --u-purple-bd:#b9a6f0;
  --u-na-tx:#5e6b7d; --u-na-bd:rgba(27,51,82,.4);
  --u-badge-bg:#dbe3ee; --u-badge-tx:#0b2240;
  --u-inp-bg:#ffffff; --u-inp-bd:rgba(27,51,82,.62); --u-inp-tx:#0b2240; --u-inp-ph:#5f7390;
  --u-inp-ro-bg:#f2f5f9;
  --u-btn-bg:#ffffff; --u-btn-bd:rgba(27,51,82,.62); --u-btn-tx:#0b2240; --u-btn-hover:#f2f5f9;
  --u-hover:rgba(27,51,82,.03); --u-hover-2:rgba(27,51,82,.06); --u-soft:rgba(27,51,82,.04); --u-soft-2:rgba(27,51,82,.07); --u-soft-3:rgba(27,51,82,.10);
  --u-search-bg:rgba(255,255,255,.18); --u-search-tx:#0b2240;
  --u-recip-s:#e8f5ef; --u-recip-bd:#a7dcc0;
  --u-shadow:0 8px 24px rgba(11,34,64,.10); --u-backdrop:rgba(11,34,64,.45);
  --u-nav-tx:#3d4f66; --u-nav-on:#0b2240; --u-nav-ctl:#0b2240;
  --u-tbar-bg:rgba(255,255,255,.94); --u-tbar-bd:rgba(27,51,82,.14); --u-tbar-sh:0 14px 40px rgba(11,34,64,.18);
  --u-titem:#4a5b70; --u-titem-on-bg:#e4eefb; --u-titem-on:#0F4E88;
  --u-rail-bg:#f4f8fd; --u-rail-bd:rgba(15,78,136,.14); --u-rail-tx:#4a5b70; --u-rail-hover:rgba(15,78,136,.07);
}

/* ── 2 · LIENZO + TIPOGRAFÍA ────────────────────────────────────────────── */
html, body, body.tdk, body.login-page, body.pwreset-page, body.dash-page, body.users-page, body.customers-page,
body.pkg-page, body.security-page, body.backups-page, body.sistema-page, body.integ-page, body.soporte-page,
body.scan-page, body.eapis-page, body.fbo-page, body.fbo-admin-page, body.precios-page, body.terms-page{
  background:var(--u-canvas) !important; color:var(--u-tx); color-scheme:var(--u-scheme);
  font-family:var(--u-font); -webkit-font-smoothing:antialiased;
}
h1,h2,h3,h4{ color:var(--u-head); }
h1{ font-size:var(--u-fs-xl); } h2{ font-size:var(--u-fs-lg); } h3{ font-size:var(--u-fs-md); }
a{ color:var(--u-blue); }
p, li, td, th, label, small, .muted, .sub, .note, .help, .fld-note, .act-s{ color:var(--u-tx); }
.muted, .sub, .note, small, .help, .fld-note, .fh-dia, .status, .act-s, .sec-label, .lbl, h3.grp, .fw-sub, .fw-nota{ color:var(--u-mut); }
hr{ border-color:var(--u-line-soft); }
::selection{ background:rgba(127,176,255,.35); }

/* Etiquetas de sección (.lbl del previo) */
.sec-label, .lbl-text, h3.grp, .fp-sec, .ea-k, .sc-docs-hd, .fh-shell .sec-label{
  font-size:var(--u-fs-lbl); font-weight:800; letter-spacing:.06em; text-transform:uppercase; color:var(--u-mut);
  background:transparent; margin:14px 0 6px;
}
.sec-label a, .lbl a{ color:var(--u-blue); text-transform:none; letter-spacing:0; font-weight:700; font-size:.72rem; text-decoration:none; }

/* ── 3 · CABECERAS (.hdr) ───────────────────────────────────────────────── */
.page-hdr, .app-hdr, .ea-hdr, .fp-hdr, .scan-page h1, .sc-vuelo > h1, .users-page h1, .dash-page h1{
  background:var(--u-navy-hdr) !important; color:var(--u-on-navy) !important; border-radius:var(--u-r-md);
  padding:10px 14px !important; margin:0 0 12px !important; box-shadow:none;
}
.page-hdr .t, .app-hdr .t, .ea-title{ font-weight:600 !important; font-size:.95rem !important; color:var(--u-on-navy); display:block; }
.page-hdr .s, .app-hdr .s, .ea-sub{ font-size:.78rem; opacity:1; color:#dbe9fa; }
main.shell > .page-hdr{ flex-direction:column; align-items:flex-start; gap:2px; }
.nb-hero{ background:var(--u-hero) !important; border-radius:var(--u-r-xl); padding:14px !important; margin-bottom:12px; color:var(--u-on-navy); }
.nb-hero .page-hdr, .nb-hh .page-hdr{ background:transparent !important; padding:0 !important; margin:0 !important; }
.nb-hero .page-hdr .t{ font-size:1.15rem !important; font-weight:800 !important; }
.nb-hero .plan-chip, .nb-hero .plan-operador{ background:rgba(255,255,255,.18); color:#fff; }
.gs, .gs input{ background:var(--u-search-bg) !important; border:0 !important; border-radius:var(--u-r-pill) !important; color:var(--u-search-tx) !important; }
.gs input::placeholder{ color:var(--u-search-tx) !important; opacity:.8; }
.plan-chip, .plan-operador, .badge, .fh-badge, .pill, .acpill, .pr-badge{
  background:var(--u-badge-bg); color:var(--u-badge-tx); border-radius:var(--u-r-pill); padding:2px 8px; font-size:.68rem; font-weight:800; border:0;
}

/* ── 4 · TARJETAS (.card) ───────────────────────────────────────────────── */
.card, .admin-card, .app-card, .act, .fp-card, .panel, .auth-card, .terms-card, .pr-c, .av-plan, .ea-sec, .sc-docs,
.users-page .panel, .fbo-grid > *, .ev-box, .cta-cuenta, .gs-panel, details.trash, .fh-hosts, .sw-row, .block.panel, .filters, .security-page .cards > *{
  background:var(--u-card) !important; border:1px solid var(--u-line) !important; border-top:1px solid var(--u-line) !important;
  border-radius:var(--u-r-lg) !important; padding:12px 14px; margin-bottom:12px; box-shadow:none !important;
  color:var(--u-tx); backdrop-filter:none !important; -webkit-backdrop-filter:none !important;
}
.card h2, .admin-card h2{ color:var(--u-head); } .fp-card .fp-hdr .t{ color:var(--u-on-navy); }
@media (min-width:835px){ .card, .admin-card, .act{ box-shadow:var(--u-shadow) !important; } }
.fp-card .fp-hdr{ background:var(--u-navy-hdr); border-radius:var(--u-r-sm); color:var(--u-on-navy); }
.fp-card .fp-row, .fp-card .fp-pitem, .fp-card .fp-people{ background:transparent; border-color:var(--u-line-soft); color:var(--u-tx); }
.fp-card .fp-lbl, .fp-card .fp-val, .fp-card .fp-pname{ color:var(--u-tx); }
.fp-card .fp-role, .fp-card .fp-chip{ background:var(--u-blue-s); color:var(--u-blue); border:1px solid var(--u-blue-ring); border-radius:var(--u-r-pill); }
.fp-card .fp-bar, .fp-card .fp-soul{ background:var(--u-hover); border-color:var(--u-line-soft); }
.fp-card .fp-pv{ background:var(--u-soft-2); color:var(--u-tx); border:1.5px solid var(--u-blue-ring); border-radius:var(--u-r-md); }

/* Mosaico «Tu información» (.tile) */
.tile, .act{ background:var(--u-card) !important; border:1px solid var(--u-line) !important; border-radius:var(--u-r-md) !important;
  padding:10px 12px; font-size:.8rem; font-weight:700; min-height:60px; color:var(--u-tx) !important; }
.tile span, .act-s{ color:var(--u-mut); font-weight:600; font-size:.7rem; }
.tile .ic, .act-ic{ background:var(--u-blue-ic-s); color:var(--u-blue-ic); border-radius:var(--u-r-sm); }
.tile .tn{ background:var(--u-blue-s); color:var(--u-blue); border:1px solid var(--u-blue-ring); border-radius:var(--u-r-pill); }
.tile:hover, .act:hover{ border-color:var(--u-blue-ring) !important; background:var(--u-hover-2) !important; }

/* Tarjeta de vuelo (.fh-card) — canónica en Historial + Inicio */
.fh-card{ border:1px solid var(--u-line) !important; border-radius:var(--u-r-lg) !important; padding:12px 14px !important; margin-bottom:10px !important; background:var(--u-card2) !important; }
@media (min-width:835px){ .fh-card{ padding:14px 18px !important; } }
.fh-head b{ font-size:1.02rem; letter-spacing:.02em; color:var(--u-head); } .fh-ruta{ font-weight:800; font-size:.92rem; letter-spacing:.06em; }
.fh-dia{ margin-left:auto; font-size:.74rem; font-weight:700; opacity:1; letter-spacing:.04em; color:var(--u-mut); }
.fh-status{ font-size:.76rem; margin-top:4px; color:var(--u-mut); display:flex; align-items:center; gap:6px; }
.fh-status i, .fh-status::before{ width:8px; height:8px; border-radius:50%; background:var(--u-amber-bd); }
.fh-status.fh-st-g i{ background:var(--u-green); } .fh-status.fh-st-r{ color:var(--u-red); } .fh-status.fh-st-r i{ background:#e05252; }
.fh-items{ gap:6px; margin-top:10px; }
.fh-it{ min-height:var(--u-tap); padding:0 12px; font-size:.76rem; font-weight:700; border-radius:var(--u-r-pill); border:1px solid var(--u-line); display:inline-flex; align-items:center; gap:5px; }
@media (min-width:835px){ .fh-it{ min-height:var(--u-tap-desk); } }
.fh-it .q{ opacity:1; font-weight:600; }
.fh-ok{ color:var(--u-green-tx) !important; background:var(--u-green-s) !important; border-color:var(--u-green-bd) !important; }
.fh-todo{ color:var(--u-blue) !important; background:var(--u-blue-s) !important; border:1.5px dashed var(--u-blue-ring) !important; }
.fh-na{ color:var(--u-na-tx) !important; background:none !important; border-color:var(--u-na-bd) !important; opacity:1; }
.fh-al{ color:var(--u-red) !important; background:var(--u-red-s) !important; border-color:var(--u-red-bd-s) !important; }
.fh-prev{ color:var(--u-purple-tx) !important; background:var(--u-purple-s) !important; border:1.5px dashed var(--u-purple-bd) !important; }
.fh-ff{ background:var(--u-blue-fill) !important; color:#fff !important; border-color:var(--u-blue-fill) !important; }
.fh-arch{ opacity:1; } .fh-arch .fh-head b, .fh-arch .fh-ruta{ color:var(--u-mut); }  /* archivado: se atenúa por color, no por opacidad */
.fh-archivo > summary{ font-weight:800; font-size:.92rem; padding:6px 0; color:var(--u-tx); }

/* ── 5 · PLEGABLES (.fold) — un solo componente para details/summary ───── */
details, .sc-fold, .fh-archivo, details.trash, .acc{
  border:1px solid var(--u-line) !important; border-left:4px solid var(--u-green) !important; border-radius:var(--u-r-md) !important;
  margin:0 0 10px !important; background:var(--u-card2) !important; padding:0 !important;
}
details.sc-neu, .sc-fold.sc-neu, .acc, details.trash, .fh-archivo{ border-left-color:var(--u-blue-bd) !important; }
details.sc-amb, .sc-fold.sc-amb{ border-left-color:var(--u-amber-bd) !important; }
details.sc-bad, .sc-fold.sc-bad{ border-left-color:var(--u-red-bd) !important; }
summary, .sc-sum{ display:flex; align-items:center; flex-wrap:wrap; gap:2px 8px; min-height:48px; padding:6px 30px 6px 12px !important;
  font-size:.82rem; font-weight:700; color:var(--u-tx) !important; cursor:pointer; position:relative; list-style:none; background:transparent !important; }
summary::-webkit-details-marker{ display:none; }
summary::after, .sc-chev{ content:"▸"; position:absolute; right:12px; top:50%; transform:translateY(-50%); opacity:1; color:var(--u-mut); font-size:.8rem; }
details[open] > summary::after{ content:"▾"; }
.sc-chev{ display:none; }  /* el chevron ya lo pinta summary::after */
.sc-mut, summary .mut{ color:var(--u-mut); font-weight:600; font-size:.76rem; white-space:nowrap; }
.sc-mut.on{ color:var(--u-green-tx); }
details > *:not(summary), .sc-body{ padding:2px 12px 12px !important; font-size:.8rem; }
.sc-body li{ list-style:none; padding:3px 0; } .sc-body ul{ margin:0; padding:0; }
/* filas seleccionables (inspectores) */
#inspectors label, .ir{ display:flex; align-items:center; gap:10px; min-height:44px; padding:0 4px; font-size:.86rem;
  border-bottom:1px solid var(--u-line-soft); border-radius:8px; background:transparent; color:var(--u-tx); margin:0; }
#inspectors label:last-of-type{ border-bottom:0; }
#inspectors label:has(input:checked){ background:var(--u-green-s); }
#inspectors input[type=checkbox], .cb{ width:20px; height:20px; border:1.5px solid var(--u-mut); border-radius:5px; accent-color:var(--u-green); }
.sc-listo, .listo{ display:flex; justify-content:flex-end; margin-top:8px; }
.sc-listo-btn, .listo span{ border:1.5px solid var(--u-blue-ring) !important; border-radius:var(--u-r-pill) !important; padding:7px 14px !important;
  font-weight:800; font-size:.78rem; background:transparent !important; color:var(--u-tx) !important; min-height:var(--u-tap); }

/* Bloque «Documentos del paquete» (.docs / .doc) */
.sc-docs, .docs, .files-list{ border:1.5px solid var(--u-green-bd) !important; border-radius:var(--u-r-lg) !important; padding:12px !important;
  margin-bottom:10px; background:rgba(47,174,110,.05) !important; }
.sc-docs-hd, .docs .dt{ font-size:.72rem; font-weight:800; letter-spacing:.06em; text-transform:uppercase; color:var(--u-green) !important; margin:0 0 8px; display:flex; justify-content:space-between; }
.sc-docs-n{ opacity:1; color:var(--u-mut); }
.sc-docs-grid, .dgrid{ display:grid; grid-template-columns:1fr; gap:8px; }
.doc, .files-list li{ display:flex; gap:10px; align-items:center; background:var(--u-card) !important; border:1px solid var(--u-line) !important;
  border-radius:11px !important; padding:10px !important; color:var(--u-tx); }
.doc .ic{ width:36px; height:44px; border-radius:6px; background:var(--u-navy-ic); color:#fff; font-size:.6rem; font-weight:800; display:flex; align-items:center; justify-content:center; }
.doc b{ font-size:.84rem; display:block; } .doc small{ color:var(--u-mut); font-size:.7rem; display:block; }
.chip, .doc-expedit{ display:inline-block; font-size:var(--u-fs-xs); font-weight:800; border-radius:var(--u-r-pill); padding:2px 8px;
  background:var(--u-green-s); color:var(--u-green-tx); border:1px solid var(--u-green-bd); margin-top:3px; }
.sc-empty, .empty, .fp-empty, .fh-card[style*="dashed"]{ border:1.5px dashed var(--u-line) !important; border-radius:var(--u-r-md) !important;
  padding:10px 12px !important; font-size:.78rem; color:var(--u-mut) !important; background:transparent !important; }
.pdfname, #pdf-name, .sc-vf{ margin-top:10px; font-size:.72rem; color:var(--u-mut); }
.pdfname b, #pdf-name b, .sc-vf b{ display:block; color:var(--u-tx); font-size:.82rem; font-family:var(--u-mono); }

/* ── 6 · FORMULARIOS (.inp / .lbl) — D1: translúcidos en oscuro ─────────── */
.fld label, .fldf label, .fbo-fld label, label.block, .lbl, .tf-lbl, .login-page label, .users-page label.block, .fp-lbl{
  display:block; font-size:.7rem; font-weight:700; color:var(--u-mut) !important; margin:0 0 3px; letter-spacing:.02em; }
.fld, .fldf, .fbo-fld{ margin-bottom:8px; }
input:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="submit"]):not([type="range"]):not([type="hidden"]),
select, textarea, .inp, .fp-card input.fp-in, .fp-card select, .fp-icao, .ea-info{
  border:1px solid var(--u-inp-bd) !important; border-radius:var(--u-r-sm) !important; padding:9px 10px !important;
  background:var(--u-inp-bg) !important; font-size:.9rem !important; color:var(--u-inp-tx) !important; font-weight:600;
  box-shadow:none !important; min-height:var(--u-tap); font-family:var(--u-font);
}
input::placeholder, textarea::placeholder{ color:var(--u-inp-ph) !important; font-weight:500; }
input:focus, select:focus, textarea:focus{ outline:2px solid var(--u-blue-bd) !important; outline-offset:0; border-color:var(--u-blue-bd) !important; }
input[readonly], input:disabled, select:disabled, .ea-auto input, .ea-derived input{ background:var(--u-inp-ro-bg) !important; color:var(--u-mut) !important; border-style:dashed !important; }
select{ background-image:linear-gradient(45deg,transparent 50%,var(--u-mut) 50%),linear-gradient(135deg,var(--u-mut) 50%,transparent 50%) !important;
  background-position:calc(100% - 16px) 50%, calc(100% - 11px) 50% !important; background-size:5px 5px,5px 5px !important; background-repeat:no-repeat !important;
  -webkit-appearance:none; appearance:none; padding-right:30px !important; }
input[type="checkbox"], input[type="radio"]{ accent-color:var(--u-green); width:20px; height:20px; }
.av-od .inp, .fmt-icao, .fp-icao, #origin, #destination, input[name="dep"], input[name="dest"], input[name="origen"], input[name="destino"]{
  text-align:center; letter-spacing:.12em !important; font-size:1.25rem !important; font-weight:800 !important; text-transform:uppercase; }
.req, .pkgreq{ color:var(--u-amber); }
.fld-note, .note, .av-hint, .detect{ font-size:.8rem; color:var(--u-mut); margin:8px 2px 0; } .detect b{ color:var(--u-tx); }
.grid, .rowf, .g2, .fbo-grid, .cta-grid, .ea-grid{ gap:8px 10px; }
fieldset{ border:1px solid var(--u-line); border-radius:var(--u-r-md); }
/* rueda de fechas / máscaras: solo colores */
.dw-sheet, .date-wheel, .dw{ background:var(--u-card) !important; color:var(--u-tx) !important; border-color:var(--u-line) !important; }

/* ── 7 · BOTONES (.btn / .btn.ghost) ────────────────────────────────────── */
button, .btn, input[type="submit"], a.btn, .fbo-btn, .fw-btns > *, .go, .b-ok, .b-view, .sw-btn, .pr-cta, .primary, .secondary, .ghost, .danger, .calcbtn, .chipbtn, .terms-accept button{
  /* sin `display`: un botón oculto por el JS (display:none / [hidden]) debe seguir oculto */
  text-align:center; vertical-align:middle; gap:6px; border-radius:var(--u-r-md) !important; padding:11px 14px !important;
  font-weight:800 !important; font-size:.92rem !important; min-height:var(--u-tap); cursor:pointer; text-decoration:none;
  background:var(--u-btn-bg) !important; color:var(--u-btn-tx) !important; border:1.5px solid var(--u-btn-bd) !important; box-shadow:none !important; font-family:var(--u-font);
}
button:hover, .btn:hover{ background:var(--u-btn-hover) !important; }
/* PRIMARIA = verde (submit, .primary, «Generar», «Crear», «Enviar», «Guardar») */
button[type="submit"], input[type="submit"], .primary, .btn.primary, .btn-primary, #preview-btn, #send-btn:not(:disabled), .av-go, .pr-cta, .fbo-btn.primary, .terms-accept button, .login-page button, .b-ok, .go:not(.ghost){
  background:linear-gradient(160deg,var(--u-green),var(--u-green-2)) !important; border:0 !important; color:#fff !important; }
button[type="submit"]:hover, .primary:hover{ background:linear-gradient(160deg,var(--u-green-hi),var(--u-green-hi2)) !important; }
/* FANTASMA = borde azul */
.ghost, .btn.ghost, .secondary, .b-view, .calcbtn, .chipbtn, .editlink, .fw-btns .ghost, .sw-btn, #send-btn:disabled, .ea-back, .back{
  background:none !important; border:1.5px solid var(--u-blue-ring) !important; color:var(--u-tx) !important; }
.danger, .btn.danger{ background:var(--u-red-s) !important; border:1.5px solid var(--u-red-bd-s) !important; color:var(--u-red) !important; }
button:disabled, .btn.dis, .dis{ opacity:.7 !important; cursor:not-allowed; }
button.small, .btn.small, .chipbtn, .fp-iconbtn, .sw-btn, .b-view{ padding:7px 12px !important; min-height:36px; font-size:.78rem !important; }
.fp-iconbtn{ background:none !important; border:0 !important; min-height:auto; }
/* bloque de acción principal a lo ancho en móvil */
@media (max-width:834px){ .card > button[type="submit"], .card > .primary, #preview-btn, #send-btn, .av-go{ width:100%; } }
[hidden]{ display:none !important; }
/* FBO: Salida|Llegada — el activo es el .fbo-btn SIN .ghost (contrato actual del JS) */
.fbo-btn:not(.ghost){ background:linear-gradient(160deg,var(--u-green),var(--u-green-2)) !important; border:0 !important; color:#fff !important; }
.fbo-btn.ghost{ background:none !important; border:1.5px solid var(--u-blue-ring) !important; color:var(--u-tx) !important; }
/* Precios: «Disponible próximamente» y «Tu plan actual» NO son acciones primarias */
.pr-cta-pronto, .pr-cta-actual{ background:none !important; border:1.5px solid var(--u-line) !important; color:var(--u-mut) !important; cursor:default; }
.pr-cta-actual{ border-color:var(--u-green-bd) !important; color:var(--u-green-tx) !important; }

/* ── 8 · CHIPS DE ESTADO (color + signo, nunca solo color) ──────────────── */
.pill.green, .b-ok, .ok, .st-ok, .fw-t.ok{ color:var(--u-green-tx); background:var(--u-green-s); border:1px solid var(--u-green-bd); border-radius:var(--u-r-pill); padding:2px 8px; font-size:.72rem; font-weight:800; }
.pill.yellow, .wa, .warn, .st-warn{ color:var(--u-amber); background:var(--u-amber-s); border:1px solid var(--u-amber-bd-s); border-radius:var(--u-r-pill); padding:2px 8px; font-size:.72rem; font-weight:800; }
.pill.red, .no, .err, .crit, .st-bad{ color:var(--u-red); background:var(--u-red-s); border:1px solid var(--u-red-bd-s); border-radius:var(--u-r-pill); padding:2px 8px; font-size:.72rem; font-weight:800; }
.pill.grey, .fa, .st-na{ color:var(--u-na-tx); background:none; border:1px solid var(--u-na-bd); border-radius:var(--u-r-pill); padding:2px 8px; font-size:.72rem; }
.bl{ color:var(--u-blue); }

/* ── 9 · AVISOS (recip/status/banner/error) ─────────────────────────────── */
.banner, .help, .msg, .recip, .status-box, .fw-nota, .sw-nota, .ea-cruce, .aczz, #ac-perf-zz-nota{
  margin-top:10px; font-size:.78rem; border-radius:var(--u-r-sm) !important; padding:9px 11px !important; border:1px solid var(--u-line) !important;
  background:var(--u-soft) !important; color:var(--u-tx) !important; }
.help, .banner.info, .recip{ background:var(--u-recip-s) !important; border-color:var(--u-recip-bd) !important; }
.banner.warn, .warn, .aczz, #ac-perf-zz-nota, #ac-perf-real{ background:var(--u-amber-s) !important; border-color:var(--u-amber-bd-s) !important; color:var(--u-amber) !important; }
.error, .err-box, .banner.err, .msg.err, .login-page .error, .ev-err, .ea-filed.bad{
  background:var(--u-red-s) !important; border:1px solid var(--u-red-bd-s) !important; color:var(--u-red) !important; border-radius:var(--u-r-sm) !important; }
.status{ font-size:.74rem; color:var(--u-mut); margin-top:6px; }
/* colores que hoy escribe scan.js en línea en el semáforo del expediente (se limpian en F5) */
#preflight-docs{ background:var(--u-red-s) !important; border:1px solid var(--u-red-bd-s) !important; border-radius:var(--u-r-sm) !important; color:var(--u-tx) !important; }
.sc-fold.sc-amb #preflight-docs{ background:var(--u-amber-s) !important; border-color:var(--u-amber-bd-s) !important; }
.sc-fold:not(.sc-bad):not(.sc-amb) #preflight-docs{ background:var(--u-green-s) !important; border-color:var(--u-green-bd) !important; }
#preflight-docs strong{ color:var(--u-head) !important; } #preflight-docs .muted{ color:var(--u-mut) !important; }
#preflight-docs li{ color:var(--u-tx) !important; }
.admin-card .empty, .admin-card p.empty{ border:0 !important; padding:0 !important; color:var(--u-mut) !important; }

/* ── 10 · TABLAS / LISTAS ───────────────────────────────────────────────── */
table, .app-table, .admin-table, .pr-tabla{ color:var(--u-tx); border-collapse:separate; border-spacing:0; width:100%; background:var(--u-card); border:1px solid var(--u-line); border-radius:var(--u-r-lg); overflow:hidden; }
th{ color:var(--u-mut) !important; font-size:.68rem; letter-spacing:.06em; text-transform:uppercase; font-weight:800; background:var(--u-soft) !important; border-bottom:1px solid var(--u-line) !important; padding:10px 12px; }
td{ border-bottom:1px solid var(--u-line-soft) !important; padding:10px 12px; background:transparent !important; }
tr:last-child td{ border-bottom:0 !important; }
tbody tr:hover td{ background:var(--u-hover) !important; }
/* tablas → tarjetas en móvil (responsive-tables.js ya escribe data-label; aquí solo se PINTA) */
@media (max-width:719px){
  .rtable thead{ display:none; } .rtable tr{ display:block; border:1px solid var(--u-line); border-radius:var(--u-r-md); margin-bottom:8px; background:var(--u-card2); }
  .rtable td{ display:flex; justify-content:space-between; gap:12px; border-bottom:1px solid var(--u-line-soft) !important; }
  .rtable td::before{ content:attr(data-label); color:var(--u-mut); font-size:.7rem; font-weight:800; text-transform:uppercase; }
}
.plan, .ir-row, .listbox > *, .hubpick > *{ display:flex; align-items:center; gap:10px; padding:11px 4px; border-bottom:1px solid var(--u-line); font-size:.86rem; }
.plan:last-child{ border-bottom:0; } .plan .rt{ font-size:.74rem; opacity:1; color:var(--u-mut); } .plan .go{ margin-left:auto; opacity:1; color:var(--u-mut); }

/* ── 11 · HOJA DE ACCIONES (.sheet) — chips con varias acciones (historial) ── */
.sheet, .fh-hosts, #fs21-hist-actions, .hv-sheet, .fs21res, .pvbtns2{
  margin-top:8px; border:1px solid var(--u-line) !important; border-radius:var(--u-r-md) !important; background:var(--u-card) !important; padding:8px 10px !important; font-size:.8rem; }
.sheet > div{ padding:8px 4px; border-bottom:1px solid var(--u-line-soft); font-weight:700; } .sheet > div:last-child{ border-bottom:0; }
.sheet small{ display:block; color:var(--u-mut); font-weight:600; margin-bottom:2px; }

/* ── 12 · NAVEGACIÓN — barra píldora REAL (_tabbar.html): solo colores ──── */
.tbar{ background:var(--u-tbar-bg) !important; border:1px solid var(--u-tbar-bd) !important; box-shadow:var(--u-tbar-sh) !important; backdrop-filter:blur(16px); }
.titem{ color:var(--u-titem) !important; } .titem.on{ color:var(--u-titem-on) !important; background:var(--u-titem-on-bg) !important; }
.titem span{ font-weight:800; }
@media (min-width:835px) and (pointer:fine){
  .tbar{ background:var(--u-rail-bg) !important; border-right:1px solid var(--u-rail-bd) !important; box-shadow:none !important; }
  .titem{ color:var(--u-rail-tx) !important; } .titem:hover{ background:var(--u-rail-hover) !important; } .titem.on{ color:var(--u-titem-on) !important; background:var(--u-titem-on-bg) !important; }
}
/* ── 13 · NAVEGACIÓN superior REAL (_nav.html, admin y páginas sin theme-dark) */
.appnav{ background:transparent !important; color:var(--u-nav-tx) !important; border-radius:0 !important; padding:6px 4px 12px !important; margin-bottom:12px !important;
  border-bottom:1px solid var(--u-line) !important; box-shadow:none !important; font-size:.8rem; font-weight:700; gap:18px; }
.appnav .nl, .appnav a{ color:var(--u-nav-tx) !important; text-decoration:none; } .appnav a:hover, .appnav .nl:hover{ color:var(--u-nav-on) !important; }
.appnav strong{ color:var(--u-nav-on); }
.appnav .nl, .appnav a, details.nb-adm > summary{ min-height:36px; display:inline-flex; align-items:center; padding:0 6px; }
details.nb-adm{ border:0 !important; background:transparent !important; margin:0 !important; }
details.nb-adm > summary{ min-height:36px; padding:0 6px !important; font-size:.8rem; color:var(--u-nav-tx) !important; }
details.nb-adm > summary::after{ content:none; }
.nb-adm-panel{ background:var(--u-card) !important; border:1px solid var(--u-line) !important; border-radius:var(--u-r-md) !important; padding:12px !important; }
.nb-adm-col .ng{ color:var(--u-mut); font-size:.68rem; font-weight:800; letter-spacing:.06em; text-transform:uppercase; }
.appnav .theme-switch a, .appnav .lang-switch a{ color:var(--u-nav-ctl) !important; }

/* ── 14 · MODAL / OVERLAYS (cropper, confirm) ───────────────────────────── */
.modal, .overlay, #send-confirm, #cropper-modal, .cropper-panel, .dialog, dialog{
  background:var(--u-card) !important; color:var(--u-tx) !important; border:1px solid var(--u-line) !important; border-radius:var(--u-r-xl) !important; }
.modal-backdrop, .overlay-bg{ background:var(--u-backdrop) !important; }

/* ── 15 · ESTADOS VACÍO / CARGA / ERROR ─────────────────────────────────── */
.empty, .fp-empty, .missing, .vacio{ border:1.5px dashed var(--u-line) !important; border-radius:var(--u-r-md) !important; color:var(--u-mut) !important; padding:10px 12px !important; background:transparent !important; }
.ev-spin, .spinner, .loading{ border-color:var(--u-blue-bd) transparent transparent transparent !important; }
.fx-prog{ background:var(--u-card) !important; border:1px solid var(--u-line) !important; border-radius:var(--u-r-md); box-shadow:none !important; }
.fx-prog span{ color:var(--u-tx) !important; }
.fx-bar{ background:var(--u-soft-3) !important; } .fx-bar i{ background:linear-gradient(90deg,var(--u-green),var(--u-green-hi)) !important; }
.fx-nav > *{ background:var(--u-blue-s) !important; color:var(--u-blue) !important; border:1px solid var(--u-blue-ring) !important; border-radius:var(--u-r-pill) !important; }

/* ── 16 · ACCESIBILIDAD ─────────────────────────────────────────────────── */
:focus-visible{ outline:3px solid var(--u-blue-bd) !important; outline-offset:2px; }
a:not(.titem):not(.nl):not(.btn):not(.fh-it){ text-underline-offset:2px; }

/* ── 17 · PÁGINAS CONCRETAS (solo color/forma) ──────────────────────────── */
/* Login / registro / reset — el hero se funde con el lienzo; la tarjeta es el <form> */
.login-page, .pwreset-page{ background:var(--u-canvas) !important; }
.auth-hero, .auth-foot{ background:transparent !important; } .auth-hero .brand, .auth-foot, .login-page .brand{ color:var(--u-mut) !important; }
.auth-card{ max-width:420px; margin:0 auto; }
.login-page form, .pwreset-page form, .login-page .auth-plan, .terms-page form{
  background:var(--u-card) !important; border:1px solid var(--u-line) !important; border-radius:var(--u-r-lg) !important; box-shadow:none !important; color:var(--u-tx); }
.login-page .auth-plan{ border-color:var(--u-green-bd) !important; }
/* Precios */
.pr-hero{ background:var(--u-hero) !important; border-radius:var(--u-r-xl); color:var(--u-on-navy); } .pr-c.pr-si{ border-color:var(--u-green-bd) !important; }
.pr-price, .pr-amount{ color:var(--u-head); } .pr-feats li{ color:var(--u-tx); } .pr-no{ color:var(--u-na-tx); }
.pr-tabla-wrap{ overflow-x:auto; }
/* Términos */
.terms-shell{ background:transparent !important; } .terms-text{ background:var(--u-soft) !important; border:1px solid var(--u-line) !important; border-radius:var(--u-r-md); color:var(--u-tx) !important; }
/* Editor de plan (compositor) */
.pvb, .blk, .acfila, .pobfila{ background:var(--u-card) !important; border:1px solid var(--u-line) !important; border-radius:var(--u-r-lg) !important; }
.h2act, .lblact{ color:var(--u-mut); }
.pv-lupa, .lupaw button{ background:var(--u-soft-2) !important; border:1px solid var(--u-line) !important; border-radius:var(--u-r-sm) !important; color:var(--u-tx) !important; }
.opts, .out, .sbody{ background:var(--u-card) !important; border-color:var(--u-line) !important; color:var(--u-tx) !important; }
#pv-ruta, textarea[name="ruta"], #ruta{ background:var(--u-amber-s) !important; border-color:var(--u-amber-bd-s) !important; }
/* Evidencia */
.ev-bar{ background:var(--u-navy-hdr) !important; color:var(--u-on-navy); border-radius:var(--u-r-md); } .ev-box img{ border-radius:6px; border:1px solid var(--u-page-bd); }
/* Admin: dashboard nums / switches */
.nums, .num{ color:var(--u-head); } .admin-card .more a, .more{ color:var(--u-blue); }
.sw-state{ color:var(--u-mut); } .sw-off{ color:var(--u-red); }
/* Ficha de aeronave / progreso */
.fw-t{ color:var(--u-head); }

/* ── 18 · Overrides de orden (deben ir al final: ganan a la regla genérica de inputs) ── */
.gs input#gs-q, .gs-wrap .gs input[type="search"]#gs-q{ background:transparent !important; border:0 !important; color:var(--u-search-tx) !important; box-shadow:none !important; min-height:auto; padding:6px 8px !important; }
.gs input#gs-q::placeholder{ color:var(--u-search-tx) !important; opacity:1; }

/* ── 19 · CONTRASTE (ronda 2026-09-21) — texto ≥ 4.5:1, grande/controles ≥ 3:1 ────
   Solo color/opacidad. Corrige textos grises o azules apagados sobre navy que venían de
   app.css, hojas por página, <style> inline o estilos en línea; el tema claro usa los mismos
   selectores con sus tokens. Nada de layout, nada de DOM. */
/* etiquetas de sección / grupos del menú admin / subtítulos que app.css pintaba en gris apagado */
.nb-adm-col .ng, .users-page .help, .sec-label, h3.grp, .sub, .lblact .u, label.lblact span.u, .ea-k, .ea-info .ea-k,
#ac-refs .k, #ac-refs .v, .av-hint, .av-plan .rt, .terms-card .v, .pr-no, .sc-docs-n, .fh-status, .status, .note, .fld-note, .muted, p.muted, div.muted,
#cli-hint, .soporte-page main > p, .dash-page .admin-card .empty, .fp-empty, .doc small, .docmeta, .docprop, .fw-sub, .fw-nota, .rt{
  color:var(--u-mut) !important; opacity:1 !important; }
p, li, td, th, dd, dt{ color:var(--u-tx); }
/* enlaces de texto que app.css deja en azules oscuros (#1466B8 / #2563eb) */
a.nb-adm, .sec-label a, main a:not(.btn):not(.titem):not(.nl):not(.fh-it):not(.tile):not(.act):not(.av-plan):not(.fbo-btn):not(.pr-cta),
p a, td a, li a, .note a, .muted a, .help a, details.trash > summary{ color:var(--u-blue) !important; }
/* mosaico «Tu información»: app.css pintaba el rótulo en navy (invisible sobre la tarjeta) */
.tilegrid .tile b, .tile b, .tile .t{ color:var(--u-tx) !important; }
.tile .tn{ background:var(--u-blue-s) !important; color:var(--u-blue) !important; }
/* chips del compositor (plan_vuelo <style> inline) y del eAPIS: texto azul sobre chip */
.pvchip b, .pvchip i, .pvchip, .acpill b, .acpill i{ color:var(--u-tx) !important; opacity:1 !important; }
.pvchip b, .acpill i{ color:var(--u-blue) !important; }
.pvchip{ background:var(--u-blue-s) !important; border:1px solid var(--u-blue-ring) !important; }
/* obligatorio (*) y estados que app.css pintaba con rojos/verdes oscuros de tema claro */
.req, span.req, .pkgreq{ color:var(--u-amber) !important; }
.security-page .card .num, .card.crit .num, .cards .card .num{ color:var(--u-head) !important; }
.security-page .card.crit .num{ color:var(--u-red) !important; }
form.filters label, .filters label{ color:var(--u-mut) !important; }
.sc-docs-hd, .sc-docs-hd span, .docs .dt{ color:var(--u-green-tx) !important; }
/* superficies claras que quedaban escritas en línea o en hojas por página (texto claro sobre blanco) */
[style*="background:#fff"], [style*="background: #fff"], [style*="background:#ffffff"], [style*="background: #ffffff"],
[style*="background:white"], [style*="background: white"], [style*="background:#f9fafb"], [style*="background:#f8fafc"], [style*="background:#EEF2F7"], [style*="background: #EEF2F7"]{
  background:var(--u-card) !important; color:var(--u-tx) !important; }
[style*="background:#fffbeb"], [style*="background: #fffbeb"], [style*="background:#eff6ff"], [style*="background: #eff6ff"], .note[style]{
  background:var(--u-soft) !important; color:var(--u-tx) !important; border-color:var(--u-line) !important; }
code, kbd, pre{ background:var(--u-soft-2) !important; color:var(--u-tx) !important; border:0 !important; border-radius:6px; }
.note code{ color:var(--u-head) !important; }
.terms-text h1, .terms-text h2, .terms-text h3, .terms-text p, .terms-text li{ color:var(--u-tx) !important; }
.terms-text h2, .terms-text h3{ color:var(--u-head) !important; }
#cli-hint, .users-page .muted, .users-page details .muted{ color:var(--u-mut) !important; }
/* placeholders y texto de solo lectura: legibles pero secundarios */
::placeholder{ color:var(--u-inp-ph) !important; opacity:1 !important; }
input[readonly], input:disabled, select:disabled, .ea-auto input, .ea-derived input{ color:var(--u-mut) !important; }
/* banderas del idioma (opacidad .4 en línea en _nav.html): inactiva al 70 %, sigue distinguiéndose la activa */
.lang-switch a{ opacity:.7 !important; }
/* bordes de controles ≥ 3:1: fantasma, neutro, peligro y chips con relleno translúcido */
.ghost, .btn.ghost, .secondary, .b-view, .calcbtn, .chipbtn, .editlink, .sw-btn, .ea-back, .back, .sc-listo-btn, .listo span, .pv-lupa, .lupaw button, .eqp-lupa{
  border-color:var(--u-blue-ring) !important; }
.fh-todo{ border-color:var(--u-blue-ring) !important; }
.fh-ok{ border-color:var(--u-green-bd) !important; } .fh-al, .danger{ border-color:var(--u-red-bd-s) !important; }
.fh-prev{ border-color:rgba(190,165,255,.8) !important; }
/* «no aplica»: texto y borde legibles; sigue siendo inerte por color, no por transparencia */
.fh-na{ color:var(--u-na-tx) !important; border-color:var(--u-na-bd) !important; }
/* tarjetas de vuelo archivadas: la atenuación va por color de título, nunca por opacidad del bloque */
.fh-arch, .fh-arch *{ opacity:1 !important; }
/* iconos informativos */
.fh-status i{ opacity:1; } .gs-ic, .act-ic svg, .tile svg, .doc .ic{ opacity:1 !important; }
/* /admin/fbos — filas que fbo-admin.js pinta en blanco en línea (D5: solo color) */
#fba-list > div, #fba-list > div > div, #fba-list [style*="background"]{ background:var(--u-card) !important; color:var(--u-tx) !important; border-color:var(--u-line) !important; }
#fba-list, #fba-msg, #fba-list .muted{ color:var(--u-mut) !important; }
#fba-list button{ border-color:var(--u-btn-bd) !important; }
/* — segunda pasada de contraste — */
.terms-card h1, .terms-card h2{ color:var(--u-head) !important; }
.terms-card p, .terms-card label, .terms-card label span, .terms-firma .tf-lbl span, .terms-firma .tf-note, .tf-lbl{ color:var(--u-tx) !important; }
.terms-firma .tf-lbl span, .tf-note, .terms-card .v{ color:var(--u-mut) !important; }
.fh-ff{ border:1.5px solid var(--u-blue) !important; }                  /* relleno azul: el borde claro da el 3:1 del contorno */
#ac-refs, #ac-refs *, .fh-dia, .fh-status, .fh-it .q{ opacity:1 !important; }
thead, thead tr, table th, .app-table th, .admin-table th, .rtable th{ background:var(--u-soft) !important; color:var(--u-mut) !important; }
main.shell p:not(.muted):not(.sub):not(.note):not(.help):not(.status), main.shell div > p:not(.muted):not(.sub):not(.note):not(.help):not(.status), .card p, .card li, .shell label:not(.lbl){ color:var(--u-tx) !important; }
.card h1, .card h2, .card h3, .sw-tx b, .card b{ color:var(--u-head) !important; }
.note, div.note, p.note{ background:var(--u-soft) !important; color:var(--u-tx) !important; border-color:var(--u-line) !important; }
.sw-meta, .sw-state, .card > span{ color:var(--u-mut) !important; }
.sw-state.sw-off{ background:var(--u-red-s) !important; color:var(--u-red) !important; border-radius:999px; padding:2px 8px; }
.sw-state.sw-on{ background:var(--u-green-s) !important; color:var(--u-green-tx) !important; border-radius:999px; padding:2px 8px; }
h1 span, h1 small, h2 span.sub, h2 small{ color:var(--u-mut) !important; opacity:1 !important; }
.fba-fld label, #fba-list label{ color:var(--u-mut) !important; }
#fba-list span, #fba-list div, #fba-list b{ color:var(--u-tx) !important; }
#fba-list button, #fba-list > div > div > button{ border-color:var(--u-btn-bd) !important; background:var(--u-btn-bg) !important; color:var(--u-btn-tx) !important; }
.filters a, .filters .clear{ color:var(--u-blue) !important; }
#pv-fs21-soon, .pvactions span{ background:var(--u-soft) !important; color:var(--u-mut) !important; opacity:1 !important; }
li a.btn, ol li a.btn, ul li a.btn{ background:var(--u-btn-bg) !important; color:var(--u-btn-tx) !important; border:1.5px solid var(--u-btn-bd) !important; }
strong.err, p strong[style], .card strong{ color:var(--u-head) !important; }
/* buscador: en el hero (navy) va en blanco; fuera del hero (Datos) con el token del tema */
.gs input#gs-q{ color:var(--u-search-tx) !important; } .gs .gs-ic{ stroke:var(--u-search-tx) !important; }
.nb-hero .gs input#gs-q, .nb-hero .gs input#gs-q::placeholder{ color:#e4eefb !important; } .nb-hero .gs .gs-ic{ stroke:#e4eefb !important; }
.gs input#gs-q::placeholder{ color:var(--u-search-tx) !important; opacity:.85 !important; }
html.u-light .gs{ background:var(--u-soft-2) !important; }
html.u-light .nb-hero .gs{ background:rgba(255,255,255,.18) !important; }
/* /admin/fbos: resumen por aeropuerto y filas (colores en línea de fbo_admin.html / fbo-admin.js) */
.fbo-admin-page [style*="color:#6b7a90"], .fbo-admin-page [style*="color:#0b386a"], .fbo-admin-page [style*="color: #6b7a90"], #fba-msg, #fba-editor-msg{ color:var(--u-mut) !important; }
.fbo-admin-page [style*="color:#0b386a"]{ color:var(--u-tx) !important; }
#fba-list button[style]{ border:1.5px solid var(--u-btn-bd) !important; background:var(--u-btn-bg) !important; color:var(--u-btn-tx) !important; }
#fba-list .fba-chip[style]{ background:var(--u-soft-2) !important; color:var(--u-tx) !important; }
/* textos genéricos que app.css/hojas por página dejaban en grises de tema claro (#6b7280, #374151, #4b5563, #64748b) */
.shell > p, .shell > div > p, form label, .login-page label, #login-2fa label, body > div > form > label{ color:var(--u-tx) !important; }
.shell > p.muted, .shell > p.sub{ color:var(--u-mut) !important; }
[style*="color:#6b7280"], [style*="color:#374151"], [style*="color:#4b5563"], [style*="color:#64748b"], [style*="color:#6b7a90"], [style*="color:#5b6673"], [style*="color:#94a3b8"]{ color:var(--u-mut) !important; }
[style*="color:#0b386a"], [style*="color:#111827"], [style*="color:#1B3352"], [style*="color:#16202E"], [style*="color:#152A42"]{ color:var(--u-tx) !important; }
/* «›» y flechas de acción sobre verde: el mismo blanco que el texto del botón */
.av-plan .go, a.av-plan > span.go{ opacity:1 !important; }
/* peligro: borde con más cuerpo para el 3:1 sobre tarjeta */
.danger, .btn.danger, button.danger{ border-color:#f08a8a !important; }
/* botón primario del inicio (estilo propio en app_eapis) y enlaces-botón de aircraft_documents */
#hv-go, button#hv-go, .av-go{ background:linear-gradient(160deg,var(--u-green),var(--u-green-2)) !important; color:#fff !important; }
a.btn[href], ol li a.btn, li a.btn{ background:var(--u-blue-s) !important; color:var(--u-blue) !important; border:1.5px solid var(--u-blue-ring) !important; }
main ol > li, body > ol > li, .shell ol > li{ background:var(--u-card) !important; color:var(--u-tx) !important; border-color:var(--u-line) !important; }
input[type="file"]{ border:1.5px solid rgba(179,198,224,.7) !important; color:var(--u-tx) !important; }
html.u-light input[type="file"]{ border-color:rgba(27,51,82,.62) !important; }

/* ── 20 · DOCUMENTOS DEL TRIPULANTE (hotfix-crew-docs: #crew-docs-rows en app_datos.html) ──
   Los renglones reutilizan las clases .docrow/.docacts/.docmeta de la ficha de aeronave, pero
   app.css solo las estiliza bajo #docs-card. Misma geometría, mismos tokens; sin DOM ni JS.
   Si la feature no está presente, ningún selector coincide y esta sección es inerte. */
#crew-docs-rows{ display:flex; flex-direction:column; gap:.5rem; margin-top:.35rem; }
#crew-docs-rows .docrow{ background:var(--u-card2); border:1px solid var(--u-line); border-left:4px solid var(--u-line); border-radius:var(--u-r-md); padding:.55rem .7rem; }
#crew-docs-rows .docrow-head{ display:flex; flex-wrap:wrap; align-items:baseline; justify-content:space-between; gap:.15rem .5rem; }
#crew-docs-rows .doctipo{ flex:1 1 auto; min-width:0; font-weight:700; font-size:.86rem; letter-spacing:.02em; color:var(--u-tx); overflow-wrap:anywhere; }
#crew-docs-rows .docacts{ display:flex; flex-wrap:wrap; gap:.35rem; margin:.4rem 0 0; }
#crew-docs-rows .docacts button{ min-height:var(--u-tap); border-radius:var(--u-r-pill); padding:0 .7rem; font-size:.82rem; font-weight:600; white-space:nowrap; }
#crew-docs-rows .docmeta{ font-size:.76rem; color:var(--u-mut); margin:.25rem 0 0; overflow-wrap:anywhere; }

/* ── 21 · HOTFIX POST-DEPLOY (sobre 8c152f5) ────────────────────────────────
   La regla genérica de botones de la §7 (padding 11/14, min-height 44, fondo
   --u-btn-bg, todo !important) alcanzaba componentes que traían su propio
   diseño y los volvía invisibles o gigantes. NO se toca la §7: aquí van
   excepciones ACOTADAS por componente, cada una con su selector propio. */

/* iOS: sin inflado automático de texto al girar (no afecta al zoom de inputs). */
html{ -webkit-text-size-adjust:100%; text-size-adjust:100%; }

/* (11) plan de vuelo · sugerencias de pasajeros guardados: eran <button> y la §7
   les ponía texto #fff sobre el panel #fff → la lista «parecía vacía». */
.pvb .pv-paxsug{ background:var(--u-card) !important; border:1px solid var(--u-line) !important; box-shadow:var(--u-shadow) !important; }
.pvb .pv-paxsug .pv-paxopt{ display:block; width:100%; text-align:left !important; min-height:0; background:transparent !important;
  color:var(--u-tx) !important; border:0 !important; border-radius:0 !important; padding:10px 12px !important;
  font-size:.86rem !important; font-weight:700 !important; }
.pvb .pv-paxsug .pv-paxopt + .pv-paxopt{ border-top:1px solid var(--u-line-soft) !important; }
.pvb .pv-paxsug .pv-paxopt:hover, .pvb .pv-paxsug .pv-paxopt:focus-visible, .pvb .pv-paxsug .pv-paxopt:active{
  background:var(--u-hover-2) !important; color:var(--u-head) !important; outline:none; }

/* (10) vista previa AFAC · un documento que NO se puede generar es un ERROR:
   rojo sólido y texto blanco (antes ámbar pálido con <p>/<li> en --u-tx claro). */
.pvb #pv-docs-list .pv-docerr, .pvb #pv-docs-list .pv-docerr p, .pvb #pv-docs-list .pv-docerr li{
  background:#b42318 !important; color:#fff !important; }
.pvb #pv-docs-list .pv-docerr{ border-radius:var(--u-r-sm); }
.pvb #pv-docs-list .pv-docerr ul{ margin:.3rem 0 0; padding-left:1.1rem; }

/* (14) lupas / iconos dentro de botones: con el padding forzado de la §7 un botón
   de 28-32 px dejaba ~1 px al SVG (un punto), y el trazo blanco quedaba sobre
   fondo claro en tema claro. Tamaño fijo, sin padding, glifo con currentColor. */
button.eqp-lupa, .pvb button.pv-lupa, .lupaw button.pv-lupa{ padding:0 !important; min-height:0 !important; }
button.eqp-lupa{ width:32px; height:32px; background:linear-gradient(160deg,#0b386a,#1f5aa8) !important;
  border:1px solid var(--u-blue-ring) !important; color:#fff !important; }
button.eqp-lupa svg{ flex-shrink:0; width:15px; height:15px; stroke:#fff !important; }
.pvb button.pv-lupa, .lupaw button.pv-lupa{ width:28px; height:28px; display:flex; align-items:center; justify-content:center; color:var(--u-tx) !important; }
.pvb button.pv-lupa svg, .lupaw button.pv-lupa svg{ flex-shrink:0; width:15px !important; height:15px !important; stroke:currentColor !important; }
.pvb .i18chips .chipbtn svg{ flex-shrink:0; width:12px !important; height:12px !important; }

/* (17) inicio · «Da de alta tu aeronave»: el «›» era un <span class="go"> y la §7
   lo convertía en una píldora verde de 44 px. Ahora es un círculo compacto;
   el área táctil es la tarjeta entera (el <a class="av-plan">). */
a.av-plan > span.go{ display:inline-flex; align-items:center; justify-content:center; flex:0 0 auto;
  width:28px; height:28px; min-height:0 !important; padding:0 !important; border-radius:50% !important;
  font-size:1.05rem !important; line-height:1; }

/* (15) ficha de AERONAVE · documentos compactos. Todo va bajo #docs-card, así que
   la ficha del tripulante (#crew-docs-rows) NO cambia. El área táctil sigue en
   44 px con un ::after invisible que no ocupa renglón. */
#docs-card .docrow{ padding:.4rem .6rem; }
#docs-card .docacts{ gap:.3rem; margin:.3rem 0 0; }
#docs-card .docmeta{ margin:.15rem 0 0; }
#docs-card .docacts button, #docs-card .docmas button, #docs-card .docaiu button, #docs-card .doc-expedit button{
  position:relative; min-height:30px !important; padding:3px 10px !important; font-size:.76rem !important;
  font-weight:600 !important; border-radius:999px !important; line-height:1.2; }
#docs-card .docacts button::after, #docs-card .docmas button::after, #docs-card .docaiu button::after, #docs-card .doc-expedit button::after{
  content:""; position:absolute; left:0; right:0; top:50%; height:44px; transform:translateY(-50%); }
#docs-card .docaiu input{ min-height:34px !important; padding:5px 8px !important; }

/* (4.3) el editor «Vence el…» vivía siempre visible bajo la lista: la §6 le daba
   display:inline-block a .doc-expedit y le ganaba a .hide. */
.doc-expedit.hide{ display:none !important; }

/* (7) estado de documentos de la ficha de aeronave. Contrato único:
   verde = vigente · amarillo = vence en ≤ 30 días · rojo = obligatorio que falta
   o documento vencido · neutro = opcional que falta. */
#docs-card .docrow.is-warn{ --dbd:#c47f00; --dbg:#fffbeb; --dst:#92400e; }
#docs-card .docrow.is-exp { --dbd:#d64545; --dbg:#fef2f2; --dst:#991b1b; }
#docs-card .docrow.is-na  { --dbd:#E4E4E8; --dbg:#FAFAFB; --dst:#6B6B70; }
body.tdk #docs-card .docrow.is-warn{ --dbd:#c47f00; --dbg:rgba(196,127,0,.14); --dst:#f2d59a; }
body.tdk #docs-card .docrow.is-exp { --dbd:#d64545; --dbg:rgba(200,50,50,.16); --dst:#ffc9c9; }
body.tdk #docs-card .docrow.is-na  { --dbd:rgba(127,150,180,.3); --dbg:rgba(255,255,255,.03); --dst:#9fb6d4; }

/* (13) ADMIN · causa común: los tokens heredados de app.css (--card, --sec, --txt,
   --muted, --line) seguían en CLARO con el tema oscuro, y reglas de app.css por
   página (más específicas que las de este archivo) los usaban: filas blancas con
   texto claro, celdas #1C1C1E sobre navy, barras claras. En las páginas admin se
   reasignan a los tokens del tema (en claro dan el mismo resultado de antes). */
body.dash-page, body.users-page, body.customers-page, body.fbo-admin-page, body.backups-page,
body.security-page, body.sistema-page, body.integ-page, body.soporte-page, body.pkg-page{
  --card:var(--u-card); --card-bd:var(--u-line); --sec:var(--u-soft-2); --line:var(--u-line);
  --txt:var(--u-tx); --muted:var(--u-mut); --page:var(--u-canvas); }
.app-table td, .admin-table td{ color:var(--u-tx) !important; }
.app-table tbody tr:nth-child(even) td, .admin-table tbody tr:nth-child(even) td{ background:var(--u-card2) !important; }
@media (max-width:640px){ table.rtable tbody tr{ background:var(--u-card) !important; border-color:var(--u-line) !important; } }
.dash-page .badge.red, .dash-page .pill.red, .users-page .b-ina, .users-page .b-no, .pkg-page .b-no, .security-page .b-crit,
.integ-page .off, .backups-page .failed{ background:var(--u-red-s) !important; color:var(--u-red) !important; border:1px solid var(--u-red-bd-s) !important; }
.dash-page .badge.yellow, .dash-page .pill.yellow, .pkg-page .b-sk, .backups-page .missing{
  background:var(--u-amber-s) !important; color:var(--u-amber) !important; border:1px solid var(--u-amber-bd-s) !important; }
.dash-page .badge.green, .dash-page .pill.green, .users-page .b-act, .pkg-page .b-ok, .security-page .b-ok,
.integ-page .ok, .backups-page .ok{ background:var(--u-green-s) !important; color:var(--u-green-tx) !important; border:1px solid var(--u-green-bd) !important; }
.dash-page .badge.grey, .dash-page .pill.grey, .security-page .b-n{ background:var(--u-badge-bg) !important; color:var(--u-badge-tx) !important; }
.dash-page .alert{ background:var(--u-amber-s) !important; border-color:var(--u-amber-bd-s) !important; color:var(--u-amber) !important; }
.listbox{ background:var(--u-card) !important; }
.listbox > table{ display:table; padding:0; border-bottom:0; }
.backups-page table{ background:var(--u-card) !important; border-color:var(--u-line) !important; }
.backups-page th{ background:var(--u-soft) !important; }
.backups-page .rec.ok{ background:var(--u-green-s) !important; border-color:var(--u-green-bd) !important; color:var(--u-green-tx) !important; }
.backups-page .rec.failed{ background:var(--u-red-s) !important; border-color:var(--u-red-bd-s) !important; color:var(--u-red) !important; }
.backups-page .rec.missing{ background:var(--u-amber-s) !important; border-color:var(--u-amber-bd-s) !important; color:var(--u-amber) !important; }
.users-page .role{ color:var(--u-mut) !important; }
.barlbl{ color:var(--u-tx) !important; } .barwrap{ background:var(--u-soft-3) !important; } .barn{ color:var(--u-mut) !important; }
.pkg-page a.dl{ background:var(--u-blue-s) !important; color:var(--u-blue) !important; }
/* colores escritos en línea en admin (2FA, clientes, cuentas, nav) que no cubría la §19 */
[style*="color:#9ca3af"]{ color:var(--u-mut) !important; }
[style*="color:#15803d"], [style*="color:#065f46"], [style*="color:#166534"]{ color:var(--u-green-tx) !important; }
[style*="color:#b91c1c"], [style*="color:#991b1b"]{ color:var(--u-red) !important; }
[style*="color:#b45309"], [style*="color:#92400e"]{ color:var(--u-amber) !important; }
[style*="color:#1466B8"]{ color:var(--u-blue) !important; }
[style*="background:#f0f9ff"]{ background:var(--u-blue-s) !important; border-color:var(--u-blue-bd) !important; color:var(--u-tx) !important; }
[style*="background:#ecfdf5"], [style*="background:#dcfce7"]{ background:var(--u-green-s) !important; border-color:var(--u-green-bd) !important; }
[style*="background:#fef2f2"]{ background:var(--u-red-s) !important; border-color:var(--u-red-bd-s) !important; }
[style*="background:#fef3c7"]{ background:var(--u-amber-s) !important; }
[style*="background:#f3f4f6"]{ background:var(--u-soft) !important; }
[style*="border-top:1px solid #eee"], [style*="border:1px solid #e5e7eb"]{ border-color:var(--u-line) !important; }

/* (2) iPhone · sin desbordamiento horizontal: si el documento es más ancho que la
   pantalla, Safari permite alejar por debajo de la escala 1 y la app «se encoge».
   El zoom al enfocar un campo se CONSERVA (no se toca el tamaño de los inputs). */
.admin-grid{ grid-template-columns:repeat(auto-fill, minmax(min(320px,100%), 1fr)); }
#afac-airport{ min-width:0 !important; width:100%; }
.appnav .nb-adm-panel{ max-width:calc(100vw - 24px); overflow-x:auto; }
@media (max-width:719px){
  .security-page .admin-table, .backups-page table, .fbo-admin-page table, .sistema-page table, .integ-page table{
    display:block; max-width:100%; overflow-x:auto; -webkit-overflow-scrolling:touch; }
  .customers-page [style*="min-width:230px"], .customers-page [style*="min-width:120px"]{ min-width:0 !important; }
}

/* (8) /scan · «Expediente operación»: dos secciones plegadas (aeronave y
   tripulación a bordo). Colores por clase y tokens — funcionan en ambos temas. */
#preflight-docs{ background:none !important; border:0 !important; padding:0 !important; }
/* (la §5 pinta todo <details> con borde verde !important: aquí manda el estado) */
#preflight-docs details.pf-sec{ border:1px solid var(--u-line) !important; border-left:4px solid var(--u-green-bd) !important;
  border-radius:var(--u-r-md) !important; background:var(--u-card2) !important; margin:.45rem 0 0 !important; }
#preflight-docs details.pf-sec.pf-warn{ border-left-color:var(--u-amber-bd-s) !important; }
#preflight-docs details.pf-sec.pf-exp{ border-left-color:var(--u-red-bd-s) !important; }
#preflight-docs .pf-sum{ display:flex; align-items:center; gap:.45rem; min-height:40px; padding:6px 30px 6px 10px !important;
  cursor:pointer; font-size:.84rem; }
#preflight-docs .pf-tt{ font-weight:800; color:var(--u-head) !important; }
#preflight-docs .pf-mut{ color:var(--u-mut) !important; font-size:.76rem; }
#preflight-docs .pf-body{ padding:0 10px 8px; }
#preflight-docs .pf-list{ margin:.2rem 0 0; padding:0; list-style:none; }
#preflight-docs li.pf-it{ padding:.14rem 0; font-size:.82rem; }
#preflight-docs .pf-ic{ display:inline-block; width:1.2rem; font-weight:800; text-align:center; }
#preflight-docs li.pf-ok, #preflight-docs .pf-sec.pf-ok > .pf-sum .pf-ic{ color:var(--u-green-tx) !important; }
#preflight-docs li.pf-warn, #preflight-docs .pf-sec.pf-warn > .pf-sum .pf-ic{ color:var(--u-amber) !important; }
#preflight-docs li.pf-exp, #preflight-docs li.pf-req, #preflight-docs .pf-sec.pf-exp > .pf-sum .pf-ic{ color:var(--u-red) !important; font-weight:700; }
#preflight-docs li.pf-na{ color:var(--u-mut) !important; }
#preflight-docs .pf-trip + .pf-trip{ margin-top:.5rem; padding-top:.45rem; border-top:1px solid var(--u-line-soft); }
#preflight-docs .pf-rol{ font-size:.82rem; color:var(--u-tx) !important; }
#preflight-docs .pf-aviso{ margin:.45rem 0 0; padding:6px 9px; border-radius:var(--u-r-sm); background:#b42318 !important;
  color:#fff !important; font-size:.78rem; font-weight:700; }
#preflight-docs .pf-vacio, #preflight-docs .pf-nota{ color:var(--u-mut) !important; font-size:.78rem; margin:.4rem 0 0; }
.crew-avisos ul{ margin:.3rem 0 0; padding-left:1.1rem; }

/* (7) ficha del TRIPULANTE: SOLO el color de estado (la geometría aprobada del
   renglón no cambia). Borde izquierdo con la semántica única D3. */
#crew-docs-rows .docrow.is-ok{ border-left-color:var(--u-green-bd); }
#crew-docs-rows .docrow.is-warn{ border-left-color:var(--u-amber-bd-s); }
#crew-docs-rows .docrow.is-exp, #crew-docs-rows .docrow.is-req{ border-left-color:var(--u-red-bd-s); }
#crew-docs-rows .docrow .docstate{ font-size:.68rem; font-weight:700; margin-left:.35rem; }
#crew-docs-rows .docrow.is-ok .docstate{ color:var(--u-green-tx); }
#crew-docs-rows .docrow.is-warn .docstate{ color:var(--u-amber); }
#crew-docs-rows .docrow.is-exp .docstate, #crew-docs-rows .docrow.is-req .docstate{ color:var(--u-red); }

/* (13) /admin/afac · el aviso de error de la base usa class="bar block" y heredaba
   la barra de gráfica de app.css (.bar = fondo --accent): texto oscuro sobre navy
   en tema claro. Es un ERROR: se pinta como tal. */
.users-page .bar.block{ height:auto; background:var(--u-red-s) !important; color:var(--u-red) !important;
  border:1px solid var(--u-red-bd-s); border-radius:var(--u-r-sm); padding:8px 10px; }

/* ── 22 · POLISH POST-DEPLOY (sobre e592418, 2026-09-26) ─────────────────────
   Igual que la §21: excepciones ACOTADAS por componente, nunca una regla global
   de `button`. Cada bloque nombra el punto del reporte del owner. */

/* (1) iOS · SIN auto-zoom al enfocar. Causa raíz: la §6 fija los controles a
   .9rem !important (14.4 px) con especificidad 0,6,1 y le gana al 16 px de
   theme-dark.css; Safari hace zoom al enfocar cualquier campo < 16 px y no
   regresa. En móvil TODO control escribible va a 16 px (misma lista de la §6,
   con `html body` delante: 0,6,3 gana a la §6 y a los escopeados chicos como
   el selector PIC/SIC). Los que ya eran MÁS grandes a propósito (ICAO de
   origen/destino) se restituyen abajo. NO se toca el viewport: sin topes de
   escala en la etiqueta meta — el pellizco para ampliar sigue libre. */
@media (max-width:834px){
  html body input:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="submit"]):not([type="range"]):not([type="hidden"]),
  html body select, html body textarea, html body .inp, html body .ea-info,
  html body .fp-card input.fp-in, html body .fp-card select, html body.eapis-page .fp-rolesel{
    font-size:16px !important; }
  html body :is(.av-od .inp, .av-od input, .fmt-icao, .fp-icao, #origin, #destination,
    input[name="dep"], input[name="dest"], input[name="origen"], input[name="destino"]):not(#_z){
    font-size:1.25rem !important; }
}

/* (11) BARRA INFERIOR anclada al viewport. Causa raíz (auditada): la barra ya es
   `position:fixed` y es hija DIRECTA de <body> (ningún ancestro con transform /
   filter / backdrop-filter / contain / will-change le cambia el bloque contenedor),
   pero en iOS un `fixed` se ancla al viewport de LAYOUT: cuando Safari hace zoom
   (el auto-zoom del punto 1 en formularios como Datos/Tripulación, o un documento
   más ancho que la pantalla) el viewport VISUAL es otro y la barra aparece a media
   pantalla, a alturas distintas según el desplazamiento del zoom. Con (1) la
   escala se queda en 1. Aquí además: UNA medida compartida para la barra y el aire
   del contenido, anclaje explícito abajo (nunca `top`), y fuera desbordes
   horizontales conocidos. Teclado: sin cambios — tabbar-keyboard.js pone
   html.kb-open y la barra se oculta; el padding del body NO cambia (sin doble
   compensación ni saltos). */
@media (max-width:834px){
  :root{ --bottom-nav-height:60px; --bottom-nav-gap:12px; }
  body:has(> nav.tbar){ padding-bottom:calc(var(--bottom-nav-height) + 2 * var(--bottom-nav-gap) + env(safe-area-inset-bottom, 0px)); }
  body > nav.tbar{ position:fixed !important; top:auto !important; bottom:calc(var(--bottom-nav-gap) + env(safe-area-inset-bottom, 0px)) !important;
    min-height:var(--bottom-nav-height); box-sizing:border-box; transform:none; }
  html.kb-open body > nav.tbar{ display:none; }
  .fpb .opts{ grid-template-columns:repeat(auto-fill, minmax(min(220px,100%), 1fr)); }
  .fpb .opts.tri{ grid-template-columns:repeat(auto-fill, minmax(min(290px,100%), 1fr)); }
}

/* (2) VISTA PREVIA de documentos (§6 del plan). Causa raíz: estilos en línea
   claros (#fff / #eef5fc) que el tema oscuro no cubría, con el texto forzado a
   --u-tx (claro): texto casi blanco sobre fondo casi blanco; y en error el
   cascarón seguía visible. Ahora clase + máquina de estados (data-state). */
.pvb .pv-prevframe{ margin-top:10px; border:1px solid var(--u-line); border-radius:10px; overflow:auto;
  max-height:72vh; background:var(--u-card2); color:var(--u-tx); }
.pvb .pv-prevframe-docs{ max-height:78vh; }
.pvb .pv-prevbar{ position:sticky; top:0; z-index:3; display:flex; align-items:center; justify-content:flex-end; gap:8px;
  padding:6px 8px; background:var(--u-card) !important; border-bottom:1px solid var(--u-line); }
.pvb .pv-prevbar .pv-prevmsg{ margin:0 !important; flex:1; min-width:0; color:var(--u-tx) !important; font-size:.8rem; }
.pvb .pv-prevpage{ width:100%; display:block; background:#fff; }   /* la HOJA del PDF sí es blanca */
.pvb #pv-docs-frame[data-state="generating"] #pv-docs-list:empty{ min-height:56px; }
.pvb #pv-docs-frame[data-state="generating"] #pv-docs-list:empty::before{ content:""; display:block; height:4px; margin:18px 12px;
  border-radius:999px; background:linear-gradient(90deg, var(--u-soft-3), var(--u-blue-bd), var(--u-soft-3)); }
.pvb #pv-docs-frame[data-state="error"]{ background:transparent !important; border:0 !important; max-height:none; overflow:visible; }
.pvb #pv-docs-frame[data-state="error"] .pv-prevbar{ position:static; background:transparent !important; border:0; padding:0 0 6px; }
.pvb #pv-docs-frame[data-state="idle"]{ display:none !important; }

/* (3) «5 · Equipo y supervivencia»: era el único <details> de sección y la §5
   (plegables) le pintaba borde izquierdo VERDE !important + un segundo chevron
   (summary::after) además del suyo (::before). Se funde con la tarjeta como las
   demás secciones; expandir/colapsar sigue igual. */
.pvb details.eqro{ border:0 !important; border-left:0 !important; background:transparent !important; margin:0 !important;
  padding:0 !important; border-radius:0 !important; }
.pvb details.eqro > summary{ padding:2px 0 !important; min-height:0; }
.pvb details.eqro > summary::after{ content:none !important; }
.pvb details.eqro > *:not(summary){ padding:0 !important; }

/* (4) «5b · Solicitud»: Firma / AIU / Propietario. Causa raíz: `.pvchip` es un
   <button> y la §7 lo inflaba (padding 11/14, min-height 44, .92rem). Píldoras
   compactas en UNA fila cuando caben (máximo dos renglones en 390); un valor
   largo (propietario) se recorta con «…» en vez de ocupar su propio renglón.
   Área táctil de 44 px con ::after invisible. Los datos NO cambian. */
.pvb .pvchips{ gap:4px 6px !important; margin:2px 0 4px !important; }
.pvb .pvchips .pvchip{ position:relative; min-height:0 !important; padding:3px 9px !important; font-size:.72rem !important;
  font-weight:700 !important; border-radius:999px !important; line-height:1.25; max-width:100%; min-width:0; gap:4px; }
.pvb .pvchips .pvchip::after{ content:""; position:absolute; left:0; right:0; top:50%; height:44px; transform:translateY(-50%); }
.pvb .pvchips .pvchip b{ min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:.74rem !important; }
.pvb #chips-sol .pvchip{ max-width:calc(100% - 4px); }
@media (max-width:480px){ .pvb #chips-sol .pvchip b{ max-width:52vw; } }

/* (5) DOCUMENTOS DEL TRIPULANTE: tarjeta COMPLETA por estado, con el MISMO
   lenguaje de la ficha de aeronave (app.css #docs-card: --dbd borde, --dbg fondo,
   --dst globo) y los mismos valores por tema. El renderer ya emite .docstate.
   Solo color/superficie: la geometría de los botones (.docacts) NO cambia. */
#crew-docs-rows .docrow{ --dbd:#E4E4E8; --dbg:#FAFAFB; --dst:#6B6B70;
  background:var(--dbg) !important; border:0.5px solid var(--dbd) !important; border-left:4px solid var(--dbd) !important; border-radius:12px; }
#crew-docs-rows .docrow.is-ok  { --dbd:#2fae6e; --dbg:#f0fdf4; --dst:#166534; }
#crew-docs-rows .docrow.is-warn{ --dbd:#c47f00; --dbg:#fffbeb; --dst:#92400e; }
#crew-docs-rows .docrow.is-exp, #crew-docs-rows .docrow.is-req{ --dbd:#d64545; --dbg:#fef2f2; --dst:#991b1b; }
body.tdk #crew-docs-rows .docrow       { --dbd:rgba(127,150,180,.3); --dbg:rgba(255,255,255,.03); --dst:#9fb6d4; }
body.tdk #crew-docs-rows .docrow.is-ok  { --dbd:#2fae6e; --dbg:rgba(47,174,110,.14); --dst:#9fe8c3; }
body.tdk #crew-docs-rows .docrow.is-warn{ --dbd:#c47f00; --dbg:rgba(196,127,0,.14); --dst:#f2d59a; }
body.tdk #crew-docs-rows .docrow.is-exp, body.tdk #crew-docs-rows .docrow.is-req{ --dbd:#d64545; --dbg:rgba(200,50,50,.16); --dst:#ffc9c9; }
#crew-docs-rows .docrow[class]{ border-left-color:var(--dbd) !important; }
#crew-docs-rows .docrow[class] .docstate{ display:inline-block; flex:0 0 auto; font-size:.68rem; font-weight:700; border-radius:999px;
  padding:.1rem .5rem; margin-left:0; white-space:nowrap; color:var(--dst) !important; border:1px solid var(--dbd); background:transparent; }

/* (6)(7) VUELOS RECIENTES (Inicio) e HISTORIAL — la MISMA tarjeta (_fh_card.html).
   Causa raíz: los chips <button class="fh-it"> y «Eliminar del historial» son
   <button> y la §7 los inflaba (44 px + padding 11/14 + .92rem) y a .fh-del le
   quitaba el rojo. Tarjeta y chips más compactos; toda la información y las
   acciones se quedan; área táctil de 44 px con ::after invisible. */
.fh-card{ padding:9px 12px !important; margin-bottom:8px !important; }
.fh-card .fh-status{ margin-top:2px; }
.fh-card .fh-items{ gap:5px !important; margin-top:6px !important; }
.fh-card .fh-items .fh-it{ position:relative; min-height:34px !important; padding:4px 10px !important; font-size:.74rem !important;
  font-weight:700 !important; border-radius:999px !important; line-height:1.2; }
.fh-card .fh-items .fh-it::after{ content:""; position:absolute; left:0; right:0; top:50%; height:44px; transform:translateY(-50%); }
.fh-card .fh-del-row{ margin-top:4px !important; }
.fh-card button.fh-del{ position:relative; min-height:32px !important; padding:3px 12px !important; font-size:.76rem !important;
  font-weight:700 !important; border-radius:999px !important;
  background:var(--u-red-s) !important; color:var(--u-red) !important; border:1.5px solid var(--u-red-bd-s) !important; }
.fh-card button.fh-del::after{ content:""; position:absolute; left:0; right:0; top:50%; height:44px; transform:translateY(-50%); }
@media (min-width:835px){ .fh-card{ padding:11px 16px !important; } }

/* (8) INICIO · «Tu información / Administrar»: en el teléfono cada loseta era un
   bloque de ~80 px (icono arriba, texto abajo). Ahora es un renglón compacto
   (icono · nombre · conteo) en dos columnas, ≥ 48 px de alto: el mismo destino,
   el mismo icono y el mismo conteo. En escritorio no cambia. «Datos
   reutilizables» (Datos) usa tarjetas propias: solo se aprieta su relleno. */
@media (max-width:834px){
  .tilegrid.tilegrid-fila{ grid-template-columns:repeat(2, minmax(0,1fr)); gap:6px !important; margin:0 0 12px !important; }
  .tilegrid.tilegrid-fila .tile{ display:flex; align-items:center; gap:8px; min-height:48px; padding:8px 10px !important;
    text-align:left; border-radius:12px; }
  .tilegrid.tilegrid-fila .tile .ic{ margin:0; flex:0 0 auto; width:20px; height:20px; }
  .tilegrid.tilegrid-fila .tile b{ margin-top:0; font-size:12px; line-height:1.2; min-width:0; overflow-wrap:anywhere; flex:1 1 auto; }
  .tilegrid.tilegrid-fila .tile .tn{ position:static; flex:0 0 auto; }
  main.shell > section.card:has(> .addupdate){ padding:10px 12px; margin-bottom:8px; }
}

/* (10) VARIOS ARCHIVOS → UN documento: panel de confirmación (multi-file.js).
   Compacto y dentro de la tarjeta; ✕ para quitar uno; el orden es el de la lista. */
.mf-panel{ margin:.4rem 0 .2rem; padding:8px 10px; border:1px dashed var(--u-blue-ring); border-radius:var(--u-r-md);
  background:var(--u-blue-s); color:var(--u-tx); font-size:.8rem; }
.mf-panel .mf-count{ margin:0 0 4px; font-weight:700; color:var(--u-tx) !important; }
.mf-panel .mf-list{ margin:0; padding-left:1.2rem; }
.mf-panel .mf-list li{ display:list-item; padding:1px 0; }
.mf-panel .mf-name{ overflow-wrap:anywhere; }
.mf-panel button.mf-quitar{ position:relative; margin-left:6px; min-height:0 !important; padding:0 7px !important; font-size:.72rem !important;
  line-height:1.5; border-radius:999px !important; }
.mf-panel button.mf-quitar::after{ content:""; position:absolute; inset:-10px; }
.mf-panel .mf-acts{ display:flex; gap:6px; margin-top:6px; flex-wrap:wrap; }
.mf-panel .mf-acts button{ min-height:36px !important; padding:5px 12px !important; font-size:.8rem !important; }
