PageSourceSearch

https://planaroo.ai/_next/static/chunks/23561-da752e7c667cd086.js

js planaroo.ai collected 2026-10-05 13:54:02 UTC 29,231 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[23561],{35070:function(e,t,a){a.d(t,{Z:function(){return n}});let n=(0,a(79205).Z)("ArrowDown",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]])},32660:function(e,t,a){a.d(t,{Z:function(){return n}});let n=(0,a(79205).Z)("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]])},59912:function(e,t,a){a.d(t,{Z:function(){return n}});let n=(0,a(79205).Z)("ArrowUp",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]])},40476:function(e,t,a){a.d(t,{Z:function(){return n}});let n=(0,a(79205).Z)("Gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]])},52048:function(e,t,a){a.d(t,{Z:function(){return n}});let n=(0,a(79205).Z)("Map",[["path",{d:"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z",key:"169xi5"}],["path",{d:"M15 5.764v15",key:"1pn4in"}],["path",{d:"M9 3.236v15",key:"1uimfh"}]])},23561:function(e,t,a){a.r(t),a.d(t,{default:function(){return S}});var n=a(57437),s=a(2265),r=a(27648),l=a(79205);let i=(0,l.Z)("Printer",[["path",{d:"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2",key:"143wyd"}],["path",{d:"M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6",key:"1itne7"}],["rect",{x:"6",y:"14",width:"12",height:"8",rx:"1",key:"1ue0tg"}]]);var o=a(32660),c=a(42488),d=a(40476),p=a(59912),x=a(35070);let m=(0,l.Z)("Coins",[["circle",{cx:"8",cy:"8",r:"6",key:"3yglwk"}],["path",{d:"M18.09 10.37A6 6 0 1 1 10.34 18",key:"t5s6rm"}],["path",{d:"M7 6h1v4",key:"1obek4"}],["path",{d:"m16.71 13.88.7.71-2.82 2.82",key:"1rbuyh"}]]);var h=a(28124),u=a(52048),g=a(95805),b=a(70525);let f=[{id:"velocity",name:"Report Velocity",wasCalled:"average report generation usage monthly",unit:"reports / account / month",direction:"up",definition:"The average number of reports a live account generates each month, blended across every paying company.",why:"This is the expansion lever. Once a company is past its included bundle, every extra report is high-margin revenue. Drive adoption inside the branch and this number climbs."},{id:"cost",name:"Cost per Report",wasCalled:"report generation cost",unit:"\xa3 / report",direction:"down",definition:"The all-in unit cost to generate one report. The current figure is a placeholder baseline and not yet confirmed.",why:"This is the margin lever. Every pound off the unit cost drops straight to gross margin on the included bundle and on every wholesale pack we sell."}],y=[{label:"Pack of 10",qty:10,multiple:3,highlight:!0},{label:"Pack of 25",qty:25,multiple:2.7},{label:"Pack of 50",qty:50,multiple:2.4},{label:"Pack of 100",qty:100,multiple:2}],v=[{id:"merseyside",label:"Merseyside",branches:300,independentPct:.55,note:"Beachhead territory. Around 160 independent agents already mapped in our list."},{id:"north-west",label:"North West",branches:2125,independentPct:.55,note:"Full North West office count from our regional business data."},{id:"uk",label:"UK total",branches:18635,independentPct:.5,note:"Sum of every region in our business data. The whole-market ceiling."}],j="#4ab3a6",N="#0D3B3B",k="#7fdcd0",w=e=>"\xa3".concat(Math.round(e).toLocaleString("en-GB")),P=e=>"\xa3".concat(e.toLocaleString("en-GB",{minimumFractionDigits:2,maximumFractionDigits:2})),M=e=>"".concat(Math.round(100*e),"%"),C=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return e.toLocaleString("en-GB",{minimumFractionDigits:t,maximumFractionDigits:t})},R=e=>Math.max(0,Math.min(1,e));function S(e){var t;let{embedded:a=!1}
1=e,[l,c]=(0,s.useState)(4.5),[d,p]=(0,s.useState)(8),[x,m]=(0,s.useState)(249),[h,u]=(0,s.useState)(5),[g,b]=(0,s.useState)(44),[f,j]=(0,s.useState)(!1),[k,w]=(0,s.useState)(v[0].id),[P,M]=(0,s.useState)(v[0].branches),[C,S]=(0,s.useState)(v[0].independentPct),[Z,_]=(0,s.useState)(1.4),[B,V]=(0,s.useState)(.7),[q,W]=(0,s.useState)(2),[D,E]=(0,s.useState)(40),[I,O]=(0,s.useState)(.25),[U,H]=(0,s.useState)(1),K=(0,s.useMemo)(()=>(function(e){let t=Math.max(0,e.reportVelocity-e.includedReports),a=t*e.overagePricePerReport,n=e.baseLicenceMonthly+a,s=e.reportVelocity*e.costPerReport,r=n-s,l=e.includedReports*e.costPerReport;return{arpa:n,baseRevenue:e.baseLicenceMonthly,overageReports:t,overageRevenue:a,reportCogs:s,grossProfit:r,grossMarginPct:n>0?r/n:0,markupMultiple:s>0?n/s:0,baseGrossMarginPct:e.baseLicenceMonthly>0?(e.baseLicenceMonthly-l)/e.baseLicenceMonthly:0}})({baseLicenceMonthly:x,includedReports:h,costPerReport:l,reportVelocity:d,overagePricePerReport:g}),[x,h,l,d,g]),J=(0,s.useMemo)(()=>(function(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return y.map(n=>{let s=Math.round(e*n.multiple),r=Math.round(s*(1-a));return{label:n.label,qty:n.qty,pricePerReport:s,packPrice:s*n.qty,marginPct:s>0?(s-e)/s:0,multiple:s/e,agentHeadroom:s>0?t/s:0,highlight:!!n.highlight,netPricePerReport:r,netPackPrice:r*n.qty,netMarginPct:r>0?(r-e)/r:0,netMultiple:r/e}})})(l,97,f?.25:0),[l,97,f]),Q=(0,s.useMemo)(()=>(function(e){let t=e.branches*e.independentPct,a=e.branchesPerCompany>
10?t/e.branchesPerCompany:0,n=a*e.reachablePct,s=n*e.baseLicenceMonthly;return{branches:e.branches,independentBranches:t,companies:a,serviceableCompanies:n,fullPenetrationMrr:s,fullPenetrationArr:12*s,fullPenetrationMrrWithExpansion:n*e.arpa}})({branches:P,independentPct:C,branchesPerCompany:Z,reachablePct:B,baseLicenceMonthly:x,arpa:K.arpa}),[P,C,Z,B,x,K.arpa]),X=(0,s.useMemo)(()=>(function(e){let t=e.sales.reps*e.sales.companiesPerRepPerMonth*e.sales.winRate,a=[],n=0,s=null,r=Math.max(0,Math.round(e.sales.salesCycleMonths));for(let l=1;l<=e.sales.horizonMonths;l++){let i=l>r,o=Math.max(0,e.serviceableCompanies-n),c=i?Math.min(t,o):0;n+=c,null===s&&o>0&&n>=e.serviceableCompanies-.5&&(s=l),a.push({month:l,newCompanies:c,liveCompanies:n,mrr:n*e.arpa,arr:n*e.arpa*12})}return{signingsPerMonth:t,points:a,monthsToSaturate:s}})({sales:{reps:q,companiesPerRepPerMonth:D,winRate:I,salesCycleMonths:U,horizonMonths:18},arpa:K.arpa,serviceableCompanies:Q.serviceableCompanies}),[q,D,I,U,18,K.arpa,Q.serviceableCompanies]),Y=v.find(e=>e.id===k),$=X.points[X.points.length-1],ee=R(Q.serviceableCompanies>0?(null!==(t=null==$?void 0:$.liveCompanies)&&void 0!==t?t:0)/Q.serviceableCompanies:0);return(0,n.jsxs)("div",{className:a?"overflow-hidden rounded-2xl bg-white":"min-h-screen bg-gradient-to-b from-white via-[#f3faf8] to-gray-50",children:[!a&&(0,n.jsx)("header",{className:"sticky top-0 z-40 border-b border-gray-200 bg-white/90 backdrop-blur-md print:hidden",children:(0,n.jsxs)("div",{className:"mx-auto flex max-w-7xl items-center justify-between gap-4 px-4 py-3 sm:px-6",children:[(0,n.jsxs)(r.default,{href:"/",className:"flex items-center gap-2.5",children:[(0,n.jsx)("img",{src:"/planaroo-mascot-transparent.png",alt:"",className:"h-8 w-8"}),(0,n.jsx)("span",{className:"text-lg font-black tracking-tight",style:{color:N},children:"planaroo"})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsxs)("button",{type:"button",onClick:()=>window.print(),className:"inline-flex items-center gap-1.5 rounded-full border border-gray-200 bg-white px-3.5 py-1.5 text-[12px] font-bold text-gray-700 transition hover:border-[#4ab3a6]/40 hover:shadow-sm",children:[(0,n.jsx)(i,{className:"h-3.5 w-3.5"}),"Print"]}),(0,n.jsxs)(r.default,{href:"/admin",className:"inline-flex items-center gap-1.5 rounded-full border border-gray-200 bg-white px-3.5 py-1.5 text-[12px] font-bold text-gray-700 transition hover:border-[#4ab3a6]/40 hover:shadow-sm",children:[(0,n.jsx)(o.Z,{className:"h-3.5 w-3.5"}),"Admin"]})]})]})}),(0,n.jsxs)("div",{className:a?"p-3 sm:p-4":"mx-auto max-w-7xl px-4 py-5 sm:px-6",children:[(0,n.jsx)(A,{region:Y,econ:K,market:Q,endPoint:$,ramp:X,captured:ee}),(0,n.jsxs)("div",{className:"mt-4 grid gap-4 lg:grid-cols-[1.05fr_1fr]",children:[(0,n.jsx)(L,{costPerReport:l,setCostPerReport:c,reportVelocity:d,setReportVelocity:p,includedReports:h,econ:K}),(0,n.jsx)(T,{econ:K,baseLicenceMonthly:x,setBaseLicenceMonthly:m,includedReports:h,setIncludedReports:u,overagePricePerReport:g,setOveragePricePerReport:b,reportVelocity:d,costPerReport:l})]}),(0,n.jsx)("div",{className:"mt-4",children:(0,n.jsx)(z,{rateCard:J,costPerReport:l,vendorRrp:97,showFounding:f,setShowFounding:j})}),(0,n.jsxs)("div",{className:"mt-4 grid gap-4 lg:grid-cols-[1fr_1.25fr]",children:[(0,n.jsx)(F,{region:Y,regionId:k,applyRegion:e=>{let t=v.find(t=>t.id===e);t&&(w(e),M(t.branches),S(t.independentPct))},branches:P,setBranches:M,independentPct:C,setIndependentPct:S,branchesPerCompany:Z,setBranchesPerCompany:_,reachablePct:B,setReachablePct:V,market:Q,baseLicenceMonthly:x}),(0,n.jsx)(G,{reps:q,setReps:W,companiesPerRepPerMonth:D,setCompaniesPerRepPerMonth:E,winRate:I,setWinRate:O,salesCycleMonths:U,setSalesCycleMonths:H,ramp:X,arpa:K.arpa,serviceableCompanies:Q.serviceableCompanies,endPoint:$})]}),(0,n.jsx)("p",{className:"mt-4 px-1 text-[11px] leading-relaxed text-gray-400",children:"Live model. Every figure is an editable assumption, not a commitment. Cost per report is a placeholder baseline until confirmed. Logic in src/lib/sales-playbook/data.ts."})]})]})}function A(e){var t,a,s;let{region:r,econ:l,market:i,endPoint:o,ramp:d,captured:p}=e,x=l.grossMarginPct>=.6;return(0,n.jsxs)("div",{className:"relative overflow-hidden rounded-2xl border-2 border-[#4ab3a6]/30 bg-gradient-to-br from-[#4ab3a6]/10 via-white to-gray-50 shadow-sm",children:[(0,n.jsx)("div",{className:"pointer-events-none absolute inset-0 bg-[linear-gradient(to_right,#80808008_1px,transparent_1px),linear-gradient(to_bottom,#80808008_1px,transparent_1px)] bg-[size:24px_24px]"}),(0,n.jsx)("div",{className:"pointer-events-none absolute -right-16 -top-16 h-56 w-56 rounded-full bg-[#4ab3a6]/10 blur-3xl"}),(0,n.jsxs)("div",{className:"relative p-4 sm:p-5",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,n.jsxs)("span",{className:"inline-flex items-center gap-1.5 rounded-md bg-[#4ab3a6]/15 px-2 py-1 text-[10px] font-black uppercase tracking-[0.18em]",style:{color:N},children:[(0,n.jsxs)("span",{className:"relative flex h-1.5 w-1.5",children:[(0,n.jsx)("span",{className:"absolute inline-flex h-full w-full animate-ping rounded-full bg-[#4ab3a6] opacity-75"}),(0,n.jsx)("span",{className:"relative inline-flex h-1.5 w-1.5 rounded-full bg-[#4ab3a6]"})]}),"Live model"]}),(0,n.jsxs)("span",{className:"text-[12px] font-semibold text-gray-500",children:[null==r?void 0:r.label," scenario"]})]}),(0,n.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-[11px] font-bold text-gray-500",children:[(0,n.jsx)(c.Z,{className:"h-3.5 w-3.5",
1style:{color:j}}),d.monthsToSaturate?"Saturates month ".concat(d.monthsToSaturate):"Ramping past horizon"]})]}),(0,n.jsxs)("div",{className:"mt-4 flex flex-wrap items-end justify-between gap-2",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"text-[11px] font-bold uppercase tracking-[0.16em] text-gray-400",children:"Tracking to"}),(0,n.jsxs)("p",{className:"mt-0.5 text-3xl font-black tracking-tight sm:text-4xl",style:{color:N},children:[w(null!==(t=null==o?void 0:o.arr)&&void 0!==t?t:0)," ",(0,n.jsx)("span",{className:"text-base font-bold text-gray-400",children:"ARR"})]})]}),(0,n.jsxs)("p",{className:"text-[12px] font-semibold text-gray-500",children:[C(null!==(a=null==o?void 0:o.liveCompanies)&&void 0!==a?a:0,0)," of ",C(i.serviceableCompanies,0)," companies signed by month ",null!==(s=null==o?void 0:o.month)&&void 0!==s?s:0]})]}),(0,n.jsx)("div",{className:"mt-2 h-2.5 overflow-hidden rounded-full bg-gray-200/70",children:(0,n.jsx)("div",{className:"h-full rounded-full transition-all duration-500",style:{width:"".concat(100*p,"%"),background:"linear-gradient(to right, ".concat(j,", ").concat(k,")")}})}),(0,n.jsxs)("p",{className:"mt-1 text-right text-[10px] font-bold uppercase tracking-wide",style:{color:j},children:[M(p)," of the serviceable market captured"]}),(0,n.jsxs)("div",{className:"mt-4 grid grid-cols-2 gap-2.5 lg:grid-cols-4",children:[(0,n.jsx)(Z,{label:"Revenue / company / mo",value:w(l.arpa),hint:"ARPA, base + overage"}),(0,n.jsx)(Z,{label:"Gross margin",value:M(l.grossMarginPct),hint:x?"On target (60%+)":"Below 60% target",tone:x?"good":"warn"}),(0,n.jsx)(Z,{label:"Revenue vs report cost",value:"".concat(C(l.markupMultiple,1),"x"),hint:"Markup over COGS"}),(0,n.jsx)(Z,{label:"ARR at full base",value:w(i.fullPenetrationArr),hint:"If every company runs the licence"})]})]})]})}function Z(e){let{label:t,value:a,hint:s,tone:r}=e;return(0,n.jsxs)("div",{className:"rounded-xl border border-gray-200 bg-white p-3 shadow-sm",children:[(0,n.jsx)("p",{className:"text-[10px] font-bold uppercase tracking-[0.12em] text-gray-400",children:t}),(0,n.jsx)("p",{className:"mt-1 font-mono text-2xl font-black tabular-nums tracking-tight",style:{color:N},children:a}),(0,n.jsx)("p",{className:"mt-0.5 text-[10px] font-semibold ".concat("good"===r?"text-emerald-600":"warn"===r?"text-amber-600":"text-gray-400"),children:s})]})}function _(e){let{icon:t,tag:a,title:s,right:r,children:l}=e;return(0,n.jsxs)("section",{className:"flex h-full flex-col overflow-hidden rounded-2xl border border-gray-200 bg-white shadow-sm",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between gap-3 border-b border-gray-100 bg-gradient-to-r from-white to-gray-50/60 px-4 py-3",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,n.jsx)("span",{className:"flex h-8 w-8 items-center justify-center rounded-lg text-white",style:{background:"linear-gradient(135deg, ".concat(j,", ").concat(N,")")},children:(0,n.jsx)(t,{className:"h-4 w-4","aria-hidden":!0})}),(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"text-[9px] font-black uppercase tracking-[0.18em]",style:{color:j},children:a}),(0,n.jsx)("h2",{className:"text-[14px] font-black tracking-tight text-gray-900",children:s})]})]}),r]}),(0,n.jsx)("div",{className:"flex-1 p-4",children:l})]})}function L(e){let{costPerReport:t,setCostPerReport:a,reportVelocity:s,setReportVelocity:r,includedReports:l,econ:i}=e,o=f.find(e=>"velocity"===e.id),c=f.find(e=>"cost"===e.id);return(0,n.jsx)(_,{icon:d.Z,tag:"The two levers",title:"What we move",children:(0,n.jsxs)("div",{className:"space-y-3",children:[(0,n.jsx)(B,{index:"01",def:o,value:"".concat(C(s,0)),valueUnit:"reports / mo",min:1,max:40,step:1,sliderValue:s,onChange:r,format:e=>"".concat(e),note:s>l?"".concat(s-l," beyond the ").concat(l," included bill as wholesale"):"Still inside the ".concat(l," included reports")}),(0,n.jsx)(B,{index:"02",def:c,value:P(t),valueUnit:"per report",min:2,max:40,step:.05,sliderValue:t,onChange:a,format:e=>P(e),note:"Every \xa31 off lands in the ".concat(M(i.grossMarginPct)," gross margin")})]})})}function B(e){let{index:t,def:a,value:s,valueUnit:r,min:l,max:i,step:o,sliderValue:c,onChange:d,format:m,note:h}=e,u="up"===a.direction;return(0,n.jsxs)("div",{className:"rounded-xl border border-gray-200 bg-gradient-to-br from-white to-gray-50/70 p-3.5",children:[(0,n.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,n.jsx)("span",{className:"font-mono text-[11px] font-black text-gray-300",children:t}),(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"text-[13px] font-black text-gray-900",children:a.name}),(0,n.jsxs)("p",{className:"text-[10px] text-gray-400",children:["was: ",a.wasCalled]})]})]}),(0,n.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-md px-2 py-0.5 text-[9px] font-black uppercase tracking-wide ".concat(u?"bg-emerald-50 text-emerald-700":"bg-sky-50 text-sky-700"),children:[u?(0,n.jsx)(p.Z,{className:"h-3 w-3"}):(0,n.jsx)(x.Z,{className:"h-3 w-3"}),u?"Push up":"Push down"]})]}),(0,n.jsxs)("div",{className:"mt-2.5 flex items-baseline gap-2",children:[(0,n.jsx)("span",{className:"font-mono text-3xl font-black tabular-nums tracking-tight",style:{color:j},children:s}),(0,n.jsx)("span",{className:"text-[11px] text-gray-400",children:r})]}),(0,n.jsx)("input",{type:"range",min:l,max:i,step:o,value:c,onChange:e=>d(Number(e.target.value)),className:"mt-2.5 w-full cursor-pointer accent-[#4ab3a6]"}),(0,n.jsx)("p",{className:"mt-1.5 text-[11px] leading-snug text-gray-500",children:h})]})}function T(e){let{econ:t,baseLicenceMonthly:a,setBaseLicenceMonthly:s,includedReports:r,setIncludedReports:l,overagePricePerReport:i,setOveragePricePerReport:o,reportVelocity:c,costPerReport:d}=e;return(0,n.jsxs)(_,{icon:m,tag:"Per company / month",title:"Unit economics",children:[(0,n.jsxs)("div",{className:"grid grid-cols-3 gap-2",children:[(0,n.jsx)(W,{label:"Licence / mo",prefix:"\xa3",value:a,step:5,onChange:s}),(0,n.jsx)(W,{label:"Incl. reports",value:r,step:1,onChange:l}),(0,n.jsx)(W,{label:"Pack rate \xa3",prefix:"\xa3",value:i,step:1,onChange:o})]}),(0,n.jsxs)("div",{className:"mt-3 space-y-1.5",children:[(0,n.jsx)(V,{label:"Base licence",value:w(t.baseRevenue)}),(0,n.jsx)(V,{label:"Pack reports (".concat(C(t.overageReports,0)," beyond included)"),value:w(t.overageRevenue),muted:0===t.overageReports}),(0,n.jsx)(V,{label:"Revenue (ARPA)",value:w(t.arpa),strong:!0}),(0,n.jsx)(V,{label:"Report cost (".concat(C(c,0)," x ").concat(P(d),")"),value:"- ".concat(w(t.reportCogs)),negative:!0}),(0,n.jsx)(V,{label:"Gross profit",value:w(t.grossProfit),strong:!0,accent:!0})]}),(0,n.jsxs)("div",{className:"mt-3",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between text-[10px] font-bold uppercase tracking-wide text-gray-400",children:[(0,n.jsx)("span",{children:"Margin split"}),(0,n.jsxs)("span",{className:"text-emerald-600",children:[M(t.grossMarginPct)," kept"]})]}),(0,n.jsx)("div",{className:"mt-1.5 flex h-3 overflow-hidden rounded-full bg-rose-100",children:(0,n.jsx)("div",{className:"h-full transition-all duration-500",style:{width:"".concat(100*R(t.grossMarginPct),"%"),background:"linear-gradient(to right, ".concat(j,", ").concat(k,")")}})})]}),(0,n.jsxs)("div",{className:"mt-3 grid grid-cols-3 gap-2",children:[(0,n.jsx)(q,{label:"Margin",value:M(t.grossMarginPct)}),(0,n.jsx)(q,{label:"Markup",value:"".concat(C(t.markupMultiple,1),"x")}),(0,n.jsx)(q,{label:"Base margin",value:M(t.baseGrossMarginPct)})]})]})}function V(e){let{label:t,value:a,strong:s,muted:r,negative:l,accent:i}=e;return(0,n.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-md px-2 py-1.5 ".concat(i?"bg-[#4ab3a6]/10":s?"bg-gray-50":""),children:[(0,n.jsx)("span",{className:"text-[12px] ".concat(r?"text-gray-300":"text-gray-500"),children:t}),(0,n.jsx)("span",{className:"font-mono text-[13px] tabular-nums ".concat(s?"font-black":"font-semibold"," ").concat(l?"text-rose-600":s&&!i?"text-gray-900":"text-gray-700"),style:i?{color:N}:void 0,children:a})]})}function q(e){let{label:t,value:a}=e;return(0,n.jsxs)("div",{className:"rounded-lg border border-gray-200 bg-gray-50/70 px-2 py-2 text-center",children:[(0,n.jsx)("p",{className:"font-mono text-lg font-black tabular-nums",style:{color:j},children:a}),(0,n.jsx)("p",{className:"mt-0.5 text-[9px] font-bold uppercase tracking-wide text-gray-400",children:t})]})}function z(e){let{rateCard:t,costPerReport:a,vendorRrp:s,showFounding:r,setShowFounding:l}=e,i=e=>r?e.netPricePerReport:e.pricePerReport,o=e=>r?e.netPackPrice:e.packPrice,c=e=>r?e.netMarginPct:e.marginPct,d=e=>r?e.netMultiple:e.multiple;return(0,n.jsxs)(_,{icon:h.Z,tag:"What to charge for extra reports",title:"Wholesale rate console",right:(0,n.jsxs)("div",{className:"inline-flex items-center rounded-full border border-gray-200 bg-white p-0.5",children:[(0,n.jsx)("button",{type:"button",onClick:()=>l(!1),className:"rounded-full px-3 py-1 text-[11px] font-bold transition ".concat(r?"text-gray-500 hover:text-gray-800":"text-white"),style:r?void 0:{backgroundColor:N},children:"Standard"}),(0,n.jsxs)("button",{type:"button",onClick:()=>l(!0),className:"rounded-full px-3 py-1 text-[11px] font-bold transition ".concat(r?"text-white":"text-gray-500 hover:text-gray-800"),style:r?{backgroundColor:j}:void 0,children:["Founding -",M(.25)]})]}),children:[(0,n.jsxs)("div",{className:"grid grid-cols-[1.2fr_1fr_1fr_1fr_1fr] gap-x-2 border-b border-gray-100 pb-2 text-[9px] font-black uppercase tracking-wide text-gray-400",children:[(0,n.jsx)("span",{children:"Pack"}),(0,n.jsx)("span",{children:"Per report"}),(0,n.jsx)("span",{children:"Pack price"}),(0,n.jsx)("span",{children:"Our margin"}),(0,n.jsx)("span",{children:"To RRP"})]}),t.map(e=>{let t=c(e),a=2>d(e);return(0,n.jsxs)("div",{className:"grid grid-cols-[1.2fr_1fr_1fr_1fr_1fr] items-center gap-x-2 border-b border-gray-50 py-2.5 text-[12px] ".concat(e.highlight?"bg-[#4ab3a6]/[0.06]":""),children:[(0,n.jsxs)("span",{className:"flex items-center gap-1.5 font-bold text-gray-900",children:[e.label,e.highlight&&(0,n.jsx)("span",{className:"rounded bg-[#4ab3a6]/15 px-1.5 py-0.5 text-[8px] font-black uppercase",style:{color:N},children:"Common"})]}),(0,n.jsxs)("span",{className:"font-mono tabular-nums",children:[(0,n.jsx)("span",{className:"font-black",style:{color:j},children:w(i(e))}),(0,n.jsxs)("span",{className:"ml-1 text-[10px] text-gray-400",children:[C(d(e),1),"x"]})]}),(0,n.jsx)("span",{className:"font-mono font-bold tabular-nums text-gray-700",children:w(o(e))}),(0,n.jsx)("span",{className:"font-mono font-bold tabular-nums ".concat(a?"text-amber-600":"text-emerald-600"),children:M(t)}),(0,n.jsxs)("span",{className:"font-mono tabular-nums text-gray-400",children:[C(s/i(e),1),"x"]})]},e.label)}),(0,n.jsxs)("p",{className:"mt-3 text-[11px] leading-relaxed text-gray-500",children:["No single-report option: the licence includes "," ",(0,n.jsx)("span",{className:"font-bold text-gray-800",children:"5 reports"}),", then reports come in packs. Pricing is blended ",(0,n.jsx)("span",{className:"font-bold text-gray-800",children:"3x cost"})," (~67% margin), tapering to a ",(0,n.jsx)("span",{className:"font-bold text-gray-800",children:"2x floor"}
1),". At ",P(a)," ","cost the agent still has 2x to 3x headroom to the ",w(s)," consumer RRP. Amber margins sit below the 2x floor (founding stacked on the biggest packs)."]})]})}function F(e){let{region:t,regionId:a,applyRegion:s,branches:r,setBranches:l,independentPct:i,setIndependentPct:o,branchesPerCompany:c,setBranchesPerCompany:d,reachablePct:p,setReachablePct:x,market:m,baseLicenceMonthly:h}=e,g=[{label:"Branches on the portal",value:m.branches},{label:"Independent branches",value:m.independentBranches},{label:"Companies (at ".concat(C(c,1)," branches each)"),value:m.companies},{label:"Serviceable companies",value:m.serviceableCompanies}],b=g[0].value||1;return(0,n.jsxs)(_,{icon:u.Z,tag:"From branches to companies",title:"Market size",right:(0,n.jsx)("div",{className:"flex gap-1",children:v.map(e=>(0,n.jsx)("button",{type:"button",onClick:()=>s(e.id),className:"rounded-md px-2 py-1 text-[10px] font-bold transition ".concat(a===e.id?"text-white":"text-gray-500 hover:text-gray-800"),style:a===e.id?{backgroundColor:j}:void 0,children:e.label},e.id))}),children:[(0,n.jsxs)("div",{className:"grid grid-cols-2 gap-2",children:[(0,n.jsx)(W,{label:"Branches",value:r,step:10,onChange:l}),(0,n.jsx)(D,{label:"Independent",value:i,min:0,max:1,step:.05,onChange:o,format:M}),(0,n.jsx)(D,{label:"Branches / company",value:c,min:1,max:5,step:.1,onChange:d,format:e=>C(e,1)}),(0,n.jsx)(D,{label:"Reachable",value:p,min:0,max:1,step:.05,onChange:x,format:M})]}),(0,n.jsx)("div",{className:"mt-3 space-y-2",children:g.map((e,t)=>{let a=Math.max(6,e.value/b*100),s=t===g.length-1;return(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"flex items-baseline justify-between text-[11px]",children:[(0,n.jsx)("span",{className:"text-gray-500",children:e.label}),(0,n.jsx)("span",{className:"font-mono font-black tabular-nums text-gray-900",children:C(e.value,0)})]}),(0,n.jsx)("div",{className:"mt-1 h-2 overflow-hidden rounded-full bg-gray-100",children:(0,n.jsx)("div",{className:"h-full rounded-full transition-all duration-500",style:{width:"".concat(a,"%"),background:s?"linear-gradient(to right, ".concat(j,", ").concat(k,")"):"rgba(74,179,166,0.4)"}})})]},e.label)})}),(0,n.jsxs)("div",{className:"mt-3 rounded-xl border border-[#4ab3a6]/25 bg-[#4ab3a6]/[0.07] px-3 py-2.5",children:[(0,n.jsx)("p",{className:"text-[10px] font-bold uppercase tracking-wide text-gray-400",children:"Recurring revenue at full base"}),(0,n.jsxs)("p",{className:"mt-0.5 font-mono text-2xl font-black tabular-nums",style:{color:N},children:[w(m.fullPenetrationMrr),(0,n.jsx)("span",{className:"text-[12px] text-gray-400",children:" / mo"})]}),(0,n.jsxs)("p",{className:"text-[10px] text-gray-500",children:[C(m.serviceableCompanies,0)," companies x ",w(h),". ",null==t?void 0:t.note]})]})]})}function G(e){var t,a,s,r;let{reps:l,setReps:i,companiesPerRepPerMonth:o,setCompaniesPerRepPerMonth:c,winRate:d,setWinRate:p,salesCycleMonths:x,setSalesCycleMonths:m,ramp:h,arpa:u,serviceableCompanies:f,endPoint:y}=e,v=Math.max(...h.points.map(e=>e.mrr),1);return(0,n.jsxs)(_,{icon:g.Z,tag:"Turning the market into revenue",title:"Sales engine",right:(0,n.jsxs)("span",{className:"inline-flex items-center gap-1.5 rounded-md bg-gray-100 px-2 py-1 text-[10px] font-bold text-gray-600",children:[(0,n.jsx)(b.Z,{className:"h-3.5 w-3.5",style:{color:j}}),C(h.signingsPerMonth,1)," signed / active mo"]}),children:[(0,n.jsxs)("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-4",children:[(0,n.jsx)(W,{label:"Reps",value:l,step:1,onChange:i}),(0,n.jsx)(W,{label:"Co. / rep / mo",value:o,step:5,onChange:c}),(0,n.jsx)(D,{label:"Win rate",value:d,min:.05,max:.6,step:.05,onChange:p,format:M}),(0,n.jsx)(D,{label:"Cycle (mo)",value:x,min:0,max:6,step:1,onChange:m,format:e=>"".concat(e)})]}),(0,n.jsxs)("div",{className:"mt-3 rounded-xl border border-gray-200 bg-gray-50/60 p-3",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between",children:[(0,n.jsx)("p",{className:"text-[10px] font-bold uppercase tracking-wide text-gray-400",children:"MRR ramp"}),(0,n.jsxs)("p",{className:"text-[10px] text-gray-400",children:[h.points.length," months"]})]}),(0,n.jsx)("div",{className:"mt-3 flex h-28 items-end gap-0.5",children:h.points.map(e=>{let t=Math.max(3,e.mrr/v*100),a=null!=h.monthsToSaturate&&e.month>=h.monthsToSaturate;return(0,n.jsxs)("div",{className:"flex flex-1 flex-col items-center justify-end",children:[(0,n.jsx)("div",{className:"w-full rounded-t-[2px] transition-all duration-300",style:{height:"".concat(t,"%"),background:a?k:"linear-gradient(to top, ".concat(N,", ").concat(j,")")},title:"Month ".concat(e.month,": ").concat(w(e.mrr)," MRR")}),e.month%3==0&&(0,n.jsx)("span",{className:"mt-1 text-[8px] text-gray-300",children:e.month})]},e.month)})})]}),(0,n.jsxs)("div",{className:"mt-3 grid grid-cols-3 gap-2",children:[(0,n.jsx)(q,{label:"Live (mo ".concat(null!==(t=null==y?void 0:y.month)&&void 0!==t?t:0,")"),value:C(null!==(a=null==y?void 0:y.liveCompanies)&&void 0!==a?a:0,0)}),(0,n.jsx)(q,{label:"MRR",value:w(null!==(s=null==y?void 0:y.mrr)&&void 0!==s?s:0)}),(0,n.jsx)(q,{label:"ARR",value:w(null!==(r=null==y?void 0:y.arr)&&void 0!==r?r:0)})]}),(0,n.jsxs)("p",{className:"mt-2 text-[10px] text-gray-400",children:["Capped at ",C(f,0)," serviceable companies. Each new account adds ",w(u)," ","ARPA / mo."," ",h.monthsToSaturate?"Market full by month ".concat(h.monthsToSaturate,"."):"Still ramping at the horizon."]})]})}function W(e){let{label:t,value:a,step:s,onChange:r,prefix:l}=e;return(0,n.jsxs)("div",{className:"rounded-lg border border-gray-200 bg-white px-2.5 py-1.5 focus-within:border-[#4ab3a6]/50 focus-within:ring-2 focus-within:ring-[#4ab3a6]/15",children:[(0,n.jsx)("label",{className:"text-[9px] font-bold uppercase tracking-wide text-gray-400",children:t}),(0,n.jsxs)("div",{className:"flex items-center",children:[l&&(0,n.jsx)("span",{className:"mr-0.5 text-[13px] font-bold text-gray-400",children:l}),(0,n.jsx)("input",{type:"number",value:a,step:s,min:0,onChange:e=>r(Number(e.target.value)),className:"w-full bg-transparent font-mono text-[15px] font-black tabular-nums text-gray-900 outline-none [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none"})]})]})}function D(e){let{label:t,value:a,min:s,max:r,step:l,onChange:i,format:o}=e;return(0,n.jsxs)("div",{className:"rounded-lg border border-gray-200 bg-white px-2.5 py-1.5",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between",children:[(0,n.jsx)("label",{className:"text-[9px] font-bold uppercase tracking-wide text-gray-400",children:t}),(0,n.jsx)("span",{className:"font-mono text-[12px] font-black tabular-nums",style:{color:j},children:o(a)})]}),(0,n.jsx)("input",{type:"range",min:s,max:r,step:l,value:a,onChange:e=>i(Number(e.target.value)),className:"mt-1 w-full cursor-pointer accent-[#4ab3a6]"})]})}}}]);

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.