@@ -237,19 +237,19 @@ <h1 class="mt-4 text-3xl font-semibold tracking-tight sm:text-4xl">
237237 html += renderDropdown ( ) ;
238238 html += renderOverview ( data . overview ) ;
239239 html += '</div>' ;
240- html += '<div class="grid gap-4" aria-live="polite ">' ;
241- html += renderRequirements ( data . requirements , data . isPremier ) ;
242- html += renderBenefits ( data . benefits ) ;
240+ html += '<div class="space-y-4 ">' ;
241+ html += renderRequirementsCard ( data . requirements , data . isPremier ) ;
242+ html += renderBenefitsCard ( data . benefits ) ;
243243 if ( data . isStandard ) {
244- html += renderMargins ( ) ;
244+ html += renderMarginsCard ( ) ;
245245 } else {
246- html += renderDetails ( data . specific ) ;
246+ html += renderDetailsCard ( data . specific ) ;
247247 }
248- html += '</div>' ;
249- html += renderROE ( ) ;
248+ html += renderROECard ( ) ;
250249 if ( STATE . partnerType !== "Registered" ) {
251- html += renderOnboarding ( ) ;
250+ html += renderOnboardingCard ( ) ;
252251 }
252+ html += '</div>' ;
253253 html += '<footer class="pt-2 text-xs text-[#4A5568]">Preview purposes only. Program terms subject to agreement.</footer>' ;
254254 html += "</div>" ;
255255 document . getElementById ( "app" ) . innerHTML = html ;
@@ -323,7 +323,7 @@ <h3 class="text-lg font-semibold">Overview</h3>
323323 </div>
324324 ` ;
325325 }
326- function renderRequirements ( reqs , isPremier ) {
326+ function renderRequirementsCard ( reqs , isPremier ) {
327327 let listHtml = "" ;
328328 reqs . forEach ( ( r ) => {
329329 listHtml += `
@@ -351,14 +351,16 @@ <h3 class="text-lg font-semibold">Overview</h3>
351351 }
352352 }
353353 return `
354- <div class="rounded-2xl border border-[#E2E8F0] bg-white p-5 shadow-md">
355- <h3 class="text-lg font-semibold">Requirements</h3>
356- <ul class="mt-3 grid gap-2 sm:grid-cols-2">${ listHtml } </ul>
357- ${ businessPlanHtml }
358- </div>
354+ <details class="rounded-2xl border border-[#E2E8F0] bg-white shadow-md overflow-hidden">
355+ <summary class="cursor-pointer p-5 font-semibold text-lg hover:bg-[#F7F9FB] transition-colors">Requirements</summary>
356+ <div class="p-5 pt-0">
357+ <ul class="mt-3 grid gap-2 sm:grid-cols-2">${ listHtml } </ul>
358+ ${ businessPlanHtml }
359+ </div>
360+ </details>
359361 ` ;
360362 }
361- function renderBenefits ( bens ) {
363+ function renderBenefitsCard ( bens ) {
362364 let listHtml = "" ;
363365 bens . forEach ( ( b ) => {
364366 listHtml += `
@@ -369,13 +371,15 @@ <h3 class="text-lg font-semibold">Requirements</h3>
369371 ` ;
370372 } ) ;
371373 return `
372- <div class="rounded-2xl border border-[#E2E8F0] bg-white p-5 shadow-md">
373- <h3 class="text-lg font-semibold">Benefits</h3>
374- <ul class="mt-3 grid gap-2 sm:grid-cols-2">${ listHtml } </ul>
375- </div>
374+ <details class="rounded-2xl border border-[#E2E8F0] bg-white shadow-md overflow-hidden">
375+ <summary class="cursor-pointer p-5 font-semibold text-lg hover:bg-[#F7F9FB] transition-colors">Benefits</summary>
376+ <div class="p-5 pt-0">
377+ <ul class="mt-3 grid gap-2 sm:grid-cols-2">${ listHtml } </ul>
378+ </div>
379+ </details>
376380 ` ;
377381 }
378- function renderMargins ( ) {
382+ function renderMarginsCard ( ) {
379383 const disabled = STATE . partnerType === "Registered" ;
380384 const universe = STATE . model . margins [ STATE . commitment ] [ STATE . dealType ] ;
381385 const key = STATE . partnerType === "Registered" ? "Registered" : "Preferred|Premier" ;
@@ -411,40 +415,42 @@ <h3 class="text-lg font-semibold">Benefits</h3>
411415 ` ;
412416 }
413417 return `
414- <div class="rounded-2xl border border-[#E2E8F0] bg-white p-5 shadow-md">
415- <div class="flex items-start justify-between flex-col sm:flex-row gap-4">
416- <h3 class="text-lg font-semibold">Margins</h3>
417- <div class="flex flex-wrap items-center gap-3">
418- <label class="flex items-center gap-2 text-sm ${ disabled ? "opacity-60" : "" } " title="For your first 3 net-new deals, we co-sell end-to-end and you keep full margin.">
419- <input type="checkbox" id="newPartner" class="h-4 w-4 accent-[#0070F3]" ${ disabled ? "disabled" : "" } ${ STATE . newPartner ? "checked" : "" } />
420- <span>New partner boost (first 3 net-new deals)</span>
421- </label>
422- <select id="commitment" class="rounded-xl border border-[#E2E8F0] bg-white px-3 py-1 text-sm focus:ring-2 focus:ring-[#0070F3]">
423- <option ${ STATE . commitment === "Annual" ? "selected" : "" } >Annual</option>
424- <option ${ STATE . commitment === "Monthly" ? "selected" : "" } >Monthly</option>
425- </select>
426- <select id="dealType" class="rounded-xl border border-[#E2E8F0] bg-white px-3 py-1 text-sm focus:ring-2 focus:ring-[#0070F3]">
427- <option ${ STATE . dealType === "Net New" ? "selected" : "" } >Net New</option>
428- <option ${ STATE . dealType === "Renewal" ? "selected" : "" } >Renewal</option>
429- </select>
418+ <details class="rounded-2xl border border-[#E2E8F0] bg-white shadow-md overflow-hidden">
419+ <summary class="cursor-pointer p-5 font-semibold text-lg hover:bg-[#F7F9FB] transition-colors">Margins</summary>
420+ <div class="p-5 pt-0">
421+ <div class="flex items-start justify-between flex-col sm:flex-row gap-4">
422+ <div class="flex flex-wrap items-center gap-3">
423+ <label class="flex items-center gap-2 text-sm ${ disabled ? "opacity-60" : "" } " title="For your first 3 net-new deals, we co-sell end-to-end and you keep full margin.">
424+ <input type="checkbox" id="newPartner" class="h-4 w-4 accent-[#0070F3]" ${ disabled ? "disabled" : "" } ${ STATE . newPartner ? "checked" : "" } />
425+ <span>New partner boost (first 3 net-new deals)</span>
426+ </label>
427+ <select id="commitment" class="rounded-xl border border-[#E2E8F0] bg-white px-3 py-1 text-sm focus:ring-2 focus:ring-[#0070F3]">
428+ <option ${ STATE . commitment === "Annual" ? "selected" : "" } >Annual</option>
429+ <option ${ STATE . commitment === "Monthly" ? "selected" : "" } >Monthly</option>
430+ </select>
431+ <select id="dealType" class="rounded-xl border border-[#E2E8F0] bg-white px-3 py-1 text-sm focus:ring-2 focus:ring-[#0070F3]">
432+ <option ${ STATE . dealType === "Net New" ? "selected" : "" } >Net New</option>
433+ <option ${ STATE . dealType === "Renewal" ? "selected" : "" } >Renewal</option>
434+ </select>
435+ </div>
430436 </div>
437+ <div class="mt-3">${ contentHtml } </div>
431438 </div>
432- <div class="mt-3">${ contentHtml } </div>
433- </div>
439+ </details>
434440 ` ;
435441 }
436- function renderDetails ( specific ) {
442+ function renderDetailsCard ( specific ) {
437443 let tableHtml = '<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]">' ;
438444 tableHtml += `<tr><td class="px-6 py-4 text-sm font-medium">${ specific . partnerType } </td><td class="px-6 py-4 text-sm text-[#4A5568]">${ specific . tierEligibility } </td><td class="px-6 py-4 text-sm text-[#4A5568]">${ specific . margin } </td><td class="px-6 py-4 text-sm text-[#4A5568]">${ specific . dealRegistration } </td><td class="px-6 py-4 text-sm text-[#4A5568]">${ specific . mdfAccess } </td><td class="px-6 py-4 text-sm text-[#4A5568]">${ specific . enablement } </td></tr>` ;
439445 tableHtml += '</tbody></table>' ;
440446 return `
441- <div class="rounded-2xl border border-[#E2E8F0] bg-white p-5 shadow-md overflow-hidden">
442- <h3 class="text-lg font-semibold mb-4 ">Details</h3 >
443- <div class="overflow-x-auto">${ tableHtml } </div>
444- </div >
447+ <details class="rounded-2xl border border-[#E2E8F0] bg-white shadow-md overflow-hidden">
448+ <summary class="cursor-pointer p-5 font-semibold text-lg hover:bg-[#F7F9FB] transition-colors ">Details</summary >
449+ <div class="p-5 pt-0 overflow-x-auto">${ tableHtml } </div>
450+ </details >
445451 ` ;
446452 }
447- function renderROE ( ) {
453+ function renderROECard ( ) {
448454 let principlesTable = '<table class="min-w-full divide-y divide-[#E2E8F0]"><thead><tr><th class="px-6 py-3 text-left text-sm font-semibold">Principle</th><th class="px-6 py-3 text-left text-sm font-semibold">Description</th><th class="px-6 py-3 text-left text-sm font-semibold">Intent</th></tr></thead><tbody class="divide-y divide-[#E2E8F0]">' ;
449455 STATE . model . roe . principles . forEach ( ( p ) => {
450456 principlesTable += `<tr><td class="px-6 py-4 text-sm font-medium">${ p . principle } </td><td class="px-6 py-4 text-sm text-[#4A5568]">${ p . description } </td><td class="px-6 py-4 text-sm text-[#4A5568]">${ p . intent } </td></tr>` ;
@@ -469,27 +475,30 @@ <h3 class="text-lg font-semibold mb-4">Details</h3>
469475 } ) ;
470476 summaryTable += '</tbody></table>' ;
471477 return `
472- <div class="mt-8 space-y-8">
473- <div class="rounded-2xl border border-[#E2E8F0] bg-white shadow-md overflow-hidden">
474- <h3 class="text-lg font-semibold p-5 border-b border-[#E2E8F0]">Rules of Engagement (ROE)</h3>
475- <div class="overflow-x-auto">${ principlesTable } </div>
476- </div>
477- <div class="rounded-2xl border border-[#E2E8F0] bg-white shadow-md overflow-hidden">
478- <h3 class="text-lg font-semibold p-5 border-b border-[#E2E8F0]">Margin Bands & Definitions</h3>
479- <div class="overflow-x-auto">${ bandsTable } </div>
480- </div>
481- <div class="rounded-2xl border border-[#E2E8F0] bg-white shadow-md overflow-hidden">
482- <h3 class="text-lg font-semibold p-5 border-b border-[#E2E8F0]">Partner Margin Governance</h3>
483- <div class="overflow-x-auto">${ governanceTable } </div>
484- </div>
485- <div class="rounded-2xl border border-[#E2E8F0] bg-white shadow-md overflow-hidden">
486- <h3 class="text-lg font-semibold p-5 border-b border-[#E2E8F0]">Example Summary Table</h3>
487- <div class="overflow-x-auto">${ summaryTable } </div>
478+ <details class="rounded-2xl border border-[#E2E8F0] bg-white shadow-md overflow-hidden">
479+ <summary class="cursor-pointer p-5 font-semibold text-lg hover:bg-[#F7F9FB] transition-colors">Rules of Engagement</summary>
480+ <div class="p-5 pt-0 space-y-8">
481+ <div class="rounded-2xl border border-[#E2E8F0] bg-white shadow-md overflow-hidden">
482+ <h3 class="text-lg font-semibold p-5 border-b border-[#E2E8F0]">Rules of Engagement (ROE)</h3>
483+ <div class="overflow-x-auto">${ principlesTable } </div>
484+ </div>
485+ <div class="rounded-2xl border border-[#E2E8F0] bg-white shadow-md overflow-hidden">
486+ <h3 class="text-lg font-semibold p-5 border-b border-[#E2E8F0]">Margin Bands & Definitions</h3>
487+ <div class="overflow-x-auto">${ bandsTable } </div>
488+ </div>
489+ <div class="rounded-2xl border border-[#E2E8F0] bg-white shadow-md overflow-hidden">
490+ <h3 class="text-lg font-semibold p-5 border-b border-[#E2E8F0]">Partner Margin Governance</h3>
491+ <div class="overflow-x-auto">${ governanceTable } </div>
492+ </div>
493+ <div class="rounded-2xl border border-[#E2E8F0] bg-white shadow-md overflow-hidden">
494+ <h3 class="text-lg font-semibold p-5 border-b border-[#E2E8F0]">Example Summary Table</h3>
495+ <div class="overflow-x-auto">${ summaryTable } </div>
496+ </div>
488497 </div>
489- </div >
498+ </details >
490499 ` ;
491500 }
492- function renderOnboarding ( ) {
501+ function renderOnboardingCard ( ) {
493502 const steps = STATE . model . onboarding . steps ;
494503 let buttonsHtml = "" ;
495504 steps . forEach ( ( s , i ) => {
@@ -516,13 +525,15 @@ <h3 class="text-lg font-semibold p-5 border-b border-[#E2E8F0]">Example Summary
516525 ` ;
517526 } ) ;
518527 return `
519- <div class="mt-8 rounded-2xl border border-[#E2E8F0] bg-white p-5 shadow-md">
520- <div class="flex items-start justify-between flex-col sm:flex-row gap-4">
521- <h3 class="text-lg font-semibold">Onboarding Requirements</h3>
522- <div class="flex gap-2">${ buttonsHtml } </div>
528+ <details class="rounded-2xl border border-[#E2E8F0] bg-white shadow-md overflow-hidden">
529+ <summary class="cursor-pointer p-5 font-semibold text-lg hover:bg-[#F7F9FB] transition-colors">Onboarding Requirements</summary>
530+ <div class="p-5 pt-0">
531+ <div class="flex items-start justify-between flex-col sm:flex-row gap-4">
532+ <div class="flex gap-2">${ buttonsHtml } </div>
533+ </div>
534+ <ul class="mt-3 grid gap-2 sm:grid-cols-2">${ listHtml } </ul>
523535 </div>
524- <ul class="mt-3 grid gap-2 sm:grid-cols-2">${ listHtml } </ul>
525- </div>
536+ </details>
526537 ` ;
527538 }
528539 function renderBusinessPlan ( ) {
0 commit comments