/* Design 02 pattern-page styles (single-service / occasion / location / pricing).
   Assembled from the proven services.css geometry + contact.css form section.
   The .pat hero variant sizes the h1 for multi-word keyword headlines
   (the donor heroes are single giant words). */

.sec-hero { --h: 800px; background: rgba(19,19,19,1); }
/* The kit's shared interior-hero backdrop is unused on this build: no page that
   loads patterns.css has a .sec-hero, and index.html's own css/home.css sets the
   hero backdrop itself. Rule and image removed so the payload does not carry a
   photo nothing renders. Restore both together if a future page needs it. */
.z-hero_0 { left: 353px; top: 517px; width: 495px; color: rgba(242,239,232,1); text-align: center; }
.z-hero_1 { left: -121px; top: 286px; width: 1442px; color: rgba(242,239,232,1); font-size: 160px; text-align: center; white-space: nowrap; }
.z-hero_2 { left: 254px; top: 217px; width: 693px; color: rgba(242,239,232,1); text-transform: none; line-height: 1.4; letter-spacing: 0em; font-size: 22px; text-align: center; font-family: 'Poppins'; font-weight: 300; font-style: normal; white-space: nowrap; }
.sec-about { --h: 1140px; background: rgba(244,241,235,1); }
.z-about_0 { left: 680px; top: 370px; width: 461px; height: 632px; }
.z-about_1 { left: 61px; top: 376px; width: 477px; color: rgba(46,42,37,1); text-transform: none; line-height: 1.1; letter-spacing: 0em; font-size: 80px; text-align: left; font-family: 'Nyght Serif Light'; font-weight: 400; font-style: normal; }
.z-about_2 { left: 61px; top: 745px; width: 472px; }
.z-about_3 { left: 61px; top: 611px; width: 503px; color: rgba(46,42,37,1); text-transform: none; line-height: 1.4; letter-spacing: 0em; font-size: 22px; text-align: left; font-family: 'Poppins'; font-weight: 300; font-style: normal; }
.z-about_4 { left: 61px; top: 948px; width: 180px; height: 49px; }
.z-about_5 { left: 808px; top: 130px; width: 333px; line-height: 1.2; letter-spacing: 0em; font-size: 40px; text-align: center; font-family: 'Nyght Serif Light'; font-weight: 400; font-style: normal; }
.z-about_6 { left: 439px; top: 130px; width: 333px; line-height: 1.2; letter-spacing: 0em; font-size: 40px; text-align: center; font-family: 'Nyght Serif Light'; font-weight: 400; font-style: normal; }
.z-about_7 { left: 60px; top: 130px; width: 333px; line-height: 1.2; font-size: 40px; text-align: center; font-family: 'Nyght Serif Light'; font-weight: 400; font-style: normal; }
.sec-content { --h: 910px; background: #2B2723; }
.z-content_0 { left: 66px; top: 140px; width: 464px; height: 627px; }
.z-content_1 { left: 601px; top: 500px; width: 533px; color: rgba(242,239,232,1); }
.z-content_2 { left: 601px; top: 140px; width: 548px; color: rgba(242,239,232,1); line-height: 1.2; font-size: 50px; }
.sec-step-1 { --h: 1000px; background: rgba(244,241,235,1); position: sticky; top: 0px; }
.z-step-1_0 { left: 60px; top: 440px; width: 1080px; height: 560px; }
.z-step-1_1 { left: 809px; top: 141px; width: 331px; line-height: 1.4; text-align: right; }
.z-step-1_2 { left: 60px; top: 226px; width: 682px; color: rgba(46,42,37,1); }
.z-step-1_3 { left: 60px; top: 85px; width: 1080px; height: 1px; background: currentColor; opacity: .35; }
.z-step-1_4 { left: 230px; top: 26px; width: 910px; text-align: right; }
.z-step-1_5 { left: 60px; top: 26px; width: 170px; color: rgba(46,42,37,1); font-family: 'Nyght Serif Light Italic'; font-weight: 400; font-style: normal; white-space: nowrap; }
.z-step-1_6 { left: 60px; top: 132px; width: 669px; color: rgba(46,42,37,1); text-transform: none; line-height: 1.1; letter-spacing: 0em; font-size: 50px; text-align: left; font-family: 'Nyght Serif Light'; font-weight: 400; font-style: normal; white-space: nowrap; }
.z-step-1_7 { left: 960px; top: 333px; width: 180px; height: 48px; }
.sec-step-2 { --h: 1000px; background: rgba(244,241,235,1); position: sticky; top: 100px; }
.z-step-2_0 { left: 60px; top: 440px; width: 1080px; height: 560px; }
.z-step-2_1 { left: 809px; top: 141px; width: 331px; line-height: 1.4; letter-spacing: 0em; font-size: 22px; text-align: right; }
.z-step-2_2 { left: 60px; top: 85px; width: 1080px; height: 1px; background: currentColor; opacity: .35; }
.z-step-2_3 { left: 230px; top: 26px; width: 910px; text-align: right; }
.z-step-2_4 { left: 60px; top: 26px; width: 170px; font-family: 'Nyght Serif Light Italic'; font-weight: 400; font-style: normal; white-space: nowrap; }
.z-step-2_5 { left: 960px; top: 333px; width: 180px; height: 48px; }
.z-step-2_6 { left: 60px; top: 226px; width: 682px; color: rgba(46,42,37,1); }
.z-step-2_7 { left: 60px; top: 132px; width: 669px; color: rgba(46,42,37,1); text-transform: none; line-height: 1.1; letter-spacing: 0em; font-size: 50px; text-align: left; font-family: 'Nyght Serif Light'; font-weight: 400; font-style: normal; white-space: nowrap; }
.sec-step-3 { --h: 1000px; background: rgba(244,241,235,1); position: sticky; top: 200px; }
.z-step-3_0 { left: 60px; top: 440px; width: 1080px; height: 560px; }
.z-step-3_1 { left: 809px; top: 141px; width: 331px; line-height: 1.4; letter-spacing: 0em; font-size: 22px; text-align: right; }
.z-step-3_2 { left: 60px; top: 85px; width: 1080px; height: 1px; background: currentColor; opacity: .35; }
.z-step-3_3 { left: 230px; top: 26px; width: 910px; text-align: right; white-space: nowrap; }
.z-step-3_4 { left: 60px; top: 26px; width: 170px; font-family: 'Nyght Serif Light Italic'; font-weight: 400; font-style: normal; white-space: nowrap; }
.z-step-3_5 { left: 960px; top: 333px; width: 180px; height: 48px; }
.z-step-3_6 { left: 60px; top: 226px; width: 682px; color: rgba(46,42,37,1); }
.z-step-3_7 { left: 60px; top: 132px; width: 669px; color: rgba(46,42,37,1); text-transform: none; line-height: 1.1; letter-spacing: 0em; font-size: 50px; text-align: left; font-family: 'Nyght Serif Light'; font-weight: 400; font-style: normal; white-space: nowrap; }
.sec-step-4 { --h: 1000px; background: rgba(244,241,235,1); position: sticky; top: 300px; }
.z-step-4_0 { left: 60px; top: 441px; width: 1080px; height: 560px; }
.z-step-4_1 { left: 809px; top: 141px; width: 331px; line-height: 1.4; letter-spacing: 0em; font-size: 22px; text-align: right; }
.z-step-4_2 { left: 60px; top: 85px; width: 1080px; height: 1px; background: currentColor; opacity: .35; }
.z-step-4_3 { left: 230px; top: 28px; width: 910px; text-align: right; white-space: nowrap; }
.z-step-4_4 { left: 60px; top: 28px; width: 170px; font-family: 'Nyght Serif Light Italic'; font-weight: 400; font-style: normal; white-space: nowrap; }
.z-step-4_5 { left: 960px; top: 333px; width: 180px; height: 48px; }
.z-step-4_6 { left: 60px; top: 226px; width: 682px; color: rgba(46,42,37,1); }
.z-step-4_7 { left: 60px; top: 132px; width: 669px; color: rgba(46,42,37,1); text-transform: none; line-height: 1.1; letter-spacing: 0em; font-size: 50px; text-align: left; font-family: 'Nyght Serif Light'; font-weight: 400; font-style: normal; white-space: nowrap; }
.sec-testimonial { --h: 774px; background: #ECE6DC; }
.z-testimonial_0 { left: 186px; top: 192px; width: 830px; color: rgba(46,42,37,1); line-height: 1.2; font-size: 50px; text-align: center; font-family: 'Nyght Serif Light Italic'; font-weight: 400; font-style: normal; }
.z-testimonial_1 { left: 60px; top: 112px; width: 1080px; color: rgba(46,42,37,1); font-size: 22px; text-align: center; white-space: nowrap; }
.z-testimonial_3 { left: 509px; top: 629px; width: 183px; color: rgba(46,42,37,1); line-height: 1.4; font-size: 25px; text-align: center; font-family: 'Nyght Serif Light Italic'; font-weight: 400; font-style: normal; white-space: nowrap; }
.sec-logo-marquee { --h: 200px; background: rgba(244,241,235,1); }
.logo-marquee { left: -60px; top: 52px; width: 1320px; height: 114px; }
.sec-faq { --h: 1308px; background: #221E1A; }
.z-faq_0 { left: 720px; top: 972px; width: 420px; color: rgba(242,239,232,1); text-transform: none; font-size: 40px; font-family: 'Nyght Serif Light Italic'; font-weight: 400; font-style: normal; }
.z-faq_1 { left: 720px; top: 341px; width: 420px; height: 571px; }
.z-faq_2 { left: 171px; top: 1064px; width: 419px; color: rgba(242,239,232,1); }
.z-faq_3 { left: 171px; top: 972px; width: 389px; color: rgba(242,239,232,1); font-size: 28px; }
.z-faq_4 { left: 60px; top: 971px; width: 62px; color: rgba(242,239,232,1); line-height: 1.4; font-size: 26px; font-family: 'Nyght Serif Light Italic'; font-weight: 400; font-style: normal; white-space: nowrap; }
.z-faq_5 { left: 171px; top: 752px; width: 419px; color: rgba(242,239,232,1); }
.z-faq_6 { left: 171px; top: 659px; width: 389px; color: rgba(242,239,232,1); font-size: 28px; }
.z-faq_7 { left: 60px; top: 659px; width: 69px; color: rgba(242,239,232,1); line-height: 1.4; font-size: 26px; font-family: 'Nyght Serif Light Italic'; font-weight: 400; font-style: normal; white-space: nowrap; }
.z-faq_8 { left: 171px; top: 439px; width: 419px; color: rgba(242,239,232,1); }
.z-faq_9 { left: 171px; top: 341px; width: 389px; color: rgba(242,239,232,1); font-size: 28px; }
.z-faq_10 { left: 60px; top: 341px; width: 62px; color: rgba(242,239,232,1); line-height: 1.4; font-size: 26px; font-family: 'Nyght Serif Light Italic'; font-weight: 400; font-style: normal; white-space: nowrap; }
.z-faq_11 { left: 60px; top: 125px; width: 1060px; color: rgba(242,239,232,1); text-transform: capitalize; line-height: 1.2; letter-spacing: 0em; font-size: 80px; text-align: left; font-family: 'Nyght Serif Light'; font-weight: 400; font-style: normal; white-space: nowrap; }
.sec-call-to-action { --h: 949px; background: rgba(19,19,19,1); }
.sec-call-to-action::before { content: ""; position: absolute; inset: 0; background: url("../images/cta-band.jpg") center / cover no-repeat fixed; opacity: 0.7; }
.z-parallax-text_0 { left: 84px; top: 226px; width: 1033px; color: rgba(242,239,232,1); text-transform: uppercase; line-height: 1.1; font-size: 100px; text-align: center; white-space: nowrap; will-change: transform; }
.z-parallax-text_1 { left: 250px; top: 136px; width: 700px; color: rgba(242,239,232,1); text-transform: none; line-height: 1.4; letter-spacing: 0em; font-size: 22px; text-align: center; font-family: 'Poppins'; font-weight: 300; font-style: normal; white-space: nowrap; }
.z-parallax-text_2 { left: 510px; top: 771px; width: 180px; height: 48px; }
.z-parallax-text_3 { left: 941px; top: 367px; width: 339px; color: rgba(242,239,232,1); font-size: 32px; font-family: 'Nyght Serif Light Italic'; font-weight: 400; font-style: normal; white-space: nowrap; }
.z-parallax-text_4 { left: -79px; top: 367px; width: 339px; color: rgba(242,239,232,1); font-size: 32px; text-align: right; font-family: 'Nyght Serif Light Italic'; font-weight: 400; font-style: normal; white-space: nowrap; }
.z-parallax-text_5 { left: 221px; top: 611px; width: 759px; color: rgba(242,239,232,1); text-transform: none; line-height: 1.6; letter-spacing: 0.02em; font-size: 22px; text-align: center; font-family: 'Poppins'; font-weight: 300; font-style: normal; }


/* wired form section (from contact.css) */
/* BUILD (Desert Glow, 2026-09-17): raised from the kit's 740 for the same
   reason css/form.css was. Her form carries NINE questions including the
   reconciled add-on fieldset and a textarea, and THIS is the copy the four
   interior pages use -- home is the only page on form.css, so raising that
   one alone left every other page clipping its own submit button. */
.sec-contact-form { --h: 950px; background: rgba(244,241,235,1); }
.z-contact-form_1 { left: 60px; top: 589px; width: 510px; line-height: 1.4; font-size: 15px; white-space: nowrap; }
.z-contact-form_2 { left: 60px; top: 558px; width: 510px; font-size: 17px; font-family: 'Poppins'; font-weight: 400; font-style: normal; white-space: nowrap; }
.z-contact-form_3 { left: 60px; top: 188px; width: 462px; line-height: 1.2; font-size: 50px; }
.z-contact-form_4 { left: 60px; top: 114px; width: 510px; text-align: left; white-space: nowrap; }

/* pattern hero variant: keyword h1 wraps at display size. Desktop-scoped so
   the higher specificity cannot outrank the mobile reflow blanket. */
.sec-hero.pat { --h: 640px; }
.sec-hero.pat .z-hero_1 { white-space: normal; font-family: 'Nyght Serif Light'; }
@media (min-width: 901px) {
  .sec-hero.pat .z-hero_1 { font-size: 84px; line-height: 1.12;
    left: 100px; width: 1000px; top: 210px; }
  .sec-hero.pat .z-hero_0 { top: 465px; }
  .sec-hero.pat .z-hero_2 { top: 150px; }
}

/* MOBILE (additive layer; see style.css) */
@media (max-width: 900px) {

  .sec-hero { clip-path: inset(0); }
  .sec-hero::before { position: fixed; background-attachment: scroll; }
  .sec-hero .cv { display: flex; flex-direction: column; justify-content: center;
                  min-height: 78svh; padding: 110px 22px 60px; text-align: center; }
  .sec-hero .z-hero_2 { order: 1; font-size: 17px; }
  .sec-hero .z-hero_1 { order: 2; font-size: clamp(46px, 14vw, 58px); margin-top: 10px; }
  .sec-hero .z-hero_0 { order: 3; margin-top: 22px; }

  .sec-about .cv { display: flex; flex-direction: column; padding: 64px 22px; }
  .sec-about .z-about_1 { order: 1; font-size: clamp(38px, 11vw, 48px); }
  .sec-about .z-about_3 { order: 2; font-size: 18px; margin-top: 20px; }
  .sec-about .z-about_2 { order: 3; margin-top: 16px; }
  .sec-about .z-about_4 { order: 4; margin-top: 26px; }
  .sec-about .z-about_7 { order: 5; font-size: 24px; margin-top: 40px; text-align: left; }
  .sec-about .z-about_6 { order: 6; font-size: 24px; margin-top: 18px; text-align: left; }
  .sec-about .z-about_5 { order: 7; font-size: 24px; margin-top: 18px; text-align: left; }
  .sec-about .z-about_0 { order: 8; position: relative; width: 100%; height: auto;
                          aspect-ratio: 3 / 4; margin-top: 36px; }

  .sec-content .cv { display: flex; flex-direction: column; padding: 64px 22px; }
  .sec-content .z-content_2 { order: 1; font-size: 28px; }
  .sec-content .z-content_1 { order: 2; margin-top: 20px; }
  .sec-content .z-content_0 { order: 3; margin-top: 30px; }

  /* sticky package stack → plain stacked sections */
  .stack .sec { position: static; }
  .stack .cv { display: flex; flex-direction: column; padding: 56px 22px; }
  .stack .cv .ph { height: 260px; object-fit: cover; }
  .sec-step-1 .z-step-1_5 { order: 1; font-size: 18px; }
  .sec-step-1 .z-step-1_6 { order: 2; font-size: 28px; margin-top: 10px; }
  .sec-step-1 .z-step-1_2 { order: 3; margin-top: 14px; }
  .sec-step-1 .z-step-1_1 { order: 4; text-align: left; font-size: 17px; margin-top: 18px; }
  .sec-step-1 .z-step-1_7 { order: 5; margin-top: 24px; align-self: flex-start; }
  .sec-step-1 .z-step-1_0 { order: 6; margin-top: 30px; }
  .sec-step-1 .z-step-1_3, .sec-step-1 .z-step-1_4 { display: none; }
  .sec-step-2 .z-step-2_4 { order: 1; font-size: 18px; }
  .sec-step-2 .z-step-2_7 { order: 2; font-size: 28px; margin-top: 10px; }
  .sec-step-2 .z-step-2_6 { order: 3; margin-top: 14px; }
  .sec-step-2 .z-step-2_1 { order: 4; text-align: left; font-size: 17px; margin-top: 18px; }
  .sec-step-2 .z-step-2_5 { order: 5; margin-top: 24px; align-self: flex-start; }
  .sec-step-2 .z-step-2_0 { order: 6; margin-top: 30px; }
  .sec-step-2 .z-step-2_2, .sec-step-2 .z-step-2_3 { display: none; }
  .sec-step-3 .z-step-3_4 { order: 1; font-size: 18px; }
  .sec-step-3 .z-step-3_7 { order: 2; font-size: 28px; margin-top: 10px; }
  .sec-step-3 .z-step-3_6 { order: 3; margin-top: 14px; }
  .sec-step-3 .z-step-3_1 { order: 4; text-align: left; font-size: 17px; margin-top: 18px; }
  .sec-step-3 .z-step-3_5 { order: 5; margin-top: 24px; align-self: flex-start; }
  .sec-step-3 .z-step-3_0 { order: 6; margin-top: 30px; }
  .sec-step-3 .z-step-3_2, .sec-step-3 .z-step-3_3 { display: none; }
  .sec-step-4 .z-step-4_4 { order: 1; font-size: 18px; }
  .sec-step-4 .z-step-4_7 { order: 2; font-size: 28px; margin-top: 10px; }
  .sec-step-4 .z-step-4_6 { order: 3; margin-top: 14px; }
  .sec-step-4 .z-step-4_1 { order: 4; text-align: left; font-size: 17px; margin-top: 18px; }
  .sec-step-4 .z-step-4_5 { order: 5; margin-top: 24px; align-self: flex-start; }
  .sec-step-4 .z-step-4_0 { order: 6; margin-top: 30px; }
  .sec-step-4 .z-step-4_2, .sec-step-4 .z-step-4_3 { display: none; }

  .sec-testimonial .cv { display: flex; flex-direction: column; padding: 60px 22px; text-align: center; }
  .sec-testimonial .z-testimonial_1 { order: 1; font-size: 17px; }
  .sec-testimonial .z-testimonial_0 { order: 2; font-size: 24px; margin-top: 22px; }
  .sec-testimonial .z-testimonial_3 { order: 3; font-size: 19px; margin-top: 22px; }

  .sec-logo-marquee .cv { padding: 26px 0; }
  .sec-logo-marquee .logo-marquee { width: 100%; height: 70px; }

  .sec-faq .cv { display: flex; flex-direction: column; padding: 60px 22px; }
  .sec-faq .z-faq_11 { order: 1; font-size: clamp(32px, 9.5vw, 42px); }
  .sec-faq .z-faq_10 { order: 2; font-size: 17px; margin-top: 30px; }
  .sec-faq .z-faq_9 { order: 3; font-size: 22px; margin-top: 8px; }
  .sec-faq .z-faq_8 { order: 4; margin-top: 12px; }
  .sec-faq .z-faq_7 { order: 5; font-size: 17px; margin-top: 30px; }
  .sec-faq .z-faq_6 { order: 6; font-size: 22px; margin-top: 8px; }
  .sec-faq .z-faq_5 { order: 7; margin-top: 12px; }
  .sec-faq .z-faq_4 { order: 8; font-size: 17px; margin-top: 30px; }
  .sec-faq .z-faq_3 { order: 9; font-size: 22px; margin-top: 8px; }
  .sec-faq .z-faq_2 { order: 10; margin-top: 12px; }
  .sec-faq .z-faq_1 { order: 11; margin-top: 36px; }
  .sec-faq .z-faq_0 { order: 12; font-size: 24px; margin-top: 20px; }

  .sec-call-to-action { clip-path: inset(0); }
  .sec-call-to-action::before { position: fixed; background-attachment: scroll; }
  .sec-call-to-action .cv { display: flex; flex-direction: column; padding: 80px 22px; text-align: center; }
  .sec-call-to-action .px-slide { transform: none !important; will-change: auto; }
  .sec-call-to-action .z-parallax-text_1 { order: 1; font-size: 17px; }
  .sec-call-to-action .z-parallax-text_0 { order: 2; font-size: clamp(30px, 9vw, 40px); margin-top: 18px; }
  .sec-call-to-action .z-parallax-text_3, .sec-call-to-action .z-parallax-text_4 { display: none; }
  .sec-call-to-action .z-parallax-text_5 { order: 3; font-size: 16px; margin-top: 24px; }
  .sec-call-to-action .z-parallax-text_2 { order: 4; margin-top: 28px; }

  .sec-contact-form .cv { display: flex; flex-direction: column; padding: 60px 22px 70px; }
  .sec-contact-form .z-contact-form_4 { order: 1; font-size: 17px; }
  .sec-contact-form .z-contact-form_3 { order: 2; font-size: 28px; margin-top: 14px; }
  .sec-contact-form .z-contact-form_2 { order: 3; font-size: 16px; margin-top: 26px; }
  .sec-contact-form .z-contact-form_1 { order: 4; margin-top: 4px; }
  .sec-contact-form .contact-form { order: 5; margin-top: 34px; }
  .sec-contact-form .cf-view:not([hidden]) { position: static; display: flex;
      flex-direction: column; gap: 20px; }
  .sec-contact-form .field { position: static !important; left: auto !important;
      top: auto !important; width: 100% !important; }
  .sec-contact-form .cf-form .btn { position: static !important; left: auto !important;
      top: auto !important; width: 100% !important; max-width: 340px; height: 50px;
      margin-top: 8px; align-self: flex-start; }
  .sec-contact-form .cf-success > * { position: static !important; left: auto !important;
      top: auto !important; width: auto !important; }
  .sec-hero.pat .cv { min-height: 58svh; }
  .sec-hero.pat .z-hero_1 { font-size: clamp(32px, 9.5vw, 44px); }
}

/* ======================================================================
   FLOW LAYER (2026-07-18 skeleton rebuild). Shared vocabulary for the
   flowing interior bands the four skeleton pages use between the canvas
   hero and the wired form section. Additive only: index.html never links
   patterns.css, and nothing below touches the canvas classes above. */

/* pattern hero add-ons: CTA pair + optional note line under the lede.
   Markup: <a class="btn z-hero_3">, <a class="btn btn-secondary z-hero_4">,
   <p class="t-paragraph z-hero_5"> (note optional per page). */
.sec-hero.pat { --h: 700px; }
.z-hero_3 { background: var(--cream); border-color: var(--cream); color: var(--ink); }
.z-hero_5 { color: rgba(242,239,232,1); font-size: 14px; text-align: center; }
.z-hero_5 a { color: inherit; }
@media (min-width: 901px) {
  .z-hero_3 { left: 415px; top: 556px; width: 182px; height: 48px; }
  .z-hero_4 { left: 619px; top: 556px; width: 166px; height: 48px; }
  .z-hero_5 { left: 300px; top: 638px; width: 600px; }
}

/* bands */
.fl { position: relative; overflow: hidden; --line: rgba(46,42,37,.25); }
.fl-wrap { max-width: 1200px; margin: 0 auto; padding: 96px 60px 104px; }
.fl-cream { background: var(--cream); }
.fl-stone { background: #ECE6DC; }
.fl-dark  { background: #221E1A; color: var(--cream-text); --line: rgba(242,239,232,.28); }
.fl-dark2 { background: #2B2723; color: var(--cream-text); --line: rgba(242,239,232,.28); }

/* type */
.fl-kicker { margin: 0 0 16px; font-family: var(--font-pop); font-weight: 300;
  font-size: 13px; letter-spacing: .24em; text-transform: uppercase; opacity: .8; }
.fl-title { margin: 0; font-family: var(--font-serif); font-weight: 400;
  font-size: 58px; line-height: 1.08; }
.fl-title em { font-family: var(--font-italic); font-style: normal; }
.fl-lede { margin: 22px 0 0; font-family: var(--font-pop); font-weight: 300;
  font-size: 16px; line-height: 1.6; letter-spacing: .02em; max-width: 620px; }
.fl-num { font-family: var(--font-italic); font-size: 22px; white-space: nowrap; }
.fl-note { margin: 44px 0 0; font-family: var(--font-pop); font-weight: 300;
  font-size: 15px; line-height: 1.6; max-width: 640px; }
.fl-note a, .fl-lede a { color: inherit; }
.fl-cta { margin-top: 40px; }

/* reveal on scroll (observer lives in each page's js) */
.fade-in { opacity: 0; transform: translateY(24px);
  transition: opacity .8s ease, transform .8s ease; }
.fade-in.is-in { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
  .fade-in { opacity: 1; transform: none; transition: none; }
}

/* review cards */
.rev-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 26px; margin-top: 54px; }
.rev-card { margin: 0; padding: 32px 30px 28px; border: 1px solid var(--line);
  display: flex; flex-direction: column; }
.rev-stars { font-size: 13px; letter-spacing: .35em; }
.rev-card blockquote { margin: 18px 0 24px; font-family: var(--font-italic);
  font-size: 21px; line-height: 1.4; }
.rev-card figcaption { margin-top: auto; font-family: var(--font-pop);
  font-weight: 300; font-size: 14px; }
.rev-card figcaption span { display: block; opacity: .65; font-size: 12.5px; margin-top: 4px; }

/* numbered editorial FAQ */
.qa-list { margin-top: 52px; }
.qa-item { display: grid; grid-template-columns: 96px 1fr; gap: 0 44px;
  padding: 30px 0; border-top: 1px solid var(--line); }
.qa-item:last-child { border-bottom: 1px solid var(--line); }
.qa-q { margin: 0; font-family: var(--font-serif); font-weight: 400;
  font-size: 27px; line-height: 1.2; }
.qa-a { grid-column: 2; margin: 12px 0 0; font-family: var(--font-pop);
  font-weight: 300; font-size: 15.5px; line-height: 1.6; max-width: 660px; }

/* interactive guide (venue guide / chapter player / timeline walker) */
.gd-grid { display: grid; grid-template-columns: 5fr 7fr; gap: 44px;
  margin-top: 54px; align-items: stretch; }
.gd-list { display: flex; flex-direction: column; }
.gd-item { display: flex; align-items: center; justify-content: space-between;
  gap: 18px; padding: 20px 4px; border: 0; border-top: 1px solid var(--line);
  background: none; color: inherit; text-align: left; cursor: pointer;
  font-family: var(--font-pop); font-weight: 300; opacity: .6;
  transition: opacity .3s ease, padding-left .3s ease; }
.gd-item:last-child { border-bottom: 1px solid var(--line); }
.gd-item.is-on { opacity: 1; padding-left: 14px; }
.gd-name { display: block; font-family: var(--font-serif); font-size: 25px; line-height: 1.15; }
.gd-sub { display: block; font-size: 13px; opacity: .7; margin-top: 5px; letter-spacing: .02em; }
.gd-arrow { font-family: var(--font-italic); font-size: 20px; flex: none; }
.gd-stage { position: relative; min-height: 560px; }
.gd-media { position: absolute; inset: 0; overflow: hidden; }
.gd-media img,
.gd-media video { position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; opacity: 0; transition: opacity .9s ease; }
.gd-media img.is-on,
.gd-media video.is-on { opacity: 1; }
.gd-card { position: absolute; left: 32px; right: 32px; bottom: 32px;
  background: var(--cream); color: var(--ink); padding: 26px 28px 28px; }
.fl-cream .gd-card, .fl-stone .gd-card { background: #221E1A; color: var(--cream-text); }
.gd-label { margin: 0 0 12px; font-family: var(--font-pop); font-weight: 300;
  font-size: 12px; letter-spacing: .22em; text-transform: uppercase; opacity: .75; }
.gd-note { display: none; margin: 0 0 0; font-family: var(--font-pop);
  font-weight: 300; font-size: 15px; line-height: 1.55; }
.gd-note.is-on { display: block; }
.gd-card .btn { margin-top: 20px; }

/* card grids (packages, offers, occasion panels, booth options) */
/* Reconciled list: the card count is the client's package count, not the
   demo's. Flex-wrap + justify-content:center keeps a trailing row of 1 or 2
   centred instead of stranded; a full row renders identically to the grid. */
.card-grid { display: flex; flex-wrap: wrap; justify-content: center; gap: 26px; margin-top: 54px; }
.card-grid > * { flex: 0 1 calc((100% - 2 * 26px) / 3 - 0.5px); min-width: 240px; }
.card-grid.two > * { flex: 0 1 calc((100% - 26px) / 2 - 0.5px); }
.pcard { position: relative; border: 1px solid var(--line); display: flex;
  flex-direction: column; padding: 0 0 30px; color: inherit; text-decoration: none; }
.pcard-img,
.pcard-video { height: 300px; overflow: hidden; }
.pcard-img img,
.pcard-video video { width: 100%; height: 100%; object-fit: cover;
  display: block; transition: transform .7s ease; }
.pcard:hover .pcard-img img,
.pcard:hover .pcard-video video { transform: scale(1.04); }
.pcard-num { margin: 22px 28px 0; font-family: var(--font-italic); font-size: 19px; }
.pcard h3 { margin: 8px 28px 0; font-family: var(--font-serif);
  font-weight: 400; font-size: 29px; line-height: 1.15; }
.pcard-price { margin: 16px 28px 0; font-family: var(--font-serif); font-size: 38px; line-height: 1; }
.pcard-price small { display: block; font-family: var(--font-pop); font-weight: 300;
  font-size: 12px; letter-spacing: .2em; text-transform: uppercase;
  opacity: .65; margin-bottom: 8px; }
.pcard p { margin: 14px 28px 0; font-family: var(--font-pop); font-weight: 300;
  font-size: 14.5px; line-height: 1.6; }
.pcard ul { margin: 16px 28px 0; padding: 0; list-style: none;
  font-family: var(--font-pop); font-weight: 300; font-size: 14px; line-height: 1.5; }
.pcard li { padding: 8px 0 0; }
.pcard li::before { content: "·"; margin-right: 10px; }
.pcard .btn { margin: 24px 28px 0; align-self: flex-start; }
.pcard-link { display: inline-block; margin: 20px 28px 0; font-family: var(--font-pop);
  font-weight: 300; font-size: 14px; color: inherit;
  text-decoration: underline; text-underline-offset: 4px; }
.pcard.is-featured { background: #221E1A; color: var(--cream-text);
  border-color: #221E1A; }
.pcard-pill { position: absolute; top: 18px; left: 18px; z-index: 1;
  background: var(--cream); color: var(--ink); font-family: var(--font-pop);
  font-weight: 300; font-size: 12px; letter-spacing: .14em;
  text-transform: uppercase; padding: 8px 14px; }

/* count-up stat rows */
.ct-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 26px; margin-top: 48px; }
.ct-row.three { grid-template-columns: repeat(3, 1fr); }
.ct { border-top: 1px solid var(--line); padding-top: 20px; }
.ct b { display: block; font-family: var(--font-serif); font-weight: 400;
  font-size: 62px; line-height: 1; }
.ct span { display: block; margin-top: 12px; font-family: var(--font-pop);
  font-weight: 300; font-size: 12.5px; letter-spacing: .18em;
  text-transform: uppercase; opacity: .75; }

/* three-point rows (what's included foundations, the case for the booth) */
.pt-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 40px; margin-top: 54px; }
.pt { border-top: 1px solid var(--line); padding-top: 22px; }
.pt .fl-num { display: block; margin-bottom: 14px; }
.pt h3 { margin: 0; font-family: var(--font-serif); font-weight: 400;
  font-size: 24px; line-height: 1.2; }
.pt p { margin: 12px 0 0; font-family: var(--font-pop); font-weight: 300;
  font-size: 15px; line-height: 1.6; }

/* two-column included list */
.inc-list { list-style: none; margin: 46px 0 0; padding: 0;
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 0 60px; }
.inc-list li { padding: 22px 0; border-top: 1px solid var(--line); }
.inc-list b { display: block; font-family: var(--font-serif); font-weight: 400;
  font-size: 22px; line-height: 1.2; }
.inc-list span { display: block; margin-top: 8px; font-family: var(--font-pop);
  font-weight: 300; font-size: 14.5px; line-height: 1.55; opacity: .85; }

/* area chips */
.chip-row { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 34px; }
.chip-row span, .chip-row a { font-family: var(--font-pop); font-weight: 300;
  font-size: 14px; padding: 10px 20px; border: 1px solid var(--line);
  border-radius: 999px; color: inherit; text-decoration: none; }

/* flow-layer mobile (additive; the canvas mobile rules above are untouched) */
@media (max-width: 900px) {
  .sec-hero .z-hero_3 { order: 4; margin-top: 28px; }
  .sec-hero .z-hero_4 { order: 5; margin-top: 12px; }
  .sec-hero .z-hero_5 { order: 6; margin-top: 20px; }
  .fl-wrap { padding: 60px 22px 68px; }
  .fl-title { font-size: clamp(34px, 9.5vw, 44px); }
  .rev-grid, .pt-grid { grid-template-columns: 1fr; margin-top: 36px; }
  .card-grid, .card-grid.two { margin-top: 36px; }
  .card-grid > *, .card-grid.two > * { flex: 1 1 100%; }
  .gd-grid { grid-template-columns: 1fr; gap: 26px; margin-top: 36px; }
  .gd-stage { min-height: 480px; }
  .qa-item { grid-template-columns: 1fr; gap: 0; padding: 24px 0; }
  .qa-item .fl-num { margin-bottom: 8px; }
  .qa-q { font-size: 22px; }
  .qa-a { grid-column: 1; }
  .ct-row, .ct-row.three { grid-template-columns: repeat(2, 1fr); margin-top: 34px; }
  .ct b { font-size: 44px; }
  .inc-list { grid-template-columns: 1fr; margin-top: 30px; }
  .pcard-img,
  .pcard-video { height: 240px; }
}

/* Clamp the kit's decorative edge-bleeds (.social-strip filmstrip) so interior
   pages show no horizontal scrollbar. `clip` (not `hidden`) so position:sticky
   descendants keep working. patterns.css is never linked on index. */
html { overflow-x: clip; }

/* ---------- package cards: count-aware layout (see the JS in services.js) ----
   Four or more package cards turn the row into a one-row slider with arrows.
   At three or fewer nothing here applies and the list renders as designed.
   Recovered from live San Diego 2026-07-28; canonical copy in design-01. */
@media (min-width: 901px) {
  .card-grid.is-slider {
    display: flex; justify-content: flex-start; flex-wrap: nowrap;
    /* BOTH axes hidden, NOT auto: the arrows are the only way the rail moves.
       As an auto scroller with x-mandatory snap it captured trackpad gestures,
       and a lone overflow-x forces overflow-y to compute to auto, so the
       hover/pill headroom (padding-top pulled back by margin) left ~26px of
       vertical overflow: the rail latched the wheel and froze PAGE scrolling
       over the whole section (found live on a client build 2026-08-01). hidden blocks
       user scrolling on both axes; the arrows' scrollTo() keeps working. */
    overflow: hidden;
    padding-top: 22px; margin-top: -22px;
  }
  .card-grid.is-slider > article {
    flex: 0 0 calc((100% - 2 * 26px) / 3);
  }
}
.svc-pkg-shell { position: relative; }
.svc-pkg-arrow {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 5;
  width: 48px; height: 48px; border-radius: 50%; cursor: pointer;
  background: #fff; border: 1px solid rgba(0, 0, 0, .25); color: inherit;
  font-size: 24px; line-height: 1; display: none;
  align-items: center; justify-content: center;
  box-shadow: 0 6px 18px rgba(0, 0, 0, .14);
  transition: background .35s, color .35s, border-color .35s;
}
@media (min-width: 901px) { .svc-pkg-shell .svc-pkg-arrow { display: inline-flex; } }
.svc-pkg-arrow:hover { background: #111; color: #fff; border-color: #111; }
.svc-pkg-arrow:focus-visible { outline: 2px solid currentColor; outline-offset: 3px; }
.svc-pkg-prev { left: -22px; }
.svc-pkg-next { right: -22px; }

/* ---- contact form: canvas to flow, the DESKTOP half (2026-09-11) ----------
   patterns.css is what every SUBPAGE loads; css/form.css is what the home page
   loads. form.css carried both halves of the canvas-to-flow conversion and this
   file only ever got the mobile half, so above 900px the subpages kept
   style.css's `.contact-form { position: absolute; inset: 0 }` base and the whole
   form collapsed into a pile in the corner with the submit button covered by the
   package select. Home was fine, which is exactly why it went unnoticed.

   These are form.css's own rules, for the same component: all five design-02
   pages carry an identical contact section (two views, four z layers, seven
   fields, no image). Live sites built from this kit already carry this block in
   their own patterns.css, which is where it was checked against.

   Mobile is untouched. The max-width layer above already neutralises the inline
   geometry with position/left/top/width !important, so it never depended on the
   coordinates this conversion removes. */
@media (min-width: 901px) {
  .sec-contact-form, .sec-contact-form .cv { height: auto; min-height: 740px; }
  .sec-contact-form .cv { display: flex; flex-direction: column; align-items: flex-start; }
  .sec-contact-form .contact-form { position: static; width: 510px;
      margin: 113px 60px 129px 630px; }
  .sec-contact-form .cf-view.cf-form:not([hidden]) { position: static; display: flex;
      flex-direction: column; gap: 19px; }
  .sec-contact-form .cf-form .field { position: static; width: 100%; }
  /* Rows exist for questions the form editor ADDS side by side; the kit ships
     none, so these are inert until a client uses the editor. */
  .sec-contact-form .cf-form .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; }
  /* a field left alone on a shared row spans the full line (owner rule) */
  .sec-contact-form .cf-form .form-row > :only-child { grid-column: 1 / -1; }
  /* 22, not 41: the column's own 19px gap already supplies part of the canvas's
     41px, and margin adds to the gap rather than replacing it. */
  .sec-contact-form .cf-form .btn { margin-top: 22px; }
  .sec-contact-form .cf-form .cf-error { position: static; width: auto; }
}

/* The two rules form.css's mobile layer carries and this file did not. Both are
   inert on the kit as shipped and become load bearing the moment a client adds
   a side-by-side question or an add-on picker through the form editor. */
@media (max-width: 900px) {
  .sec-contact-form .cf-form .form-row { display: contents; }
  .sec-contact-form .addon-picks { position: static !important; left: auto !important;
      top: auto !important; width: 100% !important; }
}

/* The 901 to 1199 gap. The desktop rule above pins this block's right edge at
   1140px (a 630px left margin + 510px, inside .cv's fixed 1200px canvas), while
   the stacked layout does not take over until 900px. Between the two the form
   runs past the viewport, and html{overflow-x:clip} removes the scrollbar, so
   the cut-off half could not be reached at all: 116px lost at 1024 (ordinary
   iPad landscape) and 239px at 901, taking the second column of add-on
   checkboxes and the send button off screen. Reuse the kit's own stacked
   reflow here, including the blanket that un-absolutes canvas children
   (style.css `.sec .cv > *`), which is what the mobile layout relies on and
   the only reason this is a few rules rather than a re-layout. Centred,
   because at these widths a left-aligned column leaves the right half empty.
   Nothing outside 901-1199 is touched. */
@media (min-width: 901px) and (max-width: 1199px) {
  .sec-contact-form, .sec-contact-form .cv { height: auto; min-height: 0; }
  .sec-contact-form .cv > * { position: static; left: auto; top: auto; right: auto; bottom: auto;
      width: auto; height: auto; white-space: normal; }
  .sec-contact-form .cv { width: auto; max-width: 760px; margin: 0 auto; display: flex;
      flex-direction: column; padding: 60px 40px 70px; }
  .sec-contact-form .z-contact-form_4 { order: 1; font-size: 17px; }
  .sec-contact-form .z-contact-form_3 { order: 2; font-size: 28px; margin-top: 14px; }
  .sec-contact-form .z-contact-form_2 { order: 3; font-size: 16px; margin-top: 26px; }
  .sec-contact-form .z-contact-form_1 { order: 4; margin-top: 4px; }
  .sec-contact-form .contact-form { order: 5; position: static; width: 100%; max-width: 620px;
      margin: 34px 0 0; }
  .sec-contact-form .cf-view:not([hidden]) { position: static; display: flex; flex-direction: column; }
  .sec-contact-form .field { position: static !important; left: auto !important; top: auto !important;
      width: auto !important; }
  .sec-contact-form .cf-form .btn { position: static !important; left: auto !important; top: auto !important; }
  .sec-contact-form .cf-success > * { position: static !important; left: auto !important;
      top: auto !important; width: auto !important; }
  .sec-contact-form .cf-form .form-row { display: contents; }
  .sec-contact-form .addon-picks { position: static !important; left: auto !important;
      top: auto !important; width: auto !important; }
}

/* PHONES: THE PACKAGE CARDS ARE A SWIPE TRACK. Ported 2026-09-27 from
   design-03 (Charisma, owner call 2026-09-22) onto this kit's .card-grid /
   .pcard package list; the desktop rail above is untouched. Native scrolling
   only, no gesture code: the track scrolls sideways and NOT vertically
   (overflow-y hidden, never auto, the lesson of the desktop rail above), and
   touch-action stays at its default, so a vertical swipe over a card scrolls
   the PAGE and a sideways one slides the cards. The arrow bar is for people
   who do not think to swipe: fixed to the bottom of the screen while the
   section is on screen (pkg-rail.js), never on desktop. Any card count from
   two up; keyed on the reconciler's own mark so a portal save that adds a
   package joins the track with no rebuild. */
@media (max-width: 900px) {
  .card-grid[data-bc-pkg-list="package"] {
    display: flex; flex-wrap: nowrap; justify-content: flex-start;
    /* Each card its own height (Charisma, owner 2026-09-22: equal heights
       "just leaves a ton of blank space"); desktop still stretches. */
    align-items: flex-start;
    gap: 6px; margin-top: 36px;
    /* Every card centres in the track with the ones either side peeking. The
       side padding is what lets the FIRST and LAST card centre too. The card
       is sized in vw on purpose: a percentage flex-basis resolves against the
       track's content box, which this very padding shrinks, so the two chase
       each other; a vw card is absolute and padding + card/2 lands on the
       track's centre at either end. 84vw of a 390 screen shows ~28px of each
       neighbour, most of it their photo. */
    --pk-card: 84vw;
    padding: 0 calc((100% - var(--pk-card)) / 2) 8px;
    overflow-x: auto; overflow-y: hidden;
    scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    /* No intrinsic width of its own: a scroll container reports its whole
       content width to a flex/grid parent. width 0 + min-width 100%. */
    width: 0; min-width: 100%;
  }
  .card-grid[data-bc-pkg-list="package"]::-webkit-scrollbar { display: none; }
  .card-grid[data-bc-pkg-list="package"] > .pcard { flex: 0 0 var(--pk-card); min-width: 0; scroll-snap-align: center; }
  /* THE NEIGHBOURS HAVE TO BE VISIBLE. Cards carry .fade-in, which only turns
     on when the card intersects the viewport, and a card parked off to the
     side never does: the peek would be a card at opacity 0. In the track they
     are always shown; the section around them still reveals on scroll. */
  .card-grid[data-bc-pkg-list="package"] > .pcard.fade-in { opacity: 1; transform: none; }
  /* One package: nothing to peek at. :only-of-type, NOT :only-child, because
     the inert <template data-bc-pkg-item> is a sibling. */
  .card-grid[data-bc-pkg-list="package"] > .pcard:only-of-type { flex-basis: 100%; }
  .card-grid[data-bc-pkg-list="package"]:has(> .pcard:only-of-type) { padding-inline: 0; }
  /* FULL BLEED, the deterministic way: this one section drops the wrap's 22px
     gutter and the heading, lede and note take it back themselves, so the
     track spans the screen with no negative margins (calc(50% - 50vw) resolves
     against a shell that is already 100vw and computes to zero). Descendant
     :has(), not child: pkg-rail.js wraps the list in .svc-pkg-shell at every
     width. */
  .fl:has(.card-grid[data-bc-pkg-list="package"]) { overflow-x: clip; }
  .fl:has(.card-grid[data-bc-pkg-list="package"]) > .fl-wrap { padding-inline: 0; }
  .fl:has(.card-grid[data-bc-pkg-list="package"]) > .fl-wrap > .fl-kicker,
  .fl:has(.card-grid[data-bc-pkg-list="package"]) > .fl-wrap > .fl-title,
  .fl:has(.card-grid[data-bc-pkg-list="package"]) > .fl-wrap > .fl-lede,
  .fl:has(.card-grid[data-bc-pkg-list="package"]) > .fl-wrap > .fl-note { padding-inline: 22px; }
}
/* The phone bar: back, a "2 / 4" counter read from the DOM, forward. Built and
   positioned by pkg-rail.js; shown only while its track is on screen. */
.svc-pkg-mnav { display: none; }
@media (max-width: 900px) {
  .svc-pkg-mnav {
    position: fixed; left: 50%; bottom: calc(18px + env(safe-area-inset-bottom, 0px)); z-index: 50;
    transform: translateX(-50%);
    display: flex; align-items: center; gap: 14px; padding: 8px 10px; border-radius: 999px;
    background: var(--ink); color: var(--cream-text); box-shadow: 0 10px 28px rgba(0, 0, 0, .28);
    opacity: 0; pointer-events: none; transition: opacity .25s;
  }
  .svc-pkg-mnav.is-on { opacity: 1; pointer-events: auto; }
  .svc-pkg-mnav.in-editor { bottom: 84px; }   /* above the site editor's toolbar in its phone view */
  .svc-pkg-mbtn {
    width: 40px; height: 40px; border-radius: 50%; cursor: pointer;
    background: transparent; color: inherit; border: 1px solid rgba(242, 239, 232, .45);
    font-size: 20px; line-height: 1; display: inline-flex; align-items: center; justify-content: center;
    -webkit-appearance: none; appearance: none;
  }
  .svc-pkg-mbtn:active { background: rgba(242, 239, 232, .14); }
  .svc-pkg-mcount { font-family: var(--font-pop); font-weight: 300; font-size: 12px; letter-spacing: .2em; min-width: 52px; text-align: center; }
}
