/*
|==========================================================================
| SITEPEX — DESIGN SYSTEM
|==========================================================================
| The same tokens as the lifetime landing page and the checkout, so a
| visitor moving from an ad to this site to the cart sees one brand rather
| than three attempts at one.
|
| Written from scratch. The previous stylesheet was a purchased theme with
| ~550KB of rules for components this site does not use, a navy, a bright
| blue and an orange accent all competing, and colour values hardcoded past
| its own variables.
*/

:root{
  --ink:#0f1b33; --muted:#5f6b82; --line:#dde5f2;
  --paper:#f6f8fd; --soft:#f9fbff;
  --blue:#2563eb; --blue-dark:#1d4ed8; --navy:#0b1533;
  --green:#12a150; --red:#d92d20; --ring:rgba(37,99,235,.16);
  --serif:'Fraunces',Georgia,serif;

  /* Three measures on purpose: prose reads badly at full width, the nav
     sits slightly wider than the content beneath it, and four pricing
     tiers need more room than either. */
  --maxw:1280px;
  --maxw-nav:1380px;
  --maxw-wide:1420px;

  --r:12px; --r-lg:18px; --r-pill:999px;
  --sh-1:0 1px 2px rgba(15,27,51,.05);
  --sh-2:0 12px 32px rgba(15,27,51,.08);
  --sh-3:0 24px 56px rgba(15,27,51,.12);
  --sh-blue:0 18px 44px rgba(37,99,235,.18);
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;background:#fff;color:var(--ink);
  font-family:'DM Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}
img{max-width:100%;height:auto;display:block}
a{color:var(--blue);text-decoration:none;transition:color .16s}
a:hover{color:var(--blue-dark)}
h1,h2,h3,h4{font-family:var(--serif);font-weight:600;letter-spacing:-.03em;
  line-height:1.1;margin:0}
p{margin:0}
ul{margin:0;padding:0;list-style:none}
:focus-visible{outline:2px solid var(--blue);outline-offset:2px}

.wrap{max-width:var(--maxw);margin:0 auto;padding:0 24px}
.wrap--wide{max-width:var(--maxw-wide)}
.sec{padding:80px 0}
.sec--paper{background:var(--paper)}
.sec--soft{background:var(--soft)}
.sec--ink{background:var(--navy);color:#fff}
.center{text-align:center}

.eyebrow{display:inline-block;font-size:12px;font-weight:700;letter-spacing:.14em;
  text-transform:uppercase;color:var(--blue);margin-bottom:14px}
.sec--ink .eyebrow{color:#8fb6ff}
.h1{font-size:clamp(34px,4.6vw,56px);letter-spacing:-.038em;line-height:1.04}
.h2{font-size:clamp(28px,3.4vw,42px)}
.h3{font-size:22px;letter-spacing:-.02em}
.lead{margin-top:16px;font-size:18px;line-height:1.65;color:var(--muted);max-width:62ch}
.sec--ink .lead{color:#a7b5cf}
.center .lead{margin-left:auto;margin-right:auto}
.fig{font-family:var(--serif);font-variant-numeric:tabular-nums;letter-spacing:-.03em}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;
  font-size:15.5px;font-weight:600;padding:13px 26px;border-radius:var(--r);
  border:1.5px solid transparent;cursor:pointer;white-space:nowrap;
  transition:background .18s,border-color .18s,color .18s,box-shadow .18s,transform .18s}
.btn--primary{background:var(--blue);color:#fff;box-shadow:0 8px 20px rgba(37,99,235,.24)}
.btn--primary:hover{background:var(--blue-dark);color:#fff;transform:translateY(-1px);
  box-shadow:0 12px 28px rgba(37,99,235,.3)}
.btn--ghost{background:#fff;color:var(--ink);border-color:var(--line)}
.btn--ghost:hover{border-color:var(--blue);color:var(--blue)}
.btn--light{background:#fff;color:var(--blue)}
.btn--light:hover{background:#eef3ff;color:var(--blue-dark)}
.btn--full{width:100%}

/* ---------- header ---------- */
.hdr{position:sticky;top:0;z-index:100;background:rgba(255,255,255,.94);
  backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.hdr__in{max-width:var(--maxw-nav);margin:0 auto;padding:0 24px;height:74px;
  display:flex;align-items:center;gap:36px}
.hdr__logo img{height:34px;width:auto}
.hdr__nav{display:flex;gap:4px;flex:1}
.hdr__nav>a,.hdr__btn{display:flex;align-items:center;gap:5px;font-size:15px;font-weight:500;
  color:var(--ink);padding:9px 14px;border-radius:9px;background:none;border:0;
  cursor:pointer;font-family:inherit;transition:background .16s,color .16s}
.hdr__nav>a:hover,.hdr__btn:hover{background:var(--paper);color:var(--blue)}
.hdr__nav>a.is-here{color:var(--blue);background:var(--paper)}
.hdr__item{position:relative}
.hdr__item.is-open>.hdr__btn{background:var(--paper);color:var(--blue)}
.hdr__item.is-open .hdr__btn svg{transform:rotate(180deg)}
.hdr__btn svg{transition:transform .18s}
.hdr__pop{position:absolute;top:calc(100% + 10px);left:0;min-width:320px;background:#fff;
  border:1px solid var(--line);border-radius:var(--r-lg);padding:8px;box-shadow:var(--sh-3);
  opacity:0;visibility:hidden;transform:translateY(-6px);
  transition:opacity .16s,transform .16s,visibility .16s}
.hdr__item.is-open .hdr__pop{opacity:1;visibility:visible;transform:none}
.hdr__e{display:flex;gap:13px;padding:11px 12px;border-radius:10px;align-items:flex-start;
  color:var(--ink)}
.hdr__e:hover{background:#f2f6fd;color:var(--ink)}
.hdr__ei{width:38px;height:38px;flex:none;border-radius:10px;background:#eaf1ff;
  color:var(--blue);display:flex;align-items:center;justify-content:center}
.hdr__et{display:block;font-size:14.5px;font-weight:600}
.hdr__ed{display:block;font-size:13px;color:var(--muted);margin-top:2px;line-height:1.45}
.hdr__r{display:flex;align-items:center;gap:14px;flex:none}
.hdr__login{font-size:15px;font-weight:500;color:var(--muted)}
.hdr__login:hover{color:var(--blue)}
.hdr__burger{display:none;width:42px;height:42px;border:1px solid var(--line);
  border-radius:10px;background:#fff;cursor:pointer;flex-direction:column;
  align-items:center;justify-content:center;gap:4px}
.hdr__burger span{display:block;width:17px;height:2px;background:var(--ink);border-radius:2px;
  transition:transform .2s,opacity .2s}
.hdr__burger.is-open span:nth-child(1){transform:translateY(6px) rotate(45deg)}
.hdr__burger.is-open span:nth-child(2){opacity:0}
.hdr__burger.is-open span:nth-child(3){transform:translateY(-6px) rotate(-45deg)}
.hdr__sheet{display:none;border-top:1px solid var(--line);padding:14px 24px 22px;background:#fff}
.hdr__sheet.is-open{display:block}
.hdr__sheet a{display:block;padding:13px 0;font-size:16px;color:var(--ink);
  border-bottom:1px solid var(--line)}
.hdr__sheet .btn{margin-top:16px}

@media(max-width:1040px){
  .hdr__nav,.hdr__login{display:none}
  .hdr__burger{display:flex}
  .hdr__in{justify-content:space-between;gap:16px}
}

/* ---------- hero ---------- */
.hero{background:linear-gradient(180deg,#f2f7ff 0%,#fbfcfe 58%,#fff 100%);
  border-bottom:1px solid var(--line);padding:76px 0 64px;position:relative;overflow:hidden}
.hero::before{content:"";position:absolute;top:-42%;right:-10%;width:56%;height:160%;
  border-radius:50%;pointer-events:none;
  background:radial-gradient(closest-side,rgba(37,99,235,.10),transparent 70%)}
.hero .wrap{position:relative}
.hero__g{display:grid;grid-template-columns:1.05fr .95fr;gap:52px;align-items:center}
.hero__pill{display:inline-flex;align-items:center;gap:9px;background:#fff;
  border:1px solid var(--line);border-radius:var(--r-pill);padding:7px 16px;
  font-size:13.5px;color:var(--muted);box-shadow:var(--sh-1);margin-bottom:22px}
.hero__pill b{color:var(--ink)}
.hero__pill svg{color:var(--blue);flex:none}
.hero__ticks{margin:26px 0;display:grid;gap:11px}
.hero__ticks div{display:flex;align-items:center;gap:11px;font-size:15.5px}
.hero__ticks svg{color:var(--green);flex:none}
.hero__cta{display:flex;gap:13px;flex-wrap:wrap}
.hero__note{margin-top:18px;font-size:13.5px;color:var(--muted)}

/* stat strip that overlaps the hero */
.stats{display:grid;grid-template-columns:repeat(4,1fr);background:#fff;
  border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;
  box-shadow:var(--sh-2);margin-top:-34px;position:relative;z-index:3}
.stats div{padding:22px 18px;text-align:center;border-right:1px solid var(--line)}
.stats div:last-child{border-right:0}
.stats b{display:block;font-family:var(--serif);font-size:28px;font-weight:600;
  color:var(--blue);letter-spacing:-.03em;line-height:1}
.stats span{display:block;margin-top:7px;font-size:13.5px;color:var(--muted);line-height:1.45}

/* ---------- cards ---------- */
.grid{display:grid;gap:20px}
.grid--2{grid-template-columns:repeat(2,1fr)}
.grid--3{grid-template-columns:repeat(3,1fr)}
.grid--4{grid-template-columns:repeat(4,1fr)}
.card{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);padding:30px;
  transition:border-color .2s,box-shadow .2s,transform .2s}
.card:hover{border-color:#bcd0f5;box-shadow:var(--sh-2);transform:translateY(-2px)}
.card__i{width:50px;height:50px;border-radius:13px;background:#eaf1ff;color:var(--blue);
  display:flex;align-items:center;justify-content:center;margin-bottom:18px}
.card h3{font-size:19px;margin-bottom:9px}
.card p{font-size:14.8px;color:var(--muted);line-height:1.65}
.card img{border-radius:12px;margin-bottom:18px}

/* ---------- plans ---------- */
.plans{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-top:40px}
.plan{text-align:left;position:relative;background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);
  padding:32px 26px;display:flex;flex-direction:column;
  transition:border-color .2s,box-shadow .2s,transform .2s}
.plan:hover{box-shadow:var(--sh-2);transform:translateY(-2px)}
.plan--feat{border:2px solid var(--blue);box-shadow:var(--sh-blue)}
/* Entry-plan callout. Sits above the card rather than on its edge, so it
   reads as a pointer to the card rather than a label of it. */
.plan__flag{position:absolute;top:-15px;left:50%;transform:translateX(-50%);
  background:#eaf1ff;color:#1d4ed8;border:1px solid #cddffb;border-radius:var(--r-pill);
  padding:5px 14px;font-size:10.5px;font-weight:700;letter-spacing:.05em;
  text-transform:uppercase;white-space:nowrap}
.plan__tag{position:absolute;top:-13px;left:50%;transform:translateX(-50%);
  background:var(--blue);color:#fff;border-radius:var(--r-pill);padding:5px 15px;
  font-size:11.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;white-space:nowrap}
.plan__n{font-family:var(--serif);font-size:24px;font-weight:600}
.plan__d{font-size:13.8px;color:var(--muted);margin:6px 0 22px;min-height:42px;line-height:1.5}
.plan__p{display:flex;align-items:baseline;gap:3px}
.plan__p .cur{font-size:20px;color:var(--ink);font-weight:600;align-self:flex-start;margin-top:8px}
.plan__p .amt{font-family:var(--serif);font-size:44px;font-weight:600;letter-spacing:-.035em;
  font-variant-numeric:tabular-nums}
.plan__p .per{font-size:15px;color:var(--muted)}
.plan__term{margin:9px 0 22px;font-size:13px;color:var(--muted);line-height:1.5}
.plan__term b{color:var(--ink);font-weight:600}
.plan__f{display:grid;gap:11px;margin-top:24px;padding-top:22px;border-top:1px solid var(--line)}
.plan__f li{display:grid;grid-template-columns:18px 1fr;gap:11px;align-items:start;
  font-size:14.2px;line-height:1.5;color:var(--muted)}
.plan__f b{color:var(--ink);font-weight:600}
.plan__f .tick{width:18px;height:18px;border-radius:50%;background:#e6f7ed;margin-top:1px;
  display:flex;align-items:center;justify-content:center;flex:none}
.plan__f .tick svg{width:11px;height:11px;color:var(--green)}
.plan__f .no .tick{background:#f1f3f7}
.plan__f .no .tick svg{color:#a8b2c4}
.plan__f .no{color:#9aa5b8}

/* ---------- split ---------- */
.split{display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:center}
.split--flip .split__art{order:-1}
.split__l{display:grid;gap:13px;margin-top:24px}
.split__l li{display:flex;gap:11px;align-items:flex-start;font-size:15.5px;line-height:1.55}
.split__l svg{color:var(--green);flex:none;margin-top:3px}

/* ---------- steps ---------- */
.steps{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;margin-top:40px}
.step__n{width:44px;height:44px;border-radius:50%;background:var(--blue);color:#fff;
  display:flex;align-items:center;justify-content:center;font-weight:700;margin-bottom:16px}
.step h3{font-size:17px;margin-bottom:7px}
.step p{font-size:14.2px;color:var(--muted);line-height:1.6}

/* ---------- faq ---------- */
.faq{max-width:860px;margin:36px auto 0}
.faq details{border-bottom:1px solid var(--line)}
.faq summary{padding:22px 0;font-size:17px;font-weight:600;cursor:pointer;list-style:none;
  display:flex;justify-content:space-between;gap:24px;align-items:baseline;
  transition:color .16s}
.faq summary:hover{color:var(--blue)}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";color:var(--blue);font-size:22px;font-weight:300;line-height:1}
.faq details[open] summary::after{content:"–"}
.faq p{padding:0 0 24px;font-size:16px;color:var(--muted);line-height:1.72}

/* ---------- reviews ---------- */
.revs{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-top:38px}
.rev{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);padding:26px}
.rev__s{color:#f5a623;letter-spacing:.09em;font-size:14px}
.rev h4{font-size:15px;font-weight:600;margin:10px 0 8px;font-family:inherit;letter-spacing:0}
.rev p{font-size:14px;color:var(--muted);line-height:1.62}
.rev__w{display:flex;align-items:center;gap:11px;margin-top:20px;padding-top:18px;
  border-top:1px solid var(--line)}
.rev__w img{width:36px;height:36px;border-radius:50%;object-fit:cover}
.rev__n{font-size:13.8px;font-weight:600;line-height:1.3}
.rev__n span{display:block;font-weight:400;font-size:12px;color:var(--muted)}

/* ---------- rating badge ---------- */
.rate{display:inline-flex;align-items:center;gap:11px;background:#fff;border:1px solid var(--line);
  border-radius:var(--r-pill);padding:9px 18px;box-shadow:var(--sh-1);color:var(--ink)}
.rate:hover{border-color:#bcd0f5;color:var(--ink)}
.rate__s{color:#f5a623;letter-spacing:.06em;font-size:15px}
.rate__t{font-size:13.5px;color:var(--muted)}
.rate__t b{color:var(--ink)}

/* ---------- page hero for inner pages ---------- */
.phero{background:linear-gradient(180deg,#f2f7ff,#fff);border-bottom:1px solid var(--line);
  padding:64px 0 54px;text-align:center}
.phero h1{max-width:20ch;margin:0 auto}
.phero .lead{margin:18px auto 0}
.phero__cta{margin-top:30px;display:flex;gap:13px;justify-content:center;flex-wrap:wrap}

/* ---------- prose (policy pages) ---------- */
.prose{max-width:76ch;margin:0 auto;font-size:16.5px;line-height:1.78;color:var(--muted)}
.prose h2{font-size:25px;margin:44px 0 14px;color:var(--ink)}
.prose h3{font-size:19px;margin:30px 0 10px;color:var(--ink)}
.prose p{margin-bottom:18px}
.prose ul{margin:0 0 18px;padding-left:22px;list-style:disc}
.prose li{margin-bottom:9px}
.prose a{text-decoration:underline;text-underline-offset:3px}
.prose table{width:100%;border-collapse:collapse;margin:0 0 24px;font-size:15px}
.prose th,.prose td{border:1px solid var(--line);padding:11px 15px;text-align:left}
.prose th{background:var(--paper);font-weight:600;color:var(--ink)}

/* ---------- closing band ---------- */
.end{background:var(--navy);color:#fff;padding:78px 0;text-align:center;position:relative;
  overflow:hidden}
.end::before{content:"";position:absolute;inset:0;
  background:radial-gradient(760px 380px at 50% 0%,rgba(37,99,235,.42),transparent 66%)}
.end .wrap{position:relative}
.end h2{color:#fff;max-width:22ch;margin:0 auto}
.end p{margin:16px auto 0;font-size:17.5px;color:#a7b5cf;max-width:50ch}
.end .btn{margin-top:30px}

/* ---------- footer ---------- */
.ftr{background:var(--navy);color:#fff;padding:64px 0 26px}
.ftr__g{display:grid;grid-template-columns:1.6fr repeat(4,1fr);gap:36px}
.ftr__b img{height:34px;}
.ftr__b p{margin-top:18px;font-size:14.3px;color:#93a3bf;line-height:1.7;max-width:32ch}
.ftr h4{font-size:11.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:#7a8aa8;margin-bottom:18px;font-family:inherit}
.ftr ul{display:grid;gap:11px}
.ftr a{font-size:14.3px;color:#c5cfe0}
.ftr a:hover{color:#fff}
.ftr__pay{margin-top:22px;display:flex;flex-wrap:wrap;gap:7px}
.ftr__pay em{font-style:normal;font-size:11.5px;color:#c5cfe0;
  border:1px solid rgba(255,255,255,.18);border-radius:7px;padding:5px 11px}
.ftr__base{margin-top:52px;padding-top:24px;border-top:1px solid rgba(255,255,255,.13);
  display:flex;flex-wrap:wrap;gap:9px 26px;justify-content:space-between;
  font-size:13.5px;color:#7a8aa8}

/* ---------- responsive ---------- */
@media(max-width:1040px){
  .hero__g,.split{grid-template-columns:1fr;gap:38px}
  .split--flip .split__art{order:0}
  .plans,.revs{grid-template-columns:repeat(2,1fr)}
  .grid--4,.grid--3{grid-template-columns:repeat(2,1fr)}
  .steps{grid-template-columns:repeat(2,1fr)}
  .stats{grid-template-columns:repeat(2,1fr);margin-top:28px}
  .stats div:nth-child(2){border-right:0}
  .stats div:nth-child(-n+2){border-bottom:1px solid var(--line)}
  .ftr__g{grid-template-columns:1fr 1fr;gap:32px}
}
@media(max-width:700px){
  .sec{padding:52px 0}
  .plans,.revs,.grid--2,.grid--3,.grid--4,.steps,.stats{grid-template-columns:1fr}
  .stats div{border-right:0;border-bottom:1px solid var(--line)}
  .stats div:last-child{border-bottom:0}
  .ftr__g{grid-template-columns:1fr}
  .hero{padding:48px 0 40px}
}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}
  html{scroll-behavior:auto}
}

/* An included feature uses the base row style; this rule exists so the
   pairing with .no above is obvious to whoever reads this next. */
.plan__f li.yes{color:var(--muted)}

/* ---------- term switcher ---------- */
.terms{display:inline-flex;gap:4px;padding:5px;background:var(--paper);
  border:1px solid var(--line);border-radius:var(--r-pill);margin:26px auto 0}
.terms__b{display:inline-flex;align-items:center;gap:7px;border:0;background:none;
  font:inherit;font-size:14.5px;font-weight:600;color:var(--muted);cursor:pointer;
  padding:10px 20px;border-radius:var(--r-pill);white-space:nowrap;
  transition:background .18s,color .18s,box-shadow .18s}
.terms__b:hover{color:var(--ink)}
.terms__b.is-on{background:#fff;color:var(--ink);box-shadow:var(--sh-1)}
.terms__b em{font-style:normal;font-size:11.5px;font-weight:700;letter-spacing:.02em;
  color:var(--green);background:#e6f7ed;border-radius:var(--r-pill);padding:3px 8px}
.terms__b.is-on em{background:#d7f2e2}
.plan__price[hidden]{display:none}

/* ---------- domain table ---------- */
.dom{margin-top:38px;border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;
  background:#fff}
.dom table{width:100%;border-collapse:collapse;font-size:15.5px}
.dom th,.dom td{padding:15px 20px;text-align:left;border-bottom:1px solid var(--line)}
.dom thead th{background:var(--paper);font-size:12.5px;font-weight:700;letter-spacing:.09em;
  text-transform:uppercase;color:var(--muted)}
.dom tbody tr:last-child td{border-bottom:0}
.dom tbody tr:hover{background:var(--soft)}
.dom__x{font-weight:600;color:var(--ink);font-size:16.5px}
.dom__p{font-variant-numeric:tabular-nums;font-weight:600;color:var(--ink)}
.dom__r{font-variant-numeric:tabular-nums;color:var(--muted)}
.dom__s{display:inline-block;font-size:11.5px;font-weight:700;color:var(--green);
  background:#e6f7ed;border-radius:var(--r-pill);padding:3px 9px;margin-left:8px}
.dom__cta{text-align:right}
.dom__cta a{font-size:14.5px;font-weight:600}
@media(max-width:760px){
  .dom{border:0;background:none}
  .dom table,.dom tbody,.dom tr,.dom td{display:block;width:100%}
  .dom thead{display:none}
  .dom tr{background:#fff;border:1px solid var(--line);border-radius:var(--r);
    margin-bottom:12px;padding:6px 4px}
  .dom td{border-bottom:0;padding:9px 16px;display:flex;justify-content:space-between;gap:16px}
  .dom td::before{content:attr(data-l);font-size:13px;color:var(--muted);font-weight:500}
  .dom td:first-child::before{content:none}
  .dom__cta{justify-content:flex-start}
}

/* ---------- compare table ---------- */
.cmp{margin-top:36px;overflow-x:auto;border:1px solid var(--line);border-radius:var(--r-lg);
  background:#fff}
.cmp table{width:100%;border-collapse:collapse;font-size:15px;min-width:660px}
.cmp th,.cmp td{padding:14px 18px;text-align:left;border-bottom:1px solid var(--line)}
.cmp thead th{background:var(--paper);font-size:12.5px;letter-spacing:.09em;
  text-transform:uppercase;color:var(--muted);font-weight:700}
.cmp thead th:first-child{width:38%}
.cmp tbody tr:last-child td{border-bottom:0}
.cmp .ok{color:var(--green);font-weight:600}
.cmp .no{color:#9aa5b8}
.cmp__us{background:#f4f8ff}

/* ---------- callout ---------- */
.note{display:flex;gap:15px;padding:20px 22px;background:var(--paper);
  border:1px solid var(--line);border-left:3px solid var(--blue);
  border-radius:var(--r);margin-top:26px;text-align:left}
.note svg{color:var(--blue);flex:none;margin-top:2px}
.note p{font-size:14.8px;color:var(--muted);line-height:1.65}
.note b{color:var(--ink)}

/* ---------- reviews avatar ---------- */
.rev__av{width:36px;height:36px;border-radius:50%;background:#eaf1ff;color:var(--blue);
  display:flex;align-items:center;justify-content:center;font-weight:700;font-size:15px;flex:none}
.rev h3{font-size:15px;font-weight:600;margin:10px 0 8px;font-family:inherit;letter-spacing:0}

/* ---------- toc for long pages ---------- */
.toc{display:flex;flex-wrap:wrap;gap:9px;justify-content:center;margin-top:28px}
.toc a{font-size:14px;font-weight:500;color:var(--muted);background:#fff;
  border:1px solid var(--line);border-radius:var(--r-pill);padding:8px 16px}
.toc a:hover{border-color:var(--blue);color:var(--blue)}

/* ---------- misc ---------- */
.muted{color:var(--muted)}
.mt{margin-top:26px}
.hero__art img{border-radius:18px}

/* ---------- pricing card: discount row ---------- */
.plan__off{display:flex;align-items:center;gap:9px;margin-bottom:10px}
.plan__pct{font-size:12.5px;font-weight:700;letter-spacing:.02em;color:#c2410c;
  background:#fff1e7;border-radius:6px;padding:4px 9px}
.plan__off s{font-size:14.5px;color:#9aa5b8;text-decoration-thickness:1.5px}
.plan__term{min-height:20px}
.plan__f .tag{font-style:normal;font-size:11px;font-weight:700;letter-spacing:.01em;
  border-radius:6px;padding:2px 7px;white-space:nowrap;background:#e6f7ed;color:#15803d}
.plan__f .tag--n{background:#dbeafe;color:#1d4ed8}
.plan__f .tag--b{background:#dbeafe;color:#1d4ed8}
.plan__f li{align-items:center}
.plans__cmp{margin-top:30px;display:flex;justify-content:center}
.plans__cmp .btn svg{transition:transform .18s}
.plans__cmp .btn:hover svg{transform:translateY(2px)}

/* ---------- comparison table ---------- */
/* position:sticky resolves against the nearest SCROLLING ancestor, and
   overflow-x:auto makes this element one — which is why the header did not
   stick. On desktop the table fits, so there is no scroll container at all
   and sticky resolves against the viewport as intended. Horizontal
   scrolling is restored only below 900px, where the header pins to the top
   of the scroller instead. */
.cmp2{margin-top:10px}
@media(max-width:900px){
  .cmp2{overflow-x:auto;-webkit-overflow-scrolling:touch}
}
.cmp2 table{width:100%;border-collapse:collapse;text-align:left}
@media(max-width:900px){.cmp2 table{min-width:860px}}
.cmp2 th,.cmp2 td{padding:14px 18px;border-bottom:1px solid var(--line);font-size:14.8px}
.cmp2 tbody th{font-weight:400;color:var(--muted);width:32%}
.cmp2 td{text-align:center;color:var(--ink);font-weight:500;font-variant-numeric:tabular-nums}
.cmp2 td.is-feat{background:#f4f8ff}
.cmp2 .ok{color:var(--green);display:inline-flex}
.cmp2 .ok svg{width:17px;height:17px}
.cmp2 .dash{color:#c2cbda}
.cmp2 .tag{font-style:normal;font-size:10.5px;font-weight:700;background:#dbeafe;color:#1d4ed8;
  border-radius:5px;padding:2px 6px;margin-left:5px;vertical-align:1px}

/* sticky header — a 54-row table is unreadable once the column names go */
.cmp2 thead th{position:sticky;top:74px;z-index:20;background:#fff;
  border-bottom:1px solid var(--line);vertical-align:top;padding:18px;text-align:center;
  box-shadow:0 1px 0 var(--line)}
.cmp2 thead th.is-feat{background:#f4f8ff}
.cmp2__h{text-align:center}
.cmp2__ctl{text-align:left!important;width:32%}
.cmp2__lbl{display:block;font-size:12px;font-weight:600;color:var(--muted);margin-bottom:7px;
  letter-spacing:.03em}
.cmp2__tag{display:inline-block;background:#dbeafe;color:#1d4ed8;border-radius:var(--r-pill);
  padding:3px 10px;font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  margin-bottom:7px}
.cmp2__n{display:block;font-family:var(--serif);font-size:19px;font-weight:600;color:var(--ink)}
.cmp2__p{display:block;font-size:14px;color:var(--muted);margin:3px 0 11px;
  font-variant-numeric:tabular-nums}
.cmp2__p[hidden],.cmp2__cta[hidden]{display:none}
.btn--sm{padding:9px 18px;font-size:14px;width:100%}
.cmp2__cta{white-space:nowrap}

/* group headers, collapsible */
.cmp2__gh th{padding:0;background:var(--paper);border-bottom:1px solid var(--line);
  border-top:1px solid var(--line)}
.cmp2__gb{display:flex;align-items:center;justify-content:space-between;width:100%;
  border:0;background:none;font:inherit;font-size:16px;font-weight:600;color:var(--ink);
  padding:18px;cursor:pointer;font-family:var(--serif);letter-spacing:-.01em}
.cmp2__gb svg{color:var(--muted);transition:transform .2s;flex:none}
.cmp2__gb[aria-expanded="false"] svg{transform:rotate(-90deg)}
.cmp2__r[hidden]{display:none}
.cmp2__foot{margin-top:18px;text-align:center;font-size:13px;color:var(--muted)}

@media(max-width:900px){
  .cmp2 thead th{top:0}
  .cmp2 th,.cmp2 td{padding:12px 13px;font-size:14px}
  .cmp2__n{font-size:17px}
}

/* The jump target is the section, not the table, so the sticky header
   settles under the site header instead of above it. */
#compare-section{scroll-margin-top:0}


/* ==========================================================================
   PRICING CARDS — refined
   --------------------------------------------------------------------------
   A four-column price table is read across, not down: the eye compares the
   same line on each card. So every card keeps identical vertical rhythm and
   only the varying term is heavy.
   ========================================================================== */

.plans{align-items:stretch}
.plan{padding:34px 28px 30px;border-radius:20px;
  box-shadow:0 1px 2px rgba(15,27,51,.04)}
.plan:hover{box-shadow:0 18px 40px rgba(15,27,51,.10)}

/* The featured card lifts rather than shouts — a solid fill on one column
   makes the other three look switched off. */
.plan--feat{background:linear-gradient(180deg,#f7faff,#fff);
  box-shadow:0 20px 48px rgba(37,99,235,.15)}
.plan--feat:hover{box-shadow:0 26px 58px rgba(37,99,235,.19)}

.plan__n{font-size:26px;letter-spacing:-.03em}
.plan__d{font-size:14px;margin:7px 0 20px;min-height:40px}

/* price block */
.plan__off{margin-bottom:12px}
.plan__pct{font-size:12px;padding:5px 10px;border-radius:7px}
.plan__p{margin-bottom:12px;align-items:baseline}
.plan__p .cur{font-size:22px;margin-top:0;align-self:center;font-weight:500;
  position:relative;top:-10px}
.plan__p .amt{font-size:52px;line-height:1}
.plan__p .per{font-size:16px;margin-left:2px}
.plan__term{font-size:13.5px;line-height:1.55;margin-bottom:22px;color:var(--muted)}
.plan__term b{color:var(--ink)}

/* feature list */
.plan__f{margin-top:26px;padding-top:24px;gap:13px}
.plan__f li{font-size:14.3px;color:var(--muted);align-items:flex-start}
.plan__f b{color:var(--ink);font-weight:600}
.plan__f .tick{width:17px;height:17px;background:transparent;margin-top:2px}
.plan__f .tick svg{width:15px;height:15px;color:var(--green)}
.plan__f .tag{margin-left:2px}

/* A hairline between price and features, so the card reads as two blocks:
   what it costs, then what it is. */
.plan__price{padding-bottom:4px}

@media(max-width:1180px){
  .plan{padding:30px 22px 26px}
  .plan__p .amt{font-size:46px}
  .plan__n{font-size:23px}
}

/* group row count in the comparison */
.cmp2__ct{display:inline-block;margin-left:9px;font-style:normal;font-size:11.5px;
  font-weight:700;color:var(--muted);background:#eef1f6;border-radius:var(--r-pill);
  padding:2px 9px;vertical-align:2px}
.cmp2__gb[aria-expanded="false"]{color:var(--muted)}
.cmp2__gb:hover{color:var(--blue)}

/* ==========================================================================
   MOBILE OVERFLOW FIXES
   --------------------------------------------------------------------------
   A page that scrolls sideways on a phone looks broken even when everything
   is otherwise right, and it is what produces the strip of empty space on
   the right when you zoom.
   ========================================================================== */

/* clip, not hidden: overflow:hidden on an ancestor silently kills
   position:sticky, which is what the comparison header depends on. */
html{overflow-x:clip}
body{overflow-x:clip;max-width:100%}

/* Three term buttons at 20px padding each exceed a 360px screen. */
.terms{flex-wrap:wrap;justify-content:center;max-width:100%}
@media(max-width:520px){
  .terms{width:100%;border-radius:var(--r-lg)}
  .terms__b{flex:1 1 auto;justify-content:center;padding:11px 12px;font-size:13.5px}
  .terms__b em{font-size:10.5px;padding:2px 6px}
}

/* Long words in a narrow card push the card wider than the screen. */
.plan,.card,.rev,.step,.prose{min-width:0;overflow-wrap:break-word}
.plan__flag{max-width:calc(100% - 24px);white-space:normal;text-align:center;line-height:1.3}

/* Tables are the other usual cause. Each is already in its own scroller;
   this stops the scroller itself from stretching the page. */
.cmp2,.cmp,.dom{max-width:100%}

/* The hero glow is decorative and must never create scroll width. */
.hero{overflow:clip}

/* Header logo: cap the height and let width follow, so a wide source file
   cannot push the nav wider than the screen. */
.hdr__logo{display:flex;align-items:center;flex:none;max-width:52vw}
.hdr__logo img,.hdr__logo picture{height:32px;width:auto;max-width:100%;object-fit:contain}
@media(max-width:480px){
  .hdr__logo img{height:28px}
  .hdr__in{height:64px;padding:0 16px;gap:12px}
  .hdr__r{gap:8px}
  .hdr__r .btn{padding:10px 14px;font-size:14px}
}
.ftr__b img{height:32px;width:auto}

/* Anything with a fixed pixel width needs a ceiling on small screens. */
@media(max-width:400px){
  .hdr__pop{min-width:0;width:calc(100vw - 32px)}
  .wrap{padding:0 16px}
}

/* ==========================================================================
   VISUAL REFINEMENT PASS
   --------------------------------------------------------------------------
   The structure was right; this is about the things that separate a
   competent page from one that feels considered — vertical rhythm, a
   narrower tonal range, and motion that responds rather than decorates.
   ========================================================================== */

/* ---- type scale: tighter headings, more air in body copy ---- */
.h1{font-size:clamp(36px,5vw,60px);letter-spacing:-.042em;line-height:1.02}
.h2{font-size:clamp(29px,3.6vw,45px);letter-spacing:-.034em;line-height:1.08}
.lead{font-size:18.5px;line-height:1.68;color:var(--muted)}
.eyebrow{font-size:11.5px;letter-spacing:.16em;margin-bottom:16px;
  display:inline-flex;align-items:center;gap:8px}
.eyebrow::before{content:"";width:18px;height:1.5px;background:currentColor;
  border-radius:2px;opacity:.55}
.center .eyebrow::before{display:none}

/* ---- section rhythm ---- */
.sec{padding:96px 0}
@media(max-width:700px){.sec{padding:60px 0}}

/* ---- hero: a calmer gradient and a real depth cue ---- */
.hero{padding:88px 0 76px;
  background:linear-gradient(180deg,#eef4ff 0%,#f8fbff 46%,#fff 100%)}
.hero::before{top:-46%;right:-14%;width:64%;height:170%;
  background:radial-gradient(closest-side,rgba(37,99,235,.13),transparent 72%)}
.hero::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;
  background:linear-gradient(90deg,transparent,var(--line),transparent)}
.hero__pill{padding:8px 17px;font-size:13.5px;
  box-shadow:0 2px 8px rgba(15,27,51,.05)}
.hero__ticks{margin:30px 0 32px;gap:13px}
.hero__art img{box-shadow:0 30px 70px rgba(15,27,51,.13);border-radius:20px}

/* ---- buttons: a considered press, not a bounce ---- */
.btn{padding:14px 28px;border-radius:12px;font-size:15.5px}
.btn--primary{box-shadow:0 6px 18px rgba(37,99,235,.26)}
.btn--primary:hover{box-shadow:0 12px 30px rgba(37,99,235,.34);transform:translateY(-2px)}
.btn--primary:active,.btn--ghost:active{transform:translateY(0)}
.btn--ghost{background:#fff;border-color:var(--line);box-shadow:0 1px 2px rgba(15,27,51,.04)}
.btn--ghost:hover{border-color:#a9c4f7;background:#fbfcff;transform:translateY(-1px)}

/* ---- stat strip ---- */
.stats{border-radius:20px;box-shadow:0 14px 40px rgba(15,27,51,.09);margin-top:-42px}
.stats div{padding:26px 18px}
.stats b{font-size:31px}

/* ---- cards: a quieter resting state, a clearer hover ---- */
.card{border-radius:20px;padding:32px;
  box-shadow:0 1px 2px rgba(15,27,51,.035)}
.card:hover{border-color:#b9cdf5;box-shadow:0 20px 44px rgba(15,27,51,.10);
  transform:translateY(-3px)}
.card__i{width:48px;height:48px;border-radius:14px;
  background:linear-gradient(135deg,#eaf1ff,#dbe7ff);margin-bottom:20px}
.card h3{font-size:19.5px;letter-spacing:-.02em}
.card p{font-size:15px;line-height:1.68}

/* ---- steps: a connecting line, so it reads as a sequence ---- */
.steps{position:relative}
.step{position:relative}
.step__n{width:46px;height:46px;font-size:16px;
  background:linear-gradient(135deg,var(--blue),var(--blue-dark));
  box-shadow:0 6px 16px rgba(37,99,235,.28)}
@media(min-width:1041px){
  .steps>.step:not(:last-child)::after{content:"";position:absolute;top:23px;
    left:58px;right:-20px;height:1.5px;
    background:linear-gradient(90deg,#cddffb,transparent);pointer-events:none}
}

/* ---- reviews ---- */
.rev{border-radius:20px;padding:28px;transition:box-shadow .2s,transform .2s}
.rev:hover{box-shadow:0 16px 38px rgba(15,27,51,.09);transform:translateY(-2px)}
.rev__av{background:linear-gradient(135deg,#eaf1ff,#dbe7ff)}

/* ---- faq ---- */
.faq summary{padding:24px 0;font-size:17.5px;letter-spacing:-.01em}
.faq details[open] summary{color:var(--blue)}
.faq summary::after{transition:transform .18s}
.faq p{font-size:16.2px;line-height:1.76}

/* ---- closing band ---- */
.end{padding:92px 0}
.end::before{background:radial-gradient(820px 400px at 50% -8%,rgba(37,99,235,.5),transparent 68%)}
.end .btn--light{box-shadow:0 10px 30px rgba(0,0,0,.22)}

/* ---- footer ---- */
.ftr{padding:72px 0 28px}
.ftr a{transition:color .16s,padding-left .16s}
.ftr a:hover{padding-left:3px}

/* ---- header ---- */
.hdr{background:rgba(255,255,255,.88);backdrop-filter:blur(14px) saturate(140%)}
.hdr__pop{border-radius:20px;padding:10px;box-shadow:0 28px 64px rgba(15,27,51,.16)}

/* ---- comparison ---- */
.cmp2 thead th{padding:20px 18px}
.cmp2__gb{padding:20px 18px;font-size:16.5px}
.cmp2 tbody tr:hover td,.cmp2 tbody tr:hover th{background:#fafcff}
.cmp2 tbody tr:hover td.is-feat{background:#eef4ff}

/* ---- focus, everywhere ---- */
:focus-visible{outline:2.5px solid var(--blue);outline-offset:3px;border-radius:4px}

/* ==========================================================================
   MOBILE MENU — full-screen sheet
   --------------------------------------------------------------------------
   A dropdown leaves the page visible behind it and people tap through by
   accident. This takes the screen, has its own close control, and keeps the
   account and CTA pinned at the bottom where a thumb reaches.
   ========================================================================== */
.msheet{display:none}
.msheet.is-open{display:flex;flex-direction:column;position:fixed;inset:0;z-index:200;
  background:#fff}
body.is-locked{overflow:hidden}

.msheet__top{display:flex;align-items:center;justify-content:space-between;
  padding:16px 20px;border-bottom:1px solid var(--line);flex:none}
.msheet__logo img{height:28px;width:auto}
.msheet__x{width:42px;height:42px;border:0;background:none;color:var(--ink);cursor:pointer;
  display:flex;align-items:center;justify-content:center;border-radius:10px;
  -webkit-tap-highlight-color:transparent}
.msheet__x:active{background:var(--paper)}

.msheet__body{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:8px 20px 20px}

.msheet__plain{display:block;padding:18px 0;font-size:17px;font-weight:500;color:var(--ink);
  border-bottom:1px solid var(--line)}

.msheet__sec{padding:22px 0;border-bottom:1px solid var(--line)}
.msheet__sec:last-child{border-bottom:0}
.msheet__lbl{font-size:11.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:var(--faint,#8a97a8);margin-bottom:6px}

.msheet__row{display:flex;align-items:center;gap:15px;padding:15px 0;color:var(--ink);
  -webkit-tap-highlight-color:transparent}
.msheet__row:active{opacity:.6}
.msheet__i{width:26px;flex:none;color:var(--ink);display:flex}
.msheet__t{flex:1;font-size:16.5px;font-weight:500;letter-spacing:-.01em}
.msheet__c{color:#a8b4c6;display:flex;flex:none;transform:rotate(-90deg)}
.msheet__row--flat{padding:17px 0}

.msheet__foot{flex:none;display:flex;align-items:center;gap:14px;justify-content:space-between;
  padding:16px 20px;border-top:1px solid var(--line);background:#fff;
  padding-bottom:calc(16px + env(safe-area-inset-bottom))}
.msheet__acct{display:flex;align-items:center;gap:9px;font-size:15px;font-weight:600;
  color:var(--ink)}
.msheet__foot .btn{padding:12px 20px;font-size:14.5px}

@media(min-width:1041px){.msheet,.msheet.is-open{display:none}}

/* ==========================================================================
   COMPARISON ON MOBILE — one plan at a time
   --------------------------------------------------------------------------
   Four columns do not fit on a phone, and a horizontal scroller means the
   row label scrolls out of view — you end up looking at a number with no
   idea what it measures. So below 900px the table shows one plan, chosen
   from a tab bar, with the price and CTA pinned to the bottom.
   ========================================================================== */

.cmp2__tabs{display:none}
.cmp2__bar{display:none}

@media(max-width:900px){

  .cmp2{overflow-x:visible;border:1px solid var(--line);border-radius:var(--r-lg);
    background:#fff}
  .cmp2 table{min-width:0;width:100%}

  /* the tab bar rides under the site header */
  .cmp2__tabs{display:flex;gap:8px;overflow-x:auto;-webkit-overflow-scrolling:touch;
    scrollbar-width:none;padding:12px 0 14px;margin:0 -4px 4px;
    position:sticky;top:64px;z-index:30;background:#fff}
  .cmp2__tabs::-webkit-scrollbar{display:none}
  .cmp2__tab{flex:none;border:0;background:var(--paper);color:var(--ink);
    font:inherit;font-size:14.5px;font-weight:600;padding:11px 20px;
    border-radius:var(--r-pill);cursor:pointer;white-space:nowrap;
    -webkit-tap-highlight-color:transparent;transition:background .16s,color .16s}
  .cmp2__tab.is-on{background:var(--ink);color:#fff}

  /* hide the desktop header row and every column but the active plan */
  .cmp2 thead{display:none}
  .cmp2 td[data-plan]{display:none}
  .cmp2 td[data-plan].is-active{display:table-cell}

  .cmp2 tbody th{width:auto;font-size:15.5px;color:var(--ink);padding:16px 18px}
  .cmp2 td{text-align:right;font-size:15.5px;padding:16px 18px;color:var(--muted);
    font-weight:500}
  .cmp2 td.is-feat{background:transparent}
  .cmp2 tbody tr:hover td,.cmp2 tbody tr:hover th{background:transparent}

  .cmp2__gh th{padding:0}
  .cmp2__gb{padding:18px;font-size:16.5px}

  /* room for the pinned bar */
  #compare-section{padding-bottom:168px}

  .cmp2__bar{display:block;position:fixed;left:0;right:0;bottom:0;z-index:120;
    background:#fff;border-top:1px solid var(--line);
    box-shadow:0 -6px 24px rgba(15,27,51,.10);
    padding:14px 18px calc(14px + env(safe-area-inset-bottom));
    transform:translateY(110%);transition:transform .24s ease}
  .cmp2__bar.is-up{transform:none}
  .cmp2__barin[hidden]{display:none}
  .cmp2__barp{text-align:center;font-size:14px;color:var(--muted);margin-bottom:10px}
  .cmp2__barp s{color:#9aa5b8;margin-right:5px}
  .cmp2__barp b{color:var(--ink);font-size:16px}
  .cmp2__barp em{font-style:normal;color:var(--green);font-weight:600;margin-left:4px}
  .cmp2__barn{display:block;text-align:center;font-size:12px;color:var(--muted);margin-top:9px}
}


/* ==========================================================================
   COMPARISON — ruled, not boxed
   --------------------------------------------------------------------------
   Vertical rules and an outer border made the table read as a grid of cells.
   A spec sheet is read row by row, so only the horizontal rules stay: each
   feature gets an underline and nothing else competes with it.
   ========================================================================== */
.cmp2{border:0;border-radius:0;background:transparent}
.cmp2 thead th{border-bottom:1px solid var(--line);box-shadow:none;border-right:0}
.cmp2 th,.cmp2 td{border-right:0;border-left:0}
.cmp2 td.is-feat,.cmp2 thead th.is-feat{background:transparent}
.cmp2 tbody tr:hover td.is-feat{background:transparent}

/* The featured column is marked by a single tint on the header only, so the
   eye still finds it without a full-height stripe cutting the rows apart. */
.cmp2 thead th.is-feat .cmp2__n{color:var(--blue)}

.cmp2__gh th{background:transparent;border-top:1px solid var(--line);
  border-bottom:1px solid var(--line-2,#eef1f6)}
.cmp2__gb{padding:22px 0}
.cmp2 tbody th{padding-left:0}
.cmp2 tbody tr:last-child td,.cmp2 tbody tr:last-child th{border-bottom:1px solid var(--line)}
.cmp2 tbody tr:hover td,.cmp2 tbody tr:hover th{background:transparent}

@media(max-width:900px){
  .cmp2{border:0}
  .cmp2 tbody th{padding-left:0}
  .cmp2 td{padding-right:0}
  .cmp2__gb{padding:20px 0}
}


/* ---- hero on white ----
   The tinted hero made the top of every page a different colour from the
   rest of it. White throughout lets the hero image and the type carry the
   page, and the rule underneath still separates it from what follows. */
.hero{background:#fff}
.phero{background:#fff}

/* ---- comparison group headings: icon + plus/minus ---- */
.cmp2__gn{display:flex;align-items:center;gap:14px;text-align:left}
.cmp2__gi{display:flex;color:var(--ink);flex:none}
.cmp2__gb[aria-expanded="false"] .cmp2__gi{color:var(--muted)}
.cmp2__pm{position:relative;width:20px;height:20px;flex:none}
.cmp2__pm::before,.cmp2__pm::after{content:"";position:absolute;background:var(--ink);
  border-radius:2px;transition:transform .2s,opacity .2s}
.cmp2__pm::before{left:0;right:0;top:9px;height:2px}
.cmp2__pm::after{top:0;bottom:0;left:9px;width:2px}
.cmp2__gb[aria-expanded="true"] .cmp2__pm::after{transform:scaleY(0);opacity:0}
.cmp2__gb svg.spx-chev{display:none}

/* ==========================================================================
   PLAN CARD — grouped feature list
   ========================================================================== */
.plan__sec{margin:26px 0 0;padding-bottom:12px;border-bottom:1px solid var(--line);
  font-size:11px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;
  color:#8a97a8}
.plan__f{margin-top:14px;padding-top:0;border-top:0;gap:11px}
.plan__f:first-of-type{margin-top:22px;padding-top:22px;border-top:1px solid var(--line)}

/* Absent features stay visible, greyed. A blank where a rival prints a tick
   is the thing buyers misread; a visible dash tells the whole story of why
   the next plan up exists. */
.plan__f li.no{color:#a6b0c0}
.plan__f li.no b{color:#a6b0c0;font-weight:600}
.plan__f li.no .tick svg{color:#c3cbd8}

/* ---- why this plan ---- */
.plan__why{margin-top:26px;padding:16px 18px;background:#f2f7ff;
  border:1px solid #dbe7fb;border-radius:12px}
.plan__why b{display:block;font-size:13.5px;font-weight:700;color:var(--blue-dark,#1b4fd1);
  margin-bottom:5px}
.plan__why span{display:block;font-size:13.6px;line-height:1.58;color:var(--muted)}

/* ==========================================================================
   HERO IMAGE
   --------------------------------------------------------------------------
   A heavy drop shadow on a floating rectangle reads as a modal dialog —
   the browser convention for "something has popped up over the page". A
   hairline border and a shadow tight enough to feel like paper reads as
   part of the page instead.
   ========================================================================== */
.hero__art img{
  border:1px solid var(--line);
  border-radius:16px;
  box-shadow:0 2px 4px rgba(15,27,51,.04), 0 12px 28px rgba(15,27,51,.06);
}

/* ==========================================================================
   COLOUR — a narrower, warmer range
   --------------------------------------------------------------------------
   The palette had one blue doing every job, so emphasis had nowhere to
   escalate to. These add a deeper ink for headings and a softer tint for
   surfaces, which lets the blue mean "act" rather than just "brand".
   ========================================================================== */
:root{
  --ink:#0d1a2f;
  --muted:#5a6980;
  --faint:#8a97a8;
  --line:#e2e8f2;
  --line-2:#eef2f8;
  --paper:#f6f9fd;
  --soft:#fbfcfe;
  --blue:#2563eb;
  --blue-dark:#1b4fd1;
  --blue-soft:#eef4ff;
  --navy:#0a1428;
  --green:#0f9d58;
}
.sec--paper{background:var(--paper)}
.card__i{background:linear-gradient(135deg,var(--blue-soft),#dfe9ff);color:var(--blue-dark)}
.eyebrow{color:var(--blue-dark)}
.hero__pill{background:#fff;border-color:var(--line)}
.stats b{color:var(--blue-dark)}

/* ==========================================================================
   FEATURE TOOLTIPS
   --------------------------------------------------------------------------
   CSS only. An earlier version of these on another page used a scroll
   handler to reposition the bubble — 52 listeners firing on every scroll
   event, on a page whose traffic is mostly mobile. This one costs nothing:
   the bubble is a pseudo-element on a positioned parent, revealed on hover
   and on focus.

   Focus matters as much as hover here. tabindex makes each one reachable by
   keyboard AND gives touch devices something to tap, since :hover on a phone
   is a tap that then sticks.
   ========================================================================== */


/* the little arrow */

/* The last column would push its bubble off-screen, so those open leftward.
   Same for the right half of a two-column layout. */

/* On a phone the cards are one per row, so a wide bubble has room — but it
   must not exceed the viewport. */
@media(max-width:700px){
}

/* green tag for "Free forever" */
.plan__f .tag--g{background:#e6f7ed;color:#0f7a41}


/* A tooltip rises above its card, so nothing in the chain may clip it. */
.plans,.plan,.plan__f,.plan__f li{overflow:visible}

/* ==========================================================================
   PRICING — wider
   --------------------------------------------------------------------------
   Four cards with a grouped, tooltipped feature list need more room than
   the 1420px container gave them: labels like "Unlimited mailboxes on your
   domain" were wrapping to three lines, which broke the row alignment that
   makes a four-column table readable.

   Only the pricing block widens. Prose stays at its own measure, because
   a 1620px paragraph is unreadable.
   ========================================================================== */
@media(min-width:1280px){
  .wrap--wide{max-width:1620px;padding-inline:32px}
  .plans{gap:22px}
  .plan{padding:36px 30px 32px}
  .plan__f li{font-size:14.6px}
}

/* Between tablet and that breakpoint the cards still benefit from the full
   width available, just without the extra padding. */
@media(min-width:1041px) and (max-width:1279px){
  .wrap--wide{max-width:none;padding-inline:28px}
}

/* ==========================================================================
   CARD GROUPS — Hostinger-style
   ========================================================================== */

/* The label is a sentence with a colon, not a tracked-out uppercase rule.
   It reads as an introduction to the block rather than a table header. */
.plan__sec{margin:26px 0 2px;padding:0;border:0;
  font-size:14.8px;font-weight:700;letter-spacing:-.01em;
  text-transform:none;color:var(--ink)}
.plan__f{margin-top:12px}
.plan__f:first-of-type{margin-top:22px;padding-top:22px;border-top:1px solid var(--line)}

/* An icon row sits a touch lower and uses the ink colour, so the marks read
   as logos rather than as a second kind of tick. */
.tick--i{color:var(--ink);margin-top:1px}
.plan__f li.no .tick--i{color:#c3cbd8}

/* ---- the featured card, dark ----
   One dark column among three light ones does what a badge alone cannot:
   the eye lands there first, and the plan reads as the considered choice
   rather than the one with a sticker on it. */
.plan--feat{background:linear-gradient(170deg,#101c33 0%,#0a1428 100%);
  border-color:#1f3054;color:#e4eaf5}
.plan--feat:hover{background:linear-gradient(170deg,#132138 0%,#0b1730 100%)}
.plan--feat .plan__n{color:#fff}
.plan--feat .plan__d{color:#9fb0cd}
.plan--feat .plan__p .cur,.plan--feat .plan__p .amt{color:#fff}
.plan--feat .plan__p .per{color:#9fb0cd}
.plan--feat .plan__term{color:#9fb0cd}
.plan--feat .plan__term b{color:#fff}
.plan--feat .plan__off s{color:#8095b5}
.plan--feat .plan__pct{background:rgba(255,255,255,.1);color:#ffd9a8;border-color:transparent}
.plan--feat .plan__sec{color:#fff}
.plan--feat .plan__f{border-color:rgba(255,255,255,.12)}
.plan--feat .plan__f li{color:#b9c7de;border-color:rgba(255,255,255,.08)}
.plan--feat .plan__f b{color:#fff}
.plan--feat .plan__f .tick svg{color:#5eead4}
.plan--feat .plan__f .tick--i{color:#e4eaf5}
.plan--feat .plan__f li.no{color:#6a7b99}
.plan--feat .plan__f li.no .tick svg{color:#4a5a78}
.plan--feat .plan__why{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.14)}
.plan--feat .plan__why b{color:#8fb6ff}
.plan--feat .plan__why span{color:#b9c7de}
.plan--feat .plan__tag{background:#fff;color:var(--ink)}
.plan--feat .plan__flag{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.22);
  color:#a5f3d0}
.plan--feat .btn--primary{background:#fff;color:var(--ink);border-color:#fff;box-shadow:none}
.plan--feat .btn--primary:hover{background:#dde6f7;color:var(--ink);border-color:#dde6f7}
.plan--feat .tag{background:rgba(255,255,255,.12);color:#cfe0ff}
.plan--feat .tag--g{background:rgba(94,234,212,.14);color:#5eead4}

/* ==========================================================================
   HEADER — account icon
   ========================================================================== */
.hdr__acct{display:flex;align-items:center;justify-content:center;width:42px;height:42px;
  border-radius:11px;color:var(--ink);border:1px solid transparent;transition:background .16s,border-color .16s}
.hdr__acct:hover{background:var(--paper);border-color:var(--line);color:var(--blue)}
@media(max-width:1040px){.hdr__cta{display:none}}

/* ==========================================================================
   MOBILE MENU — drill-down
   --------------------------------------------------------------------------
   Level 2 slides over level 1 rather than replacing it, so "back" feels
   like a direction rather than a reload.
   ========================================================================== */
.msheet__body{position:relative;overflow-x:hidden}
.msheet__lvl{display:none}
.msheet__lvl.is-on{display:block;animation:spxSlide .22s ease}
@keyframes spxSlide{from{opacity:0;transform:translateX(14px)}to{opacity:1;transform:none}}
.msheet__lvl[data-level="root"].is-on{animation-name:spxSlideBack}
@keyframes spxSlideBack{from{opacity:0;transform:translateX(-14px)}to{opacity:1;transform:none}}

.msheet__open{display:flex;align-items:center;width:100%;border:0;background:none;
  font:inherit;text-align:left;cursor:pointer;color:var(--ink);padding:17px 0;
  border-bottom:1px solid var(--line-2,#eef2f8);-webkit-tap-highlight-color:transparent}
.msheet__row--flat{border-bottom:1px solid var(--line-2,#eef2f8)}
.msheet__open:active,.msheet__row:active{opacity:.6}

.msheet__back{display:flex;align-items:center;gap:9px;width:100%;border:0;background:none;
  font:inherit;cursor:pointer;padding:16px 0;color:var(--muted);
  font-size:11.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  border-bottom:1px solid var(--line);-webkit-tap-highlight-color:transparent}
.msheet__back svg{transform:rotate(90deg);color:var(--ink)}

.msheet__row--rich{align-items:flex-start;gap:15px;padding:16px 0;
  border-bottom:1px solid var(--line-2,#eef2f8)}
.msheet__row--rich:last-child{border-bottom:0}
.msheet__d{display:block;font-size:14px;color:var(--muted);line-height:1.5;margin-top:3px;
  font-weight:400}
.msheet__row--rich .msheet__t{font-size:16.5px;font-weight:600;display:block}
.msheet__foot{justify-content:flex-start}

/* ==========================================================================
   COMPARISON — duration control
   ========================================================================== */
.cmp2__lbl{font-size:11.5px;font-weight:700;letter-spacing:.11em;text-transform:uppercase;
  color:var(--faint,#8a97a8)}

/* tooltips inside the table need their own row to stack above */
.cmp2 tbody th{position:relative;z-index:1}
.cmp2 tbody tr:hover th,.cmp2 tbody th:focus-within{z-index:40}

/* A tooltip near the top of the viewport opens downward instead. */


/* ==========================================================================
   TOOLTIPS — rebuilt
   --------------------------------------------------------------------------
   The previous version had a correct arrow that was never visible: .tip
   created no stacking context, so the next list row painted straight over
   the bubble and its pointer. Raising the tip on hover/focus fixes it.

   Styled after the reference: a solid blue panel with generous padding and
   a clear pointer, rather than a thin dark strip.
   ========================================================================== */

.tip{
  position:relative;
  display:inline;
  border-bottom:1px dashed #9fb0c8;
  cursor:help;
  outline:none;
  -webkit-tap-highlight-color:transparent;
}
.tip:hover,.tip:focus,.tip:focus-visible{border-bottom-color:var(--blue)}

/* The whole point: lift the hovered tip above every sibling row. */
.tip:hover,.tip:focus,.tip:focus-visible{z-index:200}

.tip::after{
  content:attr(data-tip);
  position:absolute;
  bottom:calc(100% + 14px);
  left:-14px;
  width:max-content;
  max-width:300px;
  background:var(--blue);
  color:#fff;
  font-family:inherit;
  font-size:14px;
  font-weight:500;
  line-height:1.55;
  letter-spacing:0;
  text-align:left;
  padding:16px 18px;
  border-radius:14px;
  box-shadow:0 18px 40px rgba(15,27,51,.28);
  opacity:0;visibility:hidden;transform:translateY(5px);
  transition:opacity .16s ease,transform .16s ease,visibility .16s;
  z-index:201;
  pointer-events:none;
  white-space:normal;
}

/* The pointer. Drawn with borders so it inherits no background and can
   never disagree with the bubble's colour. */
.tip::before{
  content:"";
  position:absolute;
  bottom:calc(100% + 4px);
  left:16px;
  width:0;height:0;
  border-left:9px solid transparent;
  border-right:9px solid transparent;
  border-top:10px solid var(--blue);
  opacity:0;visibility:hidden;
  transition:opacity .16s,visibility .16s;
  z-index:202;
  pointer-events:none;
}

.tip:hover::after,.tip:focus::after,.tip:focus-visible::after,
.tip:hover::before,.tip:focus::before,.tip:focus-visible::before{
  opacity:1;visibility:visible}

/* Near the top of the viewport it opens downward, pointer flipped. */

/* Last column opens leftward so the bubble stays on screen. */

@media(max-width:820px){
  .tip::after{max-width:min(300px,calc(100vw - 48px));font-size:13.5px;padding:14px 16px}
}

/* On the dark featured card the blue would disappear into the background,
   so it inverts to white on ink. */
.plan--feat .tip{border-bottom-color:rgba(255,255,255,.38)}
.plan--feat .tip:hover,.plan--feat .tip:focus{border-bottom-color:#8fb6ff}
.plan--feat .tip::after{background:#fff;color:var(--ink);box-shadow:0 18px 40px rgba(0,0,0,.45)}
.plan--feat .tip::before{border-top-color:#fff}

/* Rows must not clip a bubble rising out of them. */
.plans,.plan,.plan__f,.plan__f li,.cmp2,.cmp2 tbody,.cmp2 tr,.cmp2 th{overflow:visible}
.cmp2 tbody th{position:relative}
.cmp2 tbody tr:hover th,.cmp2 tbody th:focus-within{z-index:200}

/* ==========================================================================
   COMPARISON — duration control
   --------------------------------------------------------------------------
   Scoped to .cmp2 so it beats the base rule, which was setting a background
   shorthand and wiping out the custom chevron.
   ========================================================================== */
.cmp2 .cmp2__sel,
.cmp2__sel{
  appearance:none;-webkit-appearance:none;-moz-appearance:none;
  width:100%;max-width:230px;
  padding:13px 40px 13px 15px;
  font-family:inherit;
  font-size:15px;
  font-weight:600;
  color:var(--ink);
  background-color:#fff;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232563eb' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;
  background-position:right 14px center;
  background-size:18px;
  border:1.5px solid var(--line);
  border-radius:12px;
  cursor:pointer;
  transition:border-color .16s,box-shadow .16s;
}
.cmp2 .cmp2__sel:hover{border-color:var(--blue)}
.cmp2 .cmp2__sel:focus{border-color:var(--blue);box-shadow:0 0 0 3px var(--ring);outline:none}
.cmp2__lbl{display:block;margin-bottom:8px;font-size:11.5px;font-weight:700;
  letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}


/* ==========================================================================
   DURATION LISTBOX
   --------------------------------------------------------------------------
   A native <select> was the wrong control here: the operating system draws
   its options, so a highlighted row and a "Best value" badge are impossible.
   This is a button plus a list, with the keyboard behaviour a select would
   have given for free.
   ========================================================================== */

.dd{position:relative;max-width:250px}

.dd__btn{display:flex;align-items:center;justify-content:space-between;gap:14px;
  width:100%;padding:14px 16px;font:inherit;font-size:15.5px;font-weight:600;
  color:var(--ink);background:#fff;border:1.5px solid var(--line);border-radius:12px;
  cursor:pointer;text-align:left;
  transition:border-color .16s,box-shadow .16s,background .16s}
.dd__btn:hover{border-color:#a9c4f7}
.dd.is-open .dd__btn{border-color:var(--blue);background:#f7faff;
  box-shadow:0 0 0 3px var(--ring)}
.dd__val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dd__chev{display:flex;color:var(--blue);transition:transform .2s;flex:none}
.dd.is-open .dd__chev{transform:rotate(180deg)}

.dd__list{position:absolute;top:calc(100% + 8px);left:0;right:0;z-index:80;
  background:#fff;border:1px solid var(--line);border-radius:12px;padding:6px;
  box-shadow:0 20px 44px rgba(15,27,51,.16);
  opacity:0;visibility:hidden;transform:translateY(-6px);
  transition:opacity .16s,transform .16s,visibility .16s;
  list-style:none;margin:0}
.dd.is-open .dd__list{opacity:1;visibility:visible;transform:none}

.dd__opt{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:13px 14px;border-radius:9px;font-size:15.5px;color:var(--ink);cursor:pointer;
  outline:none;-webkit-tap-highlight-color:transparent;
  transition:background .14s,color .14s}
.dd__opt:hover,.dd__opt:focus-visible{background:var(--paper)}
.dd__opt.is-sel{background:#eaf1ff;color:var(--blue);font-weight:600}
.dd__opt.is-sel:hover{background:#e0eaff}

.dd__best{font-style:normal;font-size:12.5px;font-weight:600;color:var(--blue);
  background:#fff;border:1px solid #bcd3fa;border-radius:999px;padding:4px 11px;
  white-space:nowrap}

@media(max-width:900px){
  .dd{max-width:none}
  .dd__list{position:static;opacity:1;visibility:visible;transform:none;
    box-shadow:none;margin-top:8px;display:none}
  .dd.is-open .dd__list{display:block}
}


/* Logo sized to the supplied file — 42px is where its lockup reads clearly
   without crowding the 70px bar. */
.hdr__logo img{height:42px}
.hdr__in{height:78px}
.msheet__logo img{height:38px}
.ftr__b img{height:40px}
@media(max-width:480px){
  .hdr__logo img{height:42px}
  .hdr__in{height:72px;padding:0 16px}
}
/* the sticky comparison header sits under the taller bar */
.cmp2 thead th{top:78px}
@media(max-width:900px){.cmp2 thead th{top:0}}
.cmp2__tabs{top:68px}


/* ==========================================================================
   COMPARISON — sticky header opacity and the featured column
   --------------------------------------------------------------------------
   The sticky header was letting rows show through as they passed underneath.
   A <th> with a background still lets the CELL GAPS through unless the row
   itself is opaque, and border-collapse leaves the table's own background
   visible at the seams. Both surfaces are painted here.
   ========================================================================== */
.cmp2 thead{background:#fff}
.cmp2 thead tr{background:#fff}
.cmp2 thead th{background:#fff;background-clip:padding-box}
.cmp2 thead th.is-feat{background:var(--blue-soft,#eef4ff)}

/* A shadow under the header, so a row passing beneath reads as behind it
   rather than merging into it. */
.cmp2 thead th::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;
  background:var(--line)}

/* The featured column, marked top to bottom. A badge alone does not survive
   fifty rows of scrolling — by row thirty you have forgotten which column
   was recommended. */
.cmp2 td.is-feat{background:var(--blue-soft,#eef4ff)}
.cmp2 tbody tr:hover td.is-feat{background:#e3ecff}
.cmp2__gh th{background:#fff}

/* The tab bar on mobile has the same problem. */
.cmp2__tabs{background:#fff}


/* ==========================================================================
   STACKING ORDER — one place, stated once
   --------------------------------------------------------------------------
   The bug this fixes: the sticky comparison header sat at z-index 20, but
   hovering a row raised that row to 200 so it could show its tooltip. The
   row then painted straight over the sticky header, which is why plan names
   and prices appeared to slide under or over the logo bar.

   The order, highest first:
     200  site header      — must cover everything, it is the way out
     150  mobile sheet     — takes the screen when open
     140  sticky CTA bar   — above the table, below the sheet
      90  table head       — above every row, below the site header
      60  hovered row      — above its neighbours so a tooltip escapes
      61  the tooltip itself
       1  a resting row

   Header height also lives here as a variable, so the sticky offset cannot
   drift out of step with the bar it sits under.
   ========================================================================== */

:root{ --hdr-h:78px }
@media(max-width:1040px){ :root{ --hdr-h:72px } }

.hdr{z-index:200}
.hdr__in{height:var(--hdr-h)}
.msheet.is-open{z-index:150}

.cmp2 thead th{top:var(--hdr-h);z-index:90}
.cmp2__tabs{top:var(--hdr-h);z-index:88}
.cmp2 tbody th{z-index:1}
.cmp2 tbody tr:hover th,.cmp2 tbody th:focus-within{z-index:60}
.tip:hover,.tip:focus,.tip:focus-visible{z-index:60}
.tip::after{z-index:61}
.tip::before{z-index:62}

@media(max-width:900px){
  .cmp2 thead th{top:0}
  .cmp2__bar{z-index:140}
}

/* Scroll targets clear the header rather than hiding beneath it. */
[id]{scroll-margin-top:calc(var(--hdr-h) + 12px)}
#compare-section{scroll-margin-top:var(--hdr-h)}


/* A tooltip must also be able to paint OVER the sticky table head when it
   opens upward from a row just beneath it. Below the site header, above
   everything else. */
.tip:hover,.tip:focus,.tip:focus-visible{z-index:95}
.tip::after{z-index:96}
.tip::before{z-index:97}
.cmp2 tbody tr:hover th,.cmp2 tbody th:focus-within{z-index:95}


/* ==========================================================================
   GROUP HEADING ROWS
   --------------------------------------------------------------------------
   The bug: `.cmp2 tbody tr:hover th` raises a hovered row to 95 so its
   tooltip can escape. A group heading row is also a `th` inside `tbody`, so
   hovering it — which you must do to click it — lifted the whole heading
   above the sticky table head at 90. The head's buttons were then painted
   over by the heading passing across them.

   Group headings never carry a tooltip, so they are excluded from the lift
   and pinned below the head instead.
   ========================================================================== */
.cmp2__gh th{position:relative;z-index:2}
.cmp2 tbody tr.cmp2__gh:hover th,
.cmp2 tbody tr.cmp2__gh th:focus-within{z-index:2}

/* The heading is opaque, so a row scrolling beneath it does not show through
   its own background. */
.cmp2__gh th{background:#fff;background-clip:padding-box}
.cmp2__gb{position:relative;background:transparent}


/* ==========================================================================
   THE ROW LIFT, REMOVED
   --------------------------------------------------------------------------
   Symptom: while scrolling, rows flickered above the sticky table head and
   settled back once scrolling stopped.

   Cause: I was lifting the whole hovered ROW to z-index 95 so its tooltip
   could escape. During a scroll the pointer does not move, so every row
   passing beneath it is hovered in turn — and each one, while it passed
   under the head, was painted on top of it. Stopping the scroll ended the
   hover on that row, which is the "fade out".

   Fix: lift only the tooltip, never the row. .tip is position:relative and
   takes a z-index only while open, so the bubble escapes on its own and the
   row it sits in stays where it belongs.
   ========================================================================== */

.cmp2 tbody th{position:static;z-index:auto}
.cmp2 tbody tr:hover th,
.cmp2 tbody th:focus-within,
.cmp2 tbody tr:hover td{z-index:auto}

/* The tooltip still needs to clear the head, and it can do that alone. */
.tip:hover,.tip:focus,.tip:focus-visible{z-index:95}
.tip::after{z-index:96}
.tip::before{z-index:97}

/* Nothing in the chain may clip a bubble on its way out. */
.cmp2,.cmp2 table,.cmp2 tbody,.cmp2 tr,.cmp2 th,.cmp2 td{overflow:visible}


/* The sticky head gets its own compositing layer. Without this the browser
   repaints it in the same pass as the rows sliding under it, which on a long
   table can show a row for a frame before the head is drawn over it. */
.cmp2 thead th{will-change:transform}


/* ==========================================================================
   SINGLE TYPEFACE — DM Sans throughout
   --------------------------------------------------------------------------
   Headings were set in Fraunces, a display serif, for contrast against the
   body text. This overrides that so the whole site runs on one family.

   Losing the serif costs the page its typographic contrast, so weight and
   letter-spacing have to do that work instead: headings go to 700 and tighten
   further, because a sans-serif at 600 looks soft next to body copy in the
   same face. Figures keep tabular numerals so price columns still align.

   To go back, delete this block — the Fraunces variable and its rules are
   untouched above.
   ========================================================================== */

:root{ --serif:'DM Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif }

h1,h2,h3,h4,
.h1,.h2,.h3,
.plan__n,.cmp2__n,.stats b,.fig,.plan__p .amt,.cmp2__gb,.rev h3,.card h3,.step h3{
  font-family:'DM Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
}

/* Weight carries what the serif used to. */
h1,h2,h3,h4,.h1,.h2,.h3{font-weight:700}
.h1{letter-spacing:-.045em}
.h2{letter-spacing:-.038em}
.h3,.card h3,.step h3,.rev h3{letter-spacing:-.022em;font-weight:700}

.plan__n{font-weight:700;letter-spacing:-.032em}
.plan__p .amt{font-weight:700;letter-spacing:-.04em;font-variant-numeric:tabular-nums}
.stats b{font-weight:700;letter-spacing:-.035em}
.fig{font-weight:700;font-variant-numeric:tabular-nums}
.cmp2__n{font-weight:700;letter-spacing:-.025em}
.cmp2__gb{font-weight:700;letter-spacing:-.02em}
.prose h2,.prose h3{font-weight:700}

/* ==========================================================================
   TYPE SCALE — retuned
   --------------------------------------------------------------------------
   Matched to the reference: one family, weight 600 rather than 700 for
   headings, size doing the work instead of weight, and tighter tracking as
   the size goes up. Body copy stays at 400 with generous leading.

   The rule the reference follows consistently: the larger the type, the
   tighter the tracking. At 48px the default spacing looks loose; at 15px
   it looks correct. Everything below applies that in steps.
   ========================================================================== */

body{font-size:16px;line-height:1.5;font-weight:400;letter-spacing:-.005em}

/* headings */
h1,h2,h3,h4,.h1,.h2,.h3{font-weight:600}
.h1{font-size:clamp(34px,4.2vw,52px);line-height:1.12;letter-spacing:-.028em}
.h2{font-size:clamp(28px,3.2vw,40px);line-height:1.18;letter-spacing:-.024em}
.h3{font-size:20px;line-height:1.3;letter-spacing:-.015em}

/* the sentence under a section heading */
.lead{font-size:16.5px;line-height:1.6;font-weight:400;letter-spacing:-.003em;
  color:var(--muted);max-width:620px}
.center .lead{margin-left:auto;margin-right:auto}

/* small caps label above a heading */
.eyebrow{font-size:13px;font-weight:600;letter-spacing:.01em;text-transform:none;
  color:var(--blue);margin-bottom:14px;padding:6px 14px;border:0;border-radius:999px;
  background:var(--blue-soft,#eef4ff);display:inline-block}
.eyebrow::before{display:none}
.sec--ink .eyebrow{background:rgba(255,255,255,.1);color:#9fc0ff}

/* cards */
.card h3{font-size:18px;font-weight:600;letter-spacing:-.012em;line-height:1.35;
  margin-bottom:8px}
.card p{font-size:15px;line-height:1.6;font-weight:400;letter-spacing:-.002em}

/* plans */
.plan__n{font-size:22px;font-weight:600;letter-spacing:-.02em}
.plan__d{font-size:14.5px;line-height:1.5;letter-spacing:-.002em}
.plan__p .amt{font-size:44px;font-weight:600;letter-spacing:-.035em}
.plan__term{font-size:13.5px;line-height:1.5}
.plan__f li{font-size:14.5px;line-height:1.5;letter-spacing:-.002em}
.plan__sec{font-size:14.5px;font-weight:600;letter-spacing:-.01em}

/* buttons and controls */
.btn{font-size:15px;font-weight:600;letter-spacing:-.008em}
.terms__b{font-size:14.5px;font-weight:600;letter-spacing:-.006em}
.dd__btn,.dd__opt{font-size:15px;letter-spacing:-.006em}

/* tables */
.cmp2 th,.cmp2 td{font-size:14.5px;letter-spacing:-.002em}
.cmp2__n{font-size:18px;font-weight:600;letter-spacing:-.018em}
.cmp2__gb{font-size:17px;font-weight:600;letter-spacing:-.016em}
.dom table{font-size:15px}

/* faq */
.faq summary{font-size:17px;font-weight:600;letter-spacing:-.014em}
.faq p{font-size:16px;line-height:1.65;letter-spacing:-.002em}

/* steps, reviews, stats */
.step h3{font-size:17px;font-weight:600;letter-spacing:-.012em}
.step p{font-size:14.8px;line-height:1.6}
.rev h3{font-size:15.5px;font-weight:600;letter-spacing:-.008em}
.rev p{font-size:14.5px;line-height:1.6}
.stats b{font-size:30px;font-weight:600;letter-spacing:-.028em}
.stats span{font-size:13.5px;line-height:1.45}

/* hero */
.hero__pill{font-size:13.5px;letter-spacing:-.004em}
.hero__ticks div{font-size:15.5px;letter-spacing:-.004em}
.hero__note{font-size:13.5px;letter-spacing:-.002em}

/* prose */
.prose{font-size:16.5px;line-height:1.72;letter-spacing:-.002em}
.prose h2{font-size:26px;font-weight:600;letter-spacing:-.02em}
.prose h3{font-size:19px;font-weight:600;letter-spacing:-.015em}

/* closing band and footer */
.end h2{letter-spacing:-.028em}
.end p{font-size:17px;line-height:1.55;letter-spacing:-.004em}
.ftr a{font-size:14.5px;letter-spacing:-.003em}
.ftr h4{font-size:13px;font-weight:600;letter-spacing:.01em;text-transform:none;
  color:#8fa0bd}
.ftr__base{font-size:13.5px;letter-spacing:-.002em}

/* nav */
.hdr__nav>a,.hdr__btn{font-size:15px;font-weight:500;letter-spacing:-.006em}
.hdr__et{font-size:14.5px;font-weight:600;letter-spacing:-.008em}
.hdr__ed{font-size:13.5px;line-height:1.45}

/* ---- jump strip ---- */
.jump{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;
  padding:26px 0 2px}
.jump a{font-size:14.5px;font-weight:600;letter-spacing:-.006em;color:var(--muted);
  background:#fff;border:1px solid var(--line);border-radius:999px;padding:9px 18px;
  transition:border-color .16s,color .16s,background .16s}
.jump a:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-soft,#eef4ff)}
@media(max-width:700px){
  .jump{overflow-x:auto;flex-wrap:nowrap;justify-content:flex-start;
    scrollbar-width:none;padding:20px 0 2px}
  .jump::-webkit-scrollbar{display:none}
  .jump a{flex:none}
}

/* ==========================================================================
   DARK FEATURE BAND
   --------------------------------------------------------------------------
   A full-width dark section breaking up a long light page. The reference
   uses one for security, which is the right subject for it: the change in
   tone does some of the work the copy would otherwise have to.
   ========================================================================== */
.band{background:var(--navy);color:#fff;padding:92px 0;position:relative;overflow:clip}
.band::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(900px 420px at 50% -10%,rgba(37,99,235,.28),transparent 68%)}
.band .wrap{position:relative}
.band h2,.band .h2{color:#fff}
.band .lead{color:#a3b3cd}
.band .eyebrow{background:rgba(255,255,255,.1);color:#9fc0ff}

.band__g{display:grid;grid-template-columns:repeat(2,1fr);gap:18px;margin-top:44px;
  text-align:left}
.band__c{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);
  border-radius:18px;padding:30px;transition:background .2s,border-color .2s}
.band__c:hover{background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.18)}
.band__i{width:46px;height:46px;border-radius:13px;background:rgba(255,255,255,.1);
  color:#9fc0ff;display:flex;align-items:center;justify-content:center;margin-bottom:18px}
.band__c h3{font-size:18px;font-weight:600;letter-spacing:-.012em;color:#fff;margin-bottom:9px}
.band__c p{font-size:15px;line-height:1.6;color:#a3b3cd}
@media(max-width:820px){.band__g{grid-template-columns:1fr}.band{padding:64px 0}}

/* ==========================================================================
   FEATURE ACCORDION
   --------------------------------------------------------------------------
   A ruled list that opens. Used where there are more claims than a card grid
   can hold without becoming a wall — the reference uses this for its
   "hands-off hosting" list.
   ========================================================================== */
.fa{max-width:760px;margin:36px auto 0;text-align:left;border-top:1px solid var(--line)}
.fa details{border-bottom:1px solid var(--line)}
.fa summary{display:flex;align-items:center;gap:15px;padding:20px 0;cursor:pointer;
  list-style:none;font-size:17px;font-weight:600;letter-spacing:-.014em;
  transition:color .16s}
.fa summary::-webkit-details-marker{display:none}
.fa summary:hover{color:var(--blue)}
.fa__i{display:flex;color:var(--blue);flex:none}
.fa summary span{flex:1}
.fa summary::after{content:"+";font-size:21px;font-weight:400;color:var(--blue);
  line-height:1;flex:none}
.fa details[open] summary{color:var(--blue)}
.fa details[open] summary::after{content:"\2212"}
.fa p{padding:0 0 22px 39px;font-size:15.5px;line-height:1.7;color:var(--muted)}
@media(max-width:560px){.fa p{padding-left:0}}

/* ---- tick list on a light card, used in the two-up panels ---- */
.ticks{display:grid;gap:12px;margin-top:18px}
.ticks li{display:flex;gap:11px;align-items:flex-start;font-size:15px;line-height:1.55;
  color:var(--muted)}
.ticks svg{color:var(--green);flex:none;margin-top:2px}
.ticks b{color:var(--ink);font-weight:600}

/* ==========================================================================
   HANDS-OFF LIST
   --------------------------------------------------------------------------
   Was an accordion, which sat directly above the FAQ accordion and read as
   two of the same control. This shows everything at once: two columns of
   ruled entries, each with its icon, so nothing needs clicking to be read.
   ========================================================================== */
.hands{display:grid;grid-template-columns:repeat(2,1fr);gap:0 44px;margin-top:40px;
  text-align:left;max-width:1000px;margin-left:auto;margin-right:auto}
.hands__i{display:flex;gap:16px;align-items:flex-start;padding:24px 0;
  border-bottom:1px solid var(--line)}
.hands__i:nth-last-child(-n+2){border-bottom:0}
.hands__ic{width:38px;height:38px;flex:none;border-radius:11px;
  background:var(--blue-soft,#eef4ff);color:var(--blue);
  display:flex;align-items:center;justify-content:center}
.hands h3{font-size:16.5px;font-weight:600;letter-spacing:-.012em;line-height:1.35;
  margin-bottom:6px;color:var(--ink)}
.hands p{font-size:14.8px;line-height:1.6;color:var(--muted)}
@media(max-width:820px){
  .hands{grid-template-columns:1fr;gap:0}
  .hands__i:nth-last-child(2){border-bottom:1px solid var(--line)}
  .hands__i:last-child{border-bottom:0}
}

/* ---- skip link ----
   Off-screen until focused, then pinned top-left. The one control a keyboard
   user needs before anything else on the page. */
.skip{position:absolute;left:-9999px;top:0;z-index:300;
  background:var(--blue);color:#fff;padding:12px 20px;border-radius:0 0 10px 0;
  font-size:15px;font-weight:600;letter-spacing:-.006em}
.skip:focus{left:0;color:#fff}
main{display:block}


/* Footer column labels, formerly <h4>. Same appearance, no longer part
   of the heading outline. */
.ftr__h{font-size:11.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:#7a8aa8;margin-bottom:18px;font-family:inherit}
.ftr__h{font-size:13px;font-weight:600;letter-spacing:.01em;text-transform:none;
  color:#8fa0bd}

/* ==========================================================================
   DOMAIN SEARCH
   ========================================================================== */
.dsearch{background:var(--navy);color:#fff;padding:84px 0 72px;position:relative;overflow:clip}
.dsearch::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(880px 420px at 50% -12%,rgba(37,99,235,.34),transparent 68%)}
.dsearch .wrap{position:relative}
.dsearch h1{color:#fff;max-width:14ch;margin:0 auto}
.dsearch .lead{color:#a3b3cd;margin-top:16px}

.dsearch__f{display:flex;align-items:center;gap:10px;max-width:620px;margin:32px auto 0;
  background:#fff;border-radius:999px;padding:7px 7px 7px 20px;
  box-shadow:0 18px 44px rgba(0,0,0,.28)}
.dsearch__i{display:flex;color:var(--faint,#8a97a8);flex:none}
.dsearch__f input{flex:1;min-width:0;border:0;outline:none;background:none;
  font:inherit;font-size:16px;color:var(--ink);padding:12px 0;letter-spacing:-.004em}
.dsearch__f input::placeholder{color:#9aa5b8}
.dsearch__b{flex:none;width:46px;height:46px;border:0;border-radius:50%;
  background:var(--blue);color:#fff;cursor:pointer;display:flex;align-items:center;
  justify-content:center;transition:background .16s,transform .16s}
.dsearch__b:hover{background:var(--blue-dark);transform:translateX(2px)}

.dsearch__hint{margin-top:18px;font-size:13.5px;color:#93a6c4;display:flex;
  flex-wrap:wrap;gap:6px 14px;justify-content:center;align-items:baseline}
.dsearch__hint b{color:#fff;font-weight:600}
.dsearch__hint span{display:none}

.dsearch__cards{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:40px;
  text-align:left}
.dsearch__c{display:flex;gap:13px;align-items:flex-start;background:rgba(255,255,255,.05);
  border:1px solid rgba(255,255,255,.1);border-radius:14px;padding:18px}
.dsearch__ci{width:36px;height:36px;flex:none;border-radius:10px;
  background:rgba(255,255,255,.1);color:#9fc0ff;display:flex;align-items:center;
  justify-content:center}
.dsearch__c b{display:block;font-size:15px;font-weight:600;color:#fff;margin-bottom:4px;
  letter-spacing:-.01em}
.dsearch__c span{display:block;font-size:13.8px;line-height:1.5;color:#a3b3cd}
@media(max-width:820px){
  .dsearch{padding:56px 0 48px}
  .dsearch__cards{grid-template-columns:1fr}
}

/* ---- popular extension cards ---- */
.dgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;text-align:left}
.dgrid__c{background:#fff;border:1px solid var(--line);border-radius:16px;padding:24px;
  transition:border-color .2s,box-shadow .2s,transform .2s}
.dgrid__c:hover{border-color:#bcd0f5;box-shadow:0 16px 36px rgba(15,27,51,.09);
  transform:translateY(-2px)}
.dgrid__x{font-size:26px;font-weight:600;letter-spacing:-.03em;color:var(--ink)}
.dgrid__p{display:flex;align-items:baseline;gap:3px;margin-top:14px}
.dgrid__p .cur{font-size:16px;font-weight:600}
.dgrid__p .amt{font-size:30px;font-weight:600;letter-spacing:-.03em;
  font-variant-numeric:tabular-nums}
.dgrid__p .per{font-size:13.5px;color:var(--muted);margin-left:5px}
.dgrid__r{font-size:13.5px;color:var(--muted);margin:6px 0 18px}
@media(max-width:900px){.dgrid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.dgrid{grid-template-columns:1fr}}

/* ==========================================================================
   DOMAIN RESULTS
   ========================================================================== */
.dres{padding:56px 0 84px}
.dres h1{margin-bottom:4px}
.dres .dsearch__f{box-shadow:0 2px 6px rgba(15,27,51,.06);border:1.5px solid var(--line);
  margin-bottom:34px}
.dres .dsearch__f input{color:var(--ink)}

.dres__hero{background:var(--paper);border:1px solid var(--line);border-radius:18px;
  padding:28px 30px;max-width:920px;margin:0 auto}
.dres__htop{display:flex;align-items:center;justify-content:space-between;gap:20px;
  flex-wrap:wrap}
.dres__tag{font-size:12px;font-weight:700;letter-spacing:.02em;color:#0f7a41;
  background:#e6f7ed;border-radius:6px;padding:5px 11px}
.dres__price{display:flex;align-items:baseline;gap:8px}
.dres__price b{font-size:26px;font-weight:600;letter-spacing:-.03em;
  font-variant-numeric:tabular-nums}
.dres__price s{color:var(--faint,#8a97a8);font-size:15px}
.dres__price span{font-size:13.5px;color:var(--muted)}
.dres__name{font-size:clamp(22px,3vw,30px);font-weight:600;letter-spacing:-.028em;
  margin-top:14px;word-break:break-all}
.dres__name b{color:var(--blue);font-weight:600}
.dres__cta{margin-top:20px}

.dres__note{display:flex;gap:12px;max-width:920px;margin:18px auto 0;padding:14px 18px;
  background:#fff;border:1px solid var(--line);border-radius:12px;align-items:flex-start}
.dres__note svg{color:var(--blue);flex:none;margin-top:2px}
.dres__note p{font-size:13.8px;line-height:1.6;color:var(--muted)}

.dres__more{max-width:920px;margin:44px auto 14px;font-weight:600}
.dres__more b{color:var(--blue);font-weight:600}

.dres__list{max-width:920px;margin:0 auto;border-top:1px solid var(--line)}
.dres__row{display:flex;align-items:center;gap:18px;padding:16px 4px;
  border-bottom:1px solid var(--line);transition:background .16s}
.dres__row:hover{background:var(--soft)}
.dres__rn{flex:1;min-width:0;font-size:16.5px;color:var(--ink);word-break:break-all;
  letter-spacing:-.01em}
.dres__rn b{font-weight:600;color:var(--blue)}
.dres__best{font-style:normal;font-size:11.5px;font-weight:700;color:#0f7a41;
  background:#e6f7ed;border-radius:6px;padding:3px 8px;margin-left:9px;white-space:nowrap}
.dres__rp{display:flex;align-items:baseline;gap:7px;flex:none;text-align:right}
.dres__rp s{color:var(--faint,#8a97a8);font-size:13.5px}
.dres__rp b{font-size:17px;font-weight:600;font-variant-numeric:tabular-nums}
.dres__rp span{font-size:12.5px;color:var(--muted)}
.dres__row .btn{flex:none;width:auto;min-width:96px}
.dres__foot{max-width:920px;margin:26px auto 0;font-size:14.5px;color:var(--muted);
  line-height:1.6}
@media(max-width:640px){
  .dres__row{flex-wrap:wrap;gap:10px}
  .dres__rn{flex:1 1 100%}
  .dres__rp{flex:1}
  .dres__row .btn{min-width:88px}
}


/* ---- availability verdicts ----
   A row without a verdict is not an error state: it means the lookup did
   not answer, and saying nothing is more honest than guessing. */
.dres__st{font-style:normal;font-size:12px;font-weight:700;letter-spacing:.01em;
  border-radius:6px;padding:3px 9px;margin-left:10px;white-space:nowrap;
  background:#eef1f6;color:var(--muted)}
.dres__st.is-free{background:#e6f7ed;color:#0f7a41}
.dres__st.is-taken{background:#fdeceb;color:#b42318}
.dres__tag.is-taken{background:#fdeceb;color:#b42318}
.dres__row.is-taken{opacity:.62}
.dres__row.is-taken .btn{pointer-events:none;color:var(--muted);border-color:var(--line)}
.dres__row.is-free .dres__rn b{color:var(--green)}


/* ---- a taken domain ----
   Dimmed and non-actionable, but still listed: seeing that yourbrand.com is
   gone is itself information, and hiding it just makes the page look short. */
.dres__row.is-taken{opacity:.58}
.dres__row.is-taken .dres__rn b{color:var(--muted)}
.btn.is-off{pointer-events:none;color:var(--muted);border-color:var(--line);
  background:transparent;cursor:default}
.dres__hero.is-taken{background:#fdf6f5;border-color:#f3d4d1}
.dres__taken{margin-top:18px;font-size:15px;line-height:1.6;color:#b42318}
.dres__row.is-free .dres__rn b{color:var(--green)}


/* Shown only when this page is restored from the back-forward cache. */
.dres__back{display:flex;align-items:flex-start;gap:10px;
  background:var(--blue-soft,#eef4ff);border:1px solid #dbe7fb;border-radius:12px;
  padding:13px 16px;margin-bottom:14px;color:var(--ink);font-size:14.5px}
.dres__back svg{color:var(--blue);flex:none;margin-top:2px}


/* ---- results, searching in place ----
   The whole row shimmers, not just the price — the same treatment the
   checkout uses while a domain loads. Hiding the text rather than dimming
   it matters: a half-visible old name under a new search reads as an
   answer, and it is not one. */
.dres__list.is-loading .dres__row > *,
.dres__hero.is-loading .dres__name,
.dres__hero.is-loading .dres__price,
.dres__hero.is-loading .ticks,
.dres__hero.is-loading .dres__cta{visibility:hidden}

.dres__list.is-loading .dres__row,
.dres__hero.is-loading{position:relative;pointer-events:none}

.dres__list.is-loading .dres__row::after,
.dres__hero.is-loading::after{
  content:"";position:absolute;inset:8px 0;border-radius:10px;
  background:linear-gradient(90deg,#eef2f8 25%,#f7f9fc 37%,#eef2f8 63%);
  background-size:400% 100%;
  animation:spxShim 1.2s ease-in-out infinite}

.dres__hero.is-loading::after{inset:18px}

@keyframes spxShim{0%{background-position:100% 0}100%{background-position:0 0}}
@media(prefers-reduced-motion:reduce){
  .dres__list.is-loading .dres__row::after,
  .dres__hero.is-loading::after{animation:none}
}


/* The identity-check line. Amber rather than red: it is a condition of the
   registry, not a problem with the order. */
.dres__idnote{color:#8a5a00}
.dres__idnote svg{color:#c07800}


/* ---- results: price beside the button ---- */
.dres__act{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.dres__act .dres__cta{margin:0;flex:none}
.dres__price{display:flex;align-items:baseline;gap:7px}
.dres__price b{order:1}
.dres__price s{order:2;color:var(--faint,#8a97a8);font-size:15px}
.dres__price span{order:3;font-size:13.5px;color:var(--muted)}

/* Rows read: struck renewal, term, then the figure charged. */
.dres__rp{display:flex;align-items:baseline;gap:6px}
.dres__rp s{order:1}
.dres__rp span{order:2}
.dres__rp b{order:3;font-size:17px}

@media(max-width:640px){
  .dres__act{gap:12px}
  .dres__act .dres__cta{width:100%}
}

/* ---- the search button, while searching ---- */
.dsearch__b.is-busy{cursor:default}
.dsearch__b.is-busy svg{display:none}
.dsearch__b.is-busy::after{
  content:"";width:18px;height:18px;border-radius:50%;
  border:2px solid rgba(255,255,255,.35);border-top-color:#fff;
  animation:spxBtnSpin .7s linear infinite}
@keyframes spxBtnSpin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){
  .dsearch__b.is-busy::after{animation-duration:2s}
}


/* The minimum-term line, under the price it qualifies. */
.dres__rp{flex-wrap:wrap;justify-content:flex-end}
.dres__term{order:4;flex-basis:100%;text-align:right;font-style:normal;
  font-size:12.5px;color:var(--muted);margin-top:2px;
  display:flex;align-items:center;justify-content:flex-end;gap:5px}

/* The information mark carries the tooltip. No dashed underline — that
   reads as a link and invites a click that goes nowhere. */
.dres__i{display:inline-flex;color:var(--faint,#8a97a8);cursor:help;
  border:0;line-height:0;outline:none;transition:color .15s}
.dres__i:hover,.dres__i:focus-visible{color:var(--blue)}


/* ==========================================================================
   TOOLTIPS — rebuilt: below by default, centred, no gap
   --------------------------------------------------------------------------
   Three fixes:
     - the arrow sat at a fixed 16px from the left, so it pointed at the
       start of the trigger rather than its middle. Both bubble and arrow are
       now centred on whatever they belong to, whichever its width.
     - they opened ABOVE by default. Below is the better default: it does not
       cover the thing you are reading about, and on a phone the space above
       a row is usually where your thumb is.
     - a hairline gap between arrow and bubble. The arrow now overlaps by a
       pixel, so they read as one shape at any zoom.
   ========================================================================== */



/* No room below — open upward instead. Set by the script, which measures. */

/* The dark plan card inverts the bubble, so the arrow follows. */
.plan--feat .tip::before{border-bottom-color:#fff;border-top-color:transparent}
.plan--feat .tip--above::before{border-top-color:#fff;border-bottom-color:transparent}

/* Last column: keep the bubble on screen without moving the arrow off the
   trigger. The arrow stays centred; only the bubble shifts. */

@media(max-width:820px){
  .tip::after{max-width:min(280px,calc(100vw - 40px))}
}


/* ==========================================================================
   TOOLTIP POSITION — set by the script
   --------------------------------------------------------------------------
   --tip-x     where the bubble sits, relative to the trigger, already
               clamped inside the card, row or viewport
   --tip-arrow where the arrow sits, always the middle of the trigger

   Two variables instead of a rule per context. Every fixed offset tried
   before was right in one place and wrong in another.
   ========================================================================== */

.tip::after{
  left:var(--tip-x, 0);
  right:auto;
  transform:translateY(5px);
}
.tip:hover::after,.tip:focus::after,.tip:focus-visible::after{
  transform:translateY(0);
}
.tip--above::after{transform:translateY(-5px)}
.tip--above:hover::after,
.tip--above:focus::after,
.tip--above:focus-visible::after{transform:translateY(0)}

/* The arrow follows the TRIGGER, not the bubble — so it keeps pointing at
   the thing being explained even when the bubble has slid sideways. */
.tip::before{
  left:var(--tip-arrow, 50%);
  right:auto;
  margin-left:-9px;
  transform:none;
}


/* ==========================================================================
   TOOLTIP DIRECTION — the last word
   --------------------------------------------------------------------------
   The base rules further up still opened UPWARD (bottom:) with an arrow
   pointing down. These set the direction after them, so below is genuinely
   the default and .tip--above is the exception the script asks for.

   The arrow overlaps the bubble by a pixel. A flush edge separates at
   fractional zoom, which is the hairline gap that kept reappearing.
   ========================================================================== */

.tip::after{
  bottom:auto;
  top:calc(100% + 13px);
}
.tip--above::after{
  top:auto;
  bottom:calc(100% + 13px);
}

.tip::before{
  bottom:auto;
  top:calc(100% + 4px);
  border-top:0;
  border-bottom:10px solid var(--blue);
}
.tip--above::before{
  top:auto;
  bottom:calc(100% + 4px);
  border-bottom:0;
  border-top:10px solid var(--blue);
}

/* The featured card inverts the bubble to white, so the arrow must invert in
   BOTH directions. Only the upward one was overridden, so the arrow on the
   Pro card pointed down in blue — invisible against a white bubble. */
.plan--feat .tip::before{
  border-bottom-color:#fff;
  border-top-color:transparent;
}
.plan--feat .tip--above::before{
  border-top-color:#fff;
  border-bottom-color:transparent;
}


/* ==========================================================================
   TERM SWITCHER ON MOBILE — one row, scrolled
   --------------------------------------------------------------------------
   It wrapped to a second line, which broke the pill into an L shape and made
   "36 months" look like a separate control rather than the third option.
   One row that scrolls keeps the three readable as a set.

   (An earlier fix here was flex-wrap:wrap, to stop it overflowing a 360px
   screen. Scrolling solves the same overflow without the wrap.)
   ========================================================================== */
@media(max-width:700px){

  .terms{
    flex-wrap:nowrap;
    overflow-x:auto;
    justify-content:flex-start;
    scrollbar-width:none;
    -ms-overflow-style:none;
    /* The last pill should not sit flush against the edge when scrolled. */
    padding:5px 6px;
    scroll-padding:6px;
  }
  .terms::-webkit-scrollbar{display:none}

  .terms__b{flex:0 0 auto;white-space:nowrap}
}

/* ---- the switcher's own colours ----
   The unselected pills sat on a pale blue that read as "disabled", and the
   selected one was white — the reverse of what the eye expects. The track is
   neutral now and the selected pill carries the brand colour. */
.terms{background:#eef1f6;border:1px solid var(--line)}
.terms__b{color:var(--muted);background:transparent}
.terms__b:hover{color:var(--ink)}
.terms__b.is-on{
  background:#fff;
  color:var(--ink);
  box-shadow:0 1px 3px rgba(15,27,51,.12);
}
.terms__b .save{
  background:#e6f7ed;
  color:#0f7a41;
  font-weight:600;
}
.terms__b.is-on .save{background:#dcf4e6}

/* ==========================================================================
   NO BLUE TAP FLASH
   --------------------------------------------------------------------------
   Mobile Safari and Chrome paint a translucent blue box over anything
   tappable. It fires on scroll momentum too, so the page flickers while
   being read. Every control here already has its own :active state.
   ========================================================================== */
a, button, summary, label, [role="button"], [tabindex], input, select,
.plan, .card, .terms__b, .dd__opt, .tip, .acct-opt{
  -webkit-tap-highlight-color:transparent;
}


/* ==========================================================================
   PRICING — badges and spacing
   ========================================================================== */

/* Both badges in brand blue. The free-domain flag was a pale tint that read
   as a disabled chip rather than something being given away. */
.plan__tag,
.plan__flag{
  background:var(--blue);
  color:#fff;
  border:0;
}

/* One line, always. It wrapped to two on a narrow card, which turned a badge
   into a paragraph and pushed the plan name down. */
.plan__flag,
.plan__tag{
  white-space:nowrap;
  max-width:calc(100% - 24px);
  overflow:hidden;
  text-overflow:ellipsis;
}

/* 22px left the four cards adrift from each other. 16 reads as one table of
   options rather than four separate boxes. */
.plans{gap:16px}
@media(min-width:1280px){.plans{gap:16px}}

/* ---- small things that make the row read as a set ---- */

/* Equal heights so the buttons line up, whatever the feature lists do. */
.plans{align-items:stretch}
.plan{display:flex;flex-direction:column}
.plan__f:last-of-type{flex:1}

/* The featured card lifted by shadow alone; a little scale makes the choice
   obvious before anyone reads the badge. */
@media(min-width:1041px){
  .plan--feat{transform:translateY(-6px)}
}

/* The price is the thing being compared — give it room to breathe. */
.plan__p{margin:6px 0 2px}
.plan__term{margin-bottom:18px}
