/* ==========================================================================
   Python Básico — identidade visual
   ==========================================================================
   Criada em 2026-08-18. Antes disto o livro tinha 57 linhas de CSS puramente
   funcionais (justificação e as setas da bibliografia) contra 468 do
   `mathwpython` e 217 do `deeplearning`: era o único dos três sem identidade.

   A ALMA: O CÓDIGO É A IMAGEM
   ---------------------------
   O `deeplearning` ficou com pixel art 8-bit (verde fósforo + âmbar); o
   `mathwpython`, com ilustração sem texto (ardósia fria + magenta). As duas
   poderiam pertencer a qualquer livro técnico. "O programa e o que ele faz" só
   pode pertencer a um livro DE PROGRAMAÇÃO — e é o que este livro é.

   Daí as duas cores: o azul #306998 e o amarelo #FFD43B são os do próprio
   Python. Nenhuma delas foi escolhida por gosto; são a marca da linguagem que
   o livro ensina, e por isso não brigam com o assunto.

   O QUE ESTA FOLHA E AS ABERTURAS COMPARTILHAM
   --------------------------------------------
   `--py-papel` e `--py-codigo-bg` são LITERALMENTE as cores que o
   `_static/gerar-aberturas.py` usa para desenhar. Não é coincidência
   arrumada: é o que faz a abertura assentar NA página em vez de flutuar sobre
   ela. Mexer numa das duas pontas sem a outra devolve o retângulo estranho que
   o `mathwpython` já teve.

   E a FAIXA AZUL é a assinatura. Ela aparece na borda esquerda de cada
   abertura e na borda esquerda de cada um dos 337 blocos de código. É o mesmo
   gesto na figura e no texto — o que faz o livro se reconhecer de longe.

   POR QUE NADA AQUI USA IRMÃO ADJACENTE
   -------------------------------------
   O `mathwpython` cola código e saída com `div.highlight-python + div
   .highlight-text`. Aqui isso NÃO funcionaria, por dois motivos medidos:

     1. O executor embutido injeta `<div class="rodar">` logo depois de cada
        bloco, em tempo de execução. O `rodar.js` documenta isso e oferece a
        chave `data-rodar-apos-saida="1"` para contornar — que este livro não
        liga. Qualquer `+` meu funcionaria no build e quebraria no navegador.
     2. O par aqui não é adjacente de qualquer forma. Medido no build: em
        **246** das 251 ocorrências o padrão é
        `bloco python → <p><strong>Saída do Código</strong></p> → bloco`.
        O rótulo é conteúdo que o autor escreveu; colar os blocos brigaria
        com ele.

   Então o pareamento aqui é por COR E FORMA, não por adjacência: o programa
   tem espinha azul, a saída tem traço tracejado e fundo recuado. Funciona com
   ou sem o executor, com ou sem rótulo no meio.
   ========================================================================== */

/* --------------------------------------------------------------------------
   Paleta
   --------------------------------------------------------------------------
   `--py-azul` e `--py-amarelo` mudam entre os temas por necessidade, não por
   estilo: #306998 sobre ardósia escura fica ilegível, e #FFD43B sobre papel
   claro também. As duas variantes são a MESMA cor da marca, ajustada para
   sobreviver ao fundo. Quem mexer aqui precisa mexer no `PALETAS` do
   `_static/gerar-aberturas.py`, que carrega os mesmos valores.
   -------------------------------------------------------------------------- */
:root {
  --py-papel:      #FAF6EE;   /* = "papel" light do gerador de aberturas */
  --py-tinta:      #1F2933;
  --py-fraco:      #8A9199;
  --py-linha:      #E4DCCC;
  --py-azul:       #306998;   /* azul oficial do Python */
  --py-amarelo:    #B08A08;   /* o #FFD43B não lê sobre papel claro */
  --py-string:     #8C601E;
  --py-codigo-bg:  #F4EEE2;   /* = "painel" light do gerador */
  --py-saida-bg:   #EFE8DA;
  --py-saida:      #46525E;
  --py-selo:       rgba(31, 41, 51, 0.05);
}

html[data-theme="dark"] {
  --py-papel:      #12171E;   /* = "papel" dark do gerador de aberturas */
  --py-tinta:      #DEE7F0;
  --py-fraco:      #6C7785;
  --py-linha:      #2A3440;
  --py-azul:       #6FA8DC;
  --py-amarelo:    #FFD43B;   /* o amarelo oficial, que só o escuro comporta */
  --py-string:     #E2B26A;
  --py-codigo-bg:  #171D25;   /* = "painel" dark do gerador */
  --py-saida-bg:   #0F141A;
  --py-saida:      #A9B7C6;
  --py-selo:       rgba(222, 231, 240, 0.05);
}

/* A especificidade abaixo é obrigatória, não estilo. O tema declara estas
   variáveis DENTRO de `html[data-theme=light|dark]` (0,1,1); um `:root`
   sozinho (0,1,0) perde e a mudança não aparece. Os três seletores empatam e
   vencem pela ordem, porque o custom.css carrega depois — e o `:root` ainda
   cobre o instante antes de o JS do tema cravar o data-theme. */
:root,
html[data-theme="light"],
html[data-theme="dark"] {
  --pst-color-primary:      var(--py-azul);
  --pst-color-link:         var(--py-azul);
  --pst-color-link-hover:   var(--py-amarelo);
  --pst-color-accent:       var(--py-azul);
  --pst-color-background:   var(--py-papel);
  --pst-color-on-background: var(--py-papel);
  --pst-color-surface:      var(--py-codigo-bg);

  /* O tema pinta código em linha de magenta — uma cor que não existe em lugar
     nenhum deste livro. Volta a ser tinta: quem separa código de prosa é a
     fonte monoespaçada, não a cor. */
  --pst-color-inline-code: var(--py-tinta);
}

/* `--pst-color-on-background` sozinho não alcança estes três; o mesmo que os
   outros dois livros descobriram. Uma regra serve aos dois temas porque
   `--py-papel` já é sensível ao tema. */
html .bd-header,
html .bd-sidebar-primary,
html .bd-sidebar-secondary {
  background-color: var(--py-papel);
}

/* --------------------------------------------------------------------------
   0. Tamanho do texto e medida de linha
   --------------------------------------------------------------------------
   Medido em produção, antes: corpo de **16 px** e **103 caracteres por linha**.
   Os dois valores estão fora do que se usa para leitura longa. 16 px é o padrão
   do navegador, dimensionado para interface, não para texto corrido; livro
   costuma ficar entre 18 e 20. E 103 caracteres é quase o dobro do confortável
   (65 a 75): ao voltar para a margem esquerda o olho perde a linha, e com texto
   justificado, que este livro usa, piora.

   Os dois juntos explicam por que o autor sempre aumentava o zoom.

   POR QUE `112.5%` E NÃO `18px`: a porcentagem é relativa ao tamanho que a
   pessoa configurou no navegador. Quem aumentou a fonte padrão por baixa visão
   continua sendo respeitado, e ainda ganha a proporção. Cravar `18px` apagaria
   essa escolha.

   POR QUE A MEDIDA É LIMITADA NO PARÁGRAFO, E NÃO NO CONTÊINER: o caminho
   óbvio seria estreitar `.bd-article-container`, e é o que o `mathwpython`
   tenta. Duas razões para não fazer isso aqui:

     1. NÃO FUNCIONA COMO ESTÁ LÁ. A regra do tema é
        `.bd-main .bd-content .bd-article-container`, especificidade (0,3,0),
        contra `.bd-article-container` (0,1,0) do custom. Três classes contra
        uma: a ordem de carregamento não salva. Medido no `mathwpython` em
        produção, o `max-width: 82ch` dele nunca pegou, e o livro serve os
        mesmos 103 caracteres.
     2. ENCOLHERIA AS ABERTURAS. Elas são arte de terminal de 157 colunas numa
        faixa de 1600 px. Num contêiner de 620 px cada caractere teria 4 px e a
        figura viraria borrão. O mesmo vale para bloco de código largo e tabela.

   Então o texto corrido ganha medida curta e o resto do capítulo continua com a
   largura toda. Se um dia for preciso mexer no contêiner, o seletor tem de
   repetir as três classes do tema.
   -------------------------------------------------------------------------- */
/* Este é o PADRÃO. Quem tiver escolhido outro tamanho no controle A-/A+ do
   cabeçalho recebe o seu, aplicado como estilo em linha por
   `_static/tamanho-texto.js` — e estilo em linha vence a folha. A regra aqui
   continua importando para quem está sem JavaScript. */
html {
  font-size: 112.5%;
}

/* Os dois botões de tamanho, ao lado do seletor de tema. */
.btn-tamanho-texto {
  padding: 0.15rem 0.4rem;
  line-height: 1;
  color: var(--py-fraco);
}

.btn-tamanho-texto:hover:not(:disabled) {
  color: var(--py-azul);
}

.btn-tamanho-texto:disabled {
  opacity: 0.35;
  cursor: default;
}

/* 65ch, e não 70: a unidade `ch` é a largura do algarismo zero, que numa fonte
   proporcional é mais larga que a letra média. Medido nesta página, `70ch` deu
   **81** caracteres reais por linha, ainda acima da faixa confortável. `65ch`
   dá ~75, que é o topo dessa faixa — escolhido no topo, e não no meio, porque o
   português tem palavras longas e uma medida curta demais deixa buracos no
   texto justificado. */
/* A MEDIDA, EM `rem` E NÃO EM `ch`.
   `ch` é a largura do algarismo zero NA FONTE DO PRÓPRIO ELEMENTO. Num
   parágrafo isso é o que se quer; num h1, cuja fonte é bem maior, `65ch` deu
   **1943 px** — a regra existia e não limitava nada. Medido aqui em 2026-08-18.
   `rem` é relativo à raiz, então uma única medida serve para todos os elementos
   do texto e ainda acompanha o controle A-/A+ do cabeçalho, que muda a raiz. */
:root {
  --py-medida: 36rem;        /* ~65 caracteres no corpo do texto */
  --py-medida-larga: 44rem;  /* figura, código e tabela avançam, com limite */
}

/* A MEDIDA É APLICADA NA SEÇÃO, NÃO NOS ELEMENTOS-FOLHA.
   A primeira tentativa limitou `p`, `li`, `h1`..`h4` um a um, e produziu CINCO
   bordas direitas diferentes na mesma página. Medido em produção, 2026-08-18:

     1345  h1, h2, h3 e 43 parágrafos     <- a medida pretendida
     1381  39 parágrafos                  <- dentro de <li>, deslocados pelo recuo
     1417  10 parágrafos                  <- aninhados mais fundo
     1489  imagens e blocos de código
     1586  ul e ol                        <- sem limite nenhum

   A causa é geométrica: um `<p>` dentro de um `<li>` COMEÇA recuado, então com
   a mesma largura máxima ele TERMINA mais à direita. E a `<ul>` em si nunca
   recebeu limite, porque a regra só citava `li`.

   Limitando a seção, o problema desaparece por construção: nada lá dentro pode
   passar da borda, esteja aninhado quantas vezes for. */
.bd-article section {
  max-width: var(--py-medida);
}

/* O CONTÊINER ABRAÇA O TEXTO, EM VEZ DE SOBRAR EM VOLTA DELE.
   O contêiner do tema reserva `100% menos a barra secundária`, o que numa tela
   larga é muito mais do que a coluna de texto usa. Houve uma versão que
   centrava o texto nessa sobra; ficou simétrico e continuou errado, porque a
   sobra virava DUAS COLUNAS VAZIAS cercadas por conteúdo dos dois lados, e é
   isso que o olho lê como buraco. Medido numa janela de 2285 px: 178 px de
   vazio entre a barra da esquerda e o texto, e outros 178 entre o texto e o
   "Conteúdo".

   Limitando o próprio contêiner à medida do texto, a sobra migra para a
   margem EXTERNA da página, onde não há nada do outro lado e ninguém a lê como
   coluna.

   A ESPECIFICIDADE AQUI É OBRIGATÓRIA. A regra do tema é
   `.bd-main .bd-content .bd-article-container`, três classes, (0,3,0). Um
   seletor de uma classe perde, e a mudança simplesmente não aparece — foi o
   que aconteceu no `mathwpython`, cujo `max-width: 82ch` nunca funcionou. */
.bd-main .bd-content .bd-article-container {
  max-width: var(--py-medida);
}

/* E O BLOCO DA PÁGINA ABRAÇA OS TRÊS.
   Com o contêiner do artigo encolhido, o bloco que envolve tudo continuava com
   a largura máxima do tema (1802 px) e o conteúdo passou a usar só 1446 — a
   sobra ia toda para um lado. Medido numa janela de 2514 px: 348 px de margem
   à esquerda contra **720** à direita.

   O valor abaixo é a soma das três colunas mais os dois vãos, em `rem` para
   acompanhar o controle A-/A+: barra (~21) + vão (~2,4) + texto (36) +
   vão (~2,4) + barra (~20,5). Sobrando, a página se centra sozinha e as duas
   margens externas ficam iguais. */
html body .bd-container__inner.bd-page-width {
  /* `fit-content` em vez de um número.
     Tentei primeiro cravar `max-width: 83rem`, somando as três colunas à mão.
     Duas coisas deram errado: a regra do tema é mais específica e venceu (o
     computado continuou 100rem), e mesmo se tivesse pegado, um número fixo
     erra sempre que a barra lateral mudar de largura ou o leitor mexer no
     A-/A+.

     Medindo o próprio conteúdo, o bloco encolhe até as três colunas e o
     `justify-content: center` do pai o centra sozinho. Numa janela de 2514 px
     isso trocou 400 px de margem à esquerda contra 689 à direita por duas
     margens iguais. */
  width: fit-content;
  max-width: 100%;
}

html .bd-main .bd-content {
  width: fit-content;
  max-width: 100%;
}

/* E A BARRA DA ESQUERDA PRECISA DE LARGURA FIXA, NÃO PORCENTAGEM.
   Esta é a peça que faz todo o resto funcionar, e foi a última a aparecer. O
   tema dá a ela `flex: 0 0 20%` — vinte por cento do bloco da página. Uma
   PORCENTAGEM torna o `fit-content` do bloco indeterminado: ele não consegue
   medir o conteúdo, porque o tamanho do conteúdo depende do tamanho do bloco.
   Resultado: o bloco ficava com a largura máxima do tema (1654 px) enquanto as
   três colunas usavam 1416, e os 238 px de sobra ficavam DEPOIS da barra da
   direita, empurrando a página inteira para a esquerda.

   Com largura fixa, o `fit-content` volta a medir. Medido numa janela de
   2514 px: o bloco caiu de 1654 para 1454, e as margens externas de
   422 contra 675 passaram a 522 contra 537. */
html .bd-page-width > .bd-sidebar-primary {
  flex: 0 0 auto;
  width: 18rem;
}

/* NADA AVANÇA. UMA BORDA SÓ.
   Houve uma versão em que figura, código e tabela saíam da coluna por margem
   negativa, criando uma segunda borda à direita. Ficou estranho, e a conta
   mostrou por quê: o avanço não pagava.

   Medido nos 5.048 linhas de código do livro — quantas precisam de mais
   largura do que a coluna de texto oferece:

     mais de 68 colunas (coluna do texto)   313   6,2%
     mais de 76 colunas (coluna + avanço)   262   5,2%

   Ou seja, o avanço de 8rem resolvia **1%** das linhas. As demais rolam
   horizontalmente de um jeito ou de outro, e as piores têm 731 colunas
   (tabelas HTML dentro de blocos de código, no ch7). Trocar a coerência da
   página por 1% é mau negócio: agora tudo termina no mesmo lugar, e o que não
   couber rola dentro do próprio bloco.

   `--py-medida-larga` continua declarada porque o dia em que aparecer uma
   figura que realmente precise sair da coluna, o valor já está escolhido. */

/* Alternativas de múltipla escolha: lista sem marcador.
   O bullet compete com o "A)" que já numera a alternativa, e some com o recuo
   pendente que faz a linha quebrada se alinhar sob o texto, não sob a letra. */
.bd-article ul.alternativas {
  list-style: none;
  padding-left: 0;
}

.bd-article ul.alternativas > li > p {
  padding-left: 2.6em;
  text-indent: -2.6em;
}

/* --------------------------------------------------------------------------
   1. O PROGRAMA — o elemento que se repete 337 vezes
   --------------------------------------------------------------------------
   A espinha azul é a assinatura do livro, a mesma da borda esquerda de cada
   abertura. Ela também tem função: num livro em que a maioria dos blocos é
   código e a maioria do resto é saída, a espinha diz num relance qual é qual,
   antes de o leitor ler uma letra.
   -------------------------------------------------------------------------- */
.bd-article div[class*="highlight-"] {
  border: 1px solid var(--py-linha);
  border-radius: 8px;
  overflow: hidden;
}

.bd-article div[class*="highlight-"] div.highlight {
  border: 0;
  border-radius: 0;
  margin: 0;
}

.bd-article div.highlight-python,
.bd-article div.highlight-ipython3 {
  border-left: 4px solid var(--py-azul);
}

.bd-article div.highlight-python div.highlight,
.bd-article div.highlight-ipython3 div.highlight {
  background: var(--py-codigo-bg);
}

/* --------------------------------------------------------------------------
   2. A SAÍDA — e por que os tokens dela precisam ser apagados
   --------------------------------------------------------------------------
   Medido no build: 239 blocos de saída estão escritos como ``` sem linguagem.
   O Pygments não deixa em branco — ele ADIVINHA, marca o resultado como
   `highlight-default` e colore aquilo como se fosse código. Na tela, o `5.0`
   impresso pelo programa aparecia pintado de "literal float", igualzinho ao
   `5.0` que está dentro do código logo acima. Ou seja: a cor mentia sobre o
   que aquele texto é.

   Consertar na fonte custaria trocar 239 blocos de ``` para ```text. Aqui
   custa três linhas, e vale para os 373 blocos de saída de uma vez.

   A especificidade dá conta sem `!important`: `.highlight .mf` é (0,2,0) e o
   seletor abaixo é (0,2,3). Se um dia alguém precisar reforçar, o caminho é
   acrescentar elemento, não `!important`.
   -------------------------------------------------------------------------- */
/* A saída NÃO leva barra tracejada na lateral. Ela teve uma, de 2026-08-18 a
   2026-08-30, e o autor pediu para tirar: o tracejado virava um pente de
   dentinhos ao lado de cada bloco, e a página tem muitos blocos de saída.
   O que distingue saída de código continua sendo o fundo (`--py-saida-bg`) e a
   cor apagada dos tokens, logo abaixo -- a barra era reforço, não o sinal. A
   do CÓDIGO, azul e sólida, fica: é ela que marca o bloco que se pode rodar. */

.bd-article div.highlight-default div.highlight,
.bd-article div.highlight-text div.highlight,
.bd-article div.highlight-none div.highlight {
  background: var(--py-saida-bg);
}

.bd-article div.highlight-default div.highlight span,
.bd-article div.highlight-text div.highlight span,
.bd-article div.highlight-none div.highlight span {
  color: var(--py-saida);
  font-weight: inherit;
  font-style: inherit;
}

/* O rótulo "Saída do Código" que o autor escreve entre os dois blocos: só
   aproximado, sem tocar no texto. Deliberadamente NÃO se estiliza o conteúdo
   dele — medido, 8 dos 266 parágrafos em negrito depois de um bloco não são
   rótulo de saída ("Boas Práticas", "Ordem de avaliação"), e o CSS não tem
   como distinguir texto. Margem é seguro para os 266; cor e caixa-alta não
   seriam. */
.bd-article div[class*="highlight-"] + p {
  margin-top: 0.9rem;
  margin-bottom: 0.35rem;
}

/* --------------------------------------------------------------------------
   3. Títulos
   --------------------------------------------------------------------------
   O h1 leva um filete azul acima, ecoando a espinha dos blocos. Os números de
   seção ficam na cor fraca: eles orientam, não competem com o título.
   -------------------------------------------------------------------------- */
.bd-article h1 {
  padding-top: 0.85rem;
  border-top: 3px solid var(--py-azul);
  letter-spacing: -0.01em;
}

.bd-article h2 {
  margin-top: 2.6rem;
  padding-bottom: 0.3rem;
  border-bottom: 1px solid var(--py-linha);
}

.bd-article h1 .section-number,
.bd-article h2 .section-number,
.bd-article h3 .section-number {
  color: var(--py-fraco);
  font-weight: 500;
}

/* --------------------------------------------------------------------------
   4. Admonitions — são 58 no livro
   --------------------------------------------------------------------------
   O tema dá a cada tipo uma cor própria (azul, verde, laranja, vermelho), o
   que num livro com 58 delas vira um arco-íris que compete com o código. Aqui
   todas usam a paleta do livro e se distinguem pelo TÍTULO, não pelo fundo:
   aviso em amarelo, dica em azul, nota em cinza. Duas cores, três papéis.
   -------------------------------------------------------------------------- */
.bd-article div.admonition {
  border-radius: 8px;
  border: 1px solid var(--py-linha);
  border-left-width: 4px;
  box-shadow: none;
  background: var(--py-selo);
}

.bd-article div.admonition > .admonition-title {
  background: transparent;
  color: var(--py-tinta);
  font-weight: 650;
  letter-spacing: 0.01em;
}

.bd-article div.admonition > .admonition-title::after {
  color: var(--py-fraco);
}

.bd-article div.admonition.note,
.bd-article div.admonition.seealso {
  border-left-color: var(--py-fraco);
}

.bd-article div.admonition.tip,
.bd-article div.admonition.hint,
.bd-article div.admonition.important {
  border-left-color: var(--py-azul);
}

.bd-article div.admonition.warning,
.bd-article div.admonition.caution,
.bd-article div.admonition.attention {
  border-left-color: var(--py-amarelo);
}

.bd-article div.admonition.danger,
.bd-article div.admonition.error {
  border-left-color: #C0392B;
}

/* --------------------------------------------------------------------------
   5. Aberturas de capítulo
   --------------------------------------------------------------------------
   Largura inteira e sem moldura: a abertura é desenhada sobre `--py-papel`, a
   mesma cor da página, então qualquer borda só denunciaria a emenda.

   O `.only-dark` / `.only-light` é o que troca a variante — e não é só
   estética. O tema aplica `filter: brightness(.8) contrast(1.2)` e um fundo
   branco a TODA imagem que não seja `.only-dark`; sem a marcação, a variante
   escura apareceria 20% mais escura do que foi desenhada. Lição herdada do
   `mathwpython`, medida lá em 2026-08-16.
   -------------------------------------------------------------------------- */
/* AS FIGURAS DO LIVRO NÃO PASSAM PELO FILTRO DO TEMA.
   O pydata aplica `filter: brightness(.8) contrast(1.2)` e um fundo branco a
   toda imagem que NÃO seja `.only-dark` — a ideia é salvar diagrama de fundo
   claro no tema escuro. Só que as aberturas e as figuras daqui já são
   desenhadas sobre a cor da página de cada tema, então o filtro só as
   escurecia: no tema claro elas chegavam 20% mais escuras do que foram
   geradas. Medido em 2026-08-18, quando o autor notou que estavam "levemente
   escuras". */
.bd-article img.abertura,
.bd-article img.only-light,
.bd-article img.only-dark {
  filter: none;
  background: transparent;
}

.bd-article .abertura img,
.bd-article img.abertura {
  width: 100%;
  /* A medida larga, e não `100%`. Esta regra é mais específica que a geral das
     figuras, então cravar `100%` aqui fazia a abertura ignorar o limite e ir
     até a borda do contêiner, deixando um degrau em relação ao texto que
     crescia junto com o monitor. */
  max-width: var(--py-medida-larga);
  border: 0;
  border-radius: 0;
  box-shadow: none;
  margin: 0 0 1.6rem;
  background: transparent;
}

/* --------------------------------------------------------------------------
   6. Ligações, tabelas, código em linha
   -------------------------------------------------------------------------- */
.bd-article a:not(.headerlink):not(.btn) {
  text-decoration-thickness: 1px;
  text-underline-offset: 0.18em;
}

.bd-article code.literal {
  background: var(--py-codigo-bg);
  border: 1px solid var(--py-linha);
  border-radius: 4px;
  padding: 0.08em 0.32em;
}

.bd-article table.docutils thead th {
  background: var(--py-codigo-bg);
  border-bottom: 2px solid var(--py-azul);
}

.bd-article table.docutils td,
.bd-article table.docutils th {
  border-color: var(--py-linha);
}

/* TABELA COM O CÓDIGO INTEIRO NUMA LINHA (2026-10-11). Uma tabela marcada com
   `{.codigo-sem-quebra}` na linha de cima (attrs_block, ligado nas duas edições)
   mantém cada trecho de código sem quebra. Sem isso, a de métodos do `random` no
   cap. 4 partia `random.randint(a,` de `b)` e espremia a descrição. A regra vale
   só onde é pedida: aplicada a todas as tabelas, ela fazia 10 das 122 das duas
   edições, que hoje cabem, rolarem de lado a 1280 px (medido no mesmo dia). */
.bd-article table.codigo-sem-quebra code.literal {
  white-space: nowrap;
}

/* A mesma tabela vai a 0.93em desde a segunda rodada da seção (2026-10-11, noite).
   A linha do `choices(seq, k=n)`, a mais longa da coluna da esquerda, tirou 28 px
   da coluna da direita, e a 1280 px quatro descrições e exemplos que cabiam numa
   linha passaram a quebrar, alguns deixando só "1." ou "dois." na linha de baixo.
   A 0.93em todas voltam a ter duas linhas (descrição e exemplo), com 10 px de folga
   na mais justa; a 0.95em a folga era de 2 px. */
.bd-article table.codigo-sem-quebra {
  font-size: 0.93em;
}

/* --------------------------------------------------------------------------
   Texto corrido justificado, com hifenização (2026-08-16)

   As duas coisas andam JUNTAS, e mexer numa sem a outra piora o resultado.
   Justificar sem hifenizar é pior do que não justificar: para alcançar a
   margem direita o navegador estica os espaços entre as palavras, e o
   parágrafo ganha os "rios" brancos que descem por ele. Em português, com
   palavras longas, o efeito é visível.

   E `hyphens: auto` só funciona se a página declarar o idioma, porque o
   navegador precisa saber a língua para saber onde partir a palavra. Isso vem
   do `language:` no _config.yml.

   Fica de fora o que tem medida curta ou conteúdo técnico: célula de tabela,
   legenda de figura, título de admonition e as entradas da bibliografia, que
   carregam URLs sem ponto de quebra e ficariam esticadas.
   -------------------------------------------------------------------------- */
.bd-article p {
  text-align: justify;
  hyphens: auto;
  -webkit-hyphens: auto;
}

/* ITEM DE LISTA NÃO SE JUSTIFICA. O Sphinx envolve o conteúdo de cada `<li>`
   num `<p>`, então a regra acima os pegava. Numa linha curta, justificar abre
   buracos entre as palavras; e nas alternativas de múltipla escolha do
   capítulo 1, que são sequências de trechos de código com setas, o resultado
   era ilegível — foi o que o autor reportou em 2026-08-18. */
.bd-article li > p,
.bd-article table p,
.bd-article figcaption,
.bd-article .admonition-title,
.bd-article .citation p,
.bd-article dl.citation p,
.bd-article div[role="doc-biblioentry"] p {
  text-align: left;
  hyphens: manual;
  -webkit-hyphens: manual;
}

/* ---------------------------------------------------------------------------
   Referências: as DUAS saídas de cada verbete           (2026-08-17)
   ---------------------------------------------------------------------------
   O rótulo [Chave] no início do verbete sempre foi o backlink: volta ao ponto
   do texto que citou, e vira "(1,2)" quando há mais de uma citação. O link do
   fim do verbete é o que faltava — vai ao trabalho original (DOI ou URL), e
   `_static/referencias.js` faz ele abrir em nova aba.
   Os dois são <a> e ficariam idênticos aos olhos; a seta é o que distingue
   "sai da página" de "volta ao texto". Um `::after` de conteúdo decorativo:
   leitor de tela não lê, e o title="" do JS carrega o destino.
   ------------------------------------------------------------------------- */
[role="doc-biblioentry"] a.reference.external::after,
.citation a.reference.external::after {
  content: "\2197";          /* seta para fora, ↗ */
  display: inline-block;     /* solta do sublinhado do próprio link */
  margin-left: .15em;
  font-size: .8em;
  opacity: .7;
  text-decoration: none;
}
