/* ── barra.css ── */
/* A barra de navegação do espelho — UMA, em todas as páginas.
 *
 * Antes deste arquivo havia NOVE cabeçalhos diferentes no site, um por
 * família de captura, cada um com o seu próprio hash de escopo do Vue
 * (`data-v-105bb0ce`, `4194e554`, `7ce6e420`, `8fe1a67c`, …). Como o estilo
 * da origem é escopado por esse hash, "o mesmo botão" tinha altura, sombra e
 * hover diferentes de página para página — foi isso que o dono viu como
 * "tem abas que o navbar muda".
 *
 * 🔑 Enquanto o estilo vier do escopo da captura, cada página tem o cabeçalho
 * da página de onde ela foi capturada. Unificar não é ajustar as nove: é
 * deixar de depender delas.
 *
 * Por isso aqui não há UMA regra que dependa de classe da origem. Tudo o que
 * a barra desenha nasce neste arquivo, e o único elo com o resto da página é
 * a altura: `--navigation-height` continua sendo respeitada, porque o corpo
 * de várias telas reserva espaço por ela.
 *
 * ⚠️ Nenhum `rem` aqui. A raiz do site é `13.33vw` (~240px numa janela de
 * 1800), então `1rem` escrito à mão vale ~240px e o layout explode sem erro
 * nenhum. A guarda `_tools/checa_css.py` reprova o build se voltar.
 */

/* ── tokens ────────────────────────────────────────────────────────────────
 *
 * Próprios, com prefixo. Derivam dos tokens do site (`--bg-1`, `--text-1`,
 * `--color-blue` = #f7931a) mas não os LEEM: uma tela que redefina `--bg-2`
 * para o painel dela não pode mudar o cabeçalho junto.
 *
 * Moram em `.oc-b`, que é a classe das DUAS raízes — a barra e a gaveta. A
 * gaveta é filha do `<body>`, não da barra, e propriedade custom desce pela
 * árvore: declarada só na barra, a gaveta nasceria sem cor nenhuma.
 */
.oc-b {
  --ocb-h: var(--navigation-height, 65px);
  --ocb-tinta: #FFFFFF;
  --ocb-tinta-2: rgba(255, 255, 255, .74);
  --ocb-tinta-3: rgba(255, 255, 255, .54);
  --ocb-fundo: #020202;
  --ocb-superficie: #141519;
  --ocb-superficie-2: #202127;
  /* 🔴 Os menus caíam em `--ocb-superficie` — um cinza médio e AZULADO, e o
   * mesmo tom da barra atrás deles. Dois blocos de tom parecido empilhados,
   * sem hierarquia entre eles, é o que dá cara de gerado (dono, 28/08/2026).
   * E o azul era forasteiro: o site é preto #020202 com superfícies #0b0b0b.
   *
   * 🔑 O menu tem de parecer que está SOBRE a barra, não recortado dela.
   * Escurecer o painel faz isso sem precisar clarear coisa nenhuma.
   *
   * `--ocb-superficie` FICA como está: ela também pinta a pastilha de saldo,
   * que vive DENTRO da barra e some se ficar preta. Superfície de menu e
   * superfície de barra deixaram de ser a mesma coisa porque nunca foram. */
  --ocb-menu: #0A0A0A;
  --ocb-menu-realce: rgba(255, 255, 255, .055);
  /* A curva do `blur-out-up` (21st.dev): sai rápido e assenta devagar. */
  --ocb-mola: cubic-bezier(.22, 1, .36, 1);
  --ocb-fio: rgba(255, 255, 255, .10);
  --ocb-fio-forte: rgba(255, 255, 255, .20);
  --ocb-marca: #f7931a;
  --ocb-marca-hover: #ffa63d;
  --ocb-marca-tinta: #120800;
  --ocb-sombra: 0 20px 44px -14px rgba(0, 0, 0, .78), 0 3px 10px -3px rgba(0, 0, 0, .55);
  /* Véu sobre mídia: 0,66 de preto por cima do vídeo. Medido contra o quadro
   * mais claro possível (branco puro): o fundo efetivo fica em #575757, e
   * texto branco em cima dá 6,0:1 — acima do piso de 4,5:1. Com 0,55 daria
   * 4,0:1 e o rótulo sumiria na arquibancada, que é o defeito relatado. */
  --ocb-veu: rgba(2, 2, 2, .66);
}

/* ── cortina de carregamento (30/08/2026) ──────────────────────────────
 * A captura da origem pinta ANTES de o nosso JS montar cabeçalho, abas e
 * terminal: o `DOMContentLoaded` só chega depois de 580 KB de HTML e 29
 * scripts, e nesse intervalo (≈1 s no telefone; 1,9 s medido a 4G/CPU 4×)
 * o olho via o site antigo, depois um pulo de 60 px quando o cabeçalho
 * entrava, e peças sobrepostas por um quadro. Dono, 30/08: "todas as páginas
 * carregam algo antigo por 1 segundo depois entra no front atual".
 *
 * 🔑 O que o JS faz no fim, o CSS faz no começo: o `body` nasce invisível e
 * o `barra.js` marca `html.oc-pronto` no início de `inicia()`, na MESMA
 * tarefa do `DOMContentLoaded` em que abas e terminal montam ⇒ uma pintura
 * só, já com tudo. `opacity`, não `visibility`: filho com `visibility:
 * visible` explícito atravessaria a cortina; opacidade ninguém atravessa. O
 * fundo escuro continua (o canvas herda o fundo do body mesmo transparente).
 *
 * 🔑 Se o JS falhar, a animação revela em 4 s: página lenta é melhor que
 * página cega. `barra.css` e `barra.js` entram sempre juntos (861/861). */
/* 🔑 A cortina vale para o CONTEÚDO, não para o `body` inteiro: a tela de
 * carregamento é filha direta do body e precisa ficar VISÍVEL enquanto tudo o
 * mais está escondido. `opacity` num pai cria contexto de empilhamento — filho
 * nenhum escapa —, então exemtar o loader só é possível trocando o alvo.
 * Continua sendo `opacity` e não `visibility` pelo motivo de 30/08: filho com
 * `visibility: visible` atravessaria a cortina; opacidade ninguém atravessa.
 * Entre os filhos diretos do body só o `#__nuxt` desenha; o resto são
 * `<script>`, que não pintam. */
html:not(.oc-pronto) body > *:not(#oc-loader) { opacity: 0; animation: oc-revela 0s linear 4s forwards; }

/* ══ tela de carregamento (09/09/2026) ═══════════════════════════════════
 * Ela NÃO é uma espera nova: ocupa exatamente a janela em que a cortina já
 * deixava a tela preta — do primeiro pixel até o `barra.js` marcar
 * `html.oc-pronto`. Medido depois do `poe_shell_primeiro`, isso são 600 a
 * 1.000 ms, e some com 350 ms de fade.
 *
 * 🔑 Zero JavaScript para o loader do primeiro carregamento: quem mostra é o
 * HTML estático, quem esconde é a classe que o shell já marcava. Sob a CSP
 * `script-src 'self'` isso também evita mais um arquivo no caminho da pintura.
 *
 * 🔴 A saída de emergência é obrigatória: sem ela, uma falha do `barra.js`
 * deixaria o site TRANCADO atrás do loader — pior que a tela preta de antes,
 * que ao menos revelava em 4 s. */
:root {
  --oc-loader-fundo: #0A0A0A;
  --oc-enter: 500ms;   /* entrada da logo */
  --oc-fade: 350ms;    /* saída do loader e transição de página */
  --oc-cycle: 2380ms;  /* ciclo do respiro = --oc-enter / 0.21 */
}

#oc-loader {
  position: fixed;
  inset: 0;
  z-index: 9999;
  display: grid;
  place-items: center;
  background: var(--oc-loader-fundo);
  -webkit-tap-highlight-color: transparent;
  transition: opacity var(--oc-fade) cubic-bezier(.4, 0, .2, 1),
              visibility 0s linear var(--oc-fade);
  animation: oc-loader-sai 0s linear 4s forwards;
}
#oc-loader::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: radial-gradient(60% 50% at 50% 50%, rgba(255, 255, 255, .035), rgba(255, 255, 255, 0) 70%);
}
html.oc-pronto #oc-loader,
#oc-loader[data-oc-fora] {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
@keyframes oc-loader-sai { to { opacity: 0; visibility: hidden; pointer-events: none; } }

/* 🔴 Medido no artefato: com o shell rápido, o `oc-pronto` chega aos ~1.000 ms
 * e o `#oc-loader` só existe no DOM aos ~900 ms — a tela aparecia e sumia no
 * mesmo quadro. Otimizar demais matou a animação.
 *
 * 🔑 A trava garante os 350 ms pedidos, contados da PRIMEIRA PINTURA (é quando
 * a pessoa vê a tela), não do início da navegação. Quem põe e tira a classe é
 * o `loader.js`, primeiro da cadeia do shell. Vem DEPOIS da regra do
 * `oc-pronto` de propósito: mesma especificidade, ganha quem vem por último. */
html.oc-loader-trava #oc-loader {
  opacity: 1;
  visibility: visible;
  /* 🔴 Sem esta linha a tela ficava OPACA e ao mesmo tempo atravessável: a
   * regra do `oc-pronto` já tinha posto `pointer-events: none`, e a trava
   * devolvia só `opacity` e `visibility`. Durante os 350 ms o toque passava
   * pela tela e acertava um botão que a pessoa não estava vendo. */
  pointer-events: auto;
}

/* Medidas em % dentro de uma caixa `584 / 286`: é o alinhamento exato da logo
 * original, e é por isso que os três pedaços não podem ser redesenhados.
 *
 * 🔴 09/09/2026, EM PRODUÇÃO: a primeira versão usava as classes `.oc-a`,
 * `.oc-b` e `.oc-c` do desenho que veio pronto. `.oc-b` JÁ EXISTIA no site —
 * é a classe do cabeçalho (`header.oc-b.oc-barra`) e tem 266 referências no
 * CSS. O `width: 21.5753%` da barra `/` caiu no cabeçalho: 21,5753% de 384 px
 * = 82,85 px, e a barra inteira encolheu para 84 px, cortando Depositar,
 * saldo e conta. O `animation: ocS` levou junto a opacidade, que ficou
 * oscilando entre 0,6 e 1.
 *
 * 🔑 Nome curto de classe vindo de fora é colisão esperando acontecer. Aqui
 * eles são `oc-carga-*` (nenhum uso anterior) E escopados em `#oc-loader`, e a
 * `checa_loader.py` reprova o build se alguma classe da tela aparecer fora
 * dela. */
#oc-loader .oc-carga {
  position: relative;
  width: min(56vw, 232px);
  aspect-ratio: 584 / 286;
  animation: ocGrp var(--oc-cycle) linear infinite both;
}
#oc-loader .oc-carga span {
  position: absolute;
  top: 0;
  height: 100%;
  display: block;
  background-repeat: no-repeat;
  background-size: 100% 100%;
}
#oc-loader .oc-carga-a { left: 0;        width: 27.7397%; background-image: url("/_local/img/loader-a.png"); animation: ocL var(--oc-cycle) linear infinite both; }
#oc-loader .oc-carga-b { left: 39.2123%; width: 21.5753%; background-image: url("/_local/img/loader-b.png"); animation: ocS var(--oc-cycle) linear infinite both; }
#oc-loader .oc-carga-c { left: 72.4315%; width: 27.5685%; background-image: url("/_local/img/loader-c.png"); animation: ocR var(--oc-cycle) linear infinite both; }

@keyframes ocGrp { 0%, 66% { opacity: 1 } 79% { opacity: 0 } 100% { opacity: 0 } }
@keyframes ocL {
  0%       { opacity: 0; transform: translate3d(-46px, 0, 0); animation-timing-function: cubic-bezier(.16, 1, .3, 1) }
  4%       { opacity: 0; transform: translate3d(-46px, 0, 0); animation-timing-function: cubic-bezier(.16, 1, .3, 1) }
  21%      { opacity: 1; transform: translate3d(0, 0, 0); animation-timing-function: ease-in-out }
  44%      { transform: translate3d(-3px, 0, 0); animation-timing-function: ease-in-out }
  66%, 100% { opacity: 1; transform: translate3d(0, 0, 0) }
}
@keyframes ocR {
  0%       { opacity: 0; transform: translate3d(46px, 0, 0); animation-timing-function: cubic-bezier(.16, 1, .3, 1) }
  4%       { opacity: 0; transform: translate3d(46px, 0, 0); animation-timing-function: cubic-bezier(.16, 1, .3, 1) }
  21%      { opacity: 1; transform: translate3d(0, 0, 0); animation-timing-function: ease-in-out }
  44%      { transform: translate3d(3px, 0, 0); animation-timing-function: ease-in-out }
  66%, 100% { opacity: 1; transform: translate3d(0, 0, 0) }
}
@keyframes ocS {
  0%   { opacity: 1; clip-path: inset(0 0 100% 0); transform: translate3d(0, -5px, 0); animation-timing-function: cubic-bezier(.2, .85, .25, 1) }
  15%  { clip-path: inset(0 0 0 0); transform: translate3d(0, 0, 0); animation-timing-function: ease-in-out }
  44%  { opacity: .55 }
  66%  { opacity: 1 }
  100% { opacity: 1; clip-path: inset(0 0 0 0) }
}

/* ══ transição entre páginas (350 ms) ════════════════════════════════════
 * 🔑 O `loader.js` marca `html.oc-saindo` no clique e NÃO segura a navegação.
 * O navegador mantém a página velha na tela até a nova pintar, então o fade
 * roda DURANTE o carregamento — mesmo desenho, zero milissegundo somado. Com
 * a navegação atrasada em 350 ms (como a referência fazia), cada clique ficaria
 * 350 ms mais lento do que é. */
/* 🔴 A primeira versão usava `body > *:not(#oc-loader)`. Dois problemas:
 *
 *  1. `:not(#oc-loader)` conta o ID na especificidade — a regra ficava em
 *     (1,1,2) e VENCIA as transições dos próprios componentes. A gaveta do
 *     menu tem `transition: opacity 190ms, visibility 190ms` em (0,2,0);
 *     perdia as duas, e o `visibility: hidden` do fechamento passava a valer
 *     na hora, cortando o fade dela.
 *  2. Pegava tudo o que o JS anexa ao body depois — gaveta e barra de abas,
 *     que são camadas fixas e não fazem parte da saída da página. As abas
 *     ainda levavam `translateY(6px)` de brinde.
 *
 * 🔑 Quem sai é o CONTEÚDO da página, e ele tem nome: `#__nuxt`, a raiz da
 * captura, presente em todas as 889 páginas. Uma regra com alvo é mais barata
 * de entender que um seletor universal com exceções. */
html.oc-pronto #__nuxt {
  transition: opacity var(--oc-fade) cubic-bezier(.4, 0, .2, 1),
              transform var(--oc-fade) cubic-bezier(.4, 0, .2, 1);
}
html.oc-saindo #__nuxt {
  opacity: 0;
  transform: translateY(6px);
}

@media (prefers-reduced-motion: reduce) {
  #oc-loader .oc-carga, #oc-loader .oc-carga span {
    animation: none !important;
    opacity: 1 !important;
    clip-path: none !important;
    transform: none !important;
  }
  #oc-loader, html.oc-pronto #__nuxt { transition-duration: 1ms !important; }
  html.oc-saindo #__nuxt { transform: none; }
}

/* ── a caixa da barra nasce com a altura final ──────────────────────────
 * 🔴 Medido em 09/09/2026: o marcador `<div data-oc-barra data-oc-altura="65px">`
 * SEMPRE soube a altura, e nenhum CSS a usava. A caixa nascia com 0, todo o
 * conteúdo abaixo dela ficava 65 px acima do lugar, e descia quando o
 * `barra.js` montava o cabeçalho. Com a cortina isso não aparecia — aparecia
 * como 1,8 s de tela preta, que é o mesmo defeito cobrado noutra moeda.
 *
 * 🔑 Reservar a caixa é o que torna a cortina dispensável: sem o pulo, a
 * primeira pintura já é a geometria final. Medido na home móvel: 26,2% da
 * dobra mudava entre 900 ms e o fim; com a caixa reservada, CLS 0,000. */
[data-oc-barra][data-oc-altura="65px"] { height: 65px; }
[data-oc-barra][data-oc-altura="64px"] { height: 64px; }
@keyframes oc-revela { to { opacity: 1; } }

:root[theme="light"] .oc-b {
  --ocb-tinta: #0B0B0C;
  --ocb-tinta-2: rgba(11, 11, 12, .74);
  --ocb-tinta-3: rgba(11, 11, 12, .56);
  --ocb-fundo: #FFFFFF;
  --ocb-superficie: #FFFFFF;
  --ocb-superficie-2: #F2F3F5;
  /* No claro o painel já é o ponto mais claro da tela: quem o separa do fundo
   * é a borda e a sombra, não o tom. Escurecer aqui seria a inversão do que
   * o escuro faz. */
  --ocb-menu: #FFFFFF;
  --ocb-menu-realce: rgba(11, 11, 12, .055);
  --ocb-fio: rgba(11, 11, 12, .12);
  --ocb-fio-forte: rgba(11, 11, 12, .24);
  --ocb-sombra: 0 20px 44px -16px rgba(11, 11, 12, .18), 0 2px 8px -3px rgba(11, 11, 12, .12);
  /* No claro o véu é branco: o vídeo da home é escuro na base e texto preto
   * precisa de fundo claro por baixo, não de mais preto. E quase opaco (0,92,
   * contra 0,66 do escuro): sobre um herói escuro, 0,72 de branco dava uma
   * faixa cinza-lama — legível, mas parecendo defeito. */
  --ocb-veu: rgba(255, 255, 255, .92);
}

/* ── piso próprio ─────────────────────────────────────────────────────────
 *
 * A barra é a MESMA em 861 páginas, e cada família de página traz a folha de
 * estilo de onde foi capturada — mais as nossas, mais a página de índice, que
 * tem regras próprias para `ul` e `li`. Sem um piso, a mesma barra sai
 * diferente conforme a vizinhança.
 *
 * 🔴 Medido em 24/08/2026: na página de índice das cópias, a lista do menu
 * herdou borda e raio das regras de `ul`/`li` daquela página — a barra apareceu
 * com uma caixa arredondada em volta dos itens, só ali.
 *
 * 🔑 Componente que roda em todo lugar precisa declarar o piso dele. Herdar
 * decoração da página é herdar decisões que ninguém tomou para esta barra.
 *
 * Tudo aqui é (0,1,1) de propósito: perde de qualquer regra própria da barra
 * (duas classes) e ganha do reset `[dir] div` da origem, que é a mesma coisa
 * pelo outro lado.
 */
.oc-b, .oc-b *, .oc-b *::before, .oc-b *::after { box-sizing: border-box; }

.oc-b div, .oc-b span, .oc-b ul, .oc-b li, .oc-b nav, .oc-b h3, .oc-b p,
.oc-b b, .oc-b i, .oc-b small, .oc-b kbd, .oc-b a, .oc-b button, .oc-b input {
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: none;
  box-shadow: none;
  color: inherit;
  font: inherit;
  letter-spacing: normal;
  text-align: left;
  text-decoration: none;
  text-transform: none;
  list-style: none;
  min-width: 0;
}

.oc-b svg { display: block; flex-shrink: 0; }

/* ── a barra ─────────────────────────────────────────────────────────────── */


/* 🔴 A faixa da barra de STATUS ficava descoberta. Vídeo do dono em
 * 30/08/2026: o relógio do sistema por cima do wordmark, a hora e o ícone de
 * bateria misturados ao `Deposit`, e a lista de mercados passando por trás da
 * hora enquanto rola. A página declara `viewport-fit=cover` (a barra de abas
 * precisa disso para alcançar o pé da tela), então o documento começa em y=0,
 * ATRÁS da status bar — e a barra, presa em `top: 0` com altura fixa, ficava
 * logo ABAIXO dela, deixando à mostra a faixa por onde o conteúdo passa.
 *
 * 🔑 Quem declara `cover` assume as quatro bordas. A barra cresce o tanto do
 * `inset` e se pinta até em cima: a faixa deixa de ser um vão e passa a ser
 * parte da barra. Fora do modo tela cheia o `inset` vale 0 e nada muda — é a
 * mesma conta que o `.oc-abas` já faz embaixo com `safe-area-inset-bottom`. */
.oc-b.oc-barra {
  position: sticky;
  top: 0;
  z-index: 999;
  height: calc(var(--ocb-h) + env(safe-area-inset-top, 0px));
  padding-top: env(safe-area-inset-top, 0px);
  box-sizing: border-box;
  color: var(--ocb-tinta);
  background: var(--ocb-fundo);
  border-bottom: 1px solid var(--ocb-fio);
  font-family: inherit;
  /* `contain: none` de propósito: os painéis saem da caixa. */
}

/* 🔴 O inset de cima tem UM dono, e é a barra acima. A origem também o
 * cobrava — `#__nuxt { padding-top: env(safe-area-inset-top) !important }`,
 * dentro de `@supports (-webkit-touch-callout: none)`, ou seja: só no iOS, e
 * só nos pacotes que trazem o `bxfe-component` do `base_nuxt` (home, mercados,
 * carteira, copy…; os terminais de spot e futuros não o têm). Vídeo do dono
 * em 30/08/2026 e reproduzido no WebKit com esse padding injetado: o `#__nuxt`
 * é o container que rola, e com padding em cima o cabeçalho sticky gruda na
 * borda de DENTRO do padding — a 62px, não a 0. A faixa da barra de status
 * ficava livre, o conteúdo rolava por ela (linhas da tabela por cima do
 * relógio), e com o padding da barra somado ao do container a linha do
 * logo descia para 124px. E era diferente de página para página: no
 * terminal, sem esse padding, tudo em 0 — ao trocar de tela o cabeçalho
 * pulava de lugar.
 *
 * 🔑 Padding no CONTAINER que rola não protege a faixa de cima: ele rola
 * junto com o conteúdo, e ainda empurra o ponto onde o sticky gruda. Quem
 * cobre a faixa é o elemento que fica parado — a barra, com padding próprio.
 * O do container sai; o de baixo fica, porque em página sem a barra de abas
 * (a árvore de desktop num telefone) é ele que mantém o fim do conteúdo
 * acima do indicador de home. `!important` porque o da origem é, e é a mesma
 * especificidade — o que decide é a ordem, e esta folha vem depois. */
[dir] #__nuxt { padding-top: 0 !important; }

/* Sobre mídia (a home põe o herói por baixo do cabeçalho): véu + desfoque em
 * vez de cor sólida. O desfoque não é enfeite — é o que transforma um quadro
 * de vídeo em campo uniforme, e sem ele nenhum valor de opacidade serve para
 * todos os quadros. */
.oc-b.oc-barra[data-oc-sobre]:not(.oc-rolou) {
  background: var(--ocb-veu);
  -webkit-backdrop-filter: blur(20px) saturate(1.15);
  backdrop-filter: blur(20px) saturate(1.15);
  border-bottom-color: transparent;
}

/* Rolou: sólida, com o fio de baixo. Vale nos dois modos. */
.oc-b.oc-barra.oc-rolou {
  background: var(--ocb-fundo);
  border-bottom-color: var(--ocb-fio);
}

.oc-b .oc-barra-linha {
  display: flex;
  align-items: center;
  gap: 4px;
  height: 100%;
  padding: 0 16px;
  box-sizing: border-box;
}

/* ── marca ───────────────────────────────────────────────────────────────── */

.oc-b .oc-barra-marca {
  display: flex;
  align-items: center;
  flex-shrink: 0;
  height: 100%;
  padding: 0 12px 0 0;
  color: var(--ocb-tinta);
  text-decoration: none;
}

.oc-b .oc-barra-marca svg {
  display: block;
  width: 112px;
  height: auto;
  fill: currentColor;
}

/* ── menu ────────────────────────────────────────────────────────────────── */

.oc-b .oc-barra-nav {
  flex: 1 1 auto;
  min-width: 0;
  height: 100%;
}

.oc-b .oc-barra-nav > ul {
  display: flex;
  align-items: stretch;
  gap: 2px;
  height: 100%;
  margin: 0;
  padding: 0;
  list-style: none;
}

.oc-b .oc-barra-nav > ul > li {
  display: flex;
  align-items: stretch;
  position: relative;
}

.oc-b .oc-barra-item {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  height: 100%;
  padding: 0 12px;
  border: 0;
  background: none;
  color: var(--ocb-tinta-2);
  font: inherit;
  font-size: 14px;
  font-weight: 500;
  line-height: 1;
  letter-spacing: -.005em;
  white-space: nowrap;
  cursor: pointer;
  text-decoration: none;
  transition: color 140ms ease-out;
}

.oc-b .oc-barra-item:hover,
.oc-b .oc-barra-item[aria-expanded="true"] { color: var(--ocb-tinta); }

/* Sobre mídia todo rótulo vai em tinta cheia: a secundária a 74% sobre o véu
 * cai para 3,4:1 no quadro mais claro. */
.oc-b.oc-barra[data-oc-sobre]:not(.oc-rolou) .oc-barra-item { color: var(--ocb-tinta); }

/* Página atual: fio da marca embaixo. É a única marcação de estado do menu —
 * o cabeçalho da origem não tinha nenhuma, e sem ela a barra não diz onde a
 * pessoa está. */
.oc-b .oc-barra-item[aria-current="page"] { color: var(--ocb-tinta); }
.oc-b .oc-barra-item[aria-current="page"]::after {
  content: "";
  position: absolute;
  left: 12px;
  right: 12px;
  bottom: 0;
  height: 2px;
  background: var(--ocb-marca);
  border-radius: 2px 2px 0 0;
}

.oc-b .oc-barra-seta {
  width: 10px;
  height: 10px;
  flex-shrink: 0;
  transition: transform 160ms ease-out;
}

.oc-b .oc-barra-item[aria-expanded="true"] .oc-barra-seta { transform: rotate(180deg); }

/* A chama ao lado de Bots. Vale no topo e na célula da gaveta.
 *
 * `line-height: 0` porque um `<span>` em torno de um `<svg>` herda a entrelinha
 * de 1 do item e cresce 3px além do desenho — o suficiente para empurrar o
 * rótulo e desalinhar a linha inteira do menu.
 *
 * `margin-left: 1px` e não o `gap: 5px` do item: 5px afastam a chama tanto do
 * nome quanto do vizinho seguinte, e ela passa a parecer um item solto entre
 * Bots e Copy trading em vez de um selo DE Bots. */
.oc-b .oc-barra-fogo {
  display: inline-flex;
  align-items: center;
  flex-shrink: 0;
  margin-left: 1px;
  line-height: 0;
  transform: translateY(-.5px);
}

/* Na célula a chama mora DENTRO de `.oc-barra-nome` (inline-flex, `gap: 6px`)
 * — o `celula()` a pendura no nome, não no bloco, para ela não descer ao meio
 * das duas linhas quando há descrição. O gap do nome já é o respiro que o
 * topo tem (5px do item + 1px); o `1px` da regra geral em cima dele daria 7px.
 *
 * 🔴 Isto era `margin-left: -5px`, de quando a chama entrava como terceiro
 * item de flex da célula e herdava o `gap: 10px` que separa o ÍCONE do NOME.
 * Com a chama dentro do nome, -5px sobre um gap de 6px deixava 1px: medido em
 * 14/09/2026 na célula `Trading bots`, a chama encostava no último "o". */
.oc-b .oc-barra-cel .oc-barra-fogo { margin-left: 0; }

/* Respiro lento, e só ele: chama que pisca rápido no cabeçalho compete com o
 * conteúdo da página o tempo todo. Escala e opacidade, nunca posição — mexer
 * no `top` reflui a barra a cada quadro. */
@keyframes oc-barra-fogo-respira {
  0%, 100% { transform: translateY(-.5px) scale(1); opacity: 1; }
  50%      { transform: translateY(-.5px) scale(1.09); opacity: .88; }
}

@media (prefers-reduced-motion: no-preference) {
  .oc-b .oc-barra-fogo { animation: oc-barra-fogo-respira 2.6s ease-in-out infinite; }
}

/* ── painéis ─────────────────────────────────────────────────────────────── */

.oc-b .oc-barra-painel {
  position: absolute;
  top: calc(100% - 6px);
  left: 0;
  /* 232px cabia só o nome. Com a descrição embaixo, uma frase de seis palavras
     quebraria em três linhas e a lista viraria um parágrafo — o painel cresce
     junto com o que passou a caber nele (dono, 29/08/2026). */
  min-width: 232px;
  padding: 8px;
  box-sizing: border-box;
  background: var(--ocb-menu);
  border: 1px solid var(--ocb-fio);
  border-radius: 14px;
  box-shadow: var(--ocb-sombra);
  opacity: 0;
  visibility: hidden;
  /* Desce a partir do TOPO, que é onde o botão está: um painel que cresce do
     meio não sai de lugar nenhum. */
  transform-origin: top center;
  transform: translateY(-8px) scale(.985);
  transition: opacity 160ms ease-out,
              transform 220ms var(--ocb-mola),
              visibility 160ms;
}

.oc-barra-painel.oc-aberto {
  opacity: 1;
  visibility: visible;
  transform: translateY(0) scale(1);
}

/* ── a entrada das linhas ────────────────────────────────────────────────
 *
 * Cada linha sobe de um borrão leve, uma depois da outra. Os números são do
 * `blur-out-up` e do `animated-staggered-dropdown` (21st.dev): borrão de 6px,
 * deslocamento de 10px, `cubic-bezier(.22, 1, .36, 1)` e 28 ms entre uma e
 * outra.
 *
 * 🔑 O painel abre em 220 ms e as linhas em 380 ms: a moldura chega primeiro
 * e o conteúdo assenta dentro dela. Se as duas durassem o mesmo, o efeito
 * viraria um bloco só deslizando — que é o que já havia.
 *
 * A duração da fonte (0,56 s) é de TEXTO grande, parado numa página. Num
 * menu que abre ao passar o mouse, meio segundo é atraso: 380 ms mantém a
 * textura e não faz esperar.
 *
 * `nth-child` e não uma variável no JS: no cartão de três colunas as células
 * são filhas de cada GRUPO, então cada coluna começa do zero e as três
 * cascatam juntas. Um índice global faria a terceira coluna chegar quando a
 * pessoa já leu a primeira. */
@keyframes oc-cel-entra {
  from { opacity: 0; transform: translateY(10px); filter: blur(6px); }
  to   { opacity: 1; transform: none;             filter: blur(0); }
}

.oc-b .oc-barra-painel.oc-aberto .oc-barra-cel,
.oc-b .oc-barra-painel.oc-aberto .oc-barra-grupo > h3 {
  animation: oc-cel-entra 380ms var(--ocb-mola) both;
}

.oc-b .oc-barra-painel.oc-aberto :nth-child(1 of .oc-barra-cel) { animation-delay: 0ms; }
.oc-b .oc-barra-painel.oc-aberto :nth-child(2 of .oc-barra-cel) { animation-delay: 28ms; }
.oc-b .oc-barra-painel.oc-aberto :nth-child(3 of .oc-barra-cel) { animation-delay: 56ms; }
.oc-b .oc-barra-painel.oc-aberto :nth-child(4 of .oc-barra-cel) { animation-delay: 84ms; }
.oc-b .oc-barra-painel.oc-aberto :nth-child(5 of .oc-barra-cel) { animation-delay: 112ms; }
.oc-b .oc-barra-painel.oc-aberto :nth-child(6 of .oc-barra-cel) { animation-delay: 140ms; }
.oc-b .oc-barra-painel.oc-aberto :nth-child(7 of .oc-barra-cel) { animation-delay: 168ms; }
.oc-b .oc-barra-painel.oc-aberto :nth-child(8 of .oc-barra-cel) { animation-delay: 196ms; }
.oc-b .oc-barra-painel.oc-aberto :nth-child(n+9 of .oc-barra-cel) { animation-delay: 224ms; }

/* 🔑 Movimento é decoração aqui: sem ele o menu continua abrindo, aparecendo
 * e fechando igual. A fonte respeita `prefers-reduced-motion` e esta também. */
@media (prefers-reduced-motion: reduce) {
  .oc-b .oc-barra-painel { transition: opacity 100ms linear, visibility 100ms; transform: none; }
  .oc-b .oc-barra-painel.oc-aberto { transform: none; }
  .oc-b .oc-barra-painel.oc-aberto .oc-barra-cel,
  .oc-b .oc-barra-painel.oc-aberto .oc-barra-grupo > h3 { animation: none; }
}

.oc-b .oc-barra-painel.oc-a-direita { left: auto; right: 0; }

/* Cartão do "Mais": três colunas com título de grupo. */
.oc-b .oc-barra-painel.oc-cartao {
  display: grid;
  /* 176px: ícone + "Previsão" + selo "EM BREVE" cabem numa linha só
     (medido: 150 deixava o selo sem lugar). O painel é max-content e
     cresce junto com as colunas. */
  grid-template-columns: repeat(3, minmax(176px, 1fr));
  gap: 4px 10px;
  min-width: 600px;
  padding: 12px;
}

.oc-b .oc-barra-grupo { min-width: 0; }

.oc-b .oc-barra-grupo > h3 {
  margin: 6px 10px 6px;
  color: var(--ocb-tinta-3);
  font: inherit;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .07em;
  text-transform: uppercase;
}

.oc-b .oc-barra-cel {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 9px 10px;
  box-sizing: border-box;
  border: 0;
  border-radius: 9px;
  background: none;
  color: var(--ocb-tinta-2);
  font: inherit;
  font-size: 13.5px;
  font-weight: 500;
  line-height: 1.2;
  text-align: left;
  text-decoration: none;
  cursor: pointer;
  transition: background-color 130ms ease-out, color 130ms ease-out;
}

/* O realce sobe a partir do painel escuro. `--ocb-superficie-2` era mais claro
 * que o painel INTEIRO e a linha sob o mouse saltava como um botão — num menu
 * o realce serve para localizar o dedo, não para chamar. */
.oc-b .oc-barra-cel:hover {
  background: var(--ocb-menu-realce);
  color: var(--ocb-tinta);
}

.oc-b .oc-barra-cel > i {
  display: flex;
  flex-shrink: 0;
  color: var(--ocb-tinta-3);
}

.oc-b .oc-barra-cel:hover > i { color: var(--ocb-marca); }
.oc-b .oc-barra-cel[aria-current="page"] { color: var(--ocb-tinta); }
.oc-b .oc-barra-cel[aria-current="page"] > i { color: var(--ocb-marca); }

/* Item de roteiro: rótulo, selo, e nenhum destino. Não é `<a>`, então não
 * recebe o cursor de link — quem lê "em breve" não é convidado a clicar. */
.oc-b .oc-barra-cel.oc-em-breve { cursor: default; color: var(--ocb-tinta-3); }
.oc-b .oc-barra-cel.oc-em-breve:hover { background: none; color: var(--ocb-tinta-3); }
.oc-b .oc-barra-cel.oc-em-breve:hover > i { color: var(--ocb-tinta-3); }

.oc-b .oc-barra-selo {
  margin-left: auto;
  /* 🔴 13/09/2026: era `flex: 0 1 auto` (o padrão), e numa célula de 148px o
   * flex encolhia o selo para 28px de caixa com 58px de texto — "EM BREV",
   * medido no painel Mais ao vivo. Quem encolhe é o bloco de texto
   * (`.oc-barra-txt`, `min-width: 0`); o selo é uma palavra e não cede. */
  flex: 0 0 auto;
  padding: 2px 5px;
  border: 1px solid var(--ocb-marca);
  border-radius: 4px;
  color: var(--ocb-marca);
  font-size: 9.5px;
  font-weight: 600;
  line-height: 1;
  letter-spacing: .07em;
  text-transform: uppercase;
  white-space: nowrap;
}

.oc-b .oc-barra-fio {
  height: 1px;
  margin: 6px 8px;
  background: var(--ocb-fio);
}

/* ── lado direito ────────────────────────────────────────────────────────── */

.oc-b .oc-barra-dir {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-shrink: 0;
  margin-left: auto;
}

.oc-b .oc-barra-sep {
  width: 1px;
  height: 20px;
  margin: 0 6px;
  background: var(--ocb-fio-forte);
  flex-shrink: 0;
}

/* Botão de ícone: alvo de 36px, ícone de 18px. */
.oc-b .oc-barra-icone {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  padding: 0;
  border: 0;
  border-radius: 10px;
  background: none;
  color: var(--ocb-tinta-2);
  cursor: pointer;
  transition: background-color 130ms ease-out, color 130ms ease-out;
}

.oc-b .oc-barra-icone:hover,
.oc-b .oc-barra-icone[aria-expanded="true"] {
  background: var(--ocb-superficie-2);
  color: var(--ocb-tinta);
}

.oc-b.oc-barra[data-oc-sobre]:not(.oc-rolou) .oc-barra-icone { color: var(--ocb-tinta); }
.oc-b.oc-barra[data-oc-sobre]:not(.oc-rolou) .oc-barra-icone:hover {
  background: rgba(255, 255, 255, .14);
}
:root[theme="light"] .oc-b.oc-barra[data-oc-sobre]:not(.oc-rolou) .oc-barra-icone:hover {
  background: rgba(11, 11, 12, .08);
}

.oc-b .oc-barra-icone svg { display: block; }

/* O tema troca o ícone; as duas peças ocupam o mesmo lugar e uma delas está
 * sempre fora, para a troca não empurrar a barra. */
.oc-b .oc-barra-tema > span {
  position: absolute;
  display: flex;
  transition: opacity 240ms ease-out, transform 320ms cubic-bezier(.16, 1, .3, 1);
}
.oc-b .oc-barra-tema > .oc-fora {
  opacity: 0;
  transform: scale(.55) rotate(28deg);
  pointer-events: none;
}

/* ── botões de ação ──────────────────────────────────────────────────────── */

/* 30/08/2026: Depositar, Entrar, Criar conta e a pastilha do saldo são o
 * botão padrão do site (`botao.css`, corte diagonal). Forma e estado vêm de
 * lá; aqui a letra e as CORES DO TEMA — a barra tem tema claro, e o preto
 * fixo do `botao.css` seria um botão preto sobre fundo branco. A classe
 * dupla (`.oc-bt.oc-bt-escuro`) é para vencer a folha do botão, que carrega
 * DEPOIS desta. */
.oc-b .oc-barra-btn { font-size: 13.5px; }
.oc-b .oc-barra-btn .oc-bt-rot { gap: 6px; }
.oc-b .oc-bt.oc-bt-escuro { --bt-fundo: var(--ocb-superficie); --bt-tinta: var(--ocb-tinta); }
.oc-b .oc-bt.oc-bt-escuro:hover { --bt-tinta: var(--ocb-marca); }
.oc-b .oc-bt.oc-bt-marca { --bt-fundo: var(--ocb-marca); --bt-tinta: var(--ocb-marca-tinta); }

/* ── a cadeia do topo (30/08/2026) ──────────────────────────────────────
 * Desenho do dono: Depositar, saldo e conta numa faixa só — a `.oc-bt-cadeia`
 * do `botao.css`. Aqui só a letra, os ícones e as folgas medidas no desenho
 * (tela de 440px: faixa 38px, cartão 21px, pessoa 24px; no telefone tudo a
 * 80%, no bloco de ≤1023px abaixo). A letra: o
 * desenho mede 12,5px da OFFCODE Sans — a 13px "US$ 180.85" saía 5% mais
 * largo e a faixa não cabia na tela ao lado do logo. */
.oc-b .oc-barra-cadeia .oc-bt { font-size: 12.5px; }

/* ── saldo ───────────────────────────────────────────────────────────────── */

/* Vive numa pastilha com fundo PRÓPRIO.
 *
 * 🔴 O defeito relatado: sobre o vídeo da home, "~US$ 323,18" a 62% de
 * opacidade era ilegível — e este é o número que a pessoa usa para decidir um
 * saque. 🔑 Número que decide dinheiro não pode depender do quadro do vídeo
 * que está passando atrás. A pastilha traz o fundo consigo.
 */
.oc-b .oc-barra-saldo {
  --cadeia-pad-esq: 15px;
  --cadeia-pad-dir: 14px;
  font-size: 13px;
  /* Algarismo de largura fixa: numa coluna de valores, a vírgula fora de
   * lugar é o que faz alguém ler 7,203 como 72,03. */
  font-variant-numeric: tabular-nums;
}
.oc-b .oc-barra-saldo .oc-bt-rot { gap: 8px; }

.oc-b .oc-barra-saldo i {
  display: flex;
  color: var(--ocb-tinta-3);
  flex-shrink: 0;
}
.oc-b .oc-barra-saldo i svg { width: 21px; height: 21px; }
/* Tema claro: a superfície é branca como o fundo, e o segmento do meio da
 * cadeia sumiria entre dois laranjas. O mesmo cinza do Sacar da cabeça. */
:root[theme="light"] .oc-b .oc-barra-saldo { --bt-fundo: var(--ocb-superficie-2); }

/* Enquanto a leitura não voltou: barra de carregamento, não número.
 * 🔑 Zero é um valor; "ainda não sei" não é zero. */
.oc-b .oc-barra-saldo[data-oc-carregando] b {
  display: block;
  width: 68px;
  height: 10px;
  border-radius: 5px;
  background: linear-gradient(90deg, var(--ocb-fio) 0%,
                              var(--ocb-fio-forte) 50%, var(--ocb-fio) 100%);
  background-size: 200% 100%;
  animation: oc-barra-brilho 1.4s linear infinite;
}

@keyframes oc-barra-brilho {
  from { background-position: 100% 0; }
  to   { background-position: -100% 0; }
}

/* Falhou: o número não aparece, e a pastilha diz que não sabe. */
.oc-b .oc-barra-saldo[data-oc-falhou] { color: var(--ocb-tinta-3); }

/* ── conta ───────────────────────────────────────────────────────────────── */

.oc-b .oc-barra-conta { position: relative; display: flex; align-items: center; }

/* 30/08/2026: a conta é o ÚLTIMO segmento da cadeia (`botao.css`) — laranja,
 * emenda diagonal à esquerda, ponta direita reta. A pessoa vai desenhada
 * direto sobre o laranja, sem o disco de antes: é assim no desenho do dono.
 * Forma, fundo e tinta vêm do `.oc-bt.oc-bt-marca`; aqui só as medidas.
 *
 * 🔴 O chevron é um span também, e a primeira versão deste botão pintava
 * TODO `<span>` filho — saiu com um disco laranja em volta da seta, como se
 * fossem dois avatares. `:first-child` é o que separa a inicial do resto. */
.oc-b .oc-barra-avatar {
  --cadeia-pad-esq: 10.5px;
  --cadeia-pad-dir: 10.5px;
}
.oc-b .oc-barra-avatar .oc-bt-rot { gap: 2.5px; }
.oc-b .oc-barra-avatar .oc-bt-rot > span:first-child {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  font-size: 13px;
  font-weight: 700;
  line-height: 1;
  text-transform: uppercase;
}
.oc-b .oc-barra-avatar .oc-bt-rot > span:first-child svg { width: 24px; height: 24px; }
/* Só traço: o ícone traz a cabeça preenchida (era para o disco laranja de
 * antes); sobre o laranja da cadeia o desenho do dono é contorno. */
.oc-b .oc-barra-avatar .oc-bt-rot > span:first-child svg * { fill: none; }
.oc-b .oc-barra-avatar[aria-expanded="true"] { filter: brightness(.9); }
.oc-b .oc-barra-avatar[aria-expanded="true"] .oc-barra-seta { transform: rotate(180deg); }

.oc-b .oc-barra-conta .oc-barra-painel { min-width: 224px; top: calc(100% + 2px); }

.oc-b .oc-barra-sair { color: #FF5B67; }
.oc-b .oc-barra-sair:hover { background: rgba(255, 91, 103, .12); color: #FF5B67; }
.oc-b .oc-barra-sair:hover > i { color: #FF5B67; }
.oc-b .oc-barra-sair > i { color: #FF5B67; }

/* ── a cabeça do menu de conta ───────────────────────────────────────────
 *
 * O menu deixou de ser uma lista de destinos: em cima o número, as duas
 * ações e a onda; embaixo as contas, cada uma com o próprio valor. É a
 * carteira resumida (dono, 28/08/2026).
 *
 * 🔑 Duas camadas que precisam PARECER duas: a cabeça é imagem, a lista é
 * fundo. Por isso a lista é `--ocb-menu` (quase preto) e a cabeça carrega a
 * onda — escurecer a de baixo faz a de cima subir sem clarear nada. */
.oc-b .oc-barra-conta .oc-barra-painel.oc-conta-larga {
  min-width: 320px;
  padding: 0;
  overflow: hidden;
}

.oc-b .oc-cabeca {
  position: relative;
  padding: 18px 16px 16px;
  isolation: isolate;
}

/* 🔴 Com `background-size` acima de 100% o recorte cai num canto escuro e o
 * arco fica de fora — a onda virava um risco no alto à direita. `cover`
 * mostra a LARGURA inteira, e é atravessando a largura que o arco existe.
 *
 * Intensidade C, escolhida pelo dono entre três: a imagem manda e o véu só
 * protege o texto. Ele escurece de cima para baixo porque o texto está em
 * cima e a malha de pontos, embaixo, não disputa com nada. */
.oc-b .oc-cabeca::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: -1;
  background:
    linear-gradient(180deg, rgba(2, 2, 2, .30) 0%, rgba(2, 2, 2, .06) 42%,
                    rgba(2, 2, 2, .48) 100%),
    url('/_local/img/menu-conta-fundo.webp') center 64% / cover no-repeat;
}

/* No claro a onda escura viraria um bloco preto no meio de um painel branco.
   Ela é do tema escuro; no claro fica a superfície lisa. */
:root[theme="light"] .oc-b .oc-cabeca::before { display: none; }
:root[theme="light"] .oc-b .oc-cabeca { border-bottom: 1px solid var(--ocb-fio); }

.oc-b .oc-cabeca-rot {
  display: flex;
  align-items: center;
  gap: 8px;
  color: var(--ocb-tinta-3);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .07em;
  text-transform: uppercase;
}

.oc-b .oc-cabeca-olho {
  display: inline-flex;
  color: inherit;
  cursor: pointer;
  line-height: 0;
}

[dir] .oc-b .oc-cabeca-olho { background: none; border: 0; padding: 0; }
.oc-b .oc-cabeca-olho:hover { color: var(--ocb-tinta-2); }
.oc-b .oc-cabeca-olho:focus-visible { outline: 2px solid var(--ocb-marca); outline-offset: 3px; }

/* O número, na mesma família monoespaçada do saldo da carteira: os dois
   dizem a mesma coisa e não podem parecer duas medidas diferentes. */
.oc-b .oc-cabeca-num {
  display: flex;
  align-items: baseline;
  gap: 3px;
  font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
  letter-spacing: -1.2px;
}

[dir] .oc-b .oc-cabeca-num { margin-top: 6px; }

.oc-b .oc-cabeca-cifrao { color: var(--ocb-tinta-3); font-size: 17px; }
.oc-b .oc-cabeca-int { color: var(--ocb-tinta); font-size: 27px; font-weight: 500; }
.oc-b .oc-cabeca-cent { color: var(--ocb-tinta-3); font-size: 17px; }

.oc-b .oc-cabeca-var {
  display: inline-block;
  border-radius: 6px;
  font-size: 11.5px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}

[dir] .oc-b .oc-cabeca-var { padding: 4px 8px; margin-top: 9px; }
.oc-b .oc-cabeca-var.oc-sobe { background: rgba(63, 166, 106, .16); color: #4cb37b; }
.oc-b .oc-cabeca-var.oc-cai { background: rgba(229, 83, 75, .16); color: #e5675f; }

.oc-b .oc-cabeca-acoes { display: flex; gap: 8px; }
[dir] .oc-b .oc-cabeca-acoes { margin-top: 14px; }

.oc-b .oc-cabeca-acao {
  flex: 1 1 0;
  border-radius: 9px;
  font: inherit;
  font-size: 12.5px;
  font-weight: 600;
  text-align: center;
  text-decoration: none;
  cursor: pointer;
  transition: background 140ms ease, border-color 140ms ease, color 140ms ease;
}

[dir] .oc-b .oc-cabeca-acao { padding: 9px 10px; border: 1px solid transparent; }

/* 🔑 Uma ação primária por superfície: com as duas laranja, a escolha some e
   o menu vira dois botões iguais. */
.oc-b .oc-cabeca-acao.oc-cheia { background: var(--ocb-marca); color: var(--ocb-marca-tinta); }
.oc-b .oc-cabeca-acao.oc-cheia:hover { background: var(--ocb-marca-hover); }

[dir] .oc-b .oc-cabeca-acao.oc-fio {
  background: rgba(255, 255, 255, .08);
  border-color: var(--ocb-fio-forte);
}
.oc-b .oc-cabeca-acao.oc-fio { color: var(--ocb-tinta); }
[dir] .oc-b .oc-cabeca-acao.oc-fio:hover { background: rgba(255, 255, 255, .14); }
:root[theme="light"] .oc-b .oc-cabeca-acao.oc-fio { background: var(--ocb-superficie-2); }

.oc-b .oc-cabeca-acao:focus-visible { outline: 2px solid var(--ocb-marca); outline-offset: 2px; }

/* A cabeça entra com a mesma curva das linhas. */
.oc-b .oc-barra-painel.oc-aberto .oc-cabeca {
  animation: oc-cel-entra 380ms var(--ocb-mola) both;
}

/* ── o corpo: as contas ─────────────────────────────────────────────────── */

.oc-b .oc-conta-corpo { padding: 6px; background: var(--ocb-menu); }
[dir] .oc-b .oc-conta-corpo { border-top: 1px solid var(--ocb-fio); }

/* Cada conta traz o próprio número à direita: o menu deixa de ser lista de
   destinos e passa a ser a carteira resumida. */
.oc-b .oc-barra-cel .oc-cel-val {
  margin-left: auto;
  color: var(--ocb-tinta-2);
  font-size: 12px;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.oc-b .oc-barra-cel:hover .oc-cel-val { color: var(--ocb-tinta); }

/* ── idioma ──────────────────────────────────────────────────────────────── */

.oc-b .oc-barra-idioma { position: relative; display: flex; align-items: center; }
.oc-b .oc-barra-idioma .oc-barra-painel { min-width: 188px; top: calc(100% + 2px); }
.oc-b .oc-barra-idioma .oc-barra-cel[aria-current="true"] { color: var(--ocb-tinta); }
.oc-b .oc-barra-idioma .oc-barra-cel[aria-current="true"] > i { color: var(--ocb-marca); }

/* ── gaveta (telefone) ───────────────────────────────────────────────────── */

.oc-b .oc-barra-gaveta-abre { display: none; }

/* 🔴 Fechada, a gaveta é uma camada FIXA de tela inteira, com z-index acima
 * da barra de abas (1000 × 900), `visibility: hidden` — e `pointer-events`
 * no padrão, `auto`. Nos motores de mesa `visibility: hidden` basta: o
 * hit-test pula o que não se vê. No iOS a rolagem por toque é decidida fora
 * do motor, na árvore de camadas do processo de UI, e a caixa da gaveta é um
 * scroller de 2.268px (`overflow-y: auto`) vivo o tempo todo. O dono
 * descreveu exatamente isso em 30/08/2026: "travada a tela como se tivesse
 * sobrepondo algo", só no aparelho.
 *
 * 🔑 Fechada, a gaveta não pode ser alvo de NADA: `pointer-events: none` na
 * camada e `overflow: hidden` na caixa. Aberta, os dois voltam. Não há
 * transição a perder — as duas propriedades trocam no mesmo instante em que
 * a classe entra. */
.oc-b.oc-barra-gaveta {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: flex;
  visibility: hidden;
  opacity: 0;
  pointer-events: none;
  transition: opacity 190ms ease-out, visibility 190ms;
}

.oc-b.oc-barra-gaveta.oc-aberto { visibility: visible; opacity: 1; pointer-events: auto; }

.oc-b .oc-barra-gaveta-veu {
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, .62);
}

.oc-b .oc-barra-gaveta-caixa {
  position: relative;
  width: min(320px, 86vw);
  height: 100%;
  padding: 12px;
  /* No app da tela inicial do iPhone a gaveta (fixed, inset 0) começa DEBAIXO
   * do relógio: o wordmark e o X nasciam atrás da barra de status (foto do
   * dono, 06/09/2026). O cabeçalho fixo já faz esta conta; a gaveta não fazia. */
  padding-top: calc(12px + env(safe-area-inset-top, 0px));
  box-sizing: border-box;
  /* Fechada não é scroller — ver o comentário da gaveta acima. */
  overflow: hidden;
  background: var(--ocb-fundo);
  border-right: 1px solid var(--ocb-fio);
  transform: translateX(-100%);
  transition: transform 240ms cubic-bezier(.16, 1, .3, 1);
}

.oc-b.oc-barra-gaveta.oc-aberto .oc-barra-gaveta-caixa { transform: translateX(0); overflow-y: auto; }

.oc-b .oc-barra-gaveta-topo {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 44px;
  margin-bottom: 8px;
}

.oc-b.oc-barra-gaveta h3 {
  margin: 14px 10px 4px;
  color: var(--ocb-tinta-3);
  font: inherit;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .07em;
  text-transform: uppercase;
}

.oc-b .oc-barra-gaveta-pe {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin-top: 14px;
  padding-top: 12px;
  border-top: 1px solid var(--ocb-fio);
}

.oc-b .oc-barra-gaveta-acoes {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 0 4px 6px;
}

/* Na gaveta o botão ocupa metade da largura: alvo de toque grande, e os dois
 * do mesmo tamanho não sugerem que um vale mais que o outro — a cor já diz. */
.oc-b .oc-barra-gaveta-acoes .oc-barra-btn {
  flex: 1;
  --h: 36px;
  --r: 10px;
  --raio: 10px;
}

/* ── gaveta COMPACTA (30/08/2026) ─────────────────────────────────────────
 * Linhas de 40px, grupos em sanfona fechada, células internas de 36px sem
 * descrição, seções pequenas. Cabe numa tela sem rolar. */
.oc-b.oc-barra-gaveta .oc-barra-cel {
  min-height: 40px;
  padding: 0 10px;
  font-size: 14px;
  border-radius: 8px;
}
.oc-b.oc-barra-gaveta .oc-barra-desc { display: none; }
.oc-b .oc-barra-sanf { display: flex; flex-direction: column; }
.oc-b .oc-barra-sanf-bt { width: 100%; }
.oc-b .oc-barra-sanf-bt .oc-barra-txt { flex: 1 1 auto; min-width: 0; }
.oc-b .oc-barra-sanf-bt .oc-barra-seta {
  display: inline-flex;
  flex: 0 0 auto;
  margin-left: auto;
  color: var(--ocb-tinta-3);
  /* O glifo aponta para a direita; fechado aponta para BAIXO, aberto para cima. */
  transform: rotate(90deg);
  transition: transform 180ms ease;
}
.oc-b .oc-barra-sanf-bt[aria-expanded="true"] .oc-barra-seta { transform: rotate(-90deg); }
.oc-b .oc-barra-sanf-bt[aria-expanded="true"],
.oc-b .oc-barra-sanf-bt.oc-atual { color: var(--ocb-tinta); }
.oc-b .oc-barra-sanf-corpo { padding: 0 0 4px; }
.oc-b .oc-barra-sanf-corpo[hidden] { display: none; }
.oc-b.oc-barra-gaveta .oc-barra-sanf-corpo .oc-barra-cel {
  min-height: 36px;
  padding-left: 38px;
  font-size: 13.5px;
  font-weight: 400;
  color: var(--ocb-tinta-2);
}
.oc-b.oc-barra-gaveta .oc-barra-sanf-corpo .oc-barra-cel > i svg { width: 16px; height: 16px; }
.oc-b.oc-barra-gaveta .oc-barra-sanf-corpo .oc-barra-secao {
  margin: 0;
  padding: 6px 10px 2px 38px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .07em;
  text-transform: uppercase;
}
.oc-b.oc-barra-gaveta .oc-barra-gaveta-pe { margin-top: 10px; padding-top: 8px; gap: 2px; }
.oc-b.oc-barra-gaveta .oc-barra-gaveta-topo { margin-bottom: 4px; }

/* ── busca ───────────────────────────────────────────────────────────────── */

.oc-b .oc-barra-busca { position: relative; display: flex; align-items: center; }

.oc-b .oc-barra-busca-painel {
  position: absolute;
  top: calc(100% + 2px);
  right: 0;
  width: min(420px, calc(100vw - 32px));
  padding: 10px;
  box-sizing: border-box;
  background: var(--ocb-menu);
  border: 1px solid var(--ocb-fio);
  border-radius: 14px;
  box-shadow: var(--ocb-sombra);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-6px);
  transition: opacity 150ms ease-out,
              transform 190ms cubic-bezier(.16, 1, .3, 1),
              visibility 150ms;
}

.oc-barra-busca-painel.oc-aberto {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

.oc-b .oc-barra-busca-campo {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 0 12px;
  border: 1px solid var(--ocb-fio-forte);
  border-radius: 10px;
  background: var(--ocb-fundo);
}

.oc-b .oc-barra-busca-campo > i { display: flex; color: var(--ocb-tinta-3); }

.oc-b .oc-barra-busca-campo > input {
  flex: 1;
  min-width: 0;
  height: 40px;
  border: 0;
  background: none;
  color: var(--ocb-tinta);
  font: inherit;
  font-size: 14px;
  outline: none;
}

.oc-b .oc-barra-busca-campo > input::placeholder { color: var(--ocb-tinta-3); }

.oc-b .oc-barra-busca-campo > kbd {
  padding: 2px 6px;
  border: 1px solid var(--ocb-fio);
  border-radius: 5px;
  color: var(--ocb-tinta-3);
  font: inherit;
  font-size: 10.5px;
  font-weight: 600;
}

.oc-b .oc-barra-busca-lista {
  max-height: 320px;
  margin: 8px 0 0;
  padding: 0;
  overflow-y: auto;
  list-style: none;
  scrollbar-color: var(--ocb-fio-forte) transparent;
  scrollbar-width: thin;
}

.oc-b .oc-barra-busca-lista::-webkit-scrollbar { width: 8px; }
.oc-b .oc-barra-busca-lista::-webkit-scrollbar-thumb {
  background: var(--ocb-fio-forte);
  border-radius: 4px;
}
.oc-b .oc-barra-busca-lista::-webkit-scrollbar-track { background: none; }

.oc-b .oc-barra-busca-lista .oc-barra-cel[data-oc-alvo] {
  background: var(--ocb-superficie-2);
  color: var(--ocb-tinta);
}

.oc-b .oc-barra-busca-par {
  margin-left: auto;
  color: var(--ocb-tinta-3);
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: .04em;
  text-transform: uppercase;
  white-space: nowrap;
}

.oc-b .oc-barra-busca-nada {
  padding: 16px 10px;
  color: var(--ocb-tinta-3);
  font-size: 13px;
  line-height: 1.5;
}

/* ── troca de tema ────────────────────────────────────────────────────────
 *
 * A máscara circular só aparece se o cruzamento padrão sair do caminho: com o
 * `mix-blend-mode: plus-lighter` que o navegador aplica, os dois quadros se
 * somam e o recorte fica invisível. O quadro novo entra por cima, inteiro, e
 * é o `clipPath` do `barra-tema.js` que o revela.
 */
::view-transition-old(root),
::view-transition-new(root) {
  animation: none;
  mix-blend-mode: normal;
}
::view-transition-old(root) { z-index: 1; }
::view-transition-new(root) { z-index: 999; }

/* ── superfícies do navegador ────────────────────────────────────────────── */

.oc-b ::selection {
  background: rgba(247, 147, 26, .3);
  color: var(--ocb-tinta);
}

.oc-b :focus-visible {
  outline: 2px solid var(--ocb-marca);
  outline-offset: 2px;
  border-radius: 8px;
}

/* ── telefone e tablet ───────────────────────────────────────────────────── */

@media (max-width: 1023px) {
  .oc-b .oc-barra-nav { display: none; }
  .oc-b .oc-barra-busca { display: none; }
  .oc-b .oc-barra-idioma { display: none; }
  .oc-b .oc-barra-tema { display: none; }
  .oc-b .oc-barra-sep { display: none; }
  .oc-b .oc-barra-gaveta-abre { display: inline-flex; }
  /* Sem o padding direito de 12px: ele separava o logo do menu, que aqui
   * não existe. Cada px conta — o ≡ é o item que o flex esmaga quando a
   * linha não cabe (medido: ele ficava com 0px de largura no telefone). */
  .oc-b .oc-barra-marca { padding: 0 0 0 4px; }
  /* 8px à direita: a faixa termina onde o desenho do dono termina. */
  .oc-b .oc-barra-linha { padding: 0 8px 0 12px; gap: 6px; }
  /* A cadeia 20% menor no telefone (dono, 30/08/2026, depois de ver a 1:1
   * no aparelho): TUDO em escala — altura, letra, ícones, folgas, respiro e
   * cantos — para a proporção do desenho ficar. O desktop fica no desenho.
   * A 80% ela cabe em 393 e 375 ao lado do logo cheio; em 360 (Android) só
   * o ícone do cartão sai, abaixo. */
  /* Classe dupla: `[dir] .oc-bt-cadeia` do botao.css (0,2,0) carrega DEPOIS
   * e ganharia o empate — medido: a altura ficava em 38. */
  .oc-b .oc-bt-cadeia.oc-barra-cadeia { --cadeia-h: 30px; --cadeia-raio: 3px; --cadeia-emenda: 2.5px; }
  .oc-b .oc-barra-cadeia .oc-bt { font-size: 10px; }
  .oc-b .oc-barra-cadeia .oc-bt-cadeia-ini { --cadeia-pad-esq: 13px; --cadeia-pad-dir: 19px; }
  .oc-b .oc-barra-saldo { --cadeia-pad-esq: 12px; --cadeia-pad-dir: 11px; }
  .oc-b .oc-barra-saldo .oc-bt-rot { gap: 6px; }
  .oc-b .oc-barra-saldo i svg { width: 17px; height: 17px; }
  .oc-b .oc-barra-saldo[data-oc-carregando] b { width: 54px; height: 8px; }
  .oc-b .oc-barra-avatar { --cadeia-pad-esq: 8.5px; --cadeia-pad-dir: 8.5px; }
  .oc-b .oc-barra-avatar .oc-bt-rot { gap: 2px; }
  .oc-b .oc-barra-avatar .oc-bt-rot > span:first-child,
  .oc-b .oc-barra-avatar .oc-bt-rot > span:first-child svg { width: 19px; height: 19px; }
  .oc-b .oc-barra-avatar .oc-barra-seta,
  .oc-b .oc-barra-avatar .oc-barra-seta svg { width: 8px; height: 8px; }
  /* O saldo FICA na barra (desenho do dono, 30/08/2026): é o segmento do
   * meio da cadeia. A regra que o escondia aqui já não valia — o `botao.css`
   * carrega depois e o `display` dele ganhava o empate —, e o que o dono viu
   * no telefone foi o saldo visível. Em 393px a cadeia encolhe (abaixo).
   *
   * 🔴 Aqui havia `.oc-barra-conta-topo { display: block }`, que ligava um
   * topo que só existia no telefone. Ele não existe mais: a cabeça nova
   * mostra o número em toda largura, e uma regra que liga elemento morto é
   * uma regra que ninguém vai apagar depois. */
  /* 320px cabe em 375, mas não em 320. `min()` é o que impede o painel de
   * sair pela borda no aparelho mais estreito que ainda existe. */
  .oc-b .oc-barra-conta .oc-barra-painel.oc-conta-larga {
    min-width: 0;
    width: min(320px, calc(100vw - 24px));
  }
}

@media (max-width: 420px) {
  .oc-b .oc-barra-marca svg { width: 92px; }
  /* Entrar e Criar conta. O Depositar da cadeia tem a altura DA cadeia. */
  .oc-b .oc-bt.oc-barra-btn:not(.oc-bt-cadeia-ini) { --h: 32px; --r: 9px; --raio: 8px; font-size: 13px; }
  .oc-b .oc-barra-dir { gap: 4px; }
}

/* Android de 360px: a 80% a faixa mede ~221px e o espaço ao lado do logo é
 * 220. Sai o ícone do cartão; o NÚMERO fica inteiro — é ele que decide
 * dinheiro. */
@media (max-width: 380px) {
  .oc-b .oc-barra-marca svg { width: 80px; }
}
@media (max-width: 365px) {
  .oc-b .oc-barra-saldo i { display: none; }
}

@media (min-width: 1024px) {
  .oc-b.oc-barra-gaveta { display: none; }
}

/* Quem pediu menos movimento recebe o estado final, não a animação. */
@media (prefers-reduced-motion: reduce) {
  .oc-b * {
    transition-duration: 1ms !important;
    animation-duration: 1ms !important;
  }
}

/* ── item com descrição ───────────────────────────────────────────────────
 *
 * Molde do menu da BingX: ícone à esquerda, nome em branco e uma linha de
 * descrição em cinza embaixo. O item fica MAIOR, não menor — é o que o dono
 * pediu — e o painel se alarga para a frase caber numa linha só.
 *
 * 🔑 `align-items: flex-start` só quando há descrição: com duas linhas de
 * texto, centralizar joga o ícone para o meio do bloco, longe do nome que ele
 * nomeia. */
.oc-b .oc-barra-painel:has(.oc-com-desc) { min-width: 328px; }

.oc-b .oc-barra-cel.oc-com-desc {
  align-items: flex-start;
  gap: 12px;
  padding: 11px 12px;
}

.oc-b .oc-barra-cel.oc-com-desc > i { margin-top: 1px; }

.oc-b .oc-barra-txt {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}

.oc-b .oc-barra-nome {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.oc-b .oc-barra-desc {
  color: var(--ocb-tinta-3, #8b8f9a);
  font-size: 12px;
  font-weight: 400;
  line-height: 1.35;
}

/* No item aceso a descrição acompanha o nome, senão ela some contra o realce. */
.oc-b .oc-barra-cel:hover .oc-barra-desc,
.oc-b .oc-barra-cel[aria-current="page"] .oc-barra-desc { color: var(--ocb-tinta-2); }

/* O selo `Soon` volta para a linha do NOME: pendurado no fim da célula ele
   ficava alinhado com a descrição e parecia legenda dela. */
.oc-b .oc-barra-cel.oc-com-desc .oc-barra-selo { align-self: flex-start; margin-top: 1px; }

/* ── a seta do item com painel lateral ──────────────────────────────────── */
.oc-b .oc-barra-cel.oc-tem-sub { position: relative; padding-right: 26px; }

.oc-b .oc-barra-seta-sub {
  position: absolute;
  right: 9px;
  top: 50%;
  transform: translateY(-50%);
  display: inline-flex;
  color: var(--ocb-tinta-3, #8b8f9a);
  transition: transform .16s var(--ocb-mola, ease), color .16s;
}
.oc-b .oc-barra-cel.oc-tem-sub:hover .oc-barra-seta-sub {
  color: var(--ocb-tinta-1, #fff);
  transform: translateY(-50%) translateX(2px);
}

/* ── as duas colunas do cartão ─────────────────────────────────────────
 *
 * Medidas tiradas da captura da própria BingX (`pacote-04c28bc3ae25.css`,
 * escopo `data-v-49768441`), não inventadas: célula de 50px com `padding
 * 12px 24px` e `gap 15px`, nome em 14px/500, descrição em 13px com
 * `line-height 14px`, título de seção em 13px com `padding 8px 16px`, e o
 * cartão com `padding: 16px 8px`.
 *
 * 🔴 A versão anterior era um painel FLUTUANTE preso ao body, posicionado à
 * mão ao lado do cartão — tinha de acertar posição, borda e sombra para
 * FINGIR que era o mesmo objeto. Sendo a coluna, ele é. */
.oc-b .oc-barra-painel.oc-duas {
  display: flex;
  flex-direction: row;
  gap: 0;
  padding: 16px 8px;
  min-width: 620px;
}
.oc-b .oc-barra-col { display: flex; flex-direction: column; width: 300px; flex: none; }

.oc-b .oc-barra-lado {
  display: flex;
  flex-direction: column;
  width: 296px;
  flex: none;
  max-height: 384px;
  padding-left: 8px;
  box-sizing: border-box;
  /* A divisória entre as duas colunas — é ela que diz que são duas coisas, e
     não uma lista que continua. */
  border-left: 1px solid var(--ocb-fio, #23262e);
}

/* Título de seção (`Trade`, `Explore`). */
.oc-b .oc-barra-secao {
  box-sizing: border-box;
  width: 100%;
  padding: 8px 16px;
  margin-bottom: 4px;
  color: var(--ocb-tinta-3, #8b8f9a);
  font-size: 13px;
  font-weight: 400;
  line-height: 1.2;
}
.oc-b .oc-barra-secao:first-child { padding-top: 0; }

/* O item ATIVO fica aceso: é ele que decide o que a coluna da direita mostra,
   e sem o realce a relação entre os dois lados não se enxerga. */
.oc-b .oc-barra-cel.oc-ativo { background: var(--ocb-realce, rgba(255, 255, 255, .06)); }

/* ── a busca ─────────────────────────────────────────────────────────────── */
.oc-b .oc-lado-busca {
  display: flex;
  align-items: center;
  gap: 8px;
  flex: none;
  margin: 0 8px 8px;
  padding: 0 10px;
  height: 34px;
  border-radius: 8px;
  background: var(--ocb-fundo-2, rgba(255, 255, 255, .04));
}
.oc-b .oc-lado-lupa { display: inline-flex; color: var(--ocb-tinta-3, #8b8f9a); }
.oc-b .oc-lado-campo {
  flex: 1;
  min-width: 0;
  border: 0;
  background: none;
  color: var(--ocb-tinta-1, #fff);
  font: inherit;
  font-size: 13px;
  outline: none;
}
.oc-b .oc-lado-campo::placeholder { color: var(--ocb-tinta-3, #8b8f9a); }
/* O X nativo da busca some: ele vem com a cor do sistema e destoa no escuro. */
.oc-b .oc-lado-campo::-webkit-search-cancel-button { display: none; }

/* A lista rola dentro da coluna — o cartão tem altura fixa, e uma lista que
   cresce empurraria o rodapé da página. */
.oc-b .oc-lado-lista { flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain; }
.oc-b .oc-lado-lista::-webkit-scrollbar { width: 4px; }
.oc-b .oc-lado-lista::-webkit-scrollbar-thumb {
  background: var(--ocb-fio, #23262e); border-radius: 4px;
}

.oc-b .oc-sub-cel {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 7px 10px;
  border-radius: 9px;
  color: var(--ocb-tinta-2, #c9ced9);
  font-size: 13.5px;
  line-height: 1.2;
  text-decoration: none;
  white-space: nowrap;
}
.oc-b .oc-sub-cel:hover { background: var(--ocb-realce, rgba(255, 255, 255, .06)); }

.oc-b .oc-sub-moeda {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: none;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  overflow: hidden;
  background: var(--ocb-fio, #23262e);
  font-size: 9px;
  font-weight: 600;
  color: var(--ocb-tinta-3, #8b8f9a);
}
.oc-b .oc-sub-moeda img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* Base em branco, cotação apagada: o que se escolhe é a MOEDA; o `/USDT` é a
   mesma palavra em quase toda a lista e competir com ela cansa o olho. */
.oc-b .oc-sub-par strong { color: var(--ocb-tinta-1, #fff); font-weight: 600; }
.oc-b .oc-sub-par span { color: var(--ocb-tinta-3, #8b8f9a); font-weight: 400; }

/* ── a linha com mini gráfico ─────────────────────────────────────────────
 *
 * Quatro colunas: ícone · par · faísca · preço e variação. O par empurra o
 * resto para a direita (`flex: 1`) para que preço e variação fiquem alinhados
 * entre si em todas as linhas — uma coluna de números que não alinha obriga a
 * ler cada linha de novo. */
.oc-b .oc-sub-par { flex: 1 1 auto; min-width: 0; }

/* Vão RESERVADO: a faísca chega da rede depois do painel, e sem a caixa já
   dimensionada cada resposta empurraria as linhas de baixo — o menu tremeria
   oito vezes debaixo do mouse. */
.oc-b .oc-sub-graf {
  flex: none;
  display: block;
  width: 52px;
  height: 18px;
}
.oc-b .oc-sub-faisca { display: block; width: 100%; height: 100%; overflow: visible; }

.oc-b .oc-sub-num {
  flex: none;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 1px;
  min-width: 78px;
  font-variant-numeric: tabular-nums;
}
.oc-b .oc-sub-num > strong {
  color: var(--ocb-tinta-1, #fff);
  font-size: 12.5px;
  font-weight: 600;
  line-height: 1.2;
}
.oc-b .oc-sub-var {
  font-size: 11px;
  line-height: 1.2;
  color: var(--ocb-tinta-3, #8b8f9a);
}
.oc-b .oc-sub-var.oc-alta  { color: var(--oc-sub-alta, #16c784); }
.oc-b .oc-sub-var.oc-baixa { color: var(--oc-sub-baixa, #ea3943); }


/* ── Tema CLARO × superfícies nossas de fundo preto fixo ─────────────────
 *
 * 🔴 06/09/2026 (vídeo do dono, Brave com `theme=light`): na página de
 * afiliados o título "ATÉ 50% DAS TAXAS" e o parágrafo sumiam; só o kicker
 * laranja ficava. O tema claro (botão do sol, `barra-tema.js`) troca as
 * variáveis da captura — `--foreground-one` vira `#000` — e as nossas folhas
 * usam essas variáveis para o TEXTO, mas pintam o FUNDO com preto fixo
 * (`.oc-af { background: #020202 }` e mais ~60 superfícies). Texto preto em
 * fundo preto: invisível, e sem erro em lugar nenhum.
 *
 * 🔑 Superfície que não muda de cor com o tema não pode ler cor de texto do
 * tema. Dentro destas raízes as variáveis voltam aos valores do ESCURO
 * (medidos no navegador em 06/09: `--foreground-one #FFF`, `-two .64`,
 * `-three .48`, `-four .24`; `--text-1/2/3` #FFF/.7/.5; `--background-*`
 * #020202). Custom property herda, então basta a raiz. A captura (terminal,
 * cabeçalho) continua trocando de tema normalmente — só as nossas ilhas
 * escuras ficam escuras por inteiro. */
:root[theme="light"] :is(
  .oc-af, .oc-af-rodape, [data-oc-banner].oc-faixa, .hero-banner,
  body.oc-pag-airdrop, .oc-ad-card,
  .oc-bots-aviso, .oc-bots-prod, .oc-plano, .oc-bots-item, .oc-gb-banner,
  [data-oc-carteira] .oc-ativos, [data-oc-carteira] .oc-vazio,
  [data-oc-carteira] .oc-saldo-cartao, [data-oc-carteira] .oc-aloc-cartao,
  .oc-cbp-card, .oc-cbp-modal, .oc-cp-painel,
  .oc-copy-pnl, .oc-ct-meu, .oc-ct-hifi-card, body.oc-pag-copyhome,
  .oc-ch-card, .oc-ch-novo, .oc-ch-saida,
  .oc-dep-painel, .oc-dp-inline, .oc-dp-mini, .oc-modal-painel, .oc-tr-painel,
  .oc-hi-cartao, .oc-ss-cartao,
  body.oc-pag-launchpad, .oc-lp-card, .oc-lp-lista-card, .oc-lp-caixa,
  .oc-rod, .oc-spot-lista, .oc-fut-cab, .oc-ord-cab, body.oc-mv
) {
  --foreground-one: #FFF;
  --foreground-two: rgba(255, 255, 255, 0.64);
  --foreground-three: rgba(255, 255, 255, 0.48);
  --foreground-four: rgba(255, 255, 255, 0.24);
  --text-1: #FFFFFF;
  --text-2: rgba(255, 255, 255, 0.7);
  --text-3: rgba(255, 255, 255, 0.5);
  --background-one: #020202;
  --background-two: #020202;
}

/* ── deposito.css ── */
/* Os diálogos de dinheiro no desenho novo (handoff do dono, 01/09/2026):
 * depósito e saque compartilham este molde — véu, cartão de 470px, header
 * com ‹ título ✕, stepper de três peças diagonais, lista com busca, chips
 * "trocar", notas e erros. O `poe_barra.py` injeta esta folha em TODA página,
 * então tudo o que os dois fluxos têm em comum mora aqui; o `saque.css` só
 * acrescenta o que é do saque.
 *
 * ## Metade das regras mora em `[dir]`
 *
 * A folha da ORIGEM reseta as direcionais num bloco à parte:
 *
 *     [dir] div, [dir] p, [dir] button … { border: 0; margin: 0; padding: 0 }
 *
 * Isso é (0,1,1) e vence classe sozinha (0,1,0) — a regra chega ao navegador
 * com METADE das declarações aplicadas. `[dir] .oc-dp-item` é (0,2,0) e ganha.
 * Toda `margin`, `padding`, `border` e `background` daqui vive em `[dir]`.
 *
 * ## Sem `rem`
 *
 * A raiz deste site é `13.33vw` (~240px numa janela de 1800): `rem` escrito à
 * mão explode o layout sem erro nenhum. Tudo aqui é px (`_tools/checa_css.py`).
 *
 * ## Fontes
 *
 * Space Grotesk na UI, JetBrains Mono em número, endereço, ticker e contador.
 * Os dois arquivos em `_local/fonts/` são VARIÁVEIS (tabela `fvar`): o "400"
 * do nome é só o nome. A CSP do espelho é `font-src 'self'` — Google Fonts
 * não carrega, e é por isso que as fontes moram aqui.
 */

@font-face {
  font-family: 'Space Grotesk';
  src: url('/_local/fonts/space-grotesk-400.cbee7234.woff2') format('woff2');
  font-weight: 300 700;
  font-display: swap;
}
@font-face {
  font-family: 'JetBrains Mono';
  src: url('/_local/fonts/JetBrainsMono.340e696a.woff2') format('woff2');
  font-weight: 100 800;
  font-display: swap;
}

/* ── o véu ──────────────────────────────────────────────────────────────
 *
 * `overflow-y: auto` no VÉU, nunca no cartão: num laptop de 768px o cartão
 * do endereço passa da altura da janela, e `align-items: center` com
 * `overflow: hidden` cortaria cabeçalho e rodapé sem barra de rolagem —
 * lição do `saque-status.css`. */
.oc-dep-veu {
  position: fixed;
  inset: 0;
  z-index: 9000;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  background: rgba(0, 0, 0, .74);
  -webkit-backdrop-filter: blur(3px);
  backdrop-filter: blur(3px);
  overflow-y: auto;
  font-family: 'Space Grotesk', 'Geist', 'OFFCODE Sans', system-ui, sans-serif;
}
[dir] .oc-dep-veu { padding: 40px 16px; }

/* ── o cartão ─────────────────────────────────────────────────────────── */
.oc-dep-painel {
  position: relative;
  width: 100%;
  max-width: 470px;
  border-radius: 20px;
  overflow: hidden;
  box-shadow: 0 40px 100px rgba(0, 0, 0, .8), inset 0 0 0 1px rgba(255, 255, 255, .02);
  box-sizing: border-box;
  color: #fff;
  font-family: 'Space Grotesk', 'Geist', 'OFFCODE Sans', system-ui, sans-serif;
  font-size: 13px;
  line-height: 1.4;
}
[dir] .oc-dep-painel { margin: auto; border: 1px solid #232323; background: #0f0f0f; }
.oc-dep-painel:focus { outline: none; }

/* Dentro da carteira (`monta`) o MESMO cartão, sem véu, na largura do painel. */
.oc-dp-inline {
  position: relative;
  overflow: hidden;
  border-radius: 20px;
  color: #fff;
  font-family: 'Space Grotesk', 'Geist', 'OFFCODE Sans', system-ui, sans-serif;
  font-size: 13px;
  line-height: 1.4;
}
[dir] .oc-dp-inline { border: 1px solid #232323; background: #0f0f0f; }

/* Fio-gradiente no topo e as três listras diagonais do canto. */
.oc-dp-fio { height: 2px; background: linear-gradient(90deg, transparent 0%, #f7931a 50%, transparent 100%); }
.oc-dp-listras { position: absolute; top: -30px; right: 40px; height: 130px; width: 60px; pointer-events: none; }
.oc-dp-listras span { position: absolute; top: 0; bottom: 0; transform: skewX(-26.6deg); }
.oc-dp-listras span:nth-child(1) { right: 0; width: 20px; background: rgba(247, 147, 26, .05); }
.oc-dp-listras span:nth-child(2) { right: 32px; width: 9px; background: rgba(247, 147, 26, .035); }
.oc-dp-listras span:nth-child(3) { right: 52px; width: 4px; background: rgba(247, 147, 26, .025); }

/* ── header: ‹ título ✕ ───────────────────────────────────────────────── */
.oc-dp-topo { position: relative; display: flex; align-items: center; justify-content: space-between; gap: 12px; }
[dir] .oc-dp-topo { padding: 18px 26px; border-bottom: 1px solid #1c1c1c; }
.oc-dp-topo-esq { display: flex; align-items: center; gap: 12px; min-width: 0; }
.oc-dp-titulo { color: #fff; font-weight: 700; font-size: 16px; letter-spacing: -.2px; white-space: nowrap; }

/* 🔑 40px de alvo (44 no ✕): numa tela onde o toque errado escolhe a rede
 * errada, o alvo é parte do anteparo (medido no telefone em 25/08). */
.oc-dp-voltar, .oc-dp-x {
  display: grid;
  place-items: center;
  width: 40px;
  height: 40px;
  border-radius: 10px;
  color: #8a8a8a;
  background: transparent;
  cursor: pointer;
  font: inherit;
  line-height: 1;
  transition: border-color .15s ease, color .15s ease;
}
[dir] .oc-dp-voltar, [dir] .oc-dp-x { border: 1px solid #262626; padding: 0; margin: 0; }
.oc-dp-voltar { font-size: 20px; }
.oc-dp-x { width: 44px; height: 44px; font-size: 14px; color: #7a7a7a; }
[dir] .oc-dp-x { margin: -4px -8px -4px 0; }
[dir] .oc-dp-voltar:hover, [dir] .oc-dp-x:hover { border-color: #f7931a; color: #f7931a; }
.oc-dp-voltar:focus-visible, .oc-dp-x:focus-visible { outline: 2px solid #f7931a; outline-offset: 2px; }
.oc-dp-voltar[hidden] { display: none; }

/* ── abas Cripto / PIX (só o depósito tem) ────────────────────────────── */
.oc-dep-painel .oc-abas, .oc-dp-inline .oc-abas { display: flex; gap: 6px; }
[dir] .oc-dep-painel .oc-abas, [dir] .oc-dp-inline .oc-abas { padding: 16px 26px 0; }
.oc-dep-painel .oc-aba, .oc-dp-inline .oc-aba {
  background: transparent;
  color: #6a6a6a;
  cursor: pointer;
  font: inherit;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  border-radius: 9px;
  min-height: 34px;
  transition: color .15s ease, border-color .15s ease, background .15s ease;
}
[dir] .oc-dep-painel .oc-aba, [dir] .oc-dp-inline .oc-aba { border: 1px solid #232323; padding: 0 14px; }
.oc-dep-painel .oc-aba.is-active, .oc-dp-inline .oc-aba.is-active { color: #f7931a; }
[dir] .oc-dep-painel .oc-aba.is-active, [dir] .oc-dp-inline .oc-aba.is-active { border-color: rgba(247, 147, 26, .5); background: rgba(247, 147, 26, .08); }
.oc-dep-painel .oc-aba-corpo[hidden], .oc-dp-inline .oc-aba-corpo[hidden] { display: none !important; }
/* 🔴 No telefone o `barra.js` carrega o `abas-movel.css` da barra de abas, que
 * usa os MESMOS nomes (`.oc-abas` em grade de 5, `.oc-aba` de 62px em coluna,
 * com a pastilha `::before`). Dentro do cartão essas regras faziam CRIPTO e
 * PIX virarem dois quadrados de 62px com uma pastilha fantasma. Aqui elas são
 * devolvidas ao desenho do cartão, com especificidade maior. */
.oc-dep-painel .oc-aba, .oc-dp-inline .oc-aba { height: 34px; flex-direction: row; flex: 0 0 auto; }
.oc-dep-painel .oc-aba::before, .oc-dp-inline .oc-aba::before { content: none; }
[dir] .oc-dep-painel .oc-abas, [dir] .oc-dp-inline .oc-abas { border-top: 0; }

/* ── o stepper: três peças diagonais, vão de 3px ──────────────────────
 *
 * Cada peça é um <button> com spans absolutos por baixo do rótulo:
 *   ini  = corpo com canto esquerdo redondo + paralelogramo à direita
 *   meio = um paralelogramo só
 *   fim  = paralelogramo à esquerda + corpo com canto direito redondo
 * `skewX(-26.6deg)` porque tan(26,6°) = 0,5 — a diagonal anda meia altura,
 * o mesmo ângulo do `botao.css`. A cor das peças vem de `data-estado`. */
.oc-dp-passos { display: flex; align-items: stretch; gap: 3px; position: relative; }
[dir] .oc-dp-passos { padding: 18px 26px 0; }
.oc-dp-passo {
  position: relative;
  flex: 1;
  height: 34px;
  background: transparent;
  cursor: pointer;
  font: inherit;
  --peca: #141414;
  --tinta: #4a4a4a;
}
[dir] .oc-dp-passo { padding: 0; border: 0; margin: 0; }
.oc-dp-passo[data-estado="atual"] { --peca: #f7931a; --tinta: #0a0a0a; }
.oc-dp-passo[data-estado="feito"] { --peca: #1c1c1c; --tinta: #f7931a; }
.oc-dp-passo[data-livre="0"] { cursor: default; }
.oc-dp-passo:not([data-livre="0"]):hover { filter: brightness(1.12); }
.oc-dp-passo:focus-visible { outline: 2px solid #f7931a; outline-offset: 2px; }
.oc-dp-passo-a, .oc-dp-passo-b { position: absolute; top: 0; bottom: 0; background: var(--peca); }
.oc-dp-passo[data-pos="ini"] .oc-dp-passo-a { left: 0; right: 9px; border-radius: 10px 0 0 10px; }
.oc-dp-passo[data-pos="ini"] .oc-dp-passo-b { right: 2px; width: 15px; transform: skewX(-26.6deg); }
.oc-dp-passo[data-pos="meio"] .oc-dp-passo-a { display: none; }
.oc-dp-passo[data-pos="meio"] .oc-dp-passo-b { left: 8px; right: 8px; transform: skewX(-26.6deg); }
.oc-dp-passo[data-pos="fim"] .oc-dp-passo-a { left: 9px; right: 0; border-radius: 0 10px 10px 0; }
.oc-dp-passo[data-pos="fim"] .oc-dp-passo-b { left: 2px; width: 15px; transform: skewX(-26.6deg); }
.oc-dp-passo-rot {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  height: 100%;
  font-size: 11px;
  font-weight: 700;
  color: var(--tinta);
  white-space: nowrap;
}
.oc-dp-passo-n { font-family: 'JetBrains Mono', ui-monospace, Menlo, monospace; font-size: 10.5px; }

/* ── o corpo do passo ─────────────────────────────────────────────────── */
@keyframes ocDpStepIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.oc-dp-corpo { position: relative; display: flex; flex-direction: column; gap: 12px; animation: ocDpStepIn .25s ease; }
[dir] .oc-dp-corpo { padding: 18px 26px 26px; }
@media (prefers-reduced-motion: reduce) { .oc-dp-corpo { animation: none; } }

/* Rótulo em caixa alta com contador à direita ("12 de 34"). */
.oc-dp-rot { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-width: 0; }
.oc-dp-rot-txt { color: #8a8a8a; font-size: 10.5px; letter-spacing: 2px; text-transform: uppercase; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.oc-dp-rot-esq { display: flex; align-items: center; gap: 9px; min-width: 0; }
.oc-dp-cont { color: #545454; font-size: 11px; font-family: 'JetBrains Mono', ui-monospace, Menlo, monospace; white-space: nowrap; }

/* A busca. */
.oc-dp-busca { display: flex; align-items: center; gap: 10px; height: 40px; border-radius: 11px; }
[dir] .oc-dp-busca { padding: 0 14px; border: 1px solid #232323; background: #141414; }
[dir] .oc-dp-busca:focus-within { border-color: #f7931a; }
.oc-dp-busca-lupa { color: #565656; font-size: 13px; }
.oc-dp-busca-in { flex: 1; min-width: 0; background: transparent; color: #fff; font: inherit; font-size: 12.5px; }
[dir] .oc-dp-busca-in { border: 0; padding: 0; margin: 0; }
.oc-dp-busca-in:focus { outline: none; }
.oc-dp-busca-in::placeholder { color: #565656; }

/* A lista: caixa rolável com sombra interna no rodapé e scroll fino. */
.oc-dp-lista {
  max-height: 346px;
  overflow-y: auto;
  border-radius: 14px;
  box-shadow: inset 0 -16px 16px -16px rgba(0, 0, 0, .9);
  scrollbar-width: thin;
  scrollbar-color: #262626 transparent;
}
[dir] .oc-dp-lista { border: 1px solid #1e1e1e; background: #111111; }
.oc-dp-lista::-webkit-scrollbar { width: 8px; }
.oc-dp-lista::-webkit-scrollbar-thumb { background: #262626; border-radius: 99px; border: 2px solid #111111; }
.oc-dp-vazio { color: #4a4a4a; font-size: 12.5px; text-align: center; }
[dir] .oc-dp-vazio { padding: 26px; }

/* A linha: ícone · ticker/nome · coluna da direita · seta. */
.oc-dp-item {
  display: flex;
  align-items: center;
  gap: 13px;
  width: 100%;
  text-align: left;
  background: transparent;
  color: #fff;
  cursor: pointer;
  font: inherit;
  transition: background .12s ease;
}
[dir] .oc-dp-item { padding: 11px 16px; border: 0; border-top: 1px solid #191919; margin: 0; }
[dir] .oc-dp-item:first-child { border-top: 0; }
[dir] .oc-dp-item:hover { background: #181818; }
.oc-dp-item:focus-visible { outline: 2px solid #f7931a; outline-offset: -2px; }
.oc-dp-item-txt { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1 1 auto; }
.oc-dp-item-t1 { color: #fff; font-size: 13.5px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.oc-dp-item-t2 { color: #5c5c5c; font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.oc-dp-item-dir { display: flex; flex-direction: column; gap: 2px; align-items: flex-end; flex: 0 0 auto; }
.oc-dp-item-d1 { color: #e8e8e8; font-size: 12px; font-family: 'JetBrains Mono', ui-monospace, Menlo, monospace; white-space: nowrap; }
.oc-dp-item-d2 { color: #545454; font-size: 10.5px; white-space: nowrap; }
.oc-dp-item-seta { color: #3d3d3d; font-size: 15px; flex: 0 0 auto; }
/* Selo "menor taxa" na linha da rede sugerida. */
.oc-dp-selo { color: #f7931a; font-size: 9.5px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; border-radius: 999px; white-space: nowrap; }
[dir] .oc-dp-selo { padding: 3px 8px; border: 1px solid rgba(247, 147, 26, .35); background: rgba(247, 147, 26, .08); }

/* O ícone da moeda (34px na lista, 26 no chip). Mesma cascata do carteira.js:
 * CDN → local → iniciais. Sem tamanho fixo a imagem do CDN entra com a
 * largura natural dela e empurra o nome para fora da linha. */
.oc-dep-moeda {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  width: 34px;
  height: 34px;
  border-radius: 50%;
  overflow: hidden;
  font-size: 10px;
  font-weight: 800;
  letter-spacing: -.2px;
  color: #0a0a0a;
}
[dir] .oc-dep-moeda { background: #f7931a; }
.oc-dep-moeda img { width: 100%; height: 100%; object-fit: cover; display: block; }
.oc-dp-chip .oc-dep-moeda { width: 26px; height: 26px; font-size: 8px; }
.oc-dp-rot .oc-dep-moeda { width: 22px; height: 22px; font-size: 8px; }

/* A sigla da rede numa caixa. */
.oc-dp-rede-sigla {
  display: flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  width: 34px;
  height: 34px;
  border-radius: 10px;
  color: #f7931a;
  font-family: 'JetBrains Mono', ui-monospace, Menlo, monospace;
  font-size: 9px;
  font-weight: 700;
}
[dir] .oc-dp-rede-sigla { background: #1a1a1a; border: 1px solid #262626; }
/* A logo da rede dentro da caixinha; a sigla só quando não há logo. */
.oc-dp-rede-sigla img { display: block; width: 22px; height: 22px; border-radius: 50%; }
.oc-dp-chip .oc-dp-rede-sigla { width: 26px; height: 26px; border-radius: 8px; font-size: 7.5px; }
.oc-dp-chip .oc-dp-rede-sigla img { width: 16px; height: 16px; }

/* Chips Moeda / Rede com "trocar". */
.oc-dp-chips { display: flex; gap: 10px; }
.oc-dp-chip { flex: 1; display: flex; align-items: center; gap: 10px; min-width: 0; border-radius: 12px; }
[dir] .oc-dp-chip { padding: 11px 14px; border: 1px solid #202020; background: #141414; }
.oc-dp-chip-txt { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.oc-dp-chip-k { color: #5f5f5f; font-size: 9px; letter-spacing: 1.5px; text-transform: uppercase; }
.oc-dp-chip-v { color: #fff; font-size: 12.5px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.oc-dp-chip-trocar { margin-left: auto; background: transparent; color: #f7931a; font: inherit; font-size: 10.5px; font-weight: 600; cursor: pointer; }
[dir] .oc-dp-chip-trocar { border: 0; padding: 6px 0 6px 6px; margin: -6px 0 -6px auto; }
.oc-dp-chip-trocar:hover { color: #ffb04d; }

/* Notas, erros e o aviso laranja. */
.oc-dp-nota { color: #4a4a4a; font-size: 11px; line-height: 1.5; }
.oc-dp-erro { display: flex; align-items: center; gap: 9px; border-radius: 10px; color: #ef8b8b; font-size: 11.5px; line-height: 1.45; }
[dir] .oc-dp-erro { padding: 10px 13px; border: 1px solid rgba(239, 68, 68, .3); background: rgba(239, 68, 68, .06); margin: 0; }
.oc-dp-erro::before { content: '!'; color: #ef4444; font-size: 12px; font-weight: 700; flex: 0 0 auto; }
.oc-dp-erro[hidden] { display: none; }
.oc-dp-aviso { display: flex; align-items: flex-start; gap: 11px; border-radius: 12px; color: #9a9a9a; font-size: 11.5px; line-height: 1.55; }
[dir] .oc-dp-aviso { padding: 12px 14px; border: 1px solid rgba(247, 147, 26, .25); background: rgba(247, 147, 26, .06); margin: 0; }
.oc-dp-aviso-ic { display: flex; align-items: center; justify-content: center; flex: 0 0 auto; width: 22px; height: 22px; border-radius: 50%; color: #f7931a; font-size: 12px; font-weight: 700; }
[dir] .oc-dp-aviso-ic { background: rgba(247, 147, 26, .12); border: 1px solid rgba(247, 147, 26, .5); }
.oc-dp-aviso b { color: #f7931a; font-weight: 700; }
.oc-dp-espera { color: #8a8a8a; font-size: 12.5px; }

/* ── o card do endereço (passo 3 do depósito) ─────────────────────────── */
.oc-dp-end-card { position: relative; overflow: hidden; border-radius: 16px; }
[dir] .oc-dp-end-card { border: 1px solid #232323; background: #141414; }
.oc-dp-end-card .oc-dp-fio { background: linear-gradient(90deg, transparent 0%, rgba(247, 147, 26, .7) 50%, transparent 100%); }
.oc-dp-end-card .oc-dp-listras { top: -20px; bottom: -20px; height: auto; right: 24px; width: 40px; }
.oc-dp-end-card .oc-dp-listras span:nth-child(1) { right: 0; width: 16px; }
.oc-dp-end-card .oc-dp-listras span:nth-child(2) { right: 26px; width: 7px; }
.oc-dp-end-card .oc-dp-listras span:nth-child(3) { display: none; }
.oc-dp-end-linha { display: flex; align-items: center; gap: 18px; }
[dir] .oc-dp-end-linha { padding: 16px 18px 18px; }

/* A caixa clara do QR com o selo OFF no centro. O svg do `qr.js` já traz
 * fundo branco; a caixa por baixo é o creme do desenho. A correção do QR é M
 * (15%): o selo de 26px num QR de 116px come ~5% dos módulos, com folga. */
.oc-dp-qr { position: relative; flex: 0 0 auto; width: 138px; height: 138px; border-radius: 12px; display: flex; align-items: center; justify-content: center; box-shadow: 0 10px 26px rgba(0, 0, 0, .45); }
[dir] .oc-dp-qr { background: #f4f0e8; padding: 0; margin: 0; }
.oc-dp-qr svg { display: block; width: 116px; height: 116px; border-radius: 6px; }
/* O selo é a MARCA (decisão do dono, 01/09/2026): pílula laranja com o
 * wordmark branco. 50×20 num QR de 116px come ~7,5% dos módulos — abaixo
 * dos 15% que o nível M corrige; o wordmark é largo (8,9:1) e um quadrado
 * o deixaria ilegível. */
.oc-dp-qr-selo { position: absolute; width: 50px; height: 20px; border-radius: 6px; display: flex; align-items: center; justify-content: center; box-sizing: border-box; }
[dir] .oc-dp-qr-selo { background: #f7931a; border: 2px solid #f4f0e8; padding: 0 4px; }
.oc-dp-qr-selo img { display: block; width: 100%; height: auto; }
.oc-dp-end-col { position: relative; display: flex; flex-direction: column; gap: 10px; min-width: 0; flex: 1; }
.oc-dp-marca { width: 8px; height: 8px; flex: 0 0 auto; transform: skewX(-26.6deg); border-radius: 1px; }
[dir] .oc-dp-marca { background: #f7931a; }
.oc-dp-end-txt { display: block; color: #e8e8e8; font-size: 11.5px; font-family: 'JetBrains Mono', ui-monospace, Menlo, monospace; line-height: 1.6; word-break: break-all; user-select: all; border-radius: 10px; }
[dir] .oc-dp-end-txt { padding: 10px 12px; border: 1px solid #232323; background: #0f0f0f; margin: 0; }

/* A grade Mínimo / Crédito em / Tempo estimado. Duas ou três células —
 * `grid-auto-flow`, não `grid-template-columns: 1fr 1fr 1fr`: o Mínimo só
 * entra quando o servidor manda `minDeposit`. */
.oc-dp-grade { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 10px; }
.oc-dp-cel { display: flex; flex-direction: column; gap: 3px; min-width: 0; border-radius: 11px; }
[dir] .oc-dp-cel { padding: 11px 13px; border: 1px solid #1d1d1d; background: #141414; }
.oc-dp-cel-k { color: #5f5f5f; font-size: 9.5px; letter-spacing: 1.5px; text-transform: uppercase; white-space: nowrap; }
.oc-dp-cel-v { color: #fff; font-size: 12px; font-weight: 600; font-family: 'JetBrains Mono', ui-monospace, Menlo, monospace; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* ── o histórico de depósitos (fica, abaixo dos passos) ──────────────── */

/* ── a aba PIX dentro do cartão ─────────────────────────────────────────
 *
 * O `pix.js` monta `.oc-campo`, `.oc-input`, `.oc-botao`, `.oc-endereco` e
 * `.oc-qr`, que só o `carteira.css` estiliza — e ele prefixa tudo com
 * `[data-oc-carteira]`, ancestral que o diálogo não tem. Fora da carteira a
 * aba nascia crua. O mínimo para ela caber no desenho novo: */
.oc-dep-painel .oc-aba-corpo, .oc-dp-inline .oc-aba-corpo { display: flex; flex-direction: column; gap: 12px; }
[dir] .oc-dep-painel .oc-aba-corpo:not([data-oc-dep-cripto]), [dir] .oc-dp-inline .oc-aba-corpo:not([data-oc-dep-cripto]) { padding: 18px 26px 26px; }
.oc-dep-painel .oc-campo-rot, .oc-dp-inline .oc-campo-rot { color: #8a8a8a; font-size: 10.5px; letter-spacing: 2px; text-transform: uppercase; }
.oc-dep-painel .oc-input, .oc-dp-inline .oc-input { width: 100%; height: 46px; border-radius: 12px; color: #fff; font: inherit; font-size: 14px; box-sizing: border-box; }
[dir] .oc-dep-painel .oc-input, [dir] .oc-dp-inline .oc-input { padding: 0 14px; border: 1px solid #232323; background: #141414; }
[dir] .oc-dep-painel .oc-input:focus, [dir] .oc-dp-inline .oc-input:focus { border-color: #f7931a; outline: none; }
.oc-dep-painel .oc-botao, .oc-dp-inline .oc-botao { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; border-radius: 12px; background: #f7931a; color: #0a0a0a; font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer; }
[dir] .oc-dep-painel .oc-botao, [dir] .oc-dp-inline .oc-botao { border: 0; padding: 0 20px; }
.oc-dep-painel .oc-botao:hover, .oc-dp-inline .oc-botao:hover { filter: brightness(1.08); }
.oc-dep-painel .oc-endereco, .oc-dp-inline .oc-endereco { display: flex; align-items: center; gap: 10px; border-radius: 10px; }
[dir] .oc-dep-painel .oc-endereco, [dir] .oc-dp-inline .oc-endereco { padding: 10px 12px; border: 1px solid #232323; background: #0f0f0f; }
.oc-dep-painel .oc-endereco-txt, .oc-dp-inline .oc-endereco-txt { flex: 1; min-width: 0; font: 11.5px/1.6 'JetBrains Mono', ui-monospace, Menlo, monospace; overflow-wrap: anywhere; user-select: all; color: #e8e8e8; }
.oc-dep-painel .oc-copiar, .oc-dp-inline .oc-copiar { flex: 0 0 auto; background: #f7931a; color: #0a0a0a; cursor: pointer; font: inherit; font-size: 11px; font-weight: 800; letter-spacing: 1px; text-transform: uppercase; border-radius: 9px; min-height: 40px; }
[dir] .oc-dep-painel .oc-copiar, [dir] .oc-dp-inline .oc-copiar { border: 0; padding: 0 14px; }
.oc-dep-painel .oc-qr, .oc-dp-inline .oc-qr { width: 148px; border-radius: 12px; }
[dir] .oc-dep-painel .oc-qr, [dir] .oc-dp-inline .oc-qr { margin: 0 auto; padding: 8px; background: #f4f0e8; }
.oc-dep-painel .oc-qr svg, .oc-dp-inline .oc-qr svg { display: block; width: 100%; height: auto; }
.oc-dep-painel .oc-aviso, .oc-dp-inline .oc-aviso { font-size: 12.5px; line-height: 1.5; color: #9a9a9a; }
[dir] .oc-dep-painel .oc-aviso, [dir] .oc-dp-inline .oc-aviso { margin: 0; }
.oc-dep-painel .oc-aviso.oc-erro, .oc-dp-inline .oc-aviso.oc-erro { color: #ef8b8b; }
.oc-dep-painel .oc-aviso.oc-alerta, .oc-dp-inline .oc-aviso.oc-alerta { color: #9a9a9a; border-radius: 12px; }
[dir] .oc-dep-painel .oc-aviso.oc-alerta, [dir] .oc-dp-inline .oc-aviso.oc-alerta { padding: 12px 14px; border: 1px solid rgba(247, 147, 26, .25); background: rgba(247, 147, 26, .06); }
.oc-dep-painel .oc-sucesso, .oc-dp-inline .oc-sucesso { color: #2ebd85; }

/* ── telefone ─────────────────────────────────────────────────────────── */
@media (max-width: 420px) {
  [dir] .oc-dep-veu { padding: 12px 8px; }
  [dir] .oc-dp-topo { padding: 14px 16px; }
  [dir] .oc-dp-passos { padding: 14px 16px 0; }
  [dir] .oc-dp-corpo { padding: 14px 16px 20px; }
  [dir] .oc-dep-painel .oc-abas, [dir] .oc-dp-inline .oc-abas { padding: 14px 16px 0; }
  .oc-dp-lista { max-height: 300px; }
  .oc-dp-end-linha { flex-direction: column; align-items: stretch; }
  .oc-dp-qr { align-self: center; }
  .oc-dp-grade { grid-auto-flow: row; grid-template-columns: 1fr 1fr; }
  .oc-dp-passo-rot { font-size: 10px; gap: 5px; }
}

/* Nota de reservas no popup (auditoria 05/09/2026): a ressalva do PoR onde o
 * dinheiro entra, em vez de só na docs. Link, discreto, para a página Segurança. */
.oc-dp-nota-reservas { display: block; color: #6a6a6a; font-size: 11px; line-height: 1.5; text-decoration: none; }
[dir] .oc-dp-nota-reservas { margin: 8px 0 0; }
.oc-dp-nota-reservas:hover { color: #f7931a; }
