/* SQL DAG / SQL Builder — module styles */

/* ── Main wrapper: sqb-outer + sqb-sql-area stacked vertically ───────────── */

#sqb-main {
  display: flex;
  flex-direction: column;
}

/* ── Builder + DAG row (collapsible) ──────────────────────────────────────── */

#sqb-outer {
  display: flex;
  height: calc(100vh - 340px);
  min-height: 400px;
  border: 1px solid var(--border);
  border-radius: 8px 8px 0 0;
  overflow: hidden;
  transition: height 0.22s ease, min-height 0.22s ease;
}

#sqb-outer.sqb-collapsed {
  height: 0 !important;
  min-height: 0 !important;
  border-bottom: none;
}

/* Left panel — guided builder */
#sqb-builder {
  width: 260px;
  min-width: 200px;
  flex-shrink: 0;
  background: var(--surface2);
  border-right: 1px solid var(--border);
  padding: 14px 12px;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
}

/* Center panel — Drawflow canvas */
#sqb-dag-area {
  flex: 1;
  position: relative;
  background: var(--bg);
  overflow: hidden;
}

/* ── Bottom SQL panel — full width, fixed height ─────────────────────────── */

#sqb-sql-area {
  height: 150px;
  flex-shrink: 0;
  background: var(--surface2);
  border: 1px solid var(--border);
  border-top: none;
  border-radius: 0 0 8px 8px;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  position: relative;
}

/* Floating run / cancel buttons inside SQL panel */
.sqb-run-fab,
.sqb-cancel-fab {
  position: absolute;
  bottom: 10px;
  right: 12px;
  z-index: 5;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  border: none;
  cursor: pointer;
  font-size: 14px;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 2px 10px rgba(0,0,0,0.4);
  transition: opacity 0.15s, transform 0.1s;
}
.sqb-run-fab {
  background: var(--primary, #4a9eff);
  color: #fff;
}
.sqb-run-fab:hover { opacity: 0.85; transform: scale(1.06); }

.sqb-cancel-fab {
  background: var(--red, #e53935);
  color: #fff;
}
.sqb-cancel-fab:hover { opacity: 0.85; transform: scale(1.06); }

/* When builder is collapsed the sql area gets top border-radius too */
#sqb-outer.sqb-collapsed + #sqb-sql-area {
  border-top: 1px solid var(--border);
  border-radius: 8px;
}

/* CodeMirror fills SQL panel */
#sqb-sql-area #console-query-wrap,
.sql-ide-area .sqb-editor-wrap {
  flex: 1;
  min-height: 0;
  overflow: hidden;
}
#sqb-sql-area .sqb-editor-wrap .CodeMirror,
.sql-ide-area .sqb-editor-wrap .CodeMirror {
  height: 100%;
  border-radius: 0;
  border: none;
  font-size: 12px;
}
#sqb-sql-area .sqb-editor-wrap .CodeMirror-scroll,
.sql-ide-area .sqb-editor-wrap .CodeMirror-scroll {
  max-height: none;
  min-height: 0;
}

/* Read-only tint */
#sqb-sql-area .sqb-editor-wrap .CodeMirror.CodeMirror-readonly,
.sql-ide-area .sqb-editor-wrap .CodeMirror.CodeMirror-readonly {
  opacity: 0.82;
}

/* ── Gráficos ────────────────────────────────────────────────────────────── */

.chart-type-badge {
  display: inline-block;
  padding: 2px 8px;
  font-size: 10px;
  font-weight: 600;
  border-radius: 4px;
  background: rgba(79,124,255,0.12);
  color: var(--accent, #4f7cff);
  border: 1px solid rgba(79,124,255,0.25);
  margin-right: 4px;
}

.chart-type-btn {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  width: 64px;
  height: 64px;
  border-radius: 8px;
  border: 1px solid var(--border2);
  background: var(--surface3);
  color: var(--text2);
  cursor: pointer;
  transition: border-color 0.15s, background 0.15s, color 0.15s;
}
.chart-type-btn:hover {
  border-color: var(--accent);
  color: var(--accent);
}
.chart-type-btn--on {
  border-color: var(--accent) !important;
  background: rgba(79,124,255,0.12) !important;
  color: var(--accent) !important;
}

.chart-col-check {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  color: var(--text1);
  cursor: pointer;
  padding: 4px 6px;
  border-radius: 5px;
}
.chart-col-check:hover { background: var(--surface3); }
.chart-col-check input { accent-color: var(--accent); }

/* ── Query result card ───────────────────────────────────────────────────── */

.sqb-result-sep {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 18px 0 10px;
  color: var(--text3);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.6px;
  text-transform: uppercase;
}
.sqb-result-sep::before,
.sqb-result-sep::after {
  content: '';
  flex: 1;
  height: 1px;
  background: var(--border2);
}

.sqb-result-card {
  border: 1px solid var(--border2);
  border-radius: 8px;
  overflow: hidden;
  background: var(--surface);
  animation: sqb-fadein 0.18s ease;
}
@keyframes sqb-fadein {
  from { opacity: 0; transform: translateY(6px); }
  to   { opacity: 1; transform: translateY(0); }
}

.sqb-result-head {
  display: flex;
  flex-direction: column;
  gap: 0;
  background: var(--surface2);
  border-bottom: 1px solid var(--border2);
  border-top: 3px solid var(--accent, #4f7cff);
}

.sqb-result-head-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 14px 9px;
  flex-wrap: wrap;
}

.sqb-result-head-bottom {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 14px 10px;
  flex-wrap: wrap;
  border-top: 1px solid var(--border2);
}

.sqb-result-sources-label {
  font-size: 10px;
  font-weight: 700;
  color: var(--text3);
  text-transform: uppercase;
  letter-spacing: 0.5px;
  white-space: nowrap;
  margin-right: 2px;
}

.sqb-result-stat {
  display: flex;
  align-items: center;
  gap: 10px;
}

.sqb-result-count {
  font-size: 14px;
  font-weight: 700;
  color: var(--text1, var(--text));
  font-family: var(--mono);
  line-height: 1;
}

.sqb-result-ms {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 8px;
  background: var(--surface3);
  border: 1px solid var(--border2);
  border-radius: 20px;
  font-size: 11px;
  font-family: var(--mono);
  font-weight: 600;
  color: var(--text2);
}

.sqb-result-actions {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-shrink: 0;
}

.sqb-result-tables {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
}

.sqb-tbl-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 9px;
  background: rgba(79,124,255,0.10);
  border: 1px solid rgba(79,124,255,0.28);
  border-radius: 20px;
  font-size: 10px;
  font-family: var(--mono);
  font-weight: 700;
  color: var(--accent, #4f7cff);
  letter-spacing: 0.3px;
  text-transform: uppercase;
}

.sqb-btn-save-analysis {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 6px 13px;
  background: transparent;
  border: 1px solid var(--border2);
  border-radius: 6px;
  font-size: 12px;
  font-weight: 600;
  color: var(--text2);
  cursor: pointer;
  white-space: nowrap;
  transition: border-color 0.15s, color 0.15s, background 0.15s;
}
.sqb-btn-save-analysis:hover {
  border-color: var(--accent, #4f7cff);
  color: var(--accent, #4f7cff);
  background: rgba(79,124,255,0.07);
}

.sqb-btn-save-table {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 6px 13px;
  background: var(--accent, #4f7cff);
  border: 1px solid var(--accent, #4f7cff);
  border-radius: 6px;
  font-size: 12px;
  font-weight: 700;
  color: #fff;
  cursor: pointer;
  white-space: nowrap;
  transition: opacity 0.15s;
}
.sqb-btn-save-table:hover { opacity: 0.88; }

.sqb-result-body {
  overflow-x: auto;
  max-height: 360px;
  overflow-y: auto;
}

.sqb-result-truncated {
  padding: 7px 14px;
  font-size: 11px;
  background: rgba(251,191,36,0.07);
  border-top: 1px solid rgba(251,191,36,0.2);
  color: var(--amber, #fbbf24);
  font-weight: 500;
}

.sqb-result-empty {
  padding: 28px;
  text-align: center;
  font-size: 12px;
  color: var(--green, #36d399);
  font-weight: 500;
}

/* Footer row */
#sqb-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 0 6px;
  gap: 8px;
}

#sqb-footer-left {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  color: var(--text3);
}

#sqb-footer-right {
  display: flex;
  align-items: center;
  gap: 8px;
}

/* ── SqlBuilder UI components (.sb-*) ─────────────────────────────────────── */

/* Hero screen (IDLE / DONE) */
.sb-hero {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  flex: 1;
  text-align: center;
  padding: 20px 8px;
}

.sb-start {
  background: var(--primary, #4a9eff);
  color: #fff;
  border: none;
  border-radius: 6px;
  padding: 9px 20px;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}
.sb-start:hover { opacity: 0.85; }

.sb-title {
  font-size: 12px;
  font-weight: 700;
  color: var(--text);
  margin-bottom: 4px;
  display: flex;
  align-items: center;
  gap: 6px;
}

.sb-badge {
  font-size: 10px;
  font-weight: 600;
  background: rgba(74,158,255,0.18);
  color: var(--primary, #4a9eff);
  border-radius: 4px;
  padding: 1px 6px;
}

.sb-hint {
  font-size: 11px;
  color: var(--text3);
  margin: 0 0 8px;
  line-height: 1.45;
}

.sb-wip-trail {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 5px;
  padding: 6px 8px;
  font-size: 11px;
  font-family: var(--mono);
  color: var(--text3);
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  margin-bottom: 6px;
}
.sb-wip-item { color: var(--yellow, #f59e0b); }
.sb-wip-item strong { color: var(--text2); }
.sb-wip-sep { color: var(--border2); }

/* Chip buttons */
.sb-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  margin-bottom: 8px;
}

.sb-chip {
  background: var(--surface3);
  border: 1px solid var(--border2);
  color: var(--text);
  border-radius: 5px;
  padding: 4px 10px;
  font-size: 11px;
  cursor: pointer;
  transition: background 0.12s, border-color 0.12s;
}
.sb-chip:hover:not(:disabled) {
  background: rgba(74,158,255,0.15);
  border-color: rgba(74,158,255,0.4);
}
.sb-chip:disabled { opacity: 0.4; cursor: not-allowed; }

/* 2-column menu grid */
.sb-menu-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 5px;
  margin-bottom: 10px;
}

.sb-menu-btn {
  background: var(--surface3);
  border: 1px solid var(--border2);
  color: var(--text);
  border-radius: 6px;
  padding: 8px 6px;
  font-size: 11px;
  cursor: pointer;
  text-align: center;
  line-height: 1.35;
  transition: background 0.12s;
}
.sb-menu-btn:hover:not(:disabled) { background: rgba(74,158,255,0.12); border-color: rgba(74,158,255,0.35); }
.sb-menu-btn:disabled { opacity: 0.4; cursor: not-allowed; }
.sb-menu-icon { font-size: 15px; margin-bottom: 2px; display: block; }

.sb-finish {
  width: 100%;
  background: rgba(34,197,94,0.15);
  color: #4ade80;
  border: 1px solid rgba(34,197,94,0.3);
  border-radius: 6px;
  padding: 7px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  margin-top: 4px;
}
.sb-finish:hover { background: rgba(34,197,94,0.25); }

/* Venn diagram hover preview */
.sb-venn {
  min-height: 0;
  overflow: hidden;
  transition: min-height 0.15s ease;
}
.sb-venn:not(:empty) {
  min-height: 124px;
  margin-bottom: 4px;
}

#sqb-venn-desc-area:not(:empty) {
  border-top: 1px solid var(--border);
}

.sb-venn-desc {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  padding: 8px 10px;
  background: rgba(74,158,255,0.07);
  border-left: 3px solid var(--primary, #4a9eff);
}
.sb-venn-icon {
  font-size: 16px;
  line-height: 1;
  flex-shrink: 0;
  margin-top: 1px;
  color: var(--primary, #4a9eff);
}
.sb-venn-title {
  display: block;
  font-size: 11px;
  font-weight: 700;
  color: var(--text, #e2e8f0);
  margin-bottom: 3px;
}
.sb-venn-text {
  font-size: 10.5px;
  color: var(--text2, #8892a4);
  line-height: 1.5;
  margin: 0;
}
.sb-venn-text b  { color: var(--text, #e2e8f0); font-weight: 600; }
.sb-venn-text em { color: var(--primary, #4a9eff); font-style: normal; font-weight: 500; }
.sb-venn-text code {
  font-family: var(--mono, monospace);
  font-size: 10px;
  background: rgba(255,255,255,0.08);
  padding: 0 3px;
  border-radius: 3px;
}

/* Checkbox lists */
.sb-checks {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin-bottom: 8px;
  max-height: 180px;
  overflow-y: auto;
}

.sb-check-item {
  display: flex;
  align-items: center;
  gap: 7px;
  font-size: 11px;
  color: var(--text2);
  cursor: pointer;
  padding: 2px 0;
}
.sb-check-item input[type=checkbox] { cursor: pointer; }

/* Text / number inputs */
.sb-input {
  width: 100%;
  box-sizing: border-box;
  padding: 6px 8px;
  font-size: 12px;
  background: var(--surface3);
  border: 1px solid var(--border2);
  border-radius: 5px;
  color: var(--text);
  font-family: var(--mono);
  outline: none;
  margin-bottom: 8px;
}
.sb-input:focus { border-color: var(--primary, #4a9eff); }

/* Row: back + ok buttons */
.sb-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 6px;
  margin-top: 4px;
}

.sb-back {
  background: transparent;
  border: 1px solid var(--border2);
  color: var(--text3);
  border-radius: 5px;
  padding: 4px 10px;
  font-size: 11px;
  cursor: pointer;
}
.sb-back:hover { border-color: var(--text3); color: var(--text); }

.sb-ok {
  background: var(--primary, #4a9eff);
  color: #fff;
  border: none;
  border-radius: 5px;
  padding: 4px 12px;
  font-size: 11px;
  font-weight: 600;
  cursor: pointer;
}
.sb-ok:hover { opacity: 0.85; }

/* Chip variante perigo (remover join) */
.sb-chip-danger {
  border-color: rgba(229,57,53,0.35);
  color: var(--red, #e53935);
}
.sb-chip-danger:hover:not(:disabled) {
  background: rgba(229,57,53,0.12);
  border-color: rgba(229,57,53,0.6);
}

/* Lista de JOINs existentes (J0) */
.sb-join-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 6px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 6px 8px;
  margin-bottom: 5px;
}
.sb-join-item-info {
  display: flex;
  align-items: center;
  gap: 5px;
  min-width: 0;
  flex: 1;
  flex-wrap: wrap;
}
.sb-join-table {
  font-size: 11px;
  font-family: var(--mono);
  font-weight: 600;
  color: var(--text1, var(--text));
  white-space: nowrap;
}
.sb-join-on {
  font-size: 10px;
  font-family: var(--mono);
  color: var(--text3);
  background: var(--surface3);
  border-radius: 3px;
  padding: 1px 4px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 110px;
}
.sb-join-cross { font-style: italic; }
.sb-join-item-actions {
  display: flex;
  gap: 4px;
  flex-shrink: 0;
}

/* ── Drawflow canvas overrides ────────────────────────────────────────────── */

.parent-drawflow { height: 100% !important; }
#drawflow-canvas { height: 100%; }

.drawflow .drawflow-node {
  background: var(--surface2) !important;
  border: 1px solid var(--border2) !important;
  border-radius: 6px !important;
  box-shadow: 0 2px 10px rgba(0,0,0,0.25) !important;
  padding: 0 !important;
  width: auto !important;
  min-width: 130px !important;
}
.drawflow .drawflow-node.selected {
  border-color: var(--primary, #4a9eff) !important;
  box-shadow: 0 0 0 2px rgba(74,158,255,0.25) !important;
}
.drawflow .drawflow-node .drawflow_content_node {
  padding: 0 !important;
}

.drawflow .drawflow-node .input,
.drawflow .drawflow-node .output {
  background: var(--primary, #4a9eff) !important;
  border-color: var(--primary, #4a9eff) !important;
  width: 11px !important;
  height: 11px !important;
}
.drawflow .drawflow-node .input:hover,
.drawflow .drawflow-node .output:hover {
  background: #fff !important;
}

.drawflow .connection .main-path {
  stroke: var(--primary, #4a9eff) !important;
  stroke-width: 2px !important;
}
.drawflow .connection .main-path:hover { stroke-width: 3px !important; }

/* ── Node inner HTML ──────────────────────────────────────────────────────── */

.sqdag-node-inner {
  min-width: 115px;
}
.sqdag-join .sqdag-node-inner {
  min-width: 170px;
}
.sqdag-node-title {
  padding: 4px 9px;
  font-size: 11px;
  font-weight: 700;
  color: #fff;
  border-radius: 4px 4px 0 0;
  letter-spacing: 0.2px;
  display: flex;
  align-items: center;
  gap: 5px;
}
.sqdag-node-body {
  padding: 6px 9px;
  font-size: 11px;
  color: var(--text);
  background: var(--surface2);
  border-radius: 0 0 4px 4px;
  line-height: 1.45;
}
.sqdag-node-body small { color: var(--text3); font-size: 10px; }
