manikandanj's picture
Align Space Gradio SDK version
2e87549 verified
Raw
History Blame Contribute Delete
45.2 kB
:root {
--tte-ink: #120905;
--tte-readable-ink: #120905;
--tte-line: #2c1810;
--tte-wood-dark: #27140c;
--tte-wood: #5b2f1e;
--tte-wood-warm: #8a4e2a;
--tte-brass-dark: #7c4b1d;
--tte-brass: #c6933c;
--tte-brass-light: #f2cb67;
--tte-cream: #fff0cb;
--tte-paper: #f8e5b9;
--tte-green: #314638;
--tte-cyan: #83d6d3;
--tte-sky-a: #f8d99a;
--tte-sky-b: #badbd2;
--tte-sky-c: #f4bbb0;
--tte-heading: Georgia, "Times New Roman", serif;
--tte-body: "Trebuchet MS", "Segoe UI", sans-serif;
--tte-ride-duration: 12500ms;
--tte-progress: 0;
--body-background-fill: #150b07;
--body-text-color: #fff0cb;
--background-fill-primary: #150b07;
--background-fill-secondary: #28140c;
--block-background-fill: transparent;
--block-border-color: transparent;
--input-background-fill: rgba(255, 240, 203, 0.92);
--input-text-color: var(--tte-readable-ink);
--button-primary-background-fill: #c6933c;
--button-primary-text-color: var(--tte-readable-ink);
}
html,
body,
.gradio-container,
main {
background: #150b07 !important;
}
.gradio-container {
min-height: 100vh;
padding: 0 !important;
color: var(--tte-cream) !important;
font-family: var(--tte-body) !important;
}
.gradio-container .contain {
max-width: none !important;
padding: 0 !important;
}
.gradio-container label,
.gradio-container .label-wrap,
.gradio-container .prose,
.gradio-container .prose *,
.gradio-container input,
.gradio-container textarea,
.gradio-container select,
.gradio-container button {
color: var(--tte-readable-ink) !important;
}
.gradio-container input::placeholder,
.gradio-container textarea::placeholder {
color: rgba(18, 9, 5, 0.72) !important;
}
footer,
.footer {
display: none !important;
}
#tm-realtime-session,
#tm-immersive-payload,
#tm-world-view-1,
#tm-world-view-2 {
position: absolute !important;
left: -10000px !important;
top: auto !important;
width: 1px !important;
height: 1px !important;
overflow: hidden !important;
opacity: 0 !important;
pointer-events: none !important;
}
.tte-cockpit {
position: relative;
width: 100%;
min-height: 100vh;
overflow: hidden;
isolation: isolate;
color: var(--tte-readable-ink);
background:
radial-gradient(ellipse at 50% 20%, rgba(255, 209, 113, 0.18), transparent 42%),
linear-gradient(180deg, #2b170f 0%, #140906 100%);
font-family: var(--tte-body);
letter-spacing: 0;
--person-shirt: #ead9b9;
--person-sash: #9d7045;
--person-hair: #352116;
--scene-haze: rgba(255, 229, 172, 0.38);
}
.tte-cockpit * {
box-sizing: border-box;
}
.tte-reference-stage {
position: absolute;
inset: 0;
z-index: 1;
overflow: hidden;
pointer-events: none;
background: #100804;
transform-origin: 50% 45%;
will-change: transform, filter;
}
.tte-reference-stage::after {
content: "";
position: absolute;
inset: -8%;
z-index: 5;
pointer-events: none;
opacity: 0;
background:
radial-gradient(ellipse at 50% 43%, rgba(255, 244, 182, 0.6), transparent 24%),
linear-gradient(90deg, transparent 0 28%, rgba(255, 244, 202, 0.28) 36%, transparent 47% 53%, rgba(126, 228, 225, 0.22) 64%, transparent 74%),
repeating-linear-gradient(110deg, transparent 0 26px, rgba(255, 241, 194, 0.2) 27px 29px, transparent 30px 72px);
mix-blend-mode: screen;
}
.tte-reference-stage__image,
.tte-reference-stage__vortex {
position: absolute;
inset: 0;
pointer-events: none;
}
.tte-reference-stage__image {
background-position: center;
background-size: cover;
transform: scale(1.02);
transition: opacity 520ms ease, filter 520ms ease, transform 520ms ease;
}
.tte-reference-stage__image--departure {
opacity: calc(1 - var(--tte-arrival-opacity, 0));
background-image: url("/static/img/travel/reference_departure.png");
filter: saturate(0.98) contrast(1.04);
}
.tte-reference-stage__image--warp {
opacity: var(--tte-warp-opacity, 0);
background-image: url("/static/img/travel/reference_warp_blend.png");
filter: saturate(1.06) contrast(1.06) brightness(1.03);
transform: scale(var(--tte-warp-scale, 1.04));
}
.tte-reference-stage__image--arrival {
opacity: var(--tte-arrival-opacity, 0);
background-image: url("/static/img/travel/reference_arrival.png");
filter: saturate(0.98) contrast(1.06);
}
.tte-reference-stage__vortex {
z-index: 4;
opacity: 0;
background:
radial-gradient(circle at 50% 42%, rgba(255, 247, 198, 0.94) 0 4%, transparent 16%),
conic-gradient(from 90deg at 50% 42%, transparent 0 12%, rgba(131, 214, 211, 0.34) 13% 16%, transparent 18% 32%, rgba(246, 204, 103, 0.42) 33% 38%, transparent 40% 100%),
radial-gradient(ellipse at 50% 42%, transparent 0 20%, rgba(255, 238, 174, 0.24) 34%, transparent 58%);
mix-blend-mode: screen;
transform: scale(0.88) rotate(0deg);
}
.tm-state-launching .tte-reference-stage__image--departure,
.tm-state-traveling .tte-reference-stage__image--departure,
.tm-state-braking .tte-reference-stage__image--departure {
filter: saturate(1.04) contrast(1.08);
transform: scale(var(--tte-departure-scale, 1.02));
}
.tm-state-launching .tte-reference-stage__vortex,
.tm-state-traveling .tte-reference-stage__vortex,
.tm-state-braking .tte-reference-stage__vortex {
opacity: var(--tte-vortex-opacity, 0);
animation: tte-vortex-turn 1300ms linear infinite;
}
.tm-state-launching .tte-reference-stage {
animation: tte-reference-rumble 320ms ease-in-out infinite;
}
.tm-state-traveling .tte-reference-stage {
animation: tte-reference-rumble 120ms ease-in-out infinite;
filter: saturate(1.08) contrast(1.08);
}
.tm-state-braking .tte-reference-stage {
animation: tte-reference-brake-shake 68ms linear infinite;
filter: saturate(1.16) contrast(1.16) brightness(1.08);
}
.tm-state-launching .tte-reference-stage::after,
.tm-state-traveling .tte-reference-stage::after {
opacity: 0.22;
animation: tte-transition-flash 620ms ease-in-out infinite alternate;
}
.tm-state-braking .tte-reference-stage::after {
opacity: 0.52;
animation: tte-transition-flash 110ms ease-in-out infinite alternate;
}
.tte-windscreen {
position: absolute;
left: clamp(46px, 16vw, 250px);
right: clamp(46px, 16vw, 250px);
top: clamp(30px, 5.5vh, 70px);
bottom: clamp(205px, 27vh, 300px);
z-index: 5;
overflow: hidden;
border-radius: 50% 50% 10% 10% / 34% 34% 9% 9%;
background: transparent;
clip-path: inset(0 round 48% 48% 9% 9% / 34% 34% 9% 9%);
box-shadow: none;
}
.tte-skywash {
position: absolute;
inset: -10%;
background:
radial-gradient(circle at 48% 18%, rgba(255, 248, 218, 0.96), transparent 18%),
radial-gradient(circle at 20% 42%, rgba(159, 204, 168, 0.42), transparent 20%),
radial-gradient(circle at 78% 36%, rgba(221, 158, 168, 0.38), transparent 19%),
linear-gradient(135deg, var(--tte-sky-a), var(--tte-sky-b) 54%, var(--tte-sky-c));
filter: saturate(0.94);
opacity: 0;
transform: scale(1.06);
animation: tte-dream-drift 18s ease-in-out infinite alternate;
}
.tte-era-strip {
position: absolute;
inset: 0;
display: flex;
width: 600%;
opacity: 0 !important;
transform: translate3d(0, 0, 0);
transition: opacity 700ms ease;
}
.tte-era-scene {
position: relative;
flex: 0 0 16.666%;
height: 100%;
overflow: hidden;
background:
radial-gradient(circle at var(--sun-x, 48%) 22%, rgba(255, 245, 205, 0.95), transparent 15%),
linear-gradient(180deg, var(--sky-top), var(--sky-bottom) 62%, var(--ground) 63%);
}
.tte-era-scene::before,
.tte-era-scene::after {
content: "";
position: absolute;
left: -10%;
right: -10%;
pointer-events: none;
}
.tte-era-scene::before {
bottom: 30%;
height: 23%;
background:
radial-gradient(ellipse at 20% 100%, var(--hill-a), transparent 62%),
radial-gradient(ellipse at 58% 100%, var(--hill-b), transparent 64%),
radial-gradient(ellipse at 88% 100%, var(--hill-c), transparent 58%);
opacity: 0.72;
}
.tte-era-scene::after {
bottom: 12%;
height: 30%;
background: var(--structures);
opacity: 0.92;
filter: drop-shadow(0 7px 0 rgba(95, 55, 29, 0.15));
}
.tte-landmark-layer {
position: absolute;
inset: 0;
z-index: 12;
overflow: hidden;
opacity: 0;
pointer-events: none;
}
.tte-landmark {
position: absolute;
left: var(--x, 105%);
bottom: var(--y, 30%);
width: var(--w, 120px);
height: var(--h, 130px);
opacity: 0;
transform: translate3d(0, 0, 0) scale(var(--scale, 1));
filter: drop-shadow(0 16px 12px rgba(73, 42, 21, 0.2));
animation: tte-landmark-future var(--speed, 2600ms) linear forwards;
}
.tte-cockpit[data-direction="past"] .tte-landmark {
animation-name: tte-landmark-past;
}
.tte-landmark::before,
.tte-landmark::after {
content: "";
position: absolute;
inset: auto;
}
.tte-landmark--tower::before {
left: 34%;
bottom: 0;
width: 34%;
height: 100%;
border: 3px solid rgba(42, 24, 16, 0.7);
border-radius: 46% 46% 12px 12px;
background: linear-gradient(180deg, #d6ece8, #8fc8be);
box-shadow:
-36px 40px 0 -8px #b9ddd5,
42px 24px 0 -10px #a2d1ca;
}
.tte-landmark--arch::before {
left: 4%;
right: 4%;
bottom: 0;
height: 72%;
border: 6px solid rgba(105, 70, 42, 0.72);
border-bottom: 0;
border-radius: 50% 50% 4px 4px / 76% 76% 4px 4px;
box-shadow:
32px 0 0 -5px #d7bc8a,
64px 0 0 -5px #d7bc8a,
96px 0 0 -5px #d7bc8a;
}
.tte-landmark--cottage::before {
left: 14%;
bottom: 0;
width: 72%;
height: 54%;
border: 3px solid rgba(72, 40, 22, 0.66);
border-radius: 8px;
background: linear-gradient(180deg, #f2d59d, #c99461);
}
.tte-landmark--cottage::after {
left: 8%;
bottom: 47%;
width: 84%;
height: 34%;
border: 3px solid rgba(72, 40, 22, 0.66);
border-radius: 12px 12px 4px 4px;
background: linear-gradient(135deg, #7c3e26 0 50%, #9e5630 51%);
transform: skewX(-8deg);
}
.tte-landmark--spire::before {
left: 18%;
bottom: 0;
width: 64%;
height: 92%;
clip-path: polygon(50% 0, 88% 100%, 12% 100%);
border: 3px solid rgba(34, 29, 45, 0.45);
background: linear-gradient(180deg, #d4f5f0, #79b9c7 54%, #497596);
box-shadow: 0 0 30px rgba(131, 214, 211, 0.38);
}
.tte-track-bed {
position: absolute;
left: 50%;
bottom: -6%;
z-index: 18;
width: min(58vw, 700px);
height: 68%;
transform: translateX(-50%);
perspective: 420px;
pointer-events: none;
opacity: 0;
}
.tte-rail {
position: absolute;
bottom: 0;
width: 7px;
height: 100%;
border-radius: 999px;
background:
linear-gradient(90deg, rgba(68, 45, 29, 0.9), #f0c865 45%, rgba(91, 55, 23, 0.94));
box-shadow: 0 0 14px rgba(255, 223, 124, 0.45);
transform-origin: bottom;
}
.tte-rail--left {
left: 34%;
transform: rotate(9deg);
}
.tte-rail--right {
right: 34%;
transform: rotate(-9deg);
}
.tte-sleepers {
position: absolute;
inset: 0;
clip-path: polygon(38% 100%, 62% 100%, 52% 0, 48% 0);
background:
repeating-linear-gradient(
0deg,
transparent 0 20px,
rgba(82, 49, 28, 0.7) 21px 27px,
rgba(240, 200, 101, 0.45) 28px 30px,
transparent 31px 47px
);
transform-origin: bottom;
}
.tm-state-traveling .tte-sleepers,
.tm-state-launching .tte-sleepers,
.tm-state-braking .tte-sleepers {
animation: tte-sleeper-rush 420ms linear infinite;
}
.tte-era-signs {
position: absolute;
inset: 0;
z-index: 24;
opacity: 0;
pointer-events: none;
}
.tte-era-sign {
position: absolute;
top: var(--sign-top, 42%);
left: 104%;
min-width: 204px;
padding: 9px 18px 10px;
border: 4px solid rgba(49, 30, 17, 0.9);
border-radius: 5px;
background:
linear-gradient(90deg, rgba(255, 235, 166, 0.16), transparent 18% 82%, rgba(67, 37, 18, 0.18)),
linear-gradient(180deg, #6a7a55 0%, #3b5039 42%, #243325 100%);
color: #fff0cb;
font: 900 14px/1.08 var(--tte-heading);
letter-spacing: 0.05em;
text-align: center;
text-transform: uppercase;
box-shadow:
inset 0 0 0 2px rgba(246, 216, 145, 0.34),
inset 0 0 0 5px rgba(24, 13, 7, 0.12),
inset 0 12px 12px rgba(255, 239, 184, 0.12),
inset 0 -13px 12px rgba(17, 9, 5, 0.28),
0 17px 18px rgba(57, 33, 20, 0.34);
animation: tte-sign-future var(--sign-speed, 1500ms) linear forwards;
}
.tte-era-sign::before {
content: "";
position: absolute;
left: 10px;
right: 10px;
top: 7px;
height: 2px;
border-radius: 999px;
background: rgba(255, 241, 194, 0.42);
}
.tte-era-sign::after {
content: "";
position: absolute;
left: 50%;
top: 100%;
width: 9px;
height: 76px;
transform: translateX(-50%);
border: 2px solid rgba(45, 25, 14, 0.74);
border-top: 0;
background:
linear-gradient(90deg, #5a3019, #d6a14a 45%, #6e3d20);
box-shadow: 0 10px 10px rgba(46, 28, 18, 0.26);
}
.tte-era-sign.past {
left: auto;
right: 104%;
animation-name: tte-sign-past;
}
.tte-window-glow,
.tte-window-glass {
position: absolute;
inset: 0;
z-index: 32;
pointer-events: none;
}
.tte-window-glow {
background:
radial-gradient(ellipse at 50% 22%, rgba(255, 255, 235, 0.34), transparent 22%),
linear-gradient(180deg, transparent 0 62%, rgba(90, 47, 23, 0.16) 100%);
mix-blend-mode: screen;
}
.tte-window-glass {
background:
linear-gradient(112deg, transparent 0 27%, rgba(255, 255, 255, 0.24) 28%, transparent 31%),
linear-gradient(103deg, transparent 0 68%, rgba(255, 248, 219, 0.18) 69%, transparent 72%),
radial-gradient(ellipse at 50% 15%, rgba(255, 255, 255, 0.14), transparent 28%);
opacity: 0.74;
}
.tte-generated-world {
position: absolute;
inset: -4%;
z-index: 22;
opacity: 0;
pointer-events: none;
background-position: center 42%;
background-size: cover;
filter: saturate(0.98) contrast(1.05);
transform: scale(1.04);
transition: opacity 800ms ease, transform 1200ms ease;
}
.tte-generated-world::after {
content: "";
position: absolute;
inset: 0;
background:
radial-gradient(ellipse at 50% 10%, rgba(255, 246, 210, 0.2), transparent 30%),
linear-gradient(180deg, transparent 0 68%, rgba(74, 39, 18, 0.2) 100%);
pointer-events: none;
}
.tm-has-scene.tm-state-arrived .tte-generated-world,
.tm-has-scene.tm-state-conversing .tte-generated-world {
opacity: 0.92;
transform: scale(1);
}
.tte-generated-person {
position: absolute;
left: 50%;
bottom: 7%;
z-index: 29;
display: block;
width: clamp(190px, 20vw, 330px);
max-height: 80%;
object-fit: contain;
object-position: center bottom;
opacity: 0;
pointer-events: none;
border-radius: 26px;
transform: translateX(-50%) translateY(18px) scale(0.96);
transform-origin: 50% 100%;
filter: drop-shadow(0 24px 20px rgba(58, 31, 17, 0.28));
transition: opacity 900ms ease, transform 1200ms cubic-bezier(0.2, 0.9, 0.2, 1);
}
.tm-has-portrait.tm-state-arrived .tte-generated-person,
.tm-has-portrait.tm-state-conversing .tte-generated-person {
opacity: 1;
transform: translateX(-50%) translateY(0) scale(1);
}
.tte-steam-curtain {
position: absolute;
inset: -8%;
z-index: 30;
opacity: 0;
pointer-events: none;
background:
radial-gradient(ellipse at 22% 76%, rgba(255, 248, 226, 0.82), transparent 43%),
radial-gradient(ellipse at 52% 72%, rgba(255, 248, 226, 0.78), transparent 46%),
radial-gradient(ellipse at 82% 78%, rgba(255, 248, 226, 0.68), transparent 40%);
filter: blur(18px);
}
.tm-state-braking .tte-steam-curtain,
.tm-state-arrived .tte-steam-curtain {
animation: tte-steam-reveal 3200ms ease both;
}
.tte-person {
position: absolute;
right: 15%;
bottom: 16%;
z-index: 28;
width: clamp(132px, 14vw, 210px);
aspect-ratio: 0.58;
opacity: 0;
transform: translateY(24px) scale(0.88);
transform-origin: 50% 100%;
transition: opacity 900ms ease, transform 1200ms cubic-bezier(0.2, 0.9, 0.2, 1);
filter: drop-shadow(0 20px 18px rgba(79, 45, 24, 0.28));
}
.tm-state-arrived .tte-person,
.tm-state-conversing .tte-person {
opacity: 0;
}
.tte-person {
display: none !important;
}
.tte-person__shadow,
.tte-person__legs,
.tte-person__body,
.tte-person__sash,
.tte-person__head,
.tte-person__hair,
.tte-person__arm {
position: absolute;
display: block;
}
.tte-person__shadow {
left: 20%;
right: 18%;
bottom: -2%;
height: 9%;
border-radius: 50%;
background: rgba(80, 45, 24, 0.18);
}
.tte-person__legs {
left: 33%;
bottom: 0;
width: 35%;
height: 36%;
border: 3px solid rgba(43, 27, 18, 0.72);
border-top: 0;
border-radius: 0 0 22px 22px;
background: linear-gradient(90deg, #6b523d 0 45%, #4f3a2c 46% 55%, #6b523d 56%);
}
.tte-person__body {
left: 22%;
bottom: 30%;
width: 56%;
height: 42%;
border: 3px solid rgba(43, 27, 18, 0.72);
border-radius: 38% 38% 18px 18px / 18% 18% 18px 18px;
background:
radial-gradient(ellipse at 38% 12%, rgba(255, 255, 255, 0.45), transparent 24%),
linear-gradient(110deg, var(--person-shirt), #c9b38c);
}
.tte-person__sash {
left: 24%;
bottom: 32%;
width: 54%;
height: 41%;
clip-path: polygon(0 0, 26% 0, 100% 100%, 70% 100%);
background: var(--person-sash);
opacity: 0.88;
}
.tte-person__head {
left: 31%;
top: 5%;
width: 38%;
height: 25%;
border: 3px solid rgba(43, 27, 18, 0.72);
border-radius: 48% 48% 45% 45%;
background:
radial-gradient(circle at 36% 45%, #2b1a14 0 3%, transparent 3.6%),
radial-gradient(circle at 63% 45%, #2b1a14 0 3%, transparent 3.6%),
radial-gradient(ellipse at 50% 68%, transparent 0 14%, rgba(76, 38, 25, 0.7) 15% 17%, transparent 18%),
linear-gradient(180deg, #c98761, #a4674d);
}
.tte-person__hair {
left: 29%;
top: 2%;
width: 42%;
height: 17%;
border-radius: 50% 50% 42% 42%;
background: var(--person-hair);
transform: rotate(-3deg);
}
.tte-person__arm {
bottom: 42%;
width: 16%;
height: 30%;
border: 3px solid rgba(43, 27, 18, 0.68);
border-radius: 999px;
background: #b87858;
transform-origin: 50% 12%;
}
.tte-person__arm--left {
left: 10%;
transform: rotate(28deg);
}
.tte-person__arm--right {
right: 4%;
transform: rotate(-55deg);
}
.tte-person[data-person-kind="future"] {
--person-shirt: #d9f3ed;
--person-sash: #5ba8a7;
--person-hair: #2b3440;
}
.tte-person[data-person-kind="past"] {
--person-shirt: #ead7b4;
--person-sash: #9b6b38;
--person-hair: #322017;
}
.tte-cab-shell {
position: absolute;
inset: 0;
z-index: 40;
pointer-events: none;
opacity: 0;
}
.tte-cab-shell__top,
.tte-cab-shell__left,
.tte-cab-shell__right,
.tte-cab-shell__bottom,
.tte-cab-shell__trim,
.tte-side-window {
position: absolute;
display: block;
}
.tte-cab-shell__top {
left: -4%;
right: -4%;
top: -4%;
height: 27%;
border-bottom: 4px solid rgba(43, 24, 14, 0.92);
border-radius: 0 0 50% 50% / 0 0 44% 44%;
background:
repeating-linear-gradient(104deg, rgba(255, 214, 133, 0.05) 0 18px, transparent 19px 54px),
radial-gradient(ellipse at 50% 94%, rgba(255, 204, 115, 0.16), transparent 45%),
linear-gradient(180deg, #160a06, #4f2a19 46%, #2a150d);
box-shadow: inset 0 -20px 28px rgba(255, 221, 141, 0.06);
}
.tte-cab-shell__left,
.tte-cab-shell__right {
top: 0;
bottom: 0;
width: clamp(52px, 15vw, 235px);
background:
repeating-linear-gradient(86deg, rgba(255, 217, 145, 0.06) 0 12px, transparent 13px 38px),
linear-gradient(90deg, #170b07, #67371f 44%, #2a150d);
box-shadow: inset -10px 0 18px rgba(255, 224, 158, 0.07);
}
.tte-cab-shell__left {
left: 0;
border-right: 5px solid rgba(36, 19, 11, 0.92);
}
.tte-cab-shell__right {
right: 0;
transform: scaleX(-1);
border-right: 5px solid rgba(36, 19, 11, 0.92);
}
.tte-cab-shell__bottom {
left: 0;
right: 0;
bottom: 0;
height: clamp(218px, 30vh, 330px);
background:
radial-gradient(ellipse at 50% 0%, rgba(248, 206, 113, 0.2), transparent 36%),
repeating-linear-gradient(90deg, rgba(255, 219, 142, 0.045) 0 20px, transparent 21px 70px),
linear-gradient(180deg, #6b3b22 0, #33170e 36%, #130806 100%);
border-top: 5px solid rgba(43, 24, 14, 0.94);
box-shadow: inset 0 18px 20px rgba(255, 225, 153, 0.08);
}
.tte-cab-shell__trim {
left: clamp(36px, 15vw, 238px);
right: clamp(36px, 15vw, 238px);
top: clamp(22px, 4.4vh, 58px);
bottom: clamp(190px, 26vh, 286px);
border: clamp(7px, 0.8vw, 12px) solid rgba(54, 28, 16, 0.96);
border-radius: 50% 50% 10% 10% / 34% 34% 9% 9%;
box-shadow:
inset 0 0 0 4px rgba(214, 161, 72, 0.76),
inset 0 0 0 8px rgba(84, 45, 24, 0.7),
0 12px 22px rgba(21, 9, 5, 0.55);
}
.tte-cab-shell__trim::before {
content: "";
position: absolute;
inset: 9px;
border: 2px solid rgba(255, 220, 136, 0.46);
border-radius: inherit;
}
.tte-side-window {
top: 26%;
width: clamp(34px, 9vw, 130px);
height: 35%;
border: 7px solid rgba(48, 25, 14, 0.9);
border-radius: 42% 42% 12px 12px / 28% 28% 12px 12px;
background:
linear-gradient(115deg, transparent 0 38%, rgba(255, 255, 255, 0.28) 39%, transparent 43%),
linear-gradient(180deg, rgba(219, 238, 214, 0.64), rgba(242, 184, 150, 0.34));
box-shadow: inset 0 0 0 3px rgba(211, 151, 69, 0.6);
}
.tte-side-window--left {
left: clamp(8px, 2vw, 30px);
}
.tte-side-window--right {
right: clamp(8px, 2vw, 30px);
}
.tte-cab-shine,
.tte-vignette,
.tte-film-grain,
.tte-speed-field {
position: absolute;
inset: 0;
pointer-events: none;
}
.tte-cab-shine {
z-index: 42;
background:
radial-gradient(ellipse at 50% 6%, rgba(255, 221, 140, 0.17), transparent 32%),
radial-gradient(ellipse at 50% 88%, rgba(255, 208, 111, 0.13), transparent 36%);
mix-blend-mode: screen;
}
.tte-vignette {
z-index: 58;
background:
radial-gradient(ellipse at 50% 40%, transparent 0 46%, rgba(30, 14, 8, 0.34) 74%, rgba(12, 5, 3, 0.76) 100%),
linear-gradient(180deg, rgba(0, 0, 0, 0.18), transparent 20%, transparent 64%, rgba(0, 0, 0, 0.5));
}
.tte-film-grain {
z-index: 59;
opacity: 0.13;
background-image:
linear-gradient(0deg, rgba(255, 255, 255, 0.06) 1px, transparent 1px),
linear-gradient(90deg, rgba(0, 0, 0, 0.05) 1px, transparent 1px);
background-size: 3px 3px;
mix-blend-mode: overlay;
}
.tte-speed-field {
z-index: 26;
opacity: 0;
transition: opacity 300ms ease;
}
.tte-speed-field span {
position: absolute;
left: 50%;
top: 46%;
width: 2px;
height: 58vh;
border-radius: 999px;
background: linear-gradient(180deg, transparent, rgba(255, 249, 210, 0.86), transparent);
transform-origin: 50% 0;
filter: blur(0.5px);
}
.tte-speed-field span:nth-child(1) { transform: rotate(28deg) translateY(-12vh); }
.tte-speed-field span:nth-child(2) { transform: rotate(-28deg) translateY(-10vh); }
.tte-speed-field span:nth-child(3) { transform: rotate(52deg) translateY(-6vh); }
.tte-speed-field span:nth-child(4) { transform: rotate(-52deg) translateY(-8vh); }
.tte-speed-field span:nth-child(5) { transform: rotate(74deg) translateY(-12vh); }
.tte-speed-field span:nth-child(6) { transform: rotate(-74deg) translateY(-11vh); }
.tm-state-traveling .tte-speed-field,
.tm-state-launching .tte-speed-field,
.tm-state-braking .tte-speed-field {
opacity: 0.82;
animation: tte-speed-pulse 650ms ease-in-out infinite;
}
.tm-state-braking .tte-speed-field {
opacity: 1;
filter: brightness(1.3);
}
.tte-dashboard {
position: absolute;
left: 0;
right: 0;
bottom: 0;
z-index: 50;
height: clamp(218px, 30vh, 330px);
pointer-events: none;
opacity: 0;
}
.tte-gauge-bank {
position: absolute;
left: clamp(20px, 18vw, 280px);
bottom: clamp(54px, 8vh, 86px);
display: flex;
gap: 14px;
}
.tte-gauge {
position: relative;
width: clamp(42px, 5vw, 62px);
aspect-ratio: 1;
border: 4px solid rgba(56, 31, 18, 0.9);
border-radius: 50%;
background:
radial-gradient(circle at 50% 56%, #f4d488 0 8%, transparent 9%),
radial-gradient(circle, #f4d488 0 52%, #8d5525 53% 100%);
box-shadow: inset 0 0 0 3px rgba(255, 239, 183, 0.35), 0 10px 18px rgba(0, 0, 0, 0.28);
}
.tte-gauge i {
position: absolute;
left: 50%;
top: 49%;
width: 3px;
height: 33%;
border-radius: 999px;
background: #361d11;
transform-origin: 50% 100%;
transform: translate(-50%, -100%) rotate(-24deg);
}
.tm-state-traveling .tte-gauge i,
.tm-state-braking .tte-gauge i {
animation: tte-needle-flick 560ms ease-in-out infinite;
}
.tte-throttle {
position: absolute;
left: 50%;
bottom: clamp(12px, 2vh, 28px);
width: clamp(220px, 24vw, 360px);
height: clamp(220px, 24vw, 360px);
transform: translateX(-50%);
transform-origin: 50% 82%;
transition: transform 700ms cubic-bezier(0.25, 1.6, 0.48, 1);
}
.tte-throttle__base {
position: absolute;
left: 16%;
right: 16%;
bottom: 2%;
height: 44%;
border: 4px solid rgba(57, 31, 18, 0.88);
border-radius: 42% 42% 22% 22% / 35% 35% 18% 18%;
background:
radial-gradient(ellipse at 48% 15%, rgba(255, 244, 188, 0.88), transparent 28%),
linear-gradient(90deg, #7a3f20, #d39a3c 26%, #f4cc69 46%, #bd782f 72%, #69351e);
box-shadow:
inset 0 -18px 28px rgba(82, 38, 14, 0.45),
0 22px 28px rgba(0, 0, 0, 0.34);
}
.tte-throttle__slot {
position: absolute;
left: 45%;
bottom: 13%;
width: 10%;
height: 52%;
border: 4px solid rgba(42, 22, 13, 0.86);
border-radius: 999px;
background: #170d09;
}
.tte-throttle__stem {
position: absolute;
left: 48%;
bottom: 43%;
width: 9%;
height: 44%;
border: 3px solid rgba(52, 29, 17, 0.72);
border-radius: 999px;
background: linear-gradient(90deg, #6c351e, #e4ad4d 48%, #6d351e);
transform-origin: 50% 100%;
}
.tte-throttle__handle {
position: absolute;
left: 22%;
right: 22%;
bottom: 77%;
height: 17%;
border: 4px solid rgba(52, 29, 17, 0.86);
border-radius: 999px;
background:
linear-gradient(180deg, rgba(255, 255, 255, 0.18), transparent 45%),
linear-gradient(90deg, #cf9b43 0 9%, #231712 10% 90%, #d5a348 91%);
box-shadow: 0 14px 18px rgba(0, 0, 0, 0.28);
}
.tte-throttle__label {
position: absolute;
left: 50%;
bottom: 7%;
z-index: 2;
transform: translateX(-50%);
min-width: 108px;
padding: 8px 12px 9px;
border: 3px solid rgba(55, 30, 17, 0.78);
border-radius: 8px;
background: linear-gradient(180deg, #f2c965, #a96b2b);
color: var(--tte-readable-ink);
font: 900 clamp(12px, 1.3vw, 16px)/1 var(--tte-heading);
letter-spacing: 0.08em;
text-align: center;
text-transform: uppercase;
}
.tte-cockpit[data-direction="future"] .tte-throttle {
transform: translateX(-50%) rotate(-18deg);
}
.tte-cockpit[data-direction="past"] .tte-throttle {
transform: translateX(-50%) rotate(18deg);
}
.tte-console-lights {
position: absolute;
right: clamp(26px, 17vw, 265px);
bottom: clamp(66px, 9vh, 96px);
display: flex;
gap: 12px;
}
.tte-console-lights span {
width: 20px;
aspect-ratio: 1;
border: 3px solid rgba(37, 20, 12, 0.8);
border-radius: 50%;
background: #51301d;
box-shadow: inset 0 0 0 2px rgba(255, 236, 173, 0.12);
}
.tm-state-traveling .tte-console-lights span,
.tm-state-braking .tte-console-lights span {
background: #d9a342;
box-shadow: 0 0 20px rgba(255, 218, 111, 0.5);
animation: tte-light-blink 520ms linear infinite alternate;
}
.tte-start-signs {
position: absolute;
left: 0;
right: 0;
top: clamp(230px, 35vh, 390px);
z-index: 64;
pointer-events: none;
}
.tte-route-sign {
position: absolute;
min-width: clamp(126px, 13vw, 176px);
padding: 12px 19px 13px;
border: 5px solid rgba(45, 27, 15, 0.92);
border-radius: 6px;
background:
linear-gradient(90deg, rgba(255, 233, 164, 0.18), transparent 18% 82%, rgba(57, 31, 15, 0.2)),
repeating-linear-gradient(0deg, rgba(65, 35, 18, 0.18) 0 2px, transparent 3px 14px),
linear-gradient(180deg, #f3cc69 0%, #c18835 48%, #7a4720 100%);
color: var(--tte-readable-ink);
font: 900 clamp(20px, 2.2vw, 34px)/1 var(--tte-heading);
letter-spacing: 0.06em;
text-transform: uppercase;
text-shadow: none;
cursor: pointer;
pointer-events: auto;
box-shadow:
inset 0 0 0 2px rgba(255, 237, 175, 0.32),
inset 0 13px 10px rgba(255, 235, 166, 0.16),
inset 0 -15px 14px rgba(44, 22, 10, 0.3),
0 18px 24px rgba(46, 28, 18, 0.28);
transform-origin: 50% 100%;
transition: transform 160ms ease, filter 160ms ease, opacity 400ms ease;
}
.tte-route-sign span {
position: relative;
z-index: 2;
}
.tte-route-sign::before {
content: "";
position: absolute;
left: 50%;
top: 100%;
width: 12px;
height: clamp(86px, 10vh, 132px);
transform: translateX(-50%);
border: 2px solid rgba(48, 28, 16, 0.86);
border-top: 0;
border-radius: 0 0 999px 999px;
background:
linear-gradient(90deg, #4c2815, #d6a24a 46%, #62351b);
box-shadow: 0 12px 14px rgba(35, 18, 9, 0.3);
z-index: -1;
}
.tte-route-sign::after {
content: "";
position: absolute;
inset: 7px 9px;
border: 2px solid rgba(71, 41, 20, 0.42);
border-radius: 3px;
background:
radial-gradient(circle at 8px 8px, rgba(52, 29, 15, 0.72) 0 3px, transparent 3.5px),
radial-gradient(circle at calc(100% - 8px) 8px, rgba(52, 29, 15, 0.72) 0 3px, transparent 3.5px),
radial-gradient(circle at 8px calc(100% - 8px), rgba(52, 29, 15, 0.72) 0 3px, transparent 3.5px),
radial-gradient(circle at calc(100% - 8px) calc(100% - 8px), rgba(52, 29, 15, 0.72) 0 3px, transparent 3.5px);
pointer-events: none;
}
.tte-route-sign:hover,
.tte-route-sign:focus-visible {
outline: none;
filter: brightness(1.1);
transform: translateY(-2px) rotate(var(--tilt, 0deg));
}
.tte-route-sign--future {
left: clamp(26%, 31vw, 38%);
--tilt: -3deg;
transform: rotate(-4deg);
}
.tte-route-sign--past {
right: clamp(24%, 28vw, 36%);
--tilt: 3deg;
transform: rotate(4deg);
}
.tm-state-launching .tte-start-signs,
.tm-state-traveling .tte-start-signs,
.tm-state-braking .tte-start-signs,
.tm-state-arrived .tte-start-signs,
.tm-state-conversing .tte-start-signs {
opacity: 0;
pointer-events: none;
}
.tte-back-button {
position: absolute;
left: clamp(18px, 4vw, 54px);
top: clamp(18px, 4vh, 46px);
z-index: 74;
min-height: 42px;
padding: 8px 15px;
border: 3px solid rgba(54, 31, 18, 0.82);
border-radius: 999px;
background: rgba(255, 238, 196, 0.9);
color: var(--tte-readable-ink);
font: 900 12px/1 var(--tte-heading);
letter-spacing: 0.05em;
text-transform: uppercase;
cursor: pointer;
opacity: 0;
pointer-events: none;
box-shadow: 0 12px 22px rgba(34, 17, 9, 0.22);
transition: opacity 260ms ease, transform 160ms ease;
}
.tte-back-button:hover,
.tte-back-button:focus-visible {
outline: none;
transform: translateY(-1px);
}
.tm-state-launching .tte-back-button,
.tm-state-traveling .tte-back-button,
.tm-state-braking .tte-back-button,
.tm-state-arrived .tte-back-button,
.tm-state-conversing .tte-back-button {
opacity: 1;
pointer-events: auto;
}
.tte-destination-plaque {
position: absolute;
left: clamp(18px, 4vw, 54px);
bottom: clamp(32px, 4.5vh, 62px);
z-index: 70;
display: grid;
gap: 4px;
width: min(310px, calc(45vw - 28px));
padding: 12px 14px 13px;
border: 3px solid rgba(54, 31, 18, 0.86);
border-radius: 8px;
background:
linear-gradient(180deg, rgba(255, 238, 195, 0.95), rgba(214, 164, 84, 0.9));
color: var(--tte-readable-ink);
box-shadow: 0 16px 28px rgba(25, 10, 5, 0.32);
transition: opacity 240ms ease, transform 240ms ease;
}
.tte-destination-plaque span {
font: 900 10px/1.15 var(--tte-body);
letter-spacing: 0.12em;
text-transform: uppercase;
opacity: 1;
}
.tte-destination-plaque strong {
overflow-wrap: anywhere;
font: 900 clamp(20px, 2vw, 28px)/1.02 var(--tte-heading);
}
#tm-route-atmosphere {
display: -webkit-box;
overflow: hidden;
font-size: 12px;
line-height: 1.28;
letter-spacing: 0;
text-transform: none;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.tte-year-module {
position: absolute;
left: 50%;
top: clamp(18px, 4vh, 48px);
z-index: 72;
min-width: clamp(120px, 13vw, 190px);
transform: translateX(-50%);
padding: 9px 14px 11px;
border: 3px solid rgba(54, 31, 18, 0.86);
border-radius: 8px;
background: rgba(255, 240, 203, 0.92);
color: #21130d;
color: var(--tte-readable-ink);
text-align: center;
box-shadow: 0 14px 22px rgba(34, 17, 9, 0.2);
transition: opacity 240ms ease, transform 240ms ease;
}
.tm-state-dormant .tte-destination-plaque,
.tm-state-dormant .tte-year-module {
opacity: 0;
pointer-events: none;
}
.tm-state-dormant .tte-year-module {
transform: translateX(-50%) translateY(-8px);
}
.tte-year-label {
display: block;
font: 900 10px/1 var(--tte-body);
letter-spacing: 0.14em;
text-transform: uppercase;
}
.tte-year-counter {
display: block;
margin-top: 2px;
font: 900 clamp(30px, 4vw, 56px)/0.95 var(--tte-heading);
letter-spacing: 0;
}
.tte-narration {
position: absolute;
left: 50%;
bottom: clamp(196px, 27vh, 292px);
z-index: 68;
width: min(700px, calc(100% - 48px));
margin: 0;
padding: 11px 18px 13px;
border: 3px solid rgba(54, 31, 18, 0.78);
border-radius: 999px;
background: rgba(255, 239, 203, 0.88);
color: var(--tte-readable-ink);
font: 800 clamp(15px, 1.5vw, 19px)/1.25 var(--tte-heading);
text-align: center;
box-shadow: 0 16px 24px rgba(43, 22, 12, 0.22);
transform: translateX(-50%);
transition: opacity 400ms ease, transform 400ms ease;
}
.tm-state-conversing .tte-narration {
opacity: 0;
transform: translateX(-50%) translateY(12px);
pointer-events: none;
}
.tte-conversation-panel {
position: absolute;
right: clamp(18px, 4vw, 56px);
bottom: clamp(20px, 4vh, 54px);
z-index: 76;
display: grid;
gap: 10px;
width: min(420px, calc(100% - 36px));
opacity: 0;
transform: translateY(18px);
pointer-events: none;
transition: opacity 440ms ease, transform 520ms cubic-bezier(0.2, 0.9, 0.2, 1);
}
.tm-state-arrived .tte-conversation-panel,
.tm-state-conversing .tte-conversation-panel {
opacity: 1;
transform: translateY(0);
pointer-events: auto;
}
.tte-contact-card {
display: grid;
gap: 3px;
justify-items: end;
padding: 10px 14px 12px;
border: 3px solid rgba(45, 27, 18, 0.72);
border-radius: 8px;
background: rgba(255, 247, 222, 0.93);
color: var(--tte-readable-ink);
text-align: right;
box-shadow: 0 12px 20px rgba(33, 17, 9, 0.22);
}
.tte-contact-card span {
font: 900 10px/1 var(--tte-body);
letter-spacing: 0.16em;
text-transform: uppercase;
}
.tte-contact-card strong {
font: 900 clamp(20px, 2.2vw, 30px)/1 var(--tte-heading);
}
.tte-contact-card em {
max-width: 320px;
font: 700 13px/1.25 var(--tte-body);
opacity: 1;
}
.tte-dialogue-bubbles {
display: grid;
gap: 10px;
max-height: min(260px, 30vh);
overflow-y: auto;
padding: 4px 4px 8px;
}
.tte-speech-bubble {
position: relative;
max-width: 84%;
padding: 11px 14px 12px;
border: 3px solid rgba(45, 27, 18, 0.82);
border-radius: 20px;
background: rgba(255, 247, 222, 0.96);
color: var(--tte-readable-ink);
font: 800 14px/1.28 var(--tte-body);
box-shadow: 0 10px 18px rgba(38, 19, 10, 0.22);
}
.tte-speech-bubble::after {
content: "";
position: absolute;
bottom: -13px;
width: 22px;
height: 22px;
border-right: 3px solid rgba(45, 27, 18, 0.82);
border-bottom: 3px solid rgba(45, 27, 18, 0.82);
background: inherit;
transform: rotate(38deg);
}
.tte-speech-bubble.user {
justify-self: end;
background: rgba(224, 248, 244, 0.96);
}
.tte-speech-bubble.user::after {
right: 28px;
}
.tte-speech-bubble.character {
justify-self: start;
}
.tte-speech-bubble.character::after {
left: 28px;
}
.tte-dialogue-form {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 8px;
}
.tte-dialogue-form input {
min-height: 44px;
width: 100%;
border: 3px solid rgba(45, 27, 18, 0.78);
border-radius: 999px;
background: rgba(255, 247, 222, 0.96);
color: var(--tte-readable-ink);
padding: 0 16px;
font: 800 14px/1 var(--tte-body);
}
.tte-dialogue-form button,
.tm-live-button {
min-height: 44px;
border: 3px solid rgba(45, 27, 18, 0.82);
border-radius: 999px;
background: linear-gradient(180deg, #f0c966, #bf7b32);
color: var(--tte-readable-ink);
font: 900 12px/1 var(--tte-heading);
letter-spacing: 0.06em;
text-transform: uppercase;
cursor: pointer;
}
.tte-dialogue-form input:focus,
.tte-dialogue-form button:focus-visible,
.tm-live-button:focus-visible {
outline: 3px solid rgba(131, 214, 211, 0.68);
outline-offset: 2px;
}
.tm-live-voice {
display: grid;
grid-template-columns: 112px minmax(0, 1fr);
gap: 7px 9px;
align-items: center;
}
.tm-live-button[disabled] {
opacity: 0.56;
cursor: not-allowed;
}
.tm-live-button.tm-live-on {
background: linear-gradient(180deg, #a9ebe4, #54a5a6);
}
.tm-live-meter {
height: 12px;
overflow: hidden;
border: 3px solid rgba(45, 27, 18, 0.62);
border-radius: 999px;
background: rgba(255, 247, 222, 0.82);
}
.tm-live-meter span {
display: block;
width: 0%;
height: 100%;
border-radius: inherit;
background: linear-gradient(90deg, #d39a3c, #83d6d3);
transition: width 80ms linear;
}
.tm-live-status {
grid-column: 1 / -1;
justify-self: center;
padding: 5px 10px 6px;
border: 2px solid rgba(45, 27, 18, 0.64);
border-radius: 999px;
background: rgba(255, 247, 222, 0.9);
color: var(--tte-readable-ink);
font: 900 11px/1.1 var(--tte-body);
letter-spacing: 0.08em;
text-align: center;
text-transform: uppercase;
}
.tm-live-transcript {
display: none;
}
.tte-artifact-panel,
.tm-dev-warning {
position: absolute;
z-index: 78;
}
.tte-artifact-panel {
left: clamp(18px, 4vw, 56px);
top: clamp(76px, 12vh, 124px);
display: none;
width: min(330px, calc(100% - 36px));
padding: 12px 14px;
border: 3px solid rgba(45, 27, 18, 0.78);
border-radius: 8px;
background: rgba(255, 247, 222, 0.92);
color: var(--tte-readable-ink);
}
.tte-artifact-panel[data-artifact-state="visible"] {
display: block;
}
.tm-dev-warning {
left: 50%;
top: 84px;
width: min(560px, calc(100% - 36px));
transform: translateX(-50%);
padding: 10px 14px;
border: 3px solid rgba(45, 27, 18, 0.78);
border-radius: 8px;
background: #fff0cb;
color: var(--tte-readable-ink);
font: 800 13px/1.25 var(--tte-body);
}
.tm-state-launching .tte-cockpit,
.tm-state-traveling .tte-cockpit,
.tm-state-braking .tte-cockpit {
animation: none;
}
.tm-state-launching .tte-era-strip,
.tm-state-traveling .tte-era-strip,
.tm-state-braking .tte-era-strip {
opacity: 0 !important;
}
.tm-state-traveling .tte-era-strip,
.tm-state-launching .tte-era-strip {
animation: tte-panorama-future var(--tte-ride-duration) linear infinite;
}
.tte-cockpit[data-direction="past"].tm-state-traveling .tte-era-strip,
.tte-cockpit[data-direction="past"].tm-state-launching .tte-era-strip {
animation-name: tte-panorama-past;
}
.tm-state-launching .tte-cab-shell,
.tm-state-launching .tte-dashboard {
animation: tte-cab-sway 360ms ease-in-out infinite;
}
.tm-state-traveling .tte-cab-shell,
.tm-state-traveling .tte-dashboard {
animation: tte-cab-sway 150ms ease-in-out infinite;
}
.tm-state-braking .tte-cab-shell,
.tm-state-braking .tte-dashboard,
.tm-state-braking .tte-windscreen {
animation: tte-violent-shake 92ms linear infinite;
}
.tm-state-arrived .tte-era-strip,
.tm-state-conversing .tte-era-strip {
opacity: 0 !important;
animation-play-state: paused;
}
.tm-state-arrived .tte-track-bed,
.tm-state-conversing .tte-track-bed {
opacity: 0 !important;
}
.tm-state-conversing[data-speech-state="replying"] .tte-generated-person,
.tm-state-conversing[data-speech-state="processing"] .tte-generated-person {
filter: drop-shadow(0 24px 20px rgba(58, 31, 17, 0.28)) drop-shadow(0 0 16px rgba(131, 214, 211, 0.34));
}
@keyframes tte-dream-drift {
from { transform: scale(1.06) translate3d(-0.8%, -0.4%, 0); }
to { transform: scale(1.1) translate3d(0.8%, 0.5%, 0); }
}
@keyframes tte-vortex-turn {
from { transform: scale(0.88) rotate(0deg); }
to { transform: scale(1.08) rotate(360deg); }
}
@keyframes tte-reference-rumble {
0%, 100% { transform: translate3d(0, 0, 0) scale(1.012); }
25% { transform: translate3d(2px, -1px, 0) scale(1.018); }
50% { transform: translate3d(-2px, 1px, 0) scale(1.014); }
75% { transform: translate3d(1px, 2px, 0) scale(1.02); }
}
@keyframes tte-reference-brake-shake {
0%, 100% { transform: translate3d(0, 0, 0) rotate(0deg) scale(1.025); }
20% { transform: translate3d(5px, -3px, 0) rotate(0.35deg) scale(1.035); }
40% { transform: translate3d(-4px, 4px, 0) rotate(-0.45deg) scale(1.03); }
60% { transform: translate3d(4px, 2px, 0) rotate(0.28deg) scale(1.038); }
80% { transform: translate3d(-3px, -2px, 0) rotate(-0.3deg) scale(1.032); }
}
@keyframes tte-transition-flash {
from { transform: translate3d(-1.5%, 0, 0) scale(1.02); filter: brightness(0.9); }
to { transform: translate3d(1.5%, 0, 0) scale(1.06); filter: brightness(1.32); }
}
@keyframes tte-panorama-future {
from { transform: translate3d(0, 0, 0); }
to { transform: translate3d(-83.333%, 0, 0); }
}
@keyframes tte-panorama-past {
from { transform: translate3d(-83.333%, 0, 0); }
to { transform: translate3d(0, 0, 0); }
}
@keyframes tte-sleeper-rush {
from { background-position-y: 0; }
to { background-position-y: 47px; }
}
@keyframes tte-sign-future {
from { transform: translateX(0) scale(0.72); opacity: 0; }
12% { opacity: 1; }
to { transform: translateX(-145vw) scale(1.12); opacity: 0; }
}
@keyframes tte-sign-past {
from { transform: translateX(0) scale(0.72); opacity: 0; }
12% { opacity: 1; }
to { transform: translateX(145vw) scale(1.12); opacity: 0; }
}
@keyframes tte-landmark-future {
from { transform: translateX(0) scale(var(--scale, 1)); opacity: 0; }
10%, 72% { opacity: 1; }
to { transform: translateX(-132vw) scale(calc(var(--scale, 1) * 1.28)); opacity: 0; }
}
@keyframes tte-landmark-past {
from { transform: translateX(0) scale(var(--scale, 1)); opacity: 0; }
10%, 72% { opacity: 1; }
to { transform: translateX(132vw) scale(calc(var(--scale, 1) * 1.28)); opacity: 0; }
}
@keyframes tte-speed-pulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.03); }
}
@keyframes tte-steam-reveal {
0% { opacity: 0; transform: translateY(12%) scale(0.92); }
22%, 62% { opacity: 0.94; }
100% { opacity: 0; transform: translateY(-12%) scale(1.16); }
}
@keyframes tte-person-breathe {
0%, 100% { transform: translateY(0) scale(1); }
50% { transform: translateY(-3px) scale(1.01); }
}
@keyframes tte-cab-sway {
0%, 100% { transform: translate3d(0, 0, 0); }
35% { transform: translate3d(1px, -1px, 0); }
70% { transform: translate3d(-1px, 1px, 0); }
}
@keyframes tte-violent-shake {
0%, 100% { transform: translate3d(0, 0, 0) rotate(0deg); }
25% { transform: translate3d(3px, -2px, 0) rotate(0.2deg); }
50% { transform: translate3d(-2px, 2px, 0) rotate(-0.25deg); }
75% { transform: translate3d(2px, 1px, 0) rotate(0.18deg); }
}
@keyframes tte-needle-flick {
0%, 100% { transform: translate(-50%, -100%) rotate(-42deg); }
50% { transform: translate(-50%, -100%) rotate(48deg); }
}
@keyframes tte-light-blink {
from { opacity: 0.55; }
to { opacity: 1; }
}
@media (max-width: 900px) {
.tte-windscreen {
left: 32px;
right: 32px;
bottom: 260px;
}
.tte-cab-shell__left,
.tte-cab-shell__right,
.tte-side-window {
display: none;
}
.tte-cab-shell__trim {
left: 22px;
right: 22px;
bottom: 244px;
}
.tte-start-signs {
top: 34vh;
}
.tte-route-sign--future {
left: 15%;
}
.tte-route-sign--past {
right: 15%;
}
.tte-destination-plaque {
width: min(270px, calc(48vw - 22px));
}
}
@media (max-width: 640px) {
.tte-cockpit {
min-height: 780px;
}
.tte-windscreen {
top: 72px;
left: 18px;
right: 18px;
bottom: 320px;
}
.tte-cab-shell__trim {
top: 62px;
left: 12px;
right: 12px;
bottom: 304px;
}
.tte-cab-shell__bottom,
.tte-dashboard {
height: 330px;
}
.tte-start-signs {
top: 250px;
}
.tte-route-sign {
min-width: 112px;
padding: 9px 12px 10px;
font-size: 21px;
}
.tte-route-sign--future {
left: 8%;
}
.tte-route-sign--past {
right: 8%;
}
.tte-year-module {
left: auto;
right: 14px;
transform: none;
min-width: 112px;
}
.tte-destination-plaque {
display: none;
}
.tte-narration {
bottom: 300px;
width: calc(100% - 28px);
border-radius: 18px;
font-size: 14px;
}
.tte-gauge-bank,
.tte-console-lights {
display: none;
}
.tte-throttle {
width: 210px;
height: 210px;
bottom: 120px;
}
.tte-conversation-panel {
left: 14px;
right: 14px;
bottom: 16px;
width: auto;
}
.tte-dialogue-form {
grid-template-columns: 1fr;
}
.tte-person {
right: 7%;
bottom: 13%;
width: 126px;
}
.tte-generated-person {
left: 50%;
bottom: 10%;
width: min(210px, 42vw);
}
}
@media (prefers-reduced-motion: reduce) {
.tte-cockpit *,
.tte-cockpit *::before,
.tte-cockpit *::after {
animation-duration: 1ms !important;
animation-iteration-count: 1 !important;
transition-duration: 1ms !important;
}
}