PageSourceSearch

https://bwise.ai/assets/LandingPage-u59VTHfu.js

js bwise.ai collected 2026-10-05 11:53:04 UTC 50,754 bytes, 1 lines download raw bytes

1import{r as e,j as n}from"./react-B-vVwQ3b.js";import{f as t,c as a}from"./app-core-CaVHifoP.js";import{f as i}from"./forceLight-CqzepPCS.js";import{u as r}from"./useSpaLinks-64NSW4up.js";import"./router-W5KEZhfK.js";const o=a("LandingPage");function s(e){var n;const a=[],i=[],r=[],s=window.matchMedia("(prefers-reduced-motion: reduce)").matches,l=(e,n)=>e.toLocaleString("en-AU",{minimumFractionDigits:n,maximumFractionDigits:n}),d=(e,n)=>{e.setAttribute("aria-label",n);const t=(e=>{const n=String(e).match(/^([^\d-]*)(-?[\d,]+(?:\.\d+)?)(.*)$/);return n?{p:n[1],t:parseFloat(n[2].replace(/,/g,"")),d:(n[2].split(".")[1]||"").length,s:n[3]}:null})(n);t?s?e.textContent=t.p+l(t.t,t.d)+t.s:(e.textContent=t.p+l(0,t.d)+t.s,requestAnimationFrame(()=>{const n=performance.now(),a=i=>{const r=Math.min(1,(i-n)/1100),o=1-Math.pow(1-r,3);e.textContent=t.p+l(t.t*o,t.d)+t.s,r<1?requestAnimationFrame(a):e.textContent=t.p+l(t.t,t.d)+t.s};requestAnimationFrame(a)})):e.textContent=n},c=Array.from(e.querySelectorAll("h2,.lede,.kicker,.figure,.breakdown,.media,.cell,.strip .wrap,.close h2,.delta")).filter(e=>!e.closest(".hero")&&!e.closest("#showcase"));if(!s){const n=new Map;c.forEach(t=>{const a=t.closest("section,.strip,.close,.band")||e,i=n.get(a)||[];i.push(t),n.set(a,i)}),n.forEach(e=>{e.sort((e,n)=>2&e.compareDocumentPosition(n)?1:-1),e.forEach((e,n)=>e.style.setProperty("--d",.09*Math.min(n,6)+"s"))})}c.forEach(e=>e.classList.add("reveal"));const p=e=>{e.classList.add("in"),e.querySelectorAll(".count").forEach(e=>{e.dataset.done||(e.dataset.done="1",d(e,e.textContent||""))})},h=new IntersectionObserver(e=>e.forEach(e=>{e.isIntersecting&&(p(e.target),h.unobserve(e.target))}),{threshold:.12,rootMargin:"0px 0px -12% 0px"});r.push(h),c.forEach(e=>h.observe(e));const u=setTimeout(()=>{e.querySelectorAll(".reveal:not(.in)").forEach(p)},2600);a.push(()=>clearTimeout(u));const m=Array.from(e.querySelectorAll(".flipcard"));m.forEach((e,n)=>{s||(e.style.transitionDelay=`${.1*n}s, ${.1*n}s`)});const f=e=>{var n;e.classList.add("in");const t=Array.prototype.indexOf.call((null==(n=e.parentNode)?void 0:n.children)||[],e);setTimeout(()=>{e.style.transitionDelay=""},1100+100*t),e.querySelectorAll(".count").forEach(e=>{e.dataset.done||(e.dataset.done="1",d(e,e.textContent||""))}),window.setTimeout(()=>{parseFloat(getComputedStyle(e).opacity)<.9&&(e.style.opacity="1",e.style.transform="none")},1e3)},g=new IntersectionObserver(e=>e.forEach(e=>{e.isIntersecting&&(f(e.target),g.unobserve(e.target))}),{threshold:.05,rootMargin:"0px 0px -8% 0px"});r.push(g),m.forEach(e=>g.observe(e));const v=setTimeout(()=>{m.forEach(e=>{e.classList.contains("in")||f(e)})},1200);a.push(()=>clearTimeout(v));const b=[{k:"The whole picture",t:"Six banks. Two super funds. One number you trust.",l:"Every account, property, share parcel and super fund, pulled into one figure that stays current.",f:"$871,212",s:"↑ $41,732 since March"},{k:"Dividends & franking",t:"Your shares, grossed up with franking included.",l:"BWise forecasts the dividends coming your way and the franking credits riding with them, against your real tax rate.",f:"$7,916",s:"$5,541 cash + $2,375 franking credits"},{k:"Tax position",t:"Your marginal rate, always known.",l:"Kira works from your real gross salary, so every deduction or salary-sacrifice call starts from the right number.",f:"47%",s:"on ~$258k gross, before 30 June"},{k:"Cash flow",t:"Exactly what's safe to spend.",l:"Your real commitments and run-rate for the month, so the end-of-month number is never the one that surprises you.",f:"$3,180",s:"safe to spend this month"}],x=e.querySelector("#showcase");if(x){const e=x.querySelector("#sc-kicker"),n=x.querySelector("#sc-title"),t=x.querySelector("#sc-lede"),a=x.querySelector("#sc-figure"),o=x.querySelector("#sc-sub"),l=x.querySelector("#sc-dots");if(e&&n&&t&&a&&o&&l){let c=0,p=null,h=!1;b.forEach((e,n)=>{const t=document.createElement("button");t.type="button",t.setAttribute("aria-label",`View ${n+1}`),t.onclick=()=>{m(n),f()},l.appendChild(t)});const u=l.querySelectorAll("button"),m=i=>{c=(i%b.length+b.length)%b.length;const r=b[c];if(s)return e.textContent=r.k,n.textContent=r.t,t.textContent=r.l,o.textContent=r.s,a.textContent=r.f,void u.forEach((e,n)=>e.className=n===c?"on":"");
1[e,n,t,o].forEach(e=>e.classList.add("leaving")),a.classList.add("leaving"),setTimeout(()=>{e.textContent=r.k,n.textContent=r.t,t.textContent=r.l,o.textContent=r.s,[e,n].forEach(e=>e.classList.remove("leaving")),setTimeout(()=>[t,o].forEach(e=>e.classList.remove("leaving")),80)},360),setTimeout(()=>{a.classList.remove("leaving"),d(a,r.f)},230),u.forEach((e,n)=>e.className=n===c?"on":"")},f=()=>{p&&clearInterval(p),s||(p=setInterval(()=>m(c+1),7200),i.push(p))},g=()=>{h||(h=!0,u[0].className="on",a.classList.remove("leaving"),d(a,b[0].f),f())},v=new IntersectionObserver(e=>e.forEach(e=>e.isIntersecting&&g()),{threshold:.3});r.push(v),v.observe(x),x.addEventListener("mouseenter",()=>p&&clearInterval(p)),x.addEventListener("mouseleave",()=>h&&f())}}const y=6800,w=e.querySelector("#hero-cycle"),k=w?Array.from(w.querySelectorAll("img")):[],E=Math.max(k.length,2);let z=0,L=null;const S=e.querySelector(".hero-rule");S&&!s&&(L=document.createElement("div"),L.style.cssText="position:absolute;left:0;top:0;width:100%;height:100%;background:var(--ink);transform:scaleY(0);transform-origin:top",S.appendChild(L));const q=e=>{L&&(0===e&&(L.style.transition="none",L.style.transform="scaleY(0)",L.offsetWidth),L.style.transition="transform 6800ms linear",L.style.transform=`scaleY(${(e+1)/E})`)};q(0);const A=()=>{k.length>=2?(k[z].classList.remove("on"),z=(z+1)%k.length,k[z].classList.add("on")):z=(z+1)%E,q(z)},C=e.querySelector("#hl"),Y=e.querySelector("#subhl");if(C&&!s){const e=[["See it all,","own, owe,","and earn."],["Your wealth,","in one","live number."],["Know where","you truly","stand."]],n=["Property, super, shares and cash, in one calm view.","Every account and asset, pulled into a single live figure.","Your real equity, cash flow and tax, in plain English."];let t=0,a=C.querySelector(".hl-set");const r=e=>{const n=document.createElement("span");return n.className="hl-set",e.forEach(e=>{const t=document.createElement("span");t.className="ln";const a=document.createElement("span");a.className="ln-i",a.textContent=e,t.appendChild(a),n.appendChild(t)}),n},o=setInterval(()=>{A();const i=a;i&&i.classList.add("leaving"),t=(t+1)%e.length;const o=r(e[t]);C.appendChild(o);const s=o.querySelectorAll(".ln-i");s.forEach((e,n)=>e.style.transitionDelay=200*n+"ms"),C.offsetWidth,s.forEach(e=>e.classList.add("in")),a=o,setTimeout(()=>{var e;return null==(e=null==i?void 0:i.parentNode)?void 0:e.removeChild(i)},1100),Y&&(Y.style.transitionDelay="0ms",Y.classList.add("out"),setTimeout(()=>{Y.textContent=n[t],Y.style.transition="none",Y.style.transform="translateY(14px)",Y.style.opacity="0",Y.offsetWidth,Y.style.transition="",Y.style.transitionDelay=".18s",Y.classList.remove("out"),Y.style.transform="",Y.style.opacity=""},500))},y);i.push(o)}else if(!s&&k.length>=2){const e=setInterval(A,y);i.push(e)}const T=e.querySelector("nav"),B=e.querySelector(".appcard");if(T||B){let e=window.pageYOffset||0,n=!1;const t=()=>{const t=window.pageYOffset||0,a=t>e;T&&T.classList.toggle("nav-hidden",a&&t>24),B&&B.classList.toggle("appcard-hidden",!a&&t>24),e=t,n=!1},i=()=>{n||(window.requestAnimationFrame(t),n=!0)};window.addEventListener("scroll",i,{passive:!0}),a.push(()=>window.removeEventListener("scroll",i))}const j=e.querySelector("#wl-overlay"),O=e.querySelector("#wl-form"),N=e.querySelector("#wl-ok"),W=e.querySelector("#wl-name"),M=e.querySelector("#wl-email"),D=e.querySelector("#wl-use"),$=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;if(j&&O&&N&&W&&M&&D){const i=O.parentElement,r=()=>Array.from(i.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')).filter(e=>null!==e.offsetParent&&!e.hasAttribute("disabled"));let s=null;const l=n=>{s=document.activeElement,O.style.display="",N.style.display="none",["f-name","f-email","f-use"].forEach(n=>{var t;return null==(t=e.querySelector("#"+n))?void 0:t.classList.remove("err")}),n&&$.test(n)&&(M.value=n),j.classList.add("open"),j.setAttribute("aria-hidden","false"),document.body.classList.add("modal-open"),setTimeout(()=>(M.value?W:M).focus(),120)},d=()=>{var e;j.classList.remove("open"),j.setAttribute("aria-hidden","true"),document.body.classList.remove("modal-open"),null==(e=null==s?void 0:s.focus)||e.call(s)};
1e.querySelectorAll(".js-waitlist").forEach(e=>e.addEventListener("click",n=>{var t;n.preventDefault();const a=null==(t=e.closest(".capture"))?void 0:t.querySelector("input");l(a?a.value.trim():"")})),e.querySelectorAll(".capture input").forEach(e=>{e.addEventListener("keydown",n=>{"Enter"===n.key&&(n.preventDefault(),l(e.value.trim()))}),e.addEventListener("input",()=>{var n;return null==(n=e.closest(".capture"))?void 0:n.classList.toggle("ready",$.test(e.value.trim()))})}),null==(n=e.querySelector("#wl-close"))||n.addEventListener("click",d),j.addEventListener("click",e=>e.target===j&&d());const c=e=>{if(j.classList.contains("open"))if("Escape"!==e.key){if("Tab"===e.key){const n=r();if(!n.length)return;const t=n[0],a=n[n.length-1],i=document.activeElement;e.shiftKey&&i===t?(e.preventDefault(),a.focus()):(e.shiftKey||i!==a)&&j.contains(i)||(e.preventDefault(),t.focus())}}else d()};document.addEventListener("keydown",c),a.push(()=>document.removeEventListener("keydown",c)),D.addEventListener("change",()=>{var n;D.classList.add("filled"),null==(n=e.querySelector("#f-use"))||n.classList.remove("err")}),W.addEventListener("input",()=>{var n;return null==(n=e.querySelector("#f-name"))?void 0:n.classList.remove("err")}),M.addEventListener("input",()=>{var n;return null==(n=e.querySelector("#f-email"))?void 0:n.classList.remove("err")});const p=e.querySelector("#wl-submit");null==p||p.addEventListener("click",async()=>{var n,a,i,r;let s=null;const l=W.value.trim().length>=2;null==(n=e.querySelector("#f-name"))||n.classList.toggle("err",!l),l||(s=W);const d=$.test(M.value.trim());null==(a=e.querySelector("#f-email"))||a.classList.toggle("err",!d),d||s||(s=M);const c=!!D.value;if(null==(i=e.querySelector("#f-use"))||i.classList.toggle("err",!c),c||s||(s=D),s)return void s.focus();const h=M.value.trim();p.disabled=!0;const u=p.innerHTML;p.textContent="Joining…";try{await t({email:h,name:W.value.trim(),useCase:D.value,source:"mock_landing_hero"});const n=e.querySelector("#wl-ok-sub");n&&(n.textContent=`We'll email ${h} the moment BWise opens.`),O.style.display="none",N.style.display=""}catch(m){o.error("Waitlist submit failed",m),p.disabled=!1,p.innerHTML=u;const n=e.querySelector("#wl-ok-sub");null==(r=e.querySelector("#f-email"))||r.classList.add("err"),n&&(n.textContent="")}})}return a.push(()=>{i.forEach(e=>clearInterval(e)),r.forEach(e=>e.disconnect()),document.body.classList.remove("modal-open")}),()=>a.forEach(e=>e())}function l(){const t=e.useMemo(()=>function(e){return e.replace(/href="index\.html"/g,'href="/"').replace(/href="about\.html"/g,'href="/about"').replace(/href="login\.html"/g,'href="/login"').replace(/src="bwise-logo-white\.png"/g,'src="/landing/bwise-logo-white.png"').replace(/src="bwise-logo\.png"/g,'src="/landing/bwise-logo.png"')}('<a class="skip" href="#main">Skip to content</a><nav aria-label="Primary"><div class="wrap nav">\n  <a class="nav-logo" href="/" aria-label="BWise home"><img class="brand-logo" src="bwise-logo-white.png" alt="BWise" /></a>\n  <div class="nav-left"><a href="#how-it-works">How it works</a><a href="#kira">Kira</a><a href="#security">Security</a><a href="/about">About</a></div>\n  <div class="nav-right"><a class="pill pill-light" href="/login">Sign in</a></div>\n</div></nav>\n\n<main id="main"><header class="hero"><div class="wrap hero-grid">\n  <div class="hero-copy">\n    <h1><span class="hl" id="hl"><span class="hl-set"><span class="ln"><span class="ln-i in">See it all,</span></span><span class="ln"><span class="ln-i in">own, owe,</span></span><span class="ln"><span class="ln-i in">and earn.</span></span></span></span></h1>\n    <p class="sub"><span class="subhl" id="subhl">Property, super, shares and cash, in one calm view.</span></p>\n    <div class="capture">\n      <input id="hero-email" type="email" autocomplete="email" aria-label="Email address" placeholder="[email protected]" />\n      <a class="pill js-waitlist" href="#">Get early access</a>\n    </div>\n    <div class="trust">Australian Open Banking (CDR) · bank-grade encryption · your data stays in Australia</div>\n    <div class="eyebrow" style="margin-top:24px;margin-bottom:0"><span class="live"></span>Private beta · Australian Open Banking</div>\n  </div>\n  <div class="hero-rule"></div>\n  <div class="media hero-media" id="hero-cycle">\n    <img class="on" src="https://images.unsplash.com/photo-1622556498246-755f44ca76f3?w=1000&h=1240&q=80&auto=format&fit=crop" alt="" />\n    <img src="https://images.unsplash.com/photo-1632762383337-d1867c0f793f?w=1000&h=1240&q=80&auto=format&fit=crop" alt="" />\n    <img src="https://images.unsplash.com/photo-1589458373946-1d1384cf5764?w=1000&h=1240&q=80&auto=format&fit=crop" alt="" />\n    <img src="https://images.unsplash.com/photo-1758273237665-be79cff6e069?w=1000&h=1240&q=80&auto=format&fit=crop" alt="" />\n  </div>\n</div></header>\n\n<div class="strip spine"><div class="wrap">\n  <div class="strip-cap">Built to connect to 100+ Australian banks via Open Banking (CDR)</div>\n  <div class="strip-row"><span>CommBank</span><span>Westpac</span><span>NAB</span><span>ANZ</span><span>Macquarie</span><span>ING</span><span>Bendigo Bank</span><span>
1Suncorp</span></div>\n</div></div>\n\n<section class="block showcase" id="showcase"><div class="wrap grid2">\n  <div>\n    <div class="kicker sc-fade" id="sc-kicker">The whole picture</div>\n    <h2 class="sc-fade" id="sc-title">Six banks. Two super funds. One number you trust.</h2>\n    <p class="lede sc-fade" id="sc-lede">Every account, property, share parcel and super fund, pulled into one figure that stays current. No spreadsheet. No logging into eight apps to add yourself up.</p>\n    <div class="dots" id="sc-dots"></div>\n  </div>\n  <div>\n    <div class="figure tnum" id="sc-figure">$871,212</div>\n    <div style="margin-top:14px;font-size:18px" class="delta tnum sc-fade" id="sc-sub">↑ $41,732 since March</div>\n  </div>\n</div></section>\n\n<section class="block" id="kira"><div class="wrap">\n  <div class="section-head">\n    <div class="kicker">What Kira sees</div>\n    <h2 style="max-width:16ch">Your whole financial life, an answer away.</h2>\n  </div>\n  <div class="flips">\n    <div class="flipcard"><div class="lab">Net worth</div><div class="big tnum count">$871,212</div><p>Every dollar across banks, property, shares and super, in one figure that stays current.</p></div>\n    <div class="flipcard"><div class="lab">Property &amp; tax</div><div class="big">ATO-ready</div><p>Equity, LVR and yield worked out for you, with the right ATO label on every expense.</p></div>\n    <div class="flipcard"><div class="lab">Dividends &amp; franking</div><div class="big tnum count">$7,916</div><p>Forecast dividend income, the franking credits riding with it, weighed against your real tax rate.</p></div>\n    <div class="flipcard"><div class="lab">Ask Kira</div><div class="big">Anything</div><p>Net worth, tax, cash flow. Ask out loud or type it. The answer comes straight from your own numbers, never a guess.</p></div>\n  </div>\n</div></section>\n\n<section class="block" id="how-it-works"><div class="wrap">\n  <div class="section-head">\n    <div class="kicker">How it works</div>\n    <h2>Connected in minutes. Clear for good.</h2>\n  </div>\n  <div class="triple">\n    <div class="cell"><div class="tile"><img src="https://images.unsplash.com/photo-1556742049-0cfed4f6a45d?w=800&h=600&q=80&auto=format&fit=crop" alt="" loading="lazy" /></div><div class="n">01</div><h3>Connect your banks</h3><p>Link through Australian Open Banking. You sign in at your own bank, so your password never reaches us.</p></div>\n    <div class="cell"><div class="tile"><img src="https://images.unsplash.com/photo-1551288049-bebda4e38f71?w=800&h=600&q=80&auto=format&fit=crop" alt="" loading="lazy" /></div><div class="n">02</div><h3>See everything in one place</h3><p>Property, super, shares and cash, sorted, reconciled and tagged for the ATO without you lifting a finger.</p></div>\n    <div class="cell"><div class="tile"><img src="https://images.unsplash.com/photo-1512446816042-444d641267d4?w=800&h=600&q=80&auto=format&fit=crop" alt="" loading="lazy" /></div><div class="n">03</div><h3>Ask Kira anything</h3><p>Kira thinks over your real numbers and answers in plain English, by voice or text.</p></div>\n  </div>\n</div></section>\n\n<section class="block grid2-section spine"><div class="wrap grid2">\n  <div>\n    <div class="kicker">Built for Australia</div>\n    <h2>Your property, with the ATO already in mind.</h2>\n    <p class="lede">Equity, LVR and yield, worked out for you. Every expense tagged for the ATO the moment it lands. So when EOFY arrives, it\'s a handover, not a scramble.</p>\n  </div>\n  <div>\n    <div class="media prop-media"><img src="https://images.unsplash.com/photo-1698941329051-c0eeac5df8e9?w=1000&h=750&q=80&auto=format&fit=crop" alt="" loading="lazy" /></div>\n    <div class="breakdown tnum" style="margin-top:0">\n      <div class="row" style="border-top:none"><span class="k">Value</span><span class="v count">$840,000</span></div>\n      <div class="row"><span class="k">Loan</span><span class="v count">$512,000</span></div>\n      <div class="row"><span class="k">Equity</span><span class="v count">$328,000</span></div>\n      <div class="row"><span class="k">Net yield</span><span class="v count">4.2%</span></div>\n    </div>\n  </div>\n</div></section>\n\n<section class="block" id="security"><div class="wrap">\n  <div class="section-head">\n    <div class="kicker">Security</div>\n    <h2>Bank-grade, by default.</h2>\n  </div>\n  <div class="triple">\n    <div class="cell"><h3>You sign in at your own bank</h3><p>Connections run through Australian Open Banking (CDR). You authenticate at your own bank, so your password never reaches us.</p></div>\n    <div class="cell"><h3>Encrypted, and read-only</h3><p>Every figure is encrypted in transit and at rest. BWise is read-only by design, so it can answer questions, never move your money.</p></div>\n    <div class="cell"><h3>Your data stays in Australia</h3><p>
1Stored in Australian data centres and handled under CDR rules. We never sell your data.</p></div>\n  </div>\n</div></section>\n\n<div class="band spine"><div class="media"><img src="https://images.unsplash.com/photo-1545044846-351ba102b6d5?w=1800&h=680&q=80&auto=format&fit=crop" alt="" loading="lazy" /></div></div>\n\n<section class="close"><div class="wrap">\n  <h2>Know exactly where you stand.</h2>\n  <p class="lede">We\'re opening BWise to Australians a small group at a time, while we complete Open Banking (CDR) onboarding. Join the first cohort.</p>\n  <div class="capture">\n    <input id="close-email" type="email" autocomplete="email" aria-label="Email address" placeholder="[email protected]" />\n    <a class="pill js-waitlist" href="#">Get early access</a>\n  </div>\n</div></section>\n</main>\n\n<footer><div class="wrap">\n  <div class="foot-grid">\n    <div class="col"><img class="foot-logo" src="bwise-logo-white.png" alt="BWise" /><p class="foot-blurb">Your entire financial picture · property, super, shares and cash · in one calm, live view. Built for Australia.</p></div>\n    <div class="col"><h4>Product</h4><a href="#how-it-works">How it works</a><a href="#kira">Kira</a><a href="#security">Security</a></div>\n    <div class="col"><h4>Company</h4><a href="/about">About</a><a href="/privacy">Privacy</a><a href="/terms">Terms</a></div>\n  </div>\n  <div class="foot">\n  <span>© 2026 BWise Pty Ltd</span>\n  <span>General information only · BWise does not hold an AFSL · Not financial advice</span>\n</div></div></footer>\n\n<a class="appcard js-waitlist" href="#"><span>Get early access &amp; see where you stand</span><span class="arw" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span></a>\n\n<div class="overlay" id="wl-overlay" aria-hidden="true">\n  <div class="modal" role="dialog" aria-modal="true" aria-labelledby="wl-title">\n    <button class="x" id="wl-close" aria-label="Close">\n      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M18 6 6 18M6 6l12 12"/></svg>\n    </button>\n    <div id="wl-form">\n      <div class="live-row"><span class="live"></span>Private beta</div>\n      <h3 id="wl-title">Join the waitlist</h3>\n      <p class="lead">Be first through the door when BWise opens. We\'re in private beta with <strong>sample data only</strong> — live bank connections (Open Banking / CDR) aren\'t available yet. We\'ll only email you about access.</p>\n\n      <div class="field" id="f-name">\n        <label for="wl-name">Full name</label>\n        <input id="wl-name" type="text" autocomplete="name" placeholder="Your name" />\n        <div class="msg" role="alert">Please enter your name.</div>\n      </div>\n      <div class="field" id="f-email">\n        <label for="wl-email">Email</label>\n        <input id="wl-email" type="email" autocomplete="email" placeholder="[email protected]" />\n        <div class="msg" role="alert">Please enter a valid email.</div>\n      </div>\n      <div class="field" id="f-use">\n        <label for="wl-use">What best describes you?</label>\n        <select id="wl-use">\n          <option value="" disabled selected>Select one…</option>\n          <option value="property_investor">Property Investor</option>\n          <option value="first_home_buyer">First Home Buyer</option>\n          <option value="wealth_builder">Wealth Builder</option>\n          <option value="accountant">Accountant / Advisor</option>\n          <option value="other">Other</option>\n        </select>\n        <div class="msg" role="alert">Please pick one.</div>\n      </div>\n\n      <button class="submit" id="wl-submit" type="button">
1Join the waitlist <span class="arw" aria-hidden="true">&rarr;</span></button>\n      <p class="fine">No spam. Unsubscribe anytime · Your data stays in Australia.</p>\n    </div>\n\n    <div class="ok" id="wl-ok" style="display:none">\n      <div class="check"><svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg></div>\n      <h3>You\'re on the list.</h3>\n      <p id="wl-ok-sub">We\'ll be in touch the moment BWise opens.</p>\n    </div>\n  </div>\n</div>'),[]);return r(),e.useEffect(()=>i(),[]),e.useEffect(()=>{const e=document.createElement("style");let n;e.id="bw-landing-css",e.textContent="/* BWise - black-on-white, type-led, calm-authority. Free Geist (var 200-700).\n     The one accent on the page is the pulsing green live dot; everything else is\n     the monochrome ink ladder. The restraint is the product. */\n  :root{\n    --ink:#0a0a0a;        /* headings, figures */\n    --ink-2:#52555e;      /* lede/body secondary - 7.4:1 on white */\n    --ink-3:#5f636d;      /* kickers, captions, trust, footer - ~5.6:1 white / ~5.3:1 strip (AA) */\n    --ink-faint:#9aa0ab;  /* hairline-only: idle dots, separators (non-text, decorative) */\n    --bg:#ffffff; --bg-2:#fafbfc; --bg-strip:#f7f8fa;\n    --line:#e7e9ec; --line-strong:#d7dade; --line-hover:#d4d8de; --accent:#0a0a0a; --field:#ebeff2; --field-hover:#e5eaee;\n    /* THE ONE COLOUR ON THE PAGE - reserved for the live pulse dot only */\n    --live:#0f8a4f;\n\n    /* layout + rhythm spine */\n    --maxw:1220px;\n    --gutter:40px;\n    --rhythm:152px;        /* canonical section vertical rhythm (desktop) */\n    --rhythm-tight:120px;  /* paired/continuation sections */\n    --rhythm-open:200px;   /* the close - let it breathe */\n    --head-gap:56px;       /* kicker+h2 block to content below it */\n\n    /* motion: one language. --ease-rise = the hero's in-curve (all entrances settle\n       on it); --ease-out / --ease-press carry the micro-interaction layer */\n    --ease-rise:cubic-bezier(.215,.61,.355,1);\n    --ease-out:cubic-bezier(.16,1,.3,1);\n    --ease-press:cubic-bezier(.4,0,.2,1);\n    --rise-dur:.9s;        /* reveal duration */\n    --rise-y:40px;         /* generous translate */\n    --stagger:90ms;        /* per-sibling cascade step */\n    --t-micro:.14s;        /* hover colour / opacity / border */\n    --t-press:.09s;        /* active depress */\n    --t-lift:.32s;         /* pill + card lift, arrow nudge */\n    /* focus rings: ink ring on white, white ring on the black nav */\n    --ring:0 0 0 3px rgba(10,10,10,.12);\n    --ring-dark:0 0 0 3px rgba(255,255,255,.30);\n  }\n  @media(max-width:1024px){:root{--gutter:32px;--rhythm:120px;--rhythm-tight:96px;--rhythm-open:144px;--head-gap:48px}}\n  @media(max-width:640px){:root{--gutter:20px;--rhythm:88px;--rhythm-tight:72px;--rhythm-open:104px;--head-gap:40px}}\n\n  *{box-sizing:border-box;margin:0;padding:0}\n  html{-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;scroll-behavior:smooth}\n  section[id]{scroll-margin-top:96px}\n  @media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}\n  body{\n    font-family:\"Geist\",\"Inter\",ui-sans-serif,system-ui,-apple-system,\"Segoe UI\",sans-serif;\n    letter-spacing:0;\n    color:var(--ink);background:var(--bg);line-height:1.5;\n    overflow-x:hidden;\n  }\n  .wrap{max-width:var(--maxw);margin:0 auto;padding:0 var(--gutter);width:100%}\n  .tnum{font-variant-numeric:tabular-nums}\n  a{color:inherit;text-decoration:none}\n\n  /* focus: invisible to mouse, crisp ring to keyboard only */\n  :focus{outline:none}\n  :focus-visible{outline:none;border-radius:6px;box-shadow:var(--ring)}\n  .pill:focus-visible{outline:4px solid #000;outline-offset:-4px;box-shadow:none}\n  .dots button:focus-visible,.capture input:focus-visible,\n  .modal .x:focus-visible,.modal .submit:focus-visible,.field input:focus-visible,\n  .field select:focus-visible,.flipcard:focus-visible{box-shadow:var(--ring)}\n  nav a:focus-visible,nav .pill:focus-visible{box-shadow:var(--ring-dark)}\n  .pill.pill-light:focus-visible{box-shadow:var(--ring-dark)}\n  @media (prefers-reduced-motion:no-preference){\n    :focus-visible{transition:box-sha
1dow .12s var(--ease-press)}\n  }\n\n  /* nav */\n  nav{position:sticky;top:0;z-index:10;background:var(--ink);border-bottom:1px solid rgba(255,255,255,.09);transition:transform .55s cubic-bezier(.25,.46,.45,.94),opacity .45s ease;will-change:transform,opacity}\n  nav.nav-hidden{transform:translateY(-101%);opacity:0}\n  @media (prefers-reduced-motion:reduce){nav{transition:none}}\n  .nav{display:flex;align-items:center;gap:clamp(24px,3vw,44px);height:72px;max-width:var(--maxw);margin:0 auto;padding:0 var(--gutter)}\n  .nav-right{margin-left:auto}\n  .brand-logo{height:40px;width:auto;display:block}\n  .nav-left{display:flex;align-items:center;gap:32px;font-size:16px;font-weight:700;color:#fff}\n  .nav-left a{position:relative;transition:opacity var(--t-micro) var(--ease-press)}\n  .nav-left a:hover{opacity:.7}\n  .nav-left a::after{content:\"\";position:absolute;left:0;right:0;bottom:-6px;height:1px;\n    background:#fff;transform:scaleX(0);transform-origin:left;transition:transform .28s var(--ease-out)}\n  .nav-left a:hover::after,.nav-left a:focus-visible::after{transform:scaleX(1)}\n  @media (prefers-reduced-motion:reduce){.nav-left a::after{transition:none}}\n  .nav-logo{display:block;line-height:0}\n  .nav-right{display:flex;align-items:center;gap:16px}\n\n  /* pills - hover-lift + active-press + arrow nudge */\n  .pill{display:inline-flex;align-items:center;gap:8px;border-radius:500px;font-weight:500;font-size:16px;\n    padding:14px 24px;background:var(--accent);color:#fff;border:1px solid var(--accent);cursor:pointer;\n    transition:all .2s ease-in-out}\n  .pill:hover{background:#24262e;border-color:#24262e}\n  .pill:active{background:#1a1c22;border-color:#1a1c22}\n  .pill .arw{display:inline-block;transition:transform var(--t-lift) var(--ease-out)}\n  .pill:hover .arw{transform:translateX(3px)}\n  .pill.pill-light{background:#fff;color:var(--ink);border-color:#fff;font-weight:700}\n  .pill.pill-light:hover{background:#e9e9ea;border-color:#e9e9ea}\n  .pill.pill-light:active{background:#dcdcde;border-color:#dcdcde}\n  .pill-ghost{background:#fff;color:var(--ink);border:1px solid var(--ink)}\n  .pill-ghost:hover{background:var(--ink);color:#fff}\n  @media (prefers-reduced-motion:reduce){\n    .pill,.pill .arw,.pill.pill-light{transition:background var(--t-micro),color var(--t-micro);transform:none;box-shadow:none}\n  }\n\n  /* media (free grayscale placeholders for now - swap for real product later) */\n  .hero-grid{display:grid;grid-template-columns:minmax(0,1fr) 2px minmax(0,1fr);gap:clamp(36px,3.6vw,52px);align-items:stretch}\n  .hero-rule{display:block;width:2px;background:transparent;position:relative;overflow:hidden;align-self:stretch}\n  @media (prefers-reduced-motion:reduce){.hero-rule{background:var(--line)}}\n  @media(max-width:900px){.hero-grid{grid-template-columns:1fr;gap:32px}.hero-rule{display:none}.hero-media{margin-right:0}}\n  .media{border-radius:12px;overflow:hidden;background:var(--bg-2);border:1px solid var(--line)}\n  .media img{display:block;width:100%;height:100%;object-fit:cover;filter:saturate(1.02)}\n  .hero-media{position:relative;overflow:hidden;border-radius:0;align-self:stretch;justify-self:start;width:100%;max-width:520px;min-height:600px}\n  .hero-media img{position:absolute;inset:0;filter:none;opacity:0;transition:opacity 1.15s ease}\n  .hero-media img.on{opacity:1}\n  @media (prefers-reduced-motion:reduce){.hero-media img{transition:none}}\n  .band .media img{filter:grayscale(1) contrast(1.04)}\n  .band{padding:0}\n  .band .media{border-radius:0;border-left:0;border-right:0;height:clamp(300px,40vw,500px)}\n  .prop-media{aspect-ratio:4/3;margin-bottom:24px}\n\n  /* hero */\n  .hero{padding:72px 0 96px}\n  .eyebrow{display:inline-flex;align-items:center;gap:8px;font-size:11px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--ink);margin-bottom:24px}\n  .eyebrow .live{width:7px;height:7px;border-radius:50%;background:var(--live);box-shadow:0 0 0 0 rgba(15,138,79,.5);animation:livepulse 2.2s infinite}\n  @keyframes livepulse{0%{box-shadow:0 0 0 0 rgba(15,138,79,.45)}70%{box-shadow:0 0 0 7px rgba(15,138,79,0)}100%{box-shadow:0 0 0 0 rgba(15,138,79,0)}}\n  .hero-copy{display:flex;flex-direction:column;justify-content:center}\n  h1{font-size:clamp(56px,6.6vw,96px);line-height:1.06;letter-spacing:-.04em;font-weight:300;max-width:12ch;position:relative;height:3.4em;overflow:visible}\n  h1 .hl{display:block;position:absolute;inset:0}\n  h1 .hl-set{position:absolute;
1left:0;right:0;bottom:0}\n  h1 .ln{display:block;overflow:hidden;white-space:nowrap;padding-bottom:.14em;margin-bottom:-.14em}\n  h1 .ln-i{display:block;opacity:0;transform:translateY(115%);transition:opacity .6s cubic-bezier(.215,.61,.355,1),transform .6s cubic-bezier(.215,.61,.355,1)}\n  h1 .ln-i.in{opacity:1;transform:translateY(0)}\n  h1 .hl-set.leaving .ln-i{opacity:0;transition:opacity .5s cubic-bezier(.215,.61,.355,1)}\n  @media (prefers-reduced-motion:reduce){h1 .ln-i{transition:none;opacity:1;transform:none}}\n  .sub{margin-top:24px;font-size:18px;line-height:1.55;color:var(--ink-2);max-width:40ch;min-height:2.7em}\n  .sub .subhl{display:inline-block;transition:opacity .55s ease,transform .6s cubic-bezier(.22,.61,.36,1)}\n  .sub .subhl.out{opacity:0;transform:translateY(-8px)}\n  .capture{position:relative;margin-top:56px;max-width:500px;height:56px;background:var(--field);border-radius:30px;transition:all .2s}\n  .capture:focus-within{outline:2px solid var(--ink)}\n  .capture input{position:absolute;inset:0;width:100%;height:100%;border:none;background:transparent;border-radius:30px;padding:0 215px 0 24px;font-size:16px;font-family:inherit;outline:none;color:var(--ink)}\n  .capture input::placeholder{color:#8e94a0;font-size:16px}\n  .capture .pill{position:absolute;right:0;top:0;bottom:0;margin:4px;height:auto;width:fit-content;padding:0 28px;font-size:16px;font-weight:500}\n  .trust{margin-top:16px;font-size:13px;color:var(--ink-3)}\n\n  /* section scaffold - rhythm by role; dividers placed deliberately, not stamped */\n  section.block{padding:var(--rhythm) 0}\n  .showcase{padding-top:var(--rhythm-tight)}        /* sits close under hero, one continuous read */\n  .block + .block{padding-top:var(--rhythm-tight)}  /* consecutive editorial blocks pull together */\n  .block.grid2-section{padding:var(--rhythm) 0}     /* property: full rhythm, it's a beat change */\n  .spine{border-bottom:1px solid var(--line)}\n\n  .kicker{\n    font-size:13px;\n    font-weight:500;\n    letter-spacing:.04em;\n    text-transform:uppercase;\n    color:var(--ink);\n    margin-bottom:20px;\n    font-feature-settings:\"cv01\",\"cv11\";\n  }\n  .section-head{margin-bottom:var(--head-gap)}\n  .section-head .kicker{margin-bottom:16px}\n  .section-head h2{max-width:18ch;margin-bottom:0}\n  .section-head .lede{margin-top:24px}\n\n  h2{\n    font-size:clamp(28px,4.1vw,48px);\n    line-height:1.08;\n    letter-spacing:-.038em;\n    font-weight:300;\n    color:var(--ink);\n    max-width:18ch;\n    text-wrap:balance;\n  }\n  h3,.cell h3{font-weight:600;letter-spacing:-.012em}\n  .lede{\n    margin-top:24px;\n    font-size:18px;\n    line-height:1.62;\n    letter-spacing:-.003em;\n    color:var(--ink-2);\n    max-width:52ch;\n    text-wrap:pretty;\n  }\n  .grid2{display:grid;grid-template-columns:minmax(0,680px) minmax(0,440px);gap:clamp(40px,4vw,64px);align-items:center;justify-content:center}\n  .grid2-section .grid2>div:first-child{order:2}\n  @media(max-width:820px){.grid2{grid-template-columns:1fr;gap:40px}}\n  .showcase .grid2{align-items:center}\n  .showcase .figure{margin-top:-0.08em}\n  #sc-dots{margin-top:40px}\n\n  /* every numeric node - tabular by selector, can't be forgotten in markup */\n  .figure,.delta,.big,.row .v,.cell .n,.flipcard .big,\n  #sc-figure,#sc-sub{font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\",\"ss01\"}\n\n  /* the ONE number - type as proof, not a card */\n  .figure{font-size:clamp(44px,6vw,82px);line-height:.98;letter-spacing:-.03em;font-weight:400;color:var(--ink)}\n  .delta{color:var(--ink-2);font-weight:500}   /* deltas are tabular monochrome text, NOT colour */\n  .breakdown{margin-top:32px;display:grid;gap:16px;max-width:420px}\n  .row{display:flex;align-items:baseline;justify-content:space-between;border-top:1px solid var(--line);padding-top:16px}\n  .row .k{color:var(--ink-2);font-size:15px;letter-spacing:-.003em}\n  .row .v{font-weight:600;font-size:16px;color:var(--ink);letter-spacing:-.01em}\n\n  /* benefit triple */\n  .triple{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(32px,3.3vw,48px)}\n  @media(max-width:820px){.triple{grid-template-columns:1fr}}\n  .cell{padding:0}\n  .cell .tile{aspect-ratio:4/3;overflow:hidden;margin-bottom:24px;background:var(--bg-2)}\n  .cell .tile img{display:block;width:100%;height:100%;object-fit:cover;filter:grayscale(1) contrast(1.04)}\n  @media(max-width:820px){.triple{gap:40px}}\n  .cell .n{font-size:13px;font-weight:600;color:var(--ink-3);margin-bottom:16px}\n  .cell h3{font-size:20px;font-weight:600;margin-bottom:10px}\n  .cell p{color:var(--ink-2);font-size:16px;line-height:1.6}\n\n  /* trust strip - recessed evidence band, lifted labels, demoted separators */\n  .strip{padding:64px 0;background:#fff}\n  .strip-cap{text-align:center;font-size:12px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);margin-bottom:28px}\n  .strip-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:16px 56px;justify-content:center;max-width:980px;margin:0 auto}\n  .strip-row span{font-size:19px;font-weight:600;letter-spacing:-.01em;color:var(--ink);white-space:nowrap}\n  @media(max-width:640px){.strip-row{gap:12px 32px}.strip-row span{font-size:16px}}\n\n  /* close - let it breathe more than any other section */\n  .close{padding:var(--rhythm-open) 0;text-align:center}\n  .close h2{margin:0 auto;max-width:18ch}\n  .close .lede{margin:24px auto 0;max-width:46ch}\n  .close .capture{margin:40px auto 0;justify-content:center}\n  .close h2{font-size:clamp(36px,4.6vw,64px);max-width:20ch}\n\n  footer{padding:80px 0 56px;color:var(--ink-3);font-size:13px;border-top:1px solid var(--line)}\n  .foot-grid{display:grid;grid-template-columns:2fr 1fr 1fr;gap:40px;margin-bottom:56px}\n  @media(max-width:640px){.foot-grid{grid-template-columns:1fr}}\n  .foot-grid .col h4{font-size:13px;font-weight:600;color:var(--ink);margin-bottom:16px;letter-spacing:.04em;text-transform:uppercase}\n  .foot-grid .col a{display:block;font-size:14px;color:var(--ink-2);margin-bottom:12px}\n  .foot-grid .col a:hover{color:var(--ink)}\n  .foot-logo{height:32px;width:auto;display:block;margin-bottom:16px;filter:invert(1)}\n  .foot-blurb{font-size:13px;color:var(--ink-3);max-width:34ch;line-height:1.6}\n  .foot{display:flex;justify-content:space-between;flex-wrap:wrap;gap:16px;border-top:1px solid var(--line);padding-top:24px}\n\n  /* motion: scroll-reveal - rises on the hero's curve, generous lift, settles in place */\n  .reveal{\n    opacity:0;\n    transform:translateY(var(--rise-y));\n    transition:opacity var(--rise-dur) var(--ease-rise),\n               transform var(--rise-dur) var(--ease-rise);\n    transition-delay:var(--d,0s);\n    will-change:opacity,transform;\n  }\n  .reveal.in{opacity:1;transform:none}\n  /* figures and big type travel a touch further for weight */\n  .figure.reveal,h2.reveal,.flipcard .b
1ig{--rise-y:48px}\n  @media (prefers-reduced-motion:reduce){\n    .reveal{opacity:1;transform:none;transition:none;transition-delay:0s!important}\n  }\n\n  /* dynamic showcase: each capability arrives on a slim rise, leaves on a fade */\n  .sc-fade{transition:opacity .42s var(--ease-rise),transform .52s var(--ease-rise);will-change:opacity,transform}\n  .sc-fade.leaving{opacity:0;transform:translateY(8px)}\n  .showcase .figure{transition:opacity .3s var(--ease-rise),transform .5s var(--ease-rise)}\n  .showcase .figure.leaving{opacity:0;transform:translateY(10px)}\n  .dots{display:flex;gap:8px;margin-top:40px}\n  .dots button{height:5px;width:8px;padding:0;border:0;border-radius:9999px;background:var(--line);cursor:pointer;position:relative;\n    transition:width .42s var(--ease-rise),background var(--t-micro) var(--ease-press)}\n  /* invisible ~38px hit target; the visible dot stays small */\n  .dots button::before{content:\"\";position:absolute;inset:-20px -18px;border-radius:9999px}\n  .dots button:hover{background:var(--ink-faint)}\n  .dots button.on{width:28px;background:var(--ink)}\n  .dots button.on:hover{background:var(--ink)}\n  @media (prefers-reduced-motion:reduce){.dots button{transition:background var(--t-micro)}}\n\n  /* flip-on-scroll cards - open like a panel, cascade, settle on the hero curve, then liftable */\n  .flips{display:grid;grid-template-columns:repeat(2,1fr);gap:clamp(40px,4.4vw,64px);perspective:1800px}\n  @media(max-width:760px){.flips{grid-template-columns:1fr}}\n  .flipcard{padding:0;background:transparent;\n    transform:rotateY(-74deg) translateY(14px);transform-origin:50% 50%;opacity:0;\n    transition:transform 1s var(--ease-rise),opacity .6s var(--ease-rise);\n    will-change:transform,opacity}\n  .flipcard.in{transform:rotateY(0) translateY(0);opacity:1;\n    transition:transform var(--t-lift) var(--ease-out),box-shadow var(--t-lift) var(--ease-out),\n               opacity .6s var(--ease-rise),border-color var(--t-micro) var(--ease-press)}\n  .flipcard.in:hover{transform:none;box-shadow:none}\n  @media (prefers-reduced-motion:reduce){.flipcard{transform:none;opacity:1;transition:none}.flipcard.in:hover{transform:none;box-shadow:none}}\n  .flipcard .lab{font-size:13px;font-weight:500;letter-spacing:.04em;text-transform:uppercase;color:var(--ink);margin-bottom:20px}\n  .flipcard .big{font-size:clamp(34px,4.4vw,44px);letter-spacing:-.03em;font-weight:400;line-height:1}\n  .flipcard p{margin-top:16px;color:var(--ink-2);font-size:16px;line-height:1.6;max-width:44ch}\n\n  /* waitlist modal */\n  .overlay{position:fixed;inset:0;z-index:60;display:flex;align-items:center;justify-content:center;padding:20px;\n    background:rgba(10,10,10,.46);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);\n    opacity:0;pointer-events:none;transition:opacity .26s ease}\n  .overlay.open{opacity:1;pointer-events:auto}\n  .modal{position:relative;width:min(452px,100%);background:#fff;border-radius:16px;padding:38px 36px 32px;\n    box-shadow:0 1px 0 rgba(255,255,255,.6) inset,0 40px 90px -20px rgba(10,12,18,.4),0 12px 30px -12px rgba(10,12,18,.22);\n    transform:translateY(14px) scale(.985);opacity:.4;transition:transform .34s cubic-bezier(.16,1,.3,1),opacity .34s ease}\n  .overlay.open .modal{transform:none;opacity:1}\n  @media (prefers-reduced-motion:reduce){.modal{transition:none}}\n  .modal .x{position:absolute;top:16px;right:16px;width:32px;height:32px;border:none;background:var(--bg-2);border-radius:10px;\n    color:var(--ink-2);cursor:pointer;display:flex;align-items:center;justify-content:center;\n    transition:background var(--t-micro) var(--ease-press),color var(--t-micro) var(--ease-press),transform var(--t-lift) var(--ease-out)}\n  .modal .x:hover{background:var(--line);color:var(--ink);transform:rotate(90deg)}\n  .modal .x:active{transform:rotate(90deg) scale(.92);transition-duration:var(--t-press)}\n  @media (prefers-reduced-motion:reduce){.modal .x{transition:background var(--t-micro),color var(--t-micro)}.modal .x:hover,.modal .x:active{transform:none}}\n  .modal h3{font-size:24px;letter-spacing:-.03em;font-weight:600;line-height:1.08}\n  .modal .lead{margin-top:8px;color:var(--ink-2);font-size:14px;line-height:1.5}\n  .modal .live-row{display:inline-flex;align-items:center;gap:8px;font-size:11px;font-weight:600;letter-spacing:.14em;\n    text-transform:uppercase;color:var(--ink);margin-bottom:16px}\n  .modal .live-row .live{width:7px;height:7px;border-radius:50%;background:var(--live);animation:livepulse 2.2s infinite}\n  .field{margin-top:16px}\n  .field label{display:block;font-size:12px;font-weight:600;color:var(--ink);margin-bottom:7px;letter-spacing:-.005em}\n  .field input,.field select{width:100%;font:inherit;font-size:15px;color:var(--ink);background:var(--bg);\n    border:1px solid var(--line);border-radius:10px;padding:12px 14px;transition:border-color var(--t-micro) var(--ease-press),box-shadow var(--t-micro) var(--ease-press);appearance:none}\n  .field input:hover:not(:focus),.field select:hover:not(:focus){border-color:var(--line-hover)}\n  .field select{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%235f636d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E\");\n    background-repeat:no-repeat;background-position:right 12px center;padding-right:40px;cursor:pointer;color:var(--ink-3)}\n  .field select.filled{color:var(--ink)}\n  .field input::placeholder{color:var(--ink-3)}\n  .field input:focus,.field select:focus{outline:none;border-color:var(--ink);box-shadow:0 0 0 3px rgba(10,10,10,.08)}\n  .field.err input,.field.err select{border-color:var(--ink);box-shadow:0 0 0 3px rgba(10,10,10,.08)}\n  .field .msg{font-size:12px;color:var(--ink);font-weight:600;margin-top:6px;min-height:0;opacity:0;transform:translateY(-2px);transition:opacity .15s,transform .15s}\n  .field.err .msg{opacity:1;transform:none}\n  .modal .submit{width:100%;margin-top:24px;border:none;cursor:pointer;font:inherit;font-weight:600;font-size:15px;\n    color:#fff;background:var(--ink);border-radius:9999px;padding:14px 20px;display:inline-flex;align-items:center;justify-content:center;gap:8px;\n    transition:transform var(--t-lift) var(--ease-out),box-shadow var(--t-lift) var(--ease-out)}\n  .modal .submit:hover{transform:translateY(-1px);box-shadow:0 8px 20px -10px rgba(10,12,18,.5)}\n  .modal .submit:active{transform:translateY(0);box-shadow:none;transition-duration:var(--t-press)}\n  .modal .submit .arw{display:inline-block;transition:transform var(--t-lift) var(--ease-out)}\n  .modal .submit:hover .arw{transform:translateX(3px)}\n  @media (prefers-reduced-motion:reduce){.modal .submit,.modal .submit .arw{transition:none;transform:none;box-shadow:none}}\n  .modal .fine{margin-top:16px;text-align:center;font-size:12px;color:var(--ink-3)}\n  .modal .ok{text-align:center;padding:14px 0 6px}\n  .modal .ok .check{width:54px;height:54px;border-radius:50%;\n    background:var(--bg-2);color:var(--ink);border:1px solid var(--line);\n    display:flex;align-items:center;justify-content:center;margin:0 auto 18px}\n  .modal .ok h3{font-size:23px}.modal .ok p{margin-top:10px;color:var(--ink-2);font-size:14px;line-height:1.55}\n  .skip{position:absolute;
1left:16px;top:-56px;z-index:80;background:var(--ink);color:#fff;padding:10px 16px;border-radius:9999px;font-size:13px;font-weight:600;transition:top .2s var(--ease-out)}\n  .skip:focus{top:16px;outline:none;box-shadow:var(--ring-dark)}\n  .nav-logo{transition:opacity var(--t-micro) var(--ease-press)}\n  .nav-logo:hover{opacity:.8}\n  footer a:hover{color:var(--ink)}\n  .capture.ready{background:var(--field-hover)}\n  @media(max-width:640px){.nav-left{display:none}}\n  @media(max-width:480px){.capture{height:auto;background:transparent;border:none;border-radius:0;padding:0}.capture:hover{background:transparent}.capture input{position:static;height:52px;background:var(--field);border-radius:9999px;padding:0 24px}.capture .pill{position:static;margin:10px 0 0;width:100%;justify-content:center;height:52px;padding:0 24px}}\n  body.modal-open{overflow:hidden}\n  .appcard{position:fixed;right:24px;bottom:24px;z-index:40;display:flex;align-items:center;gap:16px;background:#fff;border-radius:14px;padding:18px 20px;font-size:14px;font-weight:650;letter-spacing:-.01em;line-height:1.4;color:var(--ink);box-shadow:0 14px 44px -10px rgba(10,12,18,.30),0 3px 10px rgba(10,12,18,.08);transition:transform .5s cubic-bezier(.25,.46,.45,.94),box-shadow var(--t-lift) var(--ease-out)}\n  .appcard>span:first-child{max-width:15ch}\n  .appcard .arw{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;background:var(--ink);color:#fff;flex:none;transition:transform var(--t-lift) var(--ease-out)}\n  .appcard .arw svg{display:block}\n  .appcard.appcard-hidden{transform:translateY(175%)}\n  .appcard:hover{transform:translateY(-2px);box-shadow:0 18px 48px -14px rgba(10,12,18,.34),0 2px 8px rgba(10,12,18,.08)}\n  .appcard .arw{display:inline-block;transition:transform var(--t-lift) var(--ease-out)}\n  .appcard:hover .arw{transform:translateX(3px)}\n  @media(max-width:760px){.appcard{display:none}}\n  @media (prefers-reduced-motion:reduce){.appcard,.appcard .arw{transition:none}.appcard:hover{transform:none}}\n/* Hero headline — light 300-weight Geist reads loose at 90px; tighten fit so the three rotating lines land as one confident mass */\nh1{letter-spacing:-.044em;line-height:1.05}\n\n/* Display h2 — match the hero's optical fit so both display tiers feel cut from one system */\nh2{letter-spacing:-.03em}\n\n/* Lede + hero sub — calmer leading on an 18px measure, hair of negative tracking shared across both so the grey body reads tight and intentional */\n.lede{line-height:1.55;letter-spacing:-.006em}\n.sub{line-height:1.5;letter-spacing:-.006em}\n\n/* Numeric nodes — finance-grade glyph discipline: tighter fit + slashed-zero so every figure on the page shares one tabular treatment */\n.figure{letter-spacing:-.038em;font-variant-numeric:tabular-nums slashed-zero}\n.flipcard .big{letter-spacing:-.036em;font-variant-numeric:tabular-nums slashed-zero}\n\n/* Hero entrance — tighter air to the nav (shorter gap), and NO lines: drop the\n   baseline rule under the hero (border-bottom) and the vertical divider. */\n.hero{padding-top:40px;border-bottom:none}\n\n/* Top-align the text column with the photo: the headline starts level with the\n   top of the image instead of floating vertically centred in the hero. */\n.hero-copy{justify-content:flex-start}\n\n/* Trust line — cap its measure to align the left hero column into one deliberate stack */\n.trust{max-width:42ch;line-height:1.5}\n\n/* Cells — calmer background warm-in (match the card lift duration instead of the abrupt micro tick); a touch more breathing room */\n.cell{padding:36px 32px 40px;transition:background var(--t-lift) var(--ease-out)}\n\n/* Closing lede — tighten measure to settle the centred close under its 18ch headline */\n.close .lede{max-width:44ch}\n\n/* Imagery — fold full-colour photos into the monochrome ink ladder; one desaturation recipe for every image on the page */\n.media img,.band .media img{filter:grayscale(1) contrast(1.03) brightness(1.01)}\n\n/* Property image — give it the same hairline frame every other media block carries */\n.prop-media{border-radius:12px;border:1px solid var(--line)}\n\n/* Trust strip — drop to the lightest tint so the evidence band whispers; demote the separators to pure structure */\n.strip{background:var(--bg-2)}\n.strip .sep{color:var(--line-strong);font-size:.85em}\n\n/* Micro-interactions — quiet the travel: a confident lean on the arrow, a composed card lift */\n.pill:hover .arw{transform:translateX(2px)}\n.flipcard.in:hover{transform:translateY(-2px)}\n\n/* Hero photo — the ONE spot of colour on the page (warm human focal point against\n   the monochrome rest). Overrides the grayscale imagery recipe for the hero only,\n   and centres the framing so the portrait shots aren't cropped/zoomed off-centre. */\n.hero-media img{filter:saturate(1.
104) !important;object-fit:cover;object-position:center 28%}\n",document.head.appendChild(e);const t=window.setTimeout(()=>{const e=document.querySelector(".bw-landing-root");if(e)try{n=s(e)}catch(t){o.error("initLanding failed",t)}},0);return()=>{window.clearTimeout(t),null==n||n(),e.remove()}},[]),n.jsx("div",{className:"bw-landing-root",dangerouslySetInnerHTML:{__html:t}})}export{l as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.