:root{
  --azul:#003c58;
  --azul-2:#0a5b82;
  --cereja:#e73452;
  --cinza:#e3e3e3;
  --cinza-escuro:#6a7a82;
  --branco:#ffffff;
  --texto:#1c2b33;
  --radius:14px;
}
*{box-sizing:border-box; margin:0; padding:0;}
body{
  font-family:'Open Sans', sans-serif;
  background:var(--cinza);
  color:var(--texto);
  min-height:100vh;
}
h1,h2,h3{font-family:'Poppins', sans-serif; font-weight:800;}

.logo-img{width:550px; height:auto; max-width:100%; display:block; align-self:flex-start; flex-shrink:0;}
.logo-img.pequeno{width:150px; height:auto;}
.logo-img.login{width:340px; height:auto;}

/* ---- LOGIN ---- */
#tela-login{display:grid; grid-template-columns:1.1fr 1fr; min-height:100vh;}
.login-brand{
  background:radial-gradient(circle at 20% 20%, var(--azul-2), var(--azul) 60%);
  color:#fff; padding:60px;
  display:flex; flex-direction:column; justify-content:space-between; align-items:flex-start;
  position:relative; overflow:hidden;
}
.login-brand::after{
  content:""; position:absolute; right:-140px; bottom:-140px;
  width:420px; height:420px; border-radius:50%;
  background:radial-gradient(circle, rgba(231,52,82,.20), transparent 70%);
}
.login-brand .claim{font-size:38px; line-height:1.25; max-width:420px; margin-top:60px; position:relative; z-index:1;}
.login-brand .claim span{color:var(--cereja);}
.login-brand .footnote{font-size:13px; opacity:.75; position:relative; z-index:1;}

.login-form-wrap{display:flex; align-items:center; justify-content:center; background:var(--branco); padding:40px;}
.login-card{width:100%; max-width:380px;}
.login-card h2{font-size:26px; color:var(--azul); margin-bottom:6px;}
.login-card p.sub{color:var(--cinza-escuro); font-size:14px; margin-bottom:28px;}

label{font-size:13px; font-weight:700; color:var(--azul); display:block; margin-bottom:6px;}
.input-group{margin-bottom:18px;}
input[type="text"], input[type="password"], select{
  width:100%; padding:13px 14px; border-radius:10px;
  border:1.5px solid #d7dee1; font-family:'Open Sans'; font-size:14px;
  background:#fafbfb; transition:.2s;
}
input:focus, select:focus{outline:none; border-color:var(--azul-2); box-shadow:0 0 0 3px rgba(10,91,130,.15);}

.btn-primary{
  width:100%; padding:14px; border:none; border-radius:10px;
  background:var(--cereja); color:#fff; font-family:'Open Sans'; font-weight:700;
  font-size:15px; cursor:pointer; transition:.2s; margin-top:6px;
}
.btn-primary:hover{background:#d12444;}

.login-help{font-size:12.5px; color:var(--cinza-escuro); text-align:center; margin-top:20px; line-height:1.6;}
.login-help b{color:var(--azul);}

.alerta{
  background:rgba(231,52,82,.08); border:1px solid rgba(231,52,82,.3); color:var(--cereja);
  padding:11px 14px; border-radius:9px; font-size:13.5px; margin-bottom:18px;
}
.alerta.sucesso{background:rgba(0,60,88,.06); border-color:rgba(0,60,88,.25); color:var(--azul);}

/* ---- PAINEL ---- */
#tela-painel{min-height:100vh; background:#f4f6f6;}
.topbar{background:var(--azul); color:#fff; padding:14px 32px; display:flex; align-items:center; justify-content:space-between;}
.topbar .user-chip{display:flex; align-items:center; gap:10px; font-size:13px; font-weight:700;}
.avatar{width:34px; height:34px; border-radius:50%; background:var(--cereja); color:#fff;
  display:flex; align-items:center; justify-content:center; font-family:'Poppins'; font-weight:800;}
.topbar a{color:#fff; opacity:.8; font-size:13px; text-decoration:none;}
.topbar a:hover{opacity:1;}

.painel-inner{max-width:960px; margin:0 auto; padding:36px 24px 60px;}
.painel-header{margin-bottom:28px;}
.painel-header h2{font-size:26px; color:var(--azul);}
.painel-header p{color:var(--cinza-escuro); font-size:14px; margin-top:4px;}

.viagem-card{
  background:#fff; border-radius:var(--radius); padding:20px 22px; margin-bottom:16px;
  box-shadow:0 2px 10px rgba(0,40,60,.06); border:1.5px solid transparent; transition:.2s;
}
.viagem-card:hover{border-color:var(--azul-2);}
.viagem-top{display:flex; justify-content:space-between; align-items:flex-start; gap:12px; cursor:pointer;}
.viagem-top h3{font-size:17px; color:var(--azul);}
.viagem-top .destino{font-size:13px; color:var(--cinza-escuro); margin-top:3px;}
.status-badge{font-size:11.5px; font-weight:700; padding:5px 12px; border-radius:999px; white-space:nowrap;}
.status-confirmada{background:rgba(0,60,88,.10); color:var(--azul);}
.status-andamento{background:rgba(231,52,82,.12); color:var(--cereja);}
.status-concluida{background:var(--cinza); color:var(--cinza-escuro);}
.status-recusado{background:rgba(150,30,30,.10); color:#961e1e;}

.viagem-datas{display:flex; gap:22px; margin-top:14px; font-size:13px; color:#4c5a61;}
.viagem-datas span b{color:var(--azul); display:block; font-size:11px; text-transform:uppercase; letter-spacing:.4px;}

.docs{margin-top:16px; padding-top:16px; border-top:1px dashed var(--cinza); display:none; flex-wrap:wrap; gap:10px; align-items:center;}
.viagem-card.aberta .docs{display:flex;}
.doc-chip{display:flex; align-items:center; gap:8px; background:#f4f6f6; border-radius:9px; padding:7px 8px 7px 13px;
  font-size:12.5px; font-weight:600; color:var(--azul);}
.doc-chip > svg{width:15px; height:15px; flex-shrink:0;}
.doc-chip .doc-tipo{margin-right:2px;}

.doc-actions{display:flex; gap:2px; margin-left:2px; padding-left:8px; border-left:1px solid #d9dfe1;}
.doc-action-btn{
  display:flex; align-items:center; justify-content:center; width:24px; height:24px;
  border-radius:6px; color:var(--cinza-escuro); transition:.15s;
  border:none; background:none; padding:0; cursor:pointer; font:inherit;
}
.doc-action-btn:hover{background:rgba(0,60,88,.10); color:var(--azul);}
.doc-action-btn svg{width:14px; height:14px;}

/* ---- MODAL FLUTUANTE DE DOCUMENTO ---- */
.modal-overlay{
  display:none; position:fixed; inset:0; background:rgba(0,20,30,.65); z-index:1000;
  align-items:center; justify-content:center; padding:28px;
}
.modal-overlay.aberto{display:flex;}
.modal-conteudo{
  background:#fff; border-radius:14px; width:100%; max-width:920px; height:88vh;
  position:relative; overflow:hidden; box-shadow:0 24px 60px rgba(0,0,0,.35);
}
.modal-conteudo iframe{width:100%; height:100%; border:none; display:block;}
.modal-fechar{
  position:absolute; top:10px; right:10px; width:34px; height:34px; border-radius:50%;
  background:rgba(0,0,0,.55); color:#fff; border:none; font-size:22px; line-height:1;
  cursor:pointer; z-index:2; display:flex; align-items:center; justify-content:center;
}
.modal-fechar:hover{background:rgba(0,0,0,.75);}
@media (max-width:760px){
  .modal-overlay{padding:0;}
  .modal-conteudo{max-width:100%; height:100%; border-radius:0;}
}

.upload-form{display:flex; align-items:center; gap:8px; flex-wrap:wrap;}
.upload-form select{width:auto; padding:9px 10px; font-size:12.5px;}
.upload-form input[type="file"]{font-size:12px;}
.upload-btn{
  padding:9px 13px; border-radius:9px; border:1.5px dashed #b9c3c7; background:none;
  font-size:12.5px; font-weight:700; color:var(--cinza-escuro); cursor:pointer;
}
.upload-btn:hover{border-color:var(--cereja); color:var(--cereja);}

.vazio{color:var(--cinza-escuro); font-size:13.5px; padding:20px 0;}

/* ---- ADMIN ---- */
.painel-header-row{display:flex; justify-content:space-between; align-items:flex-end; gap:16px; margin-bottom:28px; flex-wrap:wrap;}
.busca-form{display:flex; gap:8px;}
.busca-form input{width:260px;}

.btn-secundario{
  display:inline-block; padding:12px 18px; border-radius:10px; border:1.5px solid var(--azul-2);
  background:none; color:var(--azul-2); font-family:'Open Sans'; font-weight:700;
  font-size:14px; cursor:pointer; text-decoration:none; text-align:center; white-space:nowrap;
}
.btn-secundario:hover{background:rgba(10,91,130,.08);}
.btn-secundario:disabled{opacity:.5; cursor:not-allowed;}
.btn-secundario:disabled:hover{background:none;}

.btn-perigo{
  padding:9px 13px; border-radius:9px; border:1.5px solid rgba(231,52,82,.4); background:none;
  font-size:12.5px; font-weight:700; color:var(--cereja); cursor:pointer;
}
.btn-perigo:hover{background:rgba(231,52,82,.08);}

.voltar-link{display:inline-block; font-size:13px; font-weight:700; color:var(--azul-2); text-decoration:none; margin-bottom:18px;}
.voltar-link:hover{text-decoration:underline;}

.tabela-lista{width:100%; border-collapse:collapse; background:#fff; border-radius:var(--radius); overflow:hidden; box-shadow:0 2px 10px rgba(0,40,60,.06);}
.tabela-lista th{background:var(--azul); color:#fff; text-align:left; font-size:12px; text-transform:uppercase; letter-spacing:.4px; padding:13px 16px;}
.tabela-lista td{padding:14px 16px; font-size:13.5px; border-top:1px solid var(--cinza); vertical-align:middle;}
.tabela-lista tr:hover td{background:#f9fafa;}
.tabela-lista a{color:var(--azul); font-weight:700; text-decoration:none;}
.tabela-lista a:hover{text-decoration:underline;}
.tabela-lista .linha-sub{color:var(--cinza-escuro); font-size:12px; margin-top:2px;}

.form-card{background:#fff; border-radius:var(--radius); padding:28px; max-width:520px; box-shadow:0 2px 10px rgba(0,40,60,.06);}
.form-card.config-card{max-width:900px;}
.form-linha{display:flex; gap:14px;}
.form-linha .input-group{flex:1;}

.config-secao{margin-bottom:30px; padding-bottom:26px; border-bottom:1px solid var(--cinza);}
.config-secao:last-of-type{border-bottom:none; padding-bottom:0; margin-bottom:0;}
.config-secao h3{color:var(--azul); font-size:16px; margin-bottom:4px;}
.config-secao .config-secao-sub{color:var(--cinza-escuro); font-size:13px; margin-bottom:18px;}

.logos-grid{display:grid; grid-template-columns:repeat(3, 1fr); gap:18px;}
.logo-config{background:#f9fafb; border:1.5px solid var(--cinza); border-radius:12px; padding:16px;}
.logo-config label{margin-bottom:8px;}
.logo-config input[type="file"]{font-size:12.5px; width:100%;}
.logo-config-preview{
  margin-top:12px; height:100px; border-radius:8px; background:#fff;
  border:1px dashed #d7dee1; display:flex; align-items:center; justify-content:center; overflow:hidden; padding:8px;
}
.logo-config-preview img{max-width:100%; max-height:100%; display:block;}
.logo-config-preview .vazio{color:var(--cinza-escuro); font-size:12px;}
.logo-config-slider{display:flex; align-items:center; gap:10px; margin-top:12px;}
.logo-config-slider input[type="range"]{flex:1; accent-color:var(--cereja);}
.logo-config-slider .valor-px{font-size:12.5px; font-weight:700; color:var(--azul); min-width:52px; text-align:right;}
textarea{
  width:100%; padding:13px 14px; border-radius:10px; border:1.5px solid #d7dee1;
  font-family:'Open Sans'; font-size:14px; background:#fafbfb; resize:vertical; min-height:80px;
}
textarea:focus{outline:none; border-color:var(--azul-2); box-shadow:0 0 0 3px rgba(10,91,130,.15);}

.passageiro-info{background:#fff; border-radius:var(--radius); padding:22px 24px; margin-bottom:24px; box-shadow:0 2px 10px rgba(0,40,60,.06);}
.passageiro-info h2{color:var(--azul); font-size:22px; margin-bottom:6px;}
.passageiro-info .passageiro-meta{display:flex; gap:22px; flex-wrap:wrap; font-size:13px; color:var(--cinza-escuro); margin-top:10px;}
.passageiro-info .passageiro-meta b{color:var(--azul); display:block; font-size:11px; text-transform:uppercase; letter-spacing:.4px;}

.doc-linha{display:flex; align-items:center; justify-content:space-between; gap:10px;}

.empresa-badges{display:flex; gap:8px; flex-wrap:wrap; margin-top:12px;}
.empresa-badge{
  background:rgba(0,60,88,.08); color:var(--azul); font-size:12px; font-weight:700;
  padding:6px 12px; border-radius:999px;
}

.viagem-vinculo{
  display:inline-block; font-size:11px; font-weight:700; padding:3px 10px;
  border-radius:999px; margin-top:6px;
}
.viagem-vinculo-empresa{background:rgba(0,60,88,.08); color:var(--azul);}
.viagem-vinculo-particular{background:rgba(0,0,0,.06); color:var(--cinza-escuro);}

.vinculo-linha{display:flex; align-items:center; justify-content:space-between; gap:10px; padding:10px 0; border-top:1px solid var(--cinza);}
.vinculo-linha:first-child{border-top:none;}
.vincular-form{display:flex; gap:8px; margin-top:16px; flex-wrap:wrap;}
.vincular-form select{width:auto; min-width:220px;}

/* ---- HOME (escolha de acesso) ---- */
.home-card{max-width:420px;}
.home-opcoes{display:flex; flex-direction:column; gap:12px; margin:24px 0 8px;}
.home-opcao{
  display:block; padding:18px 20px; border-radius:12px; border:1.5px solid #d7dee1;
  text-decoration:none; transition:.2s;
}
.home-opcao:hover{border-color:var(--azul-2); background:rgba(10,91,130,.04);}
.home-opcao-titulo{font-family:'Poppins'; font-weight:700; font-size:15.5px; color:var(--azul);}
.home-opcao-desc{font-size:12.5px; color:var(--cinza-escuro); margin-top:3px;}

.home-admin-link{
  position:fixed; right:16px; bottom:14px; font-size:11px; color:rgba(0,0,0,.22);
  text-decoration:none; letter-spacing:.3px; z-index:5;
}
.home-admin-link:hover{color:rgba(0,0,0,.5);}

/* ---- TABELA DE VIAGENS (filtros + formatação densa) ---- */
.tabela-card{background:#fff; border-radius:var(--radius); box-shadow:0 2px 10px rgba(0,40,60,.06); padding:22px; overflow:hidden;}
.tabela-card .vazio{padding:0;}

.tabela-filtros{display:flex; gap:8px; flex-wrap:wrap; align-items:center;}
.tabela-filtros input[type="text"]{width:240px;}
.tabela-filtros select{width:auto; min-width:170px;}

.filtros-ativos{
  display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-top:14px; padding-top:14px;
  border-top:1px dashed var(--cinza); font-size:12.5px; color:var(--cinza-escuro);
}
.filtro-tag{background:rgba(0,60,88,.08); color:var(--azul); font-weight:700; padding:4px 10px; border-radius:999px; font-size:12px;}
.filtro-limpar{color:var(--cereja); font-weight:700; text-decoration:none; margin-left:auto;}
.filtro-limpar:hover{text-decoration:underline;}

.tabela-scroll{overflow-x:auto; margin-top:18px;}
.tabela-viagens{box-shadow:none;}
.tabela-viagens th{white-space:nowrap;}
.tabela-viagens td{vertical-align:top; font-size:12.5px;}
.tabela-viagens td.prazo-urgente{color:var(--cereja); font-weight:700;}
.tabela-viagens td.prazo-urgente .linha-sub{color:var(--cereja);}

.tabela-lista thead a.th-ordenavel{color:#fff; text-decoration:none; display:inline-flex; align-items:center; gap:2px;}
.tabela-lista thead a.th-ordenavel:hover{text-decoration:underline;}

.passageiro-cel{display:flex; align-items:center; gap:6px;}
.passageiro-cel a:first-child{font-size:13.5px; font-weight:700;}
.filtro-icone{display:flex; color:var(--cinza-escuro); opacity:.5; transition:.15s;}
.filtro-icone:hover{opacity:1; color:var(--azul-2);}
.filtro-icone svg{width:13px; height:13px;}

.empresa-badge-link{text-decoration:none; display:inline-block; margin:0 4px 4px 0; transition:.15s;}
.empresa-badge-link:hover{background:rgba(0,60,88,.16);}

.prazo-linha, .voo-linha{white-space:nowrap; margin-bottom:3px;}
.prazo-linha:last-child, .voo-linha:last-child{margin-bottom:0;}
.prazo-linha b, .voo-linha b{color:var(--cinza-escuro); font-weight:700; font-size:10.5px; text-transform:uppercase; letter-spacing:.3px; margin-right:4px;}
.prazo-linha.prazo-urgente{color:var(--cereja); font-weight:700;}
.prazo-linha.prazo-urgente b{color:var(--cereja);}

.status-voo-caixa{
  margin-top:10px; padding:12px 14px; border-radius:10px; font-size:12.5px; line-height:1.7;
  background:#f4f6f6; color:var(--texto);
}
.status-voo-caixa b{color:var(--azul); margin-right:4px;}
.status-voo-caixa.status-voo-erro{background:rgba(231,52,82,.08); color:var(--cereja);}
.status-voo-caixa.status-voo-ok{background:rgba(0,60,88,.06);}

/* ---- NOTIFICAÇÕES ---- */
.badge-notificacao{
  display:inline-flex; align-items:center; justify-content:center; min-width:16px; height:16px;
  padding:0 4px; border-radius:999px; background:var(--cereja); color:#fff;
  font-size:10px; font-weight:800; line-height:16px; margin-left:3px; vertical-align:2px;
}
.filtro-ativo-btn{background:var(--azul); color:#fff; border-color:var(--azul);}
.notificacao-linha{
  display:flex; justify-content:space-between; align-items:center; gap:14px;
  padding:16px 20px; border-bottom:1px solid var(--cinza);
}
.notificacao-linha:last-child{border-bottom:none;}
.notificacao-linha.notificacao-nao-lida{background:rgba(231,52,82,.04);}
.notificacao-msg{font-size:13.5px; font-weight:600; color:var(--texto);}

/* ---- LINK DE ACESSO RÁPIDO ---- */
.link-acesso-linha{display:flex; gap:8px; margin-bottom:14px;}
.link-acesso-linha input{font-family:monospace; font-size:12.5px; background:#f4f6f6; color:var(--cinza-escuro);}
.link-acesso-acoes{display:flex; gap:8px;}

.viagem-datas span.prazo-urgente{color:var(--cereja); font-weight:700;}
.viagem-datas span.prazo-urgente b{color:var(--cereja);}

/* ---- DASHBOARD ---- */
.dash-kpis{display:grid; grid-template-columns:repeat(auto-fit, minmax(150px, 1fr)); gap:14px; margin-bottom:32px;}
.dash-kpi{
  background:#fff; border-radius:var(--radius); padding:20px; text-decoration:none;
  box-shadow:0 2px 10px rgba(0,40,60,.06); border:1.5px solid transparent; transition:.15s;
  display:flex; flex-direction:column; gap:4px;
}
.dash-kpi:hover{border-color:var(--azul-2);}
.dash-kpi-valor{font-family:'Poppins'; font-weight:800; font-size:30px; color:var(--azul);}
.dash-kpi-rotulo{font-size:12.5px; color:var(--cinza-escuro); font-weight:600;}
.dash-kpi-destaque .dash-kpi-valor{color:var(--cereja);}
.dash-kpi-alerta{background:rgba(231,52,82,.06);}
.dash-kpi-alerta .dash-kpi-valor{color:var(--cereja);}

@media (max-width:760px){
  #tela-login{grid-template-columns:1fr;}
  .login-brand{padding:36px;}
  .login-brand .claim{font-size:28px; margin-top:24px;}
  .painel-inner{padding:24px 16px 50px;}
  .form-linha{flex-direction:column; gap:0;}
  .tabela-lista{display:block; overflow-x:auto;}
  .logos-grid{grid-template-columns:1fr;}
}

/* ====================== MÓDULO DE ORÇAMENTOS ====================== */
:root{ --orc-primaria: var(--cereja); --orc-secundaria: var(--azul); }

.orc-status-acoes{display:flex; gap:8px; flex-wrap:wrap; align-items:flex-start;}
.orc-status-acoes form{display:inline;}

.quick-form.form-card{max-width:100%;}

.badges-types{display:flex; gap:10px; font-size:13px; margin:0 0 16px;}
.type-pill{padding:4px 10px; border-radius:14px; background:var(--cinza); color:var(--cinza-escuro);}
.type-pill.active{background:var(--orc-secundaria); color:#fff;}

.dropzone{border:2px dashed #bbb; border-radius:var(--radius); padding:20px; text-align:center; color:#888; margin-bottom:20px; cursor:text;}
.dropzone:focus{border-color:var(--orc-primaria); color:#333; outline:none;}

.ia-paste-zone{border:1.5px dashed #bbb; border-radius:8px; padding:8px 10px; text-align:center; color:#888; font-size:12.5px; cursor:text; margin-top:6px;}
.ia-paste-zone:focus{border-color:var(--azul-2); color:#333; outline:none;}
.ia-paste-zone.ia-paste-ok{border-color:var(--azul-2); border-style:solid; color:var(--azul); background:rgba(10,91,130,.06);}

#orcamento-canvas{background:#fff; padding:28px; border-radius:var(--radius); box-shadow:0 2px 10px rgba(0,40,60,.06); margin-bottom:20px;}
.orc-header{display:table; width:100%; border-bottom:1px solid var(--cinza); padding-bottom:14px; margin-bottom:18px;}
.orc-header > *{display:table-cell; vertical-align:top;}
.orc-header .logo-box{width:auto; max-width:320px;}
.orc-header .logo-box img{max-height:110px; max-width:100%; height:auto;}
.orc-header .titulo{text-align:center; color:var(--orc-primaria); font-family:'Poppins'; font-weight:800; font-size:20px; padding-top:10px; outline:none;}
.orc-header .agency-info{text-align:right; font-size:12px; line-height:1.6; color:var(--texto); width:220px;}
.orc-header .agency-info .nome{color:var(--orc-primaria); font-weight:700; font-size:14px;}

/* ====================== VOUCHER ======================
   Mesma cautela de sempre com html2canvas: nada de margem negativa
   (sangria até a borda) nem overflow:hidden pra clipar cantos — só
   caixas coloridas "internas", com border-radius próprio, dentro do
   padding que já existe no card/canvas. display:table pros layouts
   lado-a-lado (flex/gap não renderiza de forma confiável na exportação). */
#voucher-canvas{background:#fff; padding:28px; border-radius:var(--radius); box-shadow:0 2px 10px rgba(0,40,60,.06); margin-bottom:20px;}

.vch-header{display:table; width:100%; background:var(--orc-primaria); color:#fff; border-radius:12px; padding:16px 22px; margin-bottom:20px; box-sizing:border-box;}
.vch-header-marca{display:table-cell; vertical-align:middle;}
.vch-header-marca .logo-box{display:inline-block; vertical-align:middle; margin-right:12px;}
.vch-header-marca .logo-box img{max-height:44px; max-width:130px; width:auto; height:auto; display:block;}
.vch-header-texto{display:inline-block; vertical-align:middle;}
.vch-header-nome{font-family:'Poppins'; font-weight:800; font-size:15px; line-height:1.35; outline:none;}
.vch-header-tagline{font-size:10.5px; opacity:.75; text-transform:uppercase; letter-spacing:.5px;}
.vch-header-ajuda{display:table-cell; vertical-align:middle; text-align:right; width:210px; font-size:12px;}
.vch-header-ajuda .rotulo{opacity:.7; font-size:10px; text-transform:uppercase; letter-spacing:.5px;}
.vch-header-ajuda .valor{font-weight:700; font-size:13.5px; margin-top:2px; outline:none;}

.vch-card-topo{display:table; width:100%; background:var(--orc-primaria); color:#fff; border-radius:8px; padding:8px 14px; margin-bottom:14px; box-sizing:border-box;}
.vch-card-topo-tipo{display:table-cell; vertical-align:middle; font-size:11.5px; font-weight:800; text-transform:uppercase; letter-spacing:.4px;}
.vch-card-topo-loc{display:table-cell; vertical-align:middle; text-align:right; white-space:nowrap;}
.vch-localizador-pill{background:rgba(255,255,255,.18); border-radius:16px; padding:3px 12px; font-size:11px; font-weight:700; display:inline-block;}
.vch-localizador-pill .campo-editavel{outline:none;}
.vch-localizador-pill .campo-editavel:empty:before{color:rgba(255,255,255,.65);}

.vch-estrelas{color:#f5b301; font-size:12px; letter-spacing:1px; margin-left:8px;}

.vch-passageiros-lista{white-space:pre-line; font-size:13px; line-height:2; color:var(--texto); outline:none;}

/* Tabela formal de passageiros (modo "Padrão Operadora") — só outra
   forma de exibir o mesmo campo "lista", nunca editável célula a célula;
   escondida por padrão, só aparece com #voucher-canvas.modo-operadora. */
.vch-passageiros-tabela{display:none;}
.vch-tabela{width:100%; border-collapse:collapse; font-size:12px;}
.vch-tabela th{background:var(--orc-secundaria); color:#fff; text-align:left; padding:8px 10px; font-size:10.5px; text-transform:uppercase; letter-spacing:.3px;}
.vch-tabela td{padding:7px 10px; border-bottom:1px solid var(--cinza); color:var(--texto);}
.vch-tabela tbody tr:nth-child(even){background:#f7f8f9;}

/* Versão resumida — some com políticas/informações gerais/observações
   longas. Padrão Operadora — troca a lista de passageiros pela tabela
   formal e deixa as faixas coloridas dos cards que não são de voo mais
   claras (pill), igual ao padrão que as operadoras usam nos vouchers
   delas — o card de voo fica como já está, só a apresentação do voo em
   tabela crua é que não rende bem visualmente. */
#voucher-canvas.modo-resumo .bloco-tipo-texto,
#voucher-canvas.modo-resumo .hotel-card-desc{display:none;}

#voucher-canvas.modo-operadora .vch-passageiros-lista{display:none;}
#voucher-canvas.modo-operadora .vch-passageiros-tabela{display:block;}
#voucher-canvas.modo-operadora .hotel-card .vch-card-topo,
#voucher-canvas.modo-operadora .transfer-card .vch-card-topo,
#voucher-canvas.modo-operadora .passeio-card .vch-card-topo{
  background:none; padding:0 0 12px; margin-bottom:10px;
}
#voucher-canvas.modo-operadora .hotel-card .vch-card-topo-tipo,
#voucher-canvas.modo-operadora .transfer-card .vch-card-topo-tipo,
#voucher-canvas.modo-operadora .passeio-card .vch-card-topo-tipo{
  background:var(--orc-secundaria); color:#fff; display:inline-block; border-radius:20px; padding:6px 16px;
}
#voucher-canvas.modo-operadora .hotel-card .vch-localizador-pill,
#voucher-canvas.modo-operadora .transfer-card .vch-localizador-pill,
#voucher-canvas.modo-operadora .passeio-card .vch-localizador-pill{
  background:#fff; border:1.5px solid var(--orc-secundaria); color:var(--orc-secundaria);
}
#voucher-canvas.modo-operadora .hotel-card .vch-localizador-pill .campo-editavel:empty:before{color:rgba(0,0,0,.35);}

.vch-mensagem{background:var(--orc-primaria); color:#fff; border-radius:10px; padding:16px 18px; margin-top:18px;}
.vch-mensagem .rotulo{font-size:10.5px; text-transform:uppercase; letter-spacing:.5px; opacity:.7; margin-bottom:6px; font-weight:700;}
.vch-mensagem .texto{font-size:13.5px; line-height:1.6; outline:none;}
.vch-mensagem .texto.campo-editavel:empty:before{color:rgba(255,255,255,.55);}

.block{position:relative; margin-bottom:18px; border:1px dashed transparent; padding:6px; border-radius:8px;}
.block:hover{border-color:var(--cinza);}
.block img{max-width:100%; display:block; border-radius:6px;}
.block .badge{position:absolute; top:2px; left:2px; background:var(--orc-secundaria); color:#fff; font-size:11px; padding:2px 8px; border-radius:10px;}
.block-controls{position:absolute; top:2px; right:2px; display:flex; gap:4px;}
.block-controls button{background:#fff; border:1px solid var(--cinza); border-radius:4px; cursor:pointer; font-size:12px; padding:2px 6px;}
.text-block{min-height:40px; border:1px solid var(--cinza); padding:10px; border-radius:8px; outline:none; font-size:14px; text-align:justify;}

.footer-box{border-top:2px solid var(--cinza); margin-top:18px; padding-top:16px;}
.valores-aviso{color:var(--orc-primaria); font-size:12px; font-weight:700; margin:0 0 12px;}
.valores-titulo{display:block; font-weight:800; color:var(--orc-secundaria); font-size:13px; text-transform:uppercase; letter-spacing:.3px; margin:0 0 10px;}
/* Layout do rodapé sem flexbox — html2canvas não renderiza flex/gap de
   forma confiável (bug antigo e bem documentado da lib), então aqui e em
   todo o canvas exportável usamos inline-block/table, que a lib suporta
   de verdade. Clearfix é feito com ::after (não overflow:hidden) porque
   overflow:hidden em cima de altura mal calculada pelo html2canvas corta
   conteúdo real — foi a causa de blocos inteiros sumirem na exportação. */
.footer-row:after{content:""; display:table; clear:both;}
.footer-col{display:inline-block; vertical-align:top; width:60%; box-sizing:border-box;}
.valores-col{
  display:inline-block; vertical-align:top; width:36%; box-sizing:border-box;
  background:#f4f7f8; border-left:4px solid var(--orc-primaria); border-radius:8px;
  padding:14px 18px;
}
.valor-linha{display:inline-block; vertical-align:top; margin:0 24px 10px 0; font-size:13px; color:var(--texto); white-space:nowrap;}
.valor-linha span{display:block;}
.valor-linha > span:first-child{font-size:11px; color:var(--cinza-escuro); text-transform:uppercase; font-weight:700;}
.valor-linha .campo-valor{outline:none; border-radius:4px; padding:0 2px; min-width:70px; display:inline-block;}
.valor-linha .campo-valor:hover{background:rgba(0,116,168,.08);}
.valor-linha .campo-valor:focus{background:rgba(0,116,168,.14);}
/* Total é o único valor exibido agora — uma linha só, em destaque */
.valor-linha-total{white-space:nowrap; margin:0;}
.valor-linha-total span{display:inline;}
.valor-linha-total > span:first-child{font-size:15px; text-transform:none; color:var(--texto); font-weight:700; margin-right:8px;}
.valor-linha-total .campo-valor, .valor-linha-total .valor{font-weight:800; font-size:28px; color:var(--orc-primaria);}
.cond-editable{border:1px solid var(--cinza); border-radius:8px; padding:8px; min-height:50px; font-size:13px; outline:none; margin-top:6px;}

/* ---- Toolbox de blocos ---- */
.orc-toolbox{display:flex; gap:18px; flex-wrap:wrap; margin-bottom:16px; align-items:flex-end;}
.orc-toolbox-grupo{display:flex; gap:6px; align-items:center; flex-wrap:wrap;}
.orc-toolbox-rotulo{font-size:11.5px; font-weight:700; text-transform:uppercase; color:var(--cinza-escuro); margin-right:2px;}

/* ---- Campo editável genérico (placeholder quando vazio) ---- */
.campo-editavel{outline:none; border-radius:4px; padding:0 2px;}
.campo-editavel:hover{background:rgba(0,116,168,.06);}
.campo-editavel:focus{background:rgba(0,116,168,.1);}
.campo-editavel:empty:before{content:attr(data-placeholder); color:#aab3b8;}

/* ---- Card de voo ---- */
.bloco-info{padding-top:10px;}
.voo-card{border:1.5px solid var(--cinza); border-radius:10px; padding:16px; background:#fff;}
.voo-card-topo{display:table; width:100%; padding-bottom:10px; margin-bottom:12px; border-bottom:1px solid var(--cinza); font-size:13px;}
.voo-card-topo > *{display:table-cell; vertical-align:middle;}
.voo-trecho{font-weight:800; color:var(--orc-secundaria); font-size:13.5px; border:none; background:transparent; cursor:pointer; appearance:none; -webkit-appearance:none; padding-right:16px; width:1%; white-space:nowrap;}
.voo-pax{text-align:right; color:var(--cinza-escuro); font-size:12.5px; white-space:nowrap;}
.voo-card-corpo{display:table; width:100%; table-layout:fixed;}
.voo-ponto{display:table-cell; vertical-align:middle; width:76px;}
.voo-hora{display:block; font-size:20px; font-weight:800; color:var(--orc-secundaria);}
.voo-dia-seguinte{font-size:11px; color:var(--orc-primaria); vertical-align:super; font-weight:700;}
.voo-aero{display:block; font-size:12px; color:var(--cinza-escuro); font-weight:700;}
.voo-aero-nome{display:block; font-size:9.5px; color:var(--cinza-escuro); font-weight:400; line-height:1.25; margin-top:1px;}
.voo-meio{display:table-cell; vertical-align:middle; text-align:center; padding:0 14px;}
.voo-paradas{display:block; font-size:11.5px; color:var(--cinza-escuro);}
.voo-linha{display:block; width:100%; height:2px; background:var(--cinza); border-radius:2px; margin:4px 0;}
.voo-duracao{display:block; font-size:11.5px; font-weight:700; color:var(--texto);}
.voo-cia{display:table-cell; vertical-align:middle; text-align:right; width:120px; font-size:12.5px;}
.voo-cia > *{display:block;}
.voo-cia-logo{max-height:22px; max-width:90px; object-fit:contain; margin:0 0 4px auto;}
.voo-classe{color:var(--cinza-escuro); font-size:11.5px;}

/* Voos consecutivos (ida logo seguida de volta) ficam visualmente agrupados */
.block.bloco-tipo-aereo + .block.bloco-tipo-aereo{margin-top:-10px;}

/* ---- Card de hotel ---- */
.hotel-card{border:1.5px solid var(--cinza); border-radius:10px; padding:16px; background:#fff;}
.hotel-card-topo{font-weight:800; color:var(--orc-secundaria); font-size:15px; margin-bottom:10px;}
.hotel-card-linha{font-size:12.5px; color:var(--texto); margin-bottom:6px;}
.hotel-card-linha > span{display:inline-block; margin-right:20px;}
.hotel-card-desc{font-size:12.5px; color:var(--cinza-escuro); margin-top:8px; line-height:1.5;}

/* ---- Galeria de fotos (hotel/passeio) — fotos anexadas ficam lado a lado.
   Float, não inline-block (mais robusto pra JS mexer nos blocos). O ponto
   que não é óbvio: width:calc(50% - 7px) + margin-right:14px NOS DOIS itens
   de um par estoura a linha em 14px (50%+7px por item × 2 = 100%+14px), o
   que empurra o segundo pro final da linha seguinte — tanto na tela quanto
   no PDF/imagem exportados. .foto-par-direita (aplicada via JS ao 2º item
   de cada par, em atualizarPlaceholdersFotos()) zera essa margem sobrando. */
#blocks-container:after{content:""; display:table; clear:both;}
#blocks-container > .block{display:block; width:100%; clear:both;}
#blocks-container > .block.bloco-tipo-hotel.bloco-image,
#blocks-container > .block.bloco-tipo-passeio.bloco-image{display:block; float:left; clear:none; width:calc(50% - 7px); margin-right:14px; box-sizing:border-box;}
#blocks-container > .block.bloco-tipo-hotel.bloco-image.foto-par-direita,
#blocks-container > .block.bloco-tipo-passeio.bloco-image.foto-par-direita{margin-right:0;}
#blocks-container > .block.bloco-tipo-hotel.bloco-image img,
#blocks-container > .block.bloco-tipo-passeio.bloco-image img{height:180px; width:100%; object-fit:cover; display:block;}
#blocks-container > .placeholder-foto{
  display:flex; float:left; clear:none; width:calc(50% - 7px); margin-right:14px;
  height:180px; box-sizing:border-box; border:2px dashed var(--cinza); border-radius:8px;
  align-items:center; justify-content:center; flex-direction:column; gap:6px;
  color:var(--cinza-escuro); cursor:pointer; font-size:13px; font-weight:600;
  background:rgba(0,0,0,.02); transition:.15s;
}
#blocks-container > .placeholder-foto.foto-par-direita{margin-right:0;}
#blocks-container > .placeholder-foto:hover{border-color:var(--orc-primaria); color:var(--orc-primaria); background:rgba(0,0,0,.04);}
.placeholder-foto-icone{font-size:26px; line-height:1; font-weight:400;}

/* ---- Galeria do hotel com 5 fotos: 1 grande + grade 2x2 pequena ao lado
   (estilo do site do Infotravel). Só percentuais puros aqui (sem calc()) —
   já validado isolado que essa combinação renderiza igual no html2canvas. */
#blocks-container > .block.bloco-tipo-hotel.bloco-image.foto-principal{
  width:58%; margin-right:1%; height:260px;
}
#blocks-container > .block.bloco-tipo-hotel.bloco-image.foto-principal img{height:260px;}
#blocks-container > .block.bloco-tipo-hotel.bloco-image.foto-pequena{
  width:20%; margin-right:1%; margin-bottom:3px; height:128.5px;
}
#blocks-container > .block.bloco-tipo-hotel.bloco-image.foto-pequena img{height:128.5px;}
#blocks-container > .block.bloco-tipo-hotel.bloco-image.foto-pequena.foto-pequena-direita{margin-right:0;}

/* ---- Card de transfer ---- */
.transfer-card{border:1.5px solid var(--cinza); border-radius:10px; padding:16px; background:#fff;}
.transfer-card-topo{font-weight:800; color:var(--orc-secundaria); font-size:15px; margin-bottom:10px;}
.transfer-linha{font-size:13px; margin-bottom:6px;}
.transfer-linha b{display:inline-block; min-width:40px; color:var(--cinza-escuro); font-size:11.5px; text-transform:uppercase; margin-right:8px;}

/* ---- Card de passeio/ingresso ---- */
.passeio-card{border:1.5px solid var(--cinza); border-radius:10px; padding:16px; background:#fff;}
.passeio-card-topo{font-weight:800; color:var(--orc-secundaria); font-size:15px; margin-bottom:10px;}
.transfer-linha b{min-width:40px; color:var(--cinza-escuro); font-size:11.5px; text-transform:uppercase;}

#desc-output{width:100%; min-height:180px; font-family:monospace; font-size:13px; padding:10px; border:1px solid var(--cinza); border-radius:8px;}
.modal-bg{display:none; position:fixed; inset:0; background:rgba(0,0,0,.5); align-items:center; justify-content:center; z-index:999;}
.modal-bg.active{display:flex;}
.modal{background:#fff; border-radius:var(--radius); padding:24px; max-width:600px; width:90%; max-height:90vh; overflow:auto;}

/* Overlay de carregamento — some sozinho quando a página redireciona
   depois da resposta da IA; enquanto isso, avisa que está processando
   (a chamada pode levar de 10s a mais de 1min dependendo do arquivo). */
.ia-loading-overlay{display:none; position:fixed; inset:0; background:rgba(0,0,0,.55); align-items:center; justify-content:center; z-index:1000; flex-direction:column; gap:16px; text-align:center; padding:24px;}
.ia-loading-overlay.active{display:flex;}
.ia-spinner{width:48px; height:48px; border:4px solid rgba(255,255,255,.3); border-top-color:#fff; border-radius:50%; animation:ia-girar .8s linear infinite;}
@keyframes ia-girar{to{transform:rotate(360deg);}}
.ia-loading-overlay p{color:#fff; font-size:15px; font-weight:600; max-width:360px;}
.ia-loading-overlay span{color:rgba(255,255,255,.75); font-size:13px;}

/* Grade de seleção de fotos (dentro do modal, nunca é exportada — livre
   pra usar grid mesmo, sem as restrições do html2canvas). */
.galeria-grid{display:grid; grid-template-columns:repeat(5, 1fr); gap:8px; margin-top:12px; max-height:420px; overflow-y:auto;}
.galeria-item{position:relative; cursor:pointer; border-radius:8px; overflow:hidden; border:3px solid transparent; box-sizing:border-box;}
.galeria-item img{width:100%; height:90px; object-fit:cover; display:block;}
.galeria-item.selecionada{border-color:var(--orc-primaria);}
.galeria-item .galeria-numero{
  position:absolute; top:4px; left:4px; background:var(--orc-primaria); color:#fff;
  font-size:11px; font-weight:700; width:20px; height:20px; border-radius:50%;
  display:flex; align-items:center; justify-content:center;
}
@media (max-width:700px){.galeria-grid{grid-template-columns:repeat(3, 1fr);}}

@media print{
  .no-export{display:none !important;}
}

.orc-modo-cliente{display:flex; flex-direction:column; gap:8px; font-size:13.5px; font-weight:400; margin-top:4px;}
.orc-modo-cliente label{display:flex; align-items:center; gap:8px; cursor:pointer;}
