/* Observatório de Mercado — estrutura herdada do console ByFel, componentes próprios.
   Cores/tipos SÓ via tokens.css. */

*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{background:var(--bg);color:var(--ink);font-family:var(--font-ui);
  font-size:var(--fs-base);line-height:var(--lh-body);
  -webkit-font-smoothing:antialiased;display:grid;grid-template-columns:var(--rail) 1fr;overflow:hidden}

/* Em janela estreita o shell vira duas FAIXAS. Sem o grid-template-rows explícito,
   rail e main empilhavam com 100vh cada dentro de um body overflow:hidden — o painel
   inteiro ficava abaixo da dobra e inalcançável. */
@media (max-width:760px){
  body{grid-template-columns:1fr;grid-template-rows:auto minmax(0,1fr)}
  .rail{height:auto;max-height:40vh;border-right:0;border-bottom:2px solid var(--sf-alto)}
  .main{height:auto;min-height:0}
}

/* ---- rolagem: suave, contida e visível ----
   O painel tem 4 níveis de rolagem aninhados (main › tira horizontal › coluna › drawer).
   Sem `contain`, terminar de rolar uma coluna empurrava a página inteira; e no trackpad
   o overscroll horizontal dispara o "voltar" do navegador, que num app por hash tira
   o Felipe da view no meio da leitura. */
.main,.rail,.drawer,.tela-vp,.feed-vp,.telas-wrap,.feeds-wrap,.mirror-wrap,.deck-grade{
  scroll-behavior:smooth;
  scrollbar-width:thin;
  scrollbar-color:var(--line) transparent;
}
.tela-vp,.feed-vp,.drawer,.mirror-wrap{overscroll-behavior:contain}
.telas-wrap,.feeds-wrap,.mirror-wrap{overscroll-behavior-x:contain}
.main{scrollbar-gutter:stable}
::-webkit-scrollbar{width:11px;height:11px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--line);background-clip:content-box;
  border:3px solid transparent;border-radius:0}
::-webkit-scrollbar-thumb:hover{background:var(--faint);background-clip:content-box}

/* ---- foco visível: o painel inteiro é navegável por teclado ---- */
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:0}
:focus:not(:focus-visible){outline:none}

/* ---- texto: hex, slug e URL não estouram mais a coluna ---- */
.mirror .cell,.pcard,.uso,.gap-card,.s-card,.feed-col,.drawer .body,.achado{overflow-wrap:anywhere}

/* ---- rail ---- */
.rail{background:var(--sf-base);border-right:2px solid var(--sf-alto);display:flex;flex-direction:column;
  padding:20px 14px;gap:4px;height:100vh;overflow-y:auto}
.brand{display:flex;align-items:center;gap:9px;padding:4px 8px 18px}
.brand .mark{width:26px;height:26px;border-radius:0;background:var(--accent);color:var(--accent-ink);
  display:grid;place-items:center;font-family:var(--font-text);font-size:15px;font-weight:400}
.brand b{font-family:var(--font-text);font-weight:400;font-size:16px;letter-spacing:-.01em}
.brand small{display:block;font-family:var(--font-data);font-size:9.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--faint)}
.rail-label{font-family:var(--font-data);font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--faint);padding:10px 10px 4px}
.nav{display:flex;flex-direction:column;gap:2px}
.nav button{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:none;border:none;
  color:var(--muted);font:inherit;font-size:13px;padding:9px 10px;border-radius:0;cursor:pointer;transition:var(--m-dur-1) var(--m-ease)}
.nav button:hover{background:var(--surface-2);color:var(--ink)}
.nav button.active{background:var(--accent-soft);color:var(--accent)}
.nav button .ic{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.8;flex:none}
.nav button .cnt{margin-left:auto;font-family:var(--font-data);font-size:11px;color:var(--faint);font-variant-numeric:tabular-nums}
.nav button small{display:block;font-size:11px;color:var(--faint);font-family:var(--font-ui)}
.nav .livedot{margin-left:auto;width:8px;height:8px;border-radius:50%;background:var(--idle);flex:none}
.nav .livedot.on{background:var(--ok);animation:pulse 1.4s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--ok) 60%,transparent)}70%{box-shadow:0 0 0 6px transparent}100%{box-shadow:0 0 0 0 transparent}}
.rail-foot{margin-top:auto;padding-top:14px;border-top:2px solid var(--sf-alto);display:flex;flex-direction:column;gap:8px}
.rail-foot .themebtn{background:var(--sf-alto);border:0;border-radius:0;color:var(--muted);
  font-family:var(--font-data);font-size:11px;padding:8px;cursor:pointer;letter-spacing:.04em}
.rail-foot .themebtn:hover{color:var(--ink);border-color:var(--faint)}
.rail-foot .stamp{font-family:var(--font-data);font-size:9.5px;color:var(--faint);letter-spacing:.03em;line-height:1.5}
.rail-foot .stamp .b{color:var(--bad)}

/* ---- main ---- */
.main{height:100vh;overflow-y:auto;display:flex;flex-direction:column}
.topbar{position:sticky;top:0;z-index:5;background:color-mix(in srgb,var(--bg) 88%,transparent);
  backdrop-filter:blur(8px);border-bottom:2px solid var(--sf-alto);
  display:flex;align-items:center;gap:16px;padding:16px clamp(18px,4vw,40px)}
.topbar h1{font-family:var(--font-display);font-weight:400;font-size:24px;letter-spacing:-.01em}
.topbar h1 span{color:var(--muted)}
.topbar .demo-tag{font-family:var(--font-data);font-size:10px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--warn);border:1px solid var(--warn);border-radius:0;padding:2px 7px}
.content{padding:var(--space-18);padding-top:0;flex:1}
.view-head{margin-bottom:20px}
.view-head p{color:var(--muted);font-size:13px;max-width:70ch;margin-top:4px}
.empty{color:var(--muted);font-family:var(--font-text);font-style:normal;font-size:16px;padding:40px 0;max-width:60ch;line-height:1.6}
.empty code{font-family:var(--font-data);font-style:normal;font-size:12px;color:var(--ink);
  background:var(--sf-alto);border:0;border-radius:0;padding:3px 8px;
  display:inline-block;margin-top:10px}
.loading{color:var(--faint);font-family:var(--font-data);font-size:12px;padding:40px 0}
/* três pontos respirando enquanto a view busca o dado */
.carregando{display:flex;gap:7px;padding:56px 0}
.carregando span{width:8px;height:8px;border-radius:50%;background:var(--faint);
  animation:respira 1.1s ease-in-out infinite}
.carregando span:nth-child(2){animation-delay:.14s}
.carregando span:nth-child(3){animation-delay:.28s}
@keyframes respira{0%,100%{opacity:.25;transform:translateY(0)}50%{opacity:.9;transform:translateY(-4px)}}

/* ---- hero: o mercado em 1 frase ---- */
.hero-frase{font-family:var(--font-display);font-weight:400;font-style:normal;font-size:clamp(22px,3.2vw,32px);
  line-height:1.28;letter-spacing:-.01em;max-width:26em;margin:6px 0 4px}
.hero-frase.vazia{color:var(--faint)}
.hero-meta{font-family:var(--font-data);font-size:10.5px;letter-spacing:.06em;color:var(--faint);text-transform:uppercase}

/* ---- faixa de staleness / watchdog ---- */
.band{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--muted);background:var(--surface);
  background:var(--sf-base);padding:10px 14px;margin:16px 0}
.band .dot{width:9px;height:9px;border-radius:50%;flex:none}
.dot.ok{background:var(--stale-ok)} .dot.warn{background:var(--stale-warn)} .dot.bad{background:var(--stale-bad)} .dot.nunca{background:var(--idle)}
.band b{color:var(--ink);font-weight:400}

/* ---- matriz de estratos (grid HTML: dado categórico) ---- */
/* minmax(0,1fr): sem o piso zero, um card de player com nome longo empurrava a
   coluna e a matriz vazava para fora da tela */
.matrix{display:grid;grid-template-columns:110px repeat(3,minmax(0,1fr));gap:10px;margin-top:18px}
.matrix .mhead{font-family:var(--font-data);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--muted);text-align:center;padding-bottom:2px}
.matrix .mhead i{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;font-style:normal;
  position:relative;vertical-align:middle}
/* residual: contorno vazado, sem preenchimento — está saindo de cena */
.matrix .mhead.residual i{background:var(--strata-residual)}
/* dominante: sólido, cheio — ocupa */
.matrix .mhead.dominante i{background:var(--strata-dominante)}
/* emergente: sólido com anel — está crescendo para fora */
.matrix .mhead.emergente i{background:var(--strata-emergente)}
.matrix .mhead.residual{color:var(--strata-residual)}
.matrix .mhead.dominante{color:var(--strata-dominante)}
.matrix .mhead.emergente{color:var(--strata-emergente)}
.matrix .mhead.residual i{background:var(--strata-residual)}
.matrix .mhead.dominante i{background:var(--strata-dominante)}
.matrix .mhead.emergente i{background:var(--strata-emergente)}
.matrix .mrow{font-family:var(--font-data);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--faint);display:flex;align-items:center}
.matrix .mcell{background:var(--sf-base);border-radius:0;min-height:84px;
  padding:10px;display:flex;flex-direction:column;gap:7px}
.matrix .mcell.emergente{border-color:var(--line)}
.pcard{display:flex;align-items:center;gap:9px;background:var(--sf-alto);
  border-radius:0;padding:7px 9px;cursor:pointer;transition:var(--m-dur-1) var(--m-ease);text-align:left;font:inherit;color:var(--ink)}
.pcard:hover{border-color:var(--accent);transform:translateY(-1px)}
.pcard .letra{width:26px;height:26px;border-radius:0;flex:none;display:grid;place-items:center;
  font-family:var(--font-text);font-size:14px;font-weight:400;
  background:var(--player-color,var(--surface-2));color:#fff;
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ink) 18%,transparent)}
.pcard .letra.sem{background:var(--surface-2);color:var(--muted)}
.pcard b{font-family:var(--font-text);font-weight:400;font-size:14.5px;line-height:1.1;display:block}
.pcard small{font-size:10.5px;color:var(--muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.pcard .mov{margin-left:auto;font-family:var(--font-data);font-size:9px;letter-spacing:.04em;text-transform:uppercase;
  color:var(--strata-emergente);white-space:nowrap}
.pcard .mov.down{color:var(--muted)}
.codechip{display:inline-flex;align-items:center;gap:5px;font-family:var(--font-data);font-size:10.5px;
  color:var(--muted);background:var(--sf-alto);border-radius:var(--radius-chip);
  padding:4px 9px;cursor:default}
.codechip .letra{width:14px;height:14px;font-size:8px}
/* o .tp sobrevive só na lista da RDE, onde o glifo é marcador de item antes da frase.
   No chip ele saiu: lá o código é palavra-chave, sem símbolo. */
.rde-codigos li .tp{color:var(--faint);font-size:9px}
.mcell .wrap{display:flex;flex-wrap:wrap;gap:5px}
.mcell .nada{color:var(--faint);font-size:11.5px;font-style:italic;font-family:var(--font-text);margin:auto 0}
.indef{margin-top:12px;font-size:12.5px;color:var(--muted)}
.indef .codechip{margin-left:6px}

/* ---- seção ---- */
.section-title{font-family:var(--font-data);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--faint);margin:28px 0 12px;display:flex;align-items:center;gap:10px}
.section-title::after{content:"";flex:1;height:1px;background:var(--line)}

/* ---- módulos: a página cresce em blocos, padding estreito e constante ---- */
.modulos{display:flex;flex-direction:column;gap:var(--space-16);padding-top:var(--space-16)}
.modulo{display:flex;flex-direction:column;gap:var(--space-10);min-width:0}
.modulo-rot{font-family:var(--font-display);font-weight:400;font-size:30px;letter-spacing:.02em;
  line-height:1;color:var(--ink)}

.colunas{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-16);align-items:start}
.colunas[data-n="2"]{grid-template-columns:repeat(2,minmax(0,1fr))}
.colunas[data-n="1"]{grid-template-columns:minmax(0,1fr)}
.coluna{background:var(--surface);padding:var(--space-12);display:flex;flex-direction:column;gap:var(--space-8);min-width:0}
.coluna-rot{font-family:var(--font-text);font-size:var(--fs-11);letter-spacing:.12em;text-transform:uppercase;line-height:1.3}
.coluna.residual .coluna-rot{color:var(--strata-residual)}
.coluna.dominante .coluna-rot{color:var(--strata-dominante)}
.coluna.emergente .coluna-rot{color:var(--strata-emergente)}
.coluna .nada{color:var(--faint);font-size:var(--fs-11);font-family:var(--font-text)}
.coluna .pcard{background:transparent;border:0;padding:9px;gap:var(--space-10);width:100%}
.coluna .pcard:hover{background:var(--surface-2);transform:none}
.coluna .pcard .letra{width:34px;height:34px;font-size:var(--fs-11)}
.coluna .pcard b{font-size:var(--fs-14);line-height:1.2}
.coluna .pcard small{font-size:var(--fs-11);color:var(--faint);-webkit-line-clamp:1}

.modulo-cor{display:grid;grid-template-columns:minmax(0,1fr) min(328px,34%);gap:var(--space-16);align-items:center}
.modulo-cor .cor-roda{margin:0;justify-content:center}
.modulo-cor .cor-roda svg{width:min(505px,100%)}
.takeaways{display:flex;flex-direction:column;gap:3px;align-self:center;min-width:0}
.take-head{background:var(--surface);padding:10px}
.take-head .eyebrow{font-family:var(--font-data);letter-spacing:.08em}
.take{background:var(--surface-2);padding:9px;display:flex;flex-direction:column;gap:5px}
.take b{font-family:var(--font-text);font-weight:400;font-size:var(--fs-14);line-height:1.2;letter-spacing:.02em}
.take p{margin:0;font-family:var(--font-text);font-size:var(--fs-11);line-height:1.4;color:var(--faint)}

.imp{display:flex;flex-direction:column;gap:10px;max-width:760px}
.imp-lead{margin:0 0 4px;font-family:var(--font-text);font-size:var(--fs-13);line-height:1.45;color:var(--muted)}
.imp-card{background:var(--surface);padding:14px 16px;display:flex;flex-direction:column;gap:8px}
.imp-card.is-ok{opacity:.72}
.imp-card h3{margin:0;font-family:var(--font-text);font-weight:400;font-size:var(--fs-16);line-height:1.3}
.imp-meta{display:flex;align-items:center;gap:8px}
.imp-nota,.imp-motivo{margin:0;font-family:var(--font-text);font-size:var(--fs-12);line-height:1.45;color:var(--faint)}
.imp-motivo{font-style:italic}
.imp-ops{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.imp-op{text-align:left;background:var(--surface-2);border:0;color:inherit;padding:10px;cursor:pointer;
  display:flex;flex-direction:column;gap:4px;font:inherit}
.imp-op b{font-family:var(--font-text);font-weight:400;font-size:var(--fs-14);line-height:1.25}
.imp-op p{margin:0;font-size:var(--fs-11);line-height:1.4;color:var(--faint)}
.imp-op.is-on{box-shadow:inset 2px 0 0 var(--ink);background:var(--sf-alto)}
.imp-escolha{background:var(--surface-2);padding:10px;display:flex;flex-direction:column;gap:4px}
.imp-escolha b{font-family:var(--font-text);font-weight:400;font-size:var(--fs-14)}
.imp-escolha p{margin:0;font-size:var(--fs-11);line-height:1.4;color:var(--faint)}
.imp-campo{display:flex;flex-direction:column;gap:5px}
.imp-campo span{font-family:var(--font-data);font-size:var(--fs-micro);letter-spacing:.1em;text-transform:uppercase;color:var(--faint)}
.imp-campo .e-in{width:100%}
.imp-rodape{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  font-family:var(--font-data);font-size:11px;color:var(--muted)}
.imp-add{margin-top:12px;padding-top:14px;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:10px}
@media (max-width:720px){.imp-ops{grid-template-columns:1fr}}

@media (max-width:980px){
  .colunas{grid-template-columns:1fr}
  .modulo-cor{grid-template-columns:1fr}
}

/* ---- picker de players (chips) ---- */
.filters{display:flex;gap:6px;flex-wrap:wrap;margin-top:14px}
.chip{font-family:var(--font-data);font-size:11px;letter-spacing:.05em;text-transform:uppercase;background:var(--surface);
  background:var(--sf-alto);color:var(--muted);padding:6px 11px;border-radius:var(--radius-chip);cursor:pointer;transition:var(--m-dur-1) var(--m-ease)}
.chip:hover{background:var(--sf-topo);color:var(--ink)}
.chip[aria-pressed="true"]{background:var(--ink);color:var(--bg)}
.chip .dot{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:6px;vertical-align:middle}

/* ---- quadro espelho (comparador) ---- */
/* rola nos dois eixos: o cabeçalho de cada player fica grudado no topo (lendo
   "Promises" você continua sabendo de quem é a coluna) e o rótulo grudado à esquerda.
   Sem máscara à direita — ela escondia a última coluna e o scroll parecia travado.
   Largura FIXA por coluna: 1fr encolhia o quadro ao viewport e matava o overflow. */
.main:has(.mirror-wrap){overflow:hidden;scrollbar-gutter:auto}
.content:has(.mirror-wrap){display:flex;flex-direction:column;min-height:0;overflow:hidden;
  padding-inline-end:0}
.content:has(.mirror-wrap) .view-head--tira{flex:none;position:sticky;top:0;z-index:4;
  background:var(--bg);padding-bottom:12px;margin-bottom:0}
.mirror-wrap{overflow:auto;flex:1;min-height:0;margin-top:0;
  border-radius:0;background:transparent;
  max-height:none;scroll-snap-type:x proximity;scroll-padding-inline-start:104px;
  overscroll-behavior:contain;cursor:grab;scrollbar-width:none}
.mirror-wrap::-webkit-scrollbar{width:0;height:0}
.mirror-wrap.arrastando{cursor:grabbing;scroll-behavior:auto;scroll-snap-type:none}
.mirror{display:grid;width:max-content;min-width:100%}
.mirror .cell{padding:16px 18px;width:var(--compare-col);min-width:var(--compare-col);box-sizing:border-box;
  border-bottom:1px solid var(--line-soft)}
.mirror[data-modo="verbal"] .cell:not(.lbl){width:var(--compare-verbal);min-width:var(--compare-verbal)}
.mirror .cell.lbl{position:sticky;left:0;z-index:2;min-width:104px;width:104px;
  font-family:var(--font-data);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--faint);
  background:var(--bg);display:flex;align-items:flex-start;padding-top:20px;
  box-shadow:none}
.mirror .ph{display:flex;flex-direction:column;gap:5px;
  position:sticky;top:0;z-index:3;background:var(--bg);scroll-snap-align:start;
  border-bottom:1px solid var(--line)}
.mirror .cell.lbl.ph{z-index:4}
.mirror .ph .nome{display:flex;align-items:center;gap:9px;min-width:0}
.mirror .ph .letra{width:22px;height:22px;font-size:11px;flex:none}
/* nome longo não pode empurrar o cabeçalho para sete linhas: "Local tech recruitment
   agencies (Brainy, CVO Recruitment, IT Talent, DevsData)" é um player real, e o
   quadro compara COLUNAS — a altura do topo tem que ser a mesma nas quatro. */
.mirror .ph .nome b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mirror .ph b{font-family:var(--font-text);font-weight:400;font-size:17px}
.mirror .ph .pill{margin-left:auto}
.mirror .ph .quando{font-family:var(--font-data);font-size:10px;color:var(--faint)}
.mirror .ph .quando .dot{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:5px;vertical-align:middle}
.mirror .vazio{color:var(--faint);font-family:var(--font-text);font-style:italic;font-size:13px}
.mirror .ph.vazia{background:color-mix(in srgb,var(--warn) 6%,transparent)}
.mirror .sem-leitura{color:var(--warn)}
.mirror .slogan{font-family:var(--font-text);font-style:italic;font-size:17px;line-height:1.35}
.mirror .headline{font-size:13.5px;color:var(--ink);line-height:1.45}
.mirror .vb-h{display:block;font-family:var(--font-display);font-weight:400;
  font-size:22px;line-height:1.2;letter-spacing:-.015em;color:var(--ink)}
.mirror .vb-s{display:block;font-family:var(--font-text);font-style:italic;
  font-size:15px;line-height:1.35;color:var(--ink)}
.mirror .tx--cel{margin:0}
.mirror .tx--cel .t-frase{font-size:16px}
.mirror .tx--cel .t-porque{font-family:var(--font-text);font-size:12.5px;color:var(--muted);
  margin-top:6px;line-height:1.45}
.mirror .vb-apelo{display:inline-block;font-family:var(--font-data);font-size:10px;
  letter-spacing:.08em;text-transform:uppercase;color:var(--ink);
  padding:3px 0;border-bottom:1px solid var(--ink)}
.mirror ul{list-style:none;display:flex;flex-direction:column;gap:5px;font-size:12.5px;color:var(--muted)}
.mirror ul li::before{content:"— ";color:var(--faint)}
.mirror .wrap{display:flex;flex-wrap:wrap;gap:5px}
.paleta{display:flex;flex-wrap:wrap;gap:8px}
.swatch{display:flex;flex-direction:column;gap:3px;align-items:center}
.swatch i{width:34px;height:24px;border-radius:0;border:1px solid var(--line);display:block}
.swatch code{font-family:var(--font-data);font-size:9px;color:var(--faint)}
.tipo-item{display:flex;flex-direction:column;margin-bottom:6px}
.tipo-item b{font-size:14px;font-weight:400}
.tipo-item small{font-family:var(--font-data);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint)}
.kv{display:flex;flex-direction:column;gap:4px;font-size:12.5px}
.kv .par{display:flex;gap:8px}
.kv .k{font-family:var(--font-data);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);
  min-width:64px;padding-top:2px}
/* flex:none + nowrap: dentro do card o pill encolhia e partia a palavra ("PROPOS TA") */
.pill{display:inline-block;flex:none;white-space:nowrap;font-family:var(--font-data);font-size:9px;
  letter-spacing:.06em;text-transform:uppercase;padding:2.5px 8px;border-radius:var(--radius-chip)}
.pill.residual{background:transparent;color:var(--strata-residual);box-shadow:inset 0 0 0 1px var(--strata-residual)}
.pill.dominante{background:transparent;color:var(--strata-dominante);box-shadow:inset 0 0 0 1px var(--strata-dominante)}
.pill.emergente{background:transparent;color:var(--strata-emergente);box-shadow:inset 0 0 0 1px var(--strata-emergente)}
.pill.indefinido{background:transparent;color:var(--faint);box-shadow:inset 0 0 0 1px var(--line-soft);
  opacity:.7}
/* Human in the loop. Quem grita é o que falta fazer: pendência tem traço cheio e
   tracejado, "validado" é o estado em repouso e fica quieto. */
.pill.val.v-nada{color:var(--faint);box-shadow:inset 0 0 0 1px var(--line-soft)}
.pill.val.v-espera{color:var(--st-espera);background:var(--sf-baixo)}
.pill.val.v-ok{color:var(--muted);box-shadow:inset 0 0 0 1px var(--line)}
.pill.val.v-nao{color:var(--warn);box-shadow:inset 0 0 0 1px var(--warn)}
.pill.val.v-venceu{color:var(--warn);background:var(--sf-baixo)}
/* o bloco do gate: estado, quem assinou, e o que dá para fazer a respeito */
.gate{display:flex;align-items:center;flex-wrap:wrap;gap:8px}
.gate-quem{font-family:var(--font-data);font-size:10px;color:var(--muted)}
.gate-nota{font-family:var(--font-text);font-size:12px;font-style:italic;color:var(--warn);flex-basis:100%}
.gate-vazio{font-family:var(--font-text);font-size:12px;font-style:italic;color:var(--faint)}
.gate-acoes{display:flex;gap:6px;margin-left:auto}
.btn.mini{font-size:10.5px;padding:3px 9px;white-space:nowrap}
.e-gate{width:172px}
.e-gate .gate{gap:5px}
.e-gate .gate-acoes{margin-left:0;flex-wrap:nowrap}
.e-gate .gate-quem,.e-gate .gate-nota{flex-basis:100%}
.conf{font-family:var(--font-data);font-size:9px;letter-spacing:.05em;text-transform:uppercase;color:var(--faint)}
.conf.baixa{color:var(--warn)}

/* ---- telas lado a lado (home inteira de cada player) ---- */
.tela-ctl{display:flex;align-items:center;gap:12px;margin-top:14px;flex-wrap:wrap}
/* o controle e a bússola formam um bloco só: nada entre eles e a tira */
.view-head--tira{margin-bottom:12px}
.seg{display:inline-flex;align-items:center;background:var(--sf-alto);border-radius:0;padding:2px;gap:2px}
.seg-b{font-family:var(--font-data);font-size:11px;letter-spacing:.05em;text-transform:uppercase;background:none;border:none;
  color:var(--muted);padding:6px 12px;border-radius:0;cursor:pointer;transition:var(--m-dur-1) var(--m-ease)}
.seg-b:hover{color:var(--ink)}
.seg-b.on{background:var(--ink);color:var(--bg)}
.seg-v{font-family:var(--font-data);font-size:11px;color:var(--muted);min-width:44px;text-align:center;font-variant-numeric:tabular-nums}
.tela-aviso{font-family:var(--font-data);font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--warn)}

/* position:relative para que offsetLeft da coluna seja a posição DENTRO da tira —
   é isso que o "ir para" e a bússola leem. */
/* Y no #content (é o painel que o Felipe rola). A tira só anda no X — overflow-x
   auto sozinho viraria um scrollport e comeria o wheel. A direita sem folga: o
   próximo site é cortado pela janela. A trilha some para não virar moldura. */
.main:has(.telas-wrap){overflow:hidden;scrollbar-gutter:auto}
.content:has(.telas-wrap){display:flex;flex-direction:column;min-height:0;
  overflow-x:hidden;overflow-y:auto;padding-inline-end:0;scrollbar-width:none}
.content:has(.telas-wrap)::-webkit-scrollbar{width:0;height:0}
.content:has(.telas-wrap) .view-head--tira{flex:none;position:sticky;top:0;z-index:4;
  background:var(--bg);padding-bottom:12px;margin-bottom:0}
.telas-wrap{position:relative;display:flex;gap:16px;flex:none;overflow-x:auto;overflow-y:hidden;
  padding:4px 0 18px;align-items:flex-start;
  scroll-snap-type:x proximity;scroll-padding-inline:2px;cursor:grab;user-select:none;
  overscroll-behavior-x:contain;scrollbar-width:none}
.telas-wrap::-webkit-scrollbar{width:0;height:0}
.telas-wrap.arrastando,.telas-wrap.arrastando .tela-head{cursor:grabbing}
.telas-wrap.arrastando{scroll-behavior:auto}
.telas-wrap:focus-visible,.feeds-wrap:focus-visible{outline:1px solid var(--ink);outline-offset:2px}
.feeds-wrap .feed-head{cursor:grab;user-select:none}
.feeds-wrap.arrastando,.feeds-wrap.arrastando .feed-head{cursor:grabbing}
.feeds-wrap.arrastando{scroll-behavior:auto}

/* ---- a bússola da tira: onde estou, e como chego na coluna 15 ---- */
.tira-rail{display:flex;gap:6px;margin-top:12px;overflow-x:auto;padding-bottom:4px;
  scrollbar-width:none;cursor:grab;user-select:none}
.tira-rail::-webkit-scrollbar{height:0}
.tira-rail.arrastando{cursor:grabbing;scroll-behavior:auto}
/* nome longo não pode empurrar a bússola: o chip trunca e o título completo fica
   no title. "Agências de recrutamento tech locais (Brainy, CVO…)" é um player real. */
.tira-rail .chip{flex:none;cursor:pointer;max-width:220px;overflow:hidden;
  display:inline-flex;align-items:center;gap:6px;
  text-overflow:ellipsis;white-space:nowrap;color:var(--faint)}
.tira-rail .chip .letra{width:16px;height:16px;font-size:8px;flex:none}
/* "estou aqui" sem fio: um degrau de superfície (1,11 — acima do limiar onde dois
   tons colam) somado ao salto de tinta de --faint para --ink. Dezoito chips em
   --muted eram dezoito chips gritando o mesmo volume. */
.tira-rail .chip[data-aqui]{background:var(--sf-topo);color:var(--ink)}
.tela-col{scroll-snap-align:start;flex:0 0 calc(420px * var(--tela-zoom,1));display:flex;flex-direction:column;gap:0;
  background:var(--sf-base)}
/* A BARRA DA COLUNA — o que a imagem não sabe dizer, e nada além disso.
   O nome saiu: a captura já é a identidade do player, e repeti-la 18 vezes em caixa
   alta era legenda sobre a própria foto. Fica o estrato (chip de preenchimento, como
   manda o catálogo), a data, o histórico e a saída. A barra recua um degrau — é
   cromo, não conteúdo — e continua sendo o punho do arrasto. */
.tela-head{position:sticky;top:0;z-index:3;display:flex;align-items:center;gap:8px;padding:8px 10px;background:var(--sf-baixo);
  font-family:var(--font-data);font-size:10px;color:var(--faint);min-height:31px}
.tela-head .letra{width:18px;height:18px;font-size:9px;flex:none}
.tela-quando{display:flex;align-items:center;gap:7px;font-variant-numeric:tabular-nums;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tela-quando .dot{width:7px;height:7px;border-radius:50%;flex:none}
.tela-head a{color:var(--faint);text-decoration:none;margin-left:auto;font-size:13px;line-height:1;
  transition:color var(--m-dur-1) var(--m-ease)}
.tela-head a:hover{color:var(--ink)}
.tela-head .card__est{margin-right:1px}
/* a coluna sob o ponteiro se acende no rail: o nome mora lá, e não em cima da foto */
.tira-rail .chip[data-sobre]{color:var(--ink)}
/* ESTADO no próprio item, não numa frase acima dele. A aresta de 2px em
   --st-espera é o mesmo vocabulário do card e do menu de filtro: "N sem leitura
   de site: fulano, beltrano, sicrano — rode a análise" virava parágrafo com lista
   de nomes, e o nome já está escrito no chip. */
.chip--espera{position:relative;padding-left:14px}
.chip--espera::before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--st-espera)}
/* o seletor de data É a data quando há histórico — por isso ele veste a mesma roupa
   do texto que substitui, e não a de um controle de formulário */
.tela-hist{appearance:none;-webkit-appearance:none;background:var(--sf-alto);border:0;border-radius:0;
  color:var(--muted);font-family:var(--font-data);font-size:10px;font-variant-numeric:tabular-nums;
  padding:2px 16px 2px 6px;cursor:pointer;transition:var(--m-dur-1) var(--m-ease);
  background-image:linear-gradient(45deg,transparent 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,transparent 50%);
  background-position:calc(100% - 8px) 55%,calc(100% - 5px) 55%;
  background-size:3px 3px,3px 3px;background-repeat:no-repeat}
.tela-hist:hover{background-color:var(--sf-topo);color:var(--ink)}
.tela-vp{height:var(--tela-alta,auto);min-height:200px;overflow:hidden;background:var(--bg);position:relative}
.tela-img{display:block;width:100%;height:auto;pointer-events:none}
.tela-arrasto{position:absolute;inset:0;z-index:2}
/* scale() só aceita número — passar um COMPRIMENTO invalidava a declaração inteira e o
   transform virava none: o iframe renderizava em 1440px dentro de uma coluna de 420px
   (via-se só o canto superior esquerdo, e o zoom não fazia nada no modo ao vivo). */
.tela-frame{position:absolute;top:0;left:0;width:1440px;height:2600px;border:0;background:#fff;
  transform:scale(calc(420 * var(--tela-zoom,1) / 1440));transform-origin:0 0}
/* devolve ao fluxo a altura REAL (já escalada) do iframe, senão sobra rolagem morta */
.tela-vp:has(.tela-frame)::after{content:"";display:block;
  height:calc(2600px * 420 * var(--tela-zoom,1) / 1440)}
/* O VAZIO é o único lugar da tira onde escrever o nome é informação. Aqui não há
   captura para identificar o player, então entram a marca colhida e o nome por
   extenso — a mesma cadeia do letra(): símbolo → logo → inicial sobre a cor medida. */
.tela-vazia{display:flex;flex-direction:column;align-items:center;gap:10px;
  padding:56px 24px;color:var(--faint);font-size:12.5px;line-height:1.6;text-align:center}
.tela-vazia .letra{width:40px;height:40px;border-radius:0;flex:none;display:grid;place-items:center;
  font-family:var(--font-text);font-size:19px;font-weight:400;
  background:var(--player-color,var(--sf-alto));color:#fff;overflow:hidden}
.tela-vazia .letra.sem{background:var(--sf-alto);color:var(--muted)}
.tela-vazia .letra img{width:100%;height:100%;object-fit:contain}
.tela-vazia b{font-family:var(--font-text);font-weight:400;font-size:16px;color:var(--ink);
  max-width:100%;overflow:hidden;text-overflow:ellipsis;line-height:1.3}
.tela-vazia span{max-width:30ch}
.tela-vazia code{font-family:var(--font-data);font-size:10.5px;color:var(--muted);background:var(--surface-2);
  background:var(--sf-baixo);border-radius:0;padding:3px 7px;display:inline-block;margin-top:6px;word-break:break-all}
.tela-vazia a{color:var(--accent);text-decoration:none}

/* ---- social: a mesma tira das Telas, um feed por coluna ---- */
.achado{background:var(--sf-base);border-left:3px solid var(--accent);
  border-radius:0 12px 12px 0;padding:16px 20px;margin:16px 0 4px;max-width:78ch}
.achado p{font-family:var(--font-display);font-size:19px;line-height:1.45;letter-spacing:-.005em;margin-top:6px}
.view-head--tira .achado{margin:0 0 4px;max-width:none}

/* TIRA, não pilha. O grid de 3 do Instagram pedia 326px por célula e cada player
   tomava a página inteira. A coluna tem a mesma medida das Telas (420) — o post
   cabe em uma fileira, o próximo vem abaixo, o player do lado está ao lado. */
.feeds-wrap{position:relative;display:flex;gap:16px;overflow-x:auto;overflow-y:hidden;padding:4px 0 18px;
  align-items:flex-start;scroll-snap-type:x proximity;scroll-padding-inline:2px;
  cursor:grab;user-select:none}
.feed-col:last-child{margin-inline-end:clamp(18px,4vw,40px)}
.feed-col{scroll-snap-align:start;flex:0 0 420px;background:var(--sf-base);border-radius:0;
  overflow:hidden;box-shadow:none;display:flex;flex-direction:column;gap:0;min-width:0}
.feed-head{display:flex;align-items:center;gap:8px;padding:8px 10px;background:var(--sf-baixo);
  font-family:var(--font-data);font-size:10px;color:var(--faint);min-height:31px}
.feed-head .letra{width:18px;height:18px;font-size:9px;flex:none}
.feed-head .card__est{margin-right:1px}
.feed-quando{display:flex;align-items:center;gap:7px;min-width:0;flex:1;overflow:hidden;
  font-variant-numeric:tabular-nums;white-space:nowrap}
.feed-handle{font-family:var(--font-text);font-size:12px;color:var(--ink)}
.feed-head a{color:var(--faint);text-decoration:none;margin-left:auto;font-size:13px;line-height:1;
  transition:color var(--m-dur-1) var(--m-ease)}
.feed-head a:hover{color:var(--ink)}

/* Grid do Instagram dentro da coluna: 3 quadrados por linha, gap de 2px.
   A miniatura preenche o quadrado; reel ganha o triângulo no canto. */
.ig-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:2px;background:var(--bg)}
.ig-cell{position:relative;aspect-ratio:1;overflow:hidden;background:var(--sf-alto);display:block}
.ig-cell img{width:100%;height:100%;object-fit:cover;display:block}
.ig-cell--reel::after{content:"";position:absolute;top:7px;right:7px;width:0;height:0;
  border-style:solid;border-width:5px 0 5px 8px;border-color:transparent transparent transparent #fff;
  filter:drop-shadow(0 1px 2px #0008);pointer-events:none}
.ig-mais{margin:8px 0 4px;width:100%;font-family:var(--font-text);font-size:12px;letter-spacing:.04em;
  text-transform:uppercase;background:var(--sf-alto);color:var(--ink);border:0;padding:10px 16px;cursor:pointer}
.ig-mais:hover{background:var(--sf-baixo)}
.ig-fim{margin:8px 10px 12px;font-family:var(--font-text);font-size:11px;color:var(--faint)}

.feed-vp{overflow-y:auto;overflow-x:hidden;background:var(--bg);position:relative;
  overscroll-behavior-y:contain;overscroll-behavior-x:auto}
.feed-vp:has(.ig-grid){max-height:min(70vh,760px)}
.feed-vp:has(.feed-img){max-height:min(70vh,760px)}
.feed-vp:has(.tela-vazia){min-height:240px}
.feed-img{display:block;width:100%;height:auto}

.feed-cor{padding:8px 10px 10px;display:flex;flex-direction:column;gap:6px;background:var(--sf-baixo);
  border-top:1px solid var(--line-soft)}
.fc-linha{display:flex;align-items:center;gap:10px}
.fc-rot{font-family:var(--font-data);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--faint);width:34px;flex:none}
.fc-sw{display:flex;gap:4px;flex-wrap:wrap;min-width:0}
.fc-sw i{width:22px;height:16px;border-radius:0;display:block;cursor:pointer;transition:transform .12s;
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ink) 14%,transparent)}
.fc-sw i:hover{transform:translateY(-2px)}
.fc-sw em{font-style:normal;color:var(--faint);font-size:12px}
.fc-div{font-size:11px;color:var(--muted);line-height:1.4;padding:2px 0 0}
.fc-div b{font-family:var(--font-data);font-size:12px}
.fc-div.perto b{color:var(--ok)} .fc-div.meio b{color:var(--warn)} .fc-div.longe b{color:var(--accent)}
.metodo-nota{font-family:var(--font-data);font-size:10.5px;color:var(--faint);max-width:80ch;margin-top:6px}

/* ---- cor / brand gap ---- */
.cor-topo{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px;margin:18px 0 4px}
.stat{background:var(--sf-base);border-radius:var(--radius-card);padding:18px 20px;
  display:flex;flex-direction:column;gap:6px}
.stat b{font-family:var(--font-display);font-weight:400;font-size:34px;line-height:1;letter-spacing:-.02em}
/* hex e número tabular pedem mono — é dado, não afirmação */
.stat b.dado{font-family:var(--font-data);font-size:25px;letter-spacing:0}
.stat span{font-size:12.5px;color:var(--muted);line-height:1.5}
.stat i{font-style:normal;font-family:var(--font-data);font-size:10.5px;color:var(--faint)}

.leitura-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:4px 0 22px}
@media (max-width:980px){.leitura-grid{grid-template-columns:1fr}}
.leitura{max-width:none}
.leitura .eyebrow{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.leitura .dado{font-family:var(--font-display);font-weight:400;font-size:28px;letter-spacing:-.02em;line-height:1.1}
.leitura p{margin:0;font-size:13px;color:var(--muted);line-height:1.5;max-width:48ch}
.leitura i{font-style:normal;font-family:var(--font-data);font-size:10.5px;color:var(--faint)}

.cor-roda{display:flex;justify-content:center;margin:0}
.cor-roda svg,.cor-roda-svg{width:min(505px,100%);height:auto;display:block}
.cor-roda g[data-player]{transform-box:fill-box;transform-origin:center;transition:transform .12s var(--m-ease)}
.cor-roda g[data-player]:hover{transform:scale(1.08)}

/* Colour page: a roda lê o grid inteiro; takeaways sentam ABAIXO, em três colunas.
   Lentes (cluster / janela aberta) e a régua são o zoom — o tracejado sozinho
   não carregava a oportunidade. */
.cor-page{padding-top:4px;gap:var(--space-16)}
.cor-page .modulo--cor-page{display:flex;flex-direction:column;gap:var(--space-12);min-width:0}
.cor-page .cor-roda{width:100%;min-height:0;justify-content:center}
.cor-page .cor-roda svg,.cor-page .cor-roda-svg{width:100%;max-width:100%;height:auto}
.cor-lentes{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}
.cor-lentes .rot{font-family:var(--font-data);font-size:10px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--faint);margin-left:4px}
.cor-lentes .rot:first-child{margin-left:0}
.cor-lentes-vazio{font-family:var(--font-text);font-size:var(--fs-11);color:var(--faint)}
.cor-chip{display:inline-flex;align-items:center;gap:7px;border:0;padding:6px 10px 6px 7px;cursor:pointer;
  background:var(--surface);color:var(--ink);font:inherit;font-family:var(--font-text);font-size:var(--fs-12)}
.cor-chip i{width:10px;height:10px;border-radius:50%;background:var(--sw);flex:none}
.cor-chip em{font-style:normal;font-family:var(--font-data);font-size:10px;color:var(--faint)}
.cor-chip:hover{background:var(--surface-2)}
.cor-chip.is-on{background:var(--ink);color:var(--bg)}
.cor-chip.is-on em{color:color-mix(in srgb,var(--bg) 70%,transparent)}
.cor-chip--op i{border-radius:0;width:12px;height:8px}
.cor-chip--reset{margin-left:auto;letter-spacing:.06em;text-transform:uppercase;
  font-family:var(--font-data);font-size:10px}
.cor-regua{width:100%;min-width:0}
.cor-regua-svg{width:100%;height:auto;display:block}
.takeaways--row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:2px;align-items:stretch}
.takeaways--row .eyebrow{grid-column:1/-1;font-family:var(--font-data);font-size:10px;
  letter-spacing:.08em;text-transform:uppercase;color:var(--faint);padding:2px 0 4px}
.takeaways--row .take{padding:12px 14px}
.take--lido{padding:20px 22px;gap:10px;background:var(--surface);min-width:0}
.take-rot{font-family:var(--font-data);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--faint)}
.take-num{font-family:var(--font-display);font-weight:400;font-size:44px;letter-spacing:-.03em;line-height:.95}
.take--lido .tx .t-frase{font-size:18px;color:var(--ink);margin:0}
.take--lido .tx .t-porque{font-size:13px;color:var(--muted);max-width:44ch}
.take--lido p{font-family:inherit;font-size:inherit;color:inherit;line-height:inherit}
@media (max-width:880px){
  .takeaways--row{grid-template-columns:1fr}
}

/* três filas, não uma: "sem captura", "captura reprovada" e "acromático por
   escolha" eram mostrados como um rótulo só ("no measured hue"), e o terceiro
   nem é lacuna — é achado. Quem espera colheita leva a aresta --st-espera. */
.cor-fora{position:relative;display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px;margin:0 0 14px;
  padding:12px 0}
.cor-fora:last-child{margin-bottom:28px}
.cor-fora--espera{padding-left:12px}
.cor-fora--espera::before{content:"";position:absolute;left:0;top:8px;bottom:8px;width:2px;background:var(--st-espera)}
.cor-fora .rot{font-family:var(--font-data);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--faint)}
.cor-fora .it{display:flex;align-items:center;gap:8px;padding:0;background:none;border:0;font:inherit;
  color:var(--ink);cursor:pointer}
.cor-fora .it:hover{color:var(--accent)}
.cor-fora .letra{width:28px;height:28px;border-radius:50%;flex:none;display:grid;place-items:center;
  background:var(--player-color,var(--surface-2));color:var(--bg);font-size:12px}
.cor-fora .letra.logo{background:#fff;border:1px solid var(--line-soft);overflow:hidden}
.cor-fora .letra.logo img{width:100%;height:100%;object-fit:contain;padding:3px}
.cor-fora .letra.sem{background:var(--surface-2);color:var(--muted)}

.pal-bloco{display:flex;flex-direction:column;gap:8px;margin:8px 0 28px}
.pal-bloco .rot{font-family:var(--font-data);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--faint);margin-top:6px}
.pal-faixa{display:flex;height:28px;width:100%;overflow:hidden;border:1px solid var(--line-soft)}
.pal-faixa button{min-width:2px;border:0;padding:0;background:var(--sw);cursor:pointer}
.pal-faixa button:hover{outline:1px solid var(--ink);outline-offset:-1px;z-index:1}
.pal-faixa.neutra{height:14px}
.pal-lead{margin:0 0 14px;font-family:var(--font-text);font-size:var(--fs-13);line-height:1.45;color:var(--muted);max-width:62ch}
.pal-split{display:grid;grid-template-columns:1fr 1fr;gap:2px}
.pal-split article{background:var(--surface);padding:18px 22px;display:flex;flex-direction:column;gap:6px}
.pal-split strong{font-family:var(--font-display);font-weight:400;font-size:44px;letter-spacing:-.03em;line-height:.95}
.pal-split span{font-family:var(--font-text);font-size:var(--fs-12);color:var(--muted)}
.pal-barra{display:flex;height:8px;width:100%;margin:2px 0 22px}
.pal-barra i{display:block;min-width:2px}
.polos-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2px;margin:0 0 22px}
.polo{background:var(--surface);padding:20px 22px;display:flex;flex-direction:column;gap:10px;min-width:0}
.polo-head{display:flex;align-items:center;gap:12px}
.polo-sw{width:28px;height:28px;flex:none;background:var(--sw);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ink) 12%,transparent)}
.polo-emo{display:block;font-family:var(--font-data);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink)}
.polo-leitor{display:block;font-family:var(--font-text);font-size:var(--fs-11);color:var(--faint);margin-top:2px}
.polo .tx .t-frase{font-size:18px}
.polo .tx .t-porque{font-size:13px;max-width:44ch}
.pal-bloco--evidencia{margin-top:8px;opacity:.85}
.gap-card .tx .t-frase{font-size:18px;margin:0}
.gap-card .tx .t-porque{font-size:13px;color:var(--muted)}
@media (max-width:880px){
  .pal-split,.polos-grid{grid-template-columns:1fr}
}

.gaps-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px}
.gap-card{background:var(--sf-base);
  border-radius:var(--radius-card);padding:16px 18px;display:flex;flex-direction:column;gap:10px}
.gap-head{display:flex;align-items:baseline;gap:10px}
.gap-head b{font-family:var(--font-display);font-weight:400;font-size:19px}
.gap-w{font-family:var(--font-data);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);
  background:var(--sf-baixo);border-radius:var(--radius-chip);padding:3px 9px;margin-left:auto}
.gap-sub{font-size:12.5px;color:var(--muted);line-height:1.5}
.gap-vars{display:flex;flex-direction:column;gap:7px}
.gap-var{display:flex;align-items:center;gap:11px;background:var(--bg);border:1px solid var(--line-soft);
  border-radius:0;padding:8px 10px;cursor:pointer;text-align:left;font:inherit;color:var(--ink);transition:var(--m-dur-1) var(--m-ease)}
.gap-var:hover{border-color:var(--accent);transform:translateY(-1px)}
.gap-chip{width:38px;height:38px;border-radius:0;flex:none;background:var(--sw);
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ink) 15%,transparent)}
.gap-meta{display:flex;flex-direction:column;gap:1px;min-width:0}
.gap-meta b{font-size:13px;font-weight:400;text-transform:capitalize}
.gap-meta code{font-family:var(--font-data);font-size:10.5px;color:var(--muted)}
.gap-wcag{font-family:var(--font-data);font-size:9.5px;letter-spacing:.03em}
.gap-wcag.ok{color:var(--ok)} .gap-wcag.warn{color:var(--warn)} .gap-wcag.bad{color:var(--bad)}

.paleta-auto{display:flex;flex-wrap:wrap;gap:8px}
.sw-btn{display:flex;flex-direction:column;gap:5px;background:none;border:none;padding:0;cursor:pointer;font:inherit;width:88px}
.sw-chip{display:block;width:88px;height:56px;border-radius:0;background:var(--sw);
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ink) 15%,transparent);transition:var(--m-dur-1) var(--m-ease)}
.sw-btn:hover .sw-chip{transform:translateY(-2px);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ink) 15%,transparent),var(--shadow)}
.sw-chip.grande{width:42px;height:42px;border-radius:0;flex:none}
.sw-txt{display:flex;flex-direction:column;gap:1px;align-items:flex-start}
.sw-txt code{font-family:var(--font-data);font-size:9.5px;color:var(--muted)}
.sw-txt em{font-style:normal;font-family:var(--font-data);font-size:9.5px;color:var(--faint)}
.paleta-auto.neutra .sw-chip{height:40px}

.usos{display:flex;flex-direction:column;gap:6px}
.uso{display:flex;align-items:baseline;gap:8px;background:var(--bg);border:1px solid var(--line-soft);
  border-radius:0;padding:7px 11px;cursor:pointer;font-size:12.5px}
.uso:hover{border-color:var(--accent)}
.uso b{font-family:var(--font-text);font-weight:400;font-size:14px}
.uso i{font-style:normal;font-family:var(--font-data);font-size:10px;color:var(--faint);margin-left:auto}
.wcag-linha{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.wcag-am{flex:1;border:1px solid var(--line);border-radius:0;padding:8px 11px;font-size:12.5px;font-weight:400}
.wcag-v{font-family:var(--font-data);font-size:10px;white-space:nowrap}
.wcag-v.ok{color:var(--ok)} .wcag-v.warn{color:var(--warn)} .wcag-v.bad{color:var(--bad)}

/* ---- roda cromática ---- */
.wheel-grid{display:grid;grid-template-columns:minmax(280px,420px) 1fr;gap:26px;align-items:center;margin-top:8px}
@media (max-width:900px){.wheel-grid{grid-template-columns:1fr}}
.wheel-side h3{font-family:var(--font-display);font-weight:400;font-size:19px;margin-bottom:8px}
.wheel-side p{font-size:13.5px;color:var(--muted);max-width:48ch}
.wheel-legend{display:flex;flex-direction:column;gap:7px;margin-top:14px;font-size:12.5px;color:var(--muted)}
.wheel-legend .it{display:flex;align-items:center;gap:9px;cursor:pointer}
.wheel-legend .it:hover{color:var(--ink)}
.wheel-legend .sw{width:11px;height:11px;border-radius:50%;border:1px solid var(--line);flex:none}
.wheel-legend .nm{font-family:var(--font-ui)}
.wheel-legend code{font-family:var(--font-data);font-size:10px;color:var(--faint)}

/* ---- drawer ---- */
.scrim{position:fixed;inset:0;background:rgba(0,0,0,.4);opacity:0;pointer-events:none;transition:.2s;z-index:20}
.scrim.open{opacity:1;pointer-events:auto}
.drawer{position:fixed;top:0;right:0;height:100vh;width:min(var(--drawer),94vw);
  background:color-mix(in srgb,var(--sf-base) 62%,transparent);
  -webkit-backdrop-filter:var(--glass-blur) saturate(1.4);backdrop-filter:var(--glass-blur) saturate(1.4);
  border:0;box-shadow:none;transform:translateX(100%);
  transition:transform .22s cubic-bezier(.4,0,.1,1);z-index:21;display:flex;flex-direction:column;overflow-y:auto}
.drawer.open{transform:translateX(0)}
.drawer header{position:sticky;top:0;background:var(--sf-topo);
  padding:18px 22px;display:flex;align-items:center;gap:12px;z-index:2}
.drawer header h2{font-family:var(--font-display);font-weight:400;font-size:22px}
.drawer header .x{margin-left:auto;background:var(--sf-alto);border:0;border-radius:0;color:var(--muted);
  width:32px;height:32px;cursor:pointer;font-size:16px}
.drawer header .x:hover{color:var(--ink);border-color:var(--faint)}
.drawer .body{padding:20px 22px;display:flex;flex-direction:column;gap:16px}
.eyebrow{font-family:var(--font-data);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--faint)}
.dfield{display:flex;flex-direction:column;gap:4px}
.dfield .v{font-size:13.5px}
.dfield .v.destaque{font-family:var(--font-text);font-style:italic;font-size:16px}
.hist{display:flex;flex-direction:column;gap:8px}
.hist .h{background:var(--bg);border:1px solid var(--line-soft);border-radius:0;padding:9px 12px;font-size:12.5px}
.hist .h .quando{font-family:var(--font-data);font-size:10px;color:var(--faint)}
.hist .h .st{font-family:var(--font-data);font-size:9px;letter-spacing:.06em;text-transform:uppercase;padding:1px 6px;
  border-radius:0;margin-left:6px}
.hist .h .st.proposta{background:color-mix(in srgb,var(--warn) 18%,transparent);color:var(--warn)}
.hist .h .st.confirmado{background:color-mix(in srgb,var(--ok) 18%,transparent);color:var(--ok)}
.hist .h ul{list-style:none;margin-top:4px;color:var(--muted)}
.hist .h ul li::before{content:"· "}
.fontes{display:flex;flex-direction:column;gap:4px;font-size:12px}
.fontes a{color:var(--muted);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fontes a:hover{color:var(--accent)}

/* ---- toast ---- */
.toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%) translateY(20px);background:var(--ink);
  color:var(--bg);padding:11px 20px;border-radius:0;font-size:13.5px;pointer-events:none;z-index:40;box-shadow:none;
  visibility:hidden;transition:transform .2s var(--m-ease),visibility 0s linear .2s}
.toast.show{visibility:visible;transform:translateX(-50%) translateY(0);transition:transform .2s var(--m-ease),visibility 0s}

/* ---- tooltip svg (dataviz: hover em tudo) ---- */
.tip{position:fixed;pointer-events:none;border:0;border-radius:0;
  padding:8px 11px;font-size:12px;color:var(--ink);box-shadow:none;z-index:50;max-width:260px;
  /* NÃO anima opacity: opacity<1 vira backdrop root e cega o vidro. A tinta É a opacidade. */
  background:color-mix(in srgb,var(--sf-base) 0%,transparent);
  -webkit-backdrop-filter:none;backdrop-filter:none;
  transform:translateY(-3px);visibility:hidden;
  transition:background .1s var(--m-ease),transform .1s var(--m-ease),visibility 0s linear .1s}
.tip.show{visibility:visible;transform:translateY(0);
  background:color-mix(in srgb,var(--sf-base) 72%,transparent);
  -webkit-backdrop-filter:var(--glass-blur) saturate(1.4);backdrop-filter:var(--glass-blur) saturate(1.4);
  transition:background .1s var(--m-ease),transform .1s var(--m-ease),visibility 0s}
.tip .t-k{font-family:var(--font-data);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);display:block}
.tip.show{opacity:1}

@media (prefers-reduced-motion:reduce){
  *{transition:none!important;animation:none!important;scroll-behavior:auto!important}
}

/* ---- escopo: a mesa de configuração do projeto ---- */
.e-proj{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap;margin:16px 0 6px;
  padding:16px;background:var(--surface);border:1px solid var(--line-soft)}
.e-proj label{display:flex;flex-direction:column;gap:5px;min-width:160px}
.e-proj label.cresce{flex:1;min-width:260px}
.e-proj label span{font-family:var(--font-data);font-size:var(--fs-micro);letter-spacing:.1em;
  text-transform:uppercase;color:var(--faint)}
/* campo que promete demais precisa se explicar: o link do Figma é atalho, não sincronia */
.e-proj .e-dica{font-family:var(--font-text);font-style:italic;font-size:11.5px;line-height:1.45;
  color:var(--faint);max-width:62ch}
.e-in{background:var(--sf-alto);border:0;color:var(--ink);font:inherit;
  font-size:12px;padding:7px 9px;border-radius:0;transition:var(--m-dur-1) var(--m-ease)}
.e-in:focus{outline:none;border-color:var(--ink)}
.e-in.ok{box-shadow:inset 2px 0 0 var(--st-ok)}
.e-in.erro{box-shadow:inset 2px 0 0 var(--strata-residual)}
select.e-in{cursor:pointer}

.e-resumo{display:flex;gap:26px;flex-wrap:wrap;margin:14px 0;padding:12px 14px;background:var(--sf-base)}
.e-resumo span{font-size:12px;color:var(--faint)}
.e-resumo b{font-family:var(--font-data);font-size:19px;color:var(--ink);margin-right:5px}

.e-tab-wrap{overflow-x:auto;background:var(--sf-base);margin-top:6px}
.e-tab{width:100%;border-collapse:collapse;font-size:12px}
.e-tab th{text-align:left;font-family:var(--font-data);font-size:var(--fs-micro);letter-spacing:.1em;
  text-transform:uppercase;color:var(--faint);font-weight:400;padding:11px 12px;
  position:sticky;top:0;background:var(--sf-topo);z-index:2}
.e-tab td{padding:11px 12px;vertical-align:top}
.e-tab tbody tr:nth-child(odd){background:var(--sf-alto)}
.e-tab tr:hover td{background:var(--surface-2)}
.e-nome{display:grid;grid-template-columns:22px 1fr;column-gap:10px;align-items:start}
.e-nome .letra{grid-column:1;grid-row:1;width:22px;height:22px;font-size:11px;margin-top:1px}
.e-nome b,.e-nome .pill,.e-nome code{grid-column:2}
.e-nome b{display:block;font-size:13px}
.e-nome code{font-family:var(--font-data);font-size:var(--fs-micro);color:var(--faint);display:block;margin-top:3px}
.e-nome .pill{margin-top:4px;display:inline-block}
.e-fonte{min-width:210px}
.e-fonte .e-in{width:100%}
.e-colhido{display:block;margin-top:4px;font-family:var(--font-data);font-size:var(--fs-micro)}
.e-colhido.tem{color:var(--ok)}
.e-colhido.vazio{color:var(--faint)}
.e-acao{width:36px}
.e-rm{background:var(--sf-alto);border:0;color:var(--faint);cursor:pointer;
  width:24px;height:24px;font-size:12px;transition:var(--m-dur-1) var(--m-ease)}
.e-rm:hover{color:var(--bad);border-color:var(--bad)}

.e-novo{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.e-novo #n-nome{min-width:200px}
.e-novo #n-site{flex:1;min-width:260px}
.btn{font:inherit;font-size:12px;padding:8px 16px;cursor:pointer;border-radius:0;
  border:1px solid var(--line);background:var(--surface-2);color:var(--ink);
  transition:var(--m-dur-1) var(--m-ease)}
.btn:hover{border-color:var(--ink)}
.btn.primary{background:var(--ink);color:var(--bg);border-color:var(--ink)}

.e-como p{font-size:12px;color:var(--muted);max-width:70ch;margin-bottom:10px}
.e-como code{display:block;font-family:var(--font-data);font-size:11px;color:var(--muted);
  background:var(--surface);border:1px solid var(--line-soft);padding:8px 11px;margin-bottom:5px;max-width:64ch}

.wheel-largo{margin:14px 0 6px}


/* ---- RDE ---- */
.rde-def{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin:6px 0 14px}
.rde-def .d{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;align-items:center;padding:12px 14px;
  background:var(--surface);border:1px solid var(--line-soft)}
.rde-def .d b{font-family:var(--font-data);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.rde-def .d p{grid-column:2;font-size:12px;color:var(--muted);line-height:1.45;margin:0}
.letra-rde{grid-row:1/3;font-family:var(--font-display);font-size:40px;line-height:1;color:var(--ink);width:38px}
.rde-def .residual .letra-rde{color:var(--faint)}
.rde-def .emergente .letra-rde{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:5px}
.rde-matrix .mrow small{display:block;font-size:10px;color:var(--faint);letter-spacing:0;text-transform:none;margin-top:2px}
.rde-matrix .mcell.vazia{background:var(--sf-baixo);opacity:.5}
.rde-matrix .mcell.vazia .nada{color:var(--ink);font-family:var(--font-data);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase}
.pcard.fora-mapa{opacity:.55}
.pcard.rde-p.proposta{position:relative}
.pcard.rde-p.proposta::before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--st-espera)}
.pill.proposta{background:var(--sf-baixo);color:var(--st-espera);margin-left:auto}
.rde-continuo{display:flex;align-items:center;gap:10px;margin:10px 0 0 120px;font-family:var(--font-data);font-size:9.5px;
  letter-spacing:.1em;text-transform:uppercase;color:var(--faint)}
.rde-continuo i{flex:1;height:1px;background:linear-gradient(90deg,var(--line),var(--ink))}
.rde-quadro{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;align-items:start}
@media (max-width:980px){.rde-quadro,.rde-def{grid-template-columns:1fr}}
.rde-col{background:var(--surface);border:1px solid var(--line-soft);padding:0 0 14px;display:flex;flex-direction:column;gap:10px}
.rde-col.emergente{border-color:var(--line)}
.rde-mosaico{display:grid;gap:3px;background:var(--bg);aspect-ratio:4/3;overflow:hidden}
.rde-mosaico.n1{grid-template-columns:1fr}.rde-mosaico.n2{grid-template-columns:1fr 1fr}
.rde-mosaico.n3,.rde-mosaico.n4{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr}
.rde-mosaico.n3 img:first-child{grid-row:1/3}
.rde-mosaico img{width:100%;height:100%;object-fit:cover;object-position:top;display:block;cursor:pointer;
  filter:saturate(.85);transition:filter var(--m-dur-1) var(--m-ease)}
.rde-mosaico img:hover{filter:saturate(1)}
.rde-mosaico.vazio{display:grid;place-items:center;color:var(--faint);font-family:var(--font-data);font-size:11px}
.rde-head{display:flex;align-items:baseline;gap:8px;padding:0 14px}
.rde-head i{width:9px;height:9px;border-radius:50%;flex:none;align-self:center}
.rde-col.residual .rde-head i{box-shadow:inset 0 0 0 1.5px var(--strata-residual)}
.rde-col.dominante .rde-head i{background:var(--strata-dominante)}
.rde-col.emergente .rde-head i{background:var(--strata-emergente);box-shadow:0 0 0 3px var(--surface),0 0 0 4px var(--strata-emergente)}
.rde-head h3{font-family:var(--font-data);font-size:11px;letter-spacing:.14em;text-transform:uppercase;font-weight:400;margin:0}
.rde-head small{margin-left:auto;font-family:var(--font-data);font-size:10px;color:var(--faint)}
.rde-leitura{padding:0 14px;font-family:var(--font-text);font-size:14px;line-height:1.55;color:var(--ink);margin:0}
.rde-leitura.vazia{color:var(--faint)}
.rde-codigos{list-style:none;padding:0 14px;margin:0;display:flex;flex-direction:column;gap:7px;border-top:1px solid var(--line-soft);padding-top:10px}
.rde-codigos li{display:flex;gap:8px;align-items:baseline;font-size:12px;color:var(--muted);line-height:1.4}
.rde-codigos .tp{color:var(--faint);font-size:10px;flex:none;width:12px}
.rde-codigos code{margin-left:auto;flex:none;font-family:var(--font-data);font-size:10.5px;color:var(--ink);
  border:1px solid var(--line);padding:1px 6px;cursor:help}
.rde-sintese{max-width:60ch}
.rde-sintese .serif{font-family:var(--font-display);font-size:clamp(20px,2.6vw,28px);line-height:1.28;letter-spacing:-.01em;margin:0}
.rde-sintese .sans{font-size:clamp(20px,2.6vw,28px);line-height:1.28;letter-spacing:-.02em;font-weight:400;margin:8px 0 0}
.rde-oport{margin-top:18px;padding:14px 16px;background:var(--sf-alto);position:relative}
.rde-oport::before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--st-espera)}
.rde-oport .eyebrow{font-family:var(--font-data);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.rde-oport p{margin:6px 0 0;font-size:14px;line-height:1.55}
.rde-contesta{max-width:70ch;padding-left:22px;display:flex;flex-direction:column;gap:10px;font-size:13px;line-height:1.5;color:var(--ink)}
.rde-contesta li::marker{font-family:var(--font-data);color:var(--faint)}

/* ---- a cor do estrato acompanha o player e o código, discreta: um fio à esquerda ---- */
.pcard.est-residual{border-left:2px solid var(--strata-residual)}
.pcard.est-dominante{border-left:2px solid var(--strata-dominante)}
.pcard.est-emergente{border-left:2px solid var(--strata-emergente)}
.pcard.proposta{position:relative}
.pcard.proposta::before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--st-espera)}
.codechip.est-residual{border-left:2px solid var(--strata-residual)}
.codechip.est-dominante{border-left:2px solid var(--strata-dominante)}
.codechip.est-emergente{border-left:2px solid var(--strata-emergente)}
.matrix .mcell.residual{border-top:1px solid color-mix(in srgb,var(--strata-residual) 55%,transparent)}
.matrix .mcell.dominante{border-top:1px solid color-mix(in srgb,var(--strata-dominante) 55%,transparent)}
.matrix .mcell.emergente{border-top:1px solid color-mix(in srgb,var(--strata-emergente) 55%,transparent)}
.pill.proposta{color:var(--st-espera);background:var(--sf-baixo)}
/* RDE: definição, colunas do quadro e o contínuo */
.rde-def .d.residual{border-top:2px solid var(--strata-residual)}
.rde-def .d.dominante{border-top:2px solid var(--strata-dominante)}
.rde-def .d.emergente{border-top:2px solid var(--strata-emergente)}
.rde-def .residual .letra-rde{color:var(--strata-residual)}
.rde-def .dominante .letra-rde{color:var(--strata-dominante)}
.rde-def .emergente .letra-rde{color:var(--strata-emergente);text-decoration:none}
.rde-col.residual{border-top:3px solid var(--strata-residual)}
.rde-col.dominante{border-top:3px solid var(--strata-dominante)}
.rde-col.emergente{border-top:3px solid var(--strata-emergente)}
.rde-col.residual .rde-head i{background:var(--strata-residual);box-shadow:none}
.rde-col.dominante .rde-head i{background:var(--strata-dominante)}
.rde-col.emergente .rde-head i{background:var(--strata-emergente);box-shadow:none}
.rde-col.residual .rde-head h3{color:var(--strata-residual)}
.rde-col.dominante .rde-head h3{color:var(--strata-dominante)}
.rde-col.emergente .rde-head h3{color:var(--strata-emergente)}
.rde-continuo i{background:linear-gradient(90deg,var(--strata-residual),var(--strata-dominante),var(--strata-emergente))}
.wheel-legend .it .est{width:6px;height:6px;border-radius:50%;flex:none}

/* ---- arena (home) ---- */
.arena-wrap{position:relative;margin:0;width:100%;overflow:visible}
.arena-wrap svg{display:block;width:100%;height:auto;min-width:0}
.arena-pecas{position:absolute;inset:0;pointer-events:none}
.arena-chip{position:absolute;transform:translate(-50%,-50%);pointer-events:auto;
  display:inline-flex;align-items:center;gap:7px;height:28px;padding:0 10px 0 4px;
  font-family:var(--font-ui);font-size:12px;line-height:1;white-space:nowrap;
  background:var(--bg);color:var(--ink);border:1px solid var(--line);cursor:pointer}
.arena-chip .letra{width:18px;height:18px}
.arena-chip .letra.logo img{padding:2px}
.arena-chip.est-residual{border-color:var(--strata-residual)}
.arena-chip.est-dominante{border-color:var(--strata-dominante)}
.arena-chip.est-emergente{border-color:var(--strata-emergente)}
.arena-chip.proposta{border-style:dashed}
.arena-chip:hover{background:var(--surface);border-width:1.5px}

.modulo-eixos{min-width:0}
.eixos-leituras{display:flex;flex-wrap:wrap;gap:6px;margin:2px 0 4px}
.eixos-tab{font:inherit;font-family:var(--font-text);font-size:var(--fs-12);letter-spacing:.04em;
  text-transform:uppercase;padding:5px 10px;background:transparent;color:var(--faint);
  border:1px solid var(--line);cursor:pointer}
.eixos-tab i{font-style:normal;margin-left:6px;text-transform:none;letter-spacing:0;color:var(--muted)}
.eixos-tab.is-on{color:var(--ink);border-color:var(--ink)}
.eixos-campo{display:grid;grid-template:"n n n" auto "w g e" minmax(0,1fr) "s s s" auto
  / minmax(4.5rem,auto) minmax(0,1fr) minmax(4.5rem,auto);
  gap:10px 12px;width:100%;min-width:0;
  height:min(52vh,520px);min-height:320px}
.eixos-n,.eixos-s,.eixos-w,.eixos-e{font-family:var(--font-text);font-size:var(--fs-13);
  letter-spacing:.04em;color:var(--ink);line-height:1.25}
.eixos-n{grid-area:n;justify-self:center;align-self:end}
.eixos-s{grid-area:s;justify-self:center;align-self:start}
.eixos-w{grid-area:w;justify-self:end;align-self:center;text-align:right;max-width:7.5rem}
.eixos-e{grid-area:e;justify-self:start;align-self:center;max-width:7.5rem}
.eixos-grade{grid-area:g;position:relative;width:100%;height:100%;min-height:0;min-width:0;
  border:1px solid var(--line);background:var(--bg)}
.eixos-grade::before,.eixos-grade::after{content:"";position:absolute;background:var(--line);pointer-events:none;z-index:0}
.eixos-grade::before{left:50%;top:0;bottom:0;width:1px}
.eixos-grade::after{top:50%;left:0;right:0;height:1px}
.eixos-grade.is-alvo{cursor:crosshair;outline:1px dashed var(--line);outline-offset:-5px}
.eixos-gap{font-family:var(--font-data);font-size:10px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--faint);pointer-events:none}
.eixos-grade .eixos-p{position:absolute;z-index:1;transform:translate(-50%,-50%);max-width:42%;
  touch-action:none}
.eixos-grade .eixos-p.is-sel{z-index:2}
.eixos-p{font:inherit;font-size:var(--fs-12);line-height:1.2;padding:4px 10px 4px 4px;
  display:inline-flex;align-items:center;gap:6px;
  overflow:hidden;white-space:nowrap;cursor:pointer;
  background:var(--surface);color:var(--ink);border:1px solid var(--line)}
.eixos-p > span{overflow:hidden;text-overflow:ellipsis}
.eixos-p .letra{width:16px;height:16px;font-size:8px;flex:none}
.eixos-p .letra.logo img{padding:1px}
.eixos-p.is-prop{border-style:dashed;color:var(--muted)}
.eixos-p.is-ok{border-style:solid}
.eixos-p.is-solto{border-style:dotted;color:var(--ink)}
.eixos-p.is-sel{outline:1px solid var(--ink);outline-offset:1px}
.eixos-p.is-fora{opacity:.42}
.eixos-barra{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:0 0 4px;
  font-family:var(--font-text);font-size:var(--fs-12);color:var(--ink)}
.eixos-barra .btn{margin-left:0}
.eixos-soltos .eixos-p{margin:0}
.eixos-nota{margin:0 0 4px;font-family:var(--font-text);font-size:var(--fs-11);line-height:1.4;color:var(--faint)}

/* ---- bentos ---- */
/* bento: bloco reescrito no fim do arquivo (sem rótulo sobreposto) */

/* ---- o avatar é a marca: ícone colhido em caixa reta; a cor medida vira o fio de baixo ---- */
.letra{display:inline-grid;place-items:center;flex:none;width:18px;height:18px;
  font-family:var(--font-text);font-size:10px;line-height:1;color:#fff;
  background:var(--player-color,var(--surface-2));overflow:hidden}
.letra.sem{background:var(--surface-2);color:var(--muted)}
.letra.logo{background:var(--bg);border:1px solid var(--line-soft);padding:0;overflow:hidden;position:relative}
.letra.logo img{width:100%;height:100%;object-fit:contain;display:block;padding:3px;background:#fff}
.letra.logo::after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--player-color)}

/* ---- Fase 0: números tabulares e mono só em código ---- */
code,kbd,pre,.e-como code,.empty code{font-family:var(--mono)}
.stat b,.nota b,.rde-codigos code,.e-resumo b{font-family:var(--font-num);font-variant-numeric:tabular-nums}
.rde-codigos code{font-family:var(--font-num)}
.pcard .letra,.tela-head .letra,.feed-head .letra,.brand .mark,.brand b,.band b,.pcard b,.mirror .ph b,.tipo-item b,.tela-head .nome b,.feed-head .nome b{font-weight:400}

/* ---- Fase 0: sem negrito em lugar nenhum (as fontes só existem em 400); ênfase é face e luz ---- */
b,strong{font-weight:400}
.wheel-legend code,.pcard small code,.dfield code,.b-cel small{font-family:var(--font-num);font-variant-numeric:tabular-nums}

h1,h2,h3,h4,h5,h6,th,legend,summary,dt,label{font-weight:400}
/* tinta fraca sobre superfície elevada: #828282 não passa em contraste sobre #1a1a1a/#232323 */
.pcard,.drawer,.tip,.gap-card,.stat,.direcao,.bento,.b-cel,.rde-col,.e-proj,.mcell,.imp-card,.imp-add{--faint:var(--faint-raised)}


/* ============================================================================
   FASE 1 — CASCA SaaS. Bloco único, acrescentado ao FIM de styles.css.
   Vem depois de TUDO (inclusive do remapeamento de --faint da última linha),
   então ganha por ordem de cascata sem precisar de !important.

   O que ele substitui, e por quê os seletores antigos ficam órfãos:
     .rail / .brand / .rail-label / .nav / .rail-foot   → não há mais <aside class="rail">
     .topbar / .topbar h1 / .topbar .demo-tag           → não há mais <div class="topbar">
     .scrim / .drawer / .drawer header / .drawer .body  → os nós trocaram de classe
                                                          (#scrim virou .chapa, #drawer virou .inspetor)
     @keyframes pulse (usava box-shadow, proibido)      → substituído por .livedot.on (luz)
   Podem ser apagados no mesmo passe; ficam aqui só para o diff da Fase 1 ser
   reversível numa linha. As regras de compatibilidade `.inspetor > header` e
   `.inspetor > .body` no fim deste bloco mantêm abrirCor() de pé sem tocá-la.
   ============================================================================ */

/* ---------------------------------------------------------------------------
   0. Tokens de casca
   --------------------------------------------------------------------------- */
:root{
  --rail:264px;              /* JS escreve a largura viva; este é o default */
  --rail-col:56px;
  /* INVERSÃO: não é cor nova, é o par tinta/fundo trocado de lado.
     Um só valor para o painel inteiro (o toast e os controles antigos passam a usá-lo). */
  --inv-bg:var(--c-off-white);
  --inv-ink:var(--c-black);
}
:root[data-theme="light"]{ --inv-bg:var(--c-near-black); --inv-ink:var(--c-off-white); }
@media (max-width:1439px){ :root{ --drawer:400px } }

/* foco: 1px de tinta plena, deslocado — vale para o painel inteiro
   (substitui o `2px solid var(--accent)` do topo do arquivo) */
:focus-visible{outline:1px solid var(--ink);outline-offset:2px;border-radius:0}

/* a face invertida tem UM valor: o toast e os controles herdados entram na conta */
.toast{background:var(--inv-bg);color:var(--inv-ink)}
.chip[aria-pressed="true"],.seg-b.on,.btn.primary{background:var(--inv-bg);color:var(--inv-ink);border-color:var(--inv-bg)}

/* piso de 11px e ênfase por FACE (as fontes não têm itálico: o oblíquo era sintetizado) */
.eyebrow{font-size:var(--fs-11);letter-spacing:.12em}
.dfield .v{font-size:var(--fs-14)}
.dfield .v.destaque{font-style:normal;font-family:var(--font-display);font-size:var(--fs-18)}
.tip .t-k{font-size:var(--fs-11)}

/* só para leitor de tela */
.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}

/* ---------------------------------------------------------------------------
   1. ÁTOMOS — declarados UMA vez. A `.pill` do miolo fica intocada (Fase 2).
   --------------------------------------------------------------------------- */

/* pílula: 23px, radius 0, sem borda, sem sombra, Construct 13 caixa alta.
   Três faces: glass (padrão) · escura · ativa (inversão). Hover troca de face. */
.pilula{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;gap:6px;
  height:23px;padding:0 8px;line-height:1;border:0;border-radius:0;box-shadow:none;white-space:nowrap;
  font-family:var(--font-text);font-size:var(--fs-13);letter-spacing:.06em;text-transform:uppercase;
  background:var(--c-glass);-webkit-backdrop-filter:var(--glass-blur);backdrop-filter:var(--glass-blur);
  color:var(--ink);
  transition:background var(--m-dur-2) var(--m-ease),color var(--m-dur-2) var(--m-ease)}
:root[data-theme="light"] .pilula{background:rgba(0,0,0,.08)}
.pilula.escura{background:var(--surface);-webkit-backdrop-filter:none;backdrop-filter:none;color:var(--muted)}
.pilula.ativa{background:var(--inv-bg);color:var(--inv-ink);-webkit-backdrop-filter:none;backdrop-filter:none}
/* proposto: o painel PROPÕE — tracejado + a palavra. outline não entra no box:
   o átomo continua 23px de altura e 8px de padding. */
/* estado no cabeçalho: sem preenchimento e sem hover de ação — não é botão, é selo */
.ph-acoes .pilula.proposto{cursor:default;color:var(--st-espera);
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--st-espera) 45%,transparent)}
.ph-acoes button.pilula.proposto:not(:disabled):hover{background:transparent;color:var(--st-espera)}
.pilula.proposto{background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;
  color:var(--st-espera);background:var(--sf-baixo)}
button.pilula,a.pilula{cursor:pointer;text-decoration:none;font-family:var(--font-text)}
button.pilula:not(:disabled):hover,a.pilula:hover{background:var(--inv-bg);color:var(--inv-ink);
  -webkit-backdrop-filter:none;backdrop-filter:none}
button.pilula.ativa:not(:disabled):hover{background:var(--c-glass);color:var(--ink);
  -webkit-backdrop-filter:var(--glass-blur);backdrop-filter:var(--glass-blur)}
button.pilula:disabled{opacity:.45;cursor:default}
.pilula .t{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* par rótulo+contador: é assim que TODO denominador aparece.
   `.par-cnt` e não `.par` — comparator.js já emite <span class="par"> dentro de .kv. */
.par-cnt{display:inline-flex;align-items:center;gap:2px;height:23px}
.par-cnt>.rot{font-family:var(--font-text);font-size:var(--fs-13);line-height:1.35;
  letter-spacing:.06em;text-transform:uppercase;color:var(--faint)}
.par-cnt>.num{font-family:var(--font-num);font-size:var(--fs-12);line-height:1;
  font-variant-numeric:tabular-nums;color:var(--ink)}

/* pulso: "em curso". Opacidade e escala — nunca box-shadow. */
.pulso{width:7px;height:7px;border-radius:50%;background:currentColor;flex:none;
  display:inline-block;animation:pulso 1.4s var(--m-ease) infinite}
@keyframes pulso{0%,100%{opacity:.28;transform:scale(.7)}50%{opacity:1;transform:scale(1)}}

/* ---------------------------------------------------------------------------
   2. SIDEBAR
   --------------------------------------------------------------------------- */
/* a barra não rola: só a espinha rola. Topo (projeto) e rodapé (escopo, propostas,
   pendências, ao vivo) ficam sempre à vista. */
.sb{position:relative;background:var(--surface);border-right:1px solid var(--line);
  display:flex;flex-direction:column;gap:8px;
  height:100vh;overflow:hidden;padding:10px;min-width:0}

/* topo: projeto + Minimize UI (gesto do Figma) */
.sb-topo{display:flex;align-items:center;gap:4px;flex:none;min-width:0}
.sb-topo .sb-proj{flex:1;min-width:0}
.sb-min{flex:none;width:28px;height:28px;display:grid;place-items:center;
  background:none;border:0;border-radius:0;color:var(--faint);cursor:pointer;
  transition:color var(--m-dur-1) var(--m-ease),background var(--m-dur-1) var(--m-ease)}
.sb-min:hover{color:var(--ink);background:var(--surface-2)}
.sb-min[aria-pressed="true"]{color:var(--ink);background:var(--surface-2)}
.sb-min .ic{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.4;
  stroke-linecap:square;stroke-linejoin:miter}

/* alça de resize — hit target 6px na borda direita */
.sb-resizer{position:absolute;top:0;right:-3px;bottom:0;width:6px;z-index:4;
  cursor:col-resize;touch-action:none}
.sb-resizer:hover,.sb-resizer:focus-visible{background:color-mix(in srgb,var(--ink) 18%,transparent)}
.sb-resizer:focus-visible{outline:none}
html.sb-arrasto,html.sb-arrasto *{cursor:col-resize!important;user-select:none!important}
html.sb-arrasto .sb,html.sb-arrasto .main,html.sb-arrasto body{
  transition:none!important}

/* Minimize UI: some o pagehead e o inspector — a leitura ganha altura.
   O rail de ícones FICA (56px). Nunca --rail:0: fechar o menu é colapsar
   para o File/Assets do Figma, não apagar a toolbox. */
html[data-ui="min"] .pagehead{display:none}
html[data-ui="min"] .inspetor,
html[data-ui="min"] .chapa{visibility:hidden!important;pointer-events:none!important}
@media (max-width:760px){
  .sb-resizer,.sb-min{display:none!important}
  html[data-ui="min"] .pagehead{display:grid}
}

.sb-proj{display:flex;align-items:center;gap:9px;width:100%;height:40px;padding:0 8px 0 0;flex:none;
  background:none;border:0;border-radius:0;color:var(--ink);font:inherit;text-align:left;cursor:pointer;
  transition:background var(--m-dur-1) var(--m-ease)}
.sb-proj:hover{background:var(--surface-2)}
.sb-mark{width:26px;height:26px;flex:none;display:grid;place-items:center;
  background:var(--inv-bg);color:var(--inv-ink);font-family:var(--font-text);font-size:var(--fs-14)}
.sb-proj-txt{min-width:0;display:block}
.sb-proj-txt b{display:block;font-family:var(--font-text);font-size:var(--fs-14);line-height:1.3;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sb-proj-txt small{display:block;font-family:var(--font-text);font-size:var(--fs-11);color:var(--faint);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sb-cx{width:14px;height:14px;flex:none;margin-left:auto;stroke:var(--faint);fill:none;stroke-width:1}
.sb-proj[aria-expanded="true"] .sb-cx{transform:rotate(180deg)}

/* menu do projeto: fixed, e OPACO — nenhum backdrop-filter pode virar
   containing block da camada flutuante */
.sb-menu{position:fixed;left:8px;top:56px;width:250px;z-index:19;
  background:var(--raised);border:1px solid var(--line);border-radius:0;padding:6px;
  display:flex;flex-direction:column;gap:1px;max-height:min(72vh,540px);overflow-y:auto;
  scrollbar-width:thin;scrollbar-color:var(--line) transparent;
  --faint:var(--faint-raised)}
.sb-menu[hidden]{display:none}
.sb-menu-rot{font-family:var(--font-text);font-size:var(--fs-11);letter-spacing:.12em;
  text-transform:uppercase;color:var(--faint);padding:6px 8px 4px}
.sb-menu-sep{height:1px;background:var(--line-soft);margin:6px 0}
.sb-menu-i{display:flex;align-items:center;gap:8px;width:100%;min-height:30px;padding:0 8px;
  background:none;border:0;border-radius:0;color:var(--muted);font:inherit;
  font-family:var(--font-text);font-size:var(--fs-12);text-align:left;cursor:pointer;
  transition:background var(--m-dur-1) var(--m-ease),color var(--m-dur-1) var(--m-ease)}
.sb-menu-i:not(:disabled):hover{background:var(--inv-bg);color:var(--inv-ink)}
.sb-menu-i:disabled{color:var(--faint);cursor:default}
.sb-menu-i .pilula,.sb-menu-i .sb-k{margin-left:auto}
.sb-cat{display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;
  background:none;border:0;border-radius:0;color:var(--muted);font:inherit;text-align:left;cursor:pointer;
  transition:background var(--m-dur-1) var(--m-ease),color var(--m-dur-1) var(--m-ease)}
.sb-cat:not(:disabled):hover{background:var(--surface-2);color:var(--ink)}
.sb-cat.ativa{background:var(--inv-bg);color:var(--inv-ink)}
.sb-cat:disabled{color:var(--faint);cursor:default;font-family:var(--font-text);font-size:var(--fs-12)}
.sb-cat-n{min-width:0;display:block;flex:1}
.sb-cat-n b{display:block;font-family:var(--font-text);font-size:var(--fs-13);line-height:1.3;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sb-cat-n small{display:block;font-family:var(--font-text);font-size:var(--fs-11);color:var(--faint);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sb-cat .num{margin-left:auto;font-family:var(--font-num);font-size:var(--fs-12);
  font-variant-numeric:tabular-nums;color:var(--faint)}
.sb-cat.ativa .sb-cat-n small,.sb-cat.ativa .num{color:var(--inv-ink);opacity:.62}

/* busca — a porta da ⌘K */
.sb-busca{display:flex;align-items:center;gap:8px;width:100%;height:30px;padding:0 8px;flex:none;
  background:none;border:1px solid var(--line-soft);border-radius:0;box-shadow:none;
  color:var(--faint);cursor:pointer;transition:var(--m-dur-1) var(--m-ease)}
.sb-busca:hover{border-color:var(--line);color:var(--ink)}
.sb-busca .ic{width:13px;height:13px;flex:none;stroke:currentColor;fill:none;stroke-width:1.6}
.sb-busca .t{flex:1;text-align:left;font-family:var(--font-text);font-size:var(--fs-12)}
.sb-busca .k{font-family:var(--font-num);font-size:var(--fs-11);color:var(--faint)}

/* o único primário: face vidro em repouso — a inversão acontece no gesto (hover),
   que é o momento em que ela significa alguma coisa */
.sb-add{width:100%;flex:none;justify-content:flex-start;gap:8px}
.sb-add-x{font-family:var(--font-num);font-size:var(--fs-13);line-height:1}

/* espinha */
.sb-nav{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:2px;
  scroll-behavior:smooth;scrollbar-width:thin;scrollbar-color:var(--line) transparent;
  overscroll-behavior:contain}
.sb-grupo{display:flex;flex-direction:column;gap:1px;padding-top:8px}
.sb-grupo-rot{display:flex;align-items:center;height:23px;padding:0 8px;
  font-family:var(--font-text);font-size:var(--fs-11);letter-spacing:.12em;text-transform:uppercase;
  color:var(--faint)}

.sb-item{display:flex;align-items:center;gap:8px;width:100%;min-height:32px;padding:0 8px;
  background:none;border:0;border-radius:0;color:var(--muted);font:inherit;text-align:left;cursor:pointer;
  transition:background var(--m-dur-2) var(--m-ease),color var(--m-dur-2) var(--m-ease)}
.sb-item .ic{width:17px;height:17px;flex:none;stroke:currentColor;fill:none;stroke-width:1;
  stroke-linecap:square;stroke-linejoin:miter;opacity:.8}
.sb-item .n{flex:none;width:20px;font-family:var(--font-num);font-size:var(--fs-12);
  font-variant-numeric:tabular-nums;color:var(--faint);line-height:1}
.sb-item .par-cnt{flex:1;min-width:0}
.sb-item .par-cnt>.rot{color:inherit;min-width:0;overflow:hidden;text-overflow:ellipsis}
.sb-item .par-cnt>.num{color:var(--muted)}
.sb-item:not(:disabled):hover{background:var(--surface-2);color:var(--ink)}
.sb-item.ativa{background:var(--inv-bg);color:var(--inv-ink)}
.sb-item.ativa .n,.sb-item.ativa .par-cnt>.num{color:var(--inv-ink);opacity:.6}
.sb-item.ativa .ic{opacity:1}
.sb-item:disabled{color:var(--faint);cursor:default}
.sb-item:disabled .ic{opacity:.45}
.sb-item:disabled .n{display:none}        /* libera os 28px que a pílula EM BREVE pede */
.sb-item:disabled .pilula{margin-left:auto}
/* propostas: o denominador do gate vem sublinhado tracejado — o idioma do "não confirmado" */
.sb-prop .par-cnt>.num{color:var(--st-espera)}

/* rodapé */
.sb-foot{flex:none;border-top:1px solid var(--line);padding-top:8px;display:flex;flex-direction:column;gap:2px}
.sb-linha{display:flex;align-items:center;gap:6px;height:32px;padding:0 8px}
.sb-vivo{display:inline-flex;align-items:center;gap:7px;margin-right:auto;color:var(--faint)}
/* "ao vivo" é estado, não denominador: Tekst, não Construct */
.sb-vivo .rot{font-family:var(--font-text);font-size:var(--fs-11);letter-spacing:.04em;text-transform:none}
.sb .livedot{width:7px;height:7px;border-radius:50%;background:var(--idle);flex:none;
  transition:background var(--m-dur-1) var(--m-ease)}
.sb .livedot.on{background:var(--ink)}                    /* conectado = aceso e PARADO */
.sb .livedot.bateu{animation:pulso 1.6s var(--m-ease) 2}  /* chegou dado = dois pulsos */
.sb-ic{width:24px;height:24px;flex:none;display:grid;place-items:center;
  background:none;border:0;border-radius:0;color:var(--faint);font-family:var(--font-text);
  font-size:var(--fs-12);line-height:1;cursor:pointer;transition:var(--m-dur-1) var(--m-ease)}
.sb-ic:hover{color:var(--ink);background:var(--surface-2)}
.sb-stamp{font-family:var(--font-text);font-size:var(--fs-11);line-height:1.5;color:var(--faint);
  padding:0 8px 2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sb-stamp .b{color:var(--muted)}

/* teclas */
.sb-k{flex:none;min-width:26px;height:23px;display:inline-flex;align-items:center;justify-content:center;
  font-family:var(--font-text);font-size:var(--fs-12);color:var(--ink);
  background:var(--surface-2);border:1px solid var(--line-soft)}
.sb-atalhos{display:flex;flex-direction:column;gap:6px}
.sb-atalhos>div{display:flex;align-items:center;gap:10px;font-family:var(--font-text);
  font-size:var(--fs-12);color:var(--muted)}
.sb-atalhos .sb-k{min-width:52px}

/* colapsado: 56px, só ícone — o rótulo volta pelo tooltip global */
:root[data-sb="col"] .sb{padding:14px 8px 10px;align-items:center}
:root[data-sb="col"] .sb-topo{flex-direction:column;gap:6px;width:100%}
:root[data-sb="col"] .sb-topo .sb-proj{width:100%;justify-content:center;padding:0;height:34px}
:root[data-sb="col"] .sb-min{width:28px;height:28px}
:root[data-sb="col"] .sb-proj-txt,
:root[data-sb="col"] .sb-cx,
:root[data-sb="col"] .sb-grupo-rot,
:root[data-sb="col"] .sb-item .n,
:root[data-sb="col"] .sb-item .par-cnt,
:root[data-sb="col"] .sb-item .pilula,
:root[data-sb="col"] .sb-add-t,
:root[data-sb="col"] .sb-busca .t,
:root[data-sb="col"] .sb-busca .k,
:root[data-sb="col"] .sb-vivo .rot,
:root[data-sb="col"] .sb-stamp{display:none}
:root[data-sb="col"] .sb-proj,
:root[data-sb="col"] .sb-busca,
:root[data-sb="col"] .sb-add,
:root[data-sb="col"] .sb-item{justify-content:center;padding:0;gap:0}
:root[data-sb="col"] .sb-item{min-height:34px}
:root[data-sb="col"] .sb-grupo{padding-top:10px;border-top:1px solid var(--line-soft)}
:root[data-sb="col"] .sb-grupo:first-child{border-top:0;padding-top:0}
:root[data-sb="col"] .sb-nav{width:100%}
:root[data-sb="col"] .sb-linha{flex-direction:column;height:auto;padding:6px 0;gap:6px}
:root[data-sb="col"] .sb-vivo{margin:0}
:root[data-sb="col"] .sb-menu{left:64px;top:14px}

/* ---------------------------------------------------------------------------
   3. CABEÇALHO DE PÁGINA
   --------------------------------------------------------------------------- */
.pagehead{position:sticky;top:0;z-index:6;         /* abaixo de scrim(20)/drawer(21)/tip(50) */
  display:grid;grid-template-columns:minmax(0,1fr) auto;grid-auto-rows:min-content;
  column-gap:var(--space-16);row-gap:var(--space-8);
  padding:18px 24px 12px;max-height:none;
  background:color-mix(in srgb,var(--bg) 72%,transparent);
  -webkit-backdrop-filter:var(--glass-blur);backdrop-filter:var(--glass-blur);
  border-bottom:1px solid var(--line-soft);border-radius:0;box-shadow:none}
/* display:contents faz as 3 linhas virarem itens do grid do .pagehead —
   é o que deixa #demoTag (irmão do slot) sentar na linha 1, coluna 2 */
.ph-in{display:contents}
/* A LINHA 1 só existe quando a barra lateral está recolhida. Com a barra aberta ela
   repetia o botão de projeto palavra por palavra — e a frase do mercado era o texto
   mais alto da tela numa view cujo assunto são imagens. Endereço se diz uma vez. */
.ph-l1{display:none;grid-column:1;align-items:center;gap:10px;min-width:0;min-height:23px}
:root[data-sb="col"] .ph-l1{display:flex}
.ph-l2,.ph-l3{grid-column:1/-1}
.ph-legado{display:none!important}

.ph-sep{color:var(--faint);flex:none}
.ph-crumbs{display:flex;align-items:center;gap:6px;min-width:0;overflow:hidden}
.ph-crumbs .pilula{min-width:0}

.ph-l2{display:flex;align-items:flex-end;justify-content:space-between;gap:16px}
/* line-height 1 + overflow:hidden cortava descendente (o "p" de Escopo). 1.1 resolve. */
.ph-titulo{font-family:var(--font-display);font-weight:400;
  font-size:var(--fs-24);line-height:1.2;letter-spacing:0;
  color:var(--ink);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  padding-bottom:1px;transition:font-size var(--m-dur-2) var(--m-ease)}
.pagehead[data-view="home"] .ph-titulo{white-space:normal;text-transform:uppercase;overflow:visible}
.ph-acoes{display:flex;align-items:center;gap:6px;flex:none}

.ph-l3{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:23px}
.ph-filtro{display:flex;align-items:center;gap:6px;flex:none}
/* a régua clipa quando é longa (Arena, RDE); o botão +N fica FORA do clipe, senão
   o popover nasce cortado pelo próprio overflow da régua */
.ph-l3-esq{display:flex;align-items:center;gap:10px;min-width:0}
.ph-regua{display:flex;align-items:center;gap:10px;min-width:0;overflow:hidden}
.ph-par{position:relative;display:inline-flex;align-items:center;gap:2px;height:23px;flex:none}
.ph-par .r{font-family:var(--font-text);font-size:var(--fs-13);letter-spacing:.06em;
  text-transform:uppercase;color:var(--faint);line-height:1}
.ph-par .n{font-family:var(--font-num);font-size:var(--fs-12);font-variant-numeric:tabular-nums;
  color:var(--ink);line-height:1}
/* o denominador vem junto do número: fração declarada dispensa a legenda no tooltip */
.ph-par .n i{font-style:normal;color:var(--faint)}
/* o ÚNICO lugar onde entra cor no cabeçalho: barra de 2px de estrato */
.ph-par--barra::after{content:"";position:absolute;left:0;right:0;bottom:-2px;height:2px;background:var(--estrato)}
/* leitura ainda em rascunho: a barra vem tracejada — o painel não confirma sozinho */
.pagehead[data-leitura="rascunho"] .ph-par--barra::after{
  background:repeating-linear-gradient(90deg,var(--estrato) 0 3px,transparent 3px 6px)}

/* ---------------------------------------------------------------------------
   3b. POPOVER — o menu de tela, um primitivo só
   A régua do projeto e o filtro de players usam este mesmo bloco. É `absolute`
   dentro do fluxo, nunca `fixed`: o .pagehead carrega backdrop-filter e prenderia
   um descendente fixo. Sem vidro e sem stroke — o stroke do sistema é do vidro, e
   aqui a elevação é por TOM (--sf-topo sobre o que estiver embaixo).
   --------------------------------------------------------------------------- */
.pop-wrap,.ph-mais-wrap{position:relative;display:inline-flex;align-items:center}
.pop{position:absolute;top:calc(100% + 8px);left:0;z-index:8;min-width:184px;
  display:flex;flex-direction:column;gap:2px;padding:8px;border-radius:0;
  background:var(--sf-topo);box-shadow:none}
.pop[hidden]{display:none}
.pop-par{display:flex;align-items:baseline;justify-content:space-between;gap:16px;padding:5px 6px}
.pop-par .r{font-family:var(--font-text);font-size:var(--fs-13);letter-spacing:.06em;
  text-transform:uppercase;color:var(--faint);line-height:1}
.pop-par .n{font-family:var(--font-num);font-size:var(--fs-12);font-variant-numeric:tabular-nums;
  color:var(--ink);line-height:1}
.pop-par .n i{font-style:normal;color:var(--faint)}

/* +N: a régua do projeto continua a um passo, sem ocupar a linha */
.ph-mais{background:var(--sf-alto);color:var(--muted);border:0;border-radius:0;cursor:pointer;
  height:23px;padding:0 8px;font-family:var(--font-num);font-size:var(--fs-12);
  font-variant-numeric:tabular-nums;line-height:1;transition:var(--m-dur-1) var(--m-ease)}
.ph-mais:hover,.ph-mais[aria-expanded="true"]{background:var(--sf-topo);color:var(--ink)}

/* lista marcável: o filtro. Mesma régua de status da casa — aresta de 2px à
   esquerda em --st-espera diz "sem captura" sem escrever uma frase na tela. */
/* largura FIXA: sem ela a lista se estica até caber o nome mais longo — e um player
   real se chama "Agências de recrutamento tech locais (Brainy, CVO Recruitment…)" */
.pop--lista{max-height:min(56vh,420px);overflow:auto;width:300px}
.pop--dir{left:auto;right:0}
.pop-acoes{display:flex;gap:2px;padding-bottom:6px}
.pop-acoes button{flex:1;background:var(--sf-alto);color:var(--muted);border:0;border-radius:0;
  cursor:pointer;padding:6px 4px;font-family:var(--font-data);font-size:10.5px;
  letter-spacing:.05em;text-transform:uppercase;transition:var(--m-dur-1) var(--m-ease)}
.pop-acoes button:hover{background:var(--sf-topo);color:var(--ink)}
.pop-i{position:relative;display:flex;align-items:center;gap:8px;width:100%;text-align:left;
  background:none;border:0;border-radius:0;cursor:pointer;color:var(--faint);
  padding:7px 9px;font-family:var(--font-text);font-size:var(--fs-13);line-height:1.2;
  transition:var(--m-dur-1) var(--m-ease)}
.pop-i:hover{background:var(--sf-alto);color:var(--ink)}
.pop-i[aria-pressed="true"]{color:var(--ink)}
.pop-i .letra{width:18px;height:18px;font-size:10px;flex:none}
.pop-i .letra.logo img{padding:1px}
.pop-i .t{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pop-i--espera{padding-left:12px}
.pop-i--espera::before{content:"";position:absolute;left:0;top:4px;bottom:4px;width:2px;background:var(--st-espera)}
.pop-i:focus-visible{outline:1px solid var(--ink);outline-offset:-1px}

.ph-demo{grid-column:2;grid-row:1;align-self:center;justify-self:end;
  font-family:var(--font-text);font-size:var(--fs-11);letter-spacing:.12em;
  text-transform:uppercase;color:var(--muted);
  border:1px solid var(--line);border-radius:0;padding:3px 7px;line-height:1}

/* rolou: o cabeçalho encolhe e devolve altura à leitura, sem sumir */
.pagehead.compacto{padding-top:9px;padding-bottom:7px}
.pagehead.compacto .ph-titulo{font-size:var(--fs-18)}

@media (max-width:760px){
  .pagehead{max-height:none}
  .ph-l3{flex-direction:column;align-items:flex-start;gap:8px}
  .ph-l3-esq{flex-wrap:wrap}
  .ph-regua{flex-wrap:wrap;overflow:visible}
}
/* o cabeçalho é cromo: não vai para o papel nem para o slide exportado */
@media print{.pagehead{display:none}}
body.print .pagehead{display:none}

/* ---------------------------------------------------------------------------
   4. INSPETOR LATERAL (não-modal)
   --------------------------------------------------------------------------- */
/* Chapa: escurece, não borra, e NÃO intercepta clique — a página atrás segue viva
   para trocar de player sem fechar. Fecha-se pelo ✕ ou por Esc. */
.chapa{position:fixed;inset:0;background:rgba(0,0,0,.42);opacity:0;pointer-events:none;
  transition:opacity var(--m-dur-1) var(--m-ease);z-index:20}
:root[data-theme="light"] .chapa{background:rgba(0,0,0,.28)}
.chapa.open{opacity:1}

.inspetor{position:fixed;top:0;right:0;height:100vh;width:min(var(--drawer),94vw);
  /* VIDRO (direção C). Seguro aqui porque a entrada anima TRANSFORM, não opacity:
     opacity<1 tornaria isto um backdrop root e o vidro ficaria cego na transição. */
  background:color-mix(in srgb,var(--sf-base) 62%,transparent);
  -webkit-backdrop-filter:var(--glass-blur) saturate(1.4);backdrop-filter:var(--glass-blur) saturate(1.4);
  border:0;box-shadow:none;border-radius:0;
  display:flex;flex-direction:column;overflow:hidden;z-index:21;
  transform:translateX(100%);visibility:hidden;
  transition:transform var(--m-dur-2) var(--m-ease),visibility 0s linear var(--m-dur-2);
  overflow-wrap:anywhere;
  --faint:var(--faint-raised)}
.inspetor.open{transform:none;visibility:visible;transition-delay:0s}

.i-head{flex:none;padding:16px 18px 0;background:var(--surface-2);border-bottom:1px solid var(--line-soft)}
.i-topo{display:flex;align-items:flex-start;gap:11px}
.i-avatar{flex:none}
.i-avatar .letra{width:38px;height:38px;border-radius:0;display:grid;place-items:center;
  font-family:var(--font-text);font-size:var(--fs-14);line-height:1;color:#fff;
  background:var(--player-color,var(--surface-2))}
.i-avatar .letra.sem{background:var(--surface-2);color:var(--muted)}
.i-id{min-width:0;flex:1}
.i-papel{display:block;font-family:var(--font-text);font-size:var(--fs-11);line-height:1;
  letter-spacing:.12em;text-transform:uppercase;color:var(--faint)}
.i-nome{font-family:var(--font-body);font-weight:400;font-size:var(--fs-18);line-height:var(--lh-tight);
  margin-top:6px}
.i-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:12px}
.i-ancoras{display:flex;gap:5px;padding:12px 0 10px;overflow-x:auto;scrollbar-width:none}
.i-ancoras::-webkit-scrollbar{display:none}

/* estrato: a cor é DADO — barra de 2px, nunca fundo. Classe `estrato` e não `est`
   para não colidir com os blocos de estado (.est-*). */
.pilula.estrato{position:relative;padding-left:10px;cursor:default;--acento:var(--strata-indefinido)}
.pilula.estrato::before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--acento)}
.pilula.estrato.residual{--acento:var(--strata-residual)}
.pilula.estrato.dominante{--acento:var(--strata-dominante)}
.pilula.estrato.emergente{--acento:var(--strata-emergente)}

.i-corpo{flex:1;min-height:0;overflow-y:auto;position:relative;
  scroll-behavior:smooth;overscroll-behavior:contain;
  scrollbar-width:thin;scrollbar-color:var(--line) transparent}
.i-bloco{border-top:1px solid var(--line-soft)}
.i-bloco:first-child{border-top:0}
.i-barra{position:sticky;top:0;z-index:2;height:23px;display:flex;align-items:center;padding:0 18px;
  background:var(--raised);border-bottom:1px solid var(--line-soft);
  font-family:var(--font-text);font-weight:400;font-size:var(--fs-13);line-height:1;
  letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.i-campos{padding:14px 18px 20px;display:flex;flex-direction:column;gap:14px}
/* sem folga no fim, o último bloco não sobe até a barra ao ser ancorado */
.i-fim{height:38vh}

.i-campo{display:flex;flex-direction:column;gap:4px}
.i-rot{font-family:var(--font-text);font-size:var(--fs-13);line-height:1;letter-spacing:.06em;
  text-transform:uppercase;color:var(--faint)}
.i-val{font-family:var(--font-ui);font-size:var(--fs-12);line-height:var(--lh-body);color:var(--muted)}
.i-val.destaque{font-family:var(--font-text);font-size:var(--fs-14);line-height:var(--lh-tight);color:var(--ink)}
.i-val code{font-family:var(--mono);font-size:var(--fs-11);color:var(--muted)}
.i-lista{display:flex;flex-direction:column;gap:6px}
.i-linha{display:flex;align-items:center;gap:8px;min-width:0}
.i-linha .i-rot{flex:none;min-width:78px}
.i-link{font-family:var(--font-ui);font-size:var(--fs-12);color:var(--muted);text-decoration:none;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.i-link:hover{color:var(--ink);text-decoration:underline;text-underline-offset:3px}
.i-vazio{font-family:var(--font-ui);font-size:var(--fs-11);color:var(--faint)}
.i-wrap{display:flex;flex-wrap:wrap;gap:5px;align-items:center}

/* frescor e colheita: LUZ, não cor — o semáforo fica reservado ao dado */
.i-dot{width:7px;height:7px;border-radius:50%;background:currentColor;flex:none}
.luz-alta{color:var(--ink)}
.luz-media{color:var(--muted)}
.luz-baixa{color:var(--faint)}

.i-sw{width:23px;height:23px;border-radius:0;border:1px solid var(--line);flex:none;display:block;cursor:pointer}

.i-hist{list-style:none;display:flex;flex-direction:column;gap:7px}
.i-h{background:var(--bg);border:1px solid var(--line-soft);padding:8px 10px;
  display:flex;flex-direction:column;gap:3px}
.i-h-topo{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.i-h-topo code{font-family:var(--font-num);font-size:var(--fs-11);font-variant-numeric:tabular-nums;color:var(--faint)}
.i-h-mov{font-family:var(--font-ui);font-size:var(--fs-12);color:var(--ink)}
.i-h-st{font-family:var(--font-text);font-size:var(--fs-11);line-height:1;letter-spacing:.12em;
  text-transform:uppercase;color:var(--faint)}
.i-h-st.proposto{color:var(--st-espera);background:var(--sf-baixo);padding:2px 6px}
.i-h-quem,.i-ev{font-family:var(--font-ui);font-size:var(--fs-11);color:var(--faint)}
.i-ev{list-style:none;margin-top:2px}
.i-ev li::before{content:"· "}

.inspetor .x{margin-left:auto;flex:none;width:23px;height:23px;display:grid;place-items:center;
  background:var(--c-glass);-webkit-backdrop-filter:var(--glass-blur);backdrop-filter:var(--glass-blur);
  border:0;border-radius:0;box-shadow:none;color:var(--muted);font-size:var(--fs-12);line-height:1;
  cursor:pointer;transition:background var(--m-dur-2) var(--m-ease),color var(--m-dur-2) var(--m-ease)}
.inspetor .x:hover{background:var(--inv-bg);color:var(--inv-ink);-webkit-backdrop-filter:none;backdrop-filter:none}

/* COMPATIBILIDADE: abrirCor() continua escrevendo a pele antiga (header + .body)
   dentro deste mesmo nó. `.drawer header` / `.drawer .body` morreram com a troca
   de classe — estes mantêm o inspetor de cor de pé até a Fase 2 reescrevê-lo. */
.inspetor>header{flex:none;display:flex;align-items:center;gap:11px;padding:16px 18px;
  background:var(--surface-2);border-bottom:1px solid var(--line-soft)}
.inspetor>header h2{font-family:var(--font-display);font-weight:400;font-size:var(--fs-18);line-height:var(--lh-tight)}
.inspetor>header .x{border:0}
.inspetor>.body{flex:1;min-height:0;overflow-y:auto;padding:16px 18px 40px;
  display:flex;flex-direction:column;gap:14px;
  scrollbar-width:thin;scrollbar-color:var(--line) transparent}

/* ---------------------------------------------------------------------------
   5. PALETA DE COMANDOS (⌘K)
   --------------------------------------------------------------------------- */
/* <dialog> vive no top layer: nenhum ancestral com backdrop-filter a atrapalha */
.cmdk{position:fixed;top:12vh;left:50%;transform:translateX(-50%);margin:0;
  width:560px;max-width:calc(100vw - 32px);max-height:min(64vh,560px);
  padding:0;border:0;border-radius:0;box-shadow:none;position:fixed;
  background:color-mix(in srgb,var(--sf-base) 62%,transparent);
  -webkit-backdrop-filter:var(--glass-blur) saturate(1.4);backdrop-filter:var(--glass-blur) saturate(1.4);
  color:var(--ink);overflow:hidden;display:none;flex-direction:column;
  --faint:var(--faint-raised)}
.cmdk[open]{display:flex;animation:cmdk-entra var(--m-dur-1) var(--m-ease)}
@keyframes cmdk-entra{from{opacity:0;transform:translate(-50%,-6px)}}
/* ::backdrop não herda var() em todo browser — literal, com os dois temas explícitos */
.cmdk::backdrop{background:rgba(0,0,0,.62)}
:root[data-theme="light"] .cmdk::backdrop{background:rgba(238,238,238,.62)}
@media (max-width:760px){.cmdk{top:6vh;width:calc(100vw - 16px);max-height:78vh}}

.cmdk-busca{display:flex;align-items:center;gap:10px;flex:none;height:52px;padding:0 14px;
  border-bottom:1px solid var(--line-soft)}
.cmdk-busca .lupa{width:13px;height:13px;flex:none;color:var(--faint)}
.cmdk-busca input{flex:1;min-width:0;height:100%;border:0;background:none;color:var(--ink);
  font-family:var(--font-text);font-size:var(--fs-14);line-height:1}
.cmdk-busca input::placeholder{color:var(--faint)}
.cmdk-busca input:focus{outline:none}

.cmdk-lista{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:4px 0;
  scroll-behavior:smooth;scrollbar-width:thin;scrollbar-color:var(--line) transparent}
.cmdk-grupo{display:flex;align-items:center;gap:10px;height:23px;padding:0 14px;margin-top:6px;
  border-top:1px solid var(--line-soft)}
.cmdk-lista .cmdk-grupo:first-child{margin-top:0;border-top:0}
.cmdk-grupo .par-cnt>.rot,.cmdk-grupo .par-cnt>.num{color:var(--faint)}

.cmdk-item{position:relative;display:flex;align-items:center;gap:10px;height:38px;padding:0 14px;
  cursor:pointer;color:var(--muted);
  transition:background var(--m-dur-1) var(--m-ease),color var(--m-dur-1) var(--m-ease)}
.cmdk-item::before{content:"";position:absolute;left:0;top:7px;bottom:7px;width:2px;background:transparent}
.cmdk-item[data-est="residual"]::before{background:var(--strata-residual)}
.cmdk-item[data-est="dominante"]::before{background:var(--strata-dominante)}
.cmdk-item[data-est="emergente"]::before{background:var(--strata-emergente)}
.cmdk-item.proposta::before{
  -webkit-mask-image:repeating-linear-gradient(180deg,#000 0 3px,transparent 3px 6px);
  mask-image:repeating-linear-gradient(180deg,#000 0 3px,transparent 3px 6px)}
.cmdk-item[aria-selected="true"]{background:var(--inv-bg);color:var(--inv-ink)}
.cmdk-item[aria-disabled="true"]{color:var(--faint);cursor:default}
.cmdk-item .rot{flex:0 1 auto;max-width:56%;font-family:var(--font-text);font-size:var(--fs-13);
  line-height:1.1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cmdk-item .sub{flex:1;min-width:0;color:var(--faint);font-family:var(--font-text);font-size:var(--fs-11);
  line-height:1.1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cmdk-item[aria-selected="true"] .sub{color:inherit;opacity:.62}
.cmdk-item .dir{margin-left:auto;flex:none;display:flex;align-items:center;gap:8px}
.cmdk-item .atalho{font-family:var(--font-text);font-size:var(--fs-11);color:var(--faint)}
.cmdk-item[aria-selected="true"] .atalho{color:inherit;opacity:.62}
.cmdk-num{font-family:var(--font-num);font-size:var(--fs-12);line-height:1;
  font-variant-numeric:tabular-nums;color:var(--faint)}
.cmdk-item[aria-selected="true"] .cmdk-num{color:inherit;opacity:.72}
.cmdk-item[aria-selected="true"] .pilula{background:rgba(0,0,0,.10);color:var(--inv-ink);
  -webkit-backdrop-filter:none;backdrop-filter:none}
:root[data-theme="light"] .cmdk-item[aria-selected="true"] .pilula{background:rgba(255,255,255,.18)}
.cmdk-item[aria-selected="true"] .pilula.proposto{background:transparent;outline-color:currentColor;opacity:.75}

/* a marca do player: quadrado reto, logo colhido antes da inicial */
.cmdk-marca{flex:none;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;
  overflow:hidden;background:var(--cor,transparent);color:var(--tinta,var(--ink));
  font-family:var(--font-text);font-size:var(--fs-11);line-height:1}
.cmdk-marca.logo{position:relative;background:var(--bg);border:1px solid var(--line-soft)}
.cmdk-marca.logo img{width:100%;height:100%;object-fit:contain;display:block;padding:1px;background:#fff}
/* a cor medida não some quando há logo: vira o fio de baixo, como no avatar do miolo */
.cmdk-marca.logo::after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--cor,transparent)}
.cmdk-marca.sem{border:1px solid var(--line);color:var(--faint)}
.cmdk-marca.vazio{border:0;background:none}

.cmdk-vazio{padding:22px 14px;font-family:var(--font-text);font-size:var(--fs-12);color:var(--faint)}
.cmdk-pe{display:flex;align-items:center;gap:14px;flex:none;height:34px;padding:0 14px;
  border-top:1px solid var(--line-soft);font-family:var(--font-text);font-size:var(--fs-11);color:var(--faint)}
.cmdk-pe span{display:inline-flex;align-items:center;gap:5px}
.cmdk-pe kbd{font-family:var(--font-text);font-size:var(--fs-11);color:var(--muted);
  border:1px solid var(--line-soft);padding:1px 5px;border-radius:0}
.cmdk-pe .dir{margin-left:auto}
.cmdk-md{font-family:var(--font-text);font-size:var(--fs-12);line-height:var(--lh-body);color:var(--muted)}
.cmdk-md p{margin:0 0 4px}
.cmdk-md b{color:var(--ink)}

/* ---------------------------------------------------------------------------
   6. ESTADOS — vazio · colhendo · proposto · confirmado · sem dado
   `.est-bloco` é a CAIXA; `.est-*` é a PELE e funciona solta sobre um card.
   TRACEJADO é reservado a JULGAMENTO NÃO CONFIRMADO — nada mais.
   --------------------------------------------------------------------------- */
.est-bloco{display:flex;flex-direction:column;align-items:flex-start;gap:10px;padding:18px;
  border-radius:0;box-shadow:none;max-width:72ch}
.est-txt{font-family:var(--font-text);font-size:var(--fs-12);line-height:var(--lh-body);
  color:var(--muted);max-width:56ch}
.est-corpo{align-self:stretch}

.est-vazio{border:1px solid var(--line-soft);background:transparent;--faint:var(--faint-raised)}
.est-colhendo{border:1px solid var(--line-soft);background:var(--surface)}
/* o único tracejado: o painel PROPÕE, o Felipe confirma */
.est-proposto{position:relative}
.est-proposto::before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--st-espera)}
:root[data-theme="light"] .est-proposto{border-color:rgba(0,0,0,.40)}
.est-confirmado{border:1px solid var(--line);background:var(--surface);color:var(--ink)}
/* ausência não pesa mais que presença: fundo transparente, não #1a1a1a */
.est-sem-dado{display:flex;align-items:center;justify-content:center;gap:9px;min-height:56px;padding:14px;
  background:transparent;border:1px solid var(--line-soft);border-radius:0;
  --faint:var(--faint-raised);color:var(--faint)}
.est-sem-dado::before{content:"";width:18px;height:1px;background:currentColor;flex:none}
.est-sem-dado span{font-family:var(--font-text);font-size:var(--fs-11);letter-spacing:.12em;
  text-transform:uppercase}
.est-sem-dado.inline{display:inline-flex;min-height:0;padding:3px 9px}
.pcard.est-proposto,.b-cel.est-proposto,.tela-col.est-proposto{position:relative}
.pcard.est-proposto,.b-cel.est-proposto,.tela-col.est-proposto::before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--st-espera)}

/* bloco de comando copiável */
.cmd{display:flex;align-items:stretch;max-width:100%;background:var(--surface);
  border:1px solid var(--line-soft);border-radius:0}
.cmd .cmd-rot{display:flex;align-items:center;padding:0 9px;border-right:1px solid var(--line-soft);
  font-family:var(--font-text);font-size:var(--fs-11);letter-spacing:.12em;text-transform:uppercase;
  color:var(--faint)}
.cmd code{flex:1;min-width:0;font-family:var(--mono);font-size:var(--fs-11);color:var(--muted);
  padding:8px 10px;overflow-x:auto;white-space:nowrap;scrollbar-width:none}
.cmd code::-webkit-scrollbar{height:0}
.cmd .cmd-copy{flex:none;font-family:var(--font-text);font-size:var(--fs-11);letter-spacing:.12em;
  text-transform:uppercase;color:var(--muted);background:none;border:0;border-left:1px solid var(--line-soft);
  padding:0 12px;cursor:pointer;transition:var(--m-dur-1) var(--m-ease)}
.cmd .cmd-copy:hover{background:var(--inv-bg);color:var(--inv-ink)}
.cmd .cmd-copy.feito{background:var(--inv-bg);color:var(--inv-ink)}

/* fila de colheita: barra fina no rodapé. Filha DIRETA do <body> — o vidro daqui
   não pode virar containing block de #tip/#toast/#drawer. */
.fila{position:fixed;left:0;right:0;bottom:0;z-index:35;
  display:flex;align-items:center;gap:12px;height:28px;padding:0 12px;
  background:color-mix(in srgb,var(--surface) 84%,transparent);
  -webkit-backdrop-filter:var(--glass-blur);backdrop-filter:var(--glass-blur);
  border-top:1px solid var(--line-soft);--faint:var(--faint-raised)}
.fila[hidden]{display:none}
.fila .par-cnt{flex:none}
.fila .par-cnt>.rot{color:var(--ink)}
.fila-itens{display:flex;align-items:center;gap:14px;flex:1;min-width:0;overflow-x:auto;scrollbar-width:none}
.fila-itens::-webkit-scrollbar{height:0}
.fila-item{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;
  font-family:var(--font-ui);font-size:var(--fs-11);color:var(--faint)}
.fila-item.curso{color:var(--ink)}
.fila-item.ok::before{content:"✓";font-family:var(--font-num);color:var(--faint)}
.fila-item.erro::before{content:"failed";font-family:var(--font-text);font-size:var(--fs-11);
  letter-spacing:.12em;text-transform:uppercase;color:var(--faint)}
.fila-item em{font-style:normal;font-family:var(--font-num);font-variant-numeric:tabular-nums;color:var(--faint)}
body.tem-fila .content{padding-bottom:56px}
body.tem-fila .toast{bottom:44px}

/* toast: erro não vira vermelho — troca de FACE e fica mais tempo */
.toast{position:fixed;left:50%;bottom:22px;z-index:40;
  display:inline-flex;align-items:center;min-height:32px;max-width:min(56ch,88vw);padding:0 14px;
  font-family:var(--font-text);font-size:var(--fs-12);line-height:var(--lh-tight);
  border:0;border-radius:0;box-shadow:none;
  /* NÃO anima opacity: opacity<1 vira backdrop root e o vidro nasce cego. A TINTA é a
     opacidade, e a visibility tira o elemento do caminho quando fechado. */
  background:color-mix(in srgb,var(--inv-bg,var(--ink)) 0%,transparent);
  visibility:hidden;pointer-events:none;transform:translateX(-50%) translateY(8px);
  transition:background var(--m-dur-1) var(--m-ease),transform var(--m-dur-1) var(--m-ease),
             bottom var(--m-dur-2) var(--m-ease),visibility 0s linear var(--m-dur-1)}
.toast.show{visibility:visible;transform:translateX(-50%) translateY(0);pointer-events:auto;cursor:pointer;
  background:var(--inv-bg,var(--ink));
  transition:background var(--m-dur-1) var(--m-ease),transform var(--m-dur-1) var(--m-ease),
             bottom var(--m-dur-2) var(--m-ease),visibility 0s}
.toast.erro{background:var(--sf-topo);color:var(--ink);border:0}

/* skeleton: blocos, um só idioma de espera (piscar). Sem gradiente varrendo. */
.skel{display:flex;flex-direction:column;gap:10px;padding:2px 0}
.skel-b{background:var(--surface-2);border-radius:0;animation:skel-pisca 1.5s var(--m-ease) infinite}
.skel-b:nth-child(2){animation-delay:.14s}
.skel-b:nth-child(3){animation-delay:.28s}
@keyframes skel-pisca{0%,100%{opacity:.55}50%{opacity:1}}
.skel-b.t{height:24px;width:min(38%,280px)}
.skel-b.l{height:13px;width:100%}
.skel-b.l.c{width:62%}
.skel-b.av{height:34px;width:34px}
.skel-b.cel{height:15px}
.skel-b.tela{aspect-ratio:3/4;height:auto}
.skel-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px}
.skel-card{display:flex;flex-direction:column;gap:9px;padding:14px;background:var(--surface);
  border:1px solid var(--line-soft)}
.skel-colunas{display:flex;gap:16px;overflow:hidden}
.skel-col{flex:0 0 clamp(220px,26vw,420px);display:flex;flex-direction:column;gap:10px;padding:12px;
  background:var(--surface);border:1px solid var(--line-soft)}
.skel-tabela{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}

/* o spinner de três pontos de render() vira três blocos, sem tocar no markup */
.carregando{display:flex;flex-direction:column;gap:10px;padding:26px 0;max-width:72ch}
.carregando span{width:100%;height:14px;border-radius:0;background:var(--surface-2);
  animation:skel-pisca 1.5s var(--m-ease) infinite}
.carregando span:first-child{height:24px;width:min(38%,280px)}
.carregando span:last-child{width:62%}
.carregando span:nth-child(2){animation-delay:.14s}
.carregando span:nth-child(3){animation-delay:.28s}

/* a faixa de pendências destacada quando o rodapé leva até ela */
.band.piscou{border-color:var(--ink)}

/* ---------------------------------------------------------------------------
   7. Faixa estreita — o shell vira duas linhas (o body já tem
   grid-template-rows:auto minmax(0,1fr): carga estrutural, não mexer)
   --------------------------------------------------------------------------- */
@media (max-width:760px){
  .sb{height:auto;max-height:46vh;overflow-y:auto;border-right:0;border-bottom:1px solid var(--line)}
  .sb-nav{overflow:visible}
  .sb-menu{left:8px;top:64px}
}

@media (prefers-reduced-motion:reduce){
  .sb-item,.pilula,.sb-proj,.pagehead,.ph-titulo,.inspetor,.toast{transition:none}
  .cmdk[open]{animation:none}
  .sb .livedot.bateu,.pulso,.skel-b,.carregando span{animation:none}
  .i-corpo,.cmdk-lista,.sb-nav{scroll-behavior:auto}
}

/* a frase do mercado é o maior tipo da Arena; quando ela não existe, o lugar fica
   reservado e dito — não se preenche com o rótulo da seção (branding, revisão da Fase 1) */
.ph-titulo.vazio{color:var(--faint)}


/* ---- BENTO — 100% asset dentro do quadrado -----------------------------------
   REGRA: a grade está SEMPRE preenchida. Sem quadrado preto. Hover em cada
   célula nomeia o slot (Imagery · Logo · Site · …). O tip do player mora no nome.
   Célula derivada (reuso de outro asset) ainda é conteúdo do player — não é vazio.

   O ENCAIXE MUDA POR TIPO DE ASSET:
   · captura de site e feed → cover ancorado no TOPO
   · logo/ícone → contain, centrado, com ar, sobre branco
   · paleta → sangra; a largura de cada faixa é a medição
   · tipografia → espécime centrado
   · placa de marca → quando não há colheita própria (logo sobre theme_color) */
.bentos{display:grid;grid-template-columns:repeat(auto-fill,minmax(392px,1fr));gap:22px;margin-top:12px}
.bento{background:var(--sf-base);border:0;border-top:2px solid var(--line-soft);
  border-top-color:transparent;padding:12px;display:flex;flex-direction:column;gap:9px;
  cursor:pointer;transition:border-color var(--m-dur-1) var(--m-ease)}
.bento:hover{background:var(--sf-alto)}
.bento.est-residual{border-top-color:var(--strata-residual)}
.bento.est-dominante{border-top-color:var(--strata-dominante)}
.bento.est-emergente{border-top-color:var(--strata-emergente)}
.bento.proposta{position:relative;padding-left:2px}
.bento.proposta::before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--st-espera)}

/* o único texto do cartão, e fora da grade */
.b-nome{font-family:var(--font-text);font-weight:400;font-size:var(--fs-14);line-height:1;
  color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 2px;
  display:flex;align-items:center;gap:8px;width:fit-content;max-width:100%}
.b-nome .letra{width:20px;height:20px;font-size:10px;flex:none}

.b-grade{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:108px;gap:5px}
.b-cel{position:relative;background:var(--sf-baixo);overflow:hidden;cursor:help}
.b-cel img{position:absolute;inset:0;width:100%;height:100%;display:block}

/* capturas: o alto da página é onde a marca se apresenta */
.b-cel.og,.b-cel.heroi{grid-column:span 2;grid-row:span 2}
.b-cel.og img,.b-cel.heroi img,.b-cel.ilus img,.b-cel.motion img{object-fit:cover;object-position:top center}
.b-cel.feed img{object-fit:cover;object-position:center bottom}

/* logo + icons: respira, nunca corta, sobre claro.
   A logo é o nome escrito. A letra, quando existe, entra como redução — destacada, não no lugar. */
.b-cel.logo,.b-cel.icon{background:var(--c-white)}
.b-cel.logo img{object-fit:contain;padding:16%;inset:0}
.b-cel.logo .b-marca{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  gap:7%;padding:10% 8%}
.b-cel.logo .b-marca__nome{position:relative;inset:auto;flex:1 1 auto;width:auto;height:auto;
  max-width:64%;max-height:72%;padding:0}
.b-cel.logo .b-red{flex:none;width:26%;margin:0;display:flex;flex-direction:column;align-items:center;gap:4px}
.b-cel.logo .b-red img{position:relative;inset:auto;width:100%;height:auto;max-width:none;max-height:none;
  aspect-ratio:1;padding:12%;background:var(--sf-alto)}
.b-cel.logo .b-red figcaption{font-family:var(--font-data);font-size:8px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--faint)}
.b-cel.icon img{object-fit:contain;padding:8%;inset:0}
:root[data-theme="light"] .b-cel.logo,:root[data-theme="light"] .b-cel.icon{background:var(--c-white-f5)}

/* espécime: o padrão é o alfabeto completo em caixa alta e baixa (AaBbCc…Zz) */
.b-cel.tipo{display:grid;place-items:stretch}
.b-cel.tipo .esp{font-size:11px;line-height:1.25;color:var(--ink);letter-spacing:0}
.b-tipos{display:flex;flex-direction:column;justify-content:center;gap:8px;width:100%;height:100%;padding:8px 9px;min-width:0}
.b-tipo{display:flex;flex-direction:column;align-items:stretch;gap:2px;min-width:0}
.b-tipo[data-papel="title"] .esp{font-size:12px}
.b-tipo[data-papel="body"] .esp,.b-tipo[data-papel="nav"] .esp{font-size:10px}
.b-tipo:only-child .esp{font-size:12px}
.b-tipo small{font-family:var(--font-text);font-size:8px;letter-spacing:.1em;text-transform:uppercase;color:var(--faint)}
.b-letra-logo{display:grid;place-items:center;width:100%;height:100%;
  font-family:var(--font-text);font-size:28px;font-weight:500;color:var(--c-white);
  background:var(--b-tema,var(--sf-baixo))}

/* paleta: sangra; a largura de cada faixa É a participação medida */
.b-cel.paleta{grid-column:span 2}
.b-cel.paleta .sw{display:flex;height:100%;width:100%}
.b-cel.paleta .sw i{display:block;height:100%}

/* placa de marca: preenche o slot quando a colheita própria ainda não existe */
.b-placa{position:absolute;inset:0;display:grid;place-items:center;
  background:color-mix(in srgb,var(--b-tema,#1a1a1a) 22%,var(--sf-baixo))}
.b-placa img{position:relative!important;width:42%!important;height:42%!important;
  inset:auto!important;object-fit:contain;filter:drop-shadow(0 1px 0 color-mix(in srgb,var(--c-black) 18%,transparent))}
.b-placa--letra span{font-family:var(--font-text);font-size:36px;font-weight:500;color:var(--ink);
  opacity:.55}

/* derivada: ainda preenchida — só um fio a menos de saturação, nunca vazia */
.b-cel.derivada{filter:saturate(.92)}

/* legenda: mapa da grade com o nome do slot no hover */
.b-legenda{display:flex;align-items:center;gap:18px;margin-top:10px}
.bl-mapa{display:grid;grid-template-columns:repeat(4,16px);grid-auto-rows:13px;gap:2px}
.bl-mapa i{display:block;background:var(--sf-alto);cursor:help}
.bl-mapa i.og,.bl-mapa i.heroi{grid-column:span 2;grid-row:span 2}
.bl-mapa i.paleta{grid-column:span 2}
.bl-estr{display:flex;gap:6px;align-items:center}
.bl-estr i{display:block;width:22px;height:2px}
.bl-estr .r{background:var(--strata-residual)}.bl-estr .d{background:var(--strata-dominante)}.bl-estr .e{background:var(--strata-emergente)}
.bl-estr .p{background:var(--sf-alto)}

/* ---- telas estreitas (≤760): o shell empilha, então a sidebar vira uma FAIXA horizontal,
   aberta (nunca colapsada — colapsada e empilhada brigam e o rodapé pinta por cima da lista).
   Projeto e "+" na primeira linha; a espinha rola na horizontal; rodapé recolhido ao essencial. */
@media (max-width:760px){
  body{grid-template-columns:1fr;grid-template-rows:auto minmax(0,1fr)}
  html .sb{height:auto;max-height:none;overflow:visible;flex-direction:row;flex-wrap:wrap;align-items:center;
    gap:6px 10px;padding:8px 10px;border-right:0;border-bottom:1px solid var(--line)}
  html .sb-proj{flex:1 1 auto;min-width:0}
  html .sb-busca{flex:0 0 auto;width:auto}
  html .sb-add{flex:0 0 auto;width:auto}
  html .sb-nav{flex:1 1 100%;display:flex;flex-direction:row;overflow-x:auto;gap:2px;padding-bottom:2px;
    scrollbar-width:none}
  html .sb-nav::-webkit-scrollbar{display:none}
  html .sb-grupo{display:contents}
  html .sb-grupo-rot{display:none}
  html .sb{width:100%;max-width:100%;box-sizing:border-box}
  html .sb-proj{width:auto}
  /* a regra base dá width:100% ao item; em linha isso vira um item por tela */
  html .sb-item{flex:0 0 auto;width:auto;min-height:32px;padding:0 10px;white-space:nowrap}
  html .sb-item .par-cnt>.num{display:none}
  html .sb-foot{flex:1 1 100%;display:flex;flex-direction:row;flex-wrap:wrap;gap:2px 8px;margin:0;padding:0;border:0}
  html .sb-foot .sb-item{min-height:28px}
  html .sb-linha{flex:1 1 100%;flex-direction:row;gap:8px;height:auto;padding:0}
  html .sb-vivo,html .sb-stamp{display:none}
  html .main{height:auto;min-height:0}
}
/* colunas estreitas: a matriz de estratos e a arena viram uma coluna abaixo de 900px */
@media (max-width:900px){
  html .matrix{grid-template-columns:1fr}
  html .matrix .mrow{padding-top:8px}
  html .pcard b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
}

/* nota discreta sobre a captura quando o site proíbe iframe no modo ao vivo */
.tela-vp{position:relative}
.tela-nota{position:sticky;bottom:0;z-index:3;margin-top:auto;padding:6px 10px;font-family:var(--font-text);font-size:var(--fs-11);
  color:var(--muted);background:color-mix(in srgb,var(--bg) 88%,transparent);border-top:1px solid var(--line-soft)}
.tela-nota a{color:var(--ink);text-decoration:none}
.tela-nota a:hover{text-decoration:underline}

/* ---- BENCHMARKS — a ref, e o que ela revela ----------------------------------
   Três blocos por cartão, sempre na mesma ordem: dizem · mostra · distância.
   A ordem é o argumento: primeiro o que a pessoa espera, depois o que a ref é,
   por último a diferença. Quem lê de cima para baixo lê o briefing.
   Tipo: tudo abaixo de 18px em Tekst (--font-ui), regra da casa.               */
.r-legenda{display:flex;flex-wrap:wrap;gap:18px;font:400 var(--fs-11)/1.3 var(--font-ui);color:var(--faint)}
.r-legenda i.lg{display:inline-block;width:8px;height:8px;margin-right:6px;border-radius:1px;vertical-align:middle}
.r-legenda i.diz{background:var(--strata-emergente)}
.r-legenda i.mos{background:var(--strata-dominante)}
.r-legenda i.dis{background:var(--warn)}

.refs{display:grid;grid-template-columns:repeat(auto-fill,minmax(420px,1fr));gap:22px;margin-top:12px}
.ref{background:var(--surface);border:1px solid var(--line-soft);border-radius:2px;overflow:hidden;
     display:flex;flex-direction:column}
.ref:hover{border-color:var(--line)}

.r-top{display:grid;grid-template-columns:1fr auto;gap:4px 10px;align-items:baseline;
       padding:12px 14px;border-bottom:1px solid var(--line-soft)}
.r-nome{font:400 var(--fs-18)/1.1 var(--font-display);color:var(--ink)}
.r-selos{grid-column:2;grid-row:1;display:flex;gap:5px;flex-wrap:wrap;justify-content:flex-end}
.r-cat{grid-column:1;font:400 var(--fs-11)/1.3 var(--font-ui);color:var(--faint)}
.r-link{grid-column:2;font:400 var(--fs-11)/1.3 var(--font-ui);color:var(--faint);text-decoration:none;
        border-bottom:1px solid var(--line-soft)}
.r-link:hover{color:var(--ink)}

/* a captura entra ancorada no topo: a marca vive acima da dobra */
.r-corpo{display:grid;grid-template-columns:1fr;gap:0}
.r-tela{height:196px;overflow:hidden;background:var(--surface-2);position:relative}
.r-tela img{width:100%;height:auto;display:block}
.r-semtela{position:absolute;inset:0;display:grid;place-items:center;
           font:400 var(--fs-11)/1 var(--font-ui);color:var(--faint)}
.r-medido{display:flex;align-items:center;gap:12px;padding:10px 14px;border-bottom:1px solid var(--line-soft)}
.r-pal{display:flex;flex:1;height:16px;border-radius:1px;overflow:hidden}
.r-pal i{display:block;height:100%}
.r-pal.vazia{background:repeating-linear-gradient(45deg,var(--surface-2) 0 6px,transparent 6px 12px)}
.r-esp{font-size:24px;line-height:1;color:var(--ink)}
.r-esp.vazia{color:var(--faint);font-family:var(--font-ui);font-size:var(--fs-14)}
.r-crom{font:400 var(--fs-11)/1 var(--font-num);color:var(--faint);font-variant-numeric:tabular-nums}

.r-leituras{display:flex;flex-direction:column}
.r-bloco{padding:12px 14px;border-bottom:1px solid var(--line-soft);border-left:2px solid transparent}
.r-bloco.diz{border-left-color:var(--strata-emergente)}
.r-bloco.mos{border-left-color:var(--strata-dominante)}
.r-bloco.dis{border-left-color:var(--warn)}
.r-rot{display:block;font:400 var(--fs-11)/1 var(--font-ui);letter-spacing:.06em;text-transform:uppercase;
       color:var(--faint);margin-bottom:6px}
.r-rot.lim{margin-top:8px}
.r-txt{font:400 var(--fs-13)/var(--lh-body) var(--font-ui);color:var(--ink);margin:0}
/* verbatim é citação: fica em itálico do Tekst e mantém a atribuição visível */
.r-fala{margin:0 0 8px}
.r-fala:last-child{margin-bottom:0}
.r-fala p{font:400 var(--fs-13)/var(--lh-body) var(--font-ui);font-style:italic;color:var(--ink);margin:0}
.r-fala cite{display:block;margin-top:4px;font:400 var(--fs-11)/1.3 var(--font-ui);font-style:normal;color:var(--faint)}
.r-fala.coletivo p{color:var(--faint-raised)}
.r-pe{padding:12px 14px;background:var(--surface-2)}
.r-pe p{font:400 var(--fs-12)/var(--lh-body) var(--font-ui);color:var(--faint-raised);margin:0}

@media (max-width:760px){ .refs{grid-template-columns:1fr} }

/* ---------- REVIEW: a trinca preenchida ----------------------------------
   Convertida para TOM SOBRE TOM em 11/09/2026 (passo 3.1). A régua da plataforma
   fica fixa à esquerda porque é ela que separa auditoria de gosto. Nenhum fio:
   profundidade por degrau (--sf-*), e o tracejado que marcava "contestado" foi
   substituído pela ARESTA de status, que é o mesmo vocabulário do catálogo. */
.rv { display: flex; flex-direction: column; gap: 28px; min-width: 0; }
.rv-regua { position: sticky; top: 8px; padding: 14px; background: var(--sf-base); }
.rv-regua__topo { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 10px; }
.rv-regua__prop { font-size: var(--fs-14); line-height: 1.45; margin: 0 0 14px; }
.rv-regua__bloco { margin-top: 12px; }
.rv-regua__bloco ul { list-style: none; margin: 5px 0 0; padding: 0; }
.rv-regua__bloco li { font-size: var(--fs-12); color: var(--ink-2); padding: 3px 0; }

.rv-plat { background: var(--sf-base); padding: 14px 16px; display: flex; flex-direction: column; gap: 10px; }
.rv-plat__topo { display: flex; align-items: center; gap: 8px; }
.rv-plat__prop { font-family: var(--font-display); font-size: clamp(18px, 2vw, 24px); line-height: 1.2; margin: 0; }
.rv-plat__chips { display: flex; flex-wrap: wrap; gap: 6px; }
.rv-chip { font-family: var(--font-data); font-size: 10.5px; letter-spacing: .08em; text-transform: uppercase;
  background: var(--sf-alto); color: var(--ink-2); padding: 4px 8px; }
.rv-chip--veto { color: var(--faint); }

.rv-veredito { margin: 0; }
.rv-sistema { background: var(--sf-base); padding: 14px; }
.b-grade--sistema { grid-auto-rows: minmax(108px, 13vh); margin-top: 12px; max-width: 920px; }
.rv-cel-msg { display: grid; place-items: center; padding: 14px 16px; }
.rv-cel-msg--largo { grid-column: span 2; }
.rv-msg { font-family: var(--font-display); font-size: clamp(15px, 1.8vw, 22px); line-height: 1.2; text-align: center; color: var(--ink); }
.rv-msg--sm { font-size: clamp(13px, 1.4vw, 16px); color: var(--ink-2); }

.rv-campo { background: var(--sf-base); padding: 18px 64px 64px; overflow: visible; }
.rv-disco { position: relative; width: min(100%, 920px); aspect-ratio: 1; margin: 36px auto 20px; color: var(--line); overflow: visible; }
.rv-eixos { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; z-index: 0; }
.rv-setor { display: contents; }
.rv-polo { position: absolute; z-index: 3; padding: 6px 11px; background: var(--ink); color: var(--inv-ink);
  font-family: var(--font-data); font-size: 10.5px; letter-spacing: .1em; text-transform: uppercase; white-space: nowrap; }
.rv-polo em { font-style: normal; font-family: var(--font-num); font-variant-numeric: tabular-nums;
  letter-spacing: 0; margin-left: 6px; color: color-mix(in srgb, var(--inv-ink) 62%, transparent); }
.rv-polo--manter { top: 0; left: 50%; transform: translate(-50%,-50%); }
.rv-polo--adicionar { top: 50%; right: 0; transform: translate(50%,-50%); }
.rv-polo--melhorar { bottom: 0; left: 50%; transform: translate(-50%,50%); }
.rv-polo--perder { top: 50%; left: 0; transform: translate(-50%,-50%); }

.rv-centro { position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%);
  width: 20%; z-index: 2; margin: 0; display: flex; flex-direction: column; align-items: center; gap: 7px; }
.rv-centro__nome { display: block; width: 100%; height: auto; object-fit: contain;
  background: var(--c-white); padding: 8% 4%; }
.rv-centro__red { width: 34%; margin: 0; display: flex; flex-direction: column; align-items: center; gap: 3px; }
.rv-centro__red img { display: block; width: 100%; height: auto; object-fit: contain;
  background: var(--c-white); padding: 10%; }
.rv-centro__red figcaption { font-size: 8px; letter-spacing: .1em; }
.rv-centro__letra { display: grid; place-items: center; width: 100%; aspect-ratio: 1; font-family: var(--font-display);
  font-size: 36px; background: var(--sf-baixo); color: var(--ink); }
.rv-centro > figcaption { font-family: var(--font-data); font-size: 9.5px; letter-spacing: .1em;
  text-transform: uppercase; color: var(--faint); }
.rv-centro__red figcaption { font-family: var(--font-data); text-transform: uppercase; color: var(--faint); }

.rv-peca { position: absolute; z-index: 2; width: 84px; transform: translate(-50%,-50%);
  background: none; border: 0; padding: 0; cursor: pointer; text-align: center; color: inherit; }
.rv-peca__olho { display: block; width: 64px; height: 64px; margin: 0 auto; overflow: hidden;
  background: var(--sf-baixo); position: relative; }
.rv-peca__olho > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }
.rv-peca--logo .rv-peca__olho { background: var(--c-white); }
.rv-peca--logo .rv-peca__olho > img { object-fit: contain; padding: 16%; }
.rv-peca--tipo .rv-peca__olho, .rv-peca--texto .rv-peca__olho, .rv-peca--vazio .rv-peca__olho {
  display: grid; place-items: center; }
.rv-peca__aa { font-size: 28px; line-height: 1; color: var(--ink); }
.rv-peca__tx { font-family: var(--font-display); font-size: 11px; line-height: 1.2; color: var(--ink);
  padding: 8px; display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; }
.rv-peca__mais { font-family: var(--font-display); font-size: 28px; color: var(--faint); line-height: 1; }
.rv-peca__sw { display: block; width: 100%; height: 100%; }
.rv-peca__corte { position: absolute; inset: 0; overflow: hidden; display: block; }
.rv-peca__corte img { position: static; display: block; max-width: none; height: auto; border: 0; }
.rv-peca__cap { display: block; font-family: var(--font-text); font-size: 10.5px; line-height: 1.25;
  color: var(--ink-2); margin-top: 5px; }
.rv-peca:hover .rv-peca__olho { outline: 1px solid var(--ink); outline-offset: 2px; }
.rv-peca:focus-visible { outline: none; }
.rv-peca:focus-visible .rv-peca__olho { outline: 1px solid var(--ink); outline-offset: 2px; }
.rv-peca.tem-risco .rv-peca__olho { box-shadow: inset 2px 0 0 var(--st-espera); }
.rv-denso { display: flex; flex-direction: column; gap: 36px; }

.rv-par { min-width: 0; }
.rv-par__topo { display: flex; align-items: baseline; justify-content: space-between; gap: 12px;
  padding: 0 2px 12px; }
.rv-par__n { font-family: var(--font-num); font-variant-numeric: tabular-nums;
  font-size: var(--fs-12); color: var(--faint); }

/* SAYS × SHOWS — duas colunas, duas vozes. A esquerda afirma (Construct);
   a direita mede (Tekst). O × é o corte, não um ornamento. */
.rv-sx { display: flex; flex-direction: column; gap: 2px; }
.rv-sx__cab, .rv-sx__linha {
  display: grid; grid-template-columns: minmax(0,1fr) 36px minmax(0,1.15fr);
  gap: 0 20px; align-items: start; }
.rv-sx__cab { padding: 0;
  font-family: var(--font-data); font-size: 10.5px; letter-spacing: .12em;
  text-transform: uppercase; color: var(--faint); }
.rv-sx__cab span { padding: 8px 24px; }
.rv-sx__cab span:first-child, .rv-sx__diz { background: var(--sf-base); }
.rv-sx__cab span:last-child, .rv-sx__mostra { background: var(--sf-alto); }
.rv-sx__cab i { text-align: center; font-style: normal; align-self: stretch;
  display: grid; place-items: center; }
.rv-sx__linha { padding: 0; align-items: stretch; }
.rv-sx__diz { font-family: var(--font-display); font-weight: 400;
  font-size: clamp(17px, 1.55vw, 22px); line-height: 1.22; letter-spacing: -.01em;
  margin: 0; padding: 22px 24px; }
.rv-sx__mostra { font-family: var(--font-text); font-size: 13px; line-height: 1.5;
  color: var(--muted); margin: 0; padding: 22px 24px; }
.rv-sx__x { font-family: var(--font-display); font-style: normal; font-size: 20px;
  color: var(--faint); text-align: center; display: grid; place-items: center; }

/* órfãs: a palavra é o cartão; o porquê cabe embaixo */
.rv-orfas { list-style: none; margin: 0; padding: 0;
  display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 2px; }
.rv-orfas li { background: var(--sf-base); padding: 18px 20px; display: flex; flex-direction: column; gap: 8px; }
.rv-orfas .t-frase { font-size: clamp(18px, 1.6vw, 24px); }

/* perguntas: decisão em Construct, evidência em Tekst, numeradas */
.rv-decisoes { list-style: none; margin: 0; padding: 0; counter-reset: dec;
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 2px; }
.rv-decisoes li { background: var(--sf-base); padding: 20px 22px 22px;
  display: flex; flex-direction: column; gap: 8px; counter-increment: dec; }
.rv-decisoes li::before { content: counter(dec, decimal-leading-zero);
  font-family: var(--font-num); font-size: 10.5px; letter-spacing: .08em; color: var(--faint); }
.rv-decisoes .t-frase { font-size: clamp(17px, 1.5vw, 22px); }

/* o que falta: mais denso, duas colunas — apêndice, não manifesto */
.rv-falta { list-style: none; margin: 0; padding: 0; counter-reset: fal;
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 2px; }
.rv-falta li { background: var(--sf-baixo); padding: 16px 18px;
  display: flex; flex-direction: column; gap: 6px; counter-increment: fal; }
.rv-falta li::before { content: counter(fal, decimal-leading-zero);
  font-family: var(--font-num); font-size: 10.5px; letter-spacing: .08em; color: var(--faint); }
.rv-falta .t-frase { font-size: 15px; color: var(--ink-2); }
.rv-falta .t-porque { font-size: 12px; }

@media (max-width: 820px) {
  .rv-sx__cab { display: none; }
  .rv-sx__linha { grid-template-columns: 1fr; gap: 10px; }
  .rv-sx__x { display: none; }
  .rv-sx__diz::before, .rv-sx__mostra::before {
    display: block; font-family: var(--font-data); font-size: 10px; letter-spacing: .12em;
    text-transform: uppercase; color: var(--faint); margin-bottom: 6px; }
  .rv-sx__diz::before { content: "Says"; }
  .rv-sx__mostra::before { content: "Shows"; }
  .rv-decisoes, .rv-falta { grid-template-columns: 1fr; }
}

@media (max-width: 820px) {
  .rv-campo { padding: 14px; }
  .rv-disco { width: 100%; aspect-ratio: auto; height: auto; margin: 12px 0 0;
    display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .rv-eixos, .rv-centro { display: none; }
  .rv-setor { display: flex; flex-direction: column; gap: 8px; align-items: stretch; }
  .rv-setor--manter, .rv-setor--adicionar { grid-column: span 1; }
  .rv-setor--melhorar { grid-column: 1 / -1; }
  .rv-polo { position: static; transform: none; align-self: start; }
  .rv-peca { position: static; transform: none; width: auto; display: flex; align-items: center; gap: 10px; text-align: left; }
  .rv-peca__olho { width: 56px; height: 56px; margin: 0; flex: none; }
  .rv-peca__cap { margin-top: 0; }
}
.rv-regua__rot, .rv-rot { font-family: var(--font-text); font-size: var(--fs-11); letter-spacing: .14em;
  text-transform: uppercase; color: var(--faint); display: block; }
.rv-rot em { font-style: normal; text-transform: none; letter-spacing: 0; }

.rv-corpo { display: flex; flex-direction: column; gap: 28px; min-width: 0; }
.rv-compressao { padding: 18px; background: var(--sf-base); }
.rv-compressao p { font-size: var(--fs-15); line-height: 1.55; margin: 8px 0 0; }

.rv-matriz { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; }
.rv-col { min-width: 0; display: flex; flex-direction: column; gap: 10px; }
/* o cabeçalho da coluna sobe ao topo da escada em vez de ganhar um fio embaixo */
.rv-col__topo { background: var(--sf-topo); padding: 8px 11px; }
.rv-col__topo h3 { font-size: var(--fs-18); margin: 0; display: inline; }
.rv-col__topo span { font-family: var(--font-num); font-variant-numeric: tabular-nums;
  font-size: var(--fs-12); color: var(--faint); margin-left: 7px; }
.rv-col__topo p { font-size: var(--fs-11); color: var(--faint); margin: 3px 0 0; }

/* o ponteiro de mao so em cartao que ABRE: 21 dos 31 .rv-card sao celula de matriz
   e nao tem [data-asset]. Affordance que mente e pior que affordance que falta. */
.rv-card { padding: 11px; background: var(--sf-base); position: relative;
  transition: background var(--m-dur-1) var(--m-ease); }
.rv-card[data-asset] { cursor: pointer; }
.rv-card[data-asset]:hover { background: var(--sf-alto); }
.rv-card:focus-visible { outline: 1px solid var(--ink); outline-offset: 2px; }
/* CONTESTADO era tracejado; agora é a aresta de status — mesmo vocabulário do catálogo */
.rv-card.is-contestado { padding-left: 14px; }
.rv-card.is-contestado::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0;
  width: 2px; background: var(--st-espera); }
.rv-card__topo { display: flex; align-items: baseline; justify-content: space-between; gap: 7px; }
.rv-card__topo h4 { font-size: var(--fs-13); margin: 0; line-height: 1.3; }
.rv-card__palavra { font-size: var(--fs-11); margin: 7px 0; color: var(--ink-2); }
.rv-card__palavra span { text-transform: uppercase; letter-spacing: .08em; color: var(--faint); }
.rv-card__palavra.is-fere span { color: var(--strata-residual); }
.rv-card__palavra.is-serve span { color: var(--strata-emergente); }
.rv-card__obs { font-size: var(--fs-12); line-height: 1.45; color: var(--ink-2); margin: 0; }
.rv-card__pe { display: flex; flex-wrap: wrap; gap: 5px; margin: 9px -11px -11px;
  padding: 8px 11px; background: var(--sf-baixo); }

.rv-selo, .rv-conf { font-size: var(--fs-11); background: var(--sf-baixo);
  padding: 2px 7px; color: var(--faint); white-space: nowrap; }
.rv-card__pe .rv-selo, .rv-card__pe .rv-conf { background: var(--sf-alto); }
/* "derived" e "contestado" eram tracejado; agora a tinta do texto carrega o aviso */
.rv-selo--aviso { color: var(--st-espera); }
.rv-conf--baixa { color: var(--st-espera); }
.rv-vazio { color: var(--faint); font-size: var(--fs-12); }

/* o bloco desce um degrau em vez de ganhar fio no topo */
.rv-bloco { background: var(--sf-base); padding: 14px; }
.rv-lista { list-style: none; margin: 9px -14px -14px; padding: 0; }
.rv-lista li { font-size: var(--fs-13); line-height: 1.5; padding: 9px 14px; background: var(--sf-base); }
.rv-lista li:nth-child(odd) { background: var(--sf-alto); }
.rv-lista--contra li { padding-left: 14px; }

.dw-selos { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 12px; }
.dw-palavra { font-size: var(--fs-13); margin: 0 0 14px; }
.dw-bloco { margin-top: 16px; }
.dw-bloco p { font-size: var(--fs-13); line-height: 1.55; margin: 6px 0 0; }

.rv-dossies { display: grid; grid-template-columns: repeat(auto-fill, minmax(228px, 1fr)); gap: 10px; margin-top: 10px; }


/* ---------- STROKE DE LUZ: o único stroke que o sistema permite -------------
   Só existe onde há vidro. É a espessura da lente, não um contorno desenhado. */
.inspetor::after,.drawer::after,.cmdk::after,.tip.show::after{
  content:"";position:absolute;inset:0;pointer-events:none;padding:1px;
  background:var(--stroke-vidro);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  mask-composite:exclude}
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  .inspetor,.drawer,.cmdk,.tip.show{background:var(--sf-topo)}
}

/* a pílula que abre um menu: o número vive dentro dela, tabular e recuado —
   "Players 18/18" diz o estado sem precisar de uma frase ao lado */
.pilula .n{font-family:var(--font-num);font-variant-numeric:tabular-nums;
  font-size:var(--fs-12);color:var(--faint);line-height:1}
button.pilula:not(:disabled):hover .n,.pilula[aria-expanded="true"] .n{color:inherit}
.pilula[aria-expanded="true"]{background:var(--inv-bg);color:var(--inv-ink)}

/* ---------------------------------------------------------------------------
   PRATELEIRA DE ASSETS — a matéria da marca auditada, pronta para sair da tela.
   O dado já estava colhido e não tinha onde ser PEGO: a auditoria mostrava o
   julgamento e escondia o material. Tudo aqui é clicável para copiar ou baixar.
   Canto zero, sem sombra, profundidade por tom — a amostra de cor é a ÚNICA
   superfície do sistema que carrega cor arbitrária, porque ali a cor é o dado.
   --------------------------------------------------------------------------- */
.as-prateleira{display:grid;gap:2px;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));margin-top:12px}
.as-grupo{background:var(--sf-base);padding:14px 16px 16px;display:flex;flex-direction:column;gap:10px;min-width:0}
.as-grupo__rot{font-family:var(--font-data);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--faint)}
.as-rot{font-family:var(--font-data);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);flex:none}

.as-cores{display:flex;flex-wrap:wrap;gap:4px}
.as-cor{display:flex;align-items:center;gap:7px;background:var(--sf-alto);border:0;border-radius:0;cursor:pointer;
  padding:5px 8px 5px 5px;transition:background var(--m-dur-1) var(--m-ease)}
.as-cor:hover{background:var(--sf-topo)}
.as-cor i{width:18px;height:18px;flex:none;display:block}
.as-cor code{font-family:var(--font-num);font-size:10.5px;color:var(--muted);letter-spacing:.02em}
.as-cor:hover code{color:var(--ink)}
.as-cores--neutro{opacity:.72}

.as-tipo{display:flex;align-items:baseline;gap:9px;min-width:0}
.as-face{background:none;border:0;padding:0;cursor:pointer;color:var(--ink);text-align:left;min-width:0;
  font-family:var(--font-text);font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.as-face:hover{text-decoration:underline;text-underline-offset:3px}
.as-spec{font-family:var(--font-num);font-variant-numeric:tabular-nums;font-size:10.5px;color:var(--faint);
  margin-left:auto;flex:none}

.as-arqs{display:flex;flex-direction:column;gap:2px}
.as-arq{display:flex;align-items:center;gap:9px;background:var(--sf-alto);padding:7px 10px;
  text-decoration:none;color:var(--muted);transition:background var(--m-dur-1) var(--m-ease)}
a.as-arq:hover{background:var(--sf-topo);color:var(--ink)}
.as-nome{font-family:var(--font-num);font-size:11px;margin-left:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* lacuna declarada: o slot não some, ele diz que está vazio */
.as-arq--vazio{background:var(--sf-baixo);color:var(--faint)}

.as-copiar-tudo{align-self:flex-start;margin-top:2px;background:var(--sf-alto);color:var(--muted);border:0;border-radius:0;
  cursor:pointer;padding:6px 10px;font-family:var(--font-data);font-size:10.5px;letter-spacing:.05em;
  text-transform:uppercase;transition:var(--m-dur-1) var(--m-ease)}
.as-copiar-tudo:hover{background:var(--sf-topo);color:var(--ink)}
.as-nota{font-size:11px;line-height:1.5;color:var(--faint);margin:0}
.as-nota code{font-family:var(--font-num);font-size:10.5px;color:var(--muted);background:var(--sf-baixo);
  padding:2px 6px;display:inline-block;margin-top:4px;word-break:break-all}

/* o aviso de "copiado" vira MARCA, não substituição de conteúdo: o botão de comando
   ganha a palavra depois do rótulo; a amostra de cor e a face tipográfica só mudam
   de tom, porque o conteúdo delas é o dado */
.cmd .cmd-copy.feito::after{content:" ✓";letter-spacing:0}
.as-cor.feito,.as-face.feito,.as-copiar-tudo.feito{background:var(--inv-bg);color:var(--inv-ink)}
.as-cor.feito code{color:var(--inv-ink)}


/* O SEGUNDO CARIMBO — o estrato do codigo no mercado. A view escrevia
   `class="estrato estrato--dominante"` e o CSS so tinha `.pilula.estrato`: as 26
   tarjas renderizavam como texto branco solto, indistinguivel do titulo do cartao.
   E o comentario do proprio codigo diz que este carimbo e o que impede "manter
   dominante por default". Chip de preenchimento, como manda o catalogo. */
.estrato{display:inline-flex;align-items:center;gap:5px;flex:none;
  font-family:var(--font-data);font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--faint);background:var(--sf-baixo);padding:2px 7px;white-space:nowrap}
.estrato::before{content:"";width:6px;height:6px;flex:none;background:var(--strata-indefinido)}
.estrato--residual::before{background:var(--strata-residual)}
.estrato--dominante::before{background:var(--strata-dominante)}
.estrato--emergente::before{background:var(--strata-emergente)}
.estrato--indefinido::before{background:var(--strata-indefinido)}
/* ausencia nao e classificacao: o carimbo aparece, o preenchimento nao */
.estrato--nao-medido::before,.estrato--nao-se-aplica::before{background:var(--faint)}

/* ---------- Review · A FACE DA MARCA -------------------------------------------
   A auditoria media 6.901px de home e nao mostrava um pixel dela. A janela e um
   recorte puro de CSS sobre o MESMO arquivo do /api/tela: uma requisicao, N vistas.
   A fita e a pagina inteira em escala, e cada marca e um retangulo que a evidencia
   ja media em prosa — e a unica superficie da casa onde a cor E o dado. */
.rv-face { background: var(--sf-base); padding: 14px; }
.face-grid { display: grid; grid-template-columns: minmax(0,1fr) 74px minmax(0,230px);
  gap: 14px; align-items: start; margin-top: 11px; }
.face-dobra, .face-fita { margin: 0; min-width: 0; }
.face-janela { position: relative; overflow: hidden; background: var(--sf-baixo); }
.face-janela img { display: block; width: 100%; margin: 0; }
.face-dobra figcaption, .face-fita figcaption { font-family: var(--font-data);
  font-size: 10px; letter-spacing: .08em; text-transform: uppercase;
  color: var(--faint); margin-top: 6px; }

/* a marca nao pinta por cima da tela: ela ACENDE a faixa e carimba a aresta de 2px,
   que e o mesmo vocabulario do item em estado do resto do painel */
/* A marca nao pode ter cor propria: ela cai sobre uma captura que pode ser branca
   ou preta, e --accent aponta para o branco na face escura — foi assim que as sete
   marcas ficaram invisiveis sobre a home clara da Roleo. difference INVERTE o que
   esta embaixo, entao a faixa aparece contra qualquer fundo sem inventar cor. */
.face-marca { position: absolute; left: 0; right: 0; display: block; cursor: help;
  background: #fff; mix-blend-mode: difference; opacity: .48;
  transition: opacity var(--m-dur-1) var(--m-ease); }
.face-marca:hover { opacity: .92; }

.face-cor { display: flex; flex-direction: column; gap: 9px; }
.face-barra { display: grid; grid-template-columns: 1fr; gap: 4px; }
.face-barra__rot { font-family: var(--font-data); font-size: 10px; letter-spacing: .08em;
  text-transform: uppercase; color: var(--faint); }
.face-barra__trilho { display: flex; height: 12px; background: var(--sf-baixo); }
.face-barra__n { background: var(--faint); }
/* a amostra de cor e a unica superficie isenta da lei da casa, porque nela a cor E o
   dado — o segmento cromatico leva os hexes medidos, nao um tom decorativo */
.face-barra__c { background: var(--face-cromatico, var(--accent)); }
.face-barra__val { font-family: var(--font-num); font-variant-numeric: tabular-nums;
  font-size: var(--fs-12); color: var(--ink-2); }

/* o recorte no dossie: o julgamento mostra o pedaco de tela de que ele fala */
.rv-recorte { position: relative; overflow: hidden; background: var(--sf-baixo);
  margin: 0 -11px 9px; }
.rv-recorte img { display: block; border: 0; }
.rv-recorte figcaption { position: absolute; left: 0; right: 0; bottom: 0;
  font-family: var(--font-data); font-size: 10px; letter-spacing: .06em;
  color: var(--ink); background: color-mix(in srgb, var(--sf-baixo) 84%, transparent);
  backdrop-filter: blur(4px); padding: 4px 7px; }
.rv-recorte--vazio { padding: 9px 11px; margin: 0 -11px 9px; font-size: var(--fs-11);
  color: var(--faint); background: var(--sf-baixo); }

@media (max-width: 900px) {
  .face-grid { grid-template-columns: minmax(0,1fr) 56px; }
  .face-cor { grid-column: 1 / -1; }
}

/* ---------- Review · A MATRIZ COMO TRILHO ---------------------------------------
   Vinte e um cartoes com o `porque` inteiro (ate 739 caracteres cada) ocupavam
   4.078px — 43% da altura da pagina e 36% do texto, a CONCLUSAO em tamanho real
   antes da evidencia. A linha carrega nome + orfa + estrato; o resto foi para a
   gaveta. O que some da tela nao some do painel: muda de andar. */
.mx-trilho { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.mx-itens { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; }
.mx-item { position: relative; background: var(--sf-base); padding: 9px 11px; cursor: pointer;
  display: flex; flex-direction: column; gap: 6px; transition: background var(--m-dur-1) var(--m-ease); }
.mx-item:hover { background: var(--sf-alto); }
.mx-item:focus-visible { outline: 1px solid var(--ink); outline-offset: 2px; }
/* risco de manter leva a aresta de 2px, o mesmo vocabulario de estado do resto do painel */
.mx-item.tem-risco { padding-left: 14px; }
.mx-item.tem-risco::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0;
  width: 2px; background: var(--st-espera); }
.mx-nome { font-size: var(--fs-13); line-height: 1.35; color: var(--ink);
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.mx-selos { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; }
.mx-orfa { font-family: var(--font-data); font-size: 10px; letter-spacing: .08em;
  text-transform: uppercase; font-style: normal; color: var(--strata-residual);
  background: var(--sf-baixo); padding: 2px 6px; cursor: help; }
.mx-selos .estrato { font-style: normal; }

/* ==== A RÉGUA DA FRASE (_meta/escrita.md) ==========================================
   Todo julgamento é frase (Construct, grande) + porquê (Tekst, pequeno). O layout
   é blocado e usa a tela inteira: a frase ocupa a largura, o porquê senta ao lado ou
   abaixo em coluna estreita. Texto "proposto" carrega a pílula e o botão de confirmar;
   clicar no lápis abre a edição no lugar — a mão do Felipe é o gate. */
.hero{display:grid;grid-template-columns:minmax(0,2fr) minmax(280px,1fr);gap:18px 40px;align-items:end;
  background:var(--sf-base);padding:26px 28px 24px;margin:0 0 22px}
.hero .t-frase{font-family:var(--font-display);font-weight:400;font-size:clamp(30px,3.6vw,54px);line-height:1.08;letter-spacing:-.015em;margin:0}
.hero .t-frase.vazia{color:var(--faint);font-size:clamp(22px,2.4vw,32px)}
.hero .t-porque{font-family:var(--font-text);font-size:14px;line-height:1.5;color:var(--muted);margin:0}
.hero .t-porque:empty::before{content:"why — still to write";color:var(--faint)}
.hero .t-meta,.hero .eyebrow{grid-column:1/-1}
@media (max-width:900px){.hero{grid-template-columns:1fr}}

/* texto: o par frase/porquê como componente, em qualquer tamanho */
.tx{position:relative;min-width:0}
.tx .t-frase{font-family:var(--font-display);font-weight:400;line-height:1.15;letter-spacing:-.01em;margin:0}
.tx .t-porque{font-family:var(--font-text);font-size:13px;line-height:1.5;color:var(--muted);margin:6px 0 0}
.tx .t-veredito{font-family:var(--font-display);font-weight:400;line-height:1.15;letter-spacing:-.01em;margin:6px 0 0;color:var(--muted)}
.t-meta{display:flex;align-items:center;gap:8px;margin-top:10px;min-height:20px}
.t-meta .pill.proposto{color:var(--st-espera);background:var(--sf-baixo);margin-left:0}
.t-meta .pill.confirmado{color:var(--muted);box-shadow:inset 0 0 0 1px var(--line)}
.t-meta .t-quem{font-family:var(--font-text);font-size:10.5px;color:var(--faint)}
.t-btn{font-family:var(--font-display);font-size:14px;letter-spacing:.02em;text-transform:uppercase;background:transparent;
  color:var(--muted);border:0;padding:3px 8px;cursor:pointer;line-height:1}
.t-btn:hover{color:var(--ink);background:var(--sf-alto)}
.t-btn.ok{color:var(--ink)}
.t-cont{font-family:var(--font-text);font-size:10.5px;color:var(--faint);font-variant-numeric:tabular-nums;margin-left:auto}
.t-cont.estourou{color:var(--warn)}
.tx.editando .t-frase,.tx.editando .t-porque,.tx.editando .t-veredito,.hero.editando .t-frase,.hero.editando .t-porque{
  outline:1px dashed var(--line);outline-offset:6px;background:var(--sf-alto)}
[contenteditable]:focus{outline:1px solid var(--ink);outline-offset:6px}
.t-erro{font-family:var(--font-text);font-size:11px;color:var(--warn);margin-top:6px}

/* RDE — leitura por estrato: lead + porquê, dentro da coluna */
.rde-leitura{padding:0 14px;display:flex;flex-direction:column}
.rde-leitura .t-frase{font-size:19px}
.rde-leitura.vazia{color:var(--faint);font-family:var(--font-text);font-size:13px}

/* RDE — a prancha da síntese: constatação e veredito à esquerda, oportunidade com
   evidências à direita. Tela inteira; nada de max-width:60ch. */
.rde-sintese{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:0;background:var(--sf-base);max-width:none}
.rde-sintese>.tx{padding:26px 28px}
.rde-sintese .t-frase{font-size:clamp(24px,2.4vw,36px)}
.rde-sintese .t-veredito{font-size:clamp(20px,1.9vw,28px)}
.rde-oport{margin:0;padding:26px 28px;background:var(--sf-alto);position:relative}
.rde-oport::before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--st-espera)}
.rde-oport .t-frase{font-size:clamp(22px,2vw,30px)}
.rde-oport p{margin:6px 0 0}
.evid{list-style:none;margin:18px 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;counter-reset:ev}
.evid li{background:var(--sf-base);padding:12px 14px;display:flex;flex-direction:column;gap:6px;counter-increment:ev}
.evid li::before{content:counter(ev,decimal-leading-zero);font-family:var(--font-text);font-size:10px;letter-spacing:.1em;color:var(--faint)}
.evid li b{font-family:var(--font-display);font-weight:400;font-size:18px;line-height:1.15}
.evid li span{font-family:var(--font-text);font-size:12px;line-height:1.45;color:var(--muted)}
@media (max-width:980px){.rde-sintese{grid-template-columns:1fr}}

/* RDE — contestações: grade, não lista */
.rde-contesta{list-style:none;padding:0;margin:0;max-width:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px}
.rde-contesta li{background:var(--sf-base);padding:16px 18px;display:flex;flex-direction:column}
.rde-contesta li .t-frase{font-size:18px}
.rde-contesta li::marker{content:""}

/* ficha do player: posicionamento e público na gramática */
.i-campo .tx .t-frase{font-size:18px}

/* botões em Construct (Felipe, 12/09/2026): título e botão são Construct; texto longo e
   pequeno é Tekst. O botão sobe para 14px para o corte display segurar. */
.btn,.pilula,.ig-mais,.ph-mais,.nav button{font-family:var(--font-display)}
.btn{font-size:14px;letter-spacing:.02em}
.pilula{font-size:12.5px}
/* a linha de meta não quebra em três: autor e data cabem ou são cortados */
.t-meta{flex-wrap:nowrap}
.t-meta .t-quem{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:0 1 auto}
.t-meta .t-btn{flex:none}
