import { useState, useEffect, useCallback, useRef } from 'react'; import Grainient from '../Grainient'; import IntroSlide from '../IntroSlide'; const heroButtonStyles = ` .hero-btn { cursor: pointer; transition: all 0.15s ease; display: inline-flex; align-items: center; gap: 0; overflow: hidden; } .hero-btn::after { content: ''; display: inline-block; width: 0; opacity: 0; transition: width 0.2s ease, opacity 0.2s ease, margin 0.2s ease; height: 14px; margin-left: 0; background-color: currentColor; -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.5 8h9M8.5 4l4 4-4 4'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.5 8h9M8.5 4l4 4-4 4'/%3E%3C/svg%3E"); -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; flex-shrink: 0; } .hero-btn:hover::after { width: 14px; opacity: 1; margin-left: 6px; } .hero-btn:focus-visible { outline: 2px solid #FFBC42; outline-offset: 2px; } .hero-btn-solid { background-color: #034955; color: #FFFFFF; } .hero-btn-solid:hover { background-color: #02383F; box-shadow: 0 4px 12px rgba(3,73,85,0.3); } .hero-btn-solid:active { background-color: #032E36; box-shadow: none; } .hero-btn-outline-light { border: 1px solid #034955; color: #034955; background-color: transparent; } .hero-btn-outline-light:hover { background-color: rgba(3,73,85,0.06); border-color: #032E36; color: #032E36; } .hero-btn-outline-light:active { background-color: rgba(3,73,85,0.12); } .hero-btn-yellow { border-radius: 4px; opacity: 0.8; background: #FFBC42; color: #032E36; box-shadow: 0 36px 80px 0 rgba(255,188,66,0.52), 0 15.04px 33.422px 0 rgba(255,188,66,0.37), 0 8.041px 17.869px 0 rgba(255,188,66,0.31), 0 4.508px 10.017px 0 rgba(255,188,66,0.26), 0 2.394px 5.32px 0 rgba(255,188,66,0.21), 0 0.996px 2.214px 0 rgba(255,188,66,0.15); } .hero-btn-yellow:hover { opacity: 1; box-shadow: 0 40px 90px 0 rgba(255,188,66,0.58), 0 18px 40px 0 rgba(255,188,66,0.42), 0 10px 22px 0 rgba(255,188,66,0.35), 0 6px 12px 0 rgba(255,188,66,0.28), 0 3px 6px 0 rgba(255,188,66,0.22), 0 1px 3px 0 rgba(255,188,66,0.16); } .hero-btn-yellow:active { opacity: 1; background: #E8A830; box-shadow: 0 20px 50px 0 rgba(255,188,66,0.4), 0 8px 20px 0 rgba(255,188,66,0.28), 0 4px 10px 0 rgba(255,188,66,0.2); } .hero-btn-ghost { border: 1px solid rgba(255,255,255,0.3); color: #FFFFFF; background-color: transparent; } .hero-btn-ghost:hover { background-color: rgba(255,255,255,0.1); border-color: rgba(255,255,255,0.5); } .hero-btn-ghost:active { background-color: rgba(255,255,255,0.15); border-color: rgba(255,255,255,0.5); } .hero-btn-ghost-blur { border: 1px solid rgba(255,255,255,0.3); color: #FFFFFF; background-color: rgba(255,255,255,0.06); } .hero-btn-ghost-blur:hover { background-color: rgba(255,255,255,0.14); border-color: rgba(255,255,255,0.5); } .hero-btn-ghost-blur:active { background-color: rgba(255,255,255,0.2); border-color: rgba(255,255,255,0.5); } .hero-slide { position: absolute; inset: 0; opacity: 0; transition: opacity 0.6s ease; } .hero-slide.active { opacity: 1; } .hero-slide img { width: 100%; height: 100%; object-fit: cover; } .hero-vnav { position: absolute; right: 24px; top: 50%; transform: translateY(-50%); display: flex; flex-direction: column; align-items: center; gap: 0; z-index: 10; } .hero-vnav-item { display: flex; align-items: center; gap: 10px; cursor: pointer; background: none; border: none; padding: 8px 0; position: relative; } .hero-vnav-dot { width: 12px; height: 12px; border-radius: 50%; border: 2px solid rgba(255,255,255,0.5); background: transparent; transition: all 0.25s ease; flex-shrink: 0; position: relative; z-index: 2; } .hero-vnav-item:hover .hero-vnav-dot { border-color: #FFFFFF; } .hero-vnav-item.active .hero-vnav-dot { border-color: #FFFFFF; background: #FFFFFF; } .hero-vnav-label { position: absolute; right: 22px; white-space: nowrap; font-size: 11px; font-weight: 700; letter-spacing: 0.05em; color: rgba(255,255,255,0.45); transition: all 0.2s ease; } .hero-vnav-item:hover .hero-vnav-label, .hero-vnav-item.active .hero-vnav-label { color: #FFFFFF; } .hero-vnav-line { width: 2px; flex: 1; background: rgba(255,255,255,0.2); min-height: 20px; } `; function Section({ title, children }: { title: string; children: React.ReactNode }) { return (
{slide.badge}
{slide.sub}
{slide.body}
Next Generation
AI-powered · Connected · Intelligent
A unified platform where every booking, every itinerary, and every guest interaction flows through one intelligent system.
Platform
Kaptio Travel Platform
End-to-end travel technology for tour operators, cruise lines, and DMCs. From inventory to checkout, powered by one connected platform.
Platform
Kaptio Travel Platform
End-to-end travel technology for tour operators, cruise lines, and DMCs. From inventory to checkout, powered by one connected platform.
Building blocks for Kaptio applications, styled with Flux design tokens.
New Release
Multi-day travel, reimagined
Purpose-built for cruise and rail operators. Cabin inventory, deck plans, and operational workflows for premium multi-day travel experiences.
Full-screen intro slide for presentations and screen sharing. Open full screen →