@@ -168,23 +168,30 @@ <h1 class="mt-4 text-3xl font-semibold tracking-tight sm:text-4xl">
168168 { tier : "Registered / LAR" , engagement : "Transactional (Band 3)" , involvement : "High-touch / Recast-led" , range : "0–5%" , notes : "Finder’s fee or referral incentive" } ,
169169 ] ,
170170 } ,
171+ other : {
172+ partners : [
173+ { partnerType : "MSP" , tierEligibility : "Premier" , margin : "Negotiated within Band 1–3 framework" , dealRegistration : "Required" , mdfAccess : "Strategic MDF" , enablement : "Dedicated Channel Manager, SE alignment, joint QBRs" } ,
174+ { partnerType : "Technology Partner (ISV)" , tierEligibility : "Premier" , margin : "Negotiated; typically Band 2 equivalent + referral incentives" , dealRegistration : "Optional" , mdfAccess : "Co-marketing only" , enablement : "Developer enablement, API/SDK certification" } ,
175+ { partnerType : "OEM Partner" , tierEligibility : "Premier" , margin : "Embedded / co-sell pricing (not margin-based)" , dealRegistration : "N/A" , mdfAccess : "Strategic MDF" , enablement : "OEM SDK, roadmap collaboration, joint solution blueprints" } ,
176+ { partnerType : "Distributor Partner" , tierEligibility : "Premier" , margin : "Transactional (Band 3 equivalent, pre-negotiated)" , dealRegistration : "Required" , mdfAccess : "Tiered MDF by volume" , enablement : "Distributor onboarding toolkit, partner training delivery" } ,
177+ ]
178+ }
171179 }
172180 } ;
173- const TIERS = [ "Registered" , "Preferred" , "Premier" ] ;
181+ const TIERS = [ "Registered" , "Preferred" , "Premier" , "Other" ] ;
174182 function render ( ) {
175183 if ( STATE . tier === "Registered" ) {
176184 STATE . newPartner = false ;
177185 }
178186 let html = '<div class="space-y-6">' ;
179- html += '<section class="grid gap-3 sm:grid-cols-3 ">' ;
187+ html += '<section class="grid gap-3 sm:grid-cols-4 ">' ;
180188 TIERS . forEach ( ( t ) => {
181189 const active = STATE . tier === t ;
182- const subtitle =
183- t === "Registered"
184- ? "Access & referral economics"
185- : t === "Preferred"
186- ? "Pipeline tools, CRM access, joint motions"
187- : "Campaigns + priority support" ;
190+ let subtitle = "" ;
191+ if ( t === "Registered" ) subtitle = "Access & referral economics" ;
192+ if ( t === "Preferred" ) subtitle = "Pipeline tools, CRM access, joint motions" ;
193+ if ( t === "Premier" ) subtitle = "Campaigns + priority support" ;
194+ if ( t === "Other" ) subtitle = "Specialized partner types" ;
188195 html += `
189196 <button
190197 class="${
@@ -205,40 +212,44 @@ <h1 class="mt-4 text-3xl font-semibold tracking-tight sm:text-4xl">
205212 ` ;
206213 } ) ;
207214 html += "</section>" ;
208- html += '<nav role="tablist" aria-label="Sections" class="flex flex-wrap gap-2 rounded-full bg-white p-1 shadow-sm border border-[#E2E8F0]">' ;
209- const tabs = [
210- { id : "takes" , label : "What it takes" } ,
211- { id : "gets" , label : "What you get" } ,
212- { id : "margins" , label : "Margins" } ,
213- { id : "onboarding" , label : "Onboarding" } ,
214- ] ;
215- tabs . forEach ( ( tabObj ) => {
216- const active = STATE . tab === tabObj . id ;
217- html += `
218- <button
219- role="tab"
220- aria-selected="${ active } "
221- class="${
222- active ? "bg-[#0070F3] text-white" : "hover:bg-[#F7F9FB]"
223- } rounded-full px-4 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-[#0070F3]"
224- data-tab="${ tabObj . id } "
225- >
226- ${ tabObj . label }
227- </button>
228- ` ;
229- } ) ;
230- html += "</nav>" ;
231- html += '<div class="grid gap-4" aria-live="polite">' ;
232- if ( STATE . tab === "takes" ) {
233- html += renderWhatItTakes ( ) ;
234- } else if ( STATE . tab === "gets" ) {
235- html += renderWhatYouGet ( ) ;
236- } else if ( STATE . tab === "margins" ) {
237- html += renderMargins ( ) ;
238- } else if ( STATE . tab === "onboarding" ) {
239- html += renderOnboarding ( ) ;
215+ if ( STATE . tier === "Other" ) {
216+ html += renderOther ( ) ;
217+ } else {
218+ html += '<nav role="tablist" aria-label="Sections" class="flex flex-wrap gap-2 rounded-full bg-white p-1 shadow-sm border border-[#E2E8F0]">' ;
219+ const tabs = [
220+ { id : "takes" , label : "What it takes" } ,
221+ { id : "gets" , label : "What you get" } ,
222+ { id : "margins" , label : "Margins" } ,
223+ { id : "onboarding" , label : "Onboarding" } ,
224+ ] ;
225+ tabs . forEach ( ( tabObj ) => {
226+ const active = STATE . tab === tabObj . id ;
227+ html += `
228+ <button
229+ role="tab"
230+ aria-selected="${ active } "
231+ class="${
232+ active ? "bg-[#0070F3] text-white" : "hover:bg-[#F7F9FB]"
233+ } rounded-full px-4 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-[#0070F3]"
234+ data-tab="${ tabObj . id } "
235+ >
236+ ${ tabObj . label }
237+ </button>
238+ ` ;
239+ } ) ;
240+ html += "</nav>" ;
241+ html += '<div class="grid gap-4" aria-live="polite">' ;
242+ if ( STATE . tab === "takes" ) {
243+ html += renderWhatItTakes ( ) ;
244+ } else if ( STATE . tab === "gets" ) {
245+ html += renderWhatYouGet ( ) ;
246+ } else if ( STATE . tab === "margins" ) {
247+ html += renderMargins ( ) ;
248+ } else if ( STATE . tab === "onboarding" ) {
249+ html += renderOnboarding ( ) ;
250+ }
251+ html += "</div>" ;
240252 }
241- html += "</div>" ;
242253 html += '<footer class="pt-2 text-xs text-[#4A5568]">Preview purposes only. Program terms subject to agreement.</footer>' ;
243254 html += "</div>" ;
244255 document . getElementById ( "app" ) . innerHTML = html ;
@@ -248,13 +259,15 @@ <h1 class="mt-4 text-3xl font-semibold tracking-tight sm:text-4xl">
248259 render ( ) ;
249260 } ) ;
250261 } ) ;
251- document . querySelectorAll ( "[data-tab]" ) . forEach ( ( btn ) => {
252- btn . addEventListener ( "click" , ( ) => {
253- STATE . tab = btn . dataset . tab ;
254- render ( ) ;
262+ if ( STATE . tier !== "Other" ) {
263+ document . querySelectorAll ( "[data-tab]" ) . forEach ( ( btn ) => {
264+ btn . addEventListener ( "click" , ( ) => {
265+ STATE . tab = btn . dataset . tab ;
266+ render ( ) ;
267+ } ) ;
255268 } ) ;
256- } ) ;
257- if ( STATE . tab === "margins" ) {
269+ }
270+ if ( STATE . tab === "margins" && STATE . tier !== "Other" ) {
258271 const commitmentSelect = document . getElementById ( "commitment" ) ;
259272 if ( commitmentSelect ) {
260273 commitmentSelect . addEventListener ( "change" , ( e ) => {
@@ -284,7 +297,7 @@ <h1 class="mt-4 text-3xl font-semibold tracking-tight sm:text-4xl">
284297 } ) ;
285298 }
286299 }
287- if ( STATE . tab === "onboarding" ) {
300+ if ( STATE . tab === "onboarding" && STATE . tier !== "Other" ) {
288301 document . querySelectorAll ( "[data-step]" ) . forEach ( ( btn ) => {
289302 btn . addEventListener ( "click" , ( ) => {
290303 STATE . activeStep = parseInt ( btn . dataset . step ) ;
@@ -485,6 +498,19 @@ <h3 class="text-lg font-semibold">Onboarding (Preferred & Premier)</h3>
485498 </div>
486499 ` ;
487500 }
501+ function renderOther ( ) {
502+ let otherTable = '<table class="min-w-full divide-y divide-[#E2E8F0]"><thead><tr><th class="px-6 py-3 text-left text-sm font-semibold">Partner Type</th><th class="px-6 py-3 text-left text-sm font-semibold">Tier Eligibility</th><th class="px-6 py-3 text-left text-sm font-semibold">Margin</th><th class="px-6 py-3 text-left text-sm font-semibold">Deal Registration</th><th class="px-6 py-3 text-left text-sm font-semibold">MDF Access</th><th class="px-6 py-3 text-left text-sm font-semibold">Enablement</th></tr></thead><tbody class="divide-y divide-[#E2E8F0]">' ;
503+ STATE . model . other . partners . forEach ( ( p ) => {
504+ otherTable += `<tr><td class="px-6 py-4 text-sm font-medium">${ p . partnerType } </td><td class="px-6 py-4 text-sm text-[#4A5568]">${ p . tierEligibility } </td><td class="px-6 py-4 text-sm text-[#4A5568]">${ p . margin } </td><td class="px-6 py-4 text-sm text-[#4A5568]">${ p . dealRegistration } </td><td class="px-6 py-4 text-sm text-[#4A5568]">${ p . mdfAccess } </td><td class="px-6 py-4 text-sm text-[#4A5568]">${ p . enablement } </td></tr>` ;
505+ } ) ;
506+ otherTable += '</tbody></table>' ;
507+ return `
508+ <div class="mt-4 rounded-2xl border border-[#E2E8F0] bg-white shadow-md overflow-hidden">
509+ <h3 class="text-lg font-semibold p-5 border-b border-[#E2E8F0]">Other Partner Types</h3>
510+ <div class="overflow-x-auto">${ otherTable } </div>
511+ </div>
512+ ` ;
513+ }
488514 document . addEventListener ( "DOMContentLoaded" , ( ) => {
489515 render ( ) ;
490516 } ) ;
0 commit comments