/* Editor de R do Laboratório (editor_r.js): desenho colorido atrás do textarea, números de linha, sugestões e dica.
   O texto colorido e o texto do textarea precisam ocupar exatamente o mesmo lugar: mesma fonte, tamanho, altura de linha,
   recuo e tabulação, sem negrito nem itálico nas cores (em fonte de reserva, a largura das letras mudaria).
   Contraste de cada cor sobre o fundo do editor (#fbfcfb), calculado pela fórmula da WCAG 2 (13/11/2026, identidade nova):
   tinta 14,5:1; comentário 6,2:1; texto entre aspas 6,3:1; número 6,3:1; palavra e constante 6,2:1;
   função do pacote 8,2:1; outra função 7,1:1; operador 6,2:1; número de linha sobre a calha (#f1f3f6) 5,7:1.
   Sobre o trecho selecionado (#d3dfea), a menor é 4,7:1 (operador). No contraste alto do site, todas passam de 9:1 sobre branco. */
.lab-editor{
  --lab-ed-fonte:13.5px;--lab-ed-linha:21px;--lab-ed-pad-v:12px;--lab-ed-pad-h:14px;
  --lab-ed-fundo:#fbfcfb;--lab-ed-tinta:#212830;--lab-ed-com:#59606a;--lab-ed-txt:#1c6b4a;--lab-ed-num:#a3336a;--lab-ed-pal:#7a5a12;
  --lab-ed-mp:#1d4e89;--lab-ed-fn:#0a5f6e;--lab-ed-op:#a3401f;--lab-ed-linhas:#59606a;--lab-ed-calha:#f1f3f6;
  position:relative;display:flex;align-items:stretch;min-width:0;border:1px solid var(--lab-borda,#d0d6de);border-radius:6px;background:var(--lab-ed-fundo)}
.lab-editor:focus-within{outline:2px solid #4570aa;outline-offset:1px}

/* mesma medida de letra nas três camadas */
.lab-editor-linhas,.lab-editor-cores,.lab-editor .lab-codigo{font-family:var(--lab-mono);font-size:var(--lab-ed-fonte);line-height:var(--lab-ed-linha);
  font-weight:400;font-style:normal;letter-spacing:0;word-spacing:0;font-kerning:none;font-variant-ligatures:none;font-feature-settings:"liga" 0,"calt" 0;
  text-transform:none;text-indent:0;tab-size:2;-moz-tab-size:2}

/* números de linha: rolam junto com o código */
.lab-editor-linhas{flex:none;position:relative;overflow:hidden;box-sizing:content-box;width:calc(var(--lab-ed-digitos,2) * 1ch);
  padding:var(--lab-ed-pad-v) 8px var(--lab-ed-pad-v) 10px;background:var(--lab-ed-calha);border-right:1px solid #e2e6eb;border-radius:5px 0 0 5px;
  color:var(--lab-ed-linhas);text-align:right;user-select:none;-webkit-user-select:none}
/* fora do fluxo: a altura da calha é a do textarea, não a da lista de números */
.lab-editor-numeros{position:absolute;top:var(--lab-ed-pad-v);right:8px;margin:0;padding:0;border:0;background:none;font:inherit;color:inherit;
  white-space:pre;overflow:visible;overflow-wrap:normal}

/* área do código: o desenho fica atrás e o textarea, transparente, por cima */
.lab-editor-area{position:relative;flex:1 1 auto;min-width:0}
.lab-editor-fundo{position:absolute;inset:0;overflow:hidden;pointer-events:none;border-radius:0 5px 5px 0}
.lab-editor-cores{position:absolute;top:0;left:0;margin:0;box-sizing:border-box;padding:var(--lab-ed-pad-v) var(--lab-ed-pad-h);border:0;background:none;
  color:var(--lab-ed-tinta);white-space:pre;overflow:visible;overflow-wrap:normal;word-break:normal}
.lab-editor .lab-codigo{position:relative;display:block;width:100%;box-sizing:border-box;margin:0;min-height:340px;resize:vertical;
  padding:var(--lab-ed-pad-v) var(--lab-ed-pad-h);border:0;border-radius:0 5px 5px 0;background:transparent;color:transparent;
  caret-color:var(--lab-ed-tinta);white-space:pre;overflow:auto;overflow-wrap:normal;word-break:normal}
.lab-editor .lab-codigo:focus,.lab-editor .lab-codigo:focus-visible{outline:none;border:0;background:transparent}
.lab-editor .lab-codigo::selection{background:rgba(29,90,158,.18);color:transparent}

.lab-editor .r-com{color:var(--lab-ed-com)}
.lab-editor .r-txt{color:var(--lab-ed-txt)}
.lab-editor .r-num{color:var(--lab-ed-num)}
.lab-editor .r-pal{color:var(--lab-ed-pal)}
.lab-editor .r-mp{color:var(--lab-ed-mp)}
.lab-editor .r-fn{color:var(--lab-ed-fn)}
.lab-editor .r-op{color:var(--lab-ed-op)}

/* sugestões */
.lab-sug-caixa{position:absolute;z-index:40;left:0;top:0;width:max-content;min-width:min(240px,100%);max-width:min(560px,100%);box-sizing:border-box;
  background:#fff;border:1px solid #b9c1cc;border-radius:6px;box-shadow:0 8px 24px rgba(20,35,59,.16);overflow:hidden}
.lab-sug-caixa[hidden]{display:none}
.lab-sug-lista{position:relative;max-height:min(16.5em,45vh);overflow-y:auto;padding:3px 0;font-size:13px;line-height:1.35}
.lab-sug{display:flex;align-items:baseline;gap:10px;min-height:26px;box-sizing:border-box;padding:4px 10px;cursor:pointer;white-space:nowrap}
.lab-sug[aria-selected="true"]{background:#e5ecf6;box-shadow:inset 3px 0 0 #1d4e89}
.lab-sug-nome{flex:none;font-family:var(--lab-mono);color:#212830}
.lab-sug-pacote{color:#1d4e89}
.lab-sug-argumento{color:#7a5a12}
.lab-sug-valor{color:#1c6b4a}
.lab-sug-rotulo{min-width:0;overflow:hidden;text-overflow:ellipsis;font-size:12.5px;color:#525a65}
.lab-sug-nota{margin:0;max-height:6.3em;overflow:auto;padding:6px 10px 7px;border-top:1px solid #e4e7eb;background:#f6f8f7;color:#363f4a;
  font-size:12.3px;line-height:1.45;white-space:normal;overflow-wrap:anywhere}
.lab-sug-nota[hidden]{display:none}
.lab-editor-anuncio{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}

/* dica de assinatura, logo abaixo do editor */
.lab-assinatura{margin:6px 0 0;min-height:1.5em;font-size:12.8px;line-height:1.5;color:#525a65;overflow-wrap:anywhere}
.lab-assinatura-codigo{margin-right:8px;padding:0;background:none;border-radius:0;font-family:var(--lab-mono);font-size:12.3px;color:#525a65;overflow-wrap:anywhere}
.lab-assinatura-atual{color:#212830;font-weight:700;text-decoration:underline;text-decoration-color:#4570aa;text-underline-offset:3px}

@media (max-width:700px){
  .lab-editor{--lab-ed-fonte:16px;--lab-ed-linha:24px;--lab-ed-pad-h:10px}   /* 16px evita o zoom automático do Safari ao focar */
  .lab-editor .lab-codigo{min-height:280px}
  .lab-editor-linhas{padding-left:6px;padding-right:6px}
  .lab-editor-numeros{right:6px}
}

/* contraste alto do site: fundo branco e cores mais escuras (todas acima de 9:1) */
html[data-contraste-alto] .lab-editor{--lab-ed-fundo:#fff;--lab-ed-tinta:#000;--lab-ed-com:#3f464e;--lab-ed-txt:#0f4a32;--lab-ed-num:#7d1f4d;
  --lab-ed-pal:#543d05;--lab-ed-mp:#123a6b;--lab-ed-fn:#074b57;--lab-ed-op:#7a2c12;--lab-ed-linhas:#3f464e;--lab-ed-calha:#fff;border-color:#000}
html[data-contraste-alto] .lab-sug-caixa{border:2px solid #000}
html[data-contraste-alto] .lab-sug-rotulo,html[data-contraste-alto] .lab-assinatura,html[data-contraste-alto] .lab-assinatura-codigo{color:#000}

/* cores forçadas do sistema (alto contraste do Windows): o texto do próprio textarea volta a aparecer e o desenho sai */
@media (forced-colors: active){
  .lab-editor-fundo{display:none}
  .lab-editor .lab-codigo{color:CanvasText;caret-color:CanvasText}
  .lab-editor .lab-codigo::selection{color:HighlightText;background:Highlight}
  .lab-sug[aria-selected="true"]{outline:2px solid Highlight;outline-offset:-2px}
}
/* a lista e a dica não têm animação; quem pede menos movimento não perde nada */
@media (prefers-reduced-motion: reduce){.lab-sug-lista{scroll-behavior:auto}}
