/* MB Development Center — layout and density (spec §8, §9, §37)
 *
 * Colours, type and shape come from --mb-* custom properties, which
 * /static/branding.css defines from the imported MB Branding artefacts. Every
 * var() here has a fallback so an unstyled page is still legible, never so that
 * a missing token silently becomes an approximated MB colour: which palette is
 * in force is stated in the interface, not inferred from the stylesheet.
 *
 * Layout rules that make §37 true:
 *   - no element is given a rigid viewport height; the page scrolls vertically
 *   - every grid track is minmax(0, …) so long content shrinks instead of
 *     pushing the document sideways
 *   - wide content (tables, transcripts, logs) scrolls inside its own panel,
 *     so the page itself never overflows horizontally
 *   - panels are aligned to the start of their row, so a short panel next to a
 *     tall one is not stretched and a tall one is never cut
 */

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

html {
  overflow-x: hidden;
}

body {
  margin: 0;
  /* min-height, never height: the page is allowed to be taller than the
     viewport and must never be trapped inside one. */
  min-height: 100%;
  overflow-x: hidden;
  background: var(--mb-color-canvas);
  color: var(--mb-color-text);
  font-family: var(--mb-font-sans);
  font-size: 15px;
  line-height: 1.5;
}

code,
pre,
time {
  font-family: var(--mb-font-mono);
  font-size: 0.9em;
}

a {
  color: var(--mb-color-accent);
}

:focus-visible {
  outline: 2px solid var(--mb-color-focus);
  outline-offset: 2px;
}

.mb-skip {
  position: absolute;
  left: -9999px;
}

.mb-skip:focus {
  position: static;
  display: inline-block;
  padding: var(--mb-space-unit);
}

/* ---------------------------------------------------------------- header - */

.mb-header {
  display: flex;
  flex-wrap: wrap;
  gap: var(--mb-space-unit);
  align-items: center;
  justify-content: space-between;
  padding: calc(var(--mb-space-unit) * 1.5) calc(var(--mb-space-unit) * 2);
  border-bottom: 1px solid var(--mb-color-border);
  background: var(--mb-color-surface);
}

.mb-header__identity,
.mb-header__session {
  display: flex;
  flex-wrap: wrap;
  gap: var(--mb-space-unit);
  align-items: center;
  min-width: 0;
}

.mb-header__title {
  font-weight: 600;
  letter-spacing: 0.02em;
}

.mb-role {
  padding: 0 calc(var(--mb-space-unit) / 2);
  border: 1px solid var(--mb-color-border);
  border-radius: var(--mb-radius-sm);
  color: var(--mb-color-text-muted);
  font-size: 0.8em;
}

.mb-notice {
  flex-basis: 100%;
  margin: 0;
  color: var(--mb-color-text-muted);
}

.mb-notice--warn {
  color: var(--mb-color-warn);
}

/* ------------------------------------------------------------------ grid - */

.mb-main {
  display: grid;
  /* minmax(0, …) is what keeps a long SHA or a wide table from widening the
     whole document. auto-fit gives 1366 and tablet sensible column counts
     without a breakpoint for every width. */
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 22rem), 1fr));
  gap: calc(var(--mb-space-unit) * 2);
  align-items: start;
  padding: calc(var(--mb-space-unit) * 2);
  max-width: 100%;
}

.mb-panel {
  min-width: 0;
  max-width: 100%;
  border: 1px solid var(--mb-color-border);
  border-radius: var(--mb-radius-md);
  background: var(--mb-color-surface);
}

.mb-panel__title {
  margin: 0;
  padding: var(--mb-space-unit) calc(var(--mb-space-unit) * 1.5);
  border-bottom: 1px solid var(--mb-color-border);
  font-size: 0.95rem;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--mb-color-text-muted);
}

.mb-panel__body {
  padding: calc(var(--mb-space-unit) * 1.5);
  /* Wide content scrolls here, inside the panel, instead of pushing the page. */
  max-width: 100%;
  overflow-x: auto;
  overflow-wrap: anywhere;
}

/* Panels that are lists or transcripts get the full row at every width. */
.mb-panel--timeline,
.mb-panel--chat,
.mb-panel--logs,
.mb-panel--history,
.mb-panel--memory,
.mb-panel--audits,
.mb-panel--plan {
  grid-column: 1 / -1;
}

/* ---------------------------------------------------------------- pieces - */

.mb-table {
  width: 100%;
  border-collapse: collapse;
  text-align: left;
}

.mb-table th,
.mb-table td {
  padding: calc(var(--mb-space-unit) / 1.5) var(--mb-space-unit);
  border-bottom: 1px solid var(--mb-color-border);
  vertical-align: top;
}

.mb-fields {
  display: grid;
  grid-template-columns: minmax(0, auto) minmax(0, 1fr);
  gap: calc(var(--mb-space-unit) / 2) var(--mb-space-unit);
  margin: 0;
}

.mb-fields--wide {
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 14rem), 1fr));
}

.mb-fields dt {
  color: var(--mb-color-text-muted);
}

.mb-fields dd {
  margin: 0;
  min-width: 0;
  overflow-wrap: anywhere;
}

.mb-kpis {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 8rem), 1fr));
  gap: var(--mb-space-unit);
  margin: 0;
  padding: 0;
  list-style: none;
}

.mb-kpi {
  display: flex;
  flex-direction: column;
  padding: var(--mb-space-unit);
  border: 1px solid var(--mb-color-border);
  border-radius: var(--mb-radius-sm);
  background: var(--mb-color-surface-raised);
}

.mb-kpi__value {
  font-size: 1.6rem;
  font-weight: 600;
}

.mb-kpi__label {
  color: var(--mb-color-text-muted);
  font-size: 0.8rem;
}

.mb-cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr));
  gap: var(--mb-space-unit);
}

.mb-card {
  min-width: 0;
  padding: var(--mb-space-unit);
  border: 1px solid var(--mb-color-border);
  border-radius: var(--mb-radius-sm);
  background: var(--mb-color-surface-raised);
}

.mb-card--selected {
  border-color: var(--mb-color-accent);
}

.mb-card h3 {
  margin: 0 0 var(--mb-space-unit);
  font-size: 1rem;
}

.mb-steps,
.mb-rounds,
.mb-timeline,
.mb-transcript,
.mb-logs,
.mb-threads,
.mb-findings,
.mb-proposals,
.mb-actions,
.mb-legend {
  margin: 0;
  padding: 0;
  list-style: none;
}

.mb-steps {
  display: flex;
  flex-wrap: wrap;
  gap: calc(var(--mb-space-unit) / 2);
}

.mb-step {
  padding: calc(var(--mb-space-unit) / 2) var(--mb-space-unit);
  border: 1px solid var(--mb-color-border);
  border-radius: var(--mb-radius-sm);
  color: var(--mb-color-text-muted);
  font-size: 0.85rem;
}

.mb-step--done {
  border-color: var(--mb-color-ok);
  color: var(--mb-color-ok);
}

.mb-step--current {
  border-color: var(--mb-color-accent);
  color: var(--mb-color-text);
  font-weight: 600;
}

.mb-rounds,
.mb-findings,
.mb-proposals {
  display: grid;
  gap: calc(var(--mb-space-unit) / 2);
}

.mb-timeline,
.mb-logs {
  display: grid;
  gap: calc(var(--mb-space-unit) / 2);
  /* A tall list scrolls inside its panel: the panel is never cut and the page
     keeps one continuous vertical scroll. */
  max-height: 30rem;
  overflow-y: auto;
}

.mb-timeline li,
.mb-logs li {
  display: grid;
  grid-template-columns: minmax(0, 11rem) minmax(0, 9rem) minmax(0, 6rem) minmax(0, 1fr);
  gap: var(--mb-space-unit);
  align-items: baseline;
}

.mb-transcript {
  display: grid;
  gap: var(--mb-space-unit);
  max-height: 32rem;
  overflow-y: auto;
}

.mb-turn {
  display: grid;
  gap: calc(var(--mb-space-unit) / 4);
  padding: var(--mb-space-unit);
  border: 1px solid var(--mb-color-border);
  border-left: 3px solid var(--mb-color-info);
  border-radius: var(--mb-radius-sm);
  background: var(--mb-color-surface-raised);
}

.mb-turn--user {
  border-left-color: var(--mb-color-accent);
}

.mb-turn--codex_auditor {
  border-left-color: var(--mb-color-warn);
}

.mb-turn--system {
  border-left-color: var(--mb-color-text-muted);
}

.mb-turn__role {
  font-weight: 600;
  font-size: 0.85rem;
}

.mb-turn__body {
  margin: 0;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

.mb-legend {
  display: flex;
  flex-wrap: wrap;
  gap: calc(var(--mb-space-unit) / 2);
  margin-bottom: var(--mb-space-unit);
}

.mb-legend__item {
  padding: 0 calc(var(--mb-space-unit) / 2);
  border: 1px dashed var(--mb-color-border);
  border-radius: var(--mb-radius-sm);
  color: var(--mb-color-text-muted);
  font-size: 0.8rem;
}

.mb-plan__body {
  max-height: 24rem;
  overflow: auto;
  padding: var(--mb-space-unit);
  border: 1px solid var(--mb-color-border);
  border-radius: var(--mb-radius-sm);
  background: var(--mb-color-surface-raised);
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

.mb-form {
  display: grid;
  gap: calc(var(--mb-space-unit) / 2);
  margin-top: var(--mb-space-unit);
  max-width: 100%;
}

.mb-form--filters {
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 10rem), 1fr));
  align-items: end;
}

.mb-inline-form {
  display: inline-flex;
  gap: calc(var(--mb-space-unit) / 2);
}

input,
select,
textarea,
button {
  font: inherit;
  max-width: 100%;
  min-width: 0;
  padding: calc(var(--mb-space-unit) / 2);
  border: 1px solid var(--mb-color-border);
  border-radius: var(--mb-radius-sm);
  background: var(--mb-color-surface-raised);
  color: inherit;
}

button {
  cursor: pointer;
}

.mb-form--danger button,
.mb-action {
  border-color: var(--mb-color-accent);
}

textarea {
  resize: vertical;
}

.mb-dropzone-active {
  outline: 2px dashed var(--mb-color-accent);
  outline-offset: 4px;
}

.mb-freshness,
.mb-state,
.mb-severity {
  padding: 0 calc(var(--mb-space-unit) / 2);
  border-radius: var(--mb-radius-sm);
  font-size: 0.75rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

.mb-freshness--fresh,
.mb-state--ok {
  background: var(--mb-color-ok);
  color: var(--mb-color-accent-contrast);
}

.mb-freshness--stale,
.mb-state--degraded {
  background: var(--mb-color-warn);
  color: var(--mb-color-accent-contrast);
}

.mb-freshness--unavailable,
.mb-state--down {
  background: var(--mb-color-danger);
  color: var(--mb-color-accent-contrast);
}

.mb-state--unknown {
  background: var(--mb-color-surface-raised);
  color: var(--mb-color-text-muted);
}

.mb-muted,
.mb-empty {
  color: var(--mb-color-text-muted);
}

.mb-footer {
  padding: calc(var(--mb-space-unit) * 2);
  border-top: 1px solid var(--mb-color-border);
  color: var(--mb-color-text-muted);
}

/* ----------------------------------------------------------- breakpoints - */

/* 1920×1080: four dense columns, wider gutters. */
@media (min-width: 1600px) {
  .mb-main {
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: calc(var(--mb-space-unit) * 3);
  }

  .mb-panel--task,
  .mb-panel--pipeline {
    grid-column: span 2;
  }
}

/* 1366×768: three columns, tighter rhythm so nothing is cut at 768px tall. */
@media (min-width: 1200px) and (max-width: 1599px) {
  .mb-main {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  .mb-panel--task {
    grid-column: span 2;
  }

  .mb-timeline,
  .mb-logs {
    max-height: 22rem;
  }

  .mb-transcript {
    max-height: 24rem;
  }
}

/* Tablet, landscape and portrait: two columns, then one. Nothing is hidden —
   panels stack and the page keeps scrolling. */
@media (max-width: 1199px) {
  .mb-main {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .mb-panel--task,
  .mb-panel--pipeline {
    grid-column: 1 / -1;
  }
}

@media (max-width: 820px) {
  .mb-main {
    grid-template-columns: minmax(0, 1fr);
    padding: var(--mb-space-unit);
  }

  .mb-panel {
    grid-column: 1 / -1;
  }

  .mb-timeline li,
  .mb-logs li {
    grid-template-columns: minmax(0, 1fr);
  }

  .mb-header {
    padding: var(--mb-space-unit);
  }
}

@media (prefers-reduced-motion: reduce) {
  * {
    animation: none !important;
    transition: none !important;
  }
}

/* --------------------------------------------------------------------------
 * Pantalla de ingreso
 *
 * La unica pagina que se sirve sin sesion. Hereda de `body` el fondo y la
 * tipografia, y de los selectores de formulario los campos, asi que aca solo
 * esta lo que esa pagina no comparte con ninguna otra: el encuadre.
 * -------------------------------------------------------------------------- */

.mb-login {
  width: min(24rem, calc(100% - var(--mb-space-unit) * 4));
  margin: 12vh auto;
  padding: calc(var(--mb-space-unit) * 3);
  background: var(--mb-color-surface);
  border: 1px solid var(--mb-color-border);
  border-radius: var(--mb-radius-md);
}

.mb-login h1 {
  margin: 0 0 calc(var(--mb-space-unit) * 2);
  font-size: 1.25rem;
  font-weight: 600;
}

.mb-login p {
  margin: 0 0 calc(var(--mb-space-unit) * 1.5);
}

.mb-login label {
  display: block;
  margin-bottom: calc(var(--mb-space-unit) / 2);
  color: var(--mb-color-text-muted);
  font-size: 0.9em;
}

.mb-login input {
  width: 100%;
}

.mb-login button {
  width: 100%;
  margin-top: calc(var(--mb-space-unit) / 2);
  padding: var(--mb-space-unit);
  background: var(--mb-color-accent);
  border-color: var(--mb-color-accent);
  color: var(--mb-color-accent-contrast);
  font-weight: 600;
}

/* Un rechazo se lee tanto como el formulario, y conviene que se lea distinto. */
.mb-login [role="alert"] {
  padding: var(--mb-space-unit);
  border: 1px solid var(--mb-color-danger);
  border-radius: var(--mb-radius-sm);
  color: var(--mb-color-danger);
}
