/* ==========================================================================
   Vibbe Hub — design Vértice
   Portado de Claude Design ("Redesign Vibbe Hub com Vértice").

   Dois escopos, ambos aplicados no <body>:

   .vertice-chrome  tokens, tipografia, componentes (vbb-*), header, menu e
                    formulários. Páginas com layout próprio que só querem
                    padronizar essas peças usam apenas esta classe.
   .vertice-page    acrescenta o fundo e as cores do design à página inteira.
                    Sempre acompanhada de .vertice-chrome.

   Ordem: tokens → base → componentes (vbb-*) → páginas (vh-*) → responsivo.
   ========================================================================== */

/* ==========================================================================
   1. TOKENS — escuro é o padrão, .light é a variação
   ========================================================================== */

.vertice-chrome {
  /* --- Superfícies roxo-profundo --- */
  --background: #1a1529;
  --foreground: #eceaf3;
  --card: #241e38;
  --card-foreground: #eceaf3;

  /* --- Roxo Vibbe como primária (Tropical Indigo no escuro) --- */
  --primary: #887cb7;
  --primary-foreground: #1a1529;
  --secondary: #2e2747;
  --secondary-foreground: #eceaf3;
  --muted: #272140;
  --muted-foreground: #9f96c5;
  --accent: #312a4d;
  --accent-foreground: #eceaf3;

  --destructive: #f8285a;

  /* --- Bordas roxas translúcidas (assinatura Vibbe) --- */
  --border: rgba(136, 124, 183, 0.22);
  --input: rgba(136, 124, 183, 0.28);
  /* Foco em verde neon — assinatura CONNECT */
  --ring: #94f896;

  --brand: #ff6f1e;
  --brand-foreground: #ffffff;
  --success: #00a261;
  --warning: #c59a00;
  --warning-foreground: #27213f;
  --info: #883fff;

  --sidebar: #1b1630;

  /* --- Tipografia --- */
  --font-sans: "Geist", "Outfit", ui-sans-serif, system-ui, -apple-system, sans-serif;
  --font-mono: "Geist Mono", ui-monospace, SFMono-Regular, "SF Mono", monospace;

  --text-4xs: 0.5625rem;
  --text-3xs: 0.625rem;
  --text-2xs: 0.6875rem;
  --text-xs: 0.75rem;
  --text-xs-lh: 1rem;
  --text-2sm: 0.8125rem;
  --text-2sm-lh: 1.125rem;
  --text-sm: 0.875rem;
  --text-sm-lh: 1.25rem;
  --text-md: 0.9375rem;
  --text-base: 1rem;
  --text-base-lh: 1.5rem;
  --text-lg: 1.125rem;
  --text-lg-lh: 1.75rem;
  --text-xl: 1.25rem;
  --text-2xl: 1.5rem;
  --text-3xl: 1.875rem;
  --text-4xl: 2.25rem;
  --text-5xl: 3rem;

  --font-normal: 400;
  --font-medium: 500;
  --font-semibold: 600;
  --font-bold: 700;

  /* --- Raio, espaçamento, elevação --- */
  --radius-sm: 0.5rem;
  --radius-md: 0.625rem;
  --radius-lg: 0.75rem;
  --radius-xl: 1rem;
  --radius-full: 9999px;

  --space-1: 0.25rem;
  --space-1-5: 0.375rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-6: 1.5rem;

  --shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
  --shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);
  --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
  --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);

  /* --- Cores fixas da marca (independem do tema) --- */
  --ultra-violet: #4c407b;
  --tropical-indigo: #887cb7;
  --electric-purple: #a04ffb;
  --light-green: #94f896;
  --dark-purple: #27213f;
  --platinum: #e6e6e6;

  /* --- Neon: a assinatura verde em intensidades reutilizáveis ---
     Tudo deriva de --light-green, então Backstage e Connect, que trocam aquele
     token pela cor do produto, levam junto todos os detalhes desenhados aqui. */
  --neon: var(--light-green);
  --neon-soft: color-mix(in srgb, var(--light-green) 40%, transparent);
  --neon-faint: color-mix(in srgb, var(--light-green) 12%, transparent);
  --neon-edge: color-mix(in srgb, var(--light-green) 55%, var(--border));
}

/* Blocos claros dentro da página escura (Por que a Vibbe) */
.vertice-chrome .light {
  --background: #ffffff;
  --foreground: #27213f;
  --card: #efebf9;
  --card-foreground: #27213f;

  --primary: #4c407b;
  --primary-foreground: #ffffff;
  --secondary: #e9e3f6;
  --secondary-foreground: #4c407b;
  --muted: #f3effb;
  --muted-foreground: #6e6796;
  --accent: #e9e3f6;
  --accent-foreground: #4c407b;

  --border: rgba(136, 124, 183, 0.2);
  --input: #e4def2;
  --ring: #4c407b;

  --success: #17c653;
  --warning: #f6b100;
  --info: #7239ea;
}

/* ==========================================================================
   2. BASE
   ========================================================================== */

.vertice-chrome,
.vertice-chrome *,
.vertice-chrome *::before,
.vertice-chrome *::after {
  box-sizing: border-box;
}

/* Pinta o fundo atrás do body para o overscroll não revelar o branco/preto do UA. */
html:has(> body.vertice-page) {
  background: #1a1529;
  overflow-x: hidden;
}

/*
 * .vertice-chrome  → tipografia e componentes do design. Usado tanto pelas
 *                    páginas 100% Vértice quanto por páginas de layout próprio
 *                    que só adotam o header/fonte/formulários (ex.: Materiais).
 * .vertice-page    → além disso, a página inteira assume o fundo e as cores do
 *                    design. Sempre vem acompanhada de .vertice-chrome.
 */
.vertice-chrome {
  /*
   * !important porque o app.css do tema declara `body, html { font-family:
   * 'Outfit' !important }`. Sem isto a Geist não chega a ser aplicada — só a
   * Geist Mono, que os elementos declaram por conta própria. A classe (0,1,0)
   * vence o seletor de elemento (0,0,1) quando ambos são !important.
   */
  font-family: var(--font-sans) !important;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  /* O app.css do tema reserva 90px no body para o header fixo antigo. O header
     do Vértice flutua sobre o conteúdo, então essa reserva sai em toda página
     que o adota — é o que deixa a malha correr até o topo, sob o header. */
  padding-top: 0;
}

.vertice-page {
  margin: 0;
  background: var(--background);
  color: var(--foreground);
  font-size: var(--text-2sm);
  line-height: var(--text-2sm-lh);
  overflow-x: hidden;
}

/* Só nas páginas 100% Vértice: numa página de layout próprio isto mudaria a
   entrelinha dos títulos dela. */
.vertice-page h1,
.vertice-page h2,
.vertice-page h3 {
  line-height: 1.18;
}

/*
 * O reset de link fica em .vertice-page porque `.vertice-chrome a` (0,1,1)
 * venceria as classes de cor do Tailwind (0,1,0) numa página de layout próprio.
 * Header e menu trazem o reset por conta própria.
 */
.vertice-page a,
.vh-header a,
.vh-menu a {
  color: inherit;
  text-decoration: none;
}

.vertice-page a:hover,
.vh-header a:hover,
.vh-menu a:hover {
  text-decoration: none;
}

.vertice-chrome ::selection {
  background: var(--light-green);
  color: var(--dark-purple);
}

.vertice-chrome button {
  font-family: inherit;
}

.vertice-chrome img,
.vertice-chrome svg {
  max-width: 100%;
}

/* Ícones inline (substituem o <i data-lucide> do design) */
.vertice-chrome .vh-icon {
  flex-shrink: 0;
  display: inline-block;
  vertical-align: middle;
}

/* Foco visível — o design não trazia, mas navegação por teclado precisa */
.vertice-chrome :focus-visible {
  outline: 2px solid var(--ring);
  outline-offset: 2px;
  border-radius: var(--radius-sm);
}

/* Salto de âncora não fica escondido sob o header fixo */
.vertice-chrome [id] {
  scroll-margin-top: 96px;
}

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

/* ==========================================================================
   3. COMPONENTES DO DESIGN SYSTEM (vbb-*)
   ========================================================================== */

/* ---- Button ---- */
.vertice-chrome .vbb-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  flex-shrink: 0;
  cursor: pointer;
  white-space: nowrap;
  border-radius: var(--radius-full);
  border: 1px solid transparent;
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  font-weight: var(--font-medium);
  line-height: 1;
  transition: all 0.15s ease;
  outline: none;
  height: 2.25rem;
  padding: 0 1rem;
  text-decoration: none;
}

.vertice-chrome .vbb-btn:disabled {
  pointer-events: none;
  opacity: 0.5;
}

.vertice-chrome .vbb-btn--xs {
  height: 1.5rem;
  padding: 0 0.5rem;
  gap: var(--space-1);
  font-size: var(--text-xs);
}

.vertice-chrome .vbb-btn--sm {
  height: 2rem;
  padding: 0 0.75rem;
  gap: var(--space-1-5);
}

.vertice-chrome .vbb-btn--lg {
  height: 2.5rem;
  padding: 0 1.5rem;
}

.vertice-chrome .vbb-btn--default {
  background: var(--primary);
  color: var(--primary-foreground);
}

.vertice-chrome .vbb-btn--default:hover {
  background: color-mix(in srgb, var(--primary) 90%, transparent);
}

.vertice-chrome .vbb-btn--secondary {
  background: var(--secondary);
  color: var(--secondary-foreground);
}

.vertice-chrome .vbb-btn--secondary:hover {
  background: color-mix(in srgb, var(--secondary) 80%, transparent);
}

.vertice-chrome .vbb-btn--outline {
  background: var(--background);
  border-color: var(--input);
  box-shadow: var(--shadow-xs);
  color: var(--foreground);
}

.vertice-chrome .vbb-btn--outline:hover {
  background: var(--accent);
  color: var(--accent-foreground);
}

.vertice-chrome .vbb-btn--ghost {
  background: transparent;
  color: var(--foreground);
}

.vertice-chrome .vbb-btn--ghost:hover {
  background: var(--accent);
  color: var(--accent-foreground);
}

.vertice-chrome .vbb-btn--link {
  background: transparent;
  color: var(--primary);
}

.vertice-chrome .vbb-btn--link:hover {
  text-decoration: underline;
  text-underline-offset: 4px;
}

/* CONNECT: verde neon sobre roxo — o CTA principal da marca */
.vertice-chrome .vbb-btn--connect {
  background: var(--light-green);
  border-color: var(--light-green);
  color: var(--dark-purple);
  box-shadow: var(--shadow-xs);
}

.vertice-chrome .vbb-btn--connect:hover {
  background: transparent;
  color: var(--light-green);
}

/* ---- Badge ---- */
.vertice-chrome .vbb-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-1);
  width: fit-content;
  flex-shrink: 0;
  overflow: hidden;
  white-space: nowrap;
  border-radius: var(--radius-full);
  border: 1px solid transparent;
  padding: 0.125rem 0.5rem;
  font-size: var(--text-xs);
  font-weight: var(--font-medium);
  line-height: 1.2;
}

.vertice-chrome .vbb-badge--secondary {
  background: var(--secondary);
  color: var(--secondary-foreground);
}

.vertice-chrome .vbb-badge--outline {
  border-color: var(--border);
  color: var(--foreground);
}

.vertice-chrome .vbb-badge--success {
  background: var(--light-green);
  color: var(--dark-purple);
}

.vertice-chrome .vbb-badge--warning {
  background: var(--warning);
  color: var(--warning-foreground);
}

.vertice-chrome .vbb-badge--info {
  background: var(--info);
  color: #ffffff;
}

.vertice-chrome .vbb-badge--destructive {
  background: var(--destructive);
  color: #ffffff;
}

/* ---- Card ---- */
.vertice-chrome .vbb-card {
  display: flex;
  flex-direction: column;
  gap: var(--space-6);
  border-radius: var(--radius-xl);
  border: 1px solid var(--border);
  padding: var(--space-6) 0;
  color: var(--card-foreground);
  background: var(--card);
  box-shadow: var(--shadow-sm);
}

.vertice-chrome .vbb-card--glass {
  border-color: rgba(255, 255, 255, 0.1);
  background: rgba(255, 255, 255, 0.04);
  box-shadow: var(--shadow-lg);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
}

/* ---- Separator ---- */
.vertice-chrome .vbb-separator {
  flex-shrink: 0;
  background: var(--border);
}

.vertice-chrome .vbb-separator[data-orientation="horizontal"] {
  height: 1px;
  width: 100%;
}

/* ---- Progress ---- */
.vertice-chrome .vbb-progress {
  position: relative;
  width: 100%;
  height: 0.5rem;
  overflow: hidden;
  border-radius: var(--radius-full);
  background: var(--muted);
}

.vertice-chrome .vbb-progress-bar {
  height: 100%;
  border-radius: var(--radius-full);
  /* Termina no neon: a barra mostra o progresso e a cor da marca no fim dele. */
  background: linear-gradient(90deg, var(--primary), var(--neon));
  transition: width 0.3s ease;
}

/* ==========================================================================
   4. HOME (vh-*)
   ========================================================================== */

/* ---- Header fixo em pílula ---- */
.vh-header {
  position: fixed;
  top: 12px;
  left: 0;
  right: 0;
  z-index: 40;
}

/* Compensa a barra de admin do WP para não cobrir o header */
.admin-bar .vh-header {
  top: 46px;
}

.vh-header-inner {
  width: 90%;
  max-width: 1224px;
  margin: 0 auto;
  padding: 8px 8px 8px 24px;
  height: 64px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  border-radius: var(--radius-xl);
  border: 1px solid rgba(255, 255, 255, 0.1);
  background: color-mix(in srgb, var(--card) 70%, transparent);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  box-shadow: var(--shadow-lg);
}

.vh-nav-links {
  display: flex;
  align-items: center;
  gap: 32px;
  font-size: var(--text-sm);
  color: var(--muted-foreground);
}

.vh-link {
  color: var(--muted-foreground);
  transition: color 0.15s ease;
}

.vh-link:hover {
  color: var(--foreground) !important;
}

.vh-link[aria-current="page"] {
  color: var(--foreground);
  font-weight: var(--font-medium);
  position: relative;
}

/* Traço neon sob o item aberto — no header, não no rodapé, onde os mesmos
   links aparecem em lista. */
.vh-nav-links .vh-link[aria-current="page"]::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -7px;
  height: 2px;
  border-radius: 2px;
  background: var(--neon);
  box-shadow: 0 0 10px var(--neon-soft);
}

/* ---- Dropdown de Hubs ---- */
.vh-dropdown {
  position: relative;
}

.vh-dropdown-menu {
  position: absolute;
  top: 100%;
  left: 50%;
  transform: translateX(-50%);
  margin-top: 16px;
  min-width: 250px;
  padding: 8px;
  border-radius: var(--radius-lg);
  border: 1px solid var(--border);
  background: var(--card);
  box-shadow: var(--shadow-lg);
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.15s ease, visibility 0.15s ease;
  z-index: 50;
}

.vh-dropdown:hover .vh-dropdown-menu,
.vh-dropdown:focus-within .vh-dropdown-menu {
  opacity: 1;
  visibility: visible;
}

.vh-dropdown-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 12px;
  border-radius: var(--radius-md);
  font-size: var(--text-sm);
  color: var(--muted-foreground);
}

.vh-dropdown-item .vh-icon {
  color: var(--muted-foreground);
  transition: color 0.15s ease;
}

.vh-dropdown-item:hover {
  background: var(--secondary);
  color: var(--foreground) !important;
}

.vh-dropdown-item:hover .vh-icon {
  color: var(--neon);
}

.vh-header-cta {
  display: flex;
  align-items: center;
  gap: 14px;
}

.vh-header-cta .vbb-btn {
  border-radius: var(--radius-xl) !important;
}

/* ---- Seletor de idioma ---- */
.vh-lang {
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 4px;
  border-radius: var(--radius-full);
  background: color-mix(in srgb, var(--foreground) 6%, transparent);
}

.vh-lang button {
  border: none;
  padding: 3px;
  cursor: pointer;
  width: 26px;
  height: 26px;
  border-radius: var(--radius-full);
  display: flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  opacity: 0.45;
  transition: all 0.15s ease;
}

.vh-lang button[aria-pressed="true"] {
  background: var(--card);
  opacity: 1;
}

.vh-lang img {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  display: block;
}

/* ---- Menu mobile ---- */
.vh-menu-toggle {
  display: none;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: var(--radius-full);
  border: 1px solid var(--border);
  background: transparent;
  color: var(--foreground);
  cursor: pointer;
}

.vh-menu {
  position: fixed;
  inset: 0;
  z-index: 60;
  display: none;
  background: color-mix(in srgb, var(--background) 92%, transparent);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  padding: 16px;
  overflow-y: auto;
}

.vh-menu[data-open="true"] {
  display: block;
}

.vh-menu-panel {
  max-width: 520px;
  margin: 0 auto;
  border-radius: var(--radius-xl);
  border: 1px solid var(--border);
  background: var(--card);
  box-shadow: var(--shadow-lg);
  padding: 16px;
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.vh-menu-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 8px 16px;
}

.vh-menu a {
  display: block;
  padding: 12px;
  border-radius: var(--radius-md);
  color: var(--foreground);
  font-size: var(--text-base);
}

.vh-menu a:hover {
  background: var(--secondary);
}

.vh-menu-sub a {
  padding-left: 28px;
  font-size: var(--text-sm);
  color: var(--muted-foreground);
}

.vh-menu-actions {
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin-top: 12px;
  padding-top: 16px;
  border-top: 1px solid var(--border);
}

.vh-menu-actions .vbb-btn {
  height: 44px;
  width: 100%;
}

/* ---- Hero ---- */
.vh-hero {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
}

/* Grade de fundo + halo verde que segue o cursor */
.vh-hero-grid-bg,
.vh-hero-glow {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background-size: 44px 44px;
}

.vh-hero-grid-bg {
  background-image:
    linear-gradient(color-mix(in srgb, var(--foreground) 4%, transparent) 1px, transparent 1px),
    linear-gradient(90deg, color-mix(in srgb, var(--foreground) 4%, transparent) 1px, transparent 1px);
}

.vh-hero-glow {
  background-image:
    linear-gradient(var(--light-green) 1px, transparent 1px),
    linear-gradient(90deg, var(--light-green) 1px, transparent 1px);
  opacity: 0.22;
  --vh-glow-x: 75%;
  --vh-glow-y: 20%;
  -webkit-mask-image: radial-gradient(circle 260px at var(--vh-glow-x) var(--vh-glow-y), black, transparent 70%);
  mask-image: radial-gradient(circle 260px at var(--vh-glow-x) var(--vh-glow-y), black, transparent 70%);
}

.vh-hero-inner {
  position: relative;
  z-index: 1;
  flex: 1;
  display: flex;
  align-items: center;
}

.vh-hero-pad {
  padding: 200px 24px 140px;
}

.vh-hero-grid {
  display: grid;
  grid-template-columns: 1.05fr 0.95fr;
  gap: 56px;
  align-items: center;
}

/* Sem isto, o min-content do mockup (que tem linhas em nowrap) estoura a
   track do grid e alarga a página inteira. */
.vh-hero-grid > *,
.vh-dash > * {
  min-width: 0;
}

.vh-dash-nowrap {
  white-space: nowrap;
}

.vh-hero-title {
  font-size: clamp(2.4rem, 3.6vw, 3.4rem);
  line-height: 1.08;
  font-weight: 800;
  letter-spacing: -0.03em;
  margin: 0 0 20px;
  max-width: 560px;
  text-wrap: balance;
}

/* Destaques dentro dos títulos. Classes (e não style inline) porque o seletor
   de idioma reescreve esses títulos via innerHTML. */
.vertice-chrome .vh-em-green {
  font-style: normal;
  color: var(--light-green);
}

.vertice-chrome .vh-em-muted {
  font-style: normal;
  color: var(--muted-foreground);
}

.vh-kicker {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--muted-foreground);
}

/*
 * Ponto neon antes do rótulo: o mesmo sinal em todas as seções do site.
 *
 * Pseudo-elemento (e não markup) porque o seletor de idioma reescreve o texto
 * desses rótulos — o ponto não pode viver dentro do conteúdo.
 */
.vh-kicker::before {
  content: "";
  display: inline-block;
  width: 6px;
  height: 6px;
  margin-right: 9px;
  border-radius: 50%;
  vertical-align: middle;
  background: var(--neon);
  box-shadow: 0 0 10px var(--neon-soft);
}

/* Variante viva, para o rótulo que abre uma página. */
.vh-kicker--neon::before {
  animation: vh-neon-pulse 2.8s ease-in-out infinite;
}

.vh-cta-primary .vbb-btn,
.vh-cta-secondary .vbb-btn {
  height: 48px;
  padding: 0 24px;
  font-size: var(--text-md);
}

.vh-cta-primary .vbb-btn {
  font-weight: var(--font-semibold);
}

.vh-cta-secondary .vbb-btn {
  font-weight: var(--font-medium);
  border-width: 1.5px;
  border-color: color-mix(in srgb, var(--foreground) 30%, transparent);
}

/* ---- Chips flutuantes do mockup ---- */
.vh-float {
  transition:
    top 2.2s cubic-bezier(0.65, 0, 0.35, 1),
    right 2.2s cubic-bezier(0.65, 0, 0.35, 1),
    left 2.2s cubic-bezier(0.65, 0, 0.35, 1),
    bottom 2.2s cubic-bezier(0.65, 0, 0.35, 1);
}

.vh-float-content {
  animation: vh-chip-in 0.45s ease;
  min-height: 40px;
  display: flex;
  flex-direction: row;
  align-items: center;
  gap: 10px;
  padding: 12px 18px;
}

.vh-float-content > div > div {
  white-space: nowrap;
}

/* ---- Marca d'água da seção "Por que a Vibbe" ---- */
.vh-hero-mark svg {
  position: absolute !important;
  top: 88px !important;
  right: 40px !important;
  height: 130px !important;
  width: auto !important;
  color: var(--ultra-violet) !important;
  opacity: 0.08 !important;
}

/* ---- Grids das seções ---- */
.vh-stats-grid,
.vh-props-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
}

.vh-stats-grid {
  max-width: 1200px;
  margin: 0 auto;
  padding: 24px;
  gap: 24px;
}

.vh-props-grid {
  gap: 40px;
}

.vh-story {
  display: grid;
  grid-template-columns: 1.1fr 0.9fr;
}

.vh-footer-grid {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr;
  gap: 40px;
}

/* ---- Carrossel de benefícios ---- */
.vh-benefits {
  position: relative;
}

.vh-benefits-grid {
  display: flex;
  gap: 20px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  padding: 4px 4px 16px;
  scroll-padding-left: 4px;
  scrollbar-width: none;
}

.vh-benefits-grid::-webkit-scrollbar {
  display: none;
}

.vh-benefit-card {
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: var(--radius-xl);
  padding: 28px;
  flex: 0 0 320px;
  min-height: 460px;
  scroll-snap-align: start;
  display: flex;
  flex-direction: column;
  gap: 18px;
  transition: border-color 0.15s ease, transform 0.15s ease;
}

.vh-benefit-card:hover {
  border-color: var(--light-green);
  transform: translateY(-2px);
}

.vh-benefit-card:hover h3 {
  color: var(--light-green);
}

.vh-benefit-card h3 {
  transition: color 0.15s ease;
}

.vh-benefit-head {
  min-height: 128px;
}

.vh-benefit-panel {
  height: 260px;
  background: var(--secondary);
  border-radius: var(--radius-lg);
  border: 1px solid var(--border);
  padding: 18px;
  display: flex;
  flex-direction: column;
}

.vh-benefit-label {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--muted-foreground);
}

.vh-carousel-btn {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 40px;
  height: 40px;
  border-radius: 50%;
  border: 1px solid var(--border);
  background: var(--card);
  color: var(--foreground);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  box-shadow: var(--shadow-md);
  transition: background 0.15s ease, opacity 0.15s ease;
}

.vh-carousel-btn:hover {
  background: var(--secondary);
}

.vh-carousel-btn[disabled] {
  opacity: 0.35;
  cursor: default;
}

.vh-carousel-prev {
  left: -18px;
}

.vh-carousel-next {
  right: -18px;
}

.vh-bento-bar {
  transform-origin: bottom;
}

/* ---- Rodapé ---- */
.vh-social {
  width: 40px;
  height: 40px;
  border-radius: var(--radius-full);
  background: var(--secondary);
  border: 1px solid var(--border);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--foreground);
  transition: all 0.15s ease;
}

.vh-social:hover {
  background: var(--light-green) !important;
  color: var(--dark-purple) !important;
  border-color: var(--light-green) !important;
}

/* ==========================================================================
   5. PÁGINAS INTERNAS (Hubs / Serviços, Quem Somos, Contato)
   ========================================================================== */

/* ---- Hero das páginas internas ---- */
.vh-page-hero {
  position: relative;
  overflow: hidden;
  padding: 168px 24px 72px;
}

/* Halo roxo no canto superior direito */
.vh-hero-veil {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background: radial-gradient(
    ellipse at 75% 10%,
    color-mix(in srgb, var(--primary) 22%, transparent),
    transparent 55%
  );
}

/*
 * Dissolve a grade no fundo da seção.
 *
 * --vh-fade-to permite que uma página com fundo próprio (Materiais) dissolva
 * na cor dela em vez da cor de fundo do design.
 */
.vh-hero-fade {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background: linear-gradient(to bottom, transparent 55%, var(--vh-fade-to, var(--background)) 100%);
}

/*
 * Topo com a malha numa página de layout próprio: recria o respiro que o
 * padding do body dava, agora dentro da própria seção, e recorta as camadas.
 */
.vh-mesh-top {
  position: relative;
  overflow: hidden;
  padding-top: 152px;
}

@media (max-width: 900px) {
  .vh-mesh-top {
    padding-top: 120px;
  }
}

.vh-page-hero-inner {
  position: relative;
  z-index: 1;
  margin: 0 auto;
}

.vh-page-title {
  font-size: clamp(2rem, 3.6vw, 3rem);
  font-weight: 800;
  letter-spacing: -0.03em;
  margin: 0 0 20px;
  text-wrap: balance;
}

.vh-section {
  max-width: 1100px;
  margin: 0 auto;
  padding: 0 24px 96px;
}

/* ---- Contato ---- */
.vh-contact-grid {
  display: grid;
  grid-template-columns: 0.8fr 1.2fr;
  gap: 56px;
  max-width: 1080px;
}

.vh-contact-item {
  display: flex;
  align-items: center;
  gap: 12px;
}

.vh-contact-icon {
  width: 36px;
  height: 36px;
  flex-shrink: 0;
  border-radius: var(--radius-full);
  background: var(--secondary);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--light-green);
}

/*
 * Contact Form 7.
 *
 * O conteúdo do formulário vive no banco (com utilitários do Tailwind herdados
 * do layout antigo), então as regras aqui usam !important para vencer aquelas
 * classes sem precisar reescrever o formulário no admin.
 */

/*
 * Card do formulário — mesmo vidro do card de contato.
 *
 * Em Materiais a caixa vem com bg-[#4c407b] / bg-[#27213f] do Tailwind (0,1,0);
 * o seletor aqui (0,2,0) vence sem precisar editar o template.
 * Não se aplica onde o card já é .vbb-card--glass (a página de Contato).
 */
.vertice-chrome .vh-form:not(.vbb-card) {
  border-radius: var(--radius-xl);
  border: 1px solid rgba(255, 255, 255, 0.1);
  background: rgba(255, 255, 255, 0.04);
  box-shadow: var(--shadow-lg);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
}
/*
 * Rótulo de campo.
 *
 * Prefixado com .vertice-chrome para vencer a regra equivalente do app.css
 * (`.materiais-template .materiais-form .wpcf7-form label`), que também é
 * !important e pinta o rótulo de verde e negrito.
 *
 * O :not() exclui os rótulos de cada opção de checkbox/radio — ali o <label>
 * envolve o controle e precisa continuar em linha, não virar bloco.
 */
.vertice-chrome .vh-form .wpcf7-form label:not(:has(input[type="checkbox"])):not(:has(input[type="radio"])),
.vertice-chrome .vh-form .wpcf7-form .wpcf7-form-control-wrap > label {
  display: block;
  font-size: var(--text-xs) !important;
  font-weight: var(--font-normal) !important;
  color: var(--muted-foreground) !important;
  margin-bottom: 6px;
}

.vh-form .wpcf7-form input[type="text"],
.vh-form .wpcf7-form input[type="email"],
.vh-form .wpcf7-form input[type="tel"],
.vh-form .wpcf7-form input[type="url"],
.vh-form .wpcf7-form input[type="number"],
.vh-form .wpcf7-form input[type="date"],
.vh-form .wpcf7-form select,
.vh-form .wpcf7-form textarea {
  width: 100%;
  height: 44px;
  padding: 0 14px !important;
  border-radius: var(--radius-md) !important;
  border: 1px solid var(--border) !important;
  background: var(--card) !important;
  color: var(--foreground) !important;
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  outline: none;
  transition: border-color 0.15s ease;
}

.vh-form .wpcf7-form textarea {
  height: 110px;
  padding: 12px 14px !important;
  resize: vertical;
}

.vh-form .wpcf7-form input::placeholder,
.vh-form .wpcf7-form textarea::placeholder {
  color: var(--muted-foreground);
  opacity: 1;
}

.vh-form .wpcf7-form input:focus,
.vh-form .wpcf7-form select:focus,
.vh-form .wpcf7-form textarea:focus {
  border-color: var(--light-green) !important;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--light-green) 30%, transparent);
}

/*
 * Botão de envio no padrão CONNECT (verde neon, pílula).
 *
 * Largura total é intencional: no design o botão é filho de um card em coluna
 * (portanto esticado), e é também o que o app.css já faz nos outros formulários
 * do site — via `p:has(.wpcf7-submit) { display: flex }` + align-self: stretch.
 */
.vh-form .wpcf7-form .wpcf7-submit,
.vh-form .wpcf7-form button[type="submit"] {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 48px;
  padding: 0 28px !important;
  border: 1px solid var(--light-green) !important;
  border-radius: var(--radius-full) !important;
  background: var(--light-green) !important;
  color: var(--dark-purple) !important;
  font-family: var(--font-sans);
  font-size: var(--text-md);
  font-weight: var(--font-semibold) !important;
  cursor: pointer;
  transition: all 0.15s ease;
}

.vh-form .wpcf7-form .wpcf7-submit:hover,
.vh-form .wpcf7-form button[type="submit"]:hover {
  background: transparent !important;
  color: var(--light-green) !important;
}

/* ---- Checkbox e radio do CF7 ----
 * O tema antigo pinta esses controles de branco (input.materiais-checkbox no
 * app.css). Aqui eles voltam ao desenho do design system: quadrado translúcido
 * com borda, verde neon quando marcado.
 */
.vertice-chrome .vh-form .wpcf7-form input[type="checkbox"],
.vertice-chrome .vh-form .wpcf7-form input[type="radio"] {
  appearance: none;
  -webkit-appearance: none;
  width: 1.125rem;
  height: 1.125rem;
  flex-shrink: 0;
  margin: 0;
  cursor: pointer;
  border: 1px solid var(--input);
  border-radius: 5px;
  background: color-mix(in srgb, var(--dark-purple) 45%, transparent);
  box-shadow: none;
  transition: background 0.15s ease, border-color 0.15s ease;
}

.vertice-chrome .vh-form .wpcf7-form input[type="radio"] {
  border-radius: 50%;
}

.vertice-chrome .vh-form .wpcf7-form input[type="checkbox"]:hover,
.vertice-chrome .vh-form .wpcf7-form input[type="radio"]:hover {
  border-color: var(--light-green);
  background: color-mix(in srgb, var(--light-green) 12%, transparent);
}

.vertice-chrome .vh-form .wpcf7-form input[type="checkbox"]:checked,
.vertice-chrome .vh-form .wpcf7-form input[type="radio"]:checked {
  background-color: var(--light-green);
  border-color: var(--light-green);
}

.vertice-chrome .vh-form .wpcf7-form input[type="checkbox"]:checked {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2327213F' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
  background-size: 0.75rem;
  background-position: center;
  background-repeat: no-repeat;
}

.vertice-chrome .vh-form .wpcf7-form input[type="radio"]:checked {
  box-shadow: inset 0 0 0 3px var(--card);
}

.vertice-chrome .vh-form .wpcf7-form input[type="checkbox"]:focus-visible,
.vertice-chrome .vh-form .wpcf7-form input[type="radio"]:focus-visible {
  outline: 2px solid var(--ring);
  outline-offset: 2px;
}

/* Cada opção: controle + texto alinhados, com respiro entre eles. */
.vertice-chrome .vh-form .wpcf7-form .wpcf7-list-item {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 0;
  min-width: 0;
}

.vertice-chrome .vh-form .wpcf7-form .wpcf7-list-item label {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 0;
  cursor: pointer;
  min-width: 0;
  /* Também no <label> e não só no <span> interno: há formulários do CF7 que
     colocam o texto direto aqui, e sem isto ele herdaria o verde/negrito. */
  font-size: var(--text-sm) !important;
  font-weight: var(--font-normal) !important;
  color: var(--foreground) !important;
}

/* Texto da opção é conteúdo, não rótulo de campo: legível, sem verde/negrito. */
.vertice-chrome .vh-form .wpcf7-form .wpcf7-list-item-label {
  font-size: var(--text-sm) !important;
  font-weight: var(--font-normal) !important;
  color: var(--foreground) !important;
  line-height: 1.35;
}

.vh-form .wpcf7-not-valid-tip {
  display: block;
  margin-top: 6px;
  font-size: var(--text-xs);
  color: var(--destructive-text, #fb7185);
}

.vh-form .wpcf7-response-output {
  margin: 16px 0 0 !important;
  padding: 12px 14px !important;
  border-radius: var(--radius-md) !important;
  border: 1px solid var(--border) !important;
  font-size: var(--text-sm);
  color: var(--foreground);
}

.vh-form .wpcf7-spinner {
  margin-left: 10px;
}

/* ---- Quem Somos ---- */
.vh-team-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 20px;
}

/* Prefixado com .vertice-chrome para vencer .vertice-chrome .vbb-card, que traz
   padding e gap próprios. */
.vertice-chrome .vh-team-card {
  padding: 0;
  gap: 0;
  overflow: hidden;
  transition: background 0.15s ease, border-color 0.15s ease;
}

.vertice-chrome .vh-team-card:hover {
  background: var(--secondary);
  border-color: var(--neon-edge);
}

.vh-team-photo {
  width: 100%;
  aspect-ratio: 4 / 5;
  background: var(--secondary);
  object-fit: cover;
  object-position: center top;
  display: block;
}

.vh-team-role {
  font-family: var(--font-mono);
  font-size: var(--text-2xs);
  color: var(--light-green);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin: 4px 0 10px;
}

.vh-values-grid {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 16px;
}

.vh-value-card {
  position: relative;
  padding: 20px;
  border-radius: var(--radius-lg);
  background: var(--card);
  border: 1px solid var(--border);
  transition: border-color 0.15s ease;
}

/* Fio neon no topo, revelado no hover — o mesmo gesto dos itens do blog. */
.vh-value-card::before {
  content: "";
  position: absolute;
  top: -1px;
  left: 20px;
  right: 20px;
  height: 2px;
  border-radius: 2px;
  background: var(--neon);
  opacity: 0;
  transition: opacity 0.15s ease;
}

.vh-value-card:hover {
  border-color: var(--neon-edge);
}

.vh-value-card:hover::before {
  opacity: 1;
}

/* ---- Hubs e Serviços ---- */
.vh-bento-grid {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 20px;
}

/* Idem: precisa vencer .vertice-chrome .vbb-card. */
.vertice-chrome .vh-bento-card {
  display: flex;
  flex-direction: column;
  padding: 0;
  gap: 0;
  overflow: hidden;
  color: inherit;
  transition: border-color 0.15s ease, transform 0.15s ease;
}

/* Só cards navegáveis reagem ao hover — os demais não fingem ser clicáveis. */
a.vh-bento-card:hover {
  border-color: var(--neon-edge);
  transform: translateY(-2px);
}

a.vh-bento-card:hover .vh-bento-arrow {
  color: var(--light-green);
}

.vh-bento-arrow {
  color: var(--muted-foreground);
  transition: color 0.15s ease;
}

.vh-bento-num {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--light-green);
  text-transform: uppercase;
  letter-spacing: 0.08em;
}

/* Janela de app: a prévia do produto dentro de cada card de hub */
.vh-window {
  border-radius: var(--radius-lg);
  border: 1px solid var(--border);
  background: var(--sidebar);
  overflow: hidden;
  position: relative;
  height: 172px;
}

.vh-window-inner {
  position: absolute;
  inset: 0;
  -webkit-mask-image: linear-gradient(to bottom, black 55%, transparent 100%);
  mask-image: linear-gradient(to bottom, black 55%, transparent 100%);
}

.vh-window-bar {
  padding: 8px 12px;
  border-bottom: 1px solid var(--border);
  display: flex;
  gap: 6px;
}

.vh-window-bar span {
  width: 7px;
  height: 7px;
  border-radius: 50%;
}

.vh-window-body {
  padding: 14px 16px;
  display: flex;
  flex-direction: column;
  gap: 9px;
}

.vh-window-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 9px 11px;
  border-radius: var(--radius-md);
  background: var(--card);
  border: 1px solid var(--border);
  font-size: 10px;
}

.vh-window-row span:first-child {
  display: flex;
  align-items: center;
  gap: 6px;
  font-weight: var(--font-medium);
}

.vh-badge-mini {
  font-size: 9px;
  padding: 2px 7px;
}

/* ---- Páginas de detalhe do hub ---- */
.vh-breadcrumb {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  font-size: var(--text-xs);
  color: var(--muted-foreground);
  margin-bottom: 20px;
}

.vh-breadcrumb-current {
  font-family: var(--font-mono);
  color: var(--light-green);
  text-transform: uppercase;
  letter-spacing: 0.08em;
}

/* Janela de app em tamanho grande — a prévia principal da página do hub */
.vh-app {
  border-radius: var(--radius-xl);
  border: 1px solid var(--border);
  background: var(--sidebar);
  overflow: hidden;
  box-shadow: var(--shadow-lg);
}

.vh-app-bar {
  padding: 10px 16px;
  border-bottom: 1px solid var(--border);
  display: flex;
  align-items: center;
  gap: 10px;
  background: color-mix(in srgb, var(--foreground) 3%, transparent);
}

.vh-app-bar span {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  display: block;
}

.vh-app-url {
  flex: 1;
  text-align: center;
  font-size: var(--text-2xs);
  color: var(--muted-foreground);
  font-family: var(--font-mono);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.vh-app-grid {
  display: grid;
  grid-template-columns: 190px 1fr;
}

.vh-app-side {
  border-right: 1px solid var(--border);
  padding: 16px 10px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  background: color-mix(in srgb, var(--sidebar) 60%, transparent);
}

.vh-app-nav {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 8px 12px;
  border-radius: var(--radius-full);
  font-size: var(--text-2sm);
  color: var(--muted-foreground);
}

.vh-app-nav.is-active {
  background: var(--light-green);
  color: var(--dark-purple);
  font-weight: var(--font-semibold);
}

.vh-app-main {
  padding: 20px 24px 22px;
  display: flex;
  flex-direction: column;
  gap: 18px;
  min-width: 0;
}

.vh-app-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  padding-bottom: 14px;
  border-bottom: 1px solid var(--border);
}

.vh-app-pill {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 6px 12px;
  border-radius: var(--radius-full);
  border: 1px solid var(--border);
  font-size: var(--text-xs);
  color: var(--muted-foreground);
  white-space: nowrap;
}

/* Lista "Inclui" */
.vh-inc-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 12px;
}

.vh-inc-item {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 16px;
  border-radius: var(--radius-lg);
  background: var(--card);
  border: 1px solid var(--border);
  /* Fio neon à esquerda: marca a lista sem pedir hover. */
  border-left: 2px solid var(--neon-soft);
}

/* --------------------------------------------------------------------------
   Página de erro (404)

   Reaproveita a grade e o halo do hero, mas em coluna única e centrada — não
   há mockup ao lado para equilibrar.
   -------------------------------------------------------------------------- */

.vh-error {
  position: relative;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 78vh;
}

.vh-error-inner {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: 720px;
  margin: 0 auto;
  padding: 160px 24px 120px;
  text-align: center;
}

.vh-error-code {
  margin: 0;
  font-family: var(--font-mono);
  font-size: clamp(5rem, 18vw, 10rem);
  font-weight: var(--font-bold);
  line-height: 1;
  letter-spacing: -0.04em;
  /* Número como marca d'água: informa sem competir com a mensagem. */
  color: transparent;
  -webkit-text-stroke: 1px var(--border);
  opacity: 0.9;
}

.vh-error-title {
  margin: 8px 0 0;
  font-size: var(--text-4xl);
  font-weight: var(--font-semibold);
  line-height: 1.15;
  letter-spacing: -0.02em;
  text-wrap: balance;
}

.vh-error-text {
  margin: 16px auto 0;
  max-width: 520px;
  color: var(--muted-foreground);
  line-height: 1.7;
  text-wrap: pretty;
}

.vh-error-actions {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 12px;
  margin-top: 32px;
}

.vh-error-search {
  display: flex;
  gap: 8px;
  max-width: 440px;
  margin: 32px auto 0;
}

.vh-error-search-field {
  flex: 1;
  min-width: 0;
  /* Mesma altura do .vbb-btn ao lado. */
  height: 2.25rem;
  padding: 0 16px;
  border: 1px solid var(--input);
  border-radius: var(--radius-full);
  background: var(--card);
  color: var(--foreground);
  font-family: inherit;
  font-size: var(--text-sm);
}

.vh-error-search-field::placeholder {
  color: var(--muted-foreground);
}

.vh-error-search-field:focus-visible {
  outline: 2px solid var(--ring);
  outline-offset: 1px;
}

.vh-error-links {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 8px;
  margin-top: 48px;
  text-align: left;
}

.vh-error-link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 14px 16px;
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: var(--card);
  color: var(--foreground);
  font-size: var(--text-sm);
  transition: border-color 0.2s ease, background-color 0.2s ease, transform 0.2s ease;
}

.vh-error-link:hover {
  border-color: var(--neon-edge);
  background: var(--accent);
  transform: translateY(-1px);
}

.vh-error-link .vh-icon {
  color: var(--muted-foreground);
  transition: color 0.2s ease, transform 0.2s ease;
}

.vh-error-link:hover .vh-icon {
  color: var(--neon);
  transform: translateX(2px);
}

/* --------------------------------------------------------------------------
   Vibbe Backstage — produto com paleta própria

   Outro produto, outra cara: índigo e ciano sobre roxo, no lugar do verde-neon
   do Vértice. Só os tokens mudam — todos os componentes (vbb-*, header, menu,
   rodapé, banner de cookies) seguem os mesmos, agora nas cores do Backstage.

   Valores em oklch, copiados do tema escuro do próprio app
   (vibbe-hub-backstage/resources/css/app.css).
   -------------------------------------------------------------------------- */

.vertice-chrome.backstage-page {
  --background: oklch(0.155 0.05 285);
  --foreground: oklch(0.93 0.018 285);
  --card: oklch(0.27 0.055 292);
  --card-foreground: oklch(0.93 0.018 285);

  --primary: oklch(0.66 0.177 265);
  --primary-foreground: oklch(0.155 0.05 285);
  --secondary: oklch(0.25 0.07 285);
  --secondary-foreground: oklch(0.93 0.018 285);
  --muted: oklch(0.23 0.06 285);
  --muted-foreground: oklch(0.74 0.05 287);
  --accent: oklch(0.3 0.075 288);
  --accent-foreground: oklch(0.93 0.018 285);

  --border: oklch(0.34 0.075 287);
  --input: oklch(0.38 0.08 287);

  /* O verde de destaque do Vértice dá lugar ao ciano do Backstage: com isso os
     kickers, os botões connect e os realces herdam a cor certa sem exceção. */
  --light-green: oklch(0.855 0.157 200);
  --ring: oklch(0.855 0.157 200);

  --ultra-violet: oklch(0.413 0.096 291);
  --sidebar: oklch(0.13 0.05 285);
}

/* O botão principal tem texto escuro sobre o ciano. */
.backstage-page .vbb-btn--connect {
  color: oklch(0.155 0.05 285);
}

/* --- Telas do produto --- */

.vh-bs-shot {
  position: relative;
  overflow: hidden;
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: var(--card);
  box-shadow: 0 24px 60px -30px rgb(0 0 0 / 0.7);
}

.vh-bs-shot img {
  display: block;
  width: 100%;
  height: auto;
}

.vh-bs-shot--hero {
  border-radius: calc(var(--radius-lg) * 1.5);
}

.vh-bs-screens {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 32px;
  max-width: 1100px;
  margin: 0 auto;
}

.vh-bs-screen {
  margin: 0;
}

/* --- Problema --- */

.vh-bs-problems {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 12px;
  max-width: 1100px;
  margin: 0 auto;
}

.vh-bs-problem {
  display: flex;
  gap: 12px;
  padding: 18px;
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: color-mix(in srgb, var(--card) 60%, transparent);
}

.vh-bs-problem-mark {
  display: inline-flex;
  flex: 0 0 auto;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  background: color-mix(in srgb, var(--destructive) 18%, transparent);
  color: var(--destructive);
}

/* --- Fluxo em oito passos --- */

.vh-bs-flow {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
  max-width: 1160px;
  margin: 0 auto;
  padding: 0;
  list-style: none;
  counter-reset: none;
}

.vh-bs-step {
  position: relative;
  padding: 22px 20px 20px;
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: var(--card);
  transition: border-color 0.2s ease, transform 0.2s ease;
}

.vh-bs-step:hover {
  border-color: var(--neon-edge);
  transform: translateY(-2px);
}

.vh-bs-step-num {
  position: absolute;
  top: 14px;
  right: 16px;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: color-mix(in srgb, var(--muted-foreground) 70%, transparent);
}

.vh-bs-step-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  margin-bottom: 14px;
  border: 1px solid color-mix(in srgb, var(--light-green) 35%, transparent);
  border-radius: 10px;
  background: color-mix(in srgb, var(--light-green) 12%, transparent);
  color: var(--light-green);
}

/* --- Regras automáticas --- */

/* .vertice-chrome .vbb-card define padding e gap próprios; daí a especificidade. */
.backstage-page .vh-bs-rules-card {
  max-width: 1000px;
  margin: 0 auto;
  padding: 40px;
  gap: 28px;
}

.vh-bs-rules-head {
  max-width: 560px;
}

.vh-bs-rules {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px 24px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.vh-bs-rules li {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  font-size: var(--text-sm);
  line-height: 1.5;
  color: var(--muted-foreground);
}

.vh-bs-rules .vh-icon {
  flex: 0 0 auto;
  margin-top: 2px;
  color: var(--light-green);
}

/* --- Privacidade --- */

.vh-bs-privacy {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
  max-width: 1160px;
  margin: 0 auto;
}

.backstage-page .vh-bs-privacy-item {
  align-items: flex-start;
  padding: 24px;
  gap: 0;
}

/* --------------------------------------------------------------------------
   Vibbe Connect — produto com paleta própria

   Preto profundo com roxo elétrico: os valores vêm do branding que o próprio
   módulo aplica por programa (ProgramsSeeder: bg #0B0C10, primária #4C407B,
   secundária #A04FFB). O verde de assinatura continua — é a cor do Connect
   dentro do produto —, mas sobre um fundo mais escuro que o do site.
   -------------------------------------------------------------------------- */

.vertice-chrome.connect-page {
  --background: #0b0c10;
  --foreground: #eceaf3;
  --card: #17141f;
  --card-foreground: #eceaf3;

  --primary: #a04ffb;
  --primary-foreground: #0b0c10;
  --secondary: #1d1830;
  --secondary-foreground: #eceaf3;
  --muted: #17131f;
  --muted-foreground: #9a93b4;
  --accent: #241d3a;
  --accent-foreground: #eceaf3;

  --border: rgba(160, 79, 251, 0.2);
  --input: rgba(160, 79, 251, 0.3);
  --ultra-violet: #4c407b;
}

/* --- Ideal para: a quem o produto atende, em uma faixa só --- */

.vh-cn-fit {
  max-width: 900px;
  margin: 0 auto;
  padding: 28px 32px;
  border: 1px solid var(--border);
  border-radius: var(--radius-xl);
  background: var(--card);
  text-align: center;
}

.vh-cn-fit-title {
  margin: 0 0 20px;
}

.vh-cn-fit-list {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 10px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.vh-cn-fit-item {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 14px;
  border: 1px solid var(--border);
  border-radius: var(--radius-full);
  background: var(--secondary);
  font-size: var(--text-sm);
  line-height: 1.2;
  text-align: left;
}

.vh-cn-fit-item .vh-icon {
  color: var(--neon);
}

/* --- Pilares do posicionamento --- */

.vh-cn-pillars {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
  max-width: 1060px;
  margin: 0 auto;
}

.vh-cn-pillar {
  position: relative;
  padding: 28px 24px 24px;
  border-top: 2px solid var(--light-green);
  background: linear-gradient(180deg, color-mix(in srgb, var(--light-green) 6%, transparent), transparent 60%);
}

.vh-cn-pillar-num {
  display: block;
  margin-bottom: 12px;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--light-green);
}

/* --- Papéis --- */

.vh-cn-roles {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
  max-width: 1100px;
  margin: 0 auto;
}

.connect-page .vh-cn-role {
  padding: 28px;
  gap: 0;
}

.vh-cn-role-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  margin-bottom: 18px;
  border: 1px solid color-mix(in srgb, var(--primary) 45%, transparent);
  border-radius: 12px;
  background: color-mix(in srgb, var(--primary) 15%, transparent);
  color: var(--primary);
}

/* --- Fluxo em cinco passos --- */

.vh-cn-flow {
  display: flex;
  flex-direction: column;
  gap: 0;
  max-width: 780px;
  margin: 0 auto;
  padding: 0;
  list-style: none;
}

.vh-cn-flow-step {
  position: relative;
  display: flex;
  gap: 20px;
  padding: 0 0 32px 0;
}

/* Linha que costura os passos, como um trilho. */
.vh-cn-flow-step:not(:last-child)::before {
  content: "";
  position: absolute;
  top: 40px;
  left: 17px;
  bottom: 4px;
  width: 1px;
  background: linear-gradient(180deg, color-mix(in srgb, var(--light-green) 45%, transparent), transparent);
}

.vh-cn-flow-num {
  display: inline-flex;
  flex: 0 0 auto;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border: 1px solid color-mix(in srgb, var(--light-green) 40%, transparent);
  border-radius: 50%;
  background: color-mix(in srgb, var(--light-green) 10%, transparent);
  color: var(--light-green);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
}

/* --- Recursos --- */

.vh-cn-features {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
  max-width: 1160px;
  margin: 0 auto;
}

.vh-cn-feature {
  display: flex;
  gap: 12px;
  padding: 20px;
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: var(--card);
  transition: border-color 0.2s ease;
}

.vh-cn-feature:hover {
  border-color: var(--neon-edge);
}

.vh-cn-feature-icon {
  display: inline-flex;
  flex: 0 0 auto;
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  border-radius: 8px;
  background: color-mix(in srgb, var(--light-green) 12%, transparent);
  color: var(--light-green);
}

/* --------------------------------------------------------------------------
   Resultados de busca
   -------------------------------------------------------------------------- */

.vh-search-inner {
  max-width: 780px;
  margin: 0 auto;
  padding: 140px 24px 96px;
}

.vh-search-title {
  margin: 0;
  font-size: var(--text-3xl);
  font-weight: var(--font-semibold);
  line-height: 1.2;
  letter-spacing: -0.02em;
  text-wrap: balance;
}

.vh-search-count {
  margin: 12px 0 0;
  color: var(--muted-foreground);
  font-size: var(--text-sm);
}

.vh-results {
  display: flex;
  flex-direction: column;
  gap: 12px;
  margin-top: 40px;
}

.vh-result {
  padding: 20px;
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: var(--card);
  transition: border-color 0.2s ease;
}

.vh-result:hover {
  border-color: var(--neon-edge);
}

.vh-result-link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  color: var(--foreground);
}

.vh-result-link .vh-icon {
  flex: 0 0 auto;
  color: var(--muted-foreground);
  transition: transform 0.2s ease, color 0.2s ease;
}

.vh-result:hover .vh-result-link .vh-icon {
  color: var(--light-green, #94f896);
  transform: translateX(2px);
}

.vh-result-title {
  margin: 0;
  font-size: var(--text-lg);
  font-weight: var(--font-medium);
  line-height: 1.35;
}

.vh-result-excerpt {
  margin: 8px 0 0;
  color: var(--muted-foreground);
  font-size: var(--text-sm);
  line-height: 1.6;
}

.vh-result-meta {
  margin: 12px 0 0;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted-foreground);
}

.vh-search-pagination,
.vh-pagination {
  margin-top: 40px;
}

.vh-search-pagination .nav-links,
.vh-pagination .nav-links {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.vh-search-pagination .page-numbers,
.vh-pagination .page-numbers {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 2.25rem;
  height: 2.25rem;
  padding: 0 0.75rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-full);
  background: var(--card);
  color: var(--foreground);
  font-size: var(--text-sm);
  transition: border-color 0.2s ease, background-color 0.2s ease;
}

.vh-search-pagination .page-numbers:hover,
.vh-pagination .page-numbers:hover {
  border-color: var(--neon-edge);
  background: var(--accent);
}

.vh-search-pagination .page-numbers.current,
.vh-pagination .page-numbers.current {
  border-color: var(--light-green, #94f896);
  background: var(--light-green, #94f896);
  color: #0b0c10;
  font-weight: var(--font-medium);
}

.vh-search-pagination .screen-reader-text,
.vh-pagination .screen-reader-text {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
}

/* --------------------------------------------------------------------------
   Blog — listagem, arquivos e post

   Mesma anatomia das páginas internas (hero + .vh-section); o que este bloco
   acrescenta são o card de post, os chips de categoria e a tipografia extra do
   corpo do texto, que vem do editor do WordPress.
   -------------------------------------------------------------------------- */

.vh-blog-lead {
  margin: 0;
  max-width: 620px;
  font-size: var(--text-lg);
  line-height: 1.6;
  color: var(--muted-foreground);
}

/* ---- Chips (categorias e tags) ---- */
.vh-chip {
  display: inline-flex;
  align-items: center;
  height: 2rem;
  padding: 0 0.875rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-full);
  background: var(--card);
  color: var(--muted-foreground);
  font-size: var(--text-2sm);
  line-height: 1;
  white-space: nowrap;
  transition: color 0.15s ease, border-color 0.15s ease, background-color 0.15s ease;
}

.vh-chip:hover {
  color: var(--foreground) !important;
  border-color: var(--neon-edge);
}

.vh-chip.is-active {
  border-color: var(--neon);
  background: var(--neon-faint);
  color: var(--foreground);
}

.vh-blog-filters {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 28px;
}

/* ---- Grade de posts ---- */
.vh-blog-section {
  padding-top: 8px;
}

.vh-blog-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}

.vh-post-card {
  position: relative;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  border: 1px solid var(--border);
  border-radius: var(--radius-xl);
  background: var(--card);
  transition: border-color 0.2s ease, transform 0.2s ease;
}

/* Fio neon no topo do card, aceso no hover. */
.vh-post-card::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 2px;
  z-index: 2;
  background: linear-gradient(90deg, transparent, var(--neon), transparent);
  opacity: 0;
  transition: opacity 0.2s ease;
}

.vh-post-card:hover {
  border-color: var(--neon-edge);
  transform: translateY(-2px);
}

.vh-post-card:hover::before {
  opacity: 1;
}

/* O card inteiro é clicável pelo link do título; os links internos (categoria)
   ficam acima dessa camada. */
.vh-post-title a::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
}

.vh-post-thumb {
  position: relative;
  display: block;
  overflow: hidden;
  background: var(--secondary);
  aspect-ratio: 16 / 9;
}

.vh-post-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 0.4s ease;
}

.vh-post-card:hover .vh-post-img {
  transform: scale(1.03);
}

/* Sem imagem destacada: a marca sobre o roxo, com um halo neon atrás. */
.vh-post-thumb-empty {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  /* Marca legível sobre o roxo, mas sem competir com o título do card. */
  color: color-mix(in srgb, var(--primary) 70%, var(--foreground));
  opacity: 0.55;
  background:
    radial-gradient(circle at 50% 120%, var(--neon-faint), transparent 60%),
    var(--secondary);
}

.vh-post-flag {
  position: absolute;
  top: 14px;
  left: 14px;
  z-index: 2;
}

.vh-post-content {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 22px;
}

.vh-post-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px;
  font-family: var(--font-mono);
  font-size: var(--text-2xs);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--muted-foreground);
}

/* Data e tempo de leitura andam juntos: quando a linha quebra, ela quebra
   antes deles, e não no meio do separador. */
.vh-post-meta-time {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  white-space: nowrap;
}

.vh-post-cat {
  position: relative;
  z-index: 2;
  color: var(--neon) !important;
}

.vh-post-cat:hover {
  text-decoration: underline;
  text-underline-offset: 3px;
}

.vh-post-dot {
  width: 3px;
  height: 3px;
  border-radius: 50%;
  background: currentColor;
  opacity: 0.6;
}

.vh-post-title {
  margin: 0;
  font-size: var(--text-lg);
  font-weight: var(--font-semibold);
  line-height: 1.3;
  letter-spacing: -0.01em;
}

.vh-post-title a {
  transition: color 0.15s ease;
}

.vh-post-card:hover .vh-post-title a {
  color: var(--neon);
}

.vh-post-excerpt {
  margin: 0;
  font-size: var(--text-sm);
  line-height: 1.6;
  color: var(--muted-foreground);
}

.vh-post-more {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 4px;
  font-size: var(--text-sm);
  font-weight: var(--font-medium);
  color: var(--muted-foreground);
  transition: color 0.15s ease;
}

.vh-post-more .vh-icon {
  transition: transform 0.2s ease;
}

.vh-post-card:hover .vh-post-more {
  color: var(--neon);
}

.vh-post-card:hover .vh-post-more .vh-icon {
  transform: translateX(3px);
}

/* ---- Destaque: ocupa a linha inteira, imagem ao lado do texto ---- */
.vh-post-card--featured {
  grid-column: span 3;
  flex-direction: row;
}

.vh-post-card--featured .vh-post-thumb {
  flex: 0 0 52%;
  aspect-ratio: auto;
}

.vh-post-card--featured .vh-post-content {
  justify-content: center;
  padding: 36px 40px;
  gap: 14px;
}

.vh-post-card--featured .vh-post-title {
  font-size: var(--text-3xl);
  line-height: 1.2;
  letter-spacing: -0.02em;
}

.vh-post-card--featured .vh-post-excerpt {
  font-size: var(--text-base);
}

.vh-post-card--compact .vh-post-content {
  padding: 18px;
}

.vh-post-card--compact .vh-post-title {
  font-size: var(--text-base);
}

/* ---- Sem posts ---- */
.vh-blog-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
  padding: 64px 24px;
  border: 1px dashed var(--neon-soft);
  border-radius: var(--radius-xl);
  background: var(--card);
  text-align: center;
}

.vh-blog-empty-title {
  margin: 0;
  font-size: var(--text-xl);
  font-weight: var(--font-semibold);
}

.vh-blog-empty-text {
  margin: 0 0 8px;
  max-width: 460px;
  color: var(--muted-foreground);
  font-size: var(--text-sm);
  line-height: 1.6;
}

/* --------------------------------------------------------------------------
   Post
   -------------------------------------------------------------------------- */

.vh-post-hero {
  padding-bottom: 40px;
}

.vh-post-hero-inner {
  max-width: 780px;
  text-align: center;
}

.vh-post-breadcrumb {
  margin-bottom: 24px;
}

.vh-post-hero-title {
  font-size: clamp(1.9rem, 3.2vw, 2.75rem);
  line-height: 1.15;
  margin-bottom: 24px;
}

.vh-post-byline {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 20px;
  font-size: var(--text-sm);
  color: var(--muted-foreground);
}

.vh-post-byline-item {
  display: inline-flex;
  align-items: center;
  gap: 7px;
}

.vh-post-byline-item .vh-icon {
  color: var(--neon);
}

/* Imagem de abertura, com o brilho neon por baixo em vez de moldura. */
.vh-post-cover {
  max-width: 900px;
  margin: 0 auto 48px;
  padding: 0 24px;
}

.vh-post-cover-img {
  width: 100%;
  height: auto;
  display: block;
  border-radius: var(--radius-xl);
  border: 1px solid var(--border);
  box-shadow: var(--shadow-lg);
}

.vh-post-cover figcaption {
  margin-top: 12px;
  text-align: center;
  font-size: var(--text-xs);
  color: var(--muted-foreground);
}

/* Corpo do texto: parte de .vh-legal e acrescenta o que só o post usa. */
.vh-post-body {
  padding-bottom: 48px;
}

.vh-post-body img,
.vh-post-body video,
.vh-post-body iframe {
  max-width: 100%;
  height: auto;
  border-radius: var(--radius-lg);
}

.vh-post-body figure {
  margin: 32px 0;
}

.vh-post-body figcaption {
  margin-top: 10px;
  font-size: var(--text-xs);
  color: var(--muted-foreground);
  text-align: center;
}

.vh-post-body blockquote {
  margin: 32px 0;
  padding: 4px 0 4px 24px;
  border-left: 2px solid var(--neon);
  color: var(--foreground);
  font-size: var(--text-lg);
  line-height: 1.6;
}

.vh-post-body blockquote p:last-child {
  margin-bottom: 0;
}

.vh-post-body code {
  padding: 2px 6px;
  border-radius: var(--radius-sm);
  background: var(--secondary);
  font-family: var(--font-mono);
  font-size: 0.9em;
  color: var(--neon);
}

.vh-post-body pre {
  margin: 0 0 24px;
  padding: 20px;
  overflow-x: auto;
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: var(--sidebar);
}

.vh-post-body pre code {
  padding: 0;
  background: none;
  color: var(--foreground);
}

.vh-post-body hr {
  margin: 40px 0;
  border: 0;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--neon-soft), transparent);
}

.vh-post-pages {
  margin-top: 24px;
  font-size: var(--text-sm);
  color: var(--muted-foreground);
}

/* ---- Tags ---- */
.vh-post-tags {
  max-width: 780px;
  margin: 0 auto;
  padding: 0 24px 48px;
}

.vh-post-tags-list {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 14px;
}

/* ---- Navegação entre posts ---- */
.vh-post-nav {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
  max-width: 900px;
  margin: 0 auto;
  padding: 0 24px 56px;
}

.vh-post-nav-link {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 18px 20px;
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: var(--card);
  transition: border-color 0.2s ease;
}

.vh-post-nav-link:hover {
  border-color: var(--neon-edge);
}

.vh-post-nav-link--next {
  text-align: right;
}

.vh-post-nav-label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: var(--font-mono);
  font-size: var(--text-2xs);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--neon);
}

.vh-post-nav-link--next .vh-post-nav-label {
  justify-content: flex-end;
}

.vh-post-nav-title {
  font-size: var(--text-sm);
  line-height: 1.4;
  color: var(--foreground);
}

/* ---- Chamada de fim de post ---- */
.vh-post-cta {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  max-width: 900px;
  margin: 0 auto 72px;
  padding: 32px;
  border: 1px solid var(--neon-soft);
  border-radius: var(--radius-xl);
  background:
    radial-gradient(ellipse at 100% 0%, var(--neon-faint), transparent 60%),
    var(--card);
}

.vh-post-cta-title {
  margin: 0;
  max-width: 460px;
  font-size: var(--text-xl);
  font-weight: var(--font-semibold);
  line-height: 1.3;
}

.vh-post-cta-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
}

/* ---- Leia também ---- */
.vh-post-related-title {
  margin: 0 0 24px;
  font-size: var(--text-2xl);
  font-weight: var(--font-semibold);
  letter-spacing: -0.02em;
}

/* ---- Comentários ----
   O template de comentários é o antigo, com utilitários do Tailwind pensados
   para fundo claro; aqui ele só precisa voltar a ser legível no escuro. */
.vh-post-comments {
  max-width: 780px;
  margin: 0 auto;
  padding: 0 24px 80px;
}

.vh-post-comments .comments-title,
.vh-post-comments .comment-reply-title {
  color: var(--foreground) !important;
}

.vh-post-comments .comment-list {
  list-style: none;
  padding: 0;
}

.vh-post-comments .comment-body {
  padding: 20px;
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: var(--card);
}

.vh-post-comments input[type="text"],
.vh-post-comments input[type="email"],
.vh-post-comments input[type="url"],
.vh-post-comments textarea {
  width: 100%;
  padding: 10px 14px;
  border: 1px solid var(--input);
  border-radius: var(--radius-md);
  background: var(--card);
  color: var(--foreground);
  font-family: inherit;
  font-size: var(--text-sm);
}

.vh-post-comments .submit {
  height: 2.25rem;
  padding: 0 1.25rem;
  border: 1px solid var(--light-green);
  border-radius: var(--radius-full);
  background: var(--light-green);
  color: var(--dark-purple);
  font-weight: var(--font-medium);
  cursor: pointer;
}

.vh-post-comments .submit:hover {
  background: transparent;
  color: var(--light-green);
}

/* --------------------------------------------------------------------------
   Páginas legais (Política de Privacidade)

   Conteúdo vindo do editor do WordPress: os estilos precisam ser descendentes,
   não classes utilitárias, porque o markup é gerado pelos blocos.
   -------------------------------------------------------------------------- */

.vh-legal {
  max-width: 780px;
  margin: 0 auto;
  padding: 0 24px 96px;
  font-size: var(--text-base);
  line-height: 1.75;
  color: var(--muted-foreground);
}

.vh-legal > *:first-child {
  margin-top: 0;
}

.vh-legal h2 {
  margin: 48px 0 16px;
  font-size: var(--text-xl);
  font-weight: var(--font-semibold);
  line-height: 1.3;
  color: var(--foreground);
}

.vh-legal h3 {
  margin: 32px 0 12px;
  font-size: var(--text-lg);
  font-weight: var(--font-medium);
  color: var(--foreground);
}

.vh-legal p {
  margin: 0 0 16px;
}

/* O reset do Tailwind zera os marcadores; aqui eles fazem parte da leitura. */
.vh-legal ul,
.vh-legal ol {
  margin: 0 0 16px;
  padding-left: 24px;
}

.vh-legal ul {
  list-style: disc;
}

.vh-legal ol {
  list-style: decimal;
}

.vh-legal li {
  margin-bottom: 8px;
}

.vh-legal li::marker {
  color: var(--neon);
}

.vh-legal strong {
  color: var(--foreground);
  font-weight: var(--font-medium);
}

.vh-legal a {
  color: var(--primary);
  text-decoration: underline;
  text-underline-offset: 2px;
  transition: color 0.2s ease;
}

.vh-legal a:hover {
  color: var(--light-green, #94f896);
}

.vh-legal table {
  width: 100%;
  margin: 0 0 24px;
  border-collapse: collapse;
  font-size: var(--text-sm);
}

.vh-legal th,
.vh-legal td {
  padding: 12px;
  border: 1px solid var(--border);
  text-align: left;
  vertical-align: top;
}

.vh-legal th {
  color: var(--foreground);
  font-weight: var(--font-medium);
  background: var(--card);
}

/* ==========================================================================
   6. ANIMAÇÕES
   ========================================================================== */

/* Respiro do ponto neon que abre as seções. */
@keyframes vh-neon-pulse {
  0%,
  100% {
    box-shadow: 0 0 10px var(--neon-soft);
    opacity: 1;
  }
  50% {
    box-shadow: 0 0 16px var(--neon);
    opacity: 0.75;
  }
}

@keyframes vh-chip-in {
  from {
    opacity: 0;
    transform: translateY(8px) scale(0.96);
  }
  to {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}

@keyframes vh-badge-pop {
  0% {
    opacity: 0;
    transform: translateY(6px) scale(0.92);
  }
  100% {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}

@keyframes vh-typing-dot {
  0%,
  60%,
  100% {
    opacity: 0.25;
    transform: translateY(0);
  }
  30% {
    opacity: 1;
    transform: translateY(-2px);
  }
}

@keyframes vh-bar-grow {
  from {
    transform: scaleY(0);
  }
  to {
    transform: scaleY(1);
  }
}

@keyframes vh-bar-fill {
  from {
    transform: scaleX(0);
  }
  to {
    transform: scaleX(1);
  }
}

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

/* Reveals. As classes são adicionadas pelo JS — sem JS nada fica oculto. */
.vertice-chrome .vh-reveal {
  opacity: 0;
  transform: translateY(26px);
  transition: opacity 0.7s ease, transform 0.7s cubic-bezier(0.2, 0.8, 0.2, 1);
}

.vertice-chrome .vh-reveal--mock {
  transform: translateY(60px) scale(0.97);
}

.vertice-chrome .vh-reveal.is-in {
  opacity: 1;
  transform: none;
}

/* ==========================================================================
   6. RESPONSIVO
   ========================================================================== */

@media (max-width: 1024px) {
  .vh-hero-grid {
    gap: 32px;
  }

  .vh-bs-flow,
  .vh-bs-privacy,
  .vh-cn-features {
    grid-template-columns: repeat(2, 1fr);
  }

  .vh-bs-rules {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 900px) {
  .vh-nav-links,
  .vh-lang,
  .vh-header-cta .vbb-btn {
    display: none !important;
  }

  .vh-menu-toggle {
    display: flex;
  }

  .vh-float {
    display: none !important;
  }

  .vh-hero-grid,
  .vh-stats-grid,
  .vh-props-grid,
  .vh-story,
  .vh-footer-grid,
  .vh-contact-grid {
    grid-template-columns: 1fr !important;
  }

  /* Bento vira coluna única: os spans de 12 colunas não fazem sentido aqui. */
  .vh-bento-grid {
    grid-template-columns: 1fr !important;
  }

  .vh-bento-grid > * {
    grid-column: span 1 !important;
  }

  .vh-team-grid,
  .vh-values-grid,
  .vh-inc-grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .vh-page-hero {
    padding: 120px 24px 56px;
  }

  /* A janela de app perde a sidebar e os painéis lado a lado no mobile. */
  .vh-app-grid,
  .vh-app-split {
    grid-template-columns: 1fr !important;
  }

  .vh-app-side {
    display: none;
  }

  .vh-app-main {
    padding: 16px;
  }

  /* No mobile o mockup vira apenas o painel principal, sem sidebar */
  .vh-dash {
    grid-template-columns: 1fr !important;
  }

  .vh-dash-side {
    display: none !important;
  }

  .vh-hero-mock {
    margin: 0 auto !important;
    max-width: 100% !important;
  }

  /* No mobile o mockup precisa poder quebrar linha para caber. */
  .vh-dash-nowrap {
    white-space: normal;
  }

  /* 200px de respiro acima do hero é desenho de desktop. */
  .vh-hero-pad {
    padding: 120px 24px 72px;
  }

  .vh-carousel-btn {
    display: none;
  }

  .vh-story-divider {
    border-right: 0 !important;
    border-bottom: 1px solid var(--border);
    padding-bottom: 32px !important;
  }

  .vh-story-pad {
    padding-left: 0 !important;
    padding-top: 32px !important;
  }

  .backstage-page .vh-bs-rules-card {
    padding: 28px 22px;
  }

  .vh-cn-pillars,
  .vh-cn-roles {
    grid-template-columns: 1fr;
  }

  /* Blog: duas colunas, e o destaque volta a ser um card empilhado. */
  .vh-blog-grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .vh-post-card--featured {
    grid-column: span 2;
    flex-direction: column;
  }

  .vh-post-card--featured .vh-post-thumb {
    flex: none;
    aspect-ratio: 16 / 9;
  }

  .vh-post-card--featured .vh-post-content {
    padding: 26px 24px;
  }

  .vh-post-card--featured .vh-post-title {
    font-size: var(--text-2xl);
  }

  .vh-post-hero {
    padding-bottom: 32px;
  }
}

/*
 * O blog volta a uma coluna antes dos demais grids: com duas colunas abaixo de
 * ~700px a linha de meta (categoria, data e tempo de leitura) não cabe.
 */
@media (max-width: 700px) {
  .vh-blog-grid {
    grid-template-columns: 1fr;
  }

  .vh-post-card--featured {
    grid-column: span 1;
  }
}

@media (max-width: 560px) {
  .vh-hero-title {
    font-size: var(--text-3xl) !important;
  }

  .vh-benefit-card {
    flex: 0 0 86vw;
  }

  .vh-team-grid,
  .vh-values-grid,
  .vh-inc-grid,
  .vh-error-links,
  .vh-bs-screens,
  .vh-bs-flow,
  .vh-bs-privacy,
  .vh-bs-rules,
  .vh-cn-pillars,
  .vh-cn-roles,
  .vh-cn-features {
    grid-template-columns: 1fr;
  }

  .vh-error-title {
    font-size: var(--text-3xl);
  }

  .vh-error-inner {
    padding: 120px 20px 80px;
  }

  .vh-post-nav {
    grid-template-columns: 1fr;
  }

  .vh-post-nav-link--next {
    text-align: left;
  }

  .vh-post-nav-link--next .vh-post-nav-label {
    justify-content: flex-start;
  }

  .vh-post-cta {
    padding: 26px 22px;
  }
}

/* Respeita quem pediu menos movimento: mantém o layout, corta a animação. */
@media (prefers-reduced-motion: reduce) {
  .vertice-chrome *,
  .vertice-chrome *::before,
  .vertice-chrome *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }

  .vh-hero-glow {
    display: none;
  }
}
