nossas travessias

24 horas por dia, sete dias por semana

Cananéia ~Continente

Santos ~Vicente de Carvalho

Cananéia ~Ariri

Paraitinga/Capim D’Angola ~Paraitinga/Ribeirão Branco

Varginha ~Comércio Varginha

Natividade da Serra ~Pouso Alto – Bairro Alto

João Basso ~Riacho Grande

em breve

Taquacetuba ~Bororé

em breve

Bororé ~Grajaú

em breve

nossos serviços

para uso diário e agendado

Veículos

O serviço Hora Marcada permite o embarque nas balsas em horário agendado, evitando atrasos na sua viagem.

QUERO AGENDAR E COMPRAR

Pedestres

Bilhete Inteligente: mais agilidade, facilidade e segurança para os pedestres nas travessias entre Santos e Vicente de Carvalho

QUERO CONHECER AS OPÇÕES

nosso blog

novidades e dicas para sua melhor travessia

nosso trabalho em números

essencial como a sua segurança

11 milhões de passageiros

ao ano
10 milhões de veículos

ao ano

45 novas balsas

ao longo dos próximos 7 anos

nossas obras agora

você vai acompanhar em breve nossas obras aqui

Privacy Preference Center

(function () { "use strict"; function iniciarAgendamento(form) { const carga = form.querySelector("#tipocarga"); const trajeto = form.querySelector("#origemdestino"); const data = form.querySelector("#data-agendamento"); const horario = form.querySelector("#horario-agendamento"); if (!carga || !trajeto || !data || !horario) return; if (form.dataset.agendamentoIniciado === "1") return; form.dataset.agendamentoIniciado = "1"; const trajetos = [ "São Sebastião / Ilhabela", "Ilhabela/São Sebastião" ]; const todosHorarios = [ "05:30", "06:00", "10:00", "13:30", "16:00", "22:30" ]; function preencherSelect(select, valores, placeholder) { const anterior = select.value; select.replaceChildren(); if (placeholder) { select.add(new Option(placeholder, "")); } valores.forEach(valor => { select.add(new Option(valor, valor)); }); if (valores.includes(anterior)) { select.value = anterior; } else { select.value = ""; } } function atualizar() { const residuos = carga.value === "Resíduos/Lixo"; const trajetosPermitidos = residuos ? [trajetos[1]] : trajetos; preencherSelect( trajeto, trajetosPermitidos, "Selecione o trajeto" ); let permitidos = []; if (data.value && trajeto.value) { const partes = data.value.split("-").map(Number); if (partes.length === 3) { const dia = new Date( partes[0], partes[1] - 1, partes[2] ); const domingo = dia.getDay() === 0; if (residuos && trajeto.value === trajetos[1]) { permitidos = ["06:00", "22:30"]; } else if (!residuos && trajeto.value === trajetos[1]) { permitidos = domingo ? ["10:00"] : ["10:00", "16:00"]; } else if (!residuos && trajeto.value === trajetos[0]) { permitidos = domingo ? ["05:30"] : ["05:30", "13:30"]; } } } preencherSelect( horario, permitidos.filter(h => todosHorarios.includes(h)), "Selecione um horário" ); } carga.addEventListener("change", atualizar); trajeto.addEventListener("change", atualizar); data.addEventListener("change", atualizar); data.addEventListener("input", atualizar); // Evita selecionar datas anteriores a hoje. function atualizarDataMinima() { const partes = new Intl.DateTimeFormat("en-CA", { timeZone: "America/Sao_Paulo", year: "numeric", month: "2-digit", day: "2-digit" }).formatToParts(new Date()); const valores = Object.fromEntries( partes.map(p => [p.type, p.value]) ); data.min = [ valores.year, valores.month, valores.day ].join("-"); } atualizarDataMinima(); atualizar(); } function iniciarTodos() { document.querySelectorAll(".wpcf7 form").forEach( iniciarAgendamento ); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", iniciarTodos); } else { iniciarTodos(); } })();