:root {
  --bg:#f5f1ee;
  --bg-surface:#ede9e6;
  --bg-line:#e8e2dd;
  --bg-divider:#f0ece8;
  --sb:#e2dbd5;
  --brand:#726e68;
  --brand-ink:#3d3a36;
  --brand-secondary:#97887d;
  --brand-danger:#a45b4f;
  --text:#726e68;
  --text-muted:#97887d;
  --text-faint:#c5bdb6;
  --font-body:'DM Sans',system-ui,sans-serif;
  --font-display:'Playfair Display',Georgia,serif;
  --r:2px;
  --state-success:#4c7a4c;
  --state-success-bg:#f3f8f3;
  --state-success-line:#cfe0cf;
  --state-warning:#8a5a26;
  --state-warning-bg:#fbf4ec;
  --state-warning-line:#e3cdb2;
  --state-info:#466ea0;
  --state-info-bg:#f2f3f6;
  --state-danger-bg:#f8eeeb;
  --state-danger-line:#e2bcb4;
}

*,*::before,*::after { box-sizing:border-box; margin:0; padding:0; }
html { min-height:100%; -webkit-font-smoothing:antialiased; }
body {
  min-height:100vh;
  margin:0;
  color:var(--text);
  background:var(--bg);
  font-family:var(--font-body);
}
button,input,select,textarea { font:inherit; }
a { color:inherit; }
::placeholder { color:var(--text-faint); opacity:1; }

.pt-page-header {
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:20px;
  margin-bottom:22px;
  padding-bottom:18px;
  border-bottom:1px solid var(--bg-line);
}
.pt-page-title {
  margin:0;
  color:var(--brand-ink);
  font-family:var(--font-display);
  font-size:1.35rem;
  font-weight:600;
  letter-spacing:0;
}
.pt-page-title-compact { font-size:1.18rem; }
.pt-page-subtitle {
  margin:4px 0 0;
  color:var(--text-muted);
  font-size:.77rem;
  line-height:1.5;
}
.pt-section-title {
  margin:0 0 4px;
  color:var(--brand-ink);
  font-family:var(--font-display);
  font-size:1.1rem;
  font-weight:600;
}
.pt-text-muted { color:var(--text-muted); }

.pt-btn-primary,
.pt-btn-secondary,
.pt-btn-sm {
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:7px;
  border-radius:var(--r);
  font-family:var(--font-body);
  text-decoration:none;
  cursor:pointer;
}
.pt-btn-primary {
  height:38px;
  padding:0 20px;
  border:0;
  background:var(--brand);
  color:#fff;
  font-size:.83rem;
  font-weight:500;
  letter-spacing:.01em;
  transition:opacity 80ms;
}
.pt-btn-primary:hover { opacity:.86; }
.pt-btn-secondary {
  height:38px;
  padding:0 16px;
  border:1px solid var(--brand-secondary);
  background:#fff;
  color:var(--brand);
  font-size:.83rem;
  font-weight:600;
  transition:background 80ms,color 80ms,border-color 80ms;
}
.pt-btn-secondary:hover { background:var(--bg-surface); border-color:var(--brand); color:var(--brand-ink); }
.pt-btn-sm {
  height:32px;
  padding:0 12px;
  border:1px solid var(--brand-secondary);
  background:#fff;
  color:var(--brand);
  font-size:.76rem;
  font-weight:600;
  transition:background 80ms,color 80ms,border-color 80ms;
}
.pt-btn-sm:hover { background:var(--bg-surface); border-color:var(--brand); color:var(--brand-ink); }
.pt-btn-sm-primary {
  border-color:var(--brand);
  background:var(--brand);
  color:#fff;
}
.pt-btn-sm-primary:hover { background:var(--brand-ink); }
.pt-btn-danger { color:var(--brand-danger); border-color:var(--state-danger-line); }
.pt-btn-danger:hover { color:var(--brand-danger); border-color:var(--brand-danger); background:var(--state-danger-bg); }
.pt-btn-block { width:100%; }
.pt-control-lg { min-height:44px; }
.pt-btn-primary:disabled {
  opacity:.55;
  cursor:not-allowed;
}
.pt-btn-secondary:disabled,
.pt-btn-sm:disabled,
.pt-modal-btn-cancel:disabled {
  color:var(--text-faint);
  border-color:var(--bg-line);
  background:var(--bg-surface);
  opacity:1;
  cursor:not-allowed;
}
.pt-btn-primary:focus-visible,
.pt-btn-secondary:focus-visible,
.pt-btn-sm:focus-visible,
.pt-icon-btn:focus-visible { outline:2px solid var(--brand); outline-offset:2px; }
.pt-file-upload {
  position:relative;
  display:inline-flex;
  align-items:center;
  gap:6px;
  height:32px;
  padding:0 12px;
  border:1px dashed var(--brand-secondary);
  border-radius:var(--r);
  background:#fff;
  color:var(--brand);
  font-family:var(--font-body);
  font-size:.76rem;
  font-weight:600;
  cursor:pointer;
  transition:all 80ms;
}
.pt-file-upload:hover { background:var(--bg-surface); border-color:var(--brand); border-style:solid; color:var(--brand-ink); }
.pt-file-upload:focus-within { outline:2px solid var(--brand); outline-offset:2px; }
.pt-file-input-hidden {
  position:absolute;
  width:1px;
  height:1px;
  padding:0;
  margin:-1px;
  overflow:hidden;
  clip:rect(0,0,0,0);
  white-space:nowrap;
  border:0;
}
.pt-icon-btn {
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:36px;
  height:36px;
  border:1px solid transparent;
  border-radius:var(--r);
  background:transparent;
  color:var(--text-muted);
  cursor:pointer;
}
.pt-icon-btn:hover { border-color:var(--bg-line); color:var(--brand-ink); }

.pt-form-card { padding:28px; border-radius:var(--r); background:var(--bg-surface); }
.pt-form-card h2 { margin-bottom:4px; color:var(--brand-ink); font-family:var(--font-display); font-size:1.1rem; font-weight:600; }
.pt-form-desc { margin-bottom:24px; color:var(--text-muted); font-size:.82rem; line-height:1.5; }
.pt-field { display:flex; flex-direction:column; gap:5px; }
.pt-label {
  display:flex;
  align-items:center;
  gap:6px;
  color:var(--text-muted);
  font-size:8.5px;
  font-weight:700;
  letter-spacing:.1em;
  text-transform:uppercase;
}
.pt-field > label {
  display:flex;
  align-items:center;
  gap:6px;
  color:var(--text-muted);
  font-size:8.5px;
  font-weight:700;
  letter-spacing:.1em;
  text-transform:uppercase;
}
.pt-input,
.pt-select {
  width:100%;
  min-height:38px;
  padding:9px 12px;
  border:1px solid var(--bg-line);
  border-radius:var(--r);
  background:#fff;
  color:var(--brand-ink);
  font-family:var(--font-body);
  font-size:.83rem;
  transition:border-color 120ms;
  -webkit-appearance:none;
}
.pt-select { cursor:pointer; }
.pt-input:focus,
.pt-select:focus { outline:none; border-color:var(--brand); }
/* Anillo de foco visible (a11y): navegación por teclado clara en todos los campos. */
.pt-input:focus-visible,
.pt-select:focus-visible { box-shadow:0 0 0 2px rgba(114,110,104,.25); }
.pt-input[aria-invalid='true'] { border-color:var(--brand-danger); }
/* Autocompletado del navegador: neutraliza el fondo azul de Chrome para que los
   campos rellenados (típicamente el login) sigan blancos, como el resto del
   sistema. El box-shadow inset tapa el fondo del autofill; en foco se conserva
   el anillo de a11y. */
.pt-input:-webkit-autofill,
.pt-select:-webkit-autofill {
  -webkit-text-fill-color:var(--brand-ink);
  box-shadow:0 0 0 100px #fff inset;
  caret-color:var(--brand-ink);
  border-color:var(--bg-line);
}
.pt-input:-webkit-autofill:focus,
.pt-select:-webkit-autofill:focus {
  box-shadow:0 0 0 2px rgba(114,110,104,.25), 0 0 0 100px #fff inset;
  border-color:var(--brand);
}
.pt-help { margin:0; color:var(--text-muted); font-size:.71rem; line-height:1.45; }
.pt-field-error { min-height:1em; margin-top:5px; color:var(--brand-danger); font-size:.72rem; font-weight:600; }

.pt-alert {
  display:flex;
  align-items:flex-start;
  gap:8px;
  padding:10px 12px;
  border:1px solid var(--bg-line);
  border-radius:var(--r);
  background:var(--state-info-bg);
  color:var(--text-muted);
  font-size:.76rem;
  line-height:1.45;
}
.pt-alert svg { width:16px; height:16px; flex:none; margin-top:1px; }
.pt-alert strong { color:var(--brand-ink); }
.pt-alert-info { background:var(--state-info-bg); color:var(--text-muted); }
.pt-alert-success { border-color:var(--state-success-line); background:var(--state-success-bg); color:var(--state-success); }
.pt-alert-warning { border-color:var(--state-warning-line); background:var(--state-warning-bg); color:var(--state-warning); }
.pt-alert-danger { border-color:var(--state-danger-line); background:var(--state-danger-bg); color:var(--brand-danger); }

.pt-table-wrap { overflow-x:auto; padding:24px 28px; background:var(--bg-surface); }
.pt-table-wrap h2 { margin-bottom:18px; color:var(--brand-ink); font-family:var(--font-display); font-size:1.05rem; font-weight:600; }
.pt-table-wrap table { width:100%; border-collapse:collapse; text-align:left; }
.pt-table-wrap th {
  padding:8px 12px;
  border-bottom:1px solid var(--bg-line);
  background:var(--bg-surface);
  color:var(--text-faint);
  font-size:.63rem;
  font-weight:700;
  letter-spacing:.08em;
  text-transform:uppercase;
  white-space:nowrap;
}
.pt-table-wrap td { padding:11px 12px; border-bottom:1px solid var(--bg-divider); color:var(--text); font-size:.83rem; }
.pt-table-wrap tbody tr:hover { background:rgba(114,110,104,.04); }
.pt-table-wrap tr:last-child td { border-bottom:0; }
.pt-table-wrap tfoot td {
  padding:10px 12px;
  border-top:1px solid var(--bg-line);
  background:var(--bg);
  font-size:.83rem;
  font-weight:700;
  font-variant-numeric:tabular-nums;
  text-align:right;
  white-space:nowrap;
}
.pt-tag,
.pt-status {
  display:inline-flex;
  padding:1px 7px;
  border-radius:var(--r);
  font-size:.62rem;
  font-weight:700;
  letter-spacing:.03em;
  text-transform:uppercase;
  white-space:nowrap;
}
.pt-tag-compra { background:rgba(164,91,79,.1); color:#a45b4f; }
.pt-tag-venta { background:rgba(78,130,84,.1); color:#4e8254; }
.pt-tag-info { background:rgba(70,110,160,.1); color:#466ea0; }
.pt-tag-warning { background:rgba(170,140,80,.1); color:#aa8c50; }
.pt-status-active { background:var(--state-success-bg); color:var(--state-success); }
.pt-status-off { background:var(--state-danger-bg); color:var(--brand-danger); }

@media (max-width:860px) {
  .pt-page-header { align-items:flex-start; flex-wrap:wrap; }
  .pt-form-card { padding:20px; }
  .pt-table-wrap { padding:16px 14px; -webkit-overflow-scrolling:touch; }
}

@media (prefers-reduced-motion:reduce) {
  *,*::before,*::after { scroll-behavior:auto!important; transition:none!important; }
}

/* ══════════════════════════════════════════════════════════════════
   COMPONENTES GLOBALES · migrados desde el <style> de index.html
   (Plan 1 — CSS unificado, 2026-07-12). Reutilizables por CUALQUIER
   página o modal (no solo la SPA). El layout SPA (sidebar, topbar, kpi,
   activos, facturar, informe, print…) sigue siendo LOCAL en index.html.
   ══════════════════════════════════════════════════════════════════ */

/* ── Menú flotante (row menu) — lo usa el menú de sesión de index.php ─── */
.pt-btn-dots { background:none; border:none; cursor:pointer; padding:4px 8px; font-size:1rem; color:var(--text-faint); border-radius:var(--r); line-height:1; transition:all 80ms; }
.pt-btn-dots:hover { background:var(--bg-line); color:var(--brand-ink); }
.pt-btn-dots:focus-visible,
.pt-row-menu button:focus-visible,
.pt-search-clear:focus-visible,
.pt-line-remove:focus-visible { outline:2px solid var(--brand); outline-offset:2px; }
.pt-row-menu { position:fixed; z-index:40; background:white; border:1px solid var(--bg-line); border-radius:var(--r); box-shadow:0 8px 24px rgba(61,58,54,.12); min-width:150px; overflow:hidden; }
.pt-row-menu button { display:flex; align-items:center; gap:8px; width:100%; padding:10px 16px; background:none; border:none; text-align:left; font-size:.82rem; font-weight:400; color:var(--text); cursor:pointer; transition:background 80ms; font-family:var(--font-body); }
.pt-row-menu button:hover { background:var(--bg); }
.pt-row-menu button.danger { color:var(--brand-danger); }
.pt-row-menu button.danger:hover { background:rgba(164,91,79,.06); }
.pt-row-menu button.pt-row-menu-separated { border-top:1px solid var(--bg-line); }
.pt-row-menu form button { width:100%; }

/* ── Modal genérico de confirmación ─── */
.pt-modal { background:white; border:1px solid var(--bg-line); border-radius:var(--r); padding:32px; box-shadow:0 16px 48px rgba(61,58,54,.15); max-width:380px; width:100%; text-align:center; display:flex; flex-direction:column; gap:12px; }
.pt-modal-icon { font-size:1.8rem; line-height:1; opacity:.4; }
.pt-modal h3 { font-family:var(--font-display); font-size:1.1rem; font-weight:600; margin:0; color:var(--brand-ink); }
.pt-modal p { color:var(--text-muted); font-size:.82rem; margin:0; }
.pt-modal-name { font-weight:600; color:var(--brand-ink); font-family:var(--font-display); }
.pt-modal-detail { font-size:.74rem; color:var(--text-faint); }
.pt-modal-actions { display:flex; gap:10px; justify-content:center; margin-top:8px; }
.pt-modal-btn-cancel { flex:1; padding:0 16px; height:38px; border:1px solid var(--brand-secondary); border-radius:var(--r); background:white; color:var(--brand); font-weight:600; cursor:pointer; font-size:.83rem; font-family:var(--font-body); transition:background 80ms,color 80ms,border-color 80ms; }
.pt-modal-btn-cancel:hover { background:var(--bg-surface); border-color:var(--brand); color:var(--brand-ink); }
.pt-modal-btn-confirm { flex:1; padding:0 16px; height:38px; border:none; border-radius:var(--r); background:var(--brand-danger); color:white; font-weight:600; cursor:pointer; font-size:.83rem; font-family:var(--font-body); transition:opacity 80ms; }
.pt-modal-btn-confirm:hover { opacity:.86; }
.pt-modal-btn-issue { flex:1; padding:0 16px; height:38px; border:none; border-radius:var(--r); background:var(--brand); color:white; font-weight:600; cursor:pointer; font-size:.83rem; font-family:var(--font-body); transition:opacity 80ms; }
.pt-modal-btn-issue:hover { opacity:.86; }
.pt-modal-btn-issue:disabled { opacity:.55; cursor:not-allowed; }

#modal-emitir .pt-modal { max-width:380px; padding:32px; gap:14px; }
#modal-emitir .pt-modal-actions { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:10px; width:100%; margin-top:8px; }
#modal-emitir .pt-modal-actions button { width:100%; min-width:0; height:38px; padding:0 16px; display:inline-flex; align-items:center; justify-content:center; box-sizing:border-box; white-space:nowrap; }
#modal-emitir .pt-modal-btn-issue { border:1px solid var(--brand); background:var(--brand); color:#fff; }
#modal-emitir .pt-modal-btn-issue:hover { opacity:.86; }

/* ── Toast (notificación global) ─── */
#pt-toast { position:fixed; bottom:24px; right:24px; z-index:140; background:var(--brand-ink); color:#f5f1ee; padding:11px 18px; border-radius:var(--r); box-shadow:0 8px 24px rgba(61,58,54,.2); font-size:.82rem; font-weight:500; display:flex; align-items:center; gap:9px; transform:translateY(8px); opacity:0; transition:all 200ms ease; pointer-events:none; max-width:420px; }
#pt-toast.show { transform:translateY(0); opacity:1; }
#pt-toast.toast-success { background:#3d5a3e; }
#pt-toast.toast-error { background:var(--brand-danger); }
#pt-toast.toast-action { pointer-events:auto; }
.pt-toast-action-btn { border:0; background:transparent; color:#fff; font:inherit; font-weight:800; text-decoration:underline; cursor:pointer; padding:0 0 0 4px; }

/* ── Estados: vacío y filtro activo ─── */
.pt-empty-state { display:flex; flex-direction:column; align-items:center; padding:52px 24px; gap:10px; color:var(--text-muted); text-align:center; }
.pt-empty-state .emoji { font-size:1.6rem; line-height:1; opacity:.3; }
.pt-empty-state h4 { color:var(--text); font-size:.95rem; margin:0; font-family:var(--font-display); }
.pt-empty-state p { font-size:.82rem; max-width:28rem; margin:0; }
.pt-filter-badge { display:flex; align-items:center; gap:8px; margin-bottom:14px; padding:7px 14px; background:var(--bg); border:1px solid var(--bg-line); border-radius:var(--r); font-size:.78rem; color:var(--text-muted); }
.pt-filter-badge strong { color:var(--brand-ink); }
.pt-filter-badge button { background:none; border:1px solid var(--bg-line); border-radius:var(--r); padding:2px 8px; cursor:pointer; font-size:.7rem; color:var(--text-muted); font-family:var(--font-body); }

/* ── Botones: link y deshabilitado ─── */
.pt-linkbtn { background:none; border:none; color:var(--brand); font-family:var(--font-body); font-size:.8rem; font-weight:600; cursor:pointer; padding:6px 8px; text-decoration:underline; text-underline-offset:2px; }
.pt-linkbtn:hover { color:var(--brand-ink); }
.pt-btn-link { background:none; border:0; padding:0; color:var(--text-muted); font-size:12px; font-weight:600; cursor:pointer; font-family:var(--font-body); }
.pt-btn-link:hover { color:var(--brand-ink); text-decoration:underline; }
.pt-attach-input-row .pt-btn-link { min-height:44px; display:inline-flex; align-items:center; justify-content:center; padding:0 12px; }
.pt-attach-input-row .pt-btn-link[hidden] { display:none; }
.pt-file-selection { display:flex; align-items:center; gap:8px; min-width:0; flex:1; }
.pt-file-selection .pt-file-name-text { flex:1; min-width:0; }
.pt-file-remove { width:44px; height:44px; flex:0 0 44px; display:inline-flex; align-items:center; justify-content:center; border:0; background:transparent; color:var(--text-muted); font-size:22px; line-height:1; cursor:pointer; font-family:var(--font-body); }
.pt-file-remove:hover { color:var(--brand-danger); }
.pt-file-remove[hidden] { display:none; }
.pt-btn-disabled { display:inline-flex; align-items:center; gap:7px; background:var(--bg-line); color:var(--text-faint); border:1px solid var(--bg-line); padding:0 20px; height:38px; border-radius:var(--r); font-family:var(--font-body); font-size:.83rem; font-weight:500; cursor:not-allowed; }

/* ── Componentes de formulario ─── */
.pt-form-type-selector { display:flex; gap:2px; margin-bottom:24px; }
.pt-type-btn { flex:1; padding:13px 20px; border-radius:var(--r); border:1px solid var(--bg-line); background:var(--bg-surface); color:var(--text-muted); font-family:var(--font-body); font-size:.83rem; font-weight:500; cursor:pointer; transition:all 100ms; text-align:center; }
.pt-type-btn:hover { border-color:var(--brand); color:var(--brand); }
.pt-type-btn.active { border-color:var(--brand); background:var(--brand); color:white; }
.pt-form-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(200px,1fr)); gap:16px 20px; margin-bottom:24px; }
.pt-field-wide { grid-column:span 2; }
.pt-calculated { background:var(--bg); color:var(--brand-secondary); font-weight:600; cursor:default; border-style:dashed; }
.pt-auto-label { font-size:.56rem; font-weight:700; text-transform:uppercase; letter-spacing:.06em; background:var(--bg-line); color:var(--brand-secondary); padding:1px 6px; border-radius:var(--r); }
.pt-form-info { background:rgba(70,110,160,.05); border:1px solid rgba(70,110,160,.14); border-radius:var(--r); padding:10px 14px; font-size:.82rem; color:#466ea0; margin-bottom:20px; }
.pt-form-actions { display:flex; justify-content:flex-end; gap:10px; }
.pt-checkbox-wrap { display:flex; align-items:center; gap:8px; padding:10px 14px; border:1px solid var(--bg-line); border-radius:var(--r); background:white; cursor:pointer; transition:all 100ms; grid-column:span 2; }
.pt-checkbox-wrap:has(input:checked) { border-color:#466ea0; background:rgba(70,110,160,.04); }
.pt-checkbox-wrap input[type="checkbox"] { width:15px; height:15px; accent-color:#466ea0; cursor:pointer; }
.pt-checkbox-label { display:flex; flex-direction:column; gap:1px; }
.pt-checkbox-label strong { font-size:.82rem; font-weight:600; color:var(--brand-ink); }
.pt-checkbox-label span { font-size:.72rem; color:var(--text-muted); }
.pt-input-caps { text-transform:uppercase; }
.pt-input[readonly] { background:var(--bg); color:var(--text-muted); cursor:not-allowed; }
.pt-input[disabled],
.pt-select[disabled] {
  opacity:.55;
  cursor:not-allowed;
}
.pt-period-readonly .pt-file-upload {
  opacity:.5;
  cursor:not-allowed;
  pointer-events:none;
}
.pt-period-lock-banner {
  margin-bottom:16px;
}

/* ── Buscador universal + desplegable de resultados ─── */
.pt-search-wrap { position:relative; width:100%; }
.pt-search-icon { position:absolute; left:10px; top:50%; transform:translateY(-50%); color:var(--text-faint); pointer-events:none; font-size:.78rem; }
/* Buscador UNIVERSAL de la app: destacado (fondo blanco + borde visible). */
#global-search { width:100%; padding:8px 28px 8px 30px; border:1px solid var(--text-faint); border-radius:var(--r); background:#fff; font-size:.79rem; color:var(--brand-ink); font-family:var(--font-body); -webkit-appearance:none; transition:border-color 120ms, box-shadow 120ms; box-shadow:0 1px 3px rgba(61,58,54,.06); }
#global-search::-webkit-search-cancel-button { display:none; }
#global-search:focus { outline:none; border-color:var(--brand); }
.pt-search-clear { position:absolute; right:8px; top:50%; transform:translateY(-50%); background:none; border:none; cursor:pointer; color:var(--text-faint); display:none; align-items:center; justify-content:center; width:18px; height:18px; border-radius:var(--r); font-size:.7rem; }
.pt-search-clear:hover { color:var(--brand-ink); }
/* El desplegable se ancla a la izquierda de la barra pero crece con el contenido
   (más ancho que el input) hasta un tope, para no cortar códigos ni conceptos. */
#search-results { display:none; position:absolute; top:calc(100% + 4px); left:0; right:auto; width:max-content; min-width:100%; max-width:min(680px, calc(100vw - 48px)); background:white; border:1px solid var(--bg-line); border-radius:var(--r); box-shadow:0 8px 24px rgba(61,58,54,.1); z-index:40; overflow:hidden; }
.sr-header { display:flex; justify-content:space-between; align-items:center; padding:7px 14px; background:var(--bg); font-size:.68rem; color:var(--text-muted); border-bottom:1px solid var(--bg-line); }
.sr-header strong { color:var(--brand-ink); }
.sr-item { display:flex; width:100%; align-items:center; justify-content:space-between; gap:12px; padding:9px 14px; cursor:pointer; border:0; border-bottom:1px solid var(--bg-divider); background:#fff; text-align:left; color:inherit; font-family:var(--font-body); transition:background 80ms; }
.sr-item:last-of-type { border-bottom:none; }
.sr-item:hover { background:var(--bg); }
.sr-item:focus-visible { outline:2px solid var(--brand); outline-offset:-2px; background:var(--bg); }
.sr-main { display:flex; flex-direction:column; gap:2px; min-width:0; }
.sr-main strong { font-size:.8rem; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; color:var(--brand-ink); }
.sr-concepto { font-size:.7rem; color:var(--text-muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sr-meta { display:flex; align-items:center; gap:8px; flex-shrink:0; }
.sr-fecha { font-size:.7rem; color:var(--text-faint); white-space:nowrap; }
.sr-total { font-size:.8rem; font-weight:600; font-variant-numeric:tabular-nums; white-space:nowrap; color:var(--brand-ink); }
.sr-empty, .sr-more { padding:12px 14px; font-size:.78rem; color:var(--text-muted); text-align:center; }
.sr-group-title { padding:6px 14px; background:var(--bg-surface); font-size:.62rem; font-weight:800; letter-spacing:.08em; color:var(--text-muted); border-top:1px solid var(--bg-line); border-bottom:1px solid var(--bg-divider); }
.sr-note { padding:8px 14px; font-size:.66rem; color:var(--text-faint); text-align:center; border-top:1px solid var(--bg-divider); background:var(--bg); }
#search-results mark { background:rgba(114,110,104,.15); color:inherit; }

/* ── Typeahead (autocompletado en campos) ─── */
.pt-typeahead-results { display:none; position:absolute; top:calc(100% + 4px); left:0; right:0; background:#fff; border:1px solid var(--bg-line); border-radius:var(--r); box-shadow:0 8px 24px rgba(61,58,54,.1); z-index:40; overflow:hidden; max-height:260px; overflow-y:auto; }
.pt-typeahead-item { padding:9px 14px; cursor:pointer; border-bottom:1px solid var(--bg-divider); transition:background 80ms; }
.pt-typeahead-item:last-child { border-bottom:none; }
.pt-typeahead-item:hover { background:var(--bg); }
.pt-typeahead-item strong { font-size:.8rem; color:var(--brand-ink); }
.pt-typeahead-sub { font-size:.72rem; color:var(--text-muted); }

/* ── Shell táctil común (Plan 4.1) ───────────────────────────────
   Sólo móvil/tableta. Escritorio conserva sus medidas aprobadas. */
@media (max-width:860px) {
  .pt-btn-dots { min-width:44px; min-height:44px; padding:0; }
  .pt-row-menu button { min-height:44px; }

  #global-search { min-height:44px; padding-right:48px; }
  .pt-search-clear { right:0; width:44px; height:44px; }

  #pt-toast { left:14px; right:14px; bottom:14px; max-width:none; }
  .pt-toast-action-btn { min-width:44px; min-height:44px; padding:0 4px; }

  /* PDF.js: previsualización real dentro del modal móvil. En escritorio se
     conserva el iframe nativo aprobado. */
  .pt-pdf-mobile-preview { width:100%; height:75vh; min-height:360px; display:flex; flex-direction:column; gap:10px; }
  .pt-pdf-mobile-stage { flex:1; min-height:0; overflow:auto; padding:8px; display:flex; align-items:flex-start; justify-content:center; background:#2f3033; border-radius:var(--r); }
  .pt-pdf-mobile-stage canvas { display:block; max-width:none; background:#fff; box-shadow:0 2px 12px rgba(0,0,0,.2); }
  .pt-pdf-mobile-controls { flex:0 0 auto; display:grid; grid-template-columns:1fr auto 1fr; align-items:center; gap:8px; }
  .pt-pdf-mobile-controls button,
  .pt-pdf-mobile-controls a { min-height:44px; padding:0 12px; border:1px solid var(--bg-line); border-radius:var(--r); background:#fff; color:var(--brand-ink); font:600 .74rem var(--font-body); display:inline-flex; align-items:center; justify-content:center; text-decoration:none; }
  .pt-pdf-mobile-controls button:disabled { opacity:.45; cursor:not-allowed; }
  .pt-pdf-mobile-controls span { min-width:56px; text-align:center; font-size:.76rem; font-weight:700; color:var(--brand-ink); }
  .pt-pdf-mobile-controls a { grid-column:1/-1; background:var(--brand); border-color:var(--brand); color:#fff; }
  .pt-pdf-mobile-fallback { width:100%; padding:24px 16px; text-align:center; }
  .pt-pdf-mobile-fallback p { margin:0 0 16px; color:var(--brand-danger); }
  .pt-pdf-mobile-fallback a { min-height:48px; padding:0 22px; border-radius:var(--r); background:var(--brand); color:#fff; font-weight:700; text-decoration:none; display:inline-flex; align-items:center; justify-content:center; }
}
