:root{
  --bg:#0b0b0f;        /* page */
  --panel:#0f172a;     /* code inputs */
  --panel-2:#0b1220;   /* outputs */
  --text:#e5e7eb;      /* primary text */
  --muted:#a1a1aa;     /* secondary text */
  --border:#1f2937;    /* borders */
  --link:#93c5fd;      /* links */

  /* tables */
  --row:#0f172a;       /* base row */
  --rowAlt:#0c1423;    /* alternate row */
  --thead:#0b1220;     /* header row */

  /* notebook-specific */
  --nb-max-output-h: 60vh; /* clamp height for long outputs */
  --nb-max-df-h:     60vh; /* clamp height for DataFrames */
}

html,body{
  background:var(--bg)!important;
  color:var(--text)!important;
  color-scheme: dark;               /* hint for form controls/scrollbars */
  scrollbar-color:#334155 #0b0b0f;  /* Firefox scrollbars */
}
.container,#notebook,.notebook-container,.jp-Notebook{background:transparent!important}

/* Cells */
div.cell{border-color:var(--border)!important}
div.input_area{background:var(--panel)!important;border-color:var(--border)!important}
div.output_wrapper,div.output,div.output_area{background:var(--panel-2)!important;border-color:var(--border)!important}
.output_area pre, pre{background:transparent!important;color:var(--text)!important}

/* Prompts (In[ ], Out[ ]) */
div.prompt,.prompt,.input_prompt,.output_prompt{color:var(--muted)!important}

/* Markdown/text */
.rendered_html,.text_cell_render{color:var(--text)!important}
.rendered_html h1,.rendered_html h2,.rendered_html h3{color:var(--text)!important}
.rendered_html blockquote{
  background:#0f1629!important;
  border-left:3px solid var(--border)!important;
  color:var(--text)!important;
}
.rendered_html hr{border-color:var(--border)!important;background:var(--border)!important}

/* Inline code (but not fenced blocks) */
.rendered_html :not(pre) > code,
.text_cell_render :not(pre) > code{
  background:#111827!important;
  color:var(--text)!important;
  border:1px solid var(--border)!important;
  border-radius:4px;
  padding:0 .35em;
}

/* CodeMirror (classic exports) */
.cm-s-ipython .CodeMirror-lines{background:transparent!important;color:var(--text)!important}
.cm-s-ipython .CodeMirror-gutters{background:var(--panel)!important;border-right-color:var(--border)!important}

/* Tables - generic + Pandas DataFrames */
table{color:var(--text)!important}
table th, table td{border-color:var(--border)!important}

.rendered_html table,
table.dataframe{
  background:transparent!important;
  border-color:var(--border)!important;
}
.rendered_html table thead th,
table.dataframe thead th{
  background:var(--thead)!important;
  color:var(--text)!important;
  border-color:var(--border)!important;
}
.rendered_html table tbody td,
.rendered_html table tbody th,
table.dataframe tbody td,
table.dataframe tbody th{
  background:var(--row)!important;
  color:var(--text)!important;
  border-color:var(--border)!important;
}
.rendered_html table tbody tr:nth-child(even) td,
.rendered_html table tbody tr:nth-child(even) th,
table.dataframe tbody tr:nth-child(even) td,
table.dataframe tbody tr:nth-child(even) th{
  background:var(--rowAlt)!important;
}
/* Optional: subtle hover highlight */
table.dataframe tbody tr:hover td,
table.dataframe tbody tr:hover th{
  background:#0e1a2c!important;
}

/* Code-like "pills" inside tables */
.rendered_html table code,
.rendered_html table kbd,
.rendered_html table .literal{
  background:#111827!important;
  color:var(--text)!important;
  border:1px solid var(--border)!important;
  border-radius:4px;
  padding:1px 6px;
}

/* Remove any leftover light effects */
.rendered_html table *{box-shadow:none!important}

/* Links */
a{color:var(--link)!important}

/* WebKit scrollbars */
*::-webkit-scrollbar{height:10px;width:10px}
*::-webkit-scrollbar-thumb{background:#334155;border-radius:8px}
*::-webkit-scrollbar-track{background:#0b0b0f}

/* =========================
   Clamp very long outputs
   (classic + JupyterLab)
   ========================= */

/* Classic exports */
div.output_area,
div.output_area pre{
  max-height: var(--nb-max-output-h);
  overflow: auto;
  position: relative;
  border-radius: 8px;
}

/* JupyterLab exports */
.jp-OutputArea-output,
.jp-RenderedText pre,
.jp-RenderedHTMLCommon pre{
  max-height: var(--nb-max-output-h);
  overflow: auto;
  position: relative;
  border-radius: 8px;
  background: rgba(255,255,255,0.02);
  border: 1px solid rgba(255,255,255,0.08);
}

/* Don’t soft-wrap code; allow horizontal scroll when needed */
.jp-RenderedText pre,
div.output_area pre{
  white-space: pre; /* no wrap */
}

/* Subtle bottom fade to signal more content (both classic + lab) */
div.output_area::after,
.jp-OutputArea-output::after{
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 48px;
  background: linear-gradient(to bottom, transparent, var(--panel-2));
  pointer-events: none;
}

/* Opt-out class to expand a specific block (remove clamp + fade) */
div.output_area.nb-expanded,
.jp-OutputArea-output.nb-expanded{
  max-height: none;
}
div.output_area.nb-expanded::after,
.jp-OutputArea-output.nb-expanded::after{
  display: none;
}

/* DataFrames: clamp and scroll (classic + lab) */
div.dataframe,
.jp-RenderedHTMLCommon .dataframe{
  display: block;
  max-height: var(--nb-max-df-h);
  overflow: auto;
  background: transparent !important;
}
div.dataframe table{
  width: auto;        /* keep natural width */
  min-width: 100%;
  border-collapse: collapse;
}

/* Images never overflow the container */
.jp-OutputArea-output img,
.rendered_html img,
div.output_area img{
  max-width: 100%;
  height: auto;
}

