/*
 * styles.css — T&T Scalper Dashboard
 * ====================================
 * Tabla de contenidos:
 *
 *  1.  Variables de tema (design tokens)
 *  2.  Reset & base
 *  3.  Layout principal (sidebar + main)
 *  4.  Topbar
 *  5.  Componentes de navegación (sidebar nav)
 *  6.  Cards
 *  7.  Tablas de datos
 *  8.  Formularios (inputs, selects)
 *  9.  Botones
 * 10.  Badges & etiquetas
 * 11.  Filtros & pills
 * 12.  Stat cards
 * 13.  Gráficos (contenedores Plotly)
 * 14.  Autocomplete
 * 15.  Modal
 * 16.  Loading & spinners
 * 17.  Utilidades (colores, espaciado, flex helpers)
 * 18.  Scrollbar
 * 19.  Login page
 * 20.  Dashboard (ranking table)
 * 21.  Ticker detail
 * 22.  Scheduler & admin
 * 23.  Responsive — Tablet  (≤ 900px)
 * 24.  Responsive — Mobile  (≤ 640px)
 * 25.  Responsive — Pequeño (≤ 380px)
 */


/* =============================================================
   1. VARIABLES DE TEMA (design tokens)
   ============================================================= */

/*
 * Los colores se definen como variables CSS en :root para el tema claro
 * y se sobreescriben con [data-theme="dark"] para el oscuro.
 *
 * El tema inicial se determina por prefers-color-scheme del sistema (ver base.html).
 * El usuario puede hacer override con el toggle, que escribe data-theme en <html>.
 */

:root,
[data-theme="light"] {
  --bg:        #f0f2f7;
  --bg2:       #ffffff;
  --bg3:       #e8eaf2;
  --border:    #d0d4e4;
  --border2:   #b8bdd0;
  --text:      #0f1320;
  --text2:     #3a4060;
  --text3:     #6b7491;
  --accent:    #0080cc;
  --accent2:   #005fa0;
  --green:     #00955a;
  --red:       #d42040;
  --yellow:    #c08000;
  --orange:    #c05800;
  --purple:    #6040c8;
  --shadow:    rgba(0, 0, 0, 0.12);
  --plot-bg:   #f8f9fc;
}

[data-theme="dark"] {
  --bg:        #0d0f12;
  --bg2:       #141720;
  --bg3:       #1c2030;
  --border:    #2a2f3d;
  --border2:   #353d52;
  --text:      #f0f2f7;
  --text2:     #a8b0c8;
  --text3:     #6b7491;
  --accent:    #00d4f5;
  --accent2:   #0099bb;
  --green:     #00e0a0;
  --red:       #ff4466;
  --yellow:    #ffd000;
  --orange:    #ff8c42;
  --purple:    #b39dfa;
  --shadow:    rgba(0, 0, 0, 0.4);
  --plot-bg:   #111520;
}


/* =============================================================
   2. RESET & BASE
   ============================================================= */

*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

body {
  background: var(--bg);
  color: var(--text);
  font-family: 'Inter', sans-serif;
  font-size: 13px;
  line-height: 1.6;
  min-height: 100vh;
  transition: background 0.2s, color 0.2s;
  -webkit-text-size-adjust: 100%;
}

a {
  color: inherit;
  text-decoration: none;
}


/* =============================================================
   3. LAYOUT PRINCIPAL
   ============================================================= */

.layout {
  display: flex;
  min-height: 100vh;
}

/* ── Sidebar ── */
.sidebar {
  width: 224px;
  min-width: 224px;
  background: var(--bg2);
  border-right: 1px solid var(--border);
  display: flex;
  flex-direction: column;
  position: fixed;
  height: 100vh;
  z-index: 200;
  box-shadow: 2px 0 12px var(--shadow);
  transition: transform 0.25s ease, background 0.2s;
  overflow-y: auto;
}

.sidebar-logo {
  padding: 20px 20px 16px;
  border-bottom: 1px solid var(--border);
  flex-shrink: 0;
}

.sidebar-logo .logo-text {
  font-size: 22px;
  font-weight: 700;
  color: var(--accent);
  letter-spacing: -0.5px;
}

.sidebar-logo .logo-sub {
  font-size: 10px;
  color: var(--text3);
  letter-spacing: 2px;
  text-transform: uppercase;
  margin-top: 3px;
  font-weight: 500;
}

.sidebar-footer {
  padding: 14px 20px;
  border-top: 1px solid var(--border);
  font-size: 12px;
  color: var(--text3);
  flex-shrink: 0;
}

.sidebar-footer .user-name {
  color: var(--text2);
  font-weight: 600;
  font-size: 13px;
}

.sidebar-footer a:hover {
  color: var(--red);
}

/* Overlay oscuro detrás del sidebar en mobile */
.sidebar-overlay {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.55);
  z-index: 199;
}

/* ── Main ── */
.main {
  margin-left: 224px;
  flex: 1;
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  transition: margin-left 0.25s;
}

.content {
  padding: 20px 24px;
  flex: 1;
}


/* =============================================================
   4. TOPBAR
   ============================================================= */

.topbar {
  height: 54px;
  background: var(--bg2);
  border-bottom: 1px solid var(--border);
  display: flex;
  align-items: center;
  padding: 0 24px;
  gap: 12px;
  position: sticky;
  top: 0;
  z-index: 100;
  box-shadow: 0 2px 8px var(--shadow);
  transition: background 0.2s;
}

/* Botón hamburger — visible solo en mobile (ver sección responsive) */
.topbar-menu-btn {
  display: none;
  background: none;
  border: none;
  cursor: pointer;
  color: var(--text2);
  font-size: 20px;
  padding: 4px 6px;
  border-radius: 4px;
  line-height: 1;
  transition: color 0.15s;
}

.topbar-menu-btn:hover { color: var(--text); }

.topbar-title {
  font-size: 15px;
  font-weight: 700;
  color: var(--text);
  white-space: nowrap;
}

.topbar-right {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 10px;
}

/* Theme toggle switch */
.theme-toggle {
  width: 36px;
  height: 20px;
  background: var(--border2);
  border-radius: 10px;
  border: none;
  cursor: pointer;
  position: relative;
  transition: background 0.2s;
  padding: 0;
  flex-shrink: 0;
}

.theme-toggle::after {
  content: '';
  position: absolute;
  top: 3px;
  left: 3px;
  width: 14px;
  height: 14px;
  background: var(--bg2);
  border-radius: 50%;
  transition: transform 0.2s, background 0.2s;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
}

[data-theme="light"] .theme-toggle            { background: var(--accent); }
[data-theme="light"] .theme-toggle::after     { transform: translateX(16px); }

.theme-label {
  font-size: 13px;
  color: var(--text3);
}


/* =============================================================
   5. NAVEGACIÓN LATERAL
   ============================================================= */

.sidebar-nav {
  padding: 12px 0;
  flex: 1;
  overflow-y: auto;
}

.nav-section {
  font-size: 9px;
  color: var(--text3);
  letter-spacing: 2px;
  text-transform: uppercase;
  padding: 12px 20px 4px;
  font-weight: 600;
}

.nav-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 20px;
  color: var(--text2);
  font-size: 13px;
  font-weight: 500;
  transition: all 0.15s;
  border-left: 3px solid transparent;
}

.nav-item:hover  { color: var(--text); background: var(--bg3); }

.nav-item.active {
  color: var(--accent);
  border-left-color: var(--accent);
  background: rgba(0, 180, 230, 0.08);
  font-weight: 600;
}

.nav-icon {
  width: 18px;
  text-align: center;
  font-size: 15px;
  flex-shrink: 0;
}


/* =============================================================
   6. CARDS
   ============================================================= */

.card {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 8px;
  overflow: hidden;
  box-shadow: 0 1px 4px var(--shadow);
  transition: background 0.2s, border-color 0.2s;
}

.card-header {
  padding: 13px 18px;
  border-bottom: 1px solid var(--border);
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 8px;
}

.card-title { font-size: 13px; font-weight: 600; color: var(--text); }

.card-body  { padding: 16px 18px; }


/* =============================================================
   7. TABLAS DE DATOS
   ============================================================= */

.table-wrap {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  max-height: calc(100vh - 280px);
  overflow-y: auto;
}

.data-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}

.data-table th {
  padding: 10px 14px;
  text-align: left;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.5px;
  text-transform: uppercase;
  color: var(--text3);
  border-bottom: 2px solid var(--border);
  white-space: nowrap;
  cursor: pointer;
  user-select: none;
  background: var(--bg2);
  position: sticky;
  top: 0;
}

.data-table th:hover           { color: var(--text2); }
.data-table th.sort-asc::after  { content: " ↑"; color: var(--accent); }
.data-table th.sort-desc::after { content: " ↓"; color: var(--accent); }

.data-table td {
  padding: 9px 14px;
  border-bottom: 1px solid var(--border);
  white-space: nowrap;
  color: var(--text);
}

.data-table tbody tr { transition: background 0.1s; cursor: pointer; }
.data-table tbody tr:hover { background: var(--bg3); }

/* Celda con ticker en monospace */
.ticker-cell {
  font-family: 'Roboto Mono', monospace;
  font-weight: 600;
  color: var(--accent);
  font-size: 13px;
}


/* =============================================================
   8. FORMULARIOS
   ============================================================= */

.filter-input {
  background: var(--bg3);
  border: 1px solid var(--border2);
  color: var(--text);
  padding: 7px 12px;
  border-radius: 6px;
  font-family: 'Inter', sans-serif;
  font-size: 13px;
  outline: none;
  transition: border-color 0.15s, background 0.2s;
  width: 100%;
}

.filter-input:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 3px rgba(0, 180, 230, 0.1);
}

.filter-input::placeholder { color: var(--text3); }

select.filter-input {
  appearance: none;
  cursor: pointer;
}

select.filter-input option {
  background: var(--bg2);
  color: var(--text);
}

.filter-group {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}

.filter-group label {
  font-size: 10px;
  color: var(--text3);
  letter-spacing: 0.5px;
  text-transform: uppercase;
  font-weight: 600;
  white-space: nowrap;
}


/* =============================================================
   9. BOTONES
   ============================================================= */

.btn {
  padding: 7px 16px;
  border-radius: 6px;
  font-family: 'Inter', sans-serif;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  border: none;
  transition: all 0.15s;
  white-space: nowrap;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.btn-primary       { background: var(--accent); color: #000; }
.btn-primary:hover { background: var(--accent2); color: #fff; }

.btn-ghost         { background: transparent; color: var(--text2); border: 1px solid var(--border2); }
.btn-ghost:hover   { border-color: var(--accent); color: var(--accent); }

.btn-sm            { padding: 4px 10px; font-size: 11px; }


/* =============================================================
   10. BADGES & ETIQUETAS
   ============================================================= */

.badge        { display: inline-block; padding: 2px 8px; border-radius: 4px; font-size: 11px; font-weight: 600; }
.badge-stock  { background: rgba(179, 157, 250, 0.15); color: var(--purple); }
.badge-etf    { background: rgba(0, 224, 160, 0.15);   color: var(--green); }
.badge-long   { background: rgba(0, 212, 245, 0.12);   color: var(--accent); }
.badge-short  { background: rgba(255, 68, 102, 0.12);  color: var(--red); }

/* Role badges (usuarios) */
.role-badge  { padding: 2px 8px; border-radius: 10px; font-size: 9px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; display: inline-block; }
.rb-admin    { background: rgba(0, 180, 230, 0.15); color: var(--accent); border: 1px solid rgba(0, 180, 230, 0.3); }
.rb-viewer   { background: var(--bg3); color: var(--text3); border: 1px solid var(--border2); }

/* Module badges (scheduler runs) */
.badge-module    { padding: 2px 7px; border-radius: 3px; font-size: 9px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; }
.bm-backtest     { background: rgba(0, 180, 230, 0.12); color: var(--accent); }
.bm-dividends    { background: rgba(0, 224, 160, 0.12); color: var(--green); }
.bm-databento    { background: rgba(179, 157, 250, 0.12); color: #b39dfa; }
.bm-daily        { background: rgba(255, 214, 0, 0.10);   color: #ffd600; }
.bm-other        { background: var(--bg3); color: var(--text3); }


/* =============================================================
   11. FILTROS & PILLS
   ============================================================= */

.filters-bar {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 12px 16px;
  margin-bottom: 12px;
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
  align-items: flex-end;
}

.pill-row { display: flex; gap: 5px; flex-wrap: wrap; }

.pill {
  padding: 5px 11px;
  border-radius: 20px;
  font-size: 11px;
  font-weight: 600;
  cursor: pointer;
  border: 1px solid var(--border2);
  color: var(--text2);
  background: transparent;
  transition: all 0.15s;
  font-family: 'Roboto Mono', monospace;
}

.pill:hover  { border-color: var(--accent); color: var(--accent); }
.pill.active { background: rgba(0, 180, 230, 0.12); border-color: var(--accent); color: var(--accent); }

.range-pill  { border-radius: 4px; padding: 5px 9px; }

/* Filter toggle button (con dot de estado) */
.ftog {
  padding: 6px 13px;
  border-radius: 6px;
  font-size: 11px;
  font-weight: 600;
  cursor: pointer;
  border: 1px solid var(--border2);
  color: var(--text2);
  background: transparent;
  transition: all 0.15s;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.ftog:hover  { border-color: var(--accent); color: var(--accent); }
.ftog.active { background: rgba(0, 180, 230, 0.12); border-color: var(--accent); color: var(--accent); }

.ftog .dot,
.ftog .ftog-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--border2);
  transition: background 0.15s;
  flex-shrink: 0;
}

.ftog.active .dot,
.ftog.active .ftog-dot { background: var(--accent); }


/* =============================================================
   12. STAT CARDS
   ============================================================= */

.stats-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 12px;
}

.stat-card {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 14px 16px;
  box-shadow: 0 1px 4px var(--shadow);
  transition: background 0.2s;
}

.stat-label { font-size: 11px; color: var(--text3); letter-spacing: 0.5px; text-transform: uppercase; font-weight: 500; }
.stat-value { font-size: 26px; font-weight: 700; margin-top: 4px; color: var(--text); }
.stat-sub   { font-size: 11px; color: var(--text3); margin-top: 2px; }

/* Variante compacta (scheduler) */
.stats-row {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
  gap: 10px;
  margin-bottom: 16px;
}

.scard       { background: var(--bg2); border: 1px solid var(--border); border-radius: 6px; padding: 12px 16px; }
.scard-label { font-size: 9px; color: var(--text3); letter-spacing: 0.6px; text-transform: uppercase; font-weight: 700; }
.scard-val   { font-size: 20px; font-weight: 800; margin-top: 5px; color: var(--text); font-family: 'Roboto Mono', monospace; }


/* =============================================================
   13. GRÁFICOS (contenedores Plotly)
   ============================================================= */

.chart-row {
  display: grid;
  grid-template-columns: 2fr 1fr;
  gap: 16px;
  margin-bottom: 16px;
}

.chart-h { height: 220px; position: relative; }

/* Mensaje centrado cuando no hay datos */
.no-data-msg {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  color: var(--border2);
  pointer-events: none;
  font-style: italic;
}

/* Botones de período (1m / 3m / 6m / 1y) */
.chart-period-bar { display: flex; gap: 5px; flex-wrap: wrap; }

.cp {
  padding: 3px 9px;
  border-radius: 4px;
  font-size: 10px;
  font-weight: 600;
  cursor: pointer;
  border: 1px solid var(--border2);
  color: var(--text3);
  background: transparent;
  transition: all 0.15s;
  font-family: 'Roboto Mono', monospace;
}

.cp:hover  { border-color: var(--accent); color: var(--accent); }
.cp.active { background: rgba(0, 180, 230, 0.12); border-color: var(--accent); color: var(--accent); }


/* =============================================================
   14. AUTOCOMPLETE
   ============================================================= */

.ac-wrap { position: relative; }

.ac-drop {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 300;
  background: var(--bg2);
  border: 1px solid var(--border2);
  border-radius: 6px;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
  min-width: 240px;
  max-height: 220px;
  overflow-y: auto;
  display: none;
}

.ac-drop.show { display: block; }

.ac-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 7px 12px;
  cursor: pointer;
  font-size: 12px;
  gap: 12px;
  transition: background 0.1s;
}

.ac-item:hover,
.ac-item.focused { background: rgba(0, 180, 230, 0.1); }

.ac-ticker { font-family: 'Roboto Mono', monospace; font-weight: 700; color: var(--text); flex-shrink: 0; }
.ac-name   { color: var(--text3); font-size: 11px; text-align: right; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }


/* =============================================================
   15. MODAL
   ============================================================= */

.modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.65);
  display: none;
  align-items: center;
  justify-content: center;
  z-index: 999;
  backdrop-filter: blur(3px);
  padding: 16px;
}

.modal-overlay.show { display: flex; }

.modal-box {
  background: var(--bg2);
  border: 1px solid var(--border2);
  border-radius: 10px;
  padding: 24px;
  width: 100%;
  max-width: 400px;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.6);
  max-height: 90vh;
  overflow-y: auto;
}

.modal-title   { font-size: 15px; font-weight: 700; color: var(--accent); margin-bottom: 16px; }
.modal-field   { margin-bottom: 12px; display: flex; flex-direction: column; gap: 5px; }
.modal-field label { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text3); }
.modal-actions { display: flex; gap: 8px; margin-top: 16px; justify-content: flex-end; }


/* =============================================================
   16. LOADING & SPINNERS
   ============================================================= */

.loading {
  display: flex;
  align-items: center;
  gap: 10px;
  color: var(--text3);
  padding: 40px;
  justify-content: center;
}

.spinner {
  width: 18px;
  height: 18px;
  border: 2px solid var(--border2);
  border-top-color: var(--accent);
  border-radius: 50%;
  animation: spin 0.8s linear infinite;
}

@keyframes spin { to { transform: rotate(360deg); } }

/* Status dots (live indicator) */
.status-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; margin-right: 6px; }
.dot-green  { background: var(--green); box-shadow: 0 0 6px var(--green); animation: pulse 2s infinite; }
.dot-yellow { background: var(--yellow); }
.dot-red    { background: var(--red); }

@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }

/* Progress bar */
.pbar-wrap { display: flex; align-items: center; gap: 8px; }
.pbar      { height: 4px; border-radius: 2px; background: var(--bg3); flex: 1; min-width: 50px; overflow: hidden; }
.pbar-fill { height: 100%; border-radius: 2px; transition: width 0.3s; }


/* =============================================================
   17. UTILIDADES
   ============================================================= */

/* Colores semánticos */
.text-green   { color: var(--green)  !important; }
.text-red     { color: var(--red)    !important; }
.text-yellow  { color: var(--yellow) !important; }
.text-accent  { color: var(--accent) !important; }
.text-muted   { color: var(--text3)  !important; }

/* Precio (variación) */
.price-up  { color: var(--green); }
.price-dn  { color: var(--red); }
.price-neu { color: var(--text2); }

/* Espaciado */
.mt-4  { margin-top: 4px;  } .mt-8  { margin-top: 8px;  }
.mt-12 { margin-top: 12px; } .mt-16 { margin-top: 16px; }
.mt-20 { margin-top: 20px; } .mt-24 { margin-top: 24px; }
.mb-8  { margin-bottom: 8px;  }
.mb-12 { margin-bottom: 12px; }
.mb-16 { margin-bottom: 16px; }

/* Flex helpers */
.flex             { display: flex; }
.items-center     { align-items: center; }
.justify-between  { justify-content: space-between; }
.gap-8            { gap: 8px;  }
.gap-12           { gap: 12px; }

/* Grid de 2 columnas genérico */
.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }


/* =============================================================
   18. SCROLLBAR (Webkit)
   ============================================================= */

::-webkit-scrollbar       { width: 5px; height: 5px; }
::-webkit-scrollbar-track { background: var(--bg); }
::-webkit-scrollbar-thumb { background: var(--border2); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: var(--text3); }


/* =============================================================
   19. LOGIN PAGE
   ============================================================= */

.login-wrap {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background: var(--bg);
  padding: 20px;
}

.login-card {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 40px;
  width: 100%;
  max-width: 400px;
  box-shadow: 0 8px 40px var(--shadow);
}

.login-logo  { font-size: 36px; font-weight: 900; color: var(--accent); letter-spacing: -2px; font-family: 'Roboto Mono', monospace; }
.login-sub   { font-size: 11px; color: var(--text3); letter-spacing: 3px; text-transform: uppercase; margin-top: 4px; margin-bottom: 32px; }

.login-field { margin-bottom: 16px; }
.login-field label { display: block; font-size: 11px; font-weight: 600; color: var(--text3); letter-spacing: 0.5px; text-transform: uppercase; margin-bottom: 6px; }

.login-err {
  background: rgba(255, 68, 102, 0.1);
  border: 1px solid rgba(255, 68, 102, 0.3);
  color: var(--red);
  padding: 10px 14px;
  border-radius: 6px;
  font-size: 12px;
  margin-bottom: 16px;
}


/* =============================================================
   20. DASHBOARD (ranking table)
   ============================================================= */

.table-container { background: var(--bg2); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; }
.table-header    { padding: 12px 18px; border-bottom: 1px solid var(--border); display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 8px; }

/* Win rate coloring */
.wr-high { color: var(--green);  font-weight: 700; }
.wr-mid  { color: var(--yellow); }
.wr-low  { color: var(--red); }

/* Score coloring */
.score-hi  { color: var(--accent); font-weight: 700; }
.score-mid { color: var(--text); }
.score-lo  { color: var(--text2); }

/* Empty state */
.no-data      { text-align: center; padding: 60px 20px; color: var(--text3); }
.no-data .big { font-size: 40px; opacity: 0.3; }

/* Floating compare bar */
.compare-bar {
  position: fixed;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
  background: var(--bg3);
  border: 1px solid var(--accent);
  border-radius: 6px;
  padding: 10px 18px;
  display: none;
  align-items: center;
  gap: 12px;
  z-index: 200;
  box-shadow: 0 0 20px rgba(0, 180, 230, 0.15);
  font-size: 12px;
  white-space: nowrap;
}

/* Row selection state */
tr.sel                { background: rgba(0, 180, 230, 0.04) !important; }
tr.sel td:first-child { border-left: 2px solid var(--accent); }

.cb { accent-color: var(--accent); cursor: pointer; }

/* Score mini-bar */
.sbar   { display: inline-block; vertical-align: middle; margin-left: 6px; width: 50px; height: 3px; border-radius: 2px; background: var(--bg3); }
.sbar-f { height: 100%; border-radius: 2px; background: var(--accent); }

/* Column visibility toggles */
.col-toggle-bar { display: flex; gap: 4px; flex-wrap: wrap; padding: 8px 18px; border-bottom: 1px solid var(--border); }
.col-btn        { padding: 3px 8px; border-radius: 3px; font-size: 10px; font-weight: 600; cursor: pointer; border: 1px solid var(--border2); color: var(--text3); background: transparent; transition: all 0.15s; }
.col-btn.on     { background: rgba(0, 180, 230, 0.1); border-color: var(--accent); color: var(--accent); }

/* Score info tooltip */
.score-th-wrap    { display: inline-flex; align-items: center; gap: 5px; position: relative; }
.score-info       { width: 15px; height: 15px; border-radius: 50%; background: var(--border2); color: var(--text3); font-size: 9px; font-weight: 700; display: inline-flex; align-items: center; justify-content: center; cursor: pointer; transition: all 0.15s; flex-shrink: 0; line-height: 1; }
.score-info:hover { background: var(--accent); color: #000; }
.score-tooltip    { position: fixed; background: var(--bg2); border: 1px solid var(--border2); border-radius: 8px; padding: 14px 16px; width: 260px; font-size: 12px; color: var(--text2); line-height: 1.6; z-index: 500; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5); display: none; }
.score-tooltip.show   { display: block; }
.score-tooltip strong { color: var(--accent); }
.score-tooltip code   { color: var(--purple); font-size: 11px; }


/* =============================================================
   21. TICKER DETAIL
   ============================================================= */

.ticker-hero  { display: flex; align-items: flex-start; gap: 20px; margin-bottom: 18px; flex-wrap: wrap; }
.hero-left    { flex: 1; min-width: 0; }
.hero-name    { font-size: 48px; font-weight: 900; color: var(--accent); letter-spacing: -3px; line-height: 1; font-family: 'Roboto Mono', monospace; }
.hero-company { font-size: 16px; color: var(--text); margin-top: 8px; font-weight: 600; }
.hero-desc    { font-size: 12px; color: var(--text3); margin-top: 10px; line-height: 1.75; max-width: 700px; border-left: 2px solid var(--border2); padding-left: 12px; }
.hero-tags    { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 10px; align-items: center; }
.hero-tag     { padding: 3px 10px; border-radius: 4px; font-size: 10px; font-weight: 700; letter-spacing: 0.6px; text-transform: uppercase; }
.tag-stock    { background: rgba(0, 180, 230, 0.15); color: var(--accent); border: 1px solid rgba(0, 180, 230, 0.25); }
.tag-etf      { background: rgba(0, 224, 160, 0.15); color: var(--green); border: 1px solid rgba(0, 224, 160, 0.25); }
.tag-sector   { background: var(--bg3); color: var(--text2); border: 1px solid var(--border2); }

.hero-right   { display: flex; flex-direction: column; gap: 8px; align-items: flex-end; flex-shrink: 0; }
.price-card   { background: var(--bg2); border: 1px solid var(--border); border-radius: 8px; padding: 14px 20px; text-align: right; min-width: 150px; }
.price-label  { font-size: 10px; color: var(--text3); text-transform: uppercase; letter-spacing: 0.5px; font-weight: 600; }
.price-val    { font-size: 28px; font-weight: 800; color: var(--accent); font-family: 'Roboto Mono', monospace; margin-top: 3px; }
.price-date   { font-size: 11px; color: var(--text3); margin-top: 4px; font-family: 'Roboto Mono', monospace; }
.price-change { font-size: 13px; font-weight: 700; margin-top: 2px; }
.pup  { color: var(--green); }
.pdn  { color: var(--red); }
.pneu { color: var(--text3); }

/* Metric boxes row */
.metrics-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); gap: 10px; margin-bottom: 16px; }
.mbox   { background: var(--bg2); border: 1px solid var(--border); border-radius: 8px; padding: 12px 14px; }
.mlabel { font-size: 9px; color: var(--text3); letter-spacing: 0.6px; text-transform: uppercase; font-weight: 700; }
.mval   { font-size: 20px; font-weight: 800; margin-top: 5px; color: var(--text); font-family: 'Roboto Mono', monospace; }

/* Performance matrix */
.matrix-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.mtable { border-collapse: collapse; width: 100%; font-size: 11px; }
.mtable thead tr:first-child th                  { padding: 8px 10px; text-align: center; font-size: 9px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: var(--accent); background: rgba(0, 180, 230, 0.06); border-bottom: 2px solid rgba(0, 180, 230, 0.2); white-space: nowrap; }
.mtable thead tr:first-child th.th-label         { text-align: left; color: var(--text3); background: var(--bg3); border-bottom: 2px solid var(--border); position: sticky; left: 0; z-index: 4; min-width: 62px; border-right: 1px solid var(--border); }
.mtable thead tr:nth-child(2) th                 { padding: 5px 8px; text-align: center; font-size: 9px; font-weight: 600; color: var(--text3); background: var(--bg3); border-bottom: 2px solid var(--border); white-space: nowrap; min-width: 54px; }
.mtable thead tr:nth-child(2) th.th-label        { text-align: left; position: sticky; left: 0; z-index: 3; border-right: 1px solid var(--border); }
.mtable tbody td                                 { padding: 8px 10px; text-align: center; border-bottom: 1px solid rgba(30, 34, 40, 0.5); white-space: nowrap; font-family: 'Roboto Mono', monospace; font-size: 11px; }
.mtable tbody td.td-range                        { text-align: left; font-family: inherit; font-size: 11px; font-weight: 700; position: sticky; left: 0; background: var(--bg2); z-index: 2; padding-left: 14px; color: var(--text2); min-width: 62px; border-right: 1px solid var(--border); }
.mtable tbody tr:hover td                        { background: rgba(0, 180, 230, 0.03); }
.mtable tbody tr:hover td.td-range               { background: var(--bg3); }
.mtable tbody tr.row-active td.td-range          { color: var(--accent); font-weight: 800; }
.col-sep     { border-left: 1px solid var(--border); }
.cond-none   { color: var(--text3)  !important; background: var(--bg3)                   !important; }
.cond-active { color: var(--accent) !important; background: rgba(0, 180, 230, 0.07)      !important; }
.chi  { color: var(--accent); font-weight: 700; }
.cmid { color: var(--text); }
.clo  { color: var(--text3); }
.cno  { color: var(--border2); font-size: 10px; }

/* Dividends */
.div-row          { display: flex; justify-content: space-between; padding: 9px 16px; border-bottom: 1px solid rgba(37, 41, 48, 0.5); font-size: 12px; gap: 12px; flex-wrap: wrap; }
.div-row:last-child { border-bottom: none; }
.div-insight      { background: rgba(0, 180, 230, 0.06); border: 1px solid rgba(0, 180, 230, 0.15); border-radius: 6px; padding: 10px 14px; font-size: 11px; color: var(--text2); line-height: 1.6; margin: 10px 16px; }


/* =============================================================
   22. SCHEDULER & ADMIN
   ============================================================= */

.admin-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }

/* Container status rows */
.ct-row           { display: flex; align-items: center; gap: 10px; padding: 10px 16px; border-bottom: 1px solid rgba(30, 34, 40, 0.5); font-size: 12px; }
.ct-row:last-child { border-bottom: none; }
.ct-dot           { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
.ct-dot.up        { background: var(--green); box-shadow: 0 0 6px var(--green); }
.ct-dot.dn        { background: var(--red); }
.ct-label         { font-weight: 700; color: var(--text); min-width: 90px; }
.ct-status        { color: var(--text3); font-size: 11px; flex: 1; }
.ct-actions       { display: flex; gap: 5px; flex-shrink: 0; }
.ct-btn           { padding: 3px 9px; border-radius: 4px; font-size: 10px; font-weight: 700; cursor: pointer; border: 1px solid var(--border2); color: var(--text2); background: transparent; transition: all 0.15s; }
.ct-btn:hover         { border-color: var(--accent); color: var(--accent); }
.ct-btn.danger:hover  { border-color: var(--red);    color: var(--red); }

/* Log viewer */
.log-tabs { display: flex; gap: 2px; padding: 0 16px; background: var(--bg3); border-bottom: 1px solid var(--border); }
.log-tab  { padding: 8px 14px; font-size: 11px; font-weight: 600; cursor: pointer; color: var(--text3); border-bottom: 2px solid transparent; transition: all 0.15s; }
.log-tab:hover  { color: var(--text); }
.log-tab.active { color: var(--accent); border-bottom-color: var(--accent); }

.log-box  { background: #080b12; padding: 12px 16px; height: 280px; overflow-y: auto; font-family: 'Roboto Mono', monospace; font-size: 11px; line-height: 1.65; }
.log-line { padding: 1px 0; white-space: pre-wrap; word-break: break-all; }
.l-err    { color: #ff6b6b; }
.l-warn   { color: #ffd166; }
.l-ok     { color: #00e0a0; }
.l-bold   { color: #c8cfe0; font-weight: 600; }
.l-ts     { color: #3a4060; }
.l-info   { color: #6b7491; }

/* Runs table */
.runs-table    { width: 100%; border-collapse: collapse; font-size: 12px; }
.runs-table th { padding: 7px 12px; text-align: left; font-size: 9px; font-weight: 700; letter-spacing: 0.6px; text-transform: uppercase; color: var(--text3); border-bottom: 1px solid var(--border); background: var(--bg3); white-space: nowrap; }
.runs-table td { padding: 8px 12px; border-bottom: 1px solid rgba(30, 34, 40, 0.5); color: var(--text2); font-size: 11px; }
.runs-table tr:hover td { background: rgba(0, 180, 230, 0.03); }
.st-ok  { color: var(--green);  font-weight: 700; }
.st-err { color: var(--red);    font-weight: 700; }
.st-run { color: var(--accent); font-weight: 700; }

/* Processes table */
.proc-table    { width: 100%; border-collapse: collapse; font-size: 11px; }
.proc-table th { padding: 5px 10px; font-size: 9px; font-weight: 700; letter-spacing: 0.5px; text-transform: uppercase; color: var(--text3); border-bottom: 1px solid var(--border); background: var(--bg3); }
.proc-table td { padding: 7px 10px; border-bottom: 1px solid rgba(30, 34, 40, 0.4); color: var(--text2); font-family: 'Roboto Mono', monospace; font-size: 10px; }
.proc-table tr:hover td { background: rgba(0, 180, 230, 0.03); }

.kill-btn       { padding: 2px 8px; border-radius: 3px; font-size: 9px; font-weight: 700; cursor: pointer; border: 1px solid rgba(255, 107, 107, 0.3); color: var(--red); background: transparent; transition: all 0.15s; }
.kill-btn:hover { background: rgba(255, 107, 107, 0.1); }

/* Action buttons grid */
.action-grid    { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.action-btn     { display: flex; align-items: center; gap: 8px; padding: 10px 14px; border-radius: 6px; font-size: 12px; font-weight: 600; cursor: pointer; border: 1px solid var(--border2); color: var(--text2); background: transparent; transition: all 0.15s; text-align: left; }
.action-btn:hover { border-color: var(--accent); color: var(--accent); background: rgba(0, 180, 230, 0.05); }
.action-btn .ai   { font-size: 15px; flex-shrink: 0; }

.action-result      { font-size: 11px; font-family: 'Roboto Mono', monospace; padding: 7px 10px; border-radius: 4px; background: var(--bg3); border: 1px solid var(--border); margin-top: 6px; display: none; white-space: pre-wrap; word-break: break-all; max-height: 70px; overflow-y: auto; grid-column: 1 / -1; }
.action-result.show { display: block; }
.action-result.ok   { border-color: var(--green); color: var(--green); }
.action-result.err  { border-color: var(--red);   color: var(--red); }

/* User management table */
.user-row             { display: grid; grid-template-columns: 1fr 80px 70px 120px auto; gap: 10px; align-items: center; padding: 10px 16px; border-bottom: 1px solid rgba(30, 34, 40, 0.5); font-size: 12px; }
.user-row:last-child  { border-bottom: none; }
.user-name            { font-family: 'Roboto Mono', monospace; font-weight: 700; color: var(--text); }
.user-actions         { display: flex; gap: 5px; }
.ubtn                 { padding: 3px 8px; border-radius: 4px; font-size: 10px; font-weight: 600; cursor: pointer; border: 1px solid var(--border2); color: var(--text2); background: transparent; transition: all 0.15s; }
.ubtn:hover           { border-color: var(--accent); color: var(--accent); }
.ubtn.del:hover       { border-color: var(--red);    color: var(--red); }

/* Permissions panel */
.perm-panel        { padding: 16px; }
.perm-tabs         { display: flex; gap: 2px; border-bottom: 1px solid var(--border); margin-bottom: 16px; }
.perm-tab          { padding: 7px 16px; font-size: 11px; font-weight: 600; cursor: pointer; color: var(--text3); border-bottom: 2px solid transparent; transition: all 0.15s; }
.perm-tab:hover    { color: var(--text); }
.perm-tab.active   { color: var(--accent); border-bottom-color: var(--accent); }
.perm-section      { display: none; }
.perm-section.active { display: block; }

.perm-role-grid    { display: grid; gap: 12px; }
.perm-role-block   { background: var(--bg3); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; }
.perm-role-header  { padding: 9px 14px; font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; color: var(--accent); background: rgba(0, 180, 230, 0.05); border-bottom: 1px solid var(--border); }
.perm-row          { display: flex; align-items: center; padding: 9px 14px; border-bottom: 1px solid rgba(30, 34, 40, 0.4); gap: 12px; }
.perm-row:last-child { border-bottom: none; }
.perm-row-label    { flex: 1; font-size: 12px; color: var(--text); }
.perm-row-desc     { font-size: 10px; color: var(--text3); margin-top: 1px; }

/* Toggle switch (permisos por rol) */
.toggle          { position: relative; display: inline-block; width: 36px; height: 20px; flex-shrink: 0; }
.toggle input    { opacity: 0; width: 0; height: 0; }
.toggle-slider   { position: absolute; inset: 0; background: var(--border2); border-radius: 20px; cursor: pointer; transition: 0.2s; }
.toggle-slider::before { content: ""; position: absolute; width: 14px; height: 14px; left: 3px; bottom: 3px; background: #fff; border-radius: 50%; transition: 0.2s; }
.toggle input:checked + .toggle-slider              { background: var(--accent); }
.toggle input:checked + .toggle-slider::before      { transform: translateX(16px); }

/* Per-user permission cells (3 estados: on / off / inherit) */
.up-table              { width: 100%; border-collapse: collapse; font-size: 11px; }
.up-table th           { padding: 7px 10px; font-size: 9px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text3); border-bottom: 1px solid var(--border); background: var(--bg3); white-space: nowrap; text-align: center; }
.up-table th:first-child { text-align: left; }
.up-table td           { padding: 8px 10px; border-bottom: 1px solid rgba(30, 34, 40, 0.4); text-align: center; vertical-align: middle; }
.up-table td:first-child { text-align: left; font-family: 'Roboto Mono', monospace; font-size: 11px; font-weight: 700; color: var(--text); }
.up-table tr:hover td  { background: rgba(0, 180, 230, 0.02); }

.perm-cell             { display: flex; flex-direction: column; align-items: center; gap: 3px; cursor: pointer; }
.perm-cell-icon        { width: 22px; height: 22px; border-radius: 4px; display: flex; align-items: center; justify-content: center; font-size: 13px; border: 1px solid transparent; transition: all 0.15s; }
.perm-cell-icon.on      { background: rgba(0, 224, 160, 0.15); border-color: rgba(0, 224, 160, 0.4); }
.perm-cell-icon.off     { background: rgba(255, 107, 107, 0.12); border-color: rgba(255, 107, 107, 0.3); }
.perm-cell-icon.inherit { background: var(--bg3); border-color: var(--border); color: var(--text3); }
.perm-cell-label       { font-size: 8px; color: var(--text3); text-transform: uppercase; letter-spacing: 0.3px; }


/* =============================================================
   23. RESPONSIVE — TABLET (≤ 900px)
   ============================================================= */

@media (max-width: 900px) {
  .chart-row      { grid-template-columns: 1fr; }
  .admin-grid     { grid-template-columns: 1fr; }
  .grid-2         { grid-template-columns: 1fr; }
  .perm-role-grid { grid-template-columns: 1fr; }
  .action-grid    { grid-template-columns: 1fr; }

  /* Ocultar columnas secundarias en tabla de usuarios */
  .user-row { grid-template-columns: 1fr auto auto; }
  .user-row > div:nth-child(3),
  .user-row > div:nth-child(4) { display: none; }
}


/* =============================================================
   24. RESPONSIVE — MOBILE (≤ 640px)
   ============================================================= */

@media (max-width: 640px) {
  /* El sidebar se mueve fuera de pantalla y abre con el botón ☰ */
  .sidebar { transform: translateX(-100%); }
  .sidebar.open { transform: translateX(0); box-shadow: 4px 0 24px rgba(0, 0, 0, 0.6); }
  .sidebar-overlay.open { display: block; }

  /* El contenido ocupa toda la pantalla */
  .main { margin-left: 0; }

  /* Mostrar botón hamburger */
  .topbar-menu-btn { display: flex; }
  .topbar          { padding: 0 14px; }

  /* Market widget — ocultar completo, mostrar mini */
  .market-widget { display: none; }
  .mkt-mini      { display: flex; }

  .content         { padding: 12px; }

  /* Tipografía y hero reducidos */
  .hero-name    { font-size: 36px; letter-spacing: -2px; }
  .hero-right   { align-items: flex-start; width: 100%; }
  .price-card   { min-width: unset; width: 100%; text-align: left; }
  .ticker-hero  { flex-direction: column; gap: 12px; }

  /* Grids a 2 columnas compactos */
  .stats-grid   { grid-template-columns: repeat(2, 1fr); }
  .stats-row    { grid-template-columns: repeat(2, 1fr); }
  .metrics-row  { grid-template-columns: repeat(2, 1fr); }

  /* Filtros apilados verticalmente */
  .filters-bar  { flex-direction: column; align-items: stretch; padding: 10px; }
  .filter-group { width: 100%; }

  /* Tablas: scroll horizontal, celdas más compactas */
  .data-table td,
  .data-table th  { padding: 7px 10px; font-size: 12px; }

  /* Ocultar columnas no esenciales en runs (marcadas con esta clase en el template) */
  .runs-table .col-hide-mobile { display: none; }

  /* Compare bar ocupa el ancho de la pantalla */
  .compare-bar {
    width: calc(100% - 24px);
    left: 12px;
    transform: none;
    font-size: 11px;
    flex-wrap: wrap;
  }

  /* Log box más corto para no dominar la pantalla */
  .log-box { height: 200px; }

  /* Modal ocupa más espacio en pantalla pequeña */
  .modal-box  { padding: 16px; }

  /* Pills más compactas */
  .pill-row   { gap: 4px; }
  .pill       { padding: 4px 9px; font-size: 10px; }

  /* Altura máxima de tabla */
  .table-wrap { max-height: calc(100vh - 200px); }

  /* Tooltip del score: anclado al fondo en lugar de flotar junto al cursor */
  .score-tooltip {
    width: calc(100vw - 32px);
    left: 16px !important;
    bottom: 16px;
    top: auto !important;
  }

  /* Tabla de usuarios simplificada */
  .user-row {
    grid-template-columns: 1fr auto;
    gap: 8px;
  }
  .user-row > div:nth-child(2),
  .user-row > div:nth-child(3),
  .user-row > div:nth-child(4) { display: none; }
}


/* =============================================================
   25. RESPONSIVE — MUY PEQUEÑO (≤ 380px)
   ============================================================= */

@media (max-width: 380px) {
  .hero-name   { font-size: 28px; }
  .stats-grid  { grid-template-columns: 1fr; }
  .login-card  { padding: 24px 16px; }
}


/* =============================================================
   26. TOPBAR — BREADCRUMB Y SEPARADORES
   ============================================================= */

.topbar-sep {
  color: var(--text3);
  font-size: 12px;
  opacity: .5;
  padding: 0 2px;
}

.topbar-breadcrumb {
  color: var(--text3);
  font-size: 11px;
}


/* =============================================================
   27. PÁGINA COMPARAR — LAYOUT Y TARJETAS
   ============================================================= */

/* Barra de controles (filtros + rango) */
.cmp-input-row {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 14px 18px;
  margin-bottom: 14px;
  display: flex;
  gap: 14px;
  align-items: flex-end;
  flex-wrap: wrap;
}

/* Grupo de campo (label + control apilados) — usado en compare y scatter */
.fg {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.fg label {
  font-size: 10px;
  color: var(--text3);
  letter-spacing: .8px;
  text-transform: uppercase;
  font-weight: 600;
}

/* Grid de tarjetas de ticker */
.cmp-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 14px;
  margin-bottom: 16px;
}

/* Tarjeta individual de ticker */
.ticker-card {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 6px;
  overflow: hidden;
  transition: border-color .2s;
}
.ticker-card:hover { border-color: var(--accent); }

.ticker-card-head {
  padding: 14px 18px;
  border-bottom: 1px solid var(--border);
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.ticker-card-symbol {
  font-size: 22px;
  font-weight: 800;
  color: var(--accent);
  cursor: pointer;
  font-family: 'Roboto Mono', monospace;
}
.ticker-card-symbol:hover { text-decoration: underline; }

.ticker-card-body { padding: 14px 18px; }

.ticker-card-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 6px 0;
  border-bottom: 1px solid rgba(37,41,48,.4);
  font-size: 12px;
}
.ticker-card-row:last-child { border-bottom: none; }

.ticker-card-key {
  color: var(--text3);
  font-size: 11px;
}

.ticker-card-val {
  font-weight: 600;
  font-family: 'Roboto Mono', monospace;
  font-size: 12px;
}

/* Estado vacío — "ingresa tickers" */
.empty-state {
  text-align: center;
  padding: 80px 20px;
  color: var(--text3);
}
.empty-state .empty-icon {
  font-size: 48px;
  opacity: .2;
  margin-bottom: 12px;
}

/* Píldoras de rango de fechas (3d / 1w / 1m…) */
.range-pill {
  padding: 5px 10px;
  border-radius: 4px;
  font-size: 11px;
  font-weight: 600;
  cursor: pointer;
  border: 1px solid var(--border2);
  color: var(--text2);
  background: transparent;
  transition: all .15s;
  font-family: 'Roboto Mono', monospace;
}
.range-pill:hover  { border-color: var(--accent); color: var(--accent); }
.range-pill.active { background: rgba(0,180,230,.12); border-color: var(--accent); color: var(--accent); }


/* =============================================================
   28. PÁGINA SCATTER — LAYOUT
   ============================================================= */

.scatter-controls {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 14px 18px;
  margin-bottom: 14px;
  display: flex;
  gap: 14px;
  align-items: flex-end;
  flex-wrap: wrap;
}

.scatter-wrap {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 8px;
  height: calc(100vh - 280px);
  min-height: 420px;
}

.scatter-count {
  font-size: 11px;
  color: var(--text3);
  padding: 4px 0;
}

.scatter-empty {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100%;
  color: var(--text3);
  font-style: italic;
}


/* =============================================================
   29. DASHBOARD — CHECKBOX DE FILAS
   ============================================================= */

.row-cb {
  accent-color: var(--accent);
  width: 14px;
  height: 14px;
  cursor: pointer;
}


/* =============================================================
   26–29: RESPONSIVE AJUSTES
   ============================================================= */

@media (max-width: 640px) {
  .cmp-input-row   { flex-direction: column; align-items: stretch; }
  .scatter-controls { flex-direction: column; align-items: stretch; }
  .cmp-grid        { grid-template-columns: 1fr; }
  .scatter-wrap    { height: calc(100vh - 340px); min-height: 300px; }
}


/* =============================================================
   30. WIDGET HORARIO DE MERCADO (topbar)
   ============================================================= */

/* Contenedor principal — va antes del topbar-right */
.market-widget {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 4px 10px;
  border-radius: 6px;
  background: var(--bg3);
  border: 1px solid var(--border);
  cursor: default;
  position: relative;
  user-select: none;
  transition: border-color .2s;
  flex-shrink: 0;
}
.market-widget:hover { border-color: var(--border2); }

/* Indicador de estado (dot animado) */
.mkt-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  flex-shrink: 0;
  transition: background .3s;
}
.mkt-dot.mkt-closed   { background: #4a5060; }
.mkt-dot.mkt-pre      { background: #f0b429; }
.mkt-dot.mkt-regular  { background: #00e0a0; animation: mkt-pulse 2s infinite; }
.mkt-dot.mkt-post     { background: #ff9147; }

@keyframes mkt-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(0,224,160,.5); }
  50%       { box-shadow: 0 0 0 5px rgba(0,224,160,0); }
}

/* Etiqueta de estado */
.mkt-label {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .6px;
  text-transform: uppercase;
  min-width: 34px;
  transition: color .3s;
}
.mkt-label.mkt-closed  { color: #4a5060; }
.mkt-label.mkt-pre     { color: #f0b429; }
.mkt-label.mkt-regular { color: #00e0a0; }
.mkt-label.mkt-post    { color: #ff9147; }

/* Separador vertical */
.mkt-sep {
  width: 1px;
  height: 16px;
  background: var(--border);
  flex-shrink: 0;
}

/* Bloque de hora */
.mkt-time-block {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 1px;
}
.mkt-time {
  font-family: 'Roboto Mono', monospace;
  font-size: 12px;
  font-weight: 600;
  color: var(--text);
  line-height: 1.2;
  letter-spacing: .3px;
}
.mkt-tz {
  font-size: 9px;
  color: var(--text3);
  line-height: 1;
  letter-spacing: .3px;
}

/* ── Tooltip — barra de sesiones estilo TradingView ── */
.mkt-tooltip {
  display: none;
  position: absolute;
  top: calc(100% + 8px);
  right: 0;
  width: 320px;
  background: var(--bg2);
  border: 1px solid var(--border2);
  border-radius: 8px;
  padding: 14px 16px;
  box-shadow: 0 8px 24px rgba(0,0,0,.4);
  z-index: 500;
  pointer-events: none;
}
.market-widget:hover .mkt-tooltip { display: block; }

/* Widget mini — solo visible en mobile */
.mkt-mini {
  display: none;
  align-items: center;
  gap: 6px;
  padding: 3px 8px;
  border-radius: 6px;
  background: var(--bg3);
  border: 1px solid var(--border);
  flex-shrink: 0;
}
.mkt-mini-time {
  font-family: 'Roboto Mono', monospace;
  font-size: 12px;
  font-weight: 600;
  color: var(--text);
  letter-spacing: .3px;
  white-space: nowrap;
}

.mkt-tt-title {
  font-size: 11px;
  font-weight: 700;
  color: var(--text2);
  margin-bottom: 12px;
  letter-spacing: .4px;
  text-transform: uppercase;
}

/* Barra de sesiones */
.mkt-bar-wrap {
  position: relative;
  height: 8px;
  border-radius: 4px;
  overflow: visible;
  margin-bottom: 20px;
  display: flex;
}

/* Segmentos de la barra */
.mkt-seg {
  height: 100%;
  border-radius: 0;
  transition: opacity .2s;
}
.mkt-seg:first-child { border-radius: 4px 0 0 4px; }
.mkt-seg:last-child  { border-radius: 0 4px 4px 0; }
.mkt-seg.seg-closed  { background: #252830; }
.mkt-seg.seg-pre     { background: rgba(240,180,41,.35); }
.mkt-seg.seg-regular { background: rgba(0,224,160,.45); }
.mkt-seg.seg-post    { background: rgba(255,145,71,.35); }
.mkt-seg.seg-active  { opacity: 1; }
.mkt-seg.seg-inactive { opacity: .5; }

/* Marcador de hora actual */
.mkt-cursor {
  position: absolute;
  top: -4px;
  width: 2px;
  height: 16px;
  background: var(--text);
  border-radius: 1px;
  transform: translateX(-50%);
  transition: left .5s linear;
}
.mkt-cursor::after {
  content: '';
  position: absolute;
  top: -3px;
  left: 50%;
  transform: translateX(-50%);
  width: 6px;
  height: 6px;
  background: var(--text);
  border-radius: 50%;
}

/* Etiquetas de hora bajo la barra */
.mkt-bar-labels {
  display: flex;
  justify-content: space-between;
  font-size: 9px;
  font-family: 'Roboto Mono', monospace;
  color: var(--text3);
  margin-top: 3px;
}

/* Filas de info adicional */
.mkt-tt-rows {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-top: 10px;
  border-top: 1px solid var(--border);
  padding-top: 10px;
}
.mkt-tt-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 11px;
}
.mkt-tt-key { color: var(--text3); }
.mkt-tt-val { font-family: 'Roboto Mono', monospace; color: var(--text2); font-weight: 600; }
.mkt-tt-val.c-green  { color: #00e0a0; }
.mkt-tt-val.c-yellow { color: #f0b429; }
.mkt-tt-val.c-orange { color: #ff9147; }
.mkt-tt-val.c-gray   { color: #4a5060; }

/* ── Responsive ── */
@media (max-width: 640px) {
  .mkt-label    { display: none; }
  .mkt-sep      { display: none; }
  .mkt-time-block .mkt-tz { display: none; }
  .mkt-tooltip  { right: -10px; width: 280px; }
}
@media (max-width: 380px) {
  .mkt-time-block { display: none; }
}


/* =============================================================
   26. NAVEGACIÓN POR TABS (Touch & Turn / Scalping 4H)
   ============================================================= */

.tt-tabbar {
  display: flex;
  justify-content: flex-end;
  gap: 0;
  padding: 0;
  margin-bottom: 20px;
  border-bottom: 2px solid var(--border);
}

.tt-tab {
  padding: 9px 22px;
  font-size: 12px;
  font-weight: 600;
  font-family: inherit;
  color: var(--text3);
  background: var(--bg3);
  border: 1px solid var(--border);
  border-bottom: 2px solid var(--border);
  border-radius: 8px 8px 0 0;
  cursor: pointer;
  transition: color 0.15s, background 0.15s;
  letter-spacing: 0.02em;
  margin-left: 3px;
  position: relative;
  bottom: -2px;
  line-height: 1.2;
}

.tt-tab:first-child { margin-left: 0; }

.tt-tab:hover {
  color: var(--text2);
  background: var(--bg2);
}

.tt-tab.active {
  color: var(--accent);
  background: var(--bg);
  border-color: var(--border);
  border-bottom-color: var(--bg);
  z-index: 1;
}

.tt-tabpanel {
  animation: tabFadeIn 0.12s ease;
}

@keyframes tabFadeIn {
  from { opacity: 0; transform: translateY(3px); }
  to   { opacity: 1; transform: translateY(0);   }
}

@media (max-width: 640px) {
  .tt-tab { padding: 8px 13px; font-size: 11px; }
}

/* =============================================================
   27. SCALPING 4H — Bloque SPX
   ============================================================= */

.spx-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 12px;
  margin-bottom: 12px;
}

.spx-block {
  background: var(--bg3);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 12px 14px;
}

.spx-label {
  font-size: 10px;
  color: var(--text3);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-weight: 600;
  margin-bottom: 6px;
}

.spx-val {
  font-size: 14px;
  font-weight: 700;
  color: var(--text);
  font-family: 'Roboto Mono', monospace;
}
