/*
 * Sistema visual da interface — tokens e componentes.
 *
 * Antes disto, a UI não tinha sistema: `app/shared/theme.js` eram 11 cores e
 * dois objetos de botão, e todo o resto vivia em 652 objetos `style={{}}`
 * inline com 44 hex soltos. Não havia token de espaço, raio, sombra ou
 * tipografia — só números mágicos — e como `style` não expressa `:hover` nem
 * `:focus`, nenhum controle do app tinha estado. O único foco visível de toda
 * a aplicação estava em `login.html`.
 *
 * Duas decisões estruturais:
 *
 * 1. As cores derivam de `slides/_tokens.css`, que já é a fonte única da marca
 *    (`--brand-navy`, `--brand-teal`, ...). Nada de paleta nova: a interface
 *    passa a ser a mesma marca dos slides, não uma segunda.
 *
 * 2. Todo seletor daqui é prefixado com `ui-`. O preview dos slides é
 *    renderizado dentro do DOM do app, e os CSS de tipo de post usam nomes genéricos
 *    (`.core`, `.headline`, `.eyebrow`, `.list`, `.accent`). O prefixo garante
 *    que interface e slide nunca se pintem por engano — o PNG entregue não pode
 *    mudar por causa de um botão.
 *
 * Carregado depois de `slides/_tokens.css`, de quem depende.
 */

/* =================================================================
   1. Tokens
   ================================================================= */

:root {
  /* --- superfícies escuras: a casca, na linguagem do login --- */
  --ui-shell-bg: #0D1A35;
  --ui-shell-raise: #14254A;
  --ui-shell-fg: #E8F6F9;
  --ui-shell-fg-dim: rgba(232, 246, 249, 0.62);
  --ui-shell-fg-faint: rgba(232, 246, 249, 0.38);
  --ui-shell-rule: rgba(0, 164, 186, 0.20);
  --ui-shell-hover: rgba(0, 164, 186, 0.12);

  /*
   * --- superfícies claras: a área de trabalho ---
   *
   * Os fallbacks existem para a página de login, que carrega este arquivo sem
   * `slides/_tokens.css` — ela é servida antes da sessão e não tem por que
   * baixar as folhas dos cinco tipos de post. Quando `_tokens.css` está presente,
   * ele vence; a marca continua definida num lugar só.
   */
  --ui-surface: var(--brand-white, #FFFFFF);
  --ui-surface-sunken: #F4FAFC;
  --ui-surface-raise: var(--brand-white, #FFFFFF);
  --ui-text: var(--brand-navy, #1A2E5A);
  --ui-text-dim: var(--brand-muted, #6B7280);
  --ui-text-faint: #9AA5B4;
  --ui-rule: #DCEEF3;
  --ui-rule-strong: #B9E2EA;

  /* --- acento --- */
  --ui-accent: var(--brand-teal, #00A4BA);
  --ui-accent-hover: #0092A6;
  --ui-accent-soft: rgba(0, 164, 186, 0.10);
  --ui-accent-fg: var(--brand-white, #FFFFFF);
  --ui-focus: var(--brand-teal, #00A4BA);

  /* --- semânticas de estado --- */
  --ui-danger: #C0392F;
  --ui-danger-soft: #FDF0EE;
  --ui-danger-rule: #F3C9C4;
  --ui-warn: #B4690E;
  --ui-warn-soft: #FDF4E7;
  --ui-warn-rule: #F0D9B4;
  --ui-ok: #0F7B5A;
  --ui-ok-soft: #EAF7F2;

  /*
   * Acento por tipo de post. Antes era um arco-íris herdado de outro projeto
   * (#EA580C, #2563EB, #0F766E, #7C3AED, #B45309) sem relação com a marca e
   * ilegível sobre navy. Estes cinco têm luminosidade e croma equivalentes,
   * então distinguem sem competir, e ficam legíveis na casca escura.
   * `app/shared/registry.js` repete estes valores — é ele que a sidebar lê.
   */
  --ui-post-type-responde: #5FCCDB;
  --ui-post-type-quanto-custa: #7ED9A8;
  --ui-post-type-news: #8FB5F5;
  --ui-post-type-cine: #B79CF2;
  --ui-post-type-carousel: #F2B872;

  /* --- espaço --- */
  --ui-sp-1: 4px;
  --ui-sp-2: 8px;
  --ui-sp-3: 12px;
  --ui-sp-4: 16px;
  --ui-sp-5: 24px;
  --ui-sp-6: 32px;
  --ui-sp-7: 40px;
  --ui-sp-8: 56px;

  /* --- raio --- */
  --ui-r-sm: 6px;
  --ui-r-md: 10px;
  --ui-r-lg: 14px;
  --ui-r-full: 999px;

  /* --- sombra --- */
  --ui-shadow-sm: 0 1px 2px rgba(13, 26, 53, 0.06);
  --ui-shadow-md: 0 4px 14px rgba(13, 26, 53, 0.08);
  --ui-shadow-lg: 0 18px 44px rgba(13, 26, 53, 0.16);

  /* --- tipografia --- */
  --ui-font: Inter, system-ui, -apple-system, sans-serif;
  --ui-font-display: "Roboto Condensed", Inter, system-ui, sans-serif;
  --ui-font-mono: ui-monospace, "SF Mono", Menlo, monospace;
  --ui-fs-micro: 11px;
  --ui-fs-xs: 12px;
  --ui-fs-sm: 13px;
  --ui-fs-md: 14px;
  --ui-fs-lg: 16px;
  --ui-fs-xl: 20px;
  --ui-fs-2xl: 26px;

  /* --- camadas --- */
  --ui-z-sticky: 30;
  --ui-z-drawer: 40;
  --ui-z-backdrop: 50;
  --ui-z-modal: 1000;
  --ui-z-toast: 1100;

  /* --- movimento --- */
  --ui-t-fast: 120ms ease;
  --ui-t-med: 200ms ease;
}

/* =================================================================
   2. Base
   ================================================================= */

html,
body {
  margin: 0;
  padding: 0;
  font-family: var(--ui-font);
  background: var(--ui-surface-sunken);
  color: var(--ui-text);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

* { box-sizing: border-box; }

button { font-family: inherit; }
code { font-family: var(--ui-font-mono); }

/*
 * Foco visível, uma vez só, para tudo.
 *
 * O `!important` não é preguiça. As telas ainda não migradas desenham seus
 * controles com `<button style={{all: "unset"}}>`, e estilo inline vence
 * qualquer regra de folha: sem `!important` o anel de foco perderia justamente
 * onde é mais necessário. Assim o teclado volta a enxergar em todas as telas
 * antes de qualquer uma ser reescrita, e a declaração pode cair quando a
 * última migrar.
 *
 * `:focus-visible` só marca foco de teclado — o clique de mouse segue limpo.
 */
:where(a, button, input, textarea, select, [tabindex]):focus-visible {
  outline: 2px solid var(--ui-focus) !important;
  outline-offset: 2px !important;
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

/* =================================================================
   3. Botões
   ================================================================= */

.ui-btn {
  appearance: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--ui-sp-2);
  min-height: 36px;
  padding: 0 var(--ui-sp-4);
  border: 1px solid transparent;
  border-radius: var(--ui-r-sm);
  background: transparent;
  color: var(--ui-text);
  font-family: var(--ui-font);
  font-size: var(--ui-fs-sm);
  font-weight: 600;
  line-height: 1;
  white-space: nowrap;
  cursor: pointer;
  transition: background var(--ui-t-fast), color var(--ui-t-fast),
    border-color var(--ui-t-fast), box-shadow var(--ui-t-fast);
}

.ui-btn:disabled,
.ui-btn[aria-disabled="true"] {
  opacity: 0.45;
  cursor: not-allowed;
}

.ui-btn--primary {
  background: var(--ui-accent);
  color: var(--ui-accent-fg);
  box-shadow: var(--ui-shadow-sm);
}
.ui-btn--primary:hover:not(:disabled) { background: var(--ui-accent-hover); }
.ui-btn--primary:active:not(:disabled) { box-shadow: none; transform: translateY(1px); }

.ui-btn--secondary {
  background: var(--ui-surface);
  border-color: var(--ui-rule-strong);
  color: var(--ui-text);
}
.ui-btn--secondary:hover:not(:disabled) {
  background: var(--ui-accent-soft);
  border-color: var(--ui-accent);
}

/*
 * O tom do `ghost` é o do texto normal, não o do texto secundário: num tom mais
 * claro ele lia como botão desabilitado, e "Baixar" ao lado de um card parecia
 * indisponível quando não estava.
 */
.ui-btn--ghost { color: var(--ui-text); }
.ui-btn--ghost:hover:not(:disabled) {
  background: var(--ui-accent-soft);
  color: var(--ui-accent);
}

.ui-btn--danger {
  background: var(--ui-surface);
  border-color: var(--ui-danger-rule);
  color: var(--ui-danger);
}
.ui-btn--danger:hover:not(:disabled) { background: var(--ui-danger-soft); }

.ui-btn--sm { min-height: 30px; padding: 0 var(--ui-sp-3); font-size: var(--ui-fs-xs); }
.ui-btn--icon { min-width: 36px; padding: 0; }
.ui-btn--block { width: 100%; }

/*
 * Botões dentro da casca escura.
 *
 * O seletor era `.ui-shell .ui-btn--secondary` — mas `.ui-shell` é o grid raiz
 * do app inteiro, sidebar e área de trabalho juntas. Isso pintava *todo*
 * botão secundário do app com o texto quase-branco da sidebar
 * (`--ui-shell-fg`), inclusive sobre o fundo claro da área de trabalho: o
 * "Baixar PNGs" da biblioteca, por exemplo, ficava com texto claro sobre fundo
 * claro. `.ui-shell__aside` é só a sidebar — o escopo que a regra sempre quis
 * ter.
 */
.ui-shell__aside .ui-btn--secondary,
.ui-shell__aside .ui-btn--ghost {
  background: transparent;
  border-color: var(--ui-shell-rule);
  color: var(--ui-shell-fg);
}
.ui-shell__aside .ui-btn--secondary:hover:not(:disabled),
.ui-shell__aside .ui-btn--ghost:hover:not(:disabled) {
  background: var(--ui-shell-hover);
  color: var(--ui-shell-fg);
}

/* =================================================================
   4. Campos
   ================================================================= */

.ui-field { display: block; margin-bottom: var(--ui-sp-4); }

.ui-field__label {
  display: block;
  margin-bottom: var(--ui-sp-1);
  font-size: var(--ui-fs-xs);
  font-weight: 700;
  color: var(--ui-text);
}

.ui-field__hint {
  margin-top: var(--ui-sp-1);
  font-size: var(--ui-fs-micro);
  color: var(--ui-text-dim);
  line-height: 1.45;
}

.ui-field__count {
  float: right;
  font-family: var(--ui-font-mono);
  font-size: var(--ui-fs-micro);
  font-weight: 500;
  color: var(--ui-text-faint);
}
.ui-field__count--over { color: var(--ui-danger); font-weight: 700; }

.ui-field__error {
  margin-top: var(--ui-sp-1);
  font-size: var(--ui-fs-xs);
  font-weight: 600;
  color: var(--ui-danger);
}

.ui-input {
  width: 100%;
  min-height: 38px;
  padding: var(--ui-sp-2) var(--ui-sp-3);
  border: 1px solid var(--ui-rule-strong);
  border-radius: var(--ui-r-sm);
  background: var(--ui-surface);
  color: var(--ui-text);
  font-family: var(--ui-font);
  font-size: var(--ui-fs-sm);
  line-height: 1.45;
  transition: border-color var(--ui-t-fast), box-shadow var(--ui-t-fast);
}
.ui-input:hover:not(:disabled):not(:focus) { border-color: var(--ui-accent); }
.ui-input:focus {
  outline: none;
  border-color: var(--ui-accent);
  box-shadow: 0 0 0 3px var(--ui-accent-soft);
}
.ui-input::placeholder { color: var(--ui-text-faint); }
.ui-input:disabled { background: var(--ui-surface-sunken); cursor: not-allowed; }
.ui-input[aria-invalid="true"] { border-color: var(--ui-danger); }
.ui-input[aria-invalid="true"]:focus {
  box-shadow: 0 0 0 3px rgba(192, 57, 47, 0.12);
}

textarea.ui-input { resize: vertical; min-height: 84px; }

/* =================================================================
   5. Superfícies
   ================================================================= */

.ui-card {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--ui-rule);
  border-radius: var(--ui-r-md);
  background: var(--ui-surface);
  box-shadow: var(--ui-shadow-sm);
  overflow: hidden;
  transition: border-color var(--ui-t-fast), box-shadow var(--ui-t-fast),
    transform var(--ui-t-fast);
}

.ui-card--interactive { cursor: pointer; }
.ui-card--interactive:hover {
  border-color: var(--ui-accent);
  box-shadow: var(--ui-shadow-md);
  transform: translateY(-2px);
}

.ui-panel {
  border: 1px solid var(--ui-rule);
  border-radius: var(--ui-r-md);
  background: var(--ui-surface);
}

/* --- grade da biblioteca --- */

.ui-grade {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: var(--ui-sp-4);
  align-items: start;
}

/* --- miniatura da capa --- */

/*
 * O slide é montado em 1080×1920 reais e reduzido por `transform: scale()`,
 * a mesma técnica do preview do editor. A altura do palco é escrita pelo JS a
 * partir da escala medida, porque `transform` não afeta o fluxo: sem isso o
 * elemento continuaria ocupando 1920px de altura dentro do card.
 */
.ui-thumb {
  position: relative;
  overflow: hidden;
  background: #0A1020;
  border-bottom: 1px solid var(--ui-rule);
  aspect-ratio: 9 / 16;
  max-height: 300px;
}

.ui-thumb__palco {
  position: absolute;
  top: 0;
  left: 0;
  width: 1080px;
  transform-origin: top left;
  pointer-events: none;
}

.ui-thumb__vazio {
  display: grid;
  place-items: center;
  height: 100%;
  color: rgba(255, 255, 255, 0.32);
  font-family: var(--ui-font-mono);
  font-size: var(--ui-fs-micro);
}

/* --- corpo do card --- */

.ui-card__corpo {
  display: flex;
  flex-direction: column;
  gap: var(--ui-sp-2);
  padding: var(--ui-sp-4);
}

.ui-card__eyebrow {
  font-size: var(--ui-fs-xs);
  font-weight: 700;
  color: var(--ui-accent);
}

.ui-card__titulo {
  font-size: var(--ui-fs-lg);
  font-weight: 700;
  line-height: 1.3;
}

.ui-card__resumo {
  font-size: var(--ui-fs-sm);
  line-height: 1.5;
  color: var(--ui-text-dim);
}

.ui-card__erro {
  font-size: var(--ui-fs-xs);
  line-height: 1.45;
  color: var(--ui-danger);
}

.ui-card__rodape {
  display: flex;
  justify-content: space-between;
  gap: var(--ui-sp-2);
  margin-top: var(--ui-sp-1);
  padding-top: var(--ui-sp-3);
  border-top: 1px solid var(--ui-rule);
  font-size: var(--ui-fs-micro);
  color: var(--ui-text-dim);
}

.ui-tag {
  padding: 2px var(--ui-sp-2);
  border-radius: var(--ui-r-sm);
  background: var(--ui-accent-soft);
  color: var(--ui-accent);
  font-size: var(--ui-fs-micro);
  font-weight: 700;
  white-space: nowrap;
}
.ui-tag--ok { background: var(--ui-ok-soft); color: var(--ui-ok); }

/* --- tela de criação --- */

.ui-criar {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 340px;
  align-items: start;
  min-height: 0;
}
.ui-criar--simples { grid-template-columns: minmax(0, 1fr); }

.ui-criar__form {
  max-width: 760px;
  padding: var(--ui-sp-6) var(--ui-sp-7) var(--ui-sp-8);
}

.ui-criar__trilho {
  position: sticky;
  top: 0;
  padding: var(--ui-sp-6) var(--ui-sp-5);
  border-left: 1px solid var(--ui-rule);
  background: var(--ui-surface);
  min-height: 100%;
}

.ui-secao { margin-bottom: var(--ui-sp-7); }

.ui-secao__titulo {
  margin: 0 0 var(--ui-sp-1);
  padding-bottom: var(--ui-sp-2);
  border-bottom: 1px solid var(--ui-rule);
  font-size: var(--ui-fs-xs);
  font-weight: 800;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ui-text-dim);
}

.ui-secao__descricao {
  margin: var(--ui-sp-2) 0 var(--ui-sp-4);
  font-size: var(--ui-fs-sm);
  line-height: 1.55;
  color: var(--ui-text-dim);
}

/* --- tela de espera da geração --- */

.ui-espera {
  display: grid;
  place-items: center;
  min-height: 68dvh;
  padding: var(--ui-sp-7);
}

.ui-espera__caixa {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--ui-sp-3);
  max-width: 480px;
  text-align: center;
}

.ui-espera__titulo { margin: 0; font-size: var(--ui-fs-2xl); font-weight: 800; }

.ui-espera__texto {
  margin: 0;
  font-size: var(--ui-fs-sm);
  line-height: 1.6;
  color: var(--ui-text-dim);
}

.ui-espera__nota { font-size: var(--ui-fs-xs); }

.ui-espera__tempo {
  padding: var(--ui-sp-1) var(--ui-sp-3);
  border-radius: var(--ui-r-full);
  background: var(--ui-accent-soft);
  color: var(--ui-accent);
  font-size: var(--ui-fs-xs);
  font-weight: 700;
}

@media (max-width: 1024px) {
  .ui-criar { grid-template-columns: minmax(0, 1fr); }
  .ui-criar__form { padding: var(--ui-sp-5) var(--ui-sp-4) var(--ui-sp-8); }
  .ui-criar__trilho {
    position: static;
    border-left: none;
    border-top: 1px solid var(--ui-rule);
    padding: var(--ui-sp-5) var(--ui-sp-4);
  }
}

/* --- barra de filtros --- */

.ui-filtros {
  position: sticky;
  top: 0;
  z-index: calc(var(--ui-z-sticky) - 1);
  display: flex;
  flex-direction: column;
  gap: var(--ui-sp-2);
  padding: var(--ui-sp-3) var(--ui-sp-7);
  border-bottom: 1px solid var(--ui-rule);
  background: var(--ui-surface);
}

.ui-filtros__busca { max-width: 280px; }
.ui-filtros__ordem { width: auto; min-width: 150px; cursor: pointer; }

.ui-chip__contagem {
  padding: 0 5px;
  border-radius: var(--ui-r-full);
  background: var(--ui-surface-sunken);
  color: var(--ui-text-dim);
  font-size: var(--ui-fs-micro);
  font-weight: 700;
}
.ui-chip[aria-pressed="true"] .ui-chip__contagem {
  background: rgba(255, 255, 255, 0.22);
  color: var(--ui-accent-fg);
}

@media (max-width: 1024px) {
  .ui-filtros { padding: var(--ui-sp-3) var(--ui-sp-4); }
}

@media (max-width: 640px) {
  .ui-filtros__busca { max-width: none; flex: 1; }
  .ui-grade { grid-template-columns: minmax(0, 1fr); }
}

/* =================================================================
   6. Chips, badges e status
   ================================================================= */

.ui-chip {
  appearance: none;
  display: inline-flex;
  align-items: center;
  gap: var(--ui-sp-1);
  min-height: 30px;
  padding: 0 var(--ui-sp-3);
  border: 1px solid var(--ui-rule-strong);
  border-radius: var(--ui-r-full);
  background: var(--ui-surface);
  color: var(--ui-text-dim);
  font-family: var(--ui-font);
  font-size: var(--ui-fs-xs);
  font-weight: 600;
  cursor: pointer;
  transition: background var(--ui-t-fast), color var(--ui-t-fast),
    border-color var(--ui-t-fast);
}
.ui-chip:hover { border-color: var(--ui-accent); color: var(--ui-text); }

/*
 * Categoria é texto escrito pelo usuário e pode ser longa. O corte vai no
 * `<span>` interno: `text-overflow` não age sobre o texto solto de um
 * container flex.
 */
.ui-chip__rotulo {
  display: block;
  max-width: 220px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ui-chip[aria-pressed="true"] {
  background: var(--ui-accent);
  border-color: var(--ui-accent);
  color: var(--ui-accent-fg);
}

.ui-badge {
  display: inline-flex;
  align-items: center;
  gap: var(--ui-sp-1);
  padding: 3px var(--ui-sp-2);
  border-radius: var(--ui-r-full);
  font-size: var(--ui-fs-micro);
  font-weight: 700;
  letter-spacing: 0.02em;
  white-space: nowrap;
}

.ui-eyebrow {
  font-size: var(--ui-fs-micro);
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ui-text-dim);
}

/* =================================================================
   7. Feedback: vazio, esqueleto, carga
   ================================================================= */

.ui-empty {
  display: grid;
  place-items: center;
  gap: var(--ui-sp-3);
  padding: var(--ui-sp-8) var(--ui-sp-5);
  border: 1px dashed var(--ui-rule-strong);
  border-radius: var(--ui-r-lg);
  background: var(--ui-surface);
  text-align: center;
}
.ui-empty__title { font-size: var(--ui-fs-lg); font-weight: 700; }
.ui-empty__body {
  max-width: 46ch;
  font-size: var(--ui-fs-sm);
  line-height: 1.6;
  color: var(--ui-text-dim);
}

.ui-skeleton {
  background: linear-gradient(
    90deg,
    var(--ui-surface-sunken) 25%,
    #E9F4F7 37%,
    var(--ui-surface-sunken) 63%
  );
  background-size: 400% 100%;
  border-radius: var(--ui-r-sm);
  animation: ui-shimmer 1.4s ease infinite;
}

@keyframes ui-shimmer {
  from { background-position: 100% 50%; }
  to { background-position: 0 50%; }
}

.ui-spinner {
  width: 28px;
  height: 28px;
  border: 3px solid var(--ui-accent-soft);
  border-top-color: var(--ui-accent);
  border-radius: 50%;
  animation: ui-spin 800ms linear infinite;
}

@keyframes ui-spin { to { transform: rotate(360deg); } }

/*
 * Barra fina de progresso no topo. Substitui o overlay opaco com blur que
 * cobria a tela inteira a cada navegação — carregar não deveria bloquear.
 */
.ui-progress {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: 2px;
  z-index: var(--ui-z-toast);
  background: var(--ui-accent-soft);
  overflow: hidden;
}
.ui-progress::after {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--ui-accent);
  transform-origin: left;
  animation: ui-indeterminate 1.1s ease-in-out infinite;
}

@keyframes ui-indeterminate {
  0%   { transform: translateX(-100%) scaleX(0.4); }
  50%  { transform: translateX(0) scaleX(0.7); }
  100% { transform: translateX(100%) scaleX(0.4); }
}

/* =================================================================
   8. Diálogo e sobreposição
   ================================================================= */

.ui-backdrop {
  position: fixed;
  inset: 0;
  z-index: var(--ui-z-backdrop);
  background: rgba(13, 26, 53, 0.55);
  backdrop-filter: blur(2px);
}

.ui-dialog {
  position: fixed;
  z-index: var(--ui-z-modal);
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: min(480px, calc(100vw - 2 * var(--ui-sp-5)));
  padding: var(--ui-sp-5);
  border-radius: var(--ui-r-lg);
  background: var(--ui-surface);
  box-shadow: var(--ui-shadow-lg);
}
.ui-dialog__title { margin: 0 0 var(--ui-sp-2); font-size: var(--ui-fs-xl); font-weight: 800; }
.ui-dialog__body { font-size: var(--ui-fs-sm); line-height: 1.6; color: var(--ui-text-dim); }
.ui-dialog__actions {
  display: flex;
  justify-content: flex-end;
  gap: var(--ui-sp-2);
  margin-top: var(--ui-sp-5);
}

/* =================================================================
   9. Casca
   ================================================================= */

.ui-shell {
  display: grid;
  grid-template-columns: 248px minmax(0, 1fr);
  min-height: 100dvh;
  background: var(--ui-surface-sunken);
  color: var(--ui-text);
  font-family: var(--ui-font);
}

.ui-shell__aside {
  position: sticky;
  top: 0;
  display: flex;
  flex-direction: column;
  height: 100dvh;
  background: var(--ui-shell-bg);
  background-image: radial-gradient(
    620px 320px at 20% -10%,
    rgba(0, 164, 186, 0.22),
    transparent 60%
  );
  color: var(--ui-shell-fg);
  overflow-y: auto;
  overscroll-behavior: contain;
}

.ui-shell__main {
  display: flex;
  flex-direction: column;
  min-width: 0;
}

.ui-shell__brand {
  padding: var(--ui-sp-5) var(--ui-sp-5) var(--ui-sp-4);
  border-bottom: 1px solid var(--ui-shell-rule);
}

.ui-wordmark {
  font-family: var(--ui-font-display);
  font-weight: 700;
  font-size: var(--ui-fs-md);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ui-shell-fg);
  white-space: nowrap;
}
.ui-wordmark span { color: var(--ui-accent); }

.ui-wordmark--sup {
  font-size: var(--ui-fs-micro);
  letter-spacing: 0.22em;
  color: var(--ui-accent);
}
.ui-wordmark--main {
  font-size: var(--ui-fs-xl);
  letter-spacing: 0.10em;
  line-height: 1.1;
  margin-top: 2px;
}

.ui-shell__nav { flex: 1; padding: var(--ui-sp-4) var(--ui-sp-3); }

.ui-shell__section {
  padding: 0 var(--ui-sp-2) var(--ui-sp-2);
  font-size: var(--ui-fs-micro);
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ui-shell-fg-faint);
}

/*
 * Item de navegação. `--nav-accent` é escrito inline pelo React a partir do
 * acento do tipo de post (app/shared/registry.js), então a cor varia por item sem
 * precisar de uma classe por tipo de post.
 */
.ui-nav {
  appearance: none;
  display: flex;
  align-items: center;
  gap: var(--ui-sp-3);
  width: 100%;
  padding: var(--ui-sp-2) var(--ui-sp-3);
  border: none;
  border-radius: var(--ui-r-sm);
  background: transparent;
  color: var(--ui-shell-fg-dim);
  font-family: var(--ui-font);
  font-size: var(--ui-fs-md);
  font-weight: 600;
  text-align: left;
  cursor: pointer;
  transition: background var(--ui-t-fast), color var(--ui-t-fast);
}
.ui-nav:hover { background: var(--ui-shell-hover); color: var(--ui-shell-fg); }
.ui-nav[aria-current="page"],
.ui-nav[aria-current="true"] {
  background: var(--ui-shell-hover);
  color: var(--nav-accent, var(--ui-accent));
  font-weight: 700;
}

.ui-nav__dot {
  width: 8px;
  height: 8px;
  border-radius: var(--ui-r-full);
  background: var(--nav-accent, var(--ui-accent));
  flex: none;
}

.ui-nav__mark {
  display: grid;
  place-items: center;
  width: 26px;
  height: 26px;
  flex: none;
  border-radius: var(--ui-r-sm);
  background: color-mix(in srgb, var(--nav-accent, var(--ui-accent)) 22%, transparent);
  color: var(--nav-accent, var(--ui-accent));
  font-family: var(--ui-font-display);
  font-size: var(--ui-fs-xs);
  font-weight: 700;
}

/*
 * O "+" ao lado do tipo de post: o caminho para o formulário de criação.
 * Fica discreto até o mouse chegar na linha, para não competir com o nome do
 * tipo de post, mas nunca invisível — é uma das duas ações principais da sidebar.
 */
.ui-nav--add {
  width: 34px;
  flex: none;
  justify-content: center;
  padding: 0;
  font-size: var(--ui-fs-xl);
  font-weight: 400;
  line-height: 1;
  color: var(--ui-shell-fg-faint);
}
.ui-nav--add:hover {
  background: color-mix(in srgb, var(--nav-accent, var(--ui-accent)) 24%, transparent);
  color: var(--nav-accent, var(--ui-accent));
}
.ui-nav__linha:hover .ui-nav--add { color: var(--ui-shell-fg-dim); }
.ui-nav__linha { display: flex; align-items: center; gap: 2px; }

.ui-shell__foot {
  padding: var(--ui-sp-4) var(--ui-sp-5);
  border-top: 1px solid var(--ui-shell-rule);
}

.ui-user {
  display: flex;
  align-items: center;
  gap: var(--ui-sp-3);
}
.ui-user__avatar {
  display: grid;
  place-items: center;
  width: 32px;
  height: 32px;
  flex: none;
  border-radius: var(--ui-r-full);
  background: var(--ui-accent);
  color: var(--ui-accent-fg);
  font-size: var(--ui-fs-sm);
  font-weight: 700;
  text-transform: uppercase;
}
.ui-user__name {
  font-size: var(--ui-fs-sm);
  font-weight: 600;
  color: var(--ui-shell-fg);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ui-user__role {
  font-size: var(--ui-fs-micro);
  color: var(--ui-shell-fg-faint);
}

/* --- cabeçalho de tela --- */

.ui-head {
  position: sticky;
  top: 0;
  z-index: var(--ui-z-sticky);
  display: flex;
  align-items: center;
  gap: var(--ui-sp-4);
  padding: var(--ui-sp-4) var(--ui-sp-7);
  border-bottom: 1px solid var(--ui-rule);
  background: var(--ui-surface);
}
.ui-head__text { flex: 1; min-width: 0; }
.ui-head__title {
  margin: 2px 0 0;
  font-size: var(--ui-fs-2xl);
  font-weight: 800;
  letter-spacing: -0.015em;
  line-height: 1.15;
}
.ui-head__actions { display: flex; align-items: center; gap: var(--ui-sp-2); flex-wrap: wrap; }

.ui-screen { padding: var(--ui-sp-6) var(--ui-sp-7) var(--ui-sp-8); }

/* --- topbar mobile --- */

.ui-topbar { display: none; }

/* =================================================================
   10. Responsivo
   ================================================================= */

@media (max-width: 1024px) {
  .ui-shell { grid-template-columns: minmax(0, 1fr); }

  .ui-topbar {
    position: sticky;
    top: 0;
    z-index: var(--ui-z-sticky);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--ui-sp-3);
    padding: var(--ui-sp-3) var(--ui-sp-4);
    background: var(--ui-shell-bg);
    color: var(--ui-shell-fg);
  }

  .ui-shell__aside {
    position: fixed;
    top: 0;
    bottom: 0;
    left: 0;
    z-index: var(--ui-z-drawer);
    width: min(300px, 84vw);
    height: 100dvh;
    transform: translateX(-100%);
    transition: transform var(--ui-t-med);
    box-shadow: var(--ui-shadow-lg);
  }
  .ui-shell__aside[data-open="true"] { transform: translateX(0); }

  .ui-head { padding: var(--ui-sp-4); }
  .ui-head__title { font-size: var(--ui-fs-xl); }
  .ui-screen { padding: var(--ui-sp-5) var(--ui-sp-4) var(--ui-sp-8); }
}

@media (max-width: 640px) {
  .ui-head { flex-direction: column; align-items: stretch; }
  .ui-head__actions .ui-btn { flex: 1; }

  /*
   * O controle de voltar não acompanha o `stretch` do cabeçalho: é um ícone, e
   * esticado na largura da tela viraria uma barra vazia com uma seta no meio.
   */
  .ui-head > .ui-btn { align-self: flex-start; }

  /* Alvo de toque confortável no celular. */
  .ui-btn { min-height: 44px; }
  .ui-chip { min-height: 36px; }
  .ui-input { min-height: 44px; }
}

/* =================================================================
   11. Utilitários
   ================================================================= */

.ui-row { display: flex; align-items: center; gap: var(--ui-sp-2); flex-wrap: wrap; }
.ui-stack { display: flex; flex-direction: column; gap: var(--ui-sp-3); }
.ui-grow { flex: 1; min-width: 0; }
.ui-mono { font-family: var(--ui-font-mono); }
.ui-dim { color: var(--ui-text-dim); }
.ui-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.ui-sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* --- escolha entre opções --- */

.ui-escolhas { display: flex; flex-direction: column; gap: var(--ui-sp-2); }

.ui-escolha {
  appearance: none;
  width: 100%;
  padding: var(--ui-sp-3) var(--ui-sp-4);
  border: 1.5px solid var(--ui-rule-strong);
  border-radius: var(--ui-r-sm);
  background: var(--ui-surface);
  color: var(--ui-text);
  font-family: var(--ui-font);
  font-size: var(--ui-fs-sm);
  font-weight: 600;
  text-align: left;
  cursor: pointer;
  transition: border-color var(--ui-t-fast), background var(--ui-t-fast);
}
.ui-escolhas--colunas {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
}

.ui-escolha__rotulo { display: block; }
.ui-escolha__descricao {
  display: block;
  margin-top: 3px;
  font-size: var(--ui-fs-xs);
  font-weight: 400;
  line-height: 1.45;
  color: var(--ui-text-dim);
}
.ui-escolha[aria-checked="true"] .ui-escolha__descricao { color: var(--ui-text-dim); }

.ui-escolha:hover { border-color: var(--ui-accent); }
.ui-escolha[aria-checked="true"] {
  border-color: var(--ui-accent);
  background: var(--ui-accent-soft);
  color: var(--ui-accent);
}

.ui-chip[role="radio"][aria-checked="true"] {
  background: var(--ui-accent);
  border-color: var(--ui-accent);
  color: var(--ui-accent-fg);
}

/* --- preview de capa na tela de criação --- */

.ui-capa-preview {
  position: relative;
  overflow: hidden;
  flex: none;
  border: 1px solid var(--ui-rule);
  border-radius: var(--ui-r-sm);
  background: #0A1020;
}
.ui-capa-preview__palco {
  position: absolute;
  top: 0;
  left: 0;
  width: 1080px;
  height: 1920px;
  transform-origin: top left;
  pointer-events: none;
}

/* --- nota informativa --- */

.ui-nota {
  padding: var(--ui-sp-4);
  border: 1px solid var(--ui-rule-strong);
  border-left: 3px solid var(--ui-accent);
  border-radius: var(--ui-r-sm);
  background: var(--ui-accent-soft);
}
.ui-nota__titulo {
  margin-bottom: var(--ui-sp-2);
  font-size: var(--ui-fs-micro);
  font-weight: 800;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ui-accent);
}
.ui-nota__corpo {
  font-size: var(--ui-fs-xs);
  line-height: 1.6;
  color: var(--ui-text-dim);
}

/* --- pares de campo lado a lado --- */

.ui-dupla {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 0 var(--ui-sp-4);
}

/* --- tabela editável (#Quanto Custa?) --- */

.ui-tabela { display: flex; flex-direction: column; gap: var(--ui-sp-2); }

.ui-tabela__linha {
  display: grid;
  grid-template-columns: repeat(var(--cols, 3), minmax(0, 1fr)) 40px;
  gap: var(--ui-sp-2);
  align-items: center;
}

.ui-tabela__cabecalho { font-weight: 700; background: var(--ui-surface-sunken); }

@media (max-width: 640px) {
  .ui-tabela__linha { grid-template-columns: repeat(var(--cols, 3), minmax(0, 1fr)) 44px; }
}

/* =================================================================
   Editor
   ================================================================= */

.ui-editor {
  display: grid;
  grid-template-columns: 210px minmax(360px, 1fr) 380px;
  min-height: 0;
  flex: 1;
}

.ui-editor__lista,
.ui-editor__painel {
  overflow: auto;
  background: var(--ui-surface);
}
.ui-editor__lista { border-right: 1px solid var(--ui-rule); padding: var(--ui-sp-3); }
.ui-editor__painel { border-left: 1px solid var(--ui-rule); padding: var(--ui-sp-5); }

.ui-editor__palco {
  display: grid;
  place-items: start center;
  gap: var(--ui-sp-3);
  padding: var(--ui-sp-5);
  overflow: auto;
  background: var(--ui-surface-sunken);
}

/* --- indicador de não salvo --- */

.ui-sujo {
  padding: 3px var(--ui-sp-2);
  border-radius: var(--ui-r-full);
  font-size: var(--ui-fs-micro);
  font-weight: 700;
  color: var(--ui-text-faint);
  white-space: nowrap;
}
.ui-sujo--ativo { background: var(--ui-warn-soft); color: var(--ui-warn); }

/* --- lista de slides --- */

.ui-slides { display: flex; flex-direction: column; gap: var(--ui-sp-2); }

.ui-slide {
  appearance: none;
  display: flex;
  flex-direction: column;
  gap: 4px;
  width: 100%;
  padding: var(--ui-sp-2) var(--ui-sp-3);
  border: 1.5px solid var(--ui-rule);
  border-left: 3px solid transparent;
  border-radius: var(--ui-r-sm);
  background: var(--ui-surface);
  font-family: var(--ui-font);
  text-align: left;
  cursor: pointer;
  transition: border-color var(--ui-t-fast), background var(--ui-t-fast);
}
.ui-slide:hover { border-color: var(--ui-rule-strong); }
.ui-slide[aria-current="true"] {
  border-color: var(--ui-accent);
  border-left-color: var(--slide-accent, var(--ui-accent));
  background: var(--ui-accent-soft);
}

.ui-slide__topo { display: flex; align-items: center; justify-content: space-between; gap: var(--ui-sp-2); }

.ui-slide__rotulo {
  font-size: var(--ui-fs-micro);
  font-weight: 800;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--slide-accent, var(--ui-accent));
}

.ui-slide__aviso {
  display: grid;
  place-items: center;
  min-width: 17px;
  height: 17px;
  padding: 0 4px;
  border-radius: var(--ui-r-full);
  background: var(--ui-warn);
  color: #fff;
  font-size: 10px;
  font-weight: 800;
}

.ui-slide__titulo {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: var(--ui-fs-xs);
  color: var(--ui-text);
}

/* --- palco --- */

.ui-palco { display: flex; flex-direction: column; align-items: center; gap: var(--ui-sp-3); }
.ui-palco__controles { justify-content: center; }

.ui-palco__moldura {
  position: relative;
  overflow: hidden;
  background: #fff;
  box-shadow: var(--ui-shadow-lg);
}

.ui-palco__slide {
  width: 1080px;
  height: 1920px;
  transform-origin: top left;
}

.ui-palco__acoes { position: absolute; top: 10px; right: 10px; z-index: 3; }

/*
 * Máscara de conferência de corte: escurece o que o Instagram descarta no
 * formato escolhido. 1080×1920 tem 1,7778 de proporção; 4:5 mostra 1350px de
 * altura e 1:1 mostra 1080px, ambos centralizados.
 */
.ui-palco__mascara {
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: none;
}
.ui-palco__mascara--4-5 {
  background: linear-gradient(
    to bottom,
    rgba(10, 16, 32, 0.62) 0 14.84%,
    transparent 14.84% 85.16%,
    rgba(10, 16, 32, 0.62) 85.16% 100%
  );
}
.ui-palco__mascara--1-1 {
  background: linear-gradient(
    to bottom,
    rgba(10, 16, 32, 0.62) 0 21.875%,
    transparent 21.875% 78.125%,
    rgba(10, 16, 32, 0.62) 78.125% 100%
  );
}

.ui-palco__navegacao {
  align-items: center;
  gap: var(--ui-sp-3);
  font-size: var(--ui-fs-xs);
  font-weight: 700;
}

/* --- alertas --- */

.ui-alerta {
  max-width: 420px;
  padding: var(--ui-sp-3) var(--ui-sp-4);
  border-radius: var(--ui-r-sm);
  font-size: var(--ui-fs-xs);
  line-height: 1.55;
}
.ui-alerta--aviso {
  border: 1px solid var(--ui-warn-rule);
  border-left: 3px solid var(--ui-warn);
  background: var(--ui-warn-soft);
  color: var(--ui-warn);
}

/* --- avisos do validador --- */

.ui-avisos {
  margin-top: var(--ui-sp-5);
  padding: var(--ui-sp-4);
  border: 1px solid var(--ui-warn-rule);
  border-radius: var(--ui-r-sm);
  background: var(--ui-warn-soft);
}
.ui-avisos__titulo {
  margin-bottom: var(--ui-sp-2);
  font-size: var(--ui-fs-micro);
  font-weight: 800;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ui-warn);
}
.ui-avisos__item {
  display: block;
  width: 100%;
  margin-bottom: var(--ui-sp-2);
  font-size: var(--ui-fs-xs);
  line-height: 1.5;
  color: var(--ui-text);
  text-align: left;
}
.ui-avisos__item--link {
  appearance: none;
  padding: 4px 6px;
  margin-left: -6px;
  border: none;
  border-radius: var(--ui-r-sm);
  background: transparent;
  font-family: var(--ui-font);
  cursor: pointer;
}
.ui-avisos__item--link:hover { background: rgba(180, 105, 14, 0.10); }

.ui-avisos__item--error {
  border-left: 3px solid var(--ui-danger);
  padding-left: 8px;
  background: var(--ui-danger-soft);
}
.ui-avisos__fix {
  margin-top: 2px;
  color: var(--ui-text-dim);
  font-style: italic;
}

@media (max-width: 1280px) {
  .ui-editor { grid-template-columns: 180px minmax(0, 1fr) 330px; }
}

/*
 * Editor no celular: preview fixo em cima, o resto em abas.
 *
 * Empilhar as três colunas numa só punha lista, preview e formulário em
 * sequência — para ver o efeito de uma edição era preciso rolar de volta a cada
 * tecla. Com o preview preso no topo, a mudança e o resultado ficam visíveis ao
 * mesmo tempo.
 */
@media (max-width: 1024px) {
  .ui-editor--compacto {
    display: flex;
    flex-direction: column;
    min-height: 0;
  }

  .ui-editor__palco--fixo {
    position: sticky;
    top: 0;
    z-index: calc(var(--ui-z-sticky) - 2);
    padding: var(--ui-sp-4) var(--ui-sp-4) var(--ui-sp-3);
    border-bottom: 1px solid var(--ui-rule);
    background: var(--ui-surface-sunken);
  }

  .ui-abas {
    position: sticky;
    top: 0;
    z-index: calc(var(--ui-z-sticky) - 1);
    display: flex;
    border-bottom: 1px solid var(--ui-rule);
    background: var(--ui-surface);
  }

  .ui-aba {
    appearance: none;
    flex: 1;
    min-height: 44px;
    border: none;
    border-bottom: 2px solid transparent;
    background: transparent;
    color: var(--ui-text-dim);
    font-family: var(--ui-font);
    font-size: var(--ui-fs-sm);
    font-weight: 700;
    cursor: pointer;
  }
  .ui-aba[aria-selected="true"] {
    border-bottom-color: var(--ui-accent);
    color: var(--ui-accent);
  }

  .ui-editor__aba-conteudo {
    padding: var(--ui-sp-4);
    background: var(--ui-surface);
  }
}

/* --- item de lista editável --- */

.ui-lista-item {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 40px;
  gap: var(--ui-sp-2);
  align-items: center;
}

/* --- lista numerada de tamanho fixo --- */

.ui-numerado {
  display: grid;
  grid-template-columns: 26px minmax(0, 1fr);
  gap: var(--ui-sp-2);
  align-items: start;
}
.ui-numerado__n {
  display: grid;
  place-items: center;
  width: 26px;
  height: 26px;
  margin-top: 6px;
  border-radius: var(--ui-r-full);
  background: var(--ui-accent-soft);
  color: var(--ui-accent);
  font-size: var(--ui-fs-micro);
  font-weight: 800;
}

/* --- legenda e galeria (Livre News) --- */

.ui-legenda { width: min(100%, 420px); padding: var(--ui-sp-3) var(--ui-sp-4); }
.ui-legenda__corpo {
  margin: var(--ui-sp-2) 0 0;
  max-height: 140px;
  overflow-y: auto;
  font-size: var(--ui-fs-xs);
  line-height: 1.6;
}
.ui-legenda__tags {
  margin-top: var(--ui-sp-2);
  font-size: var(--ui-fs-xs);
  color: var(--ui-accent);
  word-break: break-word;
}

.ui-galeria { width: min(100%, 420px); }
.ui-galeria__grade {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(90px, 1fr));
  gap: var(--ui-sp-2);
  margin-top: var(--ui-sp-2);
}
.ui-galeria__grade img {
  display: block;
  width: 100%;
  border: 1px solid var(--ui-rule);
  border-radius: var(--ui-r-sm);
}

.ui-ok {
  font-size: var(--ui-fs-micro);
  font-weight: 700;
  color: var(--ui-ok);
}

.ui-badge--ok { background: var(--ui-ok-soft); color: var(--ui-ok); }
.ui-badge--aviso { background: var(--ui-warn-soft); color: var(--ui-warn); }


/* =================================================================
   Login
   ================================================================= */

/*
 * A página de login já tinha esta identidade — navy com gradiente teal — e o
 * app a abandonava assim que se entrava. Agora as duas leem os mesmos tokens, e
 * o que existe aqui é só o que é da tela de entrada.
 */

.ui-login {
  display: grid;
  place-items: center;
  min-height: 100dvh;
  padding: var(--ui-sp-5);
  background:
    radial-gradient(1400px 700px at 15% -10%, rgba(0, 164, 186, 0.20), transparent 55%),
    var(--ui-shell-bg);
  color: var(--ui-shell-fg);
}

.ui-login__cartao {
  width: 100%;
  max-width: 420px;
  padding: var(--ui-sp-6);
  border: 1px solid var(--ui-shell-rule);
  border-radius: var(--ui-r-lg);
  background: rgba(13, 26, 53, 0.88);
  box-shadow: var(--ui-shadow-lg);
}

.ui-login__marca {
  margin-bottom: var(--ui-sp-2);
  font-size: var(--ui-fs-xs);
  font-weight: 700;
  letter-spacing: 0.10em;
  color: var(--ui-accent);
}

.ui-login__titulo {
  margin: 0 0 var(--ui-sp-2);
  font-family: var(--ui-font-display);
  font-size: 30px;
  font-weight: 700;
}

.ui-login__sub {
  margin: 0 0 var(--ui-sp-5);
  font-size: var(--ui-fs-md);
  color: var(--ui-shell-fg-dim);
}

.ui-login .ui-field__label { color: var(--ui-shell-fg-dim); }

.ui-login .ui-input {
  border-color: var(--ui-shell-rule);
  background: rgba(0, 164, 186, 0.07);
  color: var(--ui-shell-fg);
}
.ui-login .ui-input::placeholder { color: rgba(232, 246, 249, 0.34); }
.ui-login .ui-input:hover:not(:focus) { border-color: var(--ui-accent); }

.ui-login__erro {
  margin-bottom: var(--ui-sp-3);
  padding: var(--ui-sp-2) var(--ui-sp-3);
  border-radius: var(--ui-r-sm);
  background: rgba(192, 57, 47, 0.18);
  color: #FCA5A5;
  font-size: var(--ui-fs-sm);
  font-weight: 600;
}

.ui-login__senha { position: relative; }
/* Espaço para o botão de ver a senha não cobrir o que se digita. */
.ui-login__senha .ui-input { padding-right: 84px; }
.ui-login__ver {
  position: absolute;
  right: var(--ui-sp-2);
  top: 27px;
  min-height: 30px;
  padding: 0 var(--ui-sp-2);
  border: none;
  border-radius: var(--ui-r-sm);
  background: transparent;
  color: var(--ui-shell-fg-dim);
  font-family: var(--ui-font);
  font-size: var(--ui-fs-micro);
  font-weight: 700;
  cursor: pointer;
}
.ui-login__ver:hover { color: var(--ui-accent); }

.ui-login__rodape {
  margin: var(--ui-sp-4) 0 0;
  font-size: var(--ui-fs-xs);
  color: var(--ui-shell-fg-faint);
}
