/* TrueRateGuide — shared stylesheet.
   One file, cached once, instead of a copy of the CSS inlined into all 236 pages.
   The palette is lifted verbatim from the old site's :root block: same hexes,
   same radii, same shadows, same fonts. Nothing here restyles the brand. */

:root{
  --brand:#0F52BA; --brand2:#1565C0; --brand-light:#E8F0FE; --brand-dark:#0A3A8A;
  --accent:#FF6B35; --accent2:#E55A25;
  --green:#16A34A; --green-bg:#DCFCE7;
  --amber:#D97706; --amber-bg:#FEF3C7;
  --red:#DC2626;   --red-bg:#FEE2E2;
  --text:#0F172A;  --text2:#475569; --text3:#94A3B8;
  --border:#E2E8F0; --bg:#F8FAFC;   --white:#FFFFFF;
  --radius:14px;   --radius-btn:10px;
  --shadow:0 1px 3px rgba(0,0,0,0.08);
  --shadow-md:0 4px 12px rgba(0,0,0,0.08);
  --shadow-lg:0 12px 28px rgba(0,0,0,0.1);
  --w:1120px; --w-narrow:720px;
  --font-head:'Plus Jakarta Sans',system-ui,sans-serif;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;scroll-padding-top:76px}
body{margin:0;background:var(--bg);color:var(--text);
  font-family:'Inter','Plus Jakarta Sans',system-ui,-apple-system,sans-serif;
  font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}
h1,h2,h3{margin:0;line-height:1.2;letter-spacing:-.02em;font-weight:800;text-wrap:balance}
h1{font-size:clamp(26px,4.4vw,40px)}
h2{font-size:clamp(21px,3vw,30px)}
h3{font-size:18px}
p{margin:0}
a{color:var(--brand);text-decoration:none}
a:hover{text-decoration:underline}
img,svg{max-width:100%;display:block}
.wrap{max-width:var(--w);margin:0 auto;padding:0 20px}
.narrow{max-width:var(--w-narrow)}
.skip{position:absolute;left:-999px}
.skip:focus{left:12px;top:12px;background:var(--white);padding:10px 14px;border-radius:var(--radius-btn);z-index:99}
:focus-visible{outline:3px solid var(--brand);outline-offset:2px}

/* header */
.hdr{position:sticky;top:0;z-index:40;background:rgba(255,255,255,.94);backdrop-filter:blur(10px);
  border-bottom:1px solid var(--border)}
/* seven nav labels plus the wordmark and the CTA need ~1140px; the content
   column stays at --w, only the header bar is allowed to be wider */
.hdr-in{display:flex;align-items:center;gap:12px;height:64px;max-width:1200px;margin:0 auto;padding:0 20px}
.brand{display:inline-flex;align-items:center;gap:9px;font-family:var(--font-head);
  font-weight:800;font-size:19px;letter-spacing:-.02em;color:var(--brand);
  text-decoration:none;min-height:44px}
.brand:hover{text-decoration:none}
.brand em{color:var(--accent);font-style:normal}
.brand b{color:var(--brand)}
.brand-box{width:32px;height:32px;flex:0 0 auto;background:var(--brand);border-radius:8px;
  display:flex;align-items:center;justify-content:center}
.brand-box svg{width:17px;height:17px;stroke:#fff;fill:none;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round}
.ft .brand{color:var(--white)}
.ft .brand-box{background:rgba(255,255,255,.16)}
.nav{margin-left:auto}
.nav ul{list-style:none;display:flex;align-items:center;gap:2px;margin:0;padding:0}
.nav a{display:inline-flex;align-items:center;white-space:nowrap;min-height:44px;padding:0 8px;border-radius:var(--radius-btn);
  color:var(--text2);font-size:14.5px;font-weight:500;text-decoration:none}
.nav a:hover{background:var(--brand-light);color:var(--brand-dark);text-decoration:none}
.nav a[aria-current="page"]{color:var(--brand);font-weight:700}
.nav-cta{flex:0 0 auto}
.nav-toggle{display:none;flex-direction:column;justify-content:center;gap:5px;width:44px;height:44px;
  margin-left:auto;border:1px solid var(--border);border-radius:var(--radius-btn);background:var(--white);cursor:pointer;padding:0 11px}
.nav-toggle span{display:block;height:2px;background:var(--text);border-radius:2px}
@media(max-width:1100px){
  .nav{position:absolute;left:0;right:0;top:64px;margin:0;background:var(--white);
    border-bottom:1px solid var(--border);box-shadow:var(--shadow-md);display:none}
  .nav.is-open{display:block}
  .nav ul{flex-direction:column;align-items:stretch;padding:8px 14px 16px}
  .nav a{min-height:48px;font-size:16px}
  .nav-toggle{display:flex}
}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:0 22px;
  border:0;border-radius:var(--radius-btn);font:inherit;font-weight:700;font-size:15px;cursor:pointer;
  text-decoration:none;transition:background .15s,transform .15s,box-shadow .15s}
.btn:hover{text-decoration:none;transform:translateY(-1px)}
.btn--primary{background:var(--accent);color:var(--white);box-shadow:var(--shadow-md)}
.btn--primary:hover{background:var(--accent2)}
.btn--brand{background:var(--brand);color:var(--white)}
.btn--brand:hover{background:var(--brand-dark)}
.btn--ghost{background:var(--white);border:1px solid var(--border);color:var(--brand)}
.btn--sm{min-height:44px;padding:0 16px;font-size:14px}
.btn--block{width:100%}
.btn svg{width:15px;height:15px;flex:0 0 auto}

h1,h2,h3,.lp-h,.brand{font-family:var(--font-head)}

/* hero: the deep cobalt band the site has always used, white type on it */
.hero{background:linear-gradient(135deg,#0F52BA 0%,#1565C0 60%,#1976D2 100%);
  color:#fff;border-bottom:0;padding:48px 0 44px}
.hero h1{color:#fff}
.hero .lede{color:rgba(255,255,255,.90);font-size:clamp(16px,2vw,18px);margin-top:12px;max-width:62ch}
.hero .ticks{color:rgba(255,255,255,.95)}
.hero .ticks svg{color:#7CF2B0}
.hero .crumb{color:rgba(255,255,255,.72)}
.hero .crumb a{color:rgba(255,255,255,.92)}
.hero .btn--primary{box-shadow:0 8px 20px rgba(0,0,0,.18)}
.crumb{font-size:13px;color:var(--text3);margin-bottom:10px}
.crumb a{color:var(--text2)}
.ticks{list-style:none;display:flex;flex-wrap:wrap;gap:8px 22px;margin:18px 0 0;padding:0;
  font-size:14.5px;font-weight:600;color:var(--text2)}
.ticks li{display:flex;align-items:center;gap:7px}
.ticks svg{width:17px;height:17px;color:var(--green);flex:0 0 auto}

/* sections */
.sec{padding:48px 0;border-bottom:1px solid var(--border)}
.sec--alt{background:var(--white)}
.sec__head{margin-bottom:26px}
.sec__head p{color:var(--text2);margin-top:8px}

/* offer cards */
.offers{display:grid;gap:16px;max-width:860px;margin:0 auto}
.offer{background:var(--white);border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:20px;display:flex;flex-direction:column}
.offer-ribbon{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin:-20px -20px 16px;
  padding:10px 18px;background:var(--brand);color:var(--white);
  border-radius:var(--radius) var(--radius) 0 0;font-size:13px;font-weight:600}
.offer-ribbon .badge{background:rgba(255,255,255,.2);padding:3px 10px;border-radius:999px;
  font-size:11.5px;text-transform:uppercase;letter-spacing:.04em;font-weight:800}
.offer-head{display:flex;align-items:flex-start;gap:12px}
.offer-logo{width:156px;height:50px;object-fit:contain;object-position:left center;flex:0 0 auto}
.offer-mono{width:44px;height:44px;flex:0 0 auto;border-radius:12px;background:var(--brand);
  color:var(--white);font-weight:800;font-size:19px;display:grid;place-items:center}
.offer-id{flex:1 1 auto;min-width:0}
.offer-id h3{font-size:17px}
.offer-tagline{font-size:13.5px;color:var(--text2);margin-top:3px}
.offer-score{flex:0 0 auto;text-align:center;background:var(--brand-light);border-radius:12px;padding:6px 11px}
.offer-score b{display:block;font-size:17px;color:var(--brand-dark);font-weight:800}
.offer-score span{font-size:10.5px;color:var(--text2)}
.offer-best{margin-top:12px;font-size:13.5px;font-weight:700;color:var(--accent2)}
.offer-feats{display:grid;grid-template-columns:repeat(auto-fit,minmax(165px,1fr));gap:12px 18px;margin-top:14px}
.offer-feat dt{font-size:11.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--text3);font-weight:700}
.offer-feat dd{margin:2px 0 0;font-size:14.5px;font-weight:600}
.offer-why{margin-top:14px;font-size:14px;color:var(--text2);background:var(--bg);
  border-radius:12px;padding:12px 14px}
.offer-why b{color:var(--text)}
.offer-act{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:16px;
  padding-top:15px;border-top:1px solid var(--border)}
.offer-pill{font-size:12.5px;color:var(--text2);background:var(--bg);border-radius:999px;padding:6px 12px}
.offer-pill b{color:var(--text)}
.offer-cta{margin-left:auto}
.offer-secure{flex-basis:100%;text-align:right;font-size:11.5px;color:var(--text3)}
.offer-fine{margin-top:12px;font-size:11.5px;line-height:1.6;color:var(--text3)}
.offers-empty{text-align:center;color:var(--text3);background:var(--white);
  border:1px dashed var(--border);border-radius:var(--radius);padding:30px 20px}
.offers-empty b{display:block;color:var(--text);margin-bottom:5px}

/* steps / faq / cta band */
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.step{background:var(--white);border:1px solid var(--border);border-radius:var(--radius);padding:20px;
  box-shadow:var(--shadow)}
.step__n{width:34px;height:34px;border-radius:10px;background:var(--brand);color:var(--white);
  font-weight:800;display:grid;place-items:center;margin-bottom:11px}
.step p{font-size:14.5px;color:var(--text2);margin-top:6px}
.qa{border-bottom:1px solid var(--border);padding:14px 0;max-width:var(--w-narrow);margin:0 auto}
.qa summary{cursor:pointer;font-weight:700;list-style:none;display:flex;justify-content:space-between;gap:16px}
.qa summary::-webkit-details-marker{display:none}
.qa summary::after{content:"+";color:var(--brand);font-weight:800;flex:0 0 auto}
.qa[open] summary::after{content:"\2013"}
.qa p{color:var(--text2);font-size:15px;margin-top:9px}
.band{background:var(--brand-dark);color:var(--white);text-align:center;border-bottom:0}
.band h2{color:var(--white)}
.band p{color:#C7D7F0;max-width:var(--w-narrow);margin:11px auto 20px}

/* tiles */
.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(320px,100%),1fr));gap:14px}
.tile{background:var(--white);border:1px solid var(--border);border-radius:var(--radius);padding:16px 18px;
  box-shadow:var(--shadow);text-decoration:none;color:var(--text);transition:transform .15s,box-shadow .15s}
.tile:hover{transform:translateY(-3px);box-shadow:var(--shadow-md);text-decoration:none}
.tile b{display:block;font-weight:700}
.tile span{display:block;font-size:13px;color:var(--text2);margin-top:3px}

/* footer */
.ft{background:var(--text);color:#CBD5E1;padding:40px 0 32px}
.ft-in{max-width:var(--w);margin:0 auto;padding:0 20px}
.ft-top{display:flex;flex-wrap:wrap;gap:12px;justify-content:space-between;align-items:center;
  padding-bottom:16px;border-bottom:1px solid rgba(255,255,255,.14)}
.ft .brand{color:var(--white)}
.ft .brand b{color:#7FA8E8}
.ft-mail{color:var(--white);font-size:14px}
.legal-links{display:flex;flex-wrap:wrap;gap:8px 18px;list-style:none;margin:0;padding:16px 0 4px}
.legal-links a{color:#CBD5E1;font-size:13px;padding:4px 0}
.legal-links a:hover{color:var(--white)}
.disc{font-size:12.5px;line-height:1.7;color:#94A3B8;max-width:80ch}
.disc b{color:#E2E8F0}
.disc p{margin-top:9px}
.disc a{color:#A8C7F0}

@media(max-width:900px){.steps{grid-template-columns:1fr}}
@media(max-width:560px){
  .wrap,.ft-in,.hdr-in{padding-left:16px;padding-right:16px}
  .hero{padding:26px 0 22px}
  /* offer pages need the fold space; blog posts keep the crumb, it is a
     visible internal link to the vertical wall. */
  .crumb:not(.crumb--keep){display:none}
  .sec{padding:28px 0}
  .sec__head{margin-bottom:16px}
  /* the action comes before the detail that supports it */
  .offer{padding:17px}
  .offer-ribbon{margin:-17px -17px 13px;padding:9px 15px;font-size:12px}
  /* the advertiser mark gets its own row on a phone so it stays legible;
     beside the name it was squeezed to 72px, well under the 150px floor */
  .offer-head{flex-direction:column;align-items:flex-start;gap:9px}
  .offer-logo{width:160px;height:52px}
  .offer-best{order:3;margin-top:9px}
  .offer-act{order:4;margin-top:11px;padding-top:11px}
  .offer-feats{order:5}
  .offer-why{order:6}
  .offer-fine{order:7}
  .offer-cta{margin-left:0;width:100%}
  .offer-secure{text-align:center}
}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* dedicated offer page: advertiser logo sits big, above the selling points */
.offer-brand{margin:0 0 18px}
.offer-brand img{max-width:180px;max-height:64px;width:auto;height:auto;display:block}
/* 150 is the floor, not the target: at exactly 150 the sub-pixel width
   lands under it and the mark reads as too small. */
@media(max-width:560px){.offer-brand img{max-width:164px;max-height:56px}}

/* below 360px the header cannot hold brand + CTA + burger; the hero CTA
   remains above the fold. .hdr prefix needed: plain .nav-cta loses to .btn. */
@media(max-width:359px){.hdr .nav-cta{display:none}}

/* blog prose: the old per-page inline CSS is gone, so style the carried markup here */
.prose{font-size:16.5px;line-height:1.75;color:var(--text2)}
.prose h2{font-size:23px;line-height:1.3;color:var(--text);margin:30px 0 10px}
.prose h3{font-size:18.5px;line-height:1.35;color:var(--text);margin:24px 0 8px}
.prose h4{font-size:16.5px;color:var(--text);margin:20px 0 6px}
.prose p{margin:0 0 14px}
.prose ul,.prose ol{margin:0 0 16px;padding-left:22px}
.prose li{margin:0 0 7px}
/* link styling must not reach buttons: it was repainting the offer CTA
   blue-on-orange inside a post (2.52:1) */
.prose a:not(.btn){color:var(--brand);font-weight:600}
.prose .btn--primary{color:#fff}
.prose .btn{text-decoration:none}
.prose strong{color:var(--text)}
.prose blockquote{margin:18px 0;padding:12px 16px;border-left:3px solid var(--brand);
  background:var(--brand-light);border-radius:0 var(--radius-btn) var(--radius-btn) 0}
.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:0 0 18px;
  border:1px solid var(--border);border-radius:var(--radius)}
.prose table{border-collapse:collapse;width:100%;min-width:460px;font-size:14.5px;background:var(--white)}
.prose th,.prose td{padding:10px 13px;text-align:left;border-bottom:1px solid var(--border);vertical-align:top}
.prose th{background:var(--bg);color:var(--text);font-weight:700;white-space:nowrap}
.prose tr:last-child td{border-bottom:0}

/* a wordmark the advertiser supplies in white needs a dark plate to be legible
   on our light page; recolouring someone's mark is not ours to do */
.offer-brand--dark{display:inline-block;background:var(--text);padding:10px 16px;
  border-radius:var(--radius-btn)}
.offer-brand--dark img{max-height:46px}

/* ZeroParallel partner form embed: the card chrome and width are ours, the
   embed itself is unstyled. Lifted from the page this replaced. */
.lp-eyebrow{font-size:.72rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:var(--brand);margin:0 0 10px}
.lp-h{font-size:clamp(1.5rem,3.4vw,2rem);line-height:1.2;color:var(--text);margin:0 0 10px}
.lp-sub{font-size:1.06rem;line-height:1.5;color:var(--text2);margin:0 0 20px;max-width:54ch}
#loan-form{background:var(--white);border:1px solid var(--border);border-radius:16px;
  box-shadow:var(--shadow);padding:24px;display:flex;justify-content:center}
#omForm-root{width:100%;max-width:440px}
/* ZP's own inline style reserves 526px whatever the step holds; let it size itself */
#omForm-root>div{min-height:0!important}
.lp-trust{display:flex;flex-wrap:wrap;gap:12px 24px;margin:18px 0 0;padding:0;list-style:none}
@media(max-width:560px){#loan-form{padding:14px}}

/* header CTA: keep it from crowding the nav on narrow laptops */
.nav-cta{padding:0 14px;font-size:14px}
@media(max-width:1280px){.nav a{padding:0 6px;font-size:14px}}
@media(max-width:430px){
  .brand{font-size:17px;gap:7px}
  .brand-box{width:28px;height:28px}
  .brand-box svg{width:15px;height:15px}
  .nav-cta{padding:0 12px;font-size:13.5px}
  .hdr-in{gap:8px}
}

/* Tablet widths put the first offer CTA just past the fold (717-720px vs 700).
   Tighten the band and the first section so the primary action stays visible. */
@media(min-width:561px) and (max-width:900px){
  .hero{padding:16px 0 15px}
  .sec{padding:20px 0}
  .sec__head{margin-bottom:10px}
  .hero .ticks{margin-top:10px}
  .hero h1{font-size:clamp(22px,3.6vw,30px)}
}

/* mid-article action on a long guide: the offer cards sit thousands of px down,
   so one compact CTA goes near the top where a phone reader actually is */
.post-cta{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin:22px 0 26px;
  padding:16px 18px;background:var(--brand-light);border:1px solid #CBDDF8;
  border-radius:var(--radius)}
.post-cta span{font-size:13.5px;color:var(--text2)}
.post-pick{margin:22px 0 28px;padding:16px 16px 6px;background:var(--brand-light);
  border:1px solid #CBDDF8;border-radius:var(--radius)}
.post-pick__k{margin:0 0 10px;font-size:.72rem;font-weight:700;letter-spacing:.12em;
  text-transform:uppercase;color:var(--brand)}
.post-pick .offer{box-shadow:none}

/* a few px of slack so the first partner card clears the fold on the common
   phone and small-tablet heights */
@media(max-width:900px){
  .post-pick{margin:16px 0 22px;padding:13px 13px 4px}
  .sec__head h2{margin-bottom:4px}
}

/* The in-article pick is a teaser, not the full card: the highlights and fine
   print belong to the block at the end of the post. Trimming them keeps the
   partner CTA inside the fold on a 700px screen. */
.post-pick .offer-feats,
.post-pick .offer-why,
.post-pick .offer-fine,
.post-pick .offer-best{display:none}
.post-pick .offer{padding:13px}
.post-pick .offer-act{margin-top:10px;padding-top:10px}
@media(min-width:561px) and (max-width:900px){
  .offer-brand{margin-bottom:12px}
  .hero .ticks{margin-top:10px}
  .ticks{margin-top:12px}
}

/* 320px: a long product name wraps the hero to ~300px and pushes the partner
   CTA past the fold. Tighten the band and the gap above the action. */
@media(max-width:400px){
  .hero{padding:14px 0 13px}
  .hero h1{font-size:clamp(20px,6vw,25px);line-height:1.14}
  .hero .lede{font-size:15px;margin-top:9px}
  .hero .ticks{margin-top:10px;gap:6px 16px}
  .sec{padding:20px 0}
  .sec__head{margin-bottom:11px}
  .offer-brand{margin-bottom:11px}
}

/* mobile legibility and thumb targets */
@media(max-width:560px){
  /* the card description is selling copy, not fine print */
  .offer-tagline{font-size:14.5px;line-height:1.55}
  /* stacked footer links were 24px tall; a thumb needs 44 */
  .legal-links{gap:2px 18px}
  .legal-links a{min-height:44px;display:inline-flex;align-items:center;padding:0}
  .ft-mail{min-height:44px;display:inline-flex;align-items:center}
}

/* thumb targets: a breadcrumb link and the "see all" link were 16-20px tall */
.btn--ghost{background:var(--white);color:var(--brand);border:1px solid #CBDDF8;
  min-height:44px;font-weight:600}
.btn--ghost:hover{background:var(--brand-light);text-decoration:none}
@media(max-width:560px){
  .crumb a{display:inline-block;padding:16px 0;line-height:1}
  .crumb{margin-bottom:4px}
}
