/* ZappFlow motion system: restrained, viewport-triggered, transform-safe. */
:root{--zf-motion-ease:cubic-bezier(.22,1,.36,1);--zf-motion-soft:cubic-bezier(.16,1,.3,1)}

/* Safe outer reveals. `translate` is independent from existing transform geometry. */
html.zf-motion body[data-zf-motion-profile="home"] .reveal:not(.hero-copy):not(.hero-visual),
html.zf-motion body[data-zf-motion-profile="software"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
html.zf-motion body[data-zf-motion-profile="automation"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
html.zf-motion body[data-zf-motion-profile="data"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
html.zf-motion body[data-zf-motion-profile="ai"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
html.zf-motion body[data-zf-motion-profile="web"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
html.zf-motion body[data-zf-motion-profile="work"] main > section:not(.work-hero):not(.zf-footer-left):not(.zf-footer-project) > .work-wrap,
html.zf-motion body[data-zf-motion-profile="about"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
html.zf-motion body[data-zf-motion-profile="journal"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
html.zf-motion body[data-zf-motion-profile="contact"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
html.zf-motion body[data-zf-motion-profile="legal"] main > section.legal-section,
html.zf-motion body[data-zf-motion-profile="article"] main > section.related > .wrap{opacity:0;translate:0 24px;transition:opacity .50s var(--zf-motion-ease),translate .72s var(--zf-motion-soft);will-change:opacity,translate}
html.zf-motion body[data-zf-motion-profile="home"] .reveal:not(.hero-copy):not(.hero-visual).zf-in,
html.zf-motion body[data-zf-motion-profile="software"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap.zf-in,
html.zf-motion body[data-zf-motion-profile="automation"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap.zf-in,
html.zf-motion body[data-zf-motion-profile="data"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap.zf-in,
html.zf-motion body[data-zf-motion-profile="ai"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap.zf-in,
html.zf-motion body[data-zf-motion-profile="web"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap.zf-in,
html.zf-motion body[data-zf-motion-profile="work"] main > section:not(.work-hero):not(.zf-footer-left):not(.zf-footer-project) > .work-wrap.zf-in,
html.zf-motion body[data-zf-motion-profile="about"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap.zf-in,
html.zf-motion body[data-zf-motion-profile="journal"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap.zf-in,
html.zf-motion body[data-zf-motion-profile="contact"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap.zf-in,
html.zf-motion body[data-zf-motion-profile="legal"] main > section.legal-section.zf-in,
html.zf-motion body[data-zf-motion-profile="article"] main > section.related > .wrap.zf-in{opacity:1;translate:0 0;will-change:auto}

/* Hero sequence. */
html.zf-motion body[data-zf-motion-profile="home"] .hero-copy,
html.zf-motion body[data-zf-motion-profile="home"] .hero-visual,
html.zf-motion body[data-zf-motion-profile="software"] .hero .hero-grid > .hero-copy,
html.zf-motion body[data-zf-motion-profile="software"] .hero .hero-grid > .system-stack,
html.zf-motion body[data-zf-motion-profile="automation"] .hero .hero-grid > .hero-copy,
html.zf-motion body[data-zf-motion-profile="automation"] .hero .hero-grid > .fabric,
html.zf-motion body[data-zf-motion-profile="data"] .hero .hero-grid > .hero-copy,
html.zf-motion body[data-zf-motion-profile="data"] .hero .hero-grid > .prov-scene,
html.zf-motion body[data-zf-motion-profile="ai"] .hero .hero-grid > .hero-copy,
html.zf-motion body[data-zf-motion-profile="ai"] .hero .hero-grid > .trace-scene,
html.zf-motion body[data-zf-motion-profile="web"] .hero .hero-grid > .hero-copy,
html.zf-motion body[data-zf-motion-profile="web"] .hero .hero-grid > .site-scene,
html.zf-motion body[data-zf-motion-profile="work"] .work-hero .work-hero-grid > :nth-child(1),
html.zf-motion body[data-zf-motion-profile="work"] .work-hero .work-hero-grid > :nth-child(2),
html.zf-motion body[data-zf-motion-profile="about"] .hero .hero-grid > .hero-copy,
html.zf-motion body[data-zf-motion-profile="about"] .hero .hero-grid > .converge,
html.zf-motion body[data-zf-motion-profile="journal"] .hero .hero-grid > :nth-child(1),
html.zf-motion body[data-zf-motion-profile="journal"] .hero .hero-grid > :nth-child(2),
html.zf-motion body[data-zf-motion-profile="contact"] .hero .hero-grid > :nth-child(1),
html.zf-motion body[data-zf-motion-profile="contact"] .hero .hero-grid > :nth-child(2),
html.zf-motion body[data-zf-motion-profile="legal"] .hero .hero-grid > :nth-child(1),
html.zf-motion body[data-zf-motion-profile="legal"] .hero .hero-grid > :nth-child(2),
html.zf-motion body[data-zf-motion-profile="article"] .article-hero .article-hero-inner,
html.zf-motion body[data-zf-motion-profile="article"] .hero-diagram-wrap > .wrap{opacity:0;translate:0 22px;transition:opacity .58s var(--zf-motion-ease),translate .82s var(--zf-motion-soft)}
html.zf-motion.zf-page-ready body[data-zf-motion-profile] .hero .hero-grid > *,
html.zf-motion.zf-page-ready body[data-zf-motion-profile="work"] .work-hero .work-hero-grid > *,
html.zf-motion.zf-page-ready body[data-zf-motion-profile="article"] .article-hero .article-hero-inner,
html.zf-motion.zf-page-ready body[data-zf-motion-profile="article"] .hero-diagram-wrap > .wrap{opacity:1;translate:0 0}
html.zf-motion body[data-zf-motion-profile="home"] .hero-copy{transition-delay:0.04s}html.zf-motion body[data-zf-motion-profile="home"] .hero-visual{transition-delay:0.15s}html.zf-motion body[data-zf-motion-profile="software"] .hero .hero-grid > .hero-copy{transition-delay:0.04s}html.zf-motion body[data-zf-motion-profile="software"] .hero .hero-grid > .system-stack{transition-delay:0.15s}html.zf-motion body[data-zf-motion-profile="automation"] .hero .hero-grid > .hero-copy{transition-delay:0.04s}html.zf-motion body[data-zf-motion-profile="automation"] .hero .hero-grid > .fabric{transition-delay:0.15s}html.zf-motion body[data-zf-motion-profile="data"] .hero .hero-grid > .hero-copy{transition-delay:0.04s}html.zf-motion body[data-zf-motion-profile="data"] .hero .hero-grid > .prov-scene{transition-delay:0.15s}html.zf-motion body[data-zf-motion-profile="ai"] .hero .hero-grid > .hero-copy{transition-delay:0.04s}html.zf-motion body[data-zf-motion-profile="ai"] .hero .hero-grid > .trace-scene{transition-delay:0.15s}html.zf-motion body[data-zf-motion-profile="web"] .hero .hero-grid > .hero-copy{transition-delay:0.04s}html.zf-motion body[data-zf-motion-profile="web"] .hero .hero-grid > .site-scene{transition-delay:0.15s}html.zf-motion body[data-zf-motion-profile="work"] .work-hero .work-hero-grid > :nth-child(1){transition-delay:0.04s}html.zf-motion body[data-zf-motion-profile="work"] .work-hero .work-hero-grid > :nth-child(2){transition-delay:0.15s}html.zf-motion body[data-zf-motion-profile="about"] .hero .hero-grid > .hero-copy{transition-delay:0.04s}html.zf-motion body[data-zf-motion-profile="about"] .hero .hero-grid > .converge{transition-delay:0.15s}html.zf-motion body[data-zf-motion-profile="journal"] .hero .hero-grid > :nth-child(1){transition-delay:0.04s}html.zf-motion body[data-zf-motion-profile="journal"] .hero .hero-grid > :nth-child(2){transition-delay:0.15s}html.zf-motion body[data-zf-motion-profile="contact"] .hero .hero-grid > :nth-child(1){transition-delay:0.04s}html.zf-motion body[data-zf-motion-profile="contact"] .hero .hero-grid > :nth-child(2){transition-delay:0.15s}html.zf-motion body[data-zf-motion-profile="legal"] .hero .hero-grid > :nth-child(1){transition-delay:0.04s}html.zf-motion body[data-zf-motion-profile="legal"] .hero .hero-grid > :nth-child(2){transition-delay:0.15s}html.zf-motion body[data-zf-motion-profile="article"] .article-hero .article-hero-inner{transition-delay:0.04s}html.zf-motion body[data-zf-motion-profile="article"] .hero-diagram-wrap > .wrap{transition-delay:0.15s}

/* Small information bands fade rather than travel. */
html.zf-motion body[data-zf-motion-profile="automation"] .breadth > .wrap,
html.zf-motion body[data-zf-motion-profile="data"] .strip > .wrap,
html.zf-motion body[data-zf-motion-profile="ai"] .strip > .wrap,
html.zf-motion body[data-zf-motion-profile="web"] .strip > .wrap{opacity:0;transition:opacity .42s ease}
html.zf-motion body[data-zf-motion-profile="automation"] .breadth > .wrap.zf-fade-in,
html.zf-motion body[data-zf-motion-profile="data"] .strip > .wrap.zf-fade-in,
html.zf-motion body[data-zf-motion-profile="ai"] .strip > .wrap.zf-fade-in,
html.zf-motion body[data-zf-motion-profile="web"] .strip > .wrap.zf-fade-in{opacity:1}

/* Editorial / card sequencing. */
html.zf-motion body[data-zf-motion-profile="home"] .more-grid > *,
html.zf-motion body[data-zf-motion-profile="home"] .steps > *,
html.zf-motion body[data-zf-motion-profile="home"] .review-grid > article,
html.zf-motion body[data-zf-motion-profile="software"] .builds .wrap > .build-row,
html.zf-motion body[data-zf-motion-profile="software"] .process-grid > *,
html.zf-motion body[data-zf-motion-profile="automation"] .automate-list > *,
html.zf-motion body[data-zf-motion-profile="automation"] .reliable-grid > *,
html.zf-motion body[data-zf-motion-profile="automation"] .process-grid > *,
html.zf-motion body[data-zf-motion-profile="data"] .jobs-list > *,
html.zf-motion body[data-zf-motion-profile="data"] .quality-grid > *,
html.zf-motion body[data-zf-motion-profile="data"] .process-grid > *,
html.zf-motion body[data-zf-motion-profile="ai"] .cap-list > *,
html.zf-motion body[data-zf-motion-profile="ai"] .guard-grid > *,
html.zf-motion body[data-zf-motion-profile="ai"] .process-grid > *,
html.zf-motion body[data-zf-motion-profile="web"] .build-list > *,
html.zf-motion body[data-zf-motion-profile="web"] .quality-grid > *,
html.zf-motion body[data-zf-motion-profile="web"] .process-grid > *,
html.zf-motion body[data-zf-motion-profile="work"] .work-index-grid > a,
html.zf-motion body[data-zf-motion-profile="work"] .project-grid > *,
html.zf-motion body[data-zf-motion-profile="about"] .principle-list > *,
html.zf-motion body[data-zf-motion-profile="journal"] .post-grid > .post-card,
html.zf-motion body[data-zf-motion-profile="journal"] .notes-list > *,
html.zf-motion body[data-zf-motion-profile="contact"] .reassure-grid > *,
html.zf-motion body[data-zf-motion-profile="article"] .related-grid > .related-card{opacity:0;translate:0 13px;transition:opacity .42s var(--zf-motion-ease),translate .58s var(--zf-motion-ease)}
html.zf-motion body[data-zf-motion-profile="home"] .more-grid.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="home"] .steps.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="home"] .review-grid.zf-stagger-in > article,
html.zf-motion body[data-zf-motion-profile="software"] .builds .wrap.zf-stagger-in > .build-row,
html.zf-motion body[data-zf-motion-profile="software"] .process-grid.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="automation"] .automate-list.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="automation"] .reliable-grid.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="automation"] .process-grid.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="data"] .jobs-list.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="data"] .quality-grid.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="data"] .process-grid.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="ai"] .cap-list.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="ai"] .guard-grid.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="ai"] .process-grid.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="web"] .build-list.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="web"] .quality-grid.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="web"] .process-grid.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="work"] .work-index-grid.zf-stagger-in > a,
html.zf-motion body[data-zf-motion-profile="work"] .project-grid.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="about"] .principle-list.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="journal"] .post-grid.zf-stagger-in > .post-card,
html.zf-motion body[data-zf-motion-profile="journal"] .notes-list.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="contact"] .reassure-grid.zf-stagger-in > *,
html.zf-motion body[data-zf-motion-profile="article"] .related-grid.zf-stagger-in > .related-card{opacity:1;translate:0 0}

/* Stagger cadence kept short so it reads as hierarchy, not theatre. */
html.zf-motion .zf-stagger-in > :nth-child(1){transition-delay:.03s}
html.zf-motion .zf-stagger-in > :nth-child(2){transition-delay:.08s}
html.zf-motion .zf-stagger-in > :nth-child(3){transition-delay:.13s}
html.zf-motion .zf-stagger-in > :nth-child(4){transition-delay:.18s}
html.zf-motion .zf-stagger-in > :nth-child(5){transition-delay:.23s}
html.zf-motion .zf-stagger-in > :nth-child(6){transition-delay:.28s}
html.zf-motion .zf-stagger-in > :nth-child(7){transition-delay:.33s}
html.zf-motion .zf-stagger-in > :nth-child(8){transition-delay:.38s}

/* Product/UI visuals assemble with opacity only. Their existing transform/layout is untouched. */
html.zf-motion body[data-zf-motion-profile="home"] .patchboard > *,
html.zf-motion body[data-zf-motion-profile="software"] .system-stack > *,
html.zf-motion body[data-zf-motion-profile="software"] .problem-board > *,
html.zf-motion body[data-zf-motion-profile="software"] .composer-shell > *,
html.zf-motion body[data-zf-motion-profile="software"] .arch-stack > *,
html.zf-motion body[data-zf-motion-profile="automation"] .fabric > *,
html.zf-motion body[data-zf-motion-profile="automation"] .problem-stack > *,
html.zf-motion body[data-zf-motion-profile="automation"] .runner-shell > *,
html.zf-motion body[data-zf-motion-profile="automation"] .connector-board > *,
html.zf-motion body[data-zf-motion-profile="data"] .prov-scene > *,
html.zf-motion body[data-zf-motion-profile="data"] .builder-shell > *,
html.zf-motion body[data-zf-motion-profile="data"] .scrape-board > *,
html.zf-motion body[data-zf-motion-profile="data"] .output-board > *,
html.zf-motion body[data-zf-motion-profile="ai"] .trace-scene > *,
html.zf-motion body[data-zf-motion-profile="ai"] .system-stage > *,
html.zf-motion body[data-zf-motion-profile="ai"] .decision-shell > *,
html.zf-motion body[data-zf-motion-profile="ai"] .access-map > *,
html.zf-motion body[data-zf-motion-profile="ai"] .knowledge-board > *,
html.zf-motion body[data-zf-motion-profile="web"] .site-scene > *,
html.zf-motion body[data-zf-motion-profile="web"] .layer-stage > *,
html.zf-motion body[data-zf-motion-profile="web"] .lab-shell > *,
html.zf-motion body[data-zf-motion-profile="web"] .cms-board > *,
html.zf-motion body[data-zf-motion-profile="web"] .form-flow > *,
html.zf-motion body[data-zf-motion-profile="about"] .converge > *,
html.zf-motion body[data-zf-motion-profile="about"] .thesis-compare > *,
html.zf-motion body[data-zf-motion-profile="about"] .founder-stage > *,
html.zf-motion body[data-zf-motion-profile="about"] .lens-shell > *,
html.zf-motion body[data-zf-motion-profile="about"] .location-board > *,
html.zf-motion body[data-zf-motion-profile="journal"] .journal-board > *,
html.zf-motion body[data-zf-motion-profile="journal"] .featured-card > *,
html.zf-motion body[data-zf-motion-profile="contact"] .hero-side > *,
html.zf-motion body[data-zf-motion-profile="contact"] .fit-board > *{opacity:0;transition:opacity .38s ease}
html.zf-motion body[data-zf-motion-profile="home"] .patchboard.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="software"] .system-stack.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="software"] .problem-board.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="software"] .composer-shell.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="software"] .arch-stack.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="automation"] .fabric.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="automation"] .problem-stack.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="automation"] .runner-shell.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="automation"] .connector-board.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="data"] .prov-scene.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="data"] .builder-shell.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="data"] .scrape-board.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="data"] .output-board.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="ai"] .trace-scene.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="ai"] .system-stage.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="ai"] .decision-shell.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="ai"] .access-map.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="ai"] .knowledge-board.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="web"] .site-scene.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="web"] .layer-stage.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="web"] .lab-shell.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="web"] .cms-board.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="web"] .form-flow.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="about"] .converge.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="about"] .thesis-compare.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="about"] .founder-stage.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="about"] .lens-shell.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="about"] .location-board.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="journal"] .journal-board.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="journal"] .featured-card.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="contact"] .hero-side.zf-ui-in > *,
html.zf-motion body[data-zf-motion-profile="contact"] .fit-board.zf-ui-in > *{opacity:1}
html.zf-motion .zf-ui-in > :nth-child(1){transition-delay:.06s}
html.zf-motion .zf-ui-in > :nth-child(2){transition-delay:.12s}
html.zf-motion .zf-ui-in > :nth-child(3){transition-delay:.18s}
html.zf-motion .zf-ui-in > :nth-child(4){transition-delay:.24s}
html.zf-motion .zf-ui-in > :nth-child(5){transition-delay:.30s}
html.zf-motion .zf-ui-in > :nth-child(6){transition-delay:.36s}
html.zf-motion .zf-ui-in > :nth-child(n+7){transition-delay:.40s}


/* Homepage integrations: preserve every panel/port position. */
html.zf-motion body[data-zf-motion-profile="home"] .patchboard .patch-bank,
html.zf-motion body[data-zf-motion-profile="home"] .patchboard .patch-logic,
html.zf-motion body[data-zf-motion-profile="home"] .patchboard .patch-detail{opacity:0;transition:opacity .42s ease}
html.zf-motion body[data-zf-motion-profile="home"] .patchboard.zf-ui-in .patch-bank-left{opacity:1;transition-delay:.12s}
html.zf-motion body[data-zf-motion-profile="home"] .patchboard.zf-ui-in .patch-logic{opacity:1;transition-delay:.22s}
html.zf-motion body[data-zf-motion-profile="home"] .patchboard.zf-ui-in .patch-bank-right{opacity:1;transition-delay:.30s}
html.zf-motion body[data-zf-motion-profile="home"] .patchboard.zf-ui-in .patch-detail{opacity:1;transition-delay:.40s}
html.zf-motion body[data-zf-motion-profile="home"] .patchboard .patch-port{opacity:0;transition:opacity .34s ease,border-color .18s ease,background-color .18s ease}
html.zf-motion body[data-zf-motion-profile="home"] .patchboard.zf-ui-in .patch-port{opacity:1}
html.zf-motion body[data-zf-motion-profile="home"] .patchboard.zf-ui-in .patch-bank-left .patch-port:nth-of-type(1){transition-delay:.18s}
html.zf-motion body[data-zf-motion-profile="home"] .patchboard.zf-ui-in .patch-bank-left .patch-port:nth-of-type(2){transition-delay:.23s}
html.zf-motion body[data-zf-motion-profile="home"] .patchboard.zf-ui-in .patch-bank-left .patch-port:nth-of-type(3){transition-delay:.28s}
html.zf-motion body[data-zf-motion-profile="home"] .patchboard.zf-ui-in .patch-bank-left .patch-port:nth-of-type(4){transition-delay:.33s}
html.zf-motion body[data-zf-motion-profile="home"] .patchboard.zf-ui-in .patch-bank-right .patch-port:nth-of-type(1){transition-delay:.34s}
html.zf-motion body[data-zf-motion-profile="home"] .patchboard.zf-ui-in .patch-bank-right .patch-port:nth-of-type(2){transition-delay:.39s}
html.zf-motion body[data-zf-motion-profile="home"] .patchboard.zf-ui-in .patch-bank-right .patch-port:nth-of-type(3){transition-delay:.44s}
html.zf-motion body[data-zf-motion-profile="home"] .patchboard.zf-ui-in .patch-bank-right .patch-port:nth-of-type(4){transition-delay:.49s}

/* Homepage custom software: opacity only on the rotated cards/window. */
html.zf-motion body[data-zf-motion-profile="home"] .software-scene .messy-card,
html.zf-motion body[data-zf-motion-profile="home"] .software-scene .software-window{opacity:0;transition:opacity .42s ease}
html.zf-motion body[data-zf-motion-profile="home"] .software-scene.zf-product-in .messy-card:nth-child(1){opacity:1;transition-delay:.10s}
html.zf-motion body[data-zf-motion-profile="home"] .software-scene.zf-product-in .messy-card:nth-child(2){opacity:1;transition-delay:.19s}
html.zf-motion body[data-zf-motion-profile="home"] .software-scene.zf-product-in .messy-card:nth-child(3){opacity:1;transition-delay:.28s}
html.zf-motion body[data-zf-motion-profile="home"] .software-scene.zf-product-in .software-window{opacity:1;transition-delay:.38s}
html.zf-motion body[data-zf-motion-profile="home"] .software-list > span{opacity:0;transition:opacity .36s ease}
html.zf-motion body[data-zf-motion-profile="home"] .software-copy.zf-product-in .software-list > span:nth-child(1){opacity:1;transition-delay:.16s}
html.zf-motion body[data-zf-motion-profile="home"] .software-copy.zf-product-in .software-list > span:nth-child(2){opacity:1;transition-delay:.22s}
html.zf-motion body[data-zf-motion-profile="home"] .software-copy.zf-product-in .software-list > span:nth-child(3){opacity:1;transition-delay:.28s}
html.zf-motion body[data-zf-motion-profile="home"] .software-copy.zf-product-in .software-list > span:nth-child(4){opacity:1;transition-delay:.34s}

/* Existing functional homepage demos stay in charge of their own internals. */
html.zf-motion body[data-zf-motion-profile="home"] .data2-machine{transition-property:opacity,translate,box-shadow!important}
html.zf-motion body[data-zf-motion-profile="home"] .data2-machine.zf-product-in{box-shadow:0 24px 64px rgba(22,18,34,.12)}
html.zf-motion body[data-zf-motion-profile="home"] .ai2-shell{transition:box-shadow .55s ease}
html.zf-motion body[data-zf-motion-profile="home"] .ai2-shell.zf-product-in{box-shadow:0 24px 72px rgba(20,16,32,.14)}
html.zf-motion body[data-zf-motion-profile="home"] .web14-stage .web14-score,
html.zf-motion body[data-zf-motion-profile="home"] .web14-stage .web14-check{opacity:0;transition:opacity .36s ease}
html.zf-motion body[data-zf-motion-profile="home"] .web14-stage.zf-product-in .web14-score,
html.zf-motion body[data-zf-motion-profile="home"] .web14-stage.zf-product-in .web14-check{opacity:1}


/* Homepage hero product tiles, if present, quietly populate after the shell. */
html.zf-motion body[data-zf-motion-profile="home"] .hero-visual [data-hero-tile]{opacity:0;transition:opacity .38s ease}
html.zf-motion.zf-page-ready body[data-zf-motion-profile="home"] .hero-visual [data-hero-tile]{opacity:1}
html.zf-motion.zf-page-ready body[data-zf-motion-profile="home"] .hero-visual [data-hero-tile]:nth-of-type(1){transition-delay:.48s}
html.zf-motion.zf-page-ready body[data-zf-motion-profile="home"] .hero-visual [data-hero-tile]:nth-of-type(2){transition-delay:.56s}
html.zf-motion.zf-page-ready body[data-zf-motion-profile="home"] .hero-visual [data-hero-tile]:nth-of-type(3){transition-delay:.64s}
html.zf-motion.zf-page-ready body[data-zf-motion-profile="home"] .hero-visual [data-hero-tile]:nth-of-type(4){transition-delay:.72s}
html.zf-motion.zf-page-ready body[data-zf-motion-profile="home"] .hero-visual [data-hero-tile]:nth-of-type(5){transition-delay:.80s}

/* Homepage product activation hooks. */
html.zf-motion body[data-zf-motion-profile="home"] .data2-machine.zf-product-in,
html.zf-motion body[data-zf-motion-profile="home"] .ai2-shell.zf-product-in{will-change:auto}

/* Tiny physical response on true controls only. */
@media (hover:hover) and (pointer:fine){
  html.zf-motion :is(.btn,.nav-cta,.nav-cta-btn,.hero-actions a,.work-cta a,.zf-footer-project-actions a){transition:translate .20s var(--zf-motion-ease),box-shadow .20s ease,background-color .20s ease,color .20s ease}
  html.zf-motion :is(.btn,.nav-cta,.nav-cta-btn,.hero-actions a,.work-cta a,.zf-footer-project-actions a):hover{translate:0 -2px}
}

/* Mobile: same language, less travel and less waiting. */
@media(max-width:700px){
  html.zf-motion body[data-zf-motion-profile="home"] .reveal:not(.hero-copy):not(.hero-visual),
  html.zf-motion body[data-zf-motion-profile="software"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
  html.zf-motion body[data-zf-motion-profile="automation"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
  html.zf-motion body[data-zf-motion-profile="data"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
  html.zf-motion body[data-zf-motion-profile="ai"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
  html.zf-motion body[data-zf-motion-profile="web"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
  html.zf-motion body[data-zf-motion-profile="work"] main > section:not(.work-hero):not(.zf-footer-left):not(.zf-footer-project) > .work-wrap,
  html.zf-motion body[data-zf-motion-profile="about"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
  html.zf-motion body[data-zf-motion-profile="journal"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
  html.zf-motion body[data-zf-motion-profile="contact"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
  html.zf-motion body[data-zf-motion-profile="legal"] main > section.legal-section,
  html.zf-motion body[data-zf-motion-profile="article"] main > section.related > .wrap{translate:0 17px;transition-duration:.46s,.62s}
  html.zf-motion body[data-zf-motion-profile="home"] .hero-copy,
  html.zf-motion body[data-zf-motion-profile="home"] .hero-visual,
  html.zf-motion body[data-zf-motion-profile="software"] .hero .hero-grid > .hero-copy,
  html.zf-motion body[data-zf-motion-profile="software"] .hero .hero-grid > .system-stack,
  html.zf-motion body[data-zf-motion-profile="automation"] .hero .hero-grid > .hero-copy,
  html.zf-motion body[data-zf-motion-profile="automation"] .hero .hero-grid > .fabric,
  html.zf-motion body[data-zf-motion-profile="data"] .hero .hero-grid > .hero-copy,
  html.zf-motion body[data-zf-motion-profile="data"] .hero .hero-grid > .prov-scene,
  html.zf-motion body[data-zf-motion-profile="ai"] .hero .hero-grid > .hero-copy,
  html.zf-motion body[data-zf-motion-profile="ai"] .hero .hero-grid > .trace-scene,
  html.zf-motion body[data-zf-motion-profile="web"] .hero .hero-grid > .hero-copy,
  html.zf-motion body[data-zf-motion-profile="web"] .hero .hero-grid > .site-scene,
  html.zf-motion body[data-zf-motion-profile="work"] .work-hero .work-hero-grid > :nth-child(1),
  html.zf-motion body[data-zf-motion-profile="work"] .work-hero .work-hero-grid > :nth-child(2),
  html.zf-motion body[data-zf-motion-profile="about"] .hero .hero-grid > .hero-copy,
  html.zf-motion body[data-zf-motion-profile="about"] .hero .hero-grid > .converge,
  html.zf-motion body[data-zf-motion-profile="journal"] .hero .hero-grid > :nth-child(1),
  html.zf-motion body[data-zf-motion-profile="journal"] .hero .hero-grid > :nth-child(2),
  html.zf-motion body[data-zf-motion-profile="contact"] .hero .hero-grid > :nth-child(1),
  html.zf-motion body[data-zf-motion-profile="contact"] .hero .hero-grid > :nth-child(2),
  html.zf-motion body[data-zf-motion-profile="legal"] .hero .hero-grid > :nth-child(1),
  html.zf-motion body[data-zf-motion-profile="legal"] .hero .hero-grid > :nth-child(2),
  html.zf-motion body[data-zf-motion-profile="article"] .article-hero .article-hero-inner,
  html.zf-motion body[data-zf-motion-profile="article"] .hero-diagram-wrap > .wrap{translate:0 16px;transition-duration:.50s,.68s}
  html.zf-motion body[data-zf-motion-profile="home"] .more-grid > *,
  html.zf-motion body[data-zf-motion-profile="home"] .steps > *,
  html.zf-motion body[data-zf-motion-profile="home"] .review-grid > article,
  html.zf-motion body[data-zf-motion-profile="software"] .builds .wrap > .build-row,
  html.zf-motion body[data-zf-motion-profile="software"] .process-grid > *,
  html.zf-motion body[data-zf-motion-profile="automation"] .automate-list > *,
  html.zf-motion body[data-zf-motion-profile="automation"] .reliable-grid > *,
  html.zf-motion body[data-zf-motion-profile="automation"] .process-grid > *,
  html.zf-motion body[data-zf-motion-profile="data"] .jobs-list > *,
  html.zf-motion body[data-zf-motion-profile="data"] .quality-grid > *,
  html.zf-motion body[data-zf-motion-profile="data"] .process-grid > *,
  html.zf-motion body[data-zf-motion-profile="ai"] .cap-list > *,
  html.zf-motion body[data-zf-motion-profile="ai"] .guard-grid > *,
  html.zf-motion body[data-zf-motion-profile="ai"] .process-grid > *,
  html.zf-motion body[data-zf-motion-profile="web"] .build-list > *,
  html.zf-motion body[data-zf-motion-profile="web"] .quality-grid > *,
  html.zf-motion body[data-zf-motion-profile="web"] .process-grid > *,
  html.zf-motion body[data-zf-motion-profile="work"] .work-index-grid > a,
  html.zf-motion body[data-zf-motion-profile="work"] .project-grid > *,
  html.zf-motion body[data-zf-motion-profile="about"] .principle-list > *,
  html.zf-motion body[data-zf-motion-profile="journal"] .post-grid > .post-card,
  html.zf-motion body[data-zf-motion-profile="journal"] .notes-list > *,
  html.zf-motion body[data-zf-motion-profile="contact"] .reassure-grid > *,
  html.zf-motion body[data-zf-motion-profile="article"] .related-grid > .related-card{translate:0 9px;transition-duration:.38s,.50s}
}

/* Respect reduced motion without changing functional UI state. */
@media(prefers-reduced-motion:reduce){
  html.zf-motion body[data-zf-motion-profile="home"] .reveal:not(.hero-copy):not(.hero-visual),
  html.zf-motion body[data-zf-motion-profile="software"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
  html.zf-motion body[data-zf-motion-profile="automation"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
  html.zf-motion body[data-zf-motion-profile="data"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
  html.zf-motion body[data-zf-motion-profile="ai"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
  html.zf-motion body[data-zf-motion-profile="web"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
  html.zf-motion body[data-zf-motion-profile="work"] main > section:not(.work-hero):not(.zf-footer-left):not(.zf-footer-project) > .work-wrap,
  html.zf-motion body[data-zf-motion-profile="about"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
  html.zf-motion body[data-zf-motion-profile="journal"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
  html.zf-motion body[data-zf-motion-profile="contact"] main > section:not(.hero):not(.zf-footer-left):not(.zf-footer-project) > .wrap,
  html.zf-motion body[data-zf-motion-profile="legal"] main > section.legal-section,
  html.zf-motion body[data-zf-motion-profile="article"] main > section.related > .wrap,
  html.zf-motion body[data-zf-motion-profile="home"] .hero-copy,
  html.zf-motion body[data-zf-motion-profile="home"] .hero-visual,
  html.zf-motion body[data-zf-motion-profile="software"] .hero .hero-grid > .hero-copy,
  html.zf-motion body[data-zf-motion-profile="software"] .hero .hero-grid > .system-stack,
  html.zf-motion body[data-zf-motion-profile="automation"] .hero .hero-grid > .hero-copy,
  html.zf-motion body[data-zf-motion-profile="automation"] .hero .hero-grid > .fabric,
  html.zf-motion body[data-zf-motion-profile="data"] .hero .hero-grid > .hero-copy,
  html.zf-motion body[data-zf-motion-profile="data"] .hero .hero-grid > .prov-scene,
  html.zf-motion body[data-zf-motion-profile="ai"] .hero .hero-grid > .hero-copy,
  html.zf-motion body[data-zf-motion-profile="ai"] .hero .hero-grid > .trace-scene,
  html.zf-motion body[data-zf-motion-profile="web"] .hero .hero-grid > .hero-copy,
  html.zf-motion body[data-zf-motion-profile="web"] .hero .hero-grid > .site-scene,
  html.zf-motion body[data-zf-motion-profile="work"] .work-hero .work-hero-grid > :nth-child(1),
  html.zf-motion body[data-zf-motion-profile="work"] .work-hero .work-hero-grid > :nth-child(2),
  html.zf-motion body[data-zf-motion-profile="about"] .hero .hero-grid > .hero-copy,
  html.zf-motion body[data-zf-motion-profile="about"] .hero .hero-grid > .converge,
  html.zf-motion body[data-zf-motion-profile="journal"] .hero .hero-grid > :nth-child(1),
  html.zf-motion body[data-zf-motion-profile="journal"] .hero .hero-grid > :nth-child(2),
  html.zf-motion body[data-zf-motion-profile="contact"] .hero .hero-grid > :nth-child(1),
  html.zf-motion body[data-zf-motion-profile="contact"] .hero .hero-grid > :nth-child(2),
  html.zf-motion body[data-zf-motion-profile="legal"] .hero .hero-grid > :nth-child(1),
  html.zf-motion body[data-zf-motion-profile="legal"] .hero .hero-grid > :nth-child(2),
  html.zf-motion body[data-zf-motion-profile="article"] .article-hero .article-hero-inner,
  html.zf-motion body[data-zf-motion-profile="article"] .hero-diagram-wrap > .wrap,
  html.zf-motion body[data-zf-motion-profile="automation"] .breadth > .wrap,
  html.zf-motion body[data-zf-motion-profile="data"] .strip > .wrap,
  html.zf-motion body[data-zf-motion-profile="ai"] .strip > .wrap,
  html.zf-motion body[data-zf-motion-profile="web"] .strip > .wrap,
  html.zf-motion body[data-zf-motion-profile="home"] .more-grid > *,
  html.zf-motion body[data-zf-motion-profile="home"] .steps > *,
  html.zf-motion body[data-zf-motion-profile="home"] .review-grid > article,
  html.zf-motion body[data-zf-motion-profile="software"] .builds .wrap > .build-row,
  html.zf-motion body[data-zf-motion-profile="software"] .process-grid > *,
  html.zf-motion body[data-zf-motion-profile="automation"] .automate-list > *,
  html.zf-motion body[data-zf-motion-profile="automation"] .reliable-grid > *,
  html.zf-motion body[data-zf-motion-profile="automation"] .process-grid > *,
  html.zf-motion body[data-zf-motion-profile="data"] .jobs-list > *,
  html.zf-motion body[data-zf-motion-profile="data"] .quality-grid > *,
  html.zf-motion body[data-zf-motion-profile="data"] .process-grid > *,
  html.zf-motion body[data-zf-motion-profile="ai"] .cap-list > *,
  html.zf-motion body[data-zf-motion-profile="ai"] .guard-grid > *,
  html.zf-motion body[data-zf-motion-profile="ai"] .process-grid > *,
  html.zf-motion body[data-zf-motion-profile="web"] .build-list > *,
  html.zf-motion body[data-zf-motion-profile="web"] .quality-grid > *,
  html.zf-motion body[data-zf-motion-profile="web"] .process-grid > *,
  html.zf-motion body[data-zf-motion-profile="work"] .work-index-grid > a,
  html.zf-motion body[data-zf-motion-profile="work"] .project-grid > *,
  html.zf-motion body[data-zf-motion-profile="about"] .principle-list > *,
  html.zf-motion body[data-zf-motion-profile="journal"] .post-grid > .post-card,
  html.zf-motion body[data-zf-motion-profile="journal"] .notes-list > *,
  html.zf-motion body[data-zf-motion-profile="contact"] .reassure-grid > *,
  html.zf-motion body[data-zf-motion-profile="article"] .related-grid > .related-card,
  html.zf-motion body[data-zf-motion-profile="home"] .patchboard > *,
  html.zf-motion body[data-zf-motion-profile="software"] .system-stack > *,
  html.zf-motion body[data-zf-motion-profile="software"] .problem-board > *,
  html.zf-motion body[data-zf-motion-profile="software"] .composer-shell > *,
  html.zf-motion body[data-zf-motion-profile="software"] .arch-stack > *,
  html.zf-motion body[data-zf-motion-profile="automation"] .fabric > *,
  html.zf-motion body[data-zf-motion-profile="automation"] .problem-stack > *,
  html.zf-motion body[data-zf-motion-profile="automation"] .runner-shell > *,
  html.zf-motion body[data-zf-motion-profile="automation"] .connector-board > *,
  html.zf-motion body[data-zf-motion-profile="data"] .prov-scene > *,
  html.zf-motion body[data-zf-motion-profile="data"] .builder-shell > *,
  html.zf-motion body[data-zf-motion-profile="data"] .scrape-board > *,
  html.zf-motion body[data-zf-motion-profile="data"] .output-board > *,
  html.zf-motion body[data-zf-motion-profile="ai"] .trace-scene > *,
  html.zf-motion body[data-zf-motion-profile="ai"] .system-stage > *,
  html.zf-motion body[data-zf-motion-profile="ai"] .decision-shell > *,
  html.zf-motion body[data-zf-motion-profile="ai"] .access-map > *,
  html.zf-motion body[data-zf-motion-profile="ai"] .knowledge-board > *,
  html.zf-motion body[data-zf-motion-profile="web"] .site-scene > *,
  html.zf-motion body[data-zf-motion-profile="web"] .layer-stage > *,
  html.zf-motion body[data-zf-motion-profile="web"] .lab-shell > *,
  html.zf-motion body[data-zf-motion-profile="web"] .cms-board > *,
  html.zf-motion body[data-zf-motion-profile="web"] .form-flow > *,
  html.zf-motion body[data-zf-motion-profile="about"] .converge > *,
  html.zf-motion body[data-zf-motion-profile="about"] .thesis-compare > *,
  html.zf-motion body[data-zf-motion-profile="about"] .founder-stage > *,
  html.zf-motion body[data-zf-motion-profile="about"] .lens-shell > *,
  html.zf-motion body[data-zf-motion-profile="about"] .location-board > *,
  html.zf-motion body[data-zf-motion-profile="journal"] .journal-board > *,
  html.zf-motion body[data-zf-motion-profile="journal"] .featured-card > *,
  html.zf-motion body[data-zf-motion-profile="contact"] .hero-side > *,
  html.zf-motion body[data-zf-motion-profile="contact"] .fit-board > *{opacity:1!important;translate:none!important;transition:none!important}
  html.zf-motion body[data-zf-motion-profile="home"] .patchboard .patch-bank,
  html.zf-motion body[data-zf-motion-profile="home"] .patchboard .patch-logic,
  html.zf-motion body[data-zf-motion-profile="home"] .patchboard .patch-detail,
  html.zf-motion body[data-zf-motion-profile="home"] .patchboard .patch-port,
  html.zf-motion body[data-zf-motion-profile="home"] .software-scene .messy-card,
  html.zf-motion body[data-zf-motion-profile="home"] .software-scene .software-window,
  html.zf-motion body[data-zf-motion-profile="home"] .software-list > span,
  html.zf-motion body[data-zf-motion-profile="home"] .web14-stage .web14-score,
  html.zf-motion body[data-zf-motion-profile="home"] .web14-stage .web14-check{opacity:1!important;transition:none!important}
}
