/* ═══ Landing page — scroll-motion story (home_public.html) ═══════════════
   Chapters: .ld-story[data-story] sections pin a product "stage" while the
   copy steps activate on scroll. landing.js drives data-state="0..N-1" on
   each section + .is-active on steps; everything visual is CSS transitions
   keyed off those attributes, so there is no rAF loop to break.

   Degradation contract:
   - no JS (html missing .js): no pinning, all steps visible, stage shows
     its final state.
   - prefers-reduced-motion: same as no-JS, minus transitions.            */

.ld { overflow-x: clip; }

/* ── Hero ───────────────────────────────────────────────────────────── */
.ld-hero {
    position: relative;
    min-height: calc(100vh - 64px);
    display: flex; align-items: center;
    padding: 4rem 0 5rem;
}
.ld-hero-glow {
    position: absolute; inset: -20% -10% auto; height: 90%;
    background:
        radial-gradient(600px 380px at 28% 30%, var(--accent-purple-dim), transparent 70%),
        radial-gradient(520px 340px at 75% 20%, var(--accent-blue-dim), transparent 70%);
    pointer-events: none;
}
.ld-hero-inner { position: relative; text-align: center; }
.ld-hero-title {
    font-family: var(--font-display);
    font-size: clamp(2.9rem, 2rem + 4.5vw, 5rem);
    line-height: 1.04; letter-spacing: -0.02em;
    margin: 1.2rem 0 1.1rem;
}
.ld-shimmer {
    background: linear-gradient(100deg, var(--accent-purple), var(--accent-blue) 45%, var(--accent-emerald));
    background-size: 200% 100%;
    -webkit-background-clip: text; background-clip: text; color: transparent;
    animation: ld-shimmer 6s ease-in-out infinite;
}
@keyframes ld-shimmer { 0%,100% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } }
.ld-hero-sub {
    max-width: 640px; margin: 0 auto 1.8rem;
    color: var(--text-secondary); font-size: 1.12rem; line-height: 1.65;
}

/* Ambient vignette */
.ld-hero-visual {
    position: relative; max-width: 720px; margin: 3.2rem auto 0;
}
.ld-hv-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: .8rem; }
.ld-hv-tile {
    background: var(--bg-card); border: 1px solid var(--border-color);
    border-radius: 12px; padding: .9rem .8rem; min-height: 92px;
    display: flex; flex-direction: column; gap: .5rem; justify-content: center;
    animation: ld-float 7s ease-in-out infinite; animation-delay: var(--d, 0s);
}
.ld-hv-bar {
    display: block; height: 7px; width: var(--w, 50%);
    border-radius: 4px;
    background: linear-gradient(90deg, var(--accent-purple-dim), rgba(139, 92, 246, .45));
}
@keyframes ld-float { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-9px); } }
.ld-hv-chip {
    position: absolute; font-size: .78rem; font-weight: 600;
    background: var(--bg-elevated); border: 1px solid var(--border-color);
    border-radius: 999px; padding: .35rem .8rem; box-shadow: var(--shadow-2, 0 8px 24px rgba(0,0,0,.4));
    animation: ld-float 6s ease-in-out infinite;
}
.ld-hv-chip--a { top: -1.1rem; left: 6%; color: var(--accent-emerald); animation-delay: .4s; }
.ld-hv-chip--b { bottom: -1rem; left: 38%; color: var(--accent-purple); animation-delay: 1.1s; }
.ld-hv-chip--c { top: 22%; right: -1%; color: var(--accent-blue); animation-delay: 1.8s; }

.ld-scroll-cue {
    margin: 3.4rem auto 0; display: flex; flex-direction: column; align-items: center;
    gap: .45rem; color: var(--text-muted); font-size: .72rem;
    letter-spacing: .22em; text-transform: uppercase;
}
.ld-scroll-cue span {
    width: 1px; height: 40px;
    background: linear-gradient(var(--text-muted), transparent);
    animation: ld-cue 2.2s ease-in-out infinite;
}
@keyframes ld-cue { 0% { transform: scaleY(.2); transform-origin: top; opacity: 0; }
                    40% { transform: scaleY(1); opacity: 1; }
                    100% { transform: scaleY(1); transform-origin: top; opacity: 0; } }

/* ── Stats band ─────────────────────────────────────────────────────── */
.ld-stats { border-top: 1px solid var(--border-subtle); border-bottom: 1px solid var(--border-subtle); padding: 1.6rem 0; background: var(--bg-secondary); }
.ld-stats-row { display: flex; justify-content: space-around; flex-wrap: wrap; gap: 1.4rem; }
.ld-stat { text-align: center; }
.ld-stat-num { display: block; font-family: var(--font-display); font-weight: 700; font-size: 1.9rem; }
.ld-stat-label { color: var(--text-muted); font-size: .82rem; letter-spacing: .05em; }

/* ── Story chapters (the scroll machine) ────────────────────────────── */
.ld-story { position: relative; }
.js .ld-story { min-height: calc((var(--ld-steps, 3) + 1.4) * 88vh); }
.js .ld-story-pin {
    position: sticky; top: 64px;
    min-height: calc(100vh - 64px);
    display: flex; align-items: center;
    overflow: hidden;
}
.ld-story-frame {
    display: grid; grid-template-columns: minmax(320px, 5fr) minmax(340px, 6fr);
    gap: clamp(2rem, 5vw, 4.5rem); align-items: center;
    width: 100%; padding-top: 2.5rem; padding-bottom: 2.5rem;
}

.ld-kicker {
    font-family: var(--font-display); font-size: .8rem; font-weight: 700;
    letter-spacing: .16em; text-transform: uppercase;
}
.ld-kicker em { font-style: normal; opacity: .65; letter-spacing: .06em; }
.ld-kicker--emerald { color: var(--accent-emerald); }
.ld-kicker--blue    { color: var(--accent-blue); }
.ld-kicker--purple  { color: var(--accent-purple); }

.ld-story-title {
    font-family: var(--font-display);
    font-size: clamp(1.9rem, 1.3rem + 2.4vw, 3rem);
    line-height: 1.08; margin: .8rem 0 1.6rem; letter-spacing: -0.015em;
}

.ld-steps { display: flex; flex-direction: column; gap: .35rem; }
.ld-step {
    padding: .85rem 1.1rem; border-left: 2px solid var(--border-subtle);
    transition: opacity .45s ease, border-color .45s ease, background .45s ease, transform .45s ease;
}
.js .ld-step { opacity: .32; }
.ld-step.is-active {
    opacity: 1; border-left-color: var(--accent-purple);
    background: linear-gradient(90deg, rgba(139, 92, 246, .07), transparent 70%);
    transform: translateX(4px);
}
.ld-story--bench .ld-step.is-active { border-left-color: var(--accent-blue); background: linear-gradient(90deg, rgba(59, 130, 246, .07), transparent 70%); }
#explore .ld-step.is-active { border-left-color: var(--accent-emerald); background: linear-gradient(90deg, rgba(16, 185, 129, .07), transparent 70%); }
.ld-step h3 { margin: 0 0 .3rem; font-size: 1.02rem; }
.ld-step p { margin: 0; color: var(--text-secondary); font-size: .92rem; line-height: 1.55; }

.ld-story-cta {
    display: inline-block; margin-top: 1.5rem; font-weight: 600; font-size: .95rem;
    color: var(--text-primary); border-bottom: 1px solid var(--border-color);
    padding-bottom: .15rem; transition: border-color .25s ease, color .25s ease;
}
.ld-story-cta:hover { color: var(--accent-purple); border-color: var(--accent-purple); }

/* ── The stage (fake product windows) ───────────────────────────────── */
.ld-stage { perspective: 1200px; }
.ld-window {
    background: var(--bg-secondary); border: 1px solid var(--border-color);
    border-radius: 16px; overflow: hidden;
    box-shadow: 0 30px 80px -30px rgba(0, 0, 0, .7), 0 0 60px -30px var(--accent-purple-dim);
    transition: transform .6s cubic-bezier(.22, 1, .36, 1);
    transform: rotateX(2deg) rotateY(-3deg);
}
.ld-story[data-state] .ld-window:hover { transform: none; }
.ld-window-bar {
    display: flex; align-items: center; gap: .4rem;
    padding: .6rem .9rem; border-bottom: 1px solid var(--border-subtle);
    background: var(--bg-card);
}
.ld-window-bar i { width: 10px; height: 10px; border-radius: 50%; background: var(--border-color); }
.ld-window-bar span { margin-left: .6rem; font-size: .74rem; color: var(--text-muted); font-family: var(--font-display); letter-spacing: .04em; }
.ld-window-body { position: relative; padding: 1rem; min-height: 340px; }

/* shared chip / tile atoms */
.ld-chip {
    display: inline-flex; align-items: center; gap: .3rem;
    font-size: .72rem; font-weight: 600; color: var(--text-secondary);
    background: var(--bg-elevated); border: 1px solid var(--border-subtle);
    border-radius: 999px; padding: .22rem .6rem; margin: .18rem .18rem 0 0;
}
.ld-chip--hot { color: var(--accent-emerald); border-color: color-mix(in srgb, var(--accent-emerald) 40%, transparent); }
.ld-map-tabs { display: flex; gap: .4rem; margin-bottom: .8rem; }
.ld-map-tabs span {
    font-size: .74rem; font-weight: 600; color: var(--text-muted);
    padding: .3rem .7rem; border-radius: 8px; border: 1px solid transparent;
}
.ld-map-tabs .is-on { color: var(--text-primary); background: var(--bg-elevated); border-color: var(--border-subtle); }
.ld-map-grid { display: grid; grid-template-columns: 1fr 1fr; gap: .7rem; }
.ld-map-tile {
    background: var(--bg-card); border: 1px solid var(--border-subtle);
    border-radius: 12px; padding: .7rem .75rem;
}
.ld-map-tile > b { display: block; font-size: .78rem; margin-bottom: .35rem; font-family: var(--font-display); }

/* Explore stage states */
.ld-quickview, .ld-research {
    position: absolute; right: 1rem; bottom: 1rem; width: min(62%, 300px);
    background: var(--bg-elevated); border: 1px solid var(--border-color);
    border-radius: 14px; padding: .9rem 1rem;
    box-shadow: 0 20px 50px -20px rgba(0, 0, 0, .8);
    opacity: 0; transform: translateY(24px) scale(.97);
    transition: opacity .55s ease, transform .55s cubic-bezier(.22, 1, .36, 1);
}
.ld-story[data-state="1"] .ld-quickview,
.ld-story[data-state="2"] .ld-research { opacity: 1; transform: none; }
.ld-story[data-state="2"] .ld-quickview { opacity: 0; transform: translateY(-14px) scale(.97); }
.ld-qv-head { display: flex; align-items: center; gap: .5rem; margin-bottom: .55rem; }
.ld-qv-head b { font-size: .9rem; }
.ld-qv-head em { font-style: normal; font-size: .72rem; color: var(--accent-emerald); margin-left: auto; }
.ld-logo-dot {
    width: 26px; height: 26px; border-radius: 8px; display: inline-flex;
    align-items: center; justify-content: center; font-weight: 700; font-size: .8rem;
    background: linear-gradient(#fff, #eceef4); color: #14141c;
}
.ld-qv-bars { display: flex; flex-direction: column; gap: .35rem; margin-bottom: .55rem; }
.ld-qv-bars span { height: 6px; border-radius: 3px; width: var(--w, 50%); background: linear-gradient(90deg, var(--accent-emerald), var(--accent-blue)); opacity: .75; }
.ld-quickview p { margin: 0; font-size: .78rem; color: var(--text-secondary); line-height: 1.5; }
.ld-research-row { display: flex; align-items: center; gap: .6rem; margin-bottom: .5rem; font-size: .78rem; }
.ld-research-row span { width: 34px; color: var(--text-muted); font-weight: 700; }
.ld-research-row i { flex: 1; height: 8px; border-radius: 4px; background: var(--bg-card); position: relative; overflow: hidden; }
.ld-research-row i::after {
    content: ''; position: absolute; inset: 0; width: var(--w, 40%);
    background: linear-gradient(90deg, var(--accent-purple), var(--accent-blue));
    border-radius: 4px; transform: scaleX(0); transform-origin: left;
    transition: transform .9s cubic-bezier(.22, 1, .36, 1) .15s;
}
.ld-story[data-state="2"] .ld-research-row i::after { transform: scaleX(1); }
.ld-research-row b { font-size: .8rem; }
.ld-cite { font-size: .72rem; color: var(--text-muted); border-top: 1px dashed var(--border-subtle); padding-top: .55rem; line-height: 1.5; }
.ld-cite u { color: var(--accent-blue); text-decoration: none; }

/* Bench stage */
.ld-bench-rail { display: flex; align-items: center; gap: .45rem; flex-wrap: wrap; margin-bottom: .8rem; }
.ld-bench-search {
    flex: 1 1 160px; font-size: .76rem; color: var(--text-muted);
    background: var(--bg-card); border: 1px solid var(--border-subtle);
    border-radius: 9px; padding: .45rem .7rem;
}
.ld-chip--pin { opacity: 0; transform: translateY(10px); transition: opacity .5s ease, transform .5s ease; transition-delay: calc(var(--fly, 1) * 120ms); }
.ld-chip--pin b { color: var(--accent-blue); }
.ld-story--bench[data-state] .ld-chip--pin { opacity: 1; transform: none; }
.ld-board { display: grid; grid-template-columns: 3fr 2fr; gap: .7rem; }
.ld-segment {
    background: var(--bg-card); border: 1px solid var(--border-subtle);
    border-radius: 12px; padding: .7rem .75rem; min-height: 132px;
}
.ld-segment > b, .ld-subsegment > b { display: block; font-size: .76rem; font-family: var(--font-display); margin-bottom: .4rem; }
.ld-segment b em { font-style: normal; font-size: .64rem; color: var(--accent-blue); border: 1px dashed color-mix(in srgb, var(--accent-blue) 55%, transparent); border-radius: 6px; padding: .05rem .35rem; margin-left: .3rem; vertical-align: middle; }
.ld-tile {
    display: inline-block; font-size: .72rem; font-weight: 600;
    background: linear-gradient(#fff, #eceef4); color: #14141c;
    border-radius: 8px; padding: .3rem .55rem; margin: .16rem .16rem 0 0;
    opacity: 0; transform: translate(-26px, -14px) rotate(-3deg);
    transition: opacity .5s ease, transform .55s cubic-bezier(.22, 1, .36, 1);
    transition-delay: calc(var(--slot, 1) * 140ms);
}
.ld-story--bench[data-state="1"] .ld-tile,
.ld-story--bench[data-state="2"] .ld-tile,
.ld-story--bench[data-state="3"] .ld-tile { opacity: 1; transform: none; }
.ld-subsegment {
    border: 1px dashed var(--border-color); border-radius: 10px;
    padding: .45rem .55rem; margin-top: .45rem;
}
.ld-segment--proposed {
    border-style: dashed; border-color: color-mix(in srgb, var(--accent-blue) 55%, transparent);
    opacity: 0; transform: translateY(16px);
    transition: opacity .55s ease, transform .55s ease;
}
.ld-story--bench[data-state="2"] .ld-segment--proposed,
.ld-story--bench[data-state="3"] .ld-segment--proposed { opacity: 1; transform: none; }
.ld-story--bench[data-state="3"] .ld-segment--proposed { border-style: solid; border-color: var(--border-color); }
.ld-segment--proposed .ld-tile { transition-delay: calc(var(--slot, 1) * 100ms + 250ms); }
.ld-lenses { display: flex; gap: .4rem; margin-top: .8rem; }
.ld-lenses span {
    font-size: .72rem; font-weight: 600; color: var(--text-muted);
    border: 1px solid var(--border-subtle); border-radius: 999px; padding: .26rem .65rem;
    transition: color .4s ease, border-color .4s ease, box-shadow .4s ease;
}
.ld-story--bench[data-state="2"] .ld-lenses .is-on,
.ld-story--bench[data-state="3"] .ld-lenses .is-on {
    color: var(--accent-blue); border-color: color-mix(in srgb, var(--accent-blue) 55%, transparent);
    box-shadow: 0 0 18px -6px var(--accent-blue);
}
.ld-bench-foot {
    display: flex; justify-content: space-between; margin-top: .8rem;
    opacity: 0; transform: translateY(10px); transition: opacity .5s ease, transform .5s ease;
}
.ld-story--bench[data-state="3"] .ld-bench-foot { opacity: 1; transform: none; }
.ld-snap, .ld-csv { font-size: .74rem; color: var(--text-secondary); background: var(--bg-elevated); border: 1px solid var(--border-subtle); border-radius: 8px; padding: .35rem .6rem; }
.ld-csv { color: var(--accent-emerald); }

/* Pro stage */
.ld-key {
    display: flex; align-items: center; justify-content: space-between;
    font-size: .78rem; background: var(--bg-card); border: 1px solid var(--border-subtle);
    border-radius: 10px; padding: .55rem .75rem; margin-bottom: .8rem;
    color: var(--text-secondary);
}
.ld-key em { font-style: normal; color: var(--accent-emerald); font-size: .72rem; opacity: 0; transition: opacity .5s ease .2s; }
.ld-story--pro[data-state] .ld-key em { opacity: 1; }
.ld-chip--private {
    color: var(--accent-amber); border-color: color-mix(in srgb, var(--accent-amber) 50%, transparent);
    border-style: dashed;
    opacity: 0; transform: translateY(10px) scale(.95);
    transition: opacity .5s ease, transform .5s ease;
    transition-delay: calc(var(--fly, 1) * 140ms);
}
.ld-story--pro[data-state="1"] .ld-chip--private,
.ld-story--pro[data-state="2"] .ld-chip--private { opacity: 1; transform: none; }
.ld-overlay-card {
    position: absolute; right: 1rem; bottom: 3.4rem; width: min(58%, 250px);
    background: var(--bg-elevated); border: 1px solid color-mix(in srgb, var(--accent-amber) 40%, var(--border-color));
    border-radius: 14px; padding: .8rem .9rem;
    box-shadow: 0 20px 50px -20px rgba(0, 0, 0, .8);
    opacity: 0; transform: translateY(20px);
    transition: opacity .55s ease, transform .55s ease;
}
.ld-story--pro[data-state="1"] .ld-overlay-card,
.ld-story--pro[data-state="2"] .ld-overlay-card { opacity: 1; transform: none; }
.ld-overlay-card b { font-size: .86rem; }
.ld-overlay-card > em { font-style: normal; font-size: .68rem; color: var(--accent-amber); margin-left: .45rem; }
.ld-overlay-row { display: flex; justify-content: space-between; font-size: .76rem; color: var(--text-secondary); margin-top: .45rem; }
.ld-overlay-row b { color: var(--text-primary); }
.ld-shield {
    position: absolute; left: 1rem; bottom: 1rem; right: 1rem;
    font-size: .74rem; color: var(--accent-purple); text-align: center;
    background: var(--accent-purple-dim); border: 1px solid color-mix(in srgb, var(--accent-purple) 40%, transparent);
    border-radius: 10px; padding: .45rem .6rem;
    opacity: 0; transition: opacity .55s ease;
}
.ld-story--pro[data-state="2"] .ld-shield { opacity: 1; }

/* ── Plans strip ────────────────────────────────────────────────────── */
.ld-plans { padding: 5rem 0 3rem; border-top: 1px solid var(--border-subtle); }
.ld-plan-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 1.1rem; max-width: 960px; margin: 0 auto; }
.ld-plan {
    display: block; background: var(--bg-card); border: 1px solid var(--border-color);
    border-radius: 16px; padding: 1.5rem 1.4rem; color: inherit;
    transition: transform .3s ease, border-color .3s ease, box-shadow .3s ease;
}
.ld-plan:hover { transform: translateY(-4px); }
.ld-plan--basic:hover { border-color: var(--accent-blue); box-shadow: 0 0 34px -14px var(--accent-blue); }
.ld-plan--pro:hover { border-color: var(--accent-purple); box-shadow: 0 0 34px -14px var(--accent-purple); }
.ld-plan:not(.ld-plan--basic):not(.ld-plan--pro):hover { border-color: var(--accent-emerald); box-shadow: 0 0 34px -14px var(--accent-emerald); }
.ld-plan-name { font-family: var(--font-display); font-weight: 700; font-size: .9rem; letter-spacing: .1em; text-transform: uppercase; color: var(--text-muted); }
.ld-plan-price { display: block; font-family: var(--font-display); font-weight: 700; font-size: 2rem; margin: .4rem 0 .5rem; }
.ld-plan-price em { font-style: normal; font-size: .85rem; color: var(--text-muted); }
.ld-plan p { color: var(--text-secondary); font-size: .88rem; line-height: 1.55; min-height: 3.2em; }
.ld-plan-cta { font-weight: 600; font-size: .88rem; color: var(--text-primary); }

/* ── Final CTA ──────────────────────────────────────────────────────── */
.ld-final { position: relative; text-align: center; padding: 5.5rem 0 6rem; overflow: hidden; }
.ld-final-glow {
    position: absolute; inset: auto 0 -40%; height: 120%;
    background: radial-gradient(640px 360px at 50% 100%, var(--accent-purple-dim), transparent 70%);
    pointer-events: none;
}
.ld-final h2 { font-family: var(--font-display); font-size: clamp(1.8rem, 1.2rem + 2.4vw, 2.8rem); margin-bottom: .8rem; }
.ld-final p { color: var(--text-secondary); margin-bottom: 1.6rem; }
.ld-final .hero-actions { justify-content: center; }

/* ── Degradation: mobile, no-JS, reduced motion ─────────────────────── */
@media (max-width: 900px) {
    .js .ld-story { min-height: 0; }
    .js .ld-story-pin { position: static; min-height: 0; display: block; }
    .ld-story-frame { grid-template-columns: 1fr; gap: 1.6rem; }
    .ld-stage { order: -1; }
    .ld-window { transform: none; }
    .js .ld-step { opacity: 1; }
    .ld-hv-grid { grid-template-columns: repeat(2, 1fr); }
    .ld-quickview, .ld-research { position: static; width: auto; margin-top: .7rem; }
}

/* Without JS (or on mobile, where landing.js parks every story at its final
   state) nothing may stay hidden. html:not(.js) can't get data-state, so
   force all stage layers visible and all steps active-looking. */
html:not(.js) .ld-story-pin { position: static; }
html:not(.js) .ld-step { opacity: 1; }
html:not(.js) .ld-quickview { display: none; }
html:not(.js) .ld-research, html:not(.js) .ld-chip--pin, html:not(.js) .ld-tile,
html:not(.js) .ld-segment--proposed, html:not(.js) .ld-bench-foot,
html:not(.js) .ld-chip--private, html:not(.js) .ld-overlay-card,
html:not(.js) .ld-shield, html:not(.js) .ld-key em { opacity: 1; transform: none; }
html:not(.js) .ld-research-row i::after { transform: scaleX(1); }

@media (prefers-reduced-motion: reduce) {
    .ld *, .ld *::before, .ld *::after {
        animation: none !important;
        transition: none !important;
    }
    .js .ld-story { min-height: 0; }
    .js .ld-story-pin { position: static; min-height: 0; }
    .js .ld-step { opacity: 1; }
    .ld-window { transform: none; }
}
