:root {
    --blue: #0079b8;
    --ink: #111;
    --pad: clamp(24px, 4vw, 72px)
}

* {
    box-sizing: border-box
}

html {
    scroll-behavior: smooth;
    scroll-snap-type: y mandatory
}

body {
    margin: 0;
    background: var(--blue);
    color: #fff;
    font-family: Arial, "Helvetica Neue", sans-serif;
    overflow-x: hidden
}

.visually-hidden {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    padding: 0 !important;
    margin: -1px !important;
    overflow: hidden !important;
    clip: rect(0, 0, 0, 0) !important;
    white-space: nowrap !important;
    border: 0 !important;
}

.viewport {
    position: fixed;
    inset: 0;
    overflow: hidden
}

.world {
    position: absolute;
    left: 0;
    top: 0;
    width: 420vw;
    height: 420vh;
    will-change: transform
}

.world.is-resetting .panel * {
    transition: none !important;
}

.snap-rail {
    position: relative;
    width: 1px
}

.snap-rail i {
    display: block;
    height: var(--stage-height, 100vh);
    scroll-snap-align: start
}

/* ---------- Header / nav ---------- */

.site-header {
    position: fixed;
    z-index: 20;
    inset: 0 0 auto;
    height: 82px;
    padding: 0 30px;
    display: flex;
    justify-content: space-between;
    align-items: center
}

.logo {
    display: flex;
    align-items: center;
    width: 104px;
    height: 24px
}

.logo img {
    display: block;
    width: 100%;
    transition: filter .35s
}

/* Hero (blue background) needs the logo forced to white.
   On white/page-content backgrounds we use the SVG's native brand-blue
   fill as-is, so the color always matches #0079b8 exactly instead of
   being approximated with hue-rotate filters. */
.logo img,
body.page-content.menu-open .logo img {
    filter: brightness(0) invert(1);
}

.site-header.on-white .logo img,
body.page-content:not(.menu-open) .logo img,
body:not(.page-content).menu-open .logo img {
    filter: none;
}

.menu {
    border: 0;
    background: none;
    width: 38px;
    height: 24px;
    padding: 0;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    cursor: pointer
}

.menu i,
.menu i:before {
    display: block;
    position: relative;
    top: -3px;
    width: 28px;
    height: 1px;
    background: #fff;
    content: "";
    transition: transform .45s cubic-bezier(.22, 1, .36, 1), background-color .3s
}

.menu i:before {
    position: absolute;
    right: 0;
    top: 0;
    transform: translateY(6px)
}

.menu[aria-expanded="true"] i {
    transform: rotate(180deg)
}

.menu[aria-expanded="true"] i:before {
    left: 0;
    right: auto;
    top: 0;
    transform: rotate(-90deg);
    transform-origin: left center
}

body.page-content .menu i,
body.page-content .menu i:before {
    background: #0079b8
}

.page-content.menu-open .menu i,
.page-content.menu-open .menu i:before {
    background: #fff !important
}

body:not(.page-content).menu-open .menu i,
body:not(.page-content).menu-open .menu i:before {
    background: #0079b8 !important
}

.nav {
    position: fixed;
    z-index: 19;
    inset: 0;
    background: #fff;
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 28px;
    padding: 10vw;
    transform: translateY(-100%);
    transition: .6s cubic-bezier(.77, 0, .18, 1)
}

.nav.open {
    transform: none
}

.nav a {
    color: #0079b8;
    text-decoration: none;
    font-size: clamp(36px, 5vw, 72px);
    font-weight: 900;
    letter-spacing: -.06em;
    line-height: 1.05
}

.page-content .nav {
    background: #0079b8
}

.page-content .nav a {
    color: #fff
}

.progress {
    position: fixed;
    z-index: 20;
    right: 30px;
    bottom: 24px;
    width: 2px;
    height: 110px;
    background: #ffffff66
}

body.page-content .progress {
    background: rgba(0, 121, 184, .3)
}

.progress i {
    display: block;
    width: 100%;
    height: 0;
    background: #fff
}

body.page-content .progress i {
    background: #0079b8
}

/* ---------- Panels (shared) ---------- */

.panel {
    position: absolute;
    width: var(--stage-width, 100vw);
    height: var(--stage-height, 100vh);
    padding: var(--pad);
    overflow: hidden;
    background: #fff;
    color: var(--ink)
}

.index {
    font-size: 12px;
    font-weight: 700;
    letter-spacing: .18em
}

.about > .index,
.works > .index,
.company > .index {
    position: absolute;
    top: var(--pad);
    left: var(--pad);
    margin: 0;
    font-size: 12px;
    font-weight: 700;
    line-height: 1;
    letter-spacing: .18em;
    z-index: 2
}

.works > .index {
    margin-left: 0
}

.company-scale > .index {
    display: none
}

.panel h2 {
    margin: 20px 0;
    font-size: clamp(62px, 10vw, 150px);
    line-height: .82;
    letter-spacing: -.07em;
    color: #0079b8;
}

/* Fade/rise-in for panel content as it becomes active */
.panel .index,
.panel h2,
.panel .lead,
.panel .text-link,
.panel .company-columns,
.panel .loop-hint,
.panel footer,
.panel .scroll-hint {
    opacity: 0;
    transform: translateY(22px);
    transition: opacity .7s cubic-bezier(.22, 1, .36, 1), transform .85s cubic-bezier(.22, 1, .36, 1);
}

.panel.is-active .index,
.panel.is-active h2,
.panel.is-active .lead,
.panel.is-active .text-link,
.panel.is-active .company-columns,
.panel.is-active .loop-hint,
.panel.is-active footer,
.panel.is-active .scroll-hint {
    opacity: 1;
    transform: translateY(0);
}

.panel h2,
.panel .company-columns {
    transition-delay: .08s;
}

.panel .lead,
.panel .loop-hint {
    transition-delay: .16s;
}

.panel .text-link,
.panel footer {
    transition-delay: .24s;
}

@media (prefers-reduced-motion: reduce) {
    .panel .index,
    .panel h2,
    .panel .lead,
    .panel .text-link,
    .panel .works-copy,
    .panel .company-columns,
    .panel .loop-hint,
    .panel footer,
    .panel .scroll-hint {
        transition: none;
    }
}

/* ---------- Hero ---------- */

.hero {
    left: 0;
    top: 0;
    background: var(--blue);
    color: #fff
}

.hero-mark {
    position: absolute;
    width: min(33.5vw, 360px);
    height: min(33.5vw, 360px);
    object-fit: contain;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    mix-blend-mode: screen;
    opacity: 1;
    animation: mark-enter 1.4s cubic-bezier(.22, 1, .36, 1) both
}

@keyframes mark-enter {
    from {
        transform: translate(-180%, 80%);
        opacity: 0
    }
    to {
        transform: translate(-50%, -50%);
        opacity: 1
    }
}

.hero-loop {
    left: 400vw;
    top: -400vh
}

.hero-loop .hero-mark,
.cycle-copy .hero-mark {
    animation: none
}

.scroll-hint {
    position: absolute;
    right: var(--pad);
    bottom: var(--pad);
    font-size: 11px;
    letter-spacing: .16em;
    writing-mode: vertical-rl
}

.scroll-hint span {
    display: inline-block;
    width: 1px;
    height: 44px;
    background: #fff;
    margin-bottom: 12px;
    animation: pulse 1.5s infinite
}

@keyframes pulse {
    50% {
        transform: scaleY(.3);
        transform-origin: top
    }
}

/* ---------- About ---------- */

.about {
    left: 100vw;
    top: -100vh;
    display: flex;
    flex-direction: column;
    justify-content: center
}

.about h2 {
    max-width: 900px;
    opacity: 0;
    filter: blur(10px);
    transform: translateY(80px) scale(.88);
    transform-origin: left center;
    letter-spacing: .02em;
    transition:
        opacity .7s cubic-bezier(.22, 1, .36, 1) .08s,
        transform 1.15s cubic-bezier(.16, 1, .3, 1) .08s,
        filter .9s cubic-bezier(.22, 1, .36, 1) .08s,
        letter-spacing 1.15s cubic-bezier(.16, 1, .3, 1) .08s;
}

.about.is-active h2 {
    opacity: 1;
    filter: blur(0);
    transform: translateY(0) scale(1);
    letter-spacing: -.07em;
}

.lead {
    font-size: clamp(18px, 2vw, 30px);
    line-height: 1.7;
    max-width: 730px;
    margin-left: auto
}

.text-link {
    color: inherit;
    text-decoration: none;
    border-bottom: 1px solid;
    align-self: flex-end;
    margin-top: 40px;
    padding: 12px 0;
    font-size: 13px;
    letter-spacing: .12em
}

.text-link b {
    margin-left: 30px
}

@media (prefers-reduced-motion: reduce) {
    .about h2 {
        filter: none;
        transition: none;
    }
}

/* ---------- Works ---------- */

.works {
    left: 200vw;
    top: -200vh;
    padding-left: 0;
    padding-right: 0
}

.works-copy {
    position: absolute;
    z-index: 2;
    top: 20%;
    left: 50%;
    width: min(90vw, 900px);
    margin: 0;
    color: var(--ink);
    font-size: clamp(17px, 1.55vw, 24px);
    font-weight: 700;
    line-height: 1.75;
    letter-spacing: .04em;
    text-align: center;
    opacity: 0;
    transform: translate(-50%, 22px);
    transition: opacity .7s cubic-bezier(.22, 1, .36, 1) .08s, transform .85s cubic-bezier(.22, 1, .36, 1) .08s;
}

.panel.is-active .works-copy {
    opacity: 1;
    transform: translate(-50%, 0);
}

.works-services {
    position: absolute;
    z-index: 2;
    top: 39%;
    left: 50%;
    width: min(57.6vw, 530px);
    margin: 0;
    padding: 0;
    list-style: none;
    display: grid;
    grid-template-columns: repeat(6, 1fr);
    gap: clamp(6px, .8vw, 12px);
    transform: translateX(-50%);
}

.works-services li {
    height: 27px;
    padding: 0 10px;
    border: 0;
    background: #0079b8;
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    overflow: hidden;
    opacity: 0;
    transition: opacity .7s cubic-bezier(.22, 1, .36, 1);
    will-change: opacity;
}

.works.services-visible .works-services li {
    opacity: 1;
}

.works-services b {
    color: #fff;
    font-size: clamp(10.5px, .9vw, 13.5px);
    font-weight: 700;
    letter-spacing: .08em;
    white-space: nowrap;
}

.works-marquee {
    position: absolute;
    left: 0;
    right: 0;
    top: 46%;
    display: grid;
    gap: clamp(8px, 1.2vh, 14px);
    overflow: hidden;
}

.marquee-row {
    height: clamp(150px, 20vh, 210px);
    overflow: hidden
}

.marquee-track {
    display: flex;
    width: max-content;
    height: 100%
}

.marquee-track img,
.marquee-track video {
    display: block;
    width: auto;
    height: 100%;
    max-width: none;
    object-fit: cover;
    flex: 0 0 auto
}

.marquee-track video {
    background: #f2f2f2
}

@media (prefers-reduced-motion: reduce) {
    .marquee-track {
        animation: none
    }

    .works-services li {
        opacity: 1;
        transition: none;
    }
}

/* ---------- Company ---------- */

.company {
    left: 300vw;
    top: -300vh;
    display: flex;
    flex-direction: column;
    justify-content: flex-start
}

.company-scale {
    position: absolute;
    inset: 0;
    padding: var(--pad);
    transform: scale(.77);
    transform-origin: center center
}

.company-columns {
    display: grid;
    grid-template-columns: minmax(0, 1.35fr) minmax(0, .9fr);
    gap: clamp(50px, 9vw, 150px);
    margin-top: clamp(70px, 12vh, 125px);
    font-size: clamp(14px, 1.35vw, 20px);
    line-height: 1.55
}

.company-columns dl {
    width: auto;
    margin: 0
}

.company-columns dl div {
    display: grid;
    grid-template-columns: clamp(92px, 10vw, 150px) 1fr;
    border: 0;
    padding: 7px 0
}

.company-columns dt {
    font-size: inherit;
    letter-spacing: .04em
}

.company-columns dd {
    font-size: inherit
}

.company-profile dd br {
    display: block;
    margin-bottom: 10px
}

.company-clients div {
    grid-template-columns: clamp(120px, 12vw, 180px) 1fr
}

.company footer {
    position: absolute;
    left: 30px;
    right: auto;
    bottom: 18px;
    display: flex;
    justify-content: space-between;
    font-size: 11px;
    letter-spacing: .15em
}

.loop-hint {
    position: absolute;
    right: var(--pad);
    bottom: 70px;
    font-size: 11px;
    letter-spacing: .15em
}

/* ---------- Responsive ---------- */

@media (min-width: 701px) {
    .about > .index,
    .works > .index,
    .company > .index {
        top: clamp(100px, 12vh, 130px);
    }
}

@media (max-width: 700px) {
    .hero-mark {
        width: 47.5vw;
        height: 47.5vw
    }

    .about .lead {
        font-size: 17px
    }

    .panel h2 {
        font-size: 16vw
    }

    .site-header {
        height: 68px;
        padding: 0 20px
    }

    .logo {
        width: 92px;
        height: 21px
    }

    .progress {
        right: 20px
    }

    .nav {
        gap: 22px;
    }

    .nav a {
        font-size: clamp(32px, 10vw, 44px);
        line-height: 1.05;
    }

    .about > .index,
    .works > .index,
    .company > .index {
        top: 88px;
        left: 24px;
        font-size: 12px;
    }

    .works-copy {
        top: 20%;
        left: 50%;
        width: calc(100vw - 48px);
        font-size: clamp(13px, 3.7vw, 16px);
        line-height: 1.75;
    }

    .works-services {
        top: 35%;
        width: calc(57.6vw - 27px);
        grid-template-columns: repeat(3, 1fr);
        gap: 6px;
        row-gap: 8px;
    }

    .works-services li {
        height: 21px;
        padding: 0 4px;
    }

    .works-services b {
        font-size: clamp(8px, 2.3vw, 10px);
    }

    .works-marquee {
        top: 47%;
    }

    .marquee-row {
        height: 19vh
    }

    .company-scale {
        overflow: visible;
    }

    .company-scale .company-columns {
        grid-template-columns: 1fr;
        gap: 12px;
        margin-top: 76px;
        font-size: 10px;
    }

    .company-scale .company-clients {
        display: block;
    }

    .company-scale .company-profile,
    .company-scale .company-clients {
        width: 100%;
    }

    .company-scale .company-columns dl div,
    .company-scale .company-clients div {
        grid-template-columns: 58px minmax(0, 1fr);
        padding: 3px 0;
    }

    .company > .index,
    .company-scale .loop-hint {
        font-size: 12.1px;
    }

    .company > footer {
        left: 20px;
        bottom: 14px;
        font-size: 9.24px;
    }
}

@media (prefers-reduced-motion: reduce) {
    html {
        scroll-behavior: auto
    }

    .scroll-hint span,
    .hero-mark {
        animation: none
    }
}
