/* Editor · lienzo, avisos de importación, velo de carga y banda de escritura.
   Troceado de `compact_workspace.css` (lote C3). Carga en `head_extra` de
   editor/editor.html, ANTES del núcleo: ante una regla del núcleo con la misma
   especificidad, pierde. El orden entre módulos lo fija tests/css_manifest.py. */
/* =====================================================================
   LIENZO Y CAJA DE TEXTO: LOS DOS MODOS DE VISTA
   =====================================================================
   Como en Word, el editor tiene dos modos de vista y son estado del
   DOCUMENTO (se guardan con el zoom y el margen), no del tamaño de la
   ventana:

     · «Diseño de impresión» — folio A4 de 794px sobre lienzo gris, con
       sombra, borde de hoja, márgenes de papel y guías de cambio de página.
   El editor no pagina: no hay folio A4, ni guías de cambio de página, ni
   contador de páginas, ni modo de vista. Una sola columna continua, y el
   tamaño de lectura como única escala.

   Prefijo `[data-public-editor]`: analytics.css declara sus propias
   `.editor-document-card` / `.rich-editor-surface` SIN ámbito — un resto
   «compact» (min-height:calc(100vh - 205px), un suelo fijo que impedía que
   el lienzo encogiera para caber en la columna flex, de ahí el «se pierde
   el scroll de la página») y una regla de tarjeta de previsualización del
   admin (border-radius + sombra) — y se carga DESPUÉS de esta hoja, así que
   sin ámbito ganarían el empate por orden de carga.

   Nada de esto afecta a la impresión: el bloque @media print del final
   pagina A4 siempre, en cualquier modo, y sus declaraciones son
   `!important`, por encima de las de los dos modos. Ver allí.
   ===================================================================== */
[data-public-editor] .editor-document-card {
  /* Lienzo desplazable en los dos ejes: en modo impresión el folio mantiene
     su anchura A4, así que cuando la ventana es más estrecha hay que poder
     desplazarse en horizontal en vez de encoger la página.
     `align-items:safe center` centra la caja de texto mientras cabe y la
     pega al borde inicial cuando desborda (con `center` a secas el navegador
     recorta el lado izquierdo y lo deja inalcanzable al hacer scroll).
     `position:relative`: contexto de posicionamiento para la capa de guías
     de página (editor_pagination.js), que es un hermano absoluto del folio,
     nunca un hijo de .rich-editor-surface. */
  position:relative;
  flex:1 1 auto; min-height:0; width:100%; overflow:auto;
  display:flex; flex-direction:column; align-items:safe center;
  border:1px solid var(--insp-line); border-top:0; border-radius:0; box-shadow:none;
}
.editor-document-card .rich-editor-surface {
  /* Reclaim inheritance: analytics.css's own unscoped `.rich-editor-surface`
     rule sets `--editor-zoom: 1` directly on this element (0,1,0, wins by
     default since nothing here redeclared the variable), which silently
     froze the zoom slider — the sheet's own width/min-height/padding below,
     and .rich-editor-content's font-size, all read var(--editor-zoom) as
     cascaded AT this element, not the live value set by JS on the editor
     root. `unset` on a higher-specificity (0,2,0) rule discards that
     declaration and falls back to normal inheritance from the root. */
  --editor-zoom: unset;
  display:block; box-sizing:border-box; margin:0; overflow:visible;
  flex:0 0 auto;
  color:#1f3147;
  font-family:var(--ed-doc-font); font-size:16.5px; line-height:1.75;
}
.editor-document-card .rich-editor-content { max-width:none; width:100%; margin:0; }

/* Velo de importación: mientras el motor monta un documento largo el folio se
   queda en blanco, y un folio vacío y quieto no se distingue de uno roto. Se
   queda pegado arriba del lienzo (sticky, no fijo: el lienzo se desplaza) y no
   intercepta el puntero, porque no hay nada que pulsar en él. */
/* Aviso del formato tras importar un DOCX/ODT/PDF: informativo, no de error.
   Vive sobre el folio, en la columna del documento, y se cierra con el aspa. */
.editor-import-notice { display:flex; align-items:flex-start; gap:9px; max-width:var(--ed-doc-width, 860px); margin:0 auto 10px; padding:10px 13px; border:1px solid var(--ed-rail-line); border-left:3px solid var(--ed-accent); border-radius:10px; background:var(--ed-active-bg); color:var(--insp-ink); font-size:12.5px; line-height:1.5; }
.editor-import-notice[hidden] { display:none; }
.editor-import-notice > i, .editor-import-notice > svg { flex:0 0 auto; width:15px; height:15px; margin-top:2px; color:var(--ed-accent); }
.editor-import-notice > span { flex:1 1 auto; }
.editor-import-notice button { display:grid; place-items:center; flex:0 0 auto; width:24px; height:24px; padding:0; border:0; border-radius:7px; background:transparent; color:var(--insp-muted); cursor:pointer; }
.editor-import-notice button:hover { background:rgba(15,23,42,.06); color:var(--insp-ink); }
/* El aviso de que ESTE navegador no avisa. Mismo cuerpo que el de importacion
   —es la misma clase de mensaje— pero en ambar y no en azul: aquel informa de
   como quedo un documento y este avisa de que se puede perder. */
.editor-volatile-notice { border-left-color:#c55a11; background:#fdf6ee; }
.editor-volatile-notice > i, .editor-volatile-notice > svg { color:#c55a11; }
/* La salida, dentro del propio aviso: nombrar el riesgo sin darla no sirve. */
.editor-volatile-notice .editor-volatile-download { width:auto; height:auto; padding:5px 11px; border:1px solid #c55a11; border-radius:8px; background:var(--bg-card); color:#8a5a00; font:600 12px var(--font-heading, inherit); }
.editor-volatile-notice .editor-volatile-download:hover { background:#c55a11; color:var(--text-inverse); }
.editor-import-notice button svg { width:14px; height:14px; }

.editor-doc-veil { position:sticky; top:0; z-index:30; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:6px; width:100%; min-height:180px; padding:34px 20px; color:var(--insp-ink); background:var(--editor-canvas); pointer-events:none; text-align:center; }
.editor-doc-veil[hidden] { display:none; }
.editor-doc-veil strong { font:700 14px var(--font-heading, inherit); }
.editor-doc-veil small { color:var(--insp-muted); font-size:12px; }
.editor-doc-veil-spinner { width:26px; height:26px; border:2.5px solid var(--insp-line); border-top-color:var(--ed-accent); border-radius:50%; animation:editor-doc-veil-spin .9s linear infinite; }
@keyframes editor-doc-veil-spin { to { transform:rotate(360deg); } }
/* El giro es adorno; con movimiento reducido basta con que el velo esté. */
@media (prefers-reduced-motion: reduce) {
  .editor-doc-veil-spinner { animation:none; border-top-color:var(--insp-line); }
}

/* ---- el folio: una columna continua de lectura ----
   No hay páginas ni papel: el editor se centra en el texto. La medida se
   expresa en `ch` y no en píxeles, de modo que al cambiar el tamaño de lectura
   la línea conserva sus caracteres en vez de encogerse — con una anchura fija
   en píxeles, agrandar la letra estrechaba la medida, que es lo contrario de
   lo que uno quiere al agrandar para leer mejor.
   `--editor-zoom` ya no escala una hoja: es el tamaño de lectura, y solo entra
   en el cuerpo del texto (ver .rich-editor-content).
   El lienzo va tintado y la banda de escritura, blanca. No es el folio de
   vuelta: la banda no tiene sombra, ni borde, ni canto superior o inferior, ni
   esquinas — es una franja sin principio ni fin, no una hoja. Lo que aporta es
   el canto IZQUIERDO y el DERECHO, que es justo donde la zona de edición se
   confundía con los carriles.
   El canalón tintado es corto y casi fijo (12–28px) a propósito: su trabajo es
   marcar la frontera, no robar medida. Con `5vw`, a 1300px y con los dos
   carriles abiertos se comía 115px de columna de lectura. */
[data-public-editor] {
  --ed-band-pad:clamp(18px, 2.6vw, 40px);
  --ed-canvas-gutter:clamp(12px, 1.6vw, 28px);
}
[data-public-editor] .editor-document-card {
  padding:0 var(--ed-canvas-gutter) 0;
  background:var(--editor-canvas);
  border-color:#cdd9e8;
}
[data-public-editor] .rich-editor-surface {
  width:100%;
  /* La medida se conserva intacta: el relleno de la banda se suma al `ch`, no
     se le resta. */
  max-width:calc(var(--editor-measure, 68ch) + 2 * var(--ed-band-pad));
  min-height:100%;
  padding:34px var(--ed-band-pad) 110px;
  background:var(--bg-card); border:0; box-shadow:none;
}
/* En móvil los carriles son cajones que se abren encima: no hay vecino del que
   separarse, y el canalón solo gastaría ancho de lectura. Se queda en un filo. */
@media screen and (max-width: 768px) {
  [data-public-editor] { --ed-canvas-gutter:8px; --ed-band-pad:14px; }
}
