/* =============================================================================
   docs.css — area de documentacion de Botize (/<ln>/api2, /<ln>/help2)

   ALCANCE: solo lo que va DENTRO de .dlayout. La cabecera y el pie son los del
   sitio (header/main_v2 + footer/main) y aqui no se tocan: nada de reglas sobre
   body, header, footer ni selectores de elemento sueltos. Por eso tampoco hay
   modo oscuro — el resto de botize.com no lo tiene y quedaria a medias.

   Se carga LA ULTIMA, despues de Materialize, para ganar los empates de
   especificidad (ul:not(.browser-default) vs .dmain ul, etc.).

   Sin JavaScript en esta parte:
     - grupos plegables -> <details>/<summary> nativos
     - enlace activo    -> UNA regla que inyecta el skeleton con ((global.page))
     - columnas fijas   -> position:sticky
   El menu movil NO vive aqui: a <=992px la columna se oculta y el contenido pasa
   a la hamburguesa del sitio (que sigue siendo el sidenav de Materialize).

   Prefijo `d` (docs) en todo para no colisionar con site_main.css / layout.css.
   ============================================================================= */

/* --- tokens ---------------------------------------------------------------- */
:root {
  --d-bg:      #ffffff;
  --d-fg:      #0d0d0d;
  --d-mut:     #6b6b76;
  --d-bor:     #e7e7e9;
  --d-bor-str: #d4d4d8;
  --d-soft:    #f7f7f8;
  --d-act:     #ededf0;
  --d-code-bg: #f7f7f8;

  --d-side-w:  272px;
  --d-toc-w:   216px;
  --d-read:    46rem;      /* medida de lectura del cuerpo */
  --d-max:     1520px;

  --d-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --d-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;

  --d-r:    8px;
  --d-r-sm: 6px;
}

/* =============================================================================
   Rejilla: menu | contenido | indice
   ============================================================================= */
.dlayout {
  display: grid;
  grid-template-columns: var(--d-side-w) minmax(0, 1fr) var(--d-toc-w);

  /* `body` es un grid en layout.css (grid-template-rows: auto 1fr auto). En un
     grid item, `margin:0 auto` ANULA el stretch y lo encoge a fit-content: sin
     este width:100% el layout sale estrecho y descolocado a la derecha. */
  width: 100%;
  max-width: var(--d-max);
  margin: 0 auto;

  /* align-items en su valor por defecto (stretch) A PROPOSITO: la columna
     izquierda ocupa todo el alto de la fila, asi su borde derecho llega hasta
     abajo aunque el menu sea mas corto que el contenido. */

  /* La tipografia del area de docs se declara aqui, no en body: asi la cabecera
     y el pie del sitio conservan la suya (Roboto de Materialize). */
  font-family: var(--d-sans);
  font-size: 15.5px;
  line-height: 1.65;
  color: var(--d-fg);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

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

/* Sin columna derecha (paginas sin indice). */
.dlayout.is-2col { grid-template-columns: var(--d-side-w) minmax(0, 1fr); }

/* =============================================================================
   Menu lateral
   ============================================================================= */
/* Sin alto fijo, sin scroll propio y sin sticky: el menu ocupa lo que necesite y
   se desplaza con la pagina. Es lo que se pidio explicitamente — una barra con su
   propio scroll dentro de la pagina resulta incomoda, y con 37 entradas en la API
   fijarla con sticky recortaria el final del listado. */
.dside {
  padding: 26px 14px 60px 20px;
  border-right: 1px solid var(--d-bor);
}

.dside ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

.dside li { margin: 0; }

.dside a {
  display: block;
  padding: 5px 10px;
  margin: 1px 0;
  border-radius: var(--d-r-sm);
  font-size: 13.5px;
  line-height: 1.45;
  color: var(--d-mut);
  text-decoration: none;
}

.dside a:hover { background: var(--d-soft); color: var(--d-fg); }

/* Grupo plegable. <details> nativo: el usuario lo colapsa sin una linea de JS.
   Se emiten siempre `open` a proposito: CSS no puede forzar la apertura, asi que
   un grupo colapsado esconderia el enlace activo. */
.dgrp { margin: 0 0 6px; }

.dgrp > summary {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 6px 10px;
  margin: 10px 0 2px;
  border-radius: var(--d-r-sm);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: var(--d-mut);
  cursor: pointer;
  list-style: none;
  user-select: none;
}

/* Quita el triangulo por defecto en ambos motores; ponemos el nuestro. */
.dgrp > summary::-webkit-details-marker { display: none; }
.dgrp > summary::marker { content: ""; }

.dgrp > summary::before {
  content: "";
  flex: none;
  width: 0; height: 0;
  border-left: 4px solid currentColor;
  border-top: 3.5px solid transparent;
  border-bottom: 3.5px solid transparent;
  transition: transform .15s ease;
  opacity: .65;
}

.dgrp[open] > summary::before { transform: rotate(90deg); }
.dgrp > summary:hover { background: var(--d-soft); color: var(--d-fg); }

/* Item anidado (subapartado de una pagina). */
.dside a.is-sub {
  padding-left: 22px;
  font-size: 13px;
  border-left: 1px solid var(--d-bor);
  border-radius: 0 var(--d-r-sm) var(--d-r-sm) 0;
  margin-left: 10px;
}

/* =============================================================================
   Contenido
   ============================================================================= */
.dmain {
  min-width: 0;
  padding: 34px 44px 96px;
}

.dmain > .darticle { max-width: var(--d-read); }

.dcrumb {
  font-size: 13px;
  color: var(--d-mut);
  margin: 0 0 14px;
}

.dcrumb a { color: var(--d-mut); text-decoration: none; }
.dcrumb a:hover { text-decoration: underline; color: var(--d-fg); }
.dcrumb span { opacity: .55; margin: 0 5px; }

/* --- tipografia del cuerpo (aplica tambien al HTML heredado de section/api) -- */
.dmain h1 {
  font-size: 2.1rem;
  line-height: 1.18;
  font-weight: 700;
  letter-spacing: -.018em;
  margin: 0 0 .55em;
  color: var(--d-fg);
}

.dmain h2 {
  font-size: 1.35rem;
  line-height: 1.3;
  font-weight: 650;
  letter-spacing: -.012em;
  margin: 2.1em 0 .6em;
  padding-top: .35em;
  color: var(--d-fg);
  scroll-margin-top: 16px;
}

/* h2 pegado al h1 (patron habitual en section/api: titulo + "Purpose"). */
.dmain h1 + h2 { margin-top: 1em; }

.dmain h3 {
  font-size: 1.06rem;
  line-height: 1.4;
  font-weight: 600;
  margin: 1.7em 0 .5em;
  color: var(--d-fg);
  scroll-margin-top: 16px;
}

.dmain h4, .dmain h5, .dmain h6 {
  font-size: 1rem;
  font-weight: 600;
  line-height: 1.4;
  margin: 1.5em 0 .45em;
  color: var(--d-fg);
}

.dmain p { margin: 0 0 1.05em; line-height: 1.7; }

.dmain a {
  color: var(--d-fg);
  text-decoration: underline;
  text-underline-offset: .18em;
  text-decoration-thickness: 1px;
  text-decoration-color: var(--d-bor-str);
}

.dmain a:hover { text-decoration-color: currentColor; }

.dmain ul, .dmain ol { margin: 0 0 1.05em; padding-left: 1.4em; }
.dmain li { margin: .3em 0; line-height: 1.7; }
.dmain ul { list-style: disc; }
.dmain ul ul { list-style: circle; margin: .35em 0; }
.dmain ol { list-style: decimal; }

.dmain code {
  font-family: var(--d-mono);
  font-size: .875em;
  background: var(--d-code-bg);
  border: 1px solid var(--d-bor);
  border-radius: 5px;
  padding: .1em .35em;
}

.dmain pre {
  font-family: var(--d-mono);
  font-size: 13px;
  line-height: 1.6;
  background: var(--d-code-bg);
  border: 1px solid var(--d-bor);
  border-radius: var(--d-r);
  padding: 14px 16px;
  margin: 0 0 1.3em;
  overflow-x: auto;
  white-space: pre;
  tab-size: 2;
}

.dmain pre code { background: none; border: 0; padding: 0; font-size: inherit; }
.dmain pre b { font-weight: 600; }

.dmain blockquote {
  margin: 0 0 1.2em;
  padding: 2px 0 2px 16px;
  border-left: 2px solid var(--d-bor-str);
  border-right: 0;
  color: var(--d-mut);
}

.dmain table {
  width: 100%;
  border-collapse: collapse;
  font-size: 14px;
  margin: 0 0 1.4em;
}

.dmain th, .dmain td {
  text-align: left;
  padding: 9px 12px;
  border-bottom: 1px solid var(--d-bor);
  vertical-align: top;
}

.dmain th { font-weight: 600; font-size: 12.5px; color: var(--d-mut); }

.dmain hr { border: 0; border-top: 1px solid var(--d-bor); margin: 2.2em 0; }

.dmain img { max-width: 100%; height: auto; }

/* --- convivencia con el HTML heredado de section/api -----------------------
   Esas paginas maquetan con <div class="reg"> y con <br> sueltos ENTRE bloques
   (herencia del editor viejo). No tocamos el contenido: lo neutralizamos aqui.
   Solo se ocultan los <br> que cuelgan directos del envoltorio; los que van
   dentro de un parrafo o de .text son saltos de linea reales y se respetan. */
.dmain .reg { margin: 0 0 4px; }
.dmain .text { display: block; }
.dmain .text_big_description { font-size: 1.05rem; color: var(--d-mut); }

.dmain > .darticle > article > br,
.dmain #contenido > br,
.dmain [class^="t_api"] > br { display: none; }

/* layout.css le pone `article { padding: 24px }` (16px en movil) pensando en el
   layout viejo de app/aside. Las paginas de section/api empiezan por <article>,
   asi que su texto quedaba metido hacia dentro respecto a la miga de pan y, en
   movil, con el ancho util reducido. */
.dmain article { padding: 0; flex: none; }

/* botize_sheet.css: `#contenido .reg .text li { margin: 0 0 10px 40px; font-family: Arial }`.
   Especificidad (1,2,1): `.dmain li` no le gana, hay que bajar con el id delante.
   Ese margen de 40px era el escalon raro de las listas en movil. */
.dmain #contenido .reg .text li {
  margin: .3em 0;
  font-family: inherit;
  line-height: 1.7;
}

/* Tablas anchas o <pre> largos nunca desbordan la pagina. */
.dmain .dscroll { overflow-x: auto; }

/* --- FAQ del centro de ayuda ------------------------------------------------ */
.dfaq {
  border-top: 1px solid var(--d-bor);
  padding: 20px 0 4px;
}

.dfaq:first-of-type { border-top: 0; }

.dmain .dfaq h2 {
  margin: 0 0 .5em;
  padding-top: 0;
  font-size: 1.12rem;
  font-weight: 600;
}

.dfaq h2 a { text-decoration: none; }
.dfaq h2 a:hover { text-decoration: underline; }

/* --- rejilla de tarjetas (indice del centro de ayuda) -----------------------
   Selector con .dmain delante: si no, `.dmain ul{list-style:disc}` gana por
   especificidad y salen viñetas dentro de las tarjetas. */
.dmain .dcards,
.dcards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(228px, 1fr));
  gap: 12px;
  margin: 26px 0 22px;
  padding: 0;
  list-style: none;
}

.dcards li { margin: 0; }

.dcards a {
  display: block;
  height: 100%;
  padding: 16px 18px;
  border: 1px solid var(--d-bor);
  border-radius: var(--d-r);
  text-decoration: none;
  font-weight: 500;
  font-size: 14.5px;
  line-height: 1.4;
  color: var(--d-fg);
}

.dcards a:hover { border-color: var(--d-bor-str); background: var(--d-soft); text-decoration: none; }
.dcards small { display: block; margin-top: 5px; font-weight: 400; color: var(--d-mut); font-size: 13px; }

/* --- paginador anterior / siguiente ----------------------------------------- */
.dpager {
  display: flex;
  gap: 12px;
  margin: 56px 0 0;
  padding-top: 26px;
  border-top: 1px solid var(--d-bor);
  max-width: var(--d-read);
}

.dpager a {
  flex: 1 1 0;
  min-width: 0;
  padding: 13px 16px;
  border: 1px solid var(--d-bor);
  border-radius: var(--d-r);
  text-decoration: none;
  font-size: 14.5px;
  font-weight: 500;
  line-height: 1.35;
  color: var(--d-fg);
}

.dpager a:hover { border-color: var(--d-bor-str); background: var(--d-soft); }
.dpager a.is-next { text-align: right; }
.dpager small { display: block; font-weight: 400; font-size: 12.5px; color: var(--d-mut); margin-bottom: 3px; }

/* =============================================================================
   Indice de la pagina (columna derecha)
   ============================================================================= */
/* El indice si se queda fijo -es su razon de ser- pero tampoco lleva scroll
   propio: la seccion mas larga del centro de ayuda tiene 10 entradas y cabe
   sobrada. `align-self:start` porque el grid estira por defecto. */
.dtoc {
  position: sticky;
  top: 0;
  align-self: start;
  padding: 40px 20px 60px 4px;
  font-size: 13px;
}

.dtoc__title {
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: .05em;
  text-transform: uppercase;
  color: var(--d-mut);
  margin: 0 0 8px;
  padding-left: 10px;
}

.dtoc ul { margin: 0; padding: 0; list-style: none; }
.dtoc li { margin: 0; }

.dtoc a {
  display: block;
  padding: 4px 10px;
  border-left: 1px solid var(--d-bor);
  color: var(--d-mut);
  text-decoration: none;
  line-height: 1.45;
}

.dtoc a:hover { color: var(--d-fg); border-left-color: var(--d-bor-str); }
.dtoc a.is-sub { padding-left: 22px; }

/* =============================================================================
   Responsive
   ============================================================================= */

/* OJO con la especificidad: las media queries NO la aumentan, y `.dlayout.is-2col`
   son dos clases. Sin repetir el selector, `.is-2col` ganaba a estas reglas y en
   movil el contenido se quedaba dentro de la columna de 272px del menu (que ya
   estaba en display:none) -> franja muerta a la derecha. */

/* <=1240px: cae el indice derecho. */
@media (max-width: 1240px) {
  .dlayout,
  .dlayout.is-2col { grid-template-columns: var(--d-side-w) minmax(0, 1fr); }
  .dtoc { display: none; }
}

/* <=992px: mismo corte que Materialize (hide-on-med-and-down / hamburguesa).
   La columna izquierda desaparece y su contenido ya vive dentro del sidenav
   del sitio, al que el skeleton le pasa la version plana del menu. */
@media (max-width: 992px) {
  .dlayout,
  .dlayout.is-2col { grid-template-columns: minmax(0, 1fr); }
  .dside { display: none; }
  .dmain { padding: 26px 22px 72px; }
}

@media (max-width: 640px) {
  .dlayout { font-size: 15px; }
  .dmain { padding: 22px 18px 64px; }
  .dmain h1 { font-size: 1.75rem; }
  .dmain h2 { font-size: 1.2rem; }
  .dpager { flex-direction: column; }
  .dpager a.is-next { text-align: left; }
}

/* Foco visible dentro del area de documentacion. */
.dlayout a:focus-visible,
.dlayout summary:focus-visible {
  outline: 2px solid var(--d-fg);
  outline-offset: 2px;
  border-radius: var(--d-r-sm);
}

@media print {
  .dside, .dtoc, .dpager { display: none !important; }
  .dlayout { display: block; }
  .dmain { padding: 0; }
}
