:root {
    --page: #080a0f;
    --ink: #f2f4f3;
    --muted: #8f969f;
    --track: #252a34;
    --cyan: #55d8ff;
    --coral: #ff5b3d;
    --danger: #ff6b62;
    --focus: rgba(85, 216, 255, 0.32);
    color-scheme: dark;
}

* {
    box-sizing: border-box;
}

html,
body {
    min-width: 320px;
    min-height: 100%;
}

body {
    margin: 0;
    min-height: 100vh;
    background: var(--page);
    color: var(--ink);
    font-family: "Segoe UI", Inter, Helvetica, Arial, sans-serif;
    -webkit-font-smoothing: antialiased;
}

button {
    font: inherit;
    -webkit-tap-highlight-color: transparent;
}

.visit-main {
    display: grid;
    min-height: 100vh;
    min-height: 100dvh;
    place-items: center;
    padding: 40px 24px;
}

.visit-state {
    display: flex;
    width: min(100%, 420px);
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.route-loop {
    position: relative;
    width: 176px;
    height: 106px;
}

.route-loop svg {
    display: block;
    width: 100%;
    height: 100%;
    overflow: visible;
    fill: none;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.route-track,
.route-glow,
.route-signal {
    stroke-width: 2;
}

.route-track {
    stroke: var(--track);
}

.route-glow,
.route-signal {
    stroke: url("#route-gradient");
    stroke-dasharray: 18 82;
    animation: route-scan 1.9s linear infinite;
}

.route-glow {
    opacity: 0.72;
    stroke-width: 8;
    filter: blur(7px);
}

.route-signal {
    stroke-width: 3;
}

.route-packet {
    fill: var(--coral);
    stroke: var(--page);
    stroke-width: 2.5;
    filter: drop-shadow(0 0 7px rgba(255, 91, 61, 0.9));
}

.visit-state h1 {
    margin: 22px 0 0;
    font-size: 18px;
    font-weight: 600;
    letter-spacing: 0.24em;
    line-height: 1.3;
    text-transform: uppercase;
}

.visit-state-error h1 {
    margin-top: 24px;
    color: var(--ink);
    letter-spacing: 0;
    text-transform: none;
}

.visit-state-error p {
    margin: 12px 0 0;
    color: var(--muted);
    font-size: 15px;
    line-height: 1.75;
}

.visit-error-mark {
    display: grid;
    width: 72px;
    height: 72px;
    place-items: center;
    border: 1px solid rgba(255, 107, 98, 0.42);
    border-radius: 22px 50% 22px 50%;
    background: rgba(255, 107, 98, 0.08);
    color: var(--danger);
    font-size: 34px;
    font-weight: 500;
    line-height: 1;
}

.visit-retry-button {
    min-width: 128px;
    min-height: 46px;
    margin-top: 26px;
    padding: 0 22px;
    border: 1px solid rgba(85, 216, 255, 0.62);
    border-radius: 999px;
    background: transparent;
    color: var(--cyan);
    cursor: pointer;
    font-size: 15px;
    font-weight: 650;
    transition: background-color 160ms ease, border-color 160ms ease, color 160ms ease, transform 160ms ease;
}

.visit-retry-button:hover {
    border-color: var(--cyan);
    background: rgba(85, 216, 255, 0.1);
    color: #ffffff;
}

.visit-retry-button:active {
    transform: translateY(1px);
}

.visit-retry-button:focus-visible {
    outline: 3px solid var(--focus);
    outline-offset: 4px;
}

@keyframes route-scan {
    to {
        stroke-dashoffset: -100;
    }
}

@media (max-width: 480px) {
    .visit-main {
        padding: 32px 20px;
    }

    .route-loop {
        width: 156px;
        height: 94px;
    }

    .visit-state h1 {
        margin-top: 22px;
        font-size: 16px;
    }

    .visit-state-error p {
        max-width: 300px;
        font-size: 14px;
    }
}

@media (prefers-reduced-motion: reduce) {
    .route-glow,
    .route-signal {
        animation: none;
    }

    .route-packet {
        display: none;
    }

    .visit-retry-button {
        transition: none;
    }
}
