/* =========================
   BASE
========================= */

* {
    box-sizing: border-box;
}

html {
    scroll-behavior: smooth;
}

body {
    margin: 0;
    background: #5a0000;
    color: #fff;
    font-family: Arial, Helvetica, sans-serif;
    overflow: hidden;
}

button {
    font: inherit;
}


/* =========================
   INTRO
========================= */

.intro {
    position: fixed;
    inset: 0;

    min-height: 100vh;

    background: #111;

    display: flex;
    justify-content: center;
    align-items: center;

    z-index: 100;

    transition:
        opacity 0.9s cubic-bezier(.7, 0, .2, 1),
        transform 1.2s cubic-bezier(.7, 0, .2, 1);
}

.logo-button {
    border: 0;
    background: none;
    padding: 30px;
    cursor: pointer;

    transition:
        transform 0.5s cubic-bezier(.2, .8, .2, 1),
        opacity 0.5s ease;
}

.logo-button img {
    display: block;
    width: 180px;
    height: auto;

    transition:
        transform 0.7s cubic-bezier(.2, .8, .2, 1),
        filter 0.5s ease;
}

.logo-button:hover img {
    transform: scale(1.08);
}

.logo-button:active img {
    transform: scale(0.94);
}

.intro-hint {
    position: absolute;
    bottom: 38px;

    font-size: 10px;
    letter-spacing: 0.28em;
    text-transform: uppercase;

    opacity: 0;

    animation: introHint 2s ease 1.2s forwards;
}

@keyframes introHint {
    to {
        opacity: 0.35;
    }
}


/* Intro disappears */

body.entered {
    overflow-x: hidden;
    overflow-y: auto;
}

body.entered .intro {
    opacity: 0;
    transform: scale(1.08);
    pointer-events: none;
}

body.entered .logo-button img {
    transform: scale(0.65);
}


/* =========================
   MAIN PAGE
========================= */

.site {
    background: #111;
    opacity: 0;

    transition: opacity 1s ease;
}

body.entered .site {
    opacity: 1;
}

.section {
    min-height: 100vh;
    padding: 7vw;

    display: flex;
    position: relative;
}


/* =========================
   HERO
========================= */

.hero {
    flex-direction: column;
    justify-content: center;
}

.hero-kicker {
    font-size: 11px;
    letter-spacing: 0.45em;

    margin-bottom: 4vh;

    opacity: 0.4;
}

.hero-title {
    margin: 0;

    font-size: clamp(70px, 13vw, 220px);
    font-weight: 700;

    letter-spacing: -0.075em;
    line-height: 0.78;
}

.title-line {
    display: block;
}

.title-line:nth-child(2) {
    padding-left: 11vw;
}

.title-line:nth-child(3) {
    padding-left: 23vw;
}

.outline {
    color: transparent;
    -webkit-text-stroke: 1px rgba(255,255,255,0.65);
}

.hero-bottom {
    position: absolute;

    left: 7vw;
    right: 7vw;
    bottom: 6vh;

    display: flex;
    justify-content: space-between;

    text-transform: uppercase;
    letter-spacing: 0.2em;

    font-size: 10px;

    opacity: 0.4;
}

.hero-arrow {
    font-size: 20px;

    animation: arrowFloat 2s ease-in-out infinite;
}

@keyframes arrowFloat {
    0%, 100% {
        transform: translateY(0);
    }

    50% {
        transform: translateY(8px);
    }
}


/* =========================
   STATEMENT
========================= */

.statement {
    align-items: center;
}

.statement-text {
    margin: 0 auto;

    width: min(1100px, 100%);

    font-size: clamp(55px, 8vw, 130px);
    line-height: 0.95;

    font-weight: 700;
    letter-spacing: -0.055em;
}

.statement .soft {
    font-weight: 300;
    opacity: 0.25;
}


/* =========================
   TICKER
========================= */

.ticker-section {
    overflow: hidden;

    padding: 20vh 0;

    background: #f1f1ed;
    color: #111;
}

.ticker {
    white-space: nowrap;
    overflow: hidden;

    font-size: clamp(70px, 11vw, 180px);
    line-height: 0.9;

    font-weight: 700;
    letter-spacing: -0.06em;
}

.ticker-track {
    display: inline-block;

    will-change: transform;
}

.ticker-left .ticker-track {
    animation: tickerLeft 25s linear infinite;
}

.ticker-right {
    color: transparent;
    -webkit-text-stroke: 1.5px #111;
}

.ticker-right .ticker-track {
    animation: tickerRight 31s linear infinite;
}

@keyframes tickerLeft {
    from {
        transform: translateX(0);
    }

    to {
        transform: translateX(-50%);
    }
}

@keyframes tickerRight {
    from {
        transform: translateX(-45%);
    }

    to {
        transform: translateX(0);
    }
}


/* =========================
   DEPTH
========================= */

.depth {
    min-height: 130vh;

    align-items: center;
    justify-content: center;

    overflow: hidden;
}

.depth-word {
    position: absolute;

    font-size: clamp(180px, 38vw, 700px);
    font-weight: 700;

    letter-spacing: -0.1em;

    opacity: 0.035;

    user-select: none;

    transform: scale(var(--depth-scale, 1));
}

.depth-copy {
    position: relative;

    text-align: center;

    font-size: clamp(25px, 3vw, 50px);
    line-height: 1.25;

    font-weight: 300;
}


/* =========================
   WORDS
========================= */

.words {
    min-height: auto;

    padding-top: 18vh;
    padding-bottom: 18vh;

    flex-direction: column;
    justify-content: center;
}

.word-row {
    display: flex;
    justify-content: space-between;

    border-top: 1px solid rgba(255,255,255,0.15);

    padding: 2.5vh 0;

    font-size: clamp(45px, 9vw, 145px);
    font-weight: 700;

    line-height: 1;
    letter-spacing: -0.06em;
}

.word-row:last-child {
    border-bottom: 1px solid rgba(255,255,255,0.15);
}

.word-muted {
    opacity: 0.12;

    transition: opacity 0.5s ease;
}

.word-row:hover .word-muted {
    opacity: 0.55;
}


/* =========================
   FINAL
========================= */

.final {
    min-height: 100vh;

    justify-content: center;
    align-items: center;

    text-align: center;
}

.final-inner {
    display: flex;
    flex-direction: column;
    align-items: center;
}

.final-small {
    font-size: 10px;

    letter-spacing: 0.4em;

    opacity: 0.35;

    margin-bottom: 30px;
}

.final-title {
    margin: 0;

    font-size: clamp(100px, 20vw, 300px);
    line-height: 0.8;

    letter-spacing: -0.08em;
}

.return-button {
    margin-top: 80px;

    padding: 15px 0;

    border: none;
    border-bottom: 1px solid rgba(255,255,255,.4);

    color: #fff;
    background: transparent;

    text-transform: uppercase;
    letter-spacing: 0.25em;

    font-size: 10px;

    cursor: pointer;

    display: flex;
    align-items: center;
    gap: 20px;

    transition:
        gap 0.35s ease,
        border-color 0.35s ease;
}

.return-button:hover {
    gap: 35px;
    border-color: #fff;
}


/* =========================
   SCROLL REVEAL
========================= */

.reveal {
    opacity: 0;
    transform: translateY(60px);

    transition:
        opacity 1.1s cubic-bezier(.2,.8,.2,1),
        transform 1.1s cubic-bezier(.2,.8,.2,1);
}

.reveal.visible {
    opacity: 1;
    transform: translateY(0);
}

.delay-1 {
    transition-delay: 0.1s;
}

.delay-2 {
    transition-delay: 0.2s;
}

.delay-3 {
    transition-delay: 0.4s;
}


/* =========================
   CURSOR GLOW
========================= */

.cursor-glow {
    position: fixed;

    width: 450px;
    height: 450px;

    border-radius: 50%;

    pointer-events: none;

    background:
        radial-gradient(
            circle,
            rgba(255,255,255,0.055) 0%,
            rgba(255,255,255,0) 68%
        );

    transform: translate(-50%, -50%);

    opacity: 0;

    z-index: 20;

    transition: opacity 0.8s ease;
}

body.entered .cursor-glow {
    opacity: 1;
}


/* =========================
   MOBILE
========================= */

@media (max-width: 700px) {

    .section {
        padding: 8vw;
    }

    .logo-button img {
        width: 150px;
    }

    .hero-title {
        font-size: clamp(65px, 21vw, 120px);
        line-height: 0.82;
    }

    .title-line:nth-child(2) {
        padding-left: 0;
    }

    .title-line:nth-child(3) {
        padding-left: 8vw;
    }

    .hero-bottom {
        left: 8vw;
        right: 8vw;
    }

    .statement-text {
        font-size: clamp(50px, 15vw, 90px);
    }

    .ticker-section {
        padding: 16vh 0;
    }

    .ticker {
        font-size: 22vw;
    }

    .depth {
        min-height: 110vh;
    }

    .depth-word {
        font-size: 60vw;
    }

    .depth-copy {
        font-size: 24px;
    }

    .word-row {
        font-size: 16vw;
    }

    .final-title {
        font-size: 35vw;
    }

    .cursor-glow {
        display: none;
    }

}


/* =========================
   REDUCED MOTION
========================= */

@media (prefers-reduced-motion: reduce) {

    *,
    *::before,
    *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
    }

}

/* =========================
   MENU
========================= */

.menu-screen {
    position: fixed;
    inset: 0;

    background: #111;
    color: #fff;

    z-index: 90;

    display: flex;
    flex-direction: column;
    justify-content: center;

    padding: 7vw;

    opacity: 0;
    visibility: hidden;
    pointer-events: none;

    transition:
        opacity 0.8s cubic-bezier(.2,.8,.2,1),
        visibility 0.8s;
}


/* Menu becomes visible */

body.menu-open .menu-screen {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
}


/* Intro disappears when menu opens */

body.menu-open .intro {
    opacity: 0;
    transform: scale(1.08);
    pointer-events: none;
}


/* Small GIANT SQUID label */

.menu-label {
    position: absolute;

    top: 6vh;
    left: 7vw;

    font-size: 10px;
    letter-spacing: 0.45em;

    opacity: 0.35;
}


/* Menu */

.menu {
    display: flex;
    flex-direction: column;

    width: 100%;
}


/* Individual menu item */

.menu-item {
    position: relative;

    width: 100%;

    display: flex;
    align-items: center;

    border: 0;
    border-top: 1px solid rgba(255,255,255,0.12);

    background: transparent;
    color: #fff;

    padding: 1.4vh 0;

    cursor: pointer;

    text-align: left;

    overflow: hidden;
}

.menu-item:last-child {
    border-bottom: 1px solid rgba(255,255,255,0.12);
}


/* Number */

.menu-number {
    width: 8vw;

    font-size: 10px;
    letter-spacing: 0.2em;

    opacity: 0.3;

    transition:
        opacity 0.4s ease,
        transform 0.4s ease;
}


/* Main word */

.menu-name {
    font-size: clamp(55px, 8vw, 130px);

    font-weight: 700;

    letter-spacing: -0.06em;
    line-height: 0.9;

    transition:
        transform 0.5s cubic-bezier(.2,.8,.2,1),
        opacity 0.4s ease;
}


/* Hover */

.menu-item:hover .menu-name {
    transform: translateX(2vw);
}

.menu-item:hover .menu-number {
    opacity: 1;
    transform: translateX(0.5vw);
}


/* Dim everything except hovered item */

.menu:hover .menu-item:not(:hover) .menu-name {
    opacity: 0.18;
}


/* Surface button */

.menu-home {
    position: absolute;

    right: 7vw;
    bottom: 6vh;

    border: 0;
    background: transparent;

    color: #fff;

    font-size: 10px;

    text-transform: uppercase;
    letter-spacing: 0.25em;

    opacity: 0.35;

    cursor: pointer;

    transition: opacity 0.3s ease;
}

.menu-home:hover {
    opacity: 1;
}


/* =========================
   MOBILE MENU
========================= */

@media (max-width: 700px) {

    .menu-screen {
        padding: 8vw;
    }

    .menu-label {
        left: 8vw;
    }

    .menu-number {
        width: 15vw;
    }

    .menu-name {
        font-size: 15vw;
    }

    .menu-home {
        right: 8vw;
    }

}

/* =========================
   SIGNAL PAGE
========================= */

:root {
    --sig-bg: #151518;
    --sig-panel: #1d1d22;
    --sig-text: #f3f0e8;
    --sig-yellow: #ffd84a;
    --sig-magenta: #ff2d95;
    --sig-yellow-soft: rgba(255, 216, 74, 0.28);
    --sig-magenta-soft: rgba(255, 45, 149, 0.25);
}

.cursor-glow { z-index: 60; }

.signal-page {
    position: fixed;
    inset: 0;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    background: var(--sig-bg);
    color: var(--sig-text);
    z-index: 50;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity 1s cubic-bezier(.2,.8,.2,1), visibility 1s;
}

body.signal-open .signal-page { opacity: 1; visibility: visible; pointer-events: auto; }
body.signal-open .intro { opacity: 0; transform: scale(1.08); pointer-events: none; }
body.signal-open .cursor-glow { opacity: 1; }

/* No permanent grid/texture across SIGNAL. The CRT pattern lives only in the hero. */
.signal-page::before {
    content: none;
}

.signal-page .section,
.signal-page .ticker-section { position: relative; z-index: 2; }

/* HERO */
.signal-page .hero {
    background:
        radial-gradient(circle at 72% 28%, rgba(255,45,149,.13), transparent 28%),
        radial-gradient(circle at 20% 75%, rgba(255,216,74,.09), transparent 32%),
        var(--sig-bg);
    overflow: hidden;
}

/* Horizontal trace pattern revealed behind the moving scan line */
.signal-page .hero::after {
    content: "";
    position: absolute;
    inset: 0;

    /* Broad CRT / old-TV bands, revealed behind the scan line */
    background:
        repeating-linear-gradient(
            to bottom,
            rgba(86, 126, 168, .20) 0px,
            rgba(86, 126, 168, .20) 16px,
            rgba(128, 164, 196, .10) 16px,
            rgba(128, 164, 196, .10) 22px,
            transparent 22px,
            transparent 46px
        );

    clip-path: inset(0 0 100% 0);
    animation: sigTraceReveal 4s linear infinite;
    pointer-events: none;
    z-index: 0;
}

/* Keep normal hero content above the effect — but do NOT change the scan line's positioning. */
.signal-page .hero > *:not(.sig-sweep) {
    position: relative;
    z-index: 2;
}

@keyframes sigTraceReveal {
    0%   { clip-path: inset(0 0 100% 0); opacity: .12; }
    100% { clip-path: inset(0 0 0 0); opacity: 1; }
}

.sig-live { display:inline-flex; align-items:center; gap:10px; margin-bottom:4vh; font-size:11px; letter-spacing:.4em; opacity:.75; }
.sig-dot { width:8px; height:8px; border-radius:50%; background:var(--sig-yellow); box-shadow:0 0 10px var(--sig-yellow),0 0 24px var(--sig-yellow-soft); animation:sigPulse 1.6s ease-in-out infinite; }
@keyframes sigPulse { 0%,100%{opacity:1;transform:scale(1)} 50%{opacity:.3;transform:scale(.7)} }

.signal-page .outline { color:transparent; -webkit-text-stroke:1.5px var(--sig-yellow); position:relative; }
.sig-glitch { position:relative; display:inline-block; }
.sig-glitch::before,.sig-glitch::after { content:attr(data-text); position:absolute; left:0; top:0; width:100%; color:transparent; opacity:0; clip-path:inset(0 0 0 0); }
.sig-glitch::before { -webkit-text-stroke:1.5px var(--sig-magenta); transform:translate(3px,0); }
.sig-glitch::after { -webkit-text-stroke:1.5px var(--sig-yellow); transform:translate(-3px,0); }
.sig-glitch.glitching::before { opacity:.9; animation:sigGlitchA .25s steps(2,end); }
.sig-glitch.glitching::after { opacity:.9; animation:sigGlitchB .25s steps(2,end); }
@keyframes sigGlitchA { 0%{clip-path:inset(0 0 80% 0);transform:translate(5px,0)} 50%{clip-path:inset(40% 0 20% 0);transform:translate(-4px,0)} 100%{clip-path:inset(0);transform:translate(0)} }
@keyframes sigGlitchB { 0%{clip-path:inset(70% 0 0 0);transform:translate(-5px,0)} 50%{clip-path:inset(10% 0 60% 0);transform:translate(4px,0)} 100%{clip-path:inset(0);transform:translate(0)} }

.sig-sweep {
    position: absolute;
    left: 0;
    right: 0;
    height: 3px;
    background: linear-gradient(90deg, transparent 0%, var(--sig-yellow) 28%, #fff2a8 48%, var(--sig-magenta) 68%, transparent 100%);
    opacity: 1;
    box-shadow:
        0 0 10px var(--sig-yellow),
        0 0 24px var(--sig-yellow-soft),
        0 0 30px var(--sig-magenta-soft);
    animation: sigSweep 4s linear infinite;
    z-index: 5;
}
@keyframes sigSweep { from{top:0} to{top:100%} }
.signal-page .hero-bottom { color:var(--sig-text); opacity:.5; }

/* STATEMENT */
.signal-page .statement { background:rgba(10,10,12,.94); color:var(--sig-text); }
.signal-page .statement .soft { color:var(--sig-magenta); opacity:.9; }

/* TICKER */
.signal-page .ticker-section { background:var(--sig-yellow); color:#111; }
.signal-page .ticker-right { color:transparent; -webkit-text-stroke:1.5px var(--sig-magenta); }

/* FREQUENCY */
.signal-page .depth { background:var(--sig-panel); color:var(--sig-text); }
.signal-page .depth-word { color:var(--sig-magenta); opacity:.07; }
.signal-page .depth-copy { color:var(--sig-text); }
.sig-wave { position:relative; z-index:2; width:min(700px,80vw); height:90px; margin:0 auto 5vh; opacity:1; }
.sig-wave path { fill:none; stroke:var(--sig-yellow); stroke-width:2; stroke-dasharray:12 8; filter:drop-shadow(0 0 4px var(--sig-yellow-soft)); animation:sigWaveMove 2.4s linear infinite; }
@keyframes sigWaveMove { to{stroke-dashoffset:-40} }

/* WORD GRID */
.signal-page .words { background:#121216; color:var(--sig-text); }
.signal-page .word-row { border-color:rgba(255,216,74,.22); }
.signal-page .word-row:last-child { border-bottom:1px solid rgba(255,216,74,.22); }
.signal-page .word-muted { opacity:.16; }
.signal-page .word-row:nth-child(odd):hover .word-muted { opacity:1; color:var(--sig-yellow); }
.signal-page .word-row:nth-child(even):hover .word-muted { opacity:1; color:var(--sig-magenta); }

/* TRANSMISSION GRID */
.signal-page .sig-grid-section { flex-direction:column; justify-content:center; background:#18181d; color:var(--sig-text); }
.signal-page .sig-grid-kicker { font-size:11px; letter-spacing:.4em; color:var(--sig-yellow); opacity:.85; margin-bottom:4vh; }
.sig-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:2px; }
.signal-page .sig-frame { position:relative; aspect-ratio:4/5; border:1px dashed rgba(255,216,74,.32); display:flex; align-items:flex-end; overflow:hidden; background:rgba(255,255,255,.015); transition:border-color .4s ease,background .4s ease,transform .4s cubic-bezier(.2,.8,.2,1); }
.signal-page .sig-frame:nth-child(even) { border-color:rgba(255,45,149,.30); }
.signal-page .sig-frame:hover { border-color:var(--sig-yellow); background:rgba(255,216,74,.06); transform:translateY(-5px); }
.signal-page .sig-frame:nth-child(even):hover { border-color:var(--sig-magenta); background:rgba(255,45,149,.06); }
.signal-page .sig-frame-plus { position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); font-size:24px; font-weight:300; color:var(--sig-text); opacity:.2; transition:opacity .4s ease,color .4s ease,transform .4s ease; }
.signal-page .sig-frame:hover .sig-frame-plus { opacity:1; color:var(--sig-yellow); transform:translate(-50%,-50%) rotate(90deg) scale(1.25); }
.signal-page .sig-frame:nth-child(even):hover .sig-frame-plus { color:var(--sig-magenta); }
.signal-page .sig-frame-label { position:relative; z-index:2; padding:14px; font-size:10px; letter-spacing:.2em; color:var(--sig-text); opacity:.45; transition:color .4s ease,opacity .4s ease; }
.signal-page .sig-frame:hover .sig-frame-label { opacity:1; color:var(--sig-yellow); }
.signal-page .sig-frame:nth-child(even):hover .sig-frame-label { color:var(--sig-magenta); }

/* FINAL */
.signal-page .final { background:#09090b; color:var(--sig-text); }
.signal-page .final-small { color:var(--sig-magenta); opacity:.9; }
.signal-page .return-button { color:var(--sig-text); border-color:rgba(255,216,74,.4); }
.signal-page .return-button:hover { border-color:var(--sig-yellow); color:var(--sig-yellow); }

/* SIGNAL cursor becomes a two-colour scanner glow */
body.signal-open .cursor-glow {
    background:radial-gradient(circle, rgba(255,216,74,.09) 0%, rgba(255,45,149,.045) 34%, rgba(0,0,0,0) 68%);
}

@media (max-width:700px) {
    .sig-grid { grid-template-columns:repeat(2,1fr); }
}
