:root { --ink: #0b0d0e; --paper: #eef0eb; --muted: rgba(238,240,235,.68); --accent: #e56e58; --line: rgba(238,240,235,.3); --ease: cubic-bezier(.23,1,.32,1); }
* { box-sizing: border-box; } html { background: var(--ink); scroll-behavior: smooth; } body { margin: 0; background: var(--ink); color: var(--paper); font-family: "Arial Narrow", "Helvetica Neue", sans-serif; } a { color: inherit; text-decoration: none; } button { border: 0; color: inherit; font: inherit; cursor: pointer; } :focus-visible { outline: 2px solid var(--accent); outline-offset: 5px; }
.tour-header { position: fixed; z-index: 20; top: 0; left: 0; right: 0; display: flex; align-items: center; justify-content: space-between; padding: 24px clamp(20px, 4vw, 62px); font-size: .66rem; letter-spacing: .15em; text-transform: uppercase; text-shadow: 0 1px 3px rgba(0,0,0,.55), 0 2px 16px rgba(0,0,0,.4); } .tour-brand { display: inline-flex; align-items: center; gap: 10px; } .tour-logo { display: block; width: 108px; height: auto; filter: drop-shadow(0 4px 14px rgba(0,0,0,.65)); transition: transform .5s cubic-bezier(.23,1,.32,1); } .tour-brand:hover .tour-logo { transform: scale(1.05); } .tour-project { color: var(--muted); } .tour-close span { color: var(--accent); font-size: 1.25rem; vertical-align: -2px; }
.tour-story { position: relative; } .tour-stage { position: sticky; top: 0; z-index: 2; height: 100svh; min-height: 620px; overflow: hidden; background: #171b19; cursor: grab; } .tour-stage:active { cursor: grabbing; } .stage-image { position: absolute; inset: 0; background-position: center; background-size: cover; background-repeat: no-repeat; transform: scale(1.045); transition: transform 6s var(--ease); } .stage-image-current { z-index: 0; animation: breathe 16s ease-in-out infinite alternate; } .stage-image-next { z-index: 1; opacity: 0; transform: scale(1.08); transition: opacity 680ms var(--ease), transform 900ms var(--ease); } .stage-image-next.is-entering { opacity: 1; transform: scale(1.045); } .stage-shade { position: absolute; z-index: 3; inset: 0; background: linear-gradient(90deg, rgba(5,7,7,.74), rgba(5,7,7,.12) 68%), linear-gradient(0deg, rgba(5,7,7,.65), transparent 42%); pointer-events: none; } .stage-grain { position: absolute; z-index: 4; inset: 0; opacity: .1; pointer-events: none; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.4'/%3E%3C/svg%3E"); }
.stage-copy { position: absolute; z-index: 5; left: clamp(20px, 8vw, 150px); bottom: clamp(110px, 17vh, 190px); width: min(620px, calc(100% - 40px)); } .stage-kicker { margin: 0 0 25px; color: var(--accent); font-size: .68rem; font-weight: 700; letter-spacing: .2em; text-transform: uppercase; } .stage-copy h1 { max-width: 570px; margin: 0 0 20px; font-size: clamp(3.2rem, 7vw, 7rem); line-height: .84; letter-spacing: -.075em; overflow-wrap: break-word; } .stage-copy p:last-child { max-width: 320px; margin: 0; color: var(--muted); font-size: 1rem; line-height: 1.5; }
.stage-controls { position: absolute; z-index: 6; left: clamp(20px, 8vw, 150px); bottom: 48px; display: flex; align-items: center; gap: 16px; } .stage-controls button { width: 38px; height: 38px; background: transparent; border: 1px solid var(--line); font-size: 1.2rem; transition: border-color 180ms ease, color 180ms ease; } .stage-controls button:hover { border-color: var(--accent); color: var(--accent); } .stage-progress { width: clamp(100px, 20vw, 260px); height: 1px; background: var(--line); } .stage-progress span { display: block; width: 16%; height: 2px; background: var(--accent); transition: width 680ms var(--ease); } .stage-count { position: absolute; z-index: 6; right: clamp(20px, 7vw, 110px); bottom: 46px; font-size: 2rem; letter-spacing: -.07em; } .stage-count span { color: var(--muted); font-size: .8rem; letter-spacing: .08em; } .stage-hint { position: absolute; z-index: 6; right: clamp(20px, 7vw, 110px); top: 50%; color: var(--muted); font-size: .6rem; letter-spacing: .16em; text-transform: uppercase; writing-mode: vertical-rl; transform: rotate(180deg); }
.tour-step { position: relative; z-index: 3; height: 100svh; min-height: 620px; display: flex; align-items: end; padding: 0 7vw 12vh; color: transparent; pointer-events: none; } .tour-step span, .tour-step h2 { opacity: 0; } .tour-step.is-active span, .tour-step.is-active h2 { opacity: 0; }
@keyframes breathe { from { transform: scale(1.045) translate3d(-.25%, -.1%, 0); } to { transform: scale(1.085) translate3d(.25%, .15%, 0); } }
@media (max-width: 700px) { .tour-header { padding: 18px 20px; } .tour-project { display: none; } .tour-stage { min-height: 560px; } .stage-copy { bottom: 150px; } .stage-copy h1 { font-size: clamp(3.1rem, 15vw, 5.8rem); } .stage-hint { display: none; } .stage-count { bottom: 48px; right: 20px; } .stage-controls { left: 20px; bottom: 48px; } }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } .stage-image-current { animation: none; } .stage-image-next { transition: none; } }
