/*
Theme Name: Hello Elementor Child - InstaBid
Template: hello-elementor
Description: InstaBid MASTER stylesheet — edit ALL site + blog styles here. Sections labeled below.
Version: 1.1
*/

/* ############################ BASE / TOKENS (colors, fonts) — used everywhere ############################ */
:root{
  --navy:#1c2135; --navy2:#181d2e; --surface:#2a3247; --surface2:#323c58;
  --blue:#4a7bff; --blue2:#6a92f5; --purple:#a98bff; --sky:#5fc8f0; --green:#37d39b; --coral:#f5837a;
  --text:#d3d8e6; --mut:#98a1ba; --white:#f7f9ff; --electric:#3e65ce; --boxbg:#1c2642; --eglow:0 0 26px rgba(62,101,206,.55);
  --glow:0 0 46px rgba(74,123,255,.42); --card:0 24px 60px -22px rgba(0,0,0,.65);
  --amber:#e3b53c; --amber-rgb:227,181,60;
  --font:-apple-system,BlinkMacSystemFont,"SF Pro Display","SF Pro Text","Helvetica Neue",Arial,sans-serif;
}
*{margin:0;padding:0;box-sizing:border-box}
.ib{font-family:var(--font);background:var(--navy);color:var(--text);line-height:1.6;overflow-x:clip;-webkit-font-smoothing:antialiased}
.ib a{text-decoration:none;color:inherit}
.ib .wrap{max-width:1120px;margin:0 auto;padding:0 28px}
.ib h1,.ib h2,.ib h3{color:var(--white);line-height:1.1;letter-spacing:-.022em;font-weight:700}
.ib .grad{background:linear-gradient(120deg,var(--electric),var(--blue2));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.ib .eyebrow{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:#9fb4ea;background:var(--boxbg);border:1px solid var(--electric);box-shadow:0 0 14px rgba(62,101,206,.28);padding:7px 15px;border-radius:100px}
.ib .eyebrow .dot{width:7px;height:7px;border-radius:50%;background:var(--blue);box-shadow:0 0 12px var(--blue)}
.ib .chip{display:inline-block;font-size:12px;font-weight:700;letter-spacing:.03em;padding:5px 12px;border-radius:100px;margin-bottom:15px}
.ib .c-sky,.ib .c-green,.ib .c-purple,.ib .c-coral,.ib .c-blue{color:#9fb4ea;background:var(--boxbg);border:1px solid var(--electric);box-shadow:0 0 16px rgba(62,101,206,.35)}


/* ================= MARKETING — BUTTONS ================= */
.ib .btn{display:inline-flex;align-items:center;gap:9px;font-family:var(--font);font-weight:600;font-size:16px;padding:15px 28px;border-radius:14px;cursor:pointer;border:none;transition:transform .15s,box-shadow .15s}
.ib .btn-primary{background:linear-gradient(120deg,var(--electric),var(--blue));color:#fff;box-shadow:0 12px 34px -8px rgba(62,101,206,.7),var(--eglow)}
.ib .btn-primary:hover{transform:translateY(-3px);box-shadow:0 20px 46px -8px rgba(74,123,255,.85)}
.ib .btn-ghost{background:rgba(255,255,255,.05);color:var(--white);border:1px solid rgba(255,255,255,.16)}
.ib .btn-ghost:hover{background:rgba(255,255,255,.1);transform:translateY(-3px)}

/* ================= MARKETING — NAV (top bar + logo + links) ================= */
.ib .nav{position:sticky;top:0;z-index:50;backdrop-filter:blur(16px);background:rgba(24,29,46,.8);border-bottom:1px solid rgba(255,255,255,.07)}
.ib .nav .row{display:flex;align-items:center;justify-content:space-between;height:90px}
.ib .logo{font-size:22px;font-weight:800;color:var(--white);letter-spacing:-.03em}.ib .logo b{color:var(--blue)}
.ib .nav .links{display:flex;gap:30px;font-size:15px;font-weight:500;color:var(--mut)}.ib .nav .links a:hover{color:var(--white)}
@media(max-width:820px){.ib .nav .links{display:none}}

/* ================= MARKETING — SECTION SPACING + HEADINGS ================= */
.ib .sec{padding:96px 0}.ib .sec-t{border-top:1px solid rgba(255,255,255,.06)}.ib .sec-b{background:var(--navy2)}
.ib .head{max-width:660px;margin-bottom:56px}.ib .head h2{font-size:40px;margin:16px 0 14px}.ib .head p{font-size:18px;color:var(--text)}

/* ================= MARKETING — HERO (headline + subcopy) ================= */
.ib .hero{position:relative;padding:84px 0 92px}
.ib .hero:before{content:"";position:absolute;top:-130px;left:50%;transform:translateX(-50%);width:840px;height:520px;background:radial-gradient(ellipse at center,rgba(74,123,255,.3),transparent 62%);pointer-events:none;animation:heropulse 9s ease-in-out infinite}@keyframes heropulse{0%,100%{opacity:.72}50%{opacity:1}}
.ib .hero h1{font-size:54px;margin:22px 0 20px}.ib .hero p.lead{font-size:19px;max-width:520px}
.ib .cta{display:flex;gap:14px;margin:32px 0 24px;flex-wrap:wrap}
.ib .hg{position:relative;display:grid;grid-template-columns:1.05fr .95fr;gap:52px;align-items:center}
@media(max-width:900px){.ib .hg{grid-template-columns:1fr;gap:40px}}
.ib .trust{display:flex;gap:30px;font-size:16px;color:var(--text);flex-wrap:wrap;margin-top:8px}.ib .trust>div{text-shadow:0 0 22px rgba(74,123,255,.45)}.ib .trust b{color:#fff;font-weight:800;text-shadow:0 0 20px rgba(94,134,236,.95)}

/* ================= MARKETING — PRODUCT MOCKUP (the estimate card) ================= */
.ib .mock{position:relative;background:linear-gradient(160deg,var(--surface),var(--navy2));border:1px solid var(--electric);border-radius:22px;box-shadow:var(--card),var(--eglow);padding:22px;transform:rotate(1.1deg)}
.ib .mock .bar{display:flex;gap:7px;margin-bottom:16px}.ib .mock .bar i{width:11px;height:11px;border-radius:50%;background:#3a4258}
.ib .mock .bar i:nth-child(1){background:var(--coral)}.ib .mock .bar i:nth-child(2){background:#f5c451}.ib .mock .bar i:nth-child(3){background:var(--green)}
.ib .mock .doc{background:var(--navy);border-radius:14px;padding:20px}
.ib .mock .doc .top{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid rgba(255,255,255,.08);padding-bottom:14px;margin-bottom:14px}
.ib .mock .doc .top .t{font-weight:700;color:var(--white);font-size:15px}.ib .mock .doc .top .badge{font-size:12px;font-weight:700;color:var(--green);background:rgba(55,211,155,.14);padding:5px 10px;border-radius:8px}
.ib .mock .li{display:flex;justify-content:space-between;padding:9px 0;font-size:13.5px;border-bottom:1px dashed rgba(255,255,255,.07)}
.ib .mock .li span:first-child{color:var(--mut)}.ib .mock .li span:last-child{color:var(--white);font-weight:600;font-variant-numeric:tabular-nums}
.ib .mock .total{display:flex;justify-content:space-between;margin-top:16px;padding-top:14px;border-top:2px solid rgba(74,123,255,.35)}
.ib .mock .total .g{font-size:15px;color:var(--white);font-weight:700}.ib .mock .total .n{font-size:26px;color:#5f86ec;font-weight:800;text-shadow:0 0 18px rgba(62,101,206,.7)}
.ib .mock .stamp{position:absolute;bottom:-16px;right:-12px;background:linear-gradient(120deg,var(--blue),var(--blue2));color:#fff;font-weight:700;font-size:13px;padding:11px 17px;border-radius:12px;box-shadow:var(--glow)}

/* ================= MARKETING — STATS BAND ================= */
.ib .stats{border-top:1px solid rgba(255,255,255,.06);border-bottom:1px solid rgba(255,255,255,.06);background:var(--navy2)}
.ib .stats .r{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;padding:40px 0}
@media(max-width:760px){.ib .stats .r{grid-template-columns:repeat(2,1fr);gap:28px}}
.ib .stat .n{font-size:38px;font-weight:800;color:var(--white)}.ib .stat .n span{color:#5f86ec;text-shadow:0 0 20px rgba(62,101,206,.75)}.ib .stat .l{font-size:14px;color:var(--mut);margin-top:2px}

/* ================= MARKETING — FEATURE ROWS (zigzag image/text) ================= */
.ib .feat{display:grid;grid-template-columns:1fr 1fr;gap:52px;align-items:center;margin-bottom:66px}
.ib .feat:nth-child(even) .txt{order:2}
@media(max-width:880px){.ib .feat{grid-template-columns:1fr;gap:28px}.ib .feat:nth-child(even) .txt{order:0}}
.ib .feat h3{font-size:27px;margin-bottom:14px}.ib .feat p{margin-bottom:18px}
.ib .feat ul{list-style:none;display:flex;flex-direction:column;gap:11px}
.ib .feat li{display:flex;gap:11px;align-items:flex-start;font-size:15.5px}.ib .feat li:before{content:"✓";color:var(--green);font-weight:800}
.ib .feat .img{border-radius:20px;overflow:hidden;border:1px solid rgba(255,255,255,.09);box-shadow:var(--card);aspect-ratio:4/3;background-size:cover;background-position:center;position:relative}
.ib .feat .img:after{content:"";position:absolute;inset:0;background:linear-gradient(160deg,transparent,rgba(74,123,255,.16))}

/* ================= MARKETING — 3-UP GRID (services + trust chips) ================= */
.ib .grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}@media(max-width:880px){.ib .grid3{grid-template-columns:1fr 1fr}}@media(max-width:560px){.ib .grid3{grid-template-columns:1fr}}

/* ================= MARKETING — CARDS (the electric-box cards) ================= */
.ib .card{background:var(--boxbg);border:1px solid var(--electric);border-radius:18px;padding:26px;box-shadow:0 0 20px rgba(62,101,206,.15),0 20px 44px -24px rgba(0,0,0,.6);transition:transform .18s,border-color .18s,box-shadow .18s}
.ib .card:hover{transform:translateY(-6px);border-color:#5a82f0;box-shadow:0 0 34px rgba(62,101,206,.5),0 26px 50px -24px rgba(0,0,0,.55)}
.ib .card .ic{width:46px;height:46px;border-radius:12px;background:rgba(74,123,255,.14);display:flex;align-items:center;justify-content:center;font-size:22px;margin-bottom:16px;box-shadow:inset 0 0 0 1px rgba(74,123,255,.3)}
.ib .card h3{font-size:19px;margin-bottom:9px}.ib .card p{font-size:14.5px;color:var(--mut);line-height:1.55}

/* ================= MARKETING — STORY / ABOUT NARRATIVE ================= */
.ib .founder{display:flex;gap:26px;align-items:center;background:var(--boxbg);border:1px solid rgba(62,101,206,.32);border-radius:20px;padding:26px 30px;margin:0 0 50px;box-shadow:0 0 30px rgba(62,101,206,.16)}@media(max-width:640px){.ib .founder{flex-direction:column;text-align:center;gap:18px}}.ib .founder .fpic{width:104px;height:104px;border-radius:50%;object-fit:cover;object-position:center top;flex-shrink:0;border:2px solid var(--electric);box-shadow:0 0 22px rgba(62,101,206,.45)}.ib .founder .fq{font-size:18px;line-height:1.55;color:var(--white);font-weight:500;margin-bottom:11px}.ib .founder .fby{font-size:14px;color:var(--mut)}.ib .founder .fby b{color:var(--blue2)}
.ib .founder .fcreds{font-size:12.5px;color:var(--mut);margin-top:8px;line-height:1.55}.ib .founder .fcreds b{color:#9fb4ea;font-weight:700}
.ib .story .in{max-width:720px}.ib .story h2{font-size:34px;margin:16px 0 24px}.ib .story p{font-size:17px;margin-bottom:18px}.ib .story p strong{color:var(--white)}

/* ================= MARKETING — CTA BOX (bottom call-to-action) ================= */
.ib .cta-box{position:relative;background:var(--boxbg);border:1px solid var(--electric);border-radius:28px;padding:64px 40px;box-shadow:var(--eglow);text-align:center;overflow:hidden}
.ib .cta-box:before{content:"";position:absolute;top:-140px;left:50%;transform:translateX(-50%);width:600px;height:400px;background:radial-gradient(ellipse,rgba(74,123,255,.34),transparent 60%)}
.ib .cta-box h2{position:relative;font-size:42px;margin-bottom:16px}.ib .cta-box p{position:relative;font-size:18px;max-width:520px;margin:0 auto 30px}

/* ================= MARKETING — FORMS (quote + contact) ================= */
.ib .form{background:var(--boxbg);border:1px solid var(--electric);border-radius:20px;padding:34px;box-shadow:0 0 20px rgba(62,101,206,.18),var(--card)}
.ib .form label{display:block;font-size:13px;font-weight:600;color:var(--mut);margin:14px 0 7px;letter-spacing:.02em}
.ib .form input,.ib .form textarea{width:100%;background:var(--navy);border:1px solid rgba(255,255,255,.12);border-radius:12px;padding:13px 15px;color:var(--white);font-family:var(--font);font-size:15px}
.ib .form input:focus,.ib .form textarea:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(74,123,255,.18)}

/* ================= MARKETING — CONTACT INFO BLOCKS ================= */
.ib .info .row{display:flex;gap:14px;align-items:flex-start;margin-bottom:22px}
.ib .info .k{width:44px;height:44px;border-radius:12px;background:rgba(74,123,255,.13);display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0}
.ib .info .k2{color:var(--white);font-weight:600}.ib .info .v{color:var(--mut);font-size:14.5px}

/* ================= MARKETING — HOW-IT-WORKS STEPS ================= */
.ib .steps{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}@media(max-width:760px){.ib .steps{grid-template-columns:1fr}}
.ib .step{position:relative;background:var(--boxbg);border:1px solid var(--electric);border-radius:18px;padding:28px;box-shadow:0 0 16px rgba(62,101,206,.16)}
.ib .step .num{font-size:15px;font-weight:800;color:#fff;width:34px;height:34px;border-radius:10px;background:linear-gradient(120deg,var(--blue),var(--blue2));display:flex;align-items:center;justify-content:center;margin-bottom:16px;box-shadow:var(--glow)}
.ib .step h3{font-size:18px;margin-bottom:8px}.ib .step p{font-size:14.5px;color:var(--mut)}

/* ================= MARKETING — FOOTER ================= */
.ib .foot{border-top:1px solid rgba(255,255,255,.07);padding:56px 0 40px;background:var(--navy2)}
.ib .foot .cols{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:34px}@media(max-width:760px){.ib .foot .cols{grid-template-columns:1fr 1fr}}
.ib .foot h4{color:var(--white);font-size:13px;margin-bottom:14px;letter-spacing:.05em;text-transform:uppercase}
.ib .foot a,.ib .foot p{display:block;color:var(--mut);font-size:14.5px;margin-bottom:9px}.ib .foot a:hover{color:var(--blue2)}
.ib .foot .bottom{margin-top:40px;padding-top:24px;border-top:1px solid rgba(255,255,255,.06);font-size:13px;color:var(--mut);display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}


/* ############################ BLOG (child-theme templates) ############################ */

/* ================= BLOG — RESET ================= */
html,body{margin:0;padding:0}

/* ================= BLOG — BASE ================= */
body.ibblog{font-family:var(--font);background:var(--navy);color:var(--text);line-height:1.7;-webkit-font-smoothing:antialiased}
.ibblog a{text-decoration:none;color:var(--blue2)} .ibblog a:hover{color:var(--white)}
.ibw{max-width:1120px;margin:0 auto;padding:0 28px}
.ibblog h1,.ibblog h2,.ibblog h3{color:var(--white);line-height:1.15;letter-spacing:-.02em;font-weight:700}
.ibblog .grad{background:linear-gradient(120deg,var(--electric),var(--blue2));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
/* nav */

/* ================= BLOG — NAV ================= */
.ibnav{position:sticky;top:0;z-index:50;backdrop-filter:blur(16px);background:rgba(24,29,46,.82);border-bottom:1px solid rgba(255,255,255,.07)}
.ibnav .in{display:flex;align-items:center;justify-content:space-between;height:90px;max-width:1120px;margin:0 auto;padding:0 28px}
.iblogo{font-size:22px;font-weight:800;color:var(--white);letter-spacing:-.03em} .iblogo b{color:var(--blue)}
.ibnav .lnk{display:flex;gap:28px;font-size:15px;font-weight:500;color:var(--mut)} .ibnav .lnk a{color:var(--mut)} .ibnav .lnk a:hover{color:var(--white)}
@media(max-width:820px){.ibnav .lnk{display:none}}
.ibbtn{display:inline-flex;align-items:center;gap:8px;font-weight:600;font-size:15px;padding:11px 22px;border-radius:13px;background:linear-gradient(120deg,var(--electric),var(--blue));color:#fff;box-shadow:0 10px 30px -8px rgba(62,101,206,.7),var(--eglow)}
.ibbtn:hover{color:#fff;transform:translateY(-2px)}
/* BREATHE PASS 8/10 — the nav Start-free (the most-clicked button on the money pages)
   had :hover but NO transition and NO :active, so it snapped on hover and was dead to the
   touch on phones. Verified in the shipped CSS: .ibnav .ibbtn had neither. Global here so
   nav / hero / CTA buttons all match; the rich-page CTA already had :active and is unchanged. */
.ibbtn{transition:transform .15s var(--ease-out,cubic-bezier(.16,1,.3,1)),background .18s ease,box-shadow .2s ease}
.ibbtn:active{transform:scale(.97)}
@media (prefers-reduced-motion:reduce){.ibbtn{transition:none}.ibbtn:active{transform:none}}
/* blog header */

/* ================= BLOG — INDEX HEADER ================= */
.ibhead{position:relative;padding:70px 0 30px;text-align:center}
.ibhead:before{content:"";position:absolute;top:-100px;left:50%;transform:translateX(-50%);width:760px;height:420px;background:radial-gradient(ellipse,rgba(74,123,255,.22),transparent 62%);pointer-events:none}
.ibhead .eb{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:#9fb4ea;background:var(--boxbg);border:1px solid var(--electric);box-shadow:0 0 14px rgba(62,101,206,.3);padding:7px 15px;border-radius:100px;position:relative}
.ibhead h1{font-size:46px;margin:18px 0 12px;position:relative} .ibhead p{color:var(--text);font-size:18px;max-width:600px;margin:0 auto;position:relative}
/* post grid */

/* ================= BLOG — INDEX POST CARDS ================= */
.ibgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:26px;padding:44px 0 96px}
@media(max-width:900px){.ibgrid{grid-template-columns:1fr 1fr}} @media(max-width:620px){.ibgrid{grid-template-columns:1fr}}
.ibcard{display:flex;flex-direction:column;background:var(--boxbg);border:1px solid var(--electric);border-radius:18px;overflow:hidden;box-shadow:0 0 20px rgba(62,101,206,.14),0 20px 44px -24px rgba(0,0,0,.6);transition:transform .18s,box-shadow .18s}
.ibcard:hover{transform:translateY(-6px);box-shadow:0 0 34px rgba(62,101,206,.5),0 26px 50px -24px rgba(0,0,0,.55)}
.ibcard .thumb{aspect-ratio:16/9;background:linear-gradient(150deg,var(--surface),var(--navy2));background-size:cover;background-position:center;position:relative}
.ibcard .thumb:after{content:"";position:absolute;inset:0;background:linear-gradient(160deg,transparent,rgba(62,101,206,.18))}
.ibcard .body{padding:22px;display:flex;flex-direction:column;flex:1}
.ibcard .meta{font-size:12px;color:var(--mut);letter-spacing:.03em;text-transform:uppercase;margin-bottom:10px}
.ibcard h2{font-size:19px;line-height:1.3;margin:0 0 10px} .ibcard h2 a{color:var(--white)} .ibcard h2 a:hover{color:var(--blue2)}
.ibcard .ex{font-size:14.5px;color:var(--mut);line-height:1.6;flex:1}
.ibcard .rm{margin-top:16px;font-size:14px;font-weight:600;color:var(--blue2)}
/* single */

/* ================= BLOG — SINGLE POST (title + meta) ================= */
.ibsingle{padding:56px 0 40px} .ibsingle .art{max-width:760px;margin:0 auto}
.ibsingle .eb{display:inline-block;font-size:12px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#9fb4ea;background:var(--boxbg);border:1px solid var(--electric);padding:5px 13px;border-radius:100px;margin-bottom:18px}
/* .ibsingle h1{42px} removed 8/10 — superseded by .ibrichpage .ibsingle .art h1 clamp() */
.ibsingle .pmeta{color:var(--mut);font-size:14.5px;margin-bottom:28px}

/* ================= BLOG — SINGLE FEATURED IMAGE ================= */
.ibfeat{max-width:960px;margin:0 auto 40px;border-radius:22px;overflow:hidden;border:1px solid var(--electric);box-shadow:0 0 26px rgba(62,101,206,.28),var(--card)}
.ibfeat img{width:100%;display:block}

/* ================= BLOG — ARTICLE BODY (the post content) ================= */
.ibbody{max-width:760px;margin:0 auto;font-size:18px;line-height:1.8;color:var(--text)}
.ibbody p{margin:0 0 22px} .ibbody h2{font-size:29px;margin:44px 0 16px} .ibbody h3{font-size:23px;margin:34px 0 12px}
.ibbody ul,.ibbody ol{margin:0 0 22px;padding-left:24px} .ibbody li{margin:0 0 10px}
.ibbody a{color:var(--blue2);text-decoration:underline;text-decoration-color:rgba(106,146,245,.4)}
.ibbody img{max-width:100%;height:auto;border-radius:14px;margin:16px 0;border:1px solid rgba(255,255,255,.08)}
.ibbody blockquote{border-left:3px solid var(--electric);margin:26px 0;padding:6px 0 6px 22px;color:var(--white);font-style:italic}
.ibbody strong{color:var(--white)}
.ibbody h2,.ibbody h3{color:var(--white)}
.ibbody code{background:var(--boxbg);padding:2px 7px;border-radius:6px;font-size:.9em}
/* single CTA + footer */

/* ================= BLOG — SINGLE-POST CTA ================= */
.ibcta{max-width:760px;margin:56px auto 0}
.ibctabox{position:relative;background:var(--boxbg);border:1px solid var(--electric);border-radius:24px;padding:44px 34px;text-align:center;box-shadow:var(--eglow);overflow:hidden}
.ibctabox:before{content:"";position:absolute;top:-120px;left:50%;transform:translateX(-50%);width:500px;height:340px;background:radial-gradient(ellipse,rgba(74,123,255,.3),transparent 60%)}
.ibctabox h3{font-size:28px;margin:0 0 10px;position:relative} .ibctabox p{position:relative;color:var(--text);margin:0 auto 22px;max-width:440px}

/* ================= BLOG — FOOTER ================= */
.ibfoot{border-top:1px solid rgba(255,255,255,.07);padding:48px 0 40px;background:var(--navy2);margin-top:90px}
.ibfoot .cols{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:34px} @media(max-width:760px){.ibfoot .cols{grid-template-columns:1fr 1fr}}
.ibfoot h4{color:var(--white);font-size:13px;margin-bottom:14px;letter-spacing:.05em;text-transform:uppercase}
.ibfoot a,.ibfoot p{display:block;color:var(--mut);font-size:14.5px;margin-bottom:9px} .ibfoot a:hover{color:var(--blue2)}
.ibfoot .bot{margin-top:38px;padding-top:22px;border-top:1px solid rgba(255,255,255,.06);font-size:13px;color:var(--mut)}

/* ================= BLOG — PAGINATION ================= */
.ibpag{max-width:1010px;margin:0 auto;padding:0 52px 90px;display:flex;justify-content:center;gap:12px}
.ibpag a,.ibpag span{padding:10px 16px;border-radius:10px;border:1px solid rgba(255,255,255,.12);color:var(--text);font-weight:600}
.ibpag .current{background:var(--boxbg);border-color:var(--electric);color:#fff}


/* ================= MARKETING — MOBILE NAV (CSS-only sheet) ================= */
.ib .mnav{display:none;position:relative}
@media(max-width:820px){.ib .mnav{display:block}}
.ib .mnav summary{list-style:none;cursor:pointer;width:42px;height:42px;border-radius:12px;border:1px solid rgba(255,255,255,.16);display:flex;align-items:center;justify-content:center;color:var(--white);font-size:17px;user-select:none}
.ib .mnav summary::-webkit-details-marker{display:none}
.ib .mnav[open] summary{border-color:var(--blue);box-shadow:0 0 12px rgba(74,123,255,.35)}
.ib .mnav .sheet{position:absolute;right:0;top:52px;background:var(--navy2);border:1px solid var(--electric);border-radius:16px;box-shadow:var(--card),0 0 24px rgba(62,101,206,.3);padding:10px;min-width:214px;display:flex;flex-direction:column;z-index:60}
.ib .mnav .sheet a{padding:11px 14px;border-radius:10px;font-size:15px;color:var(--text)}
.ib .mnav .sheet a:hover{background:rgba(74,123,255,.12);color:var(--white)}

/* ================= MARKETING — 4-UP GRID (receipts band etc.) ================= */
.ib .grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
@media(max-width:960px){.ib .grid4{grid-template-columns:1fr 1fr}}
@media(max-width:560px){.ib .grid4{grid-template-columns:1fr}}
.ib .grid4 .card h3{font-size:17.5px}

/* ================= MARKETING — CLOSE-FLOW SEQUENCE (chips + arrows) ================= */
.ib .flow{display:flex;flex-wrap:wrap;gap:10px 12px;align-items:center;margin:36px 0 8px}
.ib .flow .fstep{background:var(--boxbg);border:1px solid var(--electric);border-radius:12px;padding:12px 16px;font-size:14.5px;font-weight:600;color:var(--white);box-shadow:0 0 14px rgba(62,101,206,.18)}
.ib .flow .fa{color:#5f86ec;font-weight:800;font-size:17px;text-shadow:0 0 14px rgba(62,101,206,.8)}
.ib .flow .fstep.last{border-color:var(--green);color:var(--green);box-shadow:0 0 16px rgba(55,211,155,.25)}

/* ================= MARKETING — LIVE DEMO PANEL (embed mounts here) ================= */
.ib .demo-panel{background:var(--boxbg);border:1px solid var(--electric);border-radius:22px;box-shadow:0 0 26px rgba(62,101,206,.2),var(--card);padding:18px}
.ib #instabid-demo-embed{width:100%;min-height:420px;border-radius:14px;overflow:hidden}
.ib #instabid-demo-embed iframe{width:100%!important;min-height:600px;border:0;border-radius:14px;display:block}

/* ================= MARKETING — COMING CHIP (honest not-shipped label) ================= */
.ib .chip.c-coming{color:var(--mut);background:rgba(255,255,255,.04);border:1px dashed rgba(255,255,255,.25);box-shadow:none;margin-bottom:0}
.ib .card .chip.c-coming{margin-bottom:14px}

/* ================= MARKETING — BIG QUOTE (objection killer) ================= */
.ib .bigquote{max-width:760px;margin:0 auto;text-align:center}
.ib .bigquote .q{font-size:30px;line-height:1.35;color:var(--white);font-weight:700;letter-spacing:-.015em}
.ib .bigquote .q .grad2{color:#5f86ec;text-shadow:0 0 22px rgba(62,101,206,.6)}
.ib .bigquote .a{margin-top:20px;font-size:16px;color:var(--mut)}
@media(max-width:640px){.ib .bigquote .q{font-size:23px}}

/* ================= MARKETING — PRICING CARD (Founding 20) ================= */
.ib .price-card{position:relative;background:var(--boxbg);border:1px solid var(--electric);border-radius:26px;padding:44px 40px;box-shadow:0 0 30px rgba(62,101,206,.25),var(--card);max-width:560px;margin:0 auto;overflow:hidden}
.ib .price-card:before{content:"";position:absolute;top:-120px;left:50%;transform:translateX(-50%);width:480px;height:320px;background:radial-gradient(ellipse,rgba(74,123,255,.3),transparent 60%)}
.ib .price-card>*{position:relative}
.ib .price-card .plabel{font-size:13px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#9fb4ea;margin-bottom:12px}
.ib .price-card .pnum{font-size:52px;font-weight:800;color:var(--white);line-height:1.05}
.ib .price-card .pnum span{font-size:19px;color:var(--mut);font-weight:600}
.ib .price-card .psub{font-size:15.5px;color:var(--mut);margin:10px 0 26px}
.ib .price-card ul{list-style:none;display:flex;flex-direction:column;gap:12px;margin-bottom:30px}
.ib .price-card li{display:flex;gap:11px;align-items:flex-start;font-size:15.5px;color:var(--text)}
.ib .price-card li:before{content:"✓";color:var(--green);font-weight:800}

/* ================= MARKETING — LEGAL PAGES (privacy etc.) ================= */
.ib .legal h2{font-size:23px;margin:34px 0 12px}
.ib .legal p{margin-bottom:16px;font-size:16px}
.ib .legal ul{list-style:disc;padding-left:22px;margin:0 0 18px}
.ib .legal li{margin-bottom:8px;font-size:16px}
.ib .legal strong{color:var(--white)}

/* ================= MARKETING — TIGHT NAV AT PHONE WIDTH (logo + burger + lang + CTA in one 390 row) ================= */
@media(max-width:480px){
.ib .nav .row{height:64px;gap:8px}
.ib .nav .row .btn-primary{padding:9px 12px!important;font-size:13px!important;white-space:nowrap}
.ib .logo img{height:22px!important}
#ibtr{font-size:12px!important;padding:2px!important;flex-shrink:0}
#ibtr a{padding:4px 7px!important;white-space:nowrap}
}












/* ################## DEUCE 2026 — theme pages (blog/single) ##################
   Scoped to .ibblog / .ibsingle / the shared nav+footer. Delete to END-DEUCE-BLOG to revert.
   ########################################################################### */
@font-face{font-family:'Geist';font-weight:400;font-display:swap;src:url('fonts/Geist-Regular.woff2') format('woff2')}
@font-face{font-family:'Geist';font-weight:500;font-display:swap;src:url('fonts/Geist-Medium.woff2') format('woff2')}
@font-face{font-family:'Geist';font-weight:600;font-display:swap;src:url('fonts/Geist-SemiBold.woff2') format('woff2')}
@font-face{font-family:'Geist';font-weight:700;font-display:swap;src:url('fonts/Geist-Bold.woff2') format('woff2')}
@font-face{font-family:'Geist Mono';font-weight:400;font-display:swap;src:url('fonts/GeistMono-Regular.woff2') format('woff2')}
@font-face{font-family:'Geist Mono';font-weight:500;font-display:swap;src:url('fonts/GeistMono-Medium.woff2') format('woff2')}

body.ibblog,body.ibsingle{
  --ground:#101119;--deep:#0B1120;--raise:#101A2E;--steel:#1C2942;--edge:#26364F;
  --rblue:#2F6BFF;--blue:#4a7bff;
  --type:#edeef4;--dim:#8d95ad;--dimmer:#7b849e;
  --sans:'Geist',-apple-system,BlinkMacSystemFont,sans-serif;
  --mono:'Geist Mono',ui-monospace,Menlo,monospace;
  --ease-out:cubic-bezier(.23,1,.32,1);
  background:var(--ground)!important;color:var(--type);font-family:var(--sans);font-weight:400;
  line-height:1.62;-webkit-font-smoothing:antialiased;margin:0}
.ibblog .ibw,.ibsingle .ibw{max-width:1160px;margin:0 auto;padding:0 32px}

/* ---- archive header ---- */
.ibblog .ibhead{padding:74px 0 44px;position:relative;overflow:hidden}
.ibblog .ibhead::after{content:"";position:absolute;left:50%;bottom:-300px;transform:translateX(-50%);
  width:1100px;height:460px;border-radius:50%;pointer-events:none;
  background:radial-gradient(ellipse at center,rgba(74,123,255,.24),transparent 68%);filter:blur(52px)}
.ibblog .ibhead > *{position:relative;z-index:2}
.ibblog .ibhead .eb{font-family:var(--mono);font-size:12.5px;letter-spacing:.17em;text-transform:uppercase;
  color:var(--dimmer);display:flex;align-items:center;gap:10px}
.ibblog .ibhead .eb::before{content:"";width:14px;height:1px;background:var(--amber);flex:none}
.ibblog .ibhead h1{font-family:var(--sans);font-weight:700;font-size:clamp(34px,5vw,58px);
  letter-spacing:-.038em;line-height:1.04;margin:18px 0 16px;color:var(--type);text-wrap:balance}
.ibblog .ibhead h1 .grad{color:var(--amber);background:none;-webkit-text-fill-color:var(--amber);
  text-shadow:0 0 13px rgba(var(--amber-rgb),.34)}
.ibblog .ibhead p{color:var(--dim);font-size:16.5px;max-width:60ch;line-height:1.66}

/* ---- card grid — the social feed drop-in ---- */
.ibblog .ibgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;padding:8px 0 40px}
@media (max-width:980px){.ibblog .ibgrid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:640px){.ibblog .ibgrid{grid-template-columns:1fr}}
.ibblog .ibcard{background:var(--deep);border:1px solid var(--steel);border-radius:11px;overflow:hidden;
  display:flex;flex-direction:column;
  transition:border-color .22s ease,box-shadow .28s ease,transform .22s ease,background .22s ease}
.ibblog .ibcard .thumb{display:block;height:180px;background:#0d1424 center/cover no-repeat;
  border-bottom:1px solid var(--steel);position:relative}
.ibblog .ibcard .thumb::after{content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,transparent 40%,rgba(11,17,32,.55))}
.ibblog .ibcard .body{padding:20px 22px 22px;display:flex;flex-direction:column;flex:1}
.ibblog .ibcard .meta{font-family:var(--mono);font-size:12px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--dimmer);margin-bottom:12px}
.ibblog .ibcard h2{font-family:var(--sans);font-size:19px;font-weight:600;line-height:1.28;
  letter-spacing:-.02em;margin:0 0 10px}
.ibblog .ibcard h2 a{color:var(--type);text-decoration:none}
.ibblog .ibcard .ex{font-size:14px;color:var(--dim);line-height:1.55;flex:1}
.ibblog .ibcard .rm{font-family:var(--mono);font-size:12px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--amber);margin-top:16px}
@media (hover:hover) and (pointer:fine){
  .ibblog .ibcard:hover{border-color:var(--rblue);background:var(--raise);
    box-shadow:0 0 46px rgba(47,107,255,.16);transform:translateY(-4px)}
}

/* ---- pagination ---- */
.ibblog .ibpag{max-width:1160px;margin:0 auto;padding:10px 32px 70px;display:flex;gap:8px;flex-wrap:wrap}
.ibblog .ibpag a,.ibblog .ibpag span{font-family:var(--mono);font-size:12.5px;color:var(--dim);
  border:1px solid var(--steel);border-radius:6px;padding:9px 14px;text-decoration:none;
  transition:border-color .2s ease,color .2s ease}
.ibblog .ibpag .current{background:var(--amber);color:#181206;border-color:var(--amber)}
.ibblog .ibpag a:hover{border-color:var(--rblue);color:var(--type)}

/* ---- single article ---- */
.ibsingle .ibbody{max-width:760px;margin:0 auto;padding:0 32px 80px;font-size:17.5px;line-height:1.72;color:#c9cede}
.ibsingle .ibbody h2{font-family:var(--sans);font-size:30px;font-weight:700;letter-spacing:-.03em;
  color:var(--type);margin:46px 0 16px;line-height:1.15;text-wrap:balance}
.ibsingle .ibbody h3{font-size:22px;font-weight:600;color:var(--type);margin:34px 0 12px;letter-spacing:-.02em}
.ibsingle .ibbody p{margin:0 0 22px}
.ibsingle .ibbody a{color:var(--amber);border-bottom:1px solid rgba(var(--amber-rgb),.4);text-decoration:none}
.ibsingle .ibbody ul,.ibsingle .ibbody ol{margin:0 0 24px 20px}
.ibsingle .ibbody li{margin-bottom:10px}
.ibsingle .ibbody blockquote{border-left:2px solid var(--amber);margin:30px 0;padding:6px 0 6px 22px;
  font-size:20px;line-height:1.5;color:var(--type)}
.ibsingle .ibbody img{max-width:100%;height:auto;border-radius:10px;border:1px solid var(--steel);margin:12px 0}
.ibsingle .ibbody code{font-family:var(--mono);font-size:15px;background:var(--deep);
  border:1px solid var(--steel);border-radius:4px;padding:2px 6px}
.ibsingle .ibhead{padding:66px 0 34px}
.ibsingle .ibhead h1{font-family:var(--sans);font-weight:700;font-size:clamp(30px,4.4vw,48px);
  letter-spacing:-.035em;line-height:1.08;color:var(--type);max-width:22ch;text-wrap:balance}

/* ---- shared nav/footer on theme pages ---- */
.ibnav{position:sticky;top:0;z-index:300;background:rgba(16,17,25,.86);
  backdrop-filter:saturate(140%) blur(14px);border-bottom:1px solid #1e2230}
.ibnav .in{max-width:1280px;margin:0 auto;padding:0 32px;height:66px;display:flex;align-items:center;gap:28px}
.ibnav .iblogo{font-family:'Geist',sans-serif;font-weight:700;font-size:17px;letter-spacing:-.035em;
  color:#edeef4!important;text-decoration:none;flex:none}
.ibnav .iblogo i{font-style:normal;color:var(--amber)!important}
.ibnav .iblinks{display:flex;gap:22px;margin-right:auto;min-width:0;flex-wrap:nowrap}
/* ---- mobile nav (added 2026-07-31) — there was NO nav under 820px at all ----
   Checkbox toggle rather than JS: a contractor on a phone keeps his menu even
   if a script fails. The input is visually hidden but still focusable. */
.ibnav .ibmenu-cb{position:absolute;opacity:0;width:44px;height:44px;right:24px;top:11px;margin:0;z-index:2;cursor:pointer}
.ibnav .ibburger{display:none}
@media(min-width:1221px){.ibnav .ibmenu-cb{display:none}}
@media(max-width:1220px){
  .ibnav .ibburger{display:flex;flex-direction:column;justify-content:center;gap:5px;
    width:44px;height:44px;padding:0 9px;cursor:pointer}
  .ibnav .ibburger span{display:block;height:2px;border-radius:2px;background:#cfd5e6;
    transition:transform .22s cubic-bezier(.23,1,.32,1),opacity .16s ease-out}
  .ibnav .ibmenu-cb:checked ~ .ibright .ibburger span:nth-child(1){transform:translateY(7px) rotate(45deg)}
  .ibnav .ibmenu-cb:checked ~ .ibright .ibburger span:nth-child(2){opacity:0}
  .ibnav .ibmenu-cb:checked ~ .ibright .ibburger span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
  .ibnav .ibmenu-cb:focus-visible ~ .ibright .ibburger{outline:2px solid #4a7bff;outline-offset:3px;border-radius:8px}
  .ibnav .iblinks{display:flex;position:absolute;left:0;right:0;top:100%;
    flex-direction:column;gap:0;margin:0;padding:6px 0 12px;
    background:#0f1019;border-bottom:1px solid rgba(255,255,255,.09);
    box-shadow:0 18px 40px rgba(0,0,0,.5);
    max-height:0;overflow:hidden;opacity:0;visibility:hidden;
    transition:max-height .26s cubic-bezier(.23,1,.32,1),opacity .18s ease-out,visibility .26s}
  .ibnav .ibmenu-cb:checked ~ .iblinks{max-height:78vh;overflow-y:auto;opacity:1;visibility:visible}
  .ibnav .iblinks a{padding:14px 32px;font-size:16px!important;color:#cfd5e6!important;
    border-bottom:1px solid rgba(255,255,255,.05)}
  .ibnav .iblinks a:last-child{border-bottom:0}
  .ibnav .in{position:relative}
}
@media(prefers-reduced-motion:reduce){.ibnav .iblinks,.ibnav .ibburger span{transition:none}}
.ibnav .iblinks a{font-size:14px;font-weight:500;color:#8d95ad!important;text-decoration:none;white-space:nowrap}
.ibnav .iblinks a:hover{color:#edeef4!important}
.ibnav .ibright{display:flex;align-items:center;gap:14px;flex:none}
.ibnav .ibbtn{font-size:13.5px;font-weight:600;background:var(--amber)!important;color:#181206!important;
  padding:10px 18px;border-radius:5px;text-decoration:none;white-space:nowrap;border:none!important}
.ibnav .ibbtn:hover{background:#ffd75e!important}
.ibls{display:inline-flex;border:1px solid #262a38;border-radius:5px;overflow:hidden}
.ibls a{font-family:'Geist Mono',monospace;font-size:12px;letter-spacing:.1em;font-weight:500;
  color:#7b849e;text-decoration:none;padding:7px 11px}
.ibls a.on{color:#101119;background:var(--amber)}
/* was: .iblinks{display:none} — that killed the mobile panel AND left 820-900px
   with no nav at all. The mobile-nav block above owns .iblinks now. */
@media (max-width:900px){.ibnav .in{padding:0 20px;height:60px}}

.ibfooter{border-top:1px solid #1e2230;background:#0b0c12;font-family:'Geist',sans-serif}
.ibfooter .in{max-width:1160px;margin:0 auto;padding:54px 32px 40px;display:grid;
  grid-template-columns:1.15fr 2.4fr;gap:56px}
.ibfooter .fbrand p{font-size:14px;color:#8d95ad;line-height:1.6;margin-top:14px;max-width:34ch}
.ibfooter .fcols{display:grid;grid-template-columns:repeat(4,1fr);gap:24px}
.ibfooter h4{font-family:'Geist Mono',monospace;font-size:12px;letter-spacing:.16em;text-transform:uppercase;
  color:#7b849e;font-weight:500;margin-bottom:14px}
.ibfooter .fcols a{display:block;font-size:14px;color:#8d95ad;text-decoration:none;padding:5px 0}
.ibfooter .fcols a:hover{color:#edeef4}
.ibfooter .fbot{max-width:1160px;margin:0 auto;padding:20px 32px 22px;border-top:1px solid #1e2230;
  display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap;
  font-family:'Geist Mono',monospace;font-size:12px;color:#7b849e}
.ibfooter .fbot a{color:#7b849e;text-decoration:none}
@media (max-width:880px){
  .ibfooter .in{grid-template-columns:1fr;gap:36px;padding:40px 20px 30px}
  .ibfooter .fcols{grid-template-columns:1fr 1fr}
}
/* ########################## END-DEUCE-BLOG ########################## */
/* eyebrow: drop the legacy pill border/background from the old blog design */
.ibblog .ibhead .eb,.ibsingle .ibhead .eb{border:none!important;background:none!important;
  border-radius:0!important;padding:0!important;display:inline-flex!important;width:auto!important}
.ibblog .ibhead{text-align:left}
.ibblog .ibhead h1,.ibblog .ibhead p{margin-left:0;margin-right:0}
/* article header aligns to the body measure; byline block */
.ibsingle .art{max-width:760px;margin:0 auto;padding:70px 32px 26px;text-align:left!important}
.ibsingle .art h1{max-width:none;margin:0}
.ibpage .ibbyline{max-width:760px;margin:0 auto 30px;padding:0 32px;display:flex;align-items:center;gap:16px}
.ibpage .ibbyline img{width:58px;height:58px;border-radius:50%;object-fit:cover;object-position:center top;
  border:1px solid #1C2942;flex:none}
.ibpage .ibbyline .who{font-family:'Geist Mono',monospace;font-size:12px;letter-spacing:.13em;
  text-transform:uppercase;color:#7b849e;line-height:1.9}
.ibpage .ibbyline .who b{color:var(--amber);font-weight:500}
.ibsingle .ibbody > p:first-child{font-size:19px;color:#dfe3ee;line-height:1.62}
.ibsingle .ibcta{max-width:760px;margin:0 auto;padding:0 32px 80px}
.ibsingle .ibctabox{background:linear-gradient(180deg,#111C33,#0A1120);border:1px solid #2F6BFF;
  box-shadow:0 0 0 1px rgba(47,107,255,.35),0 0 62px rgba(47,107,255,.20);
  border-radius:12px;padding:34px 32px;text-align:left}
.ibsingle .ibctabox h3{font-family:'Geist',sans-serif;font-size:24px;font-weight:700;letter-spacing:-.03em;
  color:#edeef4;margin:0 0 10px}
.ibsingle .ibctabox p{font-size:15.5px;color:#8d95ad;line-height:1.6;margin:0 0 22px;max-width:56ch}
.ibsingle .ibctabox .ibbtn{display:inline-block;background:var(--amber)!important;color:#181206!important;
  font-family:'Geist',sans-serif;font-weight:600;font-size:14px;padding:13px 22px;border-radius:5px;
  text-decoration:none}

/* ############ DEUCE 2026 — SITE-WIDE WIDGET CHROME (added 2026-07-29) ############
   Stella's bubble/panel and the TranslatePress floater were styled only on the
   homepage, so every article page showed them raw. Same rules, hoisted here.
   Selectors carry an 'html body' prefix on purpose: both widgets inject their
   own !important CSS AFTER the theme stylesheet, so equal-specificity rules
   lose on source order. The extra specificity is what makes these stick.
   Delete to END-DEUCE-WIDGETS to revert. */
/* ================= STELLA (Forever Agent widget) — restyled to match ================= */
/* bubble: was a fat 💬 blob. Now a real button, our shape, our colors. */html body #fa-bubble{
  width:auto!important;height:auto!important;border-radius:6px!important;
  background:#4a7bff!important;background-image:none!important;
  padding:12px 20px!important;font-size:0!important;box-shadow:0 10px 30px -10px rgba(74,123,255,.55)!important;
  display:flex!important;align-items:center!important;justify-content:center!important;
  bottom:22px!important;right:22px!important;
  transition:transform 160ms cubic-bezier(.23,1,.32,1),background-color 160ms ease,box-shadow 200ms ease}html body #fa-bubble::after{content:"Questions?";font-family:'Geist',sans-serif;font-size:14px;
  font-weight:600;letter-spacing:-.008em;color:var(--amber);white-space:nowrap}html body #fa-bubble:active{transform:scale(.97)!important}html body #fa-bubble:hover{background:#5f8cff!important;box-shadow:0 0 24px rgba(74,123,255,.5)!important}

/* panel */html body #fa-panel{background:#101119!important;border:1px solid #262a38!important;border-radius:11px!important;
  box-shadow:0 30px 80px -30px rgba(0,0,0,.9)!important;overflow:hidden!important;
  font-family:'Geist',sans-serif!important;bottom:22px!important;right:22px!important}html body #fa-panel .fa-head{background:#0b0c12!important;color:#edeef4!important;
  border-bottom:1px solid #262a38!important;font-family:'Geist',sans-serif!important;
  font-size:14px!important;font-weight:600!important;padding:14px 18px!important}html body #fa-msgs{background:#101119!important;padding:16px!important}html body #fa-panel .fa-m{font-family:'Geist',sans-serif!important;font-size:14px!important;
  line-height:1.5!important;border-radius:9px!important;padding:10px 13px!important}html body #fa-panel .fa-m.user,
html body #fa-panel .fa-m[class*="user"]{background:#4a7bff!important;color:#fff!important}html body #fa-panel .fa-m.bot,
html body #fa-panel .fa-m[class*="bot"],
html body #fa-panel .fa-m[class*="assist"]{
  background:#181a23!important;color:#d7dbe8!important;border:1px solid #262a38!important}

/* input row: full width, send button reduced to an arrow */html body #fa-panel .fa-row{background:#0b0c12!important;border-top:1px solid #262a38!important;
  padding:10px!important;gap:8px!important;display:flex!important;align-items:center!important}html body #fa-in{flex:1 1 auto!important;width:100%!important;background:#181a23!important;
  border:1px solid #262a38!important;border-radius:6px!important;color:#edeef4!important;
  font-family:'Geist',sans-serif!important;font-size:14px!important;padding:11px 13px!important;
  outline:none!important}html body #fa-in::placeholder{color:#7b849e!important}html body #fa-in:focus{border-color:#4a7bff!important;box-shadow:0 0 0 2px rgba(74,123,255,.18)!important}html body #fa-send{font-size:0!important;background:#4a7bff!important;background-image:none!important;
  border:none!important;border-radius:6px!important;width:38px!important;height:38px!important;
  min-width:38px!important;padding:0!important;flex:none!important;cursor:pointer!important;
  display:flex!important;align-items:center!important;justify-content:center!important}html body #fa-send::after{content:"↑";font-size:17px;font-weight:700;color:#fff;line-height:1}html body #fa-send:hover{background:#5f8cff!important}html body #fa-send:active{transform:scale(.94)}
/* TP's floating switcher — real class is .trp-floating-switcher (not the legacy #trp-floater-ls).
   Redundant now: EN/ES lives in the header. */html body .trp-floating-switcher,
html body nav.trp-floating-switcher{display:none!important}

/* ############ END-DEUCE-WIDGETS ############ */

/* ##################################################################
   DEUCE 2026 — RICH PAGE BANDS (added 2026-07-29)
   Long-form copy was rendering as one 760px column, which is why the
   content pages read as blog posts. This turns them into pages: every
   H2 opens a full-bleed band, grounds alternate, and the shapes Grace
   already writes in (bold-led runs, standalone bold lines, numbers)
   become cards, pull-quotes and stat strips.
   Palette is the locked one — no new colours introduced.
   Delete to END-DEUCE-RICH to revert.
   ################################################################## */

.ibrichpage .ibbody{max-width:none!important;padding:0!important;font-size:inherit}
.ibrich{
  --w:1080px; --txt:748px;
  --ground:#101119; --alt:#0c0d14; --deep:#0B1120; --raise:#101A2E;
  --steel:#1C2942; --edge:#26364F; --line:#1e2230;
  --blue:#4a7bff; --rblue:#2F6BFF;
  --type:#edeef4; --body:#c9cede; --dim:#8d95ad; --dimmer:#7b849e;
  --sans:'Geist',-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  --mono:'Geist Mono',ui-monospace,"SF Mono",Menlo,monospace;
  font-family:var(--sans);
}

/* ---------------------------------------------------------- the bands */
.ibrich .band{padding:84px 0;position:relative}
/* the opening band sits right under the hero, so its top padding would stack
   on the hero's and open a dead gap under the subtitle */
.ibrich .band:first-child{padding-top:30px}
.ibrich .band.alt{background:var(--alt);
  border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.ibrich .band.deep{background:linear-gradient(180deg,var(--deep),var(--ground));
  border-top:1px solid var(--steel);border-bottom:1px solid var(--steel)}
.ibrich .band + .band.alt{border-top:1px solid var(--line)}
/* Every band shares ONE container width with the hero, so the whole page
   hangs off a single left axis. The text column is constrained by measure
   on the elements themselves, not by narrowing the container — otherwise
   prose bands and card bands sit on two different centres. */
.ibrich .in,.ibrich .in.wide{max-width:var(--w);margin:0 auto;padding:0 32px}
.ibrich .in > p,
.ibrich .in > h3,
.ibrich .in > ul:not(.grid):not(.stats):not(.tiers){max-width:var(--txt)}

/* the H2 carries a short amber rule instead of an icon — the page
   deliberately runs on type, per the near-zero-icons direction */
.ibrich h2{font-family:var(--sans);font-size:clamp(25px,3.1vw,33px);font-weight:700;
  line-height:1.16;letter-spacing:-.032em;color:var(--type);
  margin:0 0 26px;padding-top:16px;position:relative;text-wrap:balance;max-width:20ch}
.ibrich h2:before{content:"";position:absolute;top:0;left:0;
  width:30px;height:2px;background:var(--amber);border-radius:2px}
.ibrich .in.wide h2{max-width:24ch}

.ibrich h3{font-size:20px;font-weight:600;color:var(--type);
  letter-spacing:-.02em;margin:34px 0 12px}

.ibrich p{font-size:17.5px;line-height:1.72;color:var(--body);margin:0 0 22px;
  max-width:66ch}
.ibrich p.lead{font-size:20px;line-height:1.62;color:#dfe3ee}
.ibrich strong{color:var(--type);font-weight:600}
.ibrich em{color:var(--type)}
.ibrich a{color:var(--amber);text-decoration:none;
  border-bottom:1px solid rgba(var(--amber-rgb),.38)}
.ibrich a:hover{border-bottom-color:var(--amber)}
.ibrich ul:not(.grid):not(.stats){margin:0 0 24px;padding-left:20px}
.ibrich ul:not(.grid):not(.stats) li{font-size:17.5px;line-height:1.7;
  color:var(--body);margin-bottom:11px;max-width:64ch}
.ibrich ul:not(.grid):not(.stats) li::marker{color:var(--dimmer)}

/* ------------------------------------------------------- pull-quote */
.ibrich p.pull{
  font-size:clamp(21px,2.5vw,27px);line-height:1.32;font-weight:600;
  letter-spacing:-.025em;color:var(--type);text-wrap:balance;
  max-width:22ch;margin:34px 0 30px;padding:4px 0 4px 24px;
  border-left:2px solid var(--amber)}
.ibrich .band.alt p.pull,.ibrich .band.deep p.pull{border-left-color:var(--blue)}

/* -------------------------------------------------- somebody speaking
   Stella on /live/, John in his own words. Distinct from the pull-quote:
   a pull-quote is the page making a point, this is a person talking — so it
   sits in a raised card with an open-quote mark instead of a rule. */
.ibrich blockquote.said{
  position:relative;margin:30px 0;padding:26px 30px 24px 58px;
  max-width:var(--txt);border:0;border-radius:14px;
  background:var(--raise);box-shadow:inset 0 0 0 1px rgba(255,255,255,.055);
  font-size:clamp(17px,1.6vw,19px);line-height:1.5;color:var(--type)}
.ibrich blockquote.said em{font-style:normal}
.ibrich blockquote.said:before{
  content:"\201C";position:absolute;left:20px;top:14px;
  font-family:Georgia,"Times New Roman",serif;font-size:52px;line-height:1;
  color:var(--amber);opacity:.55}
.ibrich .band.alt blockquote.said:before{color:var(--blue);opacity:.7}
@media(max-width:600px){
  .ibrich blockquote.said{padding:22px 20px 20px 46px}
  .ibrich blockquote.said:before{left:14px;font-size:44px}}

/* ------------------------------------------------------ the stat strip */
.ibrich ul.stats{list-style:none;display:grid;margin:34px 0 6px;padding:0;
  gap:14px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}
.ibrich ul.stats li{background:var(--deep);border:1px solid var(--steel);
  border-radius:10px;padding:22px 20px;margin:0;display:flex;
  flex-direction:column;gap:9px}
/* sans, not mono: the mono comma read as "2 , 241" at this size */
.ibrich ul.stats b{font-family:var(--sans);font-size:clamp(26px,3.2vw,34px);
  font-weight:600;letter-spacing:-.035em;color:var(--amber);line-height:1;
  font-variant-numeric:tabular-nums}
.ibrich ul.stats span{font-size:13.5px;line-height:1.45;color:var(--dim);
  max-width:24ch}

/* ---------------------------------------------------------- card grid */
.ibrich ul.grid{list-style:none;display:grid;margin:30px 0 6px;padding:0;
  gap:16px;grid-template-columns:repeat(auto-fit,minmax(290px,1fr))}
.ibrich ul.grid li.c{background:var(--deep);border:1px solid var(--steel);
  border-radius:10px;padding:24px 24px 22px;margin:0;
  transition:border-color .22s ease,box-shadow .28s ease,
             transform .22s cubic-bezier(.23,1,.32,1),background .22s ease}
@media (hover:hover) and (pointer:fine){
  .ibrich ul.grid li.c:hover{border-color:var(--rblue);background:var(--raise);
    box-shadow:0 0 46px rgba(47,107,255,.16);transform:translateY(-4px)}
}
.ibrich ul.grid h4{font-size:16px;font-weight:600;letter-spacing:-.015em;
  color:var(--type);margin:0 0 9px;line-height:1.35}
.ibrich ul.grid p{font-size:15px;line-height:1.62;color:var(--dim);
  margin:0;max-width:none}

/* ------------------------------------------------------- the price table */
.ibrich ul.tiers{list-style:none;display:grid;margin:34px 0 6px;padding:0;
  gap:16px;grid-template-columns:repeat(auto-fit,minmax(268px,1fr));
  align-items:start}
.ibrich ul.tiers li.tier{position:relative;margin:0;padding:30px 26px 28px;
  background:var(--deep);border:1px solid var(--steel);border-radius:12px;
  display:flex;flex-direction:column}
.ibrich ul.tiers li.tier.pick{border-color:var(--rblue);
  background:linear-gradient(180deg,var(--raise),var(--deep));
  box-shadow:0 0 46px rgba(47,107,255,.16)}
.ibrich ul.tiers .tag{position:absolute;top:-10px;left:26px;
  font-family:var(--mono);font-size:12px;letter-spacing:.13em;
  text-transform:uppercase;color:#0b0f1a;background:var(--amber);
  padding:4px 10px;border-radius:100px;font-weight:600}
.ibrich ul.tiers .tn{font-size:14px;font-weight:600;letter-spacing:.01em;
  color:var(--dim)}
.ibrich ul.tiers .amt{font-size:clamp(38px,4.6vw,48px);font-weight:700;
  letter-spacing:-.045em;color:var(--type);line-height:1.05;margin:10px 0 2px;
  font-variant-numeric:tabular-nums}
.ibrich ul.tiers .per{font-size:13.5px;color:var(--dimmer);
  padding-bottom:20px;border-bottom:1px solid var(--steel);margin-bottom:18px}
.ibrich ul.tiers ul.tf{list-style:none;margin:0;padding:0;display:flex;
  flex-direction:column;gap:11px}
.ibrich ul.tiers ul.tf li{font-size:14.5px;line-height:1.5;color:var(--body);
  margin:0;padding-left:20px;position:relative;max-width:none}
.ibrich ul.tiers ul.tf li:before{content:"+";position:absolute;left:0;top:-1px;
  color:var(--amber);font-weight:600}

/* ------------------------------------------------------ screenshot band */
.ibrich figure.shot{margin:38px 0 0}
.ibrich figure.shot img{display:block;width:100%;height:auto;border-radius:12px;
  border:1px solid var(--steel);
  box-shadow:0 0 40px rgba(47,107,255,.10),0 30px 70px -40px rgba(0,0,0,.9)}
.ibrich figure.shot figcaption{font-family:var(--mono);font-size:12.5px;
  letter-spacing:.02em;color:var(--dimmer);margin-top:14px;text-align:center}

/* ------------------------------------------------------------- CTA row */
.ibrich p.ctarow{margin:32px 0 0}
.ibrich p.ctarow .ibbtn{display:inline-flex;align-items:center;
  font-family:var(--sans);font-size:14.5px;font-weight:600;
  background:var(--amber);color:#181206;border:none;border-radius:6px;
  padding:13px 24px;text-decoration:none;
  transition:background 160ms ease,transform 160ms cubic-bezier(.23,1,.32,1)}
.ibrich p.ctarow .ibbtn:hover{background:#ffd75e;color:#181206}
.ibrich p.ctarow .ibbtn:active{transform:scale(.97)}

/* --------------------------------------------------- hero for these pages */
.ibrichpage .ibsingle{padding:0}
.ibrichpage .ibsingle .art{max-width:var(--w,1080px);margin:0 auto;
  padding:82px 32px 34px;position:relative;text-align:left}
.ibrichpage .ibsingle .art:before{content:"";position:absolute;
  /* min() not a flat 900px: a fixed-width centred glow hangs 255px past each
     edge on a 390px phone and gives the whole page a horizontal scrollbar */
  top:-190px;left:50%;transform:translateX(-50%);width:min(900px,100vw);height:460px;
  background:radial-gradient(ellipse,rgba(74,123,255,.20),transparent 64%);
  pointer-events:none;z-index:0}
.ibrichpage .ibsingle .art > *{position:relative;z-index:1}
.ibrichpage .ibsingle .art h1{font-size:clamp(33px,5.4vw,56px);line-height:1.06;
  letter-spacing:-.038em;max-width:17ch;margin:0 0 18px;text-wrap:balance}
.ibrichpage .ibsingle .pmeta{font-size:19px;line-height:1.5;color:#a7aec4;
  max-width:52ch;margin:0}
.ibrichpage .ibsingle .eb{font-family:'Geist Mono',monospace;font-size:12px;
  letter-spacing:.16em;text-transform:uppercase;color:var(--amber);
  background:none;border:none;padding:0;margin-bottom:20px;display:inline-block}

/* the byline — John's headshot was 58px and reading like a favicon */
.ibrichpage .ibbyline{max-width:1080px;margin:0 auto;padding:6px 32px 0;
  display:flex;align-items:center;gap:18px}
.ibrichpage .ibbyline img{width:96px;height:96px;border-radius:50%;
  object-fit:cover;object-position:center top;flex:none;
  border:2px solid var(--steel,#1C2942);
  box-shadow:0 0 34px rgba(74,123,255,.22)}
.ibrichpage .ibbyline .who{font-family:'Geist',sans-serif;font-size:15px;
  line-height:1.5;letter-spacing:0;color:#8d95ad;text-transform:none}
.ibrichpage .ibbyline .who b{display:block;font-size:17px;font-weight:600;
  color:#edeef4;letter-spacing:-.02em;margin-bottom:3px}

/* the closing CTA box, matched to the band system */
.ibrichpage .ibsingle .ibcta{max-width:1080px;margin:0 auto;padding:78px 32px 96px}
.ibrichpage .ibsingle .ibctabox{padding:52px 40px}

@media (max-width:780px){
  .ibrich .band{padding:58px 0}
  .ibrich .in,.ibrich .in.wide{padding:0 22px}
  .ibrichpage .ibsingle .art{padding:56px 22px 26px}
  .ibrichpage .ibbyline{padding:6px 22px 0;gap:14px}
  .ibrichpage .ibbyline img{width:72px;height:72px}
  .ibrich p.pull{max-width:none;font-size:20px}
  .ibrich h2{max-width:none}
}

/* status pill — "Launching" on 411 / LIVE. Sits under the H1 so a visitor
   can't read the page as an available product. */
.ibrichpage .ibsingle .ibpill{display:inline-flex;align-items:center;gap:7px;
  font-family:'Geist Mono',monospace;font-size:12px;letter-spacing:.13em;
  text-transform:uppercase;font-weight:500;color:var(--amber);
  background:rgba(var(--amber-rgb),.09);border:1px solid rgba(var(--amber-rgb),.32);
  padding:6px 13px;border-radius:100px;margin:0 0 16px}
.ibrichpage .ibsingle .ibpill:before{content:"";width:6px;height:6px;
  border-radius:50%;background:var(--amber);box-shadow:0 0 9px rgba(var(--amber-rgb),.85)}
/* ####################### END-DEUCE-RICH ####################### */
/* ############ DEUCE 2026 — THE DEMO (/see-it-work/) ############
   Scoped to .ibdemo, which also carries .ibrich for the band system.
   Delete to END-DEUCE-DEMO to revert. */

/* minmax(0,1fr) not 1fr — plain 1fr is minmax(AUTO,1fr) and auto refuses to shrink
   below min-content, so the long card text ('Foundation to finish, fully modeled
   multi-trade') pushed the 4th card 96px past the viewport and put a horizontal
   scrollbar on the page. Verified overflow at 1440: scrollWidth 1536. (deuce 8/04) */
.ibdemo .jobs{list-style:none;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:26px 0 34px;padding:0}
@media(max-width:900px){.ibdemo .jobs{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:520px){.ibdemo .jobs{grid-template-columns:1fr}}
.ibdemo .job{display:block;width:100%;text-align:left;cursor:pointer;padding:18px 18px 16px;border-radius:14px;
  background:var(--raise);border:1px solid transparent;box-shadow:inset 0 0 0 1px rgba(255,255,255,.055);
  transition:border-color .16s cubic-bezier(.23,1,.32,1),transform .16s cubic-bezier(.23,1,.32,1)}
.ibdemo .job:hover{border-color:rgba(74,123,255,.42);transform:translateY(-2px)}
.ibdemo .job:active{transform:scale(.985)}
.ibdemo .job.on{border-color:var(--blue);box-shadow:inset 0 0 0 1px var(--blue),0 0 22px rgba(74,123,255,.18)}
/* white-space:normal — the cards INHERIT nowrap from an ancestor, which is the real
   root cause: it forced each card to its full single-line width (336px), overflowing
   the viewport by 96px. The minmax(0,1fr) above stops the overflow; without this the
   text just clips mid-word instead ('Full gut, new cabinets, co'). Both are needed. */
.ibdemo .job,.ibdemo .jl,.ibdemo .jb{white-space:normal}
.ibdemo .jl{display:block;font-weight:650;font-size:16px;color:var(--type);letter-spacing:-.01em}
.ibdemo .jb{display:block;margin-top:5px;font-size:13.5px;line-height:1.4;color:var(--dim)}

.ibdemo .knobs{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:22px;margin:0 0 30px}
.ibdemo .knob label{display:block;font-size:12px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--dimmer);margin-bottom:9px}
.ibdemo .segs{display:flex;flex-wrap:wrap;gap:7px}
.ibdemo .seg{cursor:pointer;padding:9px 15px;border-radius:9px;font-size:14px;font-weight:600;color:var(--dim);
  background:var(--raise);border:1px solid transparent;box-shadow:inset 0 0 0 1px rgba(255,255,255,.055);
  transition:color .14s ease-out,border-color .14s ease-out}
.ibdemo .seg:hover{color:var(--type);border-color:rgba(74,123,255,.4)}
.ibdemo .seg:active{transform:scale(.97)}
.ibdemo .seg.on{color:#fff;background:var(--blue);box-shadow:none}
.ibdemo .seg small{display:block;font-size:12px;font-weight:500;opacity:.72;margin-top:2px}

.ibdemo .money{border-radius:18px;padding:28px 30px 26px;background:var(--deep);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.07),0 10px 30px rgba(0,0,0,.28)}
.ibdemo .mtop{display:flex;flex-wrap:wrap;gap:26px;align-items:flex-end;justify-content:space-between}
.ibdemo .mlabel{display:block;font-size:12px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--dimmer)}
.ibdemo .mamt{display:block;margin-top:6px;font-size:clamp(38px,6vw,58px);line-height:1;font-weight:750;
  letter-spacing:-.03em;color:var(--type);font-variant-numeric:tabular-nums}
.ibdemo .mnote{display:block;margin-top:8px;font-size:12.5px;color:var(--amber);opacity:.9}
.ibdemo .msplit{display:flex;gap:26px}
.ibdemo .spn{display:block;font-size:21px;font-weight:700;color:var(--type);font-variant-numeric:tabular-nums}
.ibdemo .spl{display:block;margin-top:3px;font-size:12px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--dimmer)}
.ibdemo .mbar{height:6px;border-radius:4px;margin:22px 0 14px;background:#37d39b;overflow:hidden}
.ibdemo .mbar span{display:block;height:100%;background:var(--blue);transition:width .32s cubic-bezier(.23,1,.32,1)}
.ibdemo .mreal{font-size:13.5px;color:var(--dim);margin:0 0 18px}
.ibdemo .mreal b{color:var(--type);font-weight:650}
.ibdemo .trades{display:flex;flex-wrap:wrap;gap:8px}
.ibdemo .trades span{font-size:13px;padding:6px 12px;border-radius:7px;color:var(--dim);background:rgba(255,255,255,.045)}

.ibdemo .matlist{margin-top:26px;border-radius:16px;overflow:hidden;background:var(--deep);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.07)}
.ibdemo .mhead,.ibdemo .mrow{display:grid;grid-template-columns:1.1fr 3fr .8fr .8fr;gap:14px;padding:13px 22px;align-items:baseline}
.ibdemo .mhead{font-size:12px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--dimmer);
  background:rgba(255,255,255,.035)}
.ibdemo .mrow{font-size:14px;border-top:1px solid rgba(255,255,255,.055)}
.ibdemo .mt{color:var(--blue);font-weight:600;font-size:13px}
.ibdemo .md{color:var(--type)}
.ibdemo .mq,.ibdemo .mu{color:var(--dim);font-variant-numeric:tabular-nums}
.ibdemo .fog{position:relative;filter:blur(4.5px);opacity:.5;pointer-events:none;user-select:none}
.ibdemo .gate{padding:24px 22px 26px;text-align:center;border-top:1px solid rgba(255,255,255,.055);
  background:linear-gradient(180deg,rgba(11,17,32,0) 0%,rgba(11,17,32,.75) 55%)}
.ibdemo .grest{margin:0 0 14px;font-size:15px;color:var(--dim)}
.ibdemo .grest b{color:var(--type);font-weight:700}

.ibdemo .tabs{display:flex;flex-wrap:wrap;gap:8px;margin:24px 0 20px}
.ibdemo .tab{cursor:pointer;padding:10px 17px;border-radius:9px;font-size:14px;font-weight:600;color:var(--dim);
  background:var(--raise);border:1px solid transparent;box-shadow:inset 0 0 0 1px rgba(255,255,255,.055);
  transition:color .14s ease-out,border-color .14s ease-out}
.ibdemo .tab:hover{color:var(--type);border-color:rgba(74,123,255,.4)}
.ibdemo .tab:active{transform:scale(.97)}
.ibdemo .tab.on{color:#fff;background:var(--blue);box-shadow:none}
.ibdemo .screen{margin:0}
.ibdemo .screen img{display:block;width:100%;height:auto;border-radius:14px;
  box-shadow:0 18px 44px rgba(0,0,0,.42),inset 0 0 0 1px rgba(255,255,255,.08)}
.ibdemo .screen figcaption{margin-top:14px;font-size:14px;line-height:1.55;color:var(--dim);max-width:var(--txt)}
.ibdemo .ibbtn.ghost{background:transparent;color:var(--type);box-shadow:inset 0 0 0 1px rgba(255,255,255,.22)}
.ibdemo .ibbtn.ghost:hover{box-shadow:inset 0 0 0 1px var(--blue)}
.ibdemo .fine{font-size:13px;color:var(--dimmer);margin-top:-6px}

@media (prefers-reduced-motion:reduce){
  .ibdemo *{transition:none!important}
}
@media (max-width:640px){
  .ibdemo .mhead,.ibdemo .mrow{grid-template-columns:1.4fr 1fr;gap:6px}
  .ibdemo .mhead span:nth-child(2),.ibdemo .mrow .md{grid-column:1/-1;order:3}
  .ibdemo .money{padding:22px 18px}
}

/* ############ END-DEUCE-DEMO ############ */

/* ############ DEUCE-HERO — glow + motion (2026-08-02) ############ */
/* Replaces John's 7/30 in-Elementor experiment (a solid #000E3B fill plus a
   box-shadow on the H1 widget) which rendered as a hard-edged rectangle and
   will band on any display it wasn't hand-tuned on. Same intent — a glow
   behind the headline — done as a radial bloom instead: no edge, nothing
   to band. Reuses @keyframes heropulse (~line 48) rather than declaring a
   second one; that rule targets .hero, which this Elementor-built homepage
   does not have, which is why the hero read flat in the first place.
   All motion here fails VISIBLE: base state is opaque, animation-fill-mode
   is backwards. If CSS or animation never runs, the card still shows. */

.elementor-element-c0014{position:relative;isolation:isolate}
.elementor-element-c0014::before{
  content:"";position:absolute;inset:0 38% 0 0;z-index:0;pointer-events:none;
  background:radial-gradient(ellipse 62% 54% at 34% 34%,rgba(74,123,255,.30),transparent 66%);
  animation:heropulse 9s ease-in-out infinite;
}
.elementor-element-c0014 > .e-con-inner{position:relative;z-index:1}

/* Estimate card — line items drop in, total lands. 6s, silent, loops.
   Stagger lives in the KEYFRAME PERCENTAGES, not animation-delay. Delay gives
   each row its own clock, which staggers the EXIT too — rows blink out in
   rolling order and it reads as flicker, not a build. One shared 6s clock,
   different entry %, common exit, so they leave together. */
#ibest .ib-est > div:nth-of-type(2) > div{animation:6s ease-out infinite backwards}
#ibest .ib-est > div:nth-of-type(2) > div:nth-child(1){animation-name:ibrow1}
#ibest .ib-est > div:nth-of-type(2) > div:nth-child(2){animation-name:ibrow2}
#ibest .ib-est > div:nth-of-type(2) > div:nth-child(3){animation-name:ibrow3}
#ibest .ib-est > div:nth-of-type(2) > div:nth-child(4){animation-name:ibrow4}
@keyframes ibrow1{0%,3%{opacity:0;transform:translateY(-7px)}11%,93%{opacity:1;transform:translateY(0)}99%,100%{opacity:0;transform:translateY(-7px)}}
@keyframes ibrow2{0%,9%{opacity:0;transform:translateY(-7px)}17%,93%{opacity:1;transform:translateY(0)}99%,100%{opacity:0;transform:translateY(-7px)}}
@keyframes ibrow3{0%,15%{opacity:0;transform:translateY(-7px)}23%,93%{opacity:1;transform:translateY(0)}99%,100%{opacity:0;transform:translateY(-7px)}}
@keyframes ibrow4{0%,21%{opacity:0;transform:translateY(-7px)}29%,93%{opacity:1;transform:translateY(0)}99%,100%{opacity:0;transform:translateY(-7px)}}

#ibest .ib-est-total{animation:ibtotal 6s ease-out infinite backwards}
#ibest .ib-est > div:nth-of-type(4){animation:ibfoot 6s ease-out infinite backwards}
@keyframes ibtotal{0%,33%{opacity:0}41%,93%{opacity:1}99%,100%{opacity:0}}
@keyframes ibfoot{0%,40%{opacity:0}48%,93%{opacity:1}99%,100%{opacity:0}}

#ibest .ib-est-amt{display:inline-block;animation:ibland 6s cubic-bezier(.16,1,.3,1) infinite backwards}
@keyframes ibland{
  0%,33%{transform:scale(.88);text-shadow:0 0 26px rgba(240,185,11,.55)}
  42%{transform:scale(1);text-shadow:0 0 14px rgba(240,185,11,.30)}
  55%,100%{transform:scale(1);text-shadow:none}
}

@media (prefers-reduced-motion:reduce){
  .elementor-element-c0014::before{animation:none}
  #ibest .ib-est > div:nth-of-type(2) > div,
  #ibest .ib-est-total,
  #ibest .ib-est-amt,
  #ibest .ib-est > div:nth-of-type(4){animation:none;opacity:1;transform:none;text-shadow:none}
}
/* ############ END-DEUCE-HERO ############ */

/* ############ CHIEF-PROOFSHOTS (2026-08-03) ############
   Fixes the "Poke around. It's the real thing." thumbnails on home (2531).

   Defect: post-2531.css (Elementor-generated) sets
     #ib26 .ib-shot img{height:168px;object-fit:cover;object-position:center top}
   375x168 is a 2.23:1 letterbox. The sources are 1400x942 (1.49:1),
   1100x578 (1.90:1) and 1400x1708 (0.82:1 PORTRAIT). cover + top-anchor
   therefore showed only the top 10-18% of each -- browser chrome and
   illegible micro-text. The proof section proved nothing.

   Why here and not in the Elementor CSS: post-2531.css is REGENERATED from
   the DB, so an edit there is silently clobbered on the next Elementor save.
   This overrides from the child theme instead -- a plain file on Deuce's
   normal scp path, filemtime cache-busted, and reverted by deleting this block.

   Specificity: (1,1,1) upstream vs (1,1,3) here, so this wins on weight
   alone regardless of source order. No !important -- per the build README,
   "beat it with an html body prefix, not more !important."

   contain, not cover: nothing gets cropped, so all three read. The 300px
   box keeps the 3-up grid aligned; the portrait one pillarboxes against the
   card colour, which is invisible because the fill matches .ib-shot's bg.
   Delete to END-CHIEF-PROOFSHOTS to revert.
   ###################################################### */
html body #ib26 .ib-shot img{
  height:300px;
  object-fit:contain;
  object-position:center center;
  background:#181a23;
  padding:12px 12px 0;
}
@media (max-width:767px){
  html body #ib26 .ib-shot img{height:260px}
}
/* ############ END-CHIEF-PROOFSHOTS ############ */


/* ############ DEUCE-TICKER-STATIC (breathe pass 2026-08-10) ############
   The ticker was a 16-cell marquee under a pulsing LIVE dot, every cell reading
   "awaiting feed". A LIVE indicator over a feed that isn't live is vaporware smell
   on the authenticity product. Markup is now 8 static cells, no dot, no "awaiting
   feed" — this stops the scroll.

   WHY HERE AND NOT IN THE PAGE CSS: the source rule is `.ib-ticker .track` (0,2,0),
   unscoped. `.ib-ticker.static .track` is (0,3,0) and wins on specificity regardless
   of load order — so this needs no edit to _elementor_page_settings, which is a PHP
   array export and a fragile write on a live homepage.

   Prices stay BLANK by standing instruction in the widget source: "Do NOT hand-type
   prices here." Marquee + pulse-dot return as the reward for the real feed.
   Delete this block to revert. */
.ib-ticker.static:not(.live) .track{animation:none!important;width:auto;flex-wrap:wrap;row-gap:6px}
.ib-ticker.static:not(.live):hover .track{animation:none!important}
.ib-ticker.static:not(.live) .lbl .dot{display:none}
@media (prefers-reduced-motion:reduce){.ib-ticker .track{animation:none!important}}
/* ############ END-DEUCE-TICKER-STATIC ############ */


/* ############ DEUCE-TYPE-FLOOR (breathe pass 2026-08-10) ############
   John's gavel: "normalize fonts, BIG floors" — the $5-reading-glasses law.
   Nothing under 12px anywhere. These 13 selectors live in Elementor's page
   settings CSS (post-2531.css), which loads AFTER the theme, so equal
   specificity would lose on source order. Beaten with an `html body` prefix,
   NOT more !important — the house pattern (see the TranslatePress scar).

   The worst offender: .ib-soon at 9.5px is the word "LAUNCHING" — the most
   material fact on the page rendered in the smallest type on it.
   Delete this block to revert. */
html body #ib26 .ib-soon,
html body #ib26 .ib-tier .chosen,
html body #ib26 .ib-est-top,
html body #ib26 .ib-eyebrow,
html body #ib26 .ib-step .n,
html body #ib26 .ib-tier .tn,
html body #ib26 .ib-tier .per,
html body .ib-ticker .lbl,
html body .ibls a,
html body .ibls .trp-ls-shortcode-current-language,
html body .ibfooter h4,
html body .ibfooter .fbot{font-size:12px}
/* ############ END-DEUCE-TYPE-FLOOR ############ */

/* ##################################################################
   DEUCE-CARD-REST — John's gavel 2026-08-10, his words:
   "they still look like they're sitting flat... I would put maybe half
   of what the hover does as static. They start at 50% of what the hover
   is going to do, and then the hover goes to 100."
   Rest = 50% of the hover treatment. Border is the true midpoint from
   --steel (#1C2942) to --rblue (#2F6BFF) = #264AA0. Glow is half the
   hover alpha (.16 -> .08). The LIFT stays hover-only — a permanently
   lifted card says nothing. Hover still completes to 100%.
   Delete to END-DEUCE-CARD-REST to revert.
   ################################################################## */
.ibblog .ibcard,
.ibrich ul.grid li.c{
  border-color:#264AA0;
  box-shadow:0 0 46px rgba(47,107,255,.08)}
@media (prefers-reduced-motion:reduce){
  .ibblog .ibcard,
  .ibrich ul.grid li.c{transition:none}}
/* ############ END-DEUCE-CARD-REST ############ */

/* ##################################################################
   DEUCE-FORM-BUTTONS — added 2026-08-10 with the lead-capture forms.
   Elementor's global kit styles EVERY <button> with its accent
   gradient (.elementor-kit-5 button), which out-specifies .ibbtn —
   so a real submit button came out orange. That's why this site
   used anchors everywhere; a <button> was never safe.
   `html body` prefix beats the kit on specificity, not !important.
   Delete to END-DEUCE-FORM-BUTTONS to revert.
   ################################################################## */
html body form#start button[type="submit"]{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  background:linear-gradient(120deg,var(--electric,#3e65ce),var(--blue,#4a7bff));
  background-image:linear-gradient(120deg,var(--electric,#3e65ce),var(--blue,#4a7bff));
  color:#fff;border:none;border-radius:13px;padding:13px 24px;
  font-weight:600;font-size:15px;font-family:inherit;cursor:pointer;
  box-shadow:0 0 26px rgba(74,123,255,.28);
  transition:transform .15s cubic-bezier(.16,1,.3,1),box-shadow .2s ease}
html body form#start button[type="submit"]:hover{
  box-shadow:0 0 38px rgba(74,123,255,.45)}
html body form#start button[type="submit"]:active{transform:scale(.98)}
/* phone-first: one column, thumb-width, never a cramped inline row */
html body form#start{max-width:440px}
html body form#start input[type="email"],
html body form#start input[type="tel"],
html body form#start input[type="text"],
html body form#start textarea{flex:1 1 100%;width:100%}
@media (prefers-reduced-motion:reduce){
  html body form#start button[type="submit"]{transition:none}
  html body form#start button[type="submit"]:active{transform:none}}
/* ############ END-DEUCE-FORM-BUTTONS ############ */

/* ##################################################################
   DEUCE-BTN-ANCHOR-COLOR — 2026-08-11. Sibling of the orange-button
   trap: Elementor's kit also styles EVERY anchor
   (.elementor-kit-5 a { color: accent }) and out-specifies .ibbtn,
   so a bare .ibbtn link inside Elementor content rendered ORANGE
   text on the blue gradient — 1.79:1, a hard AA fail.
   `html body a.ibbtn` (0,1,3) beats the kit (0,1,1) on specificity.
   Gold-background buttons set their dark text with !important, so
   they are untouched by this. Delete to END marker to revert.
   ################################################################## */
html body a.ibbtn{color:#fff}
/* ############ END-DEUCE-BTN-ANCHOR-COLOR ############ */

/* ##################################################################
   DEUCE-HEADER-HEIGHT — John 8/11: "make that header normal height or
   at least a little bit taller." Brief also says "normal height, thin
   when sticky." Both: 82px at rest, shrinks to 62px once you scroll.
   Delete to END-DEUCE-HEADER-HEIGHT to revert.
   ################################################################## */
html body .ibnav .in{height:82px;transition:height .22s cubic-bezier(.4,0,.2,1)}
html body .ibnav.ibstuck .in{height:62px}
@media (prefers-reduced-motion:reduce){
  html body .ibnav .in{transition:none}}
@media(max-width:820px){
  html body .ibnav .in{height:70px}
  html body .ibnav.ibstuck .in{height:58px}}
/* ############ END-DEUCE-HEADER-HEIGHT ############ */

/* ##################################################################
   DEUCE-ROI-BRAND — 2026-08-11, John: "get that ROI calculator branded
   and looking good — that's the one."
   The calculator was ported with its OWN design system. Its variables
   were already close (--bg #101119, --green remapped to brand blue),
   so this only fixes what actually broke brand:
     • fonts were 'DM Mono' + 'Barlow Condensed' -> Geist / Geist Mono
     • the CTA was a blue->MINT gradient with a CYAN glow. Cyan is
       explicitly killed in the design north star. It's now the gold
       CTA the rest of the site uses.
     • the page sat on the old navy #1a1e2e while everything else
       moved to the near-black ground.
   Scoped to #roicalc so nothing else can be touched.
   Delete to END-DEUCE-ROI-BRAND to revert.
   ################################################################## */
html body.page-roi-calculator{background:var(--ground,#101119)}
html body #roicalc,
html body #roicalc .calc-wrapper{font-family:'Geist',-apple-system,BlinkMacFontSmoothing,sans-serif}
html body #roicalc .calc-title{font-family:'Geist',sans-serif;font-weight:700;letter-spacing:-.03em}
html body #roicalc .calc-eyebrow,
html body #roicalc .panel-label,
html body #roicalc .cta-sub,
html body #roicalc .field label{font-family:'Geist Mono',ui-monospace,Menlo,monospace}

/* the primary action — same gold as every other CTA on the site */
html body #roicalc .cta-btn{
  background:var(--amber,#e3b53c);
  color:#181206;
  font-family:'Geist',sans-serif;
  font-weight:700;
  letter-spacing:-.01em;
  text-transform:none;
  font-size:16px;
  border-radius:10px;
  padding:15px 30px;
  box-shadow:0 0 0 rgba(var(--amber-rgb,227,181,60),0);
  transition:transform .15s cubic-bezier(.16,1,.3,1),box-shadow .2s ease,background .18s ease}
html body #roicalc .cta-btn:hover{
  opacity:1;
  transform:translateY(-2px);
  background:var(--amber-hot,#f5c94f);
  box-shadow:0 0 34px rgba(var(--amber-rgb,227,181,60),.30)}
html body #roicalc .cta-btn:active{transform:translateY(0) scale(.985)}
@media (prefers-reduced-motion:reduce){
  html body #roicalc .cta-btn{transition:none}
  html body #roicalc .cta-btn:hover{transform:none}}
/* ############ END-DEUCE-ROI-BRAND ############ */

/* ##################################################################
   DEUCE-TYPE-FLOOR-SHOTS — 2026-08-11. The $5-reading-glasses law,
   applied where it actually bites.
   Measured the homepage: 19 distinct sizes, 76 elements under 14px.
   But 76 collapses to FOUR once you separate real reading text from
   the rest — 51 are mono/uppercase labels (legible by design, wide
   tracking) and 21 sit inside the miniature estimate mock, where small
   type is correct because it's a picture of an app.
   The genuine offenders were the three screenshot captions at 13.5px:
   real sentences a contractor is meant to read. Colour was already
   fine (6.31:1), so this changes size only — no restyle by stealth.
   Delete to END-DEUCE-TYPE-FLOOR-SHOTS to revert.
   ################################################################## */
html body #ib26 .ib-shot figcaption span{font-size:15px;line-height:1.55}
/* ############ END-DEUCE-TYPE-FLOOR-SHOTS ############ */

/* ##################################################################
   DEUCE-CHAT-CHROME — 2026-08-11. Elementor's kit paints EVERY bare
   <button> with its orange accent gradient (drift #4 in the brand doc).
   The chat widget builds its controls as bare buttons, so the collapse
   arrow rendered as a full orange Elementor button — gradient, 12px
   radius, 16px/40px padding — inside Stella's header, on the widget
   John had just asked us to clean up.
   The widget is a third-party surface; our kit has no business
   styling it. Neutralised here rather than asking them to fight us.
   Delete to END-DEUCE-CHAT-CHROME to revert.
   ################################################################## */
html body #fa-panel button,
html body #fa-panel input,
html body #fa-bubble{
  background-image:none!important;
  box-shadow:none!important;
  text-shadow:none!important}
html body #fa-panel .fa-head button{
  background:transparent!important;
  border:0!important;
  border-radius:6px!important;
  padding:2px 6px!important;
  color:#fff!important;
  font-size:19px!important;
  line-height:1!important;
  width:auto!important;
  min-width:0!important}
html body #fa-panel #fa-send{color:#fff!important}
/* ############ END-DEUCE-CHAT-CHROME ############ */

/* ##################################################################
   DEUCE-BADGE-CONTRAST — 2026-08-12. The "Most crews" badge on the
   pricing tier rendered --rblue #2F6BFF on the ground: 4.18:1, just
   under the 4.5 AA bar for small text. Moved to the canonical brand
   blue --blue #4a7bff = 4.99:1. No new colour invented; it's the
   palette value already used for links and secondary buttons.
   Delete to END-DEUCE-BADGE-CONTRAST to revert.
   ################################################################## */
html body #ib26 .ib-tier .chosen{color:var(--blue,#4a7bff)}
/* ############ END-DEUCE-BADGE-CONTRAST ############ */

/* ##################################################################
   DEUCE-LANG-PILL — 2026-08-12. The ACTIVE language pill (EN/ES) in
   the nav rendered dim grey #8d95ad on the gold background: 1.56:1.
   Effectively unreadable, on every page. The design already intended
   dark-on-gold (.ibls a.on{color:#101119}) but a later/hetter-specificity
   rule was winning. Pinned with html-body specificity, not !important.
   Dark ink on gold = 9.7:1.
   Delete to END-DEUCE-LANG-PILL to revert.
   ################################################################## */
html body .ibls a.on{color:#181206;-webkit-text-fill-color:#181206}
/* -webkit-text-fill-color is REQUIRED here: TranslatePress/the host theme set it on the
   switcher, and it beats `color` outright — colour alone did nothing even with !important.
   Same trap as the ROI-calculator port on 8/03. If text looks wrong and colour won't move it,
   check text-fill-color before anything else. */
/* ############ END-DEUCE-LANG-PILL ############ */

/* ##################################################################
   DEUCE-NAV-SHRINK — 2026-08-13. The SPANISH homepage scrolled
   sideways by 119px: "Empieza gratis" is wider than "Start free", so
   the nav CTA and the EN/ES pills were shoved past the viewport edge.
   Cause: .iblinks inherits flexbox's default `min-width:auto`, which
   refuses to shrink below content width — the same trap as the
   job-card overflow (`1fr` is `minmax(AUTO,1fr)`).
   min-width:0 lets the link row give up space instead. Measured:
   ES 1399 -> 1280 (overflow 0), EN unchanged at 0, nav stays one line.
   Matters because every translated label is longer than its English
   original — this protects Spanish AND any future language.
   Delete to END-DEUCE-NAV-SHRINK to revert.
   ################################################################## */
html body .ibnav .iblinks{min-width:0}
/* ############ END-DEUCE-NAV-SHRINK ############ */

/* ##################################################################
   DEUCE-ES-MOBILE — 2026-08-13. The SPANISH homepage overflowed by
   191px at 390px wide; English overflowed by 2px. Spanish labels are
   simply longer and nothing below the nav could absorb it.
   Four causes, each measured:
     1. .ibbtn is inline-flex + nowrap -> the translated CTA rendered
        513px inside a 254px parent and refused to shrink.
     2. .ibnav .in / .ibright wouldn't shrink, so the nav bar itself
        sat at 425px inside a 390px container.
     3. .tick is a nowrap ticker by design — it needs its CONTAINER to
        clip, not the text to wrap.
     4. footer .fcols columns wouldn't wrap.
   Measured on /es/: 191px -> 0. English unchanged.
   Every translated label is longer than its English original, so this
   protects any future language too, not just Spanish.
   Delete to END-DEUCE-ES-MOBILE to revert.
   ################################################################## */
@media(max-width:820px){
  html body .ibbtn{white-space:normal;max-width:100%}
  html body .ibnav .in{min-width:0}
  html body .ibnav .ibright{flex-shrink:1;min-width:0;flex-wrap:wrap}
  html body .ib-ticker,html body .ib-ticker>*{overflow:hidden;max-width:100%}
  html body .tick{max-width:100%}
  html body .ibfooter .fcols{flex-wrap:wrap;min-width:0}
  html body .ibfooter .fcols>div{min-width:0}
}
/* ############ END-DEUCE-ES-MOBILE ############ */

/* ##################################################################
   DEUCE-PHONE-NAV — 2026-08-16 (impeccable polish pass)
   FIXES A REGRESSION I CAUSED. The DEUCE-ES-MOBILE block above added
   `flex-wrap:wrap` to .ibright to kill 191px of horizontal overflow on
   the Spanish homepage. It worked horizontally and broke vertically:
   at 390px the EN/ES pills + Start-free button wrapped to a second
   line, making .ibright 100px tall inside a 70px bar. Measured on the
   live page: .ibright y=-15, height=100, nav height=71 — the cluster
   spilled 15px ABOVE the header and orphaned the burger on its own row
   at x=126 while its own checkbox sat correctly at x=322.
   That is the "nav stacks untidily" John saw; it was never taste, it
   was overflow.

   THE FIX: one row, no wrap. The nav CTA is dropped below 560px —
   it duplicates the hero CTA that sits one scroll down, and a 100px
   button competing with two language pills and a burger inside a 70px
   bar is worse than not having it. Standard phone nav: brand left,
   language + menu right. The horizontal-overflow protection from
   DEUCE-ES-MOBILE is preserved because nothing needs to wrap anymore.
   Delete to END-DEUCE-PHONE-NAV to revert.
   ################################################################## */
@media(max-width:820px){
  html body .ibnav .ibright{flex-wrap:nowrap;align-items:center;gap:10px}
  html body .ibnav .ibburger{flex:none}
}
@media(max-width:560px){
  /* CTA STAYS ON PHONES (Deuce 2026-08-20). This was display:none to buy nav room,
     which removed the primary conversion on the device contractors actually hold.
     Measured at 390px: logo 74 + EN/ES 74 + burger 44 + padding 64 = 256, leaving
     ~110px of slack — enough for a compact button. Shrunk instead of hidden. */
  html body .ibnav .ibbtn{display:inline-flex;align-items:center;font-size:12px;
    padding:7px 11px;border-radius:7px;white-space:nowrap;flex:none}
  html body .ibnav .ibright{gap:8px}
  html body .ibnav .ibls{transform:scale(.9);transform-origin:right center}
}
@media(max-width:380px){
  /* below this the three controls genuinely cannot coexist — language picker goes,
     it is reachable from the footer; the CTA is what has to survive. */
  html body .ibnav .ibls{display:none}
}
/* ############ END-DEUCE-PHONE-NAV ############ */

/* ##################################################################
   DEUCE-AA-BLUE — 2026-08-16, REVISED after John's eye.
   v1 swapped by element and broke dark-text chips. v2 introduced
   --blue-lt #5a87ff for those; John saw it live and killed it:
   "that blue is like periwinkle... what happened to our blue,
   I want our old blue back."
   HE IS RIGHT AND THE LIGHTER DIRECTION WAS THE WRONG ONE.
   v3 goes DARKER instead — #3e65ce is already our button-gradient
   start, so it reads as our blue, not a new one, and it carries
   WHITE text at 5.31:1.
       white on --blue #4a7bff = 3.77 FAIL   (why we can't just use it)
       white on --electric #3e65ce = 5.31 PASS
   Any chip that had DARK text now gets white text on the darker blue
   rather than a lighter background.
   --blue #4a7bff stays exactly as it was for glows, borders, focus
   rings and blue TEXT on dark. Nothing about the brand blue changed.
   Delete to END-DEUCE-AA-BLUE to revert.
   ################################################################## */
html body #fa-send,
html body #fa-bubble,
html body #fa-panel .fa-m.user,
html body #fa-panel .fa-m[class*="user"]{
  background:var(--electric,#3e65ce)!important;color:#fff!important;
  -webkit-text-fill-color:#fff!important}
html body #fa-bubble{box-shadow:0 10px 30px -10px rgba(62,101,206,.55)!important}
html body #fa-in:focus{border-color:var(--electric,#3e65ce)!important}
html body .tab.on,html body #ib26 .tab.on,
html body .job.on,html body #ib26 .job.on,
html body .grade.on,html body .opt.on{
  background:var(--electric,#3e65ce)!important;color:#fff!important;
  -webkit-text-fill-color:#fff!important}
html body .job.on *,html body .tab.on *{color:#fff!important;-webkit-text-fill-color:#fff!important}
/* ############ END-DEUCE-AA-BLUE ############ */

/* ##################################################################
   DEUCE-KIT-ORANGE-PURGE — 2026-08-16 (John: "these orange gradients
   gone", "the InstaBid in the footer is orange")

   ONE SOURCE, MANY SYMPTOMS. Elementor's global kit (post-5.css)
   carries `.elementor-kit-5 button:hover/:focus` and applies its OWN
   accent gradient to every bare button on hover. That is why the
   orange->purple gradient appeared on the job cards AND "your pricing"
   AND "your brand" AND "your subs" on /see-it-work/ — not four bugs,
   one kit rule.
   This is the THIRD time kit inheritance has bitten this site:
     #1 bare <button> came out orange     (DEUCE-BTN-COLOR)
     #2 bare <a class=ibbtn> came out orange (DEUCE-BTN-ANCHOR-COLOR)
     #3 :hover gradient on everything     (here)
   The footer wordmark was the same disease: #e87722 on .iblogo inside
   the canvas-injected footer, where nothing had claimed the colour.

   Scoped to OUR components so Elementor's own styled buttons keep
   working. Delete to END-DEUCE-KIT-ORANGE-PURGE to revert.
   ################################################################## */
html body .job:hover,html body .tab:hover,html body .card:hover,
html body .ibcard:hover,html body .shot:hover,html body .panel:hover,
html body button:not(.elementor-button):hover,
html body button:not(.elementor-button):focus{
  background-image:none!important}
html body .ibfooter .iblogo,html body .ibfooter .iblogo *{
  color:#edeef4!important;-webkit-text-fill-color:#edeef4!important}
html body .ibfooter .iblogo i,html body .ibfooter .iblogo b{
  color:var(--amber,#e3b53c)!important;-webkit-text-fill-color:var(--amber,#e3b53c)!important}
/* ############ END-DEUCE-KIT-ORANGE-PURGE ############ */

/* ##################################################################
   DEUCE-HEADER-TALLER — 2026-08-16. John: "I'd still add another 20
   pixels to the header height, or maybe 10 on top and bottom."
   82 -> 102 rest, 62 -> 72 stuck. Mobile 70 -> 84 / 58 -> 64.
   Supersedes the heights in DEUCE-HEADER-HEIGHT above (that block's
   transition + stuck mechanics still apply).
   Delete to END-DEUCE-HEADER-TALLER to revert.
   ################################################################## */
html body .ibnav .in{height:102px}
html body .ibnav.ibstuck .in{height:72px}
@media(max-width:900px){
  html body .ibnav .in{height:84px}
  html body .ibnav.ibstuck .in{height:64px}}
/* ############ END-DEUCE-HEADER-TALLER ############ */


/* ##################################################################
   DEUCE-SIW-EQUAL — 2026-08-16. John: "the economy standard premium
   should be equal length — or equal width sorry — whatever."
   Same for the job cards above them.
   Job picker and the size/grade segment rows were flex with content-
   sized items, so each pill was as wide as its label and the row read
   ragged. Grid with equal tracks makes every option the same width,
   which is also the honest presentation: no option looks bigger than
   another before you've picked one.
   Delete to END-DEUCE-SIW-EQUAL to revert.
   ################################################################## */
html body ul.jobs{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));
  gap:12px;list-style:none;padding:0;margin:0}
html body ul.jobs>li{display:flex;min-width:0}
html body ul.jobs>li>.job{width:100%;height:100%;text-align:left}
html body .segs{
  display:grid;grid-auto-flow:column;grid-auto-columns:1fr;
  gap:8px;align-items:stretch}
html body .segs>*{width:100%;text-align:center;white-space:nowrap;min-width:0}
@media(max-width:560px){
  html body .segs{grid-auto-flow:row;grid-auto-columns:auto}}
/* ############ END-DEUCE-SIW-EQUAL ############ */

/* ##################################################################
   DEUCE-NAV-TENTH-ITEM — 2026-08-16.
   Adding "ROI Calculator" took the primary nav from 9 links to 10.
   Measured at 1280px: links end at x=963, the EN/ES switcher starts at
   x=995. Not technically overlapping, but 32px between a text link and
   a filled pill reads as a collision — "Articles" looked like it was
   running under the switcher.
   Tighten the gap and hold a real gutter before the switcher, and drop
   to the burger a little earlier so the row never gets to the ragged
   stage at all. Nothing here changes the nav above 1400px.
   Delete to END-DEUCE-NAV-TENTH-ITEM to revert.
   ################################################################## */
@media(max-width:1400px){
  html body .ibnav .iblinks{gap:20px;margin-right:26px}
}
@media(max-width:1180px){
  html body .ibnav .iblinks{gap:16px;font-size:14px}
}
/* ############ END-DEUCE-NAV-TENTH-ITEM ############ */

/* ##################################################################
   DEUCE-NO-UPSCALE — 2026-08-16. John: "that screenshot on Stella's
   page is absolutely huge and zoomed in and hideous."

   He was describing a MEASURABLE defect, not a taste call. Measured
   on the live pages:
     ib-mobile-form.jpg   384x702  shown 1016x1856  = 2.65x UPSCALED
     ib-pdf-view.jpg      574x360  shown 1016x638   = 1.77x UPSCALED
     ib-dashboard-v2.jpg 1400x942  shown 1016x684   = 0.73x  (fine)
   A raster shown above 1.0x its natural width is blurry by definition.
   The band CSS forced every .shot to full column width regardless of
   what the asset could carry.

   This caps every screenshot at its own natural size and centres it,
   so a small asset renders crisp and narrow instead of stretched.
   `image-rendering:auto` is explicit so nobody "fixes" it with
   pixelated/crisp-edges later.
   ib-mobile-form.jpg is REMOVED from /stella/ and /how-it-works/ per
   John's ruling: the form/calculator screenshot is not imagery.
   Delete to END-DEUCE-NO-UPSCALE to revert.
   ################################################################## */
/* SPECIFICITY NOTE (cost me a deploy): the rule being overridden is
   `.ibrich figure.shot img { width:100% }` = TWO classes. My first
   attempt was `html body figure.shot img` = ONE class + three elements,
   and class count is compared before element count, so it lost silently
   and the image stayed at 1.77x. `html body` is not a magic override --
   it adds ELEMENTS, not classes. Match the class count or lose. */
html body .ibrich figure.shot img,
html body .ibrich .shot img,
html body figure.shot img,
html body .shot img{
  display:block;margin:0 auto;
  width:auto;max-width:100%;height:auto;
  image-rendering:auto}
/* ############ END-DEUCE-NO-UPSCALE ############ */


/* ##################################################################
   DEUCE-BOLT-RICH — 2026-08-19. Makes the 10 Bolt-converted Elementor
   templates render. They were imported once on 8/16 and came out
   UNPAINTED — every heading invisible.

   MECHANISM (measured, not guessed): the live sheet styles rich pages
   by TAG (`.ibrich h2`, `.ibrich p`) because md2rich.py emits real
   headings. Elementor emits DIVS with classes instead, so not one
   live rule could match — `.ibrich .ib-h2` had 0 rules. These 77
   rules are the bridge from the div structure back to the same look.

   The companion file's own bare `.ibrich{}` block is DELIBERATELY
   NOT included: it adds background/color that the live one doesn't
   have, and would restyle the existing HTML rich pages that are
   already correct. Only the two vars its rules reference are carried.

   Every selector is scoped under .ibrich, and the Bolt templates now
   carry an .ibrich wrapper container (added same day). Nothing here
   can reach a page that lacks that wrapper.
   Delete to END-DEUCE-BOLT-RICH to revert.
   ################################################################## */
.ibrich{--amber:#e3b53c;--amber-rgb:227,181,60}
/* ##################################################################
   InstaBid — Elementor companion stylesheet
   Maps the original .ibrich tag-based selectors onto the div-based
   structure Elementor generates. The original .ibrich CSS in style.css
   targets semantic tags (h2, ul.grid li.c, figure.shot, blockquote.said,
   etc.); Elementor wraps everything in divs with class names, so those
   selectors don't fire. This file re-targets them onto the classes the
   converter assigns (ib-band, ib-card, ib-stat, ib-tier, ib-shot, etc.).

   Load this in the Elementor page's Custom CSS or in the child theme
   after style.css. The original :root variables and Geist font-face
   declarations are inherited from style.css.

   Delete this file and revert the JSON imports to remove.
   ################################################################## */

/* ===== Page wrapper ===== */
.ibrich{
  --w:1080px; --txt:748px;
  --ground:#101119; --alt:#0c0d14; --deep:#0B1120; --raise:#101A2E;
  --steel:#1C2942; --edge:#26364F; --line:#1e2230;
  --blue:#4a7bff; --rblue:#2F6BFF;
  --type:#edeef4; --body:#c9cede; --dim:#8d95ad; --dimmer:#7b849e;
  --sans:'Geist',-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  --mono:'Geist Mono',ui-monospace,"SF Mono",Menlo,monospace;
  --amber:#e3b53c; --amber-rgb:227,181,60;
  font-family:var(--sans);
  background:var(--ground);
  color:var(--body);
}

/* ===== Bands (top-level containers) ===== */
.ibrich .ib-band{
  padding:84px 0;position:relative;
}
.ibrich .ib-band:first-child{padding-top:30px}
.ibrich .ib-band.ib-band-alt{
  background:var(--alt);
  border-top:1px solid var(--line);border-bottom:1px solid var(--line);
}
.ibrich .ib-band.ib-band-deep{
  background:linear-gradient(180deg,var(--deep),var(--ground));
  border-top:1px solid var(--steel);border-bottom:1px solid var(--steel);
}

/* ===== Inner containers (.in / .in.wide) ===== */
.ibrich .ib-in,.ibrich .ib-in-wide{
  max-width:var(--w);margin:0 auto;padding:0 32px;
}
.ibrich .ib-in > .elementor-widget,
.ibrich .ib-in-wide > .elementor-widget{max-width:var(--txt)}
.ibrich .ib-in-wide > .elementor-widget{max-width:none}
.ibrich .ib-in > .elementor-widget.ib-h2,
.ibrich .ib-in-wide > .elementor-widget.ib-h2{max-width:20ch}
.ibrich .ib-in-wide > .elementor-widget.ib-h2{max-width:24ch}

/* ===== Headings ===== */
.ibrich .ib-h2 .elementor-heading-title{
  font-family:var(--sans);font-size:clamp(25px,3.1vw,33px);font-weight:700;
  line-height:1.16;letter-spacing:-.032em;color:var(--type);
  margin:0 0 26px;padding-top:16px;position:relative;text-wrap:balance;max-width:20ch;
}
.ibrich .ib-in-wide .ib-h2 .elementor-heading-title{max-width:24ch}
.ibrich .ib-h2 .elementor-heading-title:before{
  content:"";position:absolute;top:0;left:0;
  width:30px;height:2px;background:var(--amber);border-radius:2px;
}
.ibrich .ib-h3 .elementor-heading-title{
  font-size:20px;font-weight:600;color:var(--type);
  letter-spacing:-.02em;margin:34px 0 12px;
}
.ibrich .ib-h4 .elementor-heading-title,
.ibrich .ib-card-h4 .elementor-heading-title{
  font-size:16px;font-weight:600;letter-spacing:-.015em;
  color:var(--type);margin:0 0 9px;line-height:1.35;
}

/* ===== Paragraphs ===== */
.ibrich .ib-p .elementor-widget-container{
  font-size:17.5px;line-height:1.72;color:var(--body);margin:0 0 22px;max-width:66ch;
}
.ibrich .ib-p .elementor-widget-container p{font-size:inherit;line-height:inherit;color:inherit}
.ibrich .ib-p-lead .elementor-widget-container{
  font-size:20px;line-height:1.62;color:#dfe3ee;
}
.ibrich .ib-p strong{color:var(--type);font-weight:600}
.ibrich .ib-p em{color:var(--type)}
.ibrich .ib-p a,.ibrich .ib-p-lead a{
  color:var(--amber);text-decoration:none;
  border-bottom:1px solid rgba(var(--amber-rgb),.38);
}
.ibrich .ib-p a:hover{border-bottom-color:var(--amber)}

/* ===== Pull-quote paragraphs ===== */
.ibrich .ib-pull .elementor-widget-container{
  font-size:clamp(21px,2.5vw,27px);line-height:1.32;font-weight:600;
  letter-spacing:-.025em;color:var(--type);text-wrap:balance;
  max-width:22ch;margin:34px 0 30px;padding:4px 0 4px 24px;
  border-left:2px solid var(--amber);
}
.ibrich .ib-band-alt .ib-pull .elementor-widget-container,
.ibrich .ib-band-deep .ib-pull .elementor-widget-container{border-left-color:var(--blue)}

/* ===== Plain unordered lists ===== */
.ibrich .ib-ul .elementor-widget-container ul{
  margin:0 0 24px;padding-left:20px;
}
.ibrich .ib-ul .elementor-widget-container li{
  font-size:17.5px;line-height:1.7;color:var(--body);
  margin-bottom:11px;max-width:64ch;
}
.ibrich .ib-ul .elementor-widget-container li::marker{color:var(--dimmer)}

/* ===== CTA row (button) ===== */
.ibrich .ib-ctarow .elementor-widget-container{margin:32px 0 0}
.ibrich .ib-ctarow-btn .elementor-button{
  display:inline-flex;align-items:center;
  font-family:var(--sans);font-size:14.5px;font-weight:600;
  background:var(--amber);color:#181206;border:none;border-radius:6px;
  padding:13px 24px;text-decoration:none;
  transition:background 160ms ease,transform 160ms cubic-bezier(.23,1,.32,1);
}
.ibrich .ib-ctarow-btn .elementor-button:hover{background:#ffd75e;color:#181206}
.ibrich .ib-ctarow-btn .elementor-button:active{transform:scale(.97)}

/* ===== Card grid (ul.grid > li.c) ===== */
.ibrich .ib-grid{
  display:grid;margin:30px 0 6px;padding:0;
  gap:16px;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));
}
.ibrich .ib-grid > .elementor-element{margin:0}
.ibrich .ib-card{
  background:var(--deep);border:1px solid #264AA0;
  border-radius:10px;padding:24px 24px 22px;
  box-shadow:0 0 46px rgba(47,107,255,.08);
  transition:border-color .22s ease,box-shadow .28s ease,
             transform .22s cubic-bezier(.23,1,.32,1),background .22s ease;
}
@media (hover:hover) and (pointer:fine){
  .ibrich .ib-card:hover{
    border-color:var(--rblue);background:var(--raise);
    box-shadow:0 0 46px rgba(47,107,255,.16);transform:translateY(-4px);
  }
}
.ibrich .ib-card .elementor-widget-container{max-width:none}
.ibrich .ib-card .ib-card-p .elementor-widget-container{
  font-size:15px;line-height:1.62;color:var(--dim);
  margin:0;max-width:none;
}

/* ===== Stat strip (ul.stats > li) ===== */
.ibrich .ib-stats{
  display:grid;margin:34px 0 6px;padding:0;
  gap:14px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));
}
.ibrich .ib-stats > .elementor-element{margin:0}
.ibrich .ib-stat{
  background:var(--deep);border:1px solid var(--steel);
  border-radius:10px;padding:22px 20px;
  display:flex;flex-direction:column;gap:9px;
}
.ibrich .ib-stat .elementor-widget-container{max-width:none}
.ibrich .ib-stat-num .elementor-heading-title{
  font-family:var(--sans);font-size:clamp(26px,3.2vw,34px);
  font-weight:600;letter-spacing:-.035em;color:var(--amber);line-height:1;
  font-variant-numeric:tabular-nums;
}
.ibrich .ib-stat-label .elementor-widget-container{
  font-size:13.5px;line-height:1.45;color:var(--dim);max-width:24ch;
}

/* ===== Pricing tiers (ul.tiers > li.tier) ===== */
.ibrich .ib-tiers{
  display:grid;margin:34px 0 6px;padding:0;
  gap:16px;grid-template-columns:repeat(auto-fit,minmax(268px,1fr));
  align-items:start;
}
.ibrich .ib-tiers > .elementor-element{margin:0}
.ibrich .ib-tier{
  position:relative;padding:30px 26px 28px;
  background:var(--deep);border:1px solid var(--steel);border-radius:12px;
  display:flex;flex-direction:column;
}
.ibrich .ib-tier-pick{
  border-color:var(--rblue);
  background:linear-gradient(180deg,var(--raise),var(--deep));
  box-shadow:0 0 46px rgba(47,107,255,.16);
}
.ibrich .ib-tier .elementor-widget-container{max-width:none}
.ibrich .ib-tier-tag .elementor-widget-container{
  position:absolute;top:-10px;left:26px;
  font-family:var(--mono);font-size:12px;letter-spacing:.13em;
  text-transform:uppercase;color:#0b0f1a;background:var(--amber);
  padding:4px 10px;border-radius:100px;font-weight:600;
}
.ibrich .ib-tier-name .elementor-heading-title{
  font-size:14px;font-weight:600;letter-spacing:.01em;color:var(--dim);
}
.ibrich .ib-tier-amt .elementor-heading-title{
  font-size:clamp(38px,4.6vw,48px);font-weight:700;
  letter-spacing:-.045em;color:var(--type);line-height:1.05;margin:10px 0 2px;
  font-variant-numeric:tabular-nums;
}
.ibrich .ib-tier-per .elementor-widget-container{
  font-size:13.5px;color:var(--dimmer);
  padding-bottom:20px;border-bottom:1px solid var(--steel);margin-bottom:18px;
}
.ibrich .ib-tier-features .elementor-widget-container ul{
  list-style:none;margin:0;padding:0;display:flex;
  flex-direction:column;gap:11px;
}
.ibrich .ib-tier-features .elementor-widget-container li{
  font-size:14.5px;line-height:1.5;color:var(--body);
  margin:0;padding-left:20px;position:relative;max-width:none;
}
.ibrich .ib-tier-features .elementor-widget-container li:before{
  content:"+";position:absolute;left:0;top:-1px;
  color:var(--amber);font-weight:600;
}

/* ===== Screenshot figure (figure.shot) ===== */
.ibrich .ib-shot{margin:38px 0 0}
.ibrich .ib-shot .elementor-widget-container{max-width:none}
.ibrich .ib-shot-img .elementor-widget-container img{
  display:block;width:100%;height:auto;border-radius:12px;
  border:1px solid var(--steel);
  box-shadow:0 0 40px rgba(47,107,255,.10),0 30px 70px -40px rgba(0,0,0,.9);
}
.ibrich .ib-shot .elementor-widget-image .widget-image-caption,
.ibrich .ib-shot-img .elementor-widget-container .elementor-caption{
  font-family:var(--mono);font-size:12.5px;
  letter-spacing:.02em;color:var(--dimmer);margin-top:14px;text-align:center;
}

/* ===== Blockquote (blockquote.said) ===== */
.ibrich .ib-blockquote .elementor-widget-container blockquote.said{
  position:relative;margin:30px 0;padding:26px 30px 24px 58px;
  max-width:var(--txt);border:0;border-radius:14px;
  background:var(--raise);box-shadow:inset 0 0 0 1px rgba(255,255,255,.055);
  font-size:clamp(17px,1.6vw,19px);line-height:1.5;color:var(--type);
}
.ibrich .ib-blockquote .elementor-widget-container blockquote.said em{font-style:normal}
.ibrich .ib-blockquote .elementor-widget-container blockquote.said:before{
  content:"\201C";position:absolute;left:20px;top:14px;
  font-family:Georgia,"Times New Roman",serif;font-size:52px;line-height:1;
  color:var(--amber);opacity:.55;
}
.ibrich .ib-band-alt .ib-blockquote .elementor-widget-container blockquote.said:before{
  color:var(--blue);opacity:.7;
}
@media(max-width:600px){
  .ibrich .ib-blockquote .elementor-widget-container blockquote.said{
    padding:22px 20px 20px 46px}
  .ibrich .ib-blockquote .elementor-widget-container blockquote.said:before{
    left:14px;font-size:44px}
}

/* ===== Card sub-elements ===== */
.ibrich .ib-card-link .elementor-button{
  display:inline-flex;align-items:center;
  font-family:var(--sans);font-size:14.5px;font-weight:600;
  color:var(--amber);text-decoration:none;
  border-bottom:1px solid rgba(var(--amber-rgb),.38);
}
.ibrich .ib-card-em .elementor-widget-container{
  font-style:italic;color:var(--type);
}

/* ===== Responsive ===== */
@media (max-width:780px){
  .ibrich .ib-band{padding:58px 0}
  .ibrich .ib-in,.ibrich .ib-in-wide{padding:0 22px}
  .ibrich .ib-pull .elementor-widget-container{max-width:none;font-size:20px}
  .ibrich .ib-h2 .elementor-heading-title{max-width:none}
}

@media (prefers-reduced-motion:reduce){
  .ibrich .ib-card,
  .ibrich .ib-ctarow-btn .elementor-button{transition:none}
  .ibrich .ib-card:hover{transform:none}
}

/* ############ END-DEUCE-BOLT-RICH ############ */

/* NAV OVERLAP GUARD (Deuce 2026-08-20). Measured: logo 74 + links 824 + right
   cluster 193 + padding 64 = 1187px needed, container capped at 1160 — the menu ran
   under the EN/ES toggle at EVERY width above 1160, including 1920. Widened to 1280
   and moved the burger to 1220 so it collapses BEFORE it can collide. */
.ibnav .in{flex-wrap:nowrap}
.ibnav .ibright{flex:none;z-index:2}

/* TICKER LIVE-STATE (Deuce 2026-08-20). ticker.js ADDS .live but leaves .static in
   place, so the wrapper carries both. The static rules above were killing the live
   marquee via animation:none!important and wrapping the cells so the track could
   never exceed its container. Scoped them to :not(.live) — the static strip still
   behaves when the feed is down (silent-exit path), and yields the moment real
   prices land. Duration is set from measured track width in functions.php. */
.ib-ticker.live .track{flex-wrap:nowrap!important;width:max-content!important;display:inline-flex!important}
.ib-ticker.live .lbl .dot{display:inline-block}

/* SPANISH NAV BREAKPOINT (Deuce 2026-08-20). Measured at 1440: EN clears the right
   cluster by 158px, ES by only 28px — Spanish labels are materially longer, so ES
   would collide in the ~1221-1290 band where English is still fine. Give ES its own
   collapse point instead of making English collapse early for a problem it doesn't
   have. Checked live on /es/: no overlap at any width. */
@media(max-width:1330px){
  html[lang^="es"] .ibnav .ibburger{display:flex}
  html[lang^="es"] .ibnav .ibmenu-cb{display:block}
  html[lang^="es"] .ibnav .iblinks{display:flex;position:absolute;left:0;right:0;top:100%;
    flex-direction:column;gap:0;margin:0;padding:6px 0 12px;
    background:#0f1019;border-bottom:1px solid rgba(255,255,255,.09);
    box-shadow:0 18px 40px rgba(0,0,0,.5);
    max-height:0;overflow:hidden;opacity:0;visibility:hidden;
    transition:max-height .26s cubic-bezier(.23,1,.32,1),opacity .18s ease-out,visibility .26s}
  html[lang^="es"] .ibnav .ibmenu-cb:checked ~ .iblinks{max-height:78vh;overflow-y:auto;opacity:1;visibility:visible}
  html[lang^="es"] .ibnav .iblinks a{padding:14px 32px;font-size:16px!important;color:#cfd5e6!important;
    border-bottom:1px solid rgba(255,255,255,.05)}
  html[lang^="es"] .ibnav .iblinks a:last-child{border-bottom:0}
  html[lang^="es"] .ibnav .in{position:relative}
}


/* ##################################################################
   DEUCE-BALANCE-GLOW — 2026-08-20, John's punch list.
   "the way those cards stack ... three across and then one below,
    justified left ... I hate that off balance shit"
   "it's very dark, it's very flat ... get some more of that glowiness going"
   ################################################################## */

/* ---- 1. NO ORPHAN CARDS -------------------------------------------------
   auto-fit grid left a short last row jammed to the left (features = 3+3+2,
   stella = 3+2). Flex with a fixed basis keeps the card WIDTH identical to a
   full row but centres whatever is left over, so a short row reads as
   deliberate instead of broken. */
.ibrich ul.grid{display:flex;flex-wrap:wrap;justify-content:center;
  grid-template-columns:none}
.ibrich ul.grid > li{flex:0 1 calc(33.333% - 11px);min-width:280px}

/* John's preference, stated: four items are 2-and-2, never 3-and-1. */
.ibrich ul.grid:has(> li:nth-child(4):last-child) > li{flex-basis:calc(50% - 8px)}
/* eight go four-across so it's 4+4 rather than 3+3+2 */
.ibrich ul.grid:has(> li:nth-child(8):last-child) > li{flex-basis:calc(25% - 12px);min-width:240px}
/* two sit side by side, not stretched full-bleed */
.ibrich ul.grid:has(> li:nth-child(2):last-child) > li{flex-basis:calc(50% - 8px)}

/* ---- 2. DEPTH: ambient light in the bands ------------------------------
   Flat navy with no light source reads as unfinished. One soft blue bloom per
   band, alternating side, plus a warm amber whisper — brand colours only
   (#4a7bff blue, #e3b53c amber). Never cyan. Pointer-events none so nothing
   below it becomes unclickable. */
.ibrich .band{position:relative;isolation:isolate}
.ibrich .band::before{content:"";position:absolute;inset:0;z-index:-1;
  pointer-events:none;opacity:.85;
  background:
    radial-gradient(760px 420px at 12% -10%, rgba(74,123,255,.13), transparent 62%),
    radial-gradient(520px 300px at 92% 108%, rgba(74,123,255,.09), transparent 60%);}
.ibrich .band:nth-of-type(even)::before{
  background:
    radial-gradient(720px 400px at 88% -12%, rgba(74,123,255,.11), transparent 62%),
    radial-gradient(460px 280px at 8% 106%, rgba(227,181,60,.05), transparent 58%);}

/* ---- 3. CARDS GET A RIM, NOT JUST A HOVER ------------------------------
   They were inert until you touched them. A permanent rim-light plus a lifted
   shadow gives them a physical edge; hover then goes further instead of being
   the only state that exists. */
.ibrich ul.grid li.c{
  background:linear-gradient(168deg, rgba(38,74,160,.10) 0%, rgba(11,17,32,0) 46%), var(--deep);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.045),
    0 0 0 1px rgba(74,123,255,.05),
    0 18px 40px -28px rgba(0,0,0,.85);}
@media (hover:hover) and (pointer:fine){
  .ibrich ul.grid li.c:hover{
    box-shadow:
      inset 0 1px 0 rgba(255,255,255,.07),
      0 0 0 1px rgba(74,123,255,.30),
      0 0 54px rgba(74,123,255,.20),
      0 26px 54px -30px rgba(0,0,0,.9);}
}

/* ---- 4. THE ACCENTS ACTUALLY GLOW -------------------------------------- */
.ibrich .band h2{text-shadow:0 0 38px rgba(74,123,255,.16)}
.eb{text-shadow:0 0 20px rgba(227,181,60,.42)}
.ibrich .band > .in > h2::before,
.ibrich .kicker{box-shadow:0 0 16px rgba(227,181,60,.5)}
.ibnav .ibbtn{box-shadow:0 0 26px rgba(227,181,60,.30),0 6px 18px -8px rgba(0,0,0,.7)}
.ibnav .ibbtn:hover{box-shadow:0 0 40px rgba(227,181,60,.48),0 8px 22px -8px rgba(0,0,0,.75)}

/* ---- 5. DROPDOWN NAV (John nested items 8/20 and they vanished) -------- */
.ibnav .ibhas{position:relative;display:inline-flex;align-items:center}
.ibnav .ibhas > a{display:inline-flex;align-items:center;gap:5px}
.ibnav .ibcaret{width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;
  border-top:4.5px solid currentColor;opacity:.65;transition:transform .18s ease,opacity .18s ease}
.ibnav .ibhas:hover .ibcaret,.ibnav .ibhas:focus-within .ibcaret{transform:rotate(180deg);opacity:1}
.ibnav .ibsub{position:absolute;top:100%;left:-14px;min-width:210px;
  display:flex;flex-direction:column;padding:8px;margin-top:10px;
  background:rgba(18,21,32,.97);backdrop-filter:saturate(140%) blur(14px);
  border:1px solid rgba(74,123,255,.20);border-radius:12px;
  box-shadow:0 0 40px rgba(74,123,255,.13),0 26px 50px -22px rgba(0,0,0,.85);
  opacity:0;visibility:hidden;transform:translateY(-6px);
  transition:opacity .16s ease,transform .18s cubic-bezier(.23,1,.32,1),visibility .18s;z-index:60}
.ibnav .ibhas:hover .ibsub,.ibnav .ibhas:focus-within .ibsub{opacity:1;visibility:visible;transform:translateY(0)}
.ibnav .ibsub a{padding:9px 12px;border-radius:8px;font-size:13.5px;white-space:nowrap;
  color:#c3cadd!important;transition:background .15s ease,color .15s ease}
.ibnav .ibsub a:hover{background:rgba(74,123,255,.13);color:#fff!important}
/* the gap between trigger and panel would drop the hover — bridge it */
.ibnav .ibhas::after{content:"";position:absolute;top:100%;left:0;right:0;height:12px}

/* burger view: children indent under their parent, no hover involved */
@media(max-width:1220px){
  .ibnav .ibhas{display:block;width:100%}
  .ibnav .ibsub{position:static;opacity:1;visibility:visible;transform:none;
    margin:0;padding:0 0 4px 0;border:0;box-shadow:none;background:transparent;
    backdrop-filter:none;min-width:0}
  .ibnav .ibsub a{padding:11px 32px 11px 48px;font-size:14.5px!important;opacity:.86}
  .ibnav .ibhas > a{padding:14px 32px}
  .ibnav .ibcaret{display:none}
}
@media(prefers-reduced-motion:reduce){
  .ibnav .ibsub,.ibnav .ibcaret,.ibrich ul.grid li.c{transition:none}
}
/* ############ END DEUCE-BALANCE-GLOW ############ */


/* ##################################################################
   DEUCE-DEVICES — 2026-08-20. John: "we need some imagery ... a phone on
   one, a laptop video call screen on another ... let's not be lazy just
   because it looks good, let's make it fucking cool."
   Built in CSS rather than as flat screenshots: stays razor sharp on any
   retina display (the existing ib-pdf-view.jpg is 574x360 shown at 576px,
   which is why it reads soft), weighs nothing, and the content inside can
   be corrected as copy instead of re-exported as an asset.
   ################################################################## */
.ibdev{margin:38px 0 4px;display:flex;flex-direction:column;align-items:center;gap:14px}
.ibdev figcaption{font-family:'Geist Mono',ui-monospace,monospace;font-size:12.5px;
  letter-spacing:.02em;color:#7b849e;text-align:center}

/* ---------- the phone: 411 mid-call ---------- */
.ibphone{position:relative;width:298px;padding:11px;border-radius:38px;
  background:linear-gradient(168deg,#252b3d,#12151f 60%);
  box-shadow:0 0 0 1px rgba(255,255,255,.06),0 0 60px rgba(74,123,255,.20),
             0 40px 70px -32px rgba(0,0,0,.9)}
.ibphone-notch{position:absolute;top:11px;left:50%;transform:translateX(-50%);
  width:104px;height:20px;background:#12151f;border-radius:0 0 13px 13px;z-index:3}
.ibphone-screen{position:relative;border-radius:28px;padding:30px 17px 17px;
  background:radial-gradient(120% 80% at 50% 0%,rgba(74,123,255,.16),transparent 58%),#0b0e17;
  overflow:hidden;min-height:432px}
.ibcall-top{display:flex;align-items:center;gap:7px;font-family:'Geist Mono',monospace;
  font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:#8d95ad;margin-bottom:14px}
.ibcall-dot{width:7px;height:7px;border-radius:50%;background:#37d39b;
  box-shadow:0 0 10px rgba(55,211,155,.9);animation:ibPulseDot 2s ease-in-out infinite}
@keyframes ibPulseDot{0%,100%{opacity:1}50%{opacity:.35}}
.ibcall-num{font-size:20px;font-weight:600;color:#edeef4;letter-spacing:-.02em}
.ibcall-timer{font-family:'Geist Mono',monospace;font-size:12.5px;color:#e3b53c;margin-top:3px}
.ibwave{display:flex;align-items:flex-end;gap:3px;height:34px;margin:16px 0 14px}
.ibwave i{flex:1;background:linear-gradient(180deg,#4a7bff,#2f4fa8);border-radius:2px;
  animation:ibWave 1.1s ease-in-out infinite;box-shadow:0 0 8px rgba(74,123,255,.5)}
.ibwave i:nth-child(2n){animation-delay:.13s}.ibwave i:nth-child(3n){animation-delay:.28s}
.ibwave i:nth-child(4n){animation-delay:.41s}.ibwave i:nth-child(5n){animation-delay:.07s}
@keyframes ibWave{0%,100%{height:22%}50%{height:100%}}
.ibcall-said{font-size:13px;line-height:1.5;color:#c9cede;font-style:italic;
  padding:11px 12px;border-left:2px solid #e3b53c;background:rgba(227,181,60,.05);
  border-radius:0 8px 8px 0;margin-bottom:15px}
.ibcall-lines{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px}
.ibcall-lines li{display:flex;justify-content:space-between;align-items:center;gap:10px;
  font-size:12px;color:#c9cede;padding:9px 11px;border-radius:8px;
  background:rgba(74,123,255,.07);border:1px solid rgba(74,123,255,.16);
  animation:ibLineIn .5s ease-out backwards}
.ibcall-lines li:nth-child(1){animation-delay:.2s}
.ibcall-lines li:nth-child(2){animation-delay:.75s}
.ibcall-lines li:nth-child(3){animation-delay:1.3s}
@keyframes ibLineIn{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}
.ibcall-lines b{font-family:'Geist Mono',monospace;font-size:11px;color:#edeef4;font-weight:600;white-space:nowrap}
.ibcall-foot{margin-top:14px;font-family:'Geist Mono',monospace;font-size:10.5px;
  letter-spacing:.06em;color:#7b849e;text-align:center}

/* ---------- the laptop: LIVE video walk ---------- */
.iblap{width:100%;max-width:660px}
.iblap-screen{border-radius:14px 14px 4px 4px;padding:12px;
  background:linear-gradient(168deg,#252b3d,#12151f 62%);
  box-shadow:0 0 0 1px rgba(255,255,255,.06),0 0 66px rgba(74,123,255,.18),
             0 40px 70px -34px rgba(0,0,0,.9)}
.iblap-grid{display:grid;grid-template-columns:1.45fr 1fr;gap:10px;
  background:#0b0e17;border-radius:8px;padding:10px;min-height:288px}
.ibvid{position:relative;border-radius:7px;overflow:hidden;
  background:
    radial-gradient(90% 70% at 30% 20%, rgba(74,123,255,.20), transparent 62%),
    linear-gradient(155deg,#1b2233,#0d1017);
  border:1px solid rgba(255,255,255,.07)}
.ibvid-room{position:absolute;inset:14% 12% 16% 12%;border-radius:4px;
  border:1px dashed rgba(74,123,255,.42);
  box-shadow:inset 0 0 44px rgba(74,123,255,.14)}
.ibvid-room::after{content:"counting fixtures";position:absolute;left:50%;top:50%;
  transform:translate(-50%,-50%);font-family:'Geist Mono',monospace;font-size:10px;
  letter-spacing:.07em;color:rgba(201,206,222,.75);white-space:nowrap}
.ibvid-self{position:absolute;right:9px;bottom:9px;width:62px;height:44px;border-radius:5px;
  background:linear-gradient(150deg,#2a3247,#161b28);border:1px solid rgba(255,255,255,.11)}
.ibvid-tag{position:absolute;left:9px;top:9px;z-index:2;display:flex;align-items:center;gap:6px;
  font-family:'Geist Mono',monospace;font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;
  color:#edeef4;background:rgba(11,14,23,.72);padding:4px 8px;border-radius:20px;
  border:1px solid rgba(255,255,255,.1)}
.ibrec{width:6px;height:6px;border-radius:50%;background:#e05c4b;
  box-shadow:0 0 9px rgba(224,92,75,.95);animation:ibPulseDot 1.6s ease-in-out infinite}
.ibscope{display:flex;flex-direction:column;border-radius:7px;padding:12px;
  background:rgba(74,123,255,.05);border:1px solid rgba(74,123,255,.15)}
.ibscope-h{font-family:'Geist Mono',monospace;font-size:9.5px;letter-spacing:.09em;
  text-transform:uppercase;color:#8d95ad;margin-bottom:10px}
.ibscope ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;flex:1}
.ibscope li{display:flex;align-items:baseline;gap:8px;font-size:11.5px;color:#c9cede;
  animation:ibLineIn .5s ease-out backwards}
.ibscope li:nth-child(1){animation-delay:.3s}.ibscope li:nth-child(2){animation-delay:.85s}
.ibscope li:nth-child(3){animation-delay:1.4s}.ibscope li:nth-child(4){animation-delay:1.95s}
.ibscope b{font-family:'Geist Mono',monospace;font-size:13px;color:#e3b53c;font-weight:600;
  text-shadow:0 0 14px rgba(227,181,60,.4);min-width:38px}
.ibscope-f{margin-top:10px;padding-top:9px;border-top:1px solid rgba(255,255,255,.07);
  font-family:'Geist Mono',monospace;font-size:9.5px;letter-spacing:.06em;color:#7b849e}
.iblap-base{height:13px;border-radius:0 0 12px 12px;
  background:linear-gradient(180deg,#2a3247,#151926);
  box-shadow:0 16px 30px -18px rgba(0,0,0,.9)}
.iblap-base::after{content:"";display:block;width:74px;height:3px;margin:0 auto;
  border-radius:0 0 4px 4px;background:rgba(255,255,255,.09)}

@media(max-width:760px){
  .iblap-grid{grid-template-columns:1fr;min-height:0}
  .ibvid{min-height:170px}
  .ibphone{width:262px}
}
@media(prefers-reduced-motion:reduce){
  .ibwave i,.ibcall-dot,.ibrec{animation:none}
  .ibcall-lines li,.ibscope li{animation:none}
  .ibwave i{height:56%}
}
/* ############ END DEUCE-DEVICES ############ */

/* DEVICE TEXT SPECIFICITY (Deuce 2026-08-20): .ibrich li sets 17.5px body copy and
   outranked the device rules, so the phone's line items rendered at 17.5px and
   wrapped. Scope to .ibrich so the mock UI keeps UI-sized type. */
.ibrich .ibdev li,.ibrich .ibdev p,.ibrich .ibdev span,.ibrich .ibdev b{max-width:none}
.ibrich .ibcall-lines li{font-size:11.5px;line-height:1.35;padding:8px 10px}
.ibrich .ibcall-lines li span{font-size:11.5px;line-height:1.35;color:#c9cede}
.ibrich .ibcall-lines b{font-size:10.5px}
.ibrich .ibcall-said{font-size:12.5px;line-height:1.48}
.ibrich .ibcall-num{font-size:19px;line-height:1.2}
.ibrich .ibscope li{font-size:11px;line-height:1.35}
.ibrich .ibscope li span{font-size:11px;color:#c9cede}
.ibrich .ibscope b{font-size:12.5px}
.ibrich .ibdev figcaption{font-size:12.5px}

/* DEVICE TEXT, ROUND 2 (Deuce 2026-08-20). `.ibrich ul:not(.grid):not(.stats) li`
   computes to (0,3,2) because each :not() carries its argument's weight, so my
   (0,2,2) rules lost. Matching class count and landing later in the file. */
.ibrich .ibdev ul.ibcall-lines li{font-size:11.5px;line-height:1.35;padding:8px 10px;color:#c9cede}
.ibrich .ibdev ul.ibcall-lines li span{font-size:11.5px;line-height:1.35}
.ibrich .ibdev ul.ibcall-lines li b{font-size:10.5px}
.ibrich .ibdev div.ibcall-said{font-size:12.5px;line-height:1.48}
.ibrich .ibdev div.ibcall-num{font-size:19px}
.ibrich .ibdev .ibscope ul li{font-size:11px;line-height:1.35;color:#c9cede;margin:0}
.ibrich .ibdev .ibscope ul li span{font-size:11px}
.ibrich .ibdev .ibscope ul li b{font-size:12.5px}


/* ---------- the estimate PDF, rebuilt in CSS (Deuce 2026-08-20) ----------
   Replaces ib-pdf-view.jpg (574x360 shown at 576px = 1:1, soft on every retina
   screen). A PDF is a LIGHT document sitting in a dark page, so it carries its
   own paper surface and a lift shadow — that contrast is the point, it should
   read as a real document you could hand someone. */
.ibpdf{width:100%;max-width:620px;perspective:1400px}
.ibpdf-page{background:linear-gradient(178deg,#fff,#f4f6fa);border-radius:9px;
  padding:26px 26px 20px;color:#1b2233;
  box-shadow:0 0 0 1px rgba(255,255,255,.10),0 0 70px rgba(74,123,255,.16),
             0 46px 70px -34px rgba(0,0,0,.92);
  transform:rotateX(1.4deg);transform-origin:top center}
.ibpdf-head{display:flex;justify-content:space-between;align-items:flex-start;
  padding-bottom:14px;border-bottom:2px solid #1b2233}
.ibpdf-brand{display:flex;align-items:center;gap:11px}
.ibpdf-mark{width:36px;height:36px;border-radius:8px;flex:none;
  background:linear-gradient(150deg,#1b2233,#39456a);color:#e3b53c;
  display:flex;align-items:center;justify-content:center;
  font-family:'Geist Mono',monospace;font-size:13px;font-weight:700;letter-spacing:.02em}
.ibrich .ibdev .ibpdf-brand b{display:block;font-size:14.5px;color:#1b2233;letter-spacing:-.01em}
.ibrich .ibdev .ibpdf-brand i{display:block;font-style:normal;font-size:10.5px;color:#69738c;margin-top:2px}
.ibpdf-doc{text-align:right}
.ibrich .ibdev .ibpdf-doc b{display:block;font-family:'Geist Mono',monospace;font-size:12.5px;
  letter-spacing:.14em;color:#1b2233}
.ibrich .ibdev .ibpdf-doc i{display:block;font-style:normal;font-size:10.5px;color:#69738c;margin-top:3px}
.ibpdf-meta{display:flex;gap:26px;padding:13px 0 4px}
.ibrich .ibdev .ibpdf-meta span{display:block;font-size:9.5px;letter-spacing:.09em;
  text-transform:uppercase;color:#8b93a8}
.ibrich .ibdev .ibpdf-meta b{display:block;font-size:12.5px;color:#1b2233;margin-top:2px}
.ibpdf-table{width:100%;border-collapse:collapse;margin-top:10px}
.ibrich .ibdev .ibpdf-table th{text-align:left;font-size:9.5px;letter-spacing:.08em;
  text-transform:uppercase;color:#8b93a8;font-weight:600;padding:8px 0;
  border-bottom:1px solid #dfe3ec}
.ibrich .ibdev .ibpdf-table th:nth-child(n+2),
.ibrich .ibdev .ibpdf-table td:nth-child(n+2){text-align:right}
.ibrich .ibdev .ibpdf-table td{font-size:11.5px;padding:7px 0;
  border-bottom:1px solid #eef1f6;color:#39415a}
.ibrich .ibdev .ibpdf-grp td{font-family:'Geist Mono',monospace;font-size:9.5px;
  letter-spacing:.09em;text-transform:uppercase;color:#4a7bff;
  padding:11px 0 5px;border-bottom:0}
.ibpdf-tot{margin-top:12px;padding-top:11px;border-top:2px solid #1b2233;
  display:flex;justify-content:space-between;align-items:flex-end;gap:16px}
.ibrich .ibdev .ibpdf-split{display:flex;flex-direction:column;gap:3px}
.ibrich .ibdev .ibpdf-split span{font-size:11px;color:#69738c}
.ibrich .ibdev .ibpdf-grand{text-align:right}
.ibrich .ibdev .ibpdf-grand span{display:block;font-size:9.5px;letter-spacing:.09em;
  text-transform:uppercase;color:#8b93a8}
.ibrich .ibdev .ibpdf-grand b{display:block;font-size:26px;font-weight:700;
  letter-spacing:-.028em;color:#1b2233;line-height:1.1}
.ibpdf-foot{margin-top:14px;display:flex;justify-content:space-between;align-items:center;gap:14px}
.ibpdf-sig{font-size:11px;font-weight:600;color:#181206;background:#e3b53c;
  padding:7px 13px;border-radius:6px;white-space:nowrap;
  box-shadow:0 0 20px rgba(227,181,60,.45)}
.ibrich .ibdev .ibpdf-foot i{font-style:italic;font-size:10.5px;color:#8b93a8;text-align:right}
@media(max-width:620px){
  .ibpdf-page{padding:18px 16px 14px;transform:none}
  .ibpdf-meta{gap:14px;flex-wrap:wrap}
  .ibrich .ibdev .ibpdf-grand b{font-size:21px}
}


/* ---------- HEADER MARK (Deuce 2026-08-22) ----------
   John: "just add the fucking logo next to the name" — keep BID amber, keep the
   font. Mark cropped out of instabid_final_exact_white.png (his preferred file,
   the one with the name attached) at 340x358 native, exported 103x108 and shown
   at 26px so it stays sharp on 3x screens. The wordmark is untouched. */
.ibnav .iblogo{display:inline-flex;align-items:center;gap:9px}
.ibnav .iblogo-mark{width:26px;height:27px;display:block;flex:none;
  filter:drop-shadow(0 0 12px rgba(74,123,255,.45))}
.ibnav .iblogo-word{display:inline-block;line-height:1}
@media(max-width:560px){
  .ibnav .iblogo{gap:7px}
  .ibnav .iblogo-mark{width:22px;height:23px}
}

/* STAT BOXES GET THE SAME TREATMENT (Deuce 2026-08-22). John: "the glow on the
   boxes on that how it works page — you put them on all the boxes, but there's
   like three boxes at the bottom that don't have it, which makes it
   inconsistent." Those are ul.stats, not ul.grid, so the 8/20 card rules never
   reached them. Same rim-light, same hover, so a box is a box everywhere. */
.ibrich ul.stats li{
  background:linear-gradient(168deg, rgba(38,74,160,.10) 0%, rgba(11,17,32,0) 46%), var(--deep);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.045),
    0 0 0 1px rgba(74,123,255,.05),
    0 18px 40px -28px rgba(0,0,0,.85);
  transition:border-color .22s ease,box-shadow .28s ease,
             transform .22s cubic-bezier(.23,1,.32,1),background .22s ease}
@media (hover:hover) and (pointer:fine){
  .ibrich ul.stats li:hover{border-color:var(--rblue);
    box-shadow:
      inset 0 1px 0 rgba(255,255,255,.07),
      0 0 0 1px rgba(74,123,255,.30),
      0 0 54px rgba(74,123,255,.20),
      0 26px 54px -30px rgba(0,0,0,.9);
    transform:translateY(-4px)}
}
/* the amber stat number should carry the same glow as other amber accents */
.ibrich ul.stats b{text-shadow:0 0 26px rgba(227,181,60,.34)}
@media(prefers-reduced-motion:reduce){.ibrich ul.stats li{transition:none}}
