/* intro v25 — Sagmeister ticket: corner patch, spiral binding, ticket perforation, square thumb */

/* Corner accent patch → triangle */
.intro-tkt__patch {
    width: 10rem;
    height: 10rem;
    clip-path: polygon(0 0, 100% 0, 0 100%);
    opacity: 0.9;
}
.intro-tkt__spiral { height: 1rem; }
.intro-tkt__body { min-width: 0; }
.intro-tkt__close { width: 2rem; height: 2rem; }

/* Torn notebook spiral binding holes (colour from Tailwind text-*, holes via mask) */
.intro-tkt__spiral {
    -webkit-mask: radial-gradient(circle 5px at center, black 98%, transparent 100%) 0 0 / 30px 100%;
    mask: radial-gradient(circle 5px at center, black 98%, transparent 100%) 0 0 / 30px 100%;
    background: currentColor;
    opacity: 0.5;
}

/* Square cropped thumbnail */
.intro-tkt__thumb {
    width: 6rem;
    height: 6rem;
    object-fit: cover;
}

/* Ticket stub perforation (currentColor from the card text) */
.intro-tkt__ticket { transition: box-shadow 240ms ease; }
.intro-tkt__ticket::after {
    content: "";
    position: absolute;
    top: 0.75rem;
    bottom: 0.75rem;
    left: 7.5rem;
    border-left: 2px dashed currentColor;
    opacity: 0.25;
    pointer-events: none;
}
@media (max-width: 575.98px) {
    .intro-tkt__ticket::after { display: none; }
}

.services__panel--lift {
  transition: box-shadow 0.3s ease, transform 0.3s ease;
}

.services__panel--lift:hover {
  box-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1);
  transform: translateY(-0.5rem);
}

.services__link--lift {
  transition: filter 0.2s ease;
}

.services__link--lift:hover {
  filter: brightness(1.1);
}

.steps-numbered-cards__card-col {
    max-width: 24rem;
}

.steps-numbered-cards__number-badge {
    width: 3.5rem;
    height: 3.5rem;
}

/* advantages zigzag — 50/50 split, alternating direction, image cover + hover zoom (layout only, no colors) */

.advantages-zigzag__media {
    aspect-ratio: 4 / 3;
}

.advantages-zigzag__img {
    object-fit: cover;
    transition: transform 0.4s ease;
}

.advantages-zigzag__media:hover .advantages-zigzag__img {
    transform: scale(1.05);
}

@media (min-width: 768px) {
    /* equal halves regardless of framework (BS has no responsive w-50 utility) */
    .advantages-zigzag__row > * {
        flex: 1 1 0%;
        min-width: 0;
    }

    /* first row image-left/text-right; every even row mirrors */
    .advantages-zigzag__row:nth-child(even) {
        flex-direction: row-reverse;
    }
}

/* quote v13 — sekiro swimlane index cards: tessellation, CRT flicker, smoke wisps */

/* geometric tessellation tile sizing */
.sekiro-swimlane__tessellation svg {
    width: 100%;
    height: 100%;
}

/* CRT scanline flicker loop — tint via currentColor on the element */
.sekiro-swimlane__scanlines {
    background-image: repeating-linear-gradient(
        to bottom,
        currentColor 0,
        currentColor 1px,
        transparent 1px,
        transparent 3px
    );
    background-size: 100% 3px;
    animation: sekiro-swimlane-scanline-flicker 2.4s steps(2, end) infinite;
}

@keyframes sekiro-swimlane-scanline-flicker {
    0%, 100% {
        opacity: .12;
    }
    50% {
        opacity: .28;
    }
}

/* smoke / mist wisps — layout + blur only */
.sekiro-swimlane__wisp {
    filter: blur(48px);
    animation: sekiro-swimlane-wisp-drift 14s ease-in-out infinite;
}

.sekiro-swimlane__wisp--a {
    top: 8%;
    left: -4%;
    width: 16rem;
    height: 10rem;
    animation-delay: 0s;
}

.sekiro-swimlane__wisp--b {
    top: 42%;
    right: -6%;
    width: 20rem;
    height: 12rem;
    animation-delay: 4.5s;
}

.sekiro-swimlane__wisp--c {
    bottom: 6%;
    left: 28%;
    width: 14rem;
    height: 9rem;
    animation-delay: 9s;
}

@keyframes sekiro-swimlane-wisp-drift {
    0%, 100% {
        transform: translate(0, 0) scale(1);
        opacity: .35;
    }
    50% {
        transform: translate(1.5rem, -0.75rem) scale(1.08);
        opacity: .65;
    }
}

/* typography axis: lowercase body copy */
.sekiro-swimlane__body {
    text-transform: lowercase;
}

/* pull-quote aside accent rail */
.sekiro-swimlane__pull-rail {
    width: 3px;
    min-height: 3rem;
}

/* lane focus toggle — JS-driven active state (TW + BS parity via theme tokens) */
.sekiro-swimlane__tab {
    appearance: none;
    -webkit-appearance: none;
    font: inherit;
    cursor: pointer;
    outline-offset: -2px;
    transition: border-color 180ms ease, color 180ms ease;
    background-color: transparent;
    border-style: solid;
}

.sekiro-swimlane__tab.is-active {
    border-color: var(--bs-primary);
    color: var(--bs-primary);
}

/* swimlane panel — flex/grid child must shrink below content width for overflow-x scroll */
.sekiro-swimlane__panel {
    min-width: 0;
}

/* swimlane row focus / dim states */
.sekiro-swimlane__lane {
    max-width: 100%;
    transition: opacity 220ms ease, transform 220ms ease;
}

.sekiro-swimlane__lane.is-dimmed {
    opacity: .42;
}

.sekiro-swimlane__lane.is-focused {
    opacity: 1;
    transform: translateY(-0.125rem);
}

/* index-card micro tile */
.sekiro-swimlane__index-card {
    width: 11.5rem;
    min-height: 9.5rem;
    flex-shrink: 0;
    scroll-snap-align: start;
    transition: transform 200ms ease, box-shadow 200ms ease;
}

.sekiro-swimlane__index-card:hover {
    transform: translateY(-0.25rem);
}

/* ruled index-card lines — currentColor only */
.sekiro-swimlane__index-card__rules {
    top: 2rem;
    background-image: repeating-linear-gradient(
        to bottom,
        transparent 0,
        transparent 0.85rem,
        currentColor 0.85rem,
        currentColor calc(0.85rem + 1px)
    );
    background-size: 100% 1.125rem;
    opacity: .08;
}

/* hole-punch marker */
.sekiro-swimlane__index-card__punch {
    width: 0.5rem;
    height: 0.5rem;
}

/* horizontal swimlane scroll snap */
.sekiro-swimlane__track {
    width: 100%;
    max-width: 100%;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
}

/* pull-quote clamp for aside width */
.sekiro-swimlane__pull-text {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 5;
    overflow: hidden;
}

/* card quote clamp */
.sekiro-swimlane__card-clamp {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 4;
    overflow: hidden;
}

@media (prefers-reduced-motion: reduce) {
    .sekiro-swimlane__scanlines,
    .sekiro-swimlane__wisp {
        animation: none;
    }

    .sekiro-swimlane__lane,
    .sekiro-swimlane__index-card {
        transition: none;
    }
}
/* hover + focus affordances (layout/outline via theme token) */
@media (hover: hover) {
    .sekiro-swimlane-root [role="listitem"]:hover,
    .sekiro-swimlane-root article:hover,
    .sekiro-swimlane-root [class*="sekiro-swimlane__card"]:hover,
    .sekiro-swimlane-root .sekiro-swimlane__book:hover,
    .sekiro-swimlane-root .sekiro-swimlane__step:hover,
    .sekiro-swimlane-root .sekiro-swimlane__index-card:hover,
    .sekiro-swimlane-root .sekiro-swimlane__pill:hover,
    .sekiro-swimlane-root .sekiro-swimlane__item:hover {
        transform: translateY(-0.125rem);
    }
}

.sekiro-swimlane-root [role="listitem"],
.sekiro-swimlane-root article,
.sekiro-swimlane-root [class*="sekiro-swimlane__card"],
.sekiro-swimlane-root .sekiro-swimlane__book,
.sekiro-swimlane-root .sekiro-swimlane__step,
.sekiro-swimlane-root .sekiro-swimlane__index-card,
.sekiro-swimlane-root .sekiro-swimlane__pill {
    transition: transform 200ms ease;
}

.sekiro-swimlane-root a:focus-visible,
.sekiro-swimlane-root button:focus-visible,
.sekiro-swimlane-root [tabindex="0"]:focus-visible,
.sekiro-swimlane-root input:focus-visible,
.sekiro-swimlane-root summary:focus-visible,
.sekiro-swimlane-root [role="slider"]:focus-visible {
    outline: 2px solid var(--bs-primary);
    outline-offset: 2px;
}

@media (hover: hover) {
    .sekiro-swimlane-root button:hover,
    .sekiro-swimlane-root a:hover,
    .sekiro-swimlane-root summary:hover {
        opacity: 0.92;
    }
}

.cta-hub__stage { min-height: 24rem; }
.cta-hub__lines { position: absolute; inset: 0; width: 100%; height: 100%; }
.cta-hub__lines path { stroke-dasharray: 6 8; opacity: 0; }
[data-hub].is-visible .cta-hub__lines path { opacity: .5; animation: cta-hub-flow 1.2s linear infinite; transition: opacity 600ms ease 400ms; }

.cta-hub__node { opacity: 0; transition: opacity 500ms ease, transform 700ms cubic-bezier(.2, .8, .2, 1); }
.cta-hub__node--0 { top: 12% !important; left: 4% !important; transform: translate(-1.5rem, -1.5rem); }
.cta-hub__node--1 { top: 12% !important; left: auto !important; right: 4%; transform: translate(1.5rem, -1.5rem); }
.cta-hub__node--2 { top: auto !important; bottom: 12%; left: 4% !important; transform: translate(-1.5rem, 1.5rem); }
.cta-hub__node--3 { top: auto !important; bottom: 12%; left: auto !important; right: 4%; transform: translate(1.5rem, 1.5rem); }
[data-hub].is-visible .cta-hub__node { opacity: 1; transform: none; animation: cta-hub-bob 5s ease-in-out 1s infinite; }
[data-hub].is-visible .cta-hub__node--1 { transition-delay: 120ms; animation-delay: 1.6s; }
[data-hub].is-visible .cta-hub__node--2 { transition-delay: 240ms; animation-delay: 2.2s; }
[data-hub].is-visible .cta-hub__node--3 { transition-delay: 360ms; animation-delay: 2.8s; }

.cta-hub__core { transform: translate(-50%, -50%) scale(.8); opacity: 0; transition: transform 700ms cubic-bezier(.2, .8, .2, 1) 500ms, opacity 500ms ease 500ms; }
[data-hub].is-visible .cta-hub__core { transform: translate(-50%, -50%) scale(1); opacity: 1; }
.cta-hub__micro { font-size: .75rem; }

@keyframes cta-hub-flow { to { stroke-dashoffset: -28; } }
@keyframes cta-hub-bob { 0%, 100% { translate: 0 0; } 50% { translate: 0 -8px; } }

@media (prefers-reduced-motion: reduce) {
    .cta-hub__node, .cta-hub__core { transition: none; animation: none; opacity: 1; }
    [data-hub].is-visible .cta-hub__lines path { animation: none; }
}
/* phones: keep the four orbit nodes from colliding */
@media (max-width: 575px) {
    .cta-hub__node { max-width: 44%; padding: .5rem .75rem !important; font-size: .8125rem; line-height: 1.15rem; }
}

/* wpg-hidden: utility classes are renamed in production builds, so hidden states must not rely on .hidden / .d-none alone */
.cta-hub[hidden], .cta-hub [hidden], .cta-hub .hidden.d-none { display: none !important; }

