/* Zipify Pages — the product page's own layout, transcribed from the
   `ZipifyPages.dc.html` artboard. Registered as `zp-pages`; enqueued by
   page-pages.php alone, so it never loads on another page.

   Requires tokens.css, theme.css and home.css. home.css is a declared
   dependency (see inc/pages/assets.php) because it carries the shared section
   vocabulary from design spec §6 — `.zp-section`, `.zp-wrap`, `.zp-eyebrow`,
   `.zp-h2`/`.zp-h3`, `.zp-lede`, `.zp-card`, `.zp-cta`, `.zp-grid--*`,
   `.zp-points`, `.zp-on-dark`. Nothing here restates any of them.

   EVERY class in this file is `.zpp-`-prefixed, and that is load-bearing rather
   than stylistic: home.css already defines `.zp-pages` for Home's own Zipify
   Pages *section*, along with `.zp-hero`, `.zp-trust`, `.zp-ocu`,
   `.zp-postprofit`, `.zp-shoprank`, `.zp-ai`, `.zp-plus`, `.zp-founder`,
   `.zp-academy`, `.zp-pricing`, `.zp-ladder`, `.zp-scale`, `.zp-faq-section`
   and `.zp-closing-cta`. A `.zp-`-prefixed name here would collide with one of
   them on a page that loads both stylesheets.

   Colours resolve to tokens.css custom properties. Two permitted exceptions,
   both carried over from home.css's contrast corrections rather than taken
   from the artboard:

   * #6b6e7a replaces the artboard's --ink-500 (#7a7d88) wherever --ink-500 was
     used for small copy on white. --ink-500 measures ~4.0:1 on --surface and so
     fails WCAG AA's 4.5:1 floor; #6b6e7a is the same grey darkened just far
     enough, at 5.08:1 on --surface and 4.82:1 on --ink-050. home.css documents
     the same value for the same reason, and a test there rejects the artboard
     original by literal — do not restore #7a7d88 for text.
   * the interactive-state greys below follow --ink-600/--ink-700, not the
     artboard's lighter inactive greys, for the same floor.

   Alpha-over-ground whites and the navy-tinted shadow literals have no token
   form; theme.css and home.css use the same values. */

/* --- Grounds ---------------------------------------------------------------- */

/* The builder band's own vertical gradient (artboard §9). Not --grad-zipify:
   that is the 135deg masthead diagonal, and this band runs top-to-bottom
   through a third stop. No existing token matches, so it is declared here
   rather than pushed into tokens.css for one page's one band. */
.zpp-builder { --zp-section-bg:linear-gradient(180deg,#0a3a79 0%,#061a3a 55%,#050a18 100%); }

/* --- Element resets --------------------------------------------------------- */

/* The sections use real list, figure and quote elements for their semantics,
   which brings the UA's own margins and list markers with them. Cleared here
   in one place rather than per section. theme.css sets box-sizing globally. */
.zpp-stats__list,
.zpp-stats dt,
.zpp-stats dd,
.zpp-integrations,
.zpp-plan__features { margin:0; padding:0; }
.zpp-integrations,
.zpp-plan__features { list-style:none; }
/* reset.css italicises `<figcaption>`; §12's caption is a plain eyebrow and
   heading, so the slant is cleared along with the UA margin. */
.zpp-proof__item,
.zpp-quote { margin:0; }
.zpp-proof__item figcaption { font-style:normal; }
.zpp-quote__text { margin:0; }
.zpp-hero__badge { margin:0 0 26px; }
.zpp-plan__price { margin:0; }
/* `<cite>` defaults to italic; the brand here is plain, and the quote body
   supplies its own italic. */
.zpp-quote__brand { font-style:normal; }

/* --- Shared wrapper --------------------------------------------------------- */

/* The artboard's own content column: 1240px at 96px/24px, wider and shorter
   than `.zp-wrap`'s 1180px at 112px/48px. Bands that do match `.zp-wrap`
   exactly — the hero and the builder — use `.zp-wrap` and are not restated. */
.zpp-wrap { max-width:1240px; margin:0 auto; padding-inline:24px; }
/* Bands that continue the white ground above them and so open with no top
   padding: the three steps, the guarantee card, the FAQ. */
.zpp-wrap--continue { padding-top:0; }

/* Overrides the marginless shared `.zp-eyebrow`, the way `.zpp-wrap` does `.zp-wrap`. */
.zpp-eyebrow { margin-bottom:18px; }

/* The standard eyebrow + heading block above a section's body. */
.zpp-head { max-width:760px; margin:0 0 44px; }
.zpp-head .zp-h2 { margin:0; }
.zpp-head--lede .zp-h2 { margin:0 0 16px; }
.zpp-lede-wide { margin:0 0 36px; max-width:700px; font-size:18px; line-height:1.6; color:var(--ink-700); }

/* --- Section 1: hero -------------------------------------------------------- */

.zpp-hero { --zp-section-bg:var(--grad-zipify); position:relative; overflow:hidden; }
/* The two decorative overlays: a fine diagonal hatch and a soft blue bloom in
   the top right. Pseudo-elements rather than markup — they carry no meaning. */
.zpp-hero::before,
.zpp-hero::after { content:""; position:absolute; inset:0; pointer-events:none; }
.zpp-hero::before { background:repeating-linear-gradient(135deg,rgba(255,255,255,.014) 0 2px,transparent 2px 7px); }
.zpp-hero::after { background:radial-gradient(880px 440px at 80% 6%,rgba(45,107,228,.3),transparent 70%); }
.zpp-hero .zp-wrap { position:relative; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:36px; align-items:center; }

.zpp-hero__badge { display:inline-flex; align-items:center; gap:10px; margin-bottom:26px; padding:7px 16px; border-radius:var(--r-pill); border:1px solid rgba(255,255,255,.14); background:rgba(255,255,255,.05); font-size:12px; font-weight:700; letter-spacing:.12em; text-transform:uppercase; color:var(--zip-yellow); }

.zpp-hero__title { margin:0 0 22px; font-size:clamp(34px,3.9vw,60px); font-weight:900; letter-spacing:-.028em; line-height:1.02; color:var(--fg-on-dark); }
.zpp-hero__lede { margin:0 0 30px; max-width:520px; font-size:20px; line-height:1.6; color:rgba(255,255,255,.76); }

/* `.zp-points` (home.css) carries the check, the gap and the on-dark copy
   colour. Only the bottom margin differs from its 32px default here. */
.zpp-hero__points { margin-bottom:34px; }

.zpp-hero__ctas { display:flex; flex-wrap:wrap; gap:12px; }
/* The hero's primary button is a touch larger than `.zp-cta`'s 16px/30px. */
.zpp-hero__ctas .zp-cta { padding:17px 32px; }
.zpp-hero__ctas .zp-cta--ghost { padding:17px 28px; }

/* The screenshot deliberately overhangs its column on both sides, as drawn. */
.zpp-hero__shot { position:relative; margin:0 -14% 0 -4%; animation:zppRise 700ms var(--ease-out) both; }
.zpp-hero__shot img { display:block; width:118%; max-width:none; height:auto; }

/* --- Section 2: stats ------------------------------------------------------- */

/* Shares the hero's ground: no seam, no border, and the figures read as the
   hero's own footnote rather than as a white band cutting between the hero and
   the brand marquee below. */
.zpp-stats { position:relative; overflow:hidden; }
.zpp-stats::before { content:""; position:absolute; inset:0; pointer-events:none; background:repeating-linear-gradient(135deg,rgba(255,255,255,.014) 0 2px,transparent 2px 7px); }
.zpp-stats__list { position:relative; max-width:1180px; margin:0 auto; padding:48px; display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:20px 24px; }
.zpp-stat__value { font-size:32px; font-weight:900; letter-spacing:-.024em; line-height:1; color:var(--zip-yellow); }
.zpp-stat__label { margin-top:7px; font-size:11.5px; font-weight:700; letter-spacing:.14em; text-transform:uppercase; color:rgba(255,255,255,.6); }

/* --- Section 3: brand marquee ----------------------------------------------- */

.zpp-marquee { --zp-section-bg:var(--ground-trust); position:relative; overflow:hidden; }
.zpp-marquee__inner { position:relative; z-index:2; padding:40px 0 60px; overflow:hidden; }
.zpp-marquee__eyebrow { margin:0 0 24px; text-align:center; text-wrap:balance; font-size:12px; font-weight:700; letter-spacing:.12em; text-transform:uppercase; color:var(--zip-yellow); opacity:.9; }
.zpp-marquee__viewport { width:100%; overflow:hidden; }
.zpp-marquee__track { display:flex; align-items:stretch; gap:16px; width:max-content; padding-bottom:32px; animation:zppRail 34s linear infinite; }
.zpp-brand { display:flex; flex-direction:column; flex-shrink:0; width:220px; overflow:hidden; border:1px solid var(--ink-200); border-radius:14px; background:var(--surface); box-shadow:0 8px 24px rgba(13,31,78,.1); }
.zpp-brand img { display:block; width:100%; height:180px; object-fit:cover; }
.zpp-brand__name { padding:12px 16px; text-align:center; font-size:16px; font-weight:700; letter-spacing:.03em; color:var(--ink-900); background:var(--surface); }

/* --- Section 4: explore features -------------------------------------------- */

.zpp-features__grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(320px,1fr)); gap:40px; align-items:start; }
.zpp-features__list { display:flex; flex-direction:column; gap:12px; }

/* Each row is a real <button>: it changes state on this page rather than
   navigating, so it is not a link. */
/* `white-space:normal` undoes reset.css's blanket `button{white-space:nowrap}`,
   which otherwise held each row's title and description on one line and clipped
   both at the card's edge. Same reason on `.zpp-pill`. */
.zpp-feature { display:block; width:100%; text-align:left; white-space:normal; font-family:inherit; cursor:pointer; padding:22px 24px; border:1px solid var(--ink-200); border-radius:var(--r-lg); background:var(--surface); transition:background var(--dur-base) var(--ease-out), border-color var(--dur-base) var(--ease-out), box-shadow var(--dur-base) var(--ease-out); }
.zpp-feature__title { display:block; font-size:19px; font-weight:800; letter-spacing:-.015em; color:var(--ink-600); }
/* The description exists in markup for every row and is revealed on the active
   one, so the panel is readable with JavaScript off. */
.zpp-feature__desc { display:none; margin-top:10px; font-size:16px; line-height:1.6; color:rgba(255,255,255,.76); }

.zpp-feature[aria-selected="true"] { background:var(--grad-zipify); border-color:transparent; box-shadow:inset 0 1px 0 rgba(255,255,255,.17), 0 12px 28px rgba(13,31,78,.22); }
.zpp-feature[aria-selected="true"] .zpp-feature__title { color:var(--zip-white); }
.zpp-feature[aria-selected="true"] .zpp-feature__desc { display:block; }

.zpp-features__panels { position:relative; }
.zpp-features__panels[hidden] { display:none; }
.zpp-features__panel[hidden] { display:none; }
.zpp-features__panel img { display:block; width:100%; height:auto; }

/* --- Section 5: three steps -------------------------------------------------- */

.zpp-steps { display:grid; grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); gap:24px; }
.zpp-step { position:relative; overflow:hidden; padding:32px; border:1px solid rgba(255,255,255,.12); border-radius:var(--r-xl); background:var(--grad-zipify); box-shadow:inset 0 1px 0 rgba(255,255,255,.17), 0 12px 28px rgba(13,31,78,.22); transition:transform var(--dur-base) var(--ease-out), box-shadow var(--dur-base) var(--ease-out); }
.zpp-step::before { content:""; position:absolute; inset:0; pointer-events:none; background:repeating-linear-gradient(135deg,rgba(255,255,255,.014) 0 2px,transparent 2px 7px); }
.zpp-step:hover { transform:translateY(-2px); box-shadow:inset 0 1px 0 rgba(255,255,255,.17), 0 22px 48px rgba(13,31,78,.3); }
.zpp-step__icon { position:relative; display:block; width:40px; height:40px; margin-bottom:12px; object-fit:contain; }
.zpp-step__title { position:relative; margin:0 0 10px; font-size:24px; font-weight:900; letter-spacing:-.02em; color:var(--zip-white); }
.zpp-step__desc { position:relative; margin:0; font-size:17px; line-height:1.6; color:rgba(255,255,255,.74); }

/* --- Pills (templates, buy box, FAQ tabs) ----------------------------------- */

.zpp-pills { display:flex; justify-content:center; flex-wrap:wrap; gap:10px; margin-bottom:40px; }
.zpp-pill { font-family:inherit; white-space:normal; font-size:15px; font-weight:700; padding:14px 26px; border:1px solid var(--ink-200); border-radius:var(--r-pill); background:var(--surface); color:var(--ink-700); cursor:pointer; transition:background var(--dur-base) var(--ease-out), color var(--dur-base) var(--ease-out), border-color var(--dur-base) var(--ease-out); }
.zpp-pill:hover { border-color:var(--ink-300); }
.zpp-pill[aria-selected="true"] { background:var(--grad-zipify); border-color:transparent; color:var(--zip-white); }

/* --- Rails (templates, video quotes) ---------------------------------------- */

/* Full-bleed: the rail scrolls past the content column on both sides, so the
   band pads to 0 horizontally and the rail supplies its own 24px. */
.zpp-rail-band .zpp-wrap { padding-left:0; padding-right:0; }
.zpp-rail-band__head { max-width:1240px; margin:0 auto; padding:0 24px; }

.zpp-rail { display:flex; gap:24px; padding:4px 24px 8px; overflow-x:auto; scroll-behavior:smooth; scrollbar-width:none; }
.zpp-rail::-webkit-scrollbar { display:none; }
.zpp-rail[hidden] { display:none; }

.zpp-rail-nav { display:flex; justify-content:center; gap:10px; max-width:1240px; margin:32px auto 0; padding:0 24px; }
.zpp-rail-btn { display:flex; align-items:center; justify-content:center; width:48px; height:48px; border:1px solid var(--ink-200); border-radius:var(--r-pill); background:var(--surface); color:var(--ink-700); font-size:16px; cursor:pointer; transition:background var(--dur-fast) var(--ease-out); }
.zpp-rail-btn:hover { background:var(--ink-100); }
.zp-on-dark .zpp-rail-btn { border-color:rgba(255,255,255,.16); background:rgba(255,255,255,.06); color:var(--fg-on-dark); }
.zp-on-dark .zpp-rail-btn:hover { background:rgba(255,255,255,.12); }

/* --- Section 6: templates ---------------------------------------------------- */

.zpp-templates { border-top:1px solid var(--ink-200); }
.zpp-template { position:relative; display:flex; flex-direction:column; flex:0 0 auto; width:min(320px,78vw); overflow:hidden; border:1px solid var(--ink-200); border-radius:var(--r-lg); background:var(--surface); box-shadow:var(--sh-2); transition:box-shadow var(--dur-base) var(--ease-out); }
.zpp-template:hover { box-shadow:var(--sh-3); }
.zpp-template img { display:block; width:100%; height:300px; object-fit:cover; object-position:top; border-bottom:1px solid var(--ink-200); }
.zpp-template__body { display:flex; flex-direction:column; flex:1 1 auto; gap:12px; padding:24px; }
.zpp-template__tag { font-size:12px; font-weight:700; text-transform:uppercase; letter-spacing:.12em; color:var(--blue-700); }
.zpp-template__name { margin:0; font-size:19px; font-weight:700; letter-spacing:-.015em; line-height:1.3; color:var(--ink-900); }
.zpp-template__link { margin-top:auto; font-size:13px; font-weight:700; text-transform:uppercase; letter-spacing:.06em; color:var(--blue-700); }

/* --- Section 7: buy box ------------------------------------------------------ */

.zpp-buybox__title { margin:0 0 36px; text-align:center; font-size:clamp(28px,3.2vw,44px); font-weight:800; letter-spacing:-.02em; color:var(--ink-900); text-wrap:pretty; }
.zpp-buybox__panel { display:grid; grid-template-columns:repeat(auto-fit,minmax(300px,1fr)); gap:40px; align-items:center; }
.zpp-buybox__panel[hidden] { display:none; }
.zpp-buybox__heading { margin:0 0 16px; font-size:clamp(24px,2.6vw,32px); font-weight:800; letter-spacing:-.02em; color:var(--ink-900); }
.zpp-buybox__desc { margin:0 0 28px; font-size:18px; line-height:1.65; color:var(--ink-600); }
.zpp-buybox__media { overflow:hidden; border:1px solid var(--ink-200); border-radius:var(--r-xl); box-shadow:var(--sh-3); }
.zpp-buybox__media img { display:block; width:100%; height:auto; }

/* --- Section 8: modern features --------------------------------------------- */

.zpp-modern { display:grid; grid-template-columns:repeat(auto-fit,minmax(300px,1fr)); gap:24px; }
/* `.zp-card` supplies the border, radius, ground and 30px padding. */
.zpp-modern__card { display:flex; flex-direction:column; gap:16px; box-shadow:var(--sh-1); transition:box-shadow var(--dur-base) var(--ease-out); }
.zpp-modern__card:hover { box-shadow:var(--sh-3); }
.zpp-modern__icon { align-self:flex-start; height:48px; width:auto; object-fit:contain; }
.zpp-modern__title { margin:0; font-size:20px; font-weight:700; letter-spacing:-.015em; color:var(--ink-900); }
.zpp-modern__desc { margin:0; font-size:16px; line-height:1.6; color:var(--ink-600); }

/* --- Section 9: the builder -------------------------------------------------- */

.zpp-builder { position:relative; overflow:hidden; }
.zpp-builder::before { content:""; position:absolute; inset:0; pointer-events:none; background:repeating-linear-gradient(135deg,rgba(255,255,255,.014) 0 2px,transparent 2px 7px); }
.zpp-builder .zp-wrap { position:relative; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:56px; align-items:center; }
.zpp-builder__title { margin:0 0 18px; font-size:clamp(30px,3.4vw,48px); font-weight:900; letter-spacing:-.024em; line-height:1.04; color:var(--zip-white); }
.zpp-builder__lede { margin:0 0 28px; font-size:19px; line-height:1.6; color:rgba(255,255,255,.74); }
.zpp-builder .zp-points { margin-bottom:32px; }

/* The builder mock: a chrome bar, a block palette, and a dashed canvas the
   blocks drop into under a travelling cursor. Decorative — `aria-hidden` in
   markup — so none of it is announced. */
.zpp-mock__chrome { display:flex; align-items:center; gap:7px; margin-bottom:14px; }
.zpp-mock__dot { width:9px; height:9px; border-radius:50%; background:rgba(255,255,255,.22); }
.zpp-mock__label { margin-left:auto; font-size:10px; font-weight:800; letter-spacing:.14em; text-transform:uppercase; color:rgba(255,255,255,.4); }
.zpp-mock__body { position:relative; display:grid; grid-template-columns:104px 1fr; gap:12px; }
.zpp-mock__palette { display:flex; flex-direction:column; gap:8px; }
.zpp-mock__chip { display:block; padding:9px 11px; border:1px solid rgba(255,215,72,.34); border-radius:9px; background:rgba(255,215,72,.09); font-size:11px; font-weight:700; color:var(--zip-yellow); }
.zpp-mock__chip--muted { border-color:rgba(255,255,255,.12); background:rgba(255,255,255,.05); color:rgba(255,255,255,.5); }
.zpp-mock__canvas { position:relative; display:flex; flex-direction:column; gap:9px; min-height:280px; padding:12px; border:1px dashed rgba(255,215,72,.34); border-radius:14px; background:rgba(6,12,28,.6); }
.zpp-mock__block { padding:12px 13px; border:1px solid rgba(255,215,72,.4); border-radius:11px; background:rgba(255,215,72,.08); animation:zppDrop 520ms var(--ease-out) both, zppGlow 3.2s ease-in-out infinite; animation-play-state:paused; }
.zpp-mock__block:nth-child(1) { animation-delay:0s, .5s; }
.zpp-mock__block:nth-child(2) { animation-delay:.55s, 1.05s; }
.zpp-mock__block:nth-child(3) { animation-delay:1.1s, 1.6s; }
.zpp-mock__block:nth-child(4) { animation-delay:1.65s, 2.15s; }
.zpp-mock__block-label { font-size:10px; font-weight:800; letter-spacing:.12em; text-transform:uppercase; color:var(--zip-yellow); }
.zpp-mock__bar { display:block; height:6px; border-radius:3px; background:rgba(255,255,255,.14); margin-top:8px; }
.zpp-mock__bar--thin { background:rgba(255,255,255,.1); margin-top:6px; }
.zpp-mock__cursor { position:absolute; left:0; top:0; width:20px; height:20px; pointer-events:none; animation:zppCursor 9s cubic-bezier(.5,0,.3,1) infinite; animation-play-state:paused; }
.zpp-mock.is-inview .zpp-mock__block, .zpp-mock.is-inview .zpp-mock__cursor { animation-play-state:running; }
.zpp-mock__cursor svg { width:100%; height:100%; filter:drop-shadow(0 2px 4px rgba(0,0,0,.5)); }

/* --- Section 10: guarantee --------------------------------------------------- */

.zpp-guarantee { max-width:1000px; margin:0 auto; padding:48px; text-align:center; border:1px solid var(--ink-200); border-radius:var(--r-xl); background:var(--ink-050); }
.zpp-guarantee__eyebrow { font-size:12px; font-weight:700; text-transform:uppercase; letter-spacing:.12em; color:var(--pink-500); }
.zpp-guarantee__title { margin:14px 0 18px; font-size:clamp(24px,2.8vw,34px); font-weight:800; letter-spacing:-.02em; color:var(--ink-900); }
.zpp-guarantee__text { margin:0 auto; max-width:660px; font-size:17px; line-height:1.65; color:var(--ink-600); }

/* --- Section 11: pricing ----------------------------------------------------- */

.zpp-plans { display:grid; grid-template-columns:repeat(auto-fit,minmax(290px,1fr)); gap:24px; align-items:start; }
.zpp-plan { padding:34px; border:1px solid var(--ink-200); border-radius:var(--r-xl); background:var(--surface); box-shadow:var(--sh-2); }
.zpp-plan__rule { width:64px; height:4px; margin-bottom:22px; border-radius:var(--r-pill); background:var(--grad-ocu); }
.zpp-plan__name { margin:0 0 8px; font-size:24px; font-weight:800; letter-spacing:-.02em; color:var(--ink-900); }
.zpp-plan__blurb { margin:0 0 20px; font-size:16px; line-height:1.6; color:var(--ink-600); }
.zpp-plan__price { font-size:32px; font-weight:900; letter-spacing:-.02em; color:var(--ink-900); }
.zpp-plan__period { font-size:15px; font-weight:600; color:#6b6e7a; }
.zpp-plan__includes { display:block; margin:24px 0 14px; font-size:12px; font-weight:700; text-transform:uppercase; letter-spacing:.12em; color:#6b6e7a; }
.zpp-plan__features { list-style:none; margin:0 0 28px; padding:0; display:flex; flex-direction:column; gap:10px; }
.zpp-plan__feature { display:flex; align-items:flex-start; gap:10px; font-size:15px; line-height:1.5; color:var(--ink-700); }
.zpp-plan__tick { flex:0 0 auto; font-weight:700; color:var(--blue-700); }
.zpp-plan .zp-cta { display:block; text-align:center; padding:16px; }

/* --- Section 12: proof videos ------------------------------------------------ */

.zpp-proof { --zp-section-bg:var(--grad-zipify); position:relative; overflow:hidden; }
.zpp-proof .zp-wrap { position:relative; max-width:820px; }
.zpp-proof__item { display:flex; flex-direction:column; gap:18px; }
.zpp-proof__frame { position:relative; width:100%; display:flex; align-items:center; justify-content:center; aspect-ratio:16/9; overflow:hidden; border:1px solid rgba(255,255,255,.12); border-radius:22px; background:rgba(255,255,255,.05); box-shadow:0 24px 60px rgba(0,0,0,.38); transition:transform var(--dur-base) var(--ease-out); }
.zpp-proof__frame:hover { transform:translateY(-2px); }
/* The poster fills the frame; the play glyph and the scrim stack over it. */
.zpp-proof__poster { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }
/* Keeps the glyph legible over a bright frame of the video without dimming the
   poster into mud — a darker wash behind the centre only. */
.zpp-proof__scrim { position:absolute; inset:0; background:radial-gradient(52% 52% at 50% 50%,rgba(5,10,24,.58),rgba(5,10,24,.18) 70%,transparent 100%); }
.zpp-proof__frame .zpp-play { position:relative; backdrop-filter:blur(2px); }
.zpp-proof__embed { position:relative; aspect-ratio:16/9; overflow:hidden; border:1px solid rgba(255,255,255,.12); border-radius:22px; background:rgba(255,255,255,.05); box-shadow:0 24px 60px rgba(0,0,0,.38); }
.zpp-proof__embed iframe { display:block; width:100%; height:100%; border:0; }
.zpp-proof__badge { position:absolute; top:16px; left:16px; padding:6px 13px; border:1px solid rgba(255,215,72,.4); border-radius:var(--r-pill); background:rgba(8,16,38,.7); font-size:10px; font-weight:900; letter-spacing:.12em; text-transform:uppercase; color:var(--zip-yellow); }
.zpp-play { display:flex; align-items:center; justify-content:center; width:76px; height:76px; padding-left:5px; border:1px solid rgba(255,255,255,.25); border-radius:var(--r-pill); background:rgba(255,255,255,.14); color:var(--zip-white); font-size:24px; }
.zpp-play--sm { width:56px; height:56px; padding-left:4px; border-color:transparent; font-size:18px; }
.zpp-proof__eyebrow { margin-bottom:10px; font-size:11px; font-weight:800; letter-spacing:.12em; text-transform:uppercase; color:rgba(255,255,255,.5); }
.zpp-proof__title { margin:0; font-size:22px; font-weight:800; letter-spacing:-.015em; line-height:1.25; color:var(--zip-white); }

/* --- Section 13: integrations ------------------------------------------------ */

.zpp-integrations { display:grid; grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); gap:16px; }
.zpp-integration { display:flex; align-items:center; gap:16px; padding:22px; border:1px solid var(--ink-200); border-radius:var(--r-lg); background:var(--surface); transition:box-shadow var(--dur-base) var(--ease-out); }
.zpp-integration:hover { box-shadow:var(--sh-2); }
.zpp-integration img { flex:0 0 auto; width:44px; height:44px; border-radius:10px; object-fit:contain; }
.zpp-integration__name { display:block; font-size:15px; font-weight:700; line-height:1.3; color:var(--ink-900); }
.zpp-integration__by { display:block; margin-top:3px; font-size:13px; color:#6b6e7a; }

/* --- Section 14: video quotes ------------------------------------------------ */

.zpp-quotes { --zp-section-bg:var(--grad-zipify); position:relative; overflow:hidden; }
.zpp-quotes__head { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:24px; max-width:1240px; margin:0 auto 44px; padding:0 24px; }
.zpp-quotes__head .zp-h2 { margin:0; font-size:clamp(28px,3.2vw,44px); font-weight:800; letter-spacing:-.02em; color:var(--fg-on-dark); }
.zpp-quotes__nav { display:flex; gap:10px; }
.zpp-quote { display:flex; flex-direction:column; flex:0 0 auto; width:min(400px,82vw); overflow:hidden; border:1px solid rgba(255,255,255,.1); border-radius:var(--r-lg); background:rgba(255,255,255,.05); }
/* The frame is a link to the Wistia watch page until `pages.js` swaps it for
   the embed, which wears `.zpp-quote__embed` — the same box, minus the
   centring the play glyph needed. */
.zpp-quote__frame,
.zpp-quote__embed { aspect-ratio:16/9; border-bottom:1px solid rgba(255,255,255,.1); background:rgba(255,255,255,.04); }
.zpp-quote__frame { position:relative; display:flex; align-items:center; justify-content:center; overflow:hidden; transition:background var(--dur-base) var(--ease-out); }
.zpp-quote__frame:hover,
.zpp-quote__frame:focus-visible { background:rgba(255,255,255,.09); }
.zpp-quote__poster { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; transition:transform var(--dur-base) var(--ease-out); }
.zpp-quote__frame:hover .zpp-quote__poster,
.zpp-quote__frame:focus-visible .zpp-quote__poster { transform:scale(1.04); }
/* Same radial wash as the tutorial facade: enough to hold the glyph over a
   bright frame without dimming the portrait behind it. */
.zpp-quote__scrim { position:absolute; inset:0; background:radial-gradient(52% 52% at 50% 50%,rgba(5,10,24,.58),rgba(5,10,24,.18) 70%,transparent 100%); }
/* `.zpp-play--sm` drops its border and leans on a near-transparent fill, which
   read fine against the empty tinted frame and disappears over a portrait. Over
   a poster the glyph gets its edge and a dark ground back. */
.zpp-quote__frame .zpp-play { position:relative; border-color:rgba(255,255,255,.45); background:rgba(8,16,38,.5); backdrop-filter:blur(2px); }
.zpp-quote__embed iframe { display:block; width:100%; height:100%; border:0; }
.zpp-quote__body { display:flex; flex-direction:column; flex:1 1 auto; gap:14px; padding:26px; }
.zpp-quote__name { font-size:15px; font-weight:700; color:var(--fg-on-dark); }
.zpp-quote__brand { font-weight:400; color:rgba(255,255,255,.4); }
.zpp-quote__text { margin:0; font-size:16px; font-style:italic; line-height:1.6; color:rgba(255,255,255,.8); }

/* --- Section 15: closing CTA ------------------------------------------------- */

.zpp-close .zpp-wrap { max-width:820px; padding:88px 24px; text-align:center; }
.zpp-close__title { margin:0 0 32px; font-size:clamp(26px,3.2vw,42px); font-weight:800; letter-spacing:-.02em; line-height:1.12; color:var(--ink-900); text-wrap:pretty; }
.zpp-close .zp-cta { padding:18px 40px; font-size:15px; }

/* --- Section 16: FAQ --------------------------------------------------------- */

.zpp-faq-band .zpp-wrap { max-width:920px; }
.zpp-faq-band__title { margin:0 0 32px; text-align:center; font-size:clamp(28px,3.4vw,44px); font-weight:800; letter-spacing:-.02em; color:var(--ink-900); }
.zpp-faq-band .zpp-pills { margin-bottom:36px; }

.zpp-faq { display:flex; flex-direction:column; }
.zpp-faq[hidden] { display:none; }
/* `<details>`/`<summary>` rather than buttons and JS: it carries keyboard
   operation, the expanded state and screen-reader semantics on its own, and a
   shared per-set `name` keeps one answer open at a time natively. Styled as
   home's `.zp-faq`: divider rows, no card, no +/− marker. */
.zpp-faq__item { padding:16px 0; border-top:1px solid var(--ink-200); }
.zpp-faq__item:last-child { border-bottom:1px solid var(--ink-200); }
.zpp-faq__q { display:block; margin:0; padding:12px 0; font-size:19px; font-weight:800; letter-spacing:-.01em; color:var(--ink-900); cursor:pointer; list-style:none; transition:color var(--dur-fast) var(--ease-out); }
.zpp-faq__q:hover { color:var(--blue-500); }
/* `list-style:none` alone leaves the disclosure triangle in Safari. */
.zpp-faq__q::-webkit-details-marker { display:none; }
.zpp-faq__q::marker { content:""; }
.zpp-faq__q:focus-visible { outline:none; border-radius:4px; box-shadow:var(--focus-ring); }
.zpp-faq__a { margin:0; padding-bottom:12px; font-size:16px; line-height:1.6; color:var(--ink-600); white-space:pre-line; }

/* --- Keyframes -------------------------------------------------------------- */

@keyframes zppRise { from { opacity:0; transform:translateY(24px); } to { opacity:1; transform:none; } }
@keyframes zppRail { 0% { transform:translateX(0); } 100% { transform:translateX(-50%); } }
@keyframes zppDrop { from { opacity:0; transform:translateY(-16px) scale(.97); } to { opacity:1; transform:none; } }
@keyframes zppGlow { 0%,100% { box-shadow:0 0 0 rgba(255,215,72,0); } 50% { box-shadow:0 0 18px rgba(255,215,72,.18); } }
@keyframes zppCursor {
	0%   { transform:translate(6%,14%); }
	22%  { transform:translate(44%,26%); }
	34%  { transform:translate(52%,44%); }
	56%  { transform:translate(30%,58%); }
	72%  { transform:translate(58%,72%); }
	100% { transform:translate(6%,14%); }
}

/* --- Reduced motion --------------------------------------------------------- */

/* The marquee, the hero rise, and the whole builder mock are decorative
   motion. Under `prefers-reduced-motion` each renders its final state. */
@media (prefers-reduced-motion:reduce) {
	.zpp-marquee__track,
	.zpp-hero__shot,
	.zpp-mock__block,
	.zpp-mock__cursor { animation:none; }
	.zpp-mock__cursor { display:none; }
	.zpp-rail { scroll-behavior:auto; }
	.zpp-quote__frame:hover .zpp-quote__poster,
	.zpp-quote__frame:focus-visible .zpp-quote__poster { transform:none; }
}

/* --- Responsive -------------------------------------------------------------- */

/* 899.98px matches home.css: a fractional or zoomed viewport can land between
   899 and 900 and match neither rule. */
@media (max-width:899.98px) {
	.zpp-wrap { padding-inline:20px; }
	.zpp-wrap--continue { padding-top:0; }
	.zpp-eyebrow { margin-bottom:12px; }
	.zpp-head { margin-bottom:28px; }

	.zpp-hero .zp-wrap { grid-template-columns:minmax(0,1fr); gap:40px; padding:104px 20px 64px; }
	.zpp-builder .zp-wrap { grid-template-columns:minmax(0,1fr); }
	.zpp-hero__title { font-size:clamp(30px,7vw,40px); }
	.zpp-hero__ctas { flex-direction:column; text-align:center; }
	/* The overhang is a wide-viewport effect; on one column it would clip. */
	.zpp-hero__shot { margin:0; }
	.zpp-hero__shot img { width:100%; }

	.zpp-stats__list { padding:44px 20px; gap:28px 24px; }
	.zpp-stat__value { font-size:28px; }

	.zpp-buybox__panel { grid-template-columns:minmax(0,1fr); }
	.zpp-proof .zp-wrap { padding:64px 20px; }

	.zpp-quotes__head,
	.zpp-rail-band__head { padding:0 20px; }
	.zpp-rail { padding-left:20px; padding-right:20px; }
	.zpp-rail-nav { padding:0 20px; }

	.zpp-guarantee { padding:36px 24px; }
	.zpp-plan { padding:28px; }
	.zpp-close .zpp-wrap { padding:64px 20px; }

	.zpp-features__panel { padding:12px 0 32px; }
	.zpp-features__panel:last-of-type { padding-bottom:0; }
}

@media (max-width:599.98px) {
	.zpp-pills { gap:8px; }
	.zpp-pill { padding:12px 18px; font-size:14px; }
}
