@font-face{
  font-family:"Plus Jakarta Sans";
  src:url("../fonts/PlusJakartaSans-Light.ttf") format("truetype");
  font-weight:300;
  font-style:normal;
  font-display:swap;
}
@font-face{
  font-family:"Plus Jakarta Sans";
  src:url("../fonts/PlusJakartaSans-Regular.ttf") format("truetype");
  font-weight:400;
  font-style:normal;
  font-display:swap;
}
@font-face{
  font-family:"Plus Jakarta Sans";
  src:url("../fonts/PlusJakartaSans-Medium.ttf") format("truetype");
  font-weight:500;
  font-style:normal;
  font-display:swap;
}
@font-face{
  font-family:"Plus Jakarta Sans";
  src:url("../fonts/PlusJakartaSans-SemiBold.ttf") format("truetype");
  font-weight:600;
  font-style:normal;
  font-display:swap;
}
@font-face{
  font-family:"Plus Jakarta Sans";
  src:url("../fonts/PlusJakartaSans-Bold.ttf") format("truetype");
  font-weight:700;
  font-style:normal;
  font-display:swap;
}
@font-face{
  font-family:"Plus Jakarta Sans";
  src:url("../fonts/PlusJakartaSans-Italic.ttf") format("truetype");
  font-weight:400;
  font-style:italic;
  font-display:swap;
}
@font-face{
  font-family:"Plus Jakarta Sans";
  src:url("../fonts/PlusJakartaSans-MediumItalic.ttf") format("truetype");
  font-weight:500;
  font-style:italic;
  font-display:swap;
}
@font-face{
  font-family:"Plus Jakarta Sans";
  src:url("../fonts/PlusJakartaSans-SemiBoldItalic.ttf") format("truetype");
  font-weight:600;
  font-style:italic;
  font-display:swap;
}
@font-face{
  font-family:"Plus Jakarta Sans";
  src:url("../fonts/PlusJakartaSans-BoldItalic.ttf") format("truetype");
  font-weight:700;
  font-style:italic;
  font-display:swap;
}

:root{
  --gold:#7E3187;
  --gold-bg:#7E3187;
  --ink:#f6f1e8;
  --muted:rgba(246,241,232,.68);
  --line:rgba(126,49,135,.30);
  --panel:rgba(16,16,16,.42);
  --glass:rgba(255,255,255,.075);
  --stage-scale:1;
}
*{box-sizing:border-box}
/* REVERTED, per Dave (urgent regression report): "the upper darkening bar
   scrolls out of the picture now instead of being pinned/locked - I did
   not ask for that." Root cause of THAT bug: the `overflow-x:hidden` this
   comment used to add to <html> (below) does more than clip horizontal
   overflow - per spec, giving the root <html> element any non-visible
   overflow value makes it establish its OWN scrolling box, which in some
   engines breaks `position:sticky` on descendants like .wg-topbar (the
   header relies on sticking within the normal viewport-as-scroller
   behavior that a plain, un-overridden <html> provides). That's a much
   worse, highly-visible bug than the rare ~60-70px phantom horizontal
   scroll it was meant to fix, so it's reverted here - back to relying on
   <body>'s own overflow-x:hidden below (which was already there before
   that round and never caused this problem) as the primary guard. If the
   phantom horizontal scroll resurfaces, the safer next step is hunting
   down the actual offending "100vw" full-bleed element rather than
   touching <html>'s overflow again. */
html{scroll-behavior:smooth;background:#2a2a2a;}
body{
  margin:0;
  min-height:100vh;
  color:var(--ink);
  font-family:"Plus Jakarta Sans";
  background:#2a2a2a;
  overflow-x:hidden;
  max-width:100%;
  letter-spacing:.012em;
}
.page-bg{
  position:fixed;
  inset:0;
  z-index:-2;
  background:
    radial-gradient(circle at 18% 15%, rgba(126,49,135,.095), transparent 30%),
    radial-gradient(circle at 78% 22%, rgba(190,190,190,.09), transparent 34%),
    linear-gradient(135deg, #222222 0%, #343434 48%, #2a2a2a 100%);
}
.page-bg::after{
  content:"";
  position:absolute;
  inset:0;
  background:linear-gradient(180deg, rgba(0,0,0,.05), rgba(0,0,0,.24));
  backdrop-filter:blur(0px);
}
.wg-topbar{
  position:sticky;
  top:0;
  z-index:50;
  /* Bug fix, per Dave: "on this size window you have the waltersgroup
     growing and growing so it grows out of the background darkening box."
     Root cause: this box uses global box-sizing:border-box (see the *{}
     rule at the top of this file), so a fixed height:96px with an 18px
     bottom padding only leaves 78px of real content room from the top
     edge down to where the padding starts. The logo's real aspect ratio
     (164.344 x 36.512 per its SVG viewBox) puts it at ~82.6px tall at its
     20%-bigger 372px max width (see the min-width:761px .wg-logo override
     later in this file) - ~4-5px taller than that 78px content room at
     the wider end of its vw-based scaling range, so it visually spilled
     past the padding into/past the bottom edge of the dark gradient
     background at those in-between window widths. Switched height to
     min-height so the bar itself grows just enough to always contain the
     logo (still 96px at every width where the smaller/un-scaled logo
     already fit), rather than clipping/overflowing a fixed box. */
  min-height:96px;
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  padding:0 clamp(22px,4vw,64px) 18px 40px;
  background:linear-gradient(180deg, rgba(42,42,42,.72), rgba(42,42,42,.26));
  backdrop-filter:blur(18px);
  border-bottom:6px solid rgba(255,255,255,.3);
}
/* Fix, per Dave: "Waltersgroup logo can move up 7px and be 25% smaller
   too on that base page (not inside pmts)" - scoped to this marketing/
   base-page file only (tunnel.css's own header markup is untouched).
   Width clamp scaled to 0.75x across the board (190->143, 18vw->13.5vw,
   310->233); margin-top:-7px nudges it up within the topbar's flex row
   without affecting the row's own height/other content. */
.wg-logo{width:clamp(143px,13.5vw,233px);max-width:52vw;height:auto;filter:brightness(1.06);display:block;margin-top:-7px;}
.wg-logo-link{display:inline-block;line-height:0;text-decoration:none;}
.wg-nav{display:flex;gap:10px;align-items:center;margin-top:18px;font-family:"Plus Jakarta Sans", Arial, sans-serif;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:rgba(246,241,232,.78)}
.wg-nav a{color:inherit;text-decoration:none;padding:10px 13px;border-radius:999px;transition:.25s ease}
.wg-nav a:hover{color:var(--gold);background:rgba(255,255,255,.06)}
.wg-nav .pill{border:1px solid rgba(255,255,255,.23);background:rgba(255,255,255,.06)}
main{padding:clamp(6px,2.4vw,42px) clamp(18px,4vw,64px) 90px}
/* v24: shift all below-nav content upward for a stronger initial reveal on arrival. */
.hero{max-width:1760px;margin:0 auto}
/* v1018: eyebrow ("WEBSITE REDESIGN PROPOSAL") removed from all client
   pages per Dave - pull the hero copy block up a bit further on desktop
   to fill the freed space, since removing the eyebrow div alone only
   recovers its own height. Mobile untouched (eyebrow was already
   display:none there since v539). */
@media (min-width:761px){
  .copy-block{
    margin-top:-14px;
  }
}
.copy-block{max-width:1420px;margin:0 0 26px 0;text-align:left}
.eyebrow{
  display:inline-block;
  color:var(--gold);
  font-size:12px;
  letter-spacing:.14em;
  text-transform:uppercase;
  margin-bottom:17px;
}

/* v539: drop the "WEBSITE REDESIGN PROPOSAL" eyebrow on mobile - it isn't
   necessary at that size and just pushes the before/after comparison
   further below the fold. */
@media (max-width:640px){
  .copy-block .eyebrow{
    display:none !important;
  }
}
h1{
  font-family:"Plus Jakarta Sans", Arial, sans-serif;
  margin:0;
  font-size:clamp(42px,5.6vw,82px);
  line-height:.94;
  font-weight:500;
  letter-spacing:-.045em;
  max-width:1120px;
}

.headline-soft{color:rgba(246,241,232,.76);}
.headline-punch{color:#ffffff;}
.lead{
  margin:25px 0 0;
  max-width:760px;
  font-family:"Plus Jakarta Sans", Arial, sans-serif;
  color:var(--muted);
  font-size:clamp(16px,1.6vw,21px);
  line-height:1.55;
}
.lead--below-compare{
  margin-top:22px;
  max-width:640px;
}
/* Per Dave: this paragraph now sits over the dark comparison photo
   background instead of the solid hero background it used to live on - the
   site-wide ".lead{color:rgba(84,98,107,.74) !important}" rule further down
   this file (the "Subtle gray text balance" block) reads as dim/faded
   there. Compound selector (two classes) beats that rule's specificity so
   this one instance goes solid white without touching the shared rule
   every other .lead on the site still relies on. */
.lead.lead--below-compare{
  color:#fff !important;
}
@media (max-width:760px){
  .lead--below-compare{
    margin-top:18px;
  }
}
/* Per Dave (desktop only - .comparison-card runs full-bleed edge-to-edge
   here by design, so this text block inherits zero side gutter from its
   parent and was running flush against the browser edge). Adds real side
   padding, and drops the type down from .lead's normal
   clamp(16px,1.6vw,21px) to a smaller fixed size matching the other
   overlay caption text on this same photo (.comparison-head p is 14px) -
   this is a caption over a photo now, not body copy, so it reads better
   smaller. box-sizing so the padding doesn't blow max-width back out past
   640px. */
@media (min-width:761px){
  .lead--below-compare{
    box-sizing:border-box;
    padding:0 48px;
    font-size:16px;
    /* Per Dave: pull the caption up so it sits right under the laptop's
       keyboard edge (was 22px below the image crop, now tucked closer),
       shift it right within the full-bleed dark backdrop, and widen the
       block so the line count drops from 5 lines to 4 or fewer. */
    margin-top:-8px;
    margin-left:30px;
    max-width:820px;
  }
}
.comparison-card{
  position:relative;
  overflow:visible;
  border-radius:0;
  padding:0;
  background:transparent;
  border:none;
  box-shadow:none;
}
.compare-layout{
  position:relative;
  display:block;
}
.compare-main{
  min-width:0;
  width:100%;
}
.comparison-card::before{display:none}
.comparison-head{
  position:absolute;
  z-index:40;
  top:clamp(104px,7.2vw,148px);
  left:calc((1608px * var(--stage-scale)) + clamp(30px, 2.2vw, 42px));
  right:auto;
  width:min(360px, calc(100% - ((1608px * var(--stage-scale)) + clamp(30px, 2.2vw, 42px)) - 22px));
  min-width:240px;
  padding-left:0;
  box-sizing:border-box;
  display:flex;
  flex-direction:column;
  gap:10px;
  align-items:flex-start;
  text-align:left;
  pointer-events:none;
}
.small-label{font-size:11px;text-transform:uppercase;letter-spacing:.13em;color:#ffffff}
h2{font-family:"Plus Jakarta Sans", Arial, sans-serif;margin:2px 0 0;font-size:clamp(24px,2.35vw,38px);line-height:1.08;font-weight:500;letter-spacing:-.03em;max-width:11ch}
.comparison-head p{font-family:"Plus Jakarta Sans", Arial, sans-serif;margin:0;color:rgba(246,241,232,.66);font-size:14px;line-height:1.6;max-width:360px}
.compare-shell{position:relative;z-index:2;width:100%;overflow:visible;border-radius:0;background:transparent;box-shadow:none}
/* v1215, per Dave: was 1140px - see the matching baseH comment in
   main-v114.js (resizeStage() sets this element's height inline via JS,
   which always wins over this stylesheet value - both had to move
   together). Kept in sync here as the pre-JS fallback. */
.stage-holder{position:relative;width:100%;height:calc(1300px * var(--stage-scale));overflow:hidden;background:#fff;touch-action:pan-y}
.stage-fixed{position:absolute;left:0;top:0;width:2000px;height:1402px;transform:scale(var(--stage-scale));transform-origin:top left;overflow:hidden;background:#fff;--split:1000px}
.scene{position:absolute;inset:0;z-index:1}
.scene-after{clip-path:inset(0 0 0 var(--split));z-index:2}
.screen{position:absolute;overflow:hidden;background:#fff;z-index:1}
.laptop-screen{left:363px;top:298px;width:1080px;height:676px}
.phone-screen{left:1542px;top:585px;width:206px;height:451px;border-radius:26px}
.before-screen{display:flex;align-items:flex-start;justify-content:center;background:#fff}
.before-screen img{width:100%;height:100%;object-fit:contain;object-position:center top;background:#fff}
.laptop-screen.before-screen img{object-fit:cover;object-position:center top;padding:0;background:#fff}
.phone-screen.before-screen img{object-fit:cover;object-position:center top}
/* FIX, per Dave: "white screen for two or three seconds, then the HTML
   website with a video pops in - looks terrible... wanted to show black
   first." Root cause: the shared .screen rule (base class both
   .before-screen and .after-screen use) hardcodes background:#fff -
   correct for .before-screen (a real photo needs a white matte behind it
   while it loads), but .after-screen has no photo at all, just an iframe
   showing the live redesigned site - so for those 2-3 seconds before the
   iframe's own page paints, the visible background is this shared white,
   not the iframe's own background:#000 below (which only applies once the
   iframe itself has something to render). Overriding just .after-screen
   (not the shared .screen rule, which would also turn .before-screen's
   photo-loading matte black) to black closes that gap - now black shows
   through immediately, then the iframe's real content replaces it. */
.after-screen{background:#000}
/* REMOVED (2026-07-29, later), per Dave: the black cover-until-loaded
   overlay that used to sit here (a ::after covering the iframe until
   main-v114.js added .is-iframe-loaded on its 'load' event) was producing
   a multi-second black hold on both the laptop and phone - worse than the
   plain white-flash it was meant to fix. Dave's own "Your new website"
   tunnel-wizard monitor (assets/shared/tunnel.js buildRoot()) never used
   any such cover and loads/paints fine without one - matched that same
   no-mask behavior here instead. Both iframes are eager-loaded now (see
   index.html), so background:#000 above already covers the brief real
   gap before the iframe's own content paints. */
.after-screen iframe{border:0;display:block;background:#000;transform-origin:top left;pointer-events:auto}
.laptop-screen.after-screen iframe{width:1440px;height:900px;transform:scale(.75)}
.phone-screen.after-screen iframe{width:390px;height:850px;transform:scale(.5282)}
.device-frame{position:absolute;inset:0;width:2000px;height:1402px;z-index:5;pointer-events:none;user-select:none}

.focus-label{
  position:absolute;
  left:50%;
  top:18px;
  transform:translateX(-50%);
  z-index:30;
  min-width:250px;
  text-align:center;
  pointer-events:none;
}
.focus-label__text{
  position:absolute;
  left:50%;
  top:0;
  transform:translateX(-50%) translateY(8px);
  display:inline-flex;
  align-items:center;
  justify-content:center;
  white-space:nowrap;
  padding:12px 18px;
  border-radius:999px;
  background:rgba(0,0,0,.42);
  backdrop-filter:blur(12px);
  border:1px solid rgba(255,255,255,.22);
  box-shadow:0 10px 28px rgba(0,0,0,.16);
  font-family:"Plus Jakarta Sans", Arial, sans-serif;
  font-size:12px;
  letter-spacing:.14em;
  text-transform:uppercase;
  opacity:0;
  transition:opacity .28s ease, transform .28s ease;
  color:#fff;
  z-index:31;
}
.focus-label__text--proposed{
  color:var(--gold);
}
.focus-label__text.is-active{
  transform:translateX(-50%) translateY(0);
}

.divider{position:absolute;top:0;left:var(--split);height:1402px;width:80px;transform:translateX(-40px);z-index:18;pointer-events:auto;cursor:ew-resize;touch-action:none}
.divider::before{content:"";position:absolute;top:62px;height:688px;bottom:auto;left:50%;width:2px;transform:translateX(-50%);background:rgba(255,255,255,.78);box-shadow:0 0 0 1px rgba(0,0,0,.12)}
.handle{position:absolute;left:50%;top:50%;width:86px;height:86px;transform:translate(-50%,-50%);border-radius:50%;background:rgba(255,255,255,.93);box-shadow:0 12px 30px rgba(0,0,0,.22);display:flex;align-items:center;justify-content:center;gap:12px;color:#9a1f27;font-family:"Plus Jakarta Sans", Arial, sans-serif;font-size:40px;line-height:1;font-weight:350;pointer-events:auto}
.range{position:absolute;left:0;bottom:0;width:1px;height:1px;opacity:0;z-index:-1;pointer-events:none;margin:0}
.notes{max-width:1760px;margin:34px auto 0;display:grid;grid-template-columns:repeat(5,1fr);gap:16px}
.note-item{padding:26px;border-radius:22px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.11);text-align:left}
.note-item span{color:#ffffff;font-size:12px;letter-spacing:.14em}
.note-item h3{font-family:"Plus Jakarta Sans", Arial, sans-serif;margin:13px 0 10px;font-weight:500;font-size:20px;letter-spacing:-.02em}
.note-item p{font-family:"Plus Jakarta Sans", Arial, sans-serif;margin:0;color:rgba(246,241,232,.66);line-height:1.55;font-size:14px}

@media (max-width:1520px) and (min-width:1101px){
  .comparison-head{
    top:clamp(74px, 5.6vw, 104px);
    width:min(360px, calc(100% - ((1608px * var(--stage-scale)) + clamp(34px, 2.4vw, 46px)) - 28px));
    left:calc((1608px * var(--stage-scale)) + clamp(34px, 2.4vw, 46px));
    gap:8px;
  }
  .comparison-head h2{
    font-size:clamp(21px, 1.92vw, 30px);
    line-height:1.06;
    max-width:14ch;
  }
  .comparison-head .small-label{
    font-size:10px;
  }
}

@media (max-width:1420px) and (min-width:1101px){
  .comparison-head{
    top:70px;
    width:min(350px, calc(100% - ((1608px * var(--stage-scale)) + 36px) - 24px));
    left:calc((1608px * var(--stage-scale)) + 36px);
    gap:7px;
  }
  .comparison-head h2{
    font-size:clamp(20px, 1.78vw, 27px);
    line-height:1.05;
    max-width:15ch;
  }
}

@media (max-width:1100px){
  .comparison-head{
    position:relative;
    top:auto;
    right:auto;
    width:auto;
    max-width:760px;
    padding:0 0 18px 0;
  }
}
@media (max-width:900px){
  .wg-topbar{height:auto;align-items:flex-start;gap:14px;flex-direction:column}.wg-nav{flex-wrap:wrap}.notes{grid-template-columns:1fr}.comparison-card{border-radius:24px;padding:18px}.shade{display:none}.handle{width:70px;height:70px;font-size:33px}.copy-block{margin-bottom:22px}.focus-label{top:16px;min-width:220px}.focus-label__text{font-size:11px;padding:10px 15px}
}
@media (max-width:640px){
  main{padding-left:14px;padding-right:14px}.wg-logo{width:clamp(150px,42vw,230px);max-width:52vw}.comparison-card{padding:0;border-radius:0}.compare-shell{border-radius:0}.lead{font-size:15px}.wg-nav a{padding:8px 10px;font-size:10px}h1{font-size:38px}
}

/* Hide iframe scrollbars while preserving scroll functionality inside the live after site. */
.after-screen iframe{scrollbar-width:none;}
.after-screen iframe::-webkit-scrollbar{display:none;}

/* v3 refinements: let the device PNG truly float over the WG background and hide any white fringe around the live iframe. */
.compare-shell,
.stage-holder,
.stage-fixed{
  background:transparent !important;
}
.compare-shell{
  box-shadow:none;
}
/* Overscan the website layers slightly beneath the device frame so no white edge appears between content and mask. */
.laptop-screen{
  left:357px;
  top:292px;
  width:1092px;
  height:688px;
}
.phone-screen{
  left:1536px;
  top:579px;
  width:218px;
  height:463px;
  border-radius:26px;
}
.after-screen iframe{
  background:#000;
}
/* FIX (2026-07-29), per Dave: the visible white vertical scrollbar on the
   right edge of these before/after preview iframes is the framed site's
   OWN native scrollbar, rendered inside its cross-document viewport -
   scrollbar-hiding CSS on the outer <iframe> (further up this file) can't
   reach across that document boundary, so it never actually worked here.
   Widening the iframe's native (pre-scale) width past the container so the
   scrollbar - always drawn flush against the far-right edge - lands past
   .screen's own overflow:hidden clip and gets cropped off, same overscan
   technique already used above for the white-fringe fix, just extended a
   little further horizontally. transform-origin:top left means the added
   width only pushes the right edge out, so the visible content on the left
   is unaffected and drag/wheel-scrolling the embedded site stays fully
   functional - only the scrollbar's own pixels are cropped from view. */
.laptop-screen.after-screen iframe{
  width:1464px;
  height:920px;
  transform:scale(.7583);
}
/* FIX (this round), per Dave, screenshot: "the hamburger button and the
   header are falling off and bleeding off the right edge of the phone...
   cropped in the middle of the HTML website." Root cause: the rule above
   (2026-07-29) widened this iframe's native width by 32px specifically to
   push a DESKTOP-style reserved scrollbar gutter off past the mask's
   overflow:hidden edge - correct for the laptop iframe right above, where
   classic scrollbars really do reserve ~15-17px of layout width. Mobile
   viewports (which is what this 390px-wide iframe renders as) use overlay
   scrollbars that reserve ZERO layout width, so there was never a
   scrollbar gutter here to hide - that extra 32px was instead just
   pushing real content (the site's own mobile nav/hamburger, sitting near
   the viewport's right edge) past the mask, which is exactly the
   cropping/bleeding Dave is describing. Reverted to the true 390px
   standard mobile viewport width (iPhone-class), same scale(.559) as
   before so it still fills the 218px container exactly
   (390 * .559 = 218.01px, matches .phone-screen's own width above) -
   full width now visible, nothing pushed off-mask. */
.phone-screen.after-screen iframe{
  width:390px;
  height:850px;
  transform:scale(.559);
}


/* v5 typography refinements to better match WaltersGroup font usage. */
.copy-block, .comparison-head, .notes, .note-item p, .comparison-head p, .lead, .small-label, .eyebrow{font-family:"Plus Jakarta Sans";}
.copy-block h1, .comparison-head h2, .note-item h3{font-family:"Plus Jakarta Sans";font-weight:500;}
.small-label, .eyebrow{font-weight:500;}
.wg-nav .pill{font-family:"Plus Jakarta Sans";}

/* v20: mid-desktop safeguard so the side prompt never drops onto the phone. */
@media (max-width:1480px) and (min-width:1101px){
  .comparison-head{
    top:64px !important;
  }
  .comparison-head h2{
    font-size:clamp(20px, 1.65vw, 25px) !important;
    line-height:1.05 !important;
    max-width:17ch !important;
  }
}


/* v21 mobile safety: avoid loading two live iframes/videos inside a giant scaled stage on phones. */
.mobile-safe-preview{
  display:none;
}

@media (max-width:760px){
  main{
    padding-top:24px;
  }

  .copy-block{
    margin-bottom:24px;
  }

  .comparison-card{
    padding:0 !important;
  }

  .compare-main,
  .comparison-head{
    display:none !important;
  }

  .mobile-safe-preview{
    display:block;
    margin:28px 0 0;
    padding:22px;
    border-radius:26px;
    background:rgba(255,255,255,.07);
    border:1px solid rgba(255,255,255,.14);
  }

  .mobile-safe-preview h2{
    margin:8px 0 10px;
    font-size:clamp(28px,9vw,42px);
    line-height:1.04;
    letter-spacing:-.04em;
    max-width:12ch;
  }

  .mobile-safe-preview p{
    margin:0 0 18px;
    color:rgba(246,241,232,.72);
    font-size:15px;
    line-height:1.55;
  }

  .mobile-safe-grid{
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:12px;
  }

  .mobile-safe-grid div{
    min-width:0;
  }

  .mobile-safe-grid span{
    display:block;
    margin-bottom:8px;
    color:var(--gold);
    font-size:10px;
    letter-spacing:.12em;
    text-transform:uppercase;
  }

  .mobile-safe-grid img{
    display:block;
    width:100%;
    aspect-ratio:9/16;
    object-fit:cover;
    object-position:top center;
    border-radius:18px;
    border:1px solid rgba(255,255,255,.16);
    background:#111;
  }

  .notes{
    margin-top:24px;
  }
}


/* v22 value cards */
.note-item span{
  display:block;
  margin-bottom:12px;
}

@media (max-width:1500px){
  .notes{
    grid-template-columns:repeat(3,1fr);
  }
}

@media (max-width:980px){
  .notes{
    grid-template-columns:repeat(2,1fr);
  }
}

@media (max-width:640px){
  .notes{
    grid-template-columns:1fr;
  }
}



/* v23: exact WaltersGroup Ads page footer boilerplate */
@font-face{
  font-family:"Public Sans";
  src:url("../fonts/PublicSans-Variable.woff2") format("woff2");
  font-weight:100 900;
  font-style:normal;
  font-display:swap;
}
@font-face{
  font-family:"Public Sans";
  src:url("../fonts/PublicSans-Italic-Variable.woff2") format("woff2");
  font-weight:100 900;
  font-style:italic;
  font-display:swap;
}

.wg-footer{
  position:relative !important;
  z-index:20 !important;
  padding:54px clamp(28px, 6vw, 92px) 46px !important;
  color:#fff !important;
  background:
    linear-gradient(135deg, rgba(0,0,0,.76) 0%, rgba(0,0,0,.55) 42%, rgba(0,0,0,.68) 100%),
    radial-gradient(circle at 18% 18%, rgba(255,255,255,.12), rgba(255,255,255,0) 36%) !important;
  border-top:6px solid rgba(255,255,255,.3) !important;
  box-shadow:none !important;
  text-shadow:none !important;
  overflow:hidden !important;
}

.wg-footer,
.wg-footer *{
  box-shadow:none !important;
  text-shadow:none !important;
  filter:none !important;
}

.wg-footer-inner{
  display:flex !important;
  align-items:flex-end !important;
  justify-content:space-between !important;
  gap:34px !important;
  width:100% !important;
  max-width:1320px !important;
  margin:0 auto !important;
}

.wg-footer-brand{
  max-width:520px !important;
}

.wg-footer-logo{
  display:block !important;
  width:clamp(190px,18vw,310px) !important;
  max-width:310px !important;
  height:auto !important;
  margin:0 0 18px !important;
}

.wg-footer-name{
  font-family:"Public Sans", Arial, Helvetica, sans-serif !important;
  font-size:21px !important;
  line-height:1.12 !important;
  letter-spacing:.02em !important;
  font-weight:700 !important;
  margin:0 0 10px !important;
}

.wg-footer-line,
.wg-footer-email{
  display:block !important;
  font-family:"Public Sans", Arial, Helvetica, sans-serif !important;
  font-size:14px !important;
  line-height:1.55 !important;
  font-weight:600 !important;
  color:#fff !important;
  text-decoration:none !important;
  margin:0 !important;
}

.wg-footer-email{
  margin-top:8px !important;
  font-weight:800 !important;
}

.wg-footer-social{
  display:flex !important;
  align-items:center !important;
  gap:12px !important;
  flex:0 0 auto !important;
}

.wg-social-icon{
  display:grid !important;
  place-items:center !important;
  width:38px !important;
  height:38px !important;
  border-radius:999px !important;
  color:#fff !important;
  background:rgba(255,255,255,.10) !important;
  border:1px solid rgba(28,36,42,.20) !important;
  backdrop-filter:blur(12px) saturate(1.08) !important;
  -webkit-backdrop-filter:blur(12px) saturate(1.08) !important;
  transition:color .22s ease, opacity .22s ease, transform .22s ease, background .24s ease, border-color .24s ease !important;
}

.wg-social-icon:hover,
.wg-social-icon:focus-visible{
  color:#d19a2a !important;
  opacity:1 !important;
  background:rgba(188,126,32,.55) !important;
  border-color:rgba(255,220,150,.42) !important;
  transform:translateY(-2px) !important;
}

.wg-social-icon svg{
  width:18px !important;
  height:18px !important;
  fill:none !important;
  stroke:#fff !important;
  stroke-width:1.7 !important;
}

.wg-social-icon svg path,
.wg-social-icon svg rect,
.wg-social-icon svg circle{
  stroke:#fff !important;
  fill:none !important;
}

.wg-social-icon[aria-label="LinkedIn"] svg path,
.wg-social-icon[aria-label="Facebook"] svg path,
.wg-social-icon[aria-label="YouTube"] svg path{
  fill:#fff !important;
  stroke:none !important;
}

.wg-footer .wg-social-icon:hover svg path,
.wg-footer .wg-social-icon:hover svg rect,
.wg-footer .wg-social-icon:hover svg circle,
.wg-footer .wg-social-icon:focus-visible svg path,
.wg-footer .wg-social-icon:focus-visible svg rect,
.wg-footer .wg-social-icon:focus-visible svg circle{
  fill:#d19a2a !important;
  stroke:none !important;
}

.wg-footer .wg-social-email:hover svg path,
.wg-footer .wg-social-email:focus-visible svg path{
  fill:none !important;
  stroke:#d19a2a !important;
}

.wg-footer .wg-cursive-signature-wrap{
  position:absolute !important;
  right:32px !important;
  bottom:24px !important;
  width:180px !important;
  max-width:180px !important;
  height:auto !important;
  display:block !important;
  margin:0 !important;
  padding:0 !important;
  z-index:6 !important;
  pointer-events:none !important;
  opacity:.74 !important;
  overflow:hidden !important;
  clip-path:inset(0 100% 0 0);
  -webkit-clip-path:inset(0 100% 0 0);
  animation:wgFooterTinySignatureDraw 6.5s cubic-bezier(.16,1,.3,1) .35s forwards !important;
}

.wg-footer .wg-cursive-signature-logo{
  display:block !important;
  width:180px !important;
  max-width:180px !important;
  height:auto !important;
  margin:0 !important;
  padding:0 !important;
  object-fit:contain !important;
  opacity:1 !important;
  filter:none !important;
}

.wg-footer .wg-cursive-signature-wrap.is-drawn{
  animation:wgFooterTinySignatureDraw 6.5s cubic-bezier(.16,1,.3,1) forwards !important;
}

@keyframes wgFooterTinySignatureDraw{
  from{
    clip-path:inset(0 100% 0 0);
    -webkit-clip-path:inset(0 100% 0 0);
  }
  to{
    clip-path:inset(0 0 0 0);
    -webkit-clip-path:inset(0 0 0 0);
  }
}

@media(max-width:760px){
  .wg-footer{
    padding:42px 24px 38px !important;
  }

  .wg-footer-inner{
    align-items:flex-start !important;
    flex-direction:column !important;
    gap:24px !important;
  }

  .wg-footer-name{
    font-size:19px !important;
  }

  .wg-footer-line,
  .wg-footer-email{
    font-size:13px !important;
  }

  .wg-footer .wg-cursive-signature-wrap{
    right:20px !important;
    bottom:18px !important;
    width:150px !important;
    max-width:150px !important;
  }

  .wg-footer .wg-cursive-signature-logo{
    width:150px !important;
    max-width:150px !important;
  }
}

@media(prefers-reduced-motion:reduce){
  .wg-footer .wg-cursive-signature-wrap{
    clip-path:none !important;
    -webkit-clip-path:none !important;
  }
}


/* v25: match WaltersGroup boilerplate behavior from the current site.
   No social circles, social icons stay beside contact info, and footer text is not heavy. */
.wg-footer{
  padding-left:var(--ads-copy-left, clamp(96px, 10.8vw, 188px)) !important;
  padding-right:var(--ads-copy-left, clamp(96px, 10.8vw, 188px)) !important;
  background:transparent !important;
  background-color:transparent !important;
  border-top:0 !important;
  box-shadow:none !important;
}

.wg-footer::before{
  content:"" !important;
  position:absolute !important;
  left:0 !important;
  right:0 !important;
  bottom:0 !important;
  width:100vw !important;
  height:200px !important;
  margin-left:calc(50% - 50vw) !important;
  pointer-events:none !important;
  z-index:0 !important;
  background:linear-gradient(
    0deg,
    rgba(0,0,0,.20) 0%,
    rgba(0,0,0,.14) 35%,
    rgba(0,0,0,.06) 70%,
    rgba(0,0,0,0) 100%
  ) !important;
}

.wg-footer-inner{
  position:relative !important;
  z-index:1 !important;
  margin:0 !important;
  padding:0 !important;
  width:100% !important;
  max-width:none !important;
  display:flex !important;
  justify-content:flex-start !important;
  align-items:flex-end !important;
  gap:44px !important;
}

.wg-footer-brand{
  margin-left:0 !important;
  padding-left:0 !important;
  max-width:520px !important;
  text-align:left !important;
}

.wg-footer-line,
.wg-footer-email{
  font-family:"Public Sans", Arial, Helvetica, sans-serif !important;
  font-size:14px !important;
  line-height:1.5 !important;
  font-weight:400 !important;
  color:#fff !important;
  text-decoration:none !important;
}

.wg-footer-email{
  margin-top:9px !important;
  font-weight:500 !important;
}

.wg-footer-social{
  display:flex !important;
  align-items:center !important;
  justify-content:flex-start !important;
  gap:20px !important;
  flex:0 0 auto !important;
  margin-left:28px !important;
  margin-right:0 !important;
  padding:0 !important;
  align-self:flex-end !important;
}

.wg-social-icon{
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  width:auto !important;
  height:auto !important;
  min-width:0 !important;
  min-height:0 !important;
  padding:0 !important;
  border-radius:0 !important;
  color:#fff !important;
  background:transparent !important;
  background-color:transparent !important;
  border:0 !important;
  box-shadow:none !important;
  backdrop-filter:none !important;
  -webkit-backdrop-filter:none !important;
  transition:color .22s ease, opacity .22s ease, transform .22s ease !important;
}

.wg-social-icon:hover,
.wg-social-icon:focus-visible{
  background:transparent !important;
  border:0 !important;
  color:#d19a2a !important;
  opacity:1 !important;
  transform:translateY(-1px) !important;
}

.wg-social-icon svg{
  width:22px !important;
  height:22px !important;
}

.wg-social-icon svg path,
.wg-social-icon svg rect,
.wg-social-icon svg circle{
  fill:#fff !important;
  stroke:none !important;
}

.wg-social-icon:hover svg path,
.wg-social-icon:hover svg rect,
.wg-social-icon:hover svg circle,
.wg-social-icon:focus-visible svg path,
.wg-social-icon:focus-visible svg rect,
.wg-social-icon:focus-visible svg circle{
  fill:#d19a2a !important;
  stroke:none !important;
}

.wg-social-icon.wg-social-email svg{
  width:23px !important;
  height:23px !important;
}

.wg-social-icon.wg-social-email svg path{
  fill:none !important;
  stroke:#fff !important;
  stroke-width:1.75 !important;
  stroke-linejoin:round !important;
  stroke-linecap:round !important;
}

.wg-social-icon.wg-social-email:hover svg path,
.wg-social-icon.wg-social-email:focus-visible svg path{
  fill:none !important;
  stroke:#d19a2a !important;
}

@media(max-width:980px){
  .wg-footer{
    padding-left:32px !important;
    padding-right:32px !important;
  }
}

@media(max-width:760px){
  .wg-footer{
    padding-left:24px !important;
    padding-right:24px !important;
  }

  .wg-footer-inner{
    align-items:flex-start !important;
    flex-direction:column !important;
    gap:24px !important;
  }

  .wg-footer-social{
    margin-left:0 !important;
    align-self:flex-start !important;
  }

  .wg-footer-line,
  .wg-footer-email{
    font-size:13px !important;
  }
}


/* v26: top nav CTA behavior */
.wg-nav a{
  border:1px solid transparent;
}

.wg-nav .nav-proposed,
.wg-nav .nav-scope{
  border:1px solid rgba(255,255,255,.20);
  background:transparent;
  color:rgba(246,241,232,.90);
}

.wg-nav .nav-proposed:hover,
.wg-nav .nav-proposed:focus-visible,
.wg-nav .nav-scope:hover,
.wg-nav .nav-scope:focus-visible{
  background:var(--gold-bg) !important;
  border-color:var(--gold-bg) !important;
  color:#fff !important;
}

/* FIX (2026-07-29), per Dave - real-device report: the "Start Project" pill
   was still rendering solid beige on his iPhone above the fold, even after
   the #navStartBtn ID-selector fix further down this file (which sets
   border-color:rgba(255,255,255,.30) + background:transparent). That ID
   rule DOES win by spec, but this earlier class-based rule is the one
   actually setting the *background* to solid beige (var(--gold-bg)) - a
   property the ID fix down below also overrides, so on paper this was
   already dead. Given this codebase's own documented history of "provably
   higher-specificity rules still losing" on real hardware (see the v574
   comment elsewhere in this file), not leaving this to cascade order a
   third time - killing the beige at its source instead of relying on a
   later override to beat it. Matches the same white-outline/transparent-
   fill treatment as the other 3 nav pills. */
.wg-nav .nav-start,
.wg-nav .pill.nav-start{
  background:transparent !important;
  border-color:rgba(255,255,255,.30) !important;
  color:#fff !important;
}

.wg-nav .nav-start:hover,
.wg-nav .nav-start:focus-visible{
  background:#66266E !important;
  border-color:#66266E !important;
  color:#fff !important;
}


/* v27: force header nav buttons to final requested state */
header.wg-topbar nav.wg-nav a.nav-btn,
header.wg-topbar nav.wg-nav a.nav-btn:link,
header.wg-topbar nav.wg-nav a.nav-btn:visited{
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  min-height:34px !important;
  padding:9px 16px !important;
  border-radius:999px !important;
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
  font-size:11px !important;
  line-height:1 !important;
  letter-spacing:.08em !important;
  text-transform:uppercase !important;
  text-decoration:none !important;
  border:1px solid rgba(255,255,255,.24) !important;
  background:transparent !important;
  color:rgba(246,241,232,.92) !important;
  box-shadow:none !important;
}

header.wg-topbar nav.wg-nav a.nav-proposed,
header.wg-topbar nav.wg-nav a.nav-proposed:link,
header.wg-topbar nav.wg-nav a.nav-proposed:visited,
header.wg-topbar nav.wg-nav a.nav-scope,
header.wg-topbar nav.wg-nav a.nav-scope:link,
header.wg-topbar nav.wg-nav a.nav-scope:visited{
  background:transparent !important;
  border-color:rgba(255,255,255,.24) !important;
  color:rgba(246,241,232,.92) !important;
}

header.wg-topbar nav.wg-nav a.nav-proposed:hover,
header.wg-topbar nav.wg-nav a.nav-proposed:focus-visible,
header.wg-topbar nav.wg-nav a.nav-scope:hover,
header.wg-topbar nav.wg-nav a.nav-scope:focus-visible{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  color:#fff !important;
}

header.wg-topbar nav.wg-nav a.nav-start,
header.wg-topbar nav.wg-nav a.nav-start:link,
header.wg-topbar nav.wg-nav a.nav-start:visited{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  color:#fff !important;
}

header.wg-topbar nav.wg-nav a.nav-start:hover,
header.wg-topbar nav.wg-nav a.nav-start:focus-visible{
  background:#66266E !important;
  border-color:#66266E !important;
  color:#fff !important;
}


/* v28: add Contact button and restore darker before/after slider control style */
header.wg-topbar nav.wg-nav a.nav-contact,
header.wg-topbar nav.wg-nav a.nav-contact:link,
header.wg-topbar nav.wg-nav a.nav-contact:visited{
  background:transparent !important;
  border-color:rgba(255,255,255,.24) !important;
  color:rgba(246,241,232,.92) !important;
}

header.wg-topbar nav.wg-nav a.nav-contact:hover,
header.wg-topbar nav.wg-nav a.nav-contact:focus-visible{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  color:#fff !important;
}

/* darker divider and handle, closer to the preferred earlier look */
.divider::before{
  width:2px !important;
  background:#7E3187 !important;
  box-shadow:0 0 0 1px rgba(0,0,0,.18), 0 0 18px rgba(126,49,135,.20) !important;
}

.handle{
  width:86px !important;
  height:86px !important;
  background:#2b2b2b !important;
  border:1px solid rgba(126,49,135,.55) !important;
  color:#7E3187 !important;
  box-shadow:0 14px 36px rgba(0,0,0,.38) !important;
  font-weight:600 !important;
}

.handle span{
  color:#7E3187 !important;
}

.handle:hover{
  background:#222 !important;
  border-color:#7E3187 !important;
}


/* v30: project investment/pricing section */
.investment-section{
  max-width:1760px;
  margin:42px auto 0;
  padding:clamp(26px,3vw,42px);
  border-radius:30px;
  background:rgba(255,255,255,.055);
  border:1px solid rgba(255,255,255,.12);
  text-align:left;
}

.investment-copy{
  max-width:880px;
  margin-bottom:28px;
}

.investment-copy h2{
  max-width:760px;
  margin:10px 0 14px;
  font-size:clamp(32px,3.7vw,58px);
  /* Fix (this round), per Dave: "the leading is too tight on this header
     compared to the rest of the site." This override set line-height to
     1.02, noticeably tighter than the site-wide base h2 rule (1.08, see
     the plain `h2{...}` rule earlier in this file) every other heading on
     the page inherits. Bumped to 1.1 - a touch looser than that base
     value, not just matching it - for real breathing room between these
     two lines specifically, since this heading also runs bigger
     (clamp(32px,3.7vw,58px) vs the base's smaller clamp). */
  line-height:1.1;
  letter-spacing:-.045em;
}

.investment-copy p{
  max-width:760px;
  margin:0;
  color:rgba(246,241,232,.70);
  font-size:clamp(16px,1.35vw,20px);
  line-height:1.55;
}

.investment-grid{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:16px;
}

.investment-card{
  padding:26px;
  border-radius:24px;
  background:rgba(0,0,0,.18);
  border:1px solid rgba(255,255,255,.13);
}

.investment-card--primary{
  background:linear-gradient(135deg, rgba(126,49,135,.20), rgba(0,0,0,.16));
  border-color:rgba(126,49,135,.32);
}

/* TEMPLATE PREVIEW ONLY (not yet copied to client pages): Dave wants the
   pricing card to draw the eye more, since people aren't finding/clicking
   into it. v2 per Dave: slower pulse, and a crisp solid outline instead of
   a soft/blurred glow - a 12px outline ring in the accent color (--gold)
   fading in and back out on an 7s cycle, easing the whole way, never
   snapping. Uses outline (not box-shadow) because this card gets a
   .price-trigger class added at runtime with its own box-shadow:none
   !important resting rule elsewhere - a static !important always beats
   an animated value, so box-shadow silently never showed. outline-width
   is fixed outside the keyframes (animating width can look jittery in
   some browsers) - only outline-color's alpha animates. Nothing else on
   this element touches outline; prefers-reduced-motion disables it. */
.investment-card--primary{
  outline:5px solid rgba(126,49,135,0);
  outline-offset:0px;
}

@keyframes investmentCardPulseGlow{
  0%, 100%{
    outline-color:rgba(126,49,135,0);
  }
  50%{
    outline-color:rgba(126,49,135,.20);
  }
}

.investment-card--primary{
  animation:investmentCardPulseGlow 3.5s ease-in-out infinite;
}

@media (prefers-reduced-motion: reduce){
  .investment-card--primary{
    animation:none;
  }
}

.investment-card span{
  display:block;
  color:var(--gold);
  font-size:11px;
  letter-spacing:.14em;
  text-transform:uppercase;
  margin-bottom:13px;
}

.investment-card h3{
  margin:0 0 12px;
  font-size:clamp(34px,3.4vw,54px);
  line-height:1;
  letter-spacing:-.045em;
  font-weight:500;
}

.investment-card h3 em{
  font-style:normal;
  font-size:.34em;
  letter-spacing:-.01em;
  color:rgba(246,241,232,.70);
}

.investment-card p{
  margin:0;
  color:rgba(246,241,232,.68);
  font-size:14px;
  line-height:1.55;
}

.payment-options{
  margin-top:16px;
  padding:24px 26px;
  border-radius:24px;
  background:rgba(0,0,0,.16);
  border:1px solid rgba(255,255,255,.10);
  display:grid;
  grid-template-columns:minmax(240px,420px) 1fr;
  gap:24px;
  align-items:start;
}

.payment-options h3{
  margin:10px 0 0;
  font-size:clamp(23px,2vw,34px);
  line-height:1.1;
  letter-spacing:-.035em;
  font-weight:500;
}

.payment-list{
  display:grid;
  gap:10px;
}

.payment-list p{
  margin:0;
  color:rgba(246,241,232,.72);
  font-size:15px;
  line-height:1.5;
}

.payment-list strong{
  color:#fff;
  font-weight:500;
}

@media(max-width:980px){
  .investment-grid{
    grid-template-columns:1fr;
  }

  .payment-options{
    grid-template-columns:1fr;
  }
}

@media(max-width:640px){
  .investment-section{
    padding:22px;
    border-radius:24px;
  }

  .investment-card{
    padding:22px;
  }
}


/* v31: project investment/pricing section */
.investment-section{
  max-width:1760px;
  margin:42px auto 0;
  padding:clamp(26px,3vw,42px);
  border-radius:30px;
  background:rgba(255,255,255,.055);
  border:1px solid rgba(255,255,255,.12);
  text-align:left;
}

.investment-copy{
  max-width:880px;
  margin-bottom:28px;
}

.investment-copy h2{
  max-width:760px;
  margin:10px 0 14px;
  font-size:clamp(32px,3.7vw,58px);
  /* Fix (this round), per Dave: "the leading is too tight on this header
     compared to the rest of the site" - matches the same line-height fix
     applied to this class's other (desktop) rule earlier in this file;
     this is the mobile-scoped duplicate that actually wins on phone
     widths, so it needs the identical bump to fix what Dave's mobile
     screenshot showed. */
  line-height:1.1;
  letter-spacing:-.045em;
  font-weight:500;
}

.investment-copy p{
  max-width:760px;
  margin:0;
  color:rgba(246,241,232,.70);
  font-size:clamp(16px,1.35vw,20px);
  line-height:1.55;
}

.investment-grid{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:16px;
}

.investment-card{
  padding:26px;
  border-radius:24px;
  background:rgba(0,0,0,.18);
  border:1px solid rgba(255,255,255,.13);
}

.investment-card--primary{
  background:linear-gradient(135deg, rgba(126,49,135,.20), rgba(0,0,0,.16));
  border-color:rgba(126,49,135,.32);
}

.investment-card span{
  display:block;
  color:var(--gold);
  font-size:11px;
  letter-spacing:.14em;
  text-transform:uppercase;
  margin-bottom:13px;
}

.investment-card h3{
  margin:0 0 12px;
  font-size:clamp(34px,3.4vw,54px);
  line-height:1;
  letter-spacing:-.045em;
  font-weight:500;
}

.investment-card h3 em{
  font-style:normal;
  font-size:.34em;
  letter-spacing:-.01em;
  color:rgba(246,241,232,.70);
}

.investment-card p{
  margin:0;
  color:rgba(246,241,232,.68);
  font-size:14px;
  line-height:1.55;
}

.payment-options{
  margin-top:16px;
  padding:24px 26px;
  border-radius:24px;
  background:rgba(0,0,0,.16);
  border:1px solid rgba(255,255,255,.10);
  display:grid;
  grid-template-columns:minmax(240px,420px) 1fr;
  gap:24px;
  align-items:start;
}

.payment-options h3{
  margin:10px 0 0;
  font-size:clamp(23px,2vw,34px);
  line-height:1.1;
  letter-spacing:-.035em;
  font-weight:500;
}

.payment-list{
  display:grid;
  gap:10px;
}

.payment-list p{
  margin:0;
  color:rgba(246,241,232,.72);
  font-size:15px;
  line-height:1.5;
}

.payment-list strong{
  color:#fff;
  font-weight:500;
}

@media(max-width:980px){
  .investment-grid{
    grid-template-columns:1fr;
  }

  .payment-options{
    grid-template-columns:1fr;
  }
}

@media(max-width:640px){
  .investment-section{
    padding:22px;
    border-radius:24px;
  }

  .investment-card{
    padding:22px;
  }
}


/* v32: widen Project Investment headline block slightly to avoid the widow */
.investment-copy{
  max-width:1040px !important;
}

.investment-copy h2{
  max-width:980px !important;
}

/* v1045: widen the investment intro paragraph to match, fixing a 3-line widow */
@media(min-width:761px){
  .investment-copy p{
    max-width:980px !important;
  }
}


/* v34: desktop mouseovers for value and investment cards */
@media (hover:hover) and (pointer:fine) and (min-width:761px){
  .note-item,
  .investment-card,
  .payment-options{
    transition:
      transform .26s ease,
      background .26s ease,
      border-color .26s ease,
      box-shadow .26s ease;
  }

  .note-item:hover,
  .investment-card:hover{
    transform:translateY(-4px);
    background:rgba(126,49,135,.105);
    border-color:rgba(126,49,135,.48);
    box-shadow:0 18px 46px rgba(0,0,0,.22);
  }

  .investment-card--primary:hover{
    background:linear-gradient(135deg, rgba(126,49,135,.28), rgba(0,0,0,.18));
    border-color:rgba(126,49,135,.62);
  }

  .payment-options:hover{
    background:rgba(126,49,135,.075);
    border-color:rgba(126,49,135,.34);
    box-shadow:0 16px 40px rgba(0,0,0,.18);
  }
}


/* v35: allow longer pricing unit label to read cleanly */
.investment-card h3 em{
  font-size:.30em !important;
  line-height:1.15 !important;
  display:inline-block !important;
  max-width:8.5em !important;
  vertical-align:baseline !important;
}


/* v46: footer contact form only. Does not modify hero/comparison area. */
.wg-footer-form{
  width:min(360px, 100%);
  margin-left:auto;
  padding:18px;
  border-radius:20px;
  background:rgba(255,255,255,.055);
  border:1px solid rgba(255,255,255,.12);
  display:grid;
  gap:10px;
  font-family:"Public Sans", Arial, Helvetica, sans-serif;
}

.wg-footer-form-eyebrow{
  /* v986: was white originally - a dark blue-gray (#7E3187) crept in
     later and reads dark-on-dark against this footer form's dark
     background, per Dave's ask. Restored to white. */
  color:#ffffff;
  font-size:11px;
  line-height:1;
  letter-spacing:.14em;
  text-transform:uppercase;
  font-weight:500;
  margin-bottom:2px;
}

.wg-footer-form label{
  display:grid;
  gap:5px;
  margin:0;
}

.wg-footer-form label span{
  color:rgba(255,255,255,.72);
  font-size:11px;
  line-height:1;
  letter-spacing:.08em;
  text-transform:uppercase;
  font-weight:400;
}

.wg-footer-form input,
.wg-footer-form textarea{
  width:100%;
  border:1px solid rgba(255,255,255,.16);
  border-radius:12px;
  background:rgba(0,0,0,.20);
  color:#fff;
  font:400 14px/1.3 "Public Sans", Arial, Helvetica, sans-serif;
  padding:10px 11px;
  outline:none;
  resize:vertical;
}

.wg-footer-form input:focus,
.wg-footer-form textarea:focus{
  border-color:rgba(126,49,135,.70);
  box-shadow:0 0 0 3px rgba(126,49,135,.12);
}

.wg-footer-form button{
  appearance:none;
  border:1px solid #7E3187;
  border-radius:999px;
  background:#7E3187;
  color:#fff;
  padding:11px 16px;
  font:500 11px/1 "Public Sans", Arial, Helvetica, sans-serif;
  letter-spacing:.10em;
  text-transform:uppercase;
  cursor:pointer;
  transition:background .22s ease, border-color .22s ease, transform .22s ease;
}

.wg-footer-form button:hover,
.wg-footer-form button:focus-visible{
  background:#66266E;
  border-color:#66266E;
  transform:translateY(-1px);
}

@media(max-width:1180px){
  .wg-footer-inner{
    flex-wrap:wrap !important;
  }

  .wg-footer-form{
    width:100%;
    max-width:520px;
    margin-left:0;
    margin-top:8px;
  }
}

@media(max-width:760px){
  .wg-footer-form{
    width:100%;
    max-width:none;
    padding:16px;
  }
}

/* v46: value-card detail popups only. Does not modify hero/comparison area. */
.note-trigger{
  appearance:none;
  cursor:pointer;
  color:inherit;
  font:inherit;
}

.detail-modal{
  position:fixed;
  inset:0;
  z-index:200;
  display:none;
  align-items:center;
  justify-content:center;
  padding:clamp(18px,4vw,54px);
}

.detail-modal.is-open{
  display:flex;
}

.detail-modal__backdrop{
  position:absolute;
  inset:0;
  background:rgba(0,0,0,.62);
  backdrop-filter:blur(10px);
}

.detail-modal__panel{
  position:relative;
  z-index:2;
  width:min(1040px, 94vw);
  max-height:min(760px, 88vh);
  overflow:auto;
  -webkit-overflow-scrolling:touch;
  display:grid;
  grid-template-columns:minmax(280px,.86fr) 1.14fr;
  gap:0;
  border-radius:30px;
  background:linear-gradient(135deg, rgba(48,48,48,.98), rgba(30,30,30,.98));
  border:1px solid rgba(28,36,42,.16);
  box-shadow:0 34px 90px rgba(0,0,0,.48);
}

.detail-modal__close{
  position:absolute;
  top:16px;
  right:16px;
  z-index:4;
  width:38px;
  height:38px;
  padding:0;
  display:flex;
  align-items:center;
  justify-content:center;
  border-radius:999px;
  border:1px solid rgba(28,36,42,.18);
  background:rgba(0,0,0,.22);
  color:#1c242a;
  font-size:24px;
  line-height:1;
  cursor:pointer;
}

.detail-modal__close:hover{
  background:#7E3187;
  border-color:#7E3187;
}

.detail-modal__media{
  min-height:430px;
  border-radius:30px 0 0 30px;
  position:relative;
  overflow:hidden;
  filter:saturate(1.12) contrast(1.04) brightness(1.02);
  background:url("../img/popup/visual-impact.webp") center center / cover no-repeat !important;
}

.detail-modal__media[data-tone="seo"]{
  background:url("../img/popup/seo.webp") center center / cover no-repeat !important;
}

.detail-modal__media[data-tone="search"]{
  background:url("../img/popup/search.webp") center center / cover no-repeat !important;
}

.detail-modal__media[data-tone="experience"]{
  background:url("../img/popup/experience.webp") center center / cover no-repeat !important;
}

.detail-modal__media[data-tone="investment"]{
  background:url("../img/popup/investment.webp") center center / cover no-repeat !important;
}

.detail-modal__media[data-tone="simple"]{
  background:url("../img/popup/simple.webp") center center / cover no-repeat !important;
}

.detail-modal__copy{
  padding:clamp(28px,4vw,54px);
}

.detail-modal__copy h2{
  max-width:760px;
  margin:10px 0 16px;
  font-size:clamp(34px,4vw,58px);
  line-height:1.02;
  letter-spacing:-.045em;
}

.detail-modal__copy > p{
  margin:0 0 24px;
  color:rgba(84,98,107,.74);
  font-size:17px;
  line-height:1.58;
}

.detail-modal__grid{
  display:grid;
  gap:12px;
}

.detail-modal__point{
  padding:15px 16px;
  border-radius:16px;
  background:rgba(255,255,255,.055);
  border:1px solid rgba(28,36,42,.10);
}

.detail-modal__point strong{
  display:block;
  color:#1c242a;
  font-weight:500;
  margin-bottom:4px;
}

.detail-modal__point span{
  display:block;
  color:rgba(84,98,107,.68);
  font-size:14px;
  line-height:1.48;
}

@media(max-width:820px){
  .detail-modal__panel{
    grid-template-columns:1fr;
  }

  .detail-modal__media{
    min-height:230px;
    border-radius:30px 30px 0 0;
  }
}


/* v317: redundant desktop CTA for opening the full proposed site from the comparison area */
.comparison-side-cta{
  display:none;
}

/* mobile-only variant of the redundant CTA, placed in normal flow below the phone mockup */
.comparison-side-cta--mobile{
  display:none;
}

@media (max-width:760px){
  html body .comparison-side-cta.comparison-side-cta--mobile{
    display:flex !important;
    position:static !important;
    z-index:auto !important;
    align-items:center !important;
    justify-content:center !important;
    top:auto !important;
    left:auto !important;
    right:auto !important;
    width:100% !important;
    margin:20px 0 0 !important;
    pointer-events:auto !important;
  }

  html body .comparison-side-cta.comparison-side-cta--mobile .comparison-side-cta__btn,
  html body .comparison-side-cta.comparison-side-cta--mobile .comparison-side-cta__btn:link,
  html body .comparison-side-cta.comparison-side-cta--mobile .comparison-side-cta__btn:visited{
    pointer-events:auto !important;
    display:inline-flex !important;
    align-items:center !important;
    justify-content:center !important;
    min-height:50px !important;
    width:auto !important;
    max-width:100% !important;
    padding:13px 24px !important;
    border-radius:999px !important;
    border:1px solid #7E3187 !important;
    background:#7E3187 !important;
    box-shadow:none !important;
    color:#fff !important;
    font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
    font-size:13px !important;
    font-weight:700 !important;
    letter-spacing:.07em !important;
    line-height:1 !important;
    text-transform:uppercase !important;
    text-decoration:none !important;
    text-align:center !important;
    white-space:nowrap !important;
  }

  html body .comparison-side-cta.comparison-side-cta--mobile .comparison-side-cta__icon{
    position:static !important;
    display:inline-flex !important;
    align-items:center !important;
    justify-content:center !important;
    width:15px !important;
    height:15px !important;
    min-width:15px !important;
    margin-right:9px !important;
    flex:0 0 auto !important;
  }

  html body .comparison-side-cta.comparison-side-cta--mobile .comparison-side-cta__icon::before,
  html body .comparison-side-cta.comparison-side-cta--mobile .comparison-side-cta__icon::after{
    content:none !important;
  }

  html body .comparison-side-cta.comparison-side-cta--mobile .comparison-side-cta__icon svg{
    display:block !important;
    width:100% !important;
    height:100% !important;
    fill:none !important;
    stroke:currentColor !important;
    stroke-width:2.2 !important;
    stroke-linecap:round !important;
    stroke-linejoin:round !important;
  }

  /* stretch the dark panel a bit to hold the button, then give clear air before the light investment section starts */
  .mobile-safe-preview{
    padding-bottom:26px;
  }

  .investment-section{
    margin-top:24px;
  }
}

@media (min-width:1100px){
  .comparison-side-cta{
    position:absolute;
    z-index:46;
    display:flex;
    align-items:center;
    justify-content:center;
    top:calc((305px * var(--stage-scale)) - clamp(2px, .3vw, 6px));
    left:calc((1600px * var(--stage-scale)) + clamp(16px, 1.8vw, 32px));
    width:clamp(210px, 14.5vw, 242px);
    pointer-events:none;
  }

  .comparison-side-cta__btn,
  .comparison-side-cta__btn:link,
  .comparison-side-cta__btn:visited{
    pointer-events:auto;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    min-height:50px;
    width:100%;
    padding:13px 18px;
    border-radius:999px;
    border:1px solid #7E3187;
    background:#7E3187;
    box-shadow:none;
    color:#fff;
    font-family:"Plus Jakarta Sans", Arial, sans-serif;
    font-size:13px;
    font-weight:700;
    letter-spacing:.07em;
    line-height:1;
    text-transform:uppercase;
    text-decoration:none;
    text-align:center;
    white-space:nowrap;
    transition:background .18s ease, border-color .18s ease, color .18s ease, transform .18s ease, box-shadow .18s ease;
  }

.comparison-side-cta__icon{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:15px;
  height:15px;
  margin-right:9px;
  flex:0 0 auto;
}

.comparison-side-cta__icon svg{
  display:block;
  width:100%;
  height:100%;
  fill:none;
  stroke:currentColor;
  stroke-width:2.2;
  stroke-linecap:round;
  stroke-linejoin:round;
}

  .comparison-side-cta__btn:hover,
  .comparison-side-cta__btn:focus-visible{
    background:#66266E;
    border-color:#66266E;
    color:#fff;
    transform:translateY(-1px);
    box-shadow:none;
  }
}

@media (min-width:1100px) and (max-width:1320px){
  .comparison-side-cta{
    top:calc((280px * var(--stage-scale)) - 2px);
    left:calc((1588px * var(--stage-scale)) + 12px);
    width:clamp(198px, 14.5vw, 224px);
  }

  .comparison-side-cta__btn,
  .comparison-side-cta__btn:link,
  .comparison-side-cta__btn:visited{
    min-height:46px;
    padding:12px 16px;
    font-size:11px;
    letter-spacing:.06em;
  }
}

/* v47: remove the side prompt next to the before/after device so it cannot overlap the phone */
.comparison-head{
  display:none !important;
}


/* v48: with the side prompt removed, let the before/after device use the full browser width */
@media (min-width:761px){
  .hero{
    max-width:none !important;
    width:100% !important;
  }

  .comparison-card{
    width:100vw !important;
    margin-left:calc(50% - 50vw) !important;
    margin-right:calc(50% - 50vw) !important;
  }

  .compare-main,
  .compare-shell,
  .stage-holder{
    width:100vw !important;
  }
}


/* v49: center the before/after device composition within the browser */
@media (min-width:761px){
  .stage-fixed{
    left:clamp(44px, 4.4vw, 72px) !important;
  }
}


/* v51: give the footer contact form its own space and keep it clear of the cursive logo */
.wg-footer{
  padding-bottom:150px !important;
}

.wg-footer-inner{
  align-items:flex-start !important;
  justify-content:flex-start !important;
  gap:clamp(34px, 4vw, 64px) !important;
}

.wg-footer-form{
  margin-left:clamp(28px, 4vw, 70px) !important;
  margin-right:260px !important;
  align-self:flex-start !important;
}

.wg-footer .wg-cursive-signature-wrap{
  right:40px !important;
  bottom:34px !important;
  z-index:2 !important;
}

@media(max-width:1180px){
  .wg-footer{
    padding-bottom:150px !important;
  }

  .wg-footer-form{
    margin-left:0 !important;
    margin-right:0 !important;
  }
}

@media(max-width:760px){
  .wg-footer{
    padding-bottom:130px !important;
  }

  .wg-footer .wg-cursive-signature-wrap{
    right:20px !important;
    bottom:22px !important;
  }
}


/* v52: hide visible scrollbar on popup panels while preserving scroll if content needs it */
.detail-modal__panel{
  scrollbar-width:none !important;
  -ms-overflow-style:none !important;
}

.detail-modal__panel::-webkit-scrollbar{
  width:0 !important;
  height:0 !important;
  display:none !important;
}


/* v53: restore footer baseline alignment after form spacing.
   Keep the form clear of the cursive logo without pushing the social icons/logo down. */
.wg-footer{
  padding-bottom:54px !important;
}

.wg-footer-inner{
  align-items:flex-end !important;
  justify-content:flex-start !important;
  gap:44px !important;
  flex-wrap:nowrap !important;
}

.wg-footer-brand{
  flex:0 0 auto !important;
}

.wg-footer-social{
  margin-left:28px !important;
  margin-right:0 !important;
  padding:0 !important;
  align-self:flex-end !important;
  transform:none !important;
}

.wg-footer-form{
  width:360px !important;
  margin-left:70px !important;
  margin-right:250px !important;
  align-self:flex-end !important;
}

.wg-footer .wg-cursive-signature-wrap{
  right:40px !important;
  bottom:34px !important;
  width:180px !important;
  max-width:180px !important;
  z-index:6 !important;
}

.wg-footer .wg-cursive-signature-logo{
  width:180px !important;
  max-width:180px !important;
}

@media(max-width:1320px){
  .wg-footer-inner{
    flex-wrap:wrap !important;
    align-items:flex-start !important;
  }

  .wg-footer-form{
    margin-left:0 !important;
    margin-right:0 !important;
    width:min(420px, 100%) !important;
    align-self:flex-start !important;
  }
}

@media(max-width:760px){
  .wg-footer{
    padding-bottom:130px !important;
  }

  .wg-footer-social{
    margin-left:0 !important;
    align-self:flex-start !important;
  }

  .wg-footer .wg-cursive-signature-wrap{
    right:20px !important;
    bottom:22px !important;
    width:150px !important;
    max-width:150px !important;
  }

  .wg-footer .wg-cursive-signature-logo{
    width:150px !important;
    max-width:150px !important;
  }
}


/* v54: pricing card popups */
.price-trigger{
  appearance:none;
  cursor:pointer;
  color:inherit;
  font:inherit;
  text-align:left;
}

.plan-modal{
  position:fixed;
  inset:0;
  z-index:220;
  display:none;
  align-items:center;
  justify-content:center;
  padding:clamp(18px,4vw,54px);
}

.plan-modal.is-open{
  display:flex;
}

.plan-modal__backdrop{
  position:absolute;
  inset:0;
  background:rgba(0,0,0,.64);
  backdrop-filter:blur(10px);
}

/* v1188: per Dave, desktop only - clicking the dimmed backdrop area
   around the pricing/payment popup (#planModal - covers all 3 modes
   that share this one modal: the "Website Design" plan tiles +
   Payment Options view, and the standalone "Website Care only" view)
   was closing the whole popup and wiping out whatever the visitor had
   picked. He's had it happen accidentally since the dimmed backdrop
   doesn't read as an obvious "outside the window" click target. Now
   only the X button (top right) can close this modal on desktop -
   the backdrop is visually unchanged but no longer clickable. Mobile
   is untouched (backdrop-tap-to-close still works there). Scoped to
   #planModal specifically so the separate font-preview popup
   (#fontExampleModal), which also uses .plan-modal__backdrop, keeps
   its normal click-outside-to-close behavior. */
@media(min-width:761px){
  #planModal > .plan-modal__backdrop{
    pointer-events:none;
  }
}

/* v1194: per Dave - v1188 only covered the FIRST of the 3 popups in this
   flow (#planModal, the package/payment picker). He's now confirmed the
   same accidental-close problem happens on the other 2 popups in the
   same flow: #accountFlowModal ("Step 1: Account option" - Create
   Account / Log In / Continue as Guest) and #startModal (the full
   project-details form - homepage changes, checkboxes, file uploads,
   etc.). Same fix, same reasoning: desktop only, backdrop stays
   visually identical but no longer clickable, so the X in the upper
   right is the only way out and nobody loses their in-progress
   selections by fat-fingering the dimmed area around the box. */
@media(min-width:761px){
  #accountFlowModal > .account-flow-modal__backdrop{
    pointer-events:none;
  }
  #startModal > .start-modal__backdrop{
    pointer-events:none;
  }
}

.plan-modal__panel{
  position:relative;
  z-index:2;
  width:min(940px, 94vw);
  max-height:88vh;
  overflow:auto;
  -webkit-overflow-scrolling:touch;
  border-radius:30px;
  background:linear-gradient(135deg, rgba(48,48,48,.98), rgba(30,30,30,.98));
  border:1px solid rgba(28,36,42,.16);
  box-shadow:0 34px 90px rgba(0,0,0,.48);
  padding:clamp(26px,4vw,48px);
  scrollbar-width:none;
  -ms-overflow-style:none;
}

.plan-modal__panel::-webkit-scrollbar{
  width:0;
  height:0;
  display:none;
}

.plan-modal__close{
  position:absolute;
  top:16px;
  right:7px; /* v700: 3px further right per Dave's ask, on top of v675's 6px shift */
  width:38px;
  height:38px;
  padding:0;
  display:flex;
  align-items:center;
  justify-content:center;
  border-radius:999px;
  border:1px solid rgba(28,36,42,.18);
  background:rgba(0,0,0,.22);
  color:#1c242a;
  font-size:24px;
  line-height:1;
  cursor:pointer;
}

.plan-modal__close:hover{
  background:#7E3187;
  border-color:#7E3187;
}

.plan-modal__header{
  max-width:720px;
  margin-bottom:26px;
}

.plan-modal__header h2{
  max-width:780px;
  margin:10px 0 12px;
  font-size:clamp(34px,4.4vw,62px);
  line-height:1.02;
  letter-spacing:-.045em;
}

.plan-modal__header p{
  margin:0;
  color:rgba(84,98,107,.72);
  font-size:17px;
  line-height:1.55;
}

.plan-modal__body{
  display:grid;
  grid-template-columns:1.05fr .95fr;
  gap:18px;
  align-items:start;
}

.plan-summary,
.payment-choice{
  padding:22px;
  border-radius:24px;
  background:rgba(255,255,255,.055);
  border:1px solid rgba(28,36,42,.12);
}

.plan-summary__row,
.plan-total{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:18px;
  padding-bottom:16px;
  border-bottom:1px solid rgba(28,36,42,.18);
}

.plan-summary__row span,
.plan-total span{
  color:rgba(84,98,107,.70);
  font-size:14px;
}

.plan-summary__row strong,
.plan-total strong{
  font-size:clamp(28px,3vw,42px);
  font-weight:500;
  letter-spacing:-.04em;
}


.plan-summary__section-title{
  margin:18px 0 12px;
  color:rgba(84,98,107,.70);
  font-size:14px;
  line-height:1.2;
}

.plan-pages{
  margin:18px 0;
}

.plan-pages.is-hidden{
  display:none;
}

.plan-pages label{
  display:block;
  color:#7E3187;
  font-size:11px;
  letter-spacing:.13em;
  text-transform:uppercase;
  margin-bottom:10px;
}

.page-stepper{
  display:flex;
  align-items:center;
  width:144px; /* v1005: 20% smaller (180px -> 144px) per Dave's ask - the
    whole -/0/+ counter had ballooned noticeably larger than intended. */
  border:1px solid rgba(255,255,255,.16);
  border-radius:999px;
  overflow:hidden;
  background:rgba(0,0,0,.18);
}

.page-stepper button,
.page-stepper input{
  height:34px; /* v1005: 20% smaller (42px -> 34px) */
  border:0;
  background:transparent;
  color:#1c242a;
  text-align:center;
}

.page-stepper button{
  width:37px; /* v1005: 20% smaller (46px -> 37px) */
  cursor:pointer;
  font-size:18px; /* v1005: 20% smaller (22px -> 18px) */
}

.page-stepper button:hover{
  background:#7E3187;
}

.page-stepper input{
  width:70px; /* v1005: 20% smaller (88px -> 70px) */
  font:500 13px/1 "Plus Jakarta Sans", Arial, sans-serif; /* v1005: 20% smaller (16px -> 13px) */
}

.plan-pages p{
  margin:10px 0 0;
  color:rgba(84,98,107,.62);
  font-size:13px;
}

.hosting-check{
  display:flex;
  align-items:flex-start;
  gap:10px;
  margin:18px 0;
  color:rgba(84,98,107,.76);
  font-size:14px;
  line-height:1.4;
}

.hosting-check input{
  margin-top:2px;
  accent-color:#7E3187;
}

.plan-total{
  padding-top:16px;
  padding-bottom:0;
  border-bottom:0;
  border-top:1px solid rgba(28,36,42,.18);
}

.payment-choice{
  display:grid;
  gap:10px;
}

.payment-choice .small-label{
  margin-bottom:3px;
}

.payment-choice__option{
  appearance:none;
  cursor:pointer;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:18px;
  border-radius:16px;
  border:1px solid rgba(28,36,42,.12);
  background:rgba(0,0,0,.16);
  color:#1c242a;
  padding:15px 16px;
  text-align:left;
}

.payment-choice__option strong{
  font-weight:500;
}

.payment-choice__option span{
  color:rgba(84,98,107,.72);
}

.payment-choice__option:hover,
.payment-choice__option.is-selected{
  border-color:rgba(126,49,135,.66);
  background:rgba(126,49,135,.11);
}

.plan-modal__footer{
  margin-top:18px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:20px;
}

.plan-modal__footer p{
  margin:0;
  color:rgba(84,98,107,.58);
  font-size:12px;
  line-height:1.45;
  max-width:520px;
}

.plan-submit{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:44px;
  padding:13px 22px;
  border-radius:999px;
  background:#7E3187;
  border:1px solid #7E3187;
  color:#ffffff;
  text-decoration:none;
  font-size:11px;
  letter-spacing:.10em;
  text-transform:uppercase;
  font-weight:500;
  white-space:nowrap;
}

.plan-submit:hover{
  background:#66266E;
  border-color:#66266E;
}

/* v1004: right-pointing arrow after "Project Start" button text, per
   Dave's ask - signals forward motion into the next step. Thin stroke
   (1.5px) and currentColor so it always matches the button's own text
   color (white in the final cascade), rather than the thicker/darker
   chevron in the reference image he sent. Same on mobile and desktop -
   no media-query scoping needed since .plan-submit is already a single
   shared button in both layouts. */
.plan-submit__arrow{
  margin-left:8px;
  flex-shrink:0;
  color:#ffffff;
}

@media(max-width:820px){
  .plan-modal__body{
    grid-template-columns:1fr;
  }

  .plan-modal__footer{
    align-items:flex-start;
    flex-direction:column;
  }
}


/* v55: managed website option inside pricing popups */
.service-options{
  display:grid;
  gap:10px;
  margin:18px 0;
}

.service-option{
  appearance:none;
  display:grid;
  gap:5px;
  width:100%;
  padding:15px 16px;
  border-radius:16px;
  border:1px solid rgba(28,36,42,.12);
  background:rgba(0,0,0,.14);
  color:#1c242a;
  text-align:left;
  cursor:pointer;
  transition:background .22s ease, border-color .22s ease, transform .22s ease;
}

.service-option:hover,
.service-option.is-selected{
  border-color:rgba(126,49,135,.62);
  background:rgba(126,49,135,.10);
}

.service-option span{
  color:#7E3187;
  font-size:10px;
  line-height:1;
  letter-spacing:.13em;
  text-transform:uppercase;
}

.service-option strong{
  font-weight:500;
  font-size:15px;
  line-height:1.25;
}

.service-option em{
  font-style:normal;
  color:rgba(84,98,107,.68);
  font-size:13px;
  line-height:1.38;
}

.service-option b{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:max-content;
  margin-top:6px;
  padding:8px 12px;
  border-radius:999px;
  border:1px solid rgba(28,36,42,.14);
  background:rgba(255,255,255,.04);
  color:#1c242a;
  font-weight:500;
  font-size:13px;
  line-height:1.2;
  white-space:nowrap;
}

.service-option.is-hidden{
  display:none;
}

.hosting-check{
  display:none !important;
}


/* v56: allow managed project totals to show one-time + monthly clearly */
.plan-total{
  align-items:flex-end !important;
}

.plan-total strong,
.payment-choice__option span{
  white-space:nowrap;
}

.plan-total strong{
  font-size:clamp(25px,2.55vw,38px) !important;
}

@media(max-width:520px){
  .plan-total{
    align-items:flex-start !important;
    flex-direction:column !important;
  }

  .payment-choice__option{
    align-items:flex-start !important;
    flex-direction:column !important;
    gap:6px !important;
  }
}


/* v57: project-start form popup after pricing selection */
.plan-submit{
  appearance:none;
  cursor:pointer;
}

.start-modal{
  position:fixed;
  inset:0;
  z-index:240;
  display:none;
  align-items:center;
  justify-content:center;
  padding:clamp(18px,4vw,54px);
}

.start-modal.is-open{
  display:flex;
}

.start-modal__backdrop{
  position:absolute;
  inset:0;
  background:rgba(0,0,0,.68);
  backdrop-filter:blur(10px);
}

.start-modal__panel{
  position:relative;
  z-index:2;
  width:min(980px, 94vw);
  max-height:88vh;
  overflow:auto;
  -webkit-overflow-scrolling:touch;
  border-radius:30px;
  background:linear-gradient(135deg, rgba(48,48,48,.985), rgba(30,30,30,.985));
  border:1px solid rgba(28,36,42,.16);
  box-shadow:0 34px 90px rgba(0,0,0,.50);
  padding:clamp(26px,4vw,48px);
  scrollbar-width:none;
  -ms-overflow-style:none;
}

.start-modal__panel::-webkit-scrollbar{
  width:0;
  height:0;
  display:none;
}

.start-modal__close{
  position:absolute;
  top:16px;
  right:16px;
  width:38px;
  height:38px;
  padding:0;
  display:flex;
  align-items:center;
  justify-content:center;
  border-radius:999px;
  border:1px solid rgba(28,36,42,.18);
  background:rgba(0,0,0,.22);
  color:#1c242a;
  font-size:24px;
  line-height:1;
  cursor:pointer;
}

.start-modal__close:hover{
  background:#7E3187;
  border-color:#7E3187;
}

.start-modal__header{
  max-width:760px;
  margin-bottom:22px;
}

.start-modal__header h2{
  max-width:760px;
  margin:10px 0 12px;
  font-size:clamp(34px,4.4vw,62px);
  line-height:1.02;
  letter-spacing:-.045em;
}

.start-modal__header p{
  margin:0;
  color:rgba(84,98,107,.72);
  font-size:17px;
  line-height:1.55;
}

.start-modal__summary{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:12px;
  margin:0 0 20px;
}

.start-modal__summary div{
  padding:9px 16px;
  border-radius:18px;
  background:rgba(126,49,135,.10);
  border:1px solid rgba(126,49,135,.28);
}

.start-modal__summary span{
  display:flex;
  align-items:center;
  color:#7E3187;
  font-size:10px;
  line-height:1;
  letter-spacing:.13em;
  text-transform:uppercase;
  margin-bottom:8px;
}

.start-modal__summary .summary-check-icon{
  flex:0 0 auto;
  margin-left:8px;
  color:currentColor;
  opacity:.85;
  position:relative;
  top:-4px;
}

.start-modal__summary strong{
  display:block;
  font-weight:500;
  color:#1c242a;
  line-height:1.28;
}

.start-form{
  display:grid;
  gap:14px;
}

.start-form__grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:14px;
}

.start-form label{
  display:grid;
  gap:6px;
  margin:0;
}

.start-form label span{
  color:rgba(28,36,42,.72);
  font-size:11px;
  line-height:1;
  letter-spacing:.08em;
  text-transform:uppercase;
  font-weight:400;
}

.start-form input,
.start-form textarea{
  width:100%;
  border:1px solid rgba(255,255,255,.16);
  border-radius:12px;
  background:rgba(0,0,0,.20);
  color:#1c242a;
  font:400 15px/1.35 "Plus Jakarta Sans", Arial, sans-serif;
  padding:12px 13px;
  outline:none;
  resize:vertical;
}

.start-form input:focus,
.start-form textarea:focus{
  border-color:rgba(126,49,135,.70);
  box-shadow:0 0 0 3px rgba(126,49,135,.12);
}

.start-confirm{
  display:flex !important;
  grid-template-columns:none !important;
  align-items:flex-start;
  gap:10px !important;
  color:rgba(84,98,107,.72);
  font-size:13px;
  line-height:1.45;
}

.start-confirm input{
  width:auto;
  margin-top:1px;
  accent-color:#7E3187;
}

.start-confirm span{
  color:rgba(84,98,107,.72) !important;
  font-size:13px !important;
  line-height:1.45 !important;
  letter-spacing:0 !important;
  text-transform:none !important;
}

.start-form__submit{
  justify-self:start;
  display:inline-flex;
  align-items:center;
  appearance:none;
  border:1px solid #7E3187;
  border-radius:999px;
  background:#7E3187;
  color:#ffffff;
  padding:14px 24px;
  font:500 11px/1 "Plus Jakarta Sans", Arial, sans-serif;
  letter-spacing:.10em;
  text-transform:uppercase;
  cursor:pointer;
}

/* v1019: cart icon on the checkout button - Dave wants a visual cue that
   clicking this doesn't charge the card immediately, just moves to the
   checkout step. Same white-on-dark treatment as the plan-submit arrow. */
.start-form__submit-cart{
  margin-left:8px;
  flex-shrink:0;
  color:#ffffff;
}

.start-form__submit:hover{
  background:#66266E;
  border-color:#66266E;
}

@media(max-width:820px){
  .start-modal__summary,
  .start-form__grid{
    /* v871: plain "1fr" resolves to minmax(auto,1fr) - the column still
       can't shrink below the largest min-content width of anything
       inside it. With the "I have changes to the homepage" panel open,
       the checkbox row / other wide inline content inside this grid was
       forcing a min-content wider than the phone screen, which stretched
       this whole grid (and everything in it) out to 416px on a 390px
       viewport - the exact overflow Dave is seeing. minmax(0,1fr) lets
       the track actually shrink to the container's real width and wrap
       its contents instead of forcing the grid wider. */
    grid-template-columns:minmax(0,1fr);
  }
  .start-form__grid,
  .start-form__grid *{
    min-width:0;
  }
}


/* v58: clean homepage approval/change-request options in project-start popup */
.homepage-approval,
.homepage-changes{
  display:grid;
  gap:10px;
  padding:16px;
  border-radius:18px;
  background:rgba(255,255,255,.045);
  border:1px solid rgba(255,255,255,.10);
}

/* v829: top-level Project Details section headers (Homepage Direction,
   Logo / Brand Direction, Inside Page Content, Website Care Notes,
   Website Access + Domain Info) matched to the same big bold heading
   treatment used for the plan modal's category titles (Web Design/Coding,
   Monthly Website Care, Logo Ad-on, Payment Options) instead of the small
   spread-out eyebrow style - per Dave's direct comparison of both windows.
   Nested sub-headers within an expanded panel (Homepage Change Requests,
   Social Media Links, Project Materials) intentionally keep the smaller
   eyebrow treatment since they're a level down, not top-level categories. */
.homepage-approval__label--section{
  display:block !important;
  margin-bottom:10px !important;
  font-size:26px !important;
  font-weight:500 !important;
  text-transform:none !important;
  letter-spacing:-.01em !important;
  line-height:1.1 !important;
  color:rgba(84,98,107,.95) !important;
}

.homepage-approval__label{
  color:#54626b;
  font-size:11px;
  line-height:1;
  letter-spacing:.13em;
  text-transform:uppercase;
  font-weight:500;
}

.homepage-choice{
  display:flex !important;
  align-items:flex-start;
  gap:11px !important;
  padding:14px;
  border-radius:16px;
  border:1px solid rgba(28,36,42,.11);
  background:rgba(0,0,0,.12);
  cursor:pointer;
}

.homepage-choice.is-active{
  border-color:rgba(126,49,135,.58);
  background:rgba(126,49,135,.10);
}

.start-modal .homepage-choice:not(.is-active):hover,
.plan-modal .homepage-choice:not(.is-active):hover{
  background:rgba(0,0,0,.22) !important;
}

.homepage-choice > input,
.homepage-choice__main > input{
  width:15px !important;
  height:15px !important;
  min-height:0 !important;
  margin-top:3px !important;
  padding:0 !important;
  flex:0 0 auto !important;
  cursor:pointer !important;
  appearance:none !important;
  -webkit-appearance:none !important;
  border-radius:5px !important;
  background:#ffffff !important;
  border:1px solid rgba(28,36,42,.32) !important;
  position:relative !important;
}
.homepage-choice > input:checked,
.homepage-choice__main > input:checked{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
}
.homepage-choice > input:checked::after,
.homepage-choice__main > input:checked::after{
  content:'' !important;
  position:absolute !important;
  left:4px !important;
  top:1px !important;
  width:4px !important;
  height:7px !important;
  border:solid #ffffff !important;
  border-width:0 2px 2px 0 !important;
  transform:rotate(45deg) !important;
}

.homepage-choice > span,
.homepage-choice__main > span{
  display:grid;
  gap:4px;
}

.homepage-choice > span > strong,
.homepage-choice__main > span > strong{
  color:#1c242a;
  font-size:14px;
  line-height:1.3;
  font-weight:500;
}

.homepage-choice > span > em,
.homepage-choice__main > span > em{
  color:rgba(84,98,107,.66);
  font-size:13px;
  line-height:1.4;
  font-style:normal;
}

/* v184: show included/minor-change scope note only after homepage changes option is selected */
.homepage-change-cost-note{
  display:none;
  margin-top:6px;
  padding:11px 12px;
  border-radius:12px;
  border:1px solid rgba(126,49,135,.28);
  background:rgba(126,49,135,.08);
  color:rgba(246,241,232,.78);
  font-size:12.5px;
  line-height:1.45;
  font-style:normal;
  letter-spacing:0 !important;
  text-transform:none !important;
}

.homepage-choice.is-active .homepage-change-cost-note{
  display:block;
}

.homepage-changes.is-hidden{
  display:none;
}

.change-checks{
  display:grid;
  grid-template-columns:repeat(4, minmax(0,1fr));
  gap:4px 12px;
}

.change-checks label{
  display:flex !important;
  align-items:center;
  gap:8px !important;
  color:rgba(84,98,107,.72);
  font-size:13px;
  line-height:1.15;
}

.change-checks input{
  width:auto !important;
  accent-color:#7E3187;
}

.change-checks span{
  color:rgba(84,98,107,.72) !important;
  font-size:13px !important;
  letter-spacing:0 !important;
  text-transform:none !important;
}

@media(max-width:900px){
  .change-checks{
    grid-template-columns:repeat(2, minmax(0,1fr));
  }
}
@media(max-width:640px){
  .change-checks{
    grid-template-columns:1fr;
  }
}


/* v59: short lead-in header for the five value cards */
.value-intro{
  max-width:1760px;
  margin:34px auto 18px;
  text-align:left;
}

.value-intro h2{
  max-width:760px;
  margin:10px 0 10px;
  font-size:clamp(30px,3.3vw,52px);
  line-height:1.04;
  letter-spacing:-.045em;
  font-weight:500;
}

.value-intro p{
  max-width:720px;
  margin:0;
  color:rgba(246,241,232,.68);
  font-size:clamp(15px,1.25vw,18px);
  line-height:1.55;
}

.value-intro + .notes{
  margin-top:0 !important;
}

/* v559: FAQ accordion section */
.faq-intro{
  margin-top:34px;
}
.faq-section{
  max-width:1760px;
  margin:24px auto 0;
  display:grid;
  grid-template-columns:1fr 1fr;
  grid-auto-flow:row dense;
  gap:12px 16px;
  align-items:start;
}
.faq-show-more{
  grid-column:1 / -1;
  width:100%;
  padding:16px 24px;
  border-radius:18px;
  background:rgba(255,255,255,.04);
  border:1px dashed rgba(255,255,255,.18);
  color:var(--gold);
  font-family:"Plus Jakarta Sans", Arial, sans-serif;
  font-size:14px;
  font-weight:500;
  cursor:pointer;
  text-align:center;
}
.faq-item.is-faq-collapsed{
  display:none;
}
.faq-item{
  border-radius:18px;
  background:rgba(255,255,255,.06);
  border:1px solid rgba(255,255,255,.11);
  overflow:hidden;
  transition:background-color .18s ease, border-color .18s ease, transform .18s ease;
}

/* v570: subtle hover feedback so it reads as a live, clickable button */
@media (hover:hover){
  .faq-item:hover{
    background:rgba(255,255,255,.10);
    border-color:rgba(255,255,255,.20);
    transform:scale(1.012);
  }
}
.faq-question{
  width:100%;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  padding:20px 24px;
  background:transparent;
  border:0;
  cursor:pointer;
  text-align:left;
  font-family:"Plus Jakarta Sans", Arial, sans-serif;
}
.faq-question span{
  color:#fff;
  font-size:15px;
  font-weight:500;
  letter-spacing:-.01em;
  line-height:1.4;
}
.faq-icon{
  flex:0 0 auto;
  position:relative;
  width:18px;
  height:18px;
}
.faq-icon::before,
.faq-icon::after{
  content:"";
  position:absolute;
  top:50%;
  left:50%;
  background:var(--gold-bg);
  transform:translate(-50%,-50%);
  transition:transform .2s ease;
}
.faq-icon::before{
  width:14px;
  height:2px;
}
.faq-icon::after{
  width:2px;
  height:14px;
}
.faq-question[aria-expanded="true"] .faq-icon::after{
  transform:translate(-50%,-50%) rotate(90deg) scale(0);
}
.faq-answer{
  padding:0 24px 20px;
}
.faq-answer p a{
  color:var(--gold);
  text-decoration:underline;
  text-underline-offset:2px;
}
.faq-answer p{
  margin:0;
  color:rgba(246,241,232,.68);
  font-size:14px;
  line-height:1.6;
  font-family:"Plus Jakarta Sans", Arial, sans-serif;
  max-width:780px;
}
@media (max-width:760px){
  .faq-section{
    grid-template-columns:1fr;
    margin-top:16px;
    gap:10px;
  }
  .faq-question{
    padding:16px 18px;
  }
  .faq-question span{
    font-size:14px;
  }
  .faq-answer{
    padding:0 18px 16px;
  }
  .faq-show-more{
    padding:14px 18px;
    font-size:13px;
  }
}


/* v60: clean link to review proposed website from the project-start popup */
.homepage-preview-link{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:max-content;
  margin-top:7px;
  padding:9px 13px;
  border-radius:999px;
  border:1px solid rgba(126,49,135,.58);
  background:rgba(126,49,135,.10);
  color:#7E3187;
  text-decoration:none;
  font-size:10px;
  line-height:1;
  letter-spacing:.10em;
  text-transform:uppercase;
  font-weight:500;
}

.homepage-preview-link:hover,
.homepage-preview-link:focus-visible{
  background:#7E3187;
  border-color:#7E3187;
  color:#ffffff;
}

/* the choice card this pill lives in turns solid accent-blue when
   selected (.is-active) - the default dark-on-light pill styling above
   would be invisible against that solid fill, so give it its own
   white-on-translucent-white treatment in that context specifically */
.homepage-choice.is-active .homepage-preview-link{
  border-color:rgba(255,255,255,.6);
  background:rgba(255,255,255,.14);
  color:#ffffff;
}
.homepage-choice.is-active .homepage-preview-link:hover,
.homepage-choice.is-active .homepage-preview-link:focus-visible{
  background:rgba(255,255,255,.28);
  border-color:#ffffff;
  color:#ffffff;
}

/* v1183: per Dave - on desktop, the "Keep proposed website as-is" card
   was taller than it needed to be because the paragraph ran full width
   and the "View proposed website" pill sat stacked underneath it,
   using its own extra row. Narrowed the paragraph so it wraps to two
   lines and only reaches about the middle of the card, then moved the
   pill up alongside it on the right instead of below - the card's
   height now comes from the two-line paragraph rather than
   paragraph-plus-button stacked separately, so it can shrink. This
   only applies to the "keep as-is" choice (.homepage-choice > span,
   not .homepage-choice__main > span - the "I have website changes"
   card uses that second selector and has no preview link, so it's
   untouched) and only on desktop; mobile keeps the original stacked
   layout since there's no room to go side by side. */
@media(min-width:761px){
  .homepage-choice > span{
    display:grid;
    grid-template-columns:minmax(0,1fr) auto;
    column-gap:16px;
    row-gap:2px;
    align-items:start;
  }
  .homepage-choice > span > strong{
    grid-column:1 / -1;
  }
  .homepage-choice > span > em{
    grid-column:1;
    grid-row:2;
    max-width:280px;
  }
  .homepage-choice > span > .homepage-preview-link{
    grid-column:2;
    grid-row:2;
    margin-top:0;
    align-self:start;
    white-space:nowrap;
  }
}

.homepage-choice.is-active > span > strong,
.homepage-choice__main.homepage-choice.is-active > span > strong,
.homepage-choice.is-active .homepage-choice__main > span > strong{
  color:#ffffff !important;
}
.homepage-choice.is-active > span > em,
.homepage-choice__main.homepage-choice.is-active > span > em,
.homepage-choice.is-active .homepage-choice__main > span > em{
  color:rgba(255,255,255,.78) !important;
}


/* v61: materials upload section inside Homepage Changes Requested. Scoped only to the project-start modal. */
.start-modal .materials-upload{
  margin-top:18px;
  padding:18px;
  border-radius:20px;
  background:rgba(255,255,255,.055);
  border:1px solid rgba(28,36,42,.12);
}

.start-modal .materials-upload__intro{
  margin-bottom:14px;
}

.start-modal .materials-upload__intro p{
  margin:8px 0 0;
  color:rgba(84,98,107,.70);
  font-size:14px;
  line-height:1.5;
}

.start-modal .materials-upload__grid{
  display:grid;
  grid-template-columns:repeat(2, minmax(0,1fr));
  gap:12px;
  margin-bottom:14px;
}

.start-modal .file-field{
  display:grid;
  gap:8px;
  padding:14px;
  border-radius:16px;
  background:var(--pv-card2) !important;
  border:1px solid rgba(28,36,42,.10);
}

.start-modal .file-field input[type="file"]{
  width:100%;
  padding:9px;
  border-radius:12px;
  background:rgba(0,0,0,.18);
  border:1px dashed rgba(28,36,42,.22);
  color:rgba(244,246,247,.55);
  font-size:12px;
}

.start-modal .file-field em{
  color:rgba(84,98,107,.58);
  font-style:normal;
  font-size:12px;
  line-height:1.35;
}

@media(max-width:760px){
  .start-modal .materials-upload__grid{
    grid-template-columns:1fr;
  }

  .start-modal .materials-upload{
    padding:15px;
  }
}


/* v62: clarify typed copy/change requests and optional materials uploads */
.start-modal .typed-changes-field em,
.start-modal .materials-upload__intro .homepage-approval__label em,
.start-modal label > span em{
  color:rgba(84,98,107,.56);
  font-style:normal;
  font-weight:400;
  text-transform:none;
  letter-spacing:.02em;
}

.start-modal .typed-changes-field > em{
  display:block;
  margin-top:7px;
  color:rgba(84,98,107,.62);
  font-size:12px;
  line-height:1.4;
}

.start-modal .materials-upload__intro p{
  max-width:760px;
}

.start-modal .materials-upload{
  margin-top:20px;
}


/* v63: safer upload guidance */
.start-modal .upload-security-note{
  margin-top:8px !important;
  color:rgba(84,98,107,.62) !important;
  font-size:12px !important;
  line-height:1.45 !important;
}

.start-modal .blocked-files-note{
  margin-top:12px;
  padding:11px 13px;
  border-radius:14px;
  background:rgba(126,49,135,.08);
  border:1px solid rgba(126,49,135,.22);
  color:rgba(84,98,107,.72);
  font-size:12px;
  line-height:1.45;
}

.start-modal .blocked-files-note strong{
  color:#1c242a;
  font-weight:500;
}


/* v64: clarify Homepage + Additional Pages flow without altering the main layout */
.price-card-badge{
  display:inline-flex;
  margin:10px 0 12px;
  padding:7px 10px;
  border-radius:999px;
  background:rgba(126,49,135,.12);
  border:1px solid rgba(126,49,135,.30);
  color:#1c242a;
  font-size:10px;
  line-height:1;
  letter-spacing:.10em;
  text-transform:uppercase;
}

.price-trigger--plus:hover .price-card-badge{
  background:#7E3187;
  border-color:#7E3187;
}

.plus-pages-examples{
  margin-top:10px;
  padding:12px 13px;
  border-radius:14px;
  background:rgba(126,49,135,.08);
  border:1px solid rgba(126,49,135,.20);
  color:rgba(84,98,107,.70);
  font-size:12px;
  line-height:1.45;
}

.plus-pages-examples strong{
  display:block;
  margin-bottom:3px;
  color:#1c242a;
  font-weight:500;
}

.plus-pages-examples span{
  display:block;
}


/* v65: inside page content collection for Homepage + Additional Pages */
.start-modal .inside-pages-content{
  margin:20px 0;
  padding:18px;
  border-radius:22px;
  background:rgba(255,255,255,.055);
  border:1px solid rgba(28,36,42,.12);
}

.start-modal .inside-pages-content.is-hidden{
  display:none;
}

.start-modal .inside-pages-content__intro{
  margin:8px 0 15px;
  color:rgba(84,98,107,.70);
  font-size:14px;
  line-height:1.5;
  max-width:820px;
}

.start-modal .inside-page-checks{
  display:grid;
  grid-template-columns:repeat(2, minmax(0,1fr));
  gap:9px 12px;
  margin:0 0 16px;
}

.start-modal .inside-page-checks label{
  display:flex;
  gap:9px;
  align-items:flex-start;
  padding:10px 11px;
  border-radius:14px;
  background:rgba(0,0,0,.14);
  border:1px solid rgba(28,36,42,.08);
  color:rgba(84,98,107,.78);
  font-size:13px;
  line-height:1.35;
}

.start-modal .inside-page-checks input{
  margin-top:2px;
  accent-color:#7E3187;
}

.start-modal .inside-materials{
  margin-top:16px;
  padding:16px;
  border-radius:18px;
  background:rgba(0,0,0,.12);
  border:1px solid rgba(28,36,42,.09);
}

.start-modal .inside-materials__intro{
  margin-bottom:13px;
}

.start-modal .inside-materials__intro span{
  display:block;
  color:#7E3187;
  font-size:11px;
  line-height:1;
  letter-spacing:.14em;
  text-transform:uppercase;
  font-weight:500;
}

.start-modal .inside-materials__intro span em,
.start-modal .inside-materials label > span em{
  color:rgba(84,98,107,.56);
  font-style:normal;
  font-weight:400;
  text-transform:none;
  letter-spacing:.02em;
}

.start-modal .inside-materials__intro p{
  margin:8px 0 0;
  color:rgba(84,98,107,.64);
  font-size:13px;
  line-height:1.45;
}

.start-modal .inside-materials__grid{
  display:grid;
  grid-template-columns:repeat(2, minmax(0,1fr));
  gap:12px;
  margin-bottom:14px;
}

@media(max-width:760px){
  .start-modal .inside-page-checks,
  .start-modal .inside-materials__grid{
    grid-template-columns:1fr;
  }

  .start-modal .inside-pages-content,
  .start-modal .inside-materials{
    padding:15px;
  }
}


/* v67/v978: single exposed header row - label text + info-button popup,
   no boxed container, text sized to match the paragraphs above it */
.start-modal .inside-pages-count-note{
  display:flex;
  align-items:center;
  gap:6px;
  margin:0 0 16px;
  padding:0;
  border-radius:0;
  background:none;
  border:none;
}

.start-modal .inside-pages-count-note strong{
  color:#1c242a;
  font-weight:700;
  font-size:14px;
}

.start-modal .inside-pages-count-note .inside-pages-count-info-trigger{
  margin:0 0 0 6px;
  top:0;
}

.start-modal .inside-page-builder{
  display:grid;
  gap:14px;
}

.start-modal .inside-page-block{
  padding:16px;
  border-radius:19px;
  background:var(--pv-card) !important;
  border:1px solid rgba(28,36,42,.10);
}

.start-modal .inside-page-block__head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  margin-bottom:13px;
}

.start-modal .inside-page-block__head strong{
  color:#1c242a;
  font-size:15px;
  line-height:1.2;
  letter-spacing:.02em;
  text-transform:none;
  font-weight:700;
}

.start-modal .inside-page-block__head span{
  color:rgba(84,98,107,.60);
  font-size:12px;
}

.start-modal .inside-page-block__grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:12px;
}

.start-modal .inside-page-block__grid label.full{
  grid-column:1 / -1;
}

.start-modal .inside-page-block .file-field{
  margin-top:0;
  background:#f2f3f4 !important; /* v1011: was inheriting the shared
    --pv-card2 (#eceef0), only ~1% lighter than this block's own
    --pv-card background (#e9ebec) - nearly invisible as a distinct
    panel. Scoped to just these two file-upload boxes (not the shared
    --pv-card2 variable, which is also used by unrelated cards
    elsewhere) so they read as clearly lighter sub-panels without a
    stark white against the darker outer "Inside Page" block. */
}

.start-modal .inside-page-checks{
  display:none !important;
}

@media(max-width:760px){
  .start-modal .inside-page-block__grid{
    grid-template-columns:1fr;
  }

  .start-modal .inside-page-block{
    padding:14px;
  }

  .start-modal .inside-page-block__head{
    align-items:flex-start;
    flex-direction:column;
    gap:5px;
  }
}


/* v978: shared header/nav/footer note now flows as a plain second
   paragraph under the intro (no boxed container), matching its size */
.start-modal .inside-pages-shared-note{
  margin:0 0 16px;
  padding:0;
  border-radius:0;
  background:none;
  border:none;
  color:rgba(84,98,107,.70);
  font-size:14px;
  line-height:1.5;
  max-width:820px;
}

.start-modal .inside-pages-shared-note strong{
  color:#1c242a;
  font-weight:500;
}

.start-modal .inside-pages-content__intro{
  margin-bottom:8px;
}


/* v69: Monthly Website Care tier options */
.care-options{
  display:grid;
  grid-template-columns:repeat(2, minmax(0,1fr));
  gap:12px;
  margin:16px 0;
}

.care-options.is-hidden{
  display:none;
}

.care-option{
  text-align:left;
  border:1px solid rgba(28,36,42,.12);
  background:rgba(255,255,255,.055);
  border-radius:18px;
  padding:15px;
  color:#1c242a;
  cursor:pointer;
  transition:background .18s ease, border-color .18s ease, transform .18s ease;
}

.care-option:hover,
.care-option.is-selected{
  background:rgba(126,49,135,.10);
  border-color:rgba(126,49,135,.44);
  transform:translateY(-1px);
}

.care-option span{
  display:inline-flex;
  margin-bottom:9px;
  color:#7E3187;
  font-size:10px;
  line-height:1;
  letter-spacing:.12em;
  text-transform:uppercase;
}

.care-option strong{
  display:block;
  margin-bottom:6px;
  font-size:15px;
  font-weight:500;
}

.care-option em{
  display:block;
  color:rgba(84,98,107,.64);
  font-style:normal;
  font-size:12px;
  line-height:1.45;
}

.care-option b{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:max-content;
  margin-top:10px;
  padding:8px 12px;
  border-radius:999px;
  border:1px solid rgba(28,36,42,.14);
  background:rgba(255,255,255,.04);
  color:#1c242a;
  font-size:13px;
  font-weight:500;
  line-height:1.2;
  white-space:nowrap;
}

@media(max-width:760px){
  .care-options{
    grid-template-columns:1fr;
  }
}


/* v70: Monthly Website Care uses care-specific notes, not homepage approval */
.start-modal .website-care-notes{
  margin:20px 0;
  padding:18px;
  border-radius:22px;
  background:rgba(255,255,255,.055);
  border:1px solid rgba(28,36,42,.12);
}

.start-modal .website-care-notes.is-hidden{
  display:none;
}

.start-modal .website-care-notes__intro{
  margin:8px 0 15px;
  color:rgba(84,98,107,.70);
  font-size:14px;
  line-height:1.5;
  max-width:820px;
}

.start-modal .website-care-options{
  display:grid;
  grid-template-columns:repeat(2, minmax(0,1fr));
  gap:9px 12px;
  margin:0 0 16px;
}

.start-modal .website-care-options label{
  display:flex;
  gap:9px;
  align-items:flex-start;
  padding:10px 11px;
  border-radius:14px;
  background:rgba(0,0,0,.14);
  border:1px solid rgba(28,36,42,.08);
  color:rgba(84,98,107,.78);
  font-size:13px;
  line-height:1.35;
}

.start-modal .website-care-options input{
  margin-top:2px;
  accent-color:#7E3187;
}

@media(max-width:760px){
  .start-modal .website-care-options{
    grid-template-columns:1fr;
  }

  .start-modal .website-care-notes{
    padding:15px;
  }
}


/* v71: access info for Monthly Website Care, without collecting passwords */
.start-modal .website-access-info{
  margin:16px 0;
  padding:16px;
  border-radius:18px;
  background:rgba(0,0,0,.14);
  border:1px solid rgba(28,36,42,.10);
}

.start-modal .website-access-warning{
  margin:8px 0 14px;
  padding:12px 13px;
  border-radius:14px;
  background:rgba(126,49,135,.08);
  border:1px solid rgba(126,49,135,.22);
  color:rgba(84,98,107,.72);
  font-size:12px;
  line-height:1.5;
}

.start-modal .website-access-grid{
  display:grid;
  grid-template-columns:repeat(2, minmax(0,1fr));
  gap:12px;
}

.start-modal select{
  width:100%;
  border:1px solid rgba(28,36,42,.14);
  background:rgba(0,0,0,.22);
  color:#1c242a;
  border-radius:14px;
  padding:12px 13px;
  font:inherit;
  outline:none;
}

.start-modal select:focus{
  border-color:rgba(126,49,135,.50);
}

/* v980: the "Page X title" pulldown was stretching full-width on desktop
   for a short label - narrow it to a normal-sized dropdown, mobile
   untouched (stays full-width there). */
@media (min-width:761px){
  .start-modal .inside-page-title-select{
    width:34%;
    min-width:220px;
    max-width:340px;
  }
}

@media(max-width:760px){
  .start-modal .website-access-grid{
    grid-template-columns:1fr;
  }

  .start-modal .website-access-info{
    padding:15px;
  }
}


/* v72: clean up Monthly Website Care checkbox layout */
.start-modal .website-care-options{
  display:grid;
  grid-template-columns:repeat(2, minmax(0,1fr));
  gap:10px 12px;
  margin:0 0 16px;
}

.start-modal .website-care-options label{
  display:flex !important;
  align-items:center !important;
  justify-content:flex-start !important;
  gap:10px !important;
  min-height:46px;
  padding:11px 14px !important;
  border-radius:15px;
  text-align:left !important;
}

.start-modal .website-care-options input{
  flex:0 0 auto;
  width:15px;
  height:15px;
  margin:0 !important;
  accent-color:#7E3187;
}

.start-modal .website-care-options span{
  display:block;
  flex:1 1 auto;
  min-width:0;
  color:rgba(84,98,107,.82);
  font-size:12px;
  line-height:1.25;
  letter-spacing:.055em;
  text-transform:uppercase;
  text-align:left !important;
}

@media(max-width:760px){
  .start-modal .website-care-options{
    grid-template-columns:1fr;
  }
}


/* v73: hard-hide homepage approval/change sections for Monthly Website Care */
.start-modal.is-care-mode #homepageApprovalGroup,
.start-modal.is-care-mode #homepageChanges,
.start-modal.is-care-mode #insidePagesContent,
.start-modal.is-care-mode .homepage-approval{
  display:none !important;
}

.start-modal.is-care-mode #websiteCareNotes{
  display:block !important;
}


/* v74: clarify monthly care update allowance */
.start-modal .website-care-scope-note{
  display:grid;
  gap:5px;
  margin:0 0 15px;
  padding:12px 14px;
  border-radius:16px;
  background:rgba(126,49,135,.08);
  border:1px solid rgba(126,49,135,.22);
}

.start-modal .website-care-scope-note strong{
  color:#1c242a;
  font-weight:500;
  font-size:13px;
}

.start-modal .website-care-scope-note span{
  color:rgba(84,98,107,.68);
  font-size:12px;
  line-height:1.45;
}


/* v75: add hover feedback to Payment Options panel */
.payment-options{
  transition:transform .18s ease, border-color .18s ease, background .18s ease, box-shadow .18s ease;
}

.payment-options:hover{
  transform:translateY(-2px);
  border-color:rgba(126,49,135,.36);
  background:rgba(255,255,255,.065);
  box-shadow:0 18px 42px rgba(0,0,0,.18);
}

.payment-options:hover .small-label{
  color:#7E3187;
}


/* v77: no long-term contract note on pricing cards */
.investment-card small{
  display:inline-flex;
  margin-top:16px;
  padding:7px 10px;
  border-radius:999px;
  background:rgba(255,255,255,.055);
  border:1px solid rgba(255,255,255,.13);
  color:rgba(246,241,232,.70);
  font-size:10px;
  line-height:1;
  letter-spacing:.10em;
  text-transform:uppercase;
  font-weight:500;
}

.investment-card:hover small{
  color:#fff;
  border-color:rgba(126,49,135,.36);
  background:rgba(126,49,135,.10);
}


/* v78: Stripe checkout links for Monthly Website Care */
.care-stripe-cta{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:44px;
  padding:0 18px;
  border-radius:999px;
  background:#7E3187;
  border:1px solid #7E3187;
  color:#ffffff;
  font-size:12px;
  font-weight:700;
  line-height:1;
  letter-spacing:.10em;
  text-transform:uppercase;
  text-decoration:none;
  transition:transform .18s ease, filter .18s ease;
}

.care-stripe-cta:hover{
  transform:translateY(-1px);
  filter:brightness(1.06);
}

.care-stripe-cta.is-hidden{
  display:none;
}

.start-modal .website-care-checkout-links{
  margin-top:16px;
  padding:15px;
  border-radius:18px;
  background:rgba(126,49,135,.08);
  border:1px solid rgba(126,49,135,.22);
}

.start-modal .website-care-checkout-links strong{
  display:block;
  color:#1c242a;
  font-weight:500;
  font-size:13px;
  margin-bottom:5px;
}

.start-modal .website-care-checkout-links span{
  display:block;
  color:rgba(84,98,107,.68);
  font-size:12px;
  line-height:1.45;
  margin-bottom:12px;
}

.start-modal .website-care-checkout-links div{
  display:flex;
  flex-wrap:wrap;
  gap:10px;
}

.start-modal .website-care-checkout-links a{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  padding:10px 13px;
  border-radius:999px;
  background:rgba(255,255,255,.07);
  border:1px solid rgba(28,36,42,.14);
  color:#1c242a;
  text-decoration:none;
  font-size:11px;
  line-height:1;
  letter-spacing:.08em;
  text-transform:uppercase;
}

.start-modal .website-care-checkout-links a:hover{
  background:#7E3187;
  border-color:#7E3187;
  color:#ffffff;
}


/* v79: project care options for Homepage Only and Homepage + Additional Pages */
.service-options{
  grid-template-columns:repeat(3, minmax(0,1fr));
}

.service-option[data-service="existing-hosting"].is-selected,
.service-option[data-service="managed"].is-selected{
  background:rgba(126,49,135,.10);
  border-color:rgba(126,49,135,.44);
}

@media(max-width:900px){
  .service-options{
    grid-template-columns:1fr;
  }
}


/* v80: split project installment + monthly care onto two readable lines */
.payment-choice__option span{
  text-align:right;
}

.payment-choice__option .payment-project,
.payment-choice__option .payment-care{
  display:block;
  text-align:right;
  line-height:1.22;
}

.payment-choice__option .payment-project{
  color:rgba(84,98,107,.82);
}

.payment-choice__option .payment-care{
  margin-top:3px;
  color:#1c242a;
  font-weight:700;
}

@media(max-width:560px){
  .payment-choice__option{
    align-items:flex-start;
  }

  .payment-choice__option span,
  .payment-choice__option .payment-project,
  .payment-choice__option .payment-care{
    text-align:left;
  }
}


/* v81: keep right-side payment amounts in the softer content gray and move plus sign to care line */
.payment-choice__option .payment-project,
.payment-choice__option .payment-care{
  color:rgba(84,98,107,.70) !important;
  font-weight:600;
}

.payment-choice__option .payment-care{
  margin-top:3px;
}


/* v84: cleaner guided layout for project option popups */
.plan-modal__panel{
  width:min(780px, 94vw) !important;
}

.plan-modal__header{
  max-width:100% !important;
  margin-bottom:18px !important;
}

.plan-modal__header h2{
  max-width:100% !important;
  font-size:clamp(34px,4vw,54px) !important;
}

.plan-modal__body{
  display:grid !important;
  grid-template-columns:1fr !important;
  gap:14px !important;
}

.plan-summary,
.payment-choice{
  padding:22px !important;
}

.plan-summary__row{
  padding-bottom:14px;
  margin-bottom:16px;
}

.plan-summary__row strong{
  font-size:clamp(34px,4vw,50px) !important;
}

.service-options{
  display:grid !important;
  grid-template-columns:1fr !important;
  gap:10px !important;
  margin:18px 0 !important;
}

.service-option{
  display:grid !important;
  grid-template-columns:150px minmax(170px, 220px) minmax(240px, 1fr);
  grid-template-rows:auto auto;
  align-items:start;
  gap:10px 18px;
  min-height:76px;
  padding:15px 16px !important;
}

.service-option span{
  grid-column:1;
  grid-row:1 / span 2;
  align-self:center;
  margin:0;
}

.service-option strong{
  grid-column:2;
  grid-row:1;
  align-self:end;
  font-size:16px !important;
  line-height:1.22;
}

.service-option em{
  grid-column:3;
  grid-row:1 / span 2;
  align-self:center;
  font-size:13px !important;
  line-height:1.38;
}

.service-option b{
  grid-column:2;
  grid-row:2;
  justify-self:start;
  align-self:start;
  max-width:none;
  text-align:left;
  white-space:nowrap;
  font-size:13px !important;
  line-height:1.25;
}

.plan-pages{
  margin:18px 0 !important;
  padding:16px;
  border-radius:18px;
  background:rgba(0,0,0,.12);
  border:1px solid rgba(28,36,42,.09);
}

.plan-pages label{
  margin-bottom:12px !important;
}

.page-stepper{
  width:190px !important;
}

.plus-pages-examples{
  margin-top:14px !important;
}

.plan-total{
  margin-top:18px;
  padding-top:18px;
  padding-bottom:0 !important;
  border-top:1px solid rgba(28,36,42,.18);
  border-bottom:0 !important;
}

.payment-choice{
  display:grid;
  gap:12px;
}

.payment-choice > .small-label{
  margin-bottom:0;
}

.payment-choice__option{
  display:grid !important;
  grid-template-columns:1fr auto;
  align-items:center;
  gap:18px;
  padding:16px 18px !important;
}

.payment-choice__option strong{
  font-size:14px;
}

.payment-choice__option > span{
  min-width:170px;
}

.plan-modal__footer{
  margin-top:14px !important;
}

@media(max-width:760px){
  .plan-modal__panel{
    width:min(96vw, 780px) !important;
    padding:24px 18px !important;
  }

  .service-option{
    grid-template-columns:1fr;
    grid-template-rows:auto;
    gap:7px;
  }

  .service-option span,
  .service-option strong,
  .service-option em,
  .service-option b{
    grid-column:auto;
    grid-row:auto;
  }

  .service-option b{
    justify-self:start;
    max-width:none;
    text-align:left;
    white-space:normal;
  }

  .payment-choice__option{
    grid-template-columns:1fr;
    gap:8px;
  }

  .payment-choice__option > span{
    min-width:0;
  }
}


/* v91: add small readable sublabels under project and monthly care amounts */
.payment-choice__option .payment-project,
.payment-choice__option .payment-care,
.plan-total .payment-project,
.plan-total .payment-care{
  display:flex;
  flex-direction:column;
  align-items:flex-end;
  gap:2px;
}

.payment-choice__option .payment-amount,
.plan-total .payment-amount{
  color:rgba(84,98,107,.70);
  font-weight:600;
  line-height:1.15;
}

.payment-choice__option .payment-note,
.plan-total .payment-note{
  color:rgba(84,98,107,.62);
  font-size:12px;
  font-weight:500;
  line-height:1.15;
  letter-spacing:.01em;
}

.plan-total strong{
  display:flex;
  flex-direction:column;
  align-items:flex-end;
  gap:4px;
}

.plan-total .payment-care{
  margin-top:4px;
}

@media(max-width:560px){
  .payment-choice__option .payment-project,
  .payment-choice__option .payment-care,
  .plan-total .payment-project,
  .plan-total .payment-care,
  .plan-total strong{
    align-items:flex-start;
  }
}


/* v92: mobile interaction repair + lightweight mobile before/after slider */
.mobile-compare-slider{
  position:relative;
  overflow:hidden;
  width:100%;
  max-width:360px;
  margin:18px auto 0;
  aspect-ratio:9 / 16;
  border-radius:22px;
  border:1px solid rgba(255,255,255,.16);
  background:#111;
  box-shadow:0 18px 44px rgba(0,0,0,.22);
  touch-action:none;
}

.mobile-compare-img{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  object-fit:cover;
  object-position:top center;
  border:0;
  border-radius:0;
}

.mobile-compare-after{
  position:absolute;
  inset:0;
  overflow:hidden;
  clip-path:inset(0 0 0 var(--mobile-split));
}

.mobile-compare-divider{
  position:absolute;
  top:0;
  bottom:0;
  left:var(--mobile-split);
  width:42px;
  transform:translateX(-21px);
  z-index:4;
  display:flex;
  align-items:center;
  justify-content:center;
  pointer-events:none;
}

.mobile-compare-divider::before{
  content:"";
  position:absolute;
  top:0;
  bottom:0;
  left:50%;
  width:2px;
  transform:translateX(-50%);
  background:rgba(255,255,255,.82);
  box-shadow:0 0 0 1px rgba(0,0,0,.16);
}

.mobile-compare-divider span{
  position:relative;
  z-index:2;
  display:flex;
  align-items:center;
  justify-content:center;
  width:46px;
  height:46px;
  border-radius:999px;
  background:rgba(255,255,255,.94);
  color:#9a1f27;
  font-size:18px;
  letter-spacing:.02em;
  box-shadow:0 10px 24px rgba(0,0,0,.24);
}

.mobile-compare-slider input[type="range"]{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  opacity:0;
  z-index:5;
  cursor:ew-resize;
}

.mobile-compare-labels{
  display:flex;
  justify-content:space-between;
  max-width:360px;
  margin:10px auto 0;
  color:rgba(246,241,232,.64);
  font-size:11px;
  letter-spacing:.13em;
  text-transform:uppercase;
}

@media(max-width:760px){
  button,
  a,
  input,
  textarea,
  select,
  .note-trigger,
  .price-trigger,
  .detail-modal__close,
  .plan-modal__close,
  .start-modal__close{
    -webkit-tap-highlight-color:rgba(126,49,135,.22);
  }

  .note-trigger,
  .price-trigger,
  .homepage-preview-link,
  .nav-btn{
    touch-action:manipulation;
  }

  .mobile-safe-grid{
    display:none !important;
  }
}


/* v93: optional logo design add-on */
.logo-addon{
  display:flex;
  align-items:flex-start;
  gap:12px;
  margin:16px 0 18px;
  padding:15px 16px;
  border-radius:18px;
  border:1px solid rgba(28,36,42,.12);
  background:rgba(255,255,255,.045);
  color:#1c242a;
  cursor:pointer;
  transition:background .18s ease, border-color .18s ease;
}

.logo-addon:hover,
.logo-addon:has(input:checked){
  border-color:rgba(126,49,135,.52);
  background:rgba(126,49,135,.09);
}

.logo-addon.is-hidden{
  display:none !important;
}

.logo-addon input{
  margin-top:4px;
  accent-color:#7E3187;
  flex:0 0 auto;
}

.logo-addon span{
  display:grid;
  gap:5px;
}

.logo-addon strong{
  color:#7E3187;
  font-size:10px;
  line-height:1;
  letter-spacing:.13em;
  text-transform:uppercase;
  font-weight:500;
}

.logo-addon em{
  color:rgba(84,98,107,.72);
  font-style:normal;
  font-size:13px;
  line-height:1.42;
}

.logo-addon b{
  display:inline-flex;
  width:max-content;
  margin-top:4px;
  padding:8px 12px;
  border-radius:999px;
  border:1px solid rgba(28,36,42,.14);
  background:rgba(255,255,255,.04);
  color:#1c242a;
  font-size:13px;
  font-weight:500;
  line-height:1.2;
}

.logo-addon small{
  color:rgba(84,98,107,.55);
  font-size:11px;
  line-height:1.45;
  max-width:620px;
}

@media(max-width:760px){
  .logo-addon{
    padding:14px;
  }

  .logo-addon b{
    width:auto;
  }
}


/* v95: place Inside Pages directly under Homepage design/base price before care options */
.plan-summary__row + .plan-pages{
  margin-top:18px;
  margin-bottom:18px;
}


/* v96: domain/registrar clarification under WaltersGroup hosting option */
.service-option .domain-note,
.care-option .domain-note{
  display:block;
  color:rgba(84,98,107,.58);
  font-size:11.5px;
  line-height:1.38;
  max-width:520px;
}

@media(max-width:760px){
  .service-option .domain-note,
  .care-option .domain-note{
    font-size:11px;
    max-width:none;
  }
}


/* v100: remove mobile comparison intro copy; keep only the slider */
@media(max-width:760px){
  .mobile-safe-preview{
    padding:14px !important;
    margin-top:18px !important;
  }
}


/* v101: restore the original laptop + phone before/after device comparison on mobile */
@media(max-width:760px){
  .compare-main{
    display:block !important;
  }

  .comparison-head{
    display:none !important;
  }

  .mobile-safe-preview{
    display:none !important;
  }

  .comparison-card{
    padding:12px !important;
    border-radius:24px !important;
    overflow:hidden;
  }

  .compare-shell,
  .stage-holder{
    border-radius:18px !important;
  }

  .stage-holder{
    touch-action:pan-y;
  }

  .handle{
    width:56px !important;
    height:56px !important;
    font-size:25px !important;
    gap:6px !important;
  }

  .divider{
    width:64px !important;
    transform:translateX(-32px) !important;
  }

  .focus-label{
    top:10px !important;
    min-width:190px !important;
  }

  .focus-label__text{
    font-size:9px !important;
    padding:8px 12px !important;
  }
}


/* v102: mobile-only iPhone-style before/static + after/live HTML comparison */
@media(max-width:760px){
  .compare-main,
  .comparison-head{
    display:none !important;
  }

  .mobile-safe-preview{
    display:block !important;
    margin:20px 0 0 !important;
    padding:0 !important;
    border:0 !important;
    background:transparent !important;
  }

  /* v955: replaced the old CSS-drawn phone bezel (flat gradient box) with
     Dave's photo-realistic hand-holding-iphone scene per his ask - it
     looked "boring/dull, like a box instead of a scene." The PNG's
     screen area is a true transparent cutout (alpha:0, verified by
     sampling the source file) and the whole image fades to alpha:0 at
     the very top/bottom edges so it blends into the page background
     instead of having a hard edge. Now full-bleed/full-width (Dave's
     explicit ask) via the 100vw + negative-margin full-bleed trick,
     breaking out of .mobile-safe-preview's normal padding. */
  /* v958: v957 physically cropped the source file to kill the dead
     space, which Dave does NOT want - he wants the full gradient PNG
     kept intact with no hard crop edge, just tucked visually behind
     the paragraph above and the button below via z-index layering
     instead of being removed. Reverted to the full 902x2500 image.
     The FRAME/container is sized to the tight "device visible" zone
     only (same 902:2040 ratio as before - this only controls LAYOUT
     height, not what's rendered), with overflow:visible so the full
     image can render at its true full height and bleed above/below
     the frame's edges. .copy-block and .comparison-side-cta--mobile
     get explicit stacking above this block (see their own v958 rules)
     so wherever the bleed reaches into their space, their text/button
     paint on top and stay fully legible - the fade shows through only
     in the gap, exactly like it tucking underneath them. */
  .mobile-phone-compare{
    width:100vw;
    /* v959: Dave asked to pull the phone up another ~40px toward the
       paragraph above - only adjusting margin-top (20px -> -20px),
       leaving margin-bottom at 20px alone since the bottom gap to the
       CTA button was already right. The z-index layering already in
       place (.copy-block above this block) means the extra overlap
       just tucks under the paragraph text like before, no new issue. */
    /* v961: box is now tight to the device edges themselves (not the
       hand/fade), so these are clean, direct gap values instead of a
       negative-margin hack compensating for a looser box. */
    margin-top:20px;
    margin-bottom:25px;
    margin-left:calc(50% - 50vw);
    margin-right:calc(50% - 50vw);
    position:relative;
    z-index:1;
  }

  .mobile-phone-frame{
    position:relative;
    width:100%;
    overflow:visible;
    /* v961: Dave clarified - stop referencing the hand at all, the
       tight box should track the DEVICE (phone chassis) itself only.
       Measured the actual phone bezel in the source PNG: opaque top
       edge starts at y=335, bezel resumes solid below the screen and
       the hand takes over by y=1736 (that's the device's own bottom
       edge, before the hand holding it begins). Tight-box height:
       1736-335 = 1401. The hand and all fade now purely bleed past
       the box on both ends with zero effect on layout spacing. */
    aspect-ratio:902 / 1401;
  }

  .mobile-phone-frame__scene{
    position:absolute;
    left:0;
    width:100%;
    /* full image is 2500px vs the frame's 1401px device-only
       reference: 2500/1401 = 178.44% height, offset up by
       335/1401 = 23.91% */
    height:178.44%;
    top:-23.91%;
    z-index:8;
    pointer-events:none;
    -webkit-user-select:none;
    user-select:none;
  }

  .mobile-phone-screen{
    position:absolute;
    /* v962: the original top measurement (y=432) was sampled straight
       down the image's horizontal center - exactly where the dynamic
       island sits - so it was actually reading the BOTTOM of the
       island's opaque pill shape, not the true top of the transparent
       screen rectangle. Re-measured off to the side (away from the
       island) and found the real screen top starts at y=376, ~56px
       earlier. That gap was rendering as the screen's own #111
       background peeking through under the island instead of website
       content - Dave's exact report. Recalculated: (376-335)/1401 =
       2.93%. The island itself still correctly overlays on top since
       it's part of the frame image at a higher z-index. */
    left:14.86%;
    right:13.52%;
    top:2.93%;
    bottom:2.50%;
    overflow:hidden;
    border-radius:7% / 4%;
    background:#111;
    touch-action:none;
    isolation:isolate;
  }

  .mobile-phone-before,
  .mobile-phone-after,
  .mobile-phone-after iframe{
    position:absolute;
    inset:0;
    width:100%;
    height:100%;
  }

  .mobile-phone-before{
    object-fit:cover;
    object-position:top center;
    background:#fff;
    z-index:1;
  }

  .mobile-phone-after{
    z-index:2;
    overflow:hidden;
    clip-path:inset(0 0 0 var(--mobile-split));
    background:#111;
  }

  /* REVERTED (2026-07-29), per Dave: the black overlay + 2.6s minimum-hold
     timer added earlier this session (main-v114.js mobilePhoneCompare IIFE)
     was never asked for on this element and made the "after" side take
     3-4 seconds to appear instead of showing as soon as it's ready. Pulled
     the overlay rule and its matching JS hold entirely - back to the
     original background:#111 on .mobile-phone-after above, no artificial
     delay. */

  .mobile-phone-after iframe{
    border:0;
    display:block;
    background:#111;
  }

  .mobile-phone-divider{
    position:absolute;
    top:0;
    bottom:0;
    left:var(--mobile-split);
    width:46px;
    transform:translateX(-23px);
    z-index:5;
    display:flex;
    align-items:center;
    justify-content:center;
    pointer-events:none;
  }

  .mobile-phone-divider::before{
    content:"";
    position:absolute;
    top:0;
    bottom:0;
    left:50%;
    width:2px;
    transform:translateX(-50%);
    background:#7E3187;
    box-shadow:0 0 0 1px rgba(0,0,0,.18);
  }

  .mobile-phone-divider span{
    position:relative;
    z-index:2;
    width:44px;
    height:44px;
    display:flex;
    align-items:center;
    justify-content:center;
    border-radius:999px;
    color:#9a1f27;
    background:rgba(255,255,255,.96);
    box-shadow:0 10px 28px rgba(0,0,0,.28);
    font-size:16px;
    font-weight:700;
  }

  .mobile-phone-screen input[type="range"]{
    position:absolute;
    inset:0;
    width:100%;
    height:100%;
    opacity:0;
    z-index:6;
    cursor:ew-resize;
  }
}


/* v103: mobile hero headline slightly smaller/wider to encourage a clean two-line break */
@media(max-width:760px){
  .copy-block h1,
  h1{
    font-size:clamp(35px, 10.1vw, 47px) !important;
    line-height:.96 !important;
    letter-spacing:-.052em !important;
    max-width:12.9ch !important;
  }
}


/* v104: mobile comparison labels + allow live after iframe to scroll */
@media(max-width:760px){
  .mobile-phone-screen{
    touch-action:auto !important;
  }

  .mobile-phone-after{
    pointer-events:auto;
    -webkit-overflow-scrolling:touch;
  }

  .mobile-phone-after iframe{
    pointer-events:auto;
    overflow:auto;
    -webkit-overflow-scrolling:touch;
  }

  .mobile-phone-screen input[type="range"]{
    pointer-events:none !important;
    width:1px !important;
    height:1px !important;
    opacity:0 !important;
  }

  .mobile-phone-divider{
    pointer-events:auto !important;
    touch-action:none !important;
    cursor:ew-resize;
  }

  .mobile-phone-divider span{
    pointer-events:auto !important;
  }

  .mobile-phone-focus-label{
    position:absolute;
    left:50%;
    top:14px;
    transform:translateX(-50%);
    z-index:9;
    min-width:190px;
    text-align:center;
    pointer-events:none;
  }

  .mobile-phone-focus-label__text{
    position:absolute;
    left:50%;
    top:0;
    transform:translateX(-50%) translateY(8px);
    display:inline-flex;
    align-items:center;
    justify-content:center;
    white-space:nowrap;
    padding:8px 12px;
    border-radius:999px;
    background:rgba(0,0,0,.50);
    backdrop-filter:blur(10px);
    border:1px solid rgba(255,255,255,.22);
    box-shadow:0 8px 22px rgba(0,0,0,.18);
    color:#fff;
    font-size:9px;
    letter-spacing:.13em;
    line-height:1;
    text-transform:uppercase;
    opacity:0;
    transition:opacity .22s ease, transform .22s ease;
  }

  .mobile-phone-focus-label__text--proposed{
    color:#7E3187;
  }

  .mobile-phone-focus-label__text.is-active{
    transform:translateX(-50%) translateY(0);
  }
}


/* v105: make mobile before/after slider match desktop slider styling */
@media(max-width:760px){
  .mobile-phone-divider{
    width:64px !important;
    transform:translateX(-32px) !important;
  }

  .mobile-phone-divider::before{
    width:2px !important;
    background:rgba(255,255,255,.78) !important;
    box-shadow:0 0 0 1px rgba(0,0,0,.12) !important;
  }

  .mobile-phone-divider span{
    width:56px !important;
    height:56px !important;
    border-radius:50% !important;
    background:rgba(255,255,255,.93) !important;
    color:#9a1f27 !important;
    box-shadow:0 12px 30px rgba(0,0,0,.22) !important;
    font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
    font-size:25px !important;
    line-height:1 !important;
    font-weight:350 !important;
    letter-spacing:0 !important;
    gap:6px !important;
  }
}


/* v106: mobile header uses MENU + persistent Start Project; Scope is removed on mobile */
.nav-menu-toggle,
.mobile-nav-menu{
  display:none;
}

@media(max-width:760px){
  .wg-topbar{
    align-items:flex-start !important;
    gap:14px !important;
  }

  .wg-nav{
    position:relative;
    display:flex !important;
    flex-wrap:wrap !important;
    align-items:center !important;
    gap:10px !important;
    width:100% !important;
    margin-top:8px !important;
  }

  .wg-nav .nav-proposed,
  .wg-nav .nav-scope,
  .wg-nav .nav-contact{
    display:none !important;
  }

  .nav-menu-toggle{
    display:inline-flex !important;
    appearance:none;
    border:1px solid rgba(255,255,255,.30);
    background:rgba(255,255,255,.035);
    color:rgba(246,241,232,.88);
    text-decoration:none;
    padding:10px 18px;
    border-radius:999px;
    font-family:"Plus Jakarta Sans", Arial, sans-serif;
    font-size:11px;
    line-height:1;
    letter-spacing:.08em;
    text-transform:uppercase;
    cursor:pointer;
  }

  .wg-nav .nav-start{
    display:inline-flex !important;
    margin-left:0 !important;
  }

  .mobile-nav-menu{
    position:absolute;
    left:0;
    top:46px;
    z-index:90;
    min-width:220px;
    padding:10px;
    border-radius:18px;
    border:1px solid rgba(255,255,255,.16);
    background:rgba(36,36,36,.96);
    backdrop-filter:blur(16px);
    box-shadow:0 18px 46px rgba(0,0,0,.32);
  }

  .mobile-nav-menu.is-open{
    display:grid !important;
    gap:8px;
  }

  .mobile-nav-menu a{
    display:block;
    padding:11px 12px;
    border-radius:12px;
    color:rgba(246,241,232,.90);
    text-decoration:none;
    font-size:11px;
    letter-spacing:.08em;
    text-transform:uppercase;
  }

  .mobile-nav-menu a:hover{
    background:rgba(126,49,135,.10);
    color:#7E3187;
  }
}


/* v107: hard mobile nav fix — only MENU + START PROJECT visible; Scope removed on mobile */
.nav-menu-toggle,
.mobile-nav-menu{
  display:none;
}

@media(max-width:760px){
  .wg-topbar{
    height:auto !important;
    align-items:flex-start !important;
    justify-content:flex-start !important;
    flex-direction:column !important;
    gap:12px !important;
    padding:0 28px 18px 28px !important;
  }

  .wg-nav{
    position:relative !important;
    display:flex !important;
    flex-direction:row !important;
    flex-wrap:wrap !important;
    align-items:center !important;
    justify-content:flex-start !important;
    gap:10px !important;
    width:100% !important;
    margin-top:6px !important;
  }

  .wg-nav > a.nav-proposed,
  .wg-nav > a.nav-scope,
  .wg-nav > a.nav-contact{
    display:none !important;
    visibility:hidden !important;
  }

  .wg-nav > .nav-menu-toggle{
    display:inline-flex !important;
    visibility:visible !important;
    align-items:center !important;
    justify-content:center !important;
    appearance:none !important;
    -webkit-appearance:none !important;
    border:1px solid rgba(255,255,255,.30) !important;
    background:rgba(255,255,255,.035) !important;
    color:rgba(246,241,232,.88) !important;
    padding:10px 18px !important;
    border-radius:999px !important;
    font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
    font-size:11px !important;
    line-height:1 !important;
    letter-spacing:.08em !important;
    text-transform:uppercase !important;
    cursor:pointer !important;
  }

  .wg-nav > a.nav-start{
    display:inline-flex !important;
    visibility:visible !important;
    align-items:center !important;
    justify-content:center !important;
    margin-left:0 !important;
  }

  .mobile-nav-menu{
    position:absolute !important;
    left:0 !important;
    top:46px !important;
    z-index:999 !important;
    min-width:220px !important;
    padding:10px !important;
    border-radius:18px !important;
    border:1px solid rgba(255,255,255,.16) !important;
    background:rgba(36,36,36,.97) !important;
    backdrop-filter:blur(16px) !important;
    box-shadow:0 18px 46px rgba(0,0,0,.32) !important;
  }

  .mobile-nav-menu.is-open{
    display:grid !important;
    visibility:visible !important;
    gap:8px !important;
  }

  .mobile-nav-menu a{
    display:block !important;
    visibility:visible !important;
    padding:11px 12px !important;
    border-radius:12px !important;
    color:rgba(246,241,232,.90) !important;
    text-decoration:none !important;
    font-size:11px !important;
    line-height:1.1 !important;
    letter-spacing:.08em !important;
    text-transform:uppercase !important;
  }
}


/* v108: match WaltersGroup site mobile logo size/position */
@media(max-width:760px){
  .wg-topbar{
    padding:0 28px 18px 40px !important;
  }

  .wg-logo{
    display:block !important;
    width:clamp(150px, 42vw, 230px) !important;
    max-width:none !important;
    height:auto !important;
    margin:0 !important;
    align-self:flex-start !important;
    object-fit:contain !important;
    object-position:left top !important;
    filter:brightness(1.06) !important;
  }
}


/* v109: mobile header controls tucked upper-right, start button below menu */
@media(max-width:760px){
  .wg-topbar{
    position:sticky !important;
    top:0 !important;
    display:grid !important;
    grid-template-columns:minmax(0, 1fr) auto !important;
    grid-template-rows:auto auto !important;
    align-items:start !important;
    justify-content:stretch !important;
    column-gap:14px !important;
    row-gap:8px !important;
    padding:0 24px 18px 40px !important;
  }

  .wg-logo{
    grid-column:1 !important;
    grid-row:1 / span 2 !important;
    width:clamp(150px, 42vw, 230px) !important;
    max-width:none !important;
    margin:0 !important;
    align-self:start !important;
    justify-self:start !important;
  }

  .wg-nav{
    grid-column:2 !important;
    grid-row:1 / span 2 !important;
    width:auto !important;
    margin:0 !important;
    display:grid !important;
    grid-template-columns:auto !important;
    grid-template-rows:auto auto !important;
    gap:8px !important;
    justify-items:end !important;
    align-items:start !important;
    align-self:start !important;
    justify-self:end !important;
    position:relative !important;
  }

  .wg-nav > .nav-menu-toggle{
    grid-column:1 !important;
    grid-row:1 !important;
    justify-self:end !important;
    margin:0 !important;
  }

  .wg-nav > a.nav-start{
    grid-column:1 !important;
    grid-row:2 !important;
    justify-self:end !important;
    margin:0 !important;
    white-space:nowrap !important;
  }

  .mobile-nav-menu{
    left:auto !important;
    right:0 !important;
    top:44px !important;
    transform:none !important;
    text-align:left !important;
  }
}

@media(max-width:390px){
  .wg-topbar{
    padding-left:28px !important;
    padding-right:18px !important;
    column-gap:10px !important;
  }

  .wg-logo{
    width:clamp(135px, 40vw, 190px) !important;
  }

  .wg-nav > .nav-menu-toggle,
  .wg-nav > a.nav-start{
    padding-left:14px !important;
    padding-right:14px !important;
  }
}


/* v110: repair mobile header spacing/height and keep controls upper-right */
@media(max-width:760px){
  .wg-topbar{
    position:sticky !important;
    top:0 !important;
    display:grid !important;
    grid-template-columns:minmax(0, 1fr) auto !important;
    grid-template-rows:auto auto !important;
    align-items:start !important;
    justify-content:stretch !important;
    column-gap:12px !important;
    row-gap:7px !important;
    height:112px !important;
    min-height:112px !important;
    max-height:112px !important;
    overflow:visible !important;
    padding:14px 24px 14px 40px !important;
    box-sizing:border-box !important;
  }

  .wg-logo{
    grid-column:1 !important;
    grid-row:1 / span 2 !important;
    width:clamp(150px, 42vw, 230px) !important;
    max-width:none !important;
    height:auto !important;
    margin:0 !important;
    align-self:start !important;
    justify-self:start !important;
    display:block !important;
    object-fit:contain !important;
    object-position:left top !important;
  }

  .wg-nav{
    grid-column:2 !important;
    grid-row:1 / span 2 !important;
    width:auto !important;
    margin:0 !important;
    display:grid !important;
    grid-template-columns:auto !important;
    grid-template-rows:auto auto !important;
    gap:7px !important;
    justify-items:end !important;
    align-items:start !important;
    align-self:start !important;
    justify-self:end !important;
    position:relative !important;
  }

  .wg-nav > a.nav-proposed,
  .wg-nav > a.nav-scope,
  .wg-nav > a.nav-contact{
    display:none !important;
    visibility:hidden !important;
  }

  .wg-nav > .nav-menu-toggle{
    display:inline-flex !important;
    visibility:visible !important;
    grid-column:1 !important;
    grid-row:1 !important;
    justify-self:end !important;
    margin:0 !important;
    padding:9px 18px !important;
    align-items:center !important;
    justify-content:center !important;
  }

  .wg-nav > a.nav-start{
    display:inline-flex !important;
    visibility:visible !important;
    grid-column:1 !important;
    grid-row:2 !important;
    justify-self:end !important;
    margin:0 !important;
    padding:10px 18px !important;
    white-space:nowrap !important;
    align-items:center !important;
    justify-content:center !important;
  }

  .mobile-nav-menu{
    left:auto !important;
    right:0 !important;
    top:44px !important;
    transform:none !important;
    text-align:left !important;
  }

  /* Per Dave: 10px less than the prior 9px - functionally flush against
     the topbar now (can't go negative), which is what "10 less" means at
     this size. */
  main{
    padding-top:0 !important;
  }

  .hero{
    margin-top:0 !important;
  }

  .copy-block{
    margin-top:0 !important;
  }
}

@media(max-width:390px){
  .wg-topbar{
    height:108px !important;
    min-height:108px !important;
    max-height:108px !important;
    padding:14px 18px 12px 28px !important;
    column-gap:10px !important;
  }

  .wg-logo{
    width:clamp(138px, 40vw, 190px) !important;
  }

  .wg-nav > .nav-menu-toggle,
  .wg-nav > a.nav-start{
    padding-left:14px !important;
    padding-right:14px !important;
  }
}

/* v110: darker before/after slider treatment, matched across desktop and mobile.
   v864: switched to a "screen" blend mode (Photoshop-style screen, not a
   flat translucent overlay) at 35% blue so the line lightens/reads clearly
   against dark hero imagery instead of nearly disappearing at 50% flat
   alpha. Applied to both the divider line and the handle's left/right
   arrow glyphs so they read together as one visible control. */
.divider::before{
  background:rgba(126,49,135,.35) !important;
  mix-blend-mode:screen !important;
  box-shadow:0 0 0 1px rgba(0,0,0,.22) !important;
}
.mobile-phone-divider::before{
  background:rgba(126,49,135,.86) !important;
  box-shadow:0 0 0 1px rgba(0,0,0,.22) !important;
}
.handle span{
  color:rgba(126,49,135,.35) !important;
  mix-blend-mode:screen !important;
}

.handle,
.mobile-phone-divider span{
  background:rgba(34,34,34,.90) !important;
  color:#7E3187 !important;
  border:1px solid rgba(126,49,135,.55) !important;
  box-shadow:0 12px 30px rgba(0,0,0,.34) !important;
}

.handle span{
  color:#7E3187 !important;
}


/* v589: v111 below applied its narrow "avoid widow" width to EVERY
   .value-intro heading (About section, FAQ heading, this one), not just
   the one it was written for - .value-intro is the shared class all three
   sections use. On Dave's actual device the "ch" unit (character-width
   based, so it depends on the exact font metrics in use) apparently
   computed much narrower than in testing here, cutting off "Three decades
   of design experience" and "Questions worth answering" entirely. Scoped
   the narrow width to #scopeIntro only (the "What changes beyond the
   look" heading it was actually meant for), and gave the shared rule a
   hard, font-independent safety net so no .value-intro heading can ever
   overflow its container on any device again, regardless of font/ch
   quirks. */
@media(max-width:760px){
  #scopeIntro h2{
    max-width:11.4ch !important;
  }
  .value-intro h2,
  .value-intro p{
    max-width:100% !important;
    overflow-wrap:break-word !important;
    word-break:break-word !important;
  }
}


/* v112: make Inside Pages feel like a top-level scope item under Homepage design */
.plan-summary__row + .plan-pages{
  margin-top:14px !important;
  margin-bottom:18px !important;
  padding:0 0 18px 0 !important;
  border:0 !important;
  border-bottom:1px solid rgba(28,36,42,.18) !important;
  border-radius:0 !important;
  background:transparent !important;
}

.plan-summary__row + .plan-pages > label{
  display:block !important;
  margin:0 0 12px 0 !important;
  color:#7E3187 !important;
  font-size:11px !important;
  line-height:1 !important;
  letter-spacing:.13em !important;
  text-transform:uppercase !important;
}

.plan-summary__row + .plan-pages .page-stepper{
  max-width:190px !important;
  margin-bottom:12px !important;
}

.plan-summary__row + .plan-pages > p{
  max-width:440px !important;
  margin-bottom:12px !important;
}

.plan-summary__row + .plan-pages .plus-pages-examples{
  max-width:440px !important;
}

@media(max-width:760px){
  .plan-summary__row + .plan-pages{
    margin-top:12px !important;
    padding-bottom:16px !important;
  }
}


/* v113: make major modal categories visually distinct instead of running together */
.plan-summary__row{
  margin-bottom:0 !important;
}

/* Inside pages is its own top-level scope category */
.plan-summary__row + .plan-pages{
  margin-top:18px !important;
  margin-bottom:22px !important;
  padding:18px 0 22px !important;
  border-top:1px solid rgba(28,36,42,.18) !important;
  border-bottom:1px solid rgba(28,36,42,.18) !important;
}

/* v404: make the separator above Inside Pages more visible */
.plan-modal .plan-summary__row + .plan-pages{
  border-top:1px solid rgba(28,36,42,.18) !important;
}

/* Monthly Website Care starts as a separate category */
.plan-summary__section-title{
  margin:22px 0 14px !important;
  padding-top:22px !important;
  border-top:1px solid rgba(28,36,42,.18) !important;
  color:#7E3187 !important;
  font-size:11px !important;
  line-height:1 !important;
  letter-spacing:.13em !important;
  text-transform:uppercase !important;
}

/* Keep care choices visually grouped under the monthly care header */
.service-options{
  margin:0 0 24px !important;
  padding-bottom:24px !important;
  border-bottom:1px solid rgba(28,36,42,.18) !important;
}

/* Optional Brand Add-On is a separate category, not part of monthly care */
.logo-addon{
  position:relative !important;
  margin:24px 0 24px !important;
  padding:20px 18px !important;
  border-radius:20px !important;
  border:1px solid rgba(28,36,42,.16) !important;
  background:rgba(255,255,255,.055) !important;
}

.logo-addon::before{
  content:"";
  position:absolute;
  left:18px;
  right:18px;
  top:-24px;
  height:1px;
  background:rgba(255,255,255,.10);
  pointer-events:none;
}

.logo-addon strong{
  color:#7E3187 !important;
  font-size:11px !important;
  line-height:1 !important;
  letter-spacing:.13em !important;
  text-transform:uppercase !important;
}

/* Standalone monthly care modal keeps its care choices as the main category */
.care-options{
  margin-top:0 !important;
  margin-bottom:24px !important;
  padding-bottom:24px !important;
  border-bottom:1px solid rgba(28,36,42,.18) !important;
}

@media(max-width:760px){
  .plan-summary__row + .plan-pages{
    margin-top:16px !important;
    margin-bottom:22px !important;
    padding-top:16px !important;
    padding-bottom:20px !important;
  }

  .plan-summary__section-title{
    margin-top:22px !important;
    padding-top:22px !important;
  }

  .service-options{
    gap:12px !important;
    margin-bottom:24px !important;
    padding-bottom:24px !important;
  }

  .logo-addon{
    margin-top:24px !important;
    margin-bottom:24px !important;
    padding:18px 16px !important;
  }

  .logo-addon::before{
    left:16px;
    right:16px;
    top:-24px;
  }
}


/* v114: make mobile payment-option pricing feel properly scaled inside the cards */
@media(max-width:760px){
  .payment-choice__option{
    padding:18px 20px !important;
    gap:12px !important;
    min-height:112px !important;
  }

  .payment-choice__option strong{
    font-size:15px !important;
    line-height:1.15 !important;
  }

  .payment-choice__option > span{
    display:block !important;
    width:100% !important;
    min-width:0 !important;
  }

  .payment-choice__option .payment-project,
  .payment-choice__option .payment-care{
    display:block !important;
    text-align:left !important;
    line-height:1.18 !important;
    margin:0 !important;
  }

  .payment-choice__option .payment-care{
    margin-top:8px !important;
  }

  .payment-choice__option .payment-amount{
    display:block !important;
    font-size:18px !important;
    line-height:1.12 !important;
    font-weight:700 !important;
    color:rgba(84,98,107,.88) !important;
  }

  .payment-choice__option .payment-note{
    display:block !important;
    margin-top:3px !important;
    font-size:12.5px !important;
    line-height:1.15 !important;
    font-weight:500 !important;
    color:rgba(84,98,107,.66) !important;
  }

  .payment-choice__option.is-selected .payment-amount{
    color:#1c242a !important;
  }
}

@media(max-width:390px){
  .payment-choice__option .payment-amount{
    font-size:17px !important;
  }
}


/* v115: clearer major categories + itemized estimate breakdown */
.plan-summary__section-title{
  color:rgba(84,98,107,.70) !important;
  font-size:14px !important;
  line-height:1.2 !important;
  letter-spacing:0 !important;
  text-transform:none !important;
  font-weight:500 !important;
  border-top:1px solid rgba(28,36,42,.18) !important;
  padding-top:22px !important;
  margin:22px 0 14px !important;
}

.logo-addon-heading{
  margin:24px 0 12px;
  padding-top:22px;
  border-top:1px solid rgba(28,36,42,.18);
  color:rgba(84,98,107,.70);
  font-size:14px;
  line-height:1.2;
  font-weight:500;
}

.logo-addon{
  margin-top:0 !important;
}

.logo-addon::before{
  display:none !important;
}

/* itemized estimate */
.estimate-breakdown{
  display:grid;
  grid-template-columns:repeat(3, minmax(100px, auto));
  gap:18px;
  align-items:start;
  justify-content:end;
}

.estimate-part{
  display:grid !important;
  gap:3px;
  text-align:right;
}
.estimate-part:not(:first-child):not(.estimate-part--months){
  padding-left:16px;
  border-left:1px solid rgba(28,36,42,.16);
}
.start-modal__summary .estimate-part:not(:first-child):not(.estimate-part--months){
  border-left-color:rgba(255,255,255,.28);
}
@media(max-width:760px){
  .estimate-part:not(:first-child){
    padding-left:0;
    border-left:0;
  }
}

.estimate-part strong{
  color:#1c242a;
  font-size:clamp(20px, 2.2vw, 30px);
  line-height:1.05;
  font-weight:650;
  letter-spacing:-.035em;
  white-space:nowrap;
}

.estimate-part em{
  color:rgba(84,98,107,.62);
  font-size:12px;
  line-height:1.15;
  font-style:normal;
  font-weight:500;
  letter-spacing:0;
  text-transform:none;
}

.plan-total strong:has(.estimate-breakdown){
  display:block !important;
  width:100%;
}

.plan-total .estimate-breakdown{
  justify-content:end;
}

.start-modal__summary strong:has(.estimate-breakdown){
  display:block;
  width:100%;
}

.start-modal__summary .estimate-breakdown{
  justify-content:start;
  grid-template-columns:repeat(3, minmax(82px, auto));
  gap:16px;
}

.start-modal__summary .estimate-part{
  text-align:left;
}

.start-modal__summary .estimate-part strong{
  font-size:clamp(22px, 3vw, 34px);
}

.start-modal__summary .estimate-part em{
  font-size:12.5px;
}

@media(max-width:760px){
  .plan-summary__section-title,
  .logo-addon-heading{
    font-size:14px !important;
    margin-top:22px !important;
    padding-top:22px !important;
  }

  .plan-total{
    align-items:flex-start !important;
  }

  .plan-total .estimate-breakdown,
  .start-modal__summary .estimate-breakdown{
    grid-template-columns:1fr !important;
    gap:14px !important;
    justify-content:start !important;
  }

  .plan-total .estimate-part,
  .start-modal__summary .estimate-part{
    text-align:left !important;
  }

  .plan-total .estimate-part strong,
  .start-modal__summary .estimate-part strong{
    font-size:28px !important;
    line-height:1.04 !important;
  }

  .plan-total .estimate-part em,
  .start-modal__summary .estimate-part em{
    font-size:13px !important;
  }
}


/* v117: show secure/SEO/mobile benefits as part of the website package */
.included-benefits{
  max-width:1760px;
  margin:0 auto 20px;
  display:grid;
  grid-template-columns:repeat(3, minmax(0, 1fr));
  gap:14px;
}

.included-benefit{
  min-height:118px;
  padding:20px 22px;
  border-radius:22px;
  border:1px solid rgba(255,255,255,.12);
  background:rgba(255,255,255,.045);
  box-shadow:0 16px 40px rgba(0,0,0,.12);
}

.included-benefit span{
  display:block;
  margin-bottom:10px;
  color:#7E3187;
  font-size:11px;
  line-height:1.1;
  letter-spacing:.13em;
  text-transform:uppercase;
  font-weight:600;
}

.included-benefit p{
  margin:0;
  color:rgba(246,241,232,.68);
  font-size:14px;
  line-height:1.48;
}

@media(max-width:980px){
  .included-benefits{
    grid-template-columns:1fr;
    gap:12px;
  }

  .included-benefit{
    min-height:0;
    padding:18px;
  }
}


/* v119: desktop benefit cards use 2 + 1 layout so they do not align one-to-one with pricing cards */
@media(min-width:981px){
  .included-benefits{
    grid-template-columns:repeat(2, minmax(0, 1fr)) !important;
    max-width:1180px !important;
    margin-left:auto !important;
    margin-right:auto !important;
    margin-bottom:26px !important;
  }

  .included-benefit:nth-child(3){
    grid-column:1 / -1 !important;
    max-width:620px !important;
    justify-self:center !important;
  }
}


/* v120: four benefit cards in one desktop row to avoid false 1:1 alignment with the three pricing options */
@media(min-width:981px){
  .included-benefits{
    grid-template-columns:repeat(4, minmax(0, 1fr)) !important;
    max-width:1760px !important;
    margin-left:auto !important;
    margin-right:auto !important;
    margin-bottom:22px !important;
  }

  .included-benefit:nth-child(3){
    grid-column:auto !important;
    max-width:none !important;
    justify-self:stretch !important;
  }

  .included-benefit{
    min-height:132px !important;
    padding:18px 20px !important;
  }
}

@media(max-width:1180px) and (min-width:981px){
  .included-benefits{
    grid-template-columns:repeat(2, minmax(0, 1fr)) !important;
  }
}


/* v121 dark: desktop tighten hero intro and re-center comparison device composition */
@media (min-width: 1100px){
  /* Make the comparison-section headline a little smaller so it can sit on one line on desktop */
  .comparison-head h2,
  .value-intro h2{
    font-size: clamp(52px, 4.65vw, 82px) !important;
    line-height: .96 !important;
    max-width: 18.5ch !important;
    text-wrap: balance;
  }

  /* Widen the paragraph block below the headline so it resolves closer to two lines */
  .comparison-head p,
  .value-intro p{
    max-width: 850px !important;
    width: min(850px, 100%) !important;
  }

  /* Pull the visual comparison module up a bit after the tighter headline/paragraph */
  .comparison-card{
    margin-top: clamp(18px, 2vw, 30px) !important;
  }

  /* Re-center the overall desktop device scene */
  .compare-shell,
  .comparison-stage,
  .device-comparison,
  .laptop-comparison,
  .desktop-device-comparison{
    margin-left: auto !important;
    margin-right: auto !important;
  }

  .stage-holder,
  .stage-fixed{
    display: flex !important;
    justify-content: center !important;
    align-items: center !important;
    overflow: visible !important;
  }

  /* Keep the laptop/phone grouping from drifting right */
  .device-frame,
  .laptop-frame,
  .laptop-stage,
  .comparison-laptop{
    margin-left: auto !important;
    margin-right: auto !important;
  }

  /* Keep all screen contents clipped within the laptop/phone masks */
  .screen,
  .laptop-screen,
  .screen-mask,
  .device-screen,
  .comparison-screen{
    overflow: hidden !important;
  }
}

@media (min-width: 1280px){
  .comparison-head h2,
  .value-intro h2{
    font-size: clamp(56px, 4.35vw, 78px) !important;
    max-width: 19.75ch !important;
  }

  .comparison-head p,
  .value-intro p{
    max-width: 920px !important;
  }
}


/* v122: use a single separator line between major categories and give the heading more breathing room */
.plan-summary__row + .plan-pages{
  border-bottom:0 !important;
  margin-bottom:28px !important;
  padding-bottom:12px !important;
}

.plan-summary__section-title{
  border-top:1px solid rgba(28,36,42,.18) !important;
  margin:28px 0 16px !important;
  padding-top:26px !important;
}

.service-options{
  border-bottom:0 !important;
  margin-bottom:30px !important;
  padding-bottom:2px !important;
}

.logo-addon-heading{
  border-top:1px solid rgba(28,36,42,.18) !important;
  margin:30px 0 14px !important;
  padding-top:26px !important;
}

.care-options{
  border-bottom:0 !important;
}

@media (max-width: 760px){
  .plan-summary__row + .plan-pages{
    margin-bottom:26px !important;
    padding-bottom:10px !important;
  }

  .plan-summary__section-title{
    margin:26px 0 14px !important;
    padding-top:24px !important;
  }

  .service-options{
    margin-bottom:28px !important;
    padding-bottom:0 !important;
  }

  .logo-addon-heading{
    margin:28px 0 12px !important;
    padding-top:24px !important;
  }
}


/* v123: actual desktop hero headline + device composition repair */
@media (min-width: 761px){
  /* Remove the old stage offset that was pushing the device scene off the right edge. */
  .stage-fixed{
    left:0 !important;
    top:0 !important;
    display:block !important;
    justify-content:initial !important;
    align-items:initial !important;
    overflow:hidden !important;
    transform:scale(var(--stage-scale)) !important;
    transform-origin:top left !important;
  }

  .stage-holder{
    display:block !important;
    overflow:hidden !important;
    background:transparent !important;
  }

  .compare-shell{
    overflow:visible !important;
  }

  .comparison-card{
    overflow:visible !important;
  }

  .screen,
  .laptop-screen,
  .phone-screen{
    overflow:hidden !important;
  }
}

@media (min-width: 1100px){
  /* This is the main hero headline the screenshot showed, not the side prompt. */
  .copy-block h1{
    font-size:clamp(58px, 5.15vw, 86px) !important;
    line-height:.95 !important;
    letter-spacing:-.07em !important;
    max-width:21.5ch !important;
    white-space:nowrap !important;
  }

  .copy-block .lead{
    max-width:900px !important;
    width:min(900px, 100%) !important;
    font-size:16px !important;
    line-height:1.55 !important;
  }

  .copy-block{
    margin-bottom:clamp(24px, 2.4vw, 38px) !important;
  }

  .comparison-card{
    margin-top:0 !important;
  }
}

@media (max-width: 1280px) and (min-width: 1100px){
  .copy-block h1{
    font-size:clamp(52px, 4.8vw, 68px) !important;
  }
}

@media (max-width: 1099px){
  .copy-block h1{
    white-space:normal !important;
  }
}


/* v124: actually reduce the desktop hero headline so one-line treatment fits the browser */
@media (min-width: 1100px){
  .copy-block h1{
    font-size:clamp(44px, 3.55vw, 62px) !important;
    line-height:1.02 !important;
    letter-spacing:-.045em !important;
    max-width:none !important;
    width:calc(100vw - 96px) !important;
    white-space:nowrap !important;
    overflow:visible !important;
  }

  .copy-block .lead{
    max-width:980px !important;
    width:min(980px, calc(100vw - 96px)) !important;
  }
}

@media (max-width: 1240px) and (min-width: 1100px){
  .copy-block h1{
    font-size:clamp(40px, 3.35vw, 48px) !important;
    letter-spacing:-.04em !important;
  }
}

@media (max-width: 1099px){
  .copy-block h1{
    width:auto !important;
    white-space:normal !important;
  }
}


/* v125: Stripe checkout plumbing / status */
.project-stripe-cta{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:46px;
  padding:12px 18px;
  border-radius:999px;
  border:1px solid rgba(126,49,135,.58);
  background:rgba(126,49,135,.14);
  color:#1c242a;
  font-size:12px;
  font-weight:700;
  letter-spacing:.06em;
  text-transform:uppercase;
  text-decoration:none;
  transition:background .18s ease, border-color .18s ease, opacity .18s ease;
}

.project-stripe-cta:hover{
  background:rgba(126,49,135,.26);
  border-color:rgba(126,49,135,.82);
}

.project-stripe-cta.is-disabled{
  opacity:.56;
  cursor:not-allowed;
  border-color:rgba(28,36,42,.18);
  background:rgba(255,255,255,.06);
  color:rgba(84,98,107,.74);
}

.project-stripe-cta.is-hidden{
  display:none !important;
}

.stripe-status{
  flex-basis:100%;
  margin:6px 0 0 !important;
  color:rgba(84,98,107,.58) !important;
  font-size:12px !important;
  line-height:1.45 !important;
}

@media(max-width:760px){
  .project-stripe-cta,
  .care-stripe-cta,
  .plan-submit{
    width:100%;
  }

  .stripe-status{
    text-align:left;
  }
}


/* v126: dynamic Stripe Checkout state */
.project-stripe-cta.is-loading{
  opacity:.82;
  pointer-events:none;
}


/* v128: widen the hosting domain note inside the care option so it does not stack into too many short lines */
.service-option[data-service="managed"]{
  grid-template-columns:150px minmax(170px, .8fr) minmax(260px, 1fr) !important;
}

.service-option[data-service="managed"] .domain-note{
  grid-column:1 / -1 !important;
  max-width:none !important;
  width:100% !important;
  margin-top:4px !important;
  padding-right:clamp(18px, 8vw, 190px) !important;
  line-height:1.45 !important;
}

@media(max-width:760px){
  .service-option[data-service="managed"]{
    grid-template-columns:1fr !important;
  }

  .service-option[data-service="managed"] .domain-note{
    grid-column:auto !important;
    padding-right:0 !important;
  }
}


/* v129: do not show Stripe checkout in the first selection popup before Request Start */
.plan-modal__footer #projectStripeCta,
.plan-modal__footer #careStripeCta,
.plan-modal__footer .stripe-status{
  display:none !important;
}

.plan-modal__footer{
  justify-content:flex-end !important;
}

.plan-modal__footer .plan-submit{
  margin-left:auto !important;
}


/* v151: verified reset-to-v130 base — preserve visible orange advance buttons */
#openStartForm,
.plan-modal__footer .plan-submit,
.start-form__submit{
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  border-radius:999px !important;
  background:#7E3187 !important;
  border:1px solid #7E3187 !important;
  color:#ffffff !important;
  opacity:1 !important;
  visibility:visible !important;
  pointer-events:auto !important;
}

#openStartForm,
.plan-modal__footer .plan-submit{
  min-height:48px !important;
  padding:15px 26px !important;
}

.start-form__submit{
  min-height:52px !important;
  padding:16px 28px !important;
  margin-top:10px !important;
}


/* v152: inline contact thank-you overlay instead of Netlify white thank-you page */
.inline-thank-you{
  position:fixed;
  inset:0;
  z-index:200000;
  display:grid;
  place-items:center;
  padding:24px;
  background:rgba(12,12,11,.46);
  backdrop-filter:blur(8px);
  -webkit-backdrop-filter:blur(8px);
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transition:opacity .45s ease, visibility .45s ease;
}

.inline-thank-you.is-visible{
  opacity:1;
  visibility:visible;
  pointer-events:auto;
}

.inline-thank-you__panel{
  width:min(540px, 92vw);
  border-radius:30px;
  border:none;
  background:linear-gradient(180deg, rgba(255,255,255,.14), rgba(255,255,255,.06));
  backdrop-filter:blur(20px) saturate(145%);
  -webkit-backdrop-filter:blur(20px) saturate(145%);
  box-shadow:0 30px 90px rgba(0,0,0,.42), inset 0 1px 0 rgba(255,255,255,.10);
  padding:34px 34px 32px;
  text-align:center;
  color:#f7f2e9;
}

.inline-thank-you__panel h2{
  margin:10px 0 10px;
  color:#1c242a;
  font-size:clamp(34px, 5vw, 54px);
  line-height:.95;
  letter-spacing:-.04em;
}

.inline-thank-you__panel p{
  margin:0 auto;
  max-width:380px;
  color:rgba(247,242,233,.76);
  font-size:15px;
  line-height:1.55;
}

.inline-thank-you.is-fading{
  opacity:0;
}

@media(max-width:760px){
  .inline-thank-you__panel{
    padding:30px 24px 28px;
    border-radius:24px;
  }
}


/* v153: make the inner monthly-care pill turn solid orange when its option is selected */
.care-card.is-selected .care-pill,
.care-card.is-active .care-pill,
.service-card.is-selected .care-pill,
.service-card.is-active .care-pill,
.plan-care-card.is-selected .care-pill,
.plan-care-card.is-active .care-pill,
.option-card.is-selected .care-pill,
.option-card.is-active .care-pill,
[data-care].is-selected .care-pill,
[data-care].is-active .care-pill,
[data-service].is-selected .care-pill,
[data-service].is-active .care-pill,
.monthly-care-card.is-selected .care-pill,
.monthly-care-card.is-active .care-pill{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  color:#ffffff !important;
  box-shadow:0 10px 28px rgba(126,49,135,.24) !important;
}

/* fallback for existing selected radio/checkbox-card patterns */
input:checked + .care-pill,
input:checked ~ .care-pill,
input:checked + label .care-pill,
label:has(input:checked) .care-pill{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  color:#ffffff !important;
  box-shadow:0 10px 28px rgba(126,49,135,.24) !important;
}


/* v154: make the logo add-on inner pill turn solid orange when selected */
.logo-addon-card.is-selected .care-pill,
.logo-addon-card.is-active .care-pill,
.logo-addon-card.is-selected .addon-pill,
.logo-addon-card.is-active .addon-pill,
.logo-addon-card.is-selected .pill,
.logo-addon-card.is-active .pill,
.brand-addon-card.is-selected .care-pill,
.brand-addon-card.is-active .care-pill,
.brand-addon-card.is-selected .addon-pill,
.brand-addon-card.is-active .addon-pill,
.brand-addon-card.is-selected .pill,
.brand-addon-card.is-active .pill,
.addon-card.is-selected .care-pill,
.addon-card.is-active .care-pill,
.addon-card.is-selected .addon-pill,
.addon-card.is-active .addon-pill,
.addon-card.is-selected .pill,
.addon-card.is-active .pill,
[data-logo-addon].is-selected .care-pill,
[data-logo-addon].is-active .care-pill,
[data-logo-addon].is-selected .addon-pill,
[data-logo-addon].is-active .addon-pill,
[data-logo-addon].is-selected .pill,
[data-logo-addon].is-active .pill,
input[name="logo_addon"]:checked + .care-pill,
input[name="logo_addon"]:checked ~ .care-pill,
input[name="logo_addon"]:checked + .addon-pill,
input[name="logo_addon"]:checked ~ .addon-pill,
label:has(input[name="logo_addon"]:checked) .care-pill,
label:has(input[name="logo_addon"]:checked) .addon-pill,
label:has(input[name="logo_addon"]:checked) .pill{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  color:#ffffff !important;
  box-shadow:0 10px 28px rgba(126,49,135,.24) !important;
}


/* v162: safe fix — hide redundant Estimated Project Total visually only.
   Important: keep #planTotal in the DOM so the pricing modal/order flow JS does not break. */
.plan-total{
  display:none !important;
}

/* v162: remove Scope nav button/link while preserving any content section */
a[href="#scope"],
button[data-target="scope"],
button[data-scroll="scope"],
[aria-controls="scope"].nav-pill,
.nav-pill[href="#scope"]{
  display:none !important;
}

/* v162: verify/guard the required orange order buttons */
#openStartForm,
.plan-modal__footer .plan-submit,
.start-form__submit{
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  border-radius:999px !important;
  background:#7E3187 !important;
  border:1px solid #7E3187 !important;
  color:#ffffff !important;
  opacity:1 !important;
  visibility:visible !important;
  pointer-events:auto !important;
}


/* v163: website access fields use pulldown menus with optional Other text fields */
.start-modal .website-access-grid label.has-other-field{
  align-content:start;
}

.start-modal .website-access-grid .other-detail-input{
  margin-top:8px;
}

.start-modal .website-access-grid .other-detail-input.is-hidden{
  display:none;
}


/* v164: guided popup progress/navigation strip */
.modal-progress{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:8px;
  margin:0 0 18px;
}

.modal-progress__step{
  appearance:none;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  min-height:32px;
  padding:8px 12px;
  border-radius:999px;
  border:1px solid rgba(28,36,42,.14);
  background:rgba(255,255,255,.055);
  color:rgba(84,98,107,.62);
  font:700 9px/1 "Plus Jakarta Sans", Arial, sans-serif;
  letter-spacing:.09em;
  text-transform:uppercase;
  white-space:nowrap;
}

.modal-progress__step span{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:18px;
  height:18px;
  border-radius:999px;
  background:rgba(255,255,255,.10);
  color:inherit;
  font-size:10px;
  letter-spacing:0;
}

.modal-progress__step.is-active{
  border-color:rgba(126,49,135,.72);
  background:rgba(126,49,135,.16);
  color:#1c242a;
}

.modal-progress__step.is-complete{
  border-color:rgba(126,49,135,.46);
  background:rgba(126,49,135,.10);
  color:rgba(84,98,107,.88);
  cursor:pointer;
}

.modal-progress__step.is-complete:hover{
  border-color:#7E3187 !important;
  background:#7E3187 !important;
  color:#ffffff !important;
}

.modal-progress__step:disabled{
  cursor:default;
}

@media(max-width:760px){
  .modal-progress{
    gap:4px;
    margin-bottom:14px;
    flex-wrap:nowrap !important;
  }

  .modal-progress__step{
    padding:6px 7px;
    gap:5px;
    min-height:30px;
    font-size:8.5px;
    letter-spacing:.06em;
  }

  .modal-progress__step span{
    width:16px;
    height:16px;
    font-size:9px;
  }
}


/* v165: mobile footer order — contact form first, WaltersGroup info/social below */
@media(max-width:760px){
  .footer-inner,
  .footer-wrap,
  .site-footer__inner,
  .site-footer .container,
  footer .container{
    display:flex !important;
    flex-direction:column !important;
  }

  .site-footer form[name="proposal-contact"],
  footer form[name="proposal-contact"],
  .site-footer .contact-form,
  footer .contact-form,
  .site-footer .footer-form,
  footer .footer-form{
    order:1 !important;
    margin-top:0 !important;
    margin-bottom:34px !important;
  }

  .site-footer .footer-brand,
  .site-footer .footer-contact,
  .site-footer .footer-info,
  .site-footer .footer-social,
  .site-footer .social-links,
  .site-footer .footer-logo,
  footer .footer-brand,
  footer .footer-contact,
  footer .footer-info,
  footer .footer-social,
  footer .social-links,
  footer .footer-logo{
    order:2 !important;
  }
}


/* v166: mobile payment option alignment — keep Pay in full numbers inside the card and match the other payment cards */
@media(max-width:760px){
  .payment-choice{
    overflow:hidden !important;
  }

  .payment-choice__option{
    display:flex !important;
    flex-direction:column !important;
    align-items:flex-start !important;
    justify-content:flex-start !important;
    gap:10px !important;
    width:100% !important;
    min-width:0 !important;
    overflow:hidden !important;
    text-align:left !important;
  }

  .payment-choice__option > span{
    display:block !important;
    width:100% !important;
    min-width:0 !important;
    max-width:100% !important;
    overflow:hidden !important;
    text-align:left !important;
  }

  .payment-choice__option .estimate-breakdown{
    display:flex !important;
    flex-direction:column !important;
    align-items:flex-start !important;
    justify-content:flex-start !important;
    gap:10px !important;
    width:100% !important;
    min-width:0 !important;
    max-width:100% !important;
    overflow:hidden !important;
    text-align:left !important;
  }

  .payment-choice__option .estimate-part,
  .payment-choice__option .payment-project,
  .payment-choice__option .payment-care{
    display:block !important;
    width:100% !important;
    min-width:0 !important;
    max-width:100% !important;
    text-align:left !important;
    overflow:hidden !important;
  }

  .payment-choice__option .estimate-part strong,
  .payment-choice__option .payment-amount{
    display:block !important;
    width:100% !important;
    min-width:0 !important;
    max-width:100% !important;
    margin:0 !important;
    font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
    font-size:clamp(20px, 6vw, 26px) !important;
    line-height:1.05 !important;
    font-weight:800 !important;
    letter-spacing:-.045em !important;
    text-align:left !important;
    white-space:normal !important;
    overflow-wrap:normal !important;
    word-break:normal !important;
  }

  .payment-choice__option .estimate-part em,
  .payment-choice__option .payment-note{
    display:block !important;
    width:100% !important;
    margin:2px 0 0 !important;
    color:rgba(84,98,107,.66) !important;
    font-size:12px !important;
    line-height:1.15 !important;
    font-style:normal !important;
    text-align:left !important;
  }
}


/* v167: move long FYI copy into small click-to-open info popups */
.info-pop-trigger{
  appearance:none;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:max-content;
  min-height:26px;
  margin:7px 0 14px;
  padding:6px 10px;
  border-radius:999px;
  border:1px solid rgba(126,49,135,.48);
  background:rgba(126,49,135,.10);
  color:#7E3187;
  font:700 9px/1 "Plus Jakarta Sans", Arial, sans-serif;
  letter-spacing:.09em;
  text-transform:uppercase;
  cursor:pointer;
}

.info-pop-trigger:hover{
  background:rgba(126,49,135,.18);
  border-color:rgba(126,49,135,.72);
  color:#1c242a;
}

.info-pop-modal{
  position:fixed;
  inset:0;
  z-index:210000;
  display:none;
  place-items:center;
  padding:22px;
}

.info-pop-modal.is-open{
  display:grid;
}

.info-pop-modal__backdrop{
  position:absolute;
  inset:0;
  background:rgba(10,10,9,.58);
  backdrop-filter:blur(8px);
  -webkit-backdrop-filter:blur(8px);
}

.info-pop-modal__panel{
  position:relative;
  width:min(560px, 92vw);
  max-height:calc(100vh - 44px);
  overflow:auto;
  -webkit-overflow-scrolling:touch;
  border-radius:28px;
  border:1px solid rgba(28,36,42,.16);
  background:rgba(32,32,31,.95);
  box-shadow:0 28px 80px rgba(0,0,0,.48);
  padding:34px;
  color:#f7f2e9;
}

.info-pop-modal__close{
  position:absolute;
  top:14px;
  right:14px;
  width:34px;
  height:34px;
  padding:0;
  display:flex;
  align-items:center;
  justify-content:center;
  border-radius:999px;
  border:1px solid rgba(28,36,42,.14);
  background:rgba(255,255,255,.06);
  color:#1c242a;
  font-size:20px;
  line-height:1;
  cursor:pointer;
}

.info-pop-modal__panel h2{
  margin:10px 0 14px;
  color:#1c242a;
  font-size:clamp(28px, 4vw, 42px);
  line-height:1;
  letter-spacing:-.04em;
}

.info-pop-modal__panel p{
  margin:0;
  color:rgba(28,36,42,.72);
  font-size:15px;
  line-height:1.6;
}

.info-pop-modal__note{
  margin-top:20px;
  padding:18px;
  border-radius:18px;
  border:1px solid rgba(126,49,135,.34);
  background:rgba(126,49,135,.10);
}

.info-pop-modal__note strong{
  display:block;
  margin-bottom:8px;
  color:#1c242a;
}

.info-pop-modal__note span{
  display:block;
  color:rgba(28,36,42,.72);
  font-size:14px;
  line-height:1.5;
}

@media(max-width:760px){
  .info-pop-modal__panel{
    padding:30px 24px 26px;
    border-radius:24px;
  }
}


/* v168: ensure info close controls stay clickable */
.info-pop-modal__panel{z-index:2;}
.info-pop-modal__close{z-index:3; pointer-events:auto;}
.info-pop-modal__backdrop{z-index:1; pointer-events:auto;}
.info-pop-trigger{pointer-events:auto;}


/* v169: softer, smaller placeholder / hint text inside popup form fields */
.start-form input::placeholder,
.start-form textarea::placeholder,
.start-modal select.placeholder-like,
.start-modal .other-detail-input::placeholder{
  color:rgba(84,98,107,.42);
  font-size:14px;
  line-height:1.45;
  font-weight:400;
}

.start-form textarea::placeholder{
  line-height:1.5;
}

@media (max-width:760px){
  .start-form input::placeholder,
  .start-form textarea::placeholder,
  .start-modal .other-detail-input::placeholder{
    font-size:13px;
  }
}


/* v170: improve mobile spacing between monthly-help and access-notes fields */
@media (max-width:760px){
  #websiteCareNotes > label + label{
    margin-top:12px;
  }

  #websiteCareNotes > label{
    gap:8px;
  }

  #websiteCareNotes > label span{
    line-height:1.2;
  }
}


/* v171: remove redundant monthly checkout choices from the second popup */
.website-care-checkout-links{
  display:none !important;
}


/* v172: project submit should stay on page, send form, then open Stripe */
.start-form__submit.is-processing{
  opacity:.72 !important;
  cursor:wait !important;
}


/* v173: contact form thank-you overlay — stay on landing page, blur background, fade away */
.inline-thank-you{
  position:fixed;
  inset:0;
  z-index:200000;
  display:grid;
  place-items:center;
  padding:24px;
  background:rgba(10,10,10,.42);
  backdrop-filter:blur(10px);
  -webkit-backdrop-filter:blur(10px);
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transition:opacity .55s ease, visibility .55s ease;
}

.inline-thank-you.is-visible{
  opacity:1;
  visibility:visible;
  pointer-events:auto;
}

.inline-thank-you.is-fading{
  opacity:0;
}

.inline-thank-you__panel{
  width:min(540px, 92vw);
  border-radius:30px;
  border:none;
  background:linear-gradient(180deg, rgba(255,255,255,.14), rgba(255,255,255,.06));
  backdrop-filter:blur(20px) saturate(145%);
  -webkit-backdrop-filter:blur(20px) saturate(145%);
  box-shadow:0 30px 90px rgba(0,0,0,.42), inset 0 1px 0 rgba(255,255,255,.10);
  padding:34px 34px 32px;
  text-align:center;
  color:#f7f2e9;
}

.inline-thank-you__panel h2{
  margin:10px 0 10px;
  color:#1c242a;
  font-size:clamp(34px, 5vw, 54px);
  line-height:.95;
  letter-spacing:-.04em;
}

.inline-thank-you__panel p{
  margin:0 auto;
  max-width:380px;
  color:rgba(247,242,233,.76);
  font-size:15px;
  line-height:1.55;
}


/* v175: normalize all popup/form typography to Plus Jakarta Sans */
.plan-modal,
.plan-modal *,
.start-modal,
.start-modal *,
.detail-modal,
.detail-modal *,
.info-pop-modal,
.info-pop-modal *,
.inline-thank-you,
.inline-thank-you *{
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
}

.plan-modal input,
.plan-modal textarea,
.plan-modal select,
.plan-modal button,
.start-modal input,
.start-modal textarea,
.start-modal select,
.start-modal button,
.detail-modal input,
.detail-modal textarea,
.detail-modal select,
.detail-modal button,
.info-pop-modal button{
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
}

.plan-modal input::placeholder,
.plan-modal textarea::placeholder,
.start-modal input::placeholder,
.start-modal textarea::placeholder{
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
}


/* v176: improve mobile spacing between care help and access notes fields */
@media (max-width: 767px){
  .start-form .care-help-field{
    margin-bottom:10px;
  }

  .start-form .access-notes-field{
    margin-top:6px;
  }

  .start-form .care-help-field textarea,
  .start-form .access-notes-field textarea{
    margin-top:2px;
  }
}


/* v180: slightly narrow the main intro copy block to avoid the dangling widow */
.hero-copy p,
.hero-intro,
.proposal-intro,
.comparison-intro{
  max-width:980px !important;
}

@media(max-width:760px){
  .hero-copy p,
  .hero-intro,
  .proposal-intro,
  .comparison-intro{
    max-width:100% !important;
  }
}


/* v182: desktop-only live proposed-site preview in package popup header */
.plan-modal__header{
  position:relative;
}

.plan-modal-preview{
  position:absolute;
  top:4px;
  right:56px;
  width:224px;
  height:126px;
  border-radius:18px;
  overflow:hidden;
  background:linear-gradient(135deg, rgba(255,255,255,.06), rgba(255,255,255,.02));
  border:1px solid rgba(28,36,42,.12);
  box-shadow:0 18px 44px rgba(0,0,0,.34);
  pointer-events:none;
}

.plan-modal-preview__stage{
  position:absolute;
  left:0;
  top:0;
  width:2048px;
  height:1156px;
  transform:scale(.109375);
  transform-origin:top left;
  background:transparent;
}

.plan-modal-preview__screen{
  position:absolute;
  overflow:hidden;
  background:#fff;
  z-index:1;
}

.plan-modal-preview__screen--laptop{
  left:292px;
  top:112px;
  width:1281px;
  height:801px;
}

.plan-modal-preview__screen--phone{
  left:1689px;
  top:451px;
  width:246px;
  height:536px;
  border-radius:26px;
}

.plan-modal-preview__screen iframe{
  display:block;
  border:0;
  background:#000;
  transform-origin:top left;
  pointer-events:none;
}

.plan-modal-preview__screen--laptop iframe{
  width:1440px;
  height:900px;
  transform:scale(.89);
}

.plan-modal-preview__screen--phone iframe{
  width:390px;
  height:850px;
  transform:scale(.631);
}

.plan-modal-preview__frame{
  position:absolute;
  inset:0;
  width:2048px;
  height:1156px;
  z-index:3;
  pointer-events:none;
  user-select:none;
}

@media (min-width: 961px){
  .plan-modal__header{
    padding-right:342px !important; /* v1013: widened from 260px to keep
      clearance for the preview after it grew 20% larger and shifted
      30px further left (295px wide + 36px right offset + a small
      buffer, up from 246+6). */
    min-height:132px;
  }

  .plan-modal__header h2,
  .plan-modal__header p,
  .plan-modal__header .small-label,
  .plan-modal__header .modal-progress{
    max-width:calc(100% - 330px); /* v1013: widened from 248px to match
      the larger reserved preview space above. */
  }
}

@media (max-width: 960px){
  .plan-modal-preview{
    display:none !important;
  }

  .plan-modal__header{
    padding-right:0 !important;
    min-height:0;
  }
}


/* v183: remove the visible box around the desktop-only popup preview */
.plan-modal-preview{
  background:transparent !important;
  border:0 !important;
  box-shadow:none !important;
  border-radius:0 !important;
  overflow:visible !important;
}


/* v184: keep the popup preview floating without crushing the intro text into a narrow column */
@media (min-width: 961px){
  .plan-modal__header{
    padding-right:0 !important;
    min-height:132px !important;
  }

  .plan-modal__header .modal-progress{
    max-width:560px !important;
  }

  .plan-modal__header .small-label,
  .plan-modal__header h2,
  .plan-modal__header p{
    max-width:720px !important;
  }

  .plan-modal__header p{
    width:720px !important;
  }

  .plan-modal-preview{
    top:22px !important;
    right:34px !important;
  }
}

@media (max-width: 960px){
  .plan-modal__header p{
    width:auto !important;
    max-width:100% !important;
  }
}


/* v186: keep the popup preview out of the inside-pages title and remove it from monthly-care */
.plan-modal.is-plan-additional-pages .plan-modal-preview{
  top:8px !important;
  right:22px !important;
}

.plan-modal.is-plan-hosting-care .plan-modal-preview{
  display:none !important;
}


/* v188: narrow main intro paragraph width by roughly 10% to avoid the two-word widow */
.hero .copy-block .lead{
  max-width:900px !important;
}

.hero .copy-block .lead{
  color:#ffffff !important;
}

@media(max-width:760px){
  .hero .copy-block .lead{
    max-width:100% !important;
  }
}

/* v189: make price pills solid accent gold whenever their parent option/card is selected */
.service-option.is-selected b,
.service-option[aria-pressed="true"] b,
.logo-addon:has(input:checked) b,
.logo-addon.is-selected b,
.logo-addon.is-active b,
.care-option.is-selected b,
.care-option.is-active b,
[data-service].is-selected b,
[data-logo-addon].is-selected b,
[data-logo-addon].is-active b{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  color:#ffffff !important;
}


/* v190: keep only one separator before Monthly Website Care */
.plan-summary__row{
  border-bottom:0 !important;
  padding-bottom:0 !important;
}

.plan-summary__section-title{
  border-top:1px solid rgba(28,36,42,.18) !important;
  padding-top:18px !important;
  margin-top:18px !important;
}

/* v190: stronger project-start heading copy */
#startModalTitle{
  max-width:100% !important;
}




/* v196: safe selected-pill rule — only small inner pills, never the large payment amount bands */
.service-option.is-selected b,
.service-option.is-active b,
.care-option.is-selected b,
.care-option.is-active b,
.logo-addon:has(input:checked) b,
.logo-addon.is-selected b,
.logo-addon.is-active b,
[data-service].is-selected b,
[data-service].is-active b,
[data-care].is-selected b,
[data-care].is-active b,
[data-logo-addon].is-selected b,
[data-logo-addon].is-active b{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  color:#ffffff !important;
}

/* v196: payment choices stay dark/glass; do not fill the amount block orange */
.payment-choice__option.is-selected > span,
.payment-choice__option.is-active > span,
[data-payment].is-selected > span,
[data-payment].is-active > span{
  background:transparent !important;
  border-color:transparent !important;
  color:inherit !important;
}


/* v197: force DMF payment amount bands to stay transparent/glass on all states */
.payment-choice__option > span,
.payment-choice__option .estimate-breakdown,
.payment-choice__option .estimate-part,
.payment-choice__option .payment-project,
.payment-choice__option .payment-care,
.payment-choice__option .payment-amount,
.payment-choice__option .payment-note,
[data-payment] > span,
[data-payment] .estimate-breakdown,
[data-payment] .estimate-part,
[data-payment] .payment-project,
[data-payment] .payment-care,
[data-payment] .payment-amount,
[data-payment] .payment-note{
  background:transparent !important;
  background-color:transparent !important;
  box-shadow:none !important;
  border:none !important;
}

.payment-choice__option.is-selected > span,
.payment-choice__option.is-active > span,
.payment-choice__option.is-selected .estimate-breakdown,
.payment-choice__option.is-active .estimate-breakdown,
.payment-choice__option.is-selected .estimate-part,
.payment-choice__option.is-active .estimate-part,
.payment-choice__option.is-selected .payment-project,
.payment-choice__option.is-active .payment-project,
.payment-choice__option.is-selected .payment-care,
.payment-choice__option.is-active .payment-care,
[data-payment].is-selected > span,
[data-payment].is-active > span,
[data-payment].is-selected .estimate-breakdown,
[data-payment].is-active .estimate-breakdown,
[data-payment].is-selected .estimate-part,
[data-payment].is-active .estimate-part,
[data-payment].is-selected .payment-project,
[data-payment].is-active .payment-project,
[data-payment].is-selected .payment-care,
[data-payment].is-active .payment-care{
  background:transparent !important;
  background-color:transparent !important;
  box-shadow:none !important;
  border:none !important;
}


/* v200: Monthly Website Care modal cleanup
   Care-only selection should show only the two monthly care choices.
   Hide the design/build summary row, project total, logo add-on, hosting checkbox, and design handoff option. */
.plan-modal.is-plan-hosting-care .service-options,
.plan-modal.is-plan-hosting-care .hosting-check,
.plan-modal.is-plan-hosting-care .plan-pages,
.plan-modal.is-plan-hosting-care .plan-summary__row,
.plan-modal.is-plan-hosting-care .plan-total{
  display:none !important;
}

.plan-modal.is-plan-hosting-care .care-options{
  display:grid !important;
  margin-top:14px !important;
}

.plan-modal.is-plan-hosting-care .plan-summary{
  padding-top:22px !important;
}

.plan-modal.is-plan-hosting-care .plan-summary__section-title{
  margin-top:0 !important;
  padding-top:0 !important;
  border-top:0 !important;
}


/* v201: Monthly care modal keeps care choices at top and logo add-on as a separate optional block */
.plan-modal.is-plan-hosting-care .logo-addon-heading{
  display:block !important;
  margin-top:28px !important;
  padding-top:24px !important;
  border-top:1px solid rgba(28,36,42,.18) !important;
}
.plan-modal.is-plan-hosting-care .logo-addon{
  display:flex !important;
}


/* v22: remove close-button circle and center the X visually */
.detail-modal__close,
.plan-modal__close,
.start-modal__close,
.info-pop-modal__close{
  display:flex !important;
  align-items:center !important;
  justify-content:center !important;
  width:32px !important;
  height:32px !important;
  padding:0 !important;
  border:1px solid rgba(28,36,42,.16) !important;
  border-radius:999px !important;
  background:var(--pv-card2) !important;
  box-shadow:none !important;
  color:#1c242a !important;
  font-size:0 !important;
  line-height:1 !important;
}
.info-pop-modal__close:hover{
  background:var(--pv-accent) !important;
  border-color:var(--pv-accent) !important;
  color:#fff !important;
}

.detail-modal__close::before,
.plan-modal__close::before,
.start-modal__close::before,
.info-pop-modal__close::before{
  content:"×";
  display:block;
  font-size:28px;
  line-height:1;
  font-weight:300;
  color:#1c242a;
  transform:translateY(-1px);
}
/* v676: ROOT CAUSE of the X reading "too low" through v649/v660/v675 -
   every one of those edits targeted .plan-modal__close-glyph, a <span>
   in the markup that computes to font-size:0/display:block (see the
   ".plan-modal__close{ font-size:0 !important }" rule above) - it's
   invisible. The X Dave has been looking at this whole time is THIS
   ::before pseudo-element's own separate "×" content with its own
   untouched translateY(-1px). Pixel-measuring the actual circle showed
   it needs to go up further. */
.plan-modal__close::before{
  transform:translateY(-4px) !important;
}

.detail-modal__close:hover,
.plan-modal__close:hover,
.start-modal__close:hover,
.info-pop-modal__close:hover{
  background:transparent !important;
  border-color:transparent !important;
}

.detail-modal__close:hover::before,
.plan-modal__close:hover::before,
.start-modal__close:hover::before,
.info-pop-modal__close:hover::before{
  color:#7E3187;
}

/* v31: make the client firm name in the intro paragraph pure white */
.firm-white{color:#fff;font-weight:600;}


/* Account/order flow demo additions */
.nav-btn.nav-start.account-flow-open,
.mobile-menu-start.account-flow-open{
  appearance:none;
  border:1px solid rgba(126,49,135,.88);
  background:#7E3187;
  color:#fff;
  cursor:pointer;
}
.mobile-menu-start.account-flow-open{
  width:100%;
  padding:12px 14px;
  border-radius:999px;
  font:inherit;
  text-align:center;
  margin-top:8px;
}

.order-flow-status{
  max-width:1120px;
  margin:0 auto 22px;
  padding:18px 22px;
  border-radius:20px;
  border:1px solid rgba(126,49,135,.24);
  background:rgba(126,49,135,.08);
  color:rgba(28,36,42,.78);
}
.order-flow-status p{
  margin:7px 0 0;
  line-height:1.45;
}
.order-flow-status.is-active{
  background:rgba(126,49,135,.14);
  border-color:rgba(126,49,135,.48);
}
.order-flow-status.is-active p{
  color:#1c242a;
}

.account-flow-modal{
  position:fixed;
  inset:0;
  z-index:9999;
  display:none;
}
.account-flow-modal.is-open{
  display:block;
}
.account-flow-modal__backdrop{
  position:absolute;
  inset:0;
  background:rgba(0,0,0,.62);
  backdrop-filter:blur(12px);
}
.account-flow-modal__panel{
  position:relative;
  width:min(920px,calc(100vw - 34px));
  max-height:calc(100vh - 44px);
  overflow:auto;
  -webkit-overflow-scrolling:touch;
  margin:22px auto;
  padding:34px;
  border-radius:28px;
  border:1px solid rgba(28,36,42,.18);
  background:linear-gradient(135deg,rgba(255,255,255,.96),rgba(246,243,236,.92));
  box-shadow:0 30px 90px rgba(0,0,0,.38);
  color:#242424;
}
.account-flow-modal__close{
  position:absolute;
  top:18px;
  right:18px;
  width:36px;
  height:36px;
  border-radius:999px;
  border:1px solid rgba(35,35,35,.15);
  background:#fff;
  color:#333;
  font-size:25px;
  line-height:1;
  cursor:pointer;
}
.account-flow-step{
  display:none;
}
.account-flow-step.is-active{
  display:block;
}
.account-flow-step h2{
  margin:12px 0 12px;
  font-size:clamp(32px,4vw,48px);
  line-height:1.08;
  font-weight:500;
  letter-spacing:-.015em;
}
/* Per Dave: "Create your webyay account" (the standalone account-choice
   modal's Create Account step) read too small - sized up specifically for
   this step. Scoped to .account-flow-step--form (not the shared base rule
   above, which also covers the "Start your project"/Login/Reset-password
   headers) so only this one header grows. Doesn't touch the SEPARATE,
   already-independently-sized version of this same heading used when the
   account form is embedded inside the payment tunnel's checkout flow (see
   body.tunnel-account-embed #accountFlowModal .account-flow-step--form h2
   in tunnel.css, a much higher-specificity selector) - that compact 19-
   23px sizing was deliberately tuned for the tighter tunnel card and stays
   untouched. */
.account-flow-step--form h2{
  font-size:clamp(38px,4.6vw,56px);
}
.account-flow-step p{
  max-width:700px;
  margin:0 0 24px;
  color:rgba(35,35,35,.66);
  line-height:1.58;
}
/* Per Dave: "Design Handoff Only" in the Create Account intro paragraph is
   now a real, clickable link (see index.html + tunnel.js) - styled to read
   clearly as clickable (underline + pointer + the same gold accent used
   elsewhere for interactive text) without losing the <strong> bold weight
   it already had. */
.design-handoff-link{
  color:inherit;
  text-decoration:underline;
  text-decoration-color:var(--gold);
  text-underline-offset:2px;
  cursor:pointer;
}
.design-handoff-link:hover{
  color:var(--gold);
}
.account-flow-choice-grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:18px;
}
.account-flow-choice{
  display:grid;
  gap:9px;
  text-align:left;
  border-radius:22px;
  border:1px solid rgba(35,35,35,.13);
  background:#fff;
  padding:24px;
  min-height:170px;
  cursor:pointer;
  transition:transform .22s ease, border-color .22s ease, box-shadow .22s ease, background .22s ease;
}
.account-flow-choice:hover{
  transform:translateY(-2px);
  border-color:rgba(126,49,135,.55);
  box-shadow:0 18px 42px rgba(36,31,24,.14);
  background:rgba(255,251,242,.98);
}
.account-flow-choice span{
  color:#D99712;
  text-transform:uppercase;
  letter-spacing:.18em;
  font-size:11px;
  font-weight:700;
}
.account-flow-choice strong{
  font-size:22px;
  line-height:1.15;
  font-weight:600;
}
.account-flow-choice em{
  font-style:normal;
  color:rgba(35,35,35,.60);
  line-height:1.45;
}
.account-flow-form{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:14px 16px;
  margin-top:24px;
}
.account-flow-form label{
  display:grid;
  gap:7px;
  color:rgba(35,35,35,.64);
  font-size:13px;
}
.account-flow-form label span em{
  color:rgba(35,35,35,.42);
  font-style:normal;
  font-size:12px;
}
.account-flow-form input{
  min-height:46px;
  border:1px solid rgba(35,35,35,.14);
  border-radius:14px;
  padding:12px 14px;
  background:#fff;
  color:#222;
  outline:none;
}
.account-flow-form input::placeholder{
  color:rgba(35,35,35,.40);
}
.account-flow-form input:focus{
  border-color:rgba(126,49,135,.62);
  box-shadow:0 0 0 4px rgba(126,49,135,.12);
}
.account-flow-actions{
  grid-column:1/-1;
  display:flex;
  gap:12px;
  flex-wrap:wrap;
  margin-top:8px;
}
.account-flow-back,
.account-flow-submit{
  border-radius:999px;
  padding:13px 18px;
  border:1px solid rgba(35,35,35,.13);
  cursor:pointer;
}
.account-flow-back{
  background:#fff;
  color:#242424;
}
.account-flow-submit{
  background:#7E3187;
  color:#ffffff;
  border-color:#7E3187;
  font-weight:600;
}
.account-flow-submit:hover,
.account-flow-back:hover{
  transform:translateY(-1px);
}
@media(max-width:760px){
  .account-flow-modal__panel{
    padding:26px 20px;
    margin:12px auto;
    max-height:calc(100vh - 24px);
  }
  .account-flow-choice-grid,
  .account-flow-form{
    grid-template-columns:1fr;
  }
}



/* v33 account-flow corrections: restore pill Start Project button, Jakarta/modal typography, frosted glass popup */
/* FIX (2026-07-29), per Dave: this taupe-on-taupe pill (border+fill both
   #7E3187-based) barely showed up against the header gradient. Matches the
   same white-outline/near-transparent-fill treatment already applied to
   this exact button on mobile (see the max-width:760px override below) and
   to the other 3 header pills (View Your New Site/Contact/FAQ) - desktop
   now matches mobile and the rest of the nav instead of standing out as
   the one dark pill among light ones. */
.nav-btn.nav-start.account-flow-open{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  border-radius:999px !important;
  padding:11px 18px !important;
  min-height:0;
  line-height:1;
  border:1px solid rgba(255,255,255,.45) !important;
  background:rgba(255,255,255,.035) !important;
  color:#fff !important;
  font-family:"Plus Jakarta Sans", Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important;
  font-size:12px;
  font-weight:500 !important;
  letter-spacing:.01em;
  text-transform:none;
  box-shadow:none;
  transition:background .22s ease, border-color .22s ease, box-shadow .22s ease, transform .22s ease;
}
.nav-btn.nav-start.account-flow-open:hover{
  background:rgba(255,255,255,.12) !important;
  border-color:rgba(255,255,255,.65) !important;
  transform:translateY(-1px);
  box-shadow:none;
}

.account-flow-modal,
.account-flow-modal *{
  font-family:"Plus Jakarta Sans", Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important;
}
.account-flow-modal__backdrop{
  background:rgba(10,10,10,.46);
  backdrop-filter:blur(18px);
}
.account-flow-modal__panel{
  background:
    linear-gradient(135deg,rgba(255,255,255,.78),rgba(246,243,236,.56)) !important;
  border:1px solid rgba(28,36,42,.46) !important;
  backdrop-filter:blur(24px) saturate(1.18);
  -webkit-backdrop-filter:blur(24px) saturate(1.18);
  box-shadow:0 34px 95px rgba(0,0,0,.36);
}
.account-flow-step h2{
  font-weight:430 !important;
  letter-spacing:-.006em !important;
}
.account-flow-step p{
  font-weight:400 !important;
}
.account-flow-choice{
  background:rgba(255,255,255,.62) !important;
  border-color:rgba(28,36,42,.52) !important;
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
}
.account-flow-choice:hover{
  background:rgba(255,255,255,.78) !important;
  border-color:rgba(126,49,135,.42) !important;
}
.account-flow-choice strong{
  font-weight:560 !important;
}
.account-flow-choice span{
  font-weight:650 !important;
}
.account-flow-submit{
  border-radius:999px !important;
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  color:#ffffff !important;
  font-weight:500 !important;
  letter-spacing:.01em !important;
}
.account-flow-submit:hover{
  background:#66266E !important;
  border-color:#66266E !important;
}


/* v34: make modal read as actual frosted glass, not flat cream */
.account-flow-modal__backdrop{
  background:rgba(0,0,0,.38) !important;
  backdrop-filter:blur(20px) saturate(1.08) !important;
  -webkit-backdrop-filter:blur(20px) saturate(1.08) !important;
}
.account-flow-modal__panel{
  background:
    linear-gradient(135deg, rgba(255,255,255,.34), rgba(255,255,255,.18)) !important;
  border:1px solid rgba(28,36,42,.58) !important;
  backdrop-filter:blur(30px) saturate(1.30) !important;
  -webkit-backdrop-filter:blur(30px) saturate(1.30) !important;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.56),
    0 34px 95px rgba(0,0,0,.42) !important;
}
.account-flow-step h2{
  color:rgba(28,36,42,.94) !important;
}
.account-flow-step p{
  color:rgba(28,36,42,.72) !important;
}
.account-flow-modal .small-label{
  color:#7E3187 !important;
  font-weight:720 !important;
}
.account-flow-choice{
  background:rgba(255,255,255,.44) !important;
  border:1px solid rgba(255,255,255,.56) !important;
  backdrop-filter:blur(18px) saturate(1.18) !important;
  -webkit-backdrop-filter:blur(18px) saturate(1.18) !important;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.42),
    0 16px 45px rgba(0,0,0,.14);
}
.account-flow-choice:hover{
  background:rgba(255,255,255,.56) !important;
  border-color:rgba(126,49,135,.60) !important;
}
.account-flow-choice span{
  color:#D99712 !important;
}
.account-flow-choice strong{
  color:#151515 !important;
}
.account-flow-choice em{
  color:rgba(20,20,20,.58) !important;
}
.account-flow-modal__close{
  background:rgba(255,255,255,.78) !important;
  border-color:rgba(28,36,42,.65) !important;
  backdrop-filter:blur(12px);
  -webkit-backdrop-filter:blur(12px);
}


/* v35: monthly care account requirement */
.account-required-note{
  display:inline-flex !important;
  width:max-content;
  margin-top:10px;
  border-color:rgba(126,49,135,.36) !important;
  color:#7E3187 !important;
  background:rgba(126,49,135,.10) !important;
}
.account-flow-requirement{
  margin:0 0 18px;
  padding:13px 15px;
  border-radius:16px;
  border:1px solid rgba(126,49,135,.34);
  background:rgba(126,49,135,.12);
  color:rgba(28,36,42,.84);
  line-height:1.45;
}
.account-flow-step--form .account-flow-requirement{
  color:rgba(30,30,30,.70);
  background:rgba(126,49,135,.10);
}


/* v36: modal styling adjustments per request */
.account-flow-modal__panel{
  border:none !important;
  box-shadow:0 34px 95px rgba(0,0,0,.42) !important;
}

.account-flow-modal__close{
  background:var(--pv-card2) !important;
  border:1px solid rgba(28,36,42,.16) !important;
  border-radius:999px !important;
  box-shadow:none !important;
  color:#1c242a !important;
  display:flex !important;
  align-items:center !important;
  justify-content:center !important;
  width:38px !important;
  height:38px !important;
  padding:0 !important;
  top:18px !important;
  right:18px !important;
  font-size:24px !important;
  line-height:1 !important;
}

.account-flow-modal .small-label{
  color:rgba(28,36,42,.9) !important;
  font-weight:700 !important;
}

.account-flow-choice{
  background:rgba(22,22,22,.78) !important;
  border:none !important;
  box-shadow:0 16px 45px rgba(0,0,0,.18) !important;
}

.account-flow-choice:hover{
  background:rgba(28,28,28,.84) !important;
  border:none !important;
}

.account-flow-choice strong{
  color:rgba(28,36,42,.98) !important;
}

.account-flow-choice em{
  color:rgba(28,36,42,.72) !important;
}

.account-flow-choice span{
  color:#7E3187 !important;
}


/* v37: account setup form labels in white on glass/dark modal */
.account-flow-form label,
.account-flow-form label span,
.account-flow-form label span em{
  color:rgba(28,36,42,.88) !important;
}
.account-flow-form label span em{
  color:rgba(28,36,42,.62) !important;
}


/* v39: remove any remaining oval/circle behind the modal close X */
.account-flow-modal__close,
.account-flow-modal__close:hover,
.account-flow-modal__close:focus,
.account-flow-modal__close:active{
  background: transparent !important;
  background-color: transparent !important;
  border: none !important;
  box-shadow: none !important;
  outline: none !important;
  border-radius: 0 !important;
  width: auto !important;
  height: auto !important;
  padding: 0 !important;
  appearance: none !important;
  -webkit-appearance: none !important;
  color: #1c242a !important;
}


/* v40: stronger hover state for the two main start-project choice buttons */
.account-flow-choice{
  transition:
    transform .22s ease,
    background .22s ease,
    box-shadow .22s ease,
    opacity .22s ease !important;
}

.account-flow-choice:hover,
.account-flow-choice:focus-visible{
  background: rgba(0,0,0,.92) !important;
  transform: translateY(-3px) scale(1.018) !important;
  box-shadow: 0 22px 54px rgba(0,0,0,.30) !important;
}

.account-flow-choice:hover strong,
.account-flow-choice:focus-visible strong{
  color: #1c242a !important;
}

.account-flow-choice:hover em,
.account-flow-choice:focus-visible em{
  color: rgba(28,36,42,.82) !important;
}

.account-flow-choice:hover span,
.account-flow-choice:focus-visible span{
  color: #7E3187 !important;
}


/* v43 (superseded by v871): this was a completely separate close-button
   build from every other modal's X - two rotated white bars with their
   own drop shadow, no circle background - so it never matched the
   shared gray-circle/dark-X/no-shadow treatment used on the plan,
   start, detail, and info-pop modals. Rebuilt to use that exact same
   look instead of a one-off style. */
.plain-modal-x{
  position:absolute;
  top:16px;
  right:16px;
  width:32px;
  height:32px;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:0;
  margin:0;
  background:var(--pv-card2) !important;
  border:1px solid rgba(28,36,42,.16) !important;
  box-shadow:none !important;
  outline:0 !important;
  border-radius:999px !important;
  cursor:pointer;
  z-index:20;
  -webkit-tap-highlight-color:transparent;
}

.plain-modal-x::before,
.plain-modal-x::after{
  content:"";
  position:absolute;
  left:50%;
  top:50%;
  width:14px;
  height:2px;
  border-radius:999px;
  background:#1c242a;
  box-shadow:none;
  transform-origin:center;
}

.plain-modal-x::before{
  transform:translate(-50%,-50%) rotate(45deg);
}

.plain-modal-x::after{
  transform:translate(-50%,-50%) rotate(-45deg);
}

.plain-modal-x:hover{
  background:var(--pv-accent, #7E3187) !important;
  border-color:var(--pv-accent, #7E3187) !important;
}

.plain-modal-x:hover::before,
.plain-modal-x:hover::after{
  background:#ffffff;
}


/* v45: offset Start Project scroll target below fixed/frosted top bar */
#start,
.investment-section{
  scroll-margin-top: 128px;
}

@media(max-width:760px){
  #start,
  .investment-section{
    scroll-margin-top: 104px;
  }
}

/* v566: offset FAQ nav-link scroll target below fixed/frosted top bar,
   so clicking FAQ lands with the eyebrow + heading + intro visible, not
   scrolled past into the middle of the question list. Anchor points at
   the intro block (#faqTop) rather than the question grid itself. */
#faqTop{
  scroll-margin-top: 128px;
}

@media(max-width:760px){
  #faqTop{
    scroll-margin-top: 104px;
  }
}

/* v584: same fix as #start/#faqTop above, applied to the contact form -
   the mobile hamburger menu's Contact link had no scroll-margin-top at
   all, so it landed with the top of the form tucked under the sticky
   darkening header instead of showing the full form. */
#contact-form{
  scroll-margin-top: 128px;
}

@media(max-width:760px){
  #contact-form{
    scroll-margin-top: 104px;
  }
}


/* v46: align care option descriptions and account-required notes */
.care-option,
.service-option,
.hosting-option{
  align-items:start;
}

.care-option__body,
.service-option__body,
.hosting-option__body{
  min-width:0;
}

.care-option p,
.service-option p,
.hosting-option p{
  margin-left:0 !important;
}

/* The monthly-care modal rows use a three-column layout. Keep right descriptions aligned. */
.care-option{
  display:grid !important;
  grid-template-columns: 160px 220px minmax(260px, 1fr) !important;
  column-gap:28px !important;
}

.care-option > p,
.care-option .care-option-copy,
.care-option .care-option__copy{
  grid-column:3 !important;
  align-self:start !important;
}

.care-option .care-option-main,
.care-option .care-option__main{
  grid-column:2 !important;
}

.care-account-note{
  grid-column:2 / 4;
  margin-top:10px;
  display:inline-flex;
  width:max-content;
  max-width:100%;
  border-radius:999px;
  border:1px solid rgba(126,49,135,.38);
  background:rgba(126,49,135,.10);
  color:#7E3187;
  padding:7px 12px;
  font-size:11px;
  line-height:1.2;
  letter-spacing:.08em;
  text-transform:uppercase;
  font-weight:650;
}

@media(max-width:760px){
  .care-option{
    grid-template-columns:1fr !important;
    row-gap:10px !important;
  }
  .care-option > p,
  .care-option .care-option-copy,
  .care-option .care-option__copy,
  .care-option .care-option-main,
  .care-option .care-option__main,
  .care-account-note{
    grid-column:1 !important;
  }
}


/* v47: clean three-column service-option layout so copy stays aligned and never overlaps the pill */
.service-options{
  display:grid !important;
  gap:14px !important;
  margin:18px 0 !important;
}

.service-option{
  appearance:none;
  display:grid !important;
  grid-template-columns: 150px 180px minmax(250px, 1fr) !important;
  column-gap:24px !important;
  row-gap:8px !important;
  align-items:start !important;
  width:100% !important;
  padding:18px 20px !important;
  border-radius:18px !important;
  border:1px solid rgba(28,36,42,.12) !important;
  background:rgba(0,0,0,.14) !important;
  color:#1c242a !important;
  text-align:left !important;
}

.service-option > span{
  grid-column:1 !important;
  grid-row:1 / span 2 !important;
  display:block !important;
  color:#7E3187 !important;
  font-size:11px !important;
  line-height:1.1 !important;
  letter-spacing:.12em !important;
  text-transform:uppercase !important;
  margin:6px 0 0 0 !important;
}

.service-option > strong{
  grid-column:2 !important;
  grid-row:1 !important;
  display:block !important;
  align-self:end !important;
  margin:0 !important;
  color:#1c242a !important;
  font-size:22px !important;
  line-height:1.1 !important;
  font-weight:500 !important;
}

.service-option > b{
  grid-column:2 !important;
  grid-row:2 !important;
  justify-self:start !important;
  align-self:start !important;
  display:inline-flex !important;
  width:max-content !important;
  max-width:100% !important;
  margin:0 !important;
  padding:10px 14px !important;
  border-radius:999px !important;
  border:1px solid rgba(28,36,42,.16) !important;
  background:rgba(255,255,255,.06) !important;
  color:#1c242a !important;
  font-size:15px !important;
  line-height:1 !important;
  font-weight:600 !important;
  white-space:nowrap !important;
}

.service-option > em{
  grid-column:3 !important;
  grid-row:1 / span 2 !important;
  align-self:start !important;
  display:block !important;
  margin:0 !important;
  color:rgba(84,98,107,.82) !important;
  font-style:normal !important;
  font-size:16px !important;
  line-height:1.35 !important;
}

.service-option > .service-account-note{
  grid-column:3 !important;
  display:block !important;
  margin:4px 0 0 0 !important;
  color:#7E3187 !important;
  font-size:11px !important;
  line-height:1.2 !important;
  letter-spacing:.08em !important;
  text-transform:uppercase !important;
  font-weight:650 !important;
}

.service-option > .domain-note{
  grid-column:1 / -1 !important;
  display:block !important;
  margin:6px 0 0 0 !important;
  color:rgba(84,98,107,.68) !important;
  font-size:14px !important;
  line-height:1.4 !important;
}

@media(max-width:860px){
  .service-option{
    grid-template-columns:1fr !important;
    row-gap:10px !important;
  }
  .service-option > span,
  .service-option > strong,
  .service-option > b,
  .service-option > em,
  .service-option > .service-account-note,
  .service-option > .domain-note{
    grid-column:1 !important;
    grid-row:auto !important;
  }
  .service-option > span{
    margin-top:0 !important;
  }
  .service-option > b{
    white-space:normal !important;
  }
}


/* v48: lighten the four benefit cards to break up the dark field */
.included-benefit{
  background:linear-gradient(180deg, rgba(240,236,228,.98), rgba(232,226,216,.96)) !important;
  border:1px solid rgba(126,49,135,.22) !important;
  box-shadow:0 16px 36px rgba(0,0,0,.12) !important;
}

.included-benefit p{
  color:rgba(32,28,24,.78) !important;
}

.included-benefit span{
  color:#d89b17 !important;
}


/* v50: make the main proposal headline smaller and prevent right-edge overflow */
/* Bug fix, found while implementing the "center the copy-block itself"
   round further down this file (@media min-width:761px, margin-left/right:
   auto): that margin-auto centering had ZERO visible effect because THIS
   rule's max-width was viewport-relative (100vw - 110px) and, at every
   real desktop window size tested, computed wider than .copy-block's
   actual parent (.hero, itself capped at max-width:1760px) - so the block
   was always simply filling 100% of its parent already, leaving no spare
   width for auto margins to center anything into. Wrapped in min() with a
   flat 1420px ceiling so it stops growing past that point on wide/ultra-
   wide desktops specifically (giving the later centering rule real room to
   work) while staying byte-for-byte identical to the original viewport-
   relative value below ~1530px viewport width, where 100vw-110px is
   already narrower than 1420px - i.e. no change at all for any window size
   this rule's original "prevent right-edge overflow" fix was ever actually
   protecting. */
.copy-block{
  max-width: min(calc(100vw - 110px), 1420px) !important;
  width: auto !important;
  overflow: visible !important;
  /* Fix, per Dave: "need this header moved to the right by at least
     200px." .copy-block is a single block sitting above the comparison
     slider - not side-by-side with anything else - so shifting it right
     via margin-left is a fully isolated change; nothing else on the page
     shares its row. max-width trimmed by the same 200px so the block
     still clears the right edge with the same real clearance it had
     before. Scoped back down to 0 on narrower screens (see the
     max-width:900px override below) - 200px would eat most of a
     phone-width viewport otherwise. */
  margin-left: 200px !important;
}

@media(max-width:1280px){
  .copy-block{
    max-width: calc(100vw - 288px) !important;
  }
}

/* Fix, per Dave's 200px header shift above: that much left margin is
   fine on a desktop-width window but would eat most of a narrower/
   tablet/phone viewport, so it's scoped back out below 900px. */
@media(max-width:900px){
  .copy-block{
    margin-left: 0 !important;
  }
}

.copy-block h1{
  max-width: 1420px !important;
  width: 100% !important;
  font-size: clamp(34px, 3.2vw, 58px) !important;
  line-height: 1.06 !important;
  letter-spacing: -0.032em !important;
  white-space: normal !important;
  overflow-wrap: normal !important;
  word-break: normal !important;
}

.copy-block h1 .headline-soft,
.copy-block h1 .headline-punch{
  white-space: normal !important;
  overflow-wrap: normal !important;
  word-break: normal !important;
}

@media(max-width:1280px){
  .copy-block{
    max-width: calc(100vw - 88px) !important;
  }
  .copy-block h1{
    max-width: 1120px !important;
    font-size: clamp(32px, 3.6vw, 50px) !important;
    line-height: 1.08 !important;
  }
}

@media(max-width:980px){
  .copy-block{
    max-width: calc(100vw - 56px) !important;
  }
  .copy-block h1{
    max-width: 780px !important;
    font-size: clamp(30px, 4.8vw, 44px) !important;
    line-height: 1.08 !important;
    letter-spacing: -0.026em !important;
  }
}

@media(max-width:760px){
  .copy-block{
    max-width: calc(100vw - 36px) !important;
  }
  .copy-block h1{
    max-width: 100% !important;
    font-size: clamp(29px, 8vw, 38px) !important;
    line-height: 1.09 !important;
    letter-spacing: -0.02em !important;
  }
}


/* v51: restore monthly-care popup rows to restrained sizing and stop pill/text collisions */
.plan-modal .service-options{
  display:grid !important;
  gap:12px !important;
  margin:18px 0 !important;
}

.plan-modal .service-option{
  display:grid !important;
  grid-template-columns: 145px 185px minmax(230px, 1fr) !important;
  column-gap:22px !important;
  row-gap:6px !important;
  align-items:start !important;
  padding:16px 18px !important;
  border-radius:18px !important;
  text-align:left !important;
}

.plan-modal .service-option > span{
  grid-column:1 !important;
  grid-row:1 / span 2 !important;
  display:block !important;
  margin:5px 0 0 0 !important;
  color:#7E3187 !important;
  font-size:10px !important;
  line-height:1.06 !important;
  letter-spacing:.12em !important;
  text-transform:uppercase !important;
  font-weight:600 !important;
}

.plan-modal .service-option > strong{
  grid-column:2 !important;
  grid-row:1 !important;
  display:block !important;
  margin:0 0 8px 0 !important;
  color:#1c242a !important;
  font-size:17px !important;
  line-height:1.15 !important;
  letter-spacing:-.01em !important;
  font-weight:520 !important;
}

.plan-modal .service-option > b{
  grid-column:2 !important;
  grid-row:2 !important;
  justify-self:start !important;
  align-self:start !important;
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  width:max-content !important;
  max-width:100% !important;
  margin:0 !important;
  padding:8px 12px !important;
  border-radius:999px !important;
  color:#1c242a !important;
  font-size:13px !important;
  line-height:1.05 !important;
  font-weight:600 !important;
  white-space:nowrap !important;
}

.plan-modal .service-option > em{
  grid-column:3 !important;
  grid-row:1 / span 2 !important;
  display:block !important;
  align-self:start !important;
  margin:0 !important;
  color:rgba(84,98,107,.72) !important;
  font-style:normal !important;
  font-size:14px !important;
  line-height:1.34 !important;
  letter-spacing:0 !important;
}

.plan-modal .service-option > .service-account-note{
  grid-column:3 !important;
  display:block !important;
  margin:6px 0 0 0 !important;
  color:#7E3187 !important;
  font-size:10px !important;
  line-height:1.15 !important;
  letter-spacing:.08em !important;
  text-transform:uppercase !important;
  font-weight:650 !important;
}

.plan-modal .service-option > .domain-note{
  grid-column:1 / -1 !important;
  display:block !important;
  margin:8px 0 0 0 !important;
  color:rgba(84,98,107,.64) !important;
  font-size:12px !important;
  line-height:1.38 !important;
}

/* The standalone monthly-care cards should stay compact too */
.plan-modal .care-options{
  display:grid !important;
  grid-template-columns:repeat(2,minmax(0,1fr)) !important;
  gap:12px !important;
}

.plan-modal .care-option{
  display:grid !important;
  grid-template-columns:1fr !important;
  gap:7px !important;
  padding:15px !important;
}

.plan-modal .care-option span{
  font-size:10px !important;
  line-height:1.05 !important;
  margin-bottom:4px !important;
}

.plan-modal .care-option strong{
  font-size:15px !important;
  line-height:1.18 !important;
  font-weight:520 !important;
  margin:0 !important;
}

.plan-modal .care-option em{
  font-size:12px !important;
  line-height:1.42 !important;
}

.plan-modal .care-option b{
  font-size:13px !important;
  line-height:1.05 !important;
  padding:8px 12px !important;
  white-space:nowrap !important;
  max-width:max-content !important;
}

@media(max-width:860px){
  .plan-modal .service-option{
    grid-template-columns:1fr !important;
    row-gap:9px !important;
  }
  .plan-modal .service-option > span,
  .plan-modal .service-option > strong,
  .plan-modal .service-option > b,
  .plan-modal .service-option > em,
  .plan-modal .service-option > .service-account-note,
  .plan-modal .service-option > .domain-note{
    grid-column:1 !important;
    grid-row:auto !important;
  }
  .plan-modal .service-option > b{
    white-space:normal !important;
  }
  .plan-modal .care-options{
    grid-template-columns:1fr !important;
  }
}


/* v53: keep firm name together on its own line when headline wraps */
.copy-block h1 .headline-soft{
  display:inline;
}

.copy-block h1 .headline-punch{
  display:block;
  color:#ffffff;
  white-space:nowrap !important;
  overflow-wrap:normal !important;
  word-break:normal !important;
}

/* On very wide screens, allow it to read as one line if there is room */
@media(min-width:1680px){
  .copy-block h1 .headline-punch{
    display:inline;
  }
}

/* On medium desktop widths, keep the company name together and scale slightly */
@media(max-width:1480px) and (min-width:761px){
  .copy-block h1{
    font-size:clamp(34px, 3vw, 52px) !important;
    line-height:1.07 !important;
  }
}

/* Mobile: keep the firm name together as much as practical without horizontal overflow */
@media(max-width:760px){
  .copy-block h1 .headline-punch{
    display:block;
    white-space:normal !important;
  }
}





/* v60: clean account password validation + visibility buttons */
.password-field .password-input-wrap{
  position:relative;
  display:block;
}

.password-field .password-input-wrap input{
  width:100%;
  padding-right:48px !important;
}

.password-toggle{
  position:absolute;
  right:10px;
  top:50%;
  transform:translateY(-50%);
  width:34px;
  height:34px;
  border:1px solid rgba(255,255,255,.25);
  border-radius:999px;
  background:rgba(255,255,255,.08);
  color:#1c242a;
  display:grid;
  place-items:center;
  cursor:pointer;
  font-size:15px;
  line-height:1;
  padding:0;
  opacity:.82;
}

.password-toggle:hover,
.password-toggle.is-visible{
  background:rgba(126,49,135,.22);
  border-color:rgba(126,49,135,.55);
  opacity:1;
}

.account-password-error{
  grid-column:1 / -1;
  display:none;
  margin:-2px 0 4px;
  color:#1c242a !important;
  background:rgba(210,36,36,.88) !important;
  border:1px solid rgba(28,36,42,.28) !important;
  border-radius:12px;
  padding:10px 12px;
  font-size:13px;
  line-height:1.35;
  font-weight:500;
}

.account-password-error.is-visible{
  display:block !important;
}

#accountConfirmPassword:invalid{
  border-color:rgba(210,36,36,.82) !important;
  box-shadow:0 0 0 3px rgba(210,36,36,.18) !important;
}


/* v62: cleaner password visibility icon */
.password-toggle{
  width:36px !important;
  height:36px !important;
  right:9px !important;
  background:transparent !important;
  border:0 !important;
  box-shadow:none !important;
  opacity:.72 !important;
  transition:opacity .18s ease, transform .18s ease, background-color .18s ease !important;
}

.password-toggle:hover,
.password-toggle.is-visible{
  background:rgba(255,255,255,.075) !important;
  border:0 !important;
  opacity:1 !important;
  transform:translateY(-50%) scale(1.04) !important;
}

.password-toggle .eye-icon{
  width:20px;
  height:20px;
  display:block;
}

.password-toggle .eye-outline,
.password-toggle .eye-pupil{
  fill:none;
  stroke:rgba(255,255,255,.82);
  stroke-width:1.8;
  stroke-linecap:round;
  stroke-linejoin:round;
}

.password-toggle .eye-pupil{
  fill:rgba(255,255,255,.82);
  stroke:none;
}

.password-toggle.is-visible .eye-outline{
  stroke:rgba(126,49,135,.95);
}

.password-toggle.is-visible .eye-pupil{
  fill:rgba(126,49,135,.95);
}


/* v63: password eye icon visible on white fields */
.password-field .password-input-wrap{
  position:relative !important;
  display:block !important;
}

.password-field .password-input-wrap input{
  width:100% !important;
  padding-right:50px !important;
}

.password-toggle{
  position:absolute !important;
  right:10px !important;
  top:50% !important;
  transform:translateY(-50%) !important;
  width:36px !important;
  height:36px !important;
  border:0 !important;
  border-radius:999px !important;
  background:transparent !important;
  box-shadow:none !important;
  display:grid !important;
  place-items:center !important;
  cursor:pointer !important;
  padding:0 !important;
  opacity:.72 !important;
  z-index:3 !important;
  color:#333 !important;
}

.password-toggle:hover,
.password-toggle.is-visible{
  background:rgba(0,0,0,.055) !important;
  opacity:1 !important;
  transform:translateY(-50%) scale(1.04) !important;
}

.password-toggle .eye-icon{
  width:21px !important;
  height:21px !important;
  display:block !important;
  pointer-events:none !important;
}

.password-toggle .eye-outline{
  fill:none !important;
  stroke:rgba(28,28,28,.72) !important;
  stroke-width:1.9 !important;
  stroke-linecap:round !important;
  stroke-linejoin:round !important;
}

.password-toggle .eye-pupil{
  fill:rgba(28,28,28,.72) !important;
  stroke:none !important;
}

.password-toggle.is-visible .eye-outline{
  stroke:rgba(126,49,135,.96) !important;
}

.password-toggle.is-visible .eye-pupil{
  fill:rgba(126,49,135,.96) !important;
}


/* v64: account setup confirmation before package step */
.account-setup-success{
  grid-column:1 / -1;
  display:none;
  margin:2px 0 4px;
  padding:12px 14px;
  border-radius:14px;
  background:rgba(126,49,135,.18);
  border:1px solid rgba(126,49,135,.42);
  color:#1c242a;
  line-height:1.35;
}

.account-setup-success.is-visible{
  display:block;
}

.account-setup-success strong{
  display:block;
  font-size:14px;
  letter-spacing:.01em;
  margin-bottom:2px;
}

.account-setup-success span{
  display:block;
  font-size:13px;
  opacity:.88;
}

#accountCreateButton:disabled{
  opacity:.78;
  cursor:default;
  transform:none !important;
}


/* v65: stronger account setup confirmation visibility */
.account-setup-success{
  grid-column:1 / -1;
  display:none;
  margin:8px 0 6px;
  padding:14px 15px;
  border-radius:15px;
  background:rgba(126,49,135,.22) !important;
  border:1px solid rgba(126,49,135,.55) !important;
  color:#1c242a !important;
  line-height:1.35;
  box-shadow:0 10px 30px rgba(0,0,0,.18);
}

.account-setup-success.is-visible{
  display:block !important;
}

.account-setup-success strong{
  display:block;
  font-size:14px;
  margin-bottom:2px;
}

.account-setup-success span{
  display:block;
  font-size:13px;
  opacity:.9;
}

#accountCreateButton:disabled{
  opacity:.76 !important;
  pointer-events:none !important;
}


/* v66: account-save messages reuse the same error/success styling */
.account-password-error.is-visible{
  display:block !important;
}


/* v67: account started confirmation */
.account-setup-success{
  grid-column:1 / -1;
  display:none;
  margin:8px 0 6px;
  padding:14px 15px;
  border-radius:15px;
  background:rgba(126,49,135,.22) !important;
  border:1px solid rgba(126,49,135,.55) !important;
  color:#1c242a !important;
  line-height:1.35;
  box-shadow:0 10px 30px rgba(0,0,0,.18);
}

.account-setup-success.is-visible{
  display:block !important;
}

.account-setup-success strong{
  display:block;
  font-size:14px;
  margin-bottom:2px;
}

.account-setup-success span{
  display:block;
  font-size:13px;
  opacity:.9;
}

#accountCreateButton:disabled{
  opacity:.76 !important;
  pointer-events:none !important;
}


/* v69: returning account option and session-aware account flow */
.account-flow-choice-grid{
  grid-template-columns:repeat(3, minmax(0, 1fr));
}

.account-flow-step--login{
  display:none;
}

.account-flow-step--login.is-active{
  display:block;
}

.forgot-password-link{
  margin:10px 0 0;
  border:0;
  background:transparent;
  color:rgba(28,36,42,.82);
  font-size:13px;
  text-decoration:underline;
  cursor:pointer;
  padding:0;
}

.forgot-password-link:hover{
  color:#1c242a;
}

#accountLoginButton:disabled,
#accountCreateButton:disabled{
  opacity:.76 !important;
  pointer-events:none !important;
}

@media (max-width: 760px){
  .account-flow-choice-grid{
    grid-template-columns:1fr;
  }
}


/* v75: targeted safe fixes only */

/* Readability for dynamic monthly account-required note */
.account-flow-requirement,
.account-flow-requirement *,
.account-required-modal-note-text{
  color:#1c242a !important;
  -webkit-text-fill-color:#1c242a !important;
}

/* Login link visible directly under Create Account */
.account-inline-login--forced{
  grid-column:1 / -1 !important;
  display:flex !important;
  align-items:center !important;
  gap:10px !important;
  margin:10px 0 0 !important;
  color:#1c242a !important;
  -webkit-text-fill-color:#1c242a !important;
  font-size:14px !important;
  line-height:1.35 !important;
}

.account-inline-login--forced span{
  color:#1c242a !important;
  -webkit-text-fill-color:#1c242a !important;
}

.account-inline-login--forced button,
.forgot-password-link{
  border:0 !important;
  background:transparent !important;
  color:#1c242a !important;
  -webkit-text-fill-color:#1c242a !important;
  text-decoration:underline !important;
  cursor:pointer !important;
  padding:0 !important;
  font:inherit !important;
}

.account-inline-login--forced button:hover,
.forgot-password-link:hover{
  color:#7E3187 !important;
  -webkit-text-fill-color:#7E3187 !important;
}

.account-flow-step--login{
  display:none;
}

.account-flow-step--login.is-active{
  display:block !important;
}

/* v78: careOptions restored for Monthly Website Care; original JS handles when it is hidden. */
@media (max-width:760px){
  .account-inline-login--forced{
    display:block !important;
  }
  .account-inline-login--forced button{
    display:block !important;
    margin-top:5px !important;
  }
}


/* v77: remove account-required pill from the main Monthly Website Care price card */
.investment-card .account-required-note{
  display:none !important;
}


/* v78 final guard: Monthly Website Care must show both $39 and $49 choices */
.plan-modal.is-plan-hosting-care #careOptions{
  display:grid !important;
  grid-template-columns:repeat(2, minmax(0,1fr));
}

.plan-modal.is-plan-hosting-care #careOptions.is-hidden{
  display:grid !important;
}

.plan-modal:not(.is-plan-hosting-care) #careOptions{
  display:none !important;
}

@media(max-width:760px){
  .plan-modal.is-plan-hosting-care #careOptions{
    grid-template-columns:1fr;
  }
}


/* v80: keep modal panels top-aligned when opened */
.start-modal,
.plan-modal,
.account-flow-modal,
.detail-modal{
  align-items:flex-start !important;
}

.start-modal__panel,
.plan-modal__panel,
.account-flow-modal__panel,
.detail-modal__panel{
  scroll-behavior:auto;
}


/* v99: steely charcoal / dark graphite color option — reduces brown cast while preserving gold accent */
:root{
  --ink:#f4f6f7;
  --muted:rgba(244,246,247,.70);
  --panel:rgba(20,23,26,.56);
  --glass:rgba(255,255,255,.07);
}

html,
body{
  background:#1f2225;
}

.page-bg{
  background:
    radial-gradient(circle at 18% 15%, rgba(126,49,135,.055), transparent 30%),
    radial-gradient(circle at 78% 22%, rgba(130,150,165,.10), transparent 34%),
    linear-gradient(135deg, #17191c 0%, #24282c 48%, #1d2023 100%);
}

.page-bg::after{
  background:
    linear-gradient(180deg, rgba(6,8,10,.08), rgba(6,8,10,.30));
}

.wg-topbar{
  background:linear-gradient(180deg, rgba(25,28,31,.82), rgba(25,28,31,.34));
  border-bottom-color:rgba(255,255,255,.10);
}

/* Main page cards and presentation panels */
.price-panel,
.price-card,
.feature-card,
.summary-card,
.option-card,
.investment-card,
.comparison-card,
.detail-panel,
.detail-card,
.account-flow-choice,
.homepage-choice,
.homepage-approval,
.homepage-changes,
.materials-upload,
.inside-pages-content,
.inside-page-builder,
.inside-materials,
.website-care-notes,
.logo-brand-details,
.website-access-info{
  background-color:rgba(37,41,45,.70) !important;
  background-image:none !important;
  border-color:rgba(28,36,42,.14) !important;
}

.price-card.is-selected,
.price-card.is-active,
.homepage-choice.is-active,
.account-flow-choice:hover,
.service-option.is-selected,
.care-option.is-selected,
.payment-choice__option.is-selected,
.start-modal__summary > div{
  background-color:rgba(45,49,53,.82) !important;
  background-image:
    linear-gradient(135deg, rgba(126,49,135,.10), rgba(255,255,255,.035)) !important;
  border-color:rgba(126,49,135,.58) !important;
}

/* Modals */
.plan-modal__panel,
.start-modal__panel,
.account-flow-modal__panel,
.detail-modal__panel,
.info-pop-modal__panel,
.inline-thank-you__panel{
  background:
    linear-gradient(180deg, rgba(43,47,51,.96), rgba(28,31,34,.98)) !important;
  border-color:rgba(28,36,42,.16) !important;
  box-shadow:0 34px 95px rgba(0,0,0,.58) !important;
}

.plan-modal__backdrop,
.start-modal__backdrop,
.account-flow-modal__backdrop,
.detail-modal__backdrop{
  background:rgba(5,7,9,.72) !important;
  backdrop-filter:blur(18px);
}

/* Form controls */
.start-form input,
.start-form textarea,
.start-form select,
.account-flow-form input,
.account-flow-form textarea,
.account-flow-form select,
.account-login-form input,
.website-access-grid input,
.website-access-grid select,
.logo-brand-details input,
.logo-brand-details textarea,
.logo-brand-details select,
.materials-upload input,
.materials-upload textarea,
.inside-pages-content input,
.inside-pages-content textarea,
.inside-pages-content select{
  background:rgba(18,20,23,.78) !important;
  border-color:rgba(28,36,42,.18) !important;
  color:#f7f8f9 !important;
}

.start-form input:focus,
.start-form textarea:focus,
.start-form select:focus,
.account-flow-form input:focus,
.account-flow-form textarea:focus,
.account-flow-form select:focus{
  border-color:rgba(126,49,135,.78) !important;
  box-shadow:0 0 0 3px rgba(126,49,135,.13) !important;
}

/* Keep light information cards neutral instead of beige/brown */
.project-pill,
.stat-card,
.callout-card,
.comparison-head,
.before-after-note{
  background-color:rgba(245,247,248,.92) !important;
  color:#24282c !important;
}

/* Subtle gray text balance */
.lead,
.plan-modal__lead,
.start-modal__header p,
.logo-brand-details__intro,
.materials-upload__intro p,
.website-care-notes p,
.info-pop-modal__panel p{
  color:rgba(84,98,107,.74) !important;
}


/* v103: lighten steely graphite background so it reads dark gray, not black */
html,
body{
  background:#282c30 !important;
}

.page-bg{
  background:
    radial-gradient(circle at 18% 15%, rgba(126,49,135,.06), transparent 30%),
    radial-gradient(circle at 78% 22%, rgba(145,160,172,.12), transparent 34%),
    linear-gradient(135deg, #24282c 0%, #30353a 48%, #292d31 100%) !important;
}

.page-bg::after{
  background:linear-gradient(180deg, rgba(12,14,16,.04), rgba(12,14,16,.18)) !important;
}

.wg-topbar{
  background:linear-gradient(180deg, rgba(38,42,46,.82), rgba(38,42,46,.34)) !important;
}

/* Lighten the dominant dark panels about one step while keeping contrast */
.price-panel,
.price-card,
.feature-card,
.summary-card,
.option-card,
.investment-card,
.detail-panel,
.detail-card,
.account-flow-choice,
.homepage-choice,
.homepage-approval,
.homepage-changes,
.materials-upload,
.inside-pages-content,
.inside-page-builder,
.inside-materials,
.website-care-notes,
.logo-brand-details,
.website-access-info{
  background-color:rgba(48,53,58,.74) !important;
}

.plan-modal__panel,
.start-modal__panel,
.account-flow-modal__panel,
.detail-modal__panel,
.info-pop-modal__panel,
.inline-thank-you__panel{
  background:
    linear-gradient(180deg, rgba(56,61,66,.97), rgba(38,42,46,.98)) !important;
}

.start-form input,
.start-form textarea,
.start-form select,
.account-flow-form input,
.account-flow-form textarea,
.account-flow-form select,
.account-login-form input,
.website-access-grid input,
.website-access-grid select,
.logo-brand-details input,
.logo-brand-details textarea,
.logo-brand-details select,
.materials-upload input,
.materials-upload textarea,
.inside-pages-content input,
.inside-pages-content textarea,
.inside-pages-content select{
  background:rgba(35,39,43,.82) !important;
}


/* v104: stronger visible lightening pass — dark slate/graphite, not black */
/* Superseded by v389 below (page-wide off-white per Dave, 7/29) - left as
   light too so there is no conflicting dark rule anywhere in this file. */
html,
body{
  background:#f6f7f8 !important;
}

.page-bg{
  background:
    radial-gradient(circle at 18% 15%, rgba(126,49,135,.065), transparent 30%),
    radial-gradient(circle at 78% 22%, rgba(160,176,188,.15), transparent 34%),
    linear-gradient(135deg, #2c3136 0%, #3b4147 48%, #33383e 100%) !important;
}

.page-bg::after{
  background:linear-gradient(180deg, rgba(10,12,14,.02), rgba(10,12,14,.10)) !important;
}

.wg-topbar{
  background:linear-gradient(180deg, rgba(48,53,58,.86), rgba(48,53,58,.42)) !important;
}

/* Push primary panels one step lighter so the page no longer reads black */
.price-panel,
.price-card,
.feature-card,
.summary-card,
.option-card,
.investment-card,
.detail-panel,
.detail-card,
.account-flow-choice,
.homepage-choice,
.homepage-approval,
.homepage-changes,
.materials-upload,
.inside-pages-content,
.inside-page-builder,
.inside-materials,
.website-care-notes,
.logo-brand-details,
.website-access-info{
  background-color:rgba(58,64,70,.78) !important;
}

.price-card.is-selected,
.price-card.is-active,
.homepage-choice.is-active,
.account-flow-choice:hover,
.service-option.is-selected,
.care-option.is-selected,
.payment-choice__option.is-selected,
.start-modal__summary > div{
  background-color:rgba(66,72,78,.86) !important;
}

.plan-modal__panel,
.start-modal__panel,
.account-flow-modal__panel,
.detail-modal__panel,
.info-pop-modal__panel,
.inline-thank-you__panel{
  background:
    linear-gradient(180deg, rgba(66,72,78,.98), rgba(46,51,56,.99)) !important;
}

.start-form input,
.start-form textarea,
.start-form select,
.account-flow-form input,
.account-flow-form textarea,
.account-flow-form select,
.account-login-form input,
.website-access-grid input,
.website-access-grid select,
.logo-brand-details input,
.logo-brand-details textarea,
.logo-brand-details select,
.materials-upload input,
.materials-upload textarea,
.inside-pages-content input,
.inside-pages-content textarea,
.inside-pages-content select{
  background:rgba(43,48,53,.88) !important;
}


/* v106: hide visible white modal scrollbars while preserving scrolling */
.plan-modal__panel,
.start-modal__panel,
.account-flow-modal__panel,
.detail-modal__panel,
.info-pop-modal__panel{
  scrollbar-width:none !important;
  -ms-overflow-style:none !important;
}

.plan-modal__panel::-webkit-scrollbar,
.start-modal__panel::-webkit-scrollbar,
.account-flow-modal__panel::-webkit-scrollbar,
.detail-modal__panel::-webkit-scrollbar,
.info-pop-modal__panel::-webkit-scrollbar{
  width:0 !important;
  height:0 !important;
  display:none !important;
}


/* v107: account modal cleanup — only one account step visible, no white scrollbars, nicer login buttons */
#accountFlowModal [data-account-step]{
  display:none !important;
}

#accountFlowModal [data-account-step].is-active{
  display:block !important;
}

#accountFlowModal .account-flow-modal__panel{
  scrollbar-width:none !important;
  -ms-overflow-style:none !important;
}

#accountFlowModal .account-flow-modal__panel::-webkit-scrollbar{
  width:0 !important;
  height:0 !important;
  display:none !important;
}

#accountFlowModal .account-flow-actions .plain-btn,
#accountFlowModal .account-flow-actions .gold-btn,
#accountFlowModal .account-flow-back,
#accountFlowModal .account-flow-submit{
  appearance:none;
  border-radius:999px !important;
  min-height:46px;
  padding:13px 22px !important;
  border:1px solid rgba(255,255,255,.18) !important;
  font-family:"Plus Jakarta Sans", Arial, sans-serif;
  font-size:14px;
  font-weight:650;
  line-height:1;
  cursor:pointer;
  transition:transform .18s ease, background .18s ease, border-color .18s ease, color .18s ease;
}

#accountFlowModal .account-flow-actions .plain-btn,
#accountFlowModal .account-flow-back{
  background:#1c242a !important;
  color:#ffffff !important;
  border-color:#1c242a !important;
}

#accountFlowModal .account-flow-actions .gold-btn,
#accountFlowModal .account-flow-submit{
  background:#7E3187 !important;
  color:#ffffff !important;
  border-color:#7E3187 !important;
}

#accountFlowModal .account-flow-actions .plain-btn:hover,
#accountFlowModal .account-flow-back:hover{
  background:#323d46 !important;
  border-color:#323d46 !important;
  transform:translateY(-1px);
}

#accountFlowModal .account-flow-actions .gold-btn:hover,
#accountFlowModal .account-flow-submit:hover{
  background:#6b8db0 !important;
  border-color:#6b8db0 !important;
  transform:translateY(-1px);
}

#accountFlowModal .forgot-password-link,
#accountFlowModal [data-inline-login-switch]{
  border:0 !important;
  background:transparent !important;
  color:rgba(28,36,42,.86) !important;
  text-decoration:underline;
  cursor:pointer;
  font-family:"Plus Jakarta Sans", Arial, sans-serif;
}


/* v108: restore subtle translucent gold hover on the three project investment cards */
.investment-card.price-trigger{
  position:relative;
  overflow:hidden;
  transition:
    transform .22s ease,
    border-color .22s ease,
    box-shadow .22s ease,
    background-color .22s ease;
}

.investment-card.price-trigger::before{
  content:"";
  position:absolute;
  inset:0;
  pointer-events:none;
  opacity:0;
  transition:opacity .24s ease;
  background:
    radial-gradient(circle at 24% 18%, rgba(126,49,135,.18), transparent 34%),
    linear-gradient(135deg, rgba(126,49,135,.105), rgba(255,255,255,.035) 48%, rgba(126,49,135,.04));
}

.investment-card.price-trigger:hover{
  transform:translateY(-3px);
  border-color:rgba(126,49,135,.58) !important;
  box-shadow:0 26px 70px rgba(0,0,0,.28), 0 0 0 1px rgba(126,49,135,.10);
}

.investment-card.price-trigger:hover::before{
  opacity:1;
}

.investment-card.price-trigger > *{
  position:relative;
  z-index:1;
}


/* v109: logo direction section must only show when the logo add-on checkbox is selected */
#logoBrandDetails[hidden],
#logoBrandDetails.is-hidden,
#logoBrandDetails:not(.is-logo-selected){
  display:none !important;
}

#logoBrandDetails.is-logo-selected{
  display:block !important;
}


/* v180: mobile start-project sits directly below MENU, without moving MENU down */
@media (max-width:760px){
  header.wg-topbar{
    position:sticky !important;
    top:0 !important;
    height:auto !important;
    min-height:96px !important;
    padding:12px 14px 18px 14px !important;
    display:flex !important;
    align-items:flex-start !important;
    justify-content:space-between !important;
    gap:10px !important;
    background:linear-gradient(180deg, rgba(42,42,42,.76), rgba(42,42,42,.30)) !important;
    backdrop-filter:blur(18px) !important;
  }

  header.wg-topbar .wg-logo{
    width:154px !important;
    max-width:58vw !important;
    margin:0 !important;
  }

  header.wg-topbar nav.wg-nav{
    position:relative !important;
    width:110px !important;
    min-width:110px !important;
    margin-top:0 !important;
    display:block !important;
    flex:none !important;
  }

  header.wg-topbar .nav-menu-toggle{
    display:inline-flex !important;
    position:absolute !important;
    top:0 !important;
    right:0 !important;
    margin:0 !important;
  }

  /* Per Dave (7/29): match Start Project's pill outline to the hamburger
     button's translucent white outline on mobile - was a solid taupe fill,
     now the same thin white border + faint white tint. Desktop untouched
     (this whole block is scoped to max-width:760px).
     ROUND 2 (2026-07-29), per Dave: .30 opacity was still too faint to
     read on mobile - bumped the outline to a solid, fully-opaque white so
     the pill actually shows up. Background tint left as the original faint
     value; only the outline itself needed to go fully white. */
  header.wg-topbar .nav-btn.nav-start.account-flow-open{
    border:1px solid #fff !important;
    background:rgba(255,255,255,.035) !important;
    color:rgba(246,241,232,.88) !important;
  }

  header.wg-topbar .wg-nav .nav-start,
  header.wg-topbar .wg-nav .nav-start.account-flow-open{
    display:inline-flex !important;
    position:absolute !important;
    top:46px !important;
    right:0 !important;
    margin:0 !important;
  }

  header.wg-topbar .mobile-nav-menu{
    left:auto !important;
    right:0 !important;
    top:42px !important;
  }

  /* Per Dave: this dropdown copy of "Start Project" used to be redundant
     with the persistent top-right pill, so it was hidden. Now repurposed
     (per Dave: "add a new option called 'Order Your Website'... same
     place that Start Project goes") - same button/click handler, just
     relabeled and now the 2nd item in the dropdown (see the reordered
     #mobileNavMenu markup), so it needs real visible styling matching the
     other <a> items below (.mobile-nav-menu a) instead of display:none.
     It's a <button>, not an <a>, so this also resets the button-specific
     defaults (border/background/font/width/cursor) the <a> rule doesn't
     need to touch. */
  header.wg-topbar .mobile-nav-menu .mobile-menu-start{
    display:block !important;
    width:100% !important;
    text-align:left !important;
    padding:11px 12px !important;
    border-radius:12px !important;
    border:none !important;
    background:transparent !important;
    color:rgba(246,241,232,.90) !important;
    text-decoration:none !important;
    font-size:11px !important;
    letter-spacing:.08em !important;
    text-transform:uppercase !important;
    font-family:inherit !important;
    cursor:pointer !important;
  }
  header.wg-topbar .mobile-nav-menu .mobile-menu-start:hover{
    background:rgba(126,49,135,.10) !important;
    color:#7E3187 !important;
  }
}

/* v181: lock mobile header controls back to the upper-right and restore scrollable live after-site previews. */
@media (max-width:760px){
  header.wg-topbar{
    position:sticky !important;
    top:0 !important;
    display:grid !important;
    grid-template-columns:minmax(0,1fr) max-content !important;
    grid-template-rows:auto auto !important;
    align-items:start !important;
    justify-content:stretch !important;
    column-gap:12px !important;
    row-gap:0 !important;
    height:96px !important;
    min-height:96px !important;
    max-height:96px !important;
    padding:12px max(14px, env(safe-area-inset-right)) 12px max(28px, env(safe-area-inset-left)) !important;
    overflow:visible !important;
  }

  header.wg-topbar .wg-logo{
    grid-column:1 !important;
    grid-row:1 / span 2 !important;
    justify-self:start !important;
    align-self:start !important;
    width:clamp(140px, 39vw, 188px) !important;
    max-width:52vw !important;
    margin:0 !important;
  }

  header.wg-topbar nav.wg-nav{
    grid-column:2 !important;
    grid-row:1 / span 2 !important;
    position:relative !important;
    display:grid !important;
    grid-template-columns:max-content max-content !important;
    grid-template-rows:auto auto !important;
    column-gap:6px !important;
    row-gap:7px !important;
    justify-items:end !important;
    align-items:center !important;
    justify-self:end !important;
    align-self:start !important;
    width:max-content !important;
    min-width:0 !important;
    max-width:none !important;
    margin:0 !important;
    padding:0 !important;
    flex:none !important;
    transform:none !important;
  }

  header.wg-topbar .wg-nav > a.nav-proposed,
  header.wg-topbar .wg-nav > a.nav-scope,
  header.wg-topbar .wg-nav > a.nav-contact{
    display:none !important;
  }

  header.wg-topbar .nav-menu-toggle,
  header.wg-topbar .wg-nav .nav-start,
  header.wg-topbar .wg-nav .nav-start.account-flow-open{
    position:relative !important;
    top:auto !important;
    right:auto !important;
    left:auto !important;
    bottom:auto !important;
    transform:none !important;
    margin:0 !important;
    justify-self:end !important;
    white-space:nowrap !important;
  }

  header.wg-topbar .nav-menu-toggle{
    grid-column:2 !important;
    grid-row:1 !important;
    display:inline-flex !important;
    padding:9px 16px !important;
  }

  header.wg-topbar .wg-nav .nav-start,
  header.wg-topbar .wg-nav .nav-start.account-flow-open{
    grid-column:1 / span 2 !important;
    grid-row:2 !important;
    display:inline-flex !important;
    padding:10px 16px !important;
  }

  /* v572/v573: dock the search icon beside Menu on row 1, with Start
     Project spanning both columns on row 2 below - this keeps the nav's
     total width equal to whichever row is naturally wider (Start Project)
     instead of adding a whole new column's worth of width, which is what
     was pushing the header into horizontal overflow. Also fixes the
     original bug where the icon fell into an implicit 3rd row and
     rendered down over the hero text. */
  header.wg-topbar .wg-nav .site-search{
    grid-column:1 !important;
    grid-row:1 !important;
    justify-self:end !important;
    align-self:center !important;
    margin:0 !important;
  }

  header.wg-topbar .mobile-nav-menu{
    left:auto !important;
    right:0 !important;
    top:42px !important;
    transform:none !important;
    text-align:left !important;
  }

  .mobile-phone-screen{
    touch-action:auto !important;
  }

  .mobile-phone-after,
  .mobile-phone-after iframe,
  .after-screen iframe{
    pointer-events:auto !important;
    overflow:auto !important;
    -webkit-overflow-scrolling:touch !important;
  }
}

@media (max-width:390px){
  header.wg-topbar{
    padding-left:max(22px, env(safe-area-inset-left)) !important;
    padding-right:max(12px, env(safe-area-inset-right)) !important;
    column-gap:8px !important;
  }

  header.wg-topbar .wg-logo{
    width:clamp(130px, 38vw, 170px) !important;
    max-width:50vw !important;
  }

  header.wg-topbar nav.wg-nav{
    max-width:48vw !important;
  }

  header.wg-topbar .nav-menu-toggle,
  header.wg-topbar .wg-nav .nav-start,
  header.wg-topbar .wg-nav .nav-start.account-flow-open{
    padding-left:12px !important;
    padding-right:12px !important;
    font-size:10px !important;
  }
}



/* v183: one-off change note for design handoff clients */
.one-off-change-note{
  margin-top:4px !important;
}

.handoff-one-off-note{
  margin:12px 0 0;
  padding:12px 14px;
  border:1px solid rgba(126,49,135,.28);
  border-radius:14px;
  background:rgba(126,49,135,.07);
  color:rgba(84,98,107,.82);
  font-size:13px;
  line-height:1.42;
}

.start-modal .handoff-one-off-note{
  color:rgba(35,35,35,.72);
  background:rgba(126,49,135,.10);
  border-color:rgba(126,49,135,.34);
}

/* v185: mobile pitch header logo restore - larger and nudged left only, without moving upper-right controls */
@media (max-width:760px){
  header.wg-topbar .wg-logo{
    width:clamp(189px, 52.65vw, 254px) !important;
    max-width:58vw !important;
    transform:translateX(-10px) !important;
    transform-origin:left top !important;
  }
}

@media (max-width:390px){
  header.wg-topbar .wg-logo{
    width:clamp(170px, 51vw, 230px) !important;
    max-width:56vw !important;
    transform:translateX(-10px) !important;
    transform-origin:left top !important;
  }
}


/* v188: keep homepage change request fields inside the selected "I have changes" option box */
.homepage-choice--with-changes{
  display:block !important;
  cursor:default;
}

.homepage-choice__main{
  display:flex !important;
  align-items:flex-start;
  gap:11px !important;
  cursor:pointer;
}

.homepage-choice > input,
.homepage-choice__main > input{
  width:15px !important;
  height:15px !important;
  min-height:0 !important;
  margin-top:3px !important;
  padding:0 !important;
  flex:0 0 auto !important;
  cursor:pointer !important;
  appearance:none !important;
  -webkit-appearance:none !important;
  border-radius:5px !important;
  background:#ffffff !important;
  border:1px solid rgba(28,36,42,.32) !important;
  position:relative !important;
}
.homepage-choice > input:checked,
.homepage-choice__main > input:checked{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
}
.homepage-choice > input:checked::after,
.homepage-choice__main > input:checked::after{
  content:'' !important;
  position:absolute !important;
  left:4px !important;
  top:1px !important;
  width:4px !important;
  height:7px !important;
  border:solid #ffffff !important;
  border-width:0 2px 2px 0 !important;
  transform:rotate(45deg) !important;
}

.homepage-choice > span,
.homepage-choice__main > span{
  display:grid;
  gap:4px;
}

.homepage-choice > span > strong,
.homepage-choice__main > span > strong{
  color:#1c242a;
  font-size:14px;
  line-height:1.3;
  font-weight:500;
}

.homepage-choice > span > em,
.homepage-choice__main > span > em{
  color:rgba(84,98,107,.66);
  font-size:13px;
  line-height:1.4;
  font-style:normal;
}

.homepage-choice--with-changes .homepage-changes{
  margin-top:14px;
  padding:14px 0 0;
  border:0;
  border-top:6px solid rgba(126,49,135,.32);
  border-radius:0;
  background:transparent;
}

.homepage-choice--with-changes .homepage-changes.is-hidden{
  display:none;
}

/* v190: style native file upload controls as WebYay pill buttons. Scoped to project-start modal only. */
.start-modal .file-field input[type="file"],
.start-modal .materials-upload input[type="file"],
.start-modal .inside-pages-content input[type="file"]{
  width:100%;
  min-height:44px;
  padding:7px 9px !important;
  border-radius:16px !important;
  background:var(--pv-card2) !important;
  border:1px dashed rgba(28,36,42,.28) !important;
  color:rgba(28,36,42,.55) !important;
  font-family:inherit;
  font-size:12px;
  line-height:1.2;
  cursor:pointer;
}

.start-modal .file-field input[type="file"]::file-selector-button,
.start-modal .materials-upload input[type="file"]::file-selector-button,
.start-modal .inside-pages-content input[type="file"]::file-selector-button{
  appearance:none;
  border:1px solid #7E3187;
  border-radius:999px;
  background:#7E3187;
  color:#ffffff;
  font-family:inherit;
  font-size:12px;
  font-weight:650;
  letter-spacing:.01em;
  line-height:1;
  padding:9px 15px;
  margin:0 11px 0 0;
  cursor:pointer;
  transition:background .18s ease,color .18s ease,border-color .18s ease,transform .18s ease;
}

.start-modal .file-field input[type="file"]::-webkit-file-upload-button,
.start-modal .materials-upload input[type="file"]::-webkit-file-upload-button,
.start-modal .inside-pages-content input[type="file"]::-webkit-file-upload-button{
  appearance:none;
  border:1px solid #7E3187;
  border-radius:999px;
  background:#7E3187;
  color:#ffffff;
  font-family:inherit;
  font-size:12px;
  font-weight:650;
  letter-spacing:.01em;
  line-height:1;
  padding:9px 15px;
  margin:0 11px 0 0;
  cursor:pointer;
  transition:background .18s ease,color .18s ease,border-color .18s ease,transform .18s ease;
}

.start-modal .file-field input[type="file"]:hover::file-selector-button,
.start-modal .materials-upload input[type="file"]:hover::file-selector-button,
.start-modal .inside-pages-content input[type="file"]:hover::file-selector-button,
.start-modal .file-field input[type="file"]:focus::file-selector-button,
.start-modal .materials-upload input[type="file"]:focus::file-selector-button,
.start-modal .inside-pages-content input[type="file"]:focus::file-selector-button{
  background:#7E3187;
  border-color:#7E3187;
  color:#ffffff;
}

.start-modal .file-field input[type="file"]:hover::-webkit-file-upload-button,
.start-modal .materials-upload input[type="file"]:hover::-webkit-file-upload-button,
.start-modal .inside-pages-content input[type="file"]:hover::-webkit-file-upload-button,
.start-modal .file-field input[type="file"]:focus::-webkit-file-upload-button,
.start-modal .materials-upload input[type="file"]:focus::-webkit-file-upload-button,
.start-modal .inside-pages-content input[type="file"]:focus::-webkit-file-upload-button{
  background:#7E3187;
  border-color:#7E3187;
  color:#ffffff;
}

/* v193: restore clear password visibility icon on dark account fields without changing account flow */
#accountFlowModal .password-toggle,
#accountFlowModal .password-toggle:hover,
#accountFlowModal .password-toggle.is-visible{
  color:#1c242a !important;
}

#accountFlowModal .password-toggle .eye-outline{
  stroke:rgba(255,255,255,.72) !important;
}

#accountFlowModal .password-toggle .eye-pupil{
  fill:rgba(255,255,255,.72) !important;
}

#accountFlowModal .password-toggle:hover .eye-outline,
#accountFlowModal .password-toggle.is-visible .eye-outline{
  stroke:rgba(126,49,135,.98) !important;
}

#accountFlowModal .password-toggle:hover .eye-pupil,
#accountFlowModal .password-toggle.is-visible .eye-pupil{
  fill:rgba(126,49,135,.98) !important;
}

/* v196: simplify Homepage Changes expansion so it reads as one clean selected panel, not nested windows */
/* v1181 (superseded by v1182 below): first attempt flattened this box
   to a divider to cut down nesting, but that also un-boxed it relative
   to its sibling Social Media Links / Font Selection sections, which
   Dave pointed out looked inconsistent - he wants THIS section boxed
   to match those, just not nested a 4th layer deep. v1182 moves the
   box onto a new dedicated .homepage-change-requests wrapper (see
   below) that sits as a SIBLING of Social Media Links / Font Selection
   instead of a parent of them, so every section gets its own box at
   the same depth instead of one nesting inside another. This outer
   .homepage-changes wrapper goes back to being a plain, unboxed
   spacer - it's just a container for the three sibling sections now. */
.start-modal .homepage-choice--with-changes .homepage-changes{
  margin-top:14px !important;
  padding:0 !important;
  border:0 !important;
  border-radius:0 !important;
  background:transparent !important;
  box-shadow:none !important;
}

.start-modal .homepage-choice--with-changes .homepage-changes.is-hidden{
  display:none !important;
}

.start-modal .homepage-choice--with-changes .homepage-changes > .homepage-approval__label,
.start-modal .homepage-choice--with-changes .materials-upload__intro > .homepage-approval__label{
  display:inline-flex;
  margin:0 10px 10px 0;
}

.start-modal .homepage-choice--with-changes .change-checks{
  margin-top:0;
}
#homepageChanges .section-head-inline{
  margin-bottom:2px !important;
}

.start-modal .homepage-choice--with-changes .typed-changes-field{
  margin-top:10px;
}

/* v1182: per Dave - "Web Change Requests" (the 7 checkboxes + Describe
   the Changes textarea) needs its own dark box exactly matching the
   Social Media Links / Font Selection boxes right below it, not just a
   divider line. Copied their exact box treatment (border, radius,
   background, and the .is-active dark-mode swap) onto this new
   wrapper. Also per Dave's follow-up: on desktop, stack all 7
   checkboxes in a single column on the left with a narrower textarea
   to the right, instead of the checkboxes sprawling across a 4-column
   grid above a full-width textarea - more compact, less wasted height.
   Mobile keeps the original stacked layout (checkboxes grid, then
   full-width textarea below) since there isn't room to go side by
   side. */
.homepage-change-requests{
  margin-top:3px;
  /* v1184: per Dave - needed more breathing room above the subheader */
  padding:18px 18px 9px;
  border:1px solid rgba(28,36,42,.16);
  border-radius:16px;
  background:rgba(0,0,0,.03);
}
.homepage-choice.is-active .homepage-change-requests{
  border-color:rgba(255,255,255,.16) !important;
  background:rgba(0,0,0,.06) !important;
}
.homepage-change-requests .section-head-inline{
  margin-bottom:8px !important;
}
.homepage-change-requests__body .change-checks{
  margin-top:0;
}
.homepage-change-requests__body .typed-changes-field{
  margin-top:10px;
}

/* v1196: per Dave, MOBILE only - the "I have website changes" Web
   Change Requests box was still cramped on phones: (1) the subhead ->
   first checkbox gap had the same ID-specificity bug as the desktop
   fix in v1191/v1195 (#homepageChanges .section-head-inline{margin-
   bottom:2px !important} at line ~9723 was winning over the plain
   class rule), and (2) the gap between the last checkbox ("Font
   change") and the "Describe the Changes" subhead below it was only
   the base 10px margin-top on .typed-changes-field, stacked layout on
   mobile so this is the only thing separating the two blocks. Added
   ~10-12px more to both, matching what was already done for desktop. */
@media(max-width:760px){
  #homepageChanges .homepage-change-requests .section-head-inline{
    margin-bottom:16px !important;
  }
  .homepage-change-requests__body .typed-changes-field{
    margin-top:22px !important;
  }
  /* v1198: per Dave, mobile only - "Describe the Changes" textarea
     didn't need to be as tall as it was (~127px, from the rows="5"
     HTML attribute). Shortened ~20% to ~102px. Desktop untouched -
     already sized separately (64px) from the v1184 side-by-side
     layout. */
  .homepage-change-requests__body .typed-changes-field textarea{
    height:102px !important;
    min-height:102px !important;
  }
}

/* v1184: per Dave (round 2) - v1182's side-by-side layout "looked
   terrible": the checkbox column was forced to 55% width even though
   the 7 short labels don't need that much room, which shoved the
   textarea way over to the right with a big dead gap in between.
   Fixed by letting the checkbox column size to its own content
   (flex:0 0 auto) instead of a fixed percentage, tightening the gap to
   ~20px, and giving the textarea the REST of the space instead of a
   narrow 320px cap - wider and shallower (roughly half the height) per
   Dave's ask, so "Describe the Changes" reads as a short, wide field
   sitting right beside the checkboxes instead of a tall box stranded
   off to the right. align-items:flex-start (already set) means the
   "you don't need to upload..." footnote automatically sits right
   under the now-shorter textarea instead of stretching down to match
   the taller checkbox column. */
@media(min-width:761px){
  .homepage-change-requests__body{
    display:flex;
    align-items:flex-start;
    gap:20px;
  }
  .homepage-change-requests__body .change-checks{
    display:flex;
    flex-direction:column;
    gap:8px;
    flex:0 0 auto;
    width:auto;
  }
  .homepage-change-requests__body .typed-changes-field{
    flex:1 1 auto;
    min-width:0;
    margin-top:0 !important;
  }
  .homepage-change-requests__body .typed-changes-field textarea{
    /* height (not just min-height) needed - the rows="5" HTML
       attribute otherwise wins and keeps it tall regardless */
    height:64px !important;
    min-height:64px;
  }
  /* v1187: per Dave (round 3), desktop only -
     Right column (label+textarea+footnote) read as sitting lower
     than the checkbox column because the footnote sentence was
     wrapping to 2 lines and stretching the column past the
     checkboxes' bottom edge. Measured: at the real column width
     (~574px) the sentence needs ~583px at 12px but only ~530px at
     11px, so a 1px font reduction is enough to pull it onto a
     single line - no widow, and the right column's total height
     now lands almost exactly level with the checkbox column
     instead of running past it. */
  .homepage-change-requests__body .typed-changes-field > em{
    font-size:11px;
    white-space:nowrap;
  }
  /* v1191: per Dave (round 4) - v1187 halved the top padding to fix an
     "too extreme" complaint, but that overcorrected and now the whole
     box reads as cramped: subhead sits right on top of the box edge,
     the checkboxes start almost flush under the subhead, and "Font
     change" (the last checkbox) has barely any breathing room before
     the box's bottom edge. Restoring normal, comfortable padding on
     all 3 spots, desktop only - not back to v1184's "too extreme"
     18px, but a middle-ground value. */
  .homepage-change-requests{
    padding-top:16px;
    padding-bottom:16px;
  }
  .homepage-change-requests .section-head-inline{
    margin-bottom:14px !important;
  }
  /* v1191 fix: the above lost to `#homepageChanges .section-head-inline
     {margin-bottom:2px !important}` (line ~9723) - an ID selector beats
     a plain class selector regardless of !important or source order, so
     the checkboxes were still sitting almost flush under the subhead.
     Re-declared with the ID included so this wins. */
  #homepageChanges .homepage-change-requests .section-head-inline{
    margin-bottom:14px !important;
  }
}

.start-modal .homepage-choice--with-changes .typed-changes-field textarea{
  background:#ffffff !important;
  border-color:rgba(28,36,42,.22) !important;
  color:#1c242a !important;
}
.start-modal .homepage-choice--with-changes .typed-changes-field textarea::placeholder{
  color:rgba(28,36,42,.45) !important;
}

.start-modal .homepage-choice--with-changes .materials-upload{
  margin-top:3px !important;
  padding:8px 18px 9px !important;
  border:1px solid rgba(255,255,255,.16) !important;
  border-radius:16px !important;
  background:rgba(0,0,0,.06) !important;
  box-shadow:none !important;
}

.start-modal .homepage-choice--with-changes .materials-upload__intro{
  margin-bottom:13px !important;
}

.start-modal .homepage-choice--with-changes .materials-upload__intro p{
  max-width:820px;
}

.start-modal .homepage-choice--with-changes .materials-upload__grid{
  gap:14px 24px;
}

.start-modal .homepage-choice--with-changes .file-field{
  padding:0 !important;
  border:0 !important;
  border-radius:0 !important;
  background:transparent !important;
  box-shadow:none !important;
}

.start-modal .homepage-choice--with-changes .file-field input[type="file"]{
  background:var(--pv-card2) !important;
  border-color:rgba(28,36,42,.28) !important;
  color:rgba(28,36,42,.55) !important;
}

.homepage-choice.is-active .homepage-approval__label,
.homepage-choice.is-active .materials-upload__intro p,
.homepage-choice.is-active .file-field span,
.homepage-choice.is-active .upload-security-note{
  color:#ffffff !important;
}
/* v1XXX: per Dave - the upload-status text ("Drag & drop or click to
   choose" / chosen filename) sits on the lighter --pv-card2 sub-panel
   inside these file-field boxes, not directly on the dark selected
   panel background. The blanket ".file-field span" white rule above
   was also catching this inner status text and making it unreadable
   over that lighter sub-panel. Force it back to the same dark gray /
   regular weight used everywhere else, with enough specificity to win
   over the rule above regardless of source order. */
.homepage-choice.is-active .file-field .file-field__status,
.homepage-choice.is-active .upload-security-note{
  color:rgba(28,36,42,.55) !important;
  font-weight:400 !important;
}
.homepage-choice.is-active .file-field em{
  color:rgba(255,255,255,.72) !important;
}
.homepage-choice.is-active .blocked-files-note{
  color:rgba(255,255,255,.85) !important;
  background:rgba(255,255,255,.12) !important;
  border-color:rgba(255,255,255,.32) !important;
}
.homepage-choice.is-active .blocked-files-note strong{
  color:#ffffff !important;
}

@media(max-width:760px){
  .start-modal .homepage-choice--with-changes .homepage-changes{
    padding-top:13px !important;
  }
  .start-modal .homepage-choice--with-changes .materials-upload{
    padding:14px 16px 16px !important; /* v877: was 0 left/right - text and
      buttons were sitting flush against the panel edges on mobile */
  }
}


/* v197: align Pay in full amount block flush right like the monthly payment rows */
.payment-choice__option{
  grid-template-columns:1fr auto !important;
  align-items:center !important;
}

.payment-choice__option > span{
  justify-self:end !important;
  text-align:right !important;
}

.payment-choice__option .estimate-breakdown{
  justify-content:end !important;
  justify-items:end !important;
  text-align:right !important;
}

.payment-choice__option .estimate-part,
.payment-choice__option .payment-project,
.payment-choice__option .payment-care{
  text-align:right !important;
  align-items:flex-end !important;
}

.payment-choice__option .estimate-part strong,
.payment-choice__option .estimate-part em,
.payment-choice__option .payment-amount,
.payment-choice__option .payment-note{
  text-align:right !important;
}

@media(max-width:760px){
  .payment-choice__option > span,
  .payment-choice__option .estimate-breakdown,
  .payment-choice__option .estimate-part,
  .payment-choice__option .payment-project,
  .payment-choice__option .payment-care,
  .payment-choice__option .estimate-part strong,
  .payment-choice__option .estimate-part em,
  .payment-choice__option .payment-amount,
  .payment-choice__option .payment-note{
    text-align:left !important;
  }

  .payment-choice__option .estimate-part,
  .payment-choice__option .payment-project,
  .payment-choice__option .payment-care{
    align-items:flex-start !important;
  }

  .payment-choice__option > span{
    justify-self:stretch !important;
  }

  .payment-choice__option .estimate-breakdown{
    justify-content:start !important;
    justify-items:start !important;
  }
}


/* v198: style all file upload controls with WebYay pill buttons, including logo/reference uploads */
.start-modal input[type="file"],
.logo-brand-details input[type="file"]{
  width:100%;
  min-height:46px;
  padding:7px 9px !important;
  border-radius:16px !important;
  background:#7E3187 !important;
  border:1px solid #7E3187 !important;
  color:#ffffff !important;
  font-family:inherit;
  font-size:12px;
  line-height:1.2;
  cursor:pointer;
}

.start-modal input[type="file"]::file-selector-button,
.logo-brand-details input[type="file"]::file-selector-button{
  appearance:none;
  border:1px solid rgba(255,255,255,.65);
  border-radius:999px;
  background:rgba(255,255,255,.16);
  color:#ffffff;
  font-family:inherit;
  font-size:12px;
  font-weight:650;
  letter-spacing:.01em;
  line-height:1;
  padding:10px 16px;
  margin:0 11px 0 0;
  cursor:pointer;
  transition:background .18s ease,color .18s ease,border-color .18s ease,transform .18s ease;
}

.start-modal input[type="file"]::-webkit-file-upload-button,
.logo-brand-details input[type="file"]::-webkit-file-upload-button{
  appearance:none;
  border:1px solid rgba(255,255,255,.65);
  border-radius:999px;
  background:rgba(255,255,255,.16);
  color:#ffffff;
  font-family:inherit;
  font-size:12px;
  font-weight:650;
  letter-spacing:.01em;
  line-height:1;
  padding:10px 16px;
  margin:0 11px 0 0;
  cursor:pointer;
  transition:background .18s ease,color .18s ease,border-color .18s ease,transform .18s ease;
}

.start-modal input[type="file"]:hover::file-selector-button,
.start-modal input[type="file"]:focus::file-selector-button,
.logo-brand-details input[type="file"]:hover::file-selector-button,
.logo-brand-details input[type="file"]:focus::file-selector-button{
  background:#ffffff;
  border-color:#ffffff;
  color:#7E3187;
}

.start-modal input[type="file"]:hover::-webkit-file-upload-button,
.start-modal input[type="file"]:focus::-webkit-file-upload-button,
.logo-brand-details input[type="file"]:hover::-webkit-file-upload-button,
.logo-brand-details input[type="file"]:focus::-webkit-file-upload-button{
  background:#ffffff;
  border-color:#ffffff;
  color:#7E3187;
}


/* v199: keep section Info pills aligned to the right of the section header instead of dropping to their own line */
.section-head-inline{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:14px;
  width:100%;
  margin:0 0 6px;
}

.section-head-inline > .homepage-approval__label{
  display:inline-flex !important;
  margin:0 !important;
}

.section-head-inline > .info-pop-trigger{
  flex:0 0 auto;
  margin:0 !important;
}

@media(max-width:640px){
  .section-head-inline{
    gap:10px;
  }
}


/* v200: make included foundation benefits interactive cards with cleaner hover feedback */
.included-benefit{
  appearance:none;
  cursor:pointer;
  text-align:left;
  position:relative;
  display:flex;
  flex-direction:column;
  justify-content:space-between;
  gap:12px;
  min-height:132px !important;
  padding:19px 20px !important;
  border-radius:22px;
  border:1px solid rgba(126,49,135,.24) !important;
  background:linear-gradient(135deg, rgba(255,255,255,.075), rgba(255,255,255,.035)) !important;
  box-shadow:0 16px 38px rgba(0,0,0,.15) !important;
  color:#fff;
  transition:transform .2s ease, border-color .2s ease, background .2s ease, box-shadow .2s ease;
}

.included-benefit:hover,
.included-benefit:focus-visible{
  transform:translateY(-3px);
  border-color:rgba(126,49,135,.68) !important;
  box-shadow:0 22px 52px rgba(0,0,0,.22) !important;
  outline:none;
}
/* v389: this rule used to also set `background:` (a gradient) on hover here.
   Because :hover has higher specificity than the later v382/v388 image-card
   rules, that shorthand was silently resetting background-size back to
   "auto" and background-position back to "0% 0%" on hover -- which is what
   made the photo jump to its native huge size and shift position. Removed. */

.included-benefit span{
  margin-bottom:0 !important;
  color:#ffffff !important;
}

.included-benefit p{
  margin:0 !important;
  color:rgba(246,241,232,.72) !important;
  font-size:14px;
  line-height:1.48;
}

.included-benefit small{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:max-content;
  margin-top:auto;
  padding:6px 10px;
  border-radius:999px;
  border:1px solid rgba(126,49,135,.42);
  color:#7E3187;
  background:rgba(126,49,135,.08);
  font-size:9px;
  line-height:1;
  font-weight:700;
  letter-spacing:.09em;
  text-transform:uppercase;
}

.included-benefit:hover small,
.included-benefit:focus-visible small{
  background:#7E3187;
  border-color:#7E3187;
  color:#1f2528;
}

.detail-modal__media[data-tone="ssl-foundation"]{
  background:url("../img/popup/SSL.jpg") center center / cover no-repeat !important;
}

.detail-modal__media[data-tone="seo-foundation"]{
  background:url("../img/popup/seo.jpg") center center / cover no-repeat !important;
}

.detail-modal__media[data-tone="mobile-foundation"]{
  background:url("../img/popup/mobile-friendly.jpg") center center / cover no-repeat !important;
}

.detail-modal__media[data-tone="launch-foundation"]{
  background:url("../img/popup/easy-setup.jpg") center center / cover no-repeat !important;
}


/* v204: hide current/proposed slider focus labels over the mobile phone preview only; keep desktop labels unchanged */
@media(max-width:760px){
  .mobile-phone-focus-label{
    display:none !important;
  }
}

/* v207: hide visible iframe scrollbars in the before/after device masks while preserving embedded page scroll */
.after-screen iframe,
.mobile-phone-after iframe,
.plan-modal-preview__screen iframe{
  scrollbar-width:none !important;
  -ms-overflow-style:none !important;
}

.after-screen iframe::-webkit-scrollbar,
.mobile-phone-after iframe::-webkit-scrollbar,
.plan-modal-preview__screen iframe::-webkit-scrollbar{
  width:0 !important;
  height:0 !important;
  display:none !important;
}


/* v221: hide visible scrollbars inside lightweight external preview shells while preserving scroll. */
.after-screen iframe,
.mobile-phone-after iframe,
.plan-modal-preview__screen iframe{
  scrollbar-width:none !important;
  -ms-overflow-style:none !important;
}

.after-screen iframe::-webkit-scrollbar,
.mobile-phone-after iframe::-webkit-scrollbar,
.plan-modal-preview__screen iframe::-webkit-scrollbar{
  width:0 !important;
  height:0 !important;
  display:none !important;
}


/* v306: Social media links section inside Homepage Change Requests */
.start-modal .homepage-social-links{
  margin-top:3px;
  padding:8px 18px 9px;
  border:1px solid rgba(28,36,42,.16);
  border-radius:16px;
  background:rgba(0,0,0,.03);
}
.homepage-choice.is-active .homepage-social-links{
  border-color:rgba(255,255,255,.16) !important;
  background:rgba(0,0,0,.06) !important;
}

.start-modal .homepage-social-links__heading{
  color:rgba(28,36,42,.78) !important;
  display:inline-flex;
  margin:0 0 8px;
}

.start-modal .homepage-social-links__intro{
  margin:0 0 12px;
  max-width:820px;
  color:rgba(28,36,42,.72);
  font-size:13px;
  line-height:1.45;
}

.start-modal .social-link-grid{
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:2px 16px;
  align-items:start;
}
@media(max-width:900px){
  .start-modal .social-link-grid{
    grid-template-columns:repeat(2,minmax(0,1fr));
  }
}

.start-modal .social-platform-option{
  display:grid;
  gap:5px;
  min-width:0;
  padding:1px 0;
  border-radius:8px;
  transition:padding .18s ease, background .18s ease;
}

.start-modal .social-platform-option:has(.social-platform-toggle:checked){
  padding:3px 0 7px;
}

.start-modal .social-platform-toggle{
  position:absolute;
  opacity:0;
  pointer-events:none;
}

.start-modal .social-platform-chip{
  display:inline-flex;
  align-items:center;
  gap:8px;
  width:max-content;
  min-height:30px;
  margin:0;
  cursor:pointer;
  color:rgba(28,36,42,.78);
  font-size:13px;
  font-weight:550;
  line-height:1.2;
}

.start-modal .social-icon{
  width:21px;
  height:21px;
  border:1px solid rgba(126,49,135,.58);
  border-radius:999px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  color:var(--gold);
  background:rgba(18,20,23,.44);
  font-size:10px;
  font-weight:800;
  line-height:1;
  font-family:inherit;
}

.start-modal .social-icon--linkedin{
  font-size:8px;
  letter-spacing:-.04em;
}

.start-modal .social-platform-toggle:checked + .social-platform-chip{
  color:#1c242a;
}

.start-modal .social-platform-toggle:checked + .social-platform-chip .social-icon{
  background:var(--gold-bg);
  border-color:var(--gold-bg);
  color:#191919;
  box-shadow:0 0 0 3px rgba(126,49,135,.12);
}

.start-modal .social-url-field{
  display:none;
  gap:6px;
  margin:0;
}

.start-modal .social-platform-toggle:checked ~ .social-url-field{
  display:grid;
}

.start-modal .social-url-field span{
  color:rgba(28,36,42,.72);
  font-size:10.5px;
  line-height:1.2;
  letter-spacing:.08em;
  text-transform:uppercase;
}

.start-modal .social-url-field input{
  background:rgba(18,20,23,.48) !important;
  border:1px solid rgba(28,36,42,.17) !important;
  border-radius:12px !important;
  color:#1c242a !important;
  font-size:13px !important;
  padding:10px 11px !important;
}

.start-modal .social-status-options{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:10px 24px;
  margin-top:14px;
}

.start-modal .social-status-options label{
  display:flex;
  align-items:center;
  gap:8px;
  color:rgba(28,36,42,.76);
  font-size:13px;
  line-height:1.25;
  cursor:pointer;
}
.start-modal .social-status-options label span{
  text-transform:none !important;
  letter-spacing:normal !important;
  font-weight:400 !important;
  font-size:13px !important;
}
.homepage-choice.is-active .social-status-options label span{
  color:rgba(255,255,255,.82) !important;
}

.start-modal .social-status-options input{
  width:12px !important;
  height:12px !important;
  min-width:12px !important;
  padding:0 !important;
  margin:0 !important;
  accent-color:var(--gold-bg);
}

@media(max-width:760px){
  .start-modal .social-link-grid,
  .start-modal .social-status-options{
    grid-template-columns:1fr;
    gap:10px;
  }
}


/* v307: use real white social-media icons, no circle/badge treatment */
.start-modal .social-platform-chip{
  gap:10px !important;
}

.start-modal .social-icon{
  width:18px !important;
  height:18px !important;
  min-width:18px !important;
  border:0 !important;
  border-radius:0 !important;
  background:transparent !important;
  color:#1c242a !important;
  box-shadow:none !important;
  padding:0 !important;
  opacity:.98 !important;
}

.start-modal .social-icon svg{
  display:block !important;
  width:18px !important;
  height:18px !important;
}

.start-modal .social-icon svg path,
.start-modal .social-icon svg rect,
.start-modal .social-icon svg circle{
  fill:#fff !important;
  stroke:#fff !important;
}

.start-modal .social-icon--instagram svg rect,
.start-modal .social-icon--instagram svg circle{
  fill:none !important;
  stroke:#fff !important;
  stroke-width:1.75 !important;
}

.start-modal .social-platform-toggle:checked + .social-platform-chip .social-icon{
  background:transparent !important;
  border:0 !important;
  color:#1c242a !important;
  box-shadow:none !important;
}

/* v308: put social-status choices above platforms and disable platform choices when selected */
.start-modal .social-status-options{
  margin:0 0 14px !important;
}

.start-modal .social-link-grid.is-disabled{
  opacity:.32 !important;
  filter:grayscale(1) !important;
  pointer-events:none !important;
  user-select:none !important;
}

.start-modal .social-link-grid.is-disabled .social-platform-chip,
.start-modal .social-link-grid.is-disabled .social-url-field,
.start-modal .social-link-grid.is-disabled .social-url-field input{
  cursor:not-allowed !important;
}

.start-modal .social-link-grid.is-disabled .social-platform-chip span,
.start-modal .social-link-grid.is-disabled .social-url-field span{
  color:rgba(28,36,42,.42) !important;
}

.start-modal .social-link-grid.is-disabled .social-icon svg path,
.start-modal .social-link-grid.is-disabled .social-icon svg rect,
.start-modal .social-link-grid.is-disabled .social-icon svg circle{
  fill:rgba(255,255,255,.44) !important;
  stroke:rgba(255,255,255,.44) !important;
}


/* v309: keep social-status controls only above platforms and group them left */
.start-modal .homepage-social-links > .social-status-options{
  display:flex !important;
  align-items:center !important;
  justify-content:flex-start !important;
  flex-wrap:wrap !important;
  gap:10px 36px !important;
  margin:0 0 14px !important;
  max-width:none !important;
}

.start-modal .homepage-social-links > .social-status-options label{
  width:auto !important;
  max-width:none !important;
  flex:0 0 auto !important;
  white-space:nowrap !important;
}

.start-modal .homepage-social-links > .social-status-options + .social-link-grid{
  margin-top:2px !important;
}

@media(max-width:760px){
  .start-modal .homepage-social-links > .social-status-options{
    display:grid !important;
    grid-template-columns:1fr !important;
    gap:10px !important;
  }
  .start-modal .homepage-social-links > .social-status-options label{
    white-space:normal !important;
    width:100% !important;
    max-width:100% !important;
  }
}


/* v311: template footer logo placement update */
.wg-footer .wg-cursive-signature-wrap{
  position:relative !important;
  right:auto !important;
  left:auto !important;
  bottom:auto !important;
  display:block !important;
  width:180px !important;
  max-width:180px !important;
  margin:28px 0 0 0 !important;
  padding:0 !important;
  z-index:2 !important;
  opacity:.78 !important;
  pointer-events:none !important;
  overflow:hidden !important;
  clip-path:inset(0 100% 0 0) !important;
  -webkit-clip-path:inset(0 100% 0 0) !important;
  animation:wgFooterTinySignatureDraw 6.5s cubic-bezier(.16,1,.3,1) .35s forwards !important;
}

.wg-footer .wg-cursive-signature-logo{
  display:block !important;
  width:180px !important;
  max-width:180px !important;
  height:auto !important;
  margin:0 !important;
  object-fit:contain !important;
}

.wg-webyay-footer-mark{
  position:absolute !important;
  right:clamp(30px, 5.8vw, 88px) !important;
  bottom:30px !important;
  width:174px !important;
  max-width:174px !important;
  z-index:6 !important;
  pointer-events:none !important;
  opacity:.96 !important;
}

.wg-webyay-footer-logo{
  display:block !important;
  width:100% !important;
  height:auto !important;
}

@media(max-width:980px){
  .wg-webyay-footer-mark{
    right:32px !important;
    width:150px !important;
  }
}

@media(max-width:760px){
  .wg-footer .wg-cursive-signature-wrap{
    width:150px !important;
    max-width:150px !important;
    margin-top:24px !important;
  }
  .wg-footer .wg-cursive-signature-logo{
    width:150px !important;
    max-width:150px !important;
  }
  .wg-webyay-footer-mark{
    position:relative !important;
    right:auto !important;
    bottom:auto !important;
    width:140px !important;
    max-width:140px !important;
    margin:26px 0 0 0 !important;
  }
}

/* v316: widen account-required account setup note to avoid single-word widow */
#accountFlowModal .account-flow-step--form > p{
  max-width:840px !important;
}


/* v323: keep upper-right header buttons initial caps, overriding older uppercase link states */
header.wg-topbar nav.wg-nav a.nav-btn,
header.wg-topbar nav.wg-nav a.nav-btn:link,
header.wg-topbar nav.wg-nav a.nav-btn:visited,
header.wg-topbar nav.wg-nav a.nav-proposed,
header.wg-topbar nav.wg-nav a.nav-proposed:link,
header.wg-topbar nav.wg-nav a.nav-proposed:visited,
header.wg-topbar nav.wg-nav a.nav-contact,
header.wg-topbar nav.wg-nav a.nav-contact:link,
header.wg-topbar nav.wg-nav a.nav-contact:visited,
header.wg-topbar nav.wg-nav button.nav-btn,
header.wg-topbar nav.wg-nav button.nav-start,
header.wg-topbar nav.wg-nav button.account-flow-open,
header.wg-topbar .mobile-nav-menu a,
header.wg-topbar .mobile-menu-start{
  text-transform:none !important;
}

/* v323: keep the large comparison-area CTA in all caps */
.comparison-side-cta__btn,
.comparison-side-cta__btn:link,
.comparison-side-cta__btn:visited{
  text-transform:uppercase !important;
}


/* v324: widen desktop footer contact form substantially.
   v987: reverted below - the form had grown wide enough on desktop to
   collide with the webyay logo mark in the bottom-right corner. Restoring
   the earlier v53 baseline width/margins instead. */


/* v327: harden header capitalization and replace inline SVG magnifier with a safe CSS icon */
html body header.wg-topbar nav.wg-nav > a.nav-btn,
html body header.wg-topbar nav.wg-nav > a.nav-btn:link,
html body header.wg-topbar nav.wg-nav > a.nav-btn:visited,
html body header.wg-topbar nav.wg-nav > button.nav-btn,
html body header.wg-topbar nav.wg-nav > button.nav-start,
html body header.wg-topbar nav.wg-nav > button.account-flow-open,
html body header.wg-topbar .mobile-nav-menu a,
html body header.wg-topbar .mobile-menu-start{
  text-transform:none !important;
}

html body .comparison-side-cta__btn,
html body .comparison-side-cta__btn:link,
html body .comparison-side-cta__btn:visited{
  text-transform:uppercase !important;
}

html body .comparison-side-cta__icon{
  position:relative !important;
  display:inline-block !important;
  width:14px !important;
  height:14px !important;
  min-width:14px !important;
  margin-right:8px !important;
  flex:0 0 14px !important;
  overflow:visible !important;
}

html body .comparison-side-cta__icon svg{
  display:none !important;
}

html body .comparison-side-cta__icon::before{
  content:"" !important;
  position:absolute !important;
  left:0 !important;
  top:0 !important;
  width:8px !important;
  height:8px !important;
  border:2px solid currentColor !important;
  border-radius:999px !important;
  background:transparent !important;
}

html body .comparison-side-cta__icon::after{
  content:"" !important;
  position:absolute !important;
  right:0 !important;
  bottom:1px !important;
  width:6px !important;
  height:2px !important;
  border-radius:999px !important;
  background:currentColor !important;
  transform:rotate(45deg) !important;
  transform-origin:center !important;
}


/* v328: final safe header capitalization and large comparison CTA treatment */
html body header.wg-topbar nav.wg-nav > a.nav-btn,
html body header.wg-topbar nav.wg-nav > a.nav-btn:link,
html body header.wg-topbar nav.wg-nav > a.nav-btn:visited,
html body header.wg-topbar nav.wg-nav > button.nav-btn,
html body header.wg-topbar nav.wg-nav > button.nav-start,
html body header.wg-topbar nav.wg-nav > button.account-flow-open,
html body header.wg-topbar .mobile-nav-menu a,
html body header.wg-topbar .mobile-menu-start{
  text-transform:none !important;
}
html body .comparison-side-cta__btn,
html body .comparison-side-cta__btn:link,
html body .comparison-side-cta__btn:visited{
  text-transform:uppercase !important;
}


/* v329: final header title-case and comparison CTA visibility/position fix */
html body header.wg-topbar nav.wg-nav,
html body header.wg-topbar nav.wg-nav > a,
html body header.wg-topbar nav.wg-nav > a:link,
html body header.wg-topbar nav.wg-nav > a:visited,
html body header.wg-topbar nav.wg-nav > button,
html body header.wg-topbar .mobile-nav-menu,
html body header.wg-topbar .mobile-nav-menu a,
html body header.wg-topbar .mobile-nav-menu button{
  text-transform:none !important;
}

html body .comparison-side-cta{
  display:none !important;
}

@media (min-width:761px){
  html body .comparison-side-cta{
    position:absolute !important;
    z-index:48 !important;
    display:flex !important;
    align-items:center !important;
    justify-content:center !important;
    top:calc((300px * var(--stage-scale)) - 2px) !important;
    left:auto !important;
    right:clamp(24px, 4vw, 72px) !important;
    width:clamp(210px, 14.5vw, 242px) !important;
    pointer-events:none !important;
  }

  html body .comparison-side-cta__btn,
  html body .comparison-side-cta__btn:link,
  html body .comparison-side-cta__btn:visited{
    pointer-events:auto !important;
    display:inline-flex !important;
    align-items:center !important;
    justify-content:center !important;
    min-height:50px !important;
    width:100% !important;
    padding:13px 18px !important;
    border-radius:999px !important;
    border:1px solid #7E3187 !important;
    background:#7E3187 !important;
    color:#fff !important;
    box-shadow:none !important;
    font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
    font-size:13px !important;
    font-weight:700 !important;
    letter-spacing:.07em !important;
    line-height:1 !important;
    text-transform:uppercase !important;
    text-decoration:none !important;
    text-align:center !important;
    white-space:nowrap !important;
  }

  html body .comparison-side-cta__btn:hover,
  html body .comparison-side-cta__btn:focus-visible{
    background:#66266E !important;
    border-color:#66266E !important;
    color:#fff !important;
    transform:translateY(-1px) !important;
  }

  html body .comparison-side-cta__icon{
    position:relative !important;
    display:inline-block !important;
    width:14px !important;
    height:14px !important;
    min-width:14px !important;
    margin-right:8px !important;
    flex:0 0 14px !important;
  }

  html body .comparison-side-cta__icon::before{
    content:"" !important;
    position:absolute !important;
    left:0 !important;
    top:0 !important;
    width:8px !important;
    height:8px !important;
    border:2px solid currentColor !important;
    border-radius:999px !important;
    background:transparent !important;
  }

  html body .comparison-side-cta__icon::after{
    content:"" !important;
    position:absolute !important;
    right:0 !important;
    bottom:1px !important;
    width:6px !important;
    height:2px !important;
    border-radius:999px !important;
    background:currentColor !important;
    transform:rotate(45deg) !important;
    transform-origin:center !important;
  }
}

@media (min-width:761px) and (max-width:1100px){
  html body .comparison-side-cta{
    top:calc((270px * var(--stage-scale)) - 2px) !important;
    right:clamp(16px, 3vw, 42px) !important;
    width:clamp(198px, 20vw, 224px) !important;
  }

  html body .comparison-side-cta__btn,
  html body .comparison-side-cta__btn:link,
  html body .comparison-side-cta__btn:visited{
    min-height:46px !important;
    padding:12px 16px !important;
    font-size:11px !important;
  }
}


/* v330 final: header nav title case, visible comparison CTA, no click-to-snap side effects */
html body header.wg-topbar nav.wg-nav > a.nav-btn,
html body header.wg-topbar nav.wg-nav > a.nav-btn:link,
html body header.wg-topbar nav.wg-nav > a.nav-btn:visited,
html body header.wg-topbar nav.wg-nav > button.nav-btn,
html body header.wg-topbar nav.wg-nav > button.nav-start,
html body header.wg-topbar nav.wg-nav > button.account-flow-open,
html body header.wg-topbar .mobile-nav-menu a,
html body header.wg-topbar .mobile-nav-menu button,
html body header.wg-topbar .mobile-menu-start{
  text-transform:none !important;
  font-variant-caps:normal !important;
}

html body .compare-layout{
  position:relative !important;
}

html body .comparison-side-cta{
  display:none !important;
}

@media (min-width:520px){
  html body .comparison-side-cta{
    position:absolute !important;
    z-index:999 !important;
    display:flex !important;
    align-items:center !important;
    justify-content:center !important;
    top:calc((305px * var(--stage-scale)) + 23px) !important;
    left:auto !important;
    right:calc(clamp(18px, 3.6vw, 64px) + 25px) !important;
    width:clamp(210px, 14.5vw, 242px) !important;
    pointer-events:none !important;
  }
  html body .comparison-side-cta__btn,
  html body .comparison-side-cta__btn:link,
  html body .comparison-side-cta__btn:visited{
    pointer-events:auto !important;
    display:inline-flex !important;
    align-items:center !important;
    justify-content:center !important;
    min-height:50px !important;
    width:100% !important;
    padding:13px 18px !important;
    border-radius:999px !important;
    border:1px solid #7E3187 !important;
    background:#7E3187 !important;
    color:#fff !important;
    box-shadow:none !important;
    font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
    font-size:13px !important;
    font-weight:700 !important;
    letter-spacing:.07em !important;
    line-height:1 !important;
    text-transform:uppercase !important;
    text-decoration:none !important;
    text-align:center !important;
    white-space:nowrap !important;
  }
  html body .comparison-side-cta__btn:hover,
  html body .comparison-side-cta__btn:focus-visible{
    background:#66266E !important;
    border-color:#66266E !important;
    color:#fff !important;
    transform:translateY(-1px) !important;
  }
  html body .comparison-side-cta__icon{
    position:relative !important;
    display:inline-block !important;
    width:14px !important;
    height:14px !important;
    min-width:14px !important;
    margin-right:8px !important;
    flex:0 0 14px !important;
    overflow:visible !important;
  }
  html body .comparison-side-cta__icon svg{
    display:none !important;
  }
  html body .comparison-side-cta__icon::before{
    content:"" !important;
    position:absolute !important;
    left:0 !important;
    top:0 !important;
    width:8px !important;
    height:8px !important;
    border:2px solid currentColor !important;
    border-radius:999px !important;
    background:transparent !important;
  }
  html body .comparison-side-cta__icon::after{
    content:"" !important;
    position:absolute !important;
    right:0 !important;
    bottom:1px !important;
    width:6px !important;
    height:2px !important;
    border-radius:999px !important;
    background:currentColor !important;
    transform:rotate(45deg) !important;
    transform-origin:center !important;
  }
}

@media (min-width:520px) and (max-width:1100px){
  html body .comparison-side-cta{
    top:calc((280px * var(--stage-scale)) - 2px) !important;
    right:clamp(14px, 2.8vw, 38px) !important;
    width:clamp(198px, 20vw, 224px) !important;
  }
  html body .comparison-side-cta__btn,
  html body .comparison-side-cta__btn:link,
  html body .comparison-side-cta__btn:visited{
    min-height:46px !important;
    padding:12px 16px !important;
    font-size:11px !important;
  }
}


/* v331: force visible comparison CTA and title-case header nav on all client landing pages */
header.wg-topbar nav.wg-nav a.nav-btn,
header.wg-topbar nav.wg-nav a.nav-btn:link,
header.wg-topbar nav.wg-nav a.nav-btn:visited,
header.wg-topbar nav.wg-nav button.nav-btn,
header.wg-topbar nav.wg-nav button.nav-btn:link,
header.wg-topbar nav.wg-nav button.nav-btn:visited,
header.wg-topbar .mobile-nav-menu a,
header.wg-topbar .mobile-menu-start{
  text-transform:none !important;
}

@media (min-width:761px){
  .comparison-card,
  .compare-layout{
    position:relative !important;
    overflow:visible !important;
  }

  .comparison-side-cta{
    position:absolute !important;
    z-index:999 !important;
    display:flex !important;
    align-items:center !important;
    justify-content:center !important;
    top:calc(640px * var(--stage-scale)) !important;
    right:calc(240px * var(--stage-scale)) !important;
    left:auto !important;
    width:clamp(210px, 15.5vw, 246px) !important;
    pointer-events:none !important;
  }

  .comparison-side-cta__btn,
  .comparison-side-cta__btn:link,
  .comparison-side-cta__btn:visited{
    pointer-events:auto !important;
    display:inline-flex !important;
    align-items:center !important;
    justify-content:center !important;
    width:100% !important;
    min-height:48px !important;
    padding:12px 16px !important;
    border-radius:999px !important;
    border:1px solid #7E3187 !important;
    background:#7E3187 !important;
    color:#fff !important;
    box-shadow:none !important;
    font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
    font-size:12px !important;
    font-weight:700 !important;
    letter-spacing:.065em !important;
    line-height:1 !important;
    text-transform:uppercase !important;
    text-decoration:none !important;
    text-align:center !important;
    white-space:nowrap !important;
  }

  .comparison-side-cta__btn:hover,
  .comparison-side-cta__btn:focus-visible{
    background:#66266E !important;
    border-color:#66266E !important;
    color:#fff !important;
  }

  .comparison-side-cta__icon{
    display:inline-flex !important;
    align-items:center !important;
    justify-content:center !important;
    width:14px !important;
    height:14px !important;
    margin-right:8px !important;
    flex:0 0 auto !important;
  }

  .comparison-side-cta__icon svg{
    display:block !important;
    width:100% !important;
    height:100% !important;
    fill:none !important;
    stroke:currentColor !important;
    stroke-width:2.25 !important;
    stroke-linecap:round !important;
    stroke-linejoin:round !important;
  }
}

@media (max-width:760px){
  .comparison-side-cta{
    display:none !important;
  }
}

/* v350: compact 2x2 monthly service choices with $19 hosting-only option */
.plan-modal .service-options{
  display:grid !important;
  grid-template-columns:repeat(2, minmax(0, 1fr)) !important;
  gap:14px !important;
  margin:18px 0 !important;
  align-items:stretch !important;
}

.plan-modal .service-option{
  display:grid !important;
  grid-template-columns:1fr !important;
  grid-auto-rows:auto !important;
  align-content:start !important;
  gap:8px !important;
  min-height:190px !important;
  padding:16px !important;
  border-radius:18px !important;
  text-align:left !important;
}

.plan-modal .service-option > span,
.plan-modal .service-option > strong,
.plan-modal .service-option > b,
.plan-modal .service-option > em,
.plan-modal .service-option > .service-account-note,
.plan-modal .service-option > .domain-note{
  grid-column:1 !important;
  grid-row:auto !important;
}

.plan-modal .service-option > span{
  margin:0 0 2px 0 !important;
  font-size:10px !important;
  line-height:1.12 !important;
}

.plan-modal .service-option > strong{
  margin:0 !important;
  font-size:18px !important;
  line-height:1.12 !important;
}

.plan-modal .service-option > em{
  margin:0 !important;
  font-size:12.5px !important;
  line-height:1.38 !important;
}

.plan-modal .service-option > .domain-note{
  margin:2px 0 0 0 !important;
  font-size:11px !important;
  line-height:1.32 !important;
}

.plan-modal .service-option > b,
.plan-modal .care-option b{
  display:none !important;
}

.plan-modal .service-option.is-selected > b,
.plan-modal .care-option.is-selected b{
  display:inline-flex !important;
}

.plan-modal .service-option[data-service="hosting-only"].is-selected,
.plan-modal .care-option[data-care="hosting-only"].is-selected{
  background-color:rgba(66,72,78,.86) !important;
  background-image:linear-gradient(135deg, rgba(126,49,135,.10), rgba(255,255,255,.035)) !important;
  border-color:rgba(126,49,135,.58) !important;
}

@media(max-width:860px){
  .plan-modal .service-options,
  .plan-modal .care-options{
    grid-template-columns:1fr !important;
  }
  .plan-modal .service-option{
    min-height:0 !important;
  }
}

/* v351: move domain notes out of pricing cards and into info-pill popups */
.plan-modal .service-option > .service-info-pill,
.plan-modal .care-option > .service-info-pill{
  appearance:none !important;
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  width:max-content !important;
  min-height:24px !important;
  margin:4px 0 0 0 !important;
  padding:6px 10px !important;
  border-radius:999px !important;
  border:1px solid rgba(126,49,135,.48) !important;
  background:rgba(126,49,135,.10) !important;
  color:#7E3187 !important;
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
  font-size:9px !important;
  font-weight:700 !important;
  line-height:1 !important;
  letter-spacing:.08em !important;
  text-transform:uppercase !important;
  cursor:pointer !important;
}

.plan-modal .service-option > .service-info-pill:hover,
.plan-modal .service-option > .service-info-pill:focus-visible,
.plan-modal .care-option > .service-info-pill:hover,
.plan-modal .care-option > .service-info-pill:focus-visible{
  background:rgba(126,49,135,.18) !important;
  border-color:rgba(126,49,135,.74) !important;
  color:#1c242a !important;
  outline:none !important;
}



/* v353: A/B/C/D service-choice dots and handwritten order */
.plan-modal .service-option,
.plan-modal .care-option{
  position:relative !important;
}

.plan-modal .service-option > .service-option__letter,
.plan-modal .care-option > .service-option__letter{
  position:absolute !important;
  top:14px !important;
  left:14px !important;
  width:24px !important;
  height:24px !important;
  min-height:24px !important;
  margin:0 !important;
  padding:0 !important;
  border-radius:999px !important;
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  background:#7E3187 !important;
  color:#ffffff !important;
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
  font-size:12px !important;
  font-weight:800 !important;
  line-height:1 !important;
  letter-spacing:0 !important;
  text-transform:uppercase !important;
  box-shadow:0 8px 18px rgba(0,0,0,.18) !important;
  z-index:2 !important;
  pointer-events:none !important;
}

.plan-modal .service-option > .service-option__eyebrow,
.plan-modal .care-option > .service-option__eyebrow{
  display:flex !important;
  align-items:center !important;
  min-height:24px !important;
  margin:0 0 2px 44px !important;
  color:#7E3187 !important;
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
  font-size:10px !important;
  font-weight:750 !important;
  line-height:1.12 !important;
  letter-spacing:.10em !important;
  text-transform:uppercase !important;
}

.plan-modal .care-option > .service-option__eyebrow{
  margin-bottom:4px !important;
}

.plan-modal .service-option > strong,
.plan-modal .care-option > strong{
  margin-top:2px !important;
}

.plan-modal .service-option > .service-info-pill,
.plan-modal .care-option > .service-info-pill{
  margin-top:2px !important;
}


/* v354: keep service choices snappy, expand explanation only on selected card */
.plan-modal .service-options,
.plan-modal .care-options{
  align-items:start !important;
}

.plan-modal .service-option,
.plan-modal .care-option{
  min-height:0 !important;
}

.plan-modal .service-option > b,
.plan-modal .care-option b{
  display:inline-flex !important;
  width:max-content !important;
  max-width:100% !important;
  margin-top:2px !important;
  padding:8px 12px !important;
  border-radius:999px !important;
  border-color:#7E3187 !important;
  background:#7E3187 !important;
  color:#ffffff !important;
  font-size:13px !important;
  font-weight:750 !important;
  line-height:1.05 !important;
  white-space:nowrap !important;
}

.plan-modal .service-option > em,
.plan-modal .care-option > em,
.plan-modal .service-option > .service-info-pill,
.plan-modal .care-option > .service-info-pill,
.plan-modal .service-option > .one-off-change-note{
  display:none !important;
}

.plan-modal .service-option.is-selected > em,
.plan-modal .service-option.is-active > em,
.plan-modal .service-option[aria-pressed="true"] > em,
.plan-modal .care-option.is-selected > em,
.plan-modal .care-option.is-active > em{
  display:block !important;
}

.plan-modal .service-option.is-selected > .service-info-pill,
.plan-modal .service-option.is-active > .service-info-pill,
.plan-modal .service-option[aria-pressed="true"] > .service-info-pill,
.plan-modal .care-option.is-selected > .service-info-pill,
.plan-modal .care-option.is-active > .service-info-pill{
  display:inline-flex !important;
}

.plan-modal .service-option.is-selected > .one-off-change-note,
.plan-modal .service-option.is-active > .one-off-change-note,
.plan-modal .service-option[aria-pressed="true"] > .one-off-change-note{
  display:block !important;
}

.plan-modal .service-option:not(.is-selected):not(.is-active):not([aria-pressed="true"]),
.plan-modal .care-option:not(.is-selected):not(.is-active){
  background:rgba(0,0,0,.045) !important;
}


/* v355: visible hover state for monthly service choice cards */
.plan-modal .service-option:hover,
.plan-modal .care-option:hover{
  background:rgba(0,0,0,.30) !important;
  border-color:rgba(126,49,135,.48) !important;
  box-shadow:inset 0 0 0 1px rgba(126,49,135,.18), 0 12px 30px rgba(0,0,0,.12) !important;
  transform:translateY(-1px) !important;
}

.plan-modal .service-option.is-selected:hover,
.plan-modal .service-option.is-active:hover,
.plan-modal .service-option[aria-pressed="true"]:hover,
.plan-modal .care-option.is-selected:hover,
.plan-modal .care-option.is-active:hover{
  background:rgba(0,0,0,.34) !important;
  border-color:rgba(126,49,135,.70) !important;
  box-shadow:inset 0 0 0 1px rgba(126,49,135,.24), 0 14px 34px rgba(0,0,0,.14) !important;
}


/* v355b: make hover beat collapsed-card background specificity */
.plan-modal .service-option:not(.is-selected):not(.is-active):not([aria-pressed="true"]):hover,
.plan-modal .care-option:not(.is-selected):not(.is-active):hover{
  background:rgba(0,0,0,.30) !important;
  border-color:rgba(126,49,135,.48) !important;
  box-shadow:inset 0 0 0 1px rgba(126,49,135,.18), 0 12px 30px rgba(0,0,0,.12) !important;
  transform:translateY(-1px) !important;
}


/* v356: A default, uniform cards, aligned option headers, shared detail panel */
.plan-modal .service-options,
.plan-modal .care-options{
  align-items:stretch !important;
  margin-bottom:12px !important;
}

.plan-modal .service-option,
.plan-modal .care-option{
  display:grid !important;
  grid-template-columns:24px minmax(0, 1fr) !important;
  column-gap:8px !important;
  row-gap:8px !important;
  align-content:start !important;
  min-height:132px !important;
  height:132px !important;
  padding:16px !important;
  overflow:hidden !important;
}

.plan-modal .service-option > .service-option__letter,
.plan-modal .care-option > .service-option__letter{
  position:static !important;
  grid-column:1 !important;
  grid-row:1 !important;
  align-self:start !important;
  justify-self:start !important;
  width:24px !important;
  height:24px !important;
  min-height:24px !important;
  margin:0 !important;
  padding:0 !important;
}

.plan-modal .service-option > .service-option__eyebrow,
.plan-modal .care-option > .service-option__eyebrow{
  grid-column:2 !important;
  grid-row:1 !important;
  align-self:start !important;
  min-height:24px !important;
  margin:0 !important;
  padding:0 !important;
  display:flex !important;
  align-items:center !important;
}

.plan-modal .service-option > strong,
.plan-modal .care-option > strong,
.plan-modal .service-option > b,
.plan-modal .care-option > b{
  grid-column:1 / -1 !important;
  grid-row:auto !important;
}

.plan-modal .service-option > em,
.plan-modal .care-option > em,
.plan-modal .service-option.is-selected > em,
.plan-modal .service-option.is-active > em,
.plan-modal .service-option[aria-pressed="true"] > em,
.plan-modal .care-option.is-selected > em,
.plan-modal .care-option.is-active > em,
.plan-modal .service-option > .service-info-pill,
.plan-modal .care-option > .service-info-pill,
.plan-modal .service-option.is-selected > .service-info-pill,
.plan-modal .service-option.is-active > .service-info-pill,
.plan-modal .service-option[aria-pressed="true"] > .service-info-pill,
.plan-modal .care-option.is-selected > .service-info-pill,
.plan-modal .care-option.is-active > .service-info-pill,
.plan-modal .service-option > .one-off-change-note,
.plan-modal .service-option.is-selected > .one-off-change-note,
.plan-modal .service-option.is-active > .one-off-change-note,
.plan-modal .service-option[aria-pressed="true"] > .one-off-change-note{
  display:none !important;
}

.plan-modal .service-choice-detail{
  margin:-2px 0 18px 0 !important;
  padding:14px 16px !important;
  border-radius:16px !important;
  border:1px solid rgba(126,49,135,.30) !important;
  background:rgba(0,0,0,.18) !important;
  color:rgba(84,98,107,.84) !important;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.035) !important;
}

.plan-modal .service-choice-detail.is-hidden{
  display:none !important;
}

.plan-modal .service-choice-detail__heading{
  display:flex !important;
  align-items:center !important;
  flex-wrap:wrap !important;
  gap:8px 10px !important;
  margin:0 0 7px 0 !important;
}

.plan-modal .service-choice-detail__heading span{
  color:#7E3187 !important;
  font-size:9px !important;
  line-height:1 !important;
  font-weight:800 !important;
  letter-spacing:.10em !important;
  text-transform:uppercase !important;
}

.plan-modal .service-choice-detail__heading strong{
  color:#1c242a !important;
  font-size:14px !important;
  line-height:1.15 !important;
  font-weight:750 !important;
}

.plan-modal .service-choice-detail__heading b{
  display:inline-flex !important;
  align-items:center !important;
  width:max-content !important;
  padding:5px 9px !important;
  border-radius:999px !important;
  background:#7E3187 !important;
  color:#ffffff !important;
  font-size:11px !important;
  line-height:1 !important;
  font-weight:800 !important;
}

.plan-modal .service-choice-detail p,
.plan-modal .service-choice-detail small{
  display:block !important;
  margin:0 !important;
  color:rgba(84,98,107,.74) !important;
  font-size:12.5px !important;
  line-height:1.42 !important;
  letter-spacing:0 !important;
}

.plan-modal .service-choice-detail small{
  margin-top:6px !important;
}

.plan-modal .service-choice-detail__actions{
  margin-top:10px !important;
}

.plan-modal .service-choice-detail__pill{
  margin:0 !important;
}

@media(max-width:860px){
  .plan-modal .service-option,
  .plan-modal .care-option{
    height:auto !important;
    min-height:124px !important;
  }
}


/* v356b: style the Domain Note button inside the shared detail panel */
.plan-modal .service-choice-detail__pill{
  appearance:none !important;
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  width:max-content !important;
  min-height:24px !important;
  margin:0 !important;
  padding:6px 10px !important;
  border-radius:999px !important;
  border:1px solid rgba(126,49,135,.48) !important;
  background:rgba(126,49,135,.10) !important;
  color:#7E3187 !important;
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
  font-size:9px !important;
  font-weight:800 !important;
  line-height:1 !important;
  letter-spacing:.08em !important;
  text-transform:uppercase !important;
  cursor:pointer !important;
}

.plan-modal .service-choice-detail__pill:hover,
.plan-modal .service-choice-detail__pill:focus-visible{
  background:rgba(126,49,135,.18) !important;
  border-color:rgba(126,49,135,.74) !important;
  color:#1c242a !important;
  outline:none !important;
}

/* v357: selected monthly care tally under the one-time project price */
.plan-modal .plan-summary__row{
  align-items:flex-start !important;
  flex-wrap:wrap !important;
  row-gap:0 !important;
}

.plan-modal #planBasePrice{
  display:block !important;
  text-align:right !important;
}

.plan-modal .plan-base-monthly{
  display:block !important;
  flex:0 0 100% !important;
  margin-top:4px !important;
  color:#1c242a !important;
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
  font-size:15px !important;
  font-weight:500 !important; /* v663/664: live computed-style check showed $59/mo (#planBasePrice) actually renders at weight 500 (inherited down through .plan-card__title's 500 rule, not browser-bold 700 as first assumed) - corrected from 800, then from a wrong 700 guess, to the real measured 500 */
  line-height:1.15 !important;
  letter-spacing:0 !important;
  text-align:right !important;
  text-transform:none !important;
  white-space:nowrap !important;
}

.plan-modal .plan-base-monthly.is-muted{
  color:rgba(84,98,107,.76) !important;
  font-size:13px !important;
  font-weight:700 !important;
}

.plan-modal .plan-base-monthly.is-hidden{
  display:none !important;
}

/* v358: place monthly tally in the Monthly Website Care row under the separator */
.plan-modal .plan-summary__row{
  align-items:baseline !important;
  flex-wrap:nowrap !important;
}

.plan-modal .plan-summary__section-title{
  display:flex !important;
  align-items:baseline !important;
  justify-content:space-between !important;
  gap:18px !important;
}

.plan-modal .plan-base-monthly{
  flex:0 0 auto !important;
  margin:0 0 0 auto !important;
  color:#1c242a !important;
  font-size:15px !important;
  font-weight:500 !important; /* v663/664: corrected to the real measured $59/mo weight (500, not 700) */
  line-height:1.15 !important;
  text-align:right !important;
  white-space:nowrap !important;
}

.plan-modal .plan-base-monthly.is-muted{
  color:rgba(84,98,107,.72) !important;
  font-size:13px !important;
  font-weight:750 !important;
}

/* v359: show selected logo add-on amount aligned with the other right-side tallies */
.plan-modal .logo-addon-heading{
  display:flex !important;
  align-items:baseline !important;
  justify-content:space-between !important;
  gap:18px !important;
}

.plan-modal .plan-logo-amount{
  flex:0 0 auto !important;
  margin:0 0 0 auto !important;
  color:#1c242a !important;
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
  font-size:15px !important;
  font-weight:500 !important; /* v681: matched to the other header prices ($49/mo, $59/mo) - was 800, visibly bolder/bigger */
  line-height:1.15 !important;
  text-align:right !important;
  white-space:nowrap !important;
}

.plan-modal .plan-logo-amount.is-hidden{
  display:none !important;
}

/* v360: lead with 12-month website payment amount in the top project row */
.plan-modal #planBasePrice{
  display:grid !important;
  justify-items:end !important;
  gap:3px !important;
  text-align:right !important;
}

.plan-modal .plan-base-payment-amount{
  display:block !important;
  color:#1c242a !important;
  font:inherit !important;
  font-size:15px !important; /* v681: was inheriting 17px from #planBasePrice's larger clamp() - explicit 15px to match every other header price ($49/mo, $15/mo) */
  line-height:.95 !important;
  letter-spacing:0 !important; /* v710: was "inherit", which pulled in #planBasePrice's own
    -.035em (a leftover from when that element displayed a much bigger 30-42px price).
    That's why "$59/mo" read noticeably tighter than "$49/mo" (.plan-side-payment-amount,
    which already uses 0 directly, not inherited). Matched to 0 so kerning is consistent everywhere. */
  white-space:nowrap !important;
}

.plan-modal .plan-base-payment-note{
  display:block !important;
  margin:0 !important;
  color:rgba(84,98,107,.74) !important;
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
  font-size:11.5px !important; /* v689: matched to the other two "for 12 months" notes ($19/mo, $15/mo) - was 13px, visibly larger */
  font-style:normal !important;
  font-weight:750 !important;
  line-height:1.1 !important;
  letter-spacing:0 !important;
  text-align:right !important;
  white-space:nowrap !important;
}

/* v361: soften the large top website price display */
.plan-modal .plan-summary__row #planBasePrice{
  font-size:clamp(30px, 3vw, 42px) !important;
  letter-spacing:-.035em !important;
}

.plan-modal .plan-base-payment-amount{
  /* v681: this "inherit" was overriding the explicit 15px set above,
     pulling the 17px clamp() size from #planBasePrice's parent instead */
}

/* v362: tighten the package modal intro so pricing choices start higher */
.plan-modal__panel{
  padding:clamp(22px, 3.4vw, 40px) !important;
}

.plan-modal__header{
  margin-bottom:16px !important;
}

.plan-modal__header .modal-progress{
  margin-bottom:10px !important;
}

.plan-modal__header .modal-progress__step{
  min-height:28px !important;
  padding:7px 10px !important;
}

.plan-modal__header .small-label{
  display:block !important;
  margin-bottom:4px !important;
}

.plan-modal__header h2{
  margin:4px 0 7px !important;
  font-size:clamp(36px, 4vw, 52px) !important;
  line-height:.98 !important;
  letter-spacing:-.04em !important;
}

.plan-modal__header p{
  margin:0 !important;
  color:rgba(84,98,107,.74) !important;
  font-size:15.5px !important;
  line-height:1.42 !important;
}

.plan-modal__body{
  gap:14px !important;
}

@media (min-width: 961px){
  .plan-modal__header{
    min-height:112px !important;
  }

  .plan-modal__header .small-label,
  .plan-modal__header h2,
  .plan-modal__header p{
    max-width:480px !important; /* v1013: was 650px, then 560px (still
      overlapped by 23-40px measured live across 1024-1920px widths) -
      this rule (being !important + latest in source order) was the one
      actually governing the header text width, silently beating an
      earlier calc()-based attempt at this same fix. Narrowed directly
      here, verified with live measurement (not just math) across 4
      viewport widths, to clear the plan-modal-preview after it grew
      20% and shifted left. */
  }

  .plan-modal__header p{
    width:480px !important;
  }

  .plan-modal-preview{
    top:-25px !important;
    right:20px !important;
    width:247px !important;
    height:139px !important;
  }

  .plan-modal-preview__stage{
    transform:scale(.120605) !important;
  }
}

@media (max-width: 760px){
  .plan-modal__header h2{
    font-size:clamp(32px, 9vw, 42px) !important;
  }

  .plan-modal__header p{
    font-size:14.5px !important;
    line-height:1.38 !important;
  }
}

/* v363: right-align payment amount groups and soften Pay in full amount size */
.plan-modal .payment-choice__option{
  display:grid !important;
  grid-template-columns:minmax(0, 1fr) minmax(0, 390px) !important;
  align-items:center !important;
  column-gap:18px !important;
}

/* v505: the fixed 390px amount column squeezed the label column so
   "3/6/12 monthly payments" wrapped ("payments" dropping to its own line)
   even at normal desktop widths, not just mobile - the earlier mobile-only
   fix (v502) didn't cover this. Force the label onto one line and give it
   a bit more breathing room by trimming the amount column's max-width. */
.plan-modal .payment-choice__option{
  grid-template-columns:minmax(0, 1fr) minmax(0, 340px) !important;
}
.plan-modal .payment-choice__option strong{
  white-space:nowrap !important;
}

.plan-modal .payment-choice__option > span{
  justify-self:end !important;
  width:100% !important;
  min-width:0 !important;
  max-width:390px !important;
  text-align:right !important;
}

.plan-modal .payment-choice__option .estimate-breakdown,
.plan-modal .payment-choice__option .payment-project,
.plan-modal .payment-choice__option .payment-care{
  margin-left:auto !important;
  text-align:right !important;
  justify-content:flex-end !important;
  justify-items:end !important;
  align-items:flex-end !important;
}

.plan-modal .payment-choice__option[data-payment="full"] .estimate-breakdown{
  display:flex !important;
  flex-wrap:nowrap !important;
  align-items:flex-start !important;
  justify-content:flex-end !important;
  gap:18px !important;
  width:max-content !important;
  max-width:100% !important;
}

.plan-modal .payment-choice__option[data-payment="full"] .estimate-part{
  min-width:0 !important;
  text-align:right !important;
  justify-items:end !important;
}

.plan-modal .payment-choice__option[data-payment="full"] .estimate-part strong{
  font-size:clamp(20px, 2vw, 26px) !important;
  line-height:1.02 !important;
  font-weight:750 !important;
  letter-spacing:-.035em !important;
}

.plan-modal .payment-choice__option[data-payment="full"] .estimate-part em{
  font-size:11.5px !important;
  line-height:1.1 !important;
}

@media(max-width:760px){
  .plan-modal .payment-choice__option{
    display:flex !important;
    flex-direction:column !important;
    align-items:flex-start !important;
  }

  .plan-modal .payment-choice__option > span,
  .plan-modal .payment-choice__option .estimate-breakdown,
  .plan-modal .payment-choice__option .payment-project,
  .plan-modal .payment-choice__option .payment-care{
    width:100% !important;
    max-width:100% !important;
    margin-left:0 !important;
    text-align:left !important;
    justify-content:flex-start !important;
    justify-items:start !important;
    align-items:flex-start !important;
  }

  .plan-modal .payment-choice__option[data-payment="full"] .estimate-breakdown{
    flex-direction:column !important;
    gap:10px !important;
  }

  .plan-modal .payment-choice__option[data-payment="full"] .estimate-part,
  .plan-modal .payment-choice__option[data-payment="full"] .estimate-part strong,
  .plan-modal .payment-choice__option[data-payment="full"] .estimate-part em{
    text-align:left !important;
    justify-items:start !important;
  }
}


/* v364: compact inside pages, financed add-on tallies, and even payment row emphasis */
.plan-modal .plan-summary__row + .plan-pages{
  display:grid !important;
  grid-template-columns:minmax(170px, auto) minmax(0, 1fr) auto !important;
  gap:8px 14px !important;
  align-items:center !important;
  margin-top:12px !important;
  margin-bottom:16px !important;
  padding:0 0 14px 0 !important;
  border-bottom:1px solid rgba(28,36,42,.18) !important;
}

.plan-modal .plan-summary__row + .plan-pages > label{
  grid-column:1 / 3 !important;
  grid-row:1 !important;
  display:inline-flex !important;
  align-items:center !important;
  justify-content:flex-start !important;
  gap:8px !important;
  margin:0 !important;
  color:#7E3187 !important;
  font-size:11px !important;
  line-height:1.15 !important;
  letter-spacing:.16em !important;
  text-transform:uppercase !important;
}

.plan-modal .plan-pages-info-pill{
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  min-height:23px !important;
  padding:5px 11px !important;
  border:1px solid rgba(126,49,135,.62) !important;
  border-radius:999px !important;
  background:rgba(126,49,135,.08) !important;
  color:#7E3187 !important;
  font-size:10px !important;
  font-weight:800 !important;
  letter-spacing:.08em !important;
  line-height:1 !important;
  text-transform:uppercase !important;
  cursor:pointer !important;
}

.plan-modal .plan-pages-info-pill:hover,
.plan-modal .plan-pages-info-pill:focus-visible{
  background:rgba(126,49,135,.18) !important;
  border-color:rgba(126,49,135,.95) !important;
}

.plan-modal .plan-pages-amount{
  grid-column:3 !important;
  grid-row:1 / 3 !important;
  justify-self:end !important;
  align-self:start !important;
  margin:0 !important;
  text-align:right !important;
  color:#1c242a !important;
  min-width:92px !important;
  white-space:nowrap !important;
}

.plan-modal .plan-pages-amount.is-hidden{
  display:none !important;
}

.plan-modal .plan-side-payment-amount{
  display:block !important;
  color:#1c242a !important;
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
  font-size:15px !important;
  font-weight:500 !important; /* v663/664: corrected to the real measured $59/mo weight (500, not 700) */
  letter-spacing:0 !important;
  line-height:1.1 !important;
  text-align:right !important;
  white-space:nowrap !important;
}

.plan-modal .plan-side-payment-note{
  display:block !important;
  margin:2px 0 0 0 !important;
  color:rgba(84,98,107,.72) !important;
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
  font-size:11.5px !important;
  font-style:normal !important;
  font-weight:750 !important;
  line-height:1.1 !important;
  letter-spacing:0 !important;
  text-align:right !important;
  white-space:nowrap !important;
}

.plan-modal .plan-summary__row + .plan-pages .page-stepper{
  grid-column:1 !important;
  grid-row:2 !important;
  width:180px !important;
  max-width:190px !important;
  margin:0 !important;
}

.plan-modal .plan-summary__row + .plan-pages > p{
  grid-column:2 !important;
  grid-row:2 !important;
  max-width:330px !important;
  margin:0 !important;
  color:rgba(28,36,42,.78) !important; /* v703: was rgba(84,98,107,.74) - a subtly dimmer/warmer white than the paragraph above it (rgba(28,36,42,.78)), even though both use the same .plan-row__desc class. This older, higher-specificity sibling-combinator rule was quietly winning. Matched exactly so both read identical. */
  font-size:12.5px !important;
  line-height:1.32 !important;
}

.plan-modal .plus-pages-examples{
  display:none !important;
}

.plan-modal .logo-addon-heading .plan-logo-amount{
  display:grid !important;
  justify-items:end !important;
  gap:2px !important;
}

.plan-modal .logo-addon-heading .plan-logo-amount.is-hidden{
  display:none !important;
}

.plan-modal .payment-choice__option .estimate-part strong,
.plan-modal .payment-choice__option .payment-amount{
  color:rgba(84,98,107,.62) !important;
  font-size:13.5px !important;
  line-height:1.15 !important;
  font-weight:800 !important;
  letter-spacing:0 !important;
}

.plan-modal .payment-choice__option .estimate-part em,
.plan-modal .payment-choice__option .payment-note{
  color:rgba(84,98,107,.54) !important;
  font-size:12px !important;
  line-height:1.12 !important;
  font-weight:750 !important;
  letter-spacing:0 !important;
}

.plan-modal .payment-choice__option.is-selected .estimate-part strong,
.plan-modal .payment-choice__option.is-selected .estimate-part em,
.plan-modal .payment-choice__option.is-selected .payment-amount,
.plan-modal .payment-choice__option.is-selected .payment-note{
  color:#1c242a !important;
}

.plan-modal .payment-choice__option[data-payment="full"] .estimate-breakdown{
  gap:14px !important;
}

.plan-modal .payment-choice__option[data-payment="full"] .estimate-part strong{
  color:rgba(84,98,107,.62) !important;
  font-size:13.5px !important;
  line-height:1.15 !important;
  font-weight:800 !important;
  letter-spacing:0 !important;
}

.plan-modal .payment-choice__option[data-payment="full"] .estimate-part em{
  color:rgba(84,98,107,.54) !important;
  font-size:12px !important;
  line-height:1.12 !important;
  font-weight:750 !important;
}

.plan-modal .payment-choice__option.is-selected[data-payment="full"] .estimate-part strong,
.plan-modal .payment-choice__option.is-selected[data-payment="full"] .estimate-part em{
  color:#1c242a !important;
}

@media(max-width:760px){
  .plan-modal .plan-summary__row + .plan-pages{
    grid-template-columns:1fr !important;
    gap:10px !important;
  }

  .plan-modal .plan-summary__row + .plan-pages > label,
  .plan-modal .plan-pages-amount,
  .plan-modal .plan-summary__row + .plan-pages .page-stepper,
  .plan-modal .plan-summary__row + .plan-pages > p{
    grid-column:1 !important;
    grid-row:auto !important;
  }

  .plan-modal .plan-pages-amount{
    justify-self:start !important;
    text-align:left !important;
  }

  .plan-modal .plan-side-payment-amount,
  .plan-modal .plan-side-payment-note{
    text-align:left !important;
  }

  .plan-modal .plan-summary__row + .plan-pages > p{
    max-width:none !important;
  }
}


/* v365: show homepage card as 12-month payment before package popup */
.investment-card h3.investment-financed-price{
  display:grid !important;
  justify-items:start !important;
  gap:4px !important;
  margin:0 0 12px !important;
  font-size:clamp(34px,3.4vw,52px) !important;
  line-height:.96 !important;
  letter-spacing:-.045em !important;
  font-weight:500 !important;
}

.investment-card h3.investment-financed-price strong{
  display:block !important;
  color:#f7f4ed !important;
  font:inherit !important;
  letter-spacing:inherit !important;
  line-height:inherit !important;
  white-space:nowrap !important;
}

.investment-card h3.investment-financed-price em{
  display:block !important;
  margin:0 !important;
  color:rgba(246,241,232,.74) !important;
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
  font-size:13px !important;
  font-style:normal !important;
  font-weight:750 !important;
  letter-spacing:0 !important;
  line-height:1.1 !important;
  white-space:nowrap !important;
}


/* v369: make selected monthly care option unmistakably active */
.plan-modal .service-option,
.plan-modal .care-option{
  transition:
    opacity .18s ease,
    transform .18s ease,
    background-color .18s ease,
    border-color .18s ease,
    box-shadow .18s ease,
    color .18s ease !important;
}

.plan-modal .service-option.is-selected,
.plan-modal .service-option.is-active,
.plan-modal .service-option[aria-pressed="true"],
.plan-modal .care-option.is-selected,
.plan-modal .care-option.is-active{
  opacity:1 !important;
  background:#050505 !important;
  background-image:none !important;
  border-color:rgba(126,49,135,.92) !important;
  box-shadow:0 18px 42px rgba(0,0,0,.35), inset 0 0 0 1px rgba(126,49,135,.18) !important;
  color:#1c242a !important;
  filter:none !important;
}

.plan-modal .service-option.is-selected > *,
.plan-modal .service-option.is-active > *,
.plan-modal .service-option[aria-pressed="true"] > *,
.plan-modal .care-option.is-selected > *,
.plan-modal .care-option.is-active > *{
  opacity:1 !important;
  filter:none !important;
}

.plan-modal .service-option:not(.is-selected):not(.is-active):not([aria-pressed="true"]),
.plan-modal .care-option:not(.is-selected):not(.is-active){
  opacity:.52 !important;
  background:rgba(13,16,18,.34) !important;
  background-image:none !important;
  border-color:rgba(84,98,107,.13) !important;
  box-shadow:none !important;
  color:rgba(84,98,107,.58) !important;
  filter:saturate(.72) !important;
}

.plan-modal .service-option:not(.is-selected):not(.is-active):not([aria-pressed="true"]) > *,
.plan-modal .care-option:not(.is-selected):not(.is-active) > *{
  opacity:.78 !important;
}

.plan-modal .service-option:not(.is-selected):not(.is-active):not([aria-pressed="true"]):hover,
.plan-modal .service-option:not(.is-selected):not(.is-active):not([aria-pressed="true"]):focus-visible,
.plan-modal .care-option:not(.is-selected):not(.is-active):hover,
.plan-modal .care-option:not(.is-selected):not(.is-active):focus-visible{
  opacity:1 !important;
  transform:translateY(-2px) !important;
  background:rgba(7,9,10,.88) !important;
  border-color:rgba(126,49,135,.56) !important;
  box-shadow:0 16px 36px rgba(0,0,0,.26), inset 0 0 0 1px rgba(126,49,135,.10) !important;
  color:#1c242a !important;
  filter:none !important;
}

.plan-modal .service-option:not(.is-selected):not(.is-active):not([aria-pressed="true"]):hover > *,
.plan-modal .service-option:not(.is-selected):not(.is-active):not([aria-pressed="true"]):focus-visible > *,
.plan-modal .care-option:not(.is-selected):not(.is-active):hover > *,
.plan-modal .care-option:not(.is-selected):not(.is-active):focus-visible > *{
  opacity:1 !important;
}

.plan-modal .service-option.is-selected:hover,
.plan-modal .service-option.is-active:hover,
.plan-modal .service-option[aria-pressed="true"]:hover,
.plan-modal .care-option.is-selected:hover,
.plan-modal .care-option.is-active:hover{
  transform:none !important;
  background:#050505 !important;
  border-color:rgba(126,49,135,.98) !important;
}

/* v372: lower inside-pages monthly tally away from top separator */
@media (min-width:761px){
  .plan-modal .plan-pages-amount{
    margin-top:18px !important;
  }
}
@media (max-width:760px){
  .plan-modal .plan-pages-amount{
    margin-top:0 !important;
  }
}

/* v373: keep value-card summary row in a single desktop line */
@media (min-width:1180px){
  .value-intro + .notes{
    grid-template-columns:repeat(6, minmax(0, 1fr)) !important;
    gap:14px !important;
  }

  .value-intro + .notes .note-item{
    min-width:0 !important;
    padding:22px 20px !important;
    border-radius:18px !important;
  }

  .value-intro + .notes .note-item span{
    margin-bottom:11px !important;
    font-size:11px !important;
    line-height:1.05 !important;
  }

  .value-intro + .notes .note-item h3{
    margin:0 0 9px !important;
    font-size:clamp(17px, 1.08vw, 20px) !important;
    line-height:1.14 !important;
    letter-spacing:0 !important;
  }

  .value-intro + .notes .note-item p{
    font-size:clamp(12.5px, .83vw, 14px) !important;
    line-height:1.48 !important;
  }
}

@media (min-width:901px) and (max-width:1179px){
  .value-intro + .notes{
    grid-template-columns:repeat(3, minmax(0, 1fr)) !important;
  }
}

/* v374: soften selected care-card contrast and restore inactive readability */
.plan-modal .service-option.is-selected,
.plan-modal .service-option.is-active,
.plan-modal .service-option[aria-pressed="true"],
.plan-modal .care-option.is-selected,
.plan-modal .care-option.is-active{
  background:#22272a !important;
  background-image:linear-gradient(135deg, rgba(255,255,255,.055), rgba(255,255,255,.015)) !important;
  border-color:rgba(126,49,135,.86) !important;
  box-shadow:0 16px 36px rgba(0,0,0,.28), inset 0 0 0 1px rgba(126,49,135,.12) !important;
}

.plan-modal .service-option.is-selected:hover,
.plan-modal .service-option.is-active:hover,
.plan-modal .service-option[aria-pressed="true"]:hover,
.plan-modal .care-option.is-selected:hover,
.plan-modal .care-option.is-active:hover{
  background:#22272a !important;
  background-image:linear-gradient(135deg, rgba(255,255,255,.06), rgba(255,255,255,.018)) !important;
  border-color:rgba(126,49,135,.92) !important;
}

.plan-modal .service-option:not(.is-selected):not(.is-active):not([aria-pressed="true"]),
.plan-modal .care-option:not(.is-selected):not(.is-active){
  opacity:.74 !important;
  background:rgba(45,50,53,.72) !important;
  background-image:none !important;
  border-color:rgba(84,98,107,.18) !important;
  color:rgba(84,98,107,.76) !important;
  filter:saturate(.88) !important;
}

.plan-modal .service-option:not(.is-selected):not(.is-active):not([aria-pressed="true"]) > *,
.plan-modal .care-option:not(.is-selected):not(.is-active) > *{
  opacity:.92 !important;
}

/* v375: homepage-only card icon */
.investment-card--primary.price-trigger{
  position:relative !important;
}

.investment-card--primary.price-trigger::after{
  content:"";
  position:absolute;
  top:46px;
  right:59px;
  width:clamp(123px, 27.5%, 167px);
  aspect-ratio:188.87 / 117.914;
  background:url('../img/homepg-only-icon.svg') center / contain no-repeat;
  opacity:.30;
  pointer-events:none;
  z-index:0;
}

.investment-card--primary.price-trigger > *{
  position:relative;
  z-index:1;
}

@media (max-width:760px){
  .investment-card--primary.price-trigger::after{
    top:18px;
    right:24px;
    width:clamp(90px, 28vw, 122px);
    opacity:.24;
  }
}

/* v376: homepage plus inside-pages card icon */
.investment-card.price-trigger--plus{
  position:relative !important;
}

.investment-card.price-trigger--plus::after{
  content:"";
  position:absolute;
  top:48px;
  right:55px;
  width:clamp(130px, 30.8%, 174px);
  aspect-ratio:207.652 / 127.305;
  background:url('../img/homepg-inside-icon.svg') center / contain no-repeat;
  opacity:.30;
  pointer-events:none;
  z-index:0;
}

.investment-card.price-trigger--plus > *{
  position:relative;
  z-index:1;
}

@media (max-width:760px){
  .investment-card.price-trigger--plus::after{
    top:22px;
    right:24px;
    width:clamp(91px, 28vw, 122px);
    opacity:.24;
  }
}

/* v377: remove visible info pills from included foundation cards */
.included-benefit small{
  display:none !important;
}

/* v378: remove duplicate separator below inside-pages row */
.plan-modal .plan-summary__row + .plan-pages{
  border-bottom:0 !important;
}

/* v379: stack Pay in full amount details like monthly payment rows */
@media (min-width:761px){
  .plan-modal .payment-choice__option[data-payment="full"] .estimate-breakdown{
    display:grid !important;
    grid-auto-flow:row !important;
    grid-template-columns:1fr !important;
    gap:8px !important;
    width:max-content !important;
    max-width:100% !important;
    margin-left:auto !important;
    justify-items:end !important;
    align-items:end !important;
    text-align:right !important;
  }

  .plan-modal .payment-choice__option[data-payment="full"] .estimate-part{
    display:grid !important;
    gap:1px !important;
    justify-items:end !important;
    align-items:end !important;
    text-align:right !important;
  }
}

/* v380: lighten modal backdrops while preserving blur */
.plan-modal__backdrop,
.start-modal__backdrop,
.account-flow-modal__backdrop,
.detail-modal__backdrop{
  background:rgba(8,10,12,.48) !important;
  backdrop-filter:blur(18px) saturate(1.08) !important;
  -webkit-backdrop-filter:blur(18px) saturate(1.08) !important;
}

/* v382: image-backed included foundation cards */
/* v388: border switched from a real stroke to an inset box-shadow, and the
   pseudo-element overlays extended 1px past each edge. A real `border` +
   `overflow:hidden` + `border-radius` on the same element leaves a hairline
   sub-pixel gap at the corners where the browser's clip mask and border
   stroke don't perfectly agree, which is the "thin light strip" of raw
   image showing at the bottom of each card. */
.included-benefit{
  min-height:164px !important;
  padding:0 !important;
  overflow:hidden !important;
  justify-content:flex-end !important;
  gap:0 !important;
  isolation:isolate !important;
  border:none !important;
  background-position:center center !important;
  background-size:cover !important;
  background-repeat:no-repeat !important;
  box-shadow:0 18px 44px rgba(0,0,0,.18), inset 0 0 0 1px rgba(126,49,135,.34) !important;
}

.included-benefit::before{
  content:"";
  position:absolute;
  inset:-1px;
  pointer-events:none;
  background:linear-gradient(0deg, rgba(6,8,10,.92) 0%, rgba(6,8,10,.80) 40%, rgba(6,8,10,.42) 72%, rgba(6,8,10,.16) 100%);
  z-index:0;
}

.included-benefit::after{
  content:"";
  position:absolute;
  inset:-1px;
  pointer-events:none;
  background:linear-gradient(135deg, rgba(255,255,255,.05), rgba(126,49,135,.05));
  z-index:0;
  opacity:.85;
}

.included-benefit[data-detail="ssl-foundation"]{
  background-image:url("../img/popup/SSL.jpg") !important;
}

.included-benefit[data-detail="seo-foundation"]{
  background-image:url("../img/popup/seo.jpg") !important;
}

.included-benefit[data-detail="mobile-foundation"]{
  background-image:url("../img/popup/mobile-friendly.jpg") !important;
}

.included-benefit[data-detail="launch-foundation"]{
  background-image:url("../img/popup/easy-setup.jpg") !important;
}

.included-benefit span,
.included-benefit p{
  position:relative !important;
  z-index:1 !important;
  max-width:100% !important;
}

.included-benefit span{
  margin:0 20px 5px !important;
  color:#ffffff !important;
}

.included-benefit p{
  margin:0 20px 20px !important;
  color:#fff !important;
  font-size:14.5px !important;
  line-height:1.42 !important;
}

/* v388: no movement/transform on hover so the image stays locked in place;
   only the border glow and shadow change. Click still opens the detail popup. */
.included-benefit:hover,
.included-benefit:focus-visible{
  transform:none !important;
  box-shadow:0 24px 58px rgba(0,0,0,.28), inset 0 0 0 1px rgba(126,49,135,.76) !important;
}

.included-benefit:hover::before,
.included-benefit:focus-visible::before{
  background:linear-gradient(0deg, rgba(4,6,8,.90) 0%, rgba(4,6,8,.72) 38%, rgba(4,6,8,.24) 72%, rgba(4,6,8,.08) 100%);
}

@media (max-width:760px){
  .included-benefit{
    min-height:148px !important;
  }
  .included-benefit span{
    margin:0 18px 5px !important;
  }
  .included-benefit p{
    margin:0 18px 18px !important;
    font-size:14px !important;
  }
}

/* v540: mobile-only - stack the 4 foundation-benefit cards edge-to-edge,
   touching, square corners, same full-bleed treatment already used for the
   "what changes beyond the look" 6-card strip below. Desktop grid layout
   (rounded, gapped, 2x2/4-across) is untouched. */
@media (max-width:760px){
  html body .investment-section .included-benefits,
  .investment-section .included-benefits,
  .included-benefits{
    max-width:none !important;
    width:100vw !important;
    margin-left:50% !important;
    margin-right:50% !important;
    margin-top:60px !important;
    margin-bottom:0 !important;
    transform:translateX(-50%) !important;
    display:flex !important;
    flex-direction:column !important;
    gap:7px !important;
  }

  .included-benefit{
    border-radius:0 !important;
    box-shadow:none !important;
    min-height:180px !important;
    width:100% !important;
  }
}

/* v383: default-highlight homepage-only package card */
.investment-card--primary.price-trigger{
  border-color:rgba(126,49,135,.68) !important;
  background:
    radial-gradient(circle at 18% 22%, rgba(126,49,135,.18), transparent 36%),
    linear-gradient(135deg, rgba(126,49,135,.15), rgba(255,255,255,.055) 46%, rgba(0,0,0,.15)) !important;
  box-shadow:0 18px 48px rgba(0,0,0,.24), inset 0 0 0 1px rgba(126,49,135,.10) !important;
}

.investment-card--primary.price-trigger::before{
  opacity:1 !important;
}

.investment-card--primary.price-trigger:hover,
.investment-card--primary.price-trigger:focus-visible{
  transform:translateY(-3px) !important;
  border-color:rgba(126,49,135,.82) !important;
  background:
    radial-gradient(circle at 18% 22%, rgba(126,49,135,.22), transparent 36%),
    linear-gradient(135deg, rgba(126,49,135,.19), rgba(255,255,255,.065) 46%, rgba(0,0,0,.16)) !important;
  box-shadow:0 26px 70px rgba(0,0,0,.28), 0 0 0 1px rgba(126,49,135,.12) !important;
}

/* v384: make selected care detail read as support text, not a fifth option */
/* v393: drop the panel background entirely so this text sits directly on the
   modal's own background instead of its own lighter gray box. */
.plan-modal .service-choice-detail{
  margin:10px 0 18px 0 !important;
  padding:13px 0 14px !important;
  border:0 !important;
  border-radius:0 !important;
  background:none !important;
  box-shadow:none !important;
  color:rgba(84,98,107,.84) !important;
}

.plan-modal .service-choice-detail__heading{
  gap:8px 10px !important;
  margin:0 0 7px 0 !important;
}

.plan-modal .service-choice-detail__heading b{
  display:inline !important;
  width:auto !important;
  padding:0 !important;
  border-radius:0 !important;
  background:transparent !important;
  color:#1c242a !important;
  font-size:12px !important;
  line-height:1.15 !important;
  font-weight:800 !important;
}

.plan-modal .service-choice-detail p,
.plan-modal .service-choice-detail small{
  color:rgba(84,98,107,.76) !important;
}

.plan-modal .service-choice-detail__actions{
  margin-top:9px !important;
}

@media (max-width:760px){
  .plan-modal .service-choice-detail{
    margin:8px 0 16px 0 !important;
    padding:12px 12px 13px !important;
  }
}

/* v385: visually separate website payment from monthly care in payment rows */
.plan-modal .payment-choice__option .estimate-breakdown{
  row-gap:0 !important;
}

.plan-modal .payment-choice__option .estimate-part{
  display:grid !important;
  justify-items:end !important;
  text-align:right !important;
}

.plan-modal .payment-choice__option .estimate-part--care,
.plan-modal .payment-choice__option .payment-care{
  width:100% !important;
  min-width:112px !important;
  margin-top:8px !important;
  padding-top:9px !important;
  border-top:2px solid rgba(255,255,255,.3) !important;
}

.plan-modal .payment-choice__option.is-selected .estimate-part--care,
.plan-modal .payment-choice__option.is-selected .payment-care{
  border-top-color:rgba(28,36,42,.24) !important;
}

.plan-modal .payment-choice__option .estimate-part--care strong,
.plan-modal .payment-choice__option .payment-care .payment-amount{
  margin-top:0 !important;
}

.plan-modal .payment-choice__option[data-payment="full"] .estimate-breakdown{
  display:grid !important;
  grid-auto-flow:row !important;
  grid-template-columns:minmax(112px, max-content) !important;
  gap:0 !important;
  justify-items:end !important;
  align-items:end !important;
  width:max-content !important;
  max-width:100% !important;
  margin-left:auto !important;
}

.plan-modal .payment-choice__option[data-payment="full"] .estimate-part{
  width:100% !important;
  min-width:112px !important;
}

@media (max-width:760px){
  .plan-modal .payment-choice__option .estimate-part,
  .plan-modal .payment-choice__option .payment-project,
  .plan-modal .payment-choice__option .payment-care{
    justify-items:start !important;
    text-align:left !important;
  }

  .plan-modal .payment-choice__option .estimate-part--care,
  .plan-modal .payment-choice__option .payment-care{
    min-width:0 !important;
    margin-top:8px !important;
    padding-top:9px !important;
  }

  .plan-modal .payment-choice__option[data-payment="full"] .estimate-breakdown{
    width:100% !important;
    grid-template-columns:1fr !important;
    justify-items:start !important;
    margin-left:0 !important;
  }
}

/* v385b: keep payment care separator attached to the amount stack */
.plan-modal .payment-choice__option .estimate-part--care,
.plan-modal .payment-choice__option .payment-care{
  width:max-content !important;
  min-width:150px !important;
  max-width:100% !important;
}

.plan-modal .payment-choice__option[data-payment="full"] .estimate-breakdown{
  grid-template-columns:minmax(150px, max-content) !important;
}

@media (max-width:760px){
  .plan-modal .payment-choice__option .estimate-part--care,
  .plan-modal .payment-choice__option .payment-care{
    width:100% !important;
    min-width:0 !important;
  }
}

/* v386: tighten header + hero copy spacing so the before/after slider fits above the fold on desktop/tablet */
@media (min-width:761px){
  main{
    padding-top:clamp(6px,1.2vw,20px) !important;
  }
  .copy-block{
    margin-bottom:14px !important;
  }
  .eyebrow{
    margin-bottom:8px !important;
  }
  .lead{
    margin-top:12px !important;
  }
}

/* v1032 (2nd instance): this was the actual rule winning the 78px topbar
   height in the 761-900px gap (a second, separate "min-width:761px, no
   upper bound" fixed-height rule, same bug class as the 62px one above -
   there were two of these stacked on top of each other). Same fix:
   restricted to 901px+, once the nav is guaranteed to fit on one line. */
@media (min-width:901px){
  /* BUG FIX (this round), per Dave (repeat complaint): "the logo grows out
     of the box... needs to shrink/grow appropriately so it doesn't grow
     out of the bottom." A prior round already switched the BASE .wg-topbar
     rule from a fixed height to min-height for exactly this reason - but
     this rule (and the 62px one below it further down this file, both
     scoped min-width:901px with no upper bound, i.e. "all of desktop")
     still hard-capped the box with a fixed `height`, silently undoing that
     fix at every real desktop width. Switched to min-height here too, so
     the box still defaults to this same compact size at every width where
     the smaller/un-scaled logo fits, but is free to grow (never clip) at
     the widths where the 20%-bigger logo needs more than 78px. */
  .wg-topbar{
    min-height:78px !important;
    padding-bottom:8px !important;
  }
  .wg-nav{
    margin-top:10px !important;
  }
}

/* v387: pull the comparison slider in from full-bleed to ~88% width, centered,
   so it's slightly smaller (not drastically) and clears the fold more easily
   without losing its full-page presence. */
/* v511: the new lifestyle-photo device frame needs to run edge-to-edge with
   no side margins, so this is switched back to full-bleed. */
@media (min-width:761px){
  .comparison-card{
    width:100vw !important;
    margin-left:calc(50% - 50vw) !important;
    margin-right:calc(50% - 50vw) !important;
  }
  .compare-main,
  .compare-shell,
  .stage-holder{
    width:100% !important;
  }
}

/* v389: the page actually had three separate, stacked "page background" rules
   left over from earlier redesign passes (html/body color, .page-bg gradient,
   defined more than once each). The versions that were actually winning used
   two slightly different dark slate tones, which is what created the visible
   rectangle/seam around the hero comparison slider. Forcing both to the exact
   same flat color removes the seam for good.
   FIX (2026-07-29), per Dave: setting this site-wide to the light color was
   a mistake carried over from an earlier chat - the light treatment was only
   ever meant for the hero and the Project Investment section right below it
   (both of which now paint their own direct #f6f7f8 background, see the
   "Ported 2026-07-29" block further down this file, and don't depend on
   .page-bg at all). Every other section (feature cards, FAQ accordion,
   footer, etc.) was relying on this dark base color showing through and
   went washed-out/low-contrast once this got flattened to light along with
   the hero. Restoring the original dark slate here (still one flat color,
   so the seam v389 fixed stays fixed) brings every below-the-fold section
   back to dark without touching the hero/investment-section overrides. */
html,
body{
  background:#2c3136 !important;
}
.page-bg{
  background:#2c3136 !important;
}
.page-bg::after{
  background:none !important;
}

/* v390: simplify the pricing cards inside the Homepage Only / Homepage +
   Inside Pages package popup. Drop the gold pill price badge, drop "cancel
   anytime", and put the price up next to the white header instead. Scoped
   to .service-option only -- the separate Monthly Website Care popup
   (.care-option) keeps its existing pill styling untouched. */
.plan-modal .service-option{
  grid-template-columns:24px minmax(0,1fr) auto !important;
  height:auto !important;
  min-height:104px !important;
}

.plan-modal .service-option > .service-option__eyebrow{
  grid-column:2 / -1 !important;
}

.plan-modal .service-option > strong{
  grid-column:2 !important;
  grid-row:2 !important;
  margin-top:2px !important;
}

.plan-modal .service-option > b{
  grid-column:3 !important;
  grid-row:2 !important;
  justify-self:end !important;
  align-self:start !important;
  width:max-content !important;
  max-width:none !important;
  margin:4px 0 0 !important;
  padding:0 !important;
  border:none !important;
  background:none !important;
  color:#7E3187 !important;
  font-size:14px !important;
  font-weight:700 !important;
  line-height:1.12 !important;
  white-space:nowrap !important;
}

.plan-modal .service-option > em{
  grid-column:2 / -1 !important;
}

@media (max-width:860px){
  .plan-modal .service-option{
    min-height:0 !important;
  }
}

/* v394: found the actual source of the rectangle behind the hero laptop/phone
   comparison graphic. A broad accessibility-contrast rule (search
   ".website-access-info{" nearby) lists many real UI cards -- price cards,
   detail panels, etc -- and .comparison-card got swept into that same
   selector list by mistake, giving the hero slider container a translucent
   dark panel background it was never meant to have. It should always have
   been transparent, sitting directly on the page background. Forcing that
   back here, last in the cascade so nothing above can re-win it. */
.comparison-card{
  background:none !important;
  background-color:transparent !important;
}

/* v394: extra-hardened re-statement of the v393 fix, in case a stale cached
   copy of the stylesheet is being viewed -- this "Selected option details"
   panel should have zero background of its own. */
.plan-modal .service-choice-detail{
  background:none !important;
  background-color:transparent !important;
  border:0 !important;
  box-shadow:none !important;
}

/* v395: small icon to the right of the "Logo design option" header. It sits
   inside a wrapper span alongside the label text so the existing flex
   space-between layout (which also pushes the JS-driven price amount to the
   far right when the checkbox is selected) keeps working unchanged. */
.logo-addon-heading__label{
  display:inline-flex !important;
  align-items:center !important;
  gap:8px !important;
}
.logo-addon-heading__icon{
  width:32px !important;
  height:32px !important;
  opacity:.85 !important;
  flex:none !important;
}

/* v397: round lettered badge in the "Selected option details" panel, matching
   the A/B/C/D badge on the card above, replacing the old gold "Selected
   option details" text label. Title/price now sit right next to it. */
.plan-modal .service-choice-detail__heading{
  justify-content:flex-start !important;
}
.plan-modal .service-choice-detail__heading .service-choice-detail__letter{
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  width:24px !important;
  height:24px !important;
  min-height:24px !important;
  flex:none !important;
  margin:0 !important;
  padding:0 !important;
  border-radius:999px !important;
  background:#7E3187 !important;
  color:#ffffff !important;
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
  font-size:12px !important;
  font-weight:800 !important;
  line-height:1 !important;
  letter-spacing:0 !important;
  text-transform:uppercase !important;
  box-shadow:0 8px 18px rgba(0,0,0,.18) !important;
}

/* v399: drop the "Current Site" / "Proposed Redesign" floating pill labels
   above the divider, and pull the divider line's top down so it only pokes
   barely above the laptop's own top edge instead of running the full stage
   height above the visible device graphic. Together this lets the whole
   comparison block sit closer to the paragraph above it. */
.focus-label{
  display:none !important;
}
.divider{
  top:230px !important;
  height:920px !important;
}

/* v400: pull the comparison block up closer to the paragraph above it -- the
   DOM gap itself was already small, the visible empty space was baked into
   the device-frame graphic's own top margin above the laptop bezel. */
/* v515: the source photo has a deliberate several-hundred-px soft fade at its
   own top edge, meant to tuck up behind the header copy rather than be
   cropped off. Pull the whole comparison block up by roughly that fade
   height so the transparent/faded part of the image sits behind the text
   (copy-block is stacked above it via z-index) and only the resolved,
   near-opaque part of the photo peeks out just under the paragraph. */
@media (min-width:761px){
  .comparison-card{
    margin-top:calc(-260px * var(--stage-scale)) !important;
  }
}

/* v514: guarantee the hero copy always paints above the comparison photo,
   even if spacing runs tight on some viewport. */
.copy-block{
  position:relative !important;
  z-index:20 !important;
}
.comparison-card{
  position:relative !important;
  z-index:1 !important;
}

/* v400: shorten the 4 package cards -- less empty space below the price line. */
.plan-modal .service-option{
  min-height:86px !important;
}

/* v402: bump up the sub-header labels ("Homepage design", "Monthly Website
   Care", "Logo design option") -- they were 14px, sized the same as the
   fine-print copy elsewhere, and read too small next to the content below
   them. */
.plan-modal .plan-summary__row span,
.plan-modal .plan-summary__section-title,
.plan-modal .logo-addon-heading{
  font-size:17px !important;
}

/* v402: enlarge the logo add-on checkbox and align it with the gold
   "OPTIONAL BRAND ADD-ON" text next to it instead of sitting flush at the
   top of the whole multi-line block. */
.logo-addon input{
  width:20px !important;
  height:20px !important;
  margin-top:-3px !important;
}

/* v421/v453/v489: dial the checkbox back a hair and give it breathing room
   from the rounded card border it was crowding; v453 nudged right 5px, up
   3px; v489 nudged right another 5px so it's not floating alone */
.logo-addon input{
  width:17px !important;
  height:17px !important;
  margin-top:-4px !important;
  margin-left:14px !important;
}

/* v403/v455: match the payment option titles ("Pay in full", "3 monthly
   payments", etc.) to the same size as the package card headers
   (e.g. "Hosting + Web Care"); v455 bumped a bit larger. */
.payment-choice__option strong{
  font-size:21px !important;
  line-height:1.12 !important;
}

/* v404: remove gold outline on selected/hovered pricing cards */
.plan-modal .service-option.is-selected,
.plan-modal .service-option.is-active,
.plan-modal .service-option[aria-pressed="true"],
.plan-modal .care-option.is-selected,
.plan-modal .care-option.is-active,
.plan-modal .service-option.is-selected:hover,
.plan-modal .service-option.is-active:hover,
.plan-modal .service-option[aria-pressed="true"]:hover,
.plan-modal .care-option.is-selected:hover,
.plan-modal .care-option.is-active:hover,
.plan-modal .service-option:not(.is-selected):not(.is-active):not([aria-pressed="true"]):hover,
.plan-modal .service-option:not(.is-selected):not(.is-active):not([aria-pressed="true"]):focus-visible,
.plan-modal .care-option:not(.is-selected):not(.is-active):hover,
.plan-modal .care-option:not(.is-selected):not(.is-active):focus-visible{
  border-color:rgba(84,98,107,.18) !important;
}

/* v407: Inside Pages stepper must actually hide on Homepage Only (was being forced
   visible by an earlier unconditional display:grid rule) */
.plan-modal .plan-summary__row + .plan-pages.is-hidden{
  display:none !important;
}

/* v408/v413/v451: Homepage design icon at 112% scale, nudged 5px right */
.homepage-heading__icon{
  width:36px !important;
  height:36px !important;
  margin-left:5px !important;
}

/* v412: Payment Options intro is informational, not a selectable card - remove box/hover */
.payment-options{
  background:none !important;
  background-color:transparent !important;
  border:0 !important;
  box-shadow:none !important;
}
.payment-options:hover{
  background:none !important;
  background-color:transparent !important;
  border:0 !important;
  box-shadow:none !important;
  transform:none !important;
}

/* v415: Inside Pages info trigger - drop the pill shape, keep just the (i) glyph */
.plan-modal .plan-pages-info-pill,
.plan-modal .plan-pages-info-pill:hover,
.plan-modal .plan-pages-info-pill:focus-visible{
  min-height:0 !important;
  padding:0 !important;
  border:0 !important;
  border-radius:0 !important;
  background:none !important;
  font-size:16px !important;
  font-weight:400 !important;
  letter-spacing:0 !important;
  text-transform:none !important;
}

/* v416/v424: nudge hero copy up off the comparison graphic; trim the top darkening bar */
/* v1215, per Dave: header read as skewed/off-balance sitting flush left
   above the horizontally-centered laptop comparison below it. Centered to
   line up with that composition, and margin-top brought up from -16px to
   -8px (nets an 8px downward shift from where it was sitting). */
@media (min-width:761px){
  .copy-block{
    /* Per Dave (this round): "I did not ask you to justify center it... it
       still needs to be justified left within the text block, but the text
       block itself... should be positioned in the center of the browser
       window." Two different things were conflated in the prior round -
       text-align:center justified every LINE inside the block, when the
       actual ask was to center the BLOCK ITSELF as a unit while its own
       text stays left-justified. Fixed by reverting text-align to left
       (the base rule above already has this, re-asserted here since this
       block is !important and would otherwise keep winning) and centering
       the block's own box instead via margin-left/right:auto - safe here
       because .copy-block already has a real max-width (1420px, base rule
       above) narrower than its parent .hero (max-width:1760px, also
       margin:0 auto - same proven centering mechanism already used one
       level up), so auto margins have real room to center it. Also, per
       Dave: "scoot that header down about four pixels" - margin-top
       -8px -> -4px (a less-negative margin-top shifts it down 4px). */
    margin-top:-4px !important;
    margin-bottom:20px !important;
    margin-left:auto !important;
    margin-right:auto !important;
    text-align:left !important;
    /* ROOT-CAUSE FIX, per Dave: "I asked you to move this header on
       desktop over to the right like a couple hundred pixels and it has
       not moved at all." Root cause: an earlier fix (see .copy-block base
       rule + margin-left:200px above, much earlier in this file) tried to
       shift it via margin-left - but THIS rule, appearing later in the
       file at the same !important weight, re-centers it via
       margin-left/right:auto every time and always wins the tie by source
       order. Using transform here instead of touching the margins again -
       it's purely a visual offset applied AFTER layout/centering is
       resolved, so it can't get silently re-cancelled by whichever margin
       rule happens to load last. Shifts the whole block (text stays
       left-justified within it, per the auto-margin centering above) right
       of its centered position - lands it visually above the comparison
       monitor instead of hanging off its left edge.
       Fix, per Dave: "move this header to the left now by 30px, it went
       too far to the right" - dialed back 200px -> 170px.
       Fix, per Dave: "move header DOWN 6px" - added a 6px Y shift. */
    transform: translate(170px, 6px) !important;
  }
  .wg-logo{
    margin-top:-4px !important;
  }
}

/* v1032: root cause of the "narrow desktop window" (roughly 761-900px)
   header disaster Dave reported - nav pills sliding down over the hero
   heading. Two rules were fighting: this file also wraps the nav to two
   lines any time the window is 900px or narrower (".wg-nav{flex-wrap:
   wrap}" at max-width:900px), but the line above had been locking the
   topbar to a flat 62px height starting at 761px with NO upper bound -
   so from 761-900px the topbar was forced short at the exact width
   range where its own nav needs to wrap onto a second line, and the
   wrapped row spilled out underneath, landing right on top of the hero
   text. Confirmed live: at 813px the topbar's own box measured 62px
   tall while its wrapped nav extended to 93px. Fixed by only locking
   the 62px height once the nav is guaranteed to fit on one line again
   (901px+, matching the 900px wrap boundary) - the true mobile stacked
   header (<=760px) and true desktop single-line header (901px+) were
   already fine; only this specific gap was broken. */
@media (min-width:901px){
  /* BUG FIX (this round), per Dave (repeat complaint): "the logo grows out
     of the box... needs to shrink/grow appropriately." Same issue as the
     78px rule above this one in the file - this was the rule actually
     winning the height war at 901px+ (it comes later, so its plain
     `height` beat the other rule's same-specificity `height`), hard-
     capping the box well below what the 20%-bigger logo needs. Switched to
     min-height so it still defaults to this same compact size normally,
     but grows instead of clipping once the logo needs more room. */
  .wg-topbar{
    min-height:62px !important;
  }
}

/* v417: info popups anchor next to their trigger as a small popover instead of a
   full-screen blurred dialog - rest of the page stays visible and unobstructed */
.info-pop-modal{
  place-items:normal !important;
  padding:0 !important;
  pointer-events:none !important;
}
.info-pop-modal.is-open{
  pointer-events:none !important;
}
.info-pop-modal__backdrop{
  background:transparent !important;
  backdrop-filter:none !important;
  -webkit-backdrop-filter:none !important;
  pointer-events:auto !important;
}
.info-pop-modal__panel{
  width:min(520px, 92vw) !important; /* v685: real fix was the h2 max-width override below (11ch global default) - panel width reverted back to original, no need to widen it too */
  max-height:min(60vh, 420px) !important;
  padding:24px !important;
  border-radius:18px !important;
  pointer-events:auto !important;
}
.info-pop-modal__panel h2{
  font-size:clamp(20px, 2.4vw, 26px) !important;
  margin:6px 0 10px !important;
  /* v685: ROOT CAUSE of "Common inside pages" wrapping to 2 lines with
     "pages" as a widow, even after widening the panel itself (v685
     first pass) - the global base rule at line 197 ("h2{ ... max-width:
     11ch }") applies to every <h2> on the site by default, and nothing
     had ever overridden it for this specific popup's title, so it kept
     force-wrapping at 11 characters regardless of how much room the
     panel actually had. */
  max-width:none !important;
  white-space:nowrap !important;
}

/* v418: N/A payment options are informational only - not selectable, no hover reaction */
.payment-choice__option.is-disabled{
  cursor:default !important;
  pointer-events:none !important;
}

/* v419: tighten the excess vertical space between categories/sub-categories and
   between content and the separator lines in the plan modal */
.plan-modal .plan-summary__row + .plan-pages{
  margin-top:8px !important;
  margin-bottom:10px !important;
  padding-bottom:8px !important;
}
.plan-modal .plan-summary__section-title{
  margin:12px 0 10px !important;
  padding-top:12px !important;
}
.plan-modal .service-options{
  margin-bottom:8px !important;
  padding-bottom:2px !important;
}
.plan-modal .service-choice-detail{
  margin:6px 0 10px !important;
  padding:8px 0 8px !important;
}
.plan-modal .logo-addon-heading{
  margin:14px 0 10px !important;
  padding-top:14px !important;
}
.plan-modal .logo-addon{
  margin-bottom:14px !important;
  padding:12px 0 !important;
}
.plan-modal .plan-total{
  margin-top:10px !important;
  padding-top:12px !important;
}

/* v422: extend the v390 pricing-card redesign to the Monthly Website Care
   popup's .care-option cards - drop the gold pill price badge, put the price
   up next to the white header, shorten the cards like the other two popups. */
.plan-modal .care-option{
  grid-template-columns:24px minmax(0,1fr) auto !important;
  height:auto !important;
  min-height:86px !important;
}
.plan-modal .care-option > .service-option__eyebrow{
  grid-column:2 / -1 !important;
}
.plan-modal .care-option > strong{
  grid-column:2 !important;
  grid-row:2 !important;
  margin-top:2px !important;
}
.plan-modal .care-option > b{
  grid-column:3 !important;
  grid-row:2 !important;
  justify-self:end !important;
  align-self:start !important;
  width:max-content !important;
  max-width:none !important;
  margin:4px 0 0 !important;
  padding:0 !important;
  border:none !important;
  background:none !important;
  color:#7E3187 !important;
  font-size:14px !important;
  font-weight:700 !important;
  line-height:1.12 !important;
  white-space:nowrap !important;
}
.plan-modal .care-option > em{
  grid-column:2 / -1 !important;
}
.plan-modal .care-option > .service-info-pill{
  grid-column:2 / -1 !important;
}
@media (max-width:860px){
  .plan-modal .care-option{
    min-height:0 !important;
  }
}

/* v428: the v423 pass only reset border-color, but "Homepage Only" also had
   a permanent gold background gradient + inset ring (from an earlier
   default-highlight rule) that made it look outlined/highlighted at rest
   and on hover, and stayed gold even while a different card was hovered.
   Make all 3 package cards neutral/gray at rest, matching each other, and
   give all 3 the same gold gradient glow on their own hover only - no
   border-color change, no ring. */
.investment-card,
.investment-card--primary,
.investment-card--primary.price-trigger,
.investment-card.price-trigger{
  background:rgba(0,0,0,.18) !important;
  border-color:rgba(255,255,255,.13) !important;
  box-shadow:none !important;
}
.investment-card--primary.price-trigger::before{
  opacity:0 !important;
}
.investment-card:hover,
.investment-card.price-trigger:hover,
.investment-card--primary.price-trigger:hover,
.investment-card--primary.price-trigger:focus-visible{
  transform:translateY(-4px) !important;
  background:rgba(0,0,0,.18) !important;
  border-color:rgba(255,255,255,.14) !important;
  box-shadow:0 18px 46px rgba(0,0,0,.22) !important;
}
.investment-card.price-trigger:hover::before,
.investment-card--primary.price-trigger:hover::before,
.investment-card--primary.price-trigger:focus-visible::before{
  opacity:1 !important;
}

/* v429: separator line between the last attribute-card section and the
   footer/contact-form boilerplate below it, so the two areas read as
   distinct sections. */
/* v520: removed - the About section now ends in a full-bleed photo, and
   this line was cutting across the bottom of it. */
.wg-footer{
  border-top:0 !important;
}

/* v427: hero-start-cta removed - user wanted the actual Project Investment
   section (pricing cards + payment options) moved up instead of a shortcut
   button. Section reordered directly in index.html. */
@media (min-width:761px){
  .investment-section{
    margin-top:8px !important;
  }
}

/* v430: EXPERIMENT - preview the Project Investment section as a white card
   with dark text, to see if it reads cleaner than the dark-on-dark stack. */
.investment-section{
  background:#f6f7f8 !important;
  border-color:rgba(0,0,0,.08) !important;
}
.investment-section .investment-copy h2,
.investment-section .investment-card h3,
.investment-section .investment-card strong,
.investment-section .investment-card h3.investment-financed-price strong,
.investment-section .payment-options h3,
.investment-section .payment-list strong{
  color:#20242a !important;
}
.investment-section .investment-copy p,
.investment-section .investment-card p,
.investment-section .investment-card h3 em,
.investment-section .investment-card h3.investment-financed-price em,
.investment-section .payment-list p{
  color:rgba(32,36,42,.66) !important;
}
.investment-section .small-label{
  color:var(--gold) !important;
}
.investment-card,
.investment-card--primary,
.investment-card--primary.price-trigger,
.investment-card.price-trigger{
  background:#fff !important;
  border-color:rgba(0,0,0,.10) !important;
}
.investment-section .price-card-badge{
  background:rgba(184,121,15,.12) !important;
  color:#b8790f !important;
  border-color:rgba(184,121,15,.35) !important;
}
.investment-card small{
  background:rgba(0,0,0,.04) !important;
  border-color:rgba(0,0,0,.12) !important;
  color:rgba(32,36,42,.60) !important;
}
/* payment options is informational only, not a card - no box, floats free */
.investment-section .payment-options{
  background:none !important;
  background-color:transparent !important;
  border:0 !important;
  box-shadow:none !important;
  padding:0 !important;
  margin-top:28px !important;
}
.investment-card.price-trigger::before,
.investment-card--primary.price-trigger::before{
  display:none !important;
}

/* v459: replace the faded-gold-fill hover state with a thick translucent
   gold outline instead - panel stays white, just gets a heavy gold ring,
   the existing drop shadow, and grows slightly. Built with box-shadow
   (not the outline property) so the ring follows the card's rounded
   corners cleanly instead of squaring off. */
.investment-card{
  /* v486: opacity+transform merged in here (matching the reveal-anim
     entrance timing) so this !important rule stops silently overriding
     the scroll-reveal transition on the 3 pricing cards - that's why the
     "parallax" reveal was barely visible on them. transform is a shared
     compromise duration (.6s) since it's used both by the slow entrance
     rise and the quicker hover scale. */
  transition:transform .6s cubic-bezier(.22,.61,.32,1), opacity 1.4s cubic-bezier(.22,.61,.32,1), box-shadow .28s ease, border-color .28s ease !important;
}
.investment-card:hover,
.investment-card.price-trigger:hover,
.investment-card--primary.price-trigger:hover,
.investment-card--primary.price-trigger:focus-visible{
  background:#fff !important;
  border-color:rgba(126,49,135,.65) !important;
  transform:scale(1.02) !important;
  /* v1067 (re-fixed per Dave, 4th pass): the old 15px ring is gone for good,
     and this time hover does NOT touch outline-color at all - no forced
     ring, no matter how thin. It only lifts slightly with a soft shadow.
     The pulse animation (.investment-card--primary's own keyframes) is left
     completely alone and keeps running through hover exactly as it does at
     rest, so there is nothing here that can ever look like a "thick line". */
  box-shadow:0 14px 32px rgba(0,0,0,.16) !important;
  z-index:2 !important;
}

/* v557: mobile-only - the 15px hover glow ring + 1.02x scale-up above is
   fine on desktop where :hover clears when the mouse moves away, but on
   touch devices tapping a card leaves it "stuck" in :focus-visible, and
   the 15px ring has no reserved space in a single-column mobile stack so
   it bled straight into the card below. Hover/focus is meaningless on
   touch anyway, so just neutralize it back to the resting state. */
@media (max-width:760px){
  html body .investment-card:hover,
  html body .investment-card.price-trigger:hover,
  html body .investment-card--primary.price-trigger:hover,
  html body .investment-card--primary.price-trigger:focus-visible{
    transform:none !important;
    box-shadow:none !important;
    border-color:rgba(0,0,0,.10) !important;
    z-index:auto !important;
  }
}

/* v434: the plan-modal backdrop was lightened in v380, but now that the
   Project Investment section behind it is white, the blur shows an uneven
   light/dark patchwork behind the popup. Darken and even it out. */
.plan-modal__backdrop{
  background:rgba(10,11,13,.78) !important;
  backdrop-filter:blur(20px) saturate(1) !important;
  -webkit-backdrop-filter:blur(20px) saturate(1) !important;
}

/* v435: the 4 feature cards had no top margin, so they sat flush against the
   3 pricing cards above them with no gap - match the 16px gap already used
   between cards in each row. */
.investment-section .included-benefits{
  margin-top:16px !important;
}

/* v437: EXPERIMENT - full-bleed the white Project Investment section edge to
   edge of the browser window, no rounded corners, holds at any viewport
   width. Inner content still gets side padding so text doesn't hit the raw
   edge. */
.investment-section{
  max-width:none !important;
  width:100vw !important;
  margin-left:50% !important;
  margin-right:50% !important;
  transform:translateX(-50%) !important;
  border-radius:0 !important;
  padding-left:clamp(22px, 5vw, 90px) !important;
  padding-right:clamp(22px, 5vw, 90px) !important;
}

/* v548: mobile-only - move "Payment Options" up above the 4 foundation-
   benefit boxes (SSL/SEO/Mobile/Launch), directly under the pricing cards.
   Desktop order (copy, cards, benefits, payment) is untouched. */
@media (max-width:760px){
  .investment-section{
    display:flex !important;
    flex-direction:column !important;
  }
  .investment-section .investment-copy{
    order:0 !important;
  }
  .investment-section .investment-grid{
    order:1 !important;
  }
  .investment-section .payment-options{
    order:2 !important;
  }
  .investment-section .included-benefits{
    order:3 !important;
  }

  /* v554: the cream investment-section box was leaving its own bottom
     padding below the (now-last) benefit cards, and the dark "What
     improves" block below it had a separate top margin on top of that -
     together that made a wide off-white gap between the Smart Launch
     Setup card and the dark section. Zero both so the dark block sits
     flush against the bottom of the cream panel. */
  .investment-section{
    padding-bottom:0 !important;
    border-bottom:0 !important;
  }

  .investment-section + .value-intro{
    margin-top:0 !important;
    padding-top:40px !important;
  }
}

/* v439: the Homepage Only / Homepage + Inside Pages watermark icons were
   drawn as light/white line art for the old dark cards - invert them to
   read as light gray on the new white cards instead of vanishing. */
.investment-card--primary.price-trigger::after,
.investment-card.price-trigger--plus::after{
  filter:invert(1) !important;
  opacity:.18 !important;
}

/* v441: the "Monthly Website Care" card's "/ month" text isn't wrapped in
   .investment-financed-price like the other two cards, so it was inheriting
   the plain h3 em rule (relative .34em size, no weight bump) instead of the
   fixed 13px/750-weight styling used for "/mo" on the other two cards.
   Match it without touching the other cards' markup or styling. */
.investment-card h3:not(.investment-financed-price) em{
  font-size:13px !important;
  font-weight:750 !important;
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
  letter-spacing:0 !important;
}

/* v440: EXPERIMENT - scroll-in reveal ("parallax float-in") for the pricing
   cards, the 4 feature cards, and the 6 attribute cards. Progressive
   enhancement: elements are visible by default; JS opts individual cards
   into the hidden -> revealed animation, so nothing breaks if JS fails. */
.reveal-anim.is-pending{
  opacity:0;
  transform:translateY(56px);
}
.reveal-anim.is-revealed{
  opacity:1;
  transform:translateY(0);
  transition:opacity 1.4s cubic-bezier(.22,.61,.32,1), transform 1.4s cubic-bezier(.22,.61,.32,1);
}
/* v495: these need !important - the base .investment-card /
   .included-benefit / .note-item rules set the "transition" property as a
   shorthand with !important, which implicitly resets transition-delay to
   0s as part of that same declaration. A plain (non-important) delay here
   can never win against that, no matter how specific the selector is -
   that's why all six/three/four items were fading in at once instead of
   staggering. */
.investment-grid .investment-card:nth-child(1){transition-delay:.05s !important;}
.investment-grid .investment-card:nth-child(2){transition-delay:.22s !important;}
.investment-grid .investment-card:nth-child(3){transition-delay:.39s !important;}
/* v528: the entrance-stagger transition-delay above applies to every
   transitioned property on the card (not just opacity/transform used for
   the scroll-reveal), so the hover gold-ring/box-shadow was inheriting the
   same .05s/.22s/.39s delay - card 3 felt like it took a beat to react.
   Zero the delay back out specifically on hover so the ring appears
   immediately, while the entrance stagger itself is untouched. */
.investment-grid .investment-card:hover,
.investment-grid .investment-card.price-trigger:hover,
.investment-grid .investment-card--primary.price-trigger:hover,
.investment-grid .investment-card--primary.price-trigger:focus-visible{
  transition-delay:0s !important;
}
.included-benefits .included-benefit:nth-child(1){transition-delay:.05s !important;}
.included-benefits .included-benefit:nth-child(2){transition-delay:.20s !important;}
.included-benefits .included-benefit:nth-child(3){transition-delay:.35s !important;}
.included-benefits .included-benefit:nth-child(4){transition-delay:.50s !important;}
.notes .note-item:nth-child(1){transition-delay:.05s !important;}
.notes .note-item:nth-child(2){transition-delay:.17s !important;}
.notes .note-item:nth-child(3){transition-delay:.29s !important;}
.notes .note-item:nth-child(4){transition-delay:.41s !important;}
.notes .note-item:nth-child(5){transition-delay:.53s !important;}
.notes .note-item:nth-child(6){transition-delay:.65s !important;}

@media (prefers-reduced-motion: reduce){
  .reveal-anim.is-pending{
    opacity:1 !important;
    transform:none !important;
  }
}

/* v442: widen the footer contact form - v987: also reverted, same reason
   as v324 above (desktop-width collision with the webyay logo mark). The
   v53 baseline (360px, 70px left / 250px right margin) governs desktop
   again; mobile is untouched (its own breakpoint block below still
   applies). */
@media (min-width:761px){
  .wg-footer-form{
    width:360px !important;
    margin-left:70px !important;
    margin-right:250px !important;
    max-width:360px !important;
  }
}

/* v442: shrink the WebYay footer mark slightly and lift it ~25px */
@media (min-width:761px){
  .wg-webyay-footer-mark{
    bottom:55px !important;
    width:145px !important;
    max-width:145px !important;
  }
}

/* v445: match the gears icon (used next to "Monthly Website Care" in the
   plan popup) onto the upper-right of the Monthly Website Care pricing
   card, same proportion/position pattern as the other two cards' device
   icons, and same light-gray treatment as those icons got in v439. */
.investment-card.price-trigger:not(.investment-card--primary):not(.price-trigger--plus){
  position:relative !important;
}
.investment-card.price-trigger:not(.investment-card--primary):not(.price-trigger--plus)::after{
  content:"";
  position:absolute;
  top:47px;
  right:57px;
  width:clamp(99px, 22%, 134px);
  aspect-ratio:142.261 / 113.74;
  background:url('../img/gears-icon2.svg') center / contain no-repeat;
  opacity:.18;
  filter:invert(1);
  pointer-events:none;
  z-index:0;
}
.investment-card.price-trigger:not(.investment-card--primary):not(.price-trigger--plus) > *{
  position:relative;
  z-index:1;
}
@media (max-width:760px){
  .investment-card.price-trigger:not(.investment-card--primary):not(.price-trigger--plus)::after{
    top:18px;
    right:24px;
    width:clamp(65px, 20vw, 88px);
  }
}

/* v449: enlarge the 4 feature cards slightly on hover (previously v388 had
   locked transform:none on hover so the background image wouldn't shift -
   this override wins on top of that for a subtle hover grow instead).
   No separate transition declared here on purpose - it shares the .95s
   reveal-anim transition below so it doesn't fight the entrance animation. */
.included-benefit:not(.reveal-anim){
  transition:transform .28s cubic-bezier(.2,.8,.2,1), box-shadow .28s ease;
}
.included-benefit:hover,
.included-benefit:focus-visible{
  transform:scale(1.035) !important;
  z-index:2 !important;
}

/* v461: tighter leading on the payment options list (Pay in full / 3, 6, 12
   monthly payments) */
.investment-section .payment-list{
  gap:6px !important;
}
.investment-section .payment-list p{
  line-height:1.22 !important;
}

/* v462: "What changes beyond the look" 6 categories - mimic the Fabrizio PT
   services-strip effect: full-bleed touching panels that grow on hover
   (siblings shrink), body copy removed (full detail now lives only in the
   click-to-open popup, which already has its own richer copy), eyebrows
   in all-caps to match the rest of the site's small-label treatment. */
.value-intro + .notes,
.notes{
  max-width:none !important;
  width:100vw !important;
  margin-left:50% !important;
  margin-right:50% !important;
  transform:translateX(-50%) !important;
  display:flex !important;
  flex-wrap:nowrap !important;
  gap:0 !important;
  align-items:stretch !important;
  overflow:hidden !important;
}

.notes .note-item{
  position:relative !important;
  flex:1 1 0 !important;
  min-width:0 !important;
  min-height:clamp(215px, 20vw, 300px) !important;
  padding:0 !important;
  margin:0 !important;
  border:0 !important;
  border-radius:0 !important;
  overflow:hidden !important;
  box-shadow:none !important;
  background:linear-gradient(155deg, rgba(38,32,20,.94), rgba(10,11,13,.98)) !important;
  cursor:pointer !important;
  /* combined with the opacity/transform scroll-reveal transition so this
     rule (later in the file, same specificity as .reveal-anim.is-revealed)
     doesn't clobber the entrance fade-in timing */
  transition:opacity 1.4s cubic-bezier(.22,.61,.32,1), transform 1.4s cubic-bezier(.22,.61,.32,1), flex 1s cubic-bezier(.25,.46,.45,.94), background .35s ease !important;
}

.notes .note-item:nth-child(3n+2){
  background:linear-gradient(155deg, rgba(26,27,22,.94), rgba(10,11,13,.98)) !important;
}

.notes .note-item:nth-child(3n){
  background:linear-gradient(155deg, rgba(32,24,16,.94), rgba(10,11,13,.98)) !important;
}

.notes .note-item::after{
  content:"";
  position:absolute;
  inset:0;
  background:radial-gradient(120% 90% at 15% 100%, rgba(126,49,135,.16), rgba(126,49,135,0) 62%);
  z-index:0;
  pointer-events:none;
}

.note-item-shade{
  position:absolute;
  inset:0;
  background:linear-gradient(to top, rgba(0,0,0,.72) 0%, rgba(0,0,0,.42) 30%, rgba(0,0,0,.10) 60%, rgba(0,0,0,0) 82%);
  z-index:1;
  pointer-events:none;
  transition:background .28s ease;
}

.notes .note-item span,
.notes .note-item h3{
  position:relative !important;
  z-index:2 !important;
  text-align:left !important;
}

.notes .note-item span{
  display:block !important;
  position:absolute !important;
  left:clamp(16px, 1.8vw, 26px) !important;
  bottom:clamp(66px, 8vw, 92px) !important;
  right:clamp(16px, 1.8vw, 26px) !important;
  margin:0 !important;
  color:#ffffff !important;
  font-size:11px !important;
  letter-spacing:.14em !important;
  text-transform:uppercase !important;
}

.notes .note-item h3{
  position:absolute !important;
  left:clamp(16px, 1.8vw, 26px) !important;
  right:clamp(16px, 1.8vw, 26px) !important;
  bottom:clamp(24px, 3vw, 40px) !important;
  margin:0 !important;
  color:#fff !important;
  font-size:clamp(19px, 1.7vw, 26px) !important;
  line-height:1.08 !important;
  letter-spacing:-.03em !important;
  font-weight:500 !important;
}

.notes .note-item p{
  display:none !important;
}

.notes:hover .note-item{
  flex:.88 1 0 !important;
}

.notes .note-item:hover,
.notes .note-item:focus-visible{
  flex:1.42 1 0 !important;
  z-index:3 !important;
  outline:none !important;
}

.notes .note-item:hover .note-item-shade,
.notes .note-item:focus-visible .note-item-shade{
  background:linear-gradient(to top, rgba(0,0,0,.80) 0%, rgba(0,0,0,.46) 28%, rgba(0,0,0,.10) 58%, rgba(0,0,0,0) 84%) !important;
}

@media (max-width:900px){
  .value-intro + .notes,
  .notes{
    flex-wrap:wrap !important;
    gap:7px !important;
  }
  .value-intro + .notes .note-item,
  .notes .note-item{
    flex:1 1 50% !important;
    min-height:240px !important;
  }
  .notes:hover .note-item,
  .notes .note-item:hover,
  .notes .note-item:focus-visible{
    flex:1 1 50% !important;
  }
}

@media (max-width:560px){
  html body .value-intro + .notes .note-item,
  html body .notes .note-item{
    flex-basis:100% !important;
    width:100% !important;
    min-height:180px !important;
  }
  .notes:hover .note-item,
  .notes .note-item:hover,
  .notes .note-item:focus-visible{
    flex-basis:100% !important;
  }
}

/* v543: match this strip's card height to the 4 foundation-benefit cards
   directly above it (180px) - was taller/inconsistent at clamp(260-360px)
   from the desktop rule bleeding through. Same 180px used on both strips
   at mobile widths for visual consistency. */
@media (max-width:760px){
  html body .value-intro + .notes .note-item,
  html body .notes .note-item{
    min-height:180px !important;
  }
}

/* v464: use the same photos already used inside each category's popup
   instead of a flat gradient panel, and re-declare border-radius/etc at
   ".value-intro + .notes .note-item" specificity (3 classes) because the
   older v373 rule at that same higher specificity was winning the fight
   over my plain ".notes .note-item" (2 classes) and keeping the corners
   rounded despite my earlier border-radius:0. */
.value-intro + .notes .note-item,
.notes .note-item{
  border-radius:0 !important;
  background:linear-gradient(155deg, rgba(20,20,20,.5), rgba(6,7,8,.6)), url("../img/popup/visual-impact.webp") center / cover no-repeat !important;
}
.value-intro + .notes .note-item[data-detail="seo"],
.notes .note-item[data-detail="seo"]{
  background:linear-gradient(155deg, rgba(20,20,20,.5), rgba(6,7,8,.6)), url("../img/popup/seo.webp") center / cover no-repeat !important;
}
.value-intro + .notes .note-item[data-detail="search"],
.notes .note-item[data-detail="search"]{
  background:linear-gradient(155deg, rgba(20,20,20,.5), rgba(6,7,8,.6)), url("../img/popup/search.webp") center / cover no-repeat !important;
}
.value-intro + .notes .note-item[data-detail="experience"],
.notes .note-item[data-detail="experience"]{
  background:linear-gradient(155deg, rgba(20,20,20,.5), rgba(6,7,8,.6)), url("../img/popup/experience.webp") center / cover no-repeat !important;
}
.value-intro + .notes .note-item[data-detail="investment"],
.notes .note-item[data-detail="investment"]{
  background:linear-gradient(155deg, rgba(20,20,20,.5), rgba(6,7,8,.6)), url("../img/popup/investment.webp") center / cover no-repeat !important;
}
.value-intro + .notes .note-item[data-detail="simple"],
.notes .note-item[data-detail="simple"]{
  background:linear-gradient(155deg, rgba(20,20,20,.5), rgba(6,7,8,.6)), url("../img/popup/simple.webp") center / cover no-repeat !important;
}
.notes .note-item::after{
  display:none !important;
}

/* re-assert the layout/typography values at the same specificity as the
   older v373 desktop rule so nothing reverts at wider viewports */
.value-intro + .notes .note-item{
  padding:0 !important;
  min-height:clamp(215px, 20vw, 300px) !important;
}
.value-intro + .notes .note-item span{
  position:absolute !important;
  left:clamp(16px, 1.8vw, 26px) !important;
  bottom:clamp(66px, 8vw, 92px) !important;
  right:clamp(16px, 1.8vw, 26px) !important;
  margin:0 !important;
  font-size:11px !important;
  line-height:1.05 !important;
}
.value-intro + .notes .note-item h3{
  position:absolute !important;
  left:clamp(16px, 1.8vw, 26px) !important;
  right:clamp(16px, 1.8vw, 26px) !important;
  bottom:clamp(24px, 3vw, 40px) !important;
  margin:0 !important;
  font-size:clamp(19px, 1.7vw, 26px) !important;
  line-height:1.08 !important;
}
.value-intro + .notes .note-item p{
  display:none !important;
}

/* v465: bottom-align the "Choose the payment approach" copy column with the
   payment list column next to it, instead of top-aligning */
.investment-section .payment-options{
  align-items:end !important;
}

/* v467: the thick 15px gold hover ring on the pricing cards (v459) can spill
   into the neighboring card when they're only 16px apart - give both the
   3-card pricing row and the 4-card feature row more breathing room so the
   ring has space to show without overlapping. Scoped to tablet/desktop only
   so the mobile single-column stack keeps its tighter 12px gap. */
@media (min-width:761px){
  .investment-grid{
    gap:28px !important;
  }
  .included-benefits{
    gap:36px !important;
  }
}

/* v471: push the 4 feature cards down further so the pricing cards' thick
   hover ring (which grows the card slightly and rings it in 15px of gold)
   has room to clear the row below it without touching. Also pulled the 3
   pricing cards a bit closer together per feedback (40px felt like too
   much). */
@media (min-width:761px){
  .investment-section .included-benefits{
    /* v483: dialed back from 44px to 36px so the gap above this row now
       matches the 36px gap between the cards themselves left-to-right */
    margin-top:36px !important;
  }
}

/* v469: the eyebrow and white header were each independently bottom-anchored
   with fixed offsets, so a 1-line vs 2-line header changed the visual gap
   between them (touching on some cards, wide on others). Group them in one
   bottom-anchored wrapper using normal flow so the gap is identical on all
   six cards regardless of how the header text wraps. */
.value-intro + .notes .note-item-copy,
.notes .note-item-copy{
  position:absolute !important;
  left:clamp(16px, 1.8vw, 26px) !important;
  right:clamp(16px, 1.8vw, 26px) !important;
  bottom:clamp(24px, 3vw, 40px) !important;
  z-index:2 !important;
  display:flex !important;
  flex-direction:column !important;
}
.value-intro + .notes .note-item-copy span,
.notes .note-item-copy span{
  position:static !important;
  display:block !important;
  margin:0 0 10px !important;
  color:#ffffff !important;
  font-size:11px !important;
  letter-spacing:.14em !important;
  text-transform:uppercase !important;
}
.value-intro + .notes .note-item-copy h3,
.notes .note-item-copy h3{
  position:static !important;
  left:auto !important;
  right:auto !important;
  bottom:auto !important;
  margin:0 !important;
  color:#fff !important;
  font-size:clamp(19px, 1.7vw, 26px) !important;
  line-height:1.08 !important;
  letter-spacing:-.03em !important;
  font-weight:500 !important;
}

/* v475: PREVIEW - give each of the 3 pricing cards its own accent color
   instead of all three sharing the same gold. Homepage Only keeps the
   signature brand gold; Homepage + Inside Pages gets a warm copper;
   Monthly Website Care gets a deep teal (the one cool note, fitting since
   it's the recurring/ongoing-care option rather than a one-time build). */
.investment-card.price-trigger--plus span{
  color:#7E3187 !important;
}
.investment-card.price-trigger:not(.investment-card--primary):not(.price-trigger--plus) span{
  color:#49596a !important;
}

.investment-section .price-card-badge{
  background:rgba(126,49,135,.14) !important;
  color:#7E3187 !important;
  border-color:rgba(126,49,135,.40) !important;
}
.price-trigger--plus:hover .price-card-badge{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  color:#ffffff !important;
}

.investment-card.price-trigger--plus:hover,
.investment-card.price-trigger--plus:focus-visible{
  border-color:rgba(126,49,135,.65) !important;
  box-shadow:0 0 0 15px rgba(126,49,135,.50), 0 22px 46px rgba(0,0,0,.14) !important;
}
.investment-card.price-trigger:not(.investment-card--primary):not(.price-trigger--plus):hover,
.investment-card.price-trigger:not(.investment-card--primary):not(.price-trigger--plus):focus-visible{
  border-color:rgba(60,91,123,.65) !important;
  box-shadow:0 0 0 15px rgba(60,91,123,.50), 0 22px 46px rgba(0,0,0,.14) !important;
}

/* v477: fix the close (X) button scrolling away with popup content on the
   detail/plan/start modals. Root cause: the close button was
   position:absolute anchored to the SAME element that had overflow:auto
   (the panel), so it was part of the scrolling box instead of pinned to
   the viewport corner of the modal. Fix: move the scrolling + padding onto
   a new inner wrapper (.xxx-modal__scroll, added around the existing
   content in the HTML) and keep the panel itself static, so the
   absolutely-positioned close button now anchors to a non-scrolling
   ancestor and stays fixed in the corner no matter how far the content
   inside scrolls. */
.detail-modal__panel,
.plan-modal__panel,
.start-modal__panel{
  overflow:visible !important;
  max-height:none !important;
  padding:0 !important;
  display:block !important;
  grid-template-columns:none !important;
}

.detail-modal__scroll,
.plan-modal__scroll,
.start-modal__scroll{
  max-height:min(760px, 88vh);
  overflow:auto;
  -webkit-overflow-scrolling:touch;
  border-radius:inherit;
  scrollbar-width:none;
  -ms-overflow-style:none;
}
.detail-modal__scroll::-webkit-scrollbar,
.plan-modal__scroll::-webkit-scrollbar,
.start-modal__scroll::-webkit-scrollbar{
  width:0;
  height:0;
  display:none;
}

.detail-modal__scroll{
  display:grid;
  grid-template-columns:minmax(280px,.86fr) 1.14fr;
  gap:0;
}

.plan-modal__scroll,
.start-modal__scroll{
  padding:clamp(26px,4vw,48px);
}

@media(max-width:820px){
  .detail-modal__scroll{
    grid-template-columns:1fr;
    max-height:min(760px, 88vh);
  }
}

/* v479: the 6 category photos had a flat dark tint composited over the
   ENTIRE image (both default and hover), not just where the text sits -
   remove that full-panel darkening and rely only on a bottom-anchored
   shade so the top/middle of each photo shows clean, with darkening
   concentrated near the text for legibility. */
.value-intro + .notes .note-item,
.notes .note-item[data-detail="visual"],
.notes .note-item{
  background:url("../img/popup/visual-impact.webp") center / cover no-repeat !important;
}
.value-intro + .notes .note-item[data-detail="seo"],
.notes .note-item[data-detail="seo"]{
  background:url("../img/popup/seo.webp") center / cover no-repeat !important;
}
.value-intro + .notes .note-item[data-detail="search"],
.notes .note-item[data-detail="search"]{
  background:url("../img/popup/search.webp") center / cover no-repeat !important;
}
.value-intro + .notes .note-item[data-detail="experience"],
.notes .note-item[data-detail="experience"]{
  background:url("../img/popup/experience.webp") center / cover no-repeat !important;
}
.value-intro + .notes .note-item[data-detail="investment"],
.notes .note-item[data-detail="investment"]{
  background:url("../img/popup/investment.webp") center / cover no-repeat !important;
}
.value-intro + .notes .note-item[data-detail="simple"],
.notes .note-item[data-detail="simple"]{
  background:url("../img/popup/simple.webp") center / cover no-repeat !important;
}

.note-item-shade{
  background:linear-gradient(to top, rgba(0,0,0,.82) 0%, rgba(0,0,0,.52) 22%, rgba(0,0,0,0) 48%) !important;
}
.notes .note-item:hover .note-item-shade,
.notes .note-item:focus-visible .note-item-shade{
  background:linear-gradient(to top, rgba(0,0,0,.86) 0%, rgba(0,0,0,.55) 24%, rgba(0,0,0,0) 50%) !important;
}

/* v481: narrow the feature-card body copy so an extra word or two wraps to
   the second line, per feedback that the boxes read too wide */
.included-benefit p{
  max-width:82% !important;
}

/* v485: more vertical breathing room between the "What changes beyond the
   look" heading block and the photo row right below it. */
.value-intro{
  margin-bottom:40px !important;
}

/* v1041: halved margin-bottom 40px -> 20px for #scopeIntro specifically
   (the "What changes beyond the look" intro right above the 6-tile photo
   row), per Dave's ask - both mobile and desktop. Scoped to #scopeIntro
   only so other .value-intro blocks (About, FAQ, Credentials intros)
   keep their existing 40px spacing untouched. */
#scopeIntro{
  margin-bottom:20px !important;
}

/* v487: pricing-card eyebrows (HOMEPAGE ONLY / HOMEPAGE + INSIDE PAGES /
   MONTHLY WEBSITE CARE) were hard to see at regular weight - bump to
   semibold for more presence */
.investment-card span{
  font-weight:700 !important;
}


/* v493: corrected, hand-verified popup accent recolor (v490/v492 copied
   layout properties or reintroduced superseded rules and broke alignment -
   this version only sets color/background/border-color on elements
   confirmed via computed-style inspection of the working gold reference
   popup, and uses a LIGHTENED text tint for plain-text usages so it stays
   legible on the dark popup background, per feedback that solid teal text
   was too dark to read). Solid badge circles keep full saturation since
   they have white text on top and don't have a legibility problem. */

/* --- Homepage + Inside Pages: copper --- */
.plan-modal.is-plan-additional-pages .service-option__letter,
.plan-modal.is-plan-additional-pages .service-choice-detail__heading .service-choice-detail__letter{
  background:#7E3187 !important;
}
.plan-modal.is-plan-additional-pages .service-option__eyebrow,
.plan-modal.is-plan-additional-pages .service-option > b,
.plan-modal.is-plan-additional-pages .care-option > b,
.plan-modal.is-plan-additional-pages .plan-pages-info-pill,
.plan-modal.is-plan-additional-pages .plan-summary__row + .plan-pages > label,
.plan-modal.is-plan-additional-pages .service-info-pill,
.plan-modal.is-plan-additional-pages .service-choice-detail__pill{
  color:#dba179 !important;
}
.plan-modal.is-plan-additional-pages .plan-pages-info-pill,
.plan-modal.is-plan-additional-pages .service-info-pill,
.plan-modal.is-plan-additional-pages .service-choice-detail__pill{
  border-color:rgba(126,49,135,.55) !important;
  background:rgba(126,49,135,.12) !important;
}
.plan-modal.is-plan-additional-pages .service-info-pill:hover,
.plan-modal.is-plan-additional-pages .service-info-pill:focus-visible,
.plan-modal.is-plan-additional-pages .service-choice-detail__pill:hover,
.plan-modal.is-plan-additional-pages .service-choice-detail__pill:focus-visible,
.plan-modal.is-plan-additional-pages .plan-pages-info-pill:hover,
.plan-modal.is-plan-additional-pages .plan-pages-info-pill:focus-visible{
  background:rgba(126,49,135,.22) !important;
  border-color:rgba(126,49,135,.85) !important;
  color:#1c242a !important;
}
.plan-modal.is-plan-additional-pages .service-option[data-service="hosting-only"].is-selected,
.plan-modal.is-plan-additional-pages .care-option[data-care="hosting-only"].is-selected{
  background-image:linear-gradient(135deg, rgba(126,49,135,.10), rgba(255,255,255,.035)) !important;
  border-color:rgba(126,49,135,.58) !important;
}
.plan-modal.is-plan-additional-pages .service-option:hover,
.plan-modal.is-plan-additional-pages .care-option:hover{
  border-color:rgba(126,49,135,.48) !important;
  box-shadow:inset 0 0 0 1px rgba(126,49,135,.18), 0 12px 30px rgba(0,0,0,.12) !important;
}
.plan-modal.is-plan-additional-pages .service-option.is-selected:hover,
.plan-modal.is-plan-additional-pages .service-option.is-active:hover,
.plan-modal.is-plan-additional-pages .service-option[aria-pressed="true"]:hover,
.plan-modal.is-plan-additional-pages .care-option.is-selected:hover,
.plan-modal.is-plan-additional-pages .care-option.is-active:hover{
  border-color:rgba(126,49,135,.92) !important;
}
.plan-modal.is-plan-additional-pages .service-option:not(.is-selected):not(.is-active):not([aria-pressed="true"]):hover,
.plan-modal.is-plan-additional-pages .care-option:not(.is-selected):not(.is-active):hover{
  border-color:rgba(126,49,135,.56) !important;
  box-shadow:0 16px 36px rgba(0,0,0,.26), inset 0 0 0 1px rgba(126,49,135,.10) !important;
}
.plan-modal.is-plan-additional-pages .service-choice-detail{
  border-color:rgba(126,49,135,.30) !important;
}
.plan-modal.is-plan-additional-pages .service-option.is-selected,
.plan-modal.is-plan-additional-pages .service-option.is-active,
.plan-modal.is-plan-additional-pages .service-option[aria-pressed="true"],
.plan-modal.is-plan-additional-pages .care-option.is-selected,
.plan-modal.is-plan-additional-pages .care-option.is-active{
  border-color:rgba(126,49,135,.86) !important;
  box-shadow:0 16px 36px rgba(0,0,0,.28), inset 0 0 0 1px rgba(126,49,135,.12) !important;
}

/* --- Monthly Website Care: teal --- */
.plan-modal.is-plan-hosting-care .service-option__letter,
.plan-modal.is-plan-hosting-care .service-choice-detail__heading .service-choice-detail__letter{
  background:#7E3187 !important;
}
.plan-modal.is-plan-hosting-care .service-option__eyebrow,
.plan-modal.is-plan-hosting-care .service-option > b,
.plan-modal.is-plan-hosting-care .care-option > b,
.plan-modal.is-plan-hosting-care .plan-pages-info-pill,
.plan-modal.is-plan-hosting-care .plan-summary__row + .plan-pages > label,
.plan-modal.is-plan-hosting-care .service-info-pill,
.plan-modal.is-plan-hosting-care .service-choice-detail__pill{
  color:#8fbbbb !important;
}
.plan-modal.is-plan-hosting-care .plan-pages-info-pill,
.plan-modal.is-plan-hosting-care .service-info-pill,
.plan-modal.is-plan-hosting-care .service-choice-detail__pill{
  border-color:rgba(60,91,123,.55) !important;
  background:rgba(60,91,123,.14) !important;
}
.plan-modal.is-plan-hosting-care .service-info-pill:hover,
.plan-modal.is-plan-hosting-care .service-info-pill:focus-visible,
.plan-modal.is-plan-hosting-care .service-choice-detail__pill:hover,
.plan-modal.is-plan-hosting-care .service-choice-detail__pill:focus-visible,
.plan-modal.is-plan-hosting-care .plan-pages-info-pill:hover,
.plan-modal.is-plan-hosting-care .plan-pages-info-pill:focus-visible{
  background:rgba(60,91,123,.26) !important;
  border-color:rgba(60,91,123,.90) !important;
  color:#1c242a !important;
}
.plan-modal.is-plan-hosting-care .service-option[data-service="hosting-only"].is-selected,
.plan-modal.is-plan-hosting-care .care-option[data-care="hosting-only"].is-selected{
  background-image:linear-gradient(135deg, rgba(60,91,123,.14), rgba(255,255,255,.035)) !important;
  border-color:rgba(60,91,123,.58) !important;
}
.plan-modal.is-plan-hosting-care .service-option:hover,
.plan-modal.is-plan-hosting-care .care-option:hover{
  border-color:rgba(60,91,123,.52) !important;
  box-shadow:inset 0 0 0 1px rgba(60,91,123,.22), 0 12px 30px rgba(0,0,0,.12) !important;
}
.plan-modal.is-plan-hosting-care .service-option.is-selected:hover,
.plan-modal.is-plan-hosting-care .service-option.is-active:hover,
.plan-modal.is-plan-hosting-care .service-option[aria-pressed="true"]:hover,
.plan-modal.is-plan-hosting-care .care-option.is-selected:hover,
.plan-modal.is-plan-hosting-care .care-option.is-active:hover{
  border-color:rgba(60,91,123,.95) !important;
}
.plan-modal.is-plan-hosting-care .service-option:not(.is-selected):not(.is-active):not([aria-pressed="true"]):hover,
.plan-modal.is-plan-hosting-care .care-option:not(.is-selected):not(.is-active):hover{
  border-color:rgba(60,91,123,.60) !important;
  box-shadow:0 16px 36px rgba(0,0,0,.26), inset 0 0 0 1px rgba(60,91,123,.14) !important;
}
.plan-modal.is-plan-hosting-care .service-choice-detail{
  border-color:rgba(60,91,123,.34) !important;
}
.plan-modal.is-plan-hosting-care .service-option.is-selected,
.plan-modal.is-plan-hosting-care .service-option.is-active,
.plan-modal.is-plan-hosting-care .service-option[aria-pressed="true"],
.plan-modal.is-plan-hosting-care .care-option.is-selected,
.plan-modal.is-plan-hosting-care .care-option.is-active{
  border-color:rgba(60,91,123,.90) !important;
  box-shadow:0 16px 36px rgba(0,0,0,.28), inset 0 0 0 1px rgba(60,91,123,.16) !important;
}

/* v494: catch the remaining gold elements outside the service/care option
   cards - the logo add-on section, the payment-choice buttons, and the
   "Payment Options" label inside the popup (scoped to the modal only, NOT
   the shared .small-label class sitewide). */

/* --- Homepage + Inside Pages: copper --- */
.plan-modal.is-plan-additional-pages .payment-choice__option:hover,
.plan-modal.is-plan-additional-pages .payment-choice__option.is-selected{
  border-color:rgba(126,49,135,.66) !important;
  background:rgba(126,49,135,.13) !important;
}
.plan-modal.is-plan-additional-pages .logo-addon:hover,
.plan-modal.is-plan-additional-pages .logo-addon:has(input:checked){
  border-color:rgba(126,49,135,.52) !important;
  background:rgba(126,49,135,.11) !important;
}
.plan-modal.is-plan-additional-pages .logo-addon input{
  accent-color:#7E3187 !important;
}
.plan-modal.is-plan-additional-pages .logo-addon strong{
  color:#dba179 !important;
}
.plan-modal.is-plan-additional-pages .logo-addon-card.is-selected .care-pill,
.plan-modal.is-plan-additional-pages .logo-addon-card.is-active .care-pill,
.plan-modal.is-plan-additional-pages .logo-addon-card.is-selected .addon-pill,
.plan-modal.is-plan-additional-pages .logo-addon:has(input:checked) b,
.plan-modal.is-plan-additional-pages .service-option.is-selected b,
.plan-modal.is-plan-additional-pages .service-option[aria-pressed="true"] b,
.plan-modal.is-plan-additional-pages .care-option.is-selected b,
.plan-modal.is-plan-additional-pages .care-option.is-active b{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  color:#ffffff !important;
  box-shadow:0 10px 28px rgba(126,49,135,.24) !important;
}
.plan-modal.is-plan-additional-pages .price-card.is-selected,
.plan-modal.is-plan-additional-pages .price-card.is-active,
.plan-modal.is-plan-additional-pages .homepage-choice.is-active,
.plan-modal.is-plan-additional-pages .account-flow-choice:hover,
.plan-modal.is-plan-additional-pages .service-option.is-selected,
.plan-modal.is-plan-additional-pages .care-option.is-selected,
.plan-modal.is-plan-additional-pages .payment-choice__option.is-selected,
.plan-modal.is-plan-additional-pages .start-modal .price-card.is-selected{
  background-image:linear-gradient(135deg, rgba(126,49,135,.10), rgba(255,255,255,.035)) !important;
  border-color:rgba(126,49,135,.58) !important;
}
.plan-modal.is-plan-additional-pages .payment-choice .small-label{
  color:#dba179 !important;
}

/* --- Monthly Website Care: teal --- */
.plan-modal.is-plan-hosting-care .payment-choice__option:hover,
.plan-modal.is-plan-hosting-care .payment-choice__option.is-selected{
  border-color:rgba(60,91,123,.75) !important;
  background:rgba(60,91,123,.16) !important;
}
.plan-modal.is-plan-hosting-care .logo-addon:hover,
.plan-modal.is-plan-hosting-care .logo-addon:has(input:checked){
  border-color:rgba(60,91,123,.60) !important;
  background:rgba(60,91,123,.14) !important;
}
.plan-modal.is-plan-hosting-care .logo-addon input{
  accent-color:#7E3187 !important;
}
.plan-modal.is-plan-hosting-care .logo-addon strong{
  color:#8fbbbb !important;
}
.plan-modal.is-plan-hosting-care .logo-addon-card.is-selected .care-pill,
.plan-modal.is-plan-hosting-care .logo-addon-card.is-active .care-pill,
.plan-modal.is-plan-hosting-care .logo-addon-card.is-selected .addon-pill,
.plan-modal.is-plan-hosting-care .logo-addon:has(input:checked) b,
.plan-modal.is-plan-hosting-care .service-option.is-selected b,
.plan-modal.is-plan-hosting-care .service-option[aria-pressed="true"] b,
.plan-modal.is-plan-hosting-care .care-option.is-selected b,
.plan-modal.is-plan-hosting-care .care-option.is-active b{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  color:#ffffff !important;
  box-shadow:0 10px 28px rgba(60,91,123,.28) !important;
}
.plan-modal.is-plan-hosting-care .price-card.is-selected,
.plan-modal.is-plan-hosting-care .price-card.is-active,
.plan-modal.is-plan-hosting-care .homepage-choice.is-active,
.plan-modal.is-plan-hosting-care .account-flow-choice:hover,
.plan-modal.is-plan-hosting-care .service-option.is-selected,
.plan-modal.is-plan-hosting-care .care-option.is-selected,
.plan-modal.is-plan-hosting-care .payment-choice__option.is-selected,
.plan-modal.is-plan-hosting-care .start-modal .price-card.is-selected{
  background-image:linear-gradient(135deg, rgba(60,91,123,.14), rgba(255,255,255,.035)) !important;
  border-color:rgba(60,91,123,.62) !important;
}
.plan-modal.is-plan-hosting-care .payment-choice .small-label{
  color:#8fbbbb !important;
}
.investment-section .investment-copy h2{
  word-spacing:.08em !important;
}
.credentials-intro h2{
  margin-bottom:20px !important;
}
.credentials-intro p{
  max-width:600px !important;
}
.credentials-intro{
  margin-top:68px !important;
}

/* v519: full-bleed photo background behind the About WaltersGroup Creative
   section - edge to edge, square corners, scales with the browser via
   background-size:cover. No overlay/tint - photo shown as-is per request. */
.credentials-intro{
  max-width:none !important;
  width:100vw !important;
  margin-left:calc(50% - 50vw) !important;
  margin-right:calc(50% - 50vw) !important;
  border-radius:0 !important;
  padding:90px clamp(22px, 6vw, 140px) !important;
  box-sizing:border-box !important;
  position:relative !important;
  overflow:hidden !important;
}

/* v522: parallax - the photo now lives on its own oversized layer (taller
   than the section, positioned behind the text) that main-v114.js nudges up
   and down via translateY as the section scrolls through the viewport, so
   the background moves at a different rate than the text sitting on top
   of it instead of feeling static. Sized 130% tall with the extra height
   split evenly above/below so the translate range never reveals an edge. */
.credentials-intro__bg{
  position:absolute;
  left:0;
  right:0;
  top:-15%;
  height:130%;
  background-image:url('../img/about-section-bg2.jpg');
  background-size:cover;
  background-position:center;
  background-repeat:no-repeat;
  will-change:transform;
  z-index:0;
  pointer-events:none;
}

.credentials-intro > *:not(.credentials-intro__bg){
  position:relative;
  z-index:1;
}

/* v524: the text block gets its own independent parallax drift (handled in
   main-v114.js), separate from and slower than the background photo, for a
   layered depth effect instead of the whole section moving as one flat
   piece. */
.credentials-intro__copy{
  will-change:transform;
}

@media (prefers-reduced-motion: reduce){
  .credentials-intro__bg,
  .credentials-intro__copy{
    transform:none !important;
  }
}

/* v1033: same "too busy behind the text" problem Dave flagged for the
   nav/header also hits this section in the same 761-900px window - the
   background photo's laptop-mockup area (with its own baked-in
   "Architecture with clarity..." sample text) lands right under the
   "Three decades..." headline at this width, reading as one garbled
   overlapping mess. Reusing the exact same proven fix as the mobile
   version just above (drop the photo, keep the copy on the plain dark
   background) for this width band too. 901px+ desktop, where Dave
   hasn't flagged any issue, is untouched. */
@media (min-width:761px) and (max-width:900px){
  .credentials-intro__bg{
    display:none !important;
  }
  .credentials-intro{
    background:transparent !important;
  }
}

/* v539: the photo background doesn't work at phone widths (too busy behind
   the text, hard to read) - drop it on mobile and just show the copy
   floating on the site's dark background instead. */
@media (max-width:760px){
  .credentials-intro__bg{
    display:none !important;
  }
  .credentials-intro{
    background:transparent !important;
  }
  /* v541/v544: the global h2{max-width:11ch} rule wraps this headline to 4
     lines with "project." stranded alone on the last line. 21ch fixed the
     line count but still left "project." as a 1-word widow on line 3.
     14ch wraps it as "Three decades of / design experience / behind every
     project." - 3 lines, no widow. */
  .credentials-intro h2{
    max-width:14ch !important;
  }

  /* v545: mobile-only - the black panel had way too much empty air above
     and below the copy. Pull the top/bottom padding in so the text sits
     higher, and add the WaltersGroup icon mark centered below the
     paragraph to fill that lower space intentionally instead of leaving
     it blank. Desktop untouched. */
  .credentials-intro{
    margin-top:34px !important;
    padding-top:24px !important;
    padding-bottom:12px !important;
    margin-bottom:20px !important;
  }

  /* v555: roughly half the dead space between the About section's icon and
     the footer's contact form below it - trimmed credentials-intro's own
     bottom padding/margin above, plus main's fixed 90px bottom padding and
     the footer's top padding, which together were stacking into ~230px of
     empty space. Desktop untouched. */
  main{
    padding-bottom:45px !important;
  }

  .wg-footer{
    padding-top:21px !important;
  }

  .credentials-intro__icon{
    display:block !important;
    width:85px !important;
    height:auto !important;
    margin:16px auto 0 !important;
    opacity:.9;
  }
}

.credentials-intro__icon{
  display:none;
}
/* v502: keep "3/6/12 monthly payments" on one line at mobile modal widths
   instead of wrapping "payments" to its own line - slightly smaller size
   plus nowrap, still full width available since the mobile payment-choice
   layout already stacks label/amount instead of side-by-side. */
@media (max-width:760px){
  .plan-modal .payment-choice__option strong{
    font-size:18px !important;
    white-space:nowrap !important;
  }
}

/* v507: narrow pricing-card body copy a touch everywhere to avoid a lone
   trailing word on its own line. */
.investment-card p{
  max-width:88% !important;
}

/* v507: the Monthly Website Care card's gears icon and body paragraph were
   only tuned for the desktop 3-column layout (>980px) and the mobile
   single-column layout (<760px). In between (761-980px), the pricing grid
   already drops to one full-width column but the icon/text spacing didn't
   get a matching adjustment, so the wider single-column card reflowed the
   paragraph into fewer, wider lines that ran directly under the icon.
   Shrink+reposition the icon and narrow the paragraph in that gap so they
   stay clear of each other. */
@media (min-width:761px) and (max-width:980px){
  .investment-card.price-trigger:not(.investment-card--primary):not(.price-trigger--plus)::after{
    top:30px !important;
    right:32px !important;
    width:clamp(70px, 12vw, 90px) !important;
  }
  .investment-card.price-trigger:not(.investment-card--primary):not(.price-trigger--plus) p{
    max-width:66% !important;
  }
}

/* v508: the 3-card pricing row and 4-card feature row drifted out of
   alignment at wide viewports - .included-benefits had its own independent
   max-width:1760px cap (from way earlier in the file) while .investment-grid
   has no cap of its own and just fills the full-bleed .investment-section
   container, so past ~1760px the pricing row kept growing with the browser
   while the feature row stopped and stayed centered/narrower. Remove the
   independent cap so both rows track the same width at every viewport. */
.included-benefits{
  max-width:none !important;
  margin-left:0 !important;
  margin-right:0 !important;
}

/* v509: on wide desktop browsers the gears icon (top:47px in the base rule)
   was sitting almost flush against the paragraph below it - only ~4px of
   clearance, because this card has no subtitle line under its price (the
   other two cards do, which gives their icons more headroom). Move it up
   and shrink it slightly at desktop widths, and narrow this card's
   paragraph further so it doesn't leave a trailing widow line. */
@media (min-width:981px){
  .investment-card.price-trigger:not(.investment-card--primary):not(.price-trigger--plus)::after{
    top:20px !important;
    right:24px !important;
    width:clamp(55px, 16%, 118px) !important;
  }
  .investment-card.price-trigger:not(.investment-card--primary):not(.price-trigger--plus) p{
    max-width:78% !important;
  }
}

/* v517: at the 3-column widths between ~981px and ~1450px, each card is only
   roughly 280-400px wide, but the "Homepage Only" and "Homepage + Inside
   Pages" icons had no matching desktop rule at all - they were stuck at
   their base clamp's floor (123px / 130px), which runs into the copy below
   on narrower cards. Shrink and tuck them into the corner the same way the
   gears icon on the third card was already fixed. */
@media (min-width:981px){
  .investment-card--primary.price-trigger::after{
    top:24px !important;
    right:24px !important;
    width:clamp(64px, 20%, 167px) !important;
  }
  .investment-card.price-trigger--plus::after{
    top:24px !important;
    right:24px !important;
    width:clamp(68px, 21%, 174px) !important;
  }
}

/* v523: remove the colored pill background/border behind the price
   ($X/mo) tag on service/care options - was turning solid gold/copper/teal
   on hover, selected, and active states across both popup themes. Keep the
   plain neutral resting look (subtle white tint, thin border) in every
   state instead. Placed last, and matching the exact state/theme selector
   chains those rules used, so specificity can't let them win back through. */
.service-option b,
.care-option b,
.logo-addon b,
[data-service] b,
[data-care] b,
[data-logo-addon] b,
.plan-modal .service-option > b,
.plan-modal .care-option > b,
.service-option.is-selected b,
.service-option.is-active b,
.service-option[aria-pressed="true"] b,
.care-option.is-selected b,
.care-option.is-active b,
.logo-addon.is-selected b,
.logo-addon.is-active b,
.logo-addon:has(input:checked) b,
[data-service].is-selected b,
[data-service].is-active b,
[data-care].is-selected b,
[data-care].is-active b,
[data-logo-addon].is-selected b,
[data-logo-addon].is-active b,
.plan-modal.is-plan-additional-pages .service-option > b,
.plan-modal.is-plan-additional-pages .care-option > b,
.plan-modal.is-plan-additional-pages .service-option.is-selected b,
.plan-modal.is-plan-additional-pages .service-option[aria-pressed="true"] b,
.plan-modal.is-plan-additional-pages .care-option.is-selected b,
.plan-modal.is-plan-additional-pages .care-option[aria-pressed="true"] b,
.plan-modal.is-plan-additional-pages .logo-addon:has(input:checked) b,
.plan-modal.is-plan-hosting-care .service-option > b,
.plan-modal.is-plan-hosting-care .care-option > b,
.plan-modal.is-plan-hosting-care .service-option.is-selected b,
.plan-modal.is-plan-hosting-care .service-option[aria-pressed="true"] b,
.plan-modal.is-plan-hosting-care .care-option.is-selected b,
.plan-modal.is-plan-hosting-care .care-option[aria-pressed="true"] b,
.plan-modal.is-plan-hosting-care .logo-addon:has(input:checked) b{
  background:rgba(255,255,255,.04) !important;
  border-color:rgba(28,36,42,.14) !important;
  color:#1c242a !important;
}

/* v549: mobile-only footer rework -
   1) contact form moves to the top, WaltersGroup brand/contact/social block
      moves below it (was: brand, social, signature, form - now: form,
      brand, social, signature).
   2) the gap between those two "categories" cut roughly in half (an older
      unscoped .wg-footer-inner{gap:44px !important} rule was winning over
      the mobile-specific 24px rule, which is why it looked huge).
   3) gap between that brand block and the webyay logo mark cut in half.
   4) .wg-footer's leftover 130px bottom padding (sized for an old
      absolutely-positioned signature/mark layout that no longer applies
      now that both are in normal flow) cut in half so the page doesn't
      hang with dead space below the webyay mark.
   Desktop (761px+) untouched. */
@media (max-width:760px){
  html body .wg-footer-inner{
    gap:22px !important;
  }

  html body .wg-footer-form{
    order:0 !important;
  }

  html body .wg-footer-brand{
    order:1 !important;
  }

  html body .wg-footer-social{
    order:2 !important;
  }

  html body .wg-footer .wg-cursive-signature-wrap{
    order:3 !important;
    margin-top:0 !important;
  }

  html body .wg-webyay-footer-mark{
    margin-top:13px !important;
  }

  html body .wg-footer{
    padding-bottom:65px !important;
  }
}

/* v571: header search - magnifying glass toggle, panel expands to the left
   on hover/click, live-filtered results dropdown covering every section of
   the page including individual FAQ questions. Pattern mirrors the
   HMG/Trillium site-search implementation per Dave's reference. */
.site-search{
  position:relative;
  display:flex;
  align-items:center;
}
.search-toggle{
  width:38px;
  height:38px;
  display:grid;
  place-items:center;
  border:0;
  background:transparent;
  color:rgba(246,241,232,.92);
  cursor:pointer;
  padding:0;
  transition:color .22s ease;
}
.search-toggle:hover,
.search-toggle:focus-visible,
.site-search.is-search-open .search-toggle{
  color:#7E3187;
  background:transparent;
}
.search-toggle svg{
  width:17px;
  height:17px;
  fill:none;
  stroke:currentColor;
  stroke-width:2;
}
.search-panel{
  position:absolute;
  left:100%;
  right:auto;
  top:50%;
  transform:translateY(-50%);
  width:0;
  overflow:hidden;
  transition:width .28s ease;
  z-index:40;
}
.site-search.is-search-open .search-panel{
  width:240px;
}
/* v576: icon moved to the left end of the nav, so the panel now opens
   rightward, flush against the icon (left:100% = zero gap) instead of
   floating off to the left with a dead-air gap the cursor had to cross -
   that gap was exactly what caused the panel to vanish before Dave could
   reach it. Nearby nav buttons fade out while search is open so the panel
   has a clean overlay instead of double-rendering on top of them. */
header.wg-topbar.search-open .wg-nav > a.nav-proposed,
header.wg-topbar.search-open .wg-nav > a.nav-contact{
  opacity:0 !important;
  pointer-events:none !important;
  transition:opacity .16s ease !important;
}
.search-input{
  width:228px;
  height:40px;
  border-radius:999px;
  border:1px solid rgba(255,255,255,.20);
  background:rgba(20,20,20,.72);
  backdrop-filter:blur(16px);
  -webkit-backdrop-filter:blur(16px);
  color:#fff;
  padding:0 16px;
  font-size:14px;
  outline:none;
  font-family:"Plus Jakarta Sans", Arial, sans-serif;
}
.search-input::placeholder{
  color:rgba(246,241,232,.5);
}
.search-input:focus{
  border-color:#7E3187;
}
.search-results{
  position:fixed;
  top:96px;
  right:clamp(22px,4vw,64px);
  width:min(420px,calc(100vw - 40px));
  max-height:70vh;
  overflow:auto;
  -webkit-overflow-scrolling:touch;
  z-index:120;
  background:rgba(26,26,26,.94);
  backdrop-filter:blur(22px);
  -webkit-backdrop-filter:blur(22px);
  border:1px solid rgba(255,255,255,.14);
  border-radius:20px;
  padding:10px;
  display:none;
  box-shadow:0 30px 80px rgba(0,0,0,.4);
}
.search-results.open{
  display:block;
}
.search-result{
  display:block;
  width:100%;
  text-align:left;
  padding:12px 14px;
  border-radius:14px;
  border:0;
  background:transparent;
  color:#fff;
  cursor:pointer;
  font-family:"Plus Jakarta Sans", Arial, sans-serif;
}
.search-result:hover,
.search-result:focus-visible{
  background:rgba(126,49,135,.14);
  outline:0;
}
.search-result span{
  display:block;
  color:#c7cace !important; /* v1039: was var(--gold) (#7E3187), a dark
    steel-blue that was nearly unreadable against this popup's near-black
    background (rgba(26,26,26,.94)) - Dave couldn't read it at all.
    Switched to the same pale blue already used for the before/after
    slider's wand arrows (live-measured as rgb(199,202,206)), which reads
    clearly on dark backgrounds. */
  font-size:10px;
  text-transform:uppercase;
  letter-spacing:.14em;
  margin-bottom:3px;
}
.search-result strong{
  display:block;
  font-weight:500;
  font-size:14px;
}
.search-result p{
  margin:4px 0 0;
  color:rgba(246,241,232,.66);
  font-size:12.5px;
  line-height:1.5;
}
.search-empty{
  padding:14px;
  color:rgba(246,241,232,.6);
  font-size:13px;
}
.search-hit-highlight{
  animation:searchHitPulse 1.6s ease;
}
@keyframes searchHitPulse{
  0%, 100%{ box-shadow:0 0 0 0 rgba(126,49,135,0); }
  30%{ box-shadow:0 0 0 6px rgba(126,49,135,.30); }
}

@media(max-width:760px){
  .search-toggle{
    width:58px !important;
    height:58px !important;
  }
  .search-toggle svg{
    width:28px;
    height:28px;
  }
  .search-panel{
    position:fixed !important;
    right:auto !important;
    left:50vw !important;
    top:70px !important;
    transform:translateX(-50%) !important;
    width:0;
  }
  .site-search.is-search-open .search-panel{
    width:min(280px, calc(100vw - 48px)) !important;
  }
  .search-input{
    width:100% !important;
    box-sizing:border-box;
    /* v583: iOS Safari auto-zooms the whole page on focus when an input's
       font-size is under 16px - that's what was causing the page to zoom
       in and get distorted when the search field was tapped. 16px is the
       documented threshold; keeping it here (not shrinking it back down
       elsewhere) is what stops the zoom. */
    font-size:16px !important;
  }
  .search-results{
    top:118px;
    right:18px;
    width:min(340px, calc(100vw - 36px));
  }
}

@media(max-width:430px){
  header.wg-topbar .nav-menu-toggle,
  header.wg-topbar .wg-nav .nav-start,
  header.wg-topbar .wg-nav .nav-start.account-flow-open{
    padding-left:12px !important;
    padding-right:12px !important;
    font-size:10px !important;
  }
}

/* v574: root cause found - an unconditional (no media query) rule
   "header.wg-topbar nav.wg-nav a.nav-btn{display:inline-flex!important}"
   was winning the cascade over every class-based "display:none!important"
   override for .nav-contact/.nav-proposed, despite those having provably
   higher specificity (0,3,4 vs 0,3,3) - confirmed via CDP/live browser this
   was a genuine engine anomaly, not a specificity miscalculation on our end.
   Switching to ID selectors sidesteps it entirely: an ID always outranks
   any class-based rule, full stop, so this is guaranteed to win regardless
   of whatever the cascade is doing with the class-based rules above. */
@media(max-width:760px){
  #navContactLink,
  #navProposedLink,
  #navFaqLink{
    display:none !important;
  }
}

/* v577: "See Your New Website" pill on the before/after comparison -
   softer shadow, scaled to 85% (button, icon and text together as one
   unit via transform:scale so nothing goes out of proportion), and
   nudged 25px left / 30px down from wherever each breakpoint's base
   top/right position lands it. Placed last + matching the highest-
   specificity selector pattern already used for this element so it
   wins over every earlier breakpoint-specific block above. */
@media (min-width:761px){
  html body .comparison-side-cta{
    transform:translate(-25px, 30px) scale(.85) !important;
    transform-origin:center center !important;
  }
  html body .comparison-side-cta__btn,
  html body .comparison-side-cta__btn:link,
  html body .comparison-side-cta__btn:visited{
    box-shadow:0 4px 10px rgba(0,0,0,.10) !important;
  }
  html body .comparison-side-cta__btn:hover,
  html body .comparison-side-cta__btn:focus-visible{
    box-shadow:0 4px 10px rgba(0,0,0,.10) !important;
    transform:none !important;
  }
}

/* v578/v1036: header bar - lighten the dark overlay so the page behind it
   shows through more (blur stays the same, only the darkening opacity
   drops), and remove the border-bottom entirely - that was the faint
   white line Dave was seeing along the bottom edge on dark backgrounds.
   v1036: Dave felt it was still reading too dark under the logo/nav -
   dropped both stops another ~25% (.58->.42, .22->.16 desktop;
   .52->.38, .18->.13 mobile). backdrop-filter:blur (set on the base
   .wg-topbar rule, untouched here) still applies underneath.
   REVERSED (this round), per Dave: "this upper darkening bar needs to be
   darker on base site" - the v1036 lightening pass above went too far in
   the other direction. Bumped both stops back up well past where v1036
   left them (.42->.75, .16->.35 desktop; .38->.7, .13->.32 mobile) for a
   genuinely darker overlay this time, not just undoing the last trim. */
header.wg-topbar{
  background:linear-gradient(180deg, rgba(48,53,58,.75), rgba(48,53,58,.35)) !important;
  border-bottom:none !important;
  box-shadow:none !important;
}
@media (max-width:760px){
  header.wg-topbar{
    background:linear-gradient(180deg, rgba(42,42,42,.7), rgba(42,42,42,.32)) !important;
    border-bottom:none !important;
    box-shadow:none !important;
  }
}

/* v580: "Custom logo design: $149" pill - when the add-on checkbox is
   checked, fill it solid with that plan category's accent color instead
   of just tinting the text, so it's obvious at a glance it's selected.
   Homepage Only = gold, Homepage + Inside Pages = bronze/copper,
   Website Care = teal, matching each modal's existing accent theme.
   Note: v523 deliberately killed the solid-fill look on .service-option/
   .care-option price tags elsewhere - this does NOT touch those, it's
   scoped to .logo-addon b only. Placed last to win over v523/13683. */
.logo-addon:has(input:checked) b{
  background:var(--gold-bg) !important;
  border-color:var(--gold-bg) !important;
  color:#2a2a2a !important;
}
.logo-addon input:checked{
  accent-color:var(--gold-bg) !important;
}
.plan-modal.is-plan-additional-pages .logo-addon:has(input:checked) b{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  color:#ffffff !important;
}
.plan-modal.is-plan-additional-pages .logo-addon input:checked{
  accent-color:#7E3187 !important;
}
.plan-modal.is-plan-hosting-care .logo-addon:has(input:checked) b{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  color:#ffffff !important;
}
.plan-modal.is-plan-hosting-care .logo-addon input:checked{
  accent-color:#7E3187 !important;
}

/* v581: "See Your New Website" pill was too snug - text/icon nearly
   touching the left and right edges. Small bump to both the wrapper's
   width and the button's horizontal padding (not a big change, just
   enough breathing room), matching the highest-specificity selector
   pattern already established for this element so it wins cleanly. */
@media (min-width:761px){
  html body .comparison-side-cta{
    width:clamp(224px, 16vw, 260px) !important;
  }
  html body .comparison-side-cta__btn,
  html body .comparison-side-cta__btn:link,
  html body .comparison-side-cta__btn:visited{
    padding:13px 22px !important;
  }
}

/* v586: mobile header fixes -
   1) the enlarged search icon (58px) was taller than the Menu button
      (30px), and since both share row 1 of the nav grid, the row's auto
      height grew to fit the icon - that pushed Start Project (row 2)
      down far enough to spill 13px below the header's fixed 96px band.
      Icon dialed back ~10% (58->52, 28->25) per Dave's ask, AND row 1 is
      now locked to a fixed height matching the Menu button so a taller
      icon can never stretch the row again - the icon just centers on
      that row and is allowed to overflow it visually (header itself has
      overflow:visible), without moving anything else.
   2) all four header elements (logo, search icon, hamburger menu, Start
      Project) nudged up ~8px by trimming the header's top padding. */
@media (max-width:760px){
  header.wg-topbar{
    padding-top:4px !important;
  }
  header.wg-topbar nav.wg-nav{
    grid-template-rows:30px auto !important;
  }
  .search-toggle{
    width:52px !important;
    height:52px !important;
  }
  .search-toggle svg{
    width:25px !important;
    height:25px !important;
  }
}

/* v587: header bar 6px shorter (96->90), and nav items nudged back down
   2px (padding-top 4->6) since the previous 8px-up move left them
   crowding the very top edge. Net effect vs. the original 96px header:
   items sit 6px higher than they started, header itself is 6px shorter. */
@media (max-width:760px){
  header.wg-topbar{
    height:90px !important;
    min-height:90px !important;
    max-height:90px !important;
    padding-top:6px !important;
  }
}

/* v593: pricing section rebuilt as one unified entry card (was 3 top-level
   cards - Dave/Jackie felt 3 choices up front was confusing). Flow now:
   1) single "Get Started / Starting at $19/mo / See options" card
   2) clicking See options reveals two big path buttons (new website / care)
   3) new-website path reveals the original two pricing cards (unchanged
      price-trigger/data-plan logic - just relocated in the DOM)
   4) care path programmatically clicks #careDirectTrigger, which opens the
      existing hosting-care modal via the same untouched price-trigger JS.
   On desktop the entry card sits at ~half width with the payment-options
   block to its right (header stacked above the 3/6/12-month list instead
   of side-by-side). On mobile, payment-options stays stacked below the
   card exactly as before - only the desktop arrangement changes. */

.is-hidden{
  display:none !important;
}

.investment-grid.investment-grid--single{
  display:block !important;
  grid-template-columns:none !important;
}

#investmentLayout{
  display:flex !important;
  align-items:flex-start !important;
  gap:24px !important;
}

#investmentLayout #investmentGrid{
  flex:0 0 42% !important;
  max-width:42% !important;
  margin:0 !important;
}

#investmentLayout .payment-options{
  flex:1 1 auto !important;
  max-width:56% !important;
  margin-top:0 !important;
  display:flex !important;
  flex-direction:column !important;
  align-items:stretch !important;
  gap:14px !important;
  grid-template-columns:none !important;
}

@media (max-width:980px){
  #investmentLayout{
    display:block !important;
  }
  #investmentLayout #investmentGrid,
  #investmentLayout .payment-options{
    max-width:100% !important;
    flex:none !important;
  }
  #investmentLayout .payment-options{
    margin-top:16px !important;
  }
}

.investment-entry__cta{
  margin-top:18px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  padding:12px 22px;
  border-radius:999px;
  background:var(--gold-bg);
  color:#2a2a2a;
  font-size:14px;
  font-weight:600;
  letter-spacing:.01em;
  border:none;
  cursor:pointer;
  transition:transform .18s ease, box-shadow .18s ease;
}
.investment-entry__cta:hover{
  background:#66266E;
  transform:translateY(-2px);
  box-shadow:0 10px 24px rgba(126,49,135,.35);
}

.investment-chooser{
  display:flex;
  flex-direction:column;
  gap:16px;
}

.investment-chooser__back{
  align-self:flex-start;
  background:none;
  border:none;
  color:rgba(84,98,107,.65);
  font-size:13px;
  cursor:pointer;
  padding:4px 0;
}
.investment-chooser__back:hover{
  color:#1c242a;
}

.investment-chooser__paths,
.investment-chooser__cards{
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:16px;
}

.investment-chooser .investment-path{
  cursor:pointer;
  text-align:left;
  transition:transform .18s ease, background .18s ease, border-color .18s ease;
}
.investment-chooser .investment-path strong{
  display:block !important;
  font-size:18px !important;
  font-weight:500 !important;
  text-transform:none !important;
  letter-spacing:normal !important;
  color:rgba(32,36,42,.92) !important;
  margin-bottom:8px !important;
}
.investment-chooser .investment-path span{
  display:block !important;
  text-transform:none !important;
  letter-spacing:normal !important;
  color:rgba(32,36,42,.60) !important;
  font-size:14px !important;
  font-weight:400 !important;
  margin-bottom:0 !important;
}

@media (hover:hover) and (pointer:fine){
  .investment-chooser .investment-path:hover{
    transform:translateY(-4px);
    background:rgba(126,49,135,.105);
    border-color:rgba(126,49,135,.48);
  }
}

@media (max-width:980px){
  .investment-chooser__paths,
  .investment-chooser__cards{
    grid-template-columns:1fr !important;
  }
}

/* v594: entry card refinements per feedback - eyebrow now reads "New
   Professional Website" (bumped larger, matches the $79/mo price it now
   leads with instead of the generic $19/mo teaser), button renamed
   "Start Project" to match the header CTA language, and "No long-term
   contract" no longer looks like a clickable pill - it's plain text with
   a small checkmark so it doesn't compete with the real button next to it. */
#investmentEntry .investment-entry__eyebrow{
  font-size:14px !important;
  font-weight:700 !important;
  letter-spacing:.12em !important;
}

#investmentEntry .investment-entry__note{
  display:flex !important;
  align-items:center !important;
  gap:6px !important;
  background:none !important;
  border:0 !important;
  padding:0 !important;
  border-radius:0 !important;
  color:rgba(32,36,42,.62) !important;
  font-size:13px !important;
  text-transform:none !important;
  letter-spacing:normal !important;
  white-space:nowrap !important;
  margin-bottom:14px !important;
}
#investmentEntry .investment-entry__cta{
  margin-top:0 !important;
}
#investmentEntry .investment-entry__note svg{
  flex:none;
  width:14px;
  height:14px;
  color:var(--gold);
}

/* v595: payment-options heading gets a hard line break after "approach" on
   desktop only (mobile wraps naturally at the narrower width and doesn't
   need it), and the whole payment-options block gets breathing room from
   the card next to it instead of sitting flush against the gap. */
@media (min-width:981px){
  br.payment-heading-break{
    display:block !important;
  }
  #investmentLayout .payment-options{
    padding-left:12px !important;
  }
}
@media (max-width:980px){
  br.payment-heading-break{
    display:none !important;
  }
}

/* v597: entry card value-comparison line ("Hand-built sites like this used
   to run $3,000-$4,000+...") - a factual statement about Dave's own past
   agency pricing, not a "was" claim about this specific offer, so no
   strikethrough/fake-MSRP treatment. Sits directly under the price, styled
   smaller and muted so the big $79/mo stays the visual anchor. */
#investmentEntry .investment-entry__compare{
  margin:2px 0 14px !important;
  font-size:13px !important;
  line-height:1.5 !important;
  color:rgba(32,36,42,.55) !important;
  max-width:340px !important;
}

/* v600: narrower card (was 50/50, now 42/56 with the payment-options
   column scooted left/closer per Dave's feedback), plus a max-width on
   the description paragraph so it wraps to two balanced lines instead of
   leaving "have." stranded alone as a widow on its own third line. */
#investmentEntry .investment-entry__desc{
  max-width:34ch !important;
}
@media (max-width:980px){
  #investmentEntry .investment-entry__desc{
    max-width:100% !important;
  }
}

/* v603: whole entry card is clickable (not just the Start Project button),
   so it needs its own pointer cursor + hover affordance like the other
   clickable investment cards get. */
#investmentEntry{
  cursor:pointer !important;
}
@media (hover:hover) and (pointer:fine){
  #investmentEntry:hover{
    transform:scale(1.02) !important;
    border-color:rgba(126,49,135,.65) !important;
    box-shadow:0 0 0 15px rgba(126,49,135,.55), 0 22px 46px rgba(0,0,0,.14) !important;
    z-index:2 !important;
  }
}

/* v606: the 3-option chooser moved OFF the page and INTO the plan-modal
   pop-up per Dave's feedback - clicking the single entry card now opens
   this modal directly to a chooser screen (instead of showing small cards
   inline on the page), and picking an option swaps straight into that
   plan's existing detail view in the same pop-up. Built with its own class
   names (not .investment-card) since that class carries a long chain of
   .investment-section-scoped light-background overrides elsewhere in this
   file that would fight a dark modal panel - cleaner to style this fresh
   for the modal's actual (dark) background than to fight those overrides
   a second time. */
.plan-modal-chooser{
  display:none;
}
.plan-modal.is-choosing .plan-modal-chooser{
  display:block;
}
.plan-modal.is-choosing .plan-modal__scroll{
  display:none;
}

.plan-modal-chooser > .small-label{
  color:var(--gold);
}
.plan-modal-chooser h2{
  margin:10px 0 26px;
  font-size:clamp(28px,3vw,40px);
  line-height:1.05;
  letter-spacing:-.03em;
  color:#1c242a;
  font-weight:500;
}

.plan-modal-chooser__cards{
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:16px;
}

.plan-modal-chooser__card{
  padding:26px;
  border-radius:24px;
  background:rgba(255,255,255,.06);
  border:1px solid rgba(28,36,42,.14);
  transition:transform .18s ease, background .18s ease, border-color .18s ease;
}
.plan-modal-chooser__card--primary{
  background:linear-gradient(135deg, rgba(126,49,135,.20), rgba(0,0,0,.16));
  border-color:rgba(126,49,135,.32);
}
.plan-modal-chooser__card span{
  display:block;
  color:var(--gold);
  font-size:11px;
  font-weight:700;
  letter-spacing:.14em;
  text-transform:uppercase;
  margin-bottom:13px;
}
.plan-modal-chooser__card h3{
  margin:0 0 12px;
  font-size:clamp(30px,2.6vw,44px);
  line-height:1;
  letter-spacing:-.045em;
  font-weight:500;
  color:#1c242a;
}
.plan-modal-chooser__card h3 em{
  font-style:normal;
  font-size:.34em;
  letter-spacing:-.01em;
  color:rgba(84,98,107,.70);
}
.plan-modal-chooser__card p{
  margin:0 0 14px;
  color:rgba(84,98,107,.68);
  font-size:14px;
  line-height:1.55;
}
.plan-modal-chooser__card small{
  display:inline-flex;
  padding:7px 10px;
  border-radius:999px;
  background:rgba(255,255,255,.055);
  border:1px solid rgba(28,36,42,.13);
  color:rgba(84,98,107,.70);
  font-size:10px;
  line-height:1;
  letter-spacing:.10em;
  text-transform:uppercase;
}

@media (hover:hover) and (pointer:fine){
  .plan-modal-chooser__card:hover{
    transform:translateY(-4px);
    background:rgba(126,49,135,.105);
    border-color:rgba(126,49,135,.48);
  }
  .plan-modal-chooser__card--primary:hover{
    background:linear-gradient(135deg, rgba(126,49,135,.28), rgba(0,0,0,.18));
    border-color:rgba(126,49,135,.62);
  }
}

@media (max-width:760px){
  .plan-modal-chooser__cards{
    grid-template-columns:1fr;
  }
}

/* v607: no more prelim chooser popup - the entry card opens straight to
   the homepage-only detail view now. Standalone Website Care is reached
   via this small text-link switch next to the "Monthly Website Care"
   section instead, since someone who doesn't want a new site at all is
   better served by a quiet opt-out than a sibling choice presented before
   they've even seen the homepage plan. */
.plan-mode-switch{
  display:block;
  margin:-6px 0 16px;
  padding:0;
  background:none;
  border:0;
  cursor:pointer;
  color:var(--gold);
  font-size:13px;
  font-weight:500;
  text-align:left;
  text-decoration:underline;
  text-underline-offset:3px;
  text-decoration-color:rgba(126,49,135,.4);
}
.plan-mode-switch:hover{
  text-decoration-color:var(--gold);
}

/* v608: "New Professional Website" title was running a full single line
   under the laptop/phone preview graphic on desktop and colliding with
   it. Hard break after "Professional" only above the 960px breakpoint
   where that preview graphic actually shows (it's hidden below 960px per
   the existing .plan-modal-preview rule, so mobile never had this
   problem and doesn't need the break). */
@media (min-width:961px){
  br.plan-title-break{
    display:block !important;
  }
}
@media (max-width:960px){
  br.plan-title-break{
    display:none !important;
  }
}

/* v610: "No long-term contract" + Start Project button moved from stacked
   (note above, button below) into one row, sitting side by side next to
   each other instead of the button sitting alone on its own line below -
   shortens the card by roughly one row's worth of height. Also trying
   white button text per Dave's request (was dark #2a2a2a on gold). */
#investmentEntry .investment-entry__footer{
  display:flex !important;
  align-items:center !important;
  justify-content:space-between !important;
  gap:16px !important;
  margin-top:14px !important;
}
#investmentEntry .investment-entry__note{
  margin-bottom:0 !important;
}
#investmentEntry .investment-entry__cta{
  flex:none !important;
  color:#fff !important;
}

/* v1190: per Dave - on narrow phones (iPhone 12 and similar, ~390px and
   under) the "Start Project" button was bleeding out past the right
   edge of the card. Root cause: .investment-entry__footer is a flex
   row with the note text (white-space:nowrap) and the button
   (flex:none, so it never shrinks) side by side - "No long-term
   contract" alone was already wide enough that the two together
   didn't fit in the card's content width, and flexbox let the
   un-shrinkable button spill outside the row instead of wrapping.
   Fix: hard-break the note text after "term" (per Dave's suggestion)
   so it reads as 2 short lines instead of 1 long one, freeing up
   enough width for the button to sit fully inside the card. */
br.investment-note-break{
  display:none;
}
@media(max-width:480px){
  br.investment-note-break{
    display:block !important;
  }
  #investmentEntry .investment-entry__note{
    white-space:normal !important;
    line-height:1.3 !important;
  }
}
/* v1190b: the note-break alone fixed it down to ~360px, but on the
   smallest phones (iPhone SE class, ~320-340px) the button was still
   spilling out a bit further. Trimming its padding/font slightly at
   that width closes the remaining gap without noticeably shrinking
   it. */
@media(max-width:360px){
  #investmentEntry .investment-entry__cta{
    padding:10px 16px !important;
    font-size:13px !important;
  }
}

/* v611: "Homepage design" laptop/phone icon bumped 15% larger (36px -> 41px) */
.homepage-heading__icon{
  width:41px !important;
  height:41px !important;
}

/* v612: popup.pdf redesign - plan modal flips from one continuous dark
   scroll to a light cream outer panel holding separate rounded gray
   "cards" (Web Design/Coding, Monthly Website Care, Logo Ad-on, Payment
   Options), each with a decorative gold checkmark badge next to its
   title, matching Dave's mockup. Cards themselves stay a medium-dark
   warm gray so the existing light/cream text colors used INSIDE them
   (service-option, care-option, payment-choice__option, logo-addon,
   etc.) keep working as-is - only the outer chrome (panel background,
   header, close button, progress pills, footer) flips to dark-on-light
   since that now sits directly on the light panel. */

.plan-modal__panel{
  background:#f3efe4 !important;
  border-color:rgba(0,0,0,.10) !important;
}

.plan-modal__close{
  background:rgba(0,0,0,.06) !important;
  border-color:rgba(0,0,0,.16) !important;
  color:#2a2a2a !important;
}
.plan-modal__close:hover{
  background:var(--gold-bg) !important;
  border-color:var(--gold-bg) !important;
  color:#2a2a2a !important;
}

/* v649: the "x" glyph sits low within its circle (font metrics on that
   character render it below true vertical center) and the circle itself
   was too faint to read against the light panel background. Nudged the
   glyph up and darkened the circle. Wrapped the glyph in a span (see
   index.html) so it can be transformed on its own without affecting the
   button's own flex-centering box. */
.plan-modal__close{
  background:rgba(0,0,0,.14) !important;
  border-color:rgba(0,0,0,.24) !important;
}
.plan-modal__close .plan-modal__close-glyph{
  display:inline-block;
  transform:translateY(-2px);
}

/* v660: still reading as low/faint after v649 - pushed the glyph up
   further and darkened the circle more so the X reads clearly against
   the light panel. */
.plan-modal__close{
  background:rgba(0,0,0,.24) !important;
  border-color:rgba(0,0,0,.36) !important;
}
.plan-modal__close .plan-modal__close-glyph{
  transform:translateY(-8px) !important; /* v675: pixel-measured the glyph was still ~4.5px low after v660's -4px, pushed further to -8px */
}

.plan-modal__header .small-label{
  color:#b8790f !important;
}
.plan-modal__header h2{
  color:#20242a !important;
}
.plan-modal__header p{
  color:rgba(32,36,42,.66) !important;
}

.modal-progress__step{
  background:rgba(0,0,0,.06) !important;
  border-color:rgba(0,0,0,.14) !important;
  color:rgba(32,36,42,.55) !important;
}
.modal-progress__step.is-active{
  background:var(--gold-bg) !important;
  border-color:var(--gold-bg) !important;
  color:#ffffff !important; /* v701: was near-black - white reads cleaner/more legible on the solid gold fill, per Dave's ask */
}
.modal-progress__step.is-complete{
  background:rgba(126,49,135,.16) !important;
  border-color:rgba(126,49,135,.4) !important;
  color:#b8790f !important;
}

/* collapse the old 2-column grid - .payment-choice is no longer a direct
   sibling of .plan-summary now that everything lives inside stacked
   .plan-card wrappers, so this becomes a single-column card stack */
.plan-modal__body{
  display:block !important;
}

/* .plan-summary and .payment-choice used to be the visible "panel" boxes
   themselves; now .plan-card provides that box, so strip their own
   background/border/padding so nothing double-boxes */
.plan-summary,
.payment-choice{
  padding:0 !important;
  border-radius:0 !important;
  background:none !important;
  border:0 !important;
  display:block !important;
}

.plan-card{
  position:relative !important;
  background:#7d7b73 !important;
  border:1px solid rgba(0,0,0,.14) !important;
  border-radius:22px !important;
  padding:24px !important;
  margin-bottom:16px !important;
  box-shadow:0 2px 6px rgba(0,0,0,.05) !important;
}

.plan-card__title,
.plan-card .plan-summary__section-title,
.plan-card .logo-addon-heading,
.plan-card .payment-choice .small-label{
  position:relative !important;
  display:block !important;
  padding-left:32px !important;
  margin:0 0 16px 0 !important;
  border-top:0 !important;
  padding-top:0 !important;
}

.plan-card__title{
  font-size:15px;
  font-weight:600;
  letter-spacing:.02em;
  text-transform:uppercase;
  color:rgba(84,98,107,.75);
}

/* v1067: the payment-choice eyebrow ("Payment Options" etc.) inherits the
   sitewide .small-label default of solid white, which is correct on the
   dark plan-modal header but unreadable here since .plan-card itself sits
   on a light card background (--pv-card, near-white/light-gray). Give it
   the same accent color (--gold, the site's blue-gray accent despite the
   variable name) used for eyebrows elsewhere on light backgrounds. Scoped
   to .plan-card .payment-choice only so the dark-background instances of
   .small-label elsewhere are untouched. */
.plan-card .payment-choice .small-label{
  color:var(--gold) !important;
}

.plan-card__title::before,
.plan-card .plan-summary__section-title::before,
.plan-card .logo-addon-heading::before,
.plan-card .payment-choice .small-label::before{
  content:'';
  position:absolute;
  top:1px;
  left:0;
  width:18px;
  height:18px;
  border-radius:5px;
  background:var(--gold-bg);
}
.plan-card__title::after,
.plan-card .plan-summary__section-title::after,
.plan-card .logo-addon-heading::after,
.plan-card .payment-choice .small-label::after{
  content:'';
  position:absolute;
  top:6px;
  left:4px;
  width:9px;
  height:5px;
  border-left:2px solid #2a2a2a;
  border-bottom:2px solid #2a2a2a;
  transform:rotate(-45deg);
}

/* the website card's first row (Homepage design) has no separate title
   element of its own - .plan-card__title (added above it) supplies the
   badge/heading instead, so drop the row's own top spacing since it's
   now the first thing under that title inside its own card */
.plan-card--website .plan-summary__row{
  padding-top:0 !important;
  border-top:0 !important;
  margin-top:0 !important;
}

.plan-card--website .plan-summary__row + .plan-pages{
  margin-top:16px !important;
}

.plan-card--care .plan-summary__section-title{
  margin-bottom:12px !important;
}

.plan-card .plan-mode-switch{
  margin-top:-2px !important;
}

.plan-total{
  padding:16px 24px !important;
  margin-bottom:16px !important;
  border-radius:22px !important;
  background:rgba(0,0,0,.05) !important;
  border:1px solid rgba(0,0,0,.10) !important;
}
.plan-total span{ color:rgba(32,36,42,.6) !important; }
.plan-total strong{ color:#20242a !important; }

.plan-modal__footer #planNote{ color:rgba(32,36,42,.6) !important; }
.plan-modal__footer .stripe-status{ color:rgba(32,36,42,.5) !important; }

/* v613: in Standalone Website Care mode the whole "Web Design/Coding" card
   (including its title/badge) should disappear along with the row it
   wraps - the old rule only hid .plan-summary__row inside it, leaving an
   empty gray card floating at the top of the modal */
.plan-modal.is-plan-hosting-care .plan-card--website{
  display:none !important;
}

/* the border-top divider on .logo-addon-heading was meant to separate it
   from the care card above when everything lived in one continuous dark
   scroll; now that it's its own card, that divider just leaves a stray
   line floating above the checkbox badge - drop it */
.plan-modal.is-plan-hosting-care .logo-addon-heading{
  margin-top:0 !important;
  padding-top:0 !important;
  border-top:0 !important;
}

/* v614: closer match to Dave's actual popup.pdf mockup, which I re-read
   directly instead of working from memory. Three real gaps vs. the mockup:
   1) the 4 Monthly Website Care option cards should NOT have lettered
      A/B/C/D badges or "WaltersGroup hosting w/..." eyebrow copy - just a
      clean title + price, with the selected option shown as a solid gold
      filled card (not a dark card with a gold circle letter).
   2) the Logo Ad-on card should show its "$15/mo for 12 months" price at
      the top-right of the card header, always visible, same pattern as
      every other card - not buried inside the checkbox row.
   3) itemized payment breakdown needed a separate "(N) Additional Page"
      line (handled in JS/v614 above) alongside Website/Logo/Care. */

.plan-modal .plan-card .service-option > .service-option__letter,
.plan-modal .plan-card .care-option > .service-option__letter,
.plan-modal .plan-card .service-option > .service-option__eyebrow,
.plan-modal .plan-card .care-option > .service-option__eyebrow{
  display:none !important;
}

.plan-modal .plan-card .service-option,
.plan-modal .plan-card .care-option{
  grid-template-columns:minmax(0,1fr) auto !important;
  padding:16px 18px !important;
}

.plan-modal .plan-card .service-option > strong,
.plan-modal .plan-card .care-option > strong{
  grid-column:1 !important;
  grid-row:1 !important;
  font-size:16px !important;
}
.plan-modal .plan-card .service-option > b,
.plan-modal .plan-card .care-option > b{
  grid-column:2 !important;
  grid-row:1 !important;
  justify-self:end !important;
  font-size:15px !important;
}
.plan-modal .plan-card .service-option > em,
.plan-modal .plan-card .care-option > em{
  grid-column:1 / -1 !important;
  grid-row:2 !important;
  font-size:12.5px !important;
}
.plan-modal .plan-card .service-option > .service-info-pill,
.plan-modal .plan-card .service-option > .one-off-change-note,
.plan-modal .plan-card .care-option > .service-info-pill{
  grid-column:1 / -1 !important;
}

/* solid gold-filled selected card, matching the mockup's "Hosting + Web
   Care" treatment, instead of a dark card with a small gold circle letter */
.plan-modal .plan-card .service-option.is-selected,
.plan-modal .plan-card .care-option.is-selected{
  background:var(--gold-bg) !important;
  border-color:var(--gold-bg) !important;
}
.plan-modal .plan-card .service-option.is-selected > strong,
.plan-modal .plan-card .care-option.is-selected > strong,
.plan-modal .plan-card .service-option.is-selected > b,
.plan-modal .plan-card .care-option.is-selected > b{
  color:#2a2a2a !important;
}
.plan-modal .plan-card .service-option.is-selected > em,
.plan-modal .plan-card .care-option.is-selected > em{
  color:rgba(42,42,42,.72) !important;
}
.plan-modal .plan-card .service-option.is-selected > .service-info-pill,
.plan-modal .plan-card .care-option.is-selected > .service-info-pill{
  background:rgba(42,42,42,.12) !important;
  border-color:rgba(42,42,42,.22) !important;
  color:#2a2a2a !important;
}

/* Logo Ad-on card header: title + "(optional)" on the left, the
   always-visible financed price on the right - same header pattern used
   by every other card in the stack */
.plan-card .logo-addon-heading{
  display:flex !important;
  align-items:baseline !important;
  justify-content:space-between !important;
  gap:12px !important;
}
.plan-card .logo-addon-heading__label{
  display:flex !important;
  align-items:baseline !important;
  gap:6px !important;
}
.logo-addon-heading__optional{
  font-style:normal;
  font-size:12px;
  font-weight:400;
  color:rgba(84,98,107,.5);
}
.plan-card .plan-logo-amount{
  flex:none !important;
  text-align:right !important;
}
.plan-card .logo-addon{
  margin-top:16px !important;
}

/* v615: two real structural gaps left after v614, found by comparing
   directly against Dave's popup.pdf side by side:
   1) all four card section titles ("Web Design/Coding", "Monthly Website
      Care", "Logo Ad-on", "Payment Options") need to read as large bold
      headings, not small-caps eyebrow labels - the small-caps sizing was
      inherited from the old design's micro-label styling.
   2) .service-option/.care-option still used the old CSS-grid layout
      (built for the letter-badge/eyebrow version), which gave each card a
      fixed row structure; with the description now spanning the full
      width on its own grid row, cards with longer copy overflowed their
      own background box, making the description look like a separate
      floating block below the 2x2 grid instead of inside its card.
      Rebuilt as a simple stacked flex column so each card sizes to its
      own content, matching the mockup's self-contained cards. */

.plan-modal .plan-card__title,
.plan-modal .plan-card .plan-summary__section-title,
.plan-modal .plan-card .logo-addon-heading__label,
.plan-modal .plan-card .payment-choice > .small-label{
  font-size:26px !important;
  font-weight:800 !important;
  text-transform:none !important;
  letter-spacing:-.01em !important;
  line-height:1.1 !important;
  color:rgba(84,98,107,.95) !important;
}

.logo-addon-heading__optional:not(.care-choose-one){
  position:relative !important;
  top:3px !important;
}
.logo-addon-heading__optional{
  font-size:14px !important;
  font-weight:400 !important;
  color:rgba(84,98,107,.5) !important;
}

.plan-modal .plan-card .payment-choice > .small-label + [class]{
  margin-top:0 !important;
}

/* badges scale up slightly to sit properly next to the larger headings */
.plan-modal .plan-card__title::before,
.plan-modal .plan-card .plan-summary__section-title::before,
.plan-modal .plan-card .logo-addon-heading__label::before,
.plan-modal .plan-card .payment-choice > .small-label::before{
  top:3px !important;
  width:22px !important;
  height:22px !important;
}
.plan-modal .plan-card__title::after,
.plan-modal .plan-card .plan-summary__section-title::after,
.plan-modal .plan-card .logo-addon-heading__label::after,
.plan-modal .plan-card .payment-choice > .small-label::after{
  top:9px !important;
  left:5px !important;
  width:11px !important;
  height:6px !important;
}
.plan-modal .plan-card__title,
.plan-modal .plan-card .plan-summary__section-title,
.plan-modal .plan-card .logo-addon-heading__label,
.plan-modal .plan-card .payment-choice > .small-label{
  padding-left:36px !important;
}

/* rebuilt service/care option cards as a simple stacked column so content
   height is never fixed/constrained - fixes the description overflowing
   below the card's visible background */
.plan-modal .plan-card .service-option,
.plan-modal .plan-card .care-option{
  display:flex !important;
  flex-direction:column !important;
  align-items:stretch !important;
  height:auto !important;
  min-height:0 !important;
  gap:4px !important;
  padding:18px 20px !important;
}
.plan-modal .plan-card .service-option > strong,
.plan-modal .plan-card .care-option > strong{
  order:1 !important;
  grid-column:auto !important;
  grid-row:auto !important;
  font-size:19px !important;
  font-weight:700 !important;
  line-height:1.2 !important;
}
.plan-modal .plan-card .service-option > b,
.plan-modal .plan-card .care-option > b{
  order:2 !important;
  grid-column:auto !important;
  grid-row:auto !important;
  justify-self:auto !important;
  font-size:15px !important;
  margin-bottom:6px !important;
}
.plan-modal .plan-card .service-option > em,
.plan-modal .plan-card .care-option > em{
  display:block !important;
  order:3 !important;
  grid-column:auto !important;
  grid-row:auto !important;
  font-size:12.5px !important;
  font-style:normal !important;
  line-height:1.4 !important;
}
.plan-modal .plan-card .service-option > .service-info-pill,
.plan-modal .plan-card .service-option > .one-off-change-note,
.plan-modal .plan-card .care-option > .service-info-pill{
  display:inline-flex !important;
  order:4 !important;
  grid-column:auto !important;
  align-self:flex-start !important;
  margin-top:4px !important;
}

/* v615: an older design iteration (v356) showed each card's description in
   ONE shared "detail" panel below the grid, populated via JS only for the
   selected card, while the card itself only showed title+price. The
   mockup wants every card to carry its own description permanently, so
   that shared panel is now a redundant duplicate - hide it outright. */
#serviceChoiceDetail,
#careChoiceDetail{
  display:none !important;
}

/* payment option cards: darker selected state + small checkmark under the
   label, matching the mockup's "Pay in full" treatment */
.plan-modal .plan-card .payment-choice__option{
  position:relative !important;
}
.plan-modal .plan-card .payment-choice__option.is-selected{
  background:rgba(0,0,0,.24) !important;
  border-color:rgba(28,36,42,.14) !important;
}
.plan-modal .plan-card .payment-choice__option.is-selected > strong::after{
  content:'\2713';
  display:block;
  margin-top:8px;
  font-size:14px;
  font-weight:400;
  color:rgba(84,98,107,.42);
}

/* v616: "Homepage design" row needed the same small-caps sub-label
   treatment ("PRIMARY PAGE DESIGN") that "Inside Pages" already has,
   matching the mockup's PRIMARY PAGE DESIGN / ADDITIONAL (INSIDE) PAGES
   pairing exactly. */
.plan-card--website .plan-summary__row #planBaseLabel{
  display:block !important;
  font-size:11px !important;
  font-weight:700 !important;
  letter-spacing:.1em !important;
  text-transform:uppercase !important;
  color:rgba(126,49,135,.85) !important;
}

/* v617: measured directly from Dave's InDesign file - exact hex values he
   gave me plus colors I confirmed by pixel-sampling his exported PDF:
   main lg window (outer panel)  = #f1f0ee
   main blocks (the 4 cards)     = #8f8b85
   darkened/selected sub-boxes   = #757270 (individual option cards and
                                    payment rows nested inside a card)
   Also fixed against a direct crop-by-crop read of the PDF: the small-caps
   sub-labels ("PRIMARY PAGE DESIGN" etc.) are WHITE, not gold; the 4
   Monthly Website Care option cards sit in ONE ROW of 4, not a 2x2 grid;
   and the Logo Ad-on card has no nested bordered box - it's flat text
   directly on the card background. */

.plan-modal .plan-modal__panel{
  background:#f1f0ee !important;
}

.plan-modal .plan-card{
  background:#8f8b85 !important;
  border-color:rgba(0,0,0,.12) !important;
}

.plan-modal .plan-card--website .plan-summary__row #planBaseLabel{
  color:rgba(28,36,42,.92) !important;
}
/* v704/v712: "Additional (Inside) Pages" header defaults to faint/off-white
   (unlike "Primary Page Design" above it, which stays pure white always)
   since at 0 pages nothing has been chosen yet. JS (main-v114.js calc())
   adds .is-pages-active the moment the count goes above 0, turning it
   pure white to match - signals the field is now "in use".
   v712 FIX: v704's selectors used "> label" (direct child), but the real
   DOM has the <label> nested one level deeper inside a
   <span class="logo-addon-heading__label"> wrapper, so neither rule ever
   matched anything - the label was silently always full-brightness the
   entire time via a totally separate, unconditional rule
   (".plan-card--website .plan-pages--compact label{ color:rgba(28,36,42,.92) }").
   Rewritten as a real descendant selector, with enough specificity
   (adding the [for] attribute) to beat that always-on rule. */
.plan-modal .plan-card--website .plan-pages--compact label[for="additionalPages"]{
  color:rgba(28,36,42,.45) !important;
}
.plan-modal .plan-card--website .plan-pages--compact label[for="additionalPages"].is-pages-active{
  color:rgba(28,36,42,.92) !important;
}

/* option cards: one row of 4 equal columns, not a 2x2 grid */
.plan-modal .plan-card .service-options,
.plan-modal .plan-card .care-options{
  grid-template-columns:repeat(4, minmax(0,1fr)) !important;
}
@media (max-width:820px){
  .plan-modal .plan-card .service-options,
  .plan-modal .plan-card .care-options{
    grid-template-columns:repeat(2, minmax(0,1fr)) !important;
  }
}
@media (max-width:520px){
  .plan-modal .plan-card .service-options,
  .plan-modal .plan-card .care-options{
    grid-template-columns:1fr !important;
  }
}

/* nested sub-boxes (unselected option cards, payment rows, running total)
   get the darkened #757270 tone so they read as distinct from the card
   background behind them */
.plan-modal .plan-card .service-option,
.plan-modal .plan-card .care-option,
.plan-modal .plan-card .payment-choice__option,
.plan-modal .plan-total{
  background:#757270 !important;
  border-color:rgba(0,0,0,.10) !important;
}
.plan-modal .plan-card .service-option.is-selected,
.plan-modal .plan-card .care-option.is-selected{
  background:var(--gold-bg) !important;
  border-color:var(--gold-bg) !important;
}
.plan-modal .plan-card .payment-choice__option.is-selected{
  /* v688: switched to the exact counter-window overlay per Dave's ask -
     rgba(0,0,0,.18) black over the card's #8f8b85, same rgba(255,255,
     255,.16) border - instead of the flat #68655f this had before. */
  background:rgba(0,0,0,.18) !important;
  border-color:rgba(28,36,42,.16) !important;
}

/* Logo Ad-on: mockup has no nested bordered box around the checkbox row -
   it's flat text sitting directly on the card background */
.plan-modal .plan-card--logo .logo-addon{
  background:none !important;
  border:0 !important;
  padding:0 !important;
  margin-top:14px !important;
}
.plan-modal .plan-card--logo .logo-addon b{
  background:none !important;
  padding:0 !important;
  border:0 !important;
  border-radius:0 !important;
  color:var(--gold) !important;
  font-weight:700 !important;
  display:block !important;
}

/* remove the "Start Project" eyebrow above the modal title and let
   everything shift up since it's no longer reserving space */
#planModalEyebrow{
  display:none !important;
}
.plan-modal__header h2{
  margin-top:0 !important;
}

/* mobile: the 26px bold card headings + a price badge on the same flex
   row don't fit side by side on narrow screens (worst case: "Logo Ad-on"
   + "(optional)" + "$15/mo for 12 months" all fighting for one line) -
   stack the price onto its own line below the title on small screens */
@media (max-width:600px){
  .plan-modal .plan-card__title,
  .plan-modal .plan-card .plan-summary__section-title,
  .plan-modal .plan-card .logo-addon-heading__label,
  .plan-modal .plan-card .payment-choice > .small-label{
    font-size:21px !important;
  }
  .plan-modal .plan-card .logo-addon-heading,
  .plan-modal .plan-card .plan-summary__section-title{
    flex-wrap:wrap !important;
  }
  .plan-modal .plan-card .plan-logo-amount,
  .plan-modal .plan-card .plan-base-monthly{
    flex:1 1 100% !important;
    text-align:left !important;
    margin-top:6px !important;
  }
}

/* remove the decorative checkbox badge from every card title EXCEPT Logo
   Ad-on, which keeps it since it's paired with a real functional checkbox
   input below. Web Design/Coding, Monthly Website Care, and Payment
   Options titles no longer show it. */
.plan-modal .plan-card__title::before,
.plan-modal .plan-card__title::after,
.plan-modal .plan-card .plan-summary__section-title::before,
.plan-modal .plan-card .plan-summary__section-title::after,
.plan-modal .plan-card .payment-choice > .small-label::before,
.plan-modal .plan-card .payment-choice > .small-label::after{
  content:none !important;
  display:none !important;
}
.plan-modal .plan-card__title,
.plan-modal .plan-card .plan-summary__section-title,
.plan-modal .plan-card .payment-choice > .small-label{
  padding-left:0 !important;
}

/* care card header: title, "Don't need a website?" mode-switch, and the
   $49/mo price all sit on ONE row. The mode-switch link was a full block
   from an earlier design and needs to shrink/wrap its own two lines of
   text instead of forcing the row to break. */
@media (min-width:601px){
  .plan-modal .plan-card .plan-summary__section-title{
    flex-wrap:nowrap !important;
    gap:20px !important;
  }
  .plan-modal .plan-card .plan-summary__section-title .logo-addon-heading__label{
    flex:0 0 auto !important;
  }
  .plan-modal .plan-card .plan-summary__section-title #switchToCareLink,
  .plan-modal .plan-card .plan-summary__section-title #switchToWebsiteLink{
    flex:1 1 auto !important;
    min-width:0 !important;
    margin:0 !important;
    padding-left:20px !important;
    border-left:1px solid rgba(28,36,42,.22) !important;
  }
  .plan-modal .plan-card .plan-base-monthly{
    flex:0 0 auto !important;
    margin-left:0 !important;
  }
}
.plan-modal .plan-card .plan-summary__section-title #switchToCareLink{
  display:flex !important;
  flex-direction:column !important;
  gap:2px !important;
  font-size:13px !important;
  font-weight:700 !important;
  color:rgba(28,36,42,.92) !important;
  text-decoration:none !important;
}
.plan-modal .plan-card .plan-summary__section-title #switchToCareLink em{
  font-style:normal !important;
  font-size:12.5px !important;
  font-weight:500 !important;
  color:var(--gold) !important;
  text-decoration:underline !important;
  text-underline-offset:3px !important;
}

/* v620: rebuilt "Web Design/Coding" rows to match the mockup exactly -
   compact single row per item (label | large icon | gold divider |
   description-with-inline-price | financed price), instead of the
   tall stacked layout with a lot of padding. Also restored the exact
   description copy from the PDF ("$590 for complete home page design +
   coding. Includes professional background stock video, search, SEO,
   webform(s), navigation.") which was missing entirely before. */

.plan-modal .plan-card--website{
  padding-bottom:18px !important;
}
.plan-modal .plan-card--website .plan-summary__row.plan-summary__row--compact,
.plan-modal .plan-card--website .plan-pages.plan-pages--compact{
  display:grid !important;
  grid-template-columns:212px 56px 1fr auto !important;
  align-items:center !important;
  column-gap:18px !important;
  padding:14px 0 !important;
  margin:0 !important;
  border-bottom:1px solid rgba(28,36,42,.18) !important;
}
.plan-modal .plan-card--website .plan-pages.plan-pages--compact{
  border-bottom:0 !important;
}
.plan-modal .plan-card--website .plan-summary__row--compact .logo-addon-heading__label,
.plan-modal .plan-card--website .plan-pages--compact .logo-addon-heading__label{
  display:block !important;
  grid-column:1 !important;
}
.plan-modal .plan-card--website #planBaseLabel,
.plan-modal .plan-card--website .plan-pages--compact label{
  display:block !important;
  font-size:11px !important;
  font-weight:700 !important;
  letter-spacing:.08em !important;
  text-transform:uppercase !important;
  color:rgba(28,36,42,.92) !important;
  line-height:1.3 !important;
}
.plan-row__optional{
  display:block !important;
  font-style:normal !important;
  font-size:10px !important;
  font-weight:400 !important;
  letter-spacing:0 !important;
  text-transform:none !important;
  color:rgba(28,36,42,.5) !important;
  margin-top:2px !important;
}
.plan-modal .plan-card--website .plan-row__icon{
  grid-column:2 !important;
  width:44px !important;
  height:44px !important;
  justify-self:center !important;
}
.plan-modal .plan-card--website .plan-row__desc{
  grid-column:3 !important;
  margin:0 !important;
  padding-left:10px !important; /* v696: matched to the "Don't need a website?" divider's gap (10px) - was 18px, floating too far from the text */
  border-left:1px solid rgba(126,49,135,.55) !important;
  font-size:12.5px !important;
  line-height:1.4 !important;
  color:rgba(28,36,42,.78) !important;
}
.plan-modal .plan-card--website #planBasePrice{
  grid-column:4 !important;
  text-align:right !important;
}
.plan-modal .plan-card--website .plan-pages--compact .plan-row__pages-body{
  grid-column:3 !important;
  padding-left:10px !important; /* v696: matched to the "Don't need a website?" divider's gap (10px) */
  border-left:1px solid rgba(126,49,135,.55) !important;
}
.plan-modal .plan-card--website .plan-pages--compact .page-stepper{
  width:150px !important;
  margin-bottom:8px !important;
}
.plan-modal .plan-card--website .plan-pages--compact .plan-row__pages-body p{
  margin:0 !important;
  font-size:12.5px !important;
  line-height:1.4 !important;
  color:rgba(28,36,42,.78) !important;
}
.plan-modal .plan-card--website .plan-pages--compact .plan-pages-amount{
  grid-column:4 !important;
  text-align:right !important;
  align-self:start !important;
}
.plan-modal .plan-card--website .plus-pages-examples{
  display:none !important;
}

/* v621: the "Payment Options" rows were touching with zero gap - setting
   .payment-choice to display:block (v612, to collapse the old 2-column
   grid) accidentally killed the gap:12px that used to come from its old
   display:grid. Restore visible spacing between each payment row, and
   make sure every row is the exact same width/box-sizing so nothing
   looks narrower or wider than its neighbors. */
.plan-modal .plan-card .payment-choice{
  display:flex !important;
  flex-direction:column !important;
  /* v666: an older, unscoped ".payment-choice{ display:grid; gap:12px }"
     rule was still contributing its flexbox-compatible 12px gap on top
     of .payment-choice__option's own margin-bottom (modern browsers
     apply "gap" to flex containers too, not just grid) - that's why the
     measured spacing was 20px (8+12) instead of the intended 8px.
     Zeroed here so margin-bottom is the only source of spacing. */
  gap:0 !important;
}
.plan-modal .plan-card .payment-choice__option{
  width:100% !important;
  box-sizing:border-box !important;
  margin-bottom:14px !important;
}
.plan-modal .plan-card .payment-choice__option:last-child{
  margin-bottom:0 !important;
}

/* v621: footer - Project Start button now sits on the LEFT, note text on
   the right (was reversed) */
.plan-modal__footer{
  justify-content:flex-start !important;
}
.plan-modal__footer .plan-submit{
  order:-1 !important;
  margin-left:0 !important;
  margin-right:20px !important;
  flex:0 0 auto !important;
}
.plan-modal__footer #planNote{
  order:1 !important;
  flex:1 1 auto !important;
}
.plan-modal__footer .stripe-status{
  order:2 !important;
  flex:0 0 100% !important;
}

/* v621: itemized payment lines rebuilt from scratch as clean label-left /
   price-right rows (one line per item), replacing a decade of conflicting
   .estimate-part / .estimate-breakdown rules that were stacking label
   above price instead of side by side. */
.plan-modal .plan-card .payment-choice__option .estimate-breakdown,
.plan-modal .plan-card .payment-choice__option .payment-project,
.plan-modal .plan-card .payment-choice__option .payment-care{
  all:unset !important;
  display:block !important;
  box-sizing:border-box !important;
}
.plan-modal .plan-card .payment-choice__option .estimate-breakdown{
  display:flex !important;
  flex-direction:column !important;
  gap:6px !important;
  width:100% !important;
  max-width:280px !important;
  margin-left:auto !important;
}
.plan-modal .plan-card .payment-choice__option .estimate-part,
.plan-modal .plan-card .payment-choice__option .payment-project{
  display:flex !important;
  align-items:baseline !important;
  justify-content:space-between !important;
  gap:12px !important;
  width:100% !important;
}
.plan-modal .plan-card .payment-choice__option .estimate-part--care,
.plan-modal .plan-card .payment-choice__option .payment-care{
  display:flex !important;
  align-items:baseline !important;
  justify-content:space-between !important;
  gap:12px !important;
  width:100% !important;
  margin-top:8px !important;
  padding-top:8px !important;
  border-top:1px solid rgba(28,36,42,.18) !important;
}
.plan-modal .plan-card .payment-choice__option .estimate-part em,
.plan-modal .plan-card .payment-choice__option .payment-note{
  order:-1 !important;
  font-style:normal !important;
  font-size:13px !important;
  font-weight:400 !important;
  color:rgba(28,36,42,.72) !important;
  white-space:nowrap !important;
}
.plan-modal .plan-card .payment-choice__option .estimate-part strong,
.plan-modal .plan-card .payment-choice__option .payment-amount{
  font-size:14px !important;
  font-weight:700 !important;
  color:#1c242a !important;
  white-space:nowrap !important;
}
.plan-modal .plan-card .payment-choice__option .estimate-part--care em,
.plan-modal .plan-card .payment-choice__option .payment-care .payment-note{
  font-weight:500 !important;
  color:rgba(28,36,42,.85) !important;
}

/* v621: close button - circle, not a square */
.plan-modal__close{
  border-radius:50% !important;
}

/* v622: enlarge the section-header icons (gear, logo) noticeably - they
   were reading as too small next to the now-26px bold titles */
.plan-modal .plan-card .logo-addon-heading__icon{
  width:52px !important;
  height:52px !important;
  opacity:1 !important;
}

/* v623/v648: the 4-column grid (label | icon | description | price) in
   Web Design/Coding has no room to breathe once the card gets narrower
   than ~820px - the description column collapses to almost nothing and
   wraps one word per line, with the icon reading as "floating" way off
   to the right in the empty space. Originally only caught this under
   600px; widened to 860px after confirming the same collapse happens at
   700-800px browser widths too (Dave's actual window, not just phone
   sizes) - stack it into a simple single column any time it's tight. */
@media (max-width:860px){
  /* v874: v873's grid-area version put price in the SAME auto-sized
     column as the icon, in each row's OWN independent grid - since the
     two rows' icons/content aren't the same width, their "auto" columns
     resolved to different widths, so the two prices landed at different
     x-positions instead of lining up, and neither sat flush to the
     card's true right edge. Absolute-positioning both against their row
     (each row already establishes its own stacking context here)
     guarantees they sit at the EXACT same right edge on every row,
     independent of the icon or any other content's width. */
  .plan-modal .plan-card--website .plan-summary__row.plan-summary__row--compact,
  .plan-modal .plan-card--website .plan-pages.plan-pages--compact{
    display:grid !important;
    grid-template-columns:1fr auto !important;
    grid-template-areas:
      "label label"
      "desc  icon" !important;
    row-gap:6px !important;
    column-gap:10px !important;
    position:relative !important;
    padding-right:66px !important;
  }
  .plan-modal .plan-card--website .plan-summary__row--compact .logo-addon-heading__label,
  .plan-modal .plan-card--website .plan-pages--compact .logo-addon-heading__label{
    grid-area:label !important;
    text-align:left !important;
    justify-self:start !important;
    align-self:start !important;
  }
  .plan-modal .plan-card--website .plan-row__icon,
  .plan-modal .plan-card--website .plan-summary__row--compact .plan-row__icon,
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__icon{
    grid-area:icon !important;
    justify-self:end !important;
    align-self:start !important;
    margin:0 !important;
    width:30px !important;
    height:30px !important;
  }
  .plan-modal .plan-card--website .plan-row__desc,
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__pages-body{
    grid-area:desc !important;
    text-align:left !important;
    justify-self:start !important;
    align-self:start !important;
  }
  .plan-modal .plan-card--website #planBasePrice,
  .plan-modal .plan-card--website .plan-pages--compact .plan-pages-amount{
    grid-column:1 !important; /* v1031: root cause of the "narrow desktop
      window" (761-860px) layout blowing up - the "PRIMARY PAGE DESIGN"
      label overlapping the "$590..." paragraph, tiny icon, huge stray
      gap before "$190 addl...". #planBasePrice/.plan-pages-amount carry
      an UNSCOPED "grid-column:4 !important" rule elsewhere in this file
      (no media query at all), so even in this stacked 2-column
      "grid-template-areas: label label / desc icon" layout, the browser
      still had to honor a column-4 placement for these two - forcing an
      implicit 4-column grid into existence on top of the named 2-column
      template, which is what distorted the row heights and caused
      label/desc to collapse on top of each other. Resetting back to
      column 1 here (this rule already runs position:absolute so the
      column assignment doesn't matter for its own rendering - it only
      mattered because of its side effect on the grid's implicit track
      generation for its siblings). Confirmed via live measurement:
      label and desc rects were landing 2px apart vertically instead of
      stacked in separate rows before this fix. */
    grid-row:auto !important;
    position:absolute !important;
    top:0 !important;
    right:0 !important;
    text-align:right !important;
    transform:none !important;
    margin:0 !important;
  }
  .plan-modal .plan-card--website .plan-summary__row--compact .plan-row__desc,
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__desc{
    margin-top:0 !important;
    margin-left:0 !important;
    max-width:none !important;
  }
  .plan-modal .plan-card--website .plan-row__icon{
    width:36px !important;
    height:36px !important;
  }
  .plan-modal .plan-card--website .plan-row__desc,
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__pages-body{
    padding-left:0 !important;
    border-left:0 !important;
  }
}

/* v624: one checkbox only for the Logo Ad-on card, living next to the
   "Logo Ad-on" header itself instead of floating in the middle of the
   description text below. The old #addHosting checkbox ("Add hosting +
   website care for $49/month") was dead/decorative (JS forces it
   checked+disabled and never reads it) and just added visual clutter as a
   second checkbox, so it's removed from the HTML entirely.
   #addLogoDesign moved out of .logo-addon and into .logo-addon-heading__label
   in the HTML; .logo-addon is now a plain <label for="addLogoDesign"> with
   no input of its own so clicking the description still toggles it. Because
   the checkbox no longer lives inside .logo-addon, the many legacy
   ".logo-addon:has(input:checked)" rules throughout this file no longer
   match - re-declared here at the card level so the checked-state highlight
   still works identically in every plan mode (default gold / additional-
   pages orange / hosting-care teal). */
.plan-card--logo .logo-addon-heading__label{
  display:inline-flex !important;
  align-items:center !important;
  gap:10px !important;
}
.plan-card--logo #addLogoDesign{
  width:15px !important;
  height:15px !important;
  margin:0 !important;
  flex:0 0 auto !important;
  cursor:pointer !important;
  /* v673: Dave wants rounded corners + a faint gray unchecked fill
     instead of the native square, pure-white browser checkbox.
     accent-color only styles the native control's checked-state color
     and can't touch its shape/unchecked fill, so switched to a fully
     custom appearance:none box with our own checked-state checkmark. */
  appearance:none !important;
  -webkit-appearance:none !important;
  border-radius:5px !important;
  background:#ffffff !important;
  border:1px solid rgba(28,36,42,.55) !important;
  position:relative !important;
}
.plan-card--logo #addLogoDesign:checked{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
}
.plan-card--logo #addLogoDesign:checked::after{
  content:'' !important;
  position:absolute !important;
  left:4px !important;
  top:1px !important;
  width:4px !important;
  height:7px !important;
  border:solid #ffffff !important;
  border-width:0 2px 2px 0 !important;
  transform:rotate(45deg) !important;
}

.plan-card--logo:has(#addLogoDesign:checked) .logo-addon{
  border-color:rgba(126,49,135,.52) !important;
  background:rgba(126,49,135,.09) !important;
}
.plan-card--logo:has(#addLogoDesign:checked) .logo-addon b{
  background:var(--gold-bg) !important;
  border-color:var(--gold-bg) !important;
  color:#2a2a2a !important;
}
.plan-modal.is-plan-additional-pages .plan-card--logo:has(#addLogoDesign:checked) .logo-addon{
  border-color:rgba(126,49,135,.52) !important;
  background:rgba(126,49,135,.11) !important;
}
.plan-modal.is-plan-additional-pages .plan-card--logo:has(#addLogoDesign:checked) .logo-addon b{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  color:#ffffff !important;
}
.plan-modal.is-plan-additional-pages .plan-card--logo #addLogoDesign{
  accent-color:#7E3187 !important;
}
.plan-modal.is-plan-hosting-care .plan-card--logo:has(#addLogoDesign:checked) .logo-addon{
  border-color:rgba(60,91,123,.60) !important;
  background:rgba(60,91,123,.14) !important;
}
.plan-modal.is-plan-hosting-care .plan-card--logo:has(#addLogoDesign:checked) .logo-addon b{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  color:#ffffff !important;
}
.plan-modal.is-plan-hosting-care .plan-card--logo #addLogoDesign{
  accent-color:#7E3187 !important;
}

/* belt-and-suspenders: fully remove the old second checkbox row in case any
   client copy still has the HTML block present */
.plan-card--logo .hosting-check{
  display:none !important;
}

/* v625: payment-option boxes were spaced way too far apart (14px), the
   unselected boxes read too dark, and the small checkmark under the
   selected label ("looks stupid" - Dave) is gone entirely. */
.plan-modal .plan-card .payment-choice__option{
  margin-bottom:3px !important;
}
.plan-modal .plan-card .payment-choice__option:last-child{
  margin-bottom:0 !important;
}
.plan-modal .plan-card .payment-choice__option.is-selected > strong::after{
  content:none !important;
  display:none !important;
}
.plan-modal .plan-card .service-option,
.plan-modal .plan-card .care-option{
  background:#8f8b85 !important; /* v674: unified to match the panel background per Dave's ask */
}
/* v684: Dave's v674 ask unified Payment Options boxes to the same
   #8f8b85 as the panel too, but that erased the subtle "hair darker
   than background" distinction he actually wanted there so unselected
   boxes still read as visible boxes instead of flat/invisible against
   the card. Reverted just .payment-choice__option/.plan-total to the
   pre-v674 #87827b - the service/care pill cards above stay at 8f8b85
   since he didn't flag those. */
.plan-modal .plan-card .payment-choice__option,
.plan-modal .plan-total{
  background:#87827b !important;
}

/* v625: the "for N months" note on the financed payment rows (3/6/12
   month) is now its own right-aligned line under the itemized $/mo
   amounts, matching the js change in formatItemizedPayment that wraps the
   financed rows in the same .estimate-breakdown/.estimate-part markup as
   "Pay in full" (that missing wrapper was why the financed rows rendered
   as a loose stack of labels on the left with the amount floating off on
   its own instead of tidy label/price rows). */
.plan-modal .plan-card .payment-choice__option .estimate-part--months{
  justify-content:flex-end !important;
  padding-top:0 !important;
  margin-top:-2px !important;
}
.plan-modal .plan-card .payment-choice__option .estimate-part--months em{
  order:0 !important;
  font-size:11px !important;
  color:rgba(28,36,42,.55) !important;
}

/* v632: itemized line alignment, take 2. The "Website" / "(N) Additional
   Page" / "Logo Design" lines are supposed to sit close together as one
   right-aligned cluster (label immediately left of its price, the whole
   pair flush against the right edge) - matching Dave's mockup exactly.
   The earlier space-between rule spread label and price to opposite
   edges of the full row width instead. The "Hosting + Webcare" line is
   the one exception that DOES span the full width (label flush left,
   price flush right) per the mockup, so it's excluded here. */
.plan-modal .plan-card .payment-choice__option .estimate-part:not(.estimate-part--care):not(.estimate-part--months){
  justify-content:flex-end !important;
  gap:10px !important;
}
.plan-modal .plan-card .payment-choice__option .estimate-part--care{
  justify-content:space-between !important;
}

/* v632: unselected payment option titles used to read faint gray here.
   v699: Dave wants the headers ("12/6/3 monthly payments", "Pay in
   full") pure white on ALL four boxes, selected or not, so they're
   easy to scan at a glance - only the $/mo breakdown text on the right
   stays faint/ghosted to distinguish the selected box. */
.plan-modal .plan-card .payment-choice__option > strong{
  color:#1c242a !important;
}
.plan-modal .plan-card .payment-choice__option.is-selected > strong{
  color:#1c242a !important;
}

/* v632: the "1 Package / 2 Project Details / 3 Payment" step pills sat
   right on top of the "Modern Website" title below them - pulled up
   closer to the panel's top edge and given more breathing room under
   them before the title. */
.plan-modal__header .modal-progress{
  margin-top:-8px !important;
  margin-bottom:22px !important;
}

/* v632: the laptop/phone live-preview thumbnail had a negative top offset
   (-25px) that pushed it up above the header/panel edge instead of sitting
   inside it normally, and sat a bit too far from the right edge. Dropped
   down into the panel and nudged closer to the right side. */
.plan-modal-preview{
  top:16px !important;
  right:10px !important;
}

/* v632: the additional-pages number field showed the browser's native
   up/down spinner arrows alongside the custom -/+ stepper buttons -
   redundant and not part of the design. Removed; typing a number directly
   into the field still works fine. */
.page-stepper input[type="number"]{
  -moz-appearance:textfield !important;
  appearance:textfield !important;
}
.page-stepper input[type="number"]::-webkit-inner-spin-button,
.page-stepper input[type="number"]::-webkit-outer-spin-button{
  -webkit-appearance:none !important;
  margin:0 !important;
}

/* v633: the gap between the light outer panel edge and the dark card
   boxes (Payment Options, Logo Ad-on, etc.) was too wide - cut the
   panel's left/right padding roughly in half so the cards run wider,
   closer to the mockup. Top/bottom padding left alone; everything else
   (header, tabs, cards) just shifts over with the narrower side margin. */
.plan-modal__panel{
  padding-left:clamp(11px, 1.7vw, 20px) !important;
  padding-right:clamp(11px, 1.7vw, 20px) !important;
}

/* v626: "Monthly Website Care" (and any other .plan-summary__section-title)
   header row was a flex layout that let the icon, the mode-switch link, and
   the $/mo price drift to different spots per-card. Rebuilt as an explicit
   2-column grid so title+icon always sit together top-left and the price +
   mode-switch link always sit stacked top-right, identically on every
   panel. */
.plan-modal .plan-card .plan-summary__section-title{
  display:grid !important;
  grid-template-columns:1fr auto !important;
  grid-template-areas:"label price" ". switch" !important;
  align-items:start !important;
  column-gap:16px !important;
  row-gap:6px !important;
}
.plan-modal .plan-card .plan-summary__section-title .logo-addon-heading__label{
  grid-area:label !important;
  display:inline-flex !important;
  align-items:center !important;
  gap:8px !important;
  justify-self:start !important;
  align-self:center !important;
  margin:0 !important;
}
.plan-modal .plan-card .plan-summary__section-title .logo-addon-heading__icon{
  align-self:center !important;
  margin:0 !important;
  vertical-align:middle !important;
}
.plan-modal .plan-card .plan-summary__section-title .plan-base-monthly{
  grid-area:price !important;
  justify-self:end !important;
  align-self:start !important;
  margin:0 !important;
}
.plan-modal .plan-card .plan-summary__section-title #switchToCareLink,
.plan-modal .plan-card .plan-summary__section-title #switchToWebsiteLink{
  grid-area:switch !important;
  justify-self:end !important;
  align-self:start !important;
  text-align:right !important;
  max-width:none !important;
  min-width:0 !important;
  margin:0 !important;
}
@media (max-width:600px){
  .plan-modal .plan-card .plan-summary__section-title{
    grid-template-columns:1fr !important;
    grid-template-areas:"label" "price" "switch" !important;
    row-gap:8px !important;
  }
  .plan-modal .plan-card .plan-summary__section-title .plan-base-monthly,
  .plan-modal .plan-card .plan-summary__section-title #switchToCareLink,
  .plan-modal .plan-card .plan-summary__section-title #switchToWebsiteLink{
    justify-self:start !important;
    text-align:left !important;
  }
}

/* v627: the gap between the stacked panels (Web Design/Coding, Monthly
   Website Care, Logo Ad-on, Payment Options) was too tall - cut to about
   half, applied consistently to every panel via the shared .plan-card
   rule rather than per-card overrides. */
.plan-modal .plan-card{
  margin-bottom:8px !important;
}

/* v627: "Primary Page Design" and "Additional (Inside) Pages" row labels
   were wrapping to 2 lines inside the old 150px column (too narrow for
   the uppercase bold letter-spaced text) and reading as if they were
   centered/floating instead of flush-left under the "Web Design/Coding"
   title above them. Force single line + explicit left anchor. */
.plan-modal .plan-card--website #planBaseLabel,
.plan-modal .plan-card--website .plan-pages--compact label{
  white-space:nowrap !important;
}
.plan-modal .plan-card--website .plan-summary__row--compact .logo-addon-heading__label,
.plan-modal .plan-card--website .plan-pages--compact .logo-addon-heading__label{
  justify-self:start !important;
  text-align:left !important;
}

/* v627: constrain the modal lead paragraph so it doesn't run full-width -
   roughly matches the width of the "Modern Website" title above it. */
.plan-modal__header p{
  max-width:min(560px, 62%) !important;
}
@media (max-width:760px){
  .plan-modal__header p{
    max-width:100% !important;
  }
}

/* v628: Web Design/Coding rows, take 3.
   - row content now starts at the same left inset (36px) as the card
     title/bullet above it, instead of sitting 36px further left - this is
     the recurring "floating out of alignment with the header" complaint.
   - icons are ~32% bigger (44px -> 58px).
   - the page-stepper (-/0/+) moved out of the description column (see
     index.html) and into the label column, stacked directly under
     "ADDITIONAL (INSIDE) PAGES" / "(optional)" instead of sitting in the
     middle of the row.
   - label/icon/price columns trimmed so the freed-up width goes to the
     description column, cutting the long copy from 6-7 lines down to
     roughly 3.
   - both $/mo price badges are top-aligned instead of vertically
     centering against the tall stepper row. */
.plan-modal .plan-card--website .plan-summary__row.plan-summary__row--compact,
.plan-modal .plan-card--website .plan-pages.plan-pages--compact{
  grid-template-columns:180px 60px 1fr auto !important;
  align-items:start !important;
  column-gap:14px !important;
  padding:16px 0 16px 36px !important;
}
.plan-modal .plan-card--website .plan-row__icon{
  align-self:start !important;
  margin-top:2px !important;
  width:58px !important;
  height:58px !important;
}
.plan-modal .plan-card--website .plan-summary__row--compact .plan-row__desc{
  max-width:350px !important; /* v1054: v703 tuned 240px for the old short
    "$590 for complete home page design..." copy - once replaced with the
    longer "$590 for a complete website design..." paragraph (v1052),
    240px squeezed it into ~7 cramped lines. Widened ~46% per Dave's ask
    (40-50% wider) so it reads like a normal paragraph again. */
}
.plan-modal .plan-card--website .plan-row__desc{
  font-size:12px !important;
  line-height:1.38 !important;
}
.plan-modal .plan-card--website #planBasePrice,
.plan-modal .plan-card--website .plan-pages--compact .plan-pages-amount{
  align-self:start !important;
  /* v678: margin-top nudges here fed back into this element's grid-row
     (which spans "1 / 3", another leftover auto-placement quirk in this
     file) resizing the track and amplifying the shift unpredictably (a
     -9px margin moved it 27px, -18px moved it 36px - not 1:1). Switched
     to transform, which doesn't participate in grid track sizing, so the
     18px pixel-measured offset applies exactly once. */
  transform:translateY(-18px) !important;
}
.plan-modal .plan-card--website .plan-pages--compact .logo-addon-heading__label{
  display:flex !important;
  flex-direction:column !important;
  align-items:flex-start !important;
  gap:6px !important;
}
.plan-modal .plan-card--website .plan-pages--compact .plan-row__optional{
  margin:0 !important;
}
.plan-modal .plan-card--website .plan-pages--compact .page-stepper{
  width:auto !important;
  margin:2px 0 0 !important;
}

/* v628: gold dividers - both the one between icon and description in
   Web Design/Coding, and the one to the left of "Don't need a website?"
   in Monthly Website Care - were too thin and too washed-out (partial
   opacity, and the care one was plain white, not orange at all). Both
   doubled in thickness and set to full-strength gold. */
.plan-modal .plan-card--website .plan-row__desc,
.plan-modal .plan-card--website .plan-pages--compact .plan-row__pages-body{
  border-left:1.5px solid var(--gold-bg) !important; /* v712: thinned slightly from 2px per Dave's ask - not hairline-thin, just less heavy */
}
.plan-modal .plan-card .plan-summary__section-title #switchToCareLink{
  border-left:1.5px solid var(--gold-bg) !important; /* v712: matched the other two dividers */
}
.plan-modal .plan-card .plan-summary__section-title #switchToWebsiteLink{
  border-left:0 !important; /* v1003: Dave asked to remove the divider
    line in front of "<- Actually, I need a new website" - the
    "Don't need a website?" link (#switchToCareLink) keeps its line,
    this one just didn't need it. */
}

/* v628: "Monthly Website Care" was wrapping to 2 lines because nothing
   forced it onto one - it now stays on one line with the gears icon
   immediately to its right (icon already renders after the text in the
   flex row; it just needed room to not wrap). */
#careSectionLabel{
  white-space:nowrap !important;
}

/* v628: undo the accidental right-justify from the last pass - the
   mode-switch link's two lines of text stay left-aligned, they were
   never asked to be right-aligned. Its position on the right side of the
   header row (grid-area: switch, justify-self: end) is unchanged. */
.plan-modal .plan-card .plan-summary__section-title #switchToCareLink,
.plan-modal .plan-card .plan-summary__section-title #switchToWebsiteLink{
  text-align:left !important;
  align-items:flex-start !important;
}

/* v629: Logo Ad-on card cleanup.
   - the decorative gold checkmark-square badge that every other card
     title gets (.logo-addon-heading::before/::after) was never wanted on
     this card - it read as a confusing second checkmark next to the real,
     clickable #addLogoDesign checkbox. Removed for this card only, and
     the 36px badge-offset padding removed with it.
   - #addLogoDesign is the first element in the heading row now (moved in
     the HTML) so it sits left-justified, flush with the description text
     below it, with "Logo Ad-on" immediately to its right.
   - the whole card had too much vacant space top/bottom - tightened. */
.plan-modal .plan-card--logo .logo-addon-heading::before,
.plan-modal .plan-card--logo .logo-addon-heading::after{
  display:none !important;
}
.plan-modal .plan-card--logo .logo-addon-heading{
  padding-left:0 !important;
  margin-bottom:10px !important;
}
.plan-modal .plan-card--logo #addLogoDesign{
  order:-1 !important;
  margin-right:2px !important;
}
.plan-modal .plan-card--logo{
  padding-top:18px !important;
  padding-bottom:18px !important;
}
.plan-modal .plan-card--logo .logo-addon{
  margin-top:0 !important;
  margin-bottom:0 !important;
}
.plan-modal .plan-card--logo .logo-addon span{
  gap:3px !important;
}

/* v630: service/care option pills - definitive rebuild.
   The <button> now contains ONLY the title + price (short, compact,
   rounded pill) - description text and the "Domain note" badge were
   moved out of the button in the HTML into a .care-cell wrapper, so they
   render BELOW the button, outside it, on the card's plain background.
   Selected = solid gold fill, all text white, small checkmark after the
   price. Unselected = flat gray pill, bright white title, muted/faint
   price so it visually reads as not-selected. Hover on an unselected
   pill turns gold with white text - every legacy hover rule in this file
   turned it black, which was explicitly wrong. */
.plan-modal .plan-card .service-options,
.plan-modal .plan-card .care-options{
  display:grid !important;
  grid-template-columns:repeat(4, minmax(0,1fr)) !important;
  column-gap:7px !important; /* v694: halved from 14px per Dave's ask - narrower gap, boxes read slightly wider */
  row-gap:14px !important;
  align-items:start !important;
}
.plan-modal .plan-card .care-options{
  grid-template-columns:repeat(3, minmax(0,1fr)) !important;
}
.plan-modal .plan-card .care-cell{
  display:flex !important;
  flex-direction:column !important;
  gap:14px !important; /* v690: a little more breathing room between the pill buttons and the description text below, per Dave's ask - was 8px */
}
.plan-modal .plan-card .care-cell .service-option__letter,
.plan-modal .plan-card .care-cell .service-option__eyebrow{
  display:none !important;
}
.plan-modal .plan-card .care-cell > .service-option,
.plan-modal .plan-card .care-cell > .care-option{
  all:unset !important;
  box-sizing:border-box !important;
  display:flex !important;
  flex-direction:column !important;
  gap:2px !important;
  width:100% !important;
  padding:2px 16px 0px !important; /* v709: -1px top, -3px bottom per Dave's ask */
  border-radius:8px !important; /* v694: halved from 16px per Dave's ask, testing a less rounded look */
  background:#87827b !important;
  border:1px solid rgba(0,0,0,.12) !important;
  cursor:pointer !important;
  transition:background .15s ease, color .15s ease !important;
}
.plan-modal .plan-card .care-cell > .service-option > strong,
.plan-modal .plan-card .care-cell > .care-option > strong{
  display:block !important;
  color:#1c242a !important;
  font-size:19px !important;
  font-weight:700 !important;
  line-height:1.15 !important;
}
.plan-modal .plan-card .care-cell > .service-option > b,
.plan-modal .plan-card .care-cell > .care-option > b{
  display:block !important;
  color:rgba(28,36,42,.58) !important;
  font-size:15px !important;
  font-weight:600 !important;
  font-style:normal !important;
}
.plan-modal .plan-card .care-cell > .service-option.is-selected,
.plan-modal .plan-card .care-cell > .care-option.is-selected{
  background:var(--gold-bg) !important;
  border-color:var(--gold-bg) !important;
}
.plan-modal .plan-card .care-cell > .service-option.is-selected > strong,
.plan-modal .plan-card .care-cell > .care-option.is-selected > strong,
.plan-modal .plan-card .care-cell > .service-option.is-selected > b,
.plan-modal .plan-card .care-cell > .care-option.is-selected > b{
  color:#1c242a !important;
}
.plan-modal .plan-card .care-cell > .service-option.is-selected > b::after,
.plan-modal .plan-card .care-cell > .care-option.is-selected > b::after{
  content:'\2713' !important;
  margin-left:8px !important;
  font-weight:700 !important;
}
.plan-modal .plan-card .care-cell > .service-option:not(.is-selected):hover,
.plan-modal .plan-card .care-cell > .care-option:not(.is-selected):hover{
  background:var(--gold-bg) !important;
  border-color:var(--gold-bg) !important;
  box-shadow:none !important;
  transform:none !important;
}
.plan-modal .plan-card .care-cell > .service-option:not(.is-selected):hover > strong,
.plan-modal .plan-card .care-cell > .care-option:not(.is-selected):hover > strong,
.plan-modal .plan-card .care-cell > .service-option:not(.is-selected):hover > b,
.plan-modal .plan-card .care-cell > .care-option:not(.is-selected):hover > b{
  color:#1c242a !important;
}
.plan-modal .plan-card .care-cell > em{
  display:block !important;
  font-style:normal !important;
  font-size:11px !important;
  line-height:1.4 !important;
  color:rgba(28,36,42,.62) !important;
}
.plan-modal .plan-card .care-cell > .service-info-pill{
  display:inline-flex !important;
  align-items:center !important;
  width:max-content !important;
  padding:5px 10px !important;
  border-radius:999px !important;
  border:1px solid rgba(126,49,135,.5) !important;
  background:rgba(0,0,0,.18) !important; /* v713: was "none" (fully clear) -
    orange border+text alone read weak against the card's warm gray. Used
    the same rgba(0,0,0,.18) dark overlay already used elsewhere in this
    modal (counter window, unselected pills) for a consistent, higher-
    contrast "chip" look instead of introducing a new color. */
  color:var(--gold) !important;
  font-size:11px !important;
  font-weight:600 !important;
  letter-spacing:.03em !important;
  text-transform:uppercase !important;
  cursor:pointer !important;
}
.plan-modal .plan-card .care-cell > small.domain-note{
  display:block !important;
  font-style:normal !important;
  font-size:11px !important;
  line-height:1.4 !important;
  color:rgba(28,36,42,.62) !important;
}
@media (max-width:820px){
  .plan-modal .plan-card .service-options,
  .plan-modal .plan-card .care-options{
    grid-template-columns:repeat(2, minmax(0,1fr)) !important;
  }
}
@media (max-width:520px){
  .plan-modal .plan-card .service-options,
  .plan-modal .plan-card .care-options{
    grid-template-columns:1fr !important;
  }
}

/* v635: fix the Web Design/Coding description-column collapse.
   The label column ("ADDITIONAL (INSIDE) PAGES", forced to one line with
   white-space:nowrap) needs more min-content width than its 180px track,
   and a grid item's automatic minimum width defaults to its content's
   min-content size - that was inflating column 1 and starving the
   description column down to almost nothing (the "one word per line"
   bug). Explicit min-width:0 on every grid child stops that blowout. */
.plan-modal .plan-card--website .plan-summary__row.plan-summary__row--compact,
.plan-modal .plan-card--website .plan-pages.plan-pages--compact{
  grid-template-columns:200px 60px minmax(0, 1fr) auto !important;
}
.plan-modal .plan-card--website .plan-summary__row--compact > *,
.plan-modal .plan-card--website .plan-pages--compact > *{
  min-width:0 !important;
}
.plan-modal .plan-card--website .plan-row__desc{
  min-width:0 !important;
  overflow-wrap:break-word !important;
}

/* v635: "Monthly Website Care" restated one more time, last in the
   cascade, as an unambiguous left-anchored grid so nothing earlier can
   win the tie and pull it back to the middle. */
.plan-modal .plan-card--care .plan-summary__section-title{
  display:grid !important;
  grid-template-columns:1fr auto !important;
  grid-template-areas:"label price" ". switch" !important;
  justify-items:start !important;
  text-align:left !important;
}
.plan-modal .plan-card--care .plan-summary__section-title .logo-addon-heading__label{
  grid-area:label !important;
  justify-self:start !important;
  margin:0 !important;
  text-align:left !important;
  white-space:nowrap !important;
}
.plan-modal .plan-card--care .plan-summary__section-title #switchToCareLink,
.plan-modal .plan-card--care .plan-summary__section-title #switchToWebsiteLink{
  grid-area:switch !important;
  justify-self:end !important;
  margin-top:-4px !important;
}

/* v635: Logo Ad-on header restated as an explicit grid, last in the
   cascade - the checkbox/title/icon/"(optional)" group kept reading as
   centered instead of flush-left with the description text below it. */
.plan-modal .plan-card--logo .logo-addon-heading{
  display:grid !important;
  grid-template-columns:1fr auto !important;
  align-items:center !important;
  justify-items:start !important;
}
.plan-modal .plan-card--logo .logo-addon-heading__label{
  justify-self:start !important;
  margin:0 !important;
}
.plan-modal .plan-card--logo .plan-logo-amount{
  justify-self:end !important;
}

/* v635: option pill polish round 2.
   - equal height/width pills regardless of 1-line vs 2-line title
   - unselected pill background lightened (was reading too dark/heavy)
   - selected-state checkmark removed (Dave: "kind of tacky")
   - description text below unselected pills is faint/off-white; the
     SELECTED pill's description is the only one that reads pure white
   - hovering a pill also brightens its description text to white,
     matching the button's own gold/white hover state */
.plan-modal .plan-card .service-options,
.plan-modal .plan-card .care-options{
  align-items:start !important; /* v698: was stretch - forced every pill's
    cell to match the tallest cell's height even though the hover-reveal
    description text (v682) is hidden on unselected pills, leaving a huge
    slab of blank space below the shorter cells. Cells now size to their
    own visible content instead. */
}
.plan-modal .plan-card .care-cell{
  height:auto !important; /* v698: was 100% - stretched every cell to
    match the tallest (selected) cell's row height even after switching
    align-items to start, recreating the same oversized blank-space bug.
    Cells now size to their own content. */
}
.plan-modal .plan-card .care-cell > .service-option,
.plan-modal .plan-card .care-cell > .care-option{
  min-height:46px !important; /* v708: reduced another 8px (4px top + 4px bottom) to match the v708 padding cut */
  justify-content:center !important;
}
/* v686: Dave wants these unselected pills to match the exact overlay
   used on the -/0/+ counter window (rgba(0,0,0,.18) black over the
   card's #8f8b85, plus its rgba(255,255,255,.16) border) rather than
   the flat #8f8b85 v674 landed on - using the identical rgba values so
   it's pixel-for-pixel the same treatment, not just a close match.
   A much older, higher-specificity rule further up the file
   (".service-option:not(.is-selected):not(.is-active):not([aria-pressed
   ='true'])" - 3 stacked :not() pseudo-classes push its specificity
   above a plain class chain) was still winning despite coming first in
   source order, so this selector repeats :not(.is-selected) to match/
   exceed that specificity rather than relying on cascade order alone. */
.plan-modal .plan-card .care-cell > .service-option:not(.is-selected),
.plan-modal .plan-card .care-cell > .care-option:not(.is-selected){
  background:rgba(0,0,0,.06) !important;
  border:1px solid transparent !important;
  opacity:1 !important;
  filter:none !important;
}
.plan-modal .plan-card .care-cell > .service-option.is-selected,
.plan-modal .plan-card .care-cell > .care-option.is-selected{
  border-color:var(--gold-bg) !important;
}
.plan-modal .plan-card .care-cell > .service-option.is-selected,
.plan-modal .plan-card .care-cell > .care-option.is-selected{
  background:var(--gold-bg) !important;
}
.plan-modal .plan-card .care-cell > .service-option.is-selected > b::after,
.plan-modal .plan-card .care-cell > .care-option.is-selected > b::after{
  content:none !important;
}
.plan-modal .plan-card .care-cell > em{
  color:rgba(28,36,42,.62) !important;
}
.plan-modal .plan-card .care-cell:has(> .is-selected) > em{
  color:rgba(28,36,42,.62) !important;
}
.plan-modal .plan-card .care-cell:hover > em{
  color:rgba(28,36,42,.62) !important;
}

/* v635: too much empty space below the last card / footer at the bottom
   of the panel - tightened. */
.plan-modal__panel{
  padding-bottom:clamp(16px, 2.2vw, 26px) !important;
}
.plan-modal__footer{
  margin-top:6px !important;
  padding-top:0 !important;
}
.plan-total{
  margin-bottom:8px !important;
}

/* v640: payment section, round 7 - true spreadsheet alignment, rebuilt.
   The v636 shared-grid (display:contents) approach kept mispairing rows
   because auto-placement doesn't reliably reunite an em/strong pair when
   optional lines (pages/logo/care) come and go between boxes. Replaced
   with a much simpler, guaranteed-correct approach: each .estimate-part
   stays its own flex row (no display:contents), with the name (em) and
   price (strong) given FIXED widths, so every box's $ signs land at the
   same x position without depending on cross-wrapper grid placement at
   all. flex `order` puts the name first visually regardless of DOM order
   (markup emits <strong> before <em>). */
.plan-modal .plan-card .payment-choice__option .estimate-breakdown{
  display:flex !important;
  flex-direction:column !important;
  align-items:flex-end !important;
  gap:6px !important;
  max-width:none !important;
}
.plan-modal .plan-card .payment-choice__option .estimate-part,
.plan-modal .plan-card .payment-choice__option .estimate-part--care{
  display:flex !important;
  justify-content:flex-end !important;
  align-items:baseline !important;
  gap:10px !important;
  width:100% !important;
}
.plan-modal .plan-card .payment-choice__option .estimate-part em,
.plan-modal .plan-card .payment-choice__option .estimate-part--care em{
  flex:0 0 150px !important;
  text-align:right !important;
  order:0 !important;
}
.plan-modal .plan-card .payment-choice__option .estimate-part strong,
.plan-modal .plan-card .payment-choice__option .estimate-part--care strong{
  flex:0 0 70px !important;
  text-align:left !important;
  order:1 !important;
}
/* v645: the divider above "Hosting + Webcare" was a border-top on the
   full-width row, so it stretched all the way across the box instead of
   just sitting under the "Hosting + Webcare  $49/mo" text itself. Swapped
   for a short ::before line sized to match that row's own content width
   (150px label + 10px gap + 70px price = 230px) and right-aligned, so it
   stops right where the text starts, same as every box. */
.plan-modal .plan-card .payment-choice__option .estimate-part--care{
  position:relative !important;
  border-top:none !important;
  padding-top:8px !important;
  margin-top:2px !important;
}
.plan-modal .plan-card .payment-choice__option .estimate-part--care::before{
  content:'' !important;
  position:absolute !important;
  top:0 !important;
  right:0 !important;
  width:230px !important;
  border-top:1px solid rgba(28,36,42,.18) !important;
}
.plan-modal .plan-card .payment-choice__option.is-selected .estimate-part--care::before,
.plan-modal .plan-card .payment-choice__option.is-selected:hover .estimate-part--care::before{
  border-top-color:rgba(255,255,255,.55) !important;
}
.plan-modal .plan-card .payment-choice__option .estimate-part--months{
  display:flex !important;
  justify-content:flex-end !important;
  width:100% !important;
}
.plan-modal .plan-card .payment-choice__option .estimate-part--months em{
  text-align:right !important;
}

/* v636: gap between the four payment boxes, cut roughly in half again
   (3px -> 2px) per Dave's repeated ask.
   v666: bumped to 8px to match the exact gap already used between the
   four main panels (Web Design/Coding, Monthly Website Care, Logo Ad-on,
   Payment Options - all .plan-card margin-bottom:8px, confirmed live via
   getBoundingClientRect). Only this spacing value changes - Payment
   Options stays locked otherwise. */
.plan-modal .plan-card .payment-choice__option{
  margin-bottom:8px !important;
}

/* v636: unselected payment boxes had no hover feedback at all - hover now
   fades to the same darker tone the selected box uses, and it stays that
   color once clicked/selected (same value, so there's no flash/mismatch
   on selection). */
.plan-modal .plan-card .payment-choice__option:not(.is-selected):hover{
  /* v688: matched to the same counter-window overlay as the selected
     state above, instead of the old flat #68655f. */
  background:rgba(0,0,0,.18) !important;
  border-color:rgba(28,36,42,.16) !important;
}

/* v636: the orange "Project Start" button had no hover feedback either -
   fades to a darker gold on hover so it reads as clickable. */
.plan-modal__footer .plan-submit:hover{
  background:#66266E !important;
  border-color:#66266E !important;
}

/* v637: the itemized product names ("Website", "Hosting + Webcare") and
   dollar amounts inside each payment box were pure white regardless of
   selection - too much. Grayed out by default on the 3/6/12-month boxes,
   same faint treatment as their "3 monthly payments" style headers, and
   they brighten to pure white only when that box is selected or
   hovered. */
.plan-modal .plan-card .payment-choice__option .estimate-part em,
.plan-modal .plan-card .payment-choice__option .estimate-part strong,
.plan-modal .plan-card .payment-choice__option .estimate-part--care em,
.plan-modal .plan-card .payment-choice__option .estimate-part--care strong{
  color:rgba(28,36,42,.45) !important;
}
/* v968: this rule used to ALSO whiten this text on plain :hover (not
   selected), which read as washed-out light-gray-on-medium-gray per
   Dave's report - too low contrast to read. Text should only go white
   when the box is actually selected (dark blue), never on hover alone. */
.plan-modal .plan-card .payment-choice__option.is-selected .estimate-part em,
.plan-modal .plan-card .payment-choice__option.is-selected .estimate-part strong,
.plan-modal .plan-card .payment-choice__option.is-selected .estimate-part--care em,
.plan-modal .plan-card .payment-choice__option.is-selected .estimate-part--care strong{
  color:#1c242a !important;
}

/* v638: card sub-headers ("Web Design/Coding", "Monthly Website Care",
   "Logo Ad-on", "Payment Options") were set to font-weight:800, while the
   base h2 rule the "Modern Website" title inherits from is only 500 -
   the sub-heads read noticeably heavier/bolder than the main title.
   Matched to 500 so the weight is consistent top to bottom. */
.plan-modal .plan-card__title,
.plan-modal .plan-card .plan-summary__section-title,
.plan-modal .plan-card .logo-addon-heading__label,
.plan-modal .plan-card .payment-choice > .small-label{
  font-weight:500 !important;
}

/* v639: FOUND THE REAL SOURCE of the wide beige gutter, confirmed by
   pixel-measuring an actual render: .plan-modal__panel padding was NOT
   the only thing controlling the gap - .plan-modal__scroll (a separate
   inner wrapper) has its OWN independent padding:clamp(26px,4vw,48px),
   which was stacking on top of the panel's padding this whole time
   (20px panel + 48px scroll = 68px measured gutter, matching exactly).
   Every previous attempt to fix this only touched .plan-modal__panel,
   so it could never have worked. Both cut down together now so the
   total left/right gutter is roughly 30% of the original ~68px. */
.plan-modal__scroll{
  padding-left:8px !important;
  padding-right:8px !important;
}
.plan-modal__panel{
  padding-left:8px !important;
  padding-right:8px !important;
}

/* v640: Dave asked again after the v639 fix landed - if the 48px scroll
   padding was the untouched culprit, bring the total gutter down further,
   to roughly 16px (was 8px+8px=20px). Both wrappers cut to 8px still sum
   to 16px, so no change needed here - this comment documents that the
   16px target is already met by the two rules above. Left as its own
   block instead of silently folding into v639 so the history is clear. */

/* v640: Logo Ad-on card - when the checkbox gets checked, several legacy
   ":has(input:checked)" rules (going back to before the checkbox moved
   out of .logo-addon) still paint an orange/gold highlight behind the
   description text and the "Custom logo design: $149" line. Dave wants
   ONLY the checkbox itself to show a checked state - nothing else on the
   card should change appearance. Force every one of those legacy
   highlight targets back to neutral, regardless of checked state. */
.plan-modal .plan-card--logo .logo-addon,
.plan-modal .plan-card--logo .logo-addon:has(input:checked),
.plan-modal.is-plan-additional-pages .plan-card--logo .logo-addon:has(input:checked),
.plan-modal.is-plan-hosting-care .plan-card--logo .logo-addon:has(input:checked),
.plan-card--logo:has(#addLogoDesign:checked) .logo-addon,
.plan-modal.is-plan-additional-pages .plan-card--logo:has(#addLogoDesign:checked) .logo-addon,
.plan-modal.is-plan-hosting-care .plan-card--logo:has(#addLogoDesign:checked) .logo-addon{
  background:transparent !important;
  border-color:transparent !important;
  box-shadow:none !important;
}
.plan-modal .plan-card--logo .logo-addon b,
.plan-modal .plan-card--logo .logo-addon:has(input:checked) b,
.plan-modal.is-plan-additional-pages .plan-card--logo .logo-addon:has(input:checked) b,
.plan-modal.is-plan-hosting-care .plan-card--logo .logo-addon:has(input:checked) b,
.plan-card--logo:has(#addLogoDesign:checked) .logo-addon b,
.plan-modal.is-plan-additional-pages .plan-card--logo:has(#addLogoDesign:checked) .logo-addon b,
.plan-modal.is-plan-hosting-care .plan-card--logo:has(#addLogoDesign:checked) .logo-addon b{
  background:transparent !important;
  color:inherit !important;
}
/* Tighten the card's vertical whitespace per Dave's "boxes need to be
   short" note. */
.plan-modal .plan-card--logo .logo-addon{
  padding:3px 0 !important; /* v679: halved per Dave's ask */
}
.plan-modal .plan-card--logo .logo-addon-heading{
  margin-bottom:2px !important; /* v679: halved per Dave's ask */
}

/* v640: the Additional (Inside) Pages description paragraph
   (.plan-pages--compact .plan-row__desc) kept computing grid-column:2
   at runtime even though the only CSS rule for it in the whole file sets
   grid-column:3 - confirmed via getComputedStyle across multiple
   diagnostic passes and never explained by static cascade analysis.
   Rather than keep guessing at the CSS, main-v114.js now force-sets it
   inline on modal open (inline style wins over any external rule,
   matching or not), which is the one thing already proven to work. See
   the "v640 grid-column enforcement" block near the end of main-v114.js. */

/* v641: FOUND the real cause of "PRIMARY PAGE DESIGN" / "ADDITIONAL
   (INSIDE) PAGES" reading as floating, disconnected from the
   "Web Design/Coding" title above. The generic header rule at line ~14867
   (".plan-card__title, .plan-card .plan-summary__section-title,
   .plan-card .logo-addon-heading__label, .plan-card .payment-choice >
   .small-label { padding-left:36px }") exists to make room for each
   section header's decorative ::before icon - but its selector list also
   matches the plain "logo-addon-heading__label" SPAN used as column 1
   inside the compact grid rows, which is NOT a header and has no icon.
   That span was getting a second, unwanted 36px padding stacked on top of
   the row's own 36px padding-left, pushing the label ~36px further right
   than the title above it. Zeroed out here, scoped tightly to just the
   compact-row label so the real section headers keep their icon spacing. */
.plan-modal .plan-card--website .plan-summary__row--compact .logo-addon-heading__label,
.plan-modal .plan-card--website .plan-pages--compact .logo-addon-heading__label{
  padding-left:0 !important;
}
.plan-modal .plan-card--website .plan-summary__row--compact .logo-addon-heading__label::before,
.plan-modal .plan-card--website .plan-pages--compact .logo-addon-heading__label::before,
.plan-modal .plan-card--website .plan-summary__row--compact .logo-addon-heading__label::after,
.plan-modal .plan-card--website .plan-pages--compact .logo-addon-heading__label::after{
  display:none !important;
}

/* v641: decouple the header inset from the card gutter. Dave now wants
   MORE breathing room on the left for the "Modern Website" title/lead
   text/step-pills (they were sitting right on the panel's rounded
   corner after the v639/v640 gutter cuts), but still wants the dark card
   boxes sitting close to the panel edge. Since both live inside the same
   .plan-modal__scroll/.plan-modal__panel padding, raising that padding
   back up would also push the cards back out - so the padding goes back
   up to a comfortable 28px for the header, and the cards are pulled back
   toward the edges with a negative margin + compensating width so their
   effective gutter stays at the ~16px Dave asked for. */
.plan-modal__scroll{
  padding-left:28px !important;
  padding-right:28px !important;
}
.plan-modal__panel{
  padding-left:28px !important;
  padding-right:28px !important;
}
.plan-modal .plan-card{
  margin-left:-12px !important;
  margin-right:-12px !important;
  width:calc(100% + 24px) !important;
}

/* v641: narrow the "Modern Website" lead paragraph a bit more to close
   up the orphan/widow word ("them.") sitting alone on its own line.
   v869: this was never scoped to desktop, so on mobile (where there's no
   side-by-side preview graphic to make room for) it was squeezing the
   paragraph into the same narrow column and causing much heavier
   wrapping than the screen width allows. Desktop keeps the narrower
   measure; mobile gets the full width back. */
@media (min-width:961px){
  .plan-modal__header p{
    max-width:min(500px,56%) !important;
  }
}
@media (max-width:960px){
  .plan-modal__header p{
    max-width:none !important;
    width:100% !important;
  }
}

/* v642: "Monthly Website Care" keeps reading as centered no matter how
   many times the grid/justify-items version of this rule gets restated
   (v626/v628/v634/v635) - text-align is an INHERITED property, and
   something upstream of this element is evidently still supplying
   text-align:center, which grid/justify-items on the title itself does
   not override (that only controls the grid item's own box position,
   not the text alignment inside it). Setting text-align:left directly,
   in the same breath as every ancestor in the chain, closes off every
   place that inheritance could be sneaking in. */
.plan-modal .plan-card--care,
.plan-modal .plan-card--care .plan-summary__section-title,
.plan-modal .plan-card--care .plan-summary__section-title .logo-addon-heading__label,
.plan-modal .plan-card--care .plan-summary__section-title .logo-addon-heading__label span{
  text-align:left !important;
}

/* v642: same root cause for the option pills - "Website Care" (and every
   pill title/price) was inheriting centered text instead of reading
   flush left like the price line underneath it. Forced directly on the
   text elements so it can't be inherited away again. */
.plan-modal .plan-card .care-cell,
.plan-modal .plan-card .care-cell > .service-option,
.plan-modal .plan-card .care-cell > .care-option,
.plan-modal .plan-card .care-cell > .service-option > strong,
.plan-modal .plan-card .care-cell > .care-option > strong,
.plan-modal .plan-card .care-cell > .service-option > b,
.plan-modal .plan-card .care-cell > .care-option > b{
  text-align:left !important;
  align-items:flex-start !important;
}

/* v643: FOUND the real cause of the Logo Ad-on checkbox/title sitting
   shifted right of the description text below it - same bug as v641's
   "PRIMARY PAGE DESIGN" fix. The generic section-header rule at line
   ~14867 (padding-left:36px, meant to make room for a decorative ::before
   icon on real section titles) also matches .logo-addon-heading__label
   here, which has no such icon - it's the checkbox row. That extra 36px
   was never present on .logo-addon (the description label below it),
   which sits flush at the card's own 24px padding, so the two have been
   visibly misaligned this whole time no matter how many times the
   grid/justify-self version of this fix got restated. Zeroed directly,
   scoped only to the Logo Ad-on card so the real section titles elsewhere
   keep their icon spacing. */
.plan-modal .plan-card--logo .logo-addon-heading,
.plan-modal .plan-card--logo .logo-addon-heading__label{
  padding-left:0 !important;
  margin-left:0 !important;
}
.plan-modal .plan-card--logo .logo-addon-heading::before,
.plan-modal .plan-card--logo .logo-addon-heading::after,
.plan-modal .plan-card--logo .logo-addon-heading__label::before,
.plan-modal .plan-card--logo .logo-addon-heading__label::after{
  display:none !important;
  content:none !important;
}

/* v643: pixel-measured confirmation that "Monthly Website Care" has the
   exact same leftover 36px icon-padding bug as the Logo Ad-on header did
   (measured 63px inset from the card edge vs "Payment Options"'s 27px on
   the same screenshot) - the grid/justify-items rewrites in v626/v635
   fixed the item's position WITHIN its box but never removed the box's
   own padding-left, which was still shoving the whole label 36px to the
   right of where "Payment Options" and the description content below it
   sit. Zeroed the same way as the Logo card. */
.plan-modal .plan-card--care .plan-summary__section-title,
.plan-modal .plan-card--care .plan-summary__section-title .logo-addon-heading__label{
  padding-left:0 !important;
  margin-left:0 !important;
}
.plan-modal .plan-card--care .plan-summary__section-title::before,
.plan-modal .plan-card--care .plan-summary__section-title::after,
.plan-modal .plan-card--care .plan-summary__section-title .logo-addon-heading__label::before,
.plan-modal .plan-card--care .plan-summary__section-title .logo-addon-heading__label::after{
  display:none !important;
  content:none !important;
}

/* v644: footer note + Project Start button were hugging the panel's left
   edge - nudged the whole footer row right a bit, and narrowed the note
   text block further so the trailing "clear." doesn't orphan onto its
   own line. */
.plan-modal__footer{
  padding-left:14px !important;
}
.plan-modal__footer #planNote{
  max-width:440px !important;
}

/* v647: cut the gap above the footer note in half again, narrow the note
   block a bit further so it doesn't leave two short words on the last
   line, and lift the "Project Start" button up so it sits level with the
   top of the note text instead of hanging lower than it. */
.plan-modal__footer{
  margin-top:3px !important;
  align-items:flex-start !important;
}
.plan-modal__footer #planNote{
  max-width:380px !important;
}
.plan-modal__footer .plan-submit{
  margin-top:2px !important;
}

/* v650: the "Don't need a website?" mode-switch text block sat awkwardly
   far from its own orange divider line, and the whole block read as
   floating in the card. Nudged right and up a bit, and pulled the text
   in closer to the divider. */
.plan-modal .plan-card--care .plan-summary__section-title #switchToCareLink,
.plan-modal .plan-card--care .plan-summary__section-title #switchToWebsiteLink{
  padding-left:10px !important;
  margin-top:-10px !important;
  margin-left:24px !important;
}

/* v654: "Don't need a website?" was on its own row below the header,
   reading as a disconnected floating block. Moved onto the SAME row as
   "Monthly Website Care" + the gears icon, over on the right side, and
   the second line of its link text now breaks after "for" instead of
   wrapping wherever it fits (see index.html). */
.plan-modal .plan-card--care .plan-summary__section-title{
  /* v664: Dave wants price back in the SAME row as "Don't need a
     website?" (upper right corner, to its right), not stacked below it
     like v663's two-row fix - that fix solved the overflow but added a
     row of height that pushed the 4 tiles down. Single row again, one
     more column added ("price") so #planBaseMonthly (still carrying
     grid-area:price from before v654 - see v663 note) resolves to a
     real, correctly-sized cell instead of falling back to invalid
     auto-placement/overflow.
     v665: the first cut of this still overflowed - "auto 1fr auto auto"
     with the inherited 16px column-gap (3 gaps = 48px) plus a +20px
     margin on the switch link added up to more than the row's actual
     640px width, so the price column got pushed past the card's right
     edge again even though grid-area:price was now valid. Tightened the
     gap to 8px and dropped the extra margin (freeing ~50px) so all four
     columns actually fit, which also reads as the switch block sitting
     closer to the label, per Dave's "move it left ~20px" ask. */
  grid-template-columns:auto 1fr auto auto !important;
  grid-template-areas:"label . switch price" !important;
  column-gap:8px !important;
  align-items:start !important;
}
.plan-modal .plan-card--care .plan-summary__section-title #switchToCareLink,
.plan-modal .plan-card--care .plan-summary__section-title #switchToWebsiteLink{
  margin-top:0 !important;
  margin-right:0 !important;
  align-self:center !important;
}
.plan-modal .plan-card--care .plan-summary__section-title .plan-base-monthly{
  grid-area:price !important;
  justify-self:end !important;
  align-self:start !important;
  margin:0 !important;
}

/* v658: "your existing site instead ->" was wrapping the arrow onto its
   own third line - the switch button's "auto" grid column was sizing too
   narrow for that full second line. Given a min-width to comfortably fit
   it (index.html also joins "instead" and the arrow with a non-breaking
   space so they can never separate again). */
.plan-modal .plan-card--care .plan-summary__section-title #switchToCareLink{
  min-width:200px !important;
}
.plan-modal .plan-card--care .plan-summary__section-title #switchToCareLink em{
  white-space:normal !important;
}

/* v651: the v635 "too much empty space below the last card" fix added
   padding-bottom on .plan-modal__panel - the OUTER fixed frame, not the
   .plan-modal__scroll region that actually scrolls inside it. That left
   a static gap the scrolled content could never reach past, so scrolling
   to the bottom always stopped short of the panel's true bottom edge
   instead of the content running flush to it like before. Zeroed back
   out - .plan-modal__scroll's own padding (v639/v640) already handles
   reasonable breathing room around the actual content. */
.plan-modal__panel{
  padding-bottom:0 !important;
}

/* v652: raise "Project Start" further (was still ~15-20px lower than the
   note text's top line) and darken it more aggressively on hover so it's
   unmistakable - a base rule already darkens on hover but bumped the
   contrast up further here too in case it read as too subtle. */
.plan-modal__footer .plan-submit{
  margin-top:-16px !important;
}
.plan-modal__footer .plan-submit:hover{
  background:#66266E !important;
  border-color:#66266E !important;
}

/* v652: the laptop/phone live-preview thumbnail was sitting a touch too
   high - moved down slightly - and scaled up about 10% for more visual
   presence, with its inner "stage" scale factor increased to match so
   the screenshot inside doesn't distort or blow out. */
.plan-modal-preview{
  top:15px !important; /* v1014: was 40px - Dave reported it landed lower than asked and was touching the card below. Moved up another 25px. */
  right:36px !important; /* v1013: 30px further left from v723's 6px */
  width:295px !important; /* v1013: whole preview scaled up 20% (246 -> 295) */
  height:167px !important; /* v1013: 20% larger (139 -> 167) */
}
.plan-modal-preview__stage{
  transform:scale(.144144) !important; /* v1013: scaled up the same 20%
    as the container (.12012 -> .144144) so the laptop/phone mockup
    inside grows proportionally instead of being cropped or leaving
    empty space around it. */
}

/* v655: "Domain note" pill buttons read too large - scaled down ~20%
   (padding and font-size) and pulled up closer to the description text
   above them by tightening the gap. */
.plan-modal .plan-card .care-cell > .service-info-pill{
  padding:4px 8px !important;
  font-size:9px !important;
  margin-top:-4px !important;
}

/* v656: ROOT-CAUSE FOUND for "PRIMARY PAGE DESIGN"/"ADDITIONAL (INSIDE)
   PAGES" never lining up with "Web Design/Coding" above them, verified
   with live getBoundingClientRect measurements (not just reading the
   stylesheet): the title element itself has paddingLeft:0 - its text
   sits flush at the card's content edge. The row
   (.plan-summary__row--compact / .plan-pages--compact) shares that exact
   same left edge as a box, but has its OWN paddingLeft:36px (set back in
   v628 to make room for the grid columns), which pushes the label 36px
   further right than the title. Every previous attempt (v626/v635/v641)
   fixed the LABEL's own padding but never the ROW's padding-left, which
   was the actual remaining 36px offset the whole time. Zeroed here so
   the row's content starts at the identical x position as the title. */
.plan-modal .plan-card--website .plan-summary__row.plan-summary__row--compact,
.plan-modal .plan-card--website .plan-pages.plan-pages--compact{
  padding-left:0 !important;
}

/* v657: dialed back two fixes that overshot.
   - v652's margin-top:-16px on "Project Start" pulled it almost flush
     against the gray card above it - only meant to close a ~15-20px gap,
     not remove the gap entirely. Eased to -4px so there's still a clear
     margin between the button and the panel edge.
   - v647's max-width:380px on the footer note was meant to trim ONE
     widow word, not force a much narrower, much taller paragraph.
     Widened back out to 480px - close to the original 520px, just enough
     to avoid the single trailing widow word. */
.plan-modal__footer .plan-submit{
  margin-top:-4px !important;
}
.plan-modal__footer #planNote{
  max-width:480px !important;
}

/* v658: Web Design/Coding row icons scaled up another 25% (58px -> 73px,
   ~125% of the v628 size) and kept top-anchored right next to the header
   text via align-self:start - now that the grid-row bug above is fixed,
   this actually reads as "next to the header" instead of floating in the
   middle of an artificially tall row. */
.plan-modal .plan-card--website .plan-row__icon{
  width:73px !important;
  height:73px !important;
  align-self:start !important;
  margin-top:2px !important;
}

/* v658: the (i) info-pill button sits inside the "Additional (Inside)
   Pages" <label> immediately after the text with no gap at all - added
   breathing room. */
.plan-modal .plan-pages-info-pill{
  margin-left:8px !important;
}

/* v659: fine-tuning pass, small moves only.
   - button was almost touching the panel above it at margin-top:-4px -
     eased to a small positive gap instead of flirting with zero.
   - footer note at 480px left one widow word again - nudged down a
     little to 430px, NOT back to the 380px extreme from before.
   - hover rule re-confirmed present and unconflicted (see v636/v652) -
     added a transition + slightly stronger contrast plus a duplicate
     unscoped rule in case some cached build is only picking up one of
     the two existing hover rules. */
.plan-modal__footer .plan-submit{
  margin-top:6px !important;
}
.plan-modal__footer #planNote{
  max-width:430px !important;
}
.plan-modal__footer .plan-submit{
  transition:background-color .15s ease, border-color .15s ease !important;
}
.plan-modal .plan-submit:hover,
.plan-modal__footer .plan-submit:hover,
#openStartForm:hover{
  background:#66266E !important;
  border-color:#66266E !important;
}

/* v661: "(optional)" removed entirely from Additional (Inside) Pages
   per Dave's request (index.html) - the stepper now sits directly under
   the header. Tightened the row's own top/bottom padding and the gap
   between header and stepper so this category isn't carrying extra
   dead space now that a whole line of content is gone. */
.plan-modal .plan-card--website .plan-pages.plan-pages--compact{
  padding-top:10px !important;
  padding-bottom:5px !important; /* v672: halved per Dave's "too much sloppy open space" below the -/1/+ counter */
}
.plan-modal .plan-card--website .plan-pages--compact .logo-addon-heading__label{
  gap:12px !important;
}
.plan-modal .plan-card--website .plan-pages--compact .page-stepper{
  margin:0 !important;
}
/* v668: "ADDITIONAL (INSIDE) PAGES" subheader sat 20px above the -/0/+
   counter (8px flex gap above + a leftover ".plan-pages label{
   margin-bottom:12px }" rule stacking on top of it) - Dave wants it
   closer, ~10-15px. Zeroed that stray margin so the 12px flex gap above
   is the only source of the spacing. */
.plan-modal .plan-card--website .plan-pages--compact label{
  margin-bottom:0 !important;
}

/* v662: ROOT CAUSE of "Website Care" (and every service/care pill title)
   reading right-shifted no matter how many times text-align:left got
   restated (v630/v635/v642/v646 all "fixed" this on paper). A leftover
   rule from an old grid-based version of this card -
   ".service-option > strong{ grid-column:2; grid-row:1; align-self:end }"
   at line ~7585 - was never removed when the card moved to today's
   column-flex layout. align-self on the child ALWAYS overrides the
   parent's align-items, so no amount of align-items:flex-start on the
   button (v642/v646) could ever have moved it - the text inside was
   genuinely left-aligned the whole time (confirmed by every prior
   computed-style check), it was the strong/b element's own BOX that was
   pinned to the right edge by this stray align-self. Killed here,
   scoped to the actual pill buttons, so it can't reappear. */
.plan-modal .plan-card .care-cell > .service-option > strong,
.plan-modal .plan-card .care-cell > .care-option > strong,
.plan-modal .plan-card .care-cell > .service-option > b,
.plan-modal .plan-card .care-cell > .care-option > b{
  align-self:flex-start !important;
}


/* v664: header row is single-row again (see above) so it's shorter than
   the v663 two-row version - pull the 4 option tiles up closer to it,
   per Dave's "tighten this up" ask. */
.plan-modal .plan-card--care .plan-summary__section-title{
  margin-bottom:6px !important;
}

/* v667: cut top/bottom padding on every .plan-card panel (Web
   Design/Coding, Monthly Website Care, Logo Ad-on, Payment Options) in
   half - 24px down to 12px - per Dave's "too much padding top and
   bottom, whole thing is a slog to scroll" ask. Left/right padding is
   untouched (that 24px gutter was tuned extensively earlier for the
   card-edge alignment work), only vertical padding is reduced so the
   panels get shorter without disturbing horizontal alignment. */
.plan-modal .plan-card{
  padding-top:12px !important;
  padding-bottom:12px !important;
}

/* v669: moved the "Additional (Inside) Pages" row icon (devices SVG) up
   ~12px per Dave's ask. Scoped to .plan-pages--compact specifically (via
   the icon's own missing ".homepage-heading__icon" class, which only the
   Primary Page Design laptop icon above it carries) so the Primary Page
   Design row's icon is untouched. */
.plan-modal .plan-card--website .plan-pages--compact .plan-row__icon{
  margin-top:-10px !important;
}

/* v670: "Primary Page Design" row icon was floating far right of its
   header text (68px gap) instead of sitting close beside it, and
   deliberately NOT aligned with the "Additional (Inside) Pages" icon
   below (per Dave: staggered, this one further left). Switched from
   justify-self:center (which centers it in the whole icon column,
   pushing it far from the label) to an explicit left position measured
   against the label. */
.plan-modal .plan-card--website .plan-summary__row--compact .plan-row__icon{
  justify-self:start !important;
  margin-top:-23px !important; /* v671: additional 10px up per follow-up ask */
  margin-left:-53px !important;
}

/* v677: the four care-cell description paragraphs (under Hosting+Webcare,
   Website Care, Host existing site, Design handoff) read as skewed left
   relative to the pill buttons above them - shifted right 5px per Dave.
   v683: the Design handoff card has a SECOND paragraph below the <em>
   ("Future one-off updates...") that's a <small class="domain-note
   one-off-change-note">, not an <em> - v677 only targeted <em> so this
   one never got the 5px shift and now reads staggered against the
   paragraph above it. Added the same shift here. */
.plan-modal .plan-card .care-cell > em,
.plan-modal .plan-card .care-cell > small.domain-note.one-off-change-note{
  margin-left:5px !important;
  margin-top:-6px !important; /* v687: halved the gap to the paragraph above it per Dave's ask */
}

/* v680: -/0/+ counter moved up 10px per Dave's ask. Using transform
   (not margin) since this same card already showed margin nudges
   feeding back into grid track sizing unpredictably (see v678 note). */
.plan-modal .plan-card--website .plan-pages--compact .page-stepper{
  transform:translateY(-10px) !important;
}

/* v682: desktop-only declutter per Dave - unselected care/service pills
   (Website Care, Host existing site, Design handoff when Hosting+Web
   Care is selected, etc.) hide their description paragraph + domain
   note pill by default, and reveal on hover. The selected pill's own
   text always stays visible. Gated to real desktop pointers via
   (hover:hover) and (pointer:fine) so touch/mobile - which has no
   hover - keeps the original always-visible behavior instead of
   permanently hiding text nobody can reveal.
   v698: switched from opacity/visibility (which still reserves full
   layout space, leaving a tall blank slab under the shorter pills once
   align-items changed from stretch to start) to display:none so
   collapsed cells actually shrink down to just their pill's height. */
@media (hover:hover) and (pointer:fine){
  .plan-modal .plan-card .care-cell > em,
  .plan-modal .plan-card .care-cell > .service-info-pill,
  .plan-modal .plan-card .care-cell > small.domain-note{
    display:none !important;
  }
  .plan-modal .plan-card .care-cell:has(> .is-selected) > em,
  .plan-modal .plan-card .care-cell:has(> .is-selected) > small.domain-note,
  .plan-modal .plan-card .care-cell:hover > em,
  .plan-modal .plan-card .care-cell:hover > small.domain-note{
    display:block !important;
  }
  .plan-modal .plan-card .care-cell:has(> .is-selected) > .service-info-pill,
  .plan-modal .plan-card .care-cell:hover > .service-info-pill{
    display:inline-flex !important; /* matches its natural .info-pop-trigger layout, not block */
  }
}

/* v691: the box titles ("Pay in full", "3 monthly payments", etc.) sat
   vertically centered in each payment box - since the base
   ".payment-choice__option{ align-items:center }" grid rule centers
   both grid columns to match the TALLER right column (the multi-line
   $/mo breakdown), the shorter title floated in the middle instead of
   lining up with the top of that breakdown text. Scoped override so
   only the modal instance changes (the unscoped base rule is shared
   with a separate, non-modal section of the page). */
.plan-modal .plan-card .payment-choice__option{
  align-items:start !important;
}
.plan-modal .plan-card .payment-choice__option > strong{
  align-self:start !important;
  margin-top:2px !important;
}

/* v692: on hover the circle turns gold (".plan-modal__close:hover{
   background:var(--gold-bg) }") but an older shared rule also turned the X
   itself gold (".plan-modal__close:hover::before{ color:#7E3187 }"),
   making it nearly invisible against the now-gold circle. Keep the X
   pure white on hover; only the circle should change color. */
.plan-modal__close:hover::before{
  color:#1c242a !important;
}

/* v693: pull the step pills + everything below up 20px, closer to the
   top edge of the window, per Dave's ask. */
.plan-modal__scroll{
  padding-top:28px !important;
}

/* v693: the step-pill number circles (".modal-progress__step span")
   were rgba(255,255,255,.10) - barely visible against both the light
   unselected pill background and the gold selected pill.
   v701: solid white circles (v693) read as noisy/too loud once seen
   next to everything else - toned down per Dave's ask. Unselected
   pills now get a very faint gray circle instead of pure white. The
   active (gold) pill's circle is a translucent white over the solid
   gold background, which lets the gold show through and reads as a
   soft/faint orange instead of a harsh pure-white dot. */
.plan-modal__header .modal-progress__step span{
  background:rgba(0,0,0,.08) !important;
  color:#2a2a2a !important;
}
.plan-modal__header .modal-progress__step.is-active span{
  background:rgba(255,255,255,.35) !important;
  color:#7a4300 !important;
}

/* v697: "$59/mo for 12 months" (#planBasePrice) sat 18px higher than
   the top of the "$590 for complete home page design..." description
   text beside it - nudged down to match, same pixel-measured technique
   used for the Additional Pages price (v678). Verified via two
   independent full-page-reload measurements (+9px -> 375.5px,
   +18px -> 384.5px) that both extrapolate to the same 366.5px baseline
   matching the description text's own top exactly. */
.plan-modal .plan-card--website #planBasePrice{
  transform:translateY(-23px) !important; /* v705: Dave wants the whole
    $590 paragraph/divider/price group flush with the top of the laptop
    icon beside it (which sits 23px higher due to its own v670/671
    margin-top:-23px nudge) - matched here. */
}

/* v705: "$590 for complete home page design..." paragraph (with its
   gold divider) and the "$59/mo for 12 months" price both started at
   the row's natural top (366.5px), 23px lower than the laptop icon
   beside them (which sits higher due to its own v670/671 margin-top
   nudge). Moved the paragraph up to match - the price above already
   got its matching -23px transform. Also tightened the padding below
   this row to the separator line beneath it, roughly half of what it
   was (16px -> 0px, landing right around 8px visually) since shifting
   the text up alone would have doubled that gap instead of closing it. */
.plan-modal .plan-card--website .plan-summary__row--compact .plan-row__desc{
  margin-top:-23px !important;
}
.plan-modal .plan-card--website .plan-summary__row.plan-summary__row--compact{
  padding-bottom:12px !important; /* v1056: was 0 - once the $590 paragraph
    got longer (v1052), the divider line sat flush against the text with
    no breathing room. Added 12px per Dave's "at least 10px" ask. */
}

/* v706: the gold divider + "$590.../$190 addl..." paragraphs sat too
   close to their laptop/devices icons - shifted both rows right 20px
   (Dave asked to move the first one and, if keeping them aligned, the
   second one too - keeping both in sync since they already share the
   same grid template). */
/* v709: Dave wanted this the other way around from v706 - keep the
   TOP paragraph ("$590...") close to its icon like before, and instead
   shift the BOTTOM paragraph ("$190 addl...") right, narrowed to also
   wrap to 4 lines like the top one. */
.plan-modal .plan-card--website .plan-summary__row--compact .plan-row__desc{
  margin-left:-20px !important; /* v721: 20px further left per Dave's ask (was 0, v709) */
}
.plan-modal .plan-card--website .plan-pages--compact .plan-row__desc{
  margin-left:20px !important;
  max-width:288px !important; /* v941: widened 20% (was 240px, v709) per Dave's ask */
}

/* v707: too much blank space below the -/0/+ page-stepper counter and
   the bottom edge of the Web Design/Coding card - halved both
   contributors (the card's own bottom padding, and the counter row's
   own bottom padding) per Dave's ask. */
.plan-modal .plan-card--website{
  padding-bottom:0 !important; /* was 12px (shared .plan-card default), then 6px - tightened further per Dave's follow-up ask */
}
.plan-modal .plan-card--website .plan-pages.plan-pages--compact{
  padding-bottom:8px !important; /* was 16px (shared row padding) */
}

/* v711/v712: the (i) info button next to "Additional (Inside) Pages" kept
   its own fixed gold color (from the shared .info-pop-trigger base rule)
   regardless of the label's ghosted/active state - same "> label" direct
   child bug as above meant this never matched either. Fixed the same way. */
.plan-modal .plan-card--website .plan-pages--compact label[for="additionalPages"] .plan-pages-info-pill{
  color:rgba(28,36,42,.45) !important;
}
.plan-modal .plan-card--website .plan-pages--compact label[for="additionalPages"].is-pages-active .plan-pages-info-pill{
  color:#1c242a !important;
}

/* v714: 10px less vertical gap between the -/0/+ page-stepper counter
   and the bottom of the Web Design/Coding card, per Dave's ask.
   Mirrors the same quirk documented at v697/v705 (#planBasePrice) -
   merely giving this element ANY transform property (even literally
   translateY(0px), a visual no-op on its own) changes how the
   surrounding grid computes its position, closing exactly the 10px
   gap Dave wanted with no other properties touched. Verified via
   isolated fresh-page-load measurements, not live style toggling
   (which gave misleading/inconsistent numbers on this file before). */
.plan-modal .plan-card--website .plan-pages--compact .page-stepper{
  transform:translateY(-7px) !important; /* v720: 7px up per Dave's ask, on top of v714's translateY(0px) baseline fix */
}

/* v715: "(choose one)" tucked under "Monthly Website Care", same
   size/color/weight as the "(optional)" label on Logo Ad-on
   (.logo-addon-heading__optional), but on its own line beneath the
   header instead of inline beside it. Compensated the section title's
   own margin-bottom so the row of 4 pills below doesn't get pushed
   down by the new line. */
.plan-modal .plan-card--care .logo-addon-heading__label{
  display:flex !important;
  flex-wrap:wrap !important;
  align-items:center !important;
  column-gap:8px !important;
}
.plan-modal .plan-card--care .care-choose-one{
  display:block !important;
  width:100% !important;
  margin-top:-21px !important; /* v717: 3px more per Dave's ask (was -15px, v716; -18 undershot due to this file's non-linear margin behavior, -21 lands closer to the true 3px). v716: was -4px - sat too far from the
    header and right on top of the pill row below. Pulled up closer to
    "Monthly Website Care" per Dave's ask. */
}
.plan-modal .plan-card--care .plan-summary__section-title{
  margin-bottom:0 !important; /* was 6px (v664) - the new line below the header takes up that space instead */
}
.plan-modal .plan-card--care #serviceOptions{
  margin-top:13px !important; /* v717: +3px to keep the pill row in place while "(choose one)" moves up. v716: was -1px - now that "(choose one)"
    sits closer to the header (see above), it needs real breathing room
    below it instead of nearly touching the pill row. */
}

/* v718: Monthly Website Care card - 6px less top padding per Dave's ask,
   and "$49/mo" nudged down 5px so its top lines up with "Don't need a
   website?" beside it (it was sitting 5px higher than the rest of the
   row's content). */
.plan-modal .plan-card--care{
  padding-top:6px !important; /* was 12px (shared .plan-card default) */
}
.plan-modal .plan-card--care .plan-summary__section-title .plan-base-monthly{
  margin-top:5px !important;
}

/* v719: Logo Ad-on icon scaled down ~12% (52px -> 46px) per Dave's ask,
   scoped to just the Logo Ad-on card so it doesn't also shrink the
   gears icon in Monthly Website Care (both share
   .logo-addon-heading__icon). Also cut the card's top padding by 10px
   so the header+icon sit closer to the top of the panel. */
.plan-modal .plan-card--logo .logo-addon-heading__icon{
  width:44px !important; /* v722: another 5% down (46px -> 44px, ~95% of that) per Dave's ask */
  height:44px !important;
  margin-left:-2px !important;
  margin-top:3px !important;
}
.plan-modal .plan-card--logo{
  padding-top:2px !important; /* was 12px */
}


/* ===== PALETTE: Steel and Denim (v811) — full corrected pass ===== */
:root{
  --pv-accent:#7E3187;
  --pv-accent2:#66266E;
  --pv-panel:#f6f7f8;
  --pv-card:#e9ebec; /* v1005: darkened ~4% (243,245,246 -> 233,235,236) per Dave's ask - on some monitors the card panels were reading as nearly invisible against the page background. */
  --pv-card2:#eceef0;
  --pv-card3:#d6dadd;
  --pv-ink:#1c242a;
  --pv-muted:#54626b;
  --pv-border:#c2c9ce;
}

:is(.plan-modal, .start-modal, .account-flow-modal, .detail-modal, .info-pop-modal, .inline-thank-you)
  :is(.price-panel,.price-card,.feature-card,.summary-card,.option-card,.investment-card,
      .comparison-card,.detail-panel,.detail-card,.account-flow-choice,.homepage-choice,
      .homepage-approval,.homepage-changes,.materials-upload,.inside-pages-content,
      .inside-page-builder,.inside-materials,.website-care-notes,.logo-brand-details,
      .website-access-info,.service-option,.care-option,.plan-pages){
  background-color:var(--pv-card) !important;
  background-image:none !important;
  border-color:var(--pv-border) !important;
  color:var(--pv-ink) !important;
}

:is(.plan-modal, .start-modal, .account-flow-modal, .detail-modal, .info-pop-modal, .inline-thank-you)
  :is(.price-card.is-selected,.price-card.is-active,.homepage-choice.is-active,
      .account-flow-choice:hover,.service-option.is-selected,.care-option.is-selected,
      .start-modal__summary > div){
  background-color:var(--pv-accent) !important;
  background-image:none !important;
  border-color:var(--pv-accent) !important;
  color:#ffffff !important;
}
:is(.plan-modal, .start-modal, .account-flow-modal, .detail-modal, .info-pop-modal, .inline-thank-you)
  :is(.service-option.is-selected, .care-option.is-selected) *{
  color:#ffffff !important;
}
.start-modal__summary > div,
.start-modal__summary > div *{
  color:#ffffff !important;
}

.plan-modal__panel,.start-modal__panel,.account-flow-modal__panel,
.detail-modal__panel,.info-pop-modal__panel,.inline-thank-you__panel,
.plan-modal .plan-modal__panel{
  background:var(--pv-panel) !important;
  border:none !important;
  box-shadow:none !important;
  color:var(--pv-ink) !important;
}

.plan-modal__backdrop,.start-modal__backdrop,.account-flow-modal__backdrop,
.detail-modal__backdrop{
  background:linear-gradient(135deg, #b2b2b2 0%, #d9d9d9 100%) !important;
  backdrop-filter:none !important;
  -webkit-backdrop-filter:none !important;
}
.info-pop-modal__backdrop{
  background:transparent !important;
  backdrop-filter:none !important;
  -webkit-backdrop-filter:none !important;
}

:is(.start-form, .account-flow-form, .account-login-form, .website-access-grid,
    .logo-brand-details, .materials-upload, .inside-pages-content)
  :is(input, textarea, select){
  background:#ffffff !important;
  border-color:var(--pv-border) !important;
  color:var(--pv-ink) !important;
}

.start-form input:focus,.start-form textarea:focus,.start-form select:focus,
.account-flow-form input:focus,.account-flow-form textarea:focus,.account-flow-form select:focus{
  border-color:var(--pv-accent) !important;
  box-shadow:0 0 0 3px rgba(126,49,135,.18) !important;
}

.plan-modal__close,.start-modal__close,.detail-modal__close{
  background:var(--pv-card2) !important;
  border-color:var(--pv-border) !important;
  color:var(--pv-ink) !important;
}
.plan-modal__close:hover,.start-modal__close:hover,.detail-modal__close:hover{
  background:var(--pv-accent) !important;
  border-color:var(--pv-accent) !important;
  color:#fff !important;
}

/* plan-card component boxes (Web Design/Coding, Monthly Website Care, Logo,
   Payment Options) — the actual boxes Dave keeps flagging as unfilled/blank */
.plan-card{ background:var(--pv-card) !important; border-color:var(--pv-border) !important; }
.plan-modal .plan-card{ background:var(--pv-card) !important; border:1px solid var(--pv-border) !important; }
.plan-modal .plan-card .care-option{ background:var(--pv-card2) !important; border-color:var(--pv-border) !important; }
.plan-modal .plan-card .care-cell > .care-option{ background:var(--pv-card2) !important; border-color:var(--pv-border) !important; }
.plan-modal .plan-card .care-cell > .care-option:not(.is-selected){ background:var(--pv-card2) !important; }
.plan-modal .plan-card .care-cell > .care-option.is-selected{ background:var(--pv-accent) !important; }
.plan-modal .plan-card .care-cell > .care-option.is-selected *{ color:#ffffff !important; }
.plan-modal .plan-total{ background:var(--pv-card2) !important; border:1px solid var(--pv-border) !important; }
.plan-card__title{ color:var(--pv-muted) !important; }

/* payment options list (12/6/3 monthly, pay in full) - was hardcoded flat
   dark gray unselected + a weak black-overlay selected state (backwards
   from what it should be: selected should be the prominent one) */
.plan-modal .plan-card .payment-choice__option{
  background:var(--pv-card2) !important;
  border:1px solid var(--pv-border) !important;
}
.plan-modal .plan-card .payment-choice__option:not(.is-selected):hover{
  background:var(--pv-card3) !important;
  border-color:var(--pv-border) !important;
}
.plan-modal .plan-card .payment-choice__option.is-selected{
  background:var(--pv-accent) !important;
  border-color:var(--pv-accent) !important;
}
.plan-modal .plan-card .payment-choice__option > strong,
.plan-modal .plan-card .payment-choice__option.is-selected > strong{
  color:var(--pv-ink) !important;
}
.plan-modal .plan-card .payment-choice__option.is-selected > strong{
  color:#ffffff !important;
}
.plan-modal .plan-card .payment-choice__option .estimate-part em,
.plan-modal .plan-card .payment-choice__option .estimate-part strong,
.plan-modal .plan-card .payment-choice__option .estimate-part--care em,
.plan-modal .plan-card .payment-choice__option .estimate-part--care strong{
  color:var(--pv-muted) !important;
}
/* v968: same fix as above, this palette block's own copy of the rule -
   dropped the :hover trigger so only .is-selected turns this white. */
.plan-modal .plan-card .payment-choice__option.is-selected .estimate-part em,
.plan-modal .plan-card .payment-choice__option.is-selected .estimate-part strong,
.plan-modal .plan-card .payment-choice__option.is-selected .estimate-part--care em,
.plan-modal .plan-card .payment-choice__option.is-selected .estimate-part--care strong{
  color:#ffffff !important;
}

/* white line-icons (laptop/phone/gear/logo SVGs) baked for the old dark
   theme are invisible on light panels now - recolor them to ink */
.plan-row__icon, .logo-addon-heading__icon{
  filter:brightness(0) saturate(100%) opacity(.35) !important; /* v1030: Dave still saw no visible difference at .43 and wanted them subtler + perfectly consistent across all four icons - dropped another ~19% (.43 -> .35, well past his 10% minimum ask). All four icons share this exact same rule/value already (confirmed live: logo-icon.svg, homepg-only-icon.svg, homepg-inside-icon.svg, gears-icon2.svg all compute to the identical filter string) - any residual look of inconsistency is because some of these SVGs are solid-fill silhouettes and others are thin 3.6px strokes, so equal opacity still reads as different visual weight (more black pixels vs fewer). Size/position untouched. */
}

/* text on solid-accent selected/active fills - these were hardcoded dark
   ink or gold-brown back when the accent was always bright gold; now that
   the accent can be a dark color (blue/navy/charcoal), that hardcoded dark
   text is unreadable. Force white with matching/higher specificity than
   the original rules so it actually wins. */
.plan-modal .plan-card .care-cell > .service-option.is-selected > strong,
.plan-modal .plan-card .care-cell > .care-option.is-selected > strong,
.plan-modal .plan-card .care-cell > .service-option.is-selected > b,
.plan-modal .plan-card .care-cell > .care-option.is-selected > b,
.plan-modal .plan-card .care-cell > .service-option:not(.is-selected):hover > strong,
.plan-modal .plan-card .care-cell > .care-option:not(.is-selected):hover > strong,
.plan-modal .plan-card .care-cell > .service-option:not(.is-selected):hover > b,
.plan-modal .plan-card .care-cell > .care-option:not(.is-selected):hover > b{
  color:#ffffff !important;
}
.plan-modal .plan-card .care-cell > .service-option.is-selected,
.plan-modal .plan-card .care-cell > .care-option.is-selected,
.plan-modal .plan-card .care-cell > .service-option:not(.is-selected):hover,
.plan-modal .plan-card .care-cell > .care-option:not(.is-selected):hover{
  background:var(--pv-accent) !important;
  border-color:var(--pv-accent) !important;
}
.modal-progress__step.is-active,
.plan-modal__header .modal-progress__step.is-active{
  background:var(--pv-accent) !important;
  border-color:var(--pv-accent) !important;
  color:#ffffff !important;
}
.plan-modal__header .modal-progress__step.is-active span{
  background:rgba(255,255,255,.30) !important;
  color:#ffffff !important;
}
.modal-progress__step.is-complete{
  color:var(--pv-accent) !important;
}

/* main CTA button ("Project Start" / "Start Project") - background was
   correctly swapped to the new accent via the global hex replace, but its
   text color was a separate hardcoded dark value from when the button was
   always bright gold. Same bug, different component. Hover state used a
   hardcoded brown/gold shade (#b8790f / #d4930f) that was never part of
   the accent swap at all since it's a manually-picked darker shade, not
   the literal --gold hex - that's the "brownie earthy tones on hover". */
.plan-submit,
.plan-modal__footer .plan-submit,
#openStartForm,
.start-form__submit{
  background:var(--pv-accent) !important;
  border-color:var(--pv-accent) !important;
  color:#ffffff !important;
}
.plan-modal .plan-submit:hover,
.plan-modal__footer .plan-submit:hover,
#openStartForm:hover,
.start-form__submit:hover{
  background:var(--pv-accent2) !important;
  border-color:var(--pv-accent2) !important;
  color:#ffffff !important;
}
.plan-modal__header .small-label{
  color:var(--pv-accent) !important;
}
.investment-section .price-card-badge{
  background:rgba(126,49,135,.12) !important;
  color:var(--pv-accent) !important;
}

/* the rust/teal "mode badge" colors (additional-pages vs hosting-care)
   predate this palette work and were never remapped - map both to this
   palette's two accent colors instead of leftover mismatched hues */


/* "I have changes to the homepage" panel, when selected/solid-accent:
   checkbox labels, section headings, and social-platform labels all need
   to flip to white - but the textarea and URL inputs stay as light boxes
   with dark text since they're data-entry fields, not surface labels */
.homepage-choice.is-active .change-checks label,
.homepage-choice.is-active .change-checks span,
.homepage-choice.is-active .typed-changes-field > span,
.homepage-choice.is-active .homepage-social-links__heading,
.homepage-choice.is-active .homepage-social-links__intro,
.homepage-choice.is-active .social-platform-chip,
.homepage-choice.is-active .social-platform-chip span,
.homepage-choice.is-active .social-url-field > span,
.homepage-choice.is-active .homepage-change-cost-note{
  color:#ffffff !important;
}
.homepage-choice.is-active .social-status-options label,
.homepage-choice.is-active .social-status-options label span{
  color:#ffffff !important;
}

.homepage-choice.is-active .typed-changes-field > em{
  color:rgba(255,255,255,.7) !important;
}
.homepage-choice.is-active .materials-upload label > span{
  color:#ffffff !important;
}
.homepage-choice.is-active .materials-upload label > span em{
  color:rgba(255,255,255,.68) !important;
}
/* v972: this rule (higher specificity than the general .change-checks
   input rule below it in the file, since it's scoped to .is-active) was
   the actual source of the "pure white, distracting" checkbox Dave
   reported - a 14% white background still reads as a stark white box
   against the dark blue selected panel. Replaced with the same screen-
   blended accent blue used everywhere else now, so this state matches. */
.homepage-choice.is-active .change-checks input[type="checkbox"]{
  border-color:rgba(255,255,255,.55) !important;
  background:rgba(126,49,135,.35) !important;
  mix-blend-mode:screen !important;
}
.homepage-choice.is-active .change-checks input[type="checkbox"]:checked{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  mix-blend-mode:normal !important;
}
.homepage-choice.is-active .social-url-field input{
  background:#ffffff !important;
  border-color:rgba(255,255,255,.5) !important;
  color:#1c242a !important;
}

/* v830: match the "Included website foundation benefits" strip (SSL,
   SEO, mobile-friendly, launch) to the same full-bleed accordion look
   already used for the "What changes beyond the look" 6-card strip
   below it - square corners, no gaps, edge-to-edge full viewport width,
   photos touching, hover-to-enlarge / mouse-out shrink. Dave felt the
   previous rounded/gapped thumbnail-card grid didn't match the rest of
   the page. This supersedes the desktop grid layout above; the existing
   mobile-only full-bleed rule stays since it already does the same
   treatment (just stacked) below 760px. */
.included-benefits{
  max-width:none !important;
  width:100vw !important;
  margin-left:50% !important;
  margin-right:50% !important;
  margin-top:20px !important;
  margin-bottom:0 !important;
  transform:translateX(-50%) !important;
  display:flex !important;
  flex-wrap:nowrap !important;
  gap:0 !important;
  align-items:stretch !important;
  overflow:hidden !important;
}

.included-benefit{
  flex:1 1 0 !important;
  min-width:0 !important;
  min-height:clamp(215px, 20vw, 300px) !important;
  grid-column:auto !important;
  max-width:none !important;
  justify-self:stretch !important;
  padding:0 !important;
  margin:0 !important;
  border:0 !important;
  border-radius:0 !important;
  box-shadow:none !important;
  transition:flex 1s cubic-bezier(.25,.46,.45,.94), box-shadow .35s ease !important;
}

.included-benefits:hover .included-benefit{
  flex:.88 1 0 !important;
}

.included-benefits .included-benefit:hover,
.included-benefits .included-benefit:focus-visible{
  flex:1.42 1 0 !important;
  z-index:3 !important;
  outline:none !important;
  transform:none !important;
  box-shadow:none !important;
}

@media(max-width:760px){
  .included-benefits{
    margin-top:60px !important;
  }
  .included-benefits:hover .included-benefit,
  .included-benefit:hover,
  .included-benefit:focus-visible{
    flex:1 1 0 !important;
  }
}

/* Font Selection section - "I have changes to the homepage" panel, between
   Social Media Links and Project Materials. Mirrors the sibling sections'
   eyebrow + top-divider pattern. */
.homepage-font-selection{
  margin-top:3px;
  padding:8px 18px 9px;
  border:1px solid rgba(28,36,42,.16);
  border-radius:16px;
  background:rgba(0,0,0,.03);
}
.homepage-choice.is-active .homepage-font-selection{
  border-color:rgba(255,255,255,.16) !important;
  background:rgba(0,0,0,.06) !important;
}
.homepage-font-selection__heading{
  display:block;
}
.homepage-choice.is-active .homepage-font-selection__heading{
  color:#ffffff !important;
}
.homepage-font-selection__intro{
  margin:6px 0 4px;
  color:rgba(28,36,42,.68);
  font-size:13px;
  line-height:1.5;
}
.homepage-choice.is-active .homepage-font-selection__intro{
  color:rgba(255,255,255,.78) !important;
}
.font-choice-grid{
  display:grid;
  /* Fix (this round), per Dave: added Jost + Montserrat as 6th/7th font
     options (see .font-choice-option--jost/--montserrat below) - a flat
     5-column row no longer fits all 7 without squeezing each cell. Switched
     to 4 columns so 7 items wrap cleanly into two rows (4 + 3) instead of
     shrinking every column to fit 7 across; the existing 760px mobile
     override below (single column) is untouched. */
  grid-template-columns:repeat(4,1fr);
  gap:22px;
}
@media (max-width:760px){
  .font-choice-grid{
    grid-template-columns:1fr;
    gap:10px;
  }
  /* the 20ch caption cap was tuned for the narrow 4-column desktop
     layout - on the single-column mobile stack there's a full-width
     row available, so the cap was forcing an unnecessary 2-line wrap
     partway across the screen instead of using the space that's there. */
  .font-choice-option .font-choice-caption{
    max-width:none !important;
  }
}
.font-choice-option{
  position:relative;
  display:grid;
  grid-template-columns:14px 1fr;
  column-gap:9px;
  row-gap:2px !important;
  align-items:start;
  align-content:start !important;
  padding:6px 0;
  border:0;
  background:none;
  cursor:pointer;
}
.font-choice-radio{
  position:absolute;
  opacity:0;
  pointer-events:none;
}
.font-choice-option .font-choice-check{
  grid-column:1;
  grid-row:1;
  position:relative;
  top:11px;
  width:13px !important;
  height:13px !important;
  border-radius:4px;
  border:1px solid rgba(28,36,42,.32);
  background:transparent !important;
  display:flex;
  align-items:center;
  justify-content:center;
  color:transparent !important;
}
.font-choice-radio:checked ~ .font-choice-check{
  background:#7E3187 !important;
  border-color:#7E3187;
  color:#ffffff !important;
}
.font-choice-option .font-choice-name{
  grid-column:2;
  grid-row:1;
  padding-right:0;
  font-size:31px !important;
  line-height:1.1;
  letter-spacing:normal !important;
  text-transform:none !important;
  color:#1c242a;
}
.font-choice-option .font-choice-caption{
  grid-column:1 / -1;
  grid-row:2;
  max-width:20ch;
  margin-left:10px;
  font-size:12px !important;
  line-height:1.4;
  letter-spacing:normal !important;
  text-transform:none !important;
  color:rgba(28,36,42,.6) !important;
}
.homepage-choice.is-active .font-choice-option .font-choice-check{
  background:transparent !important;
  border-color:rgba(255,255,255,.5);
}
.homepage-choice.is-active .font-choice-radio:checked ~ .font-choice-check{
  background:#ffffff !important;
  border-color:#ffffff;
  color:#7E3187 !important;
}
.homepage-choice.is-active .font-choice-option .font-choice-name{
  color:rgba(255,255,255,.72);
}
.homepage-choice.is-active .font-choice-radio:checked ~ .font-choice-name{
  color:#ffffff;
}
.homepage-choice.is-active .font-choice-option .font-choice-caption{
  color:rgba(255,255,255,.68) !important;
}
@media (max-width:760px){
  .font-choice-option .font-choice-name{
    font-size:25px !important;
  }
}

/* v1159: per Dave - "View Example" pill button under each font's caption,
   opens a modal showing the client's actual proposed website (desktop +
   mobile, above the fold) rendered in that font. Sits as a 3rd implicit
   grid row below the caption, reusing the same check/name/caption grid
   already on .font-choice-option so it needs no extra wrapper markup. */
.font-choice-option .font-choice-example{
  grid-column:1 / -1;
  grid-row:3;
  justify-self:start;
  margin:5px 0 0 10px;
  padding:3px 9px;
  border-radius:999px;
  border:1px solid rgba(28,36,42,.22);
  background:transparent;
  color:rgba(28,36,42,.75);
  font-size:10px;
  font-weight:400;
  letter-spacing:.02em;
  cursor:pointer;
  transition:background-color .16s ease, border-color .16s ease, color .16s ease;
}
.font-choice-option .font-choice-example:hover,
.font-choice-option .font-choice-example:focus-visible{
  background:rgba(28,36,42,.06);
  border-color:rgba(28,36,42,.32);
}
.homepage-choice.is-active .font-choice-option .font-choice-example{
  border-color:rgba(255,255,255,.32);
  color:rgba(255,255,255,.85);
}
.homepage-choice.is-active .font-choice-option .font-choice-example:hover,
.homepage-choice.is-active .font-choice-option .font-choice-example:focus-visible{
  background:rgba(255,255,255,.1);
  border-color:rgba(255,255,255,.5);
}

/* the font-example modal is opened from inside .start-modal (z-index:240),
   and reuses .plan-modal's styling (z-index:220) - without this override
   it would render invisibly behind the still-open start-modal. */
.font-example-modal{
  z-index:260;
  /* v1171: per Dave - the popup still showed a light gray strip on the
     left/right because the base .plan-modal wrapper has
     padding:clamp(18px,4vw,54px) around whatever panel sits inside it -
     removing the panel's own width/margin doesn't touch that outer
     padding. Zeroed it here so the panel (already 100vw) truly bleeds
     to both edges with nothing showing behind it. */
  padding:0 !important;
}

/* .plan-modal-preview is a small decorative desktop-only corner badge in
   its original context (Start Project package picker) - deliberately
   display:none below 960px there (see the "v182/desktop-only" rule
   earlier in this file). For the font-example modal it needs to be the
   main, in-flow content instead, sized to actually fill the popup like a
   real preview, not a tiny corner badge, and visible on mobile too -
   seeing the mobile preview is the whole point of this modal. Recomputed
   the stage scale factor for the new target size rather than reusing the
   tiny corner-badge scale (.109375 at 224x126px). Also widened the modal
   panel itself so there's room. */
.font-example-modal .plan-modal__panel{
  width:100vw !important;
  max-width:100vw !important;
  padding:0 !important;
  overflow:hidden !important;
  border-radius:0 !important;
  margin:0 !important;
  /* v1173: per Dave - below where the laptop mask image ends (the
     preview stage doesn't always fill the full panel height on every
     screen size), the panel's own background was showing through as
     plain white. Matched it to the dark #2b3034 tone instead so it
     blends with the image rather than reading as an empty gap. */
  background:#2b3034 !important;
}
.font-example-modal .plan-modal__scroll{
  padding:0 !important;
}
.font-example-modal .plan-modal__close{
  z-index:10 !important;
  /* v1174: per Dave - now that the panel is a true 100vw bleed with no
     margin from the viewport edge, the base .plan-modal__close
     top:16px/right:7px (tuned for the old padded panel) sits almost off
     the browser edge. Pulled it further in and down so it clears the
     edge with real breathing room on every screen size. */
  top:28px !important;
  right:28px !important;
}
/* v1168: per Dave - once the laptop/phone image goes edge-to-edge with
   no white modal padding around it, the "Font Preview / [Font Name] /
   description" text needs to sit ON TOP of that image (overlapping the
   naturally dark upper area most site hero photos have, same as a
   typical hero-image overlay) instead of stacked above it on the old
   light modal background - so it has to be white now, not the
   dark/blue text that worked on the previous light background. Added a
   top-down dark scrim behind the text so it stays legible even on
   client photos that aren't naturally dark up top. */
.font-example-modal .plan-modal__header{
  max-width:none !important;
  margin:0 !important;
  position:relative !important;
}
.font-example-modal__overlay{
  position:absolute;
  top:0;
  left:0;
  right:0;
  z-index:5;
  /* Per Dave: the FONT PREVIEW eyebrow/heading/description text was pinned
     too high and too far left (flush with the modal's own top-left
     corner) - he wants it hovering above the laptop mockup instead. Only
     the padding moved (top +20px, left +50px); the gradient backdrop
     behind it still spans the full box unchanged.
     ROUND 2 (2026-07-30), per Dave: still too far up/left on desktop -
     nudged further (top +20px more -> 62px, left +30px more -> 106px).
     Desktop-only change; the separate mobile override below (max-
     width:760px) has its own independent padding and is untouched. */
  padding:62px 26px 34px 106px;
  background:linear-gradient(180deg, rgba(0,0,0,.6) 0%, rgba(0,0,0,.32) 60%, rgba(0,0,0,0) 100%);
  pointer-events:none;
}
.font-example-modal__overlay .small-label{
  color:#fff !important;
  opacity:.85;
}
.font-example-modal__overlay h2{
  color:#fff !important;
  margin:6px 0 4px !important;
  /* v1169: per Dave - this heading should render IN the font being
     previewed (Garamond/Roboto Slab/etc), not the site's own Jakarta.
     A plain inline font-family from JS loses the cascade battle to the
     site-wide ".plan-modal, .plan-modal *{font-family:...!important}"
     rule, since !important vs !important is decided by specificity and
     that rule already has the edge. Routed through a CSS custom
     property instead (JS sets --font-preview-title-font on click) - the
     !important lives here, on a selector specific enough to win, and
     the variable value flows in from JS independent of the inline-style
     vs stylesheet fight. */
  font-family:var(--font-preview-title-font, "Plus Jakarta Sans", Arial, sans-serif) !important;
}
.font-example-modal__overlay p{
  color:#fff !important;
  opacity:.92;
  margin:0 !important;
  max-width:520px;
}
/* v1172: per Dave - "See how your proposed website looks in [Font]"
   should name the font AND render that word in the actual font, same
   custom-property technique as the H2 title above. */
.font-example-modal__overlay p #fontExampleModalLeadName{
  font-family:var(--font-preview-title-font, inherit) !important;
}
.font-example-modal .plan-modal-preview{
  display:block !important;
  position:relative !important;
  inset:auto !important;
  top:auto !important;
  right:auto !important;
  width:100% !important;
  height:var(--font-preview-height, 300px) !important;
  max-width:100% !important;
  margin:0 !important;
  overflow:hidden !important;
}
/* v1163: per Dave - swap the small white-bezel corner-badge frame
   (device-frame.webp, built for the tiny 224x126 package-picker badge)
   for the same edge-to-edge laptop/phone mask already used on the main
   comparison slider (device-frame-scene.webp) - no new asset added,
   this file already ships with every client. That mask's native canvas
   is 2000x1402 (not the badge's 2048x1156), and its screen cutouts sit
   at different coordinates, so the stage/screens/iframe sizing below is
   scoped to .font-example-modal and matches the comparison slider's own
   "overscan" numbers exactly (see .laptop-screen/.phone-screen v3
   refinements above) so there's no white fringe at the screen edges. */
/* v1166: per Dave - "not full screen, not centered, cut off in half".
   Root cause: a hardcoded scale(.82) assumed a ~1640px-wide modal, but
   real laptop screens are often narrower than that, so the 2000px-wide
   stage overflowed and got clipped by overflow:hidden instead of
   shrinking to fit - looked "zoomed in and cropped". Fixed the same way
   the main comparison slider on this page already solves this exact
   problem (see resizeStage()/--stage-scale in main-v114.js): measure the
   actual available width in JS and compute the scale from that, instead
   of guessing a fixed number. --font-preview-scale is set dynamically
   per-open and on resize; the wrapper's height is set inline by JS too,
   since a scaled absolutely-positioned child doesn't otherwise push any
   layout height into its parent. */
.font-example-modal .plan-modal-preview__stage{
  width:2000px !important;
  height:1402px !important;
  /* v1171: translateX shifts the (now oversized) stage left so the
     50px-per-side crop bleeds off evenly on both edges instead of only
     the right edge - see FONT_STAGE_CROP_PX in main-v114.js. */
  transform:translateX(var(--font-preview-offset-x, 0px)) scale(var(--font-preview-scale, .3)) !important;
  transform-origin:top left !important;
}
.font-example-modal .plan-modal-preview__screen--laptop{
  left:357px !important;
  top:292px !important;
  width:1092px !important;
  height:688px !important;
}
.font-example-modal .plan-modal-preview__screen--phone{
  left:1536px !important;
  top:579px !important;
  width:218px !important;
  height:463px !important;
  border-radius:26px !important;
  /* Fix (this round), per Dave: "make it look more real... right now it's
     square corners and looks placed on the phone, not part of the phone."
     overflow:hidden alone was already here implicitly via the shared
     .plan-modal-preview__screen base rule, but border-radius+overflow on
     a container doesn't reliably clip an absolutely-positioned iframe
     child in every browser (a known cross-browser gap, worse on iOS
     Safari) - the iframe's own painted rectangle can bleed past the
     parent's rounded corners instead of getting cropped to them. Explicit
     overflow:hidden restated directly here (not just inherited) plus the
     matching border-radius applied directly to the iframe itself, below,
     is the real fix - clipping now happens at both levels instead of
     relying on the parent alone. */
  overflow:hidden !important;
}
/* FIX (2026-07-29, later), per Dave: "no white vertical scroll line on
   the laptop or iPhone in any font preview." Root cause: this iframe was
   sized to the container's exact real pixel dimensions (1440x920) with no
   overscan, so the framed site's own native scrollbar - always drawn
   flush against its far-right edge - landed inside the visible clipped
   area instead of past it. The comparison-card's before/after laptop
   iframe already solved this exact problem (see .laptop-screen.after-
   screen iframe) by widening the iframe's real (pre-scale) width past the
   container so the scrollbar gets pushed beyond .screen's own
   overflow:hidden clip and is cropped off - matched that same overscan
   amount (+24px) here. scrollbar-width:none/::-webkit-scrollbar below is
   a second, browser-level belt-and-suspenders fix on top of that. */
.font-example-modal .plan-modal-preview__screen--laptop iframe{
  width:1464px !important;
  height:920px !important;
  transform:scale(.7583) !important;
  scrollbar-width:none !important;
}
.font-example-modal .plan-modal-preview__screen--laptop iframe::-webkit-scrollbar{
  display:none !important;
}
.font-example-modal .plan-modal-preview__screen--phone iframe{
  width:422px !important;
  height:850px !important;
  transform:scale(.559) !important;
  scrollbar-width:none !important;
  /* Fix (this round), per Dave: see the border-radius/overflow comment on
     .plan-modal-preview__screen--phone above - matching radius applied
     directly to the iframe too (26px / .559 scale-compensated so the
     FINAL rendered corner, after this transform:scale shrinks everything
     including border-radius, still lands at a true 26px, matching the
     parent's own un-scaled 26px exactly). */
  border-radius: calc(26px / .559) !important;
  overflow: hidden !important;
}
.font-example-modal .plan-modal-preview__screen--phone iframe::-webkit-scrollbar{
  display:none !important;
}
.font-example-modal .plan-modal-preview__frame{
  width:2000px !important;
  height:1402px !important;
}
/* v1177: per Dave - the laptop+phone desk scene doesn't work on mobile
   (tiny laptop jammed under the text, huge dead space below it). Below
   760px, swap it out entirely for the same hand-holding-iPhone mask
   already used for the real before/after comparison up top
   (phone-scene.webp / .mobile-phone-frame), just showing the single
   selected font through the screen instead of a before/after split.
   Geometry (aspect-ratio, scene offset, screen inset percentages)
   copied exactly from that existing component so the mask lines up -
   see .mobile-phone-frame/.mobile-phone-frame__scene/.mobile-phone-screen
   around line 4556 for the source measurements. */
.font-example-modal__mobile-phone{
  display:none;
}
@media(max-width:760px){
  .font-example-modal .plan-modal-preview{
    display:none !important;
  }
  /* v1179: per Dave (round 2) - a flat margin-top on the phone frame
     wasn't enough, because the "FONT PREVIEW / [Font] / See how..."
     text is .font-example-modal__overlay, which is position:absolute
     (needed on desktop so it can float on top of the laptop photo).
     That absolute text and the phone frame below it were both starting
     from the same top edge and just happened to overlap wherever the
     (variable-height, can wrap to 2-3 lines) text ran long. Simplest
     fix that can't drift out of sync again: take the overlay OUT of
     absolute positioning on mobile so it flows normally and actually
     pushes the phone down by however tall it really is, instead of a
     guessed pixel number. */
  .font-example-modal__overlay{
    position:static;
    background:none;
    padding:22px 20px 4px;
  }
  .font-example-modal__mobile-phone{
    display:block;
    position:relative;
    width:100%;
    overflow:visible;
    aspect-ratio:902 / 1401;
    margin:16px auto 0;
  }
  .font-example-modal__mobile-phone-scene{
    position:absolute;
    left:0;
    width:100%;
    height:178.44%;
    top:-23.91%;
    z-index:8;
    pointer-events:none;
    -webkit-user-select:none;
    user-select:none;
  }
  .font-example-modal__mobile-phone-screen{
    position:absolute;
    left:14.86%;
    right:13.52%;
    top:2.93%;
    bottom:2.50%;
    overflow:hidden;
    border-radius:7% / 4%;
    background:#111;
  }
  .font-example-modal__mobile-phone-screen iframe{
    position:absolute;
    inset:0;
    width:100%;
    height:100%;
    border:0;
    display:block;
    background:#111;
    /* Fix (this round), per Dave: "have this html inlay have rounded
       corners to match the iPhone... right now it's square corners and
       looks placed on the phone, not part of the phone." Same root cause
       as the desktop laptop+phone modal's fix elsewhere in this file:
       the parent .font-example-modal__mobile-phone-screen already sets
       border-radius:7%/4% + overflow:hidden, but that alone doesn't
       reliably clip an absolutely-positioned iframe child in every
       browser (worse on iOS Safari, which is exactly where this real
       single-phone view renders, per its own max-width:760px scope just
       above) - the iframe's painted rectangle can bleed past the parent's
       rounded corners instead of getting cropped to them. Matching radius
       applied directly to the iframe itself is the real fix - clipping
       now happens at both levels instead of relying on the parent alone. */
    border-radius:7% / 4%;
    overflow:hidden;
  }
  /* v1179: per Dave - not enough room for the Back pill on mobile; the
     X close button is the only exit here. !important because the
     un-scoped base .font-example-modal__back-btn{display:inline-flex}
     rule sits later in this file (same specificity), so without it the
     base rule would win the cascade and the button would stay visible
     despite this media query matching. */
  .font-example-modal__back-btn{
    display:none !important;
  }
}
/* v1176: per Dave - the X close button sits top-right, 28px in - too
   far to reach comfortably, especially once you've scrolled down to
   look at the phone mockup. Added a second, closer way out: a "Back"
   pill sitting on the dark desk area bottom-left of the laptop, wired
   to the same data-close-font-example handler as the X. Sits directly
   on .plan-modal-preview (a sibling of the scaled stage), not inside
   the stage itself, so it isn't affected by --font-preview-scale and
   stays a consistent, readable size on every screen. */
.font-example-modal__back-btn{
  /* v1177: moved from inside .plan-modal-preview to a sibling of it so
     it works for the new mobile phone-hand layout too (see
     .font-example-modal__mobile-phone below) - position:fixed instead
     of absolute means it now also stays put on screen through any
     internal scrolling, instead of only being reachable when that
     particular section is in view. */
  position:fixed;
  /* v1178: per Dave - was hugging the left edge of the page; moved in
     70px so it sits more under the laptop instead of off in the
     corner. */
  left:94px;
  bottom:24px;
  z-index:20;
  display:inline-flex;
  align-items:center;
  gap:8px;
  padding:11px 22px 11px 18px;
  border-radius:999px;
  border:1.5px solid rgba(255,255,255,.85);
  background:rgba(20,22,24,.28);
  backdrop-filter:blur(6px);
  color:#fff;
  font-family:"Plus Jakarta Sans", Arial, sans-serif;
  font-size:14px;
  font-weight:600;
  letter-spacing:.01em;
  line-height:1;
  cursor:pointer;
  transition:background .15s ease, color .15s ease;
}
.font-example-modal__back-btn:hover{
  background:#fff;
  color:#1c242a;
}
.font-example-modal__back-arrow{
  font-size:16px;
  line-height:1;
}
/* v1162: per Dave - make the desktop preview as large as the modal can
   fit, and let it actually scroll instead of sitting frozen above the
   fold. The tiny-badge context this component was built for disables
   pointer-events sitewide (so it never blocks clicks on the package
   picker behind it) - re-enable it just here so mouse wheel/trackpad
   scroll reaches the iframe, while the decorative laptop/phone bezel
   image on top stays pointer-events:none (its own base rule) so it
   doesn't intercept the scroll itself. */
.font-example-modal .plan-modal-preview,
.font-example-modal .plan-modal-preview__screen iframe{
  pointer-events:auto !important;
}

/* Project Details modal header eyebrow ("Project Start") sits on the light
   panel background - base .small-label defaults to white for the site's
   dark sections, so it was unreadable here. Same fix pattern as the
   plan-modal-chooser and investment-section eyebrows. */
.start-modal__header > .small-label{
  color:var(--gold) !important;
}

/* Font Selection cards - use !important since the sitewide font-family
   rules elsewhere are !important and would otherwise beat a plain
   font-family declaration here (inline style attempt was overridden the
   same way). */
.font-choice-option--jakarta .font-choice-name{
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
}
.font-choice-option--helvetica .font-choice-name{
  font-family:"Helvetica Neue", Helvetica, Arial, sans-serif !important;
}
.font-choice-option--garamond .font-choice-name{
  font-family:"EB Garamond", Georgia, serif !important;
}
.font-choice-option--robotoslab .font-choice-name{
  font-family:"Roboto Slab", Georgia, serif !important;
}
.font-choice-option--barlowcondensed .font-choice-name{
  font-family:"Barlow Condensed", Arial, sans-serif !important;
}
/* Added (this round), per Dave: 6th font option - "Jost", a free Google
   font (loaded via the combined Google Fonts <link> in index.html's
   <head>, same mechanism as Garamond/Roboto Slab/Barlow Condensed above). */
.font-choice-option--jost .font-choice-name{
  font-family:"Jost", sans-serif !important;
}
/* Added (this round), per Dave: 7th font option - "Montserrat", a free
   Google font. Per Dave's exact spec for this one: font-weight:600 +
   letter-spacing:.08em (the other 6 options here all just inherit the
   plain 400-ish weight/normal tracking of .font-choice-name - Montserrat
   is the only one that gets its own explicit weight/tracking treatment,
   since Dave called those two properties out specifically). */
.font-choice-option--montserrat .font-choice-name{
  font-family:"Montserrat", sans-serif !important;
  font-weight:600 !important;
  letter-spacing:.08em !important;
}
/* Added (this round), per Dave: 8th font option - "Inter" (Light weight,
   300), a free Google font (loaded via the combined Google Fonts <link>
   in index.html's <head>, same mechanism as the others above). Per Dave's
   spec ("Inter Light"), this one gets its own explicit weight:300 override
   - the plain .font-choice-name default would otherwise render it at the
   sitewide base weight, not the lighter "Light" weight being offered. */
.font-choice-option--inter .font-choice-name{
  font-family:"Inter", sans-serif !important;
  font-weight:300 !important;
}

/* Website Care pill labels (Hosting + Web Care / Website Care / Host
   existing website / Design handoff) were rendering bold (700) - too heavy
   next to the "Monthly Website Care" category header, which sits at 500.
   Match the two so they read as one consistent weight. */
.plan-modal .service-option strong,
.plan-modal .care-option strong,
.plan-modal .plan-card .service-option > strong,
.plan-modal .plan-card .care-option > strong,
.plan-modal .plan-card .care-cell > .service-option > strong,
.plan-modal .plan-card .care-cell > .care-option > strong{
  font-weight:500 !important;
}

/* Inline icon-only info trigger - used mid-sentence (e.g. Project
   Materials upload copy) instead of the block-level "(i) Info" pill used
   for section headers. Just the glyph, sized to sit on the text baseline. */
.info-pop-trigger--icon-only{
  display:inline-flex;
  vertical-align:middle;
  position:relative;
  top:-1px;
  width:18px;
  height:18px;
  min-height:0;
  margin:0 0 0 2px;
  padding:0;
  border-radius:999px;
  font-size:11px;
  letter-spacing:0;
  text-transform:none;
}

/* "Continue to Secure Checkout" button + reassurance note, side by side */
.start-form__submit-row{
  display:flex;
  align-items:center;
  gap:14px;
  flex-wrap:wrap;
}
.start-form__submit-note{
  font:500 12px/1.3 "Plus Jakarta Sans", Arial, sans-serif;
  color:rgba(28,36,42,.62);
}
.homepage-choice.is-active .start-form__submit-note,
.start-modal__panel .start-form__submit-note{
  color:rgba(28,36,42,.62);
}

.blocked-files-trigger{
  margin-top:12px;
}

.logo-brand-direction__icon{
  width:31px !important; /* v907: 20% larger (120% scale) per Dave's ask -
    was 26px. Base/unscoped rule, so this is the desktop size; mobile
    already matches at 31px from the earlier v889 pass. */
  height:31px !important;
  margin-left:9px;
  vertical-align:middle;
  position:relative;
  top:-3px;
}

/* Visual hierarchy pass: inside the "I have changes to the homepage"
   panel, the nested eyebrows (Homepage Change Requests / Social Media
   Links / Font Selection / Project Assets) and the intro sentence right
   below each were reading at nearly the same visual weight - both small,
   both pale - so the label didn't clearly separate from the body copy.
   Bump the eyebrow to a bolder, wider-tracked label with a small accent
   tick, and let the intro sentence recede (smaller, more muted). */
.homepage-choice.is-active .homepage-changes > .section-head-inline > .homepage-approval__label,
.homepage-choice.is-active .homepage-social-links__heading,
.homepage-choice.is-active .homepage-font-selection__heading,
.homepage-choice.is-active .materials-upload__intro > .section-head-inline > .homepage-approval__label{
  position:relative;
  padding-left:13px;
  font-weight:700 !important;
  letter-spacing:.16em !important;
  color:#ffffff !important;
}
.homepage-choice.is-active .homepage-changes > .section-head-inline > .homepage-approval__label::before,
.homepage-choice.is-active .homepage-social-links__heading::before,
.homepage-choice.is-active .homepage-font-selection__heading::before,
.homepage-choice.is-active .materials-upload__intro > .section-head-inline > .homepage-approval__label::before{
  content:'';
  position:absolute;
  left:0;
  top:50%;
  transform:translateY(-50%);
  width:5px;
  height:5px;
  border-radius:999px;
  background:#ffffff;
}
.homepage-choice.is-active .homepage-social-links__intro,
.homepage-choice.is-active .homepage-font-selection__intro,
.homepage-choice.is-active .materials-upload__intro p{
  color:rgba(255,255,255,.6) !important;
  font-size:12.5px !important;
}

/* Project Details ("start-modal") close X was using a different position,
   size, and glyph structure than the Package modal's close X, which Dave
   already approved as-is - mirror it pixel-for-pixel.
   v865 fix: the earlier version of this rule made the HTML <span> glyph
   visible (font-size:24px) on top of the shared ::before pseudo-element
   that already paints a "x" for every modal close button (see the
   .start-modal__close::before rule elsewhere) - that's what caused the
   double X. The plan-modal close button relies ONLY on the ::before
   glyph and keeps its span invisible (font-size:0); do the same here so
   there's exactly one X, and give the ::before the same -4px nudge the
   plan-modal's already has for identical vertical position. */
.start-modal__close{
  top:16px !important;
  right:7px !important;
  width:32px !important;
  height:32px !important;
  font-size:0 !important;
}
.start-modal__close .plan-modal__close-glyph{
  display:none !important;
}
.start-modal__close::before{
  transform:translateY(-4px) !important;
}

/* Logo Ad-on heading row (checkbox + "Logo Ad-on" + icon + optional tag) -
   shifted 4px left per Dave's ask. */
.plan-modal .plan-card--logo .logo-addon-heading{
  margin-left:-4px !important;
}

/* v864 final: ensure the screen-blend arrow color wins over the later
   solid #7E3187 .handle span rule earlier in the cascade (same specificity,
   later source position wins) by placing this at the very end of the file. */
.handle span{
  color:rgba(126,49,135,.35) !important;
  mix-blend-mode:screen !important;
}

/* v869: mobile "window inside window" cleanup. On phones the modal stack
   was: gray gradient backdrop -> off-white rounded .panel box -> individual
   blue/white cards inside that - reading as nested windows. Dave wants the
   panel layer gone on mobile so the cards sit directly on the same gray
   gradient background used on desktop, with only ONE frame (the outer
   modal edge), not two. Desktop is untouched - this is mobile-only.
   Also tightened the outer modal gutter so content isn't centered with
   heavy equal margins - it now sits closer to the true screen edges,
   giving text more room to wrap. */
@media (max-width:760px){
  .start-modal,
  .plan-modal{
    padding:8px !important;
  }
  .start-modal__panel,
  .plan-modal__panel{
    background:transparent !important;
    border-radius:0 !important;
  }
}

/* v869: ".plan-card--care .plan-summary__section-title" uses a desktop
   4-column grid ("label . switch price") with the "Don't need a
   website?" switch link forced to min-width:200px so its two-line text
   never wraps awkwardly - none of that was scoped to a max-width query,
   so on a 390px phone the row had nowhere near enough space for all four
   columns and the switch button ran straight off the right edge of the
   screen. Stack it into a simple single column on mobile instead, with
   the switch link full-width directly under the "Monthly Website Care"
   header/gears icon (not off to the side), matching where Dave wants it
   ("tuck underneath the header"). */
@media (max-width:760px){
  .plan-modal .plan-card--care .plan-summary__section-title{
    grid-template-columns:1fr !important;
    grid-template-areas:
      "label"
      "switch"
      "price" !important;
    row-gap:6px !important;
  }
  .plan-modal .plan-card--care .plan-summary__section-title #switchToCareLink,
  .plan-modal .plan-card--care .plan-summary__section-title #switchToWebsiteLink{
    min-width:0 !important;
    width:100% !important;
    justify-self:start !important;
    margin:0 !important;
  }
  .plan-modal .plan-card--care .plan-summary__section-title .plan-base-monthly{
    justify-self:start !important;
  }
}

/* Move "(choose one)" to sit directly under "Monthly Website Care",
   above the gears icon, instead of after/below it - per Dave's ask.
   DOM order is label -> icon -> "(choose one)"; flex + order re-stacks
   it visually as label -> "(choose one)" -> icon without touching HTML. */
.logo-addon-heading__label:has(#careSectionLabel){
  display:flex !important;
  flex-direction:column !important;
  align-items:flex-start !important;
}
.logo-addon-heading__label:has(#careSectionLabel) #careSectionLabel{
  order:1 !important;
}
.logo-addon-heading__label:has(#careSectionLabel) .care-choose-one{
  display:block !important;
  order:2 !important;
  margin:2px 0 0 !important;
}
.logo-addon-heading__label:has(#careSectionLabel) img.logo-addon-heading__icon{
  order:3 !important;
}

/* v869: "Website Care" pill had a hardcoded <br> forcing it onto two
   lines - Dave wants that kept on desktop exactly as-is, but on mobile
   he wants it as one line. Rather than touch the shared markup (which
   would affect desktop too), the <br> got a dedicated class in the HTML
   so it can be suppressed on mobile only; desktop is completely
   untouched since this rule only exists inside the mobile query. */
@media (max-width:760px){
  br.mobile-nowrap-break{
    display:none !important;
  }
}

/* v869 (final): guarantee this wins over the v705
   ".plan-modal .plan-card--website #planBasePrice{transform:translateY(-23px)}"
   rule, which has identical selector+specificity and therefore only loses
   based on source order - appending here (after everything else in the
   file) is what makes the mobile reset actually win. Without this, the
   "$59/mo for 12 months" price kept sliding up 23px into the description
   paragraph above it on mobile even though the desktop-only reasoning for
   that offset (aligning it with the icon in a 4-column row) no longer
   applies once the row is stacked into a single column. */
@media (max-width:860px){
  .plan-modal .plan-card--website #planBasePrice,
  .plan-modal .plan-card--website .plan-pages--compact .plan-pages-amount{
    transform:none !important;
    margin-top:8px !important;
  }
}

/* v870: "Logo Ad-on (optional)" mobile-only header fix. Wrapped the bare
   "Logo Ad-on" text node in a real span (.logo-addon-heading__text) so it
   can be grid-placed precisely - a bare text node can't be individually
   targeted or positioned. Mobile-only per Dave's explicit "do not touch
   desktop" instruction; nothing here is reachable above 760px. */
@media (max-width:760px){
  .plan-card--logo .logo-addon-heading__label{
    display:grid !important;
    grid-template-columns:auto auto 1fr !important;
    grid-template-areas:
      "check text icon"
      "check opt  icon" !important;
    column-gap:8px !important;
    row-gap:2px !important;
    align-items:center !important;
  }
  .plan-card--logo .logo-addon-heading__label #addLogoDesign{
    grid-area:check !important;
    align-self:start !important;
    margin:6px 0 0 !important; /* v875: 4px lower per Dave's ask (was 2px) */
  }
  .plan-card--logo .logo-addon-heading{
    padding-top:8px !important; /* v875: more breathing room above the header row */
  }
  .plan-card--logo .logo-addon-heading__label .logo-addon-heading__text{
    grid-area:text !important;
    white-space:nowrap !important;
    justify-self:start !important;
  }
  .plan-card--logo .logo-addon-heading__label .logo-addon-heading__optional{
    grid-area:opt !important;
    justify-self:start !important;
    margin:0 !important;
  }
  .plan-card--logo .logo-addon-heading__label .logo-addon-heading__icon{
    grid-area:icon !important;
    justify-self:end !important;
    align-self:center !important;
    margin:0 !important;
    width:32px !important;
    height:32px !important;
  }
}

/* v870: lock out horizontal scrolling on mobile entirely. body already had
   overflow-x:hidden, but position:fixed elements (the modals, .page-bg)
   are sized/positioned relative to the viewport and are NOT clipped by an
   ancestor's overflow - if anything inside them (an icon with a large
   negative margin, a fixed-width button, etc.) pushes past the viewport
   edge, it can force horizontal scroll at the visual-viewport level even
   though body itself never overflows. Adding the same clip to html and to
   the two modal containers directly closes that gap as a hard backstop,
   on top of (not instead of) fixing individual overflowing elements as
   they're found. */
@media (max-width:760px){
  html{
    overflow-x:hidden !important;
    max-width:100vw !important;
  }
  /* v918 ROOT-CAUSE FIX: this rule used to also set overflow-x:hidden on
     body at the same time html got it. Setting overflow on BOTH html
     and body simultaneously is a well-known way to break
     position:sticky for anything inside body (it creates two competing
     scroll contexts) - that's exactly why the sticky logo/search/menu/
     Start Project header stopped sticking to the top on mobile while
     staying fine on desktop (desktop never had this dual-overflow
     rule). html's overflow-x:hidden alone is enough to block
     horizontal scroll at the root; body is explicitly reset to
     overflow-x:visible here so it stops competing with html and the
     sticky header can find its containing block again. */
  body{
    overflow-x:visible !important;
    max-width:100vw !important;
  }
  .plan-modal, .start-modal, .account-flow-modal, .detail-modal,
  .plan-modal__panel, .start-modal__panel{
    overflow-x:hidden !important;
    max-width:100vw !important;
  }
}

/* v871: narrow the intro paragraph on mobile so its last line doesn't
   strand a short widow word ("charged.") by itself - tested against the
   rendered text at several widths; 90% is the narrowest value where the
   final line stays nearly full ("...next steps before anything is
   charged.") instead of leaving 1-2 words alone. The heading always
   breaks after "project" regardless of width (font-size clamp reason),
   so no override needed there - desktop is untouched, scoped to the
   same 760px mobile breakpoint used elsewhere in this file. */
@media (max-width:760px){
  .start-modal__header p{
    max-width:100% !important;
    font-size:15px !important; /* v883: slightly smaller so the intro
      paragraph wraps to 3 lines instead of 4, eliminating the
      "charged." widow stranded alone on its own line */
  }
}

/* v871 (root-cause fix): ".start-form{display:grid; gap:14px}" has no
   explicit grid-template-columns, so its single implicit column defaults
   to content-based ("auto") sizing rather than being constrained to the
   form's own width. Any one wide child inside it (a checkbox row, an
   unwrapped label, etc.) could grow that column - and therefore the
   ENTIRE form and everything visually inside it - past the phone's
   viewport width. This is the actual source of both the horizontal
   scrolling and the "Project Assets" section reading edge-to-edge with
   no padding: the padding was always there, it just sat inside a form
   that had grown wider than the visible screen, so the right-side
   padding was scrolled off past the edge. Constraining the column here
   is the real fix - the earlier minmax(0,1fr) fixes on .start-form__grid
   were correct but couldn't help since their own container was already
   oversized before they got a chance to size against it. */
@media (max-width:820px){
  .start-form{
    grid-template-columns:minmax(0,1fr) !important;
  }
  .start-form,
  .start-form > *{
    min-width:0 !important;
  }
}

/* v871 (root-cause fix, continued): same "display:grid with no explicit
   grid-template-columns" issue one level up - .homepage-approval /
   .homepage-changes also default to a single content-sized ("auto")
   implicit column, so a wide child (the "I have changes" label, the
   checkbox row, etc.) could grow THIS container past the phone width
   even after .start-form itself was fixed. Applying the same
   minmax(0,1fr) constraint here closes the rest of this overflow chain. */
@media (max-width:820px){
  .homepage-approval,
  .homepage-changes{
    grid-template-columns:minmax(0,1fr) !important;
  }
  .homepage-approval > *,
  .homepage-changes > *{
    min-width:0 !important;
  }
}

/* v873: unify Package (plan-modal) and Project Details (start-modal)
   side padding on mobile - they'd drifted to different, desktop-tuned
   values (28px vs 26px), both too wide once every card inside is
   already flush to a tight 8px outer gutter. One shared, much smaller
   value for both, so there's exactly one "mobile modal padding" instead
   of two similar-but-different ones. */
@media (max-width:760px){
  .plan-modal__scroll,
  .plan-modal__panel,
  .start-modal__scroll{
    padding-left:16px !important;
    padding-right:16px !important;
  }
}

/* v875: FULL rebuild of the Web Design/Coding compact rows (Primary Page
   Design + Additional Inside Pages) for mobile, appended last in the
   file on purpose. Every desktop-tuned rule for these two rows going
   back to v628 (line ~16043 onward) is UNSCOPED - no @media wrapper at
   all - so it applies at every viewport width, including mobile, and
   because it comes later in the file than the original mobile-only
   block near line 15670, it was winning the cascade tie on mobile too
   (same selector, same !important, later source order wins). That's
   the actual reason icons kept vanishing/shrinking, the blue divider
   bars kept coming back, and the price kept overflowing off-screen no
   matter how many times those exact same things got "fixed" above -
   this block simply comes last, so it wins now. Desktop is completely
   untouched; nothing here is reachable above 760px. */
@media (max-width:760px){
  .plan-modal .plan-card--website .plan-summary__row.plan-summary__row--compact,
  .plan-modal .plan-card--website .plan-pages.plan-pages--compact{
    display:grid !important;
    grid-template-columns:auto auto 1fr !important;
    grid-template-rows:auto auto !important;
    column-gap:8px !important;
    row-gap:6px !important;
    padding:14px 0 !important;
    position:relative !important;
    max-width:100% !important;
  }
  .plan-modal .plan-card--website .plan-summary__row--compact .logo-addon-heading__label,
  .plan-modal .plan-card--website .plan-pages--compact .logo-addon-heading__label{
    grid-column:1 !important;
    grid-row:1 / 3 !important;
    justify-self:start !important;
    align-self:start !important;
    text-align:left !important;
    margin:0 !important;
    padding:0 !important;
    transform:none !important;
  }
  /* laptop/devices icon: normal readable size, sits next to the header
     on row 1 (Primary Page Design) or bottom-aligned next to the
     -/0/+ counter on row 2 (Additional Inside Pages), since the label
     cell spans both internal rows there. */
  .plan-modal .plan-card--website .plan-row__icon,
  .plan-modal .plan-card--website .plan-summary__row--compact .plan-row__icon,
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__icon{
    grid-column:2 !important;
    grid-row:1 / 3 !important;
    justify-self:start !important;
    width:32px !important;
    height:32px !important;
    margin:0 !important;
    transform:none !important;
  }
  .plan-modal .plan-card--website .plan-summary__row--compact .plan-row__icon{
    align-self:start !important; /* row 1: adjacent to "Primary Page Design" header */
  }
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__icon{
    align-self:end !important; /* row 2: adjacent to the -/0/+ counter at the bottom of the label cell */
  }
  /* price: absolute-positioned against the row itself (not a grid
     track) so both rows' prices land at the exact same right edge
     regardless of each row's own column widths - and contained inside
     the row's own box so it can never overflow past the card edge. */
  .plan-modal .plan-card--website #planBasePrice,
  .plan-modal .plan-card--website .plan-pages--compact .plan-pages-amount{
    position:absolute !important;
    top:14px !important; /* v880: matches the row's own 14px padding-top,
      which the header/label sits inside but this absolutely-positioned
      price (out of flow, measured from the row's border-box edge) did
      not - was landing above the header instead of level with it. */
    right:0 !important;
    left:auto !important;
    text-align:right !important;
    transform:none !important;
    margin:0 !important;
    max-width:none !important;
    white-space:nowrap !important;
  }
  /* description paragraph: no blue/gold divider bar, flush-left with
     the header above it, full card width instead of a narrow column. */
  .plan-modal .plan-card--website .plan-summary__row--compact .plan-row__desc,
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__pages-body,
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__desc{
    grid-column:1 / -1 !important;
    grid-row:3 !important;
    justify-self:start !important;
    align-self:start !important;
    text-align:left !important;
    width:100% !important;
    max-width:100% !important;
    margin:0 !important;
    padding:0 !important;
    border-left:0 !important;
  }
  .plan-modal .plan-card--website .plan-summary__row.plan-summary__row--compact{
    grid-template-rows:auto auto auto !important;
  }
  .plan-modal .plan-card--website .plan-pages.plan-pages--compact{
    grid-template-rows:auto auto auto !important;
  }
}

/* v875: embed the "Domain note" pill into the lower-right corner of its
   own tile (Hosting + Web Care / Host existing website) instead of it
   floating as a separate line below the description, per Dave's ask.
   The pill moved from being a sibling of the button to an actual CHILD
   of it in index.html (both the visible serviceOptions set and the
   Stripe-linked careOptions set) so it can be positioned relative to
   the button's own box. Sized 15% smaller (a 0.85 scale on top of the
   v655 20% reduction already applied to .service-info-pill). Mobile
   only - desktop keeps the existing hover-reveal row layout untouched. */
@media (max-width:760px){
  .plan-modal .plan-card .care-cell > .service-option,
  .plan-modal .plan-card .care-cell > .care-option{
    position:relative !important;
  }
  .plan-modal .plan-card .care-cell > .service-option > .service-info-pill--embedded,
  .plan-modal .plan-card .care-cell > .care-option > .service-info-pill--embedded{
    position:absolute !important;
    bottom:8px !important;
    right:10px !important;
    top:auto !important;
    left:auto !important;
    margin:0 !important;
    transform:scale(.85) !important;
    transform-origin:bottom right !important;
  }
}

/* v876: homepage template-style checkboxes nudged up 3px per Dave's ask
   (was margin-top:3px, now flush at 0) - appended last to beat the two
   earlier identical-specificity instances of this rule via source order. */
.homepage-choice > input,
.homepage-choice__main > input{
  margin-top:0 !important;
}

/* v876: "HOMEPAGE CHANGE REQUESTS" (and its sibling nested eyebrows) read
   too cramped against the blue background - loosened tracking further
   past the v661 .16em value. Appended last to win the cascade tie. */
.homepage-choice.is-active .homepage-changes > .section-head-inline > .homepage-approval__label,
.homepage-choice.is-active .homepage-social-links__heading,
.homepage-choice.is-active .homepage-font-selection__heading,
.homepage-choice.is-active .materials-upload__intro > .section-head-inline > .homepage-approval__label{
  letter-spacing:.22em !important;
}

/* v876: kill the leftover dark-theme gradient on .start-modal__panel for
   good (was already losing to the shared var(--pv-panel) !important rule,
   but leaving stale conflicting code in the file made this hard to trust
   on a re-read - removed at the source too, not just overridden).
   Also flatten BOTH modal backdrops from the gray gradient to the same
   flat off-white as the panel itself, so there's no visible seam/edge
   between "backdrop" and "panel" reading as a container box - per Dave's
   explicit ask for one flat off-white background with no gray gradation
   and no visible outer box holding everything. */
.start-modal__panel{
  background:var(--pv-panel) !important;
}
.plan-modal__backdrop,.start-modal__backdrop,.account-flow-modal__backdrop,
.detail-modal__backdrop{
  background:var(--pv-panel) !important;
}

/* v877: "Files Not Accepted" info button was invisible - blue text
   (#7E3187, the base .info-pop-trigger color) on the solid blue
   .homepage-choice.is-active panel background it lives inside, with no
   white-text override like the sibling .blocked-files-note already had.
   Default state is now white/legible; clicking toggles it to black text
   (.is-confirmed) instead of opening a popup, per Dave's explicit ask. */
.homepage-choice.is-active .blocked-files-trigger{
  color:#ffffff !important;
  border-color:rgba(255,255,255,.55) !important;
  background:rgba(255,255,255,.14) !important;
}
.homepage-choice.is-active .blocked-files-trigger:hover{
  background:rgba(255,255,255,.22) !important;
  color:#ffffff !important;
}
.homepage-choice.is-active .blocked-files-trigger.is-confirmed{
  color:#1c242a !important;
  background:rgba(255,255,255,.85) !important;
  border-color:rgba(255,255,255,.85) !important;
}

/* v879: "We will get back to you ASAP!" note - switched from gray to
   the accent blue, and forced to stack directly under the button
   flush-left (flex-direction:column + align-items:flex-start) instead
   of the previous row-wrap behavior, which was reading skewed/offset
   from the button's left edge per Dave's ask. Appended last to beat the
   earlier unscoped .start-form__submit-row/.start-form__submit-note
   rules on source-order tie. */
.start-form__submit-row{
  display:flex !important;
  flex-direction:column !important;
  align-items:flex-start !important;
  gap:8px !important;
}
.start-form__submit-note,
.homepage-choice.is-active .start-form__submit-note,
.start-modal__panel .start-form__submit-note{
  color:var(--pv-accent) !important;
  margin:0 !important;
  text-align:left !important;
  align-self:flex-start !important;
}

/* v880: "(choose one)" nudged up 7px from its current 2px gap under
   "Monthly Website Care" (was margin-top:2px at the v715 rule) per
   Dave's ask. Appended last to win the cascade tie. */
.logo-addon-heading__label:has(#careSectionLabel) .care-choose-one{
  margin-top:-5px !important;
}

/* v881: "Don't need a website? / Get standalone care..." mobile fixes.
   - the gold divider bar (v712, unscoped, applies everywhere) was never
     meant for the mobile single-column stack where this link sits
     directly under the header with nothing to its left to divide from -
     killed here, mobile only.
   - padding-left existed only to clear that divider - zeroed too so the
     text now sits flush left, matching the header/card text above it.
   - the second line's hardcoded <br> (index.html) got a mobile-only
     class so it collapses onto one line on mobile without touching
     desktop's intentional two-line wrap. */
@media (max-width:760px){
  .plan-modal .plan-card .plan-summary__section-title #switchToCareLink,
  .plan-modal .plan-card .plan-summary__section-title #switchToWebsiteLink{
    border-left:0 !important;
    padding-left:0 !important;
    margin-left:0 !important;
  }
  .plan-modal .plan-card .plan-summary__section-title #switchToCareLink em{
    white-space:nowrap !important;
  }
}

/* v881/v887: gears icon under "Monthly Website Care" - originally
   pinned absolute to the card's far upper-right corner (v881), but Dave
   wants it inline right next to the header text instead (8-10px gap),
   not off in the corner, and 70% bigger than that first pass. Switched
   from absolute positioning to a 2-row grid: row 1 is the header text
   + icon side by side, row 2 is "(choose one)" spanning full width
   below both - DOM order (label -> icon -> choose-one) doesn't matter
   for grid area placement. Mobile only.
   v887: also added 12px more top padding above the header per Dave's
   ask - was relying on the shared .plan-card 12px default with nothing
   care-card-specific on top of it. */
@media (max-width:760px){
  .plan-modal .plan-card--care{
    padding-top:24px !important;
  }
  .logo-addon-heading__label:has(#careSectionLabel){
    display:grid !important;
    grid-template-columns:auto auto !important;
    grid-template-areas:
      "label icon"
      "choose choose" !important;
    column-gap:9px !important;
    row-gap:2px !important;
    align-items:center !important;
    justify-content:start !important;
  }
  .logo-addon-heading__label:has(#careSectionLabel) #careSectionLabel{
    grid-area:label !important;
    justify-self:start !important;
  }
  .logo-addon-heading__label:has(#careSectionLabel) .care-choose-one{
    grid-area:choose !important;
    justify-self:start !important;
  }
  .logo-addon-heading__label:has(#careSectionLabel) img.logo-addon-heading__icon{
    grid-area:icon !important;
    justify-self:start !important;
    align-self:center !important;
    position:static !important;
    width:37px !important;
    height:37px !important;
    margin:0 !important;
  }
}

/* v882: monthly-care price row - now a direct child of #serviceOptions /
   #careOptions (JS moves it there, see repositionBaseMonthly in
   main-v114.js), sitting right before whichever tile is selected.
   grid-column:1/-1 makes it span the full grid width and forces its own
   row regardless of the 1/2/4-column breakpoint currently active, so
   the tile after it always starts fresh on the next row. */
#serviceOptions > .plan-base-monthly,
#careOptions > .plan-base-monthly{
  grid-column:1 / -1 !important;
  display:block !important;
  width:100% !important;
  text-align:right !important;
  color:#1c242a !important;
  margin:0 !important;
}

/* v882: "Domain note" pill was unreadable (blue text on a blue chip)
   once embedded inside a SELECTED tile, which has a solid dark-blue
   background - it was only ever tuned to sit on the light gray
   unselected tiles. White on the dark selected state. */
.plan-modal .care-cell > .service-option.is-selected > .service-info-pill--embedded,
.plan-modal .care-cell > .care-option.is-selected > .service-info-pill--embedded{
  color:#ffffff !important;
  border-color:rgba(255,255,255,.55) !important;
  background:rgba(255,255,255,.16) !important;
}
.plan-modal .care-cell > .service-option.is-selected > .service-info-pill--embedded:hover,
.plan-modal .care-cell > .care-option.is-selected > .service-info-pill--embedded:hover{
  background:rgba(255,255,255,.28) !important;
  border-color:rgba(255,255,255,.8) !important;
}

/* v883: both modal close buttons had no z-index at all, while their own
   panel is explicitly z-index:2 (position:relative) - with the close
   button's z-index left at the default "auto", the panel's explicit
   stacking level won and painted on top of it, hiding the button behind
   the panel's rounded edge. Matches the existing working pattern already
   used for .info-pop-modal__close (z-index:3 against its panel's 2). */
.plan-modal__close,
.start-modal__close{
  z-index:5 !important;
}

/* v883: "Send us your project details." heading kept wrapping as "Send
   us your project" / "details." (a lone-word widow on line 2) on
   mobile - #startModalTitle's own ID rule (v190) forces max-width:100%
   with !important, which is why the earlier .start-modal__header h2
   max-width attempt never had any effect (lower specificity, no
   !important, so it always lost). Overriding the ID rule directly here,
   mobile only, narrow enough that "project" wraps down to join
   "details." on line 2 instead of "details." standing alone. */
@media (max-width:760px){
  #startModalTitle{
    max-width:78% !important;
  }
}

/* v883: half the vertical gap between the 3 stacked summary boxes
   (Modern Website, Payment Choice, Estimated Amount) on mobile, per
   Dave's ask - was inheriting the desktop 3-column grid's 12px gap
   value even after collapsing to a single column. */
@media (max-width:820px){
  .start-modal__summary{
    gap:6px !important;
  }
}

/* v884: "HOMEPAGE CHANGE REQUESTS" eyebrow label wraps to 2 lines on
   mobile - base .homepage-approval__label line-height:1 (tuned for the
   normal single-line case) reads as cramped/overlapping once it wraps.
   Loosened line-height for breathing room between the two lines. */
.homepage-choice.is-active .homepage-changes > .section-head-inline > .homepage-approval__label,
.homepage-choice.is-active .homepage-social-links__heading,
.homepage-choice.is-active .homepage-font-selection__heading,
.homepage-choice.is-active .materials-upload__intro > .section-head-inline > .homepage-approval__label{
  line-height:1.5 !important;
}

/* v885: "Primary Page Design" row icon enlarged 180% (32px -> 58px) and
   nudged up slightly so its top edge sits just above the header text's
   top, per Dave's ask. Row 2's icon (Additional Inside Pages, bottom-
   aligned next to the counter) is untouched. */
@media (max-width:760px){
  .plan-modal .plan-card--website .plan-summary__row--compact .plan-row__icon{
    width:58px !important;
    height:58px !important;
    transform:translateY(-6px) !important;
  }
}

/* v886: "Additional Inside Pages" row icon enlarged 180% (32px -> 58px)
   per Dave's ask, matching the same treatment given to the row above it
   (v885). Kept align-self:end (bottom-anchored within the label cell's
   spanned rows) since growing the icon while anchoring its bottom edge
   is what pulls its center up into alignment with the -/0/+ counter,
   instead of sitting low/below it. */
@media (max-width:760px){
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__icon{
    width:58px !important;
    height:58px !important;
  }
}

/* v887: 8px more space between "(choose one)" and "Don't need a
   website?" on mobile - was row-gap:6px (v869) between the "label" and
   "switch" grid areas, now 14px. */
@media (max-width:760px){
  .plan-modal .plan-card--care .plan-summary__section-title{
    row-gap:14px !important;
  }
}

/* v888: horizontal scroll lock, round 2. Every element inside the
   modals now measures at or under the viewport width (confirmed via a
   full-page element scan across every state - default, all 4 service
   tiles, "I have changes" expanded, scrolled to bottom - nothing
   exceeds 390px), so this isn't a content-overflow bug anymore. What's
   left is Safari's own edge-swipe/rubber-band gesture: with no
   overscroll-behavior or touch-action set, a horizontal drag near the
   screen edge is interpreted by iOS as page navigation / elastic
   bounce, which reads exactly like "horizontal scrolling" even though
   no element is actually wider than the screen. Locking that down
   directly, on top of (not instead of) the existing overflow-x:hidden
   backstop from v870. */
html, body{
  overscroll-behavior-x:none !important;
  touch-action:pan-y !important;
}
.plan-modal, .start-modal, .account-flow-modal, .detail-modal,
.plan-modal__panel, .start-modal__panel,
.plan-modal__scroll, .start-modal__scroll{
  overscroll-behavior-x:none !important;
  touch-action:pan-y !important;
}

/* v889: "Logo / Brand Direction" icon 20% larger on mobile (26px -> 31px,
   120% scale) per Dave's ask. */
@media (max-width:760px){
  .logo-brand-direction__icon{
    width:31px !important;
    height:31px !important;
  }
}

/* v889: "Estimated Amount" breakdown box - when all 3 line items are
   present (Professional Website + Additional Page + Logo Design), the
   text was too much information for the blue box on mobile and ran off
   the right edge, forcing the whole page to scroll horizontally. 1-item
   and 2-item states are untouched (same size as before) - this only
   kicks in via :has(:nth-child(3)) when a 3rd item actually exists.
   Also restates the single-column stack as a hard guarantee (on top of
   the existing grid-template-columns:1fr mobile rule) so there's no
   chance of 3 items ever laying out side by side again. */
@media (max-width:760px){
  .start-modal__summary .estimate-breakdown:has(.estimate-part:nth-child(3)){
    grid-template-columns:1fr !important;
    gap:6px !important;
  }
  .start-modal__summary .estimate-breakdown:has(.estimate-part:nth-child(3)) .estimate-part{
    max-width:100% !important;
  }
  .start-modal__summary .estimate-breakdown:has(.estimate-part:nth-child(3)) .estimate-part strong{
    font-size:19px !important;
    white-space:nowrap !important;
  }
  .start-modal__summary .estimate-breakdown:has(.estimate-part:nth-child(3)) .estimate-part em{
    font-size:11px !important;
  }
}

/* v890: correction - the v876 fix moved these checkboxes the wrong
   direction (down, not up). Dave wants them centered next to the font
   name text, ~5px higher than their current position (margin-top:0
   from v876). Appended last to win over that rule. */
.homepage-choice > input,
.homepage-choice__main > input{
  margin-top:-5px !important;
}

/* v893: root cause of "4-card strip still just snaps/appears instead of
   gliding in like the 6-card strip below it" (reported repeatedly - the
   parallax data-attributes and reveal-anim JS class were already
   identical between the two strips, so the actual bug had to be CSS).
   FOUND: .included-benefit's own base rule (v200, line ~9723) declares
   "transition:transform .2s ease, border-color .2s ease, background
   .2s ease, box-shadow .2s ease" - a transition SHORTHAND that never
   lists opacity at all. .notes .note-item has an equivalent merged
   !important override (v462) that explicitly folds the 1.4s reveal
   opacity/transform transition in alongside its own hover transitions -
   .included-benefit never got that same treatment, so opacity had no
   transition to run at all and just snapped straight to 1. Mirrors the
   exact .note-item fix here, scoped to .included-benefit. */
.included-benefits .included-benefit{
  transition:opacity 1.4s cubic-bezier(.22,.61,.32,1), transform 1.4s cubic-bezier(.22,.61,.32,1), flex 1s cubic-bezier(.25,.46,.45,.94), border-color .2s ease, background .2s ease, box-shadow .2s ease !important;
}

/* v894: halve the vertical padding/margin around the mobile before/after
   iPhone comparison mockup, per Dave's ask - it was getting cut off
   about halfway down on load instead of sitting above the fold.
   - .comparison-card's all-around padding (12px) included top/bottom.
   - .mobile-safe-preview's top margin and .mobile-phone-compare's
     bottom margin were the other two vertical gaps stacking on top of
     that. All three halved together. */
@media(max-width:760px){
  .comparison-card{
    padding:6px !important;
  }
  .mobile-safe-preview{
    margin:10px 0 0 !important;
  }
  /* v957: superseded by the v957 fix that crops the actual dead space
     out of the image file and sets a precise 20px gap directly - this
     old 14px !important override would have fought that, so removed
     the conflicting margin-bottom instead of leaving stale dead code. */
}

/* v985: FAQ accordion "+" icons - the v896 screen-blend translucency
   was still reading as too dark/low-contrast per Dave's follow-up ask.
   Switched to the same solid, fully-opaque light blue (#c7cace) already
   used for the before/after divider arrows (v956) - no transparency,
   no blend mode, just a brighter solid color. */
.faq-icon::before,
.faq-icon::after{
  background:#c7cace !important;
  mix-blend-mode:normal !important;
}

/* v897: the $/mo price text inside each of the 4 service/care pills
   (Hosting + Web Care, Website Care, Host existing website, Design
   handoff) was rendering at 15px on mobile - much smaller than every
   other price on the page - reading as "tiny" per Dave's ask. Sized up
   to 19px, mobile only. They already share the same left edge across
   all 4 pills (confirmed via live measurement), so no alignment fix is
   needed there - just the size bump. */
@media (max-width:760px){
  .plan-modal .plan-card .care-cell > .service-option > b,
  .plan-modal .plan-card .care-cell > .care-option > b{
    font-size:19px !important;
  }
}

/* v898: the -/+ page-stepper buttons turn blue on hover/press
   (.page-stepper button:hover{background:#7E3187}) but the glyph color
   was never updated to match - stayed dark #1c242a, unreadable against
   the new blue fill. White on hover/active/focus, per Dave's ask. */
.page-stepper button:hover,
.page-stepper button:active,
.page-stepper button:focus-visible{
  background:#7E3187 !important;
  color:#ffffff !important;
}

/* v899: correction - checkboxes were too high (v890 pushed them up to
   -5px trying to center them relative to the font names, but for THIS
   set - the homepage-direction "Keep as-is" / "I have changes" choices -
   they need to sit adjacent to their headers, 7px lower than the -5px
   v890 position. Appended last to win. */
.homepage-choice > input,
.homepage-choice__main > input{
  margin-top:2px !important;
}

/* v900: font-selection checkboxes (Jakarta/Helvetica/Garamond/Space)
   moved up 4px per Dave's ask - was top:11px (v-unknown baseline),
   now 7px. Appended last to win over the earlier declaration. */
.font-choice-option .font-choice-check{
  top:7px !important;
}

/* v1192: per Dave - font-selection checkboxes moved down 3px again
   (7px -> 10px), mobile and desktop. Appended last to win. */
.font-choice-option .font-choice-check{
  top:10px !important;
}

/* v902: "Continue to Secure Checkout" button + its "We will get back to
   you ASAP!" note were flush with the CHECKBOX's own left edge (27.7px),
   30px left of where the checkbox's own text column starts (57.7px,
   from .start-confirm span) - reading as hanging off to the left of the
   "I understand WaltersGroup..." paragraph right above it. Shifted the
   whole button+note row right to match that text column exactly. */
.start-form__submit-row{
  margin-left:30px !important;
}

/* v903: mobile modal content was getting masked off ~3/4" above the
   true bottom of the screen - scrolling never reached the actual
   bottom edge even though nothing was visibly blocking it. Root cause
   is the classic iOS Safari "vh" bug: 88vh/100vh are computed against
   the LARGEST possible viewport (as if the address bar were already
   hidden), not the actually-visible area, so every height calculated
   from vh here (the modal's own fixed-position box via inset:0, the
   scroll container's max-height) was taller than what's really on
   screen whenever Safari's chrome was showing - the extra height was
   real, just pushed below the visible fold, which is exactly what
   reads as "a mask hiding the bottom until you scroll." dvh (dynamic
   viewport height) tracks the ACTUAL visible viewport instead and is
   supported in every browser this site needs to support on mobile -
   layered on top of the vh values as a progressive enhancement so
   nothing changes for browsers that don't support it. */
@supports (height: 100dvh){
  .plan-modal,
  .start-modal,
  .account-flow-modal,
  .detail-modal{
    height:100dvh !important;
  }
  .plan-modal__panel,
  .start-modal__panel{
    max-height:88dvh !important;
  }
  .detail-modal__scroll,
  .plan-modal__scroll,
  .start-modal__scroll{
    max-height:min(760px, 88dvh) !important;
  }
}

/* v909: Dave has repeated multiple times that the "Domain note" pill
   (added inside the .service-option/.care-option button by v875) was
   only ever supposed to show on mobile - never desktop. On desktop it
   was making the 2 tiles that have it (Hosting+Web Care, Host existing
   website) taller than the other 2, uneven tile heights. Simplest,
   safest fix given how much has gone wrong today: just hide it outright
   on desktop rather than trying to reposition it again. All 4 tiles
   only show letter(hidden)/eyebrow(hidden)/strong/price regardless of
   which ones have a domain note, so hiding the pill makes all 4
   identical in content and therefore identical in height. Desktop only
   (min-width:761px) - the v875 mobile embedded-corner behavior below
   760px is completely untouched. */
@media (min-width:761px){
  .plan-modal .plan-card .care-cell > .service-option > .service-info-pill--embedded,
  .plan-modal .plan-card .care-cell > .care-option > .service-info-pill--embedded{
    display:none !important;
  }
}

/* v910: Dave wants these popup windows to stop reading as a floating
   card hovering in the middle of the screen with visible gaps above
   and below it - instead the panel should run the full height of the
   browser window, flush from the very top edge to the very bottom
   edge (like it's rising up out of the bottom of the window), with
   the content scrolling inside that full-height panel. Previously
   .plan-modal/.start-modal/etc. used align-items:center + padding to
   center a card with max-height:88vh, which is exactly the "floating
   box, cut off top and bottom" look he's asking to remove. Switching
   to align-items:stretch + no padding + height:100dvh on the panel
   itself (dvh so this plays correctly with the earlier v903 iOS
   Safari toolbar fix) removes the gap entirely, both desktop and
   mobile - not scoped to a breakpoint, this is the same on both per
   Dave's explicit ask. Corner radius dropped to 0 since a panel that
   touches both edges can't visually read as "rounded" at those edges
   anymore. */
.plan-modal, .start-modal, .account-flow-modal, .detail-modal{
  align-items:stretch !important;
  padding:0 !important;
}
.plan-modal__panel, .start-modal__panel{
  height:100dvh !important;
  max-height:100dvh !important;
  border-radius:0 !important;
}
.detail-modal__panel{
  height:100dvh !important;
  max-height:100dvh !important;
  border-radius:0 !important;
}

/* v911: the before/after drag-handle's left/right arrows were nearly
   invisible - the handle's own circle background is near-black
   (#2b2b2b) and the arrow color was the same muted steel blue
   (#7E3187) used for accents elsewhere, which reads as dark-on-dark
   against that circle. Dave wants it screened back to a much lighter,
   brighter tint of the same blue instead of the current muddy dark
   version, so the arrows actually read against the dark handle. */
.handle{
  color:#c7cace !important;
}
.handle span{
  color:#c7cace !important;
}

/* v912: "Don't need a website?" mode-switch text nudged down (closer
   to the 4 tiles below) per Dave's ask. Desktop only - the mobile
   stacked layout (@media max-width:760px) sets its own margin:0 on
   this exact element and this rule was originally unscoped, which
   would have silently fought that mobile rule via source order. Fixed
   to be explicitly desktop-scoped here.
   v916: restored the hard line break between "for" and "your" (Dave
   wants it back where it originally was - removing it earlier left
   "foryour" jammed together with no space) and moved this whole block
   (plus its own border-left, which IS the vertical blue/steel divider
   line - they're the same element, so shifting the block shifts the
   line with it) another 20px to the right, from -11px to 9px. */
@media (min-width:761px){
  .plan-modal .plan-card--care .plan-summary__section-title #switchToCareLink,
  .plan-modal .plan-card--care .plan-summary__section-title #switchToWebsiteLink{
    margin-top:14px !important;
    margin-left:9px !important;
  }
}

/* v913: v910's full-height fix targeted .plan-modal__panel, but that
   panel has been overflow:visible/no-background since v477 (moved
   scrolling to a nested .xxx-modal__scroll child so the close button
   doesn't scroll away with the content). The PANEL is invisible/
   unbounded; the actual visible, backgrounded, scrolling box Dave sees
   is .plan-modal__scroll (and its start/detail siblings), still capped
   at max-height:min(760px,88vh) from way earlier in the file. That's
   why the box visually stopped partway down with blank space below it
   even though the (invisible) panel really was full height - confirmed
   by direct measurement: panel computed 1080px, but .plan-modal__scroll
   computed exactly 760px on a 1080px viewport. Extending the actual
   visible scroll box to full height fixes the real gap. */
.detail-modal__scroll,
.plan-modal__scroll,
.start-modal__scroll{
  max-height:100dvh !important;
  height:100dvh !important;
}

/* v914: two fixes for "Monthly Website Care" desktop only.
   1) More vertical breathing room above the card (was 6px from v683,
      Dave wants noticeably more).
   2) ROOT CAUSE of the gear icon floating below everything, found via
      live computed-style tracing (my first attempt at this, forcing
      flex-wrap:nowrap, had zero effect and I initially couldn't see
      why): an older, UNSCOPED rule -
      ".logo-addon-heading__label:has(#careSectionLabel){flex-direction:
      column}" (applies at every viewport, not just mobile) - stacks the
      heading text, icon, and "(choose one)" vertically on purpose. On
      mobile that's superseded by its own later @media(max-width:760px)
      grid rule, but desktop had nothing overriding it, so desktop was
      always getting the stacked layout regardless of flex-wrap. The
      :has()+ID selector carries far more specificity than a plain
      class chain, which is exactly why my first attempt (a class-only
      selector) couldn't beat it. Mirroring the same proven grid
      approach already used for mobile (v887) instead: "label icon" on
      row 1, "(choose one)" on its own row below - same pattern, just
      desktop-scoped and with desktop-appropriate sizing/spacing. */
@media (min-width:761px){
  .plan-modal .plan-card--care{
    padding-top:10px !important; /* v915: was 20px (v914) - Dave says
      that's hanging too low now, halved it back down. */
  }
  .logo-addon-heading__label:has(#careSectionLabel){
    display:grid !important;
    grid-template-columns:auto auto !important;
    grid-template-areas:
      "label icon"
      "choose choose" !important;
    column-gap:15px !important;
    row-gap:0 !important;
    align-items:center !important;
    justify-content:start !important;
  }
  .logo-addon-heading__label:has(#careSectionLabel) .care-choose-one{
    margin-top:-15px !important; /* v915: pull "(choose one)" ~10px
      closer to the header above it per Dave's ask - overrides the
      older -5px .has() rule for desktop specifically. */
  }
  .logo-addon-heading__label:has(#careSectionLabel) #careSectionLabel{
    grid-area:label !important;
    justify-self:start !important;
  }
  .logo-addon-heading__label:has(#careSectionLabel) .care-choose-one{
    grid-area:choose !important;
    justify-self:start !important;
  }
  .logo-addon-heading__label:has(#careSectionLabel) img.logo-addon-heading__icon{
    grid-area:icon !important;
    justify-self:start !important;
    align-self:center !important;
    position:static !important;
    margin:0 !important;
  }
}

/* v917: the before/after slider's vertical divider line was still
   using a low-opacity screen-blended dark blue (rgba(126,49,135,.35)
   on desktop, .86 on mobile via .mobile-phone-divider) - same muted
   blue problem the handle's arrows had, and Dave says it's now
   basically invisible against the photo. Matching it to the exact
   same bright, full-opacity tint used for the handle arrows (v911),
   on both desktop and mobile, no blend-mode tricks this time. */
.divider::before{
  background:#c7cace !important;
  mix-blend-mode:normal !important;
  box-shadow:0 0 0 1px rgba(0,0,0,.22) !important;
}
.mobile-phone-divider::before{
  background:#c7cace !important;
  mix-blend-mode:normal !important;
  box-shadow:0 0 0 1px rgba(0,0,0,.22) !important;
}

/* v919: "Primary Page Design" row icon (laptop+phone) sitting too low
   again, below the header height to its left - raised another 10px
   (translateY -6px -> -16px) and scaled 25% larger (58px -> 73px) per
   Dave's ask. Mobile only. */
@media (max-width:760px){
  .plan-modal .plan-card--website .plan-summary__row--compact .plan-row__icon{
    width:73px !important;
    height:73px !important;
    transform:translateY(-16px) !important;
  }
}

/* v920: "Additional Inside Pages" row icon scaled 30% larger (58px ->
   75px) per Dave's ask, same position (still align-self:end/bottom-
   anchored from v886, so it grows in place rather than shifting).
   Mobile only. */
@media (max-width:760px){
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__icon{
    width:75px !important;
    height:75px !important;
  }
}

/* v921: "Monthly Website Care" top padding on mobile halved (24px ->
   12px) per Dave's ask - was hanging with too much space above the
   header/icon/"(choose one)" row. Appended last to win the cascade
   over the v887 rule. Mobile only. */
@media (max-width:760px){
  .plan-modal .plan-card--care{
    padding-top:12px !important;
  }
}

/* v922: mobile tile prices ($49/mo, $39/mo, etc.) still reading as too
   small per Dave's repeated ask - bumped further from 19px (v897) to
   24px, close to the card header size (21px) as requested. Mobile
   only. */
@media (max-width:760px){
  .plan-modal .plan-card .care-cell > .service-option > b,
  .plan-modal .plan-card .care-cell > .care-option > b{
    font-size:24px !important;
  }
}

/* v923: the 4 payment-option boxes (Pay in full / 3 / 6 / 12 monthly
   payments) had too much top padding above their headers on mobile -
   halved from 18px to 9px per Dave's ask. Mobile only. */
@media (max-width:760px){
  .payment-choice__option{
    padding-top:9px !important;
  }
}

/* v924: the "Info" buttons inside the dark "I have website changes"
   panel (Web Change Requests, Project Assets, Website Care Notes,
   Website Access + Domain Information - all share the same
   .info-pop-trigger class) were rendering in the same muted steel blue
   used everywhere else, which has no contrast against this panel's
   dark background - reads as nearly invisible, same root cause as the
   before/after handle/divider fix earlier. White on dark, both
   desktop and mobile. */
.homepage-choice.is-active .info-pop-trigger{
  color:#ffffff !important;
  border-color:rgba(255,255,255,.55) !important;
  background:rgba(255,255,255,.12) !important;
}
.homepage-choice.is-active .info-pop-trigger:hover,
.homepage-choice.is-active .info-pop-trigger:focus-visible{
  color:#ffffff !important;
  border-color:rgba(255,255,255,.8) !important;
  background:rgba(255,255,255,.2) !important;
}

/* v925: less "leading" (vertical spacing) between each social platform
   row (Facebook, Instagram, LinkedIn, etc.) per Dave's ask - tightened
   the chip's own min-height, the option's internal gap/padding, and
   the grid's row-gap. Both desktop and mobile (unscoped). */
.start-modal .social-platform-chip{
  min-height:24px !important;
  line-height:1.1 !important;
}
.start-modal .social-platform-option{
  gap:2px !important;
  padding:0 !important;
}
.start-modal .social-link-grid{
  gap:0 16px !important;
}

/* v926: defensive reinforcement for the "Info" buttons inside the dark
   "I have website changes" panel - clicking reported as doing nothing
   for Dave. Verified the JS wiring + modal itself both work correctly
   in testing (click opens #homepageChangeInfo with is-open, display:
   grid, z-index 210000, fully visible) - so this guards against a
   possible stacking/overlap issue instead (something else sitting on
   top of the button and eating the click) by giving the trigger its
   own explicit stacking context above the panel content. */
.homepage-choice.is-active .info-pop-trigger{
  position:relative !important;
  z-index:5 !important;
  pointer-events:auto !important;
}

/* v927: "change_type" checkbox list (Text/copy changes, Photo or video
   changes, etc.) - checkboxes slightly smaller and tighter row spacing
   per Dave's ask. Mobile only. */
@media (max-width:760px){
  .change-checks{
    gap:14px 12px !important; /* v1016: was 1px - rows were almost touching,
      loosened mobile-only per Dave feedback */
  }
  .change-checks label{
    gap:6px !important;
    line-height:1.3 !important; /* v1016: was 1.1, slightly looser leading */
  }
  .change-checks input{
    width:13px !important;
    height:13px !important;
  }
}

/* v928: placeholder/hint text inside all form fields was reading too
   prominent/dark - Dave wants it fainter, more ghosted, still legible.
   Lowered opacity across every placeholder rule in the modals (was
   .42/.45 depending on field). Both desktop and mobile. */
.plan-modal input::placeholder,
.plan-modal textarea::placeholder,
.start-modal input::placeholder,
.start-modal textarea::placeholder,
.start-modal .other-detail-input::placeholder,
.start-modal .homepage-choice--with-changes .typed-changes-field textarea::placeholder,
.account-flow-form input::placeholder{
  color:rgba(84,98,107,.28) !important;
}

/* v929: subtler hover darkening on unselected homepage-choice/change-request rows so text stays readable */
.start-modal .homepage-choice:not(.is-active):hover,
.plan-modal .homepage-choice:not(.is-active):hover{
  background:rgba(0,0,0,.16) !important;
}

/* v929: desktop-only - pull "Additional (Inside) Pages" header + laptop
   icon up ~8px (closer to the divider line above, shrinking the row),
   and pull the -/0/+ counter up an additional ~12px on top of its
   existing -7px offset. Scoped to min-width:761px only - mobile's
   spacing here has been tuned extensively and must stay untouched. */
@media (min-width:761px){
  .plan-modal .plan-card--website .plan-pages.plan-pages--compact{
    padding-top:12px !important; /* v1056: was 2px (v929 pulled this tight
      on purpose at the time) - with the $590 paragraph now longer and
      the row above given more bottom padding too, 2px read as cramped
      against the divider. Widened to 12px per Dave's "at least 10px"
      ask on both sides of the line. */
  }
  .plan-modal .plan-card--website .plan-pages--compact .page-stepper{
    transform:translateY(-19px) !important;
  }
}

/* v930: remove the drop shadow under the account-flow choice cards
   (Create Account / Log In / Continue as Guest) per Dave's ask. */
.account-flow-choice{
  box-shadow:none !important;
}

/* v931: "Start your project." heading was wrapping to 2 lines because
   the universal `h2` rule caps all h2s at max-width:11ch (too broad to
   touch site-wide) - overriding just this heading so it reads on one
   line. */
#accountFlowTitle{
  max-width:none !important;
}

/* v932: account-flow-choice cards (Create Account / Log In / Continue as
   Guest) turn dark steel-blue on hover, but existing hover rules were
   still forcing the eyebrow/heading/description to near-black - unreadable
   against the dark bg. Force all three to white on hover/focus. */
.account-flow-choice:hover span,
.account-flow-choice:focus-visible span,
.account-flow-choice:hover strong,
.account-flow-choice:focus-visible strong,
.account-flow-choice:hover em,
.account-flow-choice:focus-visible em{
  color:#ffffff !important;
}

/* v934: desktop-only follow-up nudges on the "Additional (Inside) Pages"
   row - icon + description text pushed down ~9px (away from the divider
   line above, per Dave's ask - the earlier v929 pass pulled the whole
   row up 8px, and the icon/desc ended up sitting too close to that line),
   the -/0/+ counter pushed down an additional 4px (was translateY(-19px)
   from v929, now -15px), and the "$19/mo for 12 months" financed price
   pushed down 7px away from the same divider (was margin-top:18px). */
@media (min-width:761px){
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__icon{
    margin-top:-1px !important;
    transform:translateX(8px) !important; /* v1003: nudged right so it
      stops touching the "(i)" info button sitting above it next to the
      "Additional (Inside) Pages" label, per Dave's ask. Used transform
      instead of margin-left because this element's justify-self:center
      (set elsewhere) neutralizes margin-based shifts - transform isn't
      affected by grid alignment. Desktop only. */
  }
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__desc{
    margin-top:9px !important;
  }
  .plan-modal .plan-card--website .plan-pages--compact .page-stepper{
    transform:translateY(-15px) !important;
  }
  .plan-modal .plan-card--website .plan-pages--compact .plan-pages-amount{
    margin-top:25px !important;
  }
}

/* v935: the bold price tags ($49/mo, $39/mo, $19/mo, $0/mo on the 4
   care/service pills, and "Custom logo design: $149") were rendering at
   browser-default bold (700), noticeably heavier than the 500-weight
   headers elsewhere in these cards. Matched to the same 500 weight,
   everywhere these appear. */
.plan-modal .service-option > b,
.plan-modal .care-option > b,
.plan-modal .logo-addon b,
.plan-modal .plan-card .care-cell > .service-option > b,
.plan-modal .plan-card .care-cell > .care-option > b,
.plan-modal .plan-card--logo .logo-addon b{
  font-weight:500 !important;
}

/* v936: root cause of the "Standalone Website Care" panel showing BOTH
   pill sets stacked (the 4-pill .service-options AND the 3-pill
   .care-options at once) and both "Don't need a website?" /
   "Actually, I need a new website" switch links showing simultaneously,
   jumbled together - the JS correctly adds .is-hidden to whichever one
   should be hidden on mode switch, but .is-hidden (specificity 0,1,0)
   was losing to higher-specificity rules elsewhere in this file:
   ".plan-modal .plan-card .service-options, ...care-options" (0,3,0)
   forcing display:grid, and "...#switchToCareLink"/"#switchToWebsiteLink"
   (an ID selector, 1,3,0) forcing display:flex. Both !important, both
   beating .is-hidden on pure specificity regardless of source order.
   Matching/exceeding those exact selectors here, with .is-hidden
   appended, guarantees the hide wins. */
.plan-modal .plan-card .service-options.is-hidden,
.plan-modal .plan-card .care-options.is-hidden{
  display:none !important;
}
.plan-modal .plan-card .plan-summary__section-title #switchToCareLink.is-hidden,
.plan-modal .plan-card .plan-summary__section-title #switchToWebsiteLink.is-hidden{
  display:none !important;
}

/* v937: the selected payment option's price amount was inheriting the
   button's base near-black text color (the "Pay in full" LABEL is
   already forced white via a separate rule, but the price span next to
   it - #payFull/.payment-amount - only had "color:inherit !important",
   which pulled the unselected black instead of white against the dark
   selected background). Forces the price white on any selected payment
   option, matching the label. */
.plan-modal .payment-choice__option.is-selected .payment-amount,
.plan-modal .payment-choice__option.is-selected > span{
  color:#ffffff !important;
}

/* v937b: ".plan-modal .payment-choice__option{display:grid !important}"
   (0,2,0 specificity) was beating ".is-hidden{display:none !important}"
   (0,1,0), same cascade trap as the service/care options fix above -
   the 3/6/12 payment buttons kept rendering even with .is-hidden added.
   Matching/exceeding that selector's specificity here. */
.plan-modal .payment-choice__option.is-hidden{
  display:none !important;
}

/* v938: the plan-modal lead paragraph (intro text under the big header,
   e.g. "Care or hosting for an existing website...") was capped at
   max-width:min(500px,56%) by an old ".plan-modal__header p" rule,
   forcing it into a narrow half-width column instead of spanning the
   panel like the rest of the content. Dave's asked for this several
   times - using the ID here so nothing else in that cascade chain can
   out-specificity it again. */
/* v944: the v938/v942 widen was UNSCOPED, so it also hit the default
   website-mode header text ("Modern Website" intro), which relies on
   the original narrower width to clear the laptop/phone mockup image
   next to it - widened, that text now runs behind the mockup. Scoped
   to Standalone Website Care mode only, where there's no mockup image
   and the wide text was actually wanted. Default mode falls back to
   the original ".plan-modal__header p{max-width:min(500px,56%)}" rule. */
.plan-modal.is-plan-hosting-care #planModalLead{
  max-width:560px !important;
  width:auto !important;
}

/* v942: same widow fix for the "Website hosting only..." note text -
   narrowed slightly from 430px so the last line isn't just "included." */
.plan-modal__footer #planNote{
  max-width:380px !important;
}

/* v939: "(choose one)" under the care-section header nudged down 4px
   per Dave's ask (was margin-top:-15px from v915, now -11px). Scoped to
   desktop (min-width:761px) to match v915's own scoping - mobile has its
   own separately-tuned value elsewhere and must stay untouched. */
@media (min-width:761px){
  .logo-addon-heading__label:has(#careSectionLabel) .care-choose-one{
    margin-top:-11px !important;
  }
}

/* v943: huge dead space between the care-option pill descriptions and
   the bottom of the Standalone Website Care panel - traced to
   ".care-options{ margin-bottom:24px; padding-bottom:24px; border-bottom }"
   (48px combined, apparently meant to separate from content below, but
   nothing follows it in this card so it was just trailing empty space).
   Cut to about 1/3 per Dave's ask, kept the divider line. */
.care-options{
  margin-bottom:8px !important;
  padding-bottom:8px !important;
}

/* v945: "Primary Page Design" laptop icon moved up another 6px on
   mobile per Dave's ask (was translateY(-16px) from v919, now -22px). */
@media (max-width:760px){
  .plan-modal .plan-card--website .plan-summary__row--compact .plan-row__icon{
    transform:translateY(-22px) !important;
  }
}

/* v946: half the padding between the divider line above and the
   "ADDITIONAL (INSIDE) PAGES" header below it, mobile only (was 14px). */
@media (max-width:760px){
  .plan-modal .plan-card--website .plan-pages.plan-pages--compact{
    padding-top:7px !important;
  }
}

/* v947: enormous gap between the laptop icon and the "$590 for complete
   home page design..." text below it on mobile - the icon is pulled up
   visually via transform (v919/v945), but transform doesn't shrink the
   grid track reserved for it, so the track's full height plus the row-gap
   still separated the text from where the icon visually ended. Pulled
   the description up to cut that dead space to about a third (was a
   28px gap, now ~9px). Scoped to the Primary Page Design row only -
   Additional Inside Pages' own description is untouched. */
@media (max-width:760px){
  .plan-modal .plan-card--website .plan-summary__row--compact .plan-row__desc{
    margin-top:-24px !important; /* v971: was -19px (9px visible gap) -
      Dave asked for about half that or a little less, tightened another
      5px to land around 4px. */
  }
}

/* v948: mobile price text bumped closer to header size, per Dave's
   repeated ask - was tiny relative to the headers next to it. */
@media (max-width:760px){
  /* v949: 28px/15px overlapped the icon on the "Primary Page Design"
     badge (see v949 note in main-v114.js) - the .plan-side-payment-amount
     (Additional Pages price) sits in a similarly tight spot beside its
     own icon, so it's capped the same way, at 18px/12px instead of the
     originally-tried 28px/15px. */
  .plan-modal .plan-side-payment-amount{
    font-size:17px !important; /* v949: this badge's icon sits even closer
      beside it than the primary-page one - 18px started overlapping the
      icon's top edge, backed off 1px */
  }
  .plan-modal .plan-base-payment-note{
    font-size:12px !important;
  }
  .plan-modal .plan-card .care-cell > .service-option > b,
  .plan-modal .plan-card .care-cell > .care-option > b{
    font-size:30px !important;
  }
}

/* v950: "Monthly Website Care" section's own price badge (#planBaseMonthly,
   e.g. "$49/mo" above the 4 care pills) was still at 15px, inconsistent
   with the other two mobile price badges just bumped to 18px/17px. This
   one has no icon beside it (full-width flex row), matched to 18px. */
@media (max-width:760px){
  .plan-modal .plan-base-monthly{
    font-size:18px !important;
  }
}

/* v954: the "$0/mo" state of this same badge (shown when Design
   Handoff is selected, no monthly care) stayed tiny even after v950 -
   root cause: the JS adds an .is-muted class in that exact state, and
   .plan-base-monthly.is-muted carries its own font-size:13px !important
   at higher specificity (3 classes vs v950's 2), so it silently beat
   the mobile fix only for this one price state. Matching it to the
   same 18px mobile size for consistency. */
@media (max-width:760px){
  .plan-modal .plan-base-monthly.is-muted{
    font-size:18px !important;
  }
}

/* v952: the floating "$39/mo" summary price above the 3-panel Monthly
   Website Care chooser sat too far above the panels (~21px gap measured
   live between #planBaseMonthly bottom and #careOptions top). Halved
   it to ~10px per Dave's ask. Also reinforcing pure white on the
   selected-tile price/title text with a stronger override, even though
   it already computed as #fff, since Dave reported seeing a blue tint -
   cheap insurance against any stale-cache/specificity edge case. */
@media (max-width:760px){
  .plan-modal .plan-card--care .plan-summary__section-title{
    margin-bottom:-10px !important;
  }
}
.plan-modal .plan-card .care-cell > .care-option.is-selected > strong,
.plan-modal .plan-card .care-cell > .care-option.is-selected > b{
  color:#ffffff !important;
}

/* v951: Dave reported the "$19/mo for 12 months" price badge on the
   Additional (Inside) Pages row was overlapping the adjacent laptop+phone
   icon on mobile. Moved price up 4px (top:14px -> 10px). Icon uses
   align-self:end in its grid track, so margin-top cant move it (the
   bottom edge stays pinned to the track and margin-top just grows the
   box upward with no visible shift) - margin-bottom is what actually
   offsets it from that pinned bottom edge, so used a negative
   margin-bottom to push it down 10px. Scoped to .plan-pages--compact
   only so the Primary Page Design row (row 1) is untouched. */
@media (max-width:760px){
  .plan-modal .plan-card--website .plan-pages--compact .plan-pages-amount{
    top:10px !important;
  }
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__icon{
    margin-bottom:-30px !important; /* v1015: was -36px - Dave felt the
      icon ended up sitting too low/floating in a big empty gap below
      the price and counter. Pulled it back up 6px (still clears the
      price by ~3.7px measured live, just tighter). */
  }
}

/* v956: mobile's before/after divider arrows and connecting line were
   stuck on an old shared dark rule (.handle, .mobile-phone-divider span
   { color:#7E3187 }) from before Dave's later desktop-only fix that
   brightened .handle/.handle span's arrow color to #c7cace and
   .divider::before's line to solid #c7cace for readability against
   dark hero imagery. That later fix only targeted the desktop
   selectors, so mobile never got it - leaving the mobile arrows/line
   muted and "almost impossible to see" per Dave's report. Matching
   mobile to the exact same final desktop values (dark glass disc stays
   dark/unchanged - that part was fine - only the arrow glyph color and
   connecting line brighten). */
.mobile-phone-divider span{
  color:#c7cace !important;
}
.mobile-phone-divider::before{
  background:#c7cace !important;
}

/* v958: .comparison-card had overflow:hidden on mobile (leftover from an
   older layout), which would clip the phone-scene image's upward bleed
   before it could reach .copy-block's paragraph above it. Confirmed via
   computed style this card has no visible chrome on mobile (transparent
   background, no border, no shadow - border-radius is moot with nothing
   to clip against), so allowing overflow is visually safe. */
@media (max-width:760px){
  .comparison-card{
    overflow:visible !important;
  }
}

/* v958: give the paragraph above and the CTA button below explicit
   stacking priority over .mobile-phone-compare (z-index:1, set above),
   so wherever the phone image's fade bleeds into their space, their
   own text/button paint on top and stay fully legible - the fade only
   shows through in the open gap, reading as tucking underneath them. */
@media (max-width:760px){
  .copy-block{
    position:relative;
    z-index:2;
  }
  /* v963: a higher-specificity rule (html body .comparison-side-cta.
     comparison-side-cta--mobile{ z-index:auto !important; position:
     static !important; }) elsewhere in the file was beating a plain
     .comparison-side-cta--mobile !important rule on specificity alone
     (0,2,2 vs 0,1,0) - !important doesn't fix a specificity gap, only
     a source-order tie at EQUAL specificity. Matched the exact same
     selector chain here (also !important) so source order (this one
     is later) decides the tie instead. */
  html body .comparison-side-cta.comparison-side-cta--mobile{
    position:relative !important;
    z-index:2 !important;
  }
}

/* v964: Dave asked to halve two mobile-only gaps: header-to-body-copy
   (measured live at 25px via .lead's margin-top) and body-copy-to-
   phone-device (measured live at 50px, from .lead's own margin-bottom
   plus .mobile-phone-compare's 20px margin-top). Halved both. */
@media (max-width:760px){
  .copy-block .lead{
    margin-top:12px !important;
  }
  /* v965: the lead-to-phone 50px gap turned out to be THREE stacked
     sources, not just .mobile-phone-compare's margin - live-measured:
     .copy-block margin-bottom (24px) + .comparison-card padding-top
     (6px, left alone) + collapsed max of .mobile-safe-preview's
     margin-top (10px) and .mobile-phone-compare's margin-top (20px,
     already trimmed to 5px above). Halving needed both of the other
     two contributors too. */
  .copy-block{
    margin-bottom:12px !important;
  }
  .mobile-safe-preview{
    margin-top:5px !important;
  }
  .mobile-phone-compare{
    margin-top:5px !important;
  }
}

/* v969: info-pop-modal panels were anchored next to their trigger button
   via JS (positionInfoPopPanel()), which computed its overflow-clamping
   math using an assumed 420px panel width - but the actual CSS width is
   520px (min(520px,92vw), set later in the cascade for v685's h2-widow
   fix). That 100px mismatch let the panel overflow off the right edge
   whenever its trigger sat anywhere near the right side of the screen,
   exactly as Dave reported. Rather than patch the JS math, reverting to
   simple viewport-centering on desktop per his explicit ask - !important
   here beats the JS's inline position/left/top/bottom, so it centers
   regardless of where the trigger is. Mobile is untouched. */
@media (min-width:761px){
  .info-pop-modal__panel{
    position:fixed !important;
    left:50% !important;
    top:50% !important;
    right:auto !important;
    bottom:auto !important;
    transform:translate(-50%, -50%) !important;
    margin:0 !important;
  }
}

/* v970: Dave noticed the "Package" popup (.plan-modal__panel, 780px)
   and the "Project Details" popup (.start-modal__panel, 980px) were
   two different widths - a 200px inconsistency between steps 1 and 2
   of the same flow. Standardized to 980px (matching Project Details,
   since its two-column Name/Email/Phone/Business fields actually need
   the room - shrinking that one would cramp the form). Desktop only. */
@media (min-width:761px){
  .plan-modal__panel{
    width:min(980px, 94vw) !important;
  }
}

/* v972: Dave's ask on the "Web Change Requests" checkbox list
   (Text/copy, Photo, Add/remove sections, Color, Add logo, Font, Other):
   1) checkboxes were rendering with the browser's native appearance,
      which shows as a bulky, pure-white box regardless of the CSS
      background/border we'd set for it - the 13px width/height from
      v927 wasn't fully honored either since native controls resist
      sizing. Switched to a fully custom appearance:none checkbox so
      every property here actually takes effect.
   2) sized ~15% smaller than the old 13px mobile target (13px -> 11px);
      desktop gets its own explicit 13px (previously unset/native-only).
   3) unselected state uses the same "screen" blend trick as the
      before/after divider arrows elsewhere in this file - a translucent
      accent blue that reads clearly against the dark blue selected
      panel without the stark, distracting solid white.
   4) checked state flips to a solid accent-blue box with a small white
      checkmark drawn via ::after, on both mobile and desktop. */
.change-checks input[type="checkbox"]{
  -webkit-appearance:none !important;
  appearance:none !important;
  width:13px !important;
  height:13px !important;
  min-width:13px !important;
  padding:0 !important; /* v1007: root cause of the "double size" checkbox
    bug - the generic ".start-form input{padding:12px 13px}" rule (meant
    for real text fields) was also landing on these checkboxes, and since
    that padding alone (26px) is bigger than the intended 13px width, the
    browser had no choice but to expand the box to fit it (13+13+borders
    = 28px, exactly what Dave was seeing) regardless of the width:13px
    rule right next to it. Zeroing padding here lets width:13px actually
    take effect. */
  margin:0 !important;
  flex:none !important;
  border-radius:3px !important;
  border:1.5px solid rgba(255,255,255,.55) !important;
  background:rgba(126,49,135,.35) !important;
  mix-blend-mode:screen !important;
  position:relative !important;
  cursor:pointer !important;
}
.change-checks input[type="checkbox"]:checked{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  mix-blend-mode:normal !important;
}
.change-checks input[type="checkbox"]:checked::after{
  content:"" !important;
  position:absolute !important;
  left:3.5px !important;
  top:1px !important;
  width:3px !important;
  height:6px !important;
  border:solid #ffffff !important;
  border-width:0 1.5px 1.5px 0 !important;
  transform:rotate(45deg) !important;
}
@media (max-width:760px){
  .change-checks input[type="checkbox"]{
    width:11px !important;
    height:11px !important;
    min-width:11px !important;
    padding:0 !important; /* v1007: same padding-collision fix, mobile size */
    border-radius:2.5px !important;
  }
  .change-checks input[type="checkbox"]:checked::after{
    left:2.8px !important;
    top:0.5px !important;
    width:2.5px !important;
    height:5px !important;
  }
}

/* v977: "Continue to Secure Checkout" button was left-aligned on
   mobile, per Dave's ask centering it (and its "We will get back to
   you ASAP!" note) on mobile only - desktop untouched. */
@media (max-width:760px){
  .start-form__submit-row{
    display:flex !important;
    flex-direction:column !important;
    align-items:center !important;
    text-align:center !important;
  }
}

/* v988: .account-flow-choice cards (Create Account / Log In / Continue as
   Guest tiles on Step 1) were using --pv-card (#f3f5f6), nearly identical
   to the modal panel's own background (--pv-panel #f6f7f8) - per Dave's
   ask the tiles read as "floating text" with no visible boundary.
   Darkened just these three cards; the shared --pv-card variable and
   every other card type that uses it (price-card, homepage-choice,
   service-option, etc.) are untouched. Selected/hover state (which
   switches to the accent-blue "selected" look) is untouched too - only
   the resting state was the problem. */
.account-flow-modal .account-flow-choice{
  background-color:#e6e9eb !important;
}

/* v992: when a financed payment plan (3/6/12mo) is selected, the price
   cell in the "Primary Page Design" row grows from one line ("$590") to
   two ("$57/mo" + "for 12 months"), but .plan-row__desc's margin-top
   was a fixed -24px tuned only for the one-line state - with the taller
   price cell, the visible gap between "for 12 months" and the "$590
   for complete home page design..." paragraph below grew to ~22px.
   Per Dave's ask (measuring from the icon/price block down to that
   paragraph), halved it - pulling the paragraph up further only in
   this two-line financed state, mobile only. Pay-in-full state
   (untouched selector) keeps its original -24px. */
@media (max-width:760px){
  .plan-modal .plan-card--website .plan-summary__row--compact:has(.plan-base-payment-note) .plan-row__desc{
    margin-top:-35px !important;
  }
}

/* v993: "Standalone Website Care" title was wrapping "Standalone
   Website" / "Care" on mobile - per Dave's ask, narrowed the text
   block just enough to force "Website" down to line 2 instead, giving
   "Standalone" / "Website Care". Measured word-widths at this font:
   "Standalone" alone ~179px, "Website Care" together ~210px,
   "Standalone Website" combined ~314px - 235px sits safely between
   those so it always wraps at the right word. Scoped to the
   hosting-care plan state only (that's the only plan using this
   title), mobile only - desktop and every other plan title untouched. */
@media (max-width:760px){
  .plan-modal.is-plan-hosting-care #planModalTitle{
    max-width:235px !important;
  }
}

/* v1049: 'Standalone Website Care' title was wrapping to two lines on
   desktop (480px cap from v1013, which was tuned to avoid overlapping
   the plan-modal-preview laptop/phone mockup on the other plan states).
   The hosting-care plan hides that preview entirely (see the
   .plan-modal.is-plan-hosting-care .plan-modal-preview{display:none}
   rule above), so there is nothing to overlap here - widened just this
   title, just on desktop, scoped to hosting-care only. Other plan
   titles (which still share the preview) are untouched. */
@media (min-width:961px){
  .plan-modal.is-plan-hosting-care #planModalTitle{
    max-width:720px !important;
  }
}

/* v993: small "done" checkmarks for the plan-modal package summary -
   always-on next to "Web Design/Coding" (the primary page is included
   by default no matter what), and toggled on next to "Additional
   (Inside) Pages" once the page counter goes above 0. Per Dave's ask:
   small, subtle, no box/circle background - reusing the same bare
   checkmark glyph already used in the start-modal summary
   (.summary-check-icon). Desktop gets a small negative margin nudge on
   the pages label so the added glyph doesn't crowd the info button
   already sitting there. */
.plan-check-icon{
  display:inline-block;
  vertical-align:middle;
  margin-left:6px;
  color:#8b969c;
  opacity:.85;
  position:relative;
  top:-1px;
}

.plan-check-icon.is-hidden{
  display:none !important;
}

.plan-check-icon--title{
  color:#7E3187;
}

.plan-check-icon--pages{
  color:#7E3187; /* v1010: was inheriting the base .plan-check-icon
    gray (#8b969c), one shade off from the title checkmark's blue
    (#7E3187) right above it - Dave wants them identical. */
}

@media (min-width:761px){
  .plan-modal .plan-card--website .plan-summary__row--compact .logo-addon-heading__label{
    margin-right:4px;
  }
}

/* v994: "$49/mo"-style price text in the service/care option pills was
   reported as still reading tiny on mobile. Traced the live cascade -
   the current code already wins at 30px (a v897-era chain of size
   bumps: 15px -> 19px -> 24px -> 30px), which is larger than most
   other text on the page, so this is very likely a stale/un-redeployed
   Netlify build rather than a code issue. Bumping once more anyway as
   a safety margin since it costs nothing. */
@media (max-width:760px){
  .plan-modal .plan-card .care-cell > .service-option > b,
  .plan-modal .plan-card .care-cell > .care-option > b{
    font-size:34px !important;
  }
}

/* v995: after the v994 size bump, this price text read visibly bolder
   than the other dollar amounts on the page even though both compute
   to the same 500 weight - larger type at the same weight number reads
   heavier. Stepped the weight down per Dave's ask so it matches the
   other prices' visual boldness at this larger size. */
@media (max-width:760px){
  .plan-modal .plan-card .care-cell > .service-option > b,
  .plan-modal .plan-card .care-cell > .care-option > b{
    font-weight:400 !important;
  }
}

/* v997: scrolling client-logo marquee inside the "Logo Ad-on" card,
   desktop only per Dave's ask (not enough room on mobile). Text stays
   in a left column (padding-right reserves space); the marquee sits in
   a fixed-width zone on the right, clipped by its own viewport so the
   logo strip appears to scroll continuously right-to-left and "die
   into" a vertical accent-blue line at the left edge of that zone -
   the line is just a static divider positioned exactly where the
   scrolling viewport gets clipped, so logos visually vanish there.
   Seamless loop: the track holds two back-to-back copies of the same
   strip image and animates from translateX(0) to translateX(-50%) -
   at the exact halfway point the second copy is pixel-identical to
   where the first one started, so the loop has no visible seam. */
@media (min-width:761px){
  .plan-modal .plan-card--logo{
    position:relative;
    overflow:hidden;
  }

  /* v1006: the reserved marquee width used to live on the whole card as
     padding-right, which also squeezed the heading row's grid (checkbox
     + "Logo Ad-on" + price) down to a much narrower box - the price,
     sitting in that grid's "auto" column, ended up landing well short of
     the card's true right edge instead of flush with it like the price
     badges in the cards above. The marquee only occupies a lower band of
     the card (not the heading row), so the reserved space only actually
     needs to keep the DESCRIPTION text from running under it - moved the
     padding-right there instead and let the heading row use the full
     card width so its price aligns exactly like the others.
     v1007 fix: the first pass used ".plan-modal .logo-addon" (2 classes),
     which loses the specificity contest to the pre-existing
     ".plan-modal .plan-card--logo .logo-addon{padding:3px 0 !important}"
     rule (3 classes) elsewhere in this file - that rule's "padding:3px 0"
     was silently winning and erasing the padding-right entirely, which
     is why the description text ran straight under the scrolling logos
     again. Matched the higher-specificity selector so this actually
     wins. */
  .plan-modal .plan-card--logo .logo-addon{
    padding-right:370px !important;
    box-sizing:border-box !important;
  }

  .logo-addon-marquee{
    position:absolute;
    top:0;
    right:0;
    bottom:0;
    width:370px;
    pointer-events:none;
  }

  .logo-addon-marquee__line{
    position:absolute;
    left:0;
    bottom:24px;
    height:30%;
    width:1px;
    background:#7E3187;
    z-index:2;
  }

  .logo-addon-marquee__viewport{
    position:absolute;
    top:0;
    right:0;
    bottom:0;
    left:1px;
    overflow:hidden;
  }

  .logo-addon-marquee__track{
    display:flex;
    align-items:flex-end;
    height:100%;
    width:max-content;
    padding-bottom:16px;
    animation:logoAddonMarquee 84s linear infinite reverse;
    will-change:transform;
  }

  .logo-addon-marquee__img{
    display:block;
    height:40%;
    width:auto;
    flex:0 0 auto;
  }

}

@keyframes logoAddonMarquee{
  from{ transform:translateX(0); }
  to{ transform:translateX(-50%); }
}

/* v1024/v1026: scrolling client-logo marquee on mobile (previously
   hidden entirely at v997 for lack of room), narrower than desktop's
   370px zone.
   v1026 follow-up per Dave: v1024 had reserved the padding-right on the
   ENTIRE .logo-addon text block, which pinched "Need a better logo?..."
   and "Custom logo design: $149" down to half-width along with the fine
   print - he only wanted the small fine-print paragraph narrowed, with
   the headline/price running the full card width (which also lets
   "Need a better logo?..." wrap to 2 lines instead of 3, since it now
   has the full width to work with).
   v1028: v1027 tried moving the marquee below the text as a full-width
   band instead - Dave didn't want that, reverted back to this side-
   column layout (marquee beside the narrowed fine print, right where it
   was at v1026). */
@media (max-width:760px){
  .plan-modal .plan-card--logo{
    position:relative !important;
    overflow:hidden !important;
  }
  .plan-modal .plan-card--logo .logo-addon small{
    display:block !important;
    padding-right:42% !important;
    box-sizing:border-box !important;
  }
  .logo-addon-marquee{
    display:block !important;
    position:absolute !important;
    top:0 !important;
    right:0 !important;
    bottom:0 !important;
    width:40% !important;
    pointer-events:none !important;
  }
  .logo-addon-marquee__line{
    position:absolute !important;
    left:0 !important;
    bottom:20px !important;
    height:26% !important;
    width:1px !important;
    background:#7E3187 !important;
    z-index:2 !important;
  }
  .logo-addon-marquee__viewport{
    position:absolute !important;
    top:0 !important;
    right:0 !important;
    bottom:0 !important;
    left:1px !important;
    overflow:hidden !important;
  }
  .logo-addon-marquee__track{
    display:flex !important;
    align-items:flex-end !important;
    height:100% !important;
    width:max-content !important;
    padding-bottom:14px !important;
    animation:logoAddonMarquee 84s linear infinite reverse !important;
    will-change:transform !important;
  }
  .logo-addon-marquee__img{
    display:block !important;
    height:28.9% !important;
    width:auto !important;
    flex:0 0 auto !important;
  }
}

/* v1009: "Additional Notes / Questions concerning your new website"
   label - Dave reported the wrapped second line almost touching the
   first on mobile, plus a lone-word widow ("website"). Forced a break
   after "Questions" (mobile-only element, hidden on desktop by default)
   and loosened line-height, scoped entirely to max-width:760px so
   desktop's existing single/wrapped layout is untouched. */
.mobile-only-break{
  display:none;
}
@media (max-width:760px){
  .mobile-only-break{
    display:inline;
  }
  .notes-questions-label{
    line-height:1.5 !important;
    display:inline-block !important;
  }
}

/* v1008: pushing the "Additional Inside Pages" icon down (via
   margin-bottom above) to clear the "$18/mo for 12 months" price also
   pushed it into the description paragraph below, which sits on its own
   grid row (row 3) right after the icon's row. Nudging this paragraph
   down to give the icon room on both sides without shrinking it (Dave
   explicitly asked for this icon's current 75px size in an earlier
   pass) or letting it collide with either neighbor. Mobile only. */
@media (max-width:760px){
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__desc{
    margin-top:28px !important; /* v1015: was 34px, tightened 6px to
      match the icon moving up the same amount, keeping ~4px clearance. */
  }
}

/* v1012: since narrowing the "Page X title" dropdown (v980), the
   "Other" text field it reveals was stacking full-width BELOW it,
   which made the row taller than it needs to be with a lot of wasted
   space to the right of the now-short dropdown. Dave asked for it to
   sit adjacent to the dropdown instead, narrower, same row. Desktop
   only (mobile keeps the original stacked layout, which makes more
   sense on a narrow screen anyway). */
@media (min-width:761px){
  .start-modal .inside-page-block__grid label.full:has(.inside-page-title-select){
    display:flex;
    flex-wrap:wrap;
    align-items:center;
    column-gap:12px;
  }
  .start-modal .inside-page-block__grid label.full:has(.inside-page-title-select) > span{
    flex:0 0 100%;
  }
  .start-modal .inside-page-block__grid label.full:has(.inside-page-title-select) .inside-page-title-select{
    flex:0 0 auto;
    margin-top:0;
  }
  .start-modal .inside-page-block__grid label.full:has(.inside-page-title-select) .inside-page-title-other{
    flex:1 1 220px;
    max-width:280px;
    margin-top:0 !important;
  }
}

/* v1023: Dave reported the "Primary Page Design" price ($57/mo) and the
   "Additional (Inside) Pages" price ($18/mo) rendering inconsistently on
   mobile - one flush right, one reading left. Root cause: an unscoped
   desktop rule (v696, line ~15641) sets "grid-column:4 !important" on
   both #planBasePrice and .plan-pages-amount with NO mobile reset for
   the ID-qualified selector (only a lower-specificity, non-ID version
   got reset at ~760px). Since both are position:absolute grid items
   with an explicit grid-column, their containing block is that (4th,
   rightmost) grid track - not the row - so any left/right offset was
   being measured against a sliver of space way over on the right side,
   not the actual card. Confirmed live via offsetParent + computed
   grid-column before landing on this fix. Reset grid-column/row back to
   the single mobile column here so the containing block is the full
   row width, then left-align both. Mobile only - desktop untouched. */
@media (max-width:760px){
  .plan-modal .plan-card--website .plan-summary__row--compact,
  .plan-modal .plan-card--website .plan-pages--compact{
    position:relative !important;
  }
  .plan-modal .plan-card--website #planBasePrice,
  .plan-modal .plan-card--website .plan-pages--compact .plan-pages-amount{
    grid-column:1 !important; /* avoids the containing-block bug from the
      unscoped desktop "grid-column:4" rule - see v1023 note history */
    grid-row:auto !important;
    position:absolute !important; /* v1035: Dave wants these back in the
      upper-right of each row (matching the Monthly Website Care price
      pattern), not stacked left below the description like v1023/v1027
      left them. Reverting to a top-right anchor. */
    left:auto !important;
    right:0 !important;
    top:0 !important;
    text-align:right !important;
    justify-self:end !important;
    display:block !important;
    margin:0 !important;
  }
  .plan-modal .plan-card--website .plan-pages--compact .plan-pages-amount{
    top:7px !important; /* v1037: "$18/mo" was sitting 7px above the
      "ADDITIONAL (INSIDE) PAGES" sub-head instead of level with it
      (measured live: price top 407.1 vs label top 414.1) - nudged down
      to match. Laptop/phone icon below is untouched (separate rule,
      not affected by this). Scoped to this row only - the Primary Page
      Design row's price was already correctly aligned with its own
      label. */
  }
}

/* v1025: "VIEW PROPOSED WEBSITE" button added to the Primary Page Design
   row, in the blank space below the "$590/mo" price (desktop only - Dave
   asked for this specific row to get its own direct link to the after-
   site preview, same target as the existing "SEE YOUR NEW WEBSITE"
   links elsewhere on the page, so it stays correct regardless of how
   many inside pages a client's project ends up including - the preview
   is always the one built site). New, isolated class name rather than
   reusing .comparison-side-cta__btn, which has a dozen+ scattered
   override points elsewhere in this file and is too risky to share. */
.plan-row-preview-btn{
  display:none;
}
@media (min-width:761px){
  .plan-modal .plan-card--website .plan-summary__row--compact{
    position:relative !important;
  }
  .plan-row-preview-btn{
    display:inline-flex !important;
    align-items:center;
    justify-content:center;
    position:absolute !important;
    grid-column:4;
    top:30px !important; /* v1029: was 52px, which pushed the button below
      the row's own bottom edge, landing it right on top of the divider
      line for the row below - moved up so it sits directly under the
      "$590 for complete home page..." price, still inside this row. */
    right:0 !important;
    padding:6px 12px !important; /* v1029: was 9px 16px - felt oversized, shrunk it down */
    border:1px solid rgba(126,49,135,.55) !important;
    border-radius:999px !important;
    background:transparent !important;
    color:#1c242a !important;
    font:600 9px/1 "Plus Jakarta Sans", Arial, sans-serif !important; /* v1029: was 10px */
    letter-spacing:.07em !important;
    text-transform:uppercase !important;
    text-decoration:none !important;
    white-space:nowrap !important;
    transition:background .2s ease, color .2s ease !important;
  }
  .plan-row-preview-btn:hover,
  .plan-row-preview-btn:focus-visible{
    background:#7E3187 !important;
    border-color:#7E3187 !important;
    color:#fff !important;
  }
}

/* v1034: same "narrow desktop window" (761-900px) disaster as the nav
   header, hitting the plan modal's Primary Page Design / Additional
   Pages rows too - "PRIMARY PAGE DESIGN" label overlapping the "$590..."
   paragraph, tiny/misplaced icon, huge dead gap before the "$190 addl."
   text. Root cause is the same family of bug: #planBasePrice and
   .plan-pages-amount carry competing grid-column assignments from
   several different rules gated at different breakpoints (761, 860,
   900, 901...), and depending on which one wins at a given width, the
   row's implicit grid track generation gets distorted, which is what
   collapses the label/desc rows on top of each other. Rather than keep
   chasing individual conflicting rules across this file, this block
   fully re-specifies the row as simple stacked block flow for exactly
   this width band - no grid, no absolute positioning, so it physically
   cannot overlap. Appended last so it wins any specificity ties.
   True mobile (<=760) and full desktop (901px+) already render
   correctly and are untouched. */
@media (min-width:761px) and (max-width:900px){
  .plan-modal .plan-card--website .plan-summary__row.plan-summary__row--compact,
  .plan-modal .plan-card--website .plan-pages.plan-pages--compact{
    display:block !important;
    position:relative !important;
    padding-right:0 !important;
    grid-template-columns:none !important;
    grid-template-areas:none !important;
  }
  .plan-modal .plan-card--website .plan-summary__row--compact .logo-addon-heading__label,
  .plan-modal .plan-card--website .plan-pages--compact .logo-addon-heading__label{
    display:block !important;
    grid-column:auto !important;
    grid-row:auto !important;
    margin:0 0 10px !important;
  }
  .plan-modal .plan-card--website .plan-row__icon,
  .plan-modal .plan-card--website .plan-summary__row--compact .plan-row__icon,
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__icon{
    display:block !important;
    position:static !important;
    grid-column:auto !important;
    grid-row:auto !important;
    margin:0 0 10px !important;
    transform:none !important;
    width:36px !important;
    height:36px !important;
  }
  .plan-modal .plan-card--website .plan-row__desc,
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__pages-body,
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__desc{
    display:block !important;
    position:static !important;
    grid-column:auto !important;
    grid-row:auto !important;
    padding-left:0 !important;
    border-left:0 !important;
    margin:0 0 10px !important;
    max-width:none !important;
    width:100% !important;
  }
  .plan-modal .plan-card--website #planBasePrice,
  .plan-modal .plan-card--website .plan-pages--compact .plan-pages-amount{
    display:block !important;
    position:static !important;
    grid-column:auto !important;
    grid-row:auto !important;
    text-align:left !important;
    margin:0 0 10px !important;
    transform:none !important;
    top:auto !important;
    right:auto !important;
    left:auto !important;
  }
  .plan-modal .plan-card--website .plan-pages--compact .page-stepper{
    margin:6px 0 10px !important;
  }
  /* the preview button's own absolute-positioned layout assumes the
     full desktop grid - rather than reinvent it for this cramped
     in-between width, just hold it back until 901px+ where the row
     layout is clean again. */
  .plan-row-preview-btn{
    display:none !important;
  }
}

/* v1038: after lightening the topbar's own dark overlay (v1036), the 3
   outline nav buttons (View Your New Site / Contact / FAQ - "Start
   Project" has its own solid navy background via .nav-start and is
   unaffected) got harder to read since they'd been relying on that
   overlay's darkness for contrast against their transparent fill.
   Dave asked for a touch of dark tint behind them instead, ~25% black,
   desktop only. First pass targeted ".wg-nav .pill" - these buttons are
   actually ".nav-btn" (nav-proposed/nav-contact/nav-faq), which carry
   their own "background:transparent !important" at a higher-specificity
   "header.wg-topbar nav.wg-nav a.nav-btn"-style selector, so the .pill
   rule never matched anything. Matched that same selector pattern here
   instead so this actually wins. */
@media (min-width:761px){
  header.wg-topbar nav.wg-nav a.nav-btn:not(.nav-start):not(:active):not(:hover):not(:focus-visible){
    background:rgba(0,0,0,.12) !important;
  }
}

/* v1040: "View Your New Site / Contact / FAQ" already turn steel blue
   (#7E3187) on desktop :hover, but touch devices don't reliably fire
   :hover on tap the way a mouse does - Dave wants the same steel-blue
   feedback on touch/mobile too. Added :active (the touch-equivalent
   state that DOES fire reliably on tap) alongside the existing hover/
   focus rules. Note: these 3 buttons only render at 761px+ (true phone
   widths <=760 use the hamburger menu instead, where they don't exist),
   so this is left unscoped/global rather than wrapped in a max-width
   media query - it covers touch on tablets and narrow browser windows,
   which is where Dave has actually been testing, without needing to
   guess an exact breakpoint. */
header.wg-topbar nav.wg-nav a.nav-proposed:active,
header.wg-topbar nav.wg-nav a.nav-scope:active,
header.wg-topbar nav.wg-nav a.nav-contact:active{
  background:#7E3187 !important;
  border-color:#7E3187 !important;
  color:#fff !important;
}

/* v1038: "We will get back to you ASAP!" note under Secure Checkout -
   center it under the button on mobile only per Dave's ask. Desktop
   stays flush-left under the button (v879 behavior, untouched). */
@media (max-width:760px){
  .start-form__submit-row{
    align-items:center !important;
  }
  .start-form__submit-note,
  .homepage-choice.is-active .start-form__submit-note,
  .start-modal__panel .start-form__submit-note{
    text-align:center !important;
    align-self:center !important;
  }
}

/* v1040 EXPERIMENT: thin 7px gap between the full-bleed image-tile strips
   ("What changes beyond the look" 6-tile row + "Included website
   foundation benefits" 4-tile row) so the page background shows through
   between tiles, per Dave's ask to preview this look. Desktop only -
   scoped so it doesn't disturb the deliberate edge-to-edge/touching
   mobile stacked layout (both sections have their own mobile gap:0
   rules that stay untouched). Outer edges still flush to the browser
   edge since gap only affects space between flex items, not the ends. */
@media (min-width:761px){
  .value-intro + .notes,
  .notes{
    gap:7px !important;
  }
  .included-benefits{
    gap:7px !important;
  }
}

/* v1041: FIX - the "$XX/mo" inline price wired into the investment
   card's comparison sentence (v1037/v1038) accidentally inherited the
   broad ".investment-card span" eyebrow-label styling (block display,
   gold/blue color, bold, uppercase, letter-spacing) since it's just a
   plain <span> living inside .investment-card. Dave never asked for
   that - he wants it flowing as a normal continuation of the sentence,
   same weight/color/size as the rest of the paragraph, no line break.
   Reset explicitly, scoped to this one span only. */
#landingFinancedPriceInline{
  display:inline !important;
  color:inherit !important;
  font-size:inherit !important;
  font-weight:inherit !important;
  letter-spacing:normal !important;
  text-transform:none !important;
  margin:0 !important;
}

/* v1043: ROOT-CAUSE FIX for the footer contact-form layout "disaster"
   Dave reported across mid-range browser widths (roughly 761-1320px).
   The footer had accumulated 3 separate, staggered wrap breakpoints over
   time (761/1180/1320px) that disagreed with each other on form width
   and margins, so as the window narrowed the form would stretch/shrink
   inconsistently and then abruptly snap to a different layout at each
   boundary. On top of that, .wg-webyay-footer-mark and the cursive
   signature are position:absolute, pinned to the bottom-right corner of
   the whole footer - fine on wide desktop where the footer is short and
   wide, but once the form wraps onto its own row (making the footer
   taller), those absolutely-positioned elements had no awareness of the
   new taller layout and could overlap the wrapped form/brand content.
   Mobile (<=760px) already solves this correctly by converting both
   elements to normal flow (position:relative) so they just stack in
   order - this borrows that same proven approach for the whole tablet/
   mid-desktop range instead of patching each breakpoint separately.
   One clean breakpoint (761-1320px), one consistent result at every
   width inside it. True desktop (1321px+) and mobile (<=760px) are
   untouched. */
@media (min-width:761px) and (max-width:1850px){
  .wg-footer-inner{
    flex-wrap:wrap !important;
    align-items:flex-start !important;
    gap:32px !important;
  }

  .wg-footer-brand{
    flex:1 1 auto !important;
  }

  .wg-footer-social{
    margin-left:0 !important;
    align-self:flex-end !important;
  }

  .wg-footer-form{
    width:100% !important;
    max-width:480px !important;
    margin-left:0 !important;
    margin-right:0 !important;
    margin-top:8px !important;
    align-self:flex-start !important;
  }

  .wg-footer .wg-cursive-signature-wrap{
    position:relative !important;
    right:auto !important;
    bottom:auto !important;
    margin-top:20px !important;
  }

  .wg-webyay-footer-mark{
    position:relative !important;
    right:auto !important;
    bottom:auto !important;
    margin:24px 0 0 0 !important;
  }

  .wg-footer{
    padding-bottom:54px !important;
  }
}

/* v1048: EXPERIMENT (supersedes v1047) - reverse the gray/white relationship
   by redefining the shared --pv-panel / --pv-card custom properties instead
   of patching individual selectors. These two variables drive every panel
   and card across ALL modal types (plan-modal, start-modal, account-flow-modal,
   detail-modal, info-pop-modal, inline-thank-you) via the shared :root block
   and the big :is(...) rule around line 17568, plus .start-modal .inside-page-block
   and .plan-pages (the "Additional (Inside) Pages" row). Redefining at the
   variable level - rather than re-patching each consumer selector - guarantees
   every popup/tab that reads these vars picks up the same two colors, so
   nothing is left mismatched. v1047's narrow overrides on
   .plan-modal__panel/.plan-card are removed since the variable swap already
   covers them (and now covers the other modals/tabs those overrides missed).
   v1050: Dave asked for the gray about half as light/dark as v1048's
   rgb(233,235,236) - since --pv-panel drives every popup panel (plan-modal,
   start-modal, account-flow-modal, detail-modal, info-pop-modal,
   inline-thank-you) through this one variable, lightening it here keeps
   the overall modal background and every other popup window matching
   automatically, exactly like Dave asked. Distance-from-white halved:
   (255-233,255-235,255-236) = (22,20,19) -> half = (11,10,9.5) ->
   rgb(244,245,246). */
:root{
  --pv-panel:rgb(244,245,246);
  --pv-card:#ffffff;
}

/* v1052: card keyline (the 1px border around .plan-card) was still
   reading as a fairly visible medium gray-blue (#c2c9ce) against the
   new white cards - per Dave's ask, lightened it much further so it
   reads as a subtle hairline rather than a defined outline. */
:root{
  --pv-border:#e6e9eb;
}

/* v911: Dave asked to restore the "domain note" line under the
   Hosting+Web Care / Host existing website description text on DESKTOP
   only - as a sibling <small class="domain-note domain-note-restored">
   after the <em> paragraph (outside the button), NOT inside the button
   like the v875 mobile embedded pill. It inherits the same gray
   .domain-note base style + hover-reveal behavior already used for the
   Design-handoff card's one-off-change-note, so it shows/hides in sync
   with the description text above it on real hover devices, and stays
   visible when its card is selected. This rule hides ONLY the new
   .domain-note-restored elements on mobile so the existing v875
   in-button pill behavior there is completely untouched. */
@media (max-width:760px){
  .plan-modal .plan-card .care-cell > small.domain-note-restored{
    display:none !important;
  }
}

/* v912: Dave clarified the thing he actually wants restored on desktop
   is the clickable "ⓘ Domain note" pill itself (opens the info modal),
   not just descriptive text - the v875 embedded pill only shows on
   mobile now (v909 hides it on desktop for even tile heights). Added a
   SIBLING copy of that same trigger (same data-info-modal wiring) right
   after the <em>, using a distinct --sibling-restored modifier so it
   doesn't collide with the in-button --embedded pill's own rules. It
   already inherits the pre-existing `.care-cell > .service-info-pill`
   base style + the v682 hover-reveal treatment (shows when its card is
   selected or hovered, same as the description text). This rule hides
   ONLY the new sibling pill on mobile - the v875 in-button embedded
   pill there is untouched. */
@media (max-width:760px){
  .plan-modal .plan-card .care-cell > .service-info-pill--sibling-restored{
    display:none !important;
  }
}

/* v913: Dave wants the restored sibling "Domain note" pill (v912)
   smaller, much lighter, on a gray background, with less gap above it -
   scoped ONLY to .service-info-pill--sibling-restored so the mobile
   in-button --embedded pill and the original .service-info-pill chip
   used elsewhere are completely untouched. Also added an explicit hover
   state (accent blue background + white text) since removing the dark
   .18 overlay meant the default .service-info-pill:hover rule no longer
   read clearly against this much lighter chip. */
.plan-modal .plan-card .care-cell > .service-info-pill--sibling-restored{
  margin-top:-8px !important;
  padding:3px 9px !important;
  font-size:9px !important;
  letter-spacing:.02em !important;
  background:rgba(0,0,0,.05) !important;
  border:1px solid rgba(0,0,0,.10) !important;
  color:rgba(28,36,42,.55) !important;
}
.plan-modal .plan-card .care-cell > .service-info-pill--sibling-restored:hover,
.plan-modal .plan-card .care-cell > .service-info-pill--sibling-restored:focus-visible{
  background:var(--gold-bg) !important;
  border-color:var(--gold-bg) !important;
  color:#fff !important;
}

/* v915: the "DOMAIN NOTE" eyebrow label inside the info-pop-modal popups
   was white text (base .small-label default, meant for the dark-themed
   surfaces this label is normally used on) sitting on the modal's light
   off-white panel background - unreadable, per Dave's screenshot. Scoped
   narrowly to .info-pop-modal .small-label only (not the bare .small-label
   rule, which is still correct elsewhere) to avoid the same kind of
   unintended-scope regression as the earlier payment-choice white-label fix. */
.info-pop-modal .small-label{
  color:var(--gold) !important;
}

/* v916: Dave found more white-eyebrow-on-light-popup instances beyond
   the info-pop-modal ones (v915) - audited every .small-label on the
   page against its actual effective background. Two more were white
   text sitting on the same light off-white panel/card background:
   the "Interactive comparison" eyebrow on .comparison-head, and the
   "Detail" eyebrow in .detail-modal__panel (id="detailModalEyebrow").
   Everything else already either has a scoped dark-text override
   (account-flow-modal, start-modal, plan-modal) or is legitimately
   white-on-dark (the homepage hero labels) and is left alone. */
.comparison-head .small-label,
.detail-modal .small-label{
  color:var(--gold) !important;
}

/* v917: Dave wants more breathing room above the new SEO/DNS reassurance
   paragraphs in the domain-note info-pop-modals - they were sitting
   flush against the "Not included" callout box above (base .info-pop-
   modal__panel p rule has margin:0). Scoped to the new
   .info-pop-modal__seo-copy class only, so the base paragraph spacing
   everywhere else in these modals is untouched. */
.info-pop-modal__panel p.info-pop-modal__seo-copy{
  margin-top:18px !important;
}

/* v918: Dave reported the landing pages freezing / refusing to scroll on
   an old iPad. Root cause: every modal's scrollable panel
   (.detail-modal__panel, .plan-modal__panel, .start-modal__panel,
   .info-pop-modal__panel, .account-flow-modal__panel, the shared
   .detail-modal__scroll/.plan-modal__scroll/.start-modal__scroll, and
   .search-results) had overflow:auto but was missing
   -webkit-overflow-scrolling:touch - the property older iOS Safari
   needs to enable native momentum/touch scrolling inside a
   position:fixed overlay. Without it, older iOS builds can render
   finger-drags inside a modal as unresponsive or "stuck." This
   property is a harmless no-op on modern browsers/iOS versions (they
   already scroll natively), so it's safe to add everywhere with zero
   risk to how things look/behave today. */

/* v919: FOUND THE REAL "frozen, can't scroll" bug on Dave's iPad -
   scrolling worked fine below the fold but froze specifically over the
   before/after hero comparison (laptop/phone mockup). Root cause:
   .stage-holder - the entire hero container that wraps the whole
   laptop+phone comparison scene, not just the drag handle - had
   touch-action:none. That tells the browser "don't do ANY native touch
   handling anywhere inside this box," which blocks vertical page
   scrolling for any touch that starts over the hero image, not only
   touches on the actual divider handle. Changed .stage-holder (both the
   base rule and its redundant mobile re-declaration) to
   touch-action:pan-y, so a touch anywhere in the hero scrolls the page
   normally by default. The .divider itself (the small drag handle,
   line ~267) still correctly has touch-action:none so it keeps full
   control the instant a drag actually starts on it - dragging the
   before/after slider is untouched, only the "can't scroll unless I
   touch below the fold" bug is fixed. */

/* v1079: subtle shadow on white project-details tiles (popup #2 / Project Details step)
   so they don't blend into the off-white modal background — Dave's ask, matching the
   same subtle .plan-card treatment added in v1078. Also covers the "web care only" mode,
   since .homepage-approval/.website-care-notes swap labels but reuse the same classes. */
.homepage-approval,
.inside-pages-content,
.logo-brand-details,
.website-care-notes,
.homepage-choice:not(.is-active){
  box-shadow:0 2px 6px rgba(0,0,0,.05) !important;
}

/* v1080: PREVIEW ONLY (template) - Dave's ask to replace the border-top/
   border-bottom separator line between "Website Design" ($590 row) and
   "Additional (Inside) Pages" with two distinct thin-bordered boxes
   inside the "Web Design/Coding" plan-card. The plan-card__title header
   stays exactly where it is now, outside/above both boxes - untouched.
   Kills every border-top/border-bottom variant set on
   .plan-summary__row + .plan-pages across the whole cascade (confirmed
   multiple competing declarations earlier in this file), then draws a
   fresh box around each row.
   v1081 revision per Dave: first pass had text/buttons touching or
   crossing the new outline, so added real internal padding on all 4
   sides (the existing cascade had padding-left:0 baked in, which is
   exactly why content was flush against the left edge). Widened the
   boxes with a small negative side-margin so they read as bigger/roomier
   rather than squeezed inside the card. Halved the 15px gap between the
   two boxes down to ~7-8px. Darkened the border from .14 to .30 opacity
   per "a tad darker outline". */
.plan-modal .plan-card--website .plan-summary__row + .plan-pages,
.plan-summary__row + .plan-pages{
  border-top:0 !important;
  border-bottom:0 !important;
}
.plan-modal .plan-card--website .plan-summary__row.plan-summary__row--compact{
  border:1px solid rgba(28,36,42,.30) !important;
  border-radius:14px !important;
  margin:0 -10px 7px !important;
  padding:9px 10px !important; /* v1086: halved-and-then-some per Dave, was 20px 22px */
}
.plan-modal .plan-card--website .plan-pages.plan-pages--compact{
  border:1px solid rgba(28,36,42,.30) !important;
  border-radius:14px !important;
  margin:0 -10px 13px !important; /* v1087: added 13px bottom margin per Dave - box was flush against the white plan-card's own bottom edge with zero gap */
  padding:9px 10px !important; /* v1086: halved-and-then-some per Dave, was 20px 22px */
}

/* v1082: per Dave - "WEBSITE DESIGN" sub-header (top box) and
   "ADDITIONAL (INSIDE) PAGES" sub-header + its -/0/+ counter (bottom
   box, counter is nested inside the same label span) nudged 12px right,
   12px up inside their new boxes. */
.plan-modal .plan-card--website .plan-summary__row--compact .logo-addon-heading__label,
.plan-modal .plan-card--website .plan-pages--compact .logo-addon-heading__label{
  position:relative !important;
  left:12px !important;
  top:-12px !important;
}

/* v1083: per Dave - "$590 for a complete website design..." description
   was popping out the top of the new outline box, nudged down 10px.
   Scoped tighter (extra .plan-summary__row--compact class) than the
   existing "margin:0 !important" rule on .plan-row__desc so it wins on
   specificity, not just source order. */
.plan-modal .plan-card--website .plan-summary__row.plan-summary__row--compact .plan-row__desc{
  margin-top:3px !important; /* v1106: up 7px from 10px per Dave */
}

/* v1084: per Dave - the "$57/mo for 12 months" price + "View Proposed
   Website" button were touching the new outline box's left edge, moved
   left 10px / down 13px as a pair.
   #planBasePrice already carries transform:translateY(-23px) from
   v705 (matches it to the laptop icon's own upward nudge) - combined
   into one transform (-10px, -10px) rather than stacking a second
   transform, since only the LAST transform declaration applies.
   .plan-row-preview-btn is position:absolute/right:0/top:30px - shifted
   via right+top instead of transform to stay consistent with how it's
   already positioned. */
.plan-modal .plan-card--website #planBasePrice{
  transform:translate(-10px, 2px) !important; /* v1088: measured live - price top was flush (0px gap) with the box's top border, pushed down 12px more so there's real breathing room and it's not "obviously touching" per Dave */
}
@media (min-width:761px){
  .plan-modal .plan-card--website .plan-row-preview-btn{
    right:10px !important;
    top:65px !important; /* v1096: was 43px, moved down 22px more per Dave - "at least 20px away from the cost" above it */
  }
}

/* v1085: per Dave - "$18/mo for 12 months" (Additional Pages price,
   .plan-pages-amount) matched to the same ~10px left shift just applied
   to the Website Design price above it, so both line up the same way
   inside their own boxes.
   v1090 FIX: this rule was transform:translateX-only, which SILENTLY
   REPLACED the row's existing transform:translateY(-18px) from v678
   (line ~16355) instead of adding to it - transform is a single
   property, only the last declaration wins, they don't stack. That's
   exactly why the price ended up "floating in the middle" per Dave's
   report - it lost its vertical anchor entirely. Combined into one
   translate() with both axes: kept the -10px X shift, and went
   further up on Y (-38px, vs the old -18px) per "move it up so it's
   about 15px below the top of the box, not floating in the middle." */
.plan-modal .plan-card--website .plan-pages--compact .plan-pages-amount{
  transform:translate(-10px, -23px) !important; /* v1093: -38px overshot and pushed it above the box entirely - eased back down 15px per Dave */
}

/* v1089: per Dave - measured live, "WEBSITE DESIGN" header text was
   -2px (basically flush/touching) and its laptop/phone icon was -13px
   (literally poking above) relative to the top box's own top border.
   Scoped ONLY to .plan-summary__row--compact (the Website Design box,
   not the Additional Pages box below it, which wasn't flagged) so the
   two rows can be tuned independently. Label gets its own more specific
   override on top of v1082's shared top:-12px; icon gets a heavier
   margin-top on top of v658's base 2px. Both land at ~12-13px gap. */
.plan-modal .plan-card--website .plan-summary__row.plan-summary__row--compact .logo-addon-heading__label{
  top:2px !important;
}
.plan-modal .plan-card--website .plan-summary__row.plan-summary__row--compact .plan-row__icon{
  margin-top:-15px !important; /* v1102: down 8px from the restored -23px per Dave */
  margin-left:-68px !important; /* v1102: left 15px more than the restored -53px per Dave */
}

/* v1091: per Dave - big dead space between the end of the "...site
   needs." paragraph and the bottom of the Additional Pages box,
   compared to the tighter Website Design box above it. Root cause:
   .plan-row__desc sits in a CSS grid row whose height is set by its
   tallest column (the label+counter stack), and with the default grid
   align-self:stretch, the short description's own BOX stretches to
   match that full row height even though its short text only fills the
   top of that box - the empty space Dave's seeing is inside the
   paragraph's own stretched box, not extra padding. align-self:start
   makes the paragraph shrink to its actual text height instead of
   stretching, closing that gap. Scoped to the Additional Pages box only
   - the Website Design row's desc already reads correctly. */
.plan-modal .plan-card--website .plan-pages--compact .plan-row__desc{
  align-self:start !important;
}

/* v1092: per Dave - the "Don't need a website? Get standalone care for
   your existing site instead ->" link/divider (in the Monthly Website
   Care card header) had regressed to wrapping its second line instead
   of reading as one line, and was sitting too close to the price/
   counter next to it. Shifted 60px left via margin (safer than growing
   the grid column's min-width, which historically (v664/v665 notes)
   overflowed the card's right edge) and forced its subtext onto one
   line with nowrap so it can't wrap again regardless of the column's
   measured width. */
.plan-modal .plan-card--care .plan-summary__section-title #switchToCareLink{
  transform:translateX(-60px) !important; /* v1103: switched from margin-left to transform - margin wasn't visibly moving it, matching this exact file's own documented pattern (v678/v705) where margin on a grid item gets absorbed into track sizing instead of visibly shifting it, while transform always renders. */
}
.plan-modal .plan-card--care .plan-summary__section-title #switchToCareLink em{
  white-space:nowrap !important;
}
/* v1103 REAL FIX: the two-line wrap was never a CSS wrapping issue at
   all - index.html has a HARDCODED <br class="mobile-nowrap-break"/>
   between "Get standalone care for" and "your existing site instead ->".
   That's a real line-break tag, not a wrap; white-space:nowrap on the em
   can't remove or override an explicit <br>, which is exactly why the
   first attempt showed "zero change" despite being correctly applied.
   The class name signals this <br> was only ever meant to collapse on
   MOBILE (see v916 history) - desktop was intentionally left two-line
   by original design. Dave now wants one line on desktop too, so hiding
   this specific <br> outright rather than touching the mobile behavior. */
.plan-modal .plan-card--care .plan-summary__section-title #switchToCareLink em br.mobile-nowrap-break{
  display:none !important;
}


/* v1094: per Dave - liked how the "ADDITIONAL (INSIDE) PAGES" label
   already ghosts/un-ghosts based on the counter (v704/v712's
   .is-pages-active class, added by main-v114.js the moment the count
   goes above 0), and wants the same treatment extended to the
   laptop/phone icon, the blue vertical divider line, and the
   description text next to it - faint at 0 pages, full brightness the
   moment one or more pages is selected.
   Rather than touch the JS, used :has() to read that same
   .is-pages-active state from the CSS side: the icon and desc both live
   as siblings of the label inside .plan-pages--compact, so
   ":has(label.is-pages-active)" on the shared parent lets one class
   toggle drive all three elements' opacity together. opacity:.45 fades
   the whole element (text AND the border-left divider line together,
   since opacity applies to the element as a whole, not just its text
   color) to match the label's existing 0.45 alpha ghost. */
.plan-modal .plan-card--website .plan-pages--compact .plan-row__icon,
.plan-modal .plan-card--website .plan-pages--compact .plan-row__desc{
  opacity:.65 !important; /* v1100: .45 read as too ghosted per Dave, eased to a happy medium */
  transition:opacity .15s ease !important;
}
.plan-modal .plan-card--website .plan-pages--compact:has(label[for="additionalPages"].is-pages-active) .plan-row__icon,
.plan-modal .plan-card--website .plan-pages--compact:has(label[for="additionalPages"].is-pages-active) .plan-row__desc{
  opacity:1 !important;
}


/* v1097: per Dave - v1091's align-self:start theory (grid row stretching
   the short paragraph's own box to match a taller sibling column) turned
   out to be WRONG - confirmed applied (verified live in the file) but
   Dave reported zero visible change, twice. Switching to a blunt,
   guaranteed-effective fix instead of a third theory: directly pulling
   the box's own bottom edge up with a firm negative margin, which
   shrinks the visible gap no matter which internal column was actually
   driving the extra height. Scoped to the Additional Pages box only. */
.plan-modal .plan-card--website .plan-pages.plan-pages--compact{
  margin-bottom:13px !important; /* v1104: positive this time, not negative - v1097's -15px overshot the wrong direction and pushed the box OUT of the white card entirely. A positive margin only ADDS space below the box (the white card just grows to fit it), it can't push the box outside its parent the way the negative value did. This is the actual gap Dave asked for between the box and the white panel's bottom edge. */
  padding-bottom:2px !important;
}


/* v1099: per Dave - the two description paragraphs ("$590 for a
   complete website design..." and "$190 addl. each inside page...")
   read too heavy/bold, wants a thinner font weight. Neither paragraph
   had an explicit font-weight anywhere in the cascade (inheriting the
   page's normal/400 weight), so dropped both to 300 (Plus Jakarta Sans
   Light, already loaded as a font file for this template). */
.plan-modal .plan-card--website .plan-row__desc{
  font-weight:300 !important;
}


/* v1105: per Dave - the (i) info button next to "ADDITIONAL (INSIDE)
   PAGES" stopped responding to clicks. Root cause: the laptop/phone
   icon next to it has margin/transform shifts from earlier fixes in
   this same box, and a transformed element gets its own stacking
   context and can paint above plain siblings even with no z-index set -
   it was very likely sitting on top of the info button and eating the
   clicks. Force the info pill onto its own higher layer so it's always
   clickable regardless of what's visually behind it. */
.plan-modal .plan-pages-info-pill{
  position:relative !important;
  z-index:5 !important;
  pointer-events:auto !important;
}


/* v1107: per Dave - semi-bold the lead sentence of each description
   paragraph ("$590 for a complete website design + coding." and "$190
   addl. each inside page design + coding,"). Neither sentence had its
   own element to target on its own, so wrapped each in a new
   .plan-row__desc-lead span in index.html, then weighted just that span
   - the rest of each paragraph stays at the v1099 light (300) weight. */
.plan-modal .plan-card--website .plan-row__desc-lead{
  font-weight:600 !important;
  font-size:12.5px !important; /* v1111 FIX: the span was inheriting a much larger size from somewhere (rendered visibly huge in Dave's screenshot) - pinned explicitly to match the paragraph's own 12.5px so it can't inherit or fall back to anything else. */
  line-height:1.4 !important;
  color:rgba(28,36,42,.78) !important; /* v1111: also pinned color explicitly to match the paragraph exactly - Dave noticed the top paragraph reading lighter than the bottom one, likely the same underlying font-fallback issue rendering with different apparent weight/color at the wrong size. */
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
}


/* v1108: per Dave - the checkmark next to "Web Design/Coding" (the
   big card header) was in the wrong spot - moved in index.html to sit
   just to the right of "WEBSITE DESIGN" (the all-caps sub-header inside
   the box) instead. Gave it its own class (plan-check-icon--sublabel,
   kept plan-check-icon's shared base styling) so it can be positioned
   independently of the title version without affecting anything else
   that still uses plan-check-icon--title elsewhere on the page. */
.plan-modal .plan-card--website .plan-check-icon--sublabel{
  margin-left:6px !important;
  vertical-align:middle !important;
}


/* v1110: per Dave - the checkmark dropped to its own line below
   "WEBSITE DESIGN" instead of sitting beside it. Root cause: #planBaseLabel
   (the "WEBSITE DESIGN" text itself) is display:block (v630 area), so its
   sibling checkmark - even though the checkmark is inline by default -
   gets pushed onto the next line the way any inline content does after a
   block-level element. Making the shared wrapper a flex row fixes this
   properly (flex children ignore their own display:block, they always
   lay out in the flex direction) instead of trying to fake it with
   margins, which would only work for this exact text string's width. */
.plan-modal .plan-card--website .plan-summary__row.plan-summary__row--compact .logo-addon-heading__label{
  display:flex !important;
  align-items:center !important;
  gap:7px !important;
}


/* v1112: per Dave - people weren't noticing the "Start Project" button
   in the main pricing panel, made it 25% larger across the board so it
   reads as more clickable. Base was font-size:14px / padding:12px 22px
   (line ~14668) - scaled both by 1.25x. */
.investment-entry__cta{
  font-size:17.5px !important;
  padding:15px 27px !important;
}


/* v1114: per Dave - the plan-modal footer note (#planNote, the dynamic
   "Website design for [Client] includes secure HTTPS setup..." text)
   was capped at max-width:380px (last of several competing max-width
   overrides in this file, see v647/v658/v659/v939 history), reading as
   a narrow, many-line column. Widened substantially so it spans more of
   the footer's available width and wraps to fewer lines. */
.plan-modal__footer #planNote{
  max-width:700px !important;
}


/* v1115: per Dave - added an (i)-only info button at the end of "...do
   not have changes at this time." on the "Keep proposed website as-is"
   choice, explaining that approving now doesn't lock them out of future
   changes. Reused the existing .info-pop-trigger/[data-info-modal]
   system (same JS already opens/closes any element with that
   attribute, no JS changes needed) but gave it its own class since this
   sits on the dark navy "homepage-choice" card background, not the
   light backgrounds the other info pills were designed for - sized down
   to just the circled-i glyph instead of the full text pill. */
.keep-as-is-info-pill{
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  width:16px !important;
  height:16px !important;
  min-height:0 !important;
  margin:0 0 0 4px !important;
  padding:0 !important;
  border-radius:50% !important;
  border:1px solid currentColor !important; /* v1116: switched from hardcoded white to
    currentColor - this same button now also sits on the light-background
    "I have website changes" card (unselected state), not just the dark
    navy "Keep as-is" card (selected state). currentColor always matches
    whatever text color the surrounding <em> already is in either state,
    so one class works correctly on both light and dark cards. */
  opacity:.85 !important;
  background:transparent !important;
  color:inherit !important;
  font:700 10px/1 "Plus Jakarta Sans", Arial, sans-serif !important;
  letter-spacing:0 !important;
  text-transform:none !important;
  cursor:pointer !important;
  vertical-align:middle !important;
}
.keep-as-is-info-pill:hover{
  opacity:1 !important;
}


/* v1117: per Dave - the "ⓘ Info" text-label buttons (Homepage Changes,
   Care Notes, Access, and the old Project Assets header trigger) read
   as a "circle within a circle": the ⓘ Unicode glyph (U+24D8, a circled
   lowercase i) was rendering INSIDE the button's own separate round
   pill background - two circles stacked. Converted every such trigger
   to the existing .info-pop-trigger--icon-only style (single round
   button, no separate glyph-circle) and swapped the ⓘ character for a
   plain "i" everywhere it's used, so there's exactly one circle, not
   two. Also consolidated the two "Project Assets" info buttons (a
   header one and an inline one, pointing to two separate modals with
   overlapping content) down to the single inline one next to the
   sentence, now covering both topics in one merged popup.
   ("ⓘ Domain note" pills and "ⓘ Files Not Accepted" are untouched -
   Dave's ask was specifically about buttons that say "INFO", not these
   descriptive-label pills.) */
.info-pop-trigger--icon-only{
  font-weight:700 !important;
  font-style:italic !important;
  line-height:18px !important;
  text-align:center !important;
}


/* v1118: real drag-and-drop for the 4 Project Assets upload fields
   (Logo/Brand, Photos, Copy/Documents, Small Video), per Dave's ask.
   Previously these were click-to-browse only (plain <input type="file">)
   even though the dashed-border styling already looked like a dropzone.
   The native "No file chosen" text can't be restyled or renamed by any
   browser - it's fixed OS-level UI - so it's hidden (color:transparent)
   and a custom .file-field__status span is layered on top showing our
   own copy ("Drag & drop or click to choose", swapped for the real
   filename via JS once a file is picked or dropped). The .file-field
   itself is the actual drop target (JS in main-v114.js), highlighted
   here via .is-dragover while a file is being dragged over it. */
.file-field__control{
  position:relative;
  display:block;
}
.start-modal .file-field input[type="file"].file-field__input{
  color:transparent !important;
}
.file-field__status{
  position:absolute;
  left:118px;
  right:12px;
  top:0;
  height:44px;
  display:flex;
  align-items:center;
  pointer-events:none;
  font-size:12px;
  color:rgba(28,36,42,.55);
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.start-modal .file-field.is-dragover{
  background:rgba(126,49,135,.14) !important;
}
.start-modal .file-field.is-dragover .file-field__control input[type="file"]{
  border-color:#7E3187 !important;
  background:rgba(126,49,135,.10) !important;
}
.start-modal .file-field.has-file .file-field__status{
  color:rgba(28,36,42,.55);
  font-weight:400;
}
@media(max-width:760px){
  /* v1189: per Dave - on mobile there's no drag-and-drop, so this status
     text ("Drag & drop or click to choose" / the chosen filename) was
     just overlapping/crowding the "Choose Files" pill in the cramped
     mobile width. Simplest fix: drop the text entirely on mobile and
     keep just the pill button - desktop keeps the status text
     unchanged. */
  .file-field__status{
    display:none !important;
  }
}


/* v1119: per Dave - "We will get back to you ASAP!" was reading flush
   left under the "Secure Checkout" button instead of centered under it.
   .start-form__submit-row is flex-wrap:wrap and the button is wider
   than the note, so once they wrap onto separate lines the note kept
   its default flex-start (left) alignment on its own line instead of
   sharing the button's horizontal center. */
.start-form__submit-row{
  justify-content:center !important;
}
.start-form__submit-note{
  text-align:center !important;
  width:100% !important;
}

/* v1120: per Dave -
   1) Website URL field now spans the full row on its own so
      Create password + Confirm password naturally pair up together
      on the next row instead of Confirm password landing alone.
   2) #accountConfirmPassword was showing a red "invalid" outline on
      page load just because it's empty + required - browsers apply
      :invalid before the user has even typed anything. Neutralized so
      it only looks normal; the existing JS-driven
      .account-password-error banner already handles the real
      mismatch case, so no functionality is lost.
   3) Killed the drop-shadow that appeared on hover for the 3
      account-flow-choice boxes (Create account / Log in / Continue as
      guest) - Dave wants a flat hover state, no shadow. */
.account-flow-form__full-row{
  grid-column:1 / -1 !important;
}
#accountConfirmPassword:invalid{
  border-color:rgba(35,35,35,.14) !important;
  box-shadow:none !important;
}
.account-flow-choice:hover,
.account-flow-choice:focus-visible{
  box-shadow:none !important;
}

/* v1121: pulsing "Start Project" hero CTA - Dave wants it obvious this
   is the one to click on the $/mo pricing card. First pass mistakenly
   animated .plan-submit (the "Next: Project Details" button that lives
   INSIDE the modal flow) - the button on the visible pricing card is
   actually #investmentSeeOptions / .investment-entry__cta. Moved the
   pulse there. Gentle scale pulse synced with a soft outline glow
   breathing in/out, subtle (1.035 max scale) so it doesn't feel
   gimmicky. Respects reduced-motion preference. */
@keyframes investmentCtaPulse{
  0%, 100%{
    transform:scale(1);
    box-shadow:0 0 0 0 rgba(126,49,135,.45);
  }
  50%{
    transform:scale(1.035);
    box-shadow:0 0 0 8px rgba(126,49,135,0);
  }
}
.investment-entry__cta{
  animation:investmentCtaPulse 2.2s ease-in-out infinite;
}
.investment-entry__cta:hover{
  animation:none;
}
@media (prefers-reduced-motion: reduce){
  .investment-entry__cta{
    animation:none;
  }
}

/* v1208: pulsing "Name your project" field on the project-details step -
   per Dave, needs to be obvious this is where to start. Same soft
   breathing-glow language as the investmentCtaPulse button, just applied
   as a border/box-shadow ring since this is an input, not a button. JS
   (main-v114.js) removes .pulse-attention the moment the user types a
   character, so it only pulses while the field is genuinely empty. */
@keyframes projectNamePulse{
  0%, 100%{
    box-shadow:0 0 0 0 rgba(126,49,135,.45);
    border-color:rgba(126,49,135,.4);
  }
  50%{
    box-shadow:0 0 0 8px rgba(126,49,135,0);
    border-color:rgba(126,49,135,.9);
  }
}
.pulse-attention{
  animation:projectNamePulse 2.2s ease-in-out infinite;
}
@media (prefers-reduced-motion: reduce){
  .pulse-attention{
    animation:none;
  }
}

/* v1122: per Dave - password show/hide eye icon on Create/Confirm
   password was invisible. Root cause: the old v193 rule
   (#accountFlowModal .password-toggle .eye-outline/.eye-pupil) painted
   the icon white at ~72% opacity, tuned for when this account form sat
   on a dark background. The form is on a light/white card now, so a
   white icon on a white input was white-on-white. Repainting dark so
   it's visible against the light field, keeping the existing blue
   hover/active accent as-is since that already reads fine on light. */
#accountFlowModal .password-toggle{
  opacity:1 !important;
}
#accountFlowModal .password-toggle .eye-outline{
  stroke:rgba(28,36,42,.88) !important;
  stroke-width:1.8 !important;
}
#accountFlowModal .password-toggle .eye-pupil{
  fill:rgba(28,36,42,.88) !important;
}

/* v1126: per Dave - the red account-password-error banner (used for
   "no email entered", "passwords don't match", etc.) had dark text on
   the red background, low contrast. Switching to white text on that
   red fill only - this is a deliberate, scoped contrast fix on this
   one red banner, not a general white-text change elsewhere. */
.account-password-error{
  color:#ffffff !important;
}

/* v1131: brief confirmation toast shown after clicking the
   email-confirm link, so landing back on the page doesn't feel silent.
   Fixed to the top of the viewport, above every modal (highest z-index
   on the site), fades in/out via opacity+transform rather than
   display:none so the transition is visible. */
.webyay-confirm-toast{
  position:fixed;
  top:18px;
  left:50%;
  z-index:99999;
  transform:translate(-50%, -14px);
  background:#1c242a;
  color:#ffffff;
  padding:12px 22px;
  border-radius:999px;
  font-size:14px;
  font-weight:600;
  letter-spacing:.01em;
  box-shadow:0 18px 42px rgba(0,0,0,.28);
  opacity:0;
  pointer-events:none;
  transition:opacity .3s ease, transform .3s ease;
}
.webyay-confirm-toast.is-visible{
  opacity:1;
  transform:translate(-50%, 0);
}
@media(max-width:600px){
  .webyay-confirm-toast{
    left:12px;
    right:12px;
    transform:translateY(-14px);
    text-align:center;
  }
  .webyay-confirm-toast.is-visible{
    transform:translateY(0);
  }
}

/* v1127: per Dave - the 4 payment-option lines (Pay in full / 3, 6, 12
   monthly pmts) were static text. Now real buttons that jump straight
   into the pricing modal with that exact payment method pre-selected.
   Styled to read the same as the old plain <p> text at rest, with a
   clear hover state (background wash + right-shift arrow fade-in) so
   it's obvious they're clickable. */
.payment-list__link{
  display:flex;
  align-items:center;
  justify-content:flex-start;
  gap:12px;
  width:100%;
  margin:0;
  padding:4px 10px;
  border:0;
  border-radius:999px;
  background:transparent;
  text-align:left;
  font:inherit;
  cursor:pointer;
  color:rgba(246,241,232,.72);
  font-size:15px;
  line-height:1.5;
  transition:background-color .16s ease, color .16s ease;
}

/* v1128: per Dave - the 4 payment rows had way too much vertical air
   between them (button's own padding stacked on top of the list's
   existing gap), and the hover background only rounded the four
   corners a little instead of reading as a full pill. Tightened the
   gap and padding to roughly half the previous spacing, and pushed
   border-radius to 999px (already set above) so the hover fill is a
   true stadium/pill shape at this row height, not a rounded rectangle. */
.payment-list,
.investment-section .payment-list{
  gap:2px !important;
}
/* v1157: per Dave - the bold label ("Pay in full" / "3 monthly pmts" /
   etc.) sat far left and the gray description text sat ~500px away on
   the right because .payment-list__link used justify-content:space-between
   across its 3 flex children (strong, description text, arrow). Switched
   to flex-start with a 12px gap so the pill and its description sit tight
   together on the left as a group, then pushed the arrow to the far right
   with margin-left:auto (below) so its existing hover-reveal behavior is
   unchanged. The label itself is now a fixed-width pill button (all 4 the
   same size) instead of plain bold text. */
.payment-list__link strong{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  flex:0 0 auto;
  width:168px;
  padding:8px 14px;
  border-radius:999px;
  border:1px solid rgba(255,255,255,.28);
  background:rgba(255,255,255,.10);
  color:#fff;
  font-weight:500;
  font-size:14px;
  line-height:1.3;
  text-align:center;
  white-space:nowrap;
}
.payment-list__link .payment-list__arrow{
  margin-left:auto;
  opacity:0;
  transform:translateX(-4px);
  transition:opacity .16s ease, transform .16s ease;
  flex:none;
}
.payment-list__link:hover,
.payment-list__link:focus-visible{
  background:rgba(255,255,255,.08);
  color:rgba(246,241,232,.92);
}
.payment-list__link:hover .payment-list__arrow,
.payment-list__link:focus-visible .payment-list__arrow{
  opacity:1;
  transform:translateX(0);
}

/* Light-card theme context (.investment-section) uses dark text instead
   of the light-on-dark defaults above - match that same dark palette on
   hover instead of inheriting the light-theme hover above. */
.investment-section .payment-list__link{
  color:rgba(32,36,42,.66);
}
.investment-section .payment-list__link strong{
  border-color:rgba(32,36,42,.18);
  background:rgba(32,36,42,.06);
  color:#20242a;
}
.investment-section .payment-list__link:hover,
.investment-section .payment-list__link:focus-visible{
  background:rgba(126,49,135,.10);
  color:rgba(32,36,42,.92);
}

/* v1124: per Dave - "Forgot password?" was reading centered under the
   Back/Log in buttons. Root cause: it's a <button> with no explicit
   grid-column, so it auto-places into a single column track of the
   2-col .account-flow-form grid and browsers give <button> centered
   text by default - the button box itself fills that column's width,
   centering the text within it. Forcing text-align:left + block width
   so it reads flush-left, matching the buttons above it. */
#accountFlowModal .forgot-password-link{
  text-align:left !important;
  display:block !important;
  width:auto !important;
  justify-self:start !important;
}

/* v1124: per Dave - the "Log in to continue" intro paragraph was
   leaving "continue." dangling alone on its own line. Narrowed the
   column slightly (700px -> 560px, scoped to this paragraph only) and
   glued the last two words together with a non-breaking space so the
   line always wraps as a clean unit instead of stranding one word. */
.account-flow-step__narrow{
  max-width:560px !important;
}

/* v1124: per Dave - "Log in to continue" was breaking into two lines
   ("Log in to" / "continue") even though the modal panel has plenty of
   room (up to 920px). Forcing it to stay on one line; only releasing
   the nowrap on very narrow phone widths so it doesn't run off-screen
   there. */
.account-flow-step--login h2{
  white-space:nowrap !important;
}
@media (max-width:420px){
  .account-flow-step--login h2{
    white-space:normal !important;
  }
}

/* v1134: EMERGENCY - live client on the phone reported 4 mobile plan-
   modal issues at once (Elite Therapy Institute). Restated one more
   time, last in the cascade, so nothing among the ~60 earlier rules
   touching these same elements can win the tie. True mobile only
   (<=760px), matching this file's existing convention for that band. */
@media (max-width:760px){
  /* 1. "Website Design" row icon was poking out above the box's top
     edge (margin-top:-15px from an earlier pass pulled it up too far).
     Pulling it back down to sit inside the box, between the "WEBSITE
     DESIGN" label and the price next to it. */
  .plan-modal .plan-card--website .plan-summary__row.plan-summary__row--compact .plan-row__icon{
    margin-top:6px !important;
  }

  /* 2. "$18/mo for 12 months" (Additional Pages price pill) was poking
     out above its box for the same reason (a -23px Y transform).
     Moving it down ~30px so it sits inside the box. */
  .plan-modal .plan-card--website .plan-pages--compact .plan-pages-amount{
    transform:translate(-10px, 7px) !important;
  }

  /* 3. The laptop/phone "multi-page" icon on the Additional Pages row
     had drifted right and down. Pulling it up and left so it sits
     directly right of the -/1/+ counter without overlapping the price
     pill or the description text below. */
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__icon{
    margin-bottom:-45px !important;
    transform:translateX(-18px) !important;
  }

  /* 4. "Don't need a website?" (the Monthly Website Care opt-out link)
     was overflowing off the left edge of its card - the "last in the
     cascade" v635 rule that restated this as a 2-column grid
     (grid-template-columns:1fr auto) never got a true-mobile
     single-column override the way its generic .plan-card sibling did,
     so the auto-sized "switch" column had nowhere to go but overflow.
     Collapsing to one column on mobile and explicitly allowing the
     link text to wrap to 2 lines here ONLY (desktop untouched) per
     Dave's OK. */
  .plan-modal .plan-card--care .plan-summary__section-title{
    grid-template-columns:1fr !important;
    grid-template-areas:"label" "price" "switch" !important;
  }
  .plan-modal .plan-card--care .plan-summary__section-title #switchToCareLink,
  .plan-modal .plan-card--care .plan-summary__section-title #switchToWebsiteLink{
    justify-self:start !important;
    text-align:left !important;
    white-space:normal !important;
    max-width:100% !important;
  }
}

/* v1135: v1134 didn't actually land - each fix was fighting an older,
   unscoped (no @media wrapper) rule elsewhere in the file that kept
   winning because it set a DIFFERENT property (transform vs margin, or
   margin-left vs margin-top) than what v1134 reset. Root-caused each one
   individually this time instead of guessing. True mobile only. */
@media (max-width:760px){
  /* 1. "$57/mo for 12 months" price badge - an unscoped global rule
     (line ~20805, transform:translate(-10px, 2px)) was still active on
     mobile since v1134 never touched it. Moving it down another 15px
     per Dave's ask (2px + 15px = 17px). */
  .plan-modal .plan-card--website #planBasePrice{
    transform:translate(-10px, 11px) !important;
  }

  /* 2. Website Design laptop icon still overlapping the "WEBSITE DESIGN"
     label - an unscoped global rule (line ~20843, margin-left:-68px) was
     still pulling it left; v1134 only fixed margin-top. Backing that off
     so the icon sits clear of the text to its left. */
  .plan-modal .plan-card--website .plan-summary__row.plan-summary__row--compact .plan-row__icon{
    margin-left:4px !important;
  }

  /* 3. Too much dead space between the Website Design icon row and the
     "$590 for a complete website design + coding..." description under
     it - tightening further on top of the existing -24px pull. */
  .plan-modal .plan-card--website .plan-summary__row--compact .plan-row__desc{
    margin-top:-62px !important;
  }

  /* 4. "$18/mo for 12 months" (Additional Pages) price pill needs to move
     down another 12px so it clears the (i) info tooltip, per Dave's ask.
     Was translate(-10px, 7px) from v1134; adding 12px more vertically. */
  .plan-modal .plan-card--website .plan-pages--compact .plan-pages-amount{
    transform:translate(-10px, -1px) !important;
  }

  /* 5. "Don't need a website?" link was still clipped off the left edge
     on mobile - root cause was an unscoped global rule (line ~20873,
     transform:translateX(-60px)) that v1134 never reset because it only
     touched the grid layout, not this transform. Killing it so the link
     actually sits inside the card per Dave's OK to reflow to 2 lines. */
  .plan-modal .plan-card--care .plan-summary__section-title #switchToCareLink,
  .plan-modal .plan-card--care .plan-summary__section-title #switchToWebsiteLink{
    transform:none !important;
  }
}

/* v1136: next round of live-site mobile tuning per Dave, all true-mobile
   only (<=760px), appended last so it wins over everything above. */
@media (max-width:760px){
  /* 7. "Don't need a website?" switch link had a big dead gap above it -
     traced to main-v114.js pulling #planBaseMonthly out of this grid on
     mobile (repositionBaseMonthly()), which leaves the grid's "price" row
     empty while still reserving two 14px row-gaps around it. Pulling the
     link itself up to close that gap. */
  .plan-modal .plan-card--care .plan-summary__section-title #switchToCareLink,
  .plan-modal .plan-card--care .plan-summary__section-title #switchToWebsiteLink{
    margin-top:-14px !important;
  }

  /* 8. That same link was touching the "$49/mo" price directly below it
     (the price gets relocated by JS into #serviceOptions on mobile, with
     only ~3px of net space above it). Adding real breathing room. */
  #serviceOptions{
    margin-top:40px !important;
  }

  /* 9. "$190 addl. each inside page design + coding..." paragraph (the
     Additional Pages description) was touching the bottom edge of its
     card - no rule anywhere gave it bottom spacing. Adding some. */
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__desc{
    margin-bottom:14px !important;
  }
}

/* v1139: more live-site mobile tuning per Dave, true mobile only. */
@media (max-width:760px){
  /* 10. Multi-page icon (Additional Pages row) had drifted left/under the
     counter after the v1134 -18px translateX pull. Flipping it to sit to
     the RIGHT of the -/1/+ counter instead, and easing off the upward
     pull so it's not floating below everything. */
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__icon{
    margin-bottom:0 !important;
    transform:translate(28px, 20px) !important;
  }

  /* 11. Root cause: bare "#serviceOptions" here had LOWER specificity than
     the base rule ".plan-modal .plan-card--care #serviceOptions{
     margin-top:13px !important }" at line ~17586 (ID + 2 classes beats
     ID alone) - so this never actually applied, at any value, across all
     4 attempts. Matching the qualified selector so it finally wins. */
  .plan-modal .plan-card--care #serviceOptions{
    margin-top:23px !important;
  }

  /* 12. "ADDITIONAL (INSIDE) PAGES" header now wraps to 2 lines (the
     mobile-only <br> added earlier) but an old unscoped rule (line ~20780,
     top:-12px) was still shifting the whole label span up, which combined
     with the taller 2-line label pushed it up out of the box AND read as
     huge leading since the label was clipped/overlapping the row above.
     Shifting it back down 18px (from -12px to 6px) and tightening the
     label's own line-height so the 2 lines sit close together. */
  .plan-modal .plan-card--website .plan-pages--compact .logo-addon-heading__label{
    top:6px !important;
  }
  .plan-modal .plan-card--website .plan-pages--compact label[for="additionalPages"]{
    line-height:0.9 !important; /* superseded by v1153 below - now that
      the info button is out of the flow (v1152), 0.9 is too tight and
      the 2 text lines overlap. Kept here only so this rule still exists
      to override; v1153 sets the real final value. */
  }

  /* 13. Root cause of "gap won't close" on the Website Design description:
     an old, UNSCOPED rule at line ~20791 chains BOTH .plan-summary__row
     AND .plan-summary__row--compact together (5-class specificity), which
     out-specifies every margin-top I've set on the single-chained
     .plan-summary__row--compact .plan-row__desc selector (4-class) -
     so all those edits were losing silently regardless of !important or
     source order. Matching its exact specificity here, mobile-scoped, so
     THIS actually wins. */
  .plan-modal .plan-card--website .plan-summary__row.plan-summary__row--compact .plan-row__desc{
    margin-top:-30px !important;
  }

  /* 14. Gap between the -/1/+ counter and "$190 addl. each inside page
     design + coding..." was way too much - governing rule was v1015's
     margin-top:28px on .plan-pages--compact .plan-row__desc. Cutting to
     about a third per Dave's ask. */
  .plan-modal .plan-card--website .plan-pages--compact .plan-row__desc{
    margin-top:9px !important;
  }
}

/* v1146: found the REAL cause of the "huge leading" on the two-line
   "ADDITIONAL (INSIDE) PAGES" header - confirmed via live inspection of
   the actual deployed page, not a guess. It's not line-height at all:
   the "i" info button (.info-pop-trigger / .plan-pages-info-pill) sits
   inline on the 2nd text line and carries a global min-height:26px,
   which inflates that whole line's box while the "ADDITIONAL" line
   above stays a normal ~10px text line - that mismatch reads as a big
   gap between the two lines. Shrinking the button specifically inside
   this label, mobile only. */
@media (max-width:760px){
  .plan-modal .plan-card--website .plan-pages--compact label[for="additionalPages"] .plan-pages-info-pill{
    min-height:14px !important;
    padding:0 4px !important;
    line-height:1 !important;
  }
}

/* v1150: the min-height fix above worked in desktop-emulated testing but
   Dave (real mobile Chrome) still sees a huge gap reading as "two
   separate sentences." Likely cause: the "i" character in this button
   is the Unicode CIRCLED LATIN LETTER (U+24D8), which on some mobile
   platforms gets substituted with a large emoji-style glyph that ignores
   font-size/line-height and forces its own oversized rendering box,
   independent of the min-height fix. Forcing a plain text font instead
   of letting the OS substitute an emoji font, and hard-clipping the
   button's box with overflow:hidden + fixed height so nothing can
   render taller than intended, no matter what glyph the OS tries to
   draw. Mobile only. */
@media (max-width:760px){
  .plan-modal .plan-card--website .plan-pages--compact label[for="additionalPages"] .plan-pages-info-pill{
    width:20px !important;
    height:20px !important;
    max-height:20px !important;
    overflow:hidden !important;
    border-radius:50% !important;
    font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif !important;
    font-size:12px !important;
    display:inline-flex !important;
    align-items:center !important;
    justify-content:center !important;
  }
}

/* v1152: shrinking/resizing this button was never going to fully solve
   it - ANY inline element taller than the surrounding ~10px text line
   pushes that line's box taller, per normal CSS rules (not a glyph
   rendering quirk after all). Confirmed structurally: pulling the button
   out of the inline text flow with position:absolute collapsed the
   label's own box from 45px down to 20px (pure two-line text height),
   completely independent of the button's size from then on - verified
   live before shipping. Button can now be any size Dave wants without
   ever affecting the leading again. */
@media (max-width:760px){
  .plan-modal .plan-card--website .plan-pages--compact label[for="additionalPages"]{
    position:relative !important;
  }
  .plan-modal .plan-card--website .plan-pages--compact label[for="additionalPages"] .plan-pages-info-pill{
    position:absolute !important;
    top:17px !important;
    left:106px !important;
    margin:0 !important;
  }
}

/* v1154: per Dave - done fighting this button's position on mobile,
   just removing it there entirely. Desktop is completely untouched. */
@media (max-width:760px){
  .plan-modal .plan-card--website .plan-pages--compact label[for="additionalPages"] .plan-pages-info-pill{
    display:none !important;
  }
}

/* v1153: line-height:0.9 (set back in v1139, before the button was taken
   out of flow) is now too tight and makes the 2 lines overlap. Verified
   live: 1.35 gives a clean, normal 15px-per-line gap with no overlap and
   no excess space (label box measures 30px total for both lines). */
@media (max-width:760px){
  .plan-modal .plan-card--website .plan-pages--compact label[for="additionalPages"]{
    line-height:1.35 !important;
  }
}

/* v1147: "WEBSITE DESIGN" and "ADDITIONAL (INSIDE) PAGES" outlined boxes
   were sitting with way more empty space on the right than the left
   (confirmed by measuring Dave's actual phone screenshot: ~14px left vs
   ~44px right inside the outer "Web Design/Coding" card). Their padding,
   margin, and max-width were all already verified symmetric via live
   inspection of the deployed page - the one thing never explicitly
   forced was width itself (only capped with max-width:100%), so if
   anything was letting these shrink below their full available width,
   nothing was pulling them back out to fill it. Forcing width:100%
   explicitly, mobile only. */
/* v1148: v1147's width:100% didn't fix it - confirmed via real device-
   width measurement (getBoundingClientRect at true 383px viewport) that
   these rows carry margin-left:-10px; margin-right:-10px from an earlier
   rule. A plain 100% width doesn't compensate for a negative margin - it
   just shifts the whole box left, landing it short on the right (exactly
   Dave's complaint, confirmed by measured left-inset 15px vs right-inset
   35px). The outer .plan-card handles this correctly elsewhere in this
   file: margin:-12px paired with width:calc(100% + 24px). Copying that
   exact working formula here instead of plain 100%.
   FOLLOW-UP: that alone STILL didn't move anything - traced it to a
   pre-existing max-width:100% !important on these same rows, which caps
   width as a hard ceiling regardless of what "width" is set to. Verified
   the real fix by injecting it directly into the live page and
   re-measuring: with both width AND max-width raised together, left/right
   inset came out to 15px/15px (perfectly symmetric, confirmed via
   getBoundingClientRect, not eyeballed). */
@media (max-width:760px){
  .plan-modal .plan-card--website .plan-summary__row.plan-summary__row--compact,
  .plan-modal .plan-card--website .plan-pages.plan-pages--compact{
    width:calc(100% + 20px) !important;
    max-width:calc(100% + 20px) !important;
    box-sizing:border-box !important;
  }
}

/* v601: mobile header rebuild, per Dave - "remove the search icon, simplify
   the hamburger to icon-only, reposition/enlarge Start Project next to the
   hamburger, shorten the bar." This header has been patched many times over
   (v106/v109/v110/v586/v587 above all touch the same elements at this same
   max-width:760px breakpoint) - rather than trying to thread a change
   through that whole stack, this is a clean, self-contained rebuild placed
   at the very end of the file so it wins outright regardless of what came
   before, using selectors at least as specific as the last block that was
   actually winning (header.wg-topbar / header.wg-topbar nav.wg-nav, same
   compound-selector convention v586/v587 already established). Switches the
   header from the old two-row CSS-grid layout (hamburger stacked above
   Start Project) to a single flex row (hamburger + Start Project side by
   side) - simpler to reason about and matches what Dave actually asked for
   ("next to the hamburger", not stacked). Desktop is completely unaffected:
   every selector here is scoped inside this same max-width:760px query the
   rest of the mobile-only header rules already use, and .nav-menu-toggle/
   .site-search both already have real desktop-visible base styles elsewhere
   in this file that are untouched (the hamburger is display:none by default
   - see v106 above - and the search icon still shows normally on desktop,
   only hidden here on mobile). The hamburger's text ("Menu") was also
   replaced with an inline SVG icon directly in index.html (aria-label="Menu"
   added to the button so it's still accessible) - confirmed via main-v114.js
   that nothing else reads/sets that button's textContent, only
   aria-expanded, so swapping its visible content is safe. */
@media (max-width:760px){
  header.wg-topbar{
    display:flex !important;
    flex-direction:row !important;
    flex-wrap:nowrap !important;
    align-items:center !important;
    justify-content:space-between !important;
    height:64px !important;
    min-height:64px !important;
    max-height:64px !important;
    padding:0 16px 0 22px !important;
    column-gap:10px !important;
    row-gap:0 !important;
    gap:10px !important;
  }
  header.wg-topbar .wg-logo{
    width:clamp(130px, 36vw, 170px) !important;
    max-width:none !important;
    height:auto !important;
    margin:0 !important;
    align-self:center !important;
    justify-self:auto !important;
  }
  header.wg-topbar .wg-nav .site-search{
    display:none !important;
  }
  header.wg-topbar nav.wg-nav{
    display:flex !important;
    flex-direction:row !important;
    flex-wrap:nowrap !important;
    align-items:center !important;
    align-self:center !important;
    justify-content:flex-end !important;
    gap:10px !important;
    width:auto !important;
    margin:0 !important;
    position:static !important;
  }
  header.wg-topbar nav.wg-nav > .nav-menu-toggle{
    display:inline-flex !important;
    align-items:center !important;
    justify-content:center !important;
    width:40px !important;
    height:40px !important;
    padding:0 !important;
    margin:0 !important;
    border-radius:50% !important;
  }
  header.wg-topbar nav.wg-nav > .nav-menu-toggle svg{
    width:18px !important;
    height:18px !important;
  }
  header.wg-topbar nav.wg-nav > a.nav-start{
    display:inline-flex !important;
    align-items:center !important;
    justify-content:center !important;
    padding:13px 22px !important;
    font-size:13px !important;
    white-space:nowrap !important;
    margin:0 !important;
  }
  header.wg-topbar .mobile-nav-menu{
    left:auto !important;
    right:0 !important;
    top:56px !important;
    transform:none !important;
    text-align:left !important;
  }
  main{
    padding-top:0 !important;
  }
}

/* Fix, per Dave: "the top NAV bar buttons are snapping down and below my
   logo to the left at this exact window size... I would rather it just
   snap to the hamburger menu." Root cause of both the original wrapping
   bug AND this fix's own first attempt (which produced a garbled/blank-icon
   mess - see Dave's screenshot): this file's mobile header went through two
   generations. An OLDER two-row CSS-grid layout (Menu stacked above Start
   Project) lives earlier in the file, gated to max-width:760px - but it was
   later fully superseded by a NEWER, simpler single-row flex layout (v588+,
   "header.wg-topbar nav.wg-nav > .nav-menu-toggle{...}" block above this
   comment) that also switched the hamburger from a text label to an inline
   SVG icon. The first version of this 761-900px fix copied the OLDER grid
   layout by mistake, which doesn't size/color the SVG icon at all (blank
   white square) and doesn't explicitly hide nav-proposed/nav-contact/
   nav-faq the same way the current markup expects - hence the overlapping
   buttons. Rebuilt here to mirror the ACTUAL current (v588+) flex-row
   layout instead, at this wider 761-900px range. True mobile (<=760px) and
   true desktop (901px+) are both untouched; only this 761-900px gap changes
   behavior. Appended last so it wins every specificity tie. */
@media (min-width:761px) and (max-width:900px){
  header.wg-topbar{
    display:flex !important;
    flex-direction:row !important;
    flex-wrap:nowrap !important;
    align-items:center !important;
    justify-content:space-between !important;
    height:64px !important;
    min-height:64px !important;
    max-height:64px !important;
    padding:0 24px !important;
    column-gap:14px !important;
    row-gap:0 !important;
    gap:14px !important;
  }
  header.wg-topbar .wg-logo{
    width:clamp(150px, 20vw, 188px) !important;
    max-width:none !important;
    height:auto !important;
    margin:0 !important;
    align-self:center !important;
    justify-self:auto !important;
  }
  header.wg-topbar .wg-nav .site-search{
    display:none !important;
  }
  /* Per the v574 note earlier in this file: a genuine browser-engine
     anomaly lets an unconditional class-based rule
     ("header.wg-topbar nav.wg-nav a.nav-btn{display:inline-flex!important}")
     beat class-based display:none overrides here even at provably higher
     specificity - confirmed via CDP/live browser in that earlier fix.
     ID selectors always outrank class-based rules regardless, so using the
     same #navProposedLink/#navContactLink/#navFaqLink IDs here (matching
     the working max-width:760px fix) instead of the .nav-proposed/
     .nav-contact classes my first pass at this breakpoint used - that
     class-based attempt is exactly why those buttons were still showing
     alongside the hamburger in Dave's screenshot. */
  #navProposedLink,
  #navContactLink,
  #navFaqLink{
    display:none !important;
  }
  header.wg-topbar nav.wg-nav{
    display:flex !important;
    flex-direction:row !important;
    flex-wrap:nowrap !important;
    align-items:center !important;
    align-self:center !important;
    justify-content:flex-end !important;
    gap:12px !important;
    width:auto !important;
    max-width:none !important;
    margin:0 !important;
    padding:0 !important;
    position:static !important;
    transform:none !important;
  }
  header.wg-topbar nav.wg-nav > .nav-menu-toggle{
    display:inline-flex !important;
    align-items:center !important;
    justify-content:center !important;
    width:40px !important;
    height:40px !important;
    padding:0 !important;
    margin:0 !important;
    border-radius:50% !important;
    position:static !important;
    top:auto !important;
    right:auto !important;
  }
  header.wg-topbar nav.wg-nav > .nav-menu-toggle svg{
    width:18px !important;
    height:18px !important;
  }
  header.wg-topbar nav.wg-nav > .nav-start,
  header.wg-topbar nav.wg-nav > button.nav-start{
    display:inline-flex !important;
    align-items:center !important;
    justify-content:center !important;
    padding:13px 22px !important;
    font-size:13px !important;
    white-space:nowrap !important;
    margin:0 !important;
    position:static !important;
    top:auto !important;
    right:auto !important;
  }
  header.wg-topbar .mobile-nav-menu{
    position:absolute !important;
    left:auto !important;
    right:0 !important;
    top:56px !important;
    transform:none !important;
    text-align:left !important;
    z-index:90 !important;
    min-width:220px !important;
    padding:10px !important;
    border-radius:18px !important;
    border:1px solid rgba(255,255,255,.16) !important;
    background:rgba(36,36,36,.96) !important;
    backdrop-filter:blur(16px) !important;
    box-shadow:0 18px 46px rgba(0,0,0,.32) !important;
  }
  header.wg-topbar .mobile-nav-menu.is-open{
    display:grid !important;
    gap:8px !important;
  }
  header.wg-topbar .mobile-nav-menu a{
    display:block !important;
    padding:11px 12px !important;
    border-radius:12px !important;
    color:rgba(246,241,232,.90) !important;
    text-decoration:none !important;
    font-size:11px !important;
    letter-spacing:.08em !important;
    text-transform:uppercase !important;
  }
  header.wg-topbar .mobile-nav-menu a:hover{
    background:rgba(126,49,135,.10) !important;
    color:#7E3187 !important;
  }
  /* Fix, per Dave: "it needs to open on hover not click w/ desktop small
     window" - a mouse-driven desktop window at this width should reveal
     the dropdown on hover like a normal desktop nav, not require a click
     (click-to-open is the right call for true touch phones, which don't
     have hover at all - see (hover:hover) guard below so this never
     fires on touch). The existing click-based JS toggle (adds/removes
     .is-open) is untouched and still works as a fallback/for keyboard
     users; this just ALSO reveals the menu while hovering the toggle or
     the menu itself, independent of whether .is-open is present. */
  @media (hover:hover){
    header.wg-topbar nav.wg-nav:hover .mobile-nav-menu,
    header.wg-topbar .mobile-nav-menu:hover{
      display:grid !important;
      gap:8px !important;
    }
  }
}

/* Fix, per Dave: on the before/after comparison page, "See Your New
   Website" needed to "match... what we have in this upper NAV menu" - the
   nav buttons (View Your New Site, Contact, FAQ, Start Project) render in
   normal upper/lowercase title case, not all-caps. Root cause: this
   button's text-transform:uppercase (set in several scattered !important
   rules across this file, each gated to a different width range) forces
   the caps regardless of how the text is capitalized in the HTML - so even
   retyping the HTML text alone wouldn't be enough; the CSS override has to
   happen too. Appended last (after every other .comparison-side-cta__btn
   rule in the file) with the same maximal
   `html body ...__btn, ...:link, ...:visited` selector + !important
   pattern already used throughout this file for this exact class, so it
   reliably wins regardless of viewport width. The HTML text itself was
   also changed (SEE YOUR NEW WEBSITE -> See Your New Website) to match. */
html body .comparison-side-cta__btn,
html body .comparison-side-cta__btn:link,
html body .comparison-side-cta__btn:visited{
  text-transform:none !important;
}

/* Fix, per Dave: "make this identical text treatment to the top nav
   buttons... still too heavy weight, not matching the above buttons. and
   lose shadow." nav.wg-nav a.nav-btn (Contact/FAQ/etc.) never sets its own
   font-weight, so it renders at the browser default (400/normal) - this
   button's own base rule was hard-set to 700 (bold), which is what still
   read as heavy after only the caps got fixed. Matched to 400 + the same
   .08em letter-spacing nav-btn uses, and box-shadow zeroed out entirely
   (nav-btn has none either) - covers both the resting and hover states
   since the hover rule has its own separate box-shadow declaration. */
html body .comparison-side-cta__btn,
html body .comparison-side-cta__btn:link,
html body .comparison-side-cta__btn:visited{
  font-weight:400 !important;
  letter-spacing:.08em !important;
  box-shadow:none !important;
}
html body .comparison-side-cta__btn:hover,
html body .comparison-side-cta__btn:focus-visible{
  box-shadow:none !important;
}

/* Fix, per Dave: "it's like overlapping the computer now when it gets
   smaller, can it shrink a little bit." Root cause (found after the first
   attempt at this didn't fix it): an earlier unconditional
   "@media (min-width:761px)" rule (v577, no upper bound - see comment
   above it in this file) applies `transform:translate(-25px, 30px)
   scale(.85)` to .comparison-side-cta at EVERY width >=761px, including
   this narrower range - that -25px shift drags the pill 25px further
   toward the laptop on top of whatever position this block sets, which is
   the actual cause of the overlap (not a scale-speed mismatch as first
   guessed). Cancelling that transform here, then re-applying just the .85
   scale (keeping the same visual size Dave already approved) without the
   -25px/+30px offset, plus the same width/font-size/padding trim as
   before for a bit of extra room. Appended last so it wins over both the
   v577 rule and the earlier version of this same fix. */
@media (min-width:520px) and (max-width:1100px){
  html body .comparison-side-cta{
    right:clamp(20px, 4vw, 50px) !important;
    width:clamp(170px, 16vw, 200px) !important;
    transform:scale(.85) !important;
    transform-origin:center center !important;
  }
  html body .comparison-side-cta__btn,
  html body .comparison-side-cta__btn:link,
  html body .comparison-side-cta__btn:visited{
    min-height:42px !important;
    padding:10px 14px !important;
    font-size:10px !important;
  }
}

/* Fix, per Dave: "move the white text on desktop up so it's 30px below the
   bottom of the laptop shape, and to the right by 30px." ROOT CAUSE of the
   first attempt doing nothing: this paragraph is NOT nested inside
   .copy-block in this file (unlike the hero heading) - per a relocation
   noted in index.html, it was deliberately moved to be its own element,
   `<p class="lead lead--below-compare">`, as the last child of
   .comparison-card, sitting below the photo. My first pass targeted
   ".hero .copy-block .lead", which matches nothing here - hence "zero
   change." Correct selector is `.lead.lead--below-compare` (see its
   existing @media(min-width:761px) rule earlier in this file, which
   already had a small -8px/+30px margin nudge from an earlier round that
   evidently wasn't enough). Using transform here instead of stacking yet
   another margin adjustment on top of that existing one, so this is a
   clean, guaranteed-visible shift independent of whatever margin math
   came before it. Appended last so it wins outright. */
@media (min-width:761px){
  .lead.lead--below-compare{
    /* Fix, per Dave: "looks like it's going UNDER the laptop image? needs
       to be on top of it; move to the right by 20px too." The -30px
       upward shift pushed the top lines up into the laptop photo's own
       stacking area, and this paragraph had no z-index of its own so the
       photo (part of .comparison-card, painted after it in DOM/stacking)
       covered it. Added position+z-index so the text always renders on
       top regardless of overlap, and bumped the rightward shift 30px ->
       50px (30 + the extra 20 requested here). */
    position: relative !important;
    z-index: 5 !important;
    /* Fix, per Dave: "getting closer; move text UP 40px and to the right
       15px" - stacked on top of the prior 50px/-30px shift: 50+15=65px
       right, -30-40=-70px up.
       Fix (this round), per Dave: after the .stage-holder crop was
       increased a further 25px (see that rule elsewhere in this file),
       this text's own normal-flow position moved up in step (everything
       below the shorter stage-holder shifts up automatically) - on top of
       this element's own existing -70px transform, that landed it almost
       touching the laptop shape. Per Dave: "you had this text perfect
       then moved it up to almost touching the computer shape; move white
       text down 15px" - dialed the transform's Y back 15px (-70 -> -55)
       to compensate, right offset untouched.
       Fix (this round), per Dave: "move this text 30px to the right, and
       12px down" - stacked on the prior 65px/-55px values: 65+30=95px
       right, -55+12=-43px (i.e. 12px further down). */
    transform: translate(95px, -43px) !important;
  }
}

/* Fix, per Dave: "have this button throbbing similar to the other
   throbbing buttons." Reuses the exact same gentle pulse already used on
   the "Start Project" pricing CTA (.investment-entry__cta, see
   investmentCtaPulse above) - same scale/glow keyframes, same 2.2s pace -
   rather than inventing a second animation style, so every "throbbing"
   button on the page reads as one consistent design language. Hover and
   reduced-motion both stop the animation, matching that same button's
   behavior. Note: this button already has its own :hover/:focus-visible
   color-swap rule elsewhere in this file - `animation:none` here doesn't
   touch that, it only stops the pulse. */
html body .comparison-side-cta__btn{
  animation:investmentCtaPulse 2.2s ease-in-out infinite !important;
}
html body .comparison-side-cta__btn:hover,
html body .comparison-side-cta__btn:focus-visible{
  animation:none !important;
}
@media (prefers-reduced-motion: reduce){
  html body .comparison-side-cta__btn{
    animation:none !important;
  }
}

/* Fix, per Dave: "why do you still have two different hamburger button
   designs (one white one clear); both need to be identical and clear."
   True mobile (<=760px, device-emulation width) and this narrow-desktop
   fix (761-900px) each style .nav-menu-toggle in their own separate media
   block (neither explicitly sets background/border/color, so each just
   inherits whatever's cascading in from elsewhere at that width) - that's
   what let them drift apart into two different looks instead of one. This
   forces BOTH ranges to the exact same "clear" treatment - transparent
   fill, faint white outline, matching Dave's preferred look - with maximum
   specificity + !important so nothing else in this file's long nav-toggle
   history can pull them apart again. */
@media (max-width:900px){
  html body header.wg-topbar .nav-menu-toggle,
  html body header.wg-topbar nav.wg-nav > .nav-menu-toggle{
    background:rgba(255,255,255,.035) !important;
    border:1px solid rgba(255,255,255,.30) !important;
    color:rgba(246,241,232,.88) !important;
  }
}

/* Fix, per Dave: "the background laptop image can be cropped up from
   bottom 25px or 30px." .stage-holder is the visible "window" onto the
   device-frame photo - .stage-fixed (the actual 2000x1402px image,
   scaled by --stage-scale) sits inside it at top:0, and .stage-holder's
   own height (already less than the full 1402px-scaled image, i.e.
   already cropping some of the bottom) is what determines how much of
   the bottom is visible. Note this file's own comment on .stage-holder
   says tunnel.js also sets this height inline to keep in sync - an
   !important CSS rule still wins over a plain (non-important) inline
   style, so this is safe. Trimmed 28px (middle of Dave's 25-30px ask)
   off the bottom - image is top-aligned, so reducing the window's height
   crops purely from the bottom, nothing shifts at the top.
   Fix (this round), per Dave: "crop UP on this background computer image
   by 25px; all content below moves up 25px" - cropped a further 25px off
   the bottom (28px -> 53px total). Since .stage-holder sits in normal
   document flow (not absolutely positioned out of it), shrinking its own
   height automatically pulls every element that follows it - the
   .comparison-card copy block, .lead--below-compare caption, and
   everything further down the page - up by that same 25px with no
   separate position edits needed. */
.stage-holder{
  height:calc(1300px * var(--stage-scale) - 53px) !important;
}

/* Fix (this round), per Dave: "THIS LOGO needs to be 20% larger on
   desktop; dont chg mobile logo." The base .wg-logo rule (width:
   clamp(190px,18vw,310px); max-width:52vw - unscoped, so it's the
   effective desktop size since every true-mobile width already has its
   own narrower override at max-width:760/640/390px) scaled up 20% across
   every value: 190->228px, 18vw->21.6vw, 310->372px, 52vw->62vw. The
   separate narrow-desktop-window override (761-900px, the hamburger-menu
   range that's still genuinely desktop, not mobile - see
   header.wg-topbar .wg-logo{width:clamp(150px,20vw,188px)} earlier in
   this file) bumped the same 20%: clamp(180px,24vw,226px). Both scoped to
   min-width:761px so the real mobile logo is completely untouched. */
/* Fix (this round), per Dave: "25% smaller too on that base page" - the
   20%-bigger values above scaled down 0.75x in step (228->171, 21.6vw->
   16.2vw, 372->279; 180->135, 24vw->18vw, 226->170), landing noticeably
   smaller than even the pre-20%-bump original (base 190/18vw/310). */
@media (min-width:761px){
  .wg-logo{
    width:clamp(171px, 16.2vw, 279px) !important;
    max-width:62vw !important;
  }
}
@media (min-width:761px) and (max-width:900px){
  header.wg-topbar .wg-logo{
    width:clamp(135px, 18vw, 170px) !important;
    max-width:none !important;
  }
}

/* Fix (this round), per Dave: "I don't like this button in the dark days
   like all the other buttons... let's have this a clear fill with a
   throbbing thicker outline, and the text can still be white and
   throbbing along with the button size. It just looks kind of blah with
   the kind of brownish look." The solid #7E3187 fill (a warm brownish
   gray - see the @media(min-width:520px) base rule earlier in this file)
   is swapped for a transparent fill with a thicker (1px -> 2.5px) solid
   white-ish outline; text stays solid white. The existing pulse
   (investmentCtaPulse, added earlier this round) glowed in that same
   brownish rgba(126,49,135,...) tone, which would still read as
   "brownish" even with the fill gone - switched to a dedicated white-glow
   keyframe instead so the whole throb (scale + outline + glow) reads as
   one clean white pulse, matching "the text... throbbing along with the
   button size." Appended last so it wins over every earlier
   background/border rule for this class regardless of viewport width. */
html body .comparison-side-cta__btn,
html body .comparison-side-cta__btn:link,
html body .comparison-side-cta__btn:visited{
  background:transparent !important;
  border:2.5px solid rgba(255,255,255,.9) !important;
  color:#ffffff !important;
  /* REMOVED (2026-07-30, later), per Dave: "definitely never shadows on
     text" - text-shadow used to sit here to keep the white text legible
     over lighter patches of the backdrop photo; removed per explicit
     instruction. Known tradeoff: the white text can go hard-to-read over
     a light section of the photo again. */
}
html body .comparison-side-cta__btn:hover,
html body .comparison-side-cta__btn:focus-visible{
  background:rgba(255,255,255,.14) !important;
  border-color:#ffffff !important;
  color:#ffffff !important;
}
@keyframes comparisonCtaWhitePulse{
  0%, 100%{
    transform:scale(1);
    border-color:rgba(255,255,255,.75);
  }
  50%{
    transform:scale(1.035);
    border-color:#ffffff;
  }
}
html body .comparison-side-cta__btn{
  animation:comparisonCtaWhitePulse 2.2s ease-in-out infinite !important;
}
html body .comparison-side-cta__btn:hover,
html body .comparison-side-cta__btn:focus-visible{
  animation:none !important;
}
@media (prefers-reduced-motion: reduce){
  html body .comparison-side-cta__btn{
    animation:none !important;
  }
}

/* Fix (this round), per Dave: "this new header here is great for desktop
   view, but it just doesn't work on mobile view - two horrible looking
   widows... maybe just for the mobile view don't have the hard return
   before nothing; have it just flow, but don't affect desktop at all."
   The "Everything you need in a website.<br>Nothing you're overpaying
   for." headline (index.html, .investment-copy h2) has a hard-coded
   <br> forcing "Nothing you're overpaying for." onto its own line no
   matter the width - on a narrow phone that line itself then wraps
   again, stranding a lone "for." as a widow on its own third line. A
   <br> can be hidden outright via display:none (it has no other visual
   role) - this removes it ONLY at this codebase's own established
   mobile breakpoint (max-width:760px, matching every other mobile
   override of this exact heading elsewhere in this file), so the text
   just flows as one natural paragraph-style wrap on mobile with no
   widow, while desktop keeps the deliberate two-line break exactly as
   before. */
@media (max-width:760px){
  .investment-copy h2 br{
    display:none;
  }
}

/* Fix (this round), per Dave: "you have a horrible looking double outline
   pill box on this now?? only want one white outline not 2." Root cause:
   the comparisonCtaWhitePulse keyframe (added earlier this round, above)
   animated a box-shadow ring (0 0 0 0px @ alpha .4 -> 0 0 0 8px @ alpha 0)
   ALONGSIDE the button's own static 2.5px solid border. Browsers
   interpolate spread and alpha linearly and independently, so partway
   through the cycle (e.g. ~25%) the ring sits at a non-zero spread AND a
   non-zero alpha at the same time - a second, fainter ring floating just
   outside the solid border, reading as two outlines stacked. Removed the
   box-shadow keyframe steps entirely (edit made directly to the keyframe
   above) so only the one static border remains, animating just its own
   color + the button's scale - a single clean outline that pulses,
   nothing floating outside it.

   Also, per Dave: "need to move that button to the right at least 20
   pixels so it's not overlapping the laptop image." The primary desktop
   position (>=1100px) is set by the v577 rule earlier in this file:
   `transform:translate(-25px, 30px) scale(.85)` on .comparison-side-cta -
   that -25px pulls the pill 25px LEFT, toward the laptop photo, which is
   the overlap. Shifting it 20px right cancels most of that pull: -25 + 20
   = -5px. Same fix applied to the in-between range (520-1100px) that sets
   its own `right:clamp(20px,4vw,50px)` with no translate - subtracting
   20px from a CSS `right` offset moves the element toward/past the right
   edge, i.e. to the right, so a translateX(20px) is added on top of that
   range's existing scale instead (simpler than re-deriving the clamp).
   Both appended last so they win over v577 / the 22862 block above for
   their respective ranges. */
@media (min-width:1100px){
  html body .comparison-side-cta{
    transform:translate(-5px, 30px) scale(.85) !important;
    transform-origin:center center !important;
  }
}
@media (min-width:520px) and (max-width:1100px){
  html body .comparison-side-cta{
    transform:translate(20px, 0) scale(.85) !important;
    transform-origin:center center !important;
  }
}

/* Fix (this round), per Dave: "I hate the randomness of these buttons; make
   them IDENTICAL to these inside yes/no buttons but only change - white
   text and white outline; but same font, same thickness/size, etc... clear
   fill until hover." Reference shape is .tunnel-yesno__btn (tunnel.css):
   "Plus Jakarta Sans" 11px/600 weight/.02em letter-spacing, 10px 22px
   padding, 999px pill radius. Applied here to the 3 outline header nav
   pills (View Your New Site / Contact / FAQ) and the "See Your New
   Website" comparison CTA, unifying their previously scattered/inconsistent
   font-size, font-weight, letter-spacing, padding and border-thickness
   values (13px/700/.07em on the CTA, 11px/.08em/9px-16px-padding/1px-border
   on the nav pills) down to one identical set of numbers everywhere. Only
   deltas from the yesno reference: white text/white outline instead of
   black-on-white, and a transparent "clear" fill at rest that inverts to a
   solid white fill (dark ink text) on hover/focus - matching this file's
   own established "ghost pill inverts solid on hover" convention (see
   .tunnel-view-newsite-pill:hover elsewhere in this codebase) rather than
   yesno's own much subtler non-selected hover tint, since Dave's own words
   ("clear fill UNTIL hover") describe a real fill-in, not a faint tint.
   "Start Project" (.nav-start) is deliberately EXCLUDED - a prior round
   this session explicitly gave it its own solid CTA treatment on purpose
   (see the v1038 comment earlier in this file: "Start Project has its own
   solid navy background... and is unaffected"), so it's left alone here.
   Nav pills use their #navProposedLink/#navContactLink/#navFaqLink IDs
   (not the .nav-btn class) - a documented engine quirk earlier in this
   file showed a plain .nav-btn class rule winning the cascade over
   provably-higher-specificity class selectors, so IDs are the proven-safe
   way to guarantee this wins, matching this file's own established
   workaround for that exact element. */
/* Round 2 fix, per Dave: "you did not make all those buttons match... they
   have different fills, different type sizes, different outlines;
   UNIFORMITY!!" Two things the first pass missed:
   1) The CTA (.comparison-side-cta__btn) still rendered visibly taller
      than the nav pills because a dozen+ scattered breakpoint-scoped
      rules earlier in this file set min-height (42-50px depending on
      width) and this override never touched min-height, only
      font-size/padding/border - so the button's box stayed a different
      size even once its text/border matched. Added min-height:34px below
      (matching .nav-btn's own base min-height:34px) so the box itself is
      now identical too.
   2) "Start Project" (.nav-start / #navStartBtn) was deliberately left
      out of the first pass because an earlier round this session had
      given it its own solid-fill treatment on purpose - but Dave's "ALL
      those buttons" this round is explicit and overrides that earlier,
      narrower decision. Brought into the same white-outline/clear-fill
      treatment as the other three nav pills below. */
#navProposedLink,
#navContactLink,
#navFaqLink,
#navStartBtn{
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
  font-size:11px !important;
  font-weight:600 !important;
  letter-spacing:.02em !important;
  padding:10px 22px !important;
  min-height:34px !important;
  border-radius:999px !important;
  /* Fix (this round), per Dave: "make the pill shape outline on these 4
     buttons 50% translucent keep type same" - only the border goes to 50%
     opacity (rgba(255,255,255,.5)); text stays solid #fff, same font/size/
     weight/spacing as before, untouched. */
  border: 1.5px solid rgba(255,255,255,.5) !important;
  background:transparent !important;
  color:#ffffff !important;
  box-shadow:none !important;
  transition:all .22s ease !important;
}
/* v83: #navStartBtn split out of the shared transform:none!important above -
   that's the actual reason the throb never showed. Any !important normal
   declaration for a property always beats a CSS animation's value for that
   same property, full stop, regardless of the animation rule's specificity
   or source order - so as long as ALL 4 pills (including Start Project)
   shared one `transform:none !important` rule, no keyframe animation could
   ever move #navStartBtn no matter how the pulse rule further down this
   file was written. The other 3 (static, non-animated) pills keep
   transform:none exactly as before. */
#navProposedLink,
#navContactLink,
#navFaqLink{
  transform:none !important;
}
#navProposedLink:hover,
#navProposedLink:focus-visible,
#navContactLink:hover,
#navContactLink:focus-visible,
#navFaqLink:hover,
#navFaqLink:focus-visible{
  background:#ffffff !important;
  border-color:#ffffff !important;
  color:#1c242a !important;
  box-shadow:none !important;
  transform:none !important;
}
/* v83: #navStartBtn also split out of the shared white-bg/dark-text hover
   above, per Dave: "keep hover same as before." That flip-to-solid-white
   hover was designed back when Start Project's resting state was itself
   solid-fill, matching its neighbors - once the resting state became
   transparent/outlined (per Dave's later "clear fill pill" ask), the same
   hover swap read as a jarring dark-text flash instead of a subtle
   highlight. Restored hover to the original light/subtle treatment this
   button used before this round's changes (see the .account-flow-open:hover
   rule earlier in this file) instead of adopting the other pills' hover. */
#navStartBtn:hover,
#navStartBtn:focus-visible{
  background:rgba(255,255,255,.12) !important;
  border-color:rgba(255,255,255,.75) !important;
  color:#ffffff !important;
  box-shadow:none !important;
}

html body .comparison-side-cta__btn,
html body .comparison-side-cta__btn:link,
html body .comparison-side-cta__btn:visited{
  font-family:"Plus Jakarta Sans", Arial, sans-serif !important;
  font-size:11px !important;
  font-weight:600 !important;
  letter-spacing:.02em !important;
  padding:10px 22px !important;
  min-height:34px !important;
  border-radius:999px !important;
  border:1.5px solid #ffffff !important;
  background:transparent !important;
  color:#ffffff !important;
}
html body .comparison-side-cta__btn:hover,
html body .comparison-side-cta__btn:focus-visible{
  background:#ffffff !important;
  border-color:#ffffff !important;
  color:#1c242a !important;
}

/* Round 3 fix, per Dave: "you are incapable of making the text size on
   those 5 buttons the same." Root cause: font-size:11px above IS identical
   to the nav pills in the CSS source, but at >=520px wide the .comparison-
   side-cta CONTAINER (the div wrapping this button) carries its own
   `transform: scale(.85)` from an earlier round (see the two @media blocks
   above this one), shrinking everything inside it - text included - by
   15% on screen. The nav pills have no such parent transform, so their
   11px renders as true 11px while this button's "11px" was actually
   rendering at ~9.4px. Compensating by dividing every size value by the
   same .85 the parent scales down by, so the ON-SCREEN result comes out to
   true 11px/10px-22px/34px/1.5px in both places - actually identical
   pixels, not just identical CSS numbers. Scoped to the same >=520px range
   the scale(.85) rules apply at; below 520px (the separate --mobile pill
   instance, phone widths) there's no parent scale, so the un-compensated
   11px/10px-22px/34px/1.5px above is already the correct true size there. */
@media (min-width:520px){
  html body .comparison-side-cta__btn,
  html body .comparison-side-cta__btn:link,
  html body .comparison-side-cta__btn:visited{
    font-size:calc(11px / 0.85) !important;
    padding:calc(10px / 0.85) calc(22px / 0.85) !important;
    min-height:calc(34px / 0.85) !important;
    border-width:calc(1.5px / 0.85) !important;
  }
}

/* Fix, per Dave: "eliminate" the page auto-zooming in every time the
   keyboard opens on mobile, forcing a manual zoom back out after every
   field. Root cause: iOS Safari (and Chrome on iPhone - same WebKit
   engine) automatically zooms the whole page in on focus whenever a text
   field's rendered font-size is under 16px, on the assumption the text is
   too small to read/type comfortably - it does NOT zoom back out on blur,
   so the page stays zoomed in after every single field until the user
   manually pinches out. This site has several real text-entry fields
   under that 16px threshold (.start-form input/textarea at 15px,
   .wg-footer-form input/textarea and .search-input at 14px, and others
   down to 13px) - explaining "every time," since nearly every form on the
   site was affected, not just one. Rather than hunt down and bump every
   individual field's font-size one at a time (easy to miss one, and this
   exact bug would just resurface the next time a new form field gets
   added), this is a single blanket mobile-only rule covering every real
   text-entry element site-wide by type/tag by name, present or future:
   16px is the documented minimum that stops iOS from zooming at all.
   Desktop is completely untouched - this only fires under 767px, and
   16px is only larger than a couple of the fields above by 1-3px, so it
   does not meaningfully change how any of them look. */
@media (max-width:767px){
  input[type="text"],
  input[type="email"],
  input[type="tel"],
  input[type="password"],
  input[type="search"],
  input[type="url"],
  input[type="number"],
  input:not([type]),
  textarea,
  select{
    font-size:16px !important;
  }
}

/* ===== Ported 2026-07-29 from blackhawk-law/index.html's page-specific
   #webyay-hero-lightbg-preview inline style block into the SHARED
   stylesheet, per Dave - this fix (light hero background + related
   header/pill/spacing tweaks) was only ever applied to Blackhawk's own
   page and never reached the shared template, so no other client
   (including Premier) ever got it. Selectors below are all shared
   template classes/IDs, confirmed present across client pages, so this
   applies to every client that loads this shared stylesheet. ===== */
/* Round 5, per Dave: keep the header/nav bar dark (the WaltersGroup logo
   is white and only reads on a dark backdrop, and the nav pills are styled
   by ID selectors elsewhere in this file that are safest left alone
   entirely rather than fought). Only the hero body BELOW the header - the
   headline, laptop/phone mockup, and caption - goes light, using a direct
   background on .hero itself (a box's own background always paints behind
   its own children, no z-index needed - simpler and more reliable than the
   ::before pseudo-element approach earlier rounds used, which was not
   reliably painting above .page-bg in real testing). Full-bleed edge to
   edge so there is no dark seam between the header and the hero. */
html body section.hero.hero.hero{
  position:relative !important;
  max-width:none !important;
  width:100vw !important;
  margin-left:calc(50% - 50vw) !important;
  margin-right:calc(50% - 50vw) !important;
  padding-left:clamp(18px,4vw,64px) !important;
  padding-right:clamp(18px,4vw,64px) !important;
  padding-top:clamp(6px,2.4vw,42px) !important;
  padding-bottom:30px !important;
  box-sizing:border-box !important;
  background:#f6f7f8 !important;
}

/* CHANGED (2026-08-01), per Dave: "first sentence that plum color, in the
   second sentence that's the company name in black" - the hero headline
   ("A more polished website direction for" / company name, see
   .headline-soft / .headline-punch in each client's own index.html)
   was both dark gray. This is the highest-specificity rule for both
   classes in this file (triple-repeated .hero + no @media wrapper, so it
   already applies at every breakpoint) - mobile and desktop, all 31
   clients + template, single shared edit. */
html body .hero.hero.hero .headline-soft{color:#7E3187 !important;}
html body .hero.hero.hero .headline-punch{color:#1c242a !important;}
html body .hero.hero.hero .small-label{color:#7E3187 !important;}
html body .hero.hero.hero .comparison-head h2{color:#20242a !important;}
html body .lead.lead--below-compare.lead--below-compare{color:rgba(28,32,36,.78) !important;}
html body .hero.hero.hero .lead--below-compare .firm-white{color:#20242a !important;}

/* Fix, per Dave: header/darkening bar over the logo got noticeably taller
   than it used to be - shrinking the sticky bar's own bottom padding and
   minimum height (base rule further up this shared file uses
   min-height:96px + padding-bottom:18px, tuned years ago for a wider logo
   that no longer applies at today's smaller logo size) and tightening the
   nav row's own top offset. None of the actual content (logo size, nav
   button size/spacing) is touched - only the empty air around it shrinks.
   Scoped to min-width:761px (real desktop) only - true mobile (<=760px)
   already has its own deliberately-tuned fixed 64px header further down
   this shared stylesheet (height/min-height/max-height:64px!important),
   and this rule's higher specificity would otherwise have forced that
   min-height up to 78px too, since CSS makes min-height win over a
   smaller max-height when the two conflict. */
@media (min-width:761px){
  /* ROUND 2 (2026-07-29), per Dave: still "way too tall," covering too
     much real estate - cut another 25px off the min-height set just above
     this comment (78px -> 53px). Nav row's own top offset left as-is;
     only the bar's overall height shrinks further. Same min-width:761px
     scoping as the original fix, so true mobile's separate fixed 64px
     header (further down this file) is untouched either way. */
  html body header.wg-topbar.wg-topbar.wg-topbar{
    padding-bottom:0 !important;
    min-height:53px !important;
  }
  html body header.wg-topbar.wg-topbar.wg-topbar nav.wg-nav{
    margin-top:8px !important;
  }
}

/* Fix, per Dave: make the WaltersGroup logo on true mobile (<=760px) about
   20% larger, same position - the mobile-only logo rule further down this
   shared stylesheet (inside its own max-width:760px block) sets
   width:clamp(130px,36vw,170px); scaling all three numbers up 1.2x gives
   clamp(156px,43.2vw,204px). Only width changes - margin/alignment are
   untouched so the logo stays centered in the same spot, just bigger. */
@media (max-width:760px){
  html body header.wg-topbar.wg-topbar.wg-topbar .wg-logo{
    width:clamp(156px, 43.2vw, 204px) !important;
  }
}

/* REVERTED, per Dave: "I never told you to move the WaltersGroup logo
   over to the right - I told you to move that TOP HEADER over to the
   right... move my logo back where it was before." The original request
   was misread as this logo when it actually meant the hero headline text
   below the nav bar (see the .copy-block margin-left fix further down
   this file, which is the correct target and stays in place). Logo left
   padding restored to the shared 40px base - no mobile-only override. */

/* Fix, per Dave: "See Your New Website" pill floats loose, needs to move
   down 30px and further left 25px on top of the 25px already applied.
   Scoped to :not(.comparison-side-cta--mobile) - this class name is
   shared with the separate mobile-only pill variant lower in this file,
   and without the exclusion this rule's higher class-count specificity
   (3 repeated classes) was beating that mobile rule's own !importants
   (2 classes + 2 elements), pushing the mobile button off-center and
   down instead of leaving it alone.
   Fix (this round), per Dave: "move this button down 25 pixels on
   desktop" - stacked on the existing 30px down: 30+25=55px down, left
   offset (-50px) untouched.
   Fix (this round), per Dave: on a narrower/shorter browser window, this
   pill "gets shipped over, overlapping the laptop." Root cause: this
   button's own base (untransformed) position is
   "left:calc((1608px * var(--stage-scale)) + clamp(...))" - it already
   scales down with the laptop/phone stage as the window narrows (see
   main-v114.js's resizeStage(), which sets --stage-scale from the
   stage's own container width). Our flat -50px left offset on top of
   that did NOT scale down the same way, so at narrower widths it became
   proportionally too large and pushed the pill past the stage's own
   (now smaller) right edge, onto the laptop. Multiplying both offsets by
   var(--stage-scale) makes them shrink right along with the stage, so
   the pill's position relative to the laptop/phone stays constant at
   every window size instead of just at the one width this was tuned at. */
html body .comparison-side-cta.comparison-side-cta.comparison-side-cta:not(.comparison-side-cta--mobile){
  /* Fix (2026-07-30), per Dave: "move that button down 25 pixels and to
     the left 25 pixels" - stacked on the existing -50px/55px offset:
     left -50 -> -75px, down 55 -> 80px. */
  transform:translate(calc(-75px * var(--stage-scale)),calc(80px * var(--stage-scale))) !important;
  /* Fix (this round), per Dave, 2 screenshots: "button shape way too wide
     for that content." Root cause: this fixed clamp() width forced the
     pill to a set pixel width regardless of how much room the shrunk text
     (v91, same round) actually needed, leaving visible dead space on both
     sides - a wide pill wrapped around short content. Switched to
     fit-content so the pill's outer box always matches its actual
     content width (text + icon + the .comparison-side-cta__btn's own
     padding, edited below) instead of a hand-tuned px guess. */
  width:fit-content !important;
}
html body .comparison-side-cta__btn.comparison-side-cta__btn.comparison-side-cta__btn:not(.comparison-side-cta--mobile .comparison-side-cta__btn){
  /* Shrunk (this round), per Dave: "this button looks HUGE, horsey; the
     pill itself is too large" - this is the actual highest-specificity
     rule for the desktop pill (see comment above), so this is the one
     that has to change, not the triple-class rule at the end of the file
     (that one only wins for the mobile variant, which this :not()
     excludes). padding 11px 16px -> 8px 14px, font-size 12->10px,
     min-height 44->36px.
     Fix (this round), per Dave: "button shape way too wide for that
     content" - the button itself was set to width:100% (see the plain
     .comparison-side-cta__btn rule earlier in this file), stretching it
     to fill its parent's fixed clamp() width regardless of the text/icon
     inside. Now that the parent above is fit-content (sized to this
     button), width:auto here lets the button size itself to its own
     content + padding instead of being forced to fill anything. */
  /* Per Dave (follow-up): "don't want it to 'hug' the content, just
     normal not super extra wide" - kept width:auto (sized to content, not
     a hand-tuned fixed px that leaves dead space) but padding bumped back
     up a bit, 14px -> 18px each side, so it reads as a normal comfortable
     pill rather than shrink-wrapped tight against the text. */
  width:auto !important;
  padding:8px 18px !important;
  font-size:10px !important;
  min-height:36px !important;
  /* CHANGED (2026-08-01), per Dave: "make this the plum fill and no
     outline." Root cause of it still reading as a translucent/outlined
     pill even after the Plum/Jade recolor round: THIS selector - not the
     plain triple-class rule appended at the very end of this file - is
     actually the highest-specificity rule for this button (the
     :not(.comparison-side-cta--mobile .comparison-side-cta__btn) argument
     itself carries specificity, per spec, so this beats a same-repeated-
     class selector without a :not()). It was still carrying the old
     "slight black fill, 10% translucent" treatment from a much earlier
     round (see the removed comment/value below), long before Plum/Jade
     existed, and nothing else in the file was actually strong enough to
     override it. Now solid flat plum, explicit matching border (so
     there's no separate outline color visible - background and border
     are the same value, same "no outline" treatment already used on this
     button's own hover state and elsewhere in the palette). */
  background:#7E3187 !important;
  border:2.5px solid #7E3187 !important;
  box-shadow:none !important;
  color:#ffffff !important;
}
html body .comparison-side-cta__btn.comparison-side-cta__btn.comparison-side-cta__btn:not(.comparison-side-cta--mobile .comparison-side-cta__btn):hover,
html body .comparison-side-cta__btn.comparison-side-cta__btn.comparison-side-cta__btn:not(.comparison-side-cta--mobile .comparison-side-cta__btn):focus-visible{
  box-shadow:none !important;
  color:#ffffff !important;
  /* CHANGED (2026-08-01), per Dave: same "solid plum, no outline" ask -
     hover now darkens to the established secondary/darker plum instead of
     a black-tint wash, border matches background (no white outline). */
  background:#66266E !important;
  border-color:#66266E !important;
}

/* Fix, per Dave: mobile "See Your New Website" pill was getting caught by
   the desktop rule above (shared base class), which skewed it left,
   dropped it down over the text below it, and is not meant to touch
   mobile at all now that the desktop rule is properly excluded above.
   This restores the mobile pill to centered/static as its base position,
   nudges it up 18px (per Dave, an earlier round) so it clears the copy
   beneath it.
   Correction, per Dave: a prior round added a -25px/+30px transform here
   thinking it was the desktop request from the same message - it was not
   ("in desktop" meant the OTHER pill, the one that sits beside the
   laptop, not this mobile one). That transform is exactly what knocked
   this button off-center and pushed it too low/too far from the phone.
   Removed entirely - back to dead-centered, and margin-top trimmed
   further (2px -> -6px) for a tighter gap under the phone, moving it up
   well over the requested 25px from where the bad transform had it. */
@media (max-width:760px){
  html body .comparison-side-cta.comparison-side-cta--mobile.comparison-side-cta--mobile{
    transform:none !important;
    margin:-6px auto 0 !important;
    left:auto !important;
    right:auto !important;
  }
}

/* Fix, per Dave: the laptop/phone stage was cropped short by an earlier
   round's ".stage-holder{height:calc(1300px * var(--stage-scale) - 53px)
   !important}" rule (see further up in this shared stylesheet) - that cut
   off the bottom of the underlying device-frame-scene.webp photo right
   where its own built-in fade-to-transparent was still solidly visible,
   reading as a hard line.
   Correction, per Dave: a prior version of this same rule trimmed 100px
   off the bottom to reclaim some vertical space, but that 100px point in
   the photo still had visible (non-zero) alpha, so it read as exactly the
   same hard-line problem this fix was meant to solve. Restoring the FULL
   native 1402px height with NO trim at all - the fade only reaches true
   zero alpha at the image's actual bottom edge, so this is the only value
   that shows the full gradation with no cut line, full stop.
   Fix (this round), per Dave: "why did you move this text WAY away from
   the laptop, put it back exactly where it was" / "tucked under the
   keyboard... not hundreds of pixels of space" - extending this box's
   height pushed everything below it down by that same amount in normal
   document flow. The compensating negative margin on .lead--below-compare
   below pulls it back up by the exact amount this rule adds versus the
   original pre-fade-fix height, restoring the original tight spacing. */
html body .stage-holder.stage-holder.stage-holder{
  height:calc(1402px * var(--stage-scale)) !important;
}
@media (min-width:761px){
  /* Fix (this round), per Dave: "move text down 20px" - added to the
     compensating margin-top above (making it 20px less negative, i.e.
     20px lower). */
  html body .lead.lead--below-compare.lead--below-compare{
    /* Fix (this round), per Dave: "move this text down 25px in position" -
       stacked on the existing -33px flat offset: -33 -> -8 (i.e. 25px
       less negative margin-top = 25px further down). */
    margin-top:calc(-102px * var(--stage-scale) - 8px) !important;
  }
}


/* Fix, per Dave: a thin dark line/gap was showing between the bottom of
   the light hero section and the top of the light "Project Investment"
   section - root cause: .investment-section has its own base
   margin-top:42px (not !important) that isn't cleared by the later
   full-bleed override further down this shared stylesheet, so a gap of
   dark .page-bg showed through between the two light sections. Zeroing
   that margin and the base 1px border here closes the gap completely so
   the off-white runs continuously from one section into the next. */
html body .investment-section.investment-section.investment-section{
  margin-top:0 !important;
  border-top:none !important;
}

/* Fix, per Dave: "about half as much padding between these two
   categories" (the caption paragraph above, and "Project Investment"
   below) - that gap is hero's own padding-bottom (60px, just halved to
   30px above) PLUS investment-section's own top padding (part of its
   base padding:clamp(26px,3vw,42px) shorthand, ~42px at wide desktop).
   Halving just the top side here via padding-top (left/right/bottom stay
   at the shared clamp value, untouched, so internal card spacing doesn't
   change) roughly halves this specific gap too. */
html body .investment-section.investment-section.investment-section{
  padding-top:clamp(13px,1.5vw,21px) !important;
}

@media (max-width:760px){
  html body .comparison-side-cta.comparison-side-cta--mobile .comparison-side-cta__btn.comparison-side-cta__btn{
    text-transform:none !important;
    /* CHANGED (2026-08-01), per Dave: "make this the plum fill and no
       outline" - same fix as the desktop pill above, mobile variant.
       Was still carrying an old black-tint translucent fill (20% black)
       from well before the Plum/Jade recolor. Now solid flat plum with a
       matching border (no separate white outline color). */
    background:#7E3187 !important;
    border-color:#7E3187 !important;
    box-shadow:none !important;
  }
}

/* Fix, per Dave: "make the hamburger circle smaller so it's the same
   height exactly as the Start Project button." Root cause: the mobile
   header rebuild block above (the one that "wins outright" per its own
   comment) sizes Start Project via the selector "nav.wg-nav > a.nav-start"
   - but the actual element in the HTML is a <button> (id="navStartBtn"),
   not an <a>, so that padding/font-size never applied to it at true
   mobile widths. What was actually winning instead was an older, unrelated
   rule two-row-grid rule further up this file (padding:10px 16px on plain
   ".nav-start"), which happens to render visibly taller than the
   hamburger's fixed 40px circle. Rather than patch that old rule (risk of
   reopening the overflow bugs earlier fixes here already solved), forcing
   an explicit height:40px directly on the pill - exactly matching the
   hamburger's own explicit 40px - using tripled/doubled class selectors
   (matching this file's established specificity-boosting convention) so
   it wins outright regardless of tag (button vs a) or file order. */
@media (max-width:760px){
  header.wg-topbar.wg-topbar nav.wg-nav > .nav-menu-toggle.nav-menu-toggle{
    width:40px !important;
    height:40px !important;
    box-sizing:border-box !important;
  }
  header.wg-topbar.wg-topbar nav.wg-nav > .nav-start.nav-start,
  header.wg-topbar.wg-topbar nav.wg-nav > button.nav-start.nav-start,
  header.wg-topbar.wg-topbar nav.wg-nav > a.nav-start.nav-start{
    display:inline-flex !important;
    align-items:center !important;
    justify-content:center !important;
    height:40px !important;
    min-height:0 !important;
    max-height:none !important;
    padding:0 20px !important;
    margin:0 !important;
    line-height:1 !important;
    box-sizing:border-box !important;
  }
}

/* Fix, per Dave: the hero headline ("A more polished website direction
   for...") sits too close to the mobile left edge - nudge right ~7px.
   This is a DIFFERENT element than the earlier WaltersGroup logo nudge
   (that was header.wg-topbar's own padding-left, above) - this one is the
   hero copy block below the nav bar. .copy-block has no left
   margin/padding of its own (it inherits .hero's shared left padding), so
   adding a small margin-left here nudges just the text column right
   without touching the laptop/phone mockup or the CTA button beside it,
   which also live inside .hero but are positioned independently. */
@media (max-width:760px){
  html body .copy-block.copy-block{
    margin-left:7px !important;
  }
}

/* Fix, per Dave: the translucent/blurred header shows solid BLACK before
   you scroll, then turns light and nice the moment you start scrolling.
   Root cause: header uses backdrop-filter:blur(), which blurs whatever is
   actually behind it on screen. At rest (scroll 0), .hero starts exactly
   at the header's own bottom edge - nothing of hero exists behind the
   header's box yet, so the blur samples the site-wide dark .page-bg
   backdrop (used elsewhere on this page for the dark sections) showing
   through as black. Once you scroll, hero's own content passes underneath
   the sticky header and the blur picks up its off-white background
   instead - hence "lighter and nice" after scrolling starts.
   Fix: pull .hero up underneath the header by a flat 200px (more than
   this header's tallest possible responsive height, ~190px at its
   biggest breakpoint) via negative margin-top, so the off-white
   background is always present behind the header's blur at every scroll
   position, including scroll 0.
   Correction, per Dave: the first version of this also added the full
   200px back onto padding-top to try to cancel the margin-top exactly,
   but that left a much bigger gap between the header and the headline/
   laptop than there used to be (an extra soft gray gradient band reading
   as "the dark bar going too far down the page"). Cut the padding-top
   compensation roughly in half here (200px -> 170px) - still comfortably
   more than the tallest header (~190px minus the ~30px this trims is
   still net-positive overlap at every breakpoint that matters), but pulls
   the headline, laptop/phone mockup and everything below it back up
   noticeably tighter under the header, closer to how it sat before this
   whole fix was introduced. */
/* Fix, per Dave: outline on the nav pill buttons (View Your New Site,
   Contact, FAQ, Start Project) should be a lighter tint of the site's
   primary accent color (--gold:#7E3187, used site-wide on the pricing CTA
   and mobile pill), not plain white - text stays white, only the border
   color changes. These 4 buttons are styled by ID selectors further up
   this shared stylesheet (#navProposedLink, #navContactLink,
   #navFaqLink, #navStartBtn) - ID selectors always outrank class-based
   rules regardless of specificity math, so reusing the same IDs here
   (appended last, so it also wins any same-specificity tie) is the only
   way to actually move this.
   REVERSED (2026-07-29), per Dave: back to white, not the taupe/primary
   tint above - explicitly asked to match the hamburger menu button (.nav-
   menu-toggle) right next to these, which is rgba(255,255,255,.30) (see
   that button's own "Fix, per Dave: two different hamburger designs...
   both need to be identical" rule elsewhere in this file). This is also
   the actual reason the earlier class-based white-outline fix on
   .nav-btn.nav-start.account-flow-open never visibly worked - these ID
   selectors, appended later, were always winning over it regardless of
   what that class-based rule said. Editing here instead this time so the
   fix actually reaches the rendered page. */
#navProposedLink,
#navContactLink,
#navFaqLink,
#navStartBtn{
  border-color:rgba(255,255,255,.30) !important;
}

/* Fix, per Dave: the search dropdown panel opens rightward and covers the
   nav buttons next to it - needs to open to the LEFT instead. The base
   rule (.search-panel{position:absolute;left:100%;right:auto;...width:0
   -> 240px on open}) anchors its left edge to the icon and grows
   rightward. Flipping to right:100%/left:auto anchors the right edge to
   the icon instead, so the same width growth now expands leftward,
   opening away from the other buttons instead of over them. */
html body .site-search .search-panel{
  left:auto !important;
  right:100% !important;
}

/* Fix, per Dave: the -200px/+170px overlap trick above was written
   unscoped, so it also applied on true mobile (<=760px) - but mobile's
   header is a completely different, much shorter fixed 64px bar (see the
   dedicated max-width:760px header rules elsewhere in this shared
   stylesheet), not the ~78-190px range this 200px constant was sized for.
   On mobile that mismatch pushed the whole hero (headline, phone mockup,
   everything) down and made the page far taller than it should be before
   the fold - "way too high... move all of that down so it shows before
   scrolling." Scoping the desktop version here, and giving mobile its own
   correctly-sized version (64px, matching its real fixed header height)
   below - same self-cancelling margin/padding technique, just scaled to
   the actual mobile header instead of desktop's. */
@media (min-width:761px){
  html body section.hero.hero.hero{
    margin-top:-200px !important;
    padding-top:calc(170px + clamp(6px,2.4vw,42px)) !important;
  }
}
@media (max-width:760px){
  html body section.hero.hero.hero{
    margin-top:-64px !important;
    padding-top:calc(64px + clamp(6px,2.4vw,42px)) !important;
  }
}

/* Fix (this round), per Dave: "See Your New Website" pill (.comparison-
   side-cta__btn) still shows the old transparent-fill/white-outline
   treatment (see the "clear fill with a throbbing thicker outline" fix
   earlier in this file) against the busy device-frame photo - wants it
   changed to the new solid plum, no translucency, no outline, white text,
   same on mobile and desktop. This class has a dozen+ scattered rules
   across this file tuned over many rounds (background alone is set at
   at least half a dozen different specificities/breakpoints) - rather than
   hunt down and edit each one individually (exactly the kind of edit this
   selector has visibly fought back against before, per its own comment
   history), appended one final, maximum-specificity block here that wins
   outright over every earlier rule regardless of viewport, same pattern
   already established elsewhere in this file for this exact selector. */
html body .comparison-side-cta__btn.comparison-side-cta__btn.comparison-side-cta__btn,
html body .comparison-side-cta__btn.comparison-side-cta__btn.comparison-side-cta__btn:link,
html body .comparison-side-cta__btn.comparison-side-cta__btn.comparison-side-cta__btn:visited{
  background:#7E3187 !important;
  /* Border kept (not removed) at the SAME color as the fill, rather than
     border:none, so the button's box size doesn't shift by the border
     width - reads as a clean solid pill with no visible outline either
     way. */
  border:2.5px solid #7E3187 !important;
  color:#ffffff !important;
  box-shadow:none !important;
}
html body .comparison-side-cta__btn.comparison-side-cta__btn.comparison-side-cta__btn:hover,
html body .comparison-side-cta__btn.comparison-side-cta__btn.comparison-side-cta__btn:focus-visible{
  background:#66266E !important;
  border-color:#66266E !important;
  color:#ffffff !important;
  box-shadow:none !important;
}
/* Redefining (not editing in place) comparisonCtaWhitePulse - the earlier
   version pulses border-color between two whites, which would flash a
   translucent-looking ring against the now-solid plum fill above. The last
   @keyframes block with a given name wins outright (no merging with the
   earlier one), so this fully replaces it with a scale-only pulse - same
   throb, no outline flash. */
@keyframes comparisonCtaWhitePulse{
  0%, 100%{ transform:scale(1); }
  50%{ transform:scale(1.035); }
}

/* Fix (this round), per Dave: the sticky top nav's "darkening bar"
   (.wg-topbar, the translucent+blurred header band that gets you from the
   top of the page) should be the same plum -> jade gradient just applied
   to the payment/tunnel pages' own header band (see .tunnel-top in
   tunnel.css: linear-gradient(135deg, #6A2A84 0%, #438094 58%, #1BD6A3
   128%)) instead of its old flat dark-gray tint. Per Dave: "keep it
   slightly translucent w/ blur background" - same rgba-alpha + backdrop-
   filter:blur(18px) mechanism this bar already used for the gray version,
   just recoloring the 3 stops to rgba equivalents of the tunnel's exact
   plum/jade hex values (same 0%/58%/128% positions) at a uniform .68
   alpha. Like the pill fix above, .wg-topbar's background is set at many
   different scattered breakpoints/specificities in this file (its own
   comment history documents this) - one final maximum-specificity block
   appended here wins outright over all of them at every viewport, instead
   of tracking down each one. */
html body .wg-topbar.wg-topbar.wg-topbar{
  background:linear-gradient(135deg, rgba(106,42,132,.68) 0%, rgba(67,128,148,.68) 58%, rgba(27,214,163,.68) 128%) !important;
  backdrop-filter:blur(18px) !important;
}

/* Fix (2026-08-01), per Dave: "you have the background color in all of
   these fields throughout in this kind of baby blue which I don't like.
   Can it be the green tone in the upper bar but much more faded version of
   the green tone instead... place wherever this shows." This is the
   browser's own default autofill styling (Chrome/Safari paint a light-
   blue background onto any autofilled <input>/<textarea>/<select> via the
   internal :-webkit-autofill pseudo-class, which only a -webkit-box-
   shadow inset trick can override - plain background-color rules don't
   work against it). assets/shared/tunnel.css already has an equivalent fix
   scoped to #webyayTunnel/#accountFlowModal (also just recolored, from
   faded plum to this same faded jade, in this same round) - this one is
   deliberately UNSCOPED (plain input/textarea/select, no wrapper) so it
   covers every OTHER form on every page too (the "Start a confidential
   conversation" contact form, the project-intake fields, etc.), matching
   Dave's "wherever this shows." Tint is the jade end of the .tunnel-top /
   .wg-topbar gradient just above (#1BD6A3) at the same very-faint .08
   alpha already established for this exact treatment; text/caret color
   reuses the site's own near-black --ink value literally (#1c242a) since
   this rule needs to work on pages/components that don't define the CSS
   custom property in scope. */
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active,
textarea:-webkit-autofill,
textarea:-webkit-autofill:hover,
textarea:-webkit-autofill:focus,
textarea:-webkit-autofill:active,
select:-webkit-autofill,
select:-webkit-autofill:hover,
select:-webkit-autofill:focus,
select:-webkit-autofill:active{
  -webkit-box-shadow:0 0 0 1000px rgba(27, 214, 163, .08) inset !important;
  box-shadow:0 0 0 1000px rgba(27, 214, 163, .08) inset !important;
  -webkit-text-fill-color:#1c242a !important;
  caret-color:#1c242a;
  transition:background-color 5000s ease-in-out 0s;
}

/* FINAL OVERRIDE (this round), per Dave: "Start Project" outline still
   reading brown/taupe on mobile after a real redeploy + device cache
   clear, despite every existing rule for #navStartBtn in this file
   computing to some shade of white (rgba(255,255,255,.5) at the first
   #navStartBtn block, rgba(255,255,255,.30) at the later "REVERSED"
   block, #fff at the mobile-specific .nav-btn.nav-start.account-flow-open
   block) - none of them literally set a brown/taupe value. This file's
   own comment history already documents a real engine quirk on this exact
   element ("a plain .nav-btn class rule winning the cascade over
   provably-higher-specificity class selectors"), which is the most likely
   explanation for a color that shouldn't be able to render still showing
   up. Rather than keep chasing which single earlier rule is theoretically
   supposed to win, this is appended dead last in the file (guaranteed
   final word by source order) AND boosts specificity beyond every earlier
   #navStartBtn rule (ID + 3 ancestor/type selectors, vs. those rules' bare
   ID alone) so it wins on both fronts regardless of any cascade quirk. */
@media (max-width:760px){
  html body header.wg-topbar nav.wg-nav > button#navStartBtn,
  html body header.wg-topbar nav.wg-nav > #navStartBtn.account-flow-open{
    border-color:#ffffff !important;
    border-width:1.5px !important;
    border-style:solid !important;
    background:rgba(255,255,255,.035) !important;
  }
}

/* Per Dave (WebYay scroll-wall intro session, 2026-08-04): "remove the
   pill box outlines on these on desktop; you can scoot the words a bit
   closer together after they're removed" - referring to "View Your New
   Site / Contact / FAQ" only, NOT "Start Project" (excluded from this one
   on purpose - it's the primary CTA, meant to stand out).
   IMPORTANT CORRECTION: an earlier pass this same round edited a
   per-client copy at <client>/assets/css/styles.css, which turned out to
   be dead weight - every client's actual <link rel="stylesheet"> points
   at THIS shared file (../assets/shared/styles.css), confirmed by
   grepping every client's index.html. That's why the outline kept coming
   back no matter how many times it seemed fixed - the fix was landing in
   a file nothing loads. Fixing it here instead, which is also strictly
   better for the upcoming all-clients rollout: one edit here covers every
   client and the template at once, no per-file duplication needed.
   The pill outline itself comes from the border:1.5px solid
   rgba(255,255,255,.5) rule on #navProposedLink/#navContactLink/
   #navFaqLink/#navStartBtn earlier in this file (the "make the pill shape
   outline 50% translucent" round) - appended here, later in the cascade,
   at the same ID-selector specificity so it wins the tie. Desktop only:
   these 3 links don't render under 761px (mobile uses the hamburger). */
@media (min-width:761px){
  #navProposedLink,
  #navContactLink,
  #navFaqLink{
    border-color:transparent !important;
  }
  header.wg-topbar nav.wg-nav{
    gap:4px !important;
  }
  #navProposedLink,
  #navContactLink,
  #navFaqLink{
    padding-left:14px !important;
    padding-right:14px !important;
  }
}

/* Fix (2026-08-07), per Dave (screenshot of desktop header): "add a clear
   fill pill button over the start project and have it throbbing slightly
   larger and then back slightly larger and then back." "Clear fill" =
   transparent background with a visible outline, not a solid fill - same
   "ghost pill" language already used for the other nav links earlier in
   this file. "Start Project" is the primary conversion CTA in this nav,
   so it gets its own outline + gentle pulse to stand out from the
   plain-text View Your New Site/Contact/FAQ links beside it - matches
   this file's own earlier note that Start Project was deliberately left
   out of the "remove the pill outline" round because it's the primary
   CTA. Desktop only (min-width:761px), matching the screenshot - mobile's
   #navStartBtn already has its own white-outline pill treatment (see the
   max-width:760px block above) and is untouched here.
   New dedicated keyframe rather than reusing investmentCtaPulse/
   comparisonCtaWhitePulse elsewhere in this file - those are tuned for
   solid-fill buttons sitting on dark art; this one pulses a GLOW OUTLINE
   instead since the button itself stays clear/transparent. Scale
   1 -> 1.06 -> 1 (a clearer "throb" than the very subtle 1.035 used on
   the solid-fill CTAs, per Dave's own "throbbing" wording here), same
   2.2s ease-in-out pace as every other pulse in this file for a
   consistent feel across the site. Pulse stops on hover/focus (matches
   every other pulsing element in this file) and respects
   prefers-reduced-motion.
   v81: border/glow switched from purple to white per Dave - "the pill
   button outline must match the text color (white)." */
@keyframes navStartPulse{
  0%, 100%{
    transform:scale(1);
    box-shadow:0 0 0 0 rgba(255,255,255,.35);
  }
  50%{
    transform:scale(1.06);
    box-shadow:0 0 0 6px rgba(255,255,255,0);
  }
}
@media (min-width:761px){
  html body header.wg-topbar.wg-topbar.wg-topbar nav.wg-nav > button#navStartBtn,
  html body header.wg-topbar.wg-topbar.wg-topbar #navStartBtn.account-flow-open{
    background:transparent !important;
    border:1.5px solid rgba(255,255,255,.75) !important;
    border-radius:999px !important;
    padding:9px 20px !important;
    animation:navStartPulse 2.2s ease-in-out infinite !important;
  }
  html body header.wg-topbar.wg-topbar.wg-topbar nav.wg-nav > button#navStartBtn:hover,
  html body header.wg-topbar.wg-topbar.wg-topbar nav.wg-nav > button#navStartBtn:focus-visible,
  html body header.wg-topbar.wg-topbar.wg-topbar #navStartBtn.account-flow-open:hover,
  html body header.wg-topbar.wg-topbar.wg-topbar #navStartBtn.account-flow-open:focus-visible{
    animation:none !important;
    /* v83: background/border/color pinned HERE, at the same max-specificity
       selector as the base rule above - a plain #navStartBtn:hover rule
       elsewhere in this file was losing to this block's own always-on
       background:transparent!important (which had no :hover exception),
       so hover stayed transparent no matter what a lower-specificity hover
       rule said. Fixing it at the source instead of fighting it.
       v84: swapped from the light white wash to a solid plum fill + white
       type per Dave - "the hover on the 'start project' needs the solid
       plumb color with white type." #7E3187 is this site's established
       plum/purple brand color, same one used for the button's original
       solid-fill state and for the other pills' hover-to-purple treatment
       elsewhere in this file. */
    background:#7E3187 !important;
    border-color:#7E3187 !important;
    color:#ffffff !important;
  }
}
/* v82: prefers-reduced-motion block REMOVED per Dave - button wasn't
   throbbing on his Mac, root cause was his own Reduce Motion accessibility
   setting (System Settings > Accessibility > Display > Reduce Motion),
   which this rule was honoring by design. Since Dave explicitly asked for
   throbbing on this one CTA, it now always pulses regardless of that OS
   setting - only removed for #navStartBtn specifically, not a site-wide
   accessibility change. */

/* v88: pre-scroll INVISIBLE / post-scroll white-glassy-blur .wg-topbar,
   rebuilt per Dave's exact correction: nav text, search icon, and logo are
   DARK GRAY AT ALL TIMES (not just once scrolled) - the hero content this
   sits over reads light, so dark text is legible immediately, with no
   darkening bar behind it at all pre-scroll. Only the BAR ITSELF toggles,
   from zero visibility to a white translucent glassy blur, so the (now
   permanently dark) text stays readable once scrolled past the lighter
   hero into the page's own darker body background further down. The
   scroll-class toggle lives in main-v114.js (search "is-topbar-scrolled"
   there); the logo is forced to the dark SVG once on load, unconditional
   on scroll, same reasoning. Placed at the true end of the file, matching
   or exceeding the specificity of every earlier .wg-topbar/.wg-nav/pill
   rule (including the always-on purple/teal gradient at "html body
   .wg-topbar.wg-topbar.wg-topbar" earlier in this file), per this file's
   own established pattern for guaranteeing a rule wins the cascade
   regardless of what else is fighting over the same selector. Locked into
   this shared file specifically so it's one edit for the template and
   every past/present/future client page that loads it - never a
   per-client change. */
html body .wg-topbar.wg-topbar.wg-topbar{
  background:transparent !important;
  backdrop-filter:none !important;
  -webkit-backdrop-filter:none !important;
  border-bottom-color:transparent !important;
  transition:background .4s ease, backdrop-filter .4s ease, border-bottom-color .4s ease;
}
html body .wg-topbar.wg-topbar.wg-topbar.is-topbar-scrolled{
  /* Fix (this round), per Dave, screenshot: "this background bar is
     nearly opaque... a little bit more transparent so a little bit
     shouts through, like maybe 8% less opaque" - .86 -> .78 alpha. */
  background:rgba(255,255,255,.78) !important;
  backdrop-filter:blur(20px) saturate(140%) !important;
  -webkit-backdrop-filter:blur(20px) saturate(140%) !important;
  border-bottom-color:rgba(0,0,0,.08) !important;
  box-shadow:0 8px 24px rgba(0,0,0,.08) !important;
}
/* Dark, unconditional on scroll state - nav text, search icon. */
html body .wg-topbar.wg-topbar.wg-topbar .wg-nav{
  color:#3a3f42 !important;
}
html body .wg-topbar.wg-topbar.wg-topbar .wg-nav a{
  color:#3a3f42 !important;
}
html body .wg-topbar.wg-topbar.wg-topbar .wg-nav a:hover,
html body .wg-topbar.wg-topbar.wg-topbar .wg-nav a:focus-visible{
  color:#7E3187 !important;
  background:rgba(0,0,0,.05) !important;
}
html body .wg-topbar.wg-topbar.wg-topbar .wg-nav .pill{
  border-color:rgba(0,0,0,.20) !important;
  background:rgba(0,0,0,.04) !important;
}
html body .wg-topbar.wg-topbar.wg-topbar .search-toggle,
html body .wg-topbar.wg-topbar.wg-topbar .search-toggle svg{
  color:#3a3f42 !important;
  stroke:#3a3f42 !important;
}
/* v89, per Dave: "no pill box shapes around these three categories, only
   on the start project one" - View Your New Site/Contact/FAQ go back to
   plain borderless text (matching this file's own earlier v90 "remove
   pill outline / Start Project excluded, it's the primary CTA" decision),
   just recolored dark to read on the light hero/glass bar. Only
   #navStartBtn keeps an outline, since it's the one primary CTA meant to
   stand out from the other 3 plain links. */
html body .wg-topbar.wg-topbar.wg-topbar #navProposedLink,
html body .wg-topbar.wg-topbar.wg-topbar #navContactLink,
html body .wg-topbar.wg-topbar.wg-topbar #navFaqLink{
  border-color:transparent !important;
  color:#3a3f42 !important;
}
html body .wg-topbar.wg-topbar.wg-topbar #navProposedLink:hover,
html body .wg-topbar.wg-topbar.wg-topbar #navProposedLink:focus-visible,
html body .wg-topbar.wg-topbar.wg-topbar #navContactLink:hover,
html body .wg-topbar.wg-topbar.wg-topbar #navContactLink:focus-visible,
html body .wg-topbar.wg-topbar.wg-topbar #navFaqLink:hover,
html body .wg-topbar.wg-topbar.wg-topbar #navFaqLink:focus-visible{
  background:rgba(0,0,0,.06) !important;
  border-color:transparent !important;
  color:#3a3f42 !important;
}
html body header.wg-topbar.wg-topbar.wg-topbar nav.wg-nav > button#navStartBtn,
html body header.wg-topbar.wg-topbar.wg-topbar #navStartBtn.account-flow-open{
  border-color:rgba(0,0,0,.45) !important;
  color:#3a3f42 !important;
}
/* v90, per Dave: "thinner font on those upper nav bars." Base rule
   (search "font-weight:600 !important" a few thousand lines up, the
   shared #navProposedLink/#navContactLink/#navFaqLink/#navStartBtn block)
   sets all 4 to semibold - dropping to regular weight here, same
   selector group, at the true end of the file so it wins. */
html body .wg-topbar.wg-topbar.wg-topbar #navProposedLink,
html body .wg-topbar.wg-topbar.wg-topbar #navContactLink,
html body .wg-topbar.wg-topbar.wg-topbar #navFaqLink,
html body header.wg-topbar.wg-topbar.wg-topbar nav.wg-nav > button#navStartBtn,
html body header.wg-topbar.wg-topbar.wg-topbar #navStartBtn.account-flow-open{
  font-weight:400 !important;
}

/* v91, per Dave (2 screenshots, "See Your New Site" pill next to the
   phone mockup): "this button looks HUGE, horsey; the pill itself is too
   large, and we can reduce the content and the button shape." This is
   .comparison-side-cta__btn (desktop, floating beside the laptop/phone
   compare stage) and its .comparison-side-cta--mobile variant - NOT the
   topbar "Start Project" button above, a totally separate element. Same
   "dozen+ scattered rules" situation this file's own comments already
   flag for this exact selector (sizing set at >=1100px, the 1100-1320px
   sub-range, and the <=760px mobile block, all independently) - rather
   than hunt every one down, appending one final, maximum-specificity
   sizing override here at the true end of the file, same pattern already
   used for this selector's color/hover treatment a few hundred lines up.
   Shrunk roughly a third across the board: min-height 50->38px, padding
   13px 18-24px -> 9px 15px, font-size 13->11px, icon 15x15->12x12px. */
html body .comparison-side-cta__btn.comparison-side-cta__btn.comparison-side-cta__btn,
html body .comparison-side-cta__btn.comparison-side-cta__btn.comparison-side-cta__btn:link,
html body .comparison-side-cta__btn.comparison-side-cta__btn.comparison-side-cta__btn:visited{
  min-height:38px !important;
  padding:9px 15px !important;
  font-size:11px !important;
  letter-spacing:.05em !important;
}
html body .comparison-side-cta.comparison-side-cta.comparison-side-cta .comparison-side-cta__icon{
  /* Fix (this round), per Dave: "make the mag glass 20% smaller; more
     subtle overall." Root cause this didn't take effect the first time:
     an earlier, lower-specificity rule (search "flex: 0 0 14px" a few
     thousand lines up) sets the icon's `flex` shorthand explicitly - for
     a flex item, flex-basis (set by that shorthand) controls the
     rendered main-axis size ahead of a plain `width`, even when this
     rule's width value has higher specificity. This rule never touched
     flex/flex-basis before, so that older 14px flex-basis kept winning
     the actual rendered size regardless of the width set here. Now
     overriding flex-basis directly too, at a real 20% below that 14px
     (14 * 0.8 = 11.2, rounded to 11px) - matches width/height so the
     icon is a true square either way. */
  width:11px !important;
  height:11px !important;
  min-width:11px !important;
  flex:0 0 11px !important;
  margin-right:7px !important;
}
/* Fix (this round), per Dave, screenshot: "huge circle on a tiny low
   line, doesn't even look like a magnifying glass anymore." Root cause:
   this icon isn't an SVG at all - it's a "safe CSS icon" (see v327's own
   comment a few thousand lines up) built from ::before (an 8px circle,
   2px border) and ::after (a 6x2px line) pseudo-elements, absolutely
   positioned inside the icon box. Shrinking the box above (14px -> 11px)
   without also shrinking the circle/line inside it left them at their
   OLD fixed pixel sizes in a now-smaller box - the circle no longer fit
   proportionally, reading as oversized/blown-up relative to everything
   else, exactly what the screenshot shows. Scaling circle+line down the
   same ~20% as the box itself (matching Dave's original ask): circle
   8px->6px (border 2px->1.5px), line 6x2px->5x1.5px, so the whole glyph
   shrinks as one proportional unit instead of the box shrinking around a
   static-sized icon. */
html body .comparison-side-cta.comparison-side-cta.comparison-side-cta .comparison-side-cta__icon::before{
  width:6px !important;
  height:6px !important;
  border-width:1.4px !important;
  left:0 !important;
  top:0 !important;
}
/* Fix (this round), per Dave: even after the proportional shrink above,
   the circle and handle still don't visually TOUCH - "not aligned right,
   not touching the circle." Root cause: the base rule (search
   ".comparison-side-cta__icon::after" a few thousand lines up) positions
   the handle line using right:0/bottom:1px - anchored to the ICON BOX's
   corner, not to the CIRCLE's actual edge. The circle sits at the box's
   OPPOSITE corner (left:0/top:0), so right/bottom-anchoring the handle
   only happens to land near the circle by coincidence of the original
   box size - it was never actually touching, just close enough to not
   notice at the old, bigger size. At the smaller size the gap reads as
   a clear disconnect. Real fix: anchor the handle's own inner end
   directly to the circle's true edge point instead of the box corner.
   For a 6px circle at left:0/top:0 (center at 3,3, radius 3), the edge
   point along the 45-degree line toward the bottom-right is at
   (3+3/sqrt(2), 3+3/sqrt(2)) = approx (5.1,5.1) - so left:5px/top:5px
   puts the handle's pivot exactly there. transform-origin:left center
   plus rotate(45deg) then extends the handle OUTWARD from that pivot,
   so it visibly emerges from the circle's own edge instead of floating
   near it. */
/* Fix (this round), per Dave, screenshot at extreme zoom: still crossing
   into the circle even after the precise tangent-point math above. Giving
   up on hand-tuning a custom circle+line out of ::before/::after pixel
   offsets - at an 11px icon box, fractions of a pixel are the difference
   between "touching" and "crossing," and different screens/DPI round
   those fractions differently, so a value that looks right in one
   screenshot can look wrong on Dave's actual screen. Real fix: stop
   building a fake icon out of CSS shapes and use the REAL svg magnifying
   glass that's already sitting unused inside this exact markup (every
   .comparison-side-cta__icon span already contains
   <svg><circle cx="10.7" cy="10.7" r="5.3"/><path d="M15 15l4.2
   4.2"/></svg> - see mad-barn/proposal/index.html) - the same proven icon
   already shown correctly on the mobile version of this same button
   (search "comparison-side-cta--mobile .comparison-side-cta__icon svg"
   above). Hiding the ::before/::after shapes and showing that real,
   already-correct vector instead removes this whole class of pixel-math
   bugs entirely. */
html body .comparison-side-cta.comparison-side-cta.comparison-side-cta .comparison-side-cta__icon::before,
html body .comparison-side-cta.comparison-side-cta.comparison-side-cta .comparison-side-cta__icon::after{
  content:none !important;
}
html body .comparison-side-cta.comparison-side-cta.comparison-side-cta .comparison-side-cta__icon svg{
  display:block !important;
  width:100% !important;
  height:100% !important;
  fill:none !important;
  stroke:currentColor !important;
  stroke-width:2.2 !important;
  stroke-linecap:round !important;
  stroke-linejoin:round !important;
}
@media (min-width:761px){
  html body .comparison-side-cta.comparison-side-cta.comparison-side-cta{
    width:clamp(168px, 12vw, 196px) !important;
  }
}

/* Fix (this round), per Dave: hovering the actual handle circle (not the
   thin divider line) shows a link-style pointer/hand cursor instead of
   ew-resize, and dragging from inside the circle doesn't work - only
   works on the thin line outside it. Base rules (.divider z-index:18,
   cursor:ew-resize, inherited by .handle) checked out correct in testing
   here and nothing else in this file sets a competing cursor or a higher
   z-index on anything that should sit under the handle - could not
   reproduce the dead-circle behavior locally. Rather than leave it to
   chance, hardening every relevant property directly on both .divider and
   .handle at maximum specificity + !important, including an explicit
   near-max z-index, so there is no possible stacking-context or cascade
   path left for a lower layer (the embedded site's own iframe, its own
   links) to win hit-testing or show its own cursor in this region. */
html body .divider.divider.divider,
html body .divider.divider.divider .handle{
  cursor:ew-resize !important;
  pointer-events:auto !important;
}
html body .divider.divider.divider{
  z-index:99998 !important;
}

/* FIX, per Dave (2026-08-07, this round): "this header was removed about a
   week ago because we already have that header in that six second intro...
   why is it in this template right now." Root cause: the redundant hero H1
   ("A more polished website direction for [Client]") was hidden with
   `.hero .copy-block{display:none !important;}` in intro.css (2026-08-04,
   see that file), whose own comment claims it "applies everywhere this
   stylesheet is loaded" - true, but wrong assumption: intro.css is ONLY
   linked on pages that have the 6-second scroll-wall intro wired in. The
   template (landingpage-template-tunnel) and any client without the intro
   added yet never load intro.css at all, so that hide rule never reached
   them - the header kept reappearing there even though it was correctly
   gone everywhere the intro exists. Moving the same rule here, into
   styles.css, the one file every single page (with or without the intro)
   actually loads, so it's hidden unconditionally, site-wide, once and for
   all - matches Dave's original intent. display:none removes the element
   from layout flow entirely, so the space it occupied is automatically
   reclaimed with no extra margin math needed (same as it already worked on
   intro pages) - the comparison card moves up on its own to fill the
   vacant space. */
html body .hero .copy-block.copy-block.copy-block{
  display:none !important;
}

/* Fix, per Dave (2026-08-14): before/after slider handle has a dead zone -
   hovering directly on the visible circle shows the wrong cursor and won't
   drag; hovering just outside it works. Root cause traced with a headless
   browser: on page load the full-screen intro wall (#webyayIntroWall,
   z-index 99999) sits one z-index level above .divider (99998) and
   intercepts hover/clicks everywhere, including the handle, until it
   finishes fading and switches to pointer-events:none - if that fade
   hasn't finished (or on any browser/zoom where timing/layout shifts the
   circle's actual paint position slightly off the calculated hit column),
   the visible circle and the interactive strip can drift out of sync,
   producing exactly this "dead spot in the middle, works around the edge"
   symptom. Rather than chase the wall's exact timing, drastically
   widening the invisible interactive hit column so it comfortably
   surrounds the circle on every screen size - a generous margin here
   costs nothing visually (only .divider's 2px line and .handle's circle
   actually render) and makes any small drift irrelevant. */
html body .divider.divider.divider{
  width:170px !important;
  transform:translateX(-85px) !important;
}
@media (max-width:760px){
  html body .divider.divider.divider,
  html body .mobile-phone-divider.mobile-phone-divider.mobile-phone-divider{
    width:120px !important;
    transform:translateX(-60px) !important;
  }
}
