:root { --tte-cream: #f5e6c8; --tte-brass: #c4943d; --tte-amber: #d4a843; --tte-copper: #b87333; --tte-cyan: #8ed8d1; --tte-burgundy: #6b2d3e; --tte-dark: #1a0f08; --tte-darker: #080403; --tte-heading: Georgia, "Times New Roman", serif; --tte-body: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; --tte-mono: ui-monospace, SFMono-Regular, Consolas, monospace; } .tm-intro { position: fixed; inset: 0; z-index: 1000; overflow: hidden; background: #080403; color: var(--tte-cream); font-family: var(--tte-body); letter-spacing: 0; isolation: isolate; } .tm-intro::before, .tm-intro::after { content: ""; position: absolute; inset: 0; pointer-events: none; } .tm-intro::before { z-index: 2; background: radial-gradient(ellipse at 50% 52%, transparent 0 42%, rgba(4, 2, 1, 0.72) 78%, rgba(4, 2, 1, 0.98) 100%), linear-gradient(180deg, rgba(0, 0, 0, 0.62), transparent 20%, transparent 68%, rgba(0, 0, 0, 0.78)); } .tm-intro::after { z-index: 4; opacity: 0.17; background-image: linear-gradient(0deg, rgba(255, 255, 255, 0.05) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.035) 1px, transparent 1px); background-size: 4px 4px; mix-blend-mode: overlay; } .tm-intro__sky { position: absolute; inset: -10%; background: radial-gradient(circle at 50% 42%, rgba(255, 226, 146, 0.36), transparent 18%), radial-gradient(circle at 22% 30%, rgba(184, 115, 51, 0.18), transparent 18%), radial-gradient(circle at 78% 34%, rgba(142, 216, 209, 0.16), transparent 17%); filter: blur(12px); animation: tm-intro-sky 11.8s ease-in-out forwards; } .tm-intro__rails { position: absolute; left: 50%; bottom: -4%; z-index: 1; width: min(900px, 120vw); height: 48vh; transform: translateX(-50%); background: linear-gradient(72deg, transparent 0 43%, rgba(196, 148, 61, 0.58) 43.4% 44%, transparent 44.4%), linear-gradient(108deg, transparent 0 56%, rgba(196, 148, 61, 0.58) 56.4% 57%, transparent 57.4%), repeating-linear-gradient(0deg, transparent 0 36px, rgba(245, 230, 200, 0.16) 37px 40px, transparent 41px 74px); clip-path: polygon(32% 100%, 68% 100%, 54% 0, 46% 0); opacity: 0.45; transform-origin: 50% 100%; animation: tm-intro-rails 11.8s cubic-bezier(0.16, 0.72, 0.12, 1) forwards; } .tm-intro__scene { position: absolute; inset: 0; z-index: 3; display: grid; place-items: center; perspective: 1200px; } .tm-intro__ticket, .tm-intro__box, .tm-intro__energy, .tm-intro__sparks, .tm-intro__train { position: absolute; max-width: min(78vw, 860px); max-height: 74vh; object-fit: contain; pointer-events: none; user-select: none; } .tm-intro__ticket { width: min(520px, 68vw); filter: drop-shadow(0 0 34px rgba(212, 168, 67, 0.5)); transform-origin: 50% 50%; animation: tm-ticket 11.8s cubic-bezier(0.19, 0.8, 0.2, 1) forwards; } .tm-intro__box { width: min(470px, 60vw); opacity: 0; transform: translate3d(0, 10vh, -80px) scale(0.75); filter: drop-shadow(0 30px 48px rgba(0, 0, 0, 0.58)); animation: tm-box 11.8s cubic-bezier(0.18, 0.75, 0.18, 1) forwards; } .tm-intro__energy { width: min(980px, 118vw); opacity: 0; mix-blend-mode: screen; filter: saturate(1.25) brightness(1.15); animation: tm-energy 11.8s ease forwards; } .tm-intro__sparks { width: min(1080px, 130vw); opacity: 0; mix-blend-mode: screen; animation: tm-sparks 11.8s ease forwards; } .tm-intro__train { width: min(880px, 96vw); opacity: 0; transform: translate3d(0, 8vh, -220px) scale(0.58); filter: drop-shadow(0 44px 80px rgba(0, 0, 0, 0.68)); animation: tm-train-arrival 11.8s cubic-bezier(0.14, 0.78, 0.18, 1) forwards; } .tm-intro__shockwave { position: absolute; width: 12vmin; aspect-ratio: 1; border: 3px solid rgba(245, 230, 200, 0.8); border-radius: 50%; opacity: 0; box-shadow: 0 0 40px rgba(212, 168, 67, 0.74), inset 0 0 40px rgba(142, 216, 209, 0.4); animation: tm-shockwave 11.8s ease forwards; } .tm-intro__steam { position: absolute; bottom: -8%; z-index: 3; width: 50vw; height: 46vh; opacity: 0; background: radial-gradient(ellipse at 50% 70%, rgba(255, 246, 223, 0.72), transparent 56%), radial-gradient(ellipse at 24% 62%, rgba(245, 230, 200, 0.36), transparent 42%); filter: blur(22px); animation: tm-steam-rise 11.8s ease forwards; } .tm-intro__steam--left { left: -12%; } .tm-intro__steam--right { right: -12%; transform: scaleX(-1); } .tm-intro__copy { position: absolute; left: 50%; top: clamp(30px, 8vh, 82px); z-index: 6; width: min(780px, calc(100vw - 40px)); transform: translateX(-50%); text-align: center; text-shadow: 0 6px 24px rgba(0, 0, 0, 0.72); animation: tm-copy-drift 11.8s ease forwards; } .tm-intro__eyebrow { display: inline-block; margin-bottom: 10px; color: var(--tte-cyan); font: 800 12px/1 var(--tte-mono); letter-spacing: 0.18em; text-transform: uppercase; } .tm-intro__copy h1 { margin: 0; color: var(--tte-cream); font-family: var(--tte-heading); font-size: clamp(38px, 7vw, 92px); line-height: 0.95; font-weight: 700; } .tm-intro__copy p { margin: 12px auto 0; max-width: 520px; color: rgba(245, 230, 200, 0.76); font-size: clamp(15px, 2vw, 20px); line-height: 1.35; } .tm-intro__chapters { position: absolute; left: clamp(18px, 5vw, 72px); bottom: clamp(22px, 7vh, 64px); z-index: 6; display: grid; gap: 8px; color: rgba(245, 230, 200, 0.62); font: 800 10px/1.3 var(--tte-mono); letter-spacing: 0.15em; text-transform: uppercase; } .tm-intro__chapters span { opacity: 0; transform: translateX(-12px); animation: tm-chapter 11.8s ease forwards; } .tm-intro__chapters span:nth-child(2) { animation-delay: 2.9s; } .tm-intro__chapters span:nth-child(3) { animation-delay: 5.6s; } .tm-intro__chapters span:nth-child(4) { animation-delay: 9.2s; } .tm-intro__flash { position: absolute; inset: 0; z-index: 8; opacity: 0; background: #fff4dc; pointer-events: none; animation: tm-final-flash 11.8s ease forwards; } .tm-skip-intro { position: absolute; right: clamp(16px, 4vw, 42px); bottom: clamp(18px, 4vw, 38px); z-index: 9; width: 44px; height: 44px; border: 1px solid rgba(245, 230, 200, 0.34); border-radius: 50%; background: rgba(26, 15, 8, 0.66); color: rgba(245, 230, 200, 0.82); font: 800 9px/1 var(--tte-mono); letter-spacing: 0.08em; text-transform: uppercase; opacity: 0; cursor: pointer; box-shadow: inset 0 0 18px rgba(212, 168, 67, 0.12), 0 10px 24px rgba(0, 0, 0, 0.35); transition: opacity 500ms ease, border-color 180ms ease, color 180ms ease, transform 180ms ease; } .tm-skip-intro[data-visible="true"] { opacity: 1; } .tm-skip-intro:hover, .tm-skip-intro:focus-visible { border-color: rgba(142, 216, 209, 0.72); color: #ffffff; outline: none; transform: translateY(-1px); } .tm-intro[data-intro-state="complete"] { pointer-events: none; animation: tm-complete-fade 1800ms ease-in-out forwards; } @keyframes tm-intro-sky { 0% { transform: scale(1); filter: blur(20px); opacity: 0.65; } 50% { opacity: 1; } 100% { transform: scale(1.18); filter: blur(8px); opacity: 1; } } @keyframes tm-intro-rails { 0%, 45% { opacity: 0; transform: translateX(-50%) scaleY(0.7); } 60%, 100% { opacity: 0.55; transform: translateX(-50%) scaleY(1.12); } } @keyframes tm-ticket { 0% { opacity: 0; transform: translate3d(0, 3vh, -180px) rotateX(38deg) rotateZ(-8deg) scale(0.58); } 8%, 24% { opacity: 1; transform: translate3d(0, 0, 40px) rotateX(0) rotateZ(3deg) scale(1); } 34% { opacity: 1; transform: translate3d(0, 3vh, 0) rotateX(22deg) rotateZ(-5deg) scale(0.78); } 43% { opacity: 0; transform: translate3d(0, 8vh, -60px) rotateX(48deg) rotateZ(-9deg) scale(0.42); } 100% { opacity: 0; transform: translate3d(0, 8vh, -60px) rotateX(48deg) rotateZ(-9deg) scale(0.42); } } @keyframes tm-box { 0%, 18% { opacity: 0; transform: translate3d(0, 12vh, -160px) scale(0.62); } 27%, 46% { opacity: 1; transform: translate3d(0, 8vh, 0) scale(0.86); } 50% { filter: brightness(1.9) drop-shadow(0 0 50px rgba(212, 168, 67, 0.76)); } 58%, 100% { opacity: 0; transform: translate3d(0, 10vh, -120px) scale(0.54); } } @keyframes tm-energy { 0%, 40% { opacity: 0; transform: scale(0.4) rotate(0deg); } 50% { opacity: 0.9; transform: scale(0.95) rotate(24deg); } 70% { opacity: 0.55; transform: scale(1.22) rotate(90deg); } 100% { opacity: 0; transform: scale(1.42) rotate(150deg); } } @keyframes tm-sparks { 0%, 43% { opacity: 0; transform: scale(0.8); } 52%, 78% { opacity: 0.92; transform: scale(1.04); } 100% { opacity: 0; transform: scale(1.2); } } @keyframes tm-shockwave { 0%, 47% { opacity: 0; transform: scale(0.2); } 50% { opacity: 1; transform: scale(1); } 64% { opacity: 0; transform: scale(9); } 100% { opacity: 0; transform: scale(9); } } @keyframes tm-train-arrival { 0%, 48% { opacity: 0; transform: translate3d(0, 8vh, -220px) scale(0.58); filter: blur(8px) brightness(1.45); } 59% { opacity: 0.92; transform: translate3d(0, 2vh, -40px) scale(0.86); filter: blur(1px) brightness(1.15); } 78%, 91% { opacity: 1; transform: translate3d(0, 0, 0) scale(1.02); filter: blur(0) brightness(1); } 100% { opacity: 0; transform: translate3d(0, -2vh, 120px) scale(1.2); filter: blur(3px) brightness(1.4); } } @keyframes tm-steam-rise { 0%, 54% { opacity: 0; transform: translateY(12vh) scale(0.7); } 66%, 88% { opacity: 0.72; } 100% { opacity: 0; transform: translateY(-18vh) scale(1.28); } } @keyframes tm-copy-drift { 0%, 24% { opacity: 1; transform: translateX(-50%) translateY(0); } 40%, 65% { opacity: 0.58; transform: translateX(-50%) translateY(-10px); } 77%, 100% { opacity: 0; transform: translateX(-50%) translateY(-24px); } } @keyframes tm-chapter { 0%, 8% { opacity: 0; transform: translateX(-12px); } 18%, 46% { opacity: 1; transform: translateX(0); } 56%, 100% { opacity: 0.32; transform: translateX(0); } } @keyframes tm-final-flash { 0%, 88% { opacity: 0; } 93% { opacity: 1; } 100% { opacity: 0; } } @keyframes tm-complete-fade { to { opacity: 0; } } .tm-intro__sky, .tm-intro__rails, .tm-intro__scene, .tm-intro__copy, .tm-intro__chapters, .tm-intro__flash, .tm-skip-intro { display: none !important; } @media (max-width: 720px) { .tm-intro__copy { top: 7vh; } .tm-intro__ticket { width: min(420px, 82vw); } .tm-intro__box { width: min(390px, 78vw); } .tm-intro__train { width: 112vw; } .tm-intro__chapters { display: none; } } @media (prefers-reduced-motion: reduce) { .tm-intro *, .tm-intro *::before, .tm-intro *::after { animation-duration: 1ms !important; animation-delay: 0ms !important; transition-duration: 1ms !important; } .tm-skip-intro { opacity: 1; } }