/* ORBIT Empresa · o sistema visual: as fichas, as letras, as medidas e os componentes partilhados.

   Escuro sempre, com as regras da casa: a escala 4/8 nos espaços, o estado junto
   ao nome, nada abaixo de 11 px (12 no que se lê no telemóvel, 16 nas mensagens do Chat), os campos com contorno a 3:1,
   ícones de linha e nenhuma caixa do browser.

   Como se usa:
   - As cores vêm só das fichas (o bloco a seguir). A paleta desta instalação (a do ORBIT ou a cor da casa) chega pelo
     /aparencia.css, que o servidor gera (app/aparencia.py) e que se liga DEPOIS deste ficheiro: troca só o acento.
   - Todas as classes têm o prefixo o- (convivem com o estilo.css antigo sem se pisarem); as variantes levam -- (o-btn--primario)
     e os estados vão por atributos: aria-current, aria-pressed, aria-checked, aria-selected, aria-expanded, aria-invalid,
     aria-busy, disabled e hidden.
   - O bloco das fichas tem a especificidade de :root:root:root de propósito: ganha às fichas antigas do estilo.css (que as
     redefine em modo escuro com mais peso) enquanto as duas folhas convivem. O /aparencia.css usa o mesmo seletor.
   - As letras (IBM Plex Sans variável e Mono 400/500/600, só o latin) servem-se do próprio OS: /fontes/ (licença OFL).
   - Os ícones (linha, viewBox 24, traço 1,6) e os comportamentos (menus, folhas, copiar) estão no visual.js. */

/* ── As letras ─────────────────────────────────────────────────────────────────────────────────────────────────── */
@font-face {
  font-family: 'IBM Plex Sans'; font-style: normal; font-weight: 100 700; font-display: swap;
  src: url('/fontes/plex-sans-var.v1.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329,
    U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Mono'; font-style: normal; font-weight: 400; font-display: swap;
  src: url('/fontes/plex-mono-400.v1.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329,
    U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Mono'; font-style: normal; font-weight: 500; font-display: swap;
  src: url('/fontes/plex-mono-500.v1.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329,
    U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Mono'; font-style: normal; font-weight: 600; font-display: swap;
  src: url('/fontes/plex-mono-600.v1.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329,
    U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ── As fichas ─────────────────────────────────────────────────────────────────────────────────────────────────── */
:root:root:root {
  color-scheme: dark;
  /* as superfícies: a profundidade faz-se por degraus de fundo, não por sombras */
  --void: #0A0B0E;          /* o fundo da página, o terminal, o código */
  --painel: #0D0F14;        /* o cabeçalho, as barras, os cartões, as janelas */
  --painel-2: #11141A;      /* os campos, os botões, o balão do «Tu», o selecionado */
  --painel-3: #161A22;      /* os avatares, o aviso rápido, o trilho do interruptor */
  /* as linhas (sempre 1 px): a 10 % e 16 % são decorativas; a dos campos dá 3:1 (um campo tem de parecer um campo) */
  --linha: rgb(255 255 255 / .10);
  --linha-2: rgb(255 255 255 / .16);
  --linha-fraca: rgb(255 255 255 / .055);
  --linha-campo: rgb(255 255 255 / .36);
  --hover: rgb(255 255 255 / .05);
  /* o texto: 15,6 · 7,9 · 6,1:1 no painel (o ink-3 clareado para passar também nos fundos tingidos; neles, só ink e ink-2) */
  --ink: #E6E8EC;
  --ink-2: #A3A7B0;
  --ink-3: #8D919B;
  /* o acento: a paleta ORBIT. O /aparencia.css troca estes sete (a cor da casa) */
  --accent: #FF8A3D;                         /* o preenchimento: botão principal, traço do ativo, barras (3:1 no painel) */
  --accent-rgb: 255 138 61;
  --sobre-accent: #0A0B0E;                   /* a letra por cima do preenchimento (4,5:1 ou mais) */
  --accent-texto: #FF8A3D;                   /* o acento como texto, ícone ou anel de foco (4,5:1 em todos os fundos) */
  --accent-texto-rgb: 255 138 61;
  --accent-linha: rgb(255 138 61 / .55);     /* o contorno dos selecionados (3:1) */
  --accent-fundo: rgb(255 138 61 / .14);     /* o fundo dos selecionados */
  --marca: #C9A23A;                          /* o glifo da órbita: igual nas duas paletas */
  /* os estados: um estado nunca é só cor (leva sempre a palavra e, quando cabe, o ícone) */
  --ok: #7CC447; --ok-fundo: rgb(124 196 71 / .12); --ok-linha: rgb(124 196 71 / .5);
  --aviso: #E2BE52; --aviso-fundo: rgb(226 190 82 / .12); --aviso-linha: rgb(226 190 82 / .5);
  --erro: #F0645B; --erro-fundo: rgb(240 100 91 / .12); --erro-linha: rgb(240 100 91 / .65);
  --apoio: #3FB68B; --apoio-fundo: rgb(63 182 139 / .22); --apoio-linha: rgb(63 182 139 / .6);
  /* os véus e as camadas que flutuam (só estas levam sombra) */
  --veu: rgb(5 6 8 / .72); --veu-forte: rgb(5 6 8 / .86); --veu-leve: rgb(5 6 8 / .6);
  --sombra-flutua: 0 16px 48px rgb(0 0 0 / .5), 0 2px 8px rgb(0 0 0 / .32);
  --terminal: #0A0B0E; --terminal-texto: #E6E8EC;
  --papel: #FFFFFF;                          /* o fundo de uma página da empresa dentro do OS (a pré-visualização do Local) */
  /* as letras (em rem: crescem com o tamanho de texto do browser) */
  --sans: 'IBM Plex Sans', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
  --mono: 'IBM Plex Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
  /* o ecrã do terminal: a letra mono do sistema, que tem as linhas e os blocos que o Claude Code e o Codex desenham
     (╭─╮ │ ● ▐▛) com a mesma largura das letras; a Plex Mono servida (só o latin) não os tem e as caixas desalinhavam */
  --mono-terminal: ui-monospace, 'SF Mono', 'Cascadia Mono', Menlo, Consolas, 'DejaVu Sans Mono', 'Liberation Mono', monospace;
  --t-11: .6875rem; --t-12: .75rem; --t-13: .8125rem; --t-14: .875rem; --t-15: .9375rem; --t-16: 1rem;
  --t-18: 1.125rem; --t-20: 1.25rem; --t-22: 1.375rem; --t-24: 1.5rem;
  --t-corpo: var(--t-14);     /* 15 no telemóvel */
  --t-msg: var(--t-14);       /* as mensagens do Chat: 16 no telemóvel */
  --t-titulo: var(--t-20);    /* o título da página: 18 no telemóvel (19/10: ao nível do ORBIT OS) */
  --t-meta: var(--t-12);      /* o que se lê em mono (valores, horas, caminhos) */
  /* a escala 4/8 (o 2 só para frestas) */
  --e-1: 4px; --e-2: 8px; --e-3: 12px; --e-4: 16px; --e-5: 20px; --e-6: 24px; --e-8: 32px; --e-10: 40px; --e-12: 48px;
  /* os cantos: só 4, 6, 8, 10 e redondo */
  --r: 4px; --r-cartao: 6px; --r-caixa: 8px; --r-janela: 10px; --r-pilula: 999px;
  /* os controlos: 32 px com rato, 44 px com toque; os campos 40 / 44 */
  --ctl: 32px; --ctl-campo: 40px; --ctl-grande: 40px;
  /* a moldura: o cabeçalho (com a margem de cima do iPhone), a barra de baixo do telemóvel e as margens laterais */
  --topo-alt: calc(52px + env(safe-area-inset-top, 0px));
  --nav-alt: 60px;                      /* a altura da barra de baixo, sem a margem do iPhone */
  --nav-ocupa: 0px;                     /* o que a barra de baixo tapa (0 no computador) */
  --margem-e: max(16px, env(safe-area-inset-left, 0px));
  --margem-d: max(16px, env(safe-area-inset-right, 0px));
  --largura: 1160px;
  --z-topo: 30; --z-abas: 40; --z-menu: 50; --z-veu: 60; --z-toast: 80; --z-saltar: 90;
  --dur: .15s; --dur-2: .2s;
}

/* ── A base ────────────────────────────────────────────────────────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; }
[hidden] { display: none !important; }
html {
  -webkit-text-size-adjust: 100%; text-size-adjust: 100%;
  background: var(--void);
  scroll-padding-top: calc(var(--topo-alt) + var(--e-2));
  scroll-padding-bottom: calc(var(--nav-ocupa) + var(--e-2));
}
body {
  margin: 0; min-height: 100vh; min-height: 100dvh;
  background: var(--void); color: var(--ink);
  font: 400 var(--t-corpo)/1.45 var(--sans);
  -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
  -webkit-tap-highlight-color: transparent;
}
button, input, select, textarea { font: inherit; color: inherit; letter-spacing: inherit; }
button { cursor: pointer; }
button:disabled { cursor: default; }
a { color: var(--accent-texto); text-underline-offset: 2px; text-decoration-thickness: 1px; }
b, strong { font-weight: 600; }
code, kbd, samp, pre { font-family: var(--mono); }
code, kbd, samp { overflow-wrap: anywhere; }   /* um caminho ou um comando comprido parte, não empurra a página */
:focus-visible { outline: 2px solid var(--accent-texto); outline-offset: 2px; }
::selection { background: rgb(var(--accent-texto-rgb) / .32); color: var(--ink); }

/* ── Os ícones e as utilidades ──────────────────────────────────────────────────────────────────────────────────── */
.o-ic {
  width: 16px; height: 16px; flex: none; fill: none; stroke: currentColor; stroke-width: 1.6;
  stroke-linecap: round; stroke-linejoin: round; vertical-align: middle;
}
.o-ic--p { width: 14px; height: 14px; }
.o-ic--g { width: 20px; height: 20px; }
.o-ic--xg { width: 32px; height: 32px; stroke-width: 1.4; }
.o-glifo { width: 20px; height: 20px; flex: none; color: var(--marca); }
.o-glifo ellipse { fill: none; stroke: currentColor; stroke-width: 1.5; }
.o-glifo circle { fill: currentColor; stroke: none; }
.o-so-leitor {
  position: absolute !important; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden;
  clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0;
}
.o-mono { font-family: var(--mono); }
.o-num { font-variant-numeric: tabular-nums; }
.o-elipse { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.o-so-telemovel { display: none !important; }
.o-saltar {
  position: fixed; left: var(--margem-e); top: calc(env(safe-area-inset-top, 0px) + var(--e-2)); z-index: var(--z-saltar);
  padding: var(--e-2) var(--e-4); border-radius: var(--r); background: var(--accent); color: var(--sobre-accent);
  font: 600 var(--t-13)/1.3 var(--sans); text-decoration: none; transform: translateY(-300%);
}
.o-saltar:focus, .o-saltar:focus-visible { transform: none; }

/* ── O cabeçalho ───────────────────────────────────────────────────────────────────────────────────────────────── */
.o-topo {
  position: sticky; top: 0; z-index: var(--z-topo);
  display: flex; align-items: center; gap: var(--e-5);
  min-height: var(--topo-alt); padding: env(safe-area-inset-top, 0px) var(--margem-d) 0 var(--margem-e);
  background: var(--painel); border-bottom: 1px solid var(--linha);
}
.o-marca {
  display: inline-flex; align-items: center; gap: var(--e-2); flex: none;
  color: var(--ink); text-decoration: none; font: 600 var(--t-13)/1.2 var(--mono); letter-spacing: .14em;
}
.o-marca-nome { white-space: nowrap; }
.o-empresa {
  display: inline-block; min-width: 0; max-width: 260px; flex: 0 1 auto;
  padding: 2px var(--e-2); border: 1px solid var(--accent-linha); border-radius: var(--r-pilula);
  background: var(--accent-fundo); color: var(--accent-texto);
  font: 600 var(--t-11)/1.4 var(--mono); letter-spacing: .12em; text-transform: uppercase;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.o-topo-dir { margin-left: auto; display: flex; align-items: center; gap: var(--e-3); flex: none; }
.o-estado-ia {
  display: inline-flex; align-items: center; gap: var(--e-2); min-height: var(--ctl); padding: 0 var(--e-2);
  border: 0; border-radius: var(--r); background: none; color: var(--ink-2); text-decoration: none;
  font: 500 var(--t-12)/1 var(--mono); white-space: nowrap;
}
.o-estado-ia:hover { background: var(--hover); color: var(--ink); }
.o-estado-ia b { color: var(--ink); font-weight: 600; }
.o-estado-ia-n { display: none; }   /* o número sozinho, onde a palavra não cabe (abaixo) */

/* o ponto de estado: pronta (verde), a trabalhar (acento, com um pulso que pára ao fim de uns segundos), à tua espera */
.o-ponto { display: inline-block; width: 8px; height: 8px; flex: none; border-radius: 50%; background: var(--ink-3); }
.o-ponto--ok { background: var(--ok); box-shadow: 0 0 0 3px var(--ok-fundo); }
.o-ponto--aviso { background: var(--aviso); box-shadow: 0 0 0 3px var(--aviso-fundo); }
.o-ponto--erro { background: var(--erro); box-shadow: 0 0 0 3px var(--erro-fundo); }
.o-ponto--ativo { background: var(--accent); box-shadow: 0 0 0 3px var(--accent-fundo); animation: o-pulso 1.6s ease-in-out 4; }
@keyframes o-pulso { 50% { box-shadow: 0 0 0 6px transparent; } }

.o-avatar {
  position: relative; display: inline-grid; place-items: center; width: 26px; height: 26px; flex: none; padding: 0;
  border: 1px solid var(--linha-2); border-radius: 50%; background: var(--painel-3); color: var(--ink);
  font: 600 var(--t-11)/1 var(--mono); text-transform: uppercase;
}
.o-avatar--g { width: 32px; height: 32px; font-size: var(--t-12); }
button.o-avatar:hover { border-color: var(--accent-linha); }

/* ── A navegação: separadores no cabeçalho (computador) ou a barra de baixo (telemóvel) ─────────────────────────── */
.o-abas { display: flex; align-items: center; gap: var(--e-1); min-width: 0; }
.o-aba {
  position: relative; display: inline-flex; align-items: center; gap: var(--e-2);
  min-height: var(--ctl); padding: 0 var(--e-3); border: 1px solid transparent; border-radius: var(--r);
  background: none; color: var(--ink-2); text-decoration: none; font: 500 var(--t-13)/1 var(--sans); white-space: nowrap;
}
.o-aba:hover { color: var(--ink); background: var(--hover); }
.o-aba[aria-current="page"], .o-aba--mais[aria-expanded="true"] { color: var(--ink); border-color: var(--linha-2); background: var(--painel-2); }
.o-aba[aria-current="page"] .o-ic { color: var(--accent-texto); }
.o-aba-curto { display: none; }
.o-aba-seta { transition: transform var(--dur); }
.o-aba--mais[aria-expanded="true"] .o-aba-seta { transform: rotate(180deg); }
.o-conta {
  display: inline-flex; align-items: center; justify-content: center; min-width: 16px; min-height: 16px; padding: 2px 4px;
  border-radius: var(--r-pilula); background: var(--accent); color: var(--sobre-accent);
  font: 600 var(--t-11)/1 var(--mono); font-variant-numeric: tabular-nums;
}
.o-conta--aviso { background: var(--aviso); color: var(--void); }

/* o «Mais ▾»: um painel por baixo do botão no computador; uma folha de baixo no telemóvel */
.o-mais-ancora { position: relative; display: flex; }
.o-mais {
  position: absolute; top: calc(100% + var(--e-2)); right: 0; z-index: var(--z-menu);
  width: 240px; max-height: calc(100vh - var(--topo-alt) - var(--e-4)); overflow-y: auto; padding: var(--e-2);
  border: 1px solid var(--linha-2); border-radius: var(--r-caixa); background: var(--painel); box-shadow: var(--sombra-flutua);
}
.o-mais-veu { display: none; }
.o-mais-grupo + .o-mais-grupo { margin-top: var(--e-2); padding-top: var(--e-2); border-top: 1px solid var(--linha); }
.o-mais-rotulo {
  padding: var(--e-1) var(--e-2); color: var(--ink-3);
  font: 600 var(--t-11)/1.3 var(--mono); letter-spacing: .08em; text-transform: uppercase;
}
.o-mais-item {
  display: flex; align-items: center; gap: var(--e-3); width: 100%; min-height: 36px; padding: 0 var(--e-2);
  border: 0; border-radius: var(--r); background: none; color: var(--ink-2); text-align: left; text-decoration: none;
  font: 500 var(--t-13)/1.3 var(--sans);
}
.o-mais-item:hover { background: var(--hover); color: var(--ink); }
.o-mais-item:focus-visible { outline-offset: -2px; }
.o-mais-item[aria-current="page"] { background: var(--painel-2); color: var(--ink); }
.o-mais-item[aria-current="page"] .o-ic { color: var(--accent-texto); }
.o-mais-item .o-ic-fim { margin-left: auto; color: var(--ink-3); }
.o-mais-quem { padding: var(--e-2); color: var(--ink-3); font: 400 var(--t-12)/1.45 var(--mono); overflow-wrap: anywhere; }

/* ── A página ──────────────────────────────────────────────────────────────────────────────────────────────────── */
.o-pagina {
  width: 100%; max-width: calc(var(--largura) + var(--margem-e) + var(--margem-d)); margin: 0 auto; min-width: 0;
  padding: var(--e-8) var(--margem-d) var(--e-8) var(--margem-e);
}
/* baseline de propósito: o título (18) e o contexto (mono 13) são só texto, de tamanhos diferentes */
.o-pagina-cabeca { display: flex; flex-wrap: wrap; align-items: baseline; column-gap: var(--e-3); row-gap: var(--e-1); margin: 0 0 var(--e-1); }
.o-pagina-titulo { margin: 0; font: 600 var(--t-titulo)/1.25 var(--sans); }
.o-pagina-contexto { color: var(--ink-3); font: 400 var(--t-13)/1.3 var(--mono); }
.o-pagina-legenda { margin: 0 0 var(--e-4); max-width: 72ch; color: var(--ink-3); font-size: var(--t-13); line-height: 1.5; }
.o-grelha { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(280px, 100%), 1fr)); gap: var(--e-4); align-items: start; }
.o-grelha > .o-largo { grid-column: 1 / -1; }
.o-pilha { display: flex; flex-direction: column; gap: var(--e-4); min-width: 0; }
.o-fila { display: flex; flex-wrap: wrap; align-items: center; gap: var(--e-2); min-width: 0; }
.o-ecra-cheio { display: flex; flex-direction: column; min-height: 0; height: var(--vv-alt, calc(100dvh - var(--topo-alt) - var(--nav-ocupa))); }
.o-grupo-rotulo {
  display: flex; align-items: center; gap: var(--e-2); margin: var(--e-8) 0 var(--e-2); color: var(--ink-3);
  font: 600 var(--t-11)/1.3 var(--mono); letter-spacing: .08em; text-transform: uppercase;
}
.o-grupo-rotulo:first-child { margin-top: 0; }
.o-separador { height: 1px; margin: var(--e-4) 0; border: 0; background: var(--linha); }
.o-rodape {
  display: flex; align-items: center; gap: var(--e-2); min-height: 32px; padding: 0 var(--margem-d) 0 var(--margem-e);
  border-top: 1px solid var(--linha); background: var(--painel); color: var(--ink-3); font: 400 var(--t-11)/1.3 var(--mono);
}

/* ── Os cartões ────────────────────────────────────────────────────────────────────────────────────────────────── */
.o-cartao {
  display: flex; flex-direction: column; gap: var(--e-3); min-width: 0; padding: var(--e-5);
  border: 1px solid var(--linha); border-radius: var(--r-cartao); background: var(--painel);
}
.o-cartao--destaque { background: radial-gradient(circle at 18% 0%, rgb(var(--accent-texto-rgb) / .06), transparent 55%), var(--painel-2); }
.o-cartao--tracejado { border-style: dashed; border-color: var(--linha-2); background: none; }
a.o-cartao, button.o-cartao { color: inherit; text-align: left; text-decoration: none; font: inherit; }
a.o-cartao:hover, button.o-cartao:hover { border-color: var(--linha-2); background: var(--painel-2); }
.o-cartao-cabeca { display: flex; flex-wrap: wrap; align-items: center; gap: var(--e-2); min-width: 0; }
.o-cartao-titulo {
  display: flex; align-items: center; gap: var(--e-2); min-width: 0; margin: 0;
  color: var(--ink); font: 600 var(--t-16)/1.5 var(--sans);
}
.o-cartao-titulo .o-ic { color: var(--ink-3); }
.o-cartao-extra { margin-left: auto; }
.o-cartao-texto { margin: 0; color: var(--ink-2); font-size: var(--t-13); line-height: 1.5; }
.o-cartao-rodape { display: flex; flex-wrap: wrap; align-items: center; gap: var(--e-2); padding-top: var(--e-3); border-top: 1px solid var(--linha); }

/* as linhas nome-valor (o valor nunca parte no computador; no telemóvel parte até 70 % da linha) */
.o-dados { display: flex; flex-direction: column; margin: 0; min-width: 0; }
/* baseline de propósito: dois textos de tamanhos diferentes (12 e 13 mono), sem ícones; se o valor partir em duas
   linhas, o nome fica com a primeira */
.o-dado {
  display: flex; align-items: baseline; justify-content: space-between; gap: var(--e-3); min-width: 0;
  padding: var(--e-2) 0; border-top: 1px solid var(--linha);
}
.o-dado:first-child { border-top: 0; padding-top: 0; }
.o-dado:last-child { padding-bottom: 0; }
.o-dado-nome { min-width: 0; margin: 0; color: var(--ink-3); font-size: var(--t-12); line-height: 1.4; }
.o-dado-valor {
  flex: none; max-width: 70%; margin: 0; text-align: right; white-space: nowrap;
  color: var(--ink); font: 500 var(--t-13)/1.4 var(--mono); font-variant-numeric: tabular-nums;
}
.o-dado-valor--ok { color: var(--ok); }
.o-dado-valor--aviso { color: var(--aviso); }
.o-dado-valor--erro { color: var(--erro); }

/* os números grandes e as barras de uso */
.o-numeros { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(144px, 100%), 1fr)); gap: var(--e-3) var(--e-5); }
.o-numero { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.o-numero-valor { color: var(--ink); font: 600 var(--t-22)/1.15 var(--sans); font-variant-numeric: tabular-nums; }
.o-numero-valor--ok { color: var(--ok); }
.o-numero-valor--aviso { color: var(--aviso); }
.o-numero-valor--erro { color: var(--erro); }
.o-numero-sufixo { margin-left: 2px; color: var(--ink-3); font: 500 var(--t-12)/1 var(--mono); }
.o-numero-legenda { color: var(--ink-3); font-size: var(--t-12); line-height: 1.4; }
.o-barra { display: flex; flex-direction: column; gap: var(--e-1); min-width: 0; }
.o-barra-cabeca { display: flex; justify-content: space-between; gap: var(--e-2); color: var(--ink-3); font: 500 var(--t-11)/1.3 var(--mono); }
.o-barra-trilho { height: 6px; border-radius: var(--r-pilula); background: var(--painel-3); overflow: hidden; }
.o-barra-valor { display: block; width: var(--v, 0%); max-width: 100%; height: 100%; border-radius: var(--r-pilula); background: var(--accent); }
.o-barra--alta .o-barra-valor { background: var(--erro); }
.o-barra--alta .o-barra-cabeca b { color: var(--erro); }

/* ── As etiquetas ──────────────────────────────────────────────────────────────────────────────────────────────── */
/* o estado (junto ao nome): neutro por omissão */
.o-pill {
  display: inline-flex; align-items: center; gap: var(--e-1); flex: none; min-height: 20px; padding: 2px var(--e-2);
  border: 1px solid var(--linha-2); border-radius: var(--r-pilula); background: transparent; color: var(--ink-2);
  font: 600 var(--t-11)/1 var(--mono); white-space: nowrap;
}
.o-pill-ponto { width: 6px; height: 6px; flex: none; border-radius: 50%; background: currentColor; }
.o-pill--ok { color: var(--ok); border-color: var(--ok-fundo); background: var(--ok-fundo); }
.o-pill--aviso { color: var(--aviso); border-color: var(--aviso-fundo); background: var(--aviso-fundo); }
.o-pill--erro { color: var(--erro); border-color: var(--erro-fundo); background: var(--erro-fundo); }
.o-pill--ativo { color: var(--accent-texto); border-color: var(--accent-linha); background: var(--accent-fundo); }
.o-pill--ativo .o-pill-ponto { animation: o-piscar 1.6s ease-in-out 4; }
.o-pill--acento { color: var(--accent-texto); border-color: var(--accent-linha); }
.o-pill--apagado { color: var(--ink-3); border-color: var(--linha); }
.o-pill--tracejado { border-style: dashed; }
@keyframes o-piscar { 50% { opacity: .35; } }

/* a meta pequena (mês, «expira 20/10», o modelo) */
.o-chip {
  display: inline-flex; align-items: center; gap: var(--e-1); flex: none; min-height: 20px; padding: 2px var(--e-2);
  border: 1px solid var(--linha); border-radius: var(--r-pilula); background: var(--painel-2); color: var(--ink-3);
  font: 500 var(--t-11)/1 var(--mono); white-space: nowrap;
}
/* o papel e as marcas cheias (CONSTRUTOR, EQUIPA, ADMIN, WESOLVE) */
.o-tag {
  display: inline-flex; align-items: center; gap: var(--e-1); flex: none; min-height: 18px; padding: 2px var(--e-2);
  border-radius: var(--r-pilula); background: var(--painel-3); color: var(--ink-2);
  font: 600 var(--t-11)/1 var(--mono); letter-spacing: .06em; text-transform: uppercase; white-space: nowrap;
}
.o-tag--acento { background: var(--accent-fundo); color: var(--accent-texto); }
.o-tag--ok { background: var(--ok-fundo); color: var(--ok); }
.o-tag--aviso { background: var(--aviso-fundo); color: var(--aviso); }
.o-tag--erro { background: var(--erro-fundo); color: var(--erro); }
.o-tag--apoio { background: var(--apoio-fundo); color: var(--ink); }
/* os contadores (notas, ligações, «3 à espera»), com o número a negrito */
.o-contador {
  display: inline-flex; align-items: center; gap: var(--e-2); flex: none; min-height: 26px; padding: 2px var(--e-3);
  border: 1px solid var(--linha-2); border-radius: var(--r-pilula); background: var(--painel-2); color: var(--ink-2);
  font: 500 var(--t-12)/1 var(--mono); white-space: nowrap;
}
.o-contador b { color: var(--ink); font-weight: 600; }
.o-contador--mau { border-color: var(--erro-linha); background: var(--erro-fundo); color: var(--erro); }
.o-contador--aviso { border-color: var(--aviso-linha); background: var(--aviso-fundo); color: var(--aviso); }
.o-contador--bom { border-color: var(--ok-fundo); background: var(--ok-fundo); color: var(--ok); }
.o-contador--mau b, .o-contador--aviso b, .o-contador--bom b { color: inherit; }

/* ── Os botões ─────────────────────────────────────────────────────────────────────────────────────────────────── */
.o-btn {
  position: relative; display: inline-flex; align-items: center; justify-content: center; gap: var(--e-2);
  min-height: var(--ctl); padding: var(--e-1) var(--e-3); border: 1px solid var(--linha-2); border-radius: var(--r);
  background: var(--painel-2); color: var(--ink); font: 500 var(--t-13)/1.2 var(--sans);
  text-align: center; text-decoration: none; user-select: none; -webkit-user-select: none;
  transition: border-color var(--dur), background-color var(--dur), color var(--dur), filter var(--dur);
}
/* a hierarquia do ORBIT OS (19/10): o secundário é neutro e, ao passar, só clareia (nunca fica laranja: era o que
   apagava a hierarquia); o principal é tingido nas páginas, no máximo um à vista por cartão e por janela, e cheio só
   na decisão de uma janela e na entrada; o discreto (fantasma, texto) não tem contorno */
.o-btn:where(:not(:disabled, [aria-disabled="true"])):hover { border-color: var(--linha-campo); background: var(--painel-3); }
.o-btn:where(:not(:disabled, [aria-disabled="true"])):active { background: var(--painel-3); }
.o-btn[aria-pressed="true"] { border-color: var(--accent-linha); background: var(--accent-fundo); color: var(--accent-texto); }
/* a tinta por cima de um fundo opaco (o dos botões): dentro de um aviso tingido, o texto continua a ler-se como num cartão
   (com a cor da casa azul ou vermelha, a tinta sobre a do aviso ficava abaixo de 4,5:1) */
.o-btn--primario { border-color: var(--accent-linha); background: linear-gradient(var(--accent-fundo), var(--accent-fundo)), var(--painel-2); color: var(--accent-texto); font-weight: 600; }
.o-btn--primario:where(:not(:disabled, [aria-disabled="true"])):hover,
.o-btn--primario:where(:not(:disabled, [aria-disabled="true"])):active { border-color: var(--accent); background: linear-gradient(rgb(var(--accent-rgb) / .22), rgb(var(--accent-rgb) / .22)), var(--painel-2); color: var(--accent-texto); }
.o-janela-acoes .o-btn--primario, .o-portao .o-btn--primario { border-color: var(--accent); background: var(--accent); color: var(--sobre-accent); }
.o-janela-acoes .o-btn--primario:where(:not(:disabled, [aria-disabled="true"])):hover,
.o-janela-acoes .o-btn--primario:where(:not(:disabled, [aria-disabled="true"])):active,
.o-portao .o-btn--primario:where(:not(:disabled, [aria-disabled="true"])):hover,
.o-portao .o-btn--primario:where(:not(:disabled, [aria-disabled="true"])):active { border-color: var(--accent); background: var(--accent); color: var(--sobre-accent); filter: brightness(1.08); }
/* «perigo» é sempre só contorno (nunca cheio): com a cor da casa vermelha, um botão vermelho cheio seria o principal */
.o-btn--perigo { border-color: var(--erro-linha); background: transparent; color: var(--erro); }
.o-btn--perigo:where(:not(:disabled, [aria-disabled="true"])):hover,
.o-btn--perigo:where(:not(:disabled, [aria-disabled="true"])):active { border-color: var(--erro); background: var(--erro-fundo); color: var(--erro); }
.o-btn--fantasma { border-color: transparent; background: none; color: var(--ink-2); }
.o-btn--fantasma:where(:not(:disabled, [aria-disabled="true"])):hover { border-color: transparent; background: var(--hover); color: var(--ink); }
.o-btn--texto { border-color: transparent; background: none; color: var(--accent-texto); padding-left: var(--e-1); padding-right: var(--e-1); }
.o-btn--texto:where(:not(:disabled, [aria-disabled="true"])):hover { border-color: transparent; background: var(--hover); color: var(--accent-texto); text-decoration: underline; }
.o-btn--fino { min-height: 28px; padding: 2px var(--e-2); font-size: var(--t-13); }   /* só em filas densas, nunca o principal de um cartão */
.o-btn--grande { min-height: var(--ctl-grande); padding: var(--e-2) var(--e-5); font-size: var(--t-14); }
.o-btn--icone { width: var(--ctl); min-width: var(--ctl); padding: 0; color: var(--ink-2); }
.o-btn--icone.o-btn--fino { width: 28px; min-width: 28px; }
.o-btn--cheio { width: 100%; }
.o-btn:disabled, .o-btn[aria-disabled="true"] { opacity: .55; cursor: default; }
.o-btn[aria-busy="true"] { cursor: progress; }
.o-btn[aria-busy="true"]::after {
  content: ''; width: 12px; height: 12px; flex: none; border: 2px solid currentColor; border-right-color: transparent;
  border-radius: 50%; animation: o-roda .8s linear infinite;
}
@keyframes o-roda { to { transform: rotate(360deg); } }
.o-acoes { display: flex; flex-wrap: wrap; align-items: center; gap: var(--e-2); }
.o-acoes--fim { justify-content: flex-end; }

/* ── Os campos ─────────────────────────────────────────────────────────────────────────────────────────────────── */
.o-form { display: flex; flex-direction: column; gap: var(--e-4); min-width: 0; }
.o-campo { display: flex; flex-direction: column; gap: var(--e-2); min-width: 0; }
.o-rotulo { color: var(--ink-3); font: 500 var(--t-12)/1.3 var(--mono); }
.o-rotulo--maiusculas { font-size: var(--t-11); font-weight: 600; letter-spacing: .06em; text-transform: uppercase; }
.o-dica { margin: 0; color: var(--ink-3); font-size: var(--t-12); line-height: 1.45; }
/* items-start de propósito: o texto pode partir em várias linhas e o ícone fica na primeira (a caixa dele tem a altura
   de uma linha, por isso fica ao centro dela sem margens) */
.o-erro-campo { display: flex; align-items: flex-start; gap: var(--e-1); margin: 0; color: var(--erro); font-size: var(--t-12); line-height: 1.45; }
.o-erro-campo .o-ic { height: 1.45em; }
.o-entrada, .o-select, .o-area {
  width: 100%; min-width: 0; min-height: var(--ctl-campo); padding: var(--e-2) var(--e-3);
  border: 1px solid var(--linha-campo); border-radius: var(--r); background: var(--painel-2); color: var(--ink);
  font: 400 var(--t-14)/1.4 var(--sans);
}
.o-entrada::placeholder, .o-area::placeholder { color: var(--ink-3); opacity: 1; }
.o-entrada:focus, .o-select:focus, .o-area:focus {
  outline: 2px solid transparent; border-color: var(--accent-texto);
  box-shadow: 0 0 0 1px var(--accent-texto), 0 0 0 4px var(--accent-fundo);
}
.o-entrada[aria-invalid="true"], .o-select[aria-invalid="true"], .o-area[aria-invalid="true"] { border-color: var(--erro); }
.o-entrada[aria-invalid="true"]:focus, .o-area[aria-invalid="true"]:focus { box-shadow: 0 0 0 1px var(--erro), 0 0 0 4px var(--erro-fundo); }
.o-entrada:disabled, .o-select:disabled, .o-area:disabled { opacity: .55; cursor: not-allowed; }
.o-entrada[readonly] { border-style: dashed; background: var(--painel); }
.o-entrada--mono { font-family: var(--mono); }
.o-entrada--codigo { font: 500 var(--t-24)/1.2 var(--mono); letter-spacing: .3em; text-align: center; }
.o-area { min-height: 88px; resize: vertical; line-height: 1.5; }
.o-select { appearance: none; -webkit-appearance: none; padding-right: var(--e-10); cursor: pointer; }
.o-select option { background: var(--painel-2); color: var(--ink); }
.o-select-caixa { position: relative; display: block; min-width: 0; }
.o-select-caixa::after {
  /* ajuste ótico: o «v» desenhado com dois lados de um quadrado rodado tem o centro visual acima do centro da caixa */
  content: ''; position: absolute; right: var(--e-4); top: 50%; width: 7px; height: 7px; pointer-events: none;
  border-right: 1.6px solid var(--ink-2); border-bottom: 1.6px solid var(--ink-2); transform: translateY(-70%) rotate(45deg);
}
.o-procurar { position: relative; display: flex; align-items: center; min-width: 0; }
.o-procurar > .o-ic { position: absolute; left: var(--e-3); color: var(--ink-3); pointer-events: none; }
.o-procurar > .o-entrada { padding-left: var(--e-10); }
/* items-start de propósito: o nome pode levar uma nota por baixo; a caixa (18 px) fica na primeira linha (18,9 px) */
.o-marcar { display: flex; align-items: flex-start; gap: var(--e-2); min-height: 24px; color: var(--ink-2); font-size: var(--t-13); line-height: 1.45; cursor: pointer; }
.o-marcar input { width: 18px; height: 18px; flex: none; margin: 0; accent-color: var(--accent); cursor: pointer; }
.o-marcar-nota { display: block; color: var(--ink-3); font-size: var(--t-12); }

/* o interruptor (role=switch e aria-checked) */
.o-interruptor {
  position: relative; display: inline-block; width: 40px; height: 24px; flex: none; padding: 0;
  border: 1px solid var(--linha-campo); border-radius: var(--r-pilula); background: var(--painel-3); cursor: pointer;
  transition: border-color var(--dur), background-color var(--dur);
}
.o-interruptor::after {
  content: ''; position: absolute; top: 3px; left: 3px; width: 16px; height: 16px; border-radius: 50%;
  background: var(--ink-3); transition: transform var(--dur), background-color var(--dur);
}
.o-interruptor[aria-checked="true"] { border-color: var(--accent); background: var(--accent-fundo); }
.o-interruptor[aria-checked="true"]::after { transform: translateX(16px); background: var(--accent); }
.o-interruptor--apoio[aria-checked="true"] { border-color: var(--apoio); background: var(--apoio-fundo); }
.o-interruptor--apoio[aria-checked="true"]::after { background: var(--apoio); }
.o-interruptor:disabled { opacity: .55; cursor: default; }
.o-interruptor-linha { display: flex; align-items: center; justify-content: space-between; gap: var(--e-3); min-width: 0; }

/* as escolhas lado a lado (no lugar de um select com poucas opções): role=radio e aria-checked, ou aria-pressed */
.o-escolhas { display: flex; flex-wrap: wrap; gap: var(--e-2); min-width: 0; }
.o-escolha {
  display: inline-flex; flex: 1 1 0; align-items: center; gap: var(--e-2); min-width: min(120px, 100%);
  min-height: var(--ctl-campo); padding: var(--e-1) var(--e-3); border: 1px solid var(--linha-2); border-radius: var(--r);
  background: var(--painel-2); color: var(--ink-2); font: 500 var(--t-13)/1.3 var(--sans); text-align: left;
}
.o-escolha:hover { border-color: var(--linha-campo); color: var(--ink); }
.o-escolha[aria-checked="true"], .o-escolha[aria-pressed="true"] { border-color: var(--accent-linha); background: var(--accent-fundo); color: var(--accent-texto); }
.o-escolha--sub { flex-direction: column; align-items: flex-start; gap: 2px; padding: var(--e-2) var(--e-3); }
.o-escolha-titulo { display: flex; align-items: center; gap: var(--e-2); color: inherit; font: 600 var(--t-13)/1.3 var(--sans); }
/* a descrição de uma escolha é uma frase: na letra do corpo (a mono fica para os rótulos curtos; L37) */
.o-escolha-nota { color: var(--ink-3); font: 400 var(--t-13)/1.45 var(--sans); }
.o-escolha[aria-checked="true"] .o-escolha-nota, .o-escolha[aria-pressed="true"] .o-escolha-nota { color: var(--ink-2); }
.o-amostra { display: inline-block; width: 16px; height: 16px; flex: none; border: 1px solid var(--linha-2); border-radius: var(--r); background: var(--amostra, var(--accent)); }

/* os separadores de uma página (aria-selected) e os filtros em etiquetas (aria-pressed) */
.o-seps { display: flex; gap: var(--e-1); border-bottom: 1px solid var(--linha); overflow-x: auto; scrollbar-width: none; }
.o-seps::-webkit-scrollbar { display: none; }
.o-sep {
  display: inline-flex; align-items: center; gap: var(--e-2); flex: none; min-height: 40px; padding: 0 var(--e-3); margin-bottom: -1px;
  border: 0; border-bottom: 2px solid transparent; background: none; color: var(--ink-2); font: 500 var(--t-13)/1.2 var(--sans); white-space: nowrap;
}
.o-sep:hover { color: var(--ink); }
.o-sep:focus-visible { outline-offset: -2px; }
.o-sep[aria-selected="true"] { color: var(--ink); border-bottom-color: var(--accent); }
.o-sep[aria-selected="true"] .o-ic { color: var(--accent-texto); }
.o-sep-n { color: var(--ink-3); font: 600 var(--t-11)/1 var(--mono); }
.o-filtros { display: flex; gap: var(--e-2); overflow-x: auto; padding: 2px; margin: -2px; scrollbar-width: none; }
.o-filtros::-webkit-scrollbar { display: none; }
.o-filtro {
  display: inline-flex; align-items: center; gap: var(--e-2); flex: none; min-height: 28px; padding: 2px var(--e-3);
  border: 1px solid var(--linha-2); border-radius: var(--r-pilula); background: var(--painel-2); color: var(--ink-2);
  font: 500 var(--t-12)/1.3 var(--sans); white-space: nowrap;
}
.o-filtro:hover { color: var(--ink); border-color: var(--linha-campo); }
.o-filtro[aria-pressed="true"] { border-color: var(--accent-linha); background: var(--accent-fundo); color: var(--accent-texto); }
.o-filtro b { font-weight: 600; font-family: var(--mono); }

/* ── Os avisos, o vazio, o «a carregar» e o aviso rápido ─────────────────────────────────────────────────────────── */
/* items-start de propósito: o texto do aviso tem várias linhas e o ícone fica na primeira (a caixa dele tem a altura
   da linha, por isso fica ao centro dela sem margens) */
.o-aviso {
  display: flex; align-items: flex-start; gap: var(--e-3); min-width: 0; padding: var(--e-3);
  border: 1px solid var(--linha); border-left: 2px solid var(--linha-campo); border-radius: var(--r);
  background: var(--painel-2); color: var(--ink-2); font-size: var(--t-13); line-height: 1.5;
}
.o-aviso > .o-ic { height: 1.5em; color: var(--ink-3); }
.o-aviso-corpo { flex: 1; min-width: 0; overflow-wrap: break-word; }
.o-aviso-titulo { display: block; color: var(--ink); font-weight: 600; }
.o-aviso-texto { margin: 0; }
.o-aviso .o-acoes { margin-top: var(--e-2); }
.o-aviso--ok { border-color: var(--ok-fundo); border-left-color: var(--ok); background: var(--ok-fundo); }
.o-aviso--aviso { border-color: var(--aviso-fundo); border-left-color: var(--aviso); background: var(--aviso-fundo); }
.o-aviso--erro { border-color: var(--erro-fundo); border-left-color: var(--erro); background: var(--erro-fundo); }
.o-aviso--ok > .o-ic, .o-aviso--ok .o-aviso-titulo { color: var(--ok); }
.o-aviso--aviso > .o-ic, .o-aviso--aviso .o-aviso-titulo { color: var(--aviso); }
.o-aviso--erro > .o-ic, .o-aviso--erro .o-aviso-titulo { color: var(--erro); }

.o-vazio { display: flex; flex-direction: column; align-items: center; gap: var(--e-2); padding: var(--e-8) var(--e-4); text-align: center; }
.o-vazio > .o-ic { width: 32px; height: 32px; stroke-width: 1.4; color: var(--ink-3); }
.o-vazio-titulo { margin: var(--e-1) 0 0; color: var(--ink); font: 600 var(--t-15)/1.35 var(--sans); }
.o-vazio-texto { max-width: 460px; margin: 0; color: var(--ink-2); font-size: var(--t-13); line-height: 1.55; }
.o-vazio .o-acoes { justify-content: center; margin-top: var(--e-2); }
.o-vazio--caixa { border: 1px dashed var(--linha-2); border-radius: var(--r-janela); }

.o-carregar { display: inline-flex; align-items: center; gap: var(--e-2); color: var(--ink-3); font: 400 var(--t-12)/1.4 var(--mono); }
.o-pontos { display: inline-flex; align-items: center; gap: 2px; }
.o-pontos > i { width: 4px; height: 4px; border-radius: 50%; background: currentColor; animation: o-pontos 1.1s ease-in-out infinite; }
.o-pontos > i:nth-child(2) { animation-delay: .15s; }
.o-pontos > i:nth-child(3) { animation-delay: .3s; }
@keyframes o-pontos { 0%, 80%, 100% { opacity: .25; } 40% { opacity: 1; } }
.o-esqueleto { display: block; height: 12px; border-radius: var(--r); background: var(--painel-3); }
.o-esqueleto + .o-esqueleto { margin-top: var(--e-2); }
.o-esqueleto--curto { width: 60%; }

.o-toasts {
  position: fixed; left: 50%; bottom: calc(var(--nav-ocupa) + var(--e-4)); z-index: var(--z-toast);
  display: flex; flex-direction: column; align-items: center; gap: var(--e-2);
  width: min(480px, calc(100vw - 2 * var(--e-4))); transform: translateX(-50%); pointer-events: none;
}
.o-toast {
  max-width: 100%; padding: var(--e-2) var(--e-4); border: 1px solid var(--linha-2); border-radius: var(--r);
  background: var(--painel-3); box-shadow: var(--sombra-flutua); color: var(--ink);
  font: 400 var(--t-13)/1.45 var(--sans); pointer-events: auto; animation: o-sobe var(--dur-2) ease-out;
  overflow-wrap: break-word;
}
.o-toast--ok { border-left: 2px solid var(--ok); }
.o-toast--erro { border-left: 2px solid var(--erro); }
@keyframes o-sobe { from { opacity: 0; transform: translateY(8px); } }

/* ── A janela, a folha e o menu ⋯ ───────────────────────────────────────────────────────────────────────────────── */
.o-veu {
  position: fixed; inset: 0; z-index: var(--z-veu); display: grid; place-items: center; overflow-y: auto;
  padding: max(16px, env(safe-area-inset-top, 0px)) var(--margem-d) max(16px, env(safe-area-inset-bottom, 0px)) var(--margem-e);
  background: var(--veu); animation: o-aparece var(--dur) ease-out;
}
.o-veu--topo { place-items: start center; }
@keyframes o-aparece { from { opacity: 0; } }
.o-janela, dialog.o-janela {
  width: min(440px, 100%); max-width: 100%; margin: auto; padding: var(--e-5);
  border: 1px solid var(--linha-2); border-radius: var(--r-janela); background: var(--painel); color: var(--ink);
  box-shadow: var(--sombra-flutua); overflow-wrap: break-word;
}
.o-janela--larga, dialog.o-janela--larga { width: min(560px, 100%); }
dialog.o-janela::backdrop { background: var(--veu); }
.o-janela-titulo { margin: 0 0 var(--e-1); color: var(--ink); font: 600 var(--t-16)/1.3 var(--sans); }
.o-janela-texto { margin: 0 0 var(--e-4); color: var(--ink-2); font-size: var(--t-13); line-height: 1.55; }
.o-janela .o-entrada, .o-janela .o-select, .o-janela .o-area { background: var(--void); }
.o-janela-acoes { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: var(--e-2); margin-top: var(--e-5); }

/* a folha: de baixo no telemóvel, do lado direito no computador (dentro de um .o-veu.o-veu--folha) */
.o-veu--folha { display: block; padding: 0; overflow: hidden; }
.o-folha {
  position: fixed; top: 0; right: 0; bottom: 0; z-index: var(--z-veu);
  display: flex; flex-direction: column; width: min(440px, 100vw); max-width: 100%;
  border-left: 1px solid var(--linha-2); background: var(--painel); color: var(--ink); box-shadow: var(--sombra-flutua);
  animation: o-entra-direita var(--dur-2) ease-out;
}
@keyframes o-entra-direita { from { transform: translateX(24px); opacity: 0; } }
@keyframes o-entra-baixo { from { transform: translateY(24px); opacity: 0; } }
.o-folha-pega { display: none; width: 36px; height: 4px; flex: none; margin: var(--e-2) auto 0; border-radius: var(--r-pilula); background: var(--linha-campo); }
.o-folha-cabeca { display: flex; align-items: center; gap: var(--e-3); min-height: 52px; padding: var(--e-2) var(--e-2) var(--e-2) var(--e-4); border-bottom: 1px solid var(--linha); }
.o-folha-titulo { flex: 1; min-width: 0; margin: 0; font: 600 var(--t-16)/1.3 var(--sans); }
.o-folha-corpo { flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain; padding: var(--e-4) var(--e-4) calc(var(--e-4) + env(safe-area-inset-bottom, 0px)); }

/* o menu ⋯ (e o do avatar) */
.o-menu-ancora { position: relative; display: inline-flex; }
.o-menu {
  position: absolute; top: calc(100% + var(--e-1)); right: 0; z-index: var(--z-menu);
  min-width: 200px; max-width: min(320px, calc(100vw - 2 * var(--e-4))); padding: var(--e-1);
  border: 1px solid var(--linha-2); border-radius: var(--r-caixa); background: var(--painel); box-shadow: var(--sombra-flutua);
}
.o-menu--esq { right: auto; left: 0; }
.o-menu--cima { top: auto; bottom: calc(100% + var(--e-1)); }
.o-menu-cabeca { padding: var(--e-2) var(--e-3); border-bottom: 1px solid var(--linha); margin-bottom: var(--e-1); }
.o-menu-cabeca b { display: block; color: var(--ink); font: 600 var(--t-13)/1.35 var(--sans); }
.o-menu-cabeca span { display: block; color: var(--ink-3); font: 400 var(--t-12)/1.4 var(--mono); overflow-wrap: anywhere; }
.o-menu-item {
  display: flex; align-items: center; gap: var(--e-2); width: 100%; min-height: 36px; padding: 0 var(--e-3);
  border: 0; border-radius: var(--r); background: none; color: var(--ink); text-align: left; text-decoration: none;
  font: 400 var(--t-13)/1.3 var(--sans); white-space: nowrap;
}
.o-menu-item .o-ic { color: var(--ink-3); }
.o-menu-item:hover { background: var(--hover); }
.o-menu-item:focus-visible { outline-offset: -2px; background: var(--hover); }
.o-menu-item--perigo, .o-menu-item--perigo .o-ic { color: var(--erro); }
.o-menu-sep { height: 1px; margin: var(--e-1) 0; background: var(--linha); }

/* ── O Chat: os balões, o texto formatado, o código, a atividade, os subagentes, a pergunta e a caixa de escrever ── */
.o-conversa { display: flex; flex-direction: column; gap: var(--e-4); min-width: 0; }
/* items-start de propósito: uma mensagem tem muitas linhas e o quadrado «Tu»/«IA» fica no topo dela */
.o-msg { display: flex; align-items: flex-start; gap: var(--e-3); max-width: 760px; min-width: 0; }
.o-quem {
  display: grid; place-items: center; width: 28px; height: 28px; flex: none;
  border: 1px solid var(--linha-2); border-radius: var(--r-cartao); background: var(--painel-3); color: var(--ink-2);
  font: 600 var(--t-11)/1 var(--mono);
}
.o-msg--ia .o-quem { border-color: var(--accent-linha); background: var(--accent-fundo); color: var(--accent-texto); }
.o-msg-corpo {
  flex: 1; min-width: 0; padding-top: max(0px, calc((28px - 1.6em) / 2)); color: var(--ink);
  font: 400 var(--t-msg)/1.6 var(--sans); overflow-wrap: break-word;
}
.o-msg--eu .o-msg-corpo {
  flex: 0 1 auto; padding: var(--e-2) var(--e-3); border: 1px solid var(--linha); border-radius: var(--r-caixa);
  background: var(--painel-2); white-space: pre-wrap;
}
.o-msg-meta { display: block; margin-top: var(--e-1); color: var(--ink-3); font: 400 var(--t-11)/1.4 var(--mono); white-space: normal; }

/* o texto formatado (as respostas da IA e as notas): o leitor de markdown seguro escreve estas peças */
.o-md { min-width: 0; overflow-wrap: break-word; }
.o-md > :first-child { margin-top: 0; }
.o-md > :last-child { margin-bottom: 0; }
.o-md p { margin: 0 0 var(--e-3); }
.o-md ul, .o-md ol { margin: 0 0 var(--e-3); padding-left: 1.4em; }
.o-md li + li { margin-top: var(--e-1); }
.o-md li::marker { color: var(--ink-3); }
.o-md h1, .o-md h2, .o-md h3, .o-md h4 { margin: var(--e-5) 0 var(--e-2); color: var(--ink); font-weight: 600; line-height: 1.3; }
.o-md h1 { font-size: var(--t-18); }
.o-md h2 { font-size: var(--t-16); }
.o-md h3 { font-size: var(--t-15); }
.o-md h4 { font-size: var(--t-14); }
.o-md a { color: var(--accent-texto); overflow-wrap: anywhere; }
.o-md :not(pre) > code {
  padding: 1px var(--e-1); border: 1px solid var(--linha); border-radius: var(--r); background: var(--painel-2);
  color: var(--ink); font: 500 .9em/1.4 var(--mono); overflow-wrap: anywhere;
}
.o-md blockquote { margin: 0 0 var(--e-3); padding: var(--e-1) var(--e-3); border-left: 2px solid var(--linha-campo); color: var(--ink-2); }
.o-md hr { height: 1px; margin: var(--e-4) 0; border: 0; background: var(--linha); }
.o-md img { max-width: 100%; height: auto; border: 1px solid var(--linha); border-radius: var(--r-cartao); }
/* o que o leitor de markdown (markdown.js) junta: as listas encaixadas, soltas e de tarefas, os títulos 5 e 6, as
   [[ligações]] entre notas (sublinhado pontuado), a imagem que fica como ligação e o alinhamento das colunas */
.o-md li > ul, .o-md li > ol { margin: var(--e-1) 0 0; }
.o-md li > p { margin-bottom: var(--e-2); }
.o-md li > :last-child, .o-md blockquote > :last-child { margin-bottom: 0; }
.o-md h5, .o-md h6 { margin: var(--e-4) 0 var(--e-1); color: var(--ink-2); font-size: var(--t-13); font-weight: 600; line-height: 1.3; }
.o-md .o-md-tarefa { list-style: none; }
.o-md .o-md-caixa { width: 14px; height: 14px; margin: 0 var(--e-2) 0 -1.4em; vertical-align: -2px; accent-color: var(--accent); }
.o-md .o-md-ligacao { text-decoration-style: dotted; }
.o-md .o-md-imagem .o-ic { margin-right: var(--e-1); }
.o-md-tabela .o-md-centro { text-align: center; }
.o-md-tabela .o-md-direita { text-align: right; }
.o-md-tabela { max-width: 100%; margin: 0 0 var(--e-3); overflow-x: auto; border: 1px solid var(--linha); border-radius: var(--r-cartao); }
.o-md-tabela table, .o-tabela { width: 100%; border-collapse: collapse; font-size: var(--t-13); font-variant-numeric: tabular-nums; }
.o-md-tabela th, .o-tabela th {
  padding: var(--e-2) var(--e-3); border-bottom: 1px solid var(--linha-2); color: var(--ink-3); text-align: left; white-space: nowrap;
  font: 600 var(--t-11)/1.3 var(--mono); letter-spacing: .06em; text-transform: uppercase;
}
.o-md-tabela td, .o-tabela td { padding: var(--e-2) var(--e-3); border-bottom: 1px solid var(--linha-fraca); color: var(--ink-2); vertical-align: top; }
.o-md-tabela tr:last-child td, .o-tabela tr:last-child td { border-bottom: 0; }
.o-md-tabela-mais { margin: 0; padding: var(--e-2) var(--e-3); border-top: 1px solid var(--linha); color: var(--ink-3); font-size: var(--t-12); }
.o-tabela-caixa { max-width: 100%; overflow-x: auto; border: 1px solid var(--linha); border-radius: var(--r-cartao); background: var(--painel); }
.o-tabela .o-num, .o-md-tabela .o-num { text-align: right; color: var(--ink); font-family: var(--mono); }

/* o bloco de código com «Copiar» (o rolar de lado fica dentro do bloco, nunca na página) */
.o-codigo { min-width: 0; margin: 0 0 var(--e-3); border: 1px solid var(--linha); border-radius: var(--r-caixa); background: var(--void); overflow: hidden; }
.o-codigo-cabeca {
  display: flex; align-items: center; gap: var(--e-2); min-height: 32px; padding: 0 var(--e-1) 0 var(--e-3);
  border-bottom: 1px solid var(--linha); background: var(--painel);
}
.o-codigo-lingua { flex: 1; min-width: 0; color: var(--ink-3); font: 500 var(--t-11)/1.3 var(--mono); letter-spacing: .04em; }
.o-codigo pre, .o-md pre {
  margin: 0; padding: var(--e-3); max-height: 360px; overflow: auto; color: var(--ink); background: var(--void);
  font: 400 var(--t-12)/1.6 var(--mono); tab-size: 2; white-space: pre;
}
.o-md pre { margin: 0 0 var(--e-3); border: 1px solid var(--linha); border-radius: var(--r-caixa); }
.o-codigo pre { border: 0; border-radius: 0; margin: 0; }
.o-copiar[data-copiado] { color: var(--ok); }

/* a linha de atividade (o que a IA fez, uma linha por ação: neutra, só o estado tem cor) */
.o-atividade { display: flex; flex-direction: column; gap: 2px; min-width: 0; margin-top: var(--e-2); }
.o-atividade-resumo {
  display: inline-flex; align-items: center; gap: var(--e-2); align-self: flex-start; max-width: 100%;
  min-height: 28px; padding: 2px var(--e-2); border: 1px solid var(--linha); border-radius: var(--r);
  background: none; color: var(--ink-2); font: 400 var(--t-12)/1.35 var(--mono); text-align: left;
}
.o-atividade-resumo:hover { background: var(--hover); color: var(--ink); }
.o-atividade-resumo > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.o-atividade-resumo .o-ic { transition: transform var(--dur); }
.o-atividade-resumo[aria-expanded="true"] .o-ic:first-child { transform: rotate(90deg); }
.o-acoes-lista { display: flex; flex-direction: column; min-width: 0; margin: 0; padding: 0; list-style: none; }
.o-acao {
  display: flex; align-items: center; gap: var(--e-2); width: 100%; min-width: 0; min-height: 28px; padding: 2px var(--e-2);
  border: 0; border-radius: var(--r); background: none; color: var(--ink-2); text-align: left; font: 400 var(--t-12)/1.35 var(--mono);
}
button.o-acao:hover { background: var(--hover); }
.o-acao > .o-ic { width: 14px; height: 14px; color: var(--ink-3); }
.o-acao-verbo { flex: none; color: var(--ink-2); }
.o-acao-alvo { flex: 1; min-width: 0; color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.o-acao-estado { display: inline-flex; align-items: center; flex: none; color: var(--ink-3); }
.o-acao-tempo { flex: none; color: var(--ink-3); font-size: var(--t-11); font-variant-numeric: tabular-nums; }
.o-acao--ok .o-acao-estado { color: var(--ok); }
.o-acao--erro .o-acao-estado { color: var(--erro); }
.o-acao--erro .o-acao-alvo { color: var(--erro); }
.o-ferramenta { min-width: 0; margin: var(--e-1) 0 var(--e-2); border: 1px solid var(--linha); border-radius: var(--r); background: var(--painel); overflow: hidden; }
.o-ferramenta-cabeca {
  display: flex; align-items: center; gap: var(--e-2); min-height: 32px; padding: 0 var(--e-1) 0 var(--e-3);
  border-bottom: 1px solid var(--linha); color: var(--ink-2); font: 500 var(--t-12)/1.35 var(--mono);
}
.o-ferramenta-cabeca > .o-ic { color: var(--accent-texto); }
.o-ferramenta-cabeca > span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.o-ferramenta pre {
  margin: 0; max-height: 240px; overflow: auto; padding: var(--e-3); color: var(--ink-2);
  font: 400 var(--t-12)/1.6 var(--mono); white-space: pre-wrap; overflow-wrap: anywhere;
}

/* o cartão de subagente (completo) e a versão curta (uma linha, para a Visão e para a lista) */
.o-sub {
  display: flex; flex-direction: column; gap: var(--e-2); min-width: 0; max-width: 560px; padding: var(--e-3);
  border: 1px solid var(--linha); border-radius: var(--r-caixa); background: var(--painel-2);
}
.o-sub-cabeca { display: flex; flex-wrap: wrap; align-items: center; gap: var(--e-2); min-width: 0; }
.o-sub-cabeca > .o-ic { color: var(--ink-3); }
/* no cartão completo, o estado fica logo a seguir ao nome (a regra da casa: nunca na ponta da linha), e desce para
   debaixo dele quando não cabe; o ícone vai dentro do título, para nunca ficar sozinho numa linha (revisão do fecho,
   18/10: o título esticava e empurrava «A trabalhar» para a ponta, a mil píxeis do nome, com o telemóvel deitado) */
.o-sub:not(.o-sub--curto) > .o-sub-cabeca > .o-sub-titulo { flex: 0 1 auto; }
.o-sub-titulo > .o-ic { margin-right: var(--e-2); vertical-align: -3px; color: var(--ink-3); }
.o-sub-titulo {
  min-width: 0; margin: 0; color: var(--ink); font: 600 var(--t-13)/1.5 var(--sans);
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.o-sub-faz { margin: 0; color: var(--ink-2); font-size: var(--t-13); line-height: 1.5; }
.o-sub-ultima { display: flex; align-items: center; gap: var(--e-2); min-width: 0; color: var(--ink-3); font: 400 var(--t-12)/1.4 var(--mono); }
.o-sub-ultima > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.o-sub-ultima > .o-sub-ha { flex: none; }
.o-sub .o-acoes { margin-top: var(--e-1); }
/* a versão curta: o ponto e o «Ver» ficam ao centro da linha inteira (as duas linhas: o título e a última ação) */
.o-sub--curto {
  display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; column-gap: var(--e-3); row-gap: 2px;
  max-width: none; padding: var(--e-2) 0; border: 0; border-top: 1px solid var(--linha); border-radius: 0; background: none;
}
.o-sub--curto:first-child { border-top: 0; }
.o-sub--curto > .o-ponto { grid-row: 1 / span 2; }
.o-sub--curto .o-sub-cabeca, .o-sub--curto .o-sub-ultima { grid-column: 2; }
.o-sub--curto > .o-acoes { grid-column: 3; grid-row: 1 / span 2; margin: 0; }
.o-faixa {
  display: flex; align-items: center; gap: var(--e-2); min-width: 0; min-height: 36px; padding: var(--e-1) var(--e-1) var(--e-1) var(--e-3);
  border: 1px solid var(--accent-linha); border-radius: var(--r); background: var(--painel-2); color: var(--ink); font-size: var(--t-13);
}
.o-faixa > span:not(.o-ponto) { flex: 1; min-width: 0; }   /* o ponto de estado fica um ponto (não estica) */

/* a pergunta da IA, com as opções em botões (e responder no terminal) */
.o-pergunta { min-width: 0; padding: var(--e-3) var(--e-4); border: 1px solid var(--accent-linha); border-radius: var(--r-caixa); background: var(--accent-fundo); }
.o-pergunta-titulo { display: flex; align-items: center; gap: var(--e-2); margin: 0 0 var(--e-1); color: var(--accent-texto); font: 600 var(--t-13)/1.4 var(--sans); }
.o-pergunta-texto { margin: 0 0 var(--e-3); color: var(--ink); font-size: var(--t-14); line-height: 1.5; }
.o-pergunta-opcoes { display: flex; flex-direction: column; gap: var(--e-2); }
.o-opcao {
  display: flex; align-items: center; gap: var(--e-3); width: 100%; min-height: var(--ctl-campo); padding: var(--e-1) var(--e-3);
  border: 1px solid var(--linha-2); border-radius: var(--r); background: var(--painel); color: var(--ink);
  font: 400 var(--t-14)/1.4 var(--sans); text-align: left;
}
.o-opcao:hover { border-color: var(--accent-linha); }
.o-opcao-n {
  display: grid; place-items: center; width: 24px; height: 24px; flex: none; border: 1px solid var(--linha-2); border-radius: var(--r);
  background: var(--painel-2); color: var(--ink-2); font: 600 var(--t-12)/1 var(--mono);
}
.o-pergunta .o-acoes { margin-top: var(--e-2); }

/* a caixa de escrever */
.o-compor { padding: var(--e-3) var(--e-4); border-top: 1px solid var(--linha); background: var(--painel); }
.o-compor-caixa {
  display: flex; flex-direction: column; gap: var(--e-2); min-width: 0; padding: var(--e-2) var(--e-2) var(--e-2) var(--e-3);
  border: 1px solid var(--linha-campo); border-radius: var(--r-caixa); background: var(--painel-2);
}
.o-compor-caixa:focus-within { border-color: var(--accent-texto); box-shadow: 0 0 0 1px var(--accent-texto); }
.o-compor-texto {
  width: 100%; min-height: 52px; max-height: 200px; padding: var(--e-1) 0; border: 0; outline: none; resize: none;
  background: none; color: var(--ink); font: 400 var(--t-15)/1.5 var(--sans);
}
.o-compor-texto::placeholder { color: var(--ink-3); opacity: 1; }
.o-anexos { display: flex; flex-wrap: wrap; gap: var(--e-2); min-width: 0; }
.o-anexos:empty { display: none; }
.o-anexo {
  display: inline-flex; align-items: center; gap: var(--e-1); max-width: 100%; min-height: 26px; padding: 2px 2px 2px var(--e-2);
  border: 1px solid var(--linha-2); border-radius: var(--r-pilula); background: var(--painel-3); color: var(--ink-2); font: 500 var(--t-11)/1.3 var(--mono);
}
.o-anexo > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.o-anexo > button {
  position: relative; display: grid; place-items: center; width: 20px; height: 20px; flex: none; padding: 0;
  border: 0; border-radius: 50%; background: none; color: var(--ink-3);
}
.o-anexo > button:hover { background: var(--hover); color: var(--ink); }
.o-compor-barra { display: flex; flex-wrap: wrap; align-items: center; gap: var(--e-2); min-width: 0; }
.o-compor-dica { flex: 1; min-width: 0; color: var(--ink-3); font: 400 var(--t-11)/1.4 var(--mono); }
.o-compor-barra > .o-btn--primario { margin-left: auto; }

/* as diferenças de um ficheiro editado, o terminal e as teclas */
.o-diff { min-width: 0; margin: 0; border: 1px solid var(--linha); border-radius: var(--r-caixa); background: var(--void); overflow: hidden; }
.o-diff-cabeca { display: flex; align-items: center; gap: var(--e-2); min-height: 32px; padding: 0 var(--e-3); border-bottom: 1px solid var(--linha); background: var(--painel); color: var(--ink-2); font: 500 var(--t-12)/1.35 var(--mono); }
.o-diff-cabeca > span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.o-diff-mais { color: var(--ok); }
.o-diff-menos { color: var(--erro); }
.o-diff-corpo { margin: 0; padding: var(--e-2) 0; overflow-x: auto; font: 400 var(--t-12)/1.6 var(--mono); }
.o-diff-linha { display: block; min-width: max-content; padding: 0 var(--e-3) 0 var(--e-6); color: var(--ink-2); white-space: pre; position: relative; }
.o-diff-linha::before { content: ' '; position: absolute; left: var(--e-2); }
.o-diff-linha--mais { background: var(--ok-fundo); color: var(--ink); }
.o-diff-linha--mais::before { content: '+'; color: var(--ok); }
.o-diff-linha--menos { background: var(--erro-fundo); color: var(--ink); }
.o-diff-linha--menos::before { content: '−'; color: var(--erro); }
.o-terminal {
  margin: 0; padding: var(--e-3) var(--e-4); overflow: auto; border: 1px solid var(--linha); border-radius: var(--r-cartao);
  background: var(--terminal); color: var(--terminal-texto); font: 400 var(--t-13)/1.5 var(--mono-terminal); white-space: pre-wrap; overflow-wrap: anywhere;
}
.o-teclas { display: flex; flex-wrap: wrap; gap: var(--e-2); }
.o-tecla {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--e-1); min-width: 36px; min-height: var(--ctl); padding: 0 var(--e-2);
  border: 1px solid var(--linha-2); border-radius: var(--r); background: var(--painel-2); color: var(--ink-2); font: 500 var(--t-12)/1 var(--mono);
}
.o-tecla:hover { border-color: var(--accent-linha); color: var(--accent-texto); }

/* ── Listas, tabelas, detalhes, passos, valor copiável ──────────────────────────────────────────────────────────── */
.o-lista { min-width: 0; margin: 0; padding: 0; list-style: none; border: 1px solid var(--linha); border-radius: var(--r-cartao); background: var(--painel); overflow: hidden; }
.o-lista--sem-caixa { border: 0; border-radius: 0; background: none; overflow: visible; }
.o-linha { display: flex; align-items: center; gap: var(--e-3); min-width: 0; min-height: 44px; padding: var(--e-2) var(--e-3); border-top: 1px solid var(--linha); }
.o-lista > li:first-child > .o-linha, .o-lista > .o-linha:first-child { border-top: 0; }
a.o-linha, button.o-linha { width: 100%; border-left: 0; border-right: 0; border-bottom: 0; background: none; color: inherit; text-align: left; text-decoration: none; font: inherit; }
a.o-linha:hover, button.o-linha:hover { background: var(--hover); }
a.o-linha:focus-visible, button.o-linha:focus-visible { outline-offset: -2px; }
.o-linha-corpo { display: flex; flex: 1; flex-direction: column; gap: 2px; min-width: 0; }
.o-linha-titulo { display: flex; flex-wrap: wrap; align-items: center; gap: var(--e-2); min-width: 0; color: var(--ink); font: 600 var(--t-13)/1.5 var(--sans); }
.o-linha-meta { min-width: 0; color: var(--ink-3); font: 400 var(--t-12)/1.4 var(--mono); overflow-wrap: anywhere; }
.o-linha-fim { display: flex; flex: none; align-items: center; gap: var(--e-2); color: var(--ink-3); }

.o-detalhe { min-width: 0; border: 1px solid var(--linha); border-radius: var(--r-cartao); background: var(--painel); }
.o-detalhe > summary {
  display: flex; align-items: center; gap: var(--e-2); min-height: 40px; padding: 0 var(--e-3); border-radius: var(--r-cartao);
  color: var(--ink-2); font: 500 var(--t-13)/1.3 var(--sans); list-style: none; cursor: pointer;
}
.o-detalhe > summary::-webkit-details-marker { display: none; }
.o-detalhe > summary:hover { color: var(--ink); }
.o-detalhe > summary .o-ic { transition: transform var(--dur); }
.o-detalhe[open] > summary .o-ic:first-child { transform: rotate(90deg); }
.o-detalhe-corpo { padding: 0 var(--e-3) var(--e-3); color: var(--ink-2); font-size: var(--t-13); line-height: 1.5; }

/* items-start de propósito: cada passo é uma coluna (o círculo e o nome por baixo, que pode partir) */
.o-passos { display: flex; align-items: flex-start; min-width: 0; margin: 0; padding: 0; list-style: none; }
.o-passo { position: relative; display: flex; flex: 1 1 0; flex-direction: column; align-items: center; gap: var(--e-2); min-width: 0; color: var(--ink-3); font-size: var(--t-12); line-height: 1.35; text-align: center; }
.o-passo::after { content: ''; position: absolute; top: 14px; left: calc(50% + 20px); right: calc(-50% + 20px); height: 1px; background: var(--linha-2); }
.o-passo:last-child::after { display: none; }
.o-passo-n {
  position: relative; z-index: 1; display: grid; place-items: center; width: 28px; height: 28px; flex: none;
  border: 1px solid var(--linha-campo); border-radius: 50%; background: var(--painel); color: var(--ink-2); font: 600 var(--t-12)/1 var(--mono);
}
.o-passo[aria-current="step"] { color: var(--ink); }
.o-passo[aria-current="step"] .o-passo-n { border-color: var(--accent); background: var(--accent); color: var(--sobre-accent); }
.o-passo--feito .o-passo-n { border-color: var(--ok); background: var(--ok-fundo); color: var(--ok); }
.o-passo--feito::after { background: var(--ok-linha); }

.o-copiavel { display: flex; align-items: center; gap: var(--e-2); min-width: 0; padding: var(--e-1) var(--e-1) var(--e-1) var(--e-3); border: 1px solid var(--linha-2); border-radius: var(--r); background: var(--void); }
.o-copiavel-valor { flex: 1; min-width: 0; color: var(--ink); font: 400 var(--t-12)/1.45 var(--mono); overflow-wrap: anywhere; user-select: all; -webkit-user-select: all; }

/* ── A entrada (o portão): a entrada, o código, a ativação, o convite e o onboarding ─────────────────────────────── */
.o-portao {
  display: flex; align-items: center; justify-content: center; min-height: 100vh; min-height: 100dvh;
  padding: max(24px, env(safe-area-inset-top, 0px)) var(--margem-d) max(24px, env(safe-area-inset-bottom, 0px)) var(--margem-e);
  background: radial-gradient(circle at 50% 18%, rgb(var(--accent-texto-rgb) / .06), transparent 55%), var(--void);
}
.o-portao-caixa { width: 100%; max-width: 380px; margin: auto; padding: var(--e-6); border: 1px solid var(--linha); border-radius: var(--r-janela); background: var(--painel); }
.o-portao-caixa--media { max-width: 480px; }
.o-portao-caixa--larga { max-width: 760px; }
.o-portao-marca { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: var(--e-3); margin: 0 0 var(--e-4); }
.o-portao-titulo { margin: 0 0 var(--e-1); color: var(--ink); font: 600 var(--t-16)/1.3 var(--sans); text-align: center; }
.o-portao-legenda { margin: 0 0 var(--e-5); color: var(--ink-3); font-size: var(--t-13); line-height: 1.5; text-align: center; }
.o-portao .o-form > .o-btn--primario { width: 100%; }
.o-portao-rodape { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--e-2); margin-top: var(--e-4); }

/* no computador largo, o nome da empresa tem lugar (260 px cortavam «Gabinete Exemplo de Contabilidade» com espaço de sobra) */
@media (min-width: 75em) {
  .o-empresa { max-width: 400px; }
}

/* Os pontos de viragem estão em em (16 px cada, à letra normal): seguem o tamanho de letra do browser, como o zoom.
   ── Computador estreito e tablet deitado ───────────────────────────────────────────────────────────────────────── */
@media (min-width: 53.8125em) and (max-width: 68.75em) and (min-height: 31.3125em) {
  .o-topo { gap: var(--e-3); }
  .o-abas > .o-aba > .o-ic:first-child, .o-mais-ancora > .o-aba > .o-ic:first-child { display: none; }
  .o-estado-ia-texto { position: absolute !important; width: 1px; height: 1px; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }
  .o-estado-ia-n { display: inline; }
  .o-estado-ia { min-width: var(--ctl); justify-content: center; }
  .o-aba { padding: 0 var(--e-2); }
}

/* ── Toque: controlos de 44 px e campos de 16 px (o iPhone faz zoom com menos) ──────────────────────────────────── */
@media (max-width: 53.75em), (pointer: coarse) {
  :root:root:root { --ctl: 44px; --ctl-campo: 44px; --ctl-grande: 48px; }
  .o-entrada, .o-select, .o-area, .o-compor-texto { font-size: max(16px, var(--t-16)); }
  .o-entrada--codigo { font-size: var(--t-24); }
  .o-btn--fino { min-height: var(--ctl); padding: var(--e-1) var(--e-3); }
  .o-btn--icone.o-btn--fino { width: var(--ctl); min-width: var(--ctl); }
  .o-avatar::before, .o-interruptor::before { content: ''; position: absolute; inset: -10px; }
  .o-anexo > button::before { content: ''; position: absolute; inset: -12px; }
  a.o-marca { min-height: var(--ctl); }
  .o-tecla { min-width: var(--ctl); }
  /* 44 px de alvo, mas a caixa fica na primeira linha do texto (com o center, ficava ao meio das três linhas) */
  .o-marcar { min-height: var(--ctl); align-items: flex-start; }
  .o-sep, .o-filtro, .o-mais-item, .o-menu-item, .o-atividade-resumo, .o-acao, .o-detalhe > summary, .o-tecla, .o-faixa { min-height: var(--ctl); }
  .o-linha { min-height: 48px; }
  .o-mais-item, .o-menu-item { font-size: var(--t-14); }
  /* no telemóvel, o que se lê fica com 12 px ou mais (as etiquetas em maiúsculas podem ficar nos 11) */
  .o-pill, .o-chip, .o-barra-cabeca, .o-anexo, .o-compor-dica, .o-acao-tempo, .o-msg-meta,
  .o-rodape, .o-codigo-lingua, .o-sep-n, .o-conta, .o-quem { font-size: var(--t-12); }
  .o-empresa { font-size: var(--t-12); letter-spacing: .08em; }
  /* nada só ao passar o rato: no toque, o que aparece com o rato está sempre à vista */
  .o-so-rato { display: none !important; }
}
@supports (-webkit-touch-callout: none) {
  .o-entrada, .o-select, .o-area, .o-compor-texto { font-size: max(16px, var(--t-16)); }
}

/* ── Telemóvel (até 860 px, ou toque deitado com pouca altura): a barra de baixo e as folhas ────────────────────── */
@media (max-width: 53.75em), (pointer: coarse) and (max-height: 31.25em) {
  :root:root:root {
    --t-corpo: var(--t-15); --t-msg: var(--t-16); --t-titulo: var(--t-18);
    --nav-ocupa: calc(var(--nav-alt) + env(safe-area-inset-bottom, 0px));
  }
  .o-so-telemovel { display: revert !important; }
  svg.o-so-telemovel { display: inline !important; }
  .o-so-computador { display: none !important; }
  .o-topo { gap: var(--e-3); }
  .o-topo-dir { gap: var(--e-1); }
  /* a barra de baixo: o mesmo <nav> e os mesmos separadores, noutro sítio */
  .o-abas {
    position: fixed; left: 0; right: 0; bottom: 0; z-index: var(--z-abas);
    gap: 0; align-items: stretch; height: var(--nav-ocupa);
    padding: 0 env(safe-area-inset-right, 0px) env(safe-area-inset-bottom, 0px) env(safe-area-inset-left, 0px);
    border-top: 1px solid var(--linha); background: var(--painel);
  }
  .o-abas > .o-aba, .o-mais-ancora { flex: 1 1 0; min-width: 0; }
  .o-aba {
    width: 100%; height: 100%; min-height: 0; flex-direction: column; justify-content: center; gap: var(--e-1);
    padding: var(--e-1) 0; border: 0; border-radius: 0; font: 500 var(--t-12)/1.3 var(--sans);
    container: o-aba / inline-size;   /* cada separador é o contentor (a barra não: o «Mais» fixo ficava preso a ela) */
  }
  .o-aba .o-ic { width: 20px; height: 20px; }
  .o-aba-rotulo, .o-aba-curto { display: block; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .o-aba:has(.o-aba-curto) .o-aba-rotulo { display: none; }
  .o-aba:hover { background: none; }
  .o-aba[aria-current="page"], .o-aba--mais[aria-expanded="true"] { border: 0; background: none; color: var(--ink); }
  .o-aba[aria-current="page"] { box-shadow: inset 0 2px 0 var(--accent); }
  .o-aba:focus-visible { outline-offset: -3px; }
  .o-aba-seta { display: none; }
  .o-aba > .o-conta { position: absolute; top: var(--e-1); left: calc(50% + var(--e-1)); }
  /* o «Mais» como folha de baixo, com o véu */
  .o-mais-ancora { position: static; }
  .o-mais {
    position: fixed; top: auto; left: 0; right: 0; bottom: 0; z-index: var(--z-veu);
    width: auto; max-height: min(85vh, 85dvh); padding: var(--e-2) var(--margem-d) calc(var(--e-4) + env(safe-area-inset-bottom, 0px)) var(--margem-e);
    border-width: 1px 0 0; border-radius: var(--r-janela) var(--r-janela) 0 0; animation: o-entra-baixo var(--dur-2) ease-out;
  }
  .o-mais-veu { position: fixed; inset: 0; z-index: var(--z-veu); display: block; background: var(--veu-leve); animation: o-aparece var(--dur) ease-out; }
  .o-mais-veu[hidden] { display: none !important; }
  .o-mais-item { min-height: 48px; gap: var(--e-3); }
  .o-mais-item .o-ic { width: 20px; height: 20px; }
  /* a página acaba por cima da barra */
  .o-pagina { padding-top: var(--e-5); padding-bottom: calc(var(--nav-ocupa) + var(--e-6)); }
  .o-cartao { padding: var(--e-4); }
  .o-grupo-rotulo { margin-top: var(--e-6); }
  .o-pagina-cabeca { row-gap: 2px; }
  .o-dado-valor { white-space: normal; overflow-wrap: anywhere; }
  .o-compor-dica { display: none; }
  .o-rodape { display: none; }
  /* a folha vem de baixo */
  .o-folha {
    top: auto; left: 0; width: auto; max-height: calc(100% - var(--e-12));
    border-left: 0; border-top: 1px solid var(--linha-2); border-radius: var(--r-janela) var(--r-janela) 0 0;
    animation: o-entra-baixo var(--dur-2) ease-out;
    /* deitado, o iPhone tem o entalhe dos lados: o que a folha leva fica fora dele */
    padding-left: env(safe-area-inset-left, 0px); padding-right: env(safe-area-inset-right, 0px);
  }
  .o-folha-pega { display: block; }
  .o-folha--inteira { top: 0; max-height: none; border-radius: 0; border-top: 0; padding-top: env(safe-area-inset-top, 0px); }
  .o-folha--inteira .o-folha-pega { display: none; }
  /* as janelas: os botões empilhados, com o principal em cima */
  .o-janela-acoes { flex-direction: column-reverse; align-items: stretch; }
  .o-janela-acoes .o-btn { width: 100%; }
  .o-veu { place-items: start center; }
  .o-janela { margin: auto 0; }
  /* a entrada: em cima, com rolar se o teclado a apertar */
  .o-portao { align-items: flex-start; }
  .o-portao-caixa { padding: var(--e-5) var(--e-4); }
}
/* telemóvel deitado: a barra mais baixa, com o ícone ao lado do nome (e o número a seguir à palavra: posto a meio, como
   para o ícone em cima do nome, caía em cima dela) */
@media (max-width: 53.75em) and (max-height: 31.25em), (pointer: coarse) and (max-height: 31.25em) {
  :root:root:root { --nav-alt: 48px; }
  .o-aba { flex-direction: row; gap: var(--e-2); }
  .o-aba > .o-conta { position: static; }
}
/* com o texto grande (o tamanho de letra do browser) ou num ecrã muito estreito, os nomes dos separadores deixam de
   caber: ficam só os ícones, com o nome para o leitor de ecrã («Estrutura», a 12 px, pede uns 3,2 rem; a 16 px cabe a
   320 px) */
@container o-aba (max-width: 3.2rem) {
  .o-aba-rotulo, .o-aba-curto {
    position: absolute !important; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden;
    clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0;
  }
}
@media (max-width: 25em) {
  .o-estado-ia-texto { position: absolute !important; width: 1px; height: 1px; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }
  .o-estado-ia-n { display: inline; }
  .o-estado-ia { min-width: var(--ctl); justify-content: center; }
}
@media (max-width: 22.5em) {
  .o-topo { gap: var(--e-2); }
  .o-marca { letter-spacing: .08em; }
  .o-empresa { padding: 2px var(--e-1); letter-spacing: .04em; }
}
@media (max-width: 40em) {
  /* as tabelas que viram cartões: cada linha em blocos, com o nome da coluna (data-rotulo) à frente do valor */
  .o-tabela--cartoes thead { position: absolute; width: 1px; height: 1px; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  .o-tabela--cartoes, .o-tabela--cartoes tbody, .o-tabela--cartoes tr, .o-tabela--cartoes td { display: block; width: 100%; }
  .o-tabela--cartoes tr { padding: var(--e-2) var(--e-3); border-bottom: 1px solid var(--linha); }
  .o-tabela--cartoes tr:last-child { border-bottom: 0; }
  .o-tabela--cartoes td { display: flex; justify-content: space-between; gap: var(--e-3); padding: 2px 0; border: 0; text-align: right; }
  .o-tabela--cartoes td::before { content: attr(data-rotulo); color: var(--ink-3); font: 600 var(--t-11)/1.5 var(--mono); letter-spacing: .06em; text-transform: uppercase; text-align: left; }
}

/* ── Movimento reduzido: sem pulsos nem deslizes (o estado fica, parado, com a palavra ao lado) ─────────────────── */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important; animation-iteration-count: 1 !important; animation-delay: 0s !important;
    transition-duration: .01ms !important; scroll-behavior: auto !important;
  }
  .o-pontos > i { animation: none !important; opacity: .7; }
}

/* ── Cores forçadas (o alto contraste do Windows): os contornos e o foco à vista ────────────────────────────────── */
@media (forced-colors: active) {
  .o-entrada:focus, .o-select:focus, .o-area:focus, .o-compor-caixa:focus-within { outline: 2px solid Highlight; outline-offset: 1px; }
  .o-aba[aria-current="page"], .o-sep[aria-selected="true"], .o-escolha[aria-checked="true"], .o-escolha[aria-pressed="true"],
  .o-filtro[aria-pressed="true"], .o-btn[aria-pressed="true"] { outline: 2px solid Highlight; }
  .o-interruptor[aria-checked="true"]::after { background: Highlight; }
  .o-ponto, .o-barra-valor, .o-pill-ponto { forced-color-adjust: none; }
}
