<!doctype html>
<html lang="en"
class="h-full">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<title>ARIA - Financial
Intelligence Platform</title>
<script
src="https://cdn.tailwindcss.com"></script>
<script
src="/_sdk/element_sdk.js"></script>
<link
href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700;800&family=Inter:wght@400;500;600&display=swap"
rel="stylesheet">
<style>
body {
box-sizing: border-box;
}
.font-display {
font-family: 'Outfit',
sans-serif;
}
.font-body {
font-family: 'Inter',
sans-serif;
}
@keyframes slide-up {
from {
opacity: 0;
transform:
translateY(30px);
}
to {
opacity: 1;
transform:
translateY(0);
}
}
@keyframes fade-in {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes scale-in {
from {
opacity: 0;
transform:
scale(0.95);
}
to {
opacity: 1;
transform: scale(1);
}
}
.animate-slide-up {
animation: slide-up 0.6s
cubic-bezier(0.16, 1, 0.3, 1) forwards;
}
.animate-fade-in {
animation: fade-in 0.4s
ease-out forwards;
}
.animate-scale-in {
animation: scale-in 0.5s
cubic-bezier(0.16, 1, 0.3, 1) forwards;
}
.card-gamma {
transition: all 0.4s
cubic-bezier(0.16, 1, 0.3, 1);
background: white;
border-radius: 16px;
}
.card-gamma:hover {
transform:
translateY(-8px);
box-shadow: 0 20px 40px
rgba(0, 0, 0, 0.12);
}
.btn-gamma {
transition: all 0.3s
cubic-bezier(0.16, 1, 0.3, 1);
}
.btn-gamma:hover {
transform:
translateY(-2px);
box-shadow: 0 8px 20px
rgba(99, 102, 241, 0.3);
}
.tab-btn {
transition: all 0.2s ease;
position: relative;
}
.tab-btn::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 2px;
background: #6366f1;
transform: scaleX(0);
transition: transform 0.3s
ease;
}
.tab-btn.active::after {
transform: scaleX(1);
}
.gradient-mesh {
background:
radial-gradient(at
0% 0%, rgba(99, 102, 241, 0.08) 0px, transparent 50%),
radial-gradient(at
100% 0%, rgba(139, 92, 246, 0.06) 0px, transparent 50%),
radial-gradient(at
100% 100%, rgba(236, 72, 153, 0.05) 0px, transparent 50%),
radial-gradient(at
0% 100%, rgba(59, 130, 246, 0.07) 0px, transparent 50%);
}
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: #e2e8f0;
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: #cbd5e1;
}
.metric-card {
background:
linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
.status-dot {
animation: pulse 2s
cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
@keyframes pulse {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.5;
}
}
.frosted-glass {
backdrop-filter: blur(12px)
saturate(180%);
background: rgba(255, 255,
255, 0.8);
border: 1px solid rgba(255,
255, 255, 0.3);
}
</style>
<style>@view-transition {
navigation: auto; }</style>
<script
src="/_sdk/data_sdk.js"
type="text/javascript"></script>
</head>
<body class="h-full bg-slate-50
text-slate-900 font-body overflow-auto">
<div id="app-wrapper"
class="h-full w-full relative gradient-mesh"><!-- Floating
Header -->
<header class="sticky top-0
z-50 frosted-glass border-b border-slate-200/60">
<div class="max-w-7xl
mx-auto px-6 py-4">
<div class="flex
items-center justify-between">
<div class="flex
items-center gap-3">
<div
class="w-10 h-10 rounded-xl bg-gradient-to-br from-indigo-500
to-purple-600 flex items-center justify-center shadow-lg">
<svg
class="w-5 h-5 text-white" fill="none"
stroke="currentColor" viewbox="0 0 24 24"><path
stroke-linecap="round" stroke-linejoin="round"
stroke-width="2.5" d="M13 10V3L4 14h7v7l9-11h-7z" />
</svg>
</div>
<div>
<h1
id="assistant-name" class="text-xl font-display font-bold
text-slate-900">ARIA</h1>
</div>
</div>
<div class="flex
items-center gap-3"><button class="px-4 py-2 text-sm
font-medium text-slate-700 hover:bg-white rounded-lg
transition-colors">
<svg
class="w-5 h-5" fill="none" stroke="currentColor"
viewbox="0 0 24 24"><path stroke-linecap="round"
stroke-linejoin="round" stroke-width="2" d="M15
17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0
10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6
0v1a3 3 0 11-6 0v-1m6 0H9" />
</svg></button>
<div
class="flex items-center gap-2 px-3 py-2 bg-white rounded-lg border
border-slate-200">
<div
class="w-8 h-8 rounded-full bg-gradient-to-br from-indigo-400
to-purple-500 flex items-center justify-center text-white text-sm
font-semibold">
A
</div><span
class="text-sm font-medium text-slate-700">Admin</span>
</div>
</div>
</div>
</div>
</header>
<main class="max-w-7xl
mx-auto px-6 py-12"><!-- Hero Section -->
<div class="mb-16
text-center animate-slide-up">
<div
class="inline-flex items-center gap-2 px-4 py-2 bg-indigo-50 rounded-full
mb-6">
<div class="w-2 h-2
bg-indigo-500 rounded-full status-dot"></div><span
class="text-sm font-medium text-indigo-700">All systems
operational</span>
</div>
<h2
id="main-title" class="text-5xl md:text-6xl font-display
font-bold text-slate-900 mb-4 leading-tight">Financial
Intelligence<br>
Made Simple</h2>
<p
id="subtitle" class="text-xl text-slate-600 max-w-2xl mx-auto
mb-8">Transform Data into Living Stories — Where Insights Spark
Impact</p><!-- Search Bar -->
<form
onsubmit="handleGenerate(event)" class="max-w-3xl mx-auto
mb-6">
<div
class="relative group"><label for="user-input"
class="sr-only">Search or ask anything</label> <input
type="text" id="user-input" placeholder="Ask about revenue
trends, generate briefings, or explore your data..." class="w-full
px-6 py-5 pr-32 bg-white border-2 border-slate-200 rounded-2xl text-base
text-slate-900 placeholder-slate-400 focus:border-indigo-500 focus:ring-4
focus:ring-indigo-100 transition-all shadow-lg shadow-slate-200/50">
<button type="submit" class="absolute right-2 top-1/2 -translate-y-1/2
px-6 py-3 bg-indigo-600 hover:bg-indigo-700 text-white font-semibold rounded-xl
transition-all flex items-center gap-2 btn-gamma">
<span>Generate</span>
<svg
class="w-4 h-4" fill="none" stroke="currentColor"
viewbox="0 0 24 24"><path stroke-linecap="round"
stroke-linejoin="round" stroke-width="2" d="M13 7l5
5m0 0l-5 5m5-5H6" />
</svg></button>
</div>
</form><!-- Quick
Actions -->
<div class="flex
flex-wrap items-center justify-center gap-3"><button
onclick="quickAction('briefing')" class="px-4 py-2 bg-white
hover:bg-slate-50 border border-slate-200 rounded-xl text-sm font-medium
text-slate-700 transition-all flex items-center gap-2"> <span>📄</span> Executive Brief </button>
<button onclick="quickAction('analytics')" class="px-4 py-2
bg-white hover:bg-slate-50 border border-slate-200 rounded-xl text-sm
font-medium text-slate-700 transition-all flex items-center gap-2">
<span>📊</span> SAP
Analytics </button> <button
onclick="quickAction('timeline')" class="px-4 py-2 bg-white
hover:bg-slate-50 border border-slate-200 rounded-xl text-sm font-medium
text-slate-700 transition-all flex items-center gap-2"> <span>📅</span> Timeline </button>
<button onclick="quickAction('podcast')" class="px-4 py-2
bg-white hover:bg-slate-50 border border-slate-200 rounded-xl text-sm
font-medium text-slate-700 transition-all flex items-center gap-2">
<span>🎙️</span> Audio
Overview </button>
</div>
</div><!-- Tabs -->
<div class="mb-8">
<div class="flex
items-center gap-1 border-b border-slate-200"><button
onclick="setTab('all')" class="tab-btn active px-6 py-3 text-sm
font-semibold text-slate-900" data-tab="all"> All Content
</button> <button onclick="setTab('reports')"
class="tab-btn px-6 py-3 text-sm font-semibold text-slate-500
hover:text-slate-900" data-tab="reports"> Reports
</button> <button onclick="setTab('analytics')"
class="tab-btn px-6 py-3 text-sm font-semibold text-slate-500
hover:text-slate-900" data-tab="analytics"> Analytics
</button> <button onclick="setTab('insights')"
class="tab-btn px-6 py-3 text-sm font-semibold text-slate-500
hover:text-slate-900" data-tab="insights"> Insights
</button>
</div>
</div><!-- Content Grid
-->
<div
id="content-grid" class="grid grid-cols-1 md:grid-cols-2
lg:grid-cols-3 gap-6"><!-- Generated cards will appear here -->
</div>
</main><!-- Floating
Action Button --> <button onclick="scrollToTop()"
class="fixed bottom-8 right-8 w-14 h-14 bg-indigo-600 hover:bg-indigo-700
text-white rounded-full shadow-2xl shadow-indigo-500/30 flex items-center
justify-center transition-all btn-gamma">
<svg class="w-6 h-6"
fill="none" stroke="currentColor" viewbox="0 0 24
24"><path stroke-linecap="round"
stroke-linejoin="round" stroke-width="2" d="M5 10l7-7m0
0l7 7m-7-7v18" />
</svg></button>
</div>
<script>
const defaultConfig = {
assistant_name: 'ARIA',
main_title: 'Financial
Intelligence\nMade Simple',
subtitle: 'Transform Data
into Living Stories — Where Insights Spark Impact',
primary_color: '#6366f1',
secondary_color: '#8b5cf6',
background_color:
'#f8fafc',
text_color: '#1e293b',
accent_color: '#ec4899'
};
let config = { ...defaultConfig };
let currentTab = 'all';
let audioPlaying = false;
const contentTemplates = {
briefing: {
title: 'Q4 Executive
Briefing',
type: 'briefing',
category: 'reports',
icon: '📄',
color:
'from-blue-500 to-cyan-500',
data: {
summary:
'Strong quarterly performance with 34% revenue growth and improved operational
metrics across all segments.',
keyMetrics: [
{
label: 'Revenue', value: '$12.4M', change: '+34%' },
{
label: 'EBITDA Margin', value: '28%', change: '+6%' },
{
label: 'Operating Cash', value: '$4.1M', change: '+42%' }
],
insights: [
'Customer acquisition costs decreased by 15%',
'Enterprise segment grew 47% YoY',
'International expansion contributed $2.1M in new revenue'
]
}
},
analytics: {
title: 'SAP Revenue
Analytics',
type: 'analytics',
category:
'analytics',
icon: '📊',
color:
'from-purple-500 to-pink-500',
data: {
metric:
'Total Revenue',
value:
'$12.4M',
change:
'+34%',
trend: [65,
68, 72, 78, 82, 85, 88, 92, 95, 98, 100],
breakdown: [
{
label: 'Americas', value: '$6.2M', percent: 50 },
{
label: 'EMEA', value: '$3.7M', percent: 30 },
{
label: 'APAC', value: '$2.5M', percent: 20 }
]
}
},
timeline: {
title: 'Financial
Timeline 2024',
type: 'timeline',
category:
'insights',
icon: '📅',
color:
'from-emerald-500 to-teal-500',
events: [
{ quarter:
'Q1 2024', revenue: '$9.2M', growth: '+12%', status: 'completed', highlight:
'Successful product launch' },
{ quarter:
'Q2 2024', revenue: '$10.8M', growth: '+17%', status: 'completed', highlight:
'Expanded to EMEA' },
{ quarter:
'Q3 2024', revenue: '$12.4M', growth: '+34%', status: 'completed', highlight:
'Record quarter' },
{ quarter:
'Q4 2024', revenue: '$14.5M*', growth: '+40%*', status: 'projected', highlight:
'Projected growth' }
]
},
podcast: {
title: 'Financial
Deep Dive Podcast',
type: 'podcast',
category:
'insights',
icon: '🎙️',
color:
'from-orange-500 to-red-500',
data: {
duration:
'12:45',
description:
'AI-generated discussion covering Q4 performance, market trends, and strategic
outlook',
topics:
['Revenue Analysis', 'Market Expansion', 'Strategic Initiatives', 'Q1
Outlook'],
hosts:
['Financial AI', 'Data Expert']
}
},
studyguide: {
title: 'Financial
Study Guide',
type: 'studyguide',
category: 'reports',
icon: '📚',
color:
'from-indigo-500 to-blue-500',
sections: [
{
title:
'Key Takeaways',
items:
[
'Revenue increased 34% YoY to $12.4M',
'Customer retention improved to 94%',
'New product lines contributed $1.8M'
]
},
{
title:
'Strategic Priorities',
items:
[
'Expand international presence',
'Launch 3 new product features',
'Optimize customer acquisition funnel'
]
}
]
},
faq: {
title: 'Financial
FAQ',
type: 'faq',
category:
'insights',
icon: '❓',
color:
'from-violet-500 to-purple-500',
questions: [
{
q:
'What drove the 34% revenue growth?',
a:
'Growth was driven by strong enterprise sales (+47%), successful international
expansion ($2.1M), and improved pricing strategy resulting in 18% higher
average contract values.'
},
{
q:
'How sustainable is this growth rate?',
a:
'Based on current pipeline and market conditions, we project 25-30% growth for
next quarter with strong indicators for continued expansion in our core
segments.'
},
{
q:
'What are the biggest risks?',
a:
'Key risks include customer concentration (top 5 = 42% revenue), FX exposure in
international markets, and potential economic headwinds affecting enterprise
spending.'
}
]
}
};
function renderCard(template) {
const container =
document.getElementById('content-grid');
let cardHTML = '';
if (template.type ===
'briefing') {
cardHTML = `
<div
class="card-gamma p-6 shadow-lg animate-scale-in"
data-category="${template.category}">
<div class="flex items-start justify-between mb-4">
<div class="flex items-center gap-3">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br
${template.color} flex items-center justify-center text-2xl shadow-lg">
${template.icon}
</div>
<div>
<h3 class="text-lg font-display font-bold
text-slate-900">${template.title}</h3>
<p class="text-sm text-slate-500">Executive
Report</p>
</div>
</div>
</div>
<p
class="text-sm text-slate-600 leading-relaxed
mb-4">${template.data.summary}</p>
<div class="grid grid-cols-3 gap-3 mb-4">
${template.data.keyMetrics.map(metric => `
<div class="p-3 bg-slate-50 rounded-lg">
<div class="text-xs text-slate-500
mb-1">${metric.label}</div>
<div class="text-lg font-bold
text-slate-900">${metric.value}</div>
<div class="text-xs font-semibold
text-emerald-600">${metric.change}</div>
</div>
`).join('')}
</div>
<div class="space-y-2">
${template.data.insights.map(insight => `
<div class="flex items-start gap-2 text-sm
text-slate-600">
<svg class="w-4 h-4 text-indigo-500 mt-0.5
flex-shrink-0" fill="currentColor" viewBox="0 0 20
20">
<path fill-rule="evenodd" d="M10 18a8 8
0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1
1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"
clip-rule="evenodd"/>
</svg>
<span>${insight}</span>
</div>
`).join('')}
</div>
<button class="mt-4 w-full py-2.5 bg-slate-900 hover:bg-slate-800
text-white text-sm font-semibold rounded-lg transition-all">
View Full Report
</button>
</div>
`;
} else if (template.type
=== 'analytics') {
cardHTML = `
<div
class="card-gamma p-6 shadow-lg animate-scale-in"
data-category="${template.category}">
<div class="flex items-start justify-between mb-4">
<div class="flex items-center gap-3">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br
${template.color} flex items-center justify-center text-2xl shadow-lg">
${template.icon}
</div>
<div>
<h3 class="text-lg font-display font-bold
text-slate-900">${template.title}</h3>
<p class="text-sm
text-slate-500">${template.data.metric}</p>
</div>
</div>
<div class="px-2 py-1 bg-emerald-50 text-emerald-700 text-xs
font-semibold rounded-md">Live</div>
</div>
<div class="mb-6">
<div class="text-3xl font-display font-bold text-slate-900
mb-1">${template.data.value}</div>
<div class="text-sm font-semibold
text-emerald-600">${template.data.change} from last quarter</div>
</div>
<div class="flex items-end justify-between gap-1 h-24 mb-6">
${template.data.trend.map(v => `
<div class="flex-1 bg-gradient-to-t ${template.color} rounded-t
opacity-80 hover:opacity-100 transition-opacity" style="height:
${v}%"></div>
`).join('')}
</div>
<div class="space-y-3">
${template.data.breakdown.map(item => `
<div>
<div class="flex items-center justify-between text-sm
mb-1">
<span
class="text-slate-600">${item.label}</span>
<span class="font-semibold
text-slate-900">${item.value}</span>
</div>
<div class="w-full bg-slate-100 rounded-full
h-2">
<div class="bg-gradient-to-r ${template.color} h-2
rounded-full transition-all" style="width:
${item.percent}%"></div>
</div>
</div>
`).join('')}
</div>
</div>
`;
} else if (template.type
=== 'timeline') {
cardHTML = `
<div
class="card-gamma p-6 shadow-lg animate-scale-in"
data-category="${template.category}">
<div class="flex items-center gap-3 mb-6">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br ${template.color}
flex items-center justify-center text-2xl shadow-lg">
${template.icon}
</div>
<div>
<h3 class="text-lg font-display font-bold
text-slate-900">${template.title}</h3>
<p class="text-sm text-slate-500">Quarterly
Performance</p>
</div>
</div>
<div class="space-y-4">
${template.events.map((event, i) => `
<div class="relative ${i !== template.events.length - 1 ? 'pb-4
border-l-2 border-slate-200 ml-3' : 'ml-3'}">
<div class="absolute -left-[13px] top-0 w-6 h-6
rounded-full ${
event.status === 'completed' ? 'bg-emerald-500' :
event.status === 'projected' ? 'bg-slate-300' :
'bg-indigo-500'
} border-4 border-white shadow-md"></div>
<div class="ml-6 ${event.status === 'projected' ?
'opacity-60' : ''}">
<div class="flex items-center justify-between
mb-1">
<span class="text-sm font-semibold
text-slate-900">${event.quarter}</span>
<span class="text-sm font-bold
${event.status === 'projected' ? 'text-slate-500' :
'text-emerald-600'}">${event.growth}</span>
</div>
<div class="text-lg font-bold text-slate-900
mb-1">${event.revenue}</div>
<div class="text-xs
text-slate-500">${event.highlight}</div>
</div>
</div>
`).join('')}
</div>
</div>
`;
} else if (template.type
=== 'podcast') {
cardHTML = `
<div
class="card-gamma p-6 shadow-lg animate-scale-in"
data-category="${template.category}">
<div class="flex items-center gap-3 mb-4">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br ${template.color}
flex items-center justify-center text-2xl shadow-lg">
${template.icon}
</div>
<div>
<h3 class="text-lg font-display font-bold
text-slate-900">${template.title}</h3>
<p class="text-sm
text-slate-500">${template.data.duration}</p>
</div>
</div>
<p
class="text-sm text-slate-600
mb-4">${template.data.description}</p>
<div class="flex justify-center mb-4">
<button onclick="toggleAudio(this)" class="w-16 h-16
rounded-full bg-gradient-to-br ${template.color} hover:shadow-2xl flex
items-center justify-center transition-all">
<svg class="w-8 h-8 text-white ml-1"
fill="currentColor" viewBox="0 0 24 24">
<path d="M8 5v14l11-7z"/>
</svg>
</button>
</div>
<div class="space-y-2 mb-4">
<div class="text-xs text-slate-500 font-semibold uppercase
mb-2">Topics Covered:</div>
${template.data.topics.map(topic => `
<div class="flex items-center gap-2 text-sm
text-slate-600">
<div class="w-1.5 h-1.5 bg-indigo-500
rounded-full"></div>
<span>${topic}</span>
</div>
`).join('')}
</div>
<div class="pt-4 border-t border-slate-100 text-xs
text-slate-500">
Hosts: ${template.data.hosts.join(' & ')}
</div>
</div>
`;
} else if (template.type
=== 'studyguide') {
cardHTML = `
<div
class="card-gamma p-6 shadow-lg animate-scale-in"
data-category="${template.category}">
<div class="flex items-center gap-3 mb-6">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br ${template.color}
flex items-center justify-center text-2xl shadow-lg">
${template.icon}
</div>
<div>
<h3 class="text-lg font-display font-bold
text-slate-900">${template.title}</h3>
<p class="text-sm text-slate-500">Comprehensive
Overview</p>
</div>
</div>
<div class="space-y-4">
${template.sections.map(section => `
<div class="p-4 bg-slate-50 rounded-lg">
<h4 class="text-sm font-semibold text-slate-900
mb-3">${section.title}</h4>
<ul class="space-y-2">
${section.items.map(item => `
<li class="flex items-start gap-2 text-sm
text-slate-600">
<svg class="w-4 h-4 text-indigo-500
mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20
20">
<path
fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000
16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414
1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/>
</svg>
<span>${item}</span>
</li>
`).join('')}
</ul>
</div>
`).join('')}
</div>
<button
class="mt-4 w-full py-2.5 bg-indigo-600 hover:bg-indigo-700 text-white
text-sm font-semibold rounded-lg transition-all">
Export Guide
</button>
</div>
`;
} else if (template.type
=== 'faq') {
cardHTML = `
<div
class="card-gamma p-6 shadow-lg animate-scale-in"
data-category="${template.category}">
<div class="flex items-center gap-3 mb-6">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br ${template.color}
flex items-center justify-center text-2xl shadow-lg">
${template.icon}
</div>
<div>
<h3 class="text-lg font-display font-bold
text-slate-900">${template.title}</h3>
<p class="text-sm
text-slate-500">${template.questions.length} Questions</p>
</div>
</div>
<div class="space-y-4">
${template.questions.map((faq, i) => `
<div class="p-4 bg-slate-50 rounded-lg">
<div class="text-sm font-semibold text-slate-900
mb-2">${faq.q}</div>
<div class="text-sm text-slate-600
leading-relaxed">${faq.a}</div>
</div>
`).join('')}
</div>
<button class="mt-4 w-full py-2.5 border-2 border-slate-200
hover:border-slate-300 text-slate-700 text-sm font-semibold rounded-lg
transition-all">
Generate More
</button>
</div>
`;
}
container.insertAdjacentHTML('afterbegin', cardHTML);
}
function quickAction(action) {
if
(contentTemplates[action]) {
renderCard(contentTemplates[action]);
}
}
function handleGenerate(event) {
event.preventDefault();
const input =
document.getElementById('user-input');
const text =
input.value.toLowerCase().trim();
if (!text) return;
let matchedTemplate = null;
if (text.includes('brief')
|| text.includes('executive') || text.includes('report')) {
matchedTemplate =
contentTemplates.briefing;
} else if
(text.includes('analytics') || text.includes('sap') ||
text.includes('revenue')) {
matchedTemplate =
contentTemplates.analytics;
} else if
(text.includes('timeline') || text.includes('quarter') ||
text.includes('history')) {
matchedTemplate =
contentTemplates.timeline;
} else if
(text.includes('podcast') || text.includes('audio') || text.includes('listen'))
{
matchedTemplate =
contentTemplates.podcast;
} else if
(text.includes('study') || text.includes('guide') || text.includes('overview'))
{
matchedTemplate =
contentTemplates.studyguide;
} else if
(text.includes('faq') || text.includes('question')) {
matchedTemplate =
contentTemplates.faq;
} else {
const templates =
Object.values(contentTemplates);
matchedTemplate =
templates[Math.floor(Math.random() * templates.length)];
}
renderCard(matchedTemplate);
input.value = '';
}
function setTab(tab) {
currentTab = tab;
document.querySelectorAll('.tab-btn').forEach(btn => {
if (btn.dataset.tab
=== tab) {
btn.classList.add('active');
btn.classList.remove('text-slate-500');
btn.classList.add('text-slate-900');
} else {
btn.classList.remove('active');
btn.classList.add('text-slate-500');
btn.classList.remove('text-slate-900');
}
});
filterCards();
}
function filterCards() {
const cards =
document.querySelectorAll('[data-category]');
cards.forEach(card => {
if (currentTab ===
'all' || card.dataset.category === currentTab) {
card.style.display = 'block';
} else {
card.style.display = 'none';
}
});
}
function toggleAudio(btn) {
audioPlaying =
!audioPlaying;
const svg =
btn.querySelector('svg');
if (audioPlaying) {
svg.innerHTML =
'<path d="M6 4h4v16H6V4zm8 0h4v16h-4V4z"/>';
} else {
svg.innerHTML =
'<path d="M8 5v14l11-7z"/>';
}
}
function scrollToTop() {
window.scrollTo({ top: 0,
behavior: 'smooth' });
}
async function onConfigChange(cfg)
{
config = {
...defaultConfig, ...cfg };
document.getElementById('assistant-name').textContent = config.assistant_name
|| defaultConfig.assistant_name;
document.getElementById('main-title').textContent = (config.main_title ||
defaultConfig.main_title).replace('\\n', '\n');
document.getElementById('subtitle').textContent = config.subtitle ||
defaultConfig.subtitle;
}
function mapToCapabilities(cfg) {
return {
recolorables: [
{
get:
() => cfg.background_color || defaultConfig.background_color,
set:
(v) => { cfg.background_color = v; window.elementSdk.setConfig({
background_color: v }); }
},
{
get:
() => cfg.primary_color || defaultConfig.primary_color,
set:
(v) => { cfg.primary_color = v; window.elementSdk.setConfig({ primary_color:
v }); }
},
{
get:
() => cfg.secondary_color || defaultConfig.secondary_color,
set:
(v) => { cfg.secondary_color = v; window.elementSdk.setConfig({
secondary_color: v }); }
},
{
get:
() => cfg.text_color || defaultConfig.text_color,
set:
(v) => { cfg.text_color = v; window.elementSdk.setConfig({ text_color: v });
}
},
{
get:
() => cfg.accent_color || defaultConfig.accent_color,
set:
(v) => { cfg.accent_color = v; window.elementSdk.setConfig({ accent_color: v
}); }
}
],
borderables: [],
fontEditable:
undefined,
fontSizeable:
undefined
};
}
function mapToEditPanelValues(cfg)
{
return new Map([
['assistant_name',
cfg.assistant_name || defaultConfig.assistant_name],
['main_title',
cfg.main_title || defaultConfig.main_title],
['subtitle',
cfg.subtitle || defaultConfig.subtitle]
]);
}
function init() {
renderCard(contentTemplates.briefing);
renderCard(contentTemplates.analytics);
renderCard(contentTemplates.timeline);
renderCard(contentTemplates.podcast);
renderCard(contentTemplates.studyguide);
renderCard(contentTemplates.faq);
if (window.elementSdk) {
window.elementSdk.init({
defaultConfig,
onConfigChange,
mapToCapabilities,
mapToEditPanelValues
});
}
}
init();
</script>
<script>(function(){function c(){var
b=a.contentDocument||a.contentWindow.document;if(b){var
d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'9c164883b0b4178f',t:'MTc2ODk5Mjk2OC4wMDAwMDA='};var
a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var
a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else
if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var
e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body>
</html>