.solid-commandbar{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:12px 0;border-bottom:1px solid var(--line)}.solid-commandbar span{font-size:11px;color:var(--ink-soft);margin:0 5px 0 12px}.solid-commandbar button,.solid-status button,.solid-viewbar button,.solid-tree button,.solid-editor button:not(.btn){background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:5px;padding:8px 10px;cursor:pointer;font:inherit;font-size:12px}
.solid-commandbar button[aria-pressed=true]{background:var(--accent-bg);border-color:var(--accent-d)}
/* Aviso antes de limpar: fica no fluxo, empurrando a área de trabalho para
   baixo — some da tela o que vai ser descartado é exatamente o que se quer
   evitar num aviso destrutivo. */
.solid-confirm{border:1px solid var(--accent-d);border-radius:8px;background:var(--accent-bg);padding:12px 14px;margin:10px 0}
.solid-confirm p{margin:0 0 4px;font-size:13px;line-height:1.55;color:var(--ink)}
.solid-confirm .cad-mini-actions{padding:6px 0 0}
.solid-confirm button:not(.btn){background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:5px;padding:8px 12px;cursor:pointer;font:inherit;font-size:12px}
.solid-status{display:flex;align-items:center;gap:12px;min-height:52px;font-size:13px}.solid-status p{flex:1;margin:10px 0}.solid-status .cad-error{color:var(--accent-d);font-weight:700}.solid-status span{color:var(--accent-d)}
.solid-layout{display:grid;grid-template-columns:205px 245px minmax(0,1fr);border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--surface)}.solid-layout h3{font-size:15px;margin:12px 0}.solid-tree,.solid-editor{min-width:0;padding:15px;background:var(--surface-2);border-right:1px solid var(--line)}.solid-tree ol{list-style:none;padding:0;margin:15px 0}.solid-tree li{margin:5px 0}.solid-tree button{width:100%;text-align:left;overflow-wrap:anywhere}.solid-tree button.selected{background:var(--accent-bg);border-color:var(--accent-d)}.solid-layout label{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--ink-soft);margin-bottom:12px}.solid-layout input,.solid-layout select,.solid-layout textarea{width:100%;min-width:0;box-sizing:border-box;font-family:var(--mono,monospace)}.solid-editor>.btn{width:100%;margin-top:14px}.solid-editor .cad-mini-actions{padding:10px 0}.solid-canvas{min-width:0;padding:15px}.solid-viewbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.solid-viewbar span{font-size:11px;color:var(--accent-d)}
/* Pré-visualização: o aviso acompanha o 3D, não o formulário — é ali que a
   mudança está sendo mostrada sem ter sido aplicada. */
/* O aviso de pre-visualizacao NUNCA muda a altura da barra. Ele fica acima
   do 3D: aparecer, sumir ou trocar para um texto mais longo empurrava o
   canvas alguns pixels -- e o 3D saltava sob o cursor a cada tecla
   digitada. Linha propria de altura fixa, com reticencias no que nao
   couber, e escondido por VISIBILIDADE, que nao tira espaco do fluxo. */
.solid-preview{flex:1 0 100%;color:var(--ink-soft);font-size:11px;min-height:1.35em;line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.solid-preview[hidden]{display:block;visibility:hidden}#solidViewer{height:450px;min-width:0}#solidSketchWrap{float:right;width:180px;border:1px solid var(--line);border-radius:6px;padding:8px;margin:12px 0 8px 10px;position:relative;z-index:1;background:var(--surface)}/* `none` para o navegador não roubar o gesto de dois dedos: a pinça do
   esboço é tratada aqui, e com `manipulation` o zoom da PÁGINA entrava no
   lugar dela. */
#solidSketch{display:block;width:100%;height:170px;touch-action:none;color:var(--ink-soft)}#solidSketchWrap .hint{font-size:10px}.solid-stats{font-family:var(--mono,monospace);font-size:12px;padding:12px 0;border-block:1px solid var(--line)}.solid-compat{font-size:12px;margin:15px 0;color:var(--ink-soft)}.solid-compat summary{cursor:pointer}#solidSaved{font-size:11px;color:var(--ink-soft)}#solidWorkspace button:disabled{opacity:.45;cursor:default}#solidWorkspace button:focus-visible{outline:2px solid var(--accent-d);outline-offset:2px}
@media(max-width:1150px){.solid-layout{grid-template-columns:180px 220px minmax(0,1fr)}#solidSketchWrap{float:none;width:auto;max-width:none}#solidSketch{height:200px}}
@media(max-width:850px){.solid-layout{grid-template-columns:200px minmax(0,1fr)}.solid-tree{grid-column:1/-1;border-bottom:1px solid var(--line)}.solid-tree ol{display:flex;flex-wrap:wrap;gap:6px}.solid-tree label{max-width:350px}.solid-tree .hint{margin:4px 0}}
@media(max-width:560px){.solid-layout{display:block}.solid-editor{border-bottom:1px solid var(--line)}.solid-canvas{padding:10px}.solid-status{flex-wrap:wrap;gap:5px;padding:8px 0}.solid-status p{flex-basis:100%}.solid-commandbar span{margin-left:0}.cad-heading{align-items:flex-start;flex-direction:column;gap:4px}}
#solidModelViews{display:grid;grid-template-columns:minmax(0,1fr) 180px;gap:10px;margin-top:12px}#solidSketchWrap{float:none;grid-column:2;grid-row:1;align-self:start;box-sizing:border-box;width:100%;margin:0}.solid-viewport{grid-column:1;grid-row:1}#solidViewer{overflow:hidden;border-radius:6px;border:1px solid var(--line)}#solidViewer canvas{display:block;width:100%;height:100%}#solidModelViews>.cad-mini-actions,#solidModelViews>.hint{grid-column:1/-1;margin:0}.solid-layout .hint{font-size:11px;line-height:1.5;color:var(--ink-soft)}.solid-layout textarea,#solidName{background:var(--bg);border:1px solid var(--line-2);border-radius:6px;padding:9px;color:var(--ink)}
@media(max-width:1200px){#solidModelViews{grid-template-columns:minmax(0,1fr)}#solidSketchWrap{grid-column:1;grid-row:1}#solidSketch{height:190px}.solid-viewport{grid-column:1;grid-row:2}#solidSketchWrap h3{margin:3px 0}}

/* A drafting surface with the same cream/terracotta palette as the workshop. */
#solidSketchTools,.sketch-help{display:none}
#solidSketch{background:var(--bg);touch-action:none;border-radius:5px;outline-offset:2px}
#solidSketch path,#solidSketch circle,#solidSketch rect,#solidSketch polygon,#solidSketch polyline,#solidSketch line{vector-effect:non-scaling-stroke}
#solidSketch .sketch-grid{fill:none;stroke:var(--line);stroke-width:.6;opacity:.4}
#solidSketch .sketch-axis{fill:none;stroke:var(--ink-soft);stroke-width:1;stroke-dasharray:7 4}
/* Linha de centro (traço-ponto), como em desenho técnico: é o eixo do giro. */
#solidSketch .sketch-revolve-axis{fill:none;stroke:var(--accent-d);stroke-width:1.6;stroke-dasharray:12 3 2 3}
#solidSketch .sketch-contour{fill:var(--accent);fill-opacity:.035;stroke:var(--accent-d);stroke-width:1.8}
/* B4 — FACE × ARESTAS. Cedido o traço às entidades, o contorno fica só com o
   preenchimento: ele deixou de ser "os lados" e é a REGIÃO. Dois contornos
   visíveis sobrepostos seria o pior dos mundos, então a cessão é exclusiva. */
#solidSketch .sketch-contour.so-face{stroke:none}
/* O contorno que uma ferramenta de traçado vai SUBSTITUIR: continua à vista
   como referência, mas apagado — e é ele que deixou de imantar. */
/* ── B3: UM NÓ POR ENTIDADE ───────────────────────────────────────────
   Toda entidade do documento tem nó próprio, com o id dela. A ESCOLHA é
   geométrica (distância em pixel, no editor), então estes nós não precisam
   receber ponteiro — e não devem: um <line> largo o bastante para ser
   clicável engoliria o clique destinado à cota ou à relação que passa por
   cima dele.

   ── B4: e agora é a ENTIDADE que tem o traço ─────────────────────────────
   O contorno cedeu o stroke e ficou com o FILL: ele é a FACE. Cada entidade
   pinta a própria aresta, na cor do estado PARAMÉTRICO dela.

   A distinção NÃO é só de matiz. Subdefinido é traço fino, definido é traço
   cheio, conflitante é o mais grosso: quem não separa azul de cinza continua
   lendo a diferença pela espessura. (É a mesma regra que as alças já seguem,
   distinguindo livre de definido pelo PREENCHIMENTO e não só pela cor.) */
#solidSketch .sketch-entidade{fill:none;pointer-events:none;stroke-linecap:round}
#solidSketch .sketch-entidade.sub-definido{stroke:var(--sketch-sub);stroke-width:1.8}
#solidSketch .sketch-entidade.bem-definido{stroke:var(--sketch-def);stroke-width:2.4}
#solidSketch .sketch-entidade.conflitante{stroke:var(--sketch-conflito);stroke-width:3}
/* Conflito é um SEGUNDO eixo, por cima da definição: o traço continua azul
   (subdefinido) ou branco (definido) e ganha uma borda vermelha por baixo.
   Pintar o traço de vermelho escondia a definição — com um conflito em
   qualquer relação o desenho todo saía da mesma cor. */
/* A linha escolhida como EIXO da revolução: traço-ponto, a convenção da linha
   de centro — é ela que diz em torno de quê o perfil gira. */
#solidSketch .sketch-entidade.eixo-giro{stroke:var(--accent);stroke-dasharray:10 3 2 3;stroke-width:2}
/* Arestas da FACE de suporte: referência, não geometria — tracejado fino e
   apagado, sem receber ponteiro. */
#solidSketch .sketch-referencia{fill:none;stroke:var(--ink-soft);stroke-width:1.2;stroke-dasharray:6 4;opacity:.8;pointer-events:stroke}
/* Entidade CONVERTIDA que perdeu a aresta da face: âmbar tracejado, a mesma
   cor do "sem alvo" das relações — é o mesmo problema (promessa sem endereço). */
#solidSketch .sketch-entidade.proj-orfa{stroke:var(--sketch-dangling)!important;stroke-dasharray:5 3}
#solidSketch .sketch-conflito-fundo{stroke:var(--sketch-conflito);stroke-width:7;stroke-linecap:round;pointer-events:none;vector-effect:non-scaling-stroke}
#solidSketch .sketch-entidade.indeterminado{stroke:var(--ink-soft);stroke-width:1.6}
/* FORA DO PERFIL é outro eixo, e ele sobrevive à cor: mais fino e mais
   apagado em qualquer estado. Vem DEPOIS das cores de propósito — mesma
   especificidade, e é a espessura de fora do perfil que tem de vencer. */
#solidSketch .sketch-entidade.no-perfil{stroke-width:1.3;opacity:.7}
/* Contorno com ACABAMENTO DE CANTO não cede o traço: ele vira um path com
   arcos, e a entidade é um segmento reto que não acompanha a curva. Ali a
   entidade volta a ser só identidade, como na B3 — e o estado fica com a
   barra, que é menos do que a B4 promete, mas é verdade. */
#solidSketch .sketch-entidade.sem-traco{stroke:none}
/* 🔴 SELEÇÃO e HOVER são HALO POR BAIXO, nunca troca de cor da entidade.
   Enquanto pintavam o `stroke` dela, escolher uma linha APAGAVA o estado
   paramétrico — e voltar ao azul ao desselecionar era sorte, não regra.
   O terracota da marca é o ESTADO ATIVO aqui dentro, como no resto do CAD. */
#solidSketch .sketch-realce{fill:none;pointer-events:none;stroke:var(--sketch-halo);stroke-linecap:round}
#solidSketch .sketch-realce.hover{stroke-width:7;opacity:.32}
#solidSketch .sketch-realce.selected{stroke-width:9;opacity:.55}
#solidSketch .sketch-window{fill:var(--sketch-sub);fill-opacity:.08;stroke:var(--sketch-sub);stroke-width:1;stroke-dasharray:5 3;pointer-events:none}
#solidSketch .sketch-preview{fill:none;stroke:var(--ink);stroke-width:2;stroke-dasharray:5 3}
#solidSketch .sketch-point,#solidSketch .sketch-origin{fill:var(--accent-d)}
#solidSketch .sketch-handle{fill:var(--surface);stroke:var(--accent-d);stroke-width:1.5;cursor:move}
#solidSketch .sketch-handle.selected{fill:var(--accent-d);stroke:var(--ink)}
/* LIVRE × DEFINIDO. Vazio com contorno de acento = ainda pode se mexer; cheio
   e escuro = preso pelo que o esboço promete. A distinção é de PREENCHIMENTO,
   não só de cor: quem não distingue matiz continua vendo a diferença. */
#solidSketch .sketch-handle.livre{fill:var(--surface);stroke:var(--accent-d);stroke-width:1.5}
#solidSketch .sketch-handle.definido{fill:var(--ink);stroke:var(--ink)}
#solidSketch .sketch-handle.selected{fill:var(--accent-d);stroke:var(--ink)}
/* A relação da entidade marcada sobe e se destaca; a redundante se anuncia. */
.sketch-rel-lista li.da-entidade>button{border-color:var(--accent-d);font-weight:600}
.sketch-rel-lista .redundante{font-size:.85em;opacity:.75;font-style:italic}
/* B4 — a relação POR ATENDER: promessa quebrada pela geometria que está na
   tela. No canvas ela divide o VERMELHO com a redundante (as duas dizem "há
   algo errado com o que este lado promete"); aqui na lista ela se separa, com
   o peso da cor e a palavra própria — é por este painel que ela sai. */
.sketch-rel-lista li.conflitante>button{border-color:var(--sketch-conflito);color:var(--sketch-conflito);font-weight:600}
/* SOBREDEFINIDA divide o vermelho com a conflitante no canvas, e guarda a
   palavra dela: "redundante" não é promessa quebrada — é promessa que não
   acrescenta posto nenhum, e cuja remoção não muda a geometria. A borda marca,
   sem o peso da outra: o canvas diz ONDE, a lista diz O QUÊ. */
.sketch-rel-lista li.sobredefinida>button{border-color:var(--sketch-conflito)}
.sketch-rel-lista .conflito{font-size:.85em;font-weight:700;text-transform:uppercase;letter-spacing:.04em}
/* DANGLING não é "por atender": é promessa que perdeu o ENDEREÇO. Cor de erro
   própria (âmbar) porque a correção é outra — uma pede geometria, a outra pede
   exclusão —, e o botão fica fora do ar porque não há alvo para selecionar. */
.sketch-rel-lista li.dangling>button{border-color:var(--sketch-dangling);color:var(--sketch-dangling);font-style:italic}
.sketch-rel-lista .dangling{font-size:.85em;font-weight:700;text-transform:uppercase;letter-spacing:.04em}
#solidSketch text{fill:var(--ink);font-family:var(--mono);pointer-events:none}
/* Cotas: linha de cota, linhas de extensão e setas, como em desenho técnico.
   O traço é fino de propósito — a cota acompanha o esboço, não compete com ele. */
#solidSketch .sketch-dim-line{fill:none;stroke:var(--accent-d);stroke-width:1}
#solidSketch .sketch-dim-ext{fill:none;stroke:var(--accent-d);stroke-width:.7;opacity:.65}
#solidSketch .sketch-dim-arrow{fill:var(--accent-d);stroke:none}
#solidSketch .sketch-dim-hit{fill:none;stroke:transparent;stroke-width:10;cursor:pointer}
/* A PRÉVIA da cota: mesma geometria, mesmo renderizador, traço mais leve e
   tracejado — ela mostra o que o clique VAI criar, e não pode ser confundida
   com o que já está prometido. Não recebe ponteiro: não é alvo. */
#solidSketch .sketch-dim-line.fantasma,#solidSketch .sketch-dim-ext.fantasma{opacity:.55;stroke-dasharray:5 3;pointer-events:none}
#solidSketch text.sketch-dim-text.fantasma{opacity:.7;pointer-events:none}
#solidSketch .sketch-dim-mark{fill:none;stroke:var(--ink);stroke-width:3;pointer-events:none}
#solidSketch text.sketch-dim-text{fill:var(--accent-d);pointer-events:auto;cursor:pointer}
#solidSketch text.sketch-dim-text.selected{fill:var(--ink);font-weight:700}
.sketch-inline-dim{position:absolute;z-index:8;box-sizing:border-box;max-width:calc(100% - 12px);padding:8px 10px;background:var(--surface);color:var(--ink);border:1px solid var(--accent-d);border-radius:5px;box-shadow:0 3px 12px #0002}
.sketch-inline-dim[hidden]{display:none}
#solidWorkspace .sketch-inline-dim label{display:flex;flex-direction:row;align-items:center;gap:6px;margin:0;font-size:11px}
#solidWorkspace .sketch-inline-dim input{width:88px;min-height:30px;font:14px var(--mono);padding:4px 6px}
.sketch-inline-dim small{display:block;margin-top:4px;font-size:10px;color:var(--ink-soft)}
.sketch-inline-dim [data-inline-error]{display:block;max-width:210px;font-size:11px;color:var(--sketch-conflito)}
/* MARCA DA IMANTAÇÃO — o ponto salta para o alvo, e a marca diz PARA ONDE e
   POR QUÊ. Sem ela o salto parece defeito. Forma por tipo, na convenção do
   CAD: quadrado na ponta, triângulo no meio, x na interseção, círculo no
   centro, losango sobre o lado. Nada recebe ponteiro: é aviso, não alvo. */
#solidSketch .sketch-snap{fill:none;stroke:var(--accent-d);stroke-width:2;pointer-events:none}
#solidSketch .sketch-snap-guia{fill:none;stroke:var(--accent-d);stroke-width:1;stroke-dasharray:6 4;opacity:.7;pointer-events:none}
#solidSketch .sketch-origin-cross{fill:none;stroke:var(--accent-d);stroke-width:1.2;pointer-events:none}
#solidSketch text.sketch-snap-label{fill:var(--accent-d);font-family:var(--sans);font-weight:600}
/* INFERÊNCIA — o glifo é o MESMO da relação que vai nascer (H, V, ∥, ⊥): dois
   vocabulários para a mesma ideia ensinariam o usuário a desconfiar dos dois.
   O lado de referência do ∥/⊥ é realçado — é ele que responde "a QUEM". */
#solidSketch text.sketch-inferencia{fill:var(--accent-d);font-family:var(--sans);font-weight:700;pointer-events:none}
#solidSketch .sketch-inferencia-ref{fill:none;stroke:var(--accent-d);stroke-width:3;opacity:.45;pointer-events:none}
/* ═══ Disposição das ferramentas ═══════════════════════════════════════════
   Pedido do usuário: "revise todo o layout... melhorar a aparência e a
   disposição dos recursos... garanta que esse app CAD seja responsivo e
   simples assim como é a usabilidade do SolidWorks".

   O problema medido não era falta de recurso — eram ~60 botões do MESMO
   tamanho, do MESMO peso, em fileiras sem hierarquia: a barra de construir,
   a de acabamento e a de transformar liam como uma parede só. O que separa
   um CAD legível de uma parede de botões é agrupamento e ícone, não menos
   comando. Então:

     1. o rótulo do grupo vira EYEBROW com divisória, e o grupo passa a ser
        uma unidade visível (Construir | Acabamento | Transformar);
     2. cada botão ganha ícone à esquerda do texto — o mesmo bloco em todos,
        ver cad_icons.js;
     3. em tela estreita o TEXTO é recortado e sobra o ícone, com dica ao
        pousar. Recortado, não `display:none`: o nome acessível sobrevive.

   A paleta não se mexe (regra do projeto): o ganho vem de ritmo e ícone. */
#solidWorkspace button{display:inline-flex;align-items:center;gap:6px;line-height:1.2}
#solidWorkspace .cad-ico{flex:none;display:block;opacity:.88}
#solidWorkspace button[aria-pressed=true] .cad-ico,#solidWorkspace button:hover .cad-ico{opacity:1}
#solidWorkspace button:disabled .cad-ico{opacity:.5}
.cad-rotulo{white-space:nowrap}
/* O rótulo do grupo é uma etiqueta, não um botão pálido: caixa alta, miúdo,
   com a divisória à esquerda separando um grupo do anterior. */
/* `:not(.hint)` NAO e precaucao: `#solidCutInfo` e `#solidSheetZoomInfo` sao
   spans irmaos dos rotulos, e sem o filtro eles viravam etiqueta de grupo --
   caixa alta e com divisoria. O texto que diz ONDE o plano de corte esta
   passou a gritar "CORTE EM Y = 0 MM". Quem denunciou foi o teste de exibicao,
   que le o texto RENDERIZADO (`inner_text`), onde `text-transform` conta;
   `textContent` nao teria acusado nada. Rotulo de grupo nao tem classe; dica
   tem. */
.solid-commandbar>span:not(.hint),.solid-views>span:not(.hint),#solidSheetTools>span:not(.hint){
  font-size:10px;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-soft);
  margin:0 2px 0 10px;padding-left:12px;border-left:1px solid var(--line-2);align-self:center}
.solid-commandbar>span:not(.hint):first-child,.solid-views>span:not(.hint):first-child,#solidSheetTools>span:not(.hint):first-child{
  margin-left:0;padding-left:0;border-left:0}
/* Esboço · Modelo · Prancha são EXCLUSIVOS — um seletor segmentado diz isso
   de olhar, e é o gesto que o resto do app já usa (.seg). */
#solidSketchButton,#solidModelButton,#solidSheetButton{border-radius:0;margin-left:-1px}
#solidSketchButton{border-radius:6px 0 0 6px;margin-left:0}
#solidSheetButton{border-radius:0 6px 6px 0;margin-right:10px}
#solidModelButton[aria-pressed=true],#solidSheetButton[aria-pressed=true]{
  background:var(--accent-bg);border-color:var(--accent-d);z-index:1}
.solid-views{align-items:center}
@media(max-width:1100px){
  /* Só o ícone: o rótulo é RECORTADO, e continua sendo o nome acessível do
     botão (leitor de tela e teste continuam achando). `display:none` o
     apagaria da árvore de acessibilidade — não é a mesma coisa. */
  .solid-views .cad-rotulo,#solidSheetTools .cad-rotulo{
    position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
    clip-path:inset(50%);white-space:nowrap;border:0}
  .solid-views button,#solidSheetTools button{padding:8px;gap:0}
}
@media(max-width:760px){
  .solid-commandbar .cad-rotulo{
    position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
    clip-path:inset(50%);white-space:nowrap;border:0}
  .solid-commandbar button{padding:9px;gap:0;min-height:38px}
  .solid-views button,#solidSheetTools button,.solid-viewbar button{min-height:38px;min-width:38px;justify-content:center}
}

/* Prancha 2D. O SVG é uma folha A4 de 297×210: na coluna estreita do painel
   ela cai para uns 4 px por milímetro e o texto da legenda vira borrão — foi
   a queixa do usuário ("expandir a tela para melhor visualização"). A folha
   passa a ter ampliação própria (a variável) dentro de um berço que rola, e
   continua respondendo ao "Ampliar área de trabalho" como todo o resto. */
#solidSheet{overflow:auto;background:var(--surface-2);border:1px solid var(--line);border-radius:8px;padding:10px;margin:14px 0}
#solidSheet svg{display:block;width:calc(100% * var(--sheet-zoom,1));min-width:300px;height:auto;background:#fff;margin:0;box-shadow:0 2px 12px rgba(0,0,0,.18);border-radius:2px}
/* Arrastar a vista é o gesto padrão; cotar é o modo, e aí o cursor muda para
   mira porque o clique passa a grudar em ponto de geometria. */
#solidSheet .sheet-vista{cursor:grab}
#solidSheet .sheet-vista:hover{opacity:.82}
#solidSheet .sheet-vista.arrastando{cursor:grabbing;opacity:.6}
#solidSheet.cotando .sheet-vista{cursor:crosshair;opacity:1}
#solidWorkspace.solid-expanded #solidSheet{max-height:none}

/* Balão de aviso do CAD. A tira do rodapé do painel continua existindo (é o
   `aria-live` e o histórico do último recado), mas ninguém a lia — relato do
   usuário, com print.

   Posição FIXA na janela, não colada ao topo do painel: medido, ancorado ao
   painel ele saía da tela (topo em −138 px) assim que a página rolava para o
   esboço, que é justamente quando o recado importa. Balão fora da tela é a
   mesma tira de antes, com mais trabalho. Fica embaixo ao centro, que é onde
   o `.toast` do app já fala — e some junto com o painel quando o CAD não está
   na tela, porque `position:fixed` dentro de um pai `display:none` não pinta.

   Cor de FUNDO e de TEXTO saem as duas de token (nunca token contra valor
   fixo — a regra do `.toast` do styles.css), e o [hidden] leva guarda
   explícita porque `display:flex` de autor vence a folha do navegador. */
.solid-canvas{position:relative}
.solid-balao{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);z-index:200;
  display:flex;align-items:flex-start;gap:10px;max-width:min(560px,92%);
  padding:12px 14px;border-radius:10px;border:1px solid var(--line-2);
  background:var(--surface);color:var(--ink);box-shadow:0 10px 30px rgba(0,0,0,.28);
  font-size:13.5px;line-height:1.45;
  /* O balao INFORMA; ele nao pode bloquear a area de trabalho. Sem isto ele
     engolia o clique na faixa de baixo da tela -- medido: arrastar uma vista
     da prancha parava de funcionar quando ela caia atras dele, e o app nao
     dava sinal nenhum. Mesma regra do `.toast` do app. O fechar volta a
     receber evento, senao nao haveria como fecha-lo. */
  pointer-events:none}
.solid-balao button{pointer-events:auto}
.solid-balao[hidden]{display:none}
.solid-balao p{margin:0;flex:1;min-width:0;overflow-wrap:anywhere}
.solid-balao-icone{flex:none;width:20px;height:20px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  background:var(--accent-bg);color:var(--accent-d);font-weight:700;font-size:13px;line-height:1}
.solid-balao button{flex:none;background:none;border:0;padding:2px 4px;cursor:pointer;
  color:var(--ink-soft);font-size:14px;line-height:1}
.solid-balao button:hover{color:var(--ink)}
/* Erro fica até ser fechado (ou até vir outro recado) e é gritado na cor de
   destaque — some sozinho seria a tira de antes, só que piscando. */
.solid-balao.erro{border-color:var(--accent-d);background:var(--accent-bg)}
.solid-balao.erro .solid-balao-icone{background:var(--accent-d);color:var(--surface)}
.solid-balao.erro p{font-weight:600}
@media(max-width:560px){.solid-balao{bottom:14px;max-width:96%;font-size:13px;padding:10px 12px}}

/* Relações geométricas. Cor DIFERENTE da cota de propósito: as duas convivem
   no mesmo desenho e dizem coisas diferentes — a cota mede, a relação promete.
   O glifo usa os tokens de tema nos dois lados (fundo E texto), nunca cor fixa
   contra token (a regra do `.toast` do styles.css). */
#solidSketch .sketch-rel{fill:transparent;stroke:none;cursor:pointer}
#solidSketch .sketch-rel.selected{fill:var(--accent-bg);stroke:var(--accent-d);stroke-width:1.6}
#solidSketch text.sketch-rel-glifo{fill:var(--ink-soft);font-weight:500;pointer-events:auto;cursor:pointer;opacity:.65;stroke:none}
#solidSketch .sketch-relation:hover .sketch-rel-glifo,
#solidSketch .sketch-relation.associated .sketch-rel-glifo,
#solidSketch .sketch-relation.selected .sketch-rel-glifo{opacity:1;fill:var(--ink);font-weight:700}
#solidSketch .sketch-relation:hover .sketch-rel,
#solidSketch .sketch-relation.selected .sketch-rel{fill:var(--accent-bg);stroke:var(--accent-d);stroke-width:1}
#solidSketch .sketch-relation.conflict .sketch-rel-glifo{fill:var(--sketch-conflito);opacity:1}
.sketch-rel-editor{align-items:flex-start}
.sketch-rel-titulo{font-size:11px;color:var(--ink-soft);align-self:center;margin-right:2px}
.sketch-rel-lista{flex:1 0 100%;list-style:none;margin:6px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:4px}
.sketch-rel-lista li{margin:0}
.sketch-rel-lista li.vazia{font-size:11px;color:var(--ink-soft);padding:4px 0}
.sketch-rel-lista button{font-size:11px;padding:4px 7px}
.sketch-rel-lista button[aria-pressed=true]{background:var(--accent-bg);border-color:var(--accent-d);font-weight:700}
.sketch-dim-editor label{flex-direction:column;align-items:flex-start;gap:2px}
.sketch-dim-editor input{width:80px;min-height:30px;padding:3px 5px;font-family:var(--mono);box-sizing:border-box}
#solidWorkspace.sketch-active #solidModelViews{grid-template-columns:minmax(0,1fr)}
#solidWorkspace.sketch-active #solidSketchWrap{grid-column:1;grid-row:1;max-width:none;padding:12px}
#solidWorkspace.sketch-active #solidSketch{height:470px;border:1px solid var(--line-2)}
#solidWorkspace.sketch-active #solidSketchTools{display:block}
#solidWorkspace.sketch-active .sketch-help{display:block;font-size:11px;color:var(--ink-soft);margin:7px 0}
#solidWorkspace.sketch-active .solid-viewport,#solidWorkspace.sketch-active #solidViewer,#solidWorkspace.sketch-active #solidModelViews>.cad-mini-actions,#solidWorkspace.sketch-active #solidModelViews>.hint,#solidWorkspace.sketch-active .solid-pick{display:none}
/* Leitura da seleção 3D: fica colada ao visualizador, como a barra de status do
   SolidWorks — é ali que se lê a medida do que está selecionado. */
#solidModelViews>.solid-pick{grid-column:1/-1;margin:0}
.solid-pick #solidPickInfo{font:12px var(--mono,monospace);color:var(--ink);margin:8px 0 0;min-height:18px;overflow-wrap:anywhere}
.solid-pick .cad-mini-actions{padding:8px 0 0}
.solid-pick button{background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:5px;padding:8px 10px;cursor:pointer;font:inherit;font-size:12px}
/* 🔴 ALTURA RESERVADA, não mínima. A barra mudava de tamanho conforme o texto
   (65 px numa ferramenta, 178 px noutra) e, como mora na fita, isso encolhia a
   área de desenho: o `fillViewport()` recalculava o viewBox e o DESENHO ANDAVA
   debaixo do cursor — o vértice gravado deixava de ser o clicado. É o mesmo
   defeito, e a mesma correção, do aviso da pré-visualização do 3D. */
#solidWorkspace.sketch-active #solidSketchHint{font-size:12px;height:34px;min-height:34px;
  line-height:1.4;overflow:hidden;margin:0}
/* 🔴 E a FITA inteira também tem altura reservada, pelo mesmo motivo. Não era
   só a frase: trocar para Relações levava as ferramentas de 86 para 142 px, e
   cada relação CRIADA acrescentava mais uma linha à lista — a área de desenho
   ia de 664 para 607 px NO MEIO DO TRABALHO, e o desenho andava junto.

   O preço são ~60 px de fita vazia nas ferramentas simples. É menos que o
   preço de um vértice gravado no lugar errado. */
#solidWorkspace.sketch-active #solidSketchTools{height:120px;overflow-y:auto}
@media(max-width:900px){#solidWorkspace.sketch-active #solidSketchTools{height:auto;overflow:visible}}
@media(max-width:900px){#solidWorkspace.sketch-active #solidSketchHint{height:50px;min-height:50px}}
.sketch-tools{display:flex;flex-wrap:wrap;align-items:center;gap:5px;margin:0 0 8px}
.sketch-tools button{padding:7px 9px;border:1px solid var(--line-2);border-radius:4px;background:var(--surface);color:var(--ink);font:12px var(--sans);cursor:pointer}
.sketch-tools button[aria-pressed=true],#solidSketchButton[aria-pressed=true]{background:var(--accent-bg);border-color:var(--accent-d);color:var(--ink)}
.sketch-tools label{display:flex;flex-direction:row;align-items:center;gap:4px;margin:0 4px;font-size:11px}
/* display de autor vence o [hidden] do navegador: o campo Lados só existe com o Polígono */
.sketch-tools label[hidden]{display:none}
.sketch-tools input[type=checkbox]{width:15px;height:15px;margin:0}
.sketch-tools select{width:60px;min-height:30px;padding:3px}
#solidWorkspace.panels-hidden .solid-tree,#solidWorkspace.panels-hidden .solid-editor{display:none}
#solidWorkspace.panels-hidden .solid-layout{grid-template-columns:minmax(0,1fr)}
body.cad-expanded{overflow:hidden}
/* ==========================================================================
   O CAD COMO APLICATIVO DE DESKTOP, não como página que contém ferramentas
   ==========================================================================
   Pedido do usuário, com prints do SolidWorks: "transformar 'uma página web
   que contém ferramentas CAD' em 'um ambiente CAD profissional de desktop
   dentro do navegador'". A anatomia é a que qualquer usuário de CAD procura
   sem pensar:

     barra de título · faixa de comandos com abas
     [ FeatureManager / PropertyManager | ÁREA GRÁFICA ]
     barra de status

   Três decisões que sustentam tudo:
   1. ALTURA FIXA. `--cad-alto` é medido em JS (o que sobra da janela abaixo do
      cabeçalho do site) e a casca é `display:flex` com `overflow:hidden`. A
      página não cresce quando um painel aparece — quem rola é o painel.
   2. A ÁREA GRÁFICA É `1fr`. Toda folga sobra para a geometria, que é o que o
      usuário veio olhar. Cada elo da corrente tem `min-height:0`, senão o flex
      se recusa a encolher e a área gráfica vaza para fora da casca.
   3. PALETA NEUTRA, só aqui dentro. O creme da marca continua no resto do app;
      dentro do CAD ele virava um ambiente marrom onde aço e ferro não leem. O
      terracota Gabriel Seal fica como cor de ESTADO ATIVO — é assim que a
      identidade sobrevive num ambiente técnico. */
#solidWorkspace{
  --painel-w:280px;
  --cad-alto:640px;
  --bg:#eceef0;--surface:#f7f8f9;--surface-2:#f1f2f4;--line:#d0d3d7;
  --ink:#222;--ink-soft:#5c6166;
  --accent:#CC785C;--accent-d:#B5634A;--accent-bg:#fbeee8;--accent-line:#e7cdc1;
  --cad-sel:#dce9f7;--cad-sel-line:#2f6fb3;
  --cad-view:linear-gradient(180deg,#fdfdfe 0%,#e4e9ef 100%);
  /* B4 — SEMÂNTICA DO ESBOÇO, e ela não é a paleta do aplicativo.
     O AZUL é subdefinido e só existe pintado dentro de #solidSketch: não
     substitui --accent, não entra em botão, em painel nem em lugar nenhum
     fora da tela de desenho. O vermelho é o único que sai do canvas, e sai
     para o painel de relações — é lá que se remove a promessa por atender. */
  --sketch-sub:#1668cc;--sketch-def:#1b2026;--sketch-conflito:#b8352b;--sketch-dangling:#9a6413;--sketch-halo:#CC785C;
  display:flex;flex-direction:column;height:var(--cad-alto);min-height:520px;
  overflow:hidden;background:var(--bg);color:var(--ink);
  border:1px solid var(--line);border-radius:8px;font-size:13px;line-height:1.35;
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]) #solidWorkspace{
    --bg:#26282b;--surface:#2f3236;--surface-2:#2a2d30;--line:#44484d;
    --ink:#e7e9ea;--ink-soft:#a3a9af;
    --accent:#E08F6F;--accent-d:#EDA688;--accent-bg:#40342e;--accent-line:#5A4438;
    --cad-sel:#31425a;--cad-sel-line:#6ea8e6;
    --cad-view:linear-gradient(180deg,#3a3e43 0%,#24272a 100%);
    --sketch-sub:#5fa8ff;--sketch-def:#eef1f3;--sketch-conflito:#ff7d70;--sketch-dangling:#e0b062;--sketch-halo:#E08F6F;
  }
}
:root[data-theme="dark"] #solidWorkspace{
  --bg:#26282b;--surface:#2f3236;--surface-2:#2a2d30;--line:#44484d;
  --ink:#e7e9ea;--ink-soft:#a3a9af;
  --accent:#E08F6F;--accent-d:#EDA688;--accent-bg:#40342e;--accent-line:#5A4438;
  --cad-sel:#31425a;--cad-sel-line:#6ea8e6;
  --cad-view:linear-gradient(180deg,#3a3e43 0%,#24272a 100%);
  --sketch-sub:#5fa8ff;--sketch-def:#eef1f3;--sketch-conflito:#ff7d70;--sketch-dangling:#e0b062;--sketch-halo:#E08F6F;
}

/* ── Barra de título: marca, menus, ações rápidas, nome da peça ──────────── */
#solidWorkspace .cad-topbar{flex:none;display:flex;align-items:center;gap:10px;
  min-height:32px;padding:0 8px;background:var(--surface);border-bottom:1px solid var(--line)}
#solidWorkspace .cad-marca{font-weight:700;font-size:12px;letter-spacing:.02em;color:var(--accent-d);white-space:nowrap}
#solidWorkspace .cad-doc{margin-left:auto;font-size:12px;color:var(--ink-soft);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:26ch}
#solidWorkspace .cad-menus{display:flex;gap:1px}
#solidWorkspace .cad-menu{position:relative}
#solidWorkspace .cad-menu-b{background:none;border:0;border-radius:4px;color:var(--ink);
  font:inherit;font-size:12px;padding:4px 9px;cursor:pointer}
#solidWorkspace .cad-menu-b:hover,#solidWorkspace .cad-menu-b[aria-expanded=true]{background:var(--cad-sel)}
#solidWorkspace .cad-menu-pop{position:absolute;top:calc(100% + 3px);left:0;z-index:40;
  min-width:220px;max-width:min(92vw,420px);display:flex;flex-direction:column;gap:1px;
  background:var(--surface);border:1px solid var(--line);border-radius:7px;padding:5px;
  box-shadow:0 10px 28px rgba(0,0,0,.22)}
#solidWorkspace .cad-menu-larga{min-width:360px}
/* Menu de contexto: mesma casca do menu do topo, so que posicionado no cursor.
   z-index acima das sobreposicoes -- ele nasce por cima de tudo, inclusive do
   painel do cilindro. */
#solidWorkspace .cad-contexto{position:fixed;top:0;left:0;z-index:60;min-width:190px}
#solidWorkspace .cad-menu-pop[hidden]{display:none}
#solidWorkspace .cad-menu-pop button{display:flex;align-items:center;gap:8px;width:100%;
  background:none;border:0;border-radius:4px;color:var(--ink);font:inherit;font-size:12.5px;
  padding:6px 8px;cursor:pointer;text-align:left}
#solidWorkspace .cad-menu-pop button:hover:not(:disabled){background:var(--cad-sel)}
#solidWorkspace .cad-menu-pop button:disabled{opacity:.45;cursor:default}
#solidWorkspace .cad-menu-pop hr{border:0;border-top:1px solid var(--line);margin:4px 2px}
#solidWorkspace .cad-menu-titulo{margin:6px 8px 2px;font-size:10.5px;letter-spacing:.09em;
  text-transform:uppercase;color:var(--ink-soft);font-weight:600}
#solidWorkspace .cad-menu-pop p{margin:4px 8px;font-size:11.5px;color:var(--ink-soft)}
#solidWorkspace .cad-quick,#solidWorkspace .cad-janela{display:flex;gap:2px;padding:0;flex-wrap:nowrap}
#solidWorkspace .cad-janela{margin-left:6px}
#solidWorkspace .cad-quick button,#solidWorkspace .cad-janela button{background:none;border:1px solid transparent;
  border-radius:4px;color:var(--ink);padding:4px;min-height:26px;min-width:26px;
  display:flex;align-items:center;justify-content:center;cursor:pointer;font:inherit}
#solidWorkspace .cad-quick button:hover:not(:disabled),#solidWorkspace .cad-janela button:hover:not(:disabled){
  background:var(--cad-sel);border-color:var(--cad-sel-line)}
#solidWorkspace .cad-quick button:disabled,#solidWorkspace .cad-janela button:disabled{opacity:.4;cursor:default}
/* Na barra de título mandam os ícones: rótulo RECORTADO, nunca removido —
   `display:none` apagaria o nome acessível do botão. */
#solidWorkspace .cad-quick .cad-rotulo,#solidWorkspace .cad-janela .cad-rotulo,
#solidWorkspace .solid-heads .cad-rotulo{position:absolute;width:1px;height:1px;padding:0;
  margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}

/* ── Faixa de comandos (CommandManager): abas + grupos rotulados ─────────── */
#solidWorkspace .cad-ribbon{flex:none;background:var(--surface-2);border-bottom:1px solid var(--line)}
#solidWorkspace .cad-ribbon-abas{display:flex;gap:2px;padding:2px 8px 0;overflow-x:auto}
#solidWorkspace .cad-ribbon-abas button{flex:none;background:none;border:1px solid transparent;
  border-bottom:0;border-radius:6px 6px 0 0;color:var(--ink-soft);font:inherit;font-size:12px;
  font-weight:600;padding:4px 14px;cursor:pointer}
#solidWorkspace .cad-ribbon-abas button[aria-selected=true]{background:var(--surface);
  border-color:var(--line);color:var(--ink)}
#solidWorkspace .cad-ribbon-paineis{background:var(--surface);border-top:1px solid var(--line);
  margin-top:-1px}
#solidWorkspace .cad-fita{display:none}
#solidWorkspace .cad-fita:not([hidden]){display:flex;align-items:stretch;gap:0;
  padding:3px 8px;overflow-x:auto;min-height:62px}
#solidWorkspace .cad-fita>#solidSheetTools{display:flex;align-items:stretch}
#solidWorkspace .cad-grupo{display:flex;flex-direction:column;justify-content:space-between;
  padding:0 6px;border-right:1px solid var(--line)}
#solidWorkspace .cad-grupo:last-child{border-right:0}
/* Esticar em vez de alinhar no topo: um rótulo de três linhas
   ("Esboço / recurso") deixava aquele botão mais alto que os vizinhos e a
   fileira saía desigual. Todos ficam da altura do mais alto. */
#solidWorkspace .cad-grupo-itens{display:flex;align-items:stretch;gap:3px;padding:0;flex-wrap:nowrap}
/* Rótulo do GRUPO embaixo, como no CommandManager: diz do que é a fileira sem
   custar uma linha inteira de texto por botão. */
#solidWorkspace .cad-grupo>span:not(.hint){display:block;text-align:center;font-size:10px;
  letter-spacing:.07em;text-transform:uppercase;color:var(--ink-soft);font-weight:600;padding-top:2px}
/* Botão de comando: ícone grande em cima, legenda pequena embaixo. */
#solidWorkspace .cad-fita .cad-grupo-itens button{flex:none;display:flex;flex-direction:column;
  align-items:center;justify-content:flex-start;gap:2px;width:52px;min-height:46px;padding:4px 1px;
  background:none;border:1px solid transparent;border-radius:5px;color:var(--ink);
  font:inherit;font-size:10.5px;line-height:1.15;text-align:center;cursor:pointer}
#solidWorkspace .cad-fita .cad-grupo-itens button .cad-ico{width:20px;height:20px}
#solidWorkspace .cad-fita .cad-grupo-itens button:hover:not(:disabled){background:var(--cad-sel);border-color:var(--cad-sel-line)}
#solidWorkspace .cad-fita .cad-grupo-itens button[aria-pressed=true]{background:var(--accent-bg);border-color:var(--accent-line);font-weight:600}
#solidWorkspace .cad-fita .cad-grupo-itens button:disabled{opacity:.4;cursor:default}
/* o display:flex acima vence o [hidden] do navegador: botão contextual da faixa
   (Converter para sólido) só some com esta guarda */
#solidWorkspace .cad-fita .cad-grupo-itens button[hidden]{display:none}
/* Rótulo do comando em DUAS linhas em vez de cortado: "Linha / co…" e "Cota
   inteli…" não dizem qual comando é — e o ícone sozinho, para quem está
   aprendendo, também não. Duas linhas cabem e o comando fica legível. */
#solidWorkspace .cad-fita .cad-rotulo{display:-webkit-box;-webkit-line-clamp:3;
  -webkit-box-orient:vertical;line-clamp:3;max-width:52px;overflow:hidden;white-space:normal;
  hyphens:auto}
#solidWorkspace .cad-fita .hint{align-self:center;margin:0 0 0 8px;font-size:11px;max-width:34ch}
#solidWorkspace .cad-fita input[type=range]{align-self:center;width:120px}
/* A barra do esboço é do editor de esboço, e vem em fileiras: a primeira são
   as FERRAMENTAS (ícone grande), as demais são ações e ajustes — compactas,
   senão a faixa dobrava de altura só na aba Esboço (medido: 160 px). */
#solidWorkspace #solidSketchTools{flex-direction:column;gap:2px}
#solidWorkspace #solidSketchTools .sketch-tools{display:flex;flex-wrap:wrap;gap:3px;
  align-items:center;padding:0;border:0;margin:0}
#solidWorkspace #solidSketchTools .sketch-tools:not(:first-child) button{width:auto;min-height:24px;
  flex-direction:row;gap:5px;padding:3px 8px;font-size:11px}
#solidWorkspace #solidSketchTools .sketch-tools:not(:first-child) .cad-rotulo{max-width:none;
  -webkit-line-clamp:1;line-clamp:1;white-space:nowrap}
#solidWorkspace #solidSketchTools .sketch-tools label{flex-direction:row;align-items:center;gap:4px;
  margin:0;font-size:11px}
#solidWorkspace #solidSketchTools .sketch-tools select{width:auto}
/* Modo atual: contorno e faixa permanecem reconhecíveis nos dois temas. */
#solidWorkspace #solidSketchTools [data-sketch-tool][aria-pressed=true]{
  background:var(--accent-bg);border:2px solid var(--accent-d);padding:3px 1px;
  box-shadow:inset 0 -3px var(--accent-d);font-weight:700}
#solidWorkspace #solidSketchTools [data-sketch-tool="line"],
#solidWorkspace #solidSketchTools [data-sketch-tool="dimension"],
#solidWorkspace #solidSketchTools [data-sketch-tool="corner"],
#solidWorkspace #solidSketchTools [data-sketch-tool="pan"]{margin-left:8px}
#solidWorkspace #solidSketchTools button:disabled{cursor:not-allowed}

/* ── Corpo: painel lateral · divisor · área gráfica ──────────────────────── */
#solidWorkspace .solid-layout{flex:1 1 auto;min-height:0;display:grid;
  grid-template-columns:var(--painel-w) 5px minmax(0,1fr);border:0;border-radius:0;background:var(--bg)}
#solidWorkspace .solid-painel{min-width:0;min-height:0;display:flex;flex-direction:column;
  background:var(--surface);border-right:1px solid var(--line)}
#solidWorkspace .solid-painel-abas{flex:none;display:flex;gap:2px;padding:3px 4px 0;
  background:var(--surface-2);border-bottom:1px solid var(--line)}
#solidWorkspace .solid-painel-abas button{flex:1 1 0;min-width:0;background:none;
  border:1px solid transparent;border-bottom:0;border-radius:5px 5px 0 0;color:var(--ink-soft);
  font:inherit;font-size:11px;font-weight:600;padding:4px 6px;cursor:pointer;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#solidWorkspace .solid-painel-abas button[aria-selected=true]{background:var(--surface);
  border-color:var(--line);color:var(--ink)}
/* As duas seções dividem a altura: a árvore mostra a peça, as propriedades
   mostram o recurso aberto. As propriedades ganham mais espaço porque é onde
   se digita; cada uma rola por dentro. */
/* A ÁRVORE GANHOU ALTURA. Ela era 34% contra 66% do formulário — a proporção de
   quando ela era uma lista de duas linhas. Agora tem planos, origem, anotação,
   material e a hierarquia recurso→esboço, e é ela que responde "que peça é
   esta". O formulário continua rolando; a árvore, na maioria das peças, cabe
   inteira sem rolar, que é a diferença entre consultar e procurar. */
#solidWorkspace .solid-tree{flex:1 1 52%;min-height:150px}
#solidWorkspace .solid-editor{flex:1 1 48%;min-height:0;border-top:2px solid var(--line-2,var(--line))}
/* A seção em foco NÃO ganha faixa colorida na borda: o título dela já muda de
   cor (regra `.em-foco>h3`, mais abaixo) e a aba já fica marcada. Uma terceira
   marca para o mesmo estado é ruído. */
#solidWorkspace .solid-tree,#solidWorkspace .solid-editor{overflow:auto;padding:8px 10px;
  background:var(--surface);border-left:0;border-right:0;border-bottom:0}
#solidWorkspace .solid-tree[hidden],#solidWorkspace .solid-editor[hidden]{display:none}
/* Árvore OU propriedades, nunca as duas espremidas: quem está em foco ganha a
   coluna inteira (ver `painelLateral`). */
#solidWorkspace.so-arvore .solid-secao[data-painel=props],
#solidWorkspace.so-props .solid-secao[data-painel=arvore]{display:none}
#solidWorkspace.so-arvore .solid-tree,#solidWorkspace.so-props .solid-editor{flex:1 1 100%;border-top:0}
/* Quem diz qual seção está em foco é a ABA — ela já fica marcada, e o painel
   rola até a seção. Um filete colorido na borda seria uma terceira voz
   dizendo a mesma coisa. O rótulo da seção em foco ganha a cor de destaque,
   que é o mesmo sinal do resto do app. */
#solidWorkspace .solid-secao.em-foco>h3,
#solidWorkspace .solid-secao.em-foco .solid-editor-topo h3{color:var(--accent-d)}
/* 🔴 A regra larga `@media(max-width:850px){.solid-tree ol{display:flex;...}}`
   vinha de quando a árvore era uma lista rasa de recursos, em que enfileirá-los
   em tela estreita economizava altura. Com hierarquia isso destrói o que a
   árvore existe para mostrar: filho ao lado do pai não é filho de ninguém.
   Empilhada ela fica, em qualquer largura. */
#solidWorkspace .solid-tree ol{display:block;margin:6px 0}
#solidWorkspace .solid-tree li{margin:1px 0}
/* FeatureManager: linhas compactas e hierárquicas, não cartões. */
#solidWorkspace .solid-tree button{width:100%;text-align:left;display:flex;align-items:center;gap:6px;
  background:none;border:1px solid transparent;border-radius:4px;color:var(--ink);
  font:inherit;font-size:12.5px;padding:3px 6px;cursor:pointer;overflow-wrap:anywhere}
#solidWorkspace .solid-tree button:hover:not(:disabled){background:var(--surface-2)}
#solidWorkspace .solid-tree button.selected{background:var(--cad-sel);border-color:var(--cad-sel-line);font-weight:600}

/* ── Árvore de construção: a linha é SETA + NÓ ───────────────────────────────
   A seta é um botão à parte porque recolher um galho não é selecionar o
   recurso — e um <button> dentro de outro <button> não existe em HTML. Ela
   ocupa a mesma largura quando não há galho (`.arv-vazia`), senão os nós com e
   sem filho ficariam desalinhados e a hierarquia perderia a coluna que a faz
   ser lida como hierarquia. */
#solidWorkspace .solid-tree .arv-linha{display:flex;align-items:center;gap:1px;min-width:0}
#solidWorkspace .solid-tree .arv-seta{flex:none;width:15px;min-width:15px;padding:2px 0;
  justify-content:center;font-size:10px;color:var(--ink-soft);line-height:1}
#solidWorkspace .solid-tree .arv-vazia{display:inline-block;width:15px;min-width:15px;flex:none}
#solidWorkspace .solid-tree .arv-no{flex:1 1 auto;min-width:0;overflow-wrap:normal}
#solidWorkspace .solid-tree .arv-no .cad-ico{flex:none;opacity:.78}
#solidWorkspace .solid-tree .arv-no.selected .cad-ico{opacity:1}
#solidWorkspace .solid-tree .arv-nome{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#solidWorkspace .solid-tree .arv-filhos{list-style:none;margin:0;padding:0 0 0 16px}
/* Plano, origem, anotação e material NÃO são recursos: são a estrutura em que
   a peça se apoia. Ficam mais quietos para que os recursos, que é o que se
   edita, continuem sendo o que salta aos olhos na coluna. */
#solidWorkspace .solid-tree .arv-info,
#solidWorkspace .solid-tree .arv-plano{color:var(--ink-soft);font-size:12px}
#solidWorkspace .solid-tree .arv-ativo{color:var(--accent-d)}
#solidWorkspace .solid-tree .arv-esboco{font-size:12px}
#solidWorkspace .solid-tree .arv-suspensa{opacity:.55;font-style:italic}
/* F3 / UX-03 — componente ou corpo oculto: continua na árvore, apagado. */
#solidWorkspace .solid-tree .arv-oculto{opacity:.5}
/* F4 / AS-03 — editando a peça de uma montagem: a volta fica no topo da árvore. */
#solidWorkspace .solid-tree .arv-contexto button{width:100%;text-align:left;font-weight:600;color:var(--accent-d)}
/* Recurso que não reconstruiu: marcado, não apagado. O ⚠ vai no texto, então
   ele sobrevive a leitor de tela e a `inner_text()`; a cor é só reforço. */
/* A cor é a MESMA que o resto do app já usa para erro (`.cad-error` na barra de
   estado): a paleta não muda por causa de um estado novo. */
#solidWorkspace .solid-tree .arv-erro{color:var(--accent-d);font-weight:600}
/* F3 / UX-02 — o recurso que GEROU a face escolhida no 3D. Só um filete da
   cor de destaque na borda: realce não é seleção, e as duas coisas precisam
   continuar distinguíveis quando caem no mesmo recurso. */
#solidWorkspace .solid-tree .arv-realce{box-shadow:inset 3px 0 0 var(--accent)}
#solidWorkspace .solid-falha{margin:0 0 10px;font-size:11.5px;line-height:1.45}
#solidWorkspace .solid-tree .arv-renomeando{flex:1 1 auto;min-width:0;display:flex;align-items:center;
  gap:6px;padding:3px 6px;border:1px solid var(--cad-sel-line);border-radius:4px;background:var(--surface)}
#solidWorkspace .solid-tree .arv-renome{flex:1 1 auto;min-width:0;border:0;background:none;
  color:var(--ink);font:inherit;font-size:12.5px;padding:0}
#solidWorkspace .solid-tree .arv-renome:focus{outline:none}
#solidWorkspace .solid-layout label{font-size:11px;margin-bottom:8px}
#solidWorkspace .solid-layout h3{font-size:12.5px;margin:8px 0 4px}
#solidWorkspace .solid-divisor{background:var(--line);cursor:col-resize}
#solidWorkspace .solid-divisor:hover{background:var(--cad-sel-line)}

/* PropertyManager: confirmar e cancelar no TOPO, onde a mão já está. */
#solidWorkspace .solid-editor-topo{position:sticky;top:-8px;z-index:3;background:var(--surface);
  padding-top:2px;margin:-8px -10px 6px;padding-inline:10px;border-bottom:1px solid var(--line)}
#solidWorkspace .solid-ok{display:flex;gap:4px;padding:4px 0}
#solidWorkspace .solid-ok button{flex:none;width:30px;height:26px;display:flex;align-items:center;
  justify-content:center;border:1px solid var(--line);border-radius:5px;background:var(--surface-2);
  color:var(--ink);font:inherit;font-size:15px;line-height:1;cursor:pointer}
#solidWorkspace .solid-ok .cad-rotulo{position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
#solidWorkspace .solid-ok-sim{color:#1b7a3d}
#solidWorkspace .solid-ok-nao{color:#b23c3c}
#solidWorkspace .solid-ok .cad-ico{width:17px;height:17px;stroke-width:2.4}
#solidWorkspace .solid-ok button:disabled{opacity:.4;cursor:default}
#solidWorkspace .solid-ok button:hover:not(:disabled){background:var(--cad-sel);border-color:var(--cad-sel-line)}
#solidWorkspace .solid-editor-topo h3{margin:0 0 5px;font-size:13px}
/* O PERFIL, nomeado: a primeira linha do PropertyManager de extrusão e
   revolução diz DE QUE esboço a operação vive, e leva até ele. */
#solidWorkspace .solid-perfil{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-bottom:10px;
  padding:6px 8px;border:1px solid var(--line);border-radius:5px;background:var(--surface)}
#solidWorkspace .solid-perfil-rot{font-size:11px;color:var(--ink-soft)}
#solidWorkspace .solid-perfil-nome{display:flex;align-items:center;gap:5px;font-size:12.5px;font-weight:600}
#solidWorkspace .solid-perfil button{margin-left:auto}
/* Recolhido por padrão: são coordenadas, não medidas de projeto. */
#solidWorkspace .solid-avancado{margin:4px 0 12px;border:1px dashed var(--line);border-radius:5px}
#solidWorkspace .solid-avancado>summary{cursor:pointer;font-size:11px;color:var(--ink-soft);padding:6px 8px;
  list-style:revert}
#solidWorkspace .solid-avancado[open]>summary{border-bottom:1px solid var(--line);margin-bottom:8px}
#solidWorkspace .solid-avancado>*:not(summary){margin-left:8px;margin-right:8px}
#solidWorkspace .solid-avancado>*:last-child{margin-bottom:8px}
#solidWorkspace .solid-editor-extra{padding:8px 0 0}
#solidWorkspace .solid-editor>.btn{width:auto;margin-top:0}

/* ── Área gráfica: abas do documento e o desenho ocupando o resto ────────── */
#solidWorkspace .solid-canvas{position:relative;min-width:0;min-height:0;display:flex;
  flex-direction:column;overflow:hidden;padding:0;background:var(--bg)}
#solidWorkspace .solid-viewbar{flex:none;display:flex;gap:2px;padding:3px 6px 0;
  background:var(--surface-2);border-bottom:1px solid var(--line)}
#solidWorkspace .solid-viewbar button{flex:none;background:none;border:1px solid transparent;
  border-bottom:0;border-radius:5px 5px 0 0;color:var(--ink-soft);font:inherit;font-size:11.5px;
  font-weight:600;padding:4px 12px;min-height:26px;cursor:pointer;display:flex;align-items:center;gap:5px}
#solidWorkspace .solid-viewbar button[aria-selected=true]{background:var(--bg);border-color:var(--line);color:var(--ink)}
#solidWorkspace .solid-viewbar button:disabled{opacity:.4;cursor:default}
#solidWorkspace #solidModelViews{flex:1 1 auto;min-height:0;position:relative;display:grid;
  grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr);margin:0}
#solidWorkspace #solidModelViews[hidden]{display:none}
#solidWorkspace .solid-viewport{grid-area:1/1;height:100%;min-height:0;border:0;border-radius:0;
  background:var(--cad-view);overflow:hidden}
#solidWorkspace #solidViewer{height:100%}
#solidWorkspace #solidSketchWrap{grid-area:1/1;height:100%;min-height:0;display:flex;
  flex-direction:column;border:0;border-radius:0;padding:0;background:var(--cad-view);
  overflow:hidden;position:relative}
/* §20 — barra contextual junto da seleção: as relações que servem àquela
   escolha, ao lado dela, em vez de no topo da janela. Só glifo: o nome vai no
   `title`, e a barra tem de caber ao lado do desenho sem tapá-lo. */
#solidWorkspace .sketch-flutuante{position:absolute;z-index:6;display:flex;align-items:center;gap:2px;
  padding:3px 5px;background:var(--surface);border:1px solid var(--cad-sel-line);border-radius:7px;
  box-shadow:0 4px 14px rgba(0,0,0,.2)}
#solidWorkspace .sketch-flutuante[hidden]{display:none}
#solidWorkspace .sketch-flutuante-titulo{font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--ink-soft);font-weight:600;margin-right:3px}
#solidWorkspace .sketch-flutuante button{min-width:26px;min-height:26px;display:flex;align-items:center;
  justify-content:center;background:none;border:1px solid transparent;border-radius:4px;
  color:var(--ink);font:inherit;font-size:14px;line-height:1;cursor:pointer}
#solidWorkspace .sketch-flutuante button:hover{background:var(--cad-sel);border-color:var(--cad-sel-line)}
@media(max-width:900px){
  #solidWorkspace .sketch-flutuante button{min-width:36px;min-height:36px}
}
#solidWorkspace #solidSketch{flex:1 1 auto;height:auto;min-height:0;width:100%}
/* Selo do estado do esboço (2026-10-08): a definição na COR DAS LINHAS, sobre
   o desenho e fora do fluxo (não mexe na altura de nada). Não recebe ponteiro:
   o desenho embaixo dele continua clicável. Distinção também por marca
   (✓ ○ !), não só por cor. */
#solidWorkspace .sketch-estado{position:absolute;z-index:5;top:10px;left:12px;display:flex;align-items:center;gap:9px;
  max-width:calc(100% - 24px);padding:7px 13px 7px 9px;border-radius:9px;pointer-events:none;
  box-shadow:0 3px 12px rgba(0,0,0,.22);font-size:14px;line-height:1.25}
#solidWorkspace .sketch-estado[hidden]{display:none}
#solidWorkspace .sketch-estado b{display:block;font-weight:650;letter-spacing:.01em}
#solidWorkspace .sketch-estado small{display:block;font-size:12px;opacity:.92;margin-top:1px}
#solidWorkspace .sketch-estado-marca{flex:none;width:22px;height:22px;border-radius:50%;display:flex;align-items:center;
  justify-content:center;font-weight:800;font-size:13px;border:2px solid currentColor}
#solidWorkspace .sketch-estado.definido{background:var(--sketch-def);color:var(--surface)}
#solidWorkspace .sketch-estado.sub{background:var(--sketch-sub);color:var(--surface)}
#solidWorkspace .sketch-estado.conflito{background:var(--sketch-conflito);color:var(--surface)}
#solidWorkspace .sketch-estado.suspeito{background:var(--sketch-dangling);color:var(--surface)}
@media(max-width:900px){#solidWorkspace .sketch-estado{top:6px;left:6px;font-size:13px;padding:5px 10px 5px 7px}}
#solidWorkspace .sketch-help{flex:none;margin:0;padding:3px 10px;font-size:11px;color:var(--ink-soft);
  background:var(--surface);border-top:1px solid var(--line)}
/* Cubo de navegação no canto superior DIREITO da área gráfica. */
#solidWorkspace .solid-cube{position:absolute;top:14px;right:14px;z-index:5}
/* Barra suspensa de vista: flutua sobre o desenho, como a heads-up de um CAD —
   fica à mão sem custar altura, que é o recurso escasso. */
#solidWorkspace .solid-heads{position:absolute;z-index:4;top:8px;left:50%;transform:translateX(-50%);
  display:flex;align-items:center;gap:2px;flex-wrap:nowrap;max-width:calc(100% - 320px);overflow-x:auto;
  padding:3px 5px;background:var(--surface);border:1px solid var(--line);border-radius:7px;
  box-shadow:0 4px 14px rgba(0,0,0,.16)}
#solidWorkspace .solid-heads button{flex:none;padding:5px;min-width:28px;min-height:28px;gap:0;
  display:flex;align-items:center;justify-content:center;background:none;border:1px solid transparent;
  border-radius:4px;color:var(--ink);font:inherit;cursor:pointer}
#solidWorkspace .solid-heads button:hover:not(:disabled){background:var(--cad-sel);border-color:var(--cad-sel-line)}
#solidWorkspace .solid-heads button:disabled{opacity:.4;cursor:default}
#solidWorkspace .solid-heads>span:not(.hint){font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--ink-soft);margin:0 3px;font-weight:600}
/* Retorno de seleção: barra contextual junto da geometria, como pede o fluxo
   CAD — e só ganha moldura quando tem o que dizer. */
#solidWorkspace .solid-pick{position:absolute;z-index:4;left:8px;bottom:8px;max-width:56%;
  display:flex;flex-direction:column;gap:3px;align-items:flex-start;margin:0;padding:0;border:0}
#solidWorkspace .solid-pick #solidPickInfo{margin:0;font:11.5px var(--mono,monospace)}
#solidWorkspace .solid-pick #solidPickInfo:not(:empty){background:var(--surface);border:1px solid var(--line);
  border-radius:6px;padding:4px 7px}
#solidWorkspace .solid-pick .cad-mini-actions{padding:0;gap:3px;flex-wrap:wrap}
#solidWorkspace .solid-pick button{background:var(--surface);border:1px solid var(--line);border-radius:5px;
  color:var(--ink);font:inherit;font-size:11.5px;padding:4px 7px;cursor:pointer}
#solidWorkspace .solid-dica{position:absolute;z-index:3;right:10px;bottom:8px;max-width:30%;margin:0;
  font-size:10.5px;color:var(--ink-soft);text-align:right;pointer-events:none;opacity:.8}
/* O aviso é um recado, não uma cortina: canto inferior esquerdo, estreito, e
   sem receber clique — no meio da tela ele tapava a peça, que é o oposto do
   que um CAD deve fazer. O botão de fechar volta a aceitar o clique. */
#solidWorkspace .solid-balao{position:absolute;z-index:35;right:10px;bottom:8px;left:auto;top:auto;
  transform:none;max-width:min(400px,60%);display:flex;align-items:flex-start;gap:8px;
  padding:7px 9px;font-size:12px;background:var(--surface);border:1px solid var(--line);
  border-radius:7px;box-shadow:0 6px 20px rgba(0,0,0,.2);pointer-events:none}
/* Quem marca a gravidade e o ÍCONE, nao uma tarja colorida na lateral: o
   ícone ja existe no balao, diz a mesma coisa e nao vira enfeite. */
#solidWorkspace .solid-balao-icone{flex:none;width:17px;height:17px;display:flex;align-items:center;
  justify-content:center;border-radius:50%;background:var(--accent-bg);color:var(--accent-d);
  font-weight:700;font-size:11px;margin-top:1px}
#solidWorkspace .solid-balao.erro .solid-balao-icone{background:#f6dcdc;color:#b23c3c}
#solidWorkspace .solid-balao[hidden]{display:none}
#solidWorkspace .solid-balao p{margin:0}
#solidWorkspace .solid-balao button{pointer-events:auto;flex:none;background:none;border:0;
  color:var(--ink-soft);cursor:pointer;font-size:13px;line-height:1;padding:2px 4px}
/* A dica fixa e o recado disputavam o mesmo canto. Quem tem algo a dizer AGORA
   ganha a vez: com balão na tela a dica sai, e volta quando ele fecha. */
#solidWorkspace.com-balao .solid-dica{display:none}
@media(max-width:1280px){#solidWorkspace .solid-dica{display:none}}
#solidWorkspace #solidSheet{flex:1 1 auto;min-height:0;overflow:auto;background:var(--cad-view);padding:10px}
/* margem automatica em vez de flex: centraliza a folha e, quando ela e MAIOR
   que o berco, nao come a borda esquerda como o flex centrado faria. */
#solidWorkspace #solidSheet svg{margin-inline:auto}
#solidWorkspace #solidSheet[hidden]{display:none}

/* Painéis grandes sobrepõem a área gráfica em vez de empurrar a página. */
/* Acima dos painéis centrais (z 30): quem abre Materiais quer vê-lo, e o do
   cilindro fica aberto depois de gerar a montagem, justamente quando se
   escolhe o material de cada peça. */
#solidWorkspace #solidMaterialsPanel{position:absolute;z-index:31;right:12px;top:12px;width:370px;max-width:calc(100% - 24px);max-height:calc(100% - 96px);overflow:auto;margin:0;background:var(--surface);border:1px solid var(--line);box-shadow:0 12px 32px #0004;border-radius:9px;padding:16px}
#solidWorkspace #solidMaterialsPanel[hidden]{display:none}
/* max-height deixa 96 px livres embaixo: é a faixa do balão de aviso (fixo,
   embaixo ao centro). Sem isso cada "Aplicado…" cobria Aplicar/Cancelar. */
#solidWorkspace .solid-material-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}
#solidWorkspace .solid-material-heading h3{margin:0 0 12px}
/* Controle fora de `.cad-mini-actions` não herda o botão do tema: no escuro
   ficava com o fundo cinza-claro do navegador e o texto claro do tema —
   ✕ invisível (contraste 1,07). Mesma classe: o valor da medição. */
#solidWorkspace .solid-material-heading button{background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:6px;padding:4px 9px;cursor:pointer;font:inherit}
#solidWorkspace .solid-material-heading button:hover{background:var(--accent-bg)}
#solidWorkspace .solid-medir input{background:var(--bg);color:var(--ink);border:1px solid var(--line-2);border-radius:4px;padding:3px 5px}
/* Idem para os campos do painel: busca (type=search) e nome da aparência
   não tinham `type=text`, que é o que o tema pinta. */
#solidWorkspace #solidMaterialsFields input:not([type=range]):not([type=color]):not([type=checkbox]),#solidWorkspace #solidMaterialsFields select{background:var(--bg);color:var(--ink);border:1px solid var(--line-2);border-radius:6px;padding:6px 8px}
#solidWorkspace #solidMaterialsFields label{display:block;margin:12px 0}
#solidWorkspace #solidMaterialsFields select{display:block;width:100%;margin-top:5px}
#solidWorkspace #solidMaterialsFields fieldset{min-width:0;margin:14px 0;padding:12px;border:1px solid var(--line);border-radius:6px}
#solidWorkspace #solidMaterialsFields legend{font-weight:600;padding:0 5px}
/* Biblioteca de materiais/aparências: abas, busca, lista agrupada com a
   escolha em prévia marcada, ficha técnica e o rodapé Aplicar/Cancelar que
   fica sempre à vista enquanto a lista rola. */
#solidWorkspace .mat-abas{display:flex;gap:2px;margin:10px 0 8px;border-bottom:1px solid var(--line)}
#solidWorkspace .mat-abas button{flex:1;border:0;background:none;padding:7px 6px;border-bottom:2px solid transparent;font-weight:600;color:var(--ink-soft);cursor:pointer;border-radius:0}
#solidWorkspace .mat-abas button[aria-selected=true]{color:var(--ink);border-bottom-color:var(--accent-d)}
#solidWorkspace #solidMaterialsFields .mat-busca{margin:8px 0}
#solidWorkspace .mat-lista{max-height:250px;overflow:auto;border:1px solid var(--line);border-radius:6px;padding:3px;background:var(--surface-2)}
#solidWorkspace .mat-grupo[hidden],#solidWorkspace .mat-opcao[hidden]{display:none}
#solidWorkspace .mat-grupo p{margin:8px 6px 2px;font-size:11px;font-weight:600;color:var(--ink-soft)}
#solidWorkspace .mat-opcao{display:flex;flex-wrap:wrap;align-items:center;gap:1px 7px;width:100%;text-align:left;border:1px solid transparent;background:none;border-radius:5px;padding:4px 7px;cursor:pointer;color:var(--ink);font:inherit;font-size:12.5px}
#solidWorkspace .mat-opcao small{flex-basis:100%;color:var(--ink-soft);font-size:11px}
#solidWorkspace .mat-opcao:hover{background:var(--accent-bg)}
#solidWorkspace .mat-opcao[aria-selected=true]{border-color:var(--accent-d);background:var(--accent-bg)}
#solidWorkspace .mat-rotulo{flex:1;min-width:0}
#solidWorkspace .mat-amostra{width:15px;height:15px;border-radius:50%;border:1px solid var(--line-2);flex:none;box-shadow:inset -3px -3px 5px #0003}
#solidWorkspace .mat-fav{color:#b27a00;flex:none}
#solidWorkspace .mat-chips{display:flex;flex-wrap:wrap;gap:4px;align-items:center;margin:6px 0;font-size:12px}
#solidWorkspace .mat-chips span{color:var(--ink-soft)}
#solidWorkspace .mat-chips button{border:1px solid var(--line-2);border-radius:999px;background:var(--surface);color:var(--ink);padding:2px 9px;font-size:11.5px;cursor:pointer}
#solidWorkspace .mat-ficha h4{margin:12px 0 2px;font-size:13px}
#solidWorkspace .mat-props th{font-weight:500;color:var(--ink-soft)}
#solidWorkspace .mat-ni{color:var(--ink-soft);font-style:italic;font-family:var(--sans)}
#solidWorkspace .mat-resumo{margin:8px 0;padding:8px 10px;border-radius:6px;background:var(--surface-2);border:1px solid var(--line);font-size:12.5px}
#solidWorkspace .mat-resumo p{margin:2px 0;font-weight:600;color:var(--ink)}
#solidWorkspace .mat-resumo span{display:inline-block;min-width:74px;font-weight:500;color:var(--ink-soft)}
#solidWorkspace .mat-editor input[type=range]{width:100%}
#solidWorkspace .mat-editor output{font-family:var(--mono);color:var(--ink-soft)}
#solidWorkspace .mat-rodape{position:sticky;bottom:-16px;background:var(--surface);border-top:1px solid var(--line);margin:12px -16px -16px;padding:8px 16px 12px;z-index:1}
#solidWorkspace .mat-rodape p{margin:4px 0}
#solidWorkspace .mat-orfas{color:#8a5a00}
.cad-file-dialog{max-width:min(540px,calc(100vw - 40px));background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:8px;padding:20px;box-shadow:0 16px 48px #0005}
.cad-file-dialog::backdrop{background:#0007}
.cad-file-drop{position:fixed;inset:12px;z-index:1000;display:grid;place-items:center;pointer-events:none;border:3px dashed var(--accent);border-radius:12px;background:color-mix(in srgb,var(--surface) 88%,transparent);color:var(--ink)}
.cad-file-drop[hidden]{display:none}
.cad-file-drop>div{display:grid;gap:10px;text-align:center;max-width:440px;margin:20px;padding:24px;background:var(--surface);border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 30px #0003}
.cad-file-drop strong{font-size:20px}.cad-file-drop span{font-size:13px;line-height:1.5;color:var(--ink-soft)}
.cad-file-dialog p{white-space:pre-wrap;margin:0 0 16px}
.cad-file-dialog button{color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:4px;padding:8px 14px;cursor:pointer}
#solidWorkspace #solidCylPanel,#solidWorkspace #solidVarsPanel,#solidWorkspace #solidMatePanel,#solidWorkspace #solidVersoesPanel,#solidWorkspace #solidCreoPanel,#solidWorkspace #solidConfirm{position:absolute;z-index:30;
  left:50%;top:12px;transform:translateX(-50%);max-width:min(760px,calc(100% - 24px));
  max-height:calc(100% - 24px);overflow:auto;background:var(--surface);
  border:1px solid var(--line);border-radius:9px;box-shadow:0 14px 40px rgba(0,0,0,.28);margin:0}
#solidWorkspace #solidCylPanel[hidden],#solidWorkspace #solidVarsPanel[hidden],#solidWorkspace #solidMatePanel[hidden],#solidWorkspace #solidCreoPanel[hidden],#solidWorkspace #solidConfirm[hidden]{display:none}
/* Posicionamentos pede clicar faces NO 3D com o painel aberto. Centrado no topo,
   ele tapava o meio da vista (607 × 425 px sobre o modelo) e a segunda face ficava
   inalcançável. Encostado à esquerda, estreito e abaixo da barra de vistas, o
   modelo enquadrado fica livre e as vistas continuam clicáveis. A regra de tela
   estreita, mais abaixo, devolve o painel ao fluxo. */
#solidWorkspace #solidMatePanel{left:12px;right:auto;top:80px;transform:none;width:min(360px,calc(100% - 24px));max-height:calc(100% - 92px)}
/* Os painéis do SolidWorks ficavam FORA desta lista e entravam no fluxo da área
   gráfica: abrir a consulta de um recurso original empurrava o 3D para fora da
   vista e a tabela de cotas era cortada no rodapé, sem rolagem. A consulta
   acompanha o modelo (encostada à esquerda, como Posicionamentos); a escolha da
   montagem é um diálogo e fica centrada. */
#solidWorkspace #solidSWFeaturePanel,#solidWorkspace #solidSWPanel{position:absolute;z-index:30;
  max-height:calc(100% - 24px);overflow:auto;background:var(--surface);
  border:1px solid var(--line);border-radius:9px;box-shadow:0 14px 40px rgba(0,0,0,.28);margin:0}
#solidWorkspace #solidSWPanel{left:50%;top:12px;transform:translateX(-50%);max-width:min(760px,calc(100% - 24px))}
#solidWorkspace #solidSWFeaturePanel{left:12px;top:80px;width:min(460px,calc(100% - 24px));max-height:calc(100% - 92px)}
#solidWorkspace #solidSWFeaturePanel[hidden],#solidWorkspace #solidSWPanel[hidden]{display:none}

/* ── Barra de status ─────────────────────────────────────────────────────── */
#solidWorkspace .solid-status{flex:none;display:flex;align-items:center;gap:12px;min-height:26px;
  padding:2px 10px;font-size:11.5px;background:var(--surface);border-top:1px solid var(--line);
  overflow-x:auto;white-space:nowrap}
#solidWorkspace .solid-status p{margin:0;border:0;padding:0}
#solidWorkspace .solid-status #solidMessage{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis}
#solidWorkspace .solid-status #solidStats{flex:none;color:var(--ink-soft)}
#solidWorkspace .solid-status #solidSaved{flex:none;color:var(--ink-soft)}
/* O sistema de unidades deixou de ser um carimbo e virou controle. O rotulo
   fica so para quem le por leitor de tela: o proprio valor da lista ja diz
   qual e ("MMGS · mm"), e um rotulo escrito ao lado seria redundancia numa
   barra onde a altura e o recurso escasso. */
#solidWorkspace .solid-unidades{flex:none;display:flex;align-items:center}
#solidWorkspace .solid-unidades .sr-only{position:absolute;width:1px;height:1px;padding:0;
  margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
#solidWorkspace .solid-unidades select{background:var(--surface-2);border:1px solid var(--line);
  border-radius:4px;color:var(--ink-soft);font:inherit;font-size:11px;font-weight:600;
  letter-spacing:.04em;padding:2px 6px;cursor:pointer}
#solidWorkspace .solid-unidades select:hover{color:var(--ink);border-color:var(--line-2)}
#solidWorkspace .solid-status button{flex:none;background:var(--surface-2);border:1px solid var(--line);
  border-radius:4px;color:var(--ink);font:inherit;font-size:11px;padding:2px 8px;cursor:pointer}
#solidWorkspace .solid-status button:disabled{opacity:.4;cursor:default}

/* ── Esboço: o VIEWPORT INTEIRO vira o esboço ────────────────────────────── */
#solidWorkspace.sem-modelo .solid-heads,#solidWorkspace.sem-modelo .solid-pick,
#solidWorkspace.sem-modelo .solid-dica,#solidWorkspace.sem-modelo .solid-cube{display:none}
#solidWorkspace.sketch-active .solid-viewport,#solidWorkspace.sketch-active #solidViewer,
#solidWorkspace.sketch-active .solid-heads,#solidWorkspace.sketch-active .solid-pick,
#solidWorkspace.sketch-active .solid-dica,#solidWorkspace.sketch-active .solid-cube{display:none}
#solidWorkspace:not(.sketch-active) #solidSketchWrap{display:none}
/* O mesmo espaço de trabalho: a peça sombreada fica sob as entidades do
   esboço. Sua câmera é sincronizada com o viewBox e o plano de suporte. */
#solidWorkspace.sketch-active.sketch-model-context .solid-viewport{display:block;position:absolute;z-index:0;pointer-events:none;min-height:0}
#solidWorkspace.sketch-active.sketch-model-context #solidViewer{display:block;height:100%!important;min-height:0;border:0;border-radius:0}
#solidWorkspace.sketch-active.sketch-model-context #solidSketchWrap{z-index:1;background:transparent}
#solidWorkspace.sketch-active.sketch-model-context #solidSketch{background:transparent;border:0;color:#263543;
  --ink:#263543;--ink-soft:#495f70;--muted:#526778;--line:#8c9ba7;--sketch-def:#23323d;--sketch-sub:#1558b4;--sketch-conflito:#b42318}
#solidWorkspace.panels-hidden .solid-painel,#solidWorkspace.panels-hidden .solid-divisor{display:none}
#solidWorkspace.panels-hidden .solid-layout{grid-template-columns:minmax(0,1fr)}

/* ── Modo de foco: o CAD toma a janela inteira ───────────────────────────── */
#solidWorkspace.solid-expanded{position:fixed;inset:0;z-index:90;height:100dvh;
  border:0;border-radius:0;max-height:none}

/* ── Tela estreita: a bancada de três faixas não cabe; volta a rolar ─────── */
@media(max-width:900px){
  #solidWorkspace{height:auto;min-height:0;overflow:visible;display:block}
  #solidWorkspace .solid-layout{display:block}
  #solidWorkspace .solid-divisor{display:none}
  #solidWorkspace .solid-painel{border-right:0;border-bottom:1px solid var(--line)}
  #solidWorkspace .solid-tree,#solidWorkspace .solid-editor{max-height:46vh}
  #solidWorkspace .solid-canvas{display:block}
  #solidWorkspace #solidModelViews{display:block;height:58vh}
  #solidWorkspace .solid-viewport,#solidWorkspace #solidSketchWrap{height:58vh}
  #solidWorkspace .solid-heads{position:static;transform:none;max-width:none;box-shadow:none;
    margin:4px;flex-wrap:wrap}
  #solidWorkspace .solid-pick,#solidWorkspace .solid-dica{position:static;max-width:none;
    text-align:left;margin:6px}
  #solidWorkspace #solidCylPanel,#solidWorkspace #solidVarsPanel,#solidWorkspace #solidMatePanel,#solidWorkspace #solidVersoesPanel,#solidWorkspace #solidCreoPanel,#solidWorkspace #solidConfirm,
  #solidWorkspace #solidSWFeaturePanel,#solidWorkspace #solidSWPanel{position:static;transform:none;
    max-width:none;margin:8px}
  #solidWorkspace #solidSWFeaturePanel{width:auto}
  #solidWorkspace.solid-expanded{position:fixed;inset:0;height:100dvh;overflow:auto}
  #solidWorkspace .cad-fita:not([hidden]){flex-wrap:wrap;min-height:0}
  #solidWorkspace .cad-grupo{border-right:0}
  #solidWorkspace .solid-status{flex-wrap:wrap;white-space:normal}
}
@media(max-width:900px){
  /* Em celular NADA pode vazar pela lateral: a barra de título quebra em
     linhas e as ações rápidas param de empurrar. Medido em 375 px, onde
     `.cad-quick` e o Desfazer saíam da tela. */
  #solidWorkspace .cad-topbar{flex-wrap:wrap;row-gap:2px;padding:3px 6px}
  #solidWorkspace .cad-doc{margin-left:0;order:9}
  #solidWorkspace .cad-janela{margin-left:auto}
  #solidWorkspace .cad-menus,#solidWorkspace .cad-quick{flex-wrap:wrap}
  #solidWorkspace .cad-menu-pop{position:fixed;left:8px;right:8px;top:auto;
    max-width:none;min-width:0;max-height:60vh;overflow:auto}
  /* Alvo de toque: as abas do documento são o que mais se toca no celular. */
  #solidWorkspace .solid-viewbar button,#solidWorkspace .cad-ribbon-abas button,
  #solidWorkspace .solid-painel-abas button,#solidWorkspace .cad-quick button,
  #solidWorkspace .cad-janela button,#solidWorkspace .cad-menu-b,
  #solidWorkspace .solid-heads button,#solidWorkspace .solid-ok button{min-height:36px;min-width:36px}
  #solidWorkspace .cad-menu-pop button{min-height:38px}
}
@media(max-width:560px){
  /* Em 375 px um grupo de 6 comandos media mais que a tela inteira e vazava
     pela lateral. Os itens do grupo passam a quebrar linha, e o grupo cabe. */
  #solidWorkspace .cad-fita .cad-grupo{max-width:100%}
  #solidWorkspace .cad-grupo-itens{flex-wrap:wrap;justify-content:center}
  #solidWorkspace .cad-fita .cad-grupo-itens button{width:52px;font-size:10px}
  #solidWorkspace .cad-doc{display:none}
}

/* Cilindro hidráulico paramétrico. O painel é largo de propósito: são doze
   escolhas, e escondê-las atrás de rolagem faria o usuário gerar sem ler o
   catálogo de vedações que a montagem vai usar. */
.solid-cyl{border:1px solid var(--line);border-radius:10px;background:var(--surface-2);padding:14px 16px;margin:10px 0}
.solid-cyl h3{margin:0 0 6px;font-size:15px}
dialog.cad-sw-native{width:min(760px,calc(100vw - 36px));max-height:85vh;overflow:auto;box-sizing:border-box;background:var(--surface,#292e32);color:var(--ink,#eee);border:1px solid var(--line,#555);border-radius:10px;padding:22px;font:14px/1.5 var(--sans,system-ui)}
dialog.cad-sw-native::backdrop{background:rgba(0,0,0,.5)}
dialog.cad-sw-native h2{font-size:19px;margin:0 0 12px}
dialog.cad-sw-native h3{font-size:16px;margin:18px 0 8px}
dialog.cad-sw-native label{display:flex;flex-direction:column;gap:5px;margin:12px 0}
dialog.cad-sw-native input,dialog.cad-sw-native select,dialog.cad-sw-native button{font:inherit;color:inherit;background:var(--surface-2,#33393e);border:1px solid var(--line,#666);border-radius:5px;padding:7px 10px}
dialog.cad-sw-native button{cursor:pointer}dialog.cad-sw-native :disabled{opacity:.5;cursor:default}
dialog.cad-sw-native .cad-mini-actions{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}
dialog.cad-sw-native pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:180px;overflow:auto;font-size:12px}
dialog.cad-sw-native .cad-error{color:#ff9e87}
dialog.cad-sw-native .cad-sw-dimensions{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:0 20px}
dialog.cad-sw-native .cad-sw-dimensions span{display:flex;align-items:center;gap:7px}
dialog.cad-sw-native .cad-sw-dimensions input{width:110px;min-width:0}
#solidWorkspace .solid-organizar{position:fixed;z-index:80;top:30%;right:24px;width:min(430px,calc(100vw - 32px));max-height:65vh;overflow:auto;margin:0;box-shadow:0 10px 30px #0002}
#solidWorkspace .solid-organizar .solid-fields{grid-template-columns:repeat(3,minmax(0,1fr))}
#solidWorkspace .solid-organizar .solid-fields label:nth-child(-n+3){grid-column:1/-1}
#solidWorkspace .solid-organizar .cad-mini-actions{position:sticky;bottom:-16px;background:var(--surface-2);padding-bottom:12px}
@media(max-height:650px){#solidWorkspace .solid-organizar{top:12%;max-height:82vh}}
.solid-cyl h4{margin:16px 0 6px;font-size:13px;color:var(--accent-d)}
.solid-cyl>.hint{margin:0 0 12px;font-size:12px;line-height:1.55;color:var(--ink-soft)}
.solid-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));gap:10px 14px}
.solid-fields label{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--ink-soft);margin:0}
.solid-fields input,.solid-fields select{width:100%;min-width:0;box-sizing:border-box;font-family:var(--mono,monospace);background:var(--bg);border:1px solid var(--line-2);border-radius:6px;padding:8px;color:var(--ink)}
.solid-fields .hint{font-size:10.5px;line-height:1.45;color:var(--ink-soft)}
.solid-cyl .cad-mini-actions{padding:14px 0 0}
.solid-cyl-table{width:100%;border-collapse:collapse;font-size:12px;margin:0}
.solid-cyl-table th{text-align:left;font-weight:600;color:var(--ink);padding:6px 10px 6px 0;vertical-align:top;white-space:nowrap}
.solid-cyl-table td{padding:6px 0;color:var(--ink-soft);font-family:var(--mono,monospace);border-bottom:1px solid var(--line)}
.solid-cyl-table .hint{font-family:var(--sans,inherit);font-size:10.5px}
.solid-cyl-avisos{margin:0;padding-left:18px;font-size:11.5px;line-height:1.6;color:var(--ink-soft)}
.solid-cyl-avisos li{margin:4px 0}
@media (max-width:700px){.solid-fields{grid-template-columns:1fr}}

/* Ferramentas 3D: cubo de navegação sobre a vista, como no SolidWorks. Ele fica
   ABSOLUTO sobre o canvas em vez de ao lado — é o canto do 3D que ele descreve,
   e ao lado ele disputaria largura com a peça. */
/* A COLOCAÇÃO NA GRADE mora junto das outras regras de grade (lá em cima), não
   aqui: as duas têm a mesma especificidade, e quem vem DEPOIS no arquivo ganha
   — declarar `grid-row:1` aqui embaixo anularia o `grid-row:2` da media query
   de 1200px e o 3D voltaria a ser empilhado por baixo do esboço, na mesma
   célula. Foi exatamente esse o defeito de 2026-09-15. */
/* A altura do 3D tem de ser DEFINIDA aqui, nao um piso. O `#solidViewer` usa
   `height:100%`, e porcentagem contra pai de altura automatica resolve como
   `auto`: a cadeia inteira ficava indefinida e quem passava a mandar era a
   PROPORCAO do canvas (largura x altura/largura dos atributos). Media-se 717 px
   em 1100 e 364 px em 375 -- numeros que nao vinham de regra nenhuma, so
   coincidiam com 430 na largura em que se testou. Com altura definida a
   cadeia volta a ser definida e os pontos de quebra voltam a valer.
   As regras antigas miravam `#solidViewer{height:...}` e morreram quando ele
   virou filho do involucro; ficam DEPOIS da base porque tem a mesma
   especificidade e ganha a ultima. */
.solid-viewport{position:relative;min-width:0;height:430px}
@media(max-width:1150px){.solid-viewport{height:320px}}
@media(max-width:560px){.solid-viewport{height:310px}}

/* ── COTAS NO MODELO 3D ──────────────────────────────────────────────────
   A camada fica SOBRE o canvas, nunca sobre o hospedeiro: o `#solidViewer`
   tem borda, e pendurar a camada nele deslocaria toda cota pela espessura
   dela. Quem posiciona é o JS, que mede o canvas a cada repintura.
   Os tokens são os MESMOS do estado do esboço — a cota do 3D e a do esboço
   falam a mesma língua visual, e uma segunda paleta aqui divergiria dela. */
.solid-cotas3d{position:absolute;left:0;top:0;pointer-events:none;overflow:visible;z-index:3}
.solid-cotas3d .cota3d-linha{stroke:var(--sketch-def);stroke-width:1.3;fill:none}
.solid-cotas3d .cota3d-linha.tracejada{stroke-dasharray:6 4}
.solid-cotas3d .cota3d-chamada{stroke:var(--sketch-def);stroke-width:.9;opacity:.75;fill:none}
.solid-cotas3d .cota3d-seta{fill:var(--sketch-def);stroke:none}
/* O rótulo fica sobre a peça sombreada: sem o fundo, o número some no meio
   do gradiente da superfície — é a mesma razão do halo das cotas do esboço. */
.solid-cotas3d .cota3d-fundo{fill:var(--surface);stroke:var(--line);stroke-width:1}
.solid-cotas3d .cota3d-texto{fill:var(--ink);font:600 12px var(--mono,ui-monospace,monospace)}
/* A PRÉVIA não é cota ainda: ela mostra o que o clique vai criar, e tem de
   se distinguir do que já está guardado. */
.solid-cotas3d .fantasma{opacity:.55;stroke-dasharray:5 4}
.solid-cotas3d .cota3d-fundo.fantasma{stroke-dasharray:4 3}
.solid-cotas3d .cota3d-linha.selecionada,
.solid-cotas3d .cota3d-chamada.selecionada{stroke:var(--sketch-halo);stroke-width:2}
.solid-cotas3d .cota3d-seta.selecionada{fill:var(--sketch-halo)}
.solid-cotas3d .cota3d-fundo.selecionada{stroke:var(--sketch-halo);stroke-width:2}
.solid-cotas3d .cota3d-texto.selecionada{fill:var(--sketch-halo)}
/* Cota que perdeu a referência NÃO some: sumir deixaria o usuário com uma
   peça que ele acha cotada e não está. Fica em estado de erro próprio. */
.solid-cotas3d .cota3d-fundo.perdida{stroke:var(--sketch-dangling);stroke-width:1.6;stroke-dasharray:4 3}
.solid-cotas3d .cota3d-texto.perdida{fill:var(--sketch-dangling);font-style:italic}
/* A pega é o ÚNICO alvo de ponteiro da camada: o resto é aviso, não alvo. */
.solid-cotas3d .cota3d-pega{fill:transparent;pointer-events:auto;cursor:grab}
.solid-cotas3d .cota3d-pega:active{cursor:grabbing}

.solid-medir{display:flex;flex-direction:column;gap:4px;padding:6px 8px;background:var(--surface-2);border:1px solid var(--line);border-radius:6px;margin-top:4px}
.solid-medir[hidden]{display:none}
.solid-medir>p{margin:0;font-size:12px;color:var(--ink)}
.solid-medir .hint{font-size:11px;color:var(--ink-soft)}
.solid-medir label{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--ink-soft)}
.solid-medir input{width:9ch;min-width:0}

.solid-viewport>#solidViewer{width:100%;height:100%}
/* Leitura do arraste: fica SOBRE o 3D e do lado oposto ao cubo de navegacao,
   porque e para onde o olho ja esta olhando enquanto a mao arrasta a peca.
   Comeca depois do triedro, que ocupa o canto: um cobrindo o outro tiraria
   justamente a referencia de eixo de quem esta arrastando um recurso. */
.solid-drag{position:absolute;left:120px;bottom:8px;margin:0;z-index:6;pointer-events:none;
  padding:7px 10px;border-radius:6px;background:var(--surface);border:1px solid var(--accent-d);
  box-shadow:0 4px 14px rgba(0,0,0,.18);font:12px var(--mono,monospace);color:var(--ink);max-width:calc(100% - 128px)}
/* ── Cubo de navegação ────────────────────────────────────────────────────
   O contêiner NÃO recebe ponteiro: só as zonas e os alvos recebem. É o que
   deixa a órbita, o zoom e a seleção do modelo continuarem funcionando por
   baixo dele — um retângulo invisível de 132px capturando clique no canto da
   área gráfica seria um pedaço do 3D perdido.
   Face, aresta e canto têm tons diferentes de propósito: é o que mostra, sem
   texto, que são três alvos distintos e não um cubo decorado. */
.solid-cube{position:absolute;top:14px;right:14px;width:132px;height:132px;
  pointer-events:none;opacity:.84;transition:opacity .12s}
.solid-cube:hover{opacity:1}
.nav-cubo{width:100%;height:100%;overflow:visible;pointer-events:none;display:block}
.nav-zona{stroke:var(--line-2);stroke-width:.6;cursor:pointer;pointer-events:auto;
  transition:fill-opacity .1s}
.nav-face{fill:var(--surface);fill-opacity:.92}
.nav-aresta{fill:var(--bg);fill-opacity:.94}
.nav-canto{fill:var(--line);fill-opacity:.85}
.nav-zona:hover{fill:var(--accent);fill-opacity:.55;stroke:var(--accent-d)}
/* O nome corre pela face INTEIRA, não pelo mosaico do meio — é assim que o
   cubo de qualquer CAD escreve, e 25 unidades de mosaico não comportam
   "SUPERIOR". Fonte pequena porque a face encurta na isométrica. */
.nav-nome{font:600 5.4px var(--sans,system-ui);fill:var(--ink);text-anchor:middle;
  dominant-baseline:middle;letter-spacing:.02em;pointer-events:none;user-select:none}
/* Alvo generoso e invisível: quem clica mira a seta, não um triângulo de 9px. */
.nav-alvo{fill:transparent;pointer-events:auto;cursor:pointer}
.nav-botao{cursor:pointer}
.nav-seta,.nav-arco-ponta,.nav-mini{fill:var(--ink-soft);pointer-events:none}
.nav-arco{fill:none;stroke:var(--ink-soft);stroke-width:2;stroke-linecap:round;pointer-events:none}
.nav-redondo{fill:none;stroke:var(--ink-soft);stroke-width:1.6;pointer-events:none}
.nav-mini-b{fill:var(--line);}
.nav-mini-c{fill:var(--line-2);}
.nav-botao:hover .nav-alvo{fill:var(--cad-sel)}
.nav-botao:hover .nav-seta,.nav-botao:hover .nav-arco-ponta,.nav-botao:hover .nav-mini{fill:var(--accent-d)}
.nav-botao:hover .nav-arco,.nav-botao:hover .nav-redondo{stroke:var(--accent-d)}
/* O menu abre POR CIMA da geometria e recebe ponteiro; o resto do widget não. */
.nav-cubo-menu{position:absolute;top:100%;right:0;margin-top:2px;z-index:7;
  min-width:172px;padding:5px;pointer-events:auto;
  background:var(--surface);border:1px solid var(--line);border-radius:7px;
  box-shadow:0 8px 24px rgba(0,0,0,.28);display:flex;flex-direction:column;gap:1px}
.nav-cubo-menu[hidden]{display:none}
.nav-cubo-menu button{text-align:left;padding:6px 9px;min-height:30px;border:0;border-radius:4px;
  background:none;color:var(--ink);font:inherit;font-size:12px;cursor:pointer}
.nav-cubo-menu button:hover:not(:disabled){background:var(--cad-sel)}
.nav-cubo-menu button:disabled{opacity:.42;cursor:default}
.nav-cubo-menu hr{border:0;border-top:1px solid var(--line);margin:3px 0}
.nav-menu-nota{margin:0;padding:4px 9px 2px;font-size:10.5px;color:var(--ink-soft);
  letter-spacing:.04em;text-transform:uppercase}
@media(max-width:900px){
  .solid-cube{width:108px;height:108px;top:8px;right:8px}
  .nav-cubo-menu button{min-height:36px}
}
.solid-views span{font-size:11px;color:var(--accent-d);align-self:center}

/* Aviso de trabalho em curso. Ele é GRANDE e fica por cima da peça de
   propósito: um "Em construção…" discreto no rodapé fazia o usuário concluir
   que a ferramenta travou e desistir antes de o cálculo terminar. */
.solid-busy{position:absolute;inset:0;display:grid;place-items:center;background:rgba(10,12,14,.55);backdrop-filter:blur(2px);z-index:5}
.solid-busy-card{max-width:330px;text-align:center;padding:18px 20px;border-radius:12px;background:var(--surface);border:1px solid var(--accent-d);box-shadow:0 10px 30px rgba(0,0,0,.35)}
.solid-busy-ring{width:38px;height:38px;margin:0 auto 12px;border-radius:50%;border:3px solid var(--line-2);border-top-color:var(--accent);animation:solid-gira 900ms linear infinite}
@keyframes solid-gira{to{transform:rotate(360deg)}}
.solid-busy-title{margin:0;font-size:15px;font-weight:700;color:var(--ink)}
.solid-busy-what{margin:6px 0 0;font-size:11.5px;line-height:1.5;color:var(--ink-soft)}
.solid-busy-clock{margin:8px 0 0;font:700 22px var(--mono,monospace);color:var(--accent-d)}
.solid-busy-hint{margin:8px 0 12px;font-size:11px;line-height:1.55;color:var(--ink-soft)}
.solid-busy-card .btn{width:100%}
@media (prefers-reduced-motion:reduce){.solid-busy-ring{animation-duration:3s}}

/* Barra de exibição: estilo e corte. O controle de posição do corte é um
   deslizador porque a pergunta é "onde", e arrastar responde na hora. */
.solid-views [aria-pressed="true"]{background:var(--accent-bg);border-color:var(--accent-d);color:var(--ink)}
.solid-views input[type="range"]{width:130px;align-self:center;accent-color:var(--accent)}
.solid-views .hint{align-self:center;font-size:11px}

/* ═══════════════════════════════════════════════════════════════════════════
   PRANCHA — árvore do desenho, propriedades da folha e anotação arrastável
   ═══════════════════════════════════════════════════════════════════════════ */
#solidDrawTree{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}
#solidDrawTree button{width:100%;text-align:left;border:1px solid transparent;background:none;
  color:inherit;padding:4px 6px;border-radius:4px;font-size:12.5px;cursor:pointer;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#solidDrawTree button:hover{background:var(--surface-2)}
#solidDrawTree button.selected{background:var(--cad-sel);border-color:var(--cad-sel-line);font-weight:600}
#solidDrawTree .solid-subarvore{list-style:none;margin:2px 0 4px;padding-left:14px;
  display:flex;flex-direction:column;gap:1px;border-left:1px solid var(--line)}
#solidDrawTree .solid-subarvore button{font-size:11.5px;opacity:.9}
#solidDrawProps h4{margin:14px 0 6px;font-size:12px;text-transform:uppercase;
  letter-spacing:.06em;color:var(--muted)}
#solidDrawProps h4:first-child{margin-top:0}
/* Legenda: a caixa liga o campo e o texto ao lado dela — desligar um campo
   apaga a linha da folha, e o valor continua guardado para quando voltar. */
.solid-legenda{display:flex;flex-direction:column;gap:3px}
.solid-legenda-linha{display:grid;grid-template-columns:auto 1fr;gap:2px 6px;
  align-items:center;margin:0;font-size:11.5px}
.solid-legenda-linha input[type=checkbox]{grid-row:span 2;margin:0}
.solid-legenda-linha span{color:var(--muted);font-size:10.5px;text-transform:uppercase;
  letter-spacing:.04em}
.solid-legenda-linha input[type=text]{width:100%;font-size:12px;padding:3px 5px}
.solid-legenda-linha input[disabled]{opacity:.45}
.solid-revisoes{margin:0 0 6px;padding-left:18px;font-size:11.5px;color:var(--muted)}
.solid-vencida{color:#B5634A;font-weight:600;font-size:11.5px}
/* Anotação: pega o clique e o arraste, como a vista. `fill:transparent` num
   texto não basta — é o grupo inteiro que recebe o ponteiro. */
#solidSheet .sheet-anot{cursor:move}
#solidSheet .sheet-anot:hover{opacity:.7}
#solidSheet .sheet-anot.arrastando{opacity:.5}
#solidSheet.cotando .sheet-anot{cursor:crosshair}
#solidSheetTools select{font-size:12px;padding:4px 6px;border-radius:5px;
  border:1px solid var(--line);background:var(--surface);color:inherit;max-width:150px}
@media (max-width:900px){#solidSheetTools select{min-height:36px}}

.solid-check{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--cad-ink-2,#b9bec4);cursor:pointer}
.solid-check input{width:16px;height:16px;flex:0 0 auto;accent-color:var(--accent,#cc785c)}

/* Acabamento no canto do esboço. A marca fica FORA do canto, com um traço de
   chamada saindo da ponta cortada — em cima dela cobriria justamente o arco
   recém-criado. O tracejado diz "isto é material que saiu" sem texto, e separa
   a marca do glifo cheio da relação, que promete o contrário (que algo FICA). */
#solidSketch .sketch-canto-chamada{fill:none;stroke:var(--ink-soft);stroke-width:1;stroke-dasharray:2 2;opacity:.75;pointer-events:none}
#solidSketch .sketch-canto{fill:var(--surface);stroke:var(--ink-soft);stroke-width:1;stroke-dasharray:3 2;cursor:pointer;opacity:.92}
#solidSketch .sketch-canto.selected{fill:var(--accent-bg);stroke:var(--accent-d);stroke-width:1.6;stroke-dasharray:none}
#solidSketch text.sketch-canto-glifo{fill:var(--ink);font-weight:700;pointer-events:auto;cursor:pointer}
.sketch-canto-editor label{flex-direction:column;align-items:flex-start;gap:2px;font-size:11px;color:var(--ink-soft)}
.sketch-canto-editor input{width:74px;min-height:30px;padding:3px 5px;font-family:var(--mono);box-sizing:border-box}
.sketch-canto-editor [data-sketch-canto-unit]{font-size:11px;color:var(--ink-soft);align-self:center}

#solidSketch .sketch-construction{stroke-dasharray:7 4}
/* F5 — linha de centro: traço-ponto, como no desenho técnico (é o eixo da revolução). */
#solidSketch .sketch-construction.sketch-centro{stroke-dasharray:12 3 2 3}
/* F5 / SK-07 — aresta da face escolhida para o Converter. */
#solidSketch .sketch-referencia.selected{stroke:var(--accent);stroke-width:3;opacity:1}
/* F5 / SK-06 e SK-08 — cota conduzida (mede, não manda) e cota pendurada. */
#solidSketch .sketch-dim-text.conduzida{fill:var(--ink-soft);font-style:italic}
#solidSketch .sketch-dim-text.pendurada{fill:var(--accent-d);font-weight:600}
#solidSketch .sketch-trim-preview{stroke:#dc4545;stroke-width:5;fill:none;pointer-events:none;vector-effect:non-scaling-stroke}
/* Orientação fora do papel: não entra na exportação da prancha. */
#solidSheet .sheet-guide{position:sticky;top:0;z-index:2;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:6px;padding:10px 12px;font-size:13px;text-align:left;white-space:normal}
#solidSheet .sheet-review{background:var(--surface);color:var(--ink);padding:9px 12px;margin:6px 0 12px;border:1px solid var(--line);border-radius:6px;text-align:left;font-size:12px;white-space:normal}
#solidSheet .sheet-review summary{cursor:pointer;font-weight:600}
#solidSheet .sheet-review button{display:block;margin:6px 0;white-space:normal;text-align:left}
#solidSheet .sheet-review p{margin:8px 0;max-width:85ch}
#solidSheet .sheet-review-issue{color:var(--ink);border-left:3px solid var(--accent-d);
  padding:4px 8px;background:var(--surface-2)}
#solidSheet .sheet-review-check{display:flex;flex-direction:row;align-items:flex-start;
  gap:7px;margin:6px 0;max-width:75ch;line-height:1.4;cursor:pointer}
#solidSheet .sheet-review-check input{flex:none;width:17px;height:17px;margin:0}
#solidSheet #solidSheetRelease{margin:10px 0;padding:7px 12px;border:1px solid var(--accent-d);
  background:var(--accent-bg);color:var(--ink);border-radius:5px;cursor:pointer}
#solidSheet #solidSheetRelease:disabled{opacity:.45;cursor:not-allowed}
#solidWorkspace .cad-fita>#solidSheetTools{flex-wrap:nowrap;gap:0}
#solidSheetTools .cad-grupo-itens{flex-wrap:nowrap}
#solidSheetHint{display:none}
#solidSheet .sheet-anot.selecionada text{fill:#007c91}
#solidSheet .sheet-anot.selecionada path[stroke="#111"]{stroke:#007c91}
#solidSheet:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* Densidade ajustável: a folha recebe o espaço; comandos continuam em uma faixa. */
#solidWorkspace .cad-ribbon-heading{display:flex;align-items:center;justify-content:space-between;gap:8px}
#solidWorkspace .cad-ribbon-abas{min-width:0}
#solidWorkspace .cad-ribbon-settings{display:flex;align-items:center;gap:6px;flex:none;padding:2px 8px}
#solidWorkspace .cad-ribbon-settings select,#solidWorkspace .cad-ribbon-settings button{
  min-height:28px;width:auto;margin:0;padding:3px 8px;border:1px solid var(--line);border-radius:4px;
  background:var(--surface);color:var(--ink);font:inherit;font-size:11px;cursor:pointer}
#solidWorkspace.ribbon-collapsed .cad-ribbon-paineis{display:none}
#solidWorkspace .cad-fita:not([hidden]){flex-wrap:nowrap;scrollbar-width:thin}
#solidWorkspace .cad-fita .cad-grupo{flex-shrink:0;max-width:none}
#solidWorkspace .cad-fita .cad-grupo-itens{flex-wrap:nowrap;justify-content:flex-start}
/* Tela ESTREITA (abaixo de 900 px o CAD sai do foco): a faixa volta a QUEBRAR
   em linhas — rolar de lado esconde comando, e o contrato de 15/09 é nenhum
   comando fora da tela (test_cad_ampliado §8). Na bancada larga vale o
   nowrap com rolagem, que é o que o recolher/densidade da faixa supõem. */
@media (max-width:899px){
  #solidWorkspace .cad-fita:not([hidden]){flex-wrap:wrap}
  #solidWorkspace .cad-fita .cad-grupo{flex-shrink:1;max-width:100%}
  #solidWorkspace .cad-fita .cad-grupo-itens{flex-wrap:wrap}
}
#solidWorkspace[data-densidade="compacta"] .cad-fita:not([hidden]){min-height:0;padding:2px 6px}
#solidWorkspace[data-densidade="compacta"] .cad-fita .cad-grupo{padding-inline:4px}
#solidWorkspace[data-densidade="compacta"] .cad-fita .cad-grupo-itens button{
  width:48px;min-height:44px;padding:3px 2px;gap:2px;font-size:10px}
#solidWorkspace[data-densidade="compacta"] .cad-fita .cad-grupo-itens button .cad-ico{width:16px;height:16px}
#solidWorkspace[data-densidade="compacta"] .cad-fita .cad-rotulo{-webkit-line-clamp:2;line-clamp:2;max-width:46px}
#solidWorkspace[data-densidade="compacta"] .cad-grupo>span:not(.hint){font-size:9px;padding-top:1px}
#solidWorkspace[data-densidade="icones"] .cad-fita:not([hidden]){min-height:0;padding:2px 6px}
#solidWorkspace[data-densidade="icones"] .cad-fita .cad-grupo-itens button{
  width:32px;min-width:32px;min-height:32px;height:32px;justify-content:center;padding:6px}
#solidWorkspace[data-densidade="icones"] .cad-fita .cad-grupo-itens button .cad-ico{width:18px;height:18px}
#solidWorkspace[data-densidade="icones"] .cad-fita .cad-grupo-itens button:not(:has(.cad-ico)){width:auto;max-width:100px;font-size:11px}
#solidWorkspace[data-densidade="icones"] .cad-fita button .cad-rotulo{position:absolute;width:1px;height:1px;
  padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
#solidWorkspace[data-densidade="icones"] .cad-grupo>span:not(.hint){display:none}
#solidWorkspace #solidSheetTools select{align-self:center;height:30px;min-height:30px;width:auto;max-width:130px;margin:0;padding:3px 5px}
#solidWorkspace #solidSheetTools select#solidSheetDimType{max-width:112px}
#solidWorkspace .solid-viewbar{flex-wrap:wrap;row-gap:2px}
#solidWorkspace .sheet-nav{display:flex;align-items:center;gap:2px;margin-left:auto;padding:2px 4px}
#solidWorkspace .sheet-nav[hidden]{display:none}
#solidWorkspace .sheet-nav button{border:1px solid transparent;border-radius:4px;margin:0;padding:4px 7px;min-height:28px;font-size:11px}
#solidWorkspace .sheet-nav button .cad-ico{width:16px;height:16px}
#solidWorkspace .sheet-focus-tools{position:absolute;top:74px;right:12px;z-index:10;
  display:flex;align-items:center;gap:5px;padding:5px;background:var(--surface);
  border:1px solid var(--line-2);border-radius:6px;box-shadow:0 5px 16px #0004}
#solidWorkspace .sheet-focus-tools[hidden]{display:none}
#solidWorkspace .sheet-focus-tools label{display:flex;flex-direction:row;align-items:center;
  gap:5px;margin:0;font-size:11px}
#solidWorkspace .sheet-focus-tools select,#solidWorkspace .sheet-focus-tools button{
  width:auto;min-height:36px;margin:0;padding:5px 8px;background:var(--surface-2);
  color:var(--ink);border:1px solid var(--line);border-radius:4px;font:inherit;font-size:11px}
#solidWorkspace .sheet-focus-tools button[aria-pressed=true]{background:var(--accent-bg);border-color:var(--accent-d)}
#solidWorkspace .sheet-nav [data-sheet-zoom="1.25"] .cad-rotulo,#solidWorkspace .sheet-nav [data-sheet-zoom="0.8"] .cad-rotulo{
  position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
#solidSheetZoomInfo{min-width:44px;text-align:center;font-size:11px;font-variant-numeric:tabular-nums;color:var(--ink-soft)}
#solidWorkspace #solidSheet{display:flex;flex-direction:column;position:relative;padding:0;margin:0;
  border:0;border-radius:0;max-height:none;overflow:hidden}
#solidWorkspace #solidSheet[hidden]{display:none}
#solidWorkspace.sheet-active #solidCancel:disabled{display:none}
#solidSheet .sheet-info{flex:none;display:flex;align-items:center;gap:12px;padding:4px 10px;
  background:var(--surface-2);border-bottom:1px solid var(--line);min-height:28px;z-index:4}
#solidSheet .sheet-guide{position:static;flex:1;min-width:0;margin:0;padding:0;border:0;border-radius:0;
  background:none;font-size:11px;line-height:1.4;color:var(--ink)}
#solidSheet #solidSheetKeyboardToggle{flex:none;min-height:28px;padding:3px 7px;border:1px solid var(--line);
  border-radius:4px;background:var(--surface);color:var(--ink);font-size:11px;cursor:pointer}
#solidWorkspace .sheet-keyboard-panel{position:absolute;top:160px;right:14px;z-index:25;
  width:min(400px,calc(100% - 28px));max-height:min(65vh,620px);overflow:auto;box-sizing:border-box;
  padding:12px;display:grid;gap:9px;border:1px solid var(--line-2);border-radius:7px;
  background:var(--surface);color:var(--ink);box-shadow:0 12px 30px #0005}
#solidWorkspace .sheet-keyboard-panel[hidden],#solidWorkspace:not(.sheet-active) .sheet-keyboard-panel{display:none}
#solidWorkspace .sheet-keyboard-panel .sheet-keyboard-head{display:flex;align-items:center;justify-content:space-between}
#solidWorkspace .sheet-keyboard-panel label{display:grid;gap:4px;font-size:12px}
#solidWorkspace .sheet-keyboard-panel select{width:100%;max-height:300px;background:var(--surface);color:var(--ink)}
#solidWorkspace .sheet-keyboard-panel option{padding:3px 5px}
#solidWorkspace .sheet-keyboard-panel .sheet-keyboard-actions{display:flex;gap:5px;flex-wrap:wrap}
#solidWorkspace .sheet-keyboard-panel button{min-height:32px;padding:4px 9px;border:1px solid var(--line);
  border-radius:4px;background:var(--surface-2);color:var(--ink);cursor:pointer}
#solidWorkspace .sheet-keyboard-panel button:disabled{opacity:.5;cursor:not-allowed}
#solidWorkspace .sheet-keyboard-panel .sheet-large-toggle{display:flex;align-items:center;gap:6px}
#solidWorkspace.sheet-large-targets .cad-fita button,#solidWorkspace.sheet-large-targets #solidSheet #solidSheetKeyboardToggle,
#solidWorkspace.sheet-large-targets .sheet-keyboard-panel button{min-height:44px}
#solidSheet .sheet-review{flex:none;margin:0;padding:0;border:0;border-radius:0;background:none;font-size:11px}
#solidSheet .sheet-review summary{padding:4px;color:var(--ink-soft);font-weight:400}
#solidSheetReviewBody{position:absolute;right:8px;top:38px;z-index:5;width:min(480px,calc(100% - 16px));
  padding:8px 12px;box-sizing:border-box;max-height:calc(100% - 48px);overflow:auto;
  border:1px solid var(--line);border-radius:5px;background:var(--surface);box-shadow:0 8px 24px #0003}
#solidSheet .sheet-viewport{flex:1;min-width:0;min-height:0;overflow:auto;overscroll-behavior:contain;scrollbar-width:thin;touch-action:none}
#solidSheet .sheet-paper{display:flex;align-items:center;justify-content:center;box-sizing:border-box;
  width:max-content;min-width:100%;min-height:100%;padding:16px}
#solidWorkspace #solidSheet .sheet-paper>svg{flex:none;display:block;max-width:none;min-width:0;margin:0;background:#fff;border-radius:1px;overflow:visible}
#solidSheet.pan-ready .sheet-viewport,#solidSheet.pan-ready .sheet-viewport *{cursor:grab!important}
#solidSheet .sheet-viewport.panning,#solidSheet .sheet-viewport.panning *{cursor:grabbing!important}
#solidWorkspace button:focus-visible,#solidWorkspace select:focus-visible{outline:2px solid var(--cad-sel-line);outline-offset:2px}
#solidWorkspace .cad-fita,#solidSheet .sheet-viewport{scrollbar-color:var(--ink-soft) var(--surface-2)}
@media(max-width:1100px){
  #solidSheet .sheet-info{align-items:flex-start;gap:4px;flex-wrap:wrap}
  #solidSheet .sheet-guide{flex-basis:100%}
  #solidSheet .sheet-review summary{padding:0}
  #solidSheetReviewBody{top:60px}
}
@media(max-width:900px){
  #solidWorkspace.sheet-active{display:flex;height:85dvh;min-height:520px;overflow:hidden}
  #solidWorkspace.sheet-active.solid-expanded{height:100dvh;min-height:0}
  #solidWorkspace.sheet-active .solid-layout{position:relative;display:grid;grid-template-columns:minmax(0,1fr);min-height:0}
  #solidWorkspace.sheet-active .solid-canvas{display:flex;flex-direction:column;min-height:0}
  #solidWorkspace.sheet-active .solid-painel{position:absolute;inset:0 auto 0 0;z-index:15;width:min(280px,90%);box-shadow:6px 0 18px #0003}
  #solidWorkspace.sheet-active.panels-hidden .solid-painel{display:none}
  #solidWorkspace .cad-ribbon-heading{flex-wrap:wrap;gap:0}
  #solidWorkspace .cad-ribbon-settings{margin-left:auto}
  #solidWorkspace .sheet-nav{flex-wrap:wrap;justify-content:flex-start;width:100%;margin:0}
  #solidWorkspace .sheet-nav button{min-height:36px}
  #solidWorkspace .cad-ribbon-settings button,#solidWorkspace .cad-ribbon-settings select{min-height:32px}
  #solidWorkspace .sheet-focus-tools{top:90px;right:6px;max-width:calc(100% - 12px)}
  #solidWorkspace.sheet-active .solid-status{gap:4px 8px;flex-wrap:nowrap;min-height:30px;white-space:nowrap}
  #solidWorkspace.sheet-active .solid-status #solidStats,#solidWorkspace.sheet-active .solid-status #solidSaved{display:none}
  #solidWorkspace.sheet-active .solid-status #solidMessage{white-space:nowrap}
}
@media(pointer:coarse){
  #solidWorkspace[data-densidade] .cad-fita .cad-grupo-itens button{min-width:44px;min-height:44px}
}

/* Esboço: uma única fileira fixa. O restante abre sobre o desenho, sem mudar
   o viewBox nem deslocar vértices durante uma operação. */
#solidWorkspace.sketch-active .cad-ribbon{position:relative;z-index:12}
#solidWorkspace.sketch-active .cad-fita[data-fita="esboco"]{overflow:visible;min-height:0}
#solidWorkspace.sketch-active #solidSketchTools{position:relative;display:flex;height:48px;
  min-width:0;max-width:calc(100vw - 32px);overflow:visible}
#solidWorkspace.sketch-active #solidSketchTools>.sketch-tools:first-child{flex-wrap:nowrap;
  width:100%;min-width:0;height:48px;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin}
#solidWorkspace.sketch-active #solidSketchTools>.sketch-tools:first-child button{flex:none;min-height:44px}
#solidWorkspace.sketch-active #solidSketchTools .sketch-more-panel{position:absolute;top:calc(100% + 50px);
  left:calc(var(--painel-w) + 8px);z-index:20;display:flex;flex-direction:column;gap:5px;
  width:min(240px,calc(100vw - var(--painel-w) - 24px));max-height:min(55vh,420px);overflow:auto;
  padding:9px;box-sizing:border-box;background:var(--surface);color:var(--ink);
  border:1px solid var(--line-2);border-radius:7px;box-shadow:0 10px 30px #0005;
  pointer-events:none}
#solidWorkspace.sketch-active #solidSketchTools .sketch-more-panel button:not(:disabled),
#solidWorkspace.sketch-active #solidSketchTools .sketch-more-panel input,
#solidWorkspace.sketch-active #solidSketchTools .sketch-more-panel select,
#solidWorkspace.sketch-active #solidSketchTools .sketch-more-panel summary{pointer-events:auto}
#solidWorkspace.sketch-active #solidSketchTools .sketch-more-panel[hidden]{display:none}
#solidWorkspace.sketch-active #solidSketchTools .sketch-general-actions{flex:none}
#solidWorkspace.sketch-active #solidSketchTools .sketch-general-actions summary{cursor:pointer;
  border-radius:4px;padding:5px 7px;font-size:12px;font-weight:600}
#solidWorkspace.sketch-active #solidSketchTools .sketch-general-actions summary:hover{background:var(--surface-2)}
#solidWorkspace.sketch-active #solidSketchTools[data-sketch-mode="dimension"] .sketch-more-panel
  >:is(.sketch-edicao,.sketch-rel-editor,.sketch-rel-ent),
#solidWorkspace.sketch-active #solidSketchTools[data-sketch-mode="relation"] .sketch-more-panel
  >:is(.sketch-dim-editor,.sketch-edicao,.sketch-canto-editor,[data-sketch-dim-options]),
#solidWorkspace.sketch-active #solidSketchTools[data-sketch-mode="corner"] .sketch-more-panel
  >:is(.sketch-dim-editor,.sketch-edicao,.sketch-rel-ent,[data-sketch-dim-options]),
#solidWorkspace.sketch-active #solidSketchTools[data-sketch-mode="corner"] .sketch-more-panel
  >.sketch-rel-editor:not(.sketch-canto-editor){display:none}
#solidWorkspace.sketch-active.panels-hidden #solidSketchTools .sketch-more-panel{left:8px;width:min(240px,calc(100vw - 24px))}
#solidWorkspace.sketch-active #solidSketchTools .sketch-more-panel .sketch-tools{flex-wrap:wrap;flex:none}
#solidWorkspace.sketch-active #solidSketchTools .sketch-more-panel .sketch-tools button{width:auto;
  min-height:32px;flex-direction:row;gap:5px;padding:4px 8px;font-size:11px}
#solidWorkspace.sketch-active #solidSketchTools .sketch-more-panel .sketch-tools .cad-rotulo{
  max-width:none;-webkit-line-clamp:1;line-clamp:1;white-space:nowrap}
#solidWorkspace.sketch-active #solidSketchHint{position:absolute;top:100%;left:calc(var(--painel-w) + 8px);
  z-index:5;width:max-content;max-width:calc(100% - var(--painel-w) - 16px);height:auto;min-height:0;
  padding:2px 7px;background:var(--surface-2);border:1px solid var(--line);border-radius:0 0 4px 4px;
  white-space:nowrap;text-overflow:ellipsis;pointer-events:none}
#solidWorkspace.sketch-active.panels-hidden #solidSketchHint{left:8px;max-width:calc(100% - 16px)}
#solidWorkspace.sketch-active #solidSketchWrap{padding:4px}
#solidWorkspace.sketch-active #solidSketchWrap>.sketch-help{position:absolute;bottom:4px;left:4px;
  z-index:3;max-width:calc(100% - 8px);padding:2px 6px;border:1px solid var(--line);
  border-radius:3px;background:var(--surface);pointer-events:none;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
@media(max-width:900px){
  #solidWorkspace.sketch-active #solidSketchTools{height:48px;overflow:visible}
  #solidWorkspace.sketch-active #solidSketchHint{left:8px;max-width:calc(100% - 16px)}
}

/* ── Barra de comandos (UX-17): tecla S ou Ctrl+K ─────────────────────────
   Fixa no topo-centro da janela, como a busca de comandos dos CADs de mesa.
   Nada nela recebe o clique do 3D: é uma camada modal curta. */
#solidWorkspace .cad-paleta{position:fixed;top:14vh;left:50%;transform:translateX(-50%);z-index:70;
  width:min(92vw,460px);background:var(--surface);border:1px solid var(--line);border-radius:9px;
  box-shadow:0 18px 44px rgba(0,0,0,.28);padding:8px;display:flex;flex-direction:column;gap:6px}
#solidWorkspace .cad-paleta[hidden]{display:none}
#solidWorkspace .cad-paleta input{width:100%;min-width:0;font:inherit;font-size:16px;padding:8px 10px;
  border:1px solid var(--line);border-radius:6px;background:var(--surface-2,var(--surface));color:var(--ink)}
#solidWorkspace .cad-paleta ul{list-style:none;margin:0;padding:0;max-height:46vh;overflow:auto}
#solidWorkspace .cad-paleta li{padding:6px 10px;border-radius:5px;cursor:pointer;font-size:13px;color:var(--ink)}
#solidWorkspace .cad-paleta li.atual,#solidWorkspace .cad-paleta li:hover{background:var(--cad-sel)}
#solidWorkspace .cad-paleta li.vazio{cursor:default;color:var(--muted)}
#solidWorkspace .cad-paleta .hint{margin:0;font-size:11px;color:var(--muted)}
/* Filtro de seleção (UX-15): desligado fica apagado, para ler de relance. */
#solidWorkspace [data-solid-filtro][aria-pressed=false]{opacity:.45}
#solidWorkspace [data-solid-filtro][aria-pressed=true]{background:var(--cad-sel)}

/* Equações e configurações (UX-21/22) — mesma casca do painel do cilindro. */
#solidWorkspace .solid-vars table{width:100%;border-collapse:collapse;font-size:12.5px;margin:4px 0 8px}
#solidWorkspace .solid-vars th{text-align:left;font-weight:600;color:var(--muted);padding:3px 4px}
#solidWorkspace .solid-vars td{padding:2px 4px;vertical-align:middle}
#solidWorkspace .solid-vars td input[type=text]{width:100%;min-width:0;font:inherit;font-size:13px;padding:4px 6px;border:1px solid var(--line);border-radius:4px;background:var(--surface);color:var(--ink)}
#solidWorkspace .solid-vars .valor{font-family:var(--mono);white-space:nowrap}
#solidWorkspace .solid-vars .valor.erro{color:#b3261e}
#solidWorkspace .solid-vars-erro{color:#b3261e;font-weight:600}
#solidWorkspace .solid-vars h4{margin:12px 0 4px}
#solidWorkspace .cad-config{display:flex;align-items:center;gap:4px;font-size:12px}
#solidWorkspace .cad-config[hidden]{display:none}
#solidWorkspace input.tem-formula{border-color:var(--accent-d);background:var(--accent-bg)}
@media (max-width:560px){#solidWorkspace .solid-vars td input[type=text]{font-size:16px}}

/* Interferência na montagem (UX-08) */
#solidWorkspace .solid-interf{margin:8px 0;padding:8px 10px;border-radius:7px;font-size:12.5px;border:1px solid var(--line)}
#solidWorkspace .solid-interf[hidden]{display:none}
#solidWorkspace .solid-interf.ok{color:var(--ink-soft)}
#solidWorkspace .solid-interf.alerta{border-color:#b3261e;background:rgba(179,38,30,.07);color:var(--ink)}
#solidWorkspace .solid-interf.erro{color:#b3261e}
#solidWorkspace .solid-interf ul{margin:6px 0;padding-left:16px}
#solidWorkspace .solid-interf button{background:none;border:0;padding:2px 0;color:var(--ink);font:inherit;cursor:pointer;text-align:left;text-decoration:underline dotted}

/* Posicionamentos (UX-07) */
#solidWorkspace .arv-gdl{color:var(--muted);font-size:11px}
#solidWorkspace .arv-grupo>span{display:block;margin:8px 0 2px;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
#solidWorkspace .arv-grupo ol{margin:0;padding-left:14px;font-size:12px;color:var(--ink-soft)}
#solidWorkspace .solid-mates{padding-left:18px;font-size:12.5px}
#solidWorkspace .solid-mates button{background:none;border:0;cursor:pointer;color:var(--muted)}
/* curso do posicionamento-limite: o Valor e o curso trocam de lugar pelo tipo,
   e as regras de label do painel dariam display por cima do [hidden] */
#solidWorkspace #solidMateFields [data-mate-campo][hidden]{display:none}
#solidWorkspace #solidMateFields .solid-mate-curso{display:grid;grid-template-columns:1fr 1fr;gap:6px 10px}
#solidWorkspace #solidMateFields .solid-mate-curso .hint{grid-column:1/-1;margin:0}
#solidWorkspace .solid-mate-medido{color:var(--muted)}
/* o valor e o curso ficam NA linha do posicionamento: com a largura cheia de
   .solid-fields, "curso 0 a 20 mm" empilhava em cinco linhas */
#solidWorkspace #solidMateFields .solid-mates input.solid-mate-valor{display:inline-block;width:8ch;padding:3px 5px;font-size:12.5px}

/* Versões (UX-24) */
/* Importar do SolidWorks: a lista de montagens do pacote e o bloco do componente */
#solidWorkspace .solid-sw-lista{list-style:none;margin:4px 0 8px;padding:0;max-height:44vh;overflow:auto;font-size:12.5px}
#solidWorkspace .solid-sw-lista li label{display:flex;gap:10px;align-items:center;padding:6px 4px;border-bottom:1px solid var(--line);cursor:pointer}
#solidWorkspace .solid-sw-lista img,#solidWorkspace .solid-sw-sem{width:72px;height:54px;object-fit:contain;flex:none;background:var(--surface);border:1px solid var(--line);border-radius:4px}
#solidWorkspace .solid-sw-info{display:flex;gap:10px;align-items:flex-start;margin-top:8px}
#solidWorkspace .solid-sw-info img{width:96px;height:72px;object-fit:contain;flex:none;background:var(--surface);border:1px solid var(--line);border-radius:4px}
/* Prancha lida do SolidWorks: a folha original ocupa a largura do painel — é
   para comparar com a folha gerada, então tem de dar para ler. */
#solidWorkspace .solid-sheet-sw{margin-top:8px}
#solidWorkspace .solid-sheet-sw figure{margin:6px 0}
#solidWorkspace .solid-sheet-sw img{display:block;width:100%;height:auto;background:#fff;border:1px solid var(--line);border-radius:4px}
#solidWorkspace .solid-sheet-sw ul{margin:4px 0 0 1.1em;padding:0}
#solidWorkspace .solid-versoes{padding-left:18px;font-size:12.5px;max-height:44vh;overflow:auto}
#solidWorkspace .solid-versoes li{display:flex;gap:8px;align-items:center;justify-content:space-between;padding:3px 0}
#solidWorkspace #solidVersoesPanel[hidden]{display:none}
/* Creo View (.pvz): a lista de peças com o estado da conversão e as ações de cada uma */
/* A lista de peças não pode encobrir o progresso nem o botão Cancelar.
   O estado do painel fica preservado para a retomada após erro/cancelamento. */
#solidWorkspace.cad-ocupado #solidCreoPanel{display:none}
#solidWorkspace .solid-creo-rolagem{max-height:46vh;overflow:auto;border:1px solid var(--line);border-radius:6px}
#solidWorkspace .solid-creo-tabela{width:100%;border-collapse:collapse;font-size:12px;margin:0}
#solidWorkspace .solid-creo-tabela th{position:sticky;top:0;background:var(--surface-2);text-align:left;padding:5px 6px;font-weight:600;color:var(--muted);z-index:1}
#solidWorkspace .solid-creo-tabela td{padding:4px 6px;border-top:1px solid var(--line);vertical-align:middle}
#solidWorkspace .solid-creo-tabela .mono{font-family:var(--mono);white-space:nowrap}
#solidWorkspace .solid-creo-acoes{white-space:nowrap;text-align:right}
/* fora de `.cad-mini-actions` o botão não herda o tema (o mesmo defeito do ✕
   dos materiais): no escuro saía o fundo cinza-claro do navegador com o texto
   claro do tema — Abrir/STEP/.ol/.pvz ilegíveis */
#solidWorkspace .solid-creo-acoes button{font:inherit;font-size:11.5px;padding:3px 7px;margin-left:3px;min-height:26px;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:5px;cursor:pointer}
#solidWorkspace .solid-creo-acoes button:hover:not(:disabled){background:var(--accent-bg);border-color:var(--accent-d)}
@media (max-width:560px){#solidWorkspace .solid-creo-acoes button{min-height:36px;padding:6px 9px}}

/* Barra de retorno (UX-10) */
#solidWorkspace .arv-retorno{display:flex;align-items:center;gap:4px;margin:3px 0;padding:2px 6px;border-radius:4px;
  background:var(--accent-bg);color:var(--accent-d);font-size:11.5px;font-weight:600;cursor:grab;list-style:none}
#solidWorkspace .arv-retorno span{flex:1}
#solidWorkspace .arv-retorno button{background:none;border:0;cursor:pointer;color:var(--accent-d);padding:0 3px;font-size:12px}
#solidWorkspace .arv-retornado{opacity:.45}

/* Relações por entidade no esboço (UX-05) */
.sketch-rel-ent[hidden]{display:none!important}
.sketch-rel-ent button:disabled{opacity:.4}

/* O seletor do tipo de cota mora na faixa, entre botões de 52 px: com a fonte de
   16 px do formulário ele media 116 px e empurrava o grupo Medir para uma 2ª
   linha em 1400 px, roubando ~75 px da área gráfica. No celular (≤900 px) a
   fonte de 16 px volta — é ela que impede o zoom automático do iOS. */
@media(min-width:901px){
  #solidWorkspace .cad-fita #solidMedirModo{font-size:12px;padding:4px 18px 4px 6px;max-width:92px;align-self:center}
}

/* "Gerar com este esboço": o recurso escolhido a partir do contorno desenhado.
   Segmentado porque as opções são EXCLUSIVAS — o esboço gera uma coisa só. */
#solidWorkspace .solid-gerar{display:flex;flex-direction:column;gap:4px;margin:0 0 12px}
#solidWorkspace .solid-gerar-itens{display:grid;grid-template-columns:repeat(2,1fr);gap:4px}
#solidWorkspace .solid-gerar-itens button{display:flex;align-items:center;gap:6px;min-height:36px;
  padding:6px 8px;border:1px solid var(--line);border-radius:5px;background:var(--surface);
  color:var(--ink);font:inherit;font-size:12px;cursor:pointer;text-align:left}
#solidWorkspace .solid-gerar-itens button .cad-ico{width:18px;height:18px;flex:none}
#solidWorkspace .solid-gerar-itens button:hover:not(:disabled){background:var(--cad-sel);border-color:var(--cad-sel-line)}
#solidWorkspace .solid-gerar-itens button[aria-pressed=true]{background:var(--accent-bg);border-color:var(--accent-line);font-weight:600}

/* Esboço sem recurso: cada botão diz se o esboço SERVE para aquele recurso. */
#solidWorkspace .solid-gerar-itens button>span{display:flex;flex-direction:column;gap:1px;min-width:0}
#solidWorkspace .solid-gerar-itens button small{font-size:10.5px;font-weight:400;color:var(--ink-soft);white-space:normal}
#solidWorkspace .solid-gerar-itens button.serve small{color:var(--ok,#2f7d4f)}
#solidWorkspace .solid-gerar-itens button.nao-serve small{color:var(--danger,#b3261e)}
/* Escolhendo o recurso de um esboço, cada botão carrega o PORQUÊ de servir ou
   não — em duas colunas de 125 px a razão quebrava em quatro linhas. Uma
   coluna só, e a razão numa linha que o olho lê de uma vez. */
#solidWorkspace .solid-gerar-escolher .solid-gerar-itens{grid-template-columns:1fr}
#solidWorkspace .solid-gerar.pedindo .solid-gerar-itens button{outline:2px solid var(--accent);outline-offset:1px}
/* O que o esboço precisa: lista de conferência que se marca enquanto se desenha. */
#solidWorkspace .solid-requisitos{margin:-4px 0 12px;padding:8px 10px;border:1px solid var(--line);border-radius:6px;background:var(--surface-2,var(--surface))}
#solidWorkspace .solid-requisitos ul{list-style:none;margin:4px 0 0;padding:0;display:grid;gap:3px}
#solidWorkspace .solid-requisitos li{display:flex;gap:6px;font-size:12px;line-height:1.35}
#solidWorkspace .solid-requisitos li>span{flex:none;width:12px;font-weight:700}
#solidWorkspace .solid-requisitos li.ok>span{color:var(--ok,#2f7d4f)}
#solidWorkspace .solid-requisitos li.falta{color:var(--danger,#b3261e)}
#solidWorkspace .solid-requisitos li.info{color:var(--ink-soft)}
#solidWorkspace .solid-requisitos li.pendente{color:var(--ink-soft)}

/* MINI BARRA CONTEXTUAL (fase F): perto do cursor, pequena, e sem roubar a
   peça — só os botões recebem o toque. */
.solid-mini{position:fixed;z-index:60;display:flex;gap:2px;padding:3px;border:1px solid var(--line);border-radius:8px;background:var(--surface);box-shadow:0 6px 18px rgba(0,0,0,.18)}
.solid-mini[hidden]{display:none}
.solid-mini button{width:32px;height:32px;display:grid;place-items:center;padding:0;border:0;border-radius:6px;background:transparent;color:var(--ink);cursor:pointer}
.solid-mini button:hover,.solid-mini button:focus-visible{background:var(--surface-2)}
.solid-mini svg{width:18px;height:18px}
@media(max-width:620px){.solid-mini button{width:38px;height:38px}}
/* Escolha do recurso ao concluir o esboço: poucos botões, então com o NOME
   ao lado do ícone — "Ressalto" e "Corte" não podem ser adivinhados. */
.solid-mini.solid-mini-gerar{flex-direction:column;align-items:stretch}
.solid-mini.solid-mini-gerar button{width:auto;height:30px;display:flex;align-items:center;justify-content:flex-start;gap:8px;padding:0 10px 0 6px;font:inherit;font-size:13px;white-space:nowrap}
.solid-mini-gerar .solid-mini-titulo{padding:2px 8px 4px;font-size:11px;color:var(--muted,#667)}

/* MENU RADIAL DO GESTO (fases G e H): centrado onde o botão desceu, sem
   receber ponteiro — quem decide o setor é o ângulo do cursor, não o hover. */
.solid-gesto{position:fixed;z-index:70;transform:translate(-50%,-50%);pointer-events:none;display:flex;flex-direction:column;align-items:center}
.solid-gesto[hidden]{display:none}
.gesto-svg{overflow:visible;filter:drop-shadow(0 6px 16px rgba(0,0,0,.22))}
.gesto-setor>path{fill:var(--surface);stroke:var(--line);stroke-width:1}
.gesto-setor.ativo>path{fill:var(--accent)}
.gesto-setor svg{width:20px;height:20px;color:var(--ink);stroke-width:2}
.gesto-setor.ativo svg{color:#fff}
.gesto-setor text{font:11px var(--sans,system-ui);fill:var(--ink)}
.gesto-setor.ativo text{fill:#fff}
.gesto-centro{fill:var(--surface-2);stroke:var(--line)}
.gesto-legenda{margin:4px 0 0;padding:3px 8px;border-radius:6px;background:var(--surface);border:1px solid var(--line);font:12px var(--sans,system-ui);color:var(--ink);white-space:nowrap}
/* O painel de gestos é PREFERÊNCIA, não parte da peça: flutua sobre a área
   gráfica em vez de empurrá-la. No fluxo ele espremia o 3D numa tira. */
#solidWorkspace .solid-gestos{position:fixed;z-index:65;right:24px;top:120px;width:min(560px,calc(100vw - 32px));
  max-height:calc(100vh - 150px);overflow:auto;margin:0;box-shadow:0 12px 32px rgba(0,0,0,.22);background:var(--surface)}
#solidWorkspace .solid-gestos[hidden]{display:none}
#solidWorkspace .solid-gestos select{font:13px var(--sans,system-ui);padding:4px 6px;min-height:32px}
.solid-gestos-perfis{display:flex;gap:4px;flex-wrap:wrap;margin:6px 0}
.solid-gestos-perfis button{padding:5px 10px;border:1px solid var(--line);border-radius:6px;background:var(--surface-2);color:var(--ink);font:13px var(--sans,system-ui);cursor:pointer}
.solid-gestos-perfis button[aria-pressed="true"]{background:var(--accent);color:#fff;border-color:var(--accent)}
.solid-gestos-itens{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:6px;margin:6px 0}
.solid-gestos-itens label{display:flex;flex-direction:column;gap:2px;font-size:12px}
.solid-gestos-itens small{color:var(--muted)}
.solid-gestos-previa{display:flex;justify-content:center;margin:6px 0}
.solid-gestos-previa .gesto-legenda{display:none}

/* Ferramentas do esboço ocupam apenas a faixa contextual acima da folha. */
.sheet-draft { padding:8px 12px; background:var(--surface, #f6f7f9); color:var(--ink, #292d31); border-bottom:1px solid var(--line, #60666c); }
.sheet-draft[hidden] { display:none; }
.sheet-draft-controls { display:flex; align-items:center; flex-wrap:wrap; gap:8px; }
.sheet-draft-controls label { display:flex; align-items:center; gap:5px; }
.sheet-draft-controls select { max-width:220px; }
.sheet-draft-controls input[type="number"] { width:72px; }
.sheet-draft-controls strong { margin-right:8px; }
#solidSheetDraftStatus { margin-top:6px; font-size:.85rem; color:inherit; }
.sheet-draft button:focus-visible,.sheet-draft select:focus-visible { outline:2px solid #f1b095; outline-offset:2px; }
[data-sheet-sketch] { cursor:move; }
@media(max-width:900px) { .sheet-draft { padding:6px 8px; } .sheet-draft-controls { gap:6px; } }

#solidWorkspace .sheet-draft-controls label { color:var(--ink); font-size:12px; }
#solidWorkspace .sheet-draft-controls button,#solidWorkspace .sheet-draft-controls select,#solidWorkspace .sheet-draft-controls input { font-family:inherit; font-size:12px; }
#solidWorkspace .sheet-draft-controls button { padding:6px 9px; border:1px solid var(--line); border-radius:4px; background:var(--surface); color:var(--ink); }
#solidWorkspace .sheet-draft-controls button:disabled { opacity:.55; cursor:default; }
#solidWorkspace .sheet-draft-controls button:not(:disabled):hover { border-color:var(--accent); }
#solidWorkspace .sheet-draft-controls [hidden] { display:none; }
#solidWorkspace .sheet-draft-controls select { padding:6px; }

/* Campos do documento paramétrico compartilham o tema e a densidade do painel. */
#solidDrawFields .cad-section-bodies label.solid-check{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:8px}
#solidDrawFields .cad-section-bodies label.solid-check input{width:16px;height:16px;flex:0 0 16px;margin:0}
#solidDrawFields #solidParamValue,#solidDrawFields [data-param-point],#solidDrawFields [data-param-value]{display:block;width:100%;box-sizing:border-box;background:var(--bg);color:var(--ink);border:1px solid var(--line-2);border-radius:6px;padding:8px 10px;font:inherit;font-variant-numeric:tabular-nums;}

/* MENUS SUSPENSOS DA FAIXA (2026-10-15): o botão parece os outros, com uma seta
   que diz que abre; o painel é fixo (a faixa rola e cortaria um absoluto) e
   lista os comandos em linhas, ícone e nome inteiro. */
#solidWorkspace .cad-flyout{display:flex}
#solidWorkspace .cad-fita [data-flyout-toggle] .cad-rotulo::after{content:' ▾'}
#solidWorkspace .cad-fita [data-flyout-toggle][aria-expanded=true]{background:var(--cad-sel);border-color:var(--cad-sel-line)}
#solidWorkspace .cad-flyout-itens{position:fixed;z-index:60;display:flex;flex-direction:column;gap:1px;
  min-width:200px;padding:4px;background:var(--surface);border:1px solid var(--line);
  border-radius:7px;box-shadow:0 8px 24px rgba(0,0,0,.18)}
#solidWorkspace .cad-flyout-itens[hidden]{display:none}
#solidWorkspace .cad-fita .cad-flyout-itens button{width:auto;min-height:30px;flex-direction:row;
  justify-content:flex-start;gap:8px;padding:4px 10px;font-size:12px;text-align:left}
#solidWorkspace .cad-fita .cad-flyout-itens .cad-rotulo{max-width:none;-webkit-line-clamp:1;line-clamp:1;white-space:nowrap}
/* O painel do estudo permanece sobre a área 3D, com rolagem própria. */
#solidWorkspace .solid-estudo{position:absolute;right:12px;top:64px;bottom:12px;width:320px;max-width:calc(100% - 24px);z-index:8;overflow:auto;overscroll-behavior:contain;padding:12px;background:var(--surface);color:var(--ink);border:1px solid #747b81;border-radius:8px;box-shadow:0 4px 22px #0004;font-size:12px;}
#solidWorkspace .solid-estudo[hidden]{display:none;}
#solidWorkspace .solid-estudo .estudo-cab{display:flex;align-items:center;justify-content:space-between;font-size:14px;}
#solidWorkspace .solid-estudo button,#solidWorkspace .solid-estudo input,#solidWorkspace .solid-estudo select{font:inherit;color:var(--ink);background:var(--surface-2);border:1px solid #737b83;border-radius:4px;padding:5px;min-width:0;}
#solidWorkspace .solid-estudo button{cursor:pointer;min-height:30px;}
#solidWorkspace .solid-estudo button:hover{border-color:var(--accent-d);background:var(--accent-bg);}
#solidWorkspace .solid-estudo button:focus-visible,#solidWorkspace .solid-estudo input:focus-visible,#solidWorkspace .solid-estudo select:focus-visible{outline:2px solid #8bc4ee;outline-offset:2px;}
#solidWorkspace .solid-estudo label{display:flex;flex-direction:column;gap:4px;min-width:0;}
#solidWorkspace .solid-estudo select[multiple],#solidWorkspace .solid-estudo [data-e="quadros"]{width:100%;}
#solidWorkspace .solid-estudo .estudo-linha{display:flex;gap:6px;align-items:end;margin:7px 0;flex-wrap:wrap;}
#solidWorkspace .solid-estudo .estudo-linha>label,#solidWorkspace .solid-estudo .estudo-linha>input,#solidWorkspace .solid-estudo .estudo-linha>select{flex:1;min-width:60px;}
#solidWorkspace .solid-estudo .estudo-linha input{max-width:100%;box-sizing:border-box;}
#solidWorkspace .solid-estudo .estudo-campos{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;margin-bottom:8px;}
#solidWorkspace .solid-estudo .estudo-campos input{width:100%;box-sizing:border-box;}
#solidWorkspace .solid-estudo fieldset{margin:10px 0;border:1px solid #6a737a;border-radius:4px;padding:8px;}
#solidWorkspace .solid-estudo summary{padding:8px 0;cursor:pointer;font-weight:600;}
#solidWorkspace .solid-estudo details{border-bottom:1px solid #646d75;padding-bottom:7px;}
#solidWorkspace .solid-estudo input[type="range"]{width:100%;box-sizing:border-box;}
#solidWorkspace .solid-estudo [data-e="loop"]{accent-color:#e5a17a;}
#solidWorkspace .solid-estudo .hint{font-size:11px;line-height:1.5;margin:7px 0;}
@media(max-width:800px){#solidWorkspace .solid-estudo{width:260px;top:58px;right:6px;bottom:6px;padding:8px;}}

.estudo-eixos{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:7}.estudo-eixos span{position:absolute;font:bold 13px sans-serif;text-shadow:0 1px 2px #fff;background:#fffd;border-radius:3px;padding:2px}.estudo-eixo-0{color:#bc2828}.estudo-eixo-1{color:#16802f}.estudo-eixo-2{color:#2959c4}

#solidWorkspace .solid-estudo .estudo-cab{position:sticky;top:-12px;z-index:2;background:var(--surface);padding:8px 0;border-bottom:1px solid var(--line)}
#solidViewer .cad-gpu-canvas{position:absolute;inset:0;z-index:0;pointer-events:none;}
#solidViewer .cad-gpu-overlay{position:relative;z-index:1;}
.cad-gpu-stats{position:absolute;bottom:12px;right:12px;z-index:4;padding:5px 8px;border-radius:4px;background:var(--surface);color:var(--ink);font-size:11px;font-variant-numeric:tabular-nums;pointer-events:none;}
#solidWorkspace .solid-gpu-panel{position:absolute;right:12px;top:64px;bottom:12px;width:340px;max-width:calc(100% - 24px);box-sizing:border-box;overflow:auto;overscroll-behavior:contain;z-index:12;padding:12px;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:8px;font-size:12px;}
#solidWorkspace .solid-gpu-panel[hidden]{display:none;}
#solidWorkspace .solid-gpu-panel header{display:flex;align-items:center;justify-content:space-between;gap:12px;position:sticky;top:-12px;background:var(--surface);padding:8px 0;z-index:1;border-bottom:1px solid var(--line);}
#solidWorkspace .solid-gpu-panel h3{margin:0;font-size:15px;}
#solidWorkspace .solid-gpu-panel button,#solidWorkspace .solid-gpu-panel select{background:var(--surface-2);color:var(--ink);border:1px solid var(--line);border-radius:4px;min-height:32px;padding:5px 8px;font:inherit;cursor:pointer;}
#solidWorkspace .solid-gpu-panel label{display:flex;flex-direction:column;gap:5px;margin:10px 0;color:var(--ink);font-size:12px;}
#solidWorkspace .solid-gpu-panel label.gpu-switch{flex-direction:row;align-items:center;gap:8px;line-height:1.4;}
#solidWorkspace .solid-gpu-panel .gpu-switch input{width:16px;height:16px;flex:none;margin:0;accent-color:var(--accent-d);}
#solidWorkspace .solid-gpu-panel input[type="range"]{width:100%;accent-color:var(--accent-d);}
#solidWorkspace .solid-gpu-panel fieldset{margin:16px 0 10px;padding:0 8px 6px;border:1px solid var(--line);border-radius:4px;}
#solidWorkspace .solid-gpu-panel legend{padding:0 4px;font-weight:600;}
#solidWorkspace .solid-gpu-panel .hint{font-size:11px;line-height:1.5;color:var(--ink-soft);margin:8px 0;}
#solidWorkspace .solid-gpu-panel .gpu-actions{display:flex;gap:6px;flex-wrap:wrap;margin:14px 0 10px;}
#solidWorkspace .solid-gpu-panel [data-g="aplicar"]{background:var(--accent-bg);border-color:var(--accent-d);}
#solidWorkspace .solid-gpu-panel button:hover{background:var(--cad-sel);}
#solidWorkspace .solid-gpu-panel button:disabled{opacity:.5;cursor:not-allowed;}
#solidWorkspace .solid-gpu-panel dl{border-top:1px solid var(--line);padding-top:10px;line-height:1.4;}
#solidWorkspace .solid-gpu-panel dt{font-weight:600;margin-top:8px;}
#solidWorkspace .solid-gpu-panel dd{margin:3px 0 0;overflow-wrap:anywhere;color:var(--ink-soft);}
@media(max-width:800px){#solidWorkspace .solid-gpu-panel{width:290px;right:6px;top:58px;bottom:6px;padding:8px;}}
