( ′∀`)σ≡σ☆))Д′)レ(゚∀゚;)ヘ=З=З=Зε≡(ノ´_ゝ`)ノ
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="UTF-8">
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Brand AI | Your Entire Brand. One Intelligent Platform.</title>
<!-- SEO Meta Tags -->
<meta name="description" content="Design, analyze, and grow your brand effortlessly. Create logos, websites, and marketing assets in minutes with AI-powered branding tools—all in one platform." />
<meta name="keywords" content="AI brand creator, AI branding platform, brand builder AI, create brand identity online, AI design tool, logo generator, brand insights, branding templates" />
<link rel="canonical" href="https://www.thebrand.ai/">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://www.thebrand.ai/">
<meta property="og:title" content="Brand AI | Your Entire Brand. One Intelligent Platform.">
<meta property="og:description"
content="Brand AI -Create, design, and scale your brand with AI. From logos to websites, templates to insights—everything your brand needs in one intelligent platform.">
<meta property="og:image" content="https://picsum.photos/seed/brandai-og/1200/630">
<!-- Twitter -->
<meta property="twitter:card" content="summary_large_image">
<meta property="twitter:url" content="https://www.thebrand.ai/">
<meta property="twitter:title" content="Brand AI | Your Entire Brand. One Intelligent Platform.">
<meta property="twitter:description"
content="Brand AI -Create, design, and scale your brand with AI. From logos to websites, templates to insights—everything your brand needs in one intelligent platform.">
<meta property="twitter:image" content="https://picsum.photos/seed/brandai-og/1200/630">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"name": "Brand AI",
"url": "https://www.thebrand.ai/",
"logo": "https://www.thebrand.ai/i/uploads/logo/logo_62a4de26e93f0.png",
"sameAs": [
"https://facebook.com/TheBrandApp",
"https://twitter.com/thebrandhq",
"https://www.instagram.com/thebrandapp",
"https://www.linkedin.com/company/the-brand-app"
]
},
{
"@type": "SoftwareApplication",
"name": "Brand AI",
"applicationCategory": "BusinessApplication",
"operatingSystem": "Web",
"url": "https://www.thebrand.ai/",
"description": "Brand AI is an AI branding platform that helps SMEs, startups, governments and marketers create logos, websites and marketing assets, keep every touchpoint on-brand and manage their entire brand in one collaborative workspace."
},
{
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How do I create a brand identity with AI?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Start by completing a simple brand brief about your business, audience and goals. Brand AI then uses this to recommend logos, colors, fonts and messaging that fit your strategy, so you are not choosing random designs but building a connected brand system."
}
},
{
"@type": "Question",
"name": "Is Brand AI a good AI branding platform for small businesses?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. Brand AI is designed for SMEs and startups that need agency-quality branding on a smaller budget. You can create a full brand kit, website and launch assets using guided workflows and templates, without hiring a large team."
}
},
{
"@type": "Question",
"name": "How does Brand AI help governments and public sector brands?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Brand AI makes it easier to keep communications consistent across departments and partners. You can set approved brand systems, share on-brand templates and track how teams are using them, so every campaign stays aligned with your official identity."
}
},
{
"@type": "Question",
"name": "Do I need design experience to use Brand AI?",
"acceptedAnswer": {
"@type": "Answer",
"text": "You do not need to be a designer. The platform provides expert-built layouts and AI suggestions at every step, so you can choose from options that already follow good design and branding practices while still customizing them to your needs."
}
},
{
"@type": "Question",
"name": "Can I start for free before upgrading?",
"acceptedAnswer": {
"@type": "Answer",
"text": "You can start creating for free and explore core tools, templates and brand workflows before deciding on a paid plan. When you are ready, you can upgrade to unlock more advanced features, collaboration and scale."
}
}
]
}
]
}
</script>
<!-- Google Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com/">
<link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin="">
<link href="/index_files/css2.css" rel="stylesheet">
<script src="/index_files/tailwind-3.4.17.js"></script>
<script>
tailwind.config = {
theme: {
extend: {
fontFamily: {
sans: ['Inter', 'sans-serif'],
},
colors: {
'brand-cyan': '#03bef3',
'brand-midnight': '#0b0f29',
'brand-magenta': '#ff00a8',
},
},
},
}
</script>
<style>
html {
scroll-behavior: smooth;
}
#root:empty {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
font-family: 'Inter', sans-serif;
color: #4a5568;
font-size: 1.25rem;
}
#root:empty::after {
content: "Loading Brand AI...";
animation: pulse 1.5s infinite ease-in-out;
}
@keyframes pulse {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.5;
}
}
</style>
<script type="importmap">
{
"imports": {
"react": "https://esm.sh/react@19.2.0",
"react/jsx-runtime": "https://esm.sh/react@19.2.0/jsx-runtime",
"react-dom": "https://esm.sh/react-dom@19.2.0",
"react-dom/client": "https://esm.sh/react-dom@19.2.0/client",
"scheduler": "https://esm.sh/scheduler@0.23.2"
}
}
</script>
<!-- Babel for in-browser JSX transpilation -->
<script src="/index_files/babel.min.js"></script>
<style>*, ::before, ::after {
--tw-border-spacing-x: 0;
--tw-border-spacing-y: 0;
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-rotate: 0;
--tw-skew-x: 0;
--tw-skew-y: 0;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-pan-x: ;
--tw-pan-y: ;
--tw-pinch-zoom: ;
--tw-scroll-snap-strictness: proximity;
--tw-gradient-from-position: ;
--tw-gradient-via-position: ;
--tw-gradient-to-position: ;
--tw-ordinal: ;
--tw-slashed-zero: ;
--tw-numeric-figure: ;
--tw-numeric-spacing: ;
--tw-numeric-fraction: ;
--tw-ring-inset: ;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--tw-blur: ;
--tw-brightness: ;
--tw-contrast: ;
--tw-grayscale: ;
--tw-hue-rotate: ;
--tw-invert: ;
--tw-saturate: ;
--tw-sepia: ;
--tw-drop-shadow: ;
--tw-backdrop-blur: ;
--tw-backdrop-brightness: ;
--tw-backdrop-contrast: ;
--tw-backdrop-grayscale: ;
--tw-backdrop-hue-rotate: ;
--tw-backdrop-invert: ;
--tw-backdrop-opacity: ;
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
--tw-contain-size: ;
--tw-contain-layout: ;
--tw-contain-paint: ;
--tw-contain-style:
}
::backdrop {
--tw-border-spacing-x: 0;
--tw-border-spacing-y: 0;
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-rotate: 0;
--tw-skew-x: 0;
--tw-skew-y: 0;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-pan-x: ;
--tw-pan-y: ;
--tw-pinch-zoom: ;
--tw-scroll-snap-strictness: proximity;
--tw-gradient-from-position: ;
--tw-gradient-via-position: ;
--tw-gradient-to-position: ;
--tw-ordinal: ;
--tw-slashed-zero: ;
--tw-numeric-figure: ;
--tw-numeric-spacing: ;
--tw-numeric-fraction: ;
--tw-ring-inset: ;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--tw-blur: ;
--tw-brightness: ;
--tw-contrast: ;
--tw-grayscale: ;
--tw-hue-rotate: ;
--tw-invert: ;
--tw-saturate: ;
--tw-sepia: ;
--tw-drop-shadow: ;
--tw-backdrop-blur: ;
--tw-backdrop-brightness: ;
--tw-backdrop-contrast: ;
--tw-backdrop-grayscale: ;
--tw-backdrop-hue-rotate: ;
--tw-backdrop-invert: ;
--tw-backdrop-opacity: ;
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
--tw-contain-size: ;
--tw-contain-layout: ;
--tw-contain-paint: ;
--tw-contain-style:
}
/* ! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com */
*, ::after, ::before {
box-sizing: border-box;
border-width: 0;
border-style: solid;
border-color: #e5e7eb
}
::after, ::before {
--tw-content: ''
}
:host, html {
line-height: 1.5;
-webkit-text-size-adjust: 100%;
-moz-tab-size: 4;
tab-size: 4;
font-family: Inter, sans-serif;
font-feature-settings: normal;
font-variation-settings: normal;
-webkit-tap-highlight-color: transparent
}
body {
margin: 0;
line-height: inherit
}
hr {
height: 0;
color: inherit;
border-top-width: 1px
}
abbr:where([title]) {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted
}
h1, h2, h3, h4, h5, h6 {
font-size: inherit;
font-weight: inherit
}
a {
color: inherit;
text-decoration: inherit
}
b, strong {
font-weight: bolder
}
code, kbd, pre, samp {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
font-feature-settings: normal;
font-variation-settings: normal;
font-size: 1em
}
small {
font-size: 80%
}
sub, sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline
}
sub {
bottom: -.25em
}
sup {
top: -.5em
}
table {
text-indent: 0;
border-color: inherit;
border-collapse: collapse
}
button, input, optgroup, select, textarea {
font-family: inherit;
font-feature-settings: inherit;
font-variation-settings: inherit;
font-size: 100%;
font-weight: inherit;
line-height: inherit;
letter-spacing: inherit;
color: inherit;
margin: 0;
padding: 0
}
button, select {
text-transform: none
}
button, input:where([type=button]), input:where([type=reset]), input:where([type=submit]) {
-webkit-appearance: button;
background-color: transparent;
background-image: none
}
:-moz-focusring {
outline: auto
}
:-moz-ui-invalid {
box-shadow: none
}
progress {
vertical-align: baseline
}
::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
height: auto
}
[type=search] {
-webkit-appearance: textfield;
outline-offset: -2px
}
::-webkit-search-decoration {
-webkit-appearance: none
}
::-webkit-file-upload-button {
-webkit-appearance: button;
font: inherit
}
summary {
display: list-item
}
blockquote, dd, dl, figure, h1, h2, h3, h4, h5, h6, hr, p, pre {
margin: 0
}
fieldset {
margin: 0;
padding: 0
}
legend {
padding: 0
}
menu, ol, ul {
list-style: none;
margin: 0;
padding: 0
}
dialog {
padding: 0
}
textarea {
resize: vertical
}
input::placeholder, textarea::placeholder {
opacity: 1;
color: #9ca3af
}
[role=button], button {
cursor: pointer
}
:disabled {
cursor: default
}
audio, canvas, embed, iframe, img, object, svg, video {
display: block;
vertical-align: middle
}
img, video {
max-width: 100%;
height: auto
}
[hidden]:where(:not([hidden=until-found])) {
display: none
}
.container {
width: 100%
}
@media (min-width: 640px) {
.container {
max-width: 640px
}
}
@media (min-width: 768px) {
.container {
max-width: 768px
}
}
@media (min-width: 1024px) {
.container {
max-width: 1024px
}
}
@media (min-width: 1280px) {
.container {
max-width: 1280px
}
}
@media (min-width: 1536px) {
.container {
max-width: 1536px
}
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0
}
.absolute {
position: absolute
}
.relative {
position: relative
}
.sticky {
position: sticky
}
.inset-0 {
inset: 0px
}
.bottom-\[-30\%\] {
bottom: -30%
}
.left-\[-30\%\] {
left: -30%
}
.right-\[-30\%\] {
right: -30%
}
.top-0 {
top: 0px
}
.top-\[-30\%\] {
top: -30%
}
.z-0 {
z-index: 0
}
.z-10 {
z-index: 10
}
.z-50 {
z-index: 50
}
.col-span-2 {
grid-column: span 2 / span 2
}
.mx-auto {
margin-left: auto;
margin-right: auto
}
.mb-10 {
margin-bottom: 2.5rem
}
.mb-12 {
margin-bottom: 3rem
}
.mb-2 {
margin-bottom: 0.5rem
}
.mb-4 {
margin-bottom: 1rem
}
.mb-6 {
margin-bottom: 1.5rem
}
.mb-8 {
margin-bottom: 2rem
}
.mt-12 {
margin-top: 3rem
}
.mt-4 {
margin-top: 1rem
}
.mt-8 {
margin-top: 2rem
}
.block {
display: block
}
.inline-block {
display: inline-block
}
.flex {
display: flex
}
.grid {
display: grid
}
.hidden {
display: none
}
.aspect-\[4\/3\] {
aspect-ratio: 4/3
}
.h-10 {
height: 2.5rem
}
.h-4\/5 {
height: 80%
}
.h-6 {
height: 1.5rem
}
.h-8 {
height: 2rem
}
.h-full {
height: 100%
}
.min-h-\[480px\] {
min-height: 480px
}
.min-h-\[520px\] {
min-height: 520px
}
.min-h-\[70vh\] {
min-height: 70vh
}
.w-10 {
width: 2.5rem
}
.w-32 {
width: 8rem
}
.w-4\/5 {
width: 80%
}
.w-6 {
width: 1.5rem
}
.w-8 {
width: 2rem
}
.w-full {
width: 100%
}
.max-w-2xl {
max-width: 42rem
}
.max-w-3xl {
max-width: 48rem
}
.scale-105 {
--tw-scale-x: 1.05;
--tw-scale-y: 1.05;
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
}
.transform {
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
}
.grid-cols-1 {
grid-template-columns: repeat(1, minmax(0, 1fr))
}
.grid-cols-2 {
grid-template-columns: repeat(2, minmax(0, 1fr))
}
.flex-col {
flex-direction: column
}
.flex-wrap {
flex-wrap: wrap
}
.items-center {
align-items: center
}
.justify-center {
justify-content: center
}
.justify-between {
justify-content: space-between
}
.gap-2 {
gap: 0.5rem
}
.gap-4 {
gap: 1rem
}
.gap-6 {
gap: 1.5rem
}
.gap-8 {
gap: 2rem
}
.space-x-4 > :not([hidden]) ~ :not([hidden]) {
--tw-space-x-reverse: 0;
margin-right: calc(1rem * var(--tw-space-x-reverse));
margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)))
}
.space-x-6 > :not([hidden]) ~ :not([hidden]) {
--tw-space-x-reverse: 0;
margin-right: calc(1.5rem * var(--tw-space-x-reverse));
margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)))
}
.space-x-8 > :not([hidden]) ~ :not([hidden]) {
--tw-space-x-reverse: 0;
margin-right: calc(2rem * var(--tw-space-x-reverse));
margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse)))
}
.space-y-2 > :not([hidden]) ~ :not([hidden]) {
--tw-space-y-reverse: 0;
margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
margin-bottom: calc(0.5rem * var(--tw-space-y-reverse))
}
.overflow-hidden {
overflow: hidden
}
.truncate {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap
}
.rounded-2xl {
border-radius: 1rem
}
.rounded-3xl {
border-radius: 1.5rem
}
.rounded-full {
border-radius: 9999px
}
.rounded-lg {
border-radius: 0.5rem
}
.border {
border-width: 1px
}
.border-t {
border-top-width: 1px
}
.border-gray-300 {
--tw-border-opacity: 1;
border-color: rgb(209 213 219 / var(--tw-border-opacity, 1))
}
.border-gray-800 {
--tw-border-opacity: 1;
border-color: rgb(31 41 55 / var(--tw-border-opacity, 1))
}
.bg-black {
--tw-bg-opacity: 1;
background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1))
}
.bg-black\/10 {
background-color: rgb(0 0 0 / 0.1)
}
.bg-brand-cyan {
--tw-bg-opacity: 1;
background-color: rgb(3 190 243 / var(--tw-bg-opacity, 1))
}
.bg-brand-midnight {
--tw-bg-opacity: 1;
background-color: rgb(11 15 41 / var(--tw-bg-opacity, 1))
}
.bg-cyan-100 {
--tw-bg-opacity: 1;
background-color: rgb(207 250 254 / var(--tw-bg-opacity, 1))
}
.bg-gray-100 {
--tw-bg-opacity: 1;
background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1))
}
.bg-gray-200 {
--tw-bg-opacity: 1;
background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1))
}
.bg-gray-50 {
--tw-bg-opacity: 1;
background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1))
}
.bg-white {
--tw-bg-opacity: 1;
background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1))
}
.bg-white\/10 {
background-color: rgb(255 255 255 / 0.1)
}
.bg-white\/80 {
background-color: rgb(255 255 255 / 0.8)
}
.bg-opacity-20 {
--tw-bg-opacity: 0.2
}
.bg-gradient-to-br {
background-image: linear-gradient(to bottom right, var(--tw-gradient-stops))
}
.bg-gradient-to-tl {
background-image: linear-gradient(to top left, var(--tw-gradient-stops))
}
.from-brand-cyan {
--tw-gradient-from: #03bef3 var(--tw-gradient-from-position);
--tw-gradient-to: rgb(3 190 243 / 0) var(--tw-gradient-to-position);
--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)
}
.to-transparent {
--tw-gradient-to: transparent var(--tw-gradient-to-position)
}
.object-cover {
object-fit: cover
}
.p-3 {
padding: 0.75rem
}
.p-5 {
padding: 1.25rem
}
.p-8 {
padding: 2rem
}
.px-4 {
padding-left: 1rem;
padding-right: 1rem
}
.px-5 {
padding-left: 1.25rem;
padding-right: 1.25rem
}
.px-6 {
padding-left: 1.5rem;
padding-right: 1.5rem
}
.px-8 {
padding-left: 2rem;
padding-right: 2rem
}
.py-12 {
padding-top: 3rem;
padding-bottom: 3rem
}
.py-2 {
padding-top: 0.5rem;
padding-bottom: 0.5rem
}
.py-20 {
padding-top: 5rem;
padding-bottom: 5rem
}
.py-3 {
padding-top: 0.75rem;
padding-bottom: 0.75rem
}
.py-4 {
padding-top: 1rem;
padding-bottom: 1rem
}
.pt-8 {
padding-top: 2rem
}
.text-left {
text-align: left
}
.text-center {
text-align: center
}
.font-sans {
font-family: Inter, sans-serif
}
.text-3xl {
font-size: 1.875rem;
line-height: 2.25rem
}
.text-4xl {
font-size: 2.25rem;
line-height: 2.5rem
}
.text-5xl {
font-size: 3rem;
line-height: 1
}
.text-lg {
font-size: 1.125rem;
line-height: 1.75rem
}
.text-sm {
font-size: 0.875rem;
line-height: 1.25rem
}
.text-xl {
font-size: 1.25rem;
line-height: 1.75rem
}
.font-bold {
font-weight: 700
}
.font-extrabold {
font-weight: 800
}
.font-medium {
font-weight: 500
}
.font-semibold {
font-weight: 600
}
.uppercase {
text-transform: uppercase
}
.tracking-tight {
letter-spacing: -0.025em
}
.text-brand-cyan {
--tw-text-opacity: 1;
color: rgb(3 190 243 / var(--tw-text-opacity, 1))
}
.text-brand-midnight {
--tw-text-opacity: 1;
color: rgb(11 15 41 / var(--tw-text-opacity, 1))
}
.text-gray-300 {
--tw-text-opacity: 1;
color: rgb(209 213 219 / var(--tw-text-opacity, 1))
}
.text-gray-400 {
--tw-text-opacity: 1;
color: rgb(156 163 175 / var(--tw-text-opacity, 1))
}
.text-gray-600 {
--tw-text-opacity: 1;
color: rgb(75 85 99 / var(--tw-text-opacity, 1))
}
.text-gray-700 {
--tw-text-opacity: 1;
color: rgb(55 65 81 / var(--tw-text-opacity, 1))
}
.text-gray-800 {
--tw-text-opacity: 1;
color: rgb(31 41 55 / var(--tw-text-opacity, 1))
}
.text-white {
--tw-text-opacity: 1;
color: rgb(255 255 255 / var(--tw-text-opacity, 1))
}
.opacity-50 {
opacity: 0.5
}
.opacity-80 {
opacity: 0.8
}
.opacity-90 {
opacity: 0.9
}
.shadow-lg {
--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
}
.shadow-md {
--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
}
.shadow-sm {
--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
}
.blur-3xl {
--tw-blur: blur(64px);
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)
}
.filter {
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)
}
.backdrop-blur-sm {
--tw-backdrop-blur: blur(4px);
-webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)
}
.transition-all {
transition-property: all;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms
}
.transition-colors {
transition-property: color, background-color, border-color, fill, stroke, -webkit-text-decoration-color;
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, -webkit-text-decoration-color;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms
}
.transition-opacity {
transition-property: opacity;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms
}
.transition-transform {
transition-property: transform;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms
}
.duration-300 {
transition-duration: 300ms
}
.duration-500 {
transition-duration: 500ms
}
.ease-in-out {
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1)
}
.hover\:-translate-y-1:hover {
--tw-translate-y: -0.25rem;
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
}
.hover\:-translate-y-2:hover {
--tw-translate-y: -0.5rem;
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
}
.hover\:scale-105:hover {
--tw-scale-x: 1.05;
--tw-scale-y: 1.05;
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
}
.hover\:scale-110:hover {
--tw-scale-x: 1.1;
--tw-scale-y: 1.1;
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
}
.hover\:border-brand-cyan:hover {
--tw-border-opacity: 1;
border-color: rgb(3 190 243 / var(--tw-border-opacity, 1))
}
.hover\:bg-cyan-200:hover {
--tw-bg-opacity: 1;
background-color: rgb(165 243 252 / var(--tw-bg-opacity, 1))
}
.hover\:bg-gray-200:hover {
--tw-bg-opacity: 1;
background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1))
}
.hover\:bg-gray-300:hover {
--tw-bg-opacity: 1;
background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1))
}
.hover\:bg-white\/20:hover {
background-color: rgb(255 255 255 / 0.2)
}
.hover\:text-brand-cyan:hover {
--tw-text-opacity: 1;
color: rgb(3 190 243 / var(--tw-text-opacity, 1))
}
.hover\:opacity-90:hover {
opacity: 0.9
}
.hover\:shadow-xl:hover {
--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
}
.focus\:outline-none:focus {
outline: 2px solid transparent;
outline-offset: 2px
}
.group:hover .group-hover\:-translate-y-1 {
--tw-translate-y: -0.25rem;
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
}
.group:hover .group-hover\:scale-105 {
--tw-scale-x: 1.05;
--tw-scale-y: 1.05;
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
}
.group:hover .group-hover\:scale-110 {
--tw-scale-x: 1.1;
--tw-scale-y: 1.1;
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
}
.group:hover .group-hover\:bg-black\/0 {
background-color: rgb(0 0 0 / 0)
}
.group:hover .group-hover\:bg-opacity-10 {
--tw-bg-opacity: 0.1
}
.group:hover .group-hover\:text-brand-cyan {
--tw-text-opacity: 1;
color: rgb(3 190 243 / var(--tw-text-opacity, 1))
}
.group:hover .group-hover\:opacity-100 {
opacity: 1
}
@media (min-width: 640px) {
.sm\:grid-cols-3 {
grid-template-columns: repeat(3, minmax(0, 1fr))
}
}
@media (min-width: 768px) {
.md\:col-span-2 {
grid-column: span 2 / span 2
}
.md\:mt-0 {
margin-top: 0px
}
.md\:flex {
display: flex
}
.md\:hidden {
display: none
}
.md\:min-h-\[520px\] {
min-height: 520px
}
.md\:min-h-\[80vh\] {
min-height: 80vh
}
.md\:grid-cols-2 {
grid-template-columns: repeat(2, minmax(0, 1fr))
}
.md\:grid-cols-3 {
grid-template-columns: repeat(3, minmax(0, 1fr))
}
.md\:grid-cols-4 {
grid-template-columns: repeat(4, minmax(0, 1fr))
}
.md\:flex-row {
flex-direction: row
}
.md\:gap-12 {
gap: 3rem
}
.md\:gap-4 {
gap: 1rem
}
.md\:gap-8 {
gap: 2rem
}
.md\:py-24 {
padding-top: 6rem;
padding-bottom: 6rem
}
.md\:py-28 {
padding-top: 7rem;
padding-bottom: 7rem
}
.md\:text-2xl {
font-size: 1.5rem;
line-height: 2rem
}
.md\:text-4xl {
font-size: 2.25rem;
line-height: 2.5rem
}
.md\:text-5xl {
font-size: 3rem;
line-height: 1
}
.md\:text-6xl {
font-size: 3.75rem;
line-height: 1
}
.md\:text-7xl {
font-size: 4.5rem;
line-height: 1
}
.md\:text-base {
font-size: 1rem;
line-height: 1.5rem
}
.md\:text-xl {
font-size: 1.25rem;
line-height: 1.75rem
}
}
@media (min-width: 1024px) {
.lg\:col-span-1 {
grid-column: span 1 / span 1
}
.lg\:grid-cols-3 {
grid-template-columns: repeat(3, minmax(0, 1fr))
}
.lg\:grid-cols-5 {
grid-template-columns: repeat(5, minmax(0, 1fr))
}
.lg\:text-8xl {
font-size: 6rem;
line-height: 1
}
}
@media (min-width: 1280px) {
.xl\:grid-cols-6 {
grid-template-columns: repeat(6, minmax(0, 1fr))
}
}</style>
<script type="text/plain" data-disabled="true">function _extends() {
return _extends = Object.assign ? Object.assign.bind() : function (n) {
for (var e = 1; e < arguments.length; e++) {
var t = arguments[e];
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
}
return n;
}, _extends.apply(null, arguments);
}
import React, {useState} from 'react';
import ReactDOM from 'react-dom/client';
// --- START OF constants.tsx ---
var FEATURES_PRIMARY = [{
title: 'Bring Your Brand to Life with Brand Creator',
description: 'Quickly and effortlessly create a powerful, professional brand identity and logos that stand out and drive business growth.',
link: 'https://www.thebrand.ai/brandcreator/index',
buttonText: 'Explore Brand Creator',
imageUrl: 'https://picsum.photos/seed/branding-desk/1200/800',
bgColor: '#1E003B' // Deep Purple/Indigo
}, {
title: 'Revolutionize Your Brand with AI Insights',
description: 'Supercharge your brand with intelligent solutions, design, and big data to drive growth, engagement, and measurable success.',
link: 'https://www.thebrand.ai/insights/',
buttonText: 'Explore Insights',
imageUrl: 'https://picsum.photos/seed/ai-dashboard/1200/800',
bgColor: '#003D5B' // Dark Cyan/Blue
}, {
title: 'Build a Website Easily with Brand Sites',
description: 'Choose from over 100 amazing templates to build a stunning website that empowers your brand to stand out.',
link: 'https://www.thebrand.ai/sites/index',
buttonText: 'Explore Brand Sites',
imageUrl: 'https://picsum.photos/seed/web-design/1200/800',
bgColor: '#004C4C' // Dark Teal
}];
var FEATURES_SECONDARY = [{
title: 'Meet the Visual Suite',
description: 'Your entire workflow in one place. From bespoke designs and insightful blogs to tailored strategies—all powered by AI.',
link: 'https://www.thebrand.ai/insights/dashboard?feature=brandtoolkit',
buttonText: 'Explore Visual Suite',
imageUrl: 'https://picsum.photos/seed/creative-workspace/1200/800',
bgColor: '#3D004F',
// Dark Magenta/Purple
size: 'large'
}, {
title: 'Present with impact',
description: 'Reimagine presentations with cinematic visuals, smart collaboration, and AI-powered tools.',
link: 'https://www.thebrand.ai/i/designs',
buttonText: 'Try Presentations',
imageUrl: 'https://picsum.photos/seed/presentation-stage/1200/800',
bgColor: '#005F58',
// Deep Teal/Green
size: 'large'
}];
var FEATURES_TERTIARY = [{
title: 'Define your Brand Identity',
description: 'A central hub to build, manage, and evolve your unique brand identity as you scale.',
link: 'https://www.thebrand.ai/i/account/build_brand',
buttonText: 'Build My Brand',
imageUrl: 'https://picsum.photos/seed/brand-guide/800/600',
bgColor: '#1A237E' // Dark Indigo
}, {
title: 'End-to-end platform for large organizations',
description: 'Scale brand consistency with enterprise-grade tools, security, and support for large organizations.',
link: '#',
buttonText: 'Explore Enterprise',
imageUrl: 'https://picsum.photos/seed/corporate-dash/800/600',
bgColor: '#00263E' // Very Dark Blue
}, {
title: 'Unlock Growth with Insight Journeys',
description: "Explore expert-led journeys to transform your startup's growth, overcome challenges, and achieve success.",
link: 'https://www.thebrand.ai/insights/dashboard?feature=browsejourneys',
buttonText: 'Discover Your Path',
imageUrl: 'https://picsum.photos/seed/growth-path/800/600',
bgColor: '#01579B' // Light Blue
}];
var CostIcon = () => /*#__PURE__*/React.createElement("svg", {
xmlns: "http://www.w3.org/2000/svg",
className: "h-10 w-10",
fill: "none",
viewBox: "0 0 24 24",
stroke: "currentColor",
strokeWidth: 2
}, /*#__PURE__*/React.createElement("path", {
strokeLinecap: "round",
strokeLinejoin: "round",
d: "M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 10v-1m-5.293-6.293l-.707.707M17.293 7.707l.707-.707M5.707 16.293l.707.707M16.586 17H19a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2.414"
}));
var TimeIcon = () => /*#__PURE__*/React.createElement("svg", {
xmlns: "http://www.w3.org/2000/svg",
className: "h-10 w-10",
fill: "none",
viewBox: "0 0 24 24",
stroke: "currentColor",
strokeWidth: 2
}, /*#__PURE__*/React.createElement("path", {
strokeLinecap: "round",
strokeLinejoin: "round",
d: "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"
}));
var ToolsIcon = () => /*#__PURE__*/React.createElement("svg", {
xmlns: "http://www.w3.org/2000/svg",
className: "h-10 w-10",
fill: "none",
viewBox: "0 0 24 24",
stroke: "currentColor",
strokeWidth: 2
}, /*#__PURE__*/React.createElement("path", {
strokeLinecap: "round",
strokeLinejoin: "round",
d: "M11 4a2 2 0 114 0v1a1 1 0 001 1h3a1 1 0 011 1v3a1 1 0 01-1 1h-1a2 2 0 100 4h1a1 1 0 011 1v3a1 1 0 01-1 1h-3a1 1 0 01-1-1v-1a2 2 0 10-4 0v1a1 1 0 01-1 1H7a1 1 0 01-1-1v-3a1 1 0 00-1-1H4a2 2 0 110-4h1a1 1 0 001-1V7a1 1 0 011-1h3a1 1 0 001-1V4z"
}));
var PROBLEM_CARDS = [{
icon: /*#__PURE__*/React.createElement(CostIcon, null),
title: 'Agency-Level Budgets',
description: 'SMEs and governments need top-tier strategy but lack the budget for expensive agencies.'
}, {
icon: /*#__PURE__*/React.createElement(TimeIcon, null),
title: 'Months of Guesswork',
description: 'Founders and marketers waste precious time guessing their next move instead of acting on clear insights.'
}, {
icon: /*#__PURE__*/React.createElement(ToolsIcon, null),
title: 'Juggling a Dozen Tools',
description: 'Creatives juggle multiple, disconnected tools to create a single campaign, with none of them talking to each other.'
}];
var SmeIcon = () => /*#__PURE__*/React.createElement("svg", {
xmlns: "http://www.w3.org/2000/svg",
className: "h-8 w-8",
fill: "none",
viewBox: "0 0 24 24",
stroke: "currentColor",
strokeWidth: 2
}, /*#__PURE__*/React.createElement("path", {
strokeLinecap: "round",
strokeLinejoin: "round",
d: "M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0v-4m0 4h5m0 0v-4m0 4h5m-5-4v-5h5v5h-5z"
}));
var GovernmentIcon = () => /*#__PURE__*/React.createElement("svg", {
xmlns: "http://www.w3.org/2000/svg",
className: "h-8 w-8",
fill: "none",
viewBox: "0 0 24 24",
stroke: "currentColor",
strokeWidth: 2
}, /*#__PURE__*/React.createElement("path", {
strokeLinecap: "round",
strokeLinejoin: "round",
d: "M12 21l-2-2m2 2l2-2m2 2l2-2M5 15l-2-2m2 2l2-2m2 2l2-2m2 2l2-2M5 21v-6a2 2 0 012-2h10a2 2 0 012 2v6"
}), " ", /*#__PURE__*/React.createElement("path", {
strokeLinecap: "round",
strokeLinejoin: "round",
d: "M3 21h18M5 10l7-7 7 7"
}));
var StartupIcon = () => /*#__PURE__*/React.createElement("svg", {
xmlns: "http://www.w3.org/2000/svg",
className: "h-8 w-8",
fill: "none",
viewBox: "0 0 24 24",
stroke: "currentColor",
strokeWidth: 2
}, /*#__PURE__*/React.createElement("path", {
strokeLinecap: "round",
strokeLinejoin: "round",
d: "M13 10V3L4 14h7v7l9-11h-7z"
}));
var MarketerIcon = () => /*#__PURE__*/React.createElement("svg", {
xmlns: "http://www.w3.org/2000/svg",
className: "h-8 w-8",
fill: "none",
viewBox: "0 0 24 24",
stroke: "currentColor",
strokeWidth: 2
}, /*#__PURE__*/React.createElement("path", {
strokeLinecap: "round",
strokeLinejoin: "round",
d: "M11 3.055A9.001 9.001 0 1020.945 13H11V3.055z"
}), /*#__PURE__*/React.createElement("path", {
strokeLinecap: "round",
strokeLinejoin: "round",
d: "M20.488 9H15V3.512A9.025 9.025 0 0120.488 9z"
}));
var CorporateIcon = () => /*#__PURE__*/React.createElement("svg", {
xmlns: "http://www.w3.org/2000/svg",
className: "h-8 w-8",
fill: "none",
viewBox: "0 0 24 24",
stroke: "currentColor",
strokeWidth: 2
}, /*#__PURE__*/React.createElement("path", {
strokeLinecap: "round",
strokeLinejoin: "round",
d: "M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0v-4m0 4h5m0 0v-4m0 4h5m-5-4V5h5v7h-5z"
}));
var TARGET_MARKETS = [{
icon: /*#__PURE__*/React.createElement(SmeIcon, null),
name: 'SMEs'
}, {
icon: /*#__PURE__*/React.createElement(GovernmentIcon, null),
name: 'Governments'
}, {
icon: /*#__PURE__*/React.createElement(StartupIcon, null),
name: 'Startups'
}, {
icon: /*#__PURE__*/React.createElement(MarketerIcon, null),
name: 'Marketers'
}, {
icon: /*#__PURE__*/React.createElement(CorporateIcon, null),
name: 'Corporations'
}];
var FacebookIcon = () => /*#__PURE__*/React.createElement("svg", {
className: "w-6 h-6",
fill: "currentColor",
viewBox: "0 0 24 24",
"aria-hidden": "true"
}, /*#__PURE__*/React.createElement("path", {
fillRule: "evenodd",
d: "M22 12c0-5.523-4.477-10-10-10S2 6.477 2 12c0 4.991 3.657 9.128 8.438 9.878v-6.987h-2.54V12h2.54V9.797c0-2.506 1.492-3.89 3.777-3.89 1.094 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.771-1.63 1.562V12h2.773l-.443 2.89h-2.33v6.988C18.343 21.128 22 16.991 22 12z",
clipRule: "evenodd"
}));
var TwitterIcon = () => /*#__PURE__*/React.createElement("svg", {
className: "w-6 h-6",
fill: "currentColor",
viewBox: "0 0 24 24",
"aria-hidden": "true"
}, /*#__PURE__*/React.createElement("path", {
d: "M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.71v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84"
}));
var InstagramIcon = () => /*#__PURE__*/React.createElement("svg", {
className: "w-6 h-6",
fill: "currentColor",
viewBox: "0 0 24 24",
"aria-hidden": "true"
}, /*#__PURE__*/React.createElement("path", {
fillRule: "evenodd",
d: "M12.315 2c2.43 0 2.784.013 3.808.06 1.064.049 1.791.218 2.427.465a4.902 4.902 0 011.772 1.153 4.902 4.902 0 011.153 1.772c.247.636.416 1.363.465 2.427.048 1.024.06 1.378.06 3.808s-.012 2.784-.06 3.808c-.049 1.064-.218 1.791-.465 2.427a4.902 4.902 0 01-1.153 1.772 4.902 4.902 0 01-1.772 1.153c-.636.247-1.363.416-2.427.465-1.024.048-1.378.06-3.808.06s-2.784-.012-3.808-.06c-1.064-.049-1.791-.218-2.427-.465a4.902 4.902 0 01-1.772-1.153 4.902 4.902 0 01-1.153-1.772c-.247-.636-.416-1.363-.465-2.427-.048-1.024-.06-1.378-.06-3.808s.012-2.784.06-3.808c.049-1.064.218-1.791.465-2.427a4.902 4.902 0 011.153-1.772A4.902 4.902 0 016.08 2.525c.636-.247 1.363-.416 2.427-.465C9.53 2.013 9.884 2 12.315 2zM12 7.044c-2.583 0-4.666 2.083-4.666 4.666s2.083 4.666 4.666 4.666 4.666-2.083 4.666-4.666S14.583 7.044 12 7.044zm0 7.666c-1.657 0-3-1.343-3-3s1.343-3 3-3 3 1.343 3 3-1.343 3-3 3zm4.917-7.916a1.146 1.146 0 100-2.292 1.146 1.146 0 000 2.292z",
clipRule: "evenodd"
}));
var LinkedInIcon = () => /*#__PURE__*/React.createElement("svg", {
className: "w-6 h-6",
fill: "currentColor",
viewBox: "0 0 24 24",
"aria-hidden": "true"
}, /*#__PURE__*/React.createElement("path", {
d: "M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z"
}));
var TEMPLATE_CATEGORIES = [{
category: 'Social Media',
templates: [{
title: "Facebook Post",
url: "https://www.thebrand.ai/i/social-media/facebook-post"
}, {
title: "Instagram Post",
url: "https://www.thebrand.ai/i/social-media/instagram-posts"
}, {
title: "Instagram Story",
url: "https://www.thebrand.ai/i/social-media/instagram-story"
}, {
title: "LinkedIn Post",
url: "https://www.thebrand.ai/i/social-media/linkedin-post"
}, {
title: "Twitter Post",
url: "https://www.thebrand.ai/i/social-media/twitter"
}, {
title: "Pinterest Pin",
url: "https://www.thebrand.ai/i/social-media/pinterest-pin-graphic-templates"
}, {
title: "IGTV Cover",
url: "https://www.thebrand.ai/i/social-media/igtv-cover"
}, {
title: "Highlight Cover",
url: "https://www.thebrand.ai/i/social-media/instagram-highlight-cover"
}, {
title: "YouTube Graphics",
url: "https://www.thebrand.ai/i/social-media/youtube-graphic-templates"
}, {
title: "Twitch Graphics",
url: "https://www.thebrand.ai/i/social-media/online-streaming"
}]
}, {
category: 'Invites & Cards',
templates: [{
title: "Business Card",
url: "https://www.thebrand.ai/i/invites-and-cards/business-card-85x55mm"
}, {
title: "US Business Card",
url: "https://www.thebrand.ai/i/invites-and-cards/business-card-us"
}, {
title: "Greeting Card",
url: "https://www.thebrand.ai/i/invites-and-cards/card"
}, {
title: "Invitation",
url: "https://www.thebrand.ai/i/invites-and-cards/invitation-13.9x10.7cm"
}]
}, {
category: 'Documents',
templates: [{
title: "Presentation 16:9",
url: "https://www.thebrand.ai/i/documents/presentation-16-9"
}, {
title: "Resume",
url: "https://www.thebrand.ai/i/documents/resume"
}, {
title: "Letterhead A4",
url: "https://www.thebrand.ai/i/documents/letterhead-a4"
}, {
title: "Proposal A4",
url: "https://www.thebrand.ai/i/documents/proposal-a4"
}, {
title: "Flyer A4",
url: "https://www.thebrand.ai/i/documents/flyer-a4"
}, {
title: "Newsletter",
url: "https://www.thebrand.ai/i/documents/newsletter"
}, {
title: "Invoice A4",
url: "https://www.thebrand.ai/i/documents/invoice-a4"
}, {
title: "Report A4",
url: "https://www.thebrand.ai/i/documents/report-a4"
}, {
title: "Certificate",
url: "https://www.thebrand.ai/i/documents/certificate"
}, {
title: "Menu A4",
url: "https://www.thebrand.ai/i/documents/menu-a4"
}, {
title: "Checklist",
url: "https://www.thebrand.ai/i/documents/checklist"
}, {
title: "Schedule",
url: "https://www.thebrand.ai/i/documents/schedule"
}, {
title: "Workbook",
url: "https://www.thebrand.ai/i/documents/workbook"
}, {
title: "eBook",
url: "https://www.thebrand.ai/i/documents/ebook"
}, {
title: "Whitepaper",
url: "https://www.thebrand.ai/i/documents/whitepaper"
}]
}, {
category: 'Advertising',
templates: [{
title: "Poster",
url: "https://www.thebrand.ai/i/advertising/poster-a3"
}, {
title: "Banner",
url: "https://www.thebrand.ai/i/advertising/banner-2x6ft"
}, {
title: "Billboard",
url: "https://www.thebrand.ai/i/advertising/billboard"
}, {
title: "Flyer",
url: "https://www.thebrand.ai/i/advertising/flyer-us"
}, {
title: "Yard Sign",
url: "https://www.thebrand.ai/i/advertising/yard-sign"
}, {
title: "Roll-up Banner",
url: "https://www.thebrand.ai/i/advertising/roll-up-banner"
}, {
title: "Brochure",
url: "https://www.thebrand.ai/i/advertising/brochure"
}]
}, {
category: 'Covers',
templates: [{
title: "Book Cover",
url: "https://www.thebrand.ai/i/covers/book-cover"
}, {
title: "Magazine Cover",
url: "https://www.thebrand.ai/i/covers/magazine-cover"
}, {
title: "Report Cover",
url: "https://www.thebrand.ai/i/covers/report-cover"
}, {
title: "Planner Cover",
url: "https://www.thebrand.ai/i/covers/planner-cover"
}, {
title: "eBook Cover",
url: "https://www.thebrand.ai/i/covers/ebook-cover"
}]
}];
// --- END OF constants.tsx ---
// --- START OF components/Logo.tsx ---
var Logo = _ref => {
var {
className,
theme = 'light'
} = _ref;
var theColor = theme === 'dark' ? '#9CA3AF' : '#808080';
var brandColor = theme === 'dark' ? '#FFFFFF' : '#333333';
return /*#__PURE__*/React.createElement("svg", {
width: "110",
height: "30",
viewBox: "0 0 110 30",
className: className,
xmlns: "http://www.w3.org/2000/svg",
"aria-label": "The Brand Logo"
}, /*#__PURE__*/React.createElement("g", null, /*#__PURE__*/React.createElement("g", {
transform: "translate(0, -2) rotate(-5, 15, 15)"
}, /*#__PURE__*/React.createElement("path", {
d: "M0,3.993C0,1.788,1.788,0,3.993,0h22.013C28.212,0,30,1.788,30,3.993v22.013 c0,2.205-1.788,3.993-3.993,3.993H3.993C1.788,30,0,28.212,0,26.007V3.993z",
fill: "#29B6F6"
}), /*#__PURE__*/React.createElement("text", {
x: "15",
y: "21",
textAnchor: "middle",
fontSize: "18",
fontWeight: "bold",
fill: "white",
style: {
fontFamily: 'inherit'
}
}, "B")), /*#__PURE__*/React.createElement("text", {
x: "40",
y: "12",
fontSize: "9",
fill: theColor,
fontWeight: "600",
style: {
fontFamily: 'inherit'
}
}, "THE"), /*#__PURE__*/React.createElement("text", {
x: "40",
y: "27",
fontSize: "16",
fill: brandColor,
fontWeight: "bold",
style: {
fontFamily: 'inherit'
}
}, "Brand")));
};
// --- END OF components/Logo.tsx ---
// --- START OF components/Header.tsx ---
var Header = () => {
var [isMenuOpen, setIsMenuOpen] = useState(false);
var navLinks = [{
name: 'Brand Creator',
href: 'https://www.thebrand.ai/brandcreator/index'
}, {
name: 'Templates',
href: 'https://www.thebrand.ai/i/designs'
}, {
name: 'Insights',
href: 'https://www.thebrand.ai/insights/'
}, {
name: 'Pricing',
href: 'https://www.thebrand.ai/brandpay/choose'
}, {
name: 'Blogs',
href: 'https://www.thebrand.ai/blogs'
}
];
return /*#__PURE__*/React.createElement("header", {
className: "bg-white/80 backdrop-blur-sm sticky top-0 z-50 shadow-sm"
}, /*#__PURE__*/React.createElement("div", {
className: "container mx-auto px-6 py-4"
}, /*#__PURE__*/React.createElement("div", {
className: "flex items-center justify-between"
}, /*#__PURE__*/React.createElement("div", {
className: "flex items-center space-x-8"
}, /*#__PURE__*/React.createElement("a", {
href: "/",
"aria-label": "Brand AI Homepage"
}, /*#__PURE__*/React.createElement(Logo, null)), /*#__PURE__*/React.createElement("nav", {
className: "hidden md:flex items-center space-x-6"
}, navLinks.map(link => /*#__PURE__*/React.createElement("a", {
key: link.name,
href: link.href,
className: "text-gray-600 hover:text-brand-cyan font-medium transition-colors"
}, link.name)))), /*#__PURE__*/React.createElement("div", {
className: "hidden md:flex items-center space-x-4"
}, /*#__PURE__*/React.createElement("a", {
href: "https://bit.ly/2LpQJmO",
target: "_blank",
rel: "noopener noreferrer",
className: "font-semibold text-gray-600 hover:text-brand-cyan transition-colors border border-gray-300 rounded-lg py-2 px-4 text-sm hover:border-brand-cyan"
}, "Download App"),
)), /*#__PURE__*/React.createElement("div", {
className: "md:hidden"
}, /*#__PURE__*/React.createElement("button", {
onClick: () => setIsMenuOpen(!isMenuOpen),
className: "text-gray-800 focus:outline-none",
"aria-label": "Toggle menu"
}, /*#__PURE__*/React.createElement("svg", {
className: "w-6 h-6",
fill: "none",
stroke: "currentColor",
viewBox: "0 0 24 24",
xmlns: "http://www.w3.org/2000/svg"
}, /*#__PURE__*/React.createElement("path", {
strokeLinecap: "round",
strokeLinejoin: "round",
strokeWidth: "2",
d: isMenuOpen ? "M6 18L18 6M6 6l12 12" : "M4 6h16M4 12h16M4 18h16"
}))))), isMenuOpen && /*#__PURE__*/React.createElement("div", {
className: "md:hidden mt-4"
}, /*#__PURE__*/React.createElement("nav", {
className: "flex flex-col space-y-4"
}, navLinks.map(link => /*#__PURE__*/React.createElement("a", {
key: link.name,
href: link.href,
className: "text-gray-600 hover:text-brand-cyan font-medium transition-colors"
}, link.name)), /*#__PURE__*/React.createElement("div", {
className: "flex flex-col space-y-3 pt-4 border-t"
}, /*#__PURE__*/React.createElement("a", {
href: "https://bit.ly/2LpQJmO",
target: "_blank",
rel: "noopener noreferrer",
className: "w-full text-center border border-gray-300 text-gray-600 font-bold py-2 px-4 rounded-lg hover:border-brand-cyan hover:text-brand-cyan transition-colors"
}, "Download App") )))));
};
// --- END OF components/Header.tsx ---
// Override Header to render nothing and rely on hardcoded HTML header
Header = () => null;
// --- START OF components/Footer.tsx ---
var Footer = () => {
var socialLinks = [{
name: 'Facebook',
href: 'https://facebook.com/TheBrandApp',
icon: /*#__PURE__*/React.createElement(FacebookIcon, null)
}, {
name: 'Twitter',
href: 'https://twitter.com/thebrandhq',
icon: /*#__PURE__*/React.createElement(TwitterIcon, null)
}, {
name: 'Instagram',
href: 'https://www.instagram.com/thebrandapp',
icon: /*#__PURE__*/React.createElement(InstagramIcon, null)
}, {
name: 'LinkedIn',
href: 'https://www.linkedin.com/company/the-brand-app',
icon: /*#__PURE__*/React.createElement(LinkedInIcon, null)
}];
var footerSections = [{
title: 'Features',
links: [{
name: 'Brand Creator',
href: 'https://www.thebrand.ai/brandcreator/index'
}, {
name: 'My Designs',
href: 'https://www.thebrand.ai/i/account/designs'
}, {
name: 'Templates',
href: 'https://www.thebrand.ai/i'
}, {
name: 'Brand Toolkit',
href: 'https://www.thebrand.ai/insights/dashboard?feature=brandtoolkit'
}]
}, {
title: 'Resources',
links: [{
name: 'Insights',
href: 'https://www.thebrand.ai/insights/'
}, {
name: 'Blogs',
href: 'https://www.thebrand.ai/blogs'
}, {
name: 'Brand Journeys',
href: 'https://www.thebrand.ai/insights/dashboard?feature=browsejourneys'
}, {
name: 'Sites',
href: 'https://www.thebrand.ai/sites/index'
}]
}, {
title: 'Account',
links: [{
name: 'My Brand Identity',
href: 'https://www.thebrand.ai/i/account/build_brand'
}, {
name: 'Update Brand Details',
href: '#'
}, {
name: 'Onboarding',
href: 'https://www.thebrand.ai/insights/auth-onboard'
}]
}, {
title: 'Company',
links: [{
name: 'About Us',
href: '#'
}, {
name: 'Contact Us',
href: 'https://www.thebrand.ai/i/contact'
}, {
name: 'Careers',
href: '#'
}]
}];
return /*#__PURE__*/React.createElement("footer", {
className: "bg-brand-midnight text-white"
}, /*#__PURE__*/React.createElement("div", {
className: "container mx-auto px-6 py-12"
}, /*#__PURE__*/React.createElement("div", {
className: "grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-8"
}, /*#__PURE__*/React.createElement("div", {
className: "col-span-2 lg:col-span-1"
}, /*#__PURE__*/React.createElement("a", {
href: "/",
"aria-label": "Brand AI Homepage"
}, /*#__PURE__*/React.createElement(Logo, {
theme: "dark"
})), /*#__PURE__*/React.createElement("p", {
className: "mt-4 text-gray-400"
}, "Your vision, amplified.")), footerSections.map(section => /*#__PURE__*/React.createElement("div", {
key: section.title
}, /*#__PURE__*/React.createElement("h3", {
className: "font-bold uppercase text-gray-400"
}, section.title), /*#__PURE__*/React.createElement("ul", {
className: "mt-4 space-y-2"
}, section.links.map(link => /*#__PURE__*/React.createElement("li", {
key: link.name
}, /*#__PURE__*/React.createElement("a", {
href: link.href,
className: "text-gray-300 hover:text-brand-cyan transition-colors"
}, link.name))))))), /*#__PURE__*/React.createElement("div", {
className: "mt-12 pt-8 border-t border-gray-800 flex flex-col md:flex-row justify-between items-center"
}, /*#__PURE__*/React.createElement("p", {
className: "text-gray-400"
}, "\xA9 ", new Date().getFullYear(), " Brand AI. All rights reserved."), /*#__PURE__*/React.createElement("div", {
className: "flex space-x-4 mt-4 md:mt-0"
}, socialLinks.map(social => /*#__PURE__*/React.createElement("a", {
key: social.name,
href: social.href,
className: "text-gray-400 hover:text-brand-cyan transition-colors",
"aria-label": social.name
}, /*#__PURE__*/React.createElement("span", {
className: "sr-only"
}, social.name), social.icon))))));
};
// --- END OF components/Footer.tsx ---
// --- START OF components/FeatureCard.tsx ---
var FeatureCard = _ref2 => {
var {
title,
description,
link,
buttonText,
imageUrl,
bgColor,
size = 'normal'
} = _ref2;
var sizeClasses = {
normal: 'min-h-[480px] md:min-h-[520px]',
large: 'min-h-[520px] md:col-span-2 lg:col-span-1' // Special classes can be added here
};
return /*#__PURE__*/React.createElement("div", {
className: "relative rounded-3xl overflow-hidden shadow-lg group text-white p-8 flex flex-col justify-between transition-all duration-500 ease-in-out transform hover:-translate-y-2 ".concat(sizeClasses[size]),
style: {
backgroundColor: bgColor
}
}, /*#__PURE__*/React.createElement("div", {
className: "z-10 relative"
}, /*#__PURE__*/React.createElement("h3", {
className: "text-3xl md:text-4xl font-bold mb-4"
}, title), description && /*#__PURE__*/React.createElement("p", {
className: "text-lg opacity-90 mb-6"
}, description), /*#__PURE__*/React.createElement("a", {
href: link,
className: "bg-white text-gray-800 font-bold py-2 px-6 rounded-lg text-md hover:bg-gray-200 transition-all duration-300 ease-in-out transform group-hover:-translate-y-1 inline-block"
}, buttonText)), /*#__PURE__*/React.createElement("div", {
className: "absolute inset-0 z-0"
}, /*#__PURE__*/React.createElement("img", {
src: imageUrl,
alt: title,
className: "w-full h-full object-cover opacity-80 group-hover:opacity-100 group-hover:scale-110 transition-all duration-500 ease-in-out",
loading: "lazy",
decoding: "async"
}), /*#__PURE__*/React.createElement("div", {
className: "absolute inset-0 bg-black bg-opacity-20 group-hover:bg-opacity-10 transition-all duration-500 ease-in-out"
})));
};
// --- END OF components/FeatureCard.tsx ---
// --- START OF components/TemplateCard.tsx ---
var TemplateCard = _ref3 => {
var {
title,
url
} = _ref3;
var imageSeed = title.replace(/\s+/g, '-').toLowerCase();
return /*#__PURE__*/React.createElement("a", {
href: url,
className: "block group rounded-lg overflow-hidden bg-gray-100 shadow-sm hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1"
}, /*#__PURE__*/React.createElement("div", {
className: "relative aspect-[4/3] overflow-hidden"
}, /*#__PURE__*/React.createElement("img", {
src: "https://picsum.photos/seed/".concat(imageSeed, "/400/300"),
alt: title,
className: "w-full h-full object-cover group-hover:scale-105 transition-transform duration-300",
loading: "lazy",
decoding: "async"
}), /*#__PURE__*/React.createElement("div", {
className: "absolute inset-0 bg-black/10 group-hover:bg-black/0 transition-colors duration-300"
})), /*#__PURE__*/React.createElement("div", {
className: "p-3"
}, /*#__PURE__*/React.createElement("h4", {
className: "text-sm font-semibold text-gray-800 truncate group-hover:text-brand-cyan transition-colors duration-300"
}, title)));
};
// --- END OF components/TemplateCard.tsx ---
// --- START OF components/InteractiveTemplates.tsx ---
var InteractiveTemplates = () => {
var initialCache = window.__TEMPLATE_CATEGORIES_CACHE || [];
var [categories, setCategories] = useState(initialCache);
var hasSocialInit = initialCache.some(function (c) { return c.category === 'Social Media'; });
var [activeTab, setActiveTab] = useState(hasSocialInit ? 'Social Media' : (initialCache[0] && initialCache[0].category) || 'Social Media');
var [isLoading, setIsLoading] = useState(initialCache.length === 0);
React.useEffect(function () {
if (initialCache.length) { setIsLoading(false); return; }
fetch('categories.json').then(function (res) {
return res.json();
}).then(function (data) {
var mapped = (Array.isArray(data) ? data : []).map(function (cat) {
return {
category: cat.label,
templates: (Array.isArray(cat.children) ? cat.children : []).map(function (child) {
return { title: child.label, url: child.url };
})
};
}).filter(function (c) { return c.templates && c.templates.length; });
var desiredOrder = ['Social Media','Invites & Cards','Documents','Advertising','Covers','More'];
var ordered = mapped.slice().sort(function(a,b){
var ai = desiredOrder.indexOf(a.category);
var bi = desiredOrder.indexOf(b.category);
if (ai === -1 && bi === -1) return 0;
if (ai === -1) return 1;
if (bi === -1) return -1;
return ai - bi;
});
setCategories(ordered);
var hasSocial = mapped.some(function (c) { return c.category === 'Social Media'; });
setActiveTab(hasSocial ? 'Social Media' : (mapped[0] && mapped[0].category) || '');
window.__TEMPLATE_CATEGORIES_CACHE = ordered;
setIsLoading(false);
}).catch(function () {
// If fetch fails, do nothing; categories remain empty
setIsLoading(false);
});
}, []);
var activeCategory = categories.find(function (cat) { return cat.category === activeTab; });
return /*#__PURE__*/React.createElement("div", { className: "container mx-auto px-6" },
/*#__PURE__*/React.createElement("div", { className: "text-center mb-12" },
/*#__PURE__*/React.createElement("h2", { className: "text-4xl md:text-5xl font-bold mb-4" }, "Templates for absolutely anything"),
/*#__PURE__*/React.createElement("p", { className: "text-lg md:text-xl text-gray-600 max-w-2xl mx-auto" }, "Jumpstart your next project with thousands of professional templates for any occasion."),
/*#__PURE__*/React.createElement("a", { href: "https://www.thebrand.ai/brandcreator/dashboard/auth-join.php?url=home", className: "mt-8 inline-block bg-brand-cyan text-white font-bold py-3 px-8 rounded-lg text-lg hover:opacity-90 transition-opacity" }, "Create Your Brand Now")
),
/*#__PURE__*/React.createElement("div", { className: "flex flex-wrap justify-center gap-2 md:gap-4 mb-10" },
categories.map(function (cat) {
return /*#__PURE__*/React.createElement("button", {
key: cat.category,
onClick: function () { return setActiveTab(cat.category); },
className: "py-2 px-5 rounded-full font-semibold transition-all duration-300 text-sm md:text-base ".concat(activeTab === cat.category ? 'bg-brand-cyan text-white shadow-lg transform scale-105' : 'bg-gray-200 text-gray-700 hover:bg-gray-300')
}, cat.category);
})
),
/*#__PURE__*/React.createElement("div", { key: activeTab, className: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-6 md:gap-8" },
isLoading ? Array.from({length:12}).map(function(_,i){
return /*#__PURE__*/React.createElement("div", { key:i, className:"rounded-lg bg-gray-200 h-40 animate-pulse"});
}) : (activeCategory ? activeCategory.templates.map(function (template) {
return /*#__PURE__*/React.createElement(TemplateCard, { key: template.url, title: template.title, url: template.url });
}) : null)
)
);
};
// --- END OF components/InteractiveTemplates.tsx ---
// --- START OF App.tsx ---
var App = () => {
return /*#__PURE__*/React.createElement("div", {
className: "bg-white text-gray-800 font-sans"
}, /*#__PURE__*/React.createElement(Header, null), /*#__PURE__*/React.createElement("main", null, /*#__PURE__*/React.createElement("section", {
className: "relative text-white overflow-hidden bg-brand-midnight"
}, /*#__PURE__*/React.createElement("div", {
"aria-hidden": "true",
className: "absolute inset-0 z-0 opacity-50"
}, /*#__PURE__*/React.createElement("div", {
className: "absolute top-[-30%] left-[-30%] w-4/5 h-4/5 rounded-full bg-gradient-to-br from-brand-cyan to-transparent filter blur-3xl"
}), /*#__PURE__*/React.createElement("div", {
className: "absolute bottom-[-30%] right-[-30%] w-4/5 h-4/5 rounded-full bg-gradient-to-tl from-brand-cyan to-transparent filter blur-3xl"
})), /*#__PURE__*/React.createElement("div", {
className: "relative z-10 flex flex-col items-center justify-center min-h-[70vh] md:min-h-[80vh] px-4 text-center"
}, /*#__PURE__*/React.createElement("h1", {
className: "text-5xl md:text-7xl lg:text-8xl font-extrabold mb-4 tracking-tight"
}, "Your Entire Brand. One Intelligent Platform."), /*#__PURE__*/React.createElement("p", {
className: "text-lg md:text-2xl max-w-3xl mb-8"
}, "Imagine the creative firepower of a design agency, the strategic insight of a consultant, and the brilliance of a top-tier marketing team\u2014all at your fingertips. That's Brand AI."), /*#__PURE__*/React.createElement("div", {
className: "flex flex-wrap justify-center gap-4"
}, /*#__PURE__*/React.createElement("a", {
href: "https://www.thebrand.ai/brandcreator/index",
className: "bg-white text-brand-midnight font-bold py-3 px-8 rounded-lg text-lg hover:bg-gray-200 transition-all duration-300 transform hover:scale-105"
}, "Start creating for free"), /*#__PURE__*/React.createElement("a", {
href: "https://www.thebrand.ai/i/",
className: "bg-white/10 backdrop-blur-sm text-white font-bold py-3 px-8 rounded-lg text-lg hover:bg-white/20 transition-all duration-300 transform hover:scale-105"
}, "Browse Templates")))), /*#__PURE__*/React.createElement("section", {
className: "py-20 md:py-28 bg-gray-50"
}, /*#__PURE__*/React.createElement("div", {
className: "container mx-auto px-6 text-center"
}, /*#__PURE__*/React.createElement("h2", {
className: "text-4xl md:text-5xl font-bold mb-4"
}, "The old way is broken."), /*#__PURE__*/React.createElement("p", {
className: "text-lg md:text-xl text-gray-600 max-w-3xl mx-auto mb-12"
}, "Did you know 90% of businesses struggle to stand out? They spend months and thousands on solutions that don\u2019t deliver."), /*#__PURE__*/React.createElement("div", {
className: "grid grid-cols-1 md:grid-cols-3 gap-8 text-left"
}, PROBLEM_CARDS.map((card, index) => /*#__PURE__*/React.createElement("div", {
key: index,
className: "bg-white p-8 rounded-2xl shadow-md hover:shadow-xl hover:-translate-y-2 transition-all duration-300"
}, /*#__PURE__*/React.createElement("div", {
className: "text-brand-cyan mb-4"
}, card.icon), /*#__PURE__*/React.createElement("h3", {
className: "text-xl font-bold mb-2"
}, card.title), /*#__PURE__*/React.createElement("p", {
className: "text-gray-600"
}, card.description)))))), /*#__PURE__*/React.createElement("section", {
className: "py-20 md:py-28"
}, /*#__PURE__*/React.createElement("div", {
className: "container mx-auto px-6"
}, /*#__PURE__*/React.createElement("h2", {
className: "text-4xl md:text-5xl font-bold text-center mb-12"
}, "An entire toolkit, powered by AI."), /*#__PURE__*/React.createElement("div", {
className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8"
}, FEATURES_PRIMARY.map((feature, index) => /*#__PURE__*/React.createElement(FeatureCard, _extends({
key: index
}, feature)))))), /*#__PURE__*/React.createElement("section", {
className: "py-20 md:py-24 bg-brand-midnight text-white"
}, /*#__PURE__*/React.createElement("div", {
className: "container mx-auto px-6 text-center"
}, /*#__PURE__*/React.createElement("h2", {
className: "text-5xl md:text-6xl font-extrabold mb-4 tracking-tight"
}, "34,000+ users and growing."), /*#__PURE__*/React.createElement("p", {
className: "text-lg md:text-xl opacity-80 max-w-3xl mx-auto"
}, "Trusted by governments, SMEs, and startups worldwide. All achieved through organic growth fueled by user trust and referrals."))), /*#__PURE__*/React.createElement("section", {
className: "py-20 md:py-28 bg-gray-50"
}, /*#__PURE__*/React.createElement("div", {
className: "container mx-auto px-6"
}, /*#__PURE__*/React.createElement("h2", {
className: "text-4xl md:text-5xl font-bold text-center mb-12"
}, "All the tools. All in one place."), /*#__PURE__*/React.createElement("div", {
className: "grid grid-cols-1 md:grid-cols-2 gap-8"
}, FEATURES_SECONDARY.map((feature, index) => /*#__PURE__*/React.createElement(FeatureCard, _extends({
key: index
}, feature)))))), /*#__PURE__*/React.createElement("section", {
className: "py-20 md:py-28"
}, /*#__PURE__*/React.createElement("div", {
className: "container mx-auto px-6 text-center"
}, /*#__PURE__*/React.createElement("h2", {
className: "text-4xl md:text-5xl font-bold mb-12"
}, "Hyper-contextual solutions for everyone."), /*#__PURE__*/React.createElement("div", {
className: "flex flex-wrap justify-center gap-8 md:gap-12"
}, TARGET_MARKETS.map((market, index) => /*#__PURE__*/React.createElement("div", {
key: index,
className: "flex flex-col items-center text-center w-32"
}, /*#__PURE__*/React.createElement("div", {
className: "bg-cyan-100 text-brand-cyan rounded-full p-5 mb-4 transition-all duration-300 transform hover:scale-110 hover:bg-cyan-200"
}, market.icon), /*#__PURE__*/React.createElement("h3", {
className: "font-semibold text-gray-700"
}, market.name)))))), /*#__PURE__*/React.createElement("section", {
className: "py-20 md:py-28 bg-gray-50"
}, /*#__PURE__*/React.createElement(InteractiveTemplates, null)), /*#__PURE__*/React.createElement("section", {
className: "py-20 md:py-28"
}, /*#__PURE__*/React.createElement("div", {
className: "container mx-auto px-6"
}, /*#__PURE__*/React.createElement("h2", {
className: "text-4xl md:text-5xl font-bold text-center mb-12"
}, "Your brand's entire ecosystem, connected."), /*#__PURE__*/React.createElement("div", {
className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8"
}, FEATURES_TERTIARY.map((feature, index) => /*#__PURE__*/React.createElement(FeatureCard, _extends({
key: index
}, feature))))))), /*#__PURE__*/React.createElement(Footer, null));
};
// --- END OF App.tsx ---
// --- START OF index.tsx ---
// React mount disabled to retain static HTML content within #root.
// --- END OF index.tsx ---
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwiUmVhY3RET00iLCJGRUFUVVJFU19QUklNQVJZIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImxpbmsiLCJidXR0b25UZXh0IiwiaW1hZ2VVcmwiLCJiZ0NvbG9yIiwiRkVBVFVSRVNfU0VDT05EQVJZIiwic2l6ZSIsIkZFQVRVUkVTX1RFUlRJQVJZIiwiQ29zdEljb24iLCJjcmVhdGVFbGVtZW50IiwieG1sbnMiLCJjbGFzc05hbWUiLCJmaWxsIiwidmlld0JveCIsInN0cm9rZSIsInN0cm9rZVdpZHRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwiZCIsIlRpbWVJY29uIiwiVG9vbHNJY29uIiwiUFJPQkxFTV9DQVJEUyIsImljb24iLCJTbWVJY29uIiwiR292ZXJubWVudEljb24iLCJTdGFydHVwSWNvbiIsIk1hcmtldGVySWNvbiIsIkNvcnBvcmF0ZUljb24iLCJUQVJHRVRfTUFSS0VUUyIsIm5hbWUiLCJGYWNlYm9va0ljb24iLCJmaWxsUnVsZSIsImNsaXBSdWxlIiwiVHdpdHRlckljb24iLCJJbnN0YWdyYW1JY29uIiwiTGlua2VkSW5JY29uIiwiVEVNUExBVEVfQ0FURUdPUklFUyIsImNhdGVnb3J5IiwidGVtcGxhdGVzIiwidXJsIiwiTG9nbyIsIl9yZWYiLCJ0aGVtZSIsInRoZUNvbG9yIiwiYnJhbmRDb2xvciIsIndpZHRoIiwiaGVpZ2h0IiwidHJhbnNmb3JtIiwieCIsInkiLCJ0ZXh0QW5jaG9yIiwiZm9udFNpemUiLCJmb250V2VpZ2h0Iiwic3R5bGUiLCJmb250RmFtaWx5IiwiSGVhZGVyIiwiaXNNZW51T3BlbiIsInNldElzTWVudU9wZW4iLCJuYXZMaW5rcyIsImhyZWYiLCJtYXAiLCJrZXkiLCJ0YXJnZXQiLCJyZWwiLCJvbkNsaWNrIiwiRm9vdGVyIiwic29jaWFsTGlua3MiLCJmb290ZXJTZWN0aW9ucyIsImxpbmtzIiwic2VjdGlvbiIsIkRhdGUiLCJnZXRGdWxsWWVhciIsInNvY2lhbCIsIkZlYXR1cmVDYXJkIiwiX3JlZjIiLCJzaXplQ2xhc3NlcyIsIm5vcm1hbCIsImxhcmdlIiwiY29uY2F0IiwiYmFja2dyb3VuZENvbG9yIiwic3JjIiwiYWx0IiwibG9hZGluZyIsImRlY29kaW5nIiwiVGVtcGxhdGVDYXJkIiwiX3JlZjMiLCJpbWFnZVNlZWQiLCJyZXBsYWNlIiwidG9Mb3dlckNhc2UiLCJJbnRlcmFjdGl2ZVRlbXBsYXRlcyIsImFjdGl2ZVRhYiIsInNldEFjdGl2ZVRhYiIsImFjdGl2ZUNhdGVnb3J5IiwiZmluZCIsImNhdCIsInRlbXBsYXRlIiwiQXBwIiwiY2FyZCIsImluZGV4IiwiZmVhdHVyZSIsIl9leHRlbmRzIiwibWFya2V0Iiwicm9vdEVsZW1lbnQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiRXJyb3IiLCJyb290IiwiY3JlYXRlUm9vdCIsInJlbmRlciIsIlN0cmljdE1vZGUiXSwic291cmNlcyI6WyJJbmxpbmUgQmFiZWwgc2NyaXB0Il0sInNvdXJjZXNDb250ZW50IjpbIlxuICAgICAgaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuICAgICAgaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnO1xuXG4gICAgICAvLyAtLS0gU1RBUlQgT0YgY29uc3RhbnRzLnRzeCAtLS1cbiAgICAgIGNvbnN0IEZFQVRVUkVTX1BSSU1BUlkgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ0JyaW5nIFlvdXIgQnJhbmQgdG8gTGlmZSB3aXRoIEJyYW5kIENyZWF0b3InLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUXVpY2tseSBhbmQgZWZmb3J0bGVzc2x5IGNyZWF0ZSBhIHBvd2VyZnVsLCBwcm9mZXNzaW9uYWwgYnJhbmQgaWRlbnRpdHkgYW5kIGxvZ29zIHRoYXQgc3RhbmQgb3V0IGFuZCBkcml2ZSBidXNpbmVzcyBncm93dGguJyxcbiAgICAgICAgICBsaW5rOiAnaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvYnJhbmRjcmVhdG9yL2luZGV4JyxcbiAgICAgICAgICBidXR0b25UZXh0OiAnRXhwbG9yZSBCcmFuZCBDcmVhdG9yJyxcbiAgICAgICAgICBpbWFnZVVybDogJ2h0dHBzOi8vcGljc3VtLnBob3Rvcy9zZWVkL2Rlc2lnbi1hc3NldHMvODAwLzYwMCcsXG4gICAgICAgICAgYmdDb2xvcjogJyMxRTAwM0InLCAvLyBEZWVwIFB1cnBsZS9JbmRpZ29cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnUmV2b2x1dGlvbml6ZSBZb3VyIEJyYW5kIHdpdGggQUkgSW5zaWdodHMnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU3VwZXJjaGFyZ2UgeW91ciBicmFuZCB3aXRoIGludGVsbGlnZW50IHNvbHV0aW9ucywgZGVzaWduLCBhbmQgYmlnIGRhdGEgdG8gZHJpdmUgZ3Jvd3RoLCBlbmdhZ2VtZW50LCBhbmQgbWVhc3VyYWJsZSBzdWNjZXNzLicsXG4gICAgICAgICAgbGluazogJ2h0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2luc2lnaHRzLycsXG4gICAgICAgICAgYnV0dG9uVGV4dDogJ0V4cGxvcmUgSW5zaWdodHMnLFxuICAgICAgICAgIGltYWdlVXJsOiAnaHR0cHM6Ly9waWNzdW0ucGhvdG9zL3NlZWQvZGF0YS12aXovODAwLzYwMCcsXG4gICAgICAgICAgYmdDb2xvcjogJyMwMDNENUInLCAvLyBEYXJrIEN5YW4vQmx1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6ICdCdWlsZCBhIFdlYnNpdGUgRWFzaWx5IHdpdGggQnJhbmQgU2l0ZXMnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ2hvb3NlIGZyb20gb3ZlciAxMDAgYW1hemluZyB0ZW1wbGF0ZXMgdG8gYnVpbGQgYSBzdHVubmluZyB3ZWJzaXRlIHRoYXQgZW1wb3dlcnMgeW91ciBicmFuZCB0byBzdGFuZCBvdXQuJyxcbiAgICAgICAgICBsaW5rOiAnaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvc2l0ZXMvaW5kZXgnLFxuICAgICAgICAgIGJ1dHRvblRleHQ6ICdFeHBsb3JlIEJyYW5kIFNpdGVzJyxcbiAgICAgICAgICBpbWFnZVVybDogJ2h0dHBzOi8vcGljc3VtLnBob3Rvcy9zZWVkL3dlYi1kZXNpZ24vODAwLzYwMCcsXG4gICAgICAgICAgYmdDb2xvcjogJyMwMDRDNEMnLCAvLyBEYXJrIFRlYWxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IEZFQVRVUkVTX1NFQ09OREFSWSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnTWVldCB0aGUgVmlzdWFsIFN1aXRlJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ1lvdXIgZW50aXJlIHdvcmtmbG93IGluIG9uZSBwbGFjZS4gRnJvbSBiZXNwb2tlIGRlc2lnbnMgYW5kIGluc2lnaHRmdWwgYmxvZ3MgdG8gdGFpbG9yZWQgc3RyYXRlZ2llc+KAlGFsbCBwb3dlcmVkIGJ5IEFJLicsXG4gICAgICAgICAgbGluazogJ2h0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2luc2lnaHRzL2Rhc2hib2FyZD9mZWF0dXJlPWJyYW5kdG9vbGtpdCcsXG4gICAgICAgICAgYnV0dG9uVGV4dDogJ0V4cGxvcmUgVmlzdWFsIFN1aXRlJyxcbiAgICAgICAgICBpbWFnZVVybDogJ2h0dHBzOi8vcGljc3VtLnBob3Rvcy9zZWVkL2JyYW5kLXN1aXRlLzEyMDAvODAwJyxcbiAgICAgICAgICBiZ0NvbG9yOiAnIzNEMDA0RicsIC8vIERhcmsgTWFnZW50YS9QdXJwbGVcbiAgICAgICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6ICdQcmVzZW50IHdpdGggaW1wYWN0JyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JlaW1hZ2luZSBwcmVzZW50YXRpb25zIHdpdGggY2luZW1hdGljIHZpc3VhbHMsIHNtYXJ0IGNvbGxhYm9yYXRpb24sIGFuZCBBSS1wb3dlcmVkIHRvb2xzLicsXG4gICAgICAgICAgbGluazogJ2h0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2kvZGVzaWducycsXG4gICAgICAgICAgYnV0dG9uVGV4dDogJ1RyeSBQcmVzZW50YXRpb25zJyxcbiAgICAgICAgICBpbWFnZVVybDogJ2h0dHBzOi8vcGljc3VtLnBob3Rvcy9zZWVkL2ltcGFjdC1wcmVzLzEyMDAvODAwJyxcbiAgICAgICAgICBiZ0NvbG9yOiAnIzAwNUY1OCcsIC8vIERlZXAgVGVhbC9HcmVlblxuICAgICAgICAgIHNpemU6ICdsYXJnZScsXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBGRUFUVVJFU19URVJUSUFSWSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnRGVmaW5lIHlvdXIgQnJhbmQgSWRlbnRpdHknLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQSBjZW50cmFsIGh1YiB0byBidWlsZCwgbWFuYWdlLCBhbmQgZXZvbHZlIHlvdXIgdW5pcXVlIGJyYW5kIGlkZW50aXR5IGFzIHlvdSBzY2FsZS4nLFxuICAgICAgICAgIGxpbms6ICdodHRwczovL3d3dy50aGVicmFuZC5haS9pL2FjY291bnQvYnVpbGRfYnJhbmQnLFxuICAgICAgICAgIGJ1dHRvblRleHQ6ICdCdWlsZCBNeSBCcmFuZCcsXG4gICAgICAgICAgaW1hZ2VVcmw6ICdodHRwczovL3BpY3N1bS5waG90b3Mvc2VlZC9icmFuZC1ndWlkZS84MDAvNjAwJyxcbiAgICAgICAgICBiZ0NvbG9yOiAnIzFBMjM3RScsIC8vIERhcmsgSW5kaWdvXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ0VuZC10by1lbmQgcGxhdGZvcm0gZm9yIGxhcmdlIG9yZ2FuaXphdGlvbnMnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU2NhbGUgYnJhbmQgY29uc2lzdGVuY3kgd2l0aCBlbnRlcnByaXNlLWdyYWRlIHRvb2xzLCBzZWN1cml0eSwgYW5kIHN1cHBvcnQgZm9yIGxhcmdlIG9yZ2FuaXphdGlvbnMuJyxcbiAgICAgICAgICBsaW5rOiAnIycsXG4gICAgICAgICAgYnV0dG9uVGV4dDogJ0V4cGxvcmUgRW50ZXJwcmlzZScsXG4gICAgICAgICAgaW1hZ2VVcmw6ICdodHRwczovL3BpY3N1bS5waG90b3Mvc2VlZC9jb3Jwb3JhdGUtZGFzaC84MDAvNjAwJyxcbiAgICAgICAgICBiZ0NvbG9yOiAnIzAwMjYzRScsIC8vIFZlcnkgRGFyayBCbHVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ1VubG9jayBHcm93dGggd2l0aCBJbnNpZ2h0IEpvdXJuZXlzJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJFeHBsb3JlIGV4cGVydC1sZWQgam91cm5leXMgdG8gdHJhbnNmb3JtIHlvdXIgc3RhcnR1cCdzIGdyb3d0aCwgb3ZlcmNvbWUgY2hhbGxlbmdlcywgYW5kIGFjaGlldmUgc3VjY2Vzcy5cIixcbiAgICAgICAgICBsaW5rOiAnaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaW5zaWdodHMvZGFzaGJvYXJkP2ZlYXR1cmU9YnJvd3Nlam91cm5leXMnLFxuICAgICAgICAgIGJ1dHRvblRleHQ6ICdEaXNjb3ZlciBZb3VyIFBhdGgnLFxuICAgICAgICAgIGltYWdlVXJsOiAnaHR0cHM6Ly9waWNzdW0ucGhvdG9zL3NlZWQvZ3Jvd3RoLXBhdGgvODAwLzYwMCcsXG4gICAgICAgICAgYmdDb2xvcjogJyMwMTU3OUInLCAvLyBMaWdodCBCbHVlXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBDb3N0SWNvbiA9ICgpID0+IChcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3NOYW1lPVwiaC0xMCB3LTEwXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlV2lkdGg9ezJ9PlxuICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBkPVwiTTEyIDhjLTEuNjU3IDAtMyAuODk1LTMgMnMxLjM0MyAyIDMgMiAzIC44OTUgMyAyLTEuMzQzIDItMyAybTAtOGMxLjExIDAgMi4wOC40MDIgMi41OTkgMU0xMiA4VjdtMCAxMHYtMW0tNS4yOTMtNi4yOTNsLS43MDcuNzA3TTE3LjI5MyA3LjcwN2wuNzA3LS43MDdNNS43MDcgMTYuMjkzbC43MDcuNzA3TTE2LjU4NiAxN0gxOWEyIDIgMCAwMDItMlY5YTIgMiAwIDAwLTItMkg1YTIgMiAwIDAwLTIgMnY2YTIgMiAwIDAwMiAyaDIuNDE0XCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICApO1xuXG4gICAgICBjb25zdCBUaW1lSWNvbiA9ICgpID0+IChcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3NOYW1lPVwiaC0xMCB3LTEwXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlV2lkdGg9ezJ9PlxuICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBkPVwiTTEyIDh2NGwzIDNtNi0zYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgKTtcblxuICAgICAgY29uc3QgVG9vbHNJY29uID0gKCkgPT4gKFxuICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzc05hbWU9XCJoLTEwIHctMTBcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2VXaWR0aD17Mn0+XG4gICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIGQ9XCJNMTEgNGEyIDIgMCAxMTQgMHYxYTEgMSAwIDAwMSAxaDNhMSAxIDAgMDExIDF2M2ExIDEgMCAwMS0xIDFoLTFhMiAyIDAgMTAwIDRoMWExIDEgMCAwMTEgMXYzYTEgMSAwIDAxLTEgMWgtM2ExIDEgMCAwMS0xLTF2LTFhMiAyIDAgMTAtNCAwdjFhMSAxIDAgMDEtMSAxSDdhMSAxIDAgMDEtMS0xdi0zYTEgMSAwIDAwLTEtMUg0YTIgMiAwIDExMC00aDFhMSAxIDAgMDAxLTFWN2ExIDEgMCAwMTEtMWgzYTEgMSAwIDAwMS0xVjR6XCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICApO1xuXG4gICAgICBjb25zdCBQUk9CTEVNX0NBUkRTID0gW1xuICAgICAgICB7XG4gICAgICAgICAgaWNvbjogPENvc3RJY29uIC8+LFxuICAgICAgICAgIHRpdGxlOiAnQWdlbmN5LUxldmVsIEJ1ZGdldHMnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU01FcyBhbmQgZ292ZXJubWVudHMgbmVlZCB0b3AtdGllciBzdHJhdGVneSBidXQgbGFjayB0aGUgYnVkZ2V0IGZvciBleHBlbnNpdmUgYWdlbmNpZXMuJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWNvbjogPFRpbWVJY29uIC8+LFxuICAgICAgICAgIHRpdGxlOiAnTW9udGhzIG9mIEd1ZXNzd29yaycsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdGb3VuZGVycyBhbmQgbWFya2V0ZXJzIHdhc3RlIHByZWNpb3VzIHRpbWUgZ3Vlc3NpbmcgdGhlaXIgbmV4dCBtb3ZlIGluc3RlYWQgb2YgYWN0aW5nIG9uIGNsZWFyIGluc2lnaHRzLidcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGljb246IDxUb29sc0ljb24gLz4sXG4gICAgICAgICAgdGl0bGU6ICdKdWdnbGluZyBhIERvemVuIFRvb2xzJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0NyZWF0aXZlcyBqdWdnbGUgbXVsdGlwbGUsIGRpc2Nvbm5lY3RlZCB0b29scyB0byBjcmVhdGUgYSBzaW5nbGUgY2FtcGFpZ24sIHdpdGggbm9uZSBvZiB0aGVtIHRhbGtpbmcgdG8gZWFjaCBvdGhlci4nXG4gICAgICAgIH1cbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IFNtZUljb24gPSAoKSA9PiAoXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzTmFtZT1cImgtOCB3LThcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2VXaWR0aD17Mn0+XG4gICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIGQ9XCJNMTkgMjFWNWEyIDIgMCAwMC0yLTJIN2EyIDIgMCAwMC0yIDJ2MTZtMTQgMGgybS0yIDBoLTVtLTkgMEgzbTIgMHYtNG0wIDRoNW0wIDB2LTRtMCA0aDVtLTUtNHYtNWg1djVoLTV6XCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICApO1xuICAgICAgY29uc3QgR292ZXJubWVudEljb24gPSAoKSA9PiAoXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzTmFtZT1cImgtOCB3LThcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2VXaWR0aD17Mn0+XG4gICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIGQ9XCJNMTIgMjFsLTItMm0yIDJsMi0ybTIgMmwyLTJNNSAxNWwtMi0ybTIgMmwyLTJtMiAybDItMm0yIDJsMi0yTTUgMjF2LTZhMiAyIDAgMDEyLTJoMTBhMiAyIDAgMDEyIDJ2NlwiIC8+IDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBkPVwiTTMgMjFoMThNNSAxMGw3LTcgNyA3XCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICApO1xuICAgICAgY29uc3QgU3RhcnR1cEljb24gPSAoKSA9PiAoXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzTmFtZT1cImgtOCB3LThcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2VXaWR0aD17Mn0+XG4gICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIGQ9XCJNMTMgMTBWM0w0IDE0aDd2N2w5LTExaC03elwiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgKTtcbiAgICAgIGNvbnN0IE1hcmtldGVySWNvbiA9ICgpID0+IChcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3NOYW1lPVwiaC04IHctOFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZVdpZHRoPXsyfT5cbiAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgZD1cIk0xMSAzLjA1NUE5LjAwMSA5LjAwMSAwIDEwMjAuOTQ1IDEzSDExVjMuMDU1elwiIC8+XG4gICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIGQ9XCJNMjAuNDg4IDlIMTVWMy41MTJBOS4wMjUgOS4wMjUgMCAwMTIwLjQ4OCA5elwiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgKTtcbiAgICAgIGNvbnN0IENvcnBvcmF0ZUljb24gPSAoKSA9PiAoXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzTmFtZT1cImgtOCB3LThcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2VXaWR0aD17Mn0+XG4gICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIGQ9XCJNMTkgMjFWNWEyIDIgMCAwMC0yLTJIN2EyIDIgMCAwMC0yIDJ2MTZtMTQgMGgybS0yIDBoLTVtLTkgMEgzbTIgMHYtNG0wIDRoNW0wIDB2LTRtMCA0aDVtLTUtNFY1aDV2N2gtNXpcIiAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IFRBUkdFVF9NQVJLRVRTID0gW1xuICAgICAgICB7IGljb246IDxTbWVJY29uIC8+LCBuYW1lOiAnU01FcycgfSxcbiAgICAgICAgeyBpY29uOiA8R292ZXJubWVudEljb24gLz4sIG5hbWU6ICdHb3Zlcm5tZW50cycgfSxcbiAgICAgICAgeyBpY29uOiA8U3RhcnR1cEljb24gLz4sIG5hbWU6ICdTdGFydHVwcycgfSxcbiAgICAgICAgeyBpY29uOiA8TWFya2V0ZXJJY29uIC8+LCBuYW1lOiAnTWFya2V0ZXJzJyB9LFxuICAgICAgICB7IGljb246IDxDb3Jwb3JhdGVJY29uIC8+LCBuYW1lOiAnQ29ycG9yYXRpb25zJyB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgRmFjZWJvb2tJY29uID0gKCkgPT4gKFxuICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNiBoLTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgIDxwYXRoIGZpbGxSdWxlPVwiZXZlbm9kZFwiIGQ9XCJNMjIgMTJjMC01LjUyMy00LjQ3Ny0xMC0xMC0xMFMyIDYuNDc3IDIgMTJjMCA0Ljk5MSAzLjY1NyA5LjEyOCA4LjQzOCA5Ljg3OHYtNi45ODdoLTIuNTRWMTJoMi41NFY5Ljc5N2MwLTIuNTA2IDEuNDkyLTMuODkgMy43NzctMy44OSAxLjA5NCAwIDIuMjM4LjE5NSAyLjIzOC4xOTV2Mi40NmgtMS4yNmMtMS4yNDMgMC0xLjYzLjc3MS0xLjYzIDEuNTYyVjEyaDIuNzczbC0uNDQzIDIuODloLTIuMzN2Ni45ODhDMTguMzQzIDIxLjEyOCAyMiAxNi45OTEgMjIgMTJ6XCIgY2xpcFJ1bGU9XCJldmVub2RkXCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICApO1xuXG4gICAgICBjb25zdCBUd2l0dGVySWNvbiA9ICgpID0+IChcbiAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTYgaC02XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTTguMjkgMjAuMjUxYzcuNTQ3IDAgMTEuNjc1LTYuMjUzIDExLjY3NS0xMS42NzUgMC0uMTc4IDAtLjM1NS0uMDEyLS41M0E4LjM0OCA4LjM0OCAwIDAwMjIgNS45MmE4LjE5IDguMTkgMCAwMS0yLjM1Ny42NDYgNC4xMTggNC4xMTggMCAwMDEuODA0LTIuMjcgOC4yMjQgOC4yMjQgMCAwMS0yLjYwNS45OTYgNC4xMDcgNC4xMDcgMCAwMC02Ljk5MyAzLjc0MyAxMS42NSAxMS42NSAwIDAxLTguNDU3LTQuMjg3IDQuMTA2IDQuMTA2IDAgMDAxLjI3IDUuNDc3QTQuMDcyIDQuMDcyIDAgMDEyLjggOS43MXYuMDUyYTQuMTA1IDQuMTA1IDAgMDAzLjI5MiA0LjAyMiA0LjA5NSA0LjA5NSAwIDAxLTEuODUzLjA3IDQuMTA4IDQuMTA4IDAgMDAzLjgzNCAyLjg1QTguMjMzIDguMjMzIDAgMDEyIDE4LjQwN2ExMS42MTYgMTEuNjE2IDAgMDA2LjI5IDEuODRcIiAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IEluc3RhZ3JhbUljb24gPSAoKSA9PiAoXG4gICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy02IGgtNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgPHBhdGggZmlsbFJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMi4zMTUgMmMyLjQzIDAgMi43ODQuMDEzIDMuODA4LjA2IDEuMDY0LjA0OSAxLjc5MS4yMTggMi40MjcuNDY1YTQuOTAyIDQuOTAyIDAgMDExLjc3MiAxLjE1MyA0LjkwMiA0LjkwMiAwIDAxMS4xNTMgMS43NzJjLjI0Ny42MzYuNDE2IDEuMzYzLjQ2NSAyLjQyNy4wNDggMS4wMjQuMDYgMS4zNzguMDYgMy44MDhzLS4wMTIgMi43ODQtLjA2IDMuODA4Yy0uMDQ5IDEuMDY0LS4yMTggMS43OTEtLjQ2NSAyLjQyN2E0LjkwMiA0LjkwMiAwIDAxLTEuMTUzIDEuNzcyIDQuOTAyIDQuOTAyIDAgMDEtMS43NzIgMS4xNTNjLS42MzYuMjQ3LTEuMzYzLjQxNi0yLjQyNy40NjUtMS4wMjQuMDQ4LTEuMzc4LjA2LTMuODA4LjA2cy0yLjc4NC0uMDEyLTMuODA4LS4wNmMtMS4wNjQtLjA0OS0xLjc5MS0uMjE4LTIuNDI3LS40NjVhNC45MDIgNC45MDIgMCAwMS0xLjc3Mi0xLjE1MyA0LjkwMiA0LjkwMiAwIDAxLTEuMTUzLTEuNzcyYy0uMjQ3LS42MzYtLjQxNi0xLjM2My0uNDY1LTIuNDI3LS4wNDgtMS4wMjQtLjA2LTEuMzc4LS4wNi0zLjgwOHMuMDEyLTIuNzg0LjA2LTMuODA4Yy4wNDktMS4wNjQuMjE4LTEuNzkxLjQ2NS0yLjQyN2E0LjkwMiA0LjkwMiAwIDAxMS4xNTMtMS43NzJBNC45MDIgNC45MDIgMCAwMTYuMDggMi41MjVjLjYzNi0uMjQ3IDEuMzYzLS40MTYgMi40MjctLjQ2NUM5LjUzIDIuMDEzIDkuODg0IDIgMTIuMzE1IDJ6TTEyIDcuMDQ0Yy0yLjU4MyAwLTQuNjY2IDIuMDgzLTQuNjY2IDQuNjY2czIuMDgzIDQuNjY2IDQuNjY2IDQuNjY2IDQuNjY2LTIuMDgzIDQuNjY2LTQuNjY2UzE0LjU4MyA3LjA0NCAxMiA3LjA0NHptMCA3LjY2NmMtMS42NTcgMC0zLTEuMzQzLTMtM3MxLjM0My0zIDMtMyAzIDEuMzQzIDMgMy0xLjM0MyAzLTMgM3ptNC45MTctNy45MTZhMS4xNDYgMS4xNDYgMCAxMDAtMi4yOTIgMS4xNDYgMS4xNDYgMCAwMDAgMi4yOTJ6XCIgY2xpcFJ1bGU9XCJldmVub2RkXCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICApO1xuXG4gICAgICBjb25zdCBMaW5rZWRJbkljb24gPSAoKSA9PiAoXG4gICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy02IGgtNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk0xOSAwaC0xNGMtMi43NjEgMC01IDIuMjM5LTUgNXYxNGMwIDIuNzYxIDIuMjM5IDUgNSA1aDE0YzIuNzYyIDAgNS0yLjIzOSA1LTV2LTE0YzAtMi43NjEtMi4yMzgtNS01LTV6bS0xMSAxOWgtM3YtMTFoM3YxMXptLTEuNS0xMi4yNjhjLS45NjYgMC0xLjc1LS43OS0xLjc1LTEuNzY0cy43ODQtMS43NjQgMS43NS0xLjc2NCAxLjc1Ljc5IDEuNzUgMS43NjQtLjc4MyAxLjc2NC0xLjc1IDEuNzY0em0xMy41IDEyLjI2OGgtM3YtNS42MDRjMC0zLjM2OC00LTMuMTEzLTQgMHY1LjYwNGgtM3YtMTFoM3YxLjc2NWMxLjM5Ni0yLjU4NiA3LTIuNzc3IDcgMi40NzZ2Ni43NTl6XCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICApO1xuXG4gICAgICBjb25zdCBURU1QTEFURV9DQVRFR09SSUVTID0gW1xuICAgICAgICAgIHsgXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiAnU29jaWFsIE1lZGlhJywgXG4gICAgICAgICAgICAgIHRlbXBsYXRlczogW1xuICAgICAgICAgICAgICAgICAgeyB0aXRsZTogXCJGYWNlYm9vayBQb3N0XCIsIHVybDogXCJodHRwczovL3d3dy50aGVicmFuZC5haS9pL3NvY2lhbC1tZWRpYS9mYWNlYm9vay1wb3N0XCIgfSxcbiAgICAgICAgICAgICAgICAgIHsgdGl0bGU6IFwiSW5zdGFncmFtIFBvc3RcIiwgdXJsOiBcImh0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2kvc29jaWFsLW1lZGlhL2luc3RhZ3JhbS1wb3N0c1wiIH0sXG4gICAgICAgICAgICAgICAgICB7IHRpdGxlOiBcIkluc3RhZ3JhbSBTdG9yeVwiLCB1cmw6IFwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaS9zb2NpYWwtbWVkaWEvaW5zdGFncmFtLXN0b3J5XCIgfSxcbiAgICAgICAgICAgICAgICAgIHsgdGl0bGU6IFwiTGlua2VkSW4gUG9zdFwiLCB1cmw6IFwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaS9zb2NpYWwtbWVkaWEvbGlua2VkaW4tcG9zdFwiIH0sXG4gICAgICAgICAgICAgICAgICB7IHRpdGxlOiBcIlR3aXR0ZXIgUG9zdFwiLCB1cmw6IFwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaS9zb2NpYWwtbWVkaWEvdHdpdHRlclwiIH0sXG4gICAgICAgICAgICAgICAgICB7IHRpdGxlOiBcIlBpbnRlcmVzdCBQaW5cIiwgdXJsOiBcImh0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2kvc29jaWFsLW1lZGlhL3BpbnRlcmVzdC1waW4tZ3JhcGhpYy10ZW1wbGF0ZXNcIiB9LFxuICAgICAgICAgICAgICAgICAgeyB0aXRsZTogXCJJR1RWIENvdmVyXCIsIHVybDogXCJodHRwczovL3d3dy50aGVicmFuZC5haS9pL3NvY2lhbC1tZWRpYS9pZ3R2LWNvdmVyXCIgfSxcbiAgICAgICAgICAgICAgICAgIHsgdGl0bGU6IFwiSGlnaGxpZ2h0IENvdmVyXCIsIHVybDogXCJodHRwczovL3d3dy50aGVicmFuZC5haS9pL3NvY2lhbC1tZWRpYS9pbnN0YWdyYW0taGlnaGxpZ2h0LWNvdmVyXCIgfSxcbiAgICAgICAgICAgICAgICAgIHsgdGl0bGU6IFwiWW91VHViZSBHcmFwaGljc1wiLCB1cmw6IFwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaS9zb2NpYWwtbWVkaWEveW91dHViZS1ncmFwaGljLXRlbXBsYXRlc1wiIH0sXG4gICAgICAgICAgICAgICAgICB7IHRpdGxlOiBcIlR3aXRjaCBHcmFwaGljc1wiLCB1cmw6IFwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaS9zb2NpYWwtbWVkaWEvb25saW5lLXN0cmVhbWluZ1wiIH0sXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiAnSW52aXRlcyAmIENhcmRzJywgXG4gICAgICAgICAgICAgIHRlbXBsYXRlczogW1xuICAgICAgICAgICAgICAgICAgeyB0aXRsZTogXCJCdXNpbmVzcyBDYXJkXCIsIHVybDogXCJodHRwczovL3d3dy50aGVicmFuZC5haS9pL2ludml0ZXMtYW5kLWNhcmRzL2J1c2luZXNzLWNhcmQtODV4NTVtbVwiIH0sXG4gICAgICAgICAgICAgICAgICB7IHRpdGxlOiBcIlVTIEJ1c2luZXNzIENhcmRcIiwgdXJsOiBcImh0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2kvaW52aXRlcy1hbmQtY2FyZHMvYnVzaW5lc3MtY2FyZC11c1wiIH0sXG4gICAgICAgICAgICAgICAgICB7IHRpdGxlOiBcIkdyZWV0aW5nIENhcmRcIiwgdXJsOiBcImh0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2kvaW52aXRlcy1hbmQtY2FyZHMvY2FyZFwiIH0sXG4gICAgICAgICAgICAgICAgICB7IHRpdGxlOiBcIkludml0YXRpb25cIiwgdXJsOiBcImh0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2kvaW52aXRlcy1hbmQtY2FyZHMvaW52aXRhdGlvbi0xMy45eDEwLjdjbVwiIH0sXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiAnRG9jdW1lbnRzJywgXG4gICAgICAgICAgICAgIHRlbXBsYXRlczogW1xuICAgICAgICAgICAgICAgICAgeyB0aXRsZTogXCJQcmVzZW50YXRpb24gMTY6OVwiLCB1cmw6IFwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaS9kb2N1bWVudHMvcHJlc2VudGF0aW9uLTE2LTlcIiB9LFxuICAgICAgICAgICAgICAgICAgeyB0aXRsZTogXCJSZXN1bWVcIiwgdXJsOiBcImh0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2kvZG9jdW1lbnRzL3Jlc3VtZVwiIH0sXG4gICAgICAgICAgICAgICAgICB7IHRpdGxlOiBcIkxldHRlcmhlYWQgQTRcIiwgdXJsOiBcImh0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2kvZG9jdW1lbnRzL2xldHRlcmhlYWQtYTRcIiB9LFxuICAgICAgICAgICAgICAgICAgeyB0aXRsZTogXCJQcm9wb3NhbCBBNFwiLCB1cmw6IFwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaS9kb2N1bWVudHMvcHJvcG9zYWwtYTRcIiB9LFxuICAgICAgICAgICAgICAgICAgeyB0aXRsZTogXCJGbHllciBBNFwiLCB1cmw6IFwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaS9kb2N1bWVudHMvZmx5ZXItYTRcIiB9LFxuICAgICAgICAgICAgICAgICAgeyB0aXRsZTogXCJOZXdzbGV0dGVyXCIsIHVybDogXCJodHRwczovL3d3dy50aGVicmFuZC5haS9pL2RvY3VtZW50cy9uZXdzbGV0dGVyXCIgfSxcbiAgICAgICAgICAgICAgICAgIHsgdGl0bGU6IFwiSW52b2ljZSBBNFwiLCB1cmw6IFwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaS9kb2N1bWVudHMvaW52b2ljZS1hNFwiIH0sXG4gICAgICAgICAgICAgICAgICB7IHRpdGxlOiBcIlJlcG9ydCBBNFwiLCB1cmw6IFwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaS9kb2N1bWVudHMvcmVwb3J0LWE0XCIgfSxcbiAgICAgICAgICAgICAgICAgIHsgdGl0bGU6IFwiQ2VydGlmaWNhdGVcIiwgdXJsOiBcImh0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2kvZG9jdW1lbnRzL2NlcnRpZmljYXRlXCIgfSxcbiAgICAgICAgICAgICAgICAgIHsgdGl0bGU6IFwiTWVudSBBNFwiLCB1cmw6IFwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaS9kb2N1bWVudHMvbWVudS1hNFwiIH0sXG4gICAgICAgICAgICAgICAgICB7IHRpdGxlOiBcIkNoZWNrbGlzdFwiLCB1cmw6IFwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaS9kb2N1bWVudHMvY2hlY2tsaXN0XCIgfSxcbiAgICAgICAgICAgICAgICAgIHsgdGl0bGU6IFwiU2NoZWR1bGVcIiwgdXJsOiBcImh0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2kvZG9jdW1lbnRzL3NjaGVkdWxlXCIgfSxcbiAgICAgICAgICAgICAgICAgIHsgdGl0bGU6IFwiV29ya2Jvb2tcIiwgdXJsOiBcImh0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2kvZG9jdW1lbnRzL3dvcmtib29rXCIgfSxcbiAgICAgICAgICAgICAgICAgIHsgdGl0bGU6IFwiZUJvb2tcIiwgdXJsOiBcImh0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2kvZG9jdW1lbnRzL2Vib29rXCIgfSxcbiAgICAgICAgICAgICAgICAgIHsgdGl0bGU6IFwiV2hpdGVwYXBlclwiLCB1cmw6IFwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaS9kb2N1bWVudHMvd2hpdGVwYXBlclwiIH0sXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiAnQWR2ZXJ0aXNpbmcnLCBcbiAgICAgICAgICAgICAgdGVtcGxhdGVzOiBbXG4gICAgICAgICAgICAgICAgICB7IHRpdGxlOiBcIlBvc3RlclwiLCB1cmw6IFwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaS9hZHZlcnRpc2luZy9wb3N0ZXItYTNcIiB9LFxuICAgICAgICAgICAgICAgICAgeyB0aXRsZTogXCJCYW5uZXJcIiwgdXJsOiBcImh0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2kvYWR2ZXJ0aXNpbmcvYmFubmVyLTJ4NmZ0XCIgfSxcbiAgICAgICAgICAgICAgICAgIHsgdGl0bGU6IFwiQmlsbGJvYXJkXCIsIHVybDogXCJodHRwczovL3d3dy50aGVicmFuZC5haS9pL2FkdmVydGlzaW5nL2JpbGxib2FyZFwiIH0sXG4gICAgICAgICAgICAgICAgICB7IHRpdGxlOiBcIkZseWVyXCIsIHVybDogXCJodHRwczovL3d3dy50aGVicmFuZC5haS9pL2FkdmVydGlzaW5nL2ZseWVyLXVzXCIgfSxcbiAgICAgICAgICAgICAgICAgIHsgdGl0bGU6IFwiWWFyZCBTaWduXCIsIHVybDogXCJodHRwczovL3d3dy50aGVicmFuZC5haS9pL2FkdmVydGlzaW5nL3lhcmQtc2lnblwiIH0sXG4gICAgICAgICAgICAgICAgICB7IHRpdGxlOiBcIlJvbGwtdXAgQmFubmVyXCIsIHVybDogXCJodHRwczovL3d3dy50aGVicmFuZC5haS9pL2FkdmVydGlzaW5nL3JvbGwtdXAtYmFubmVyXCIgfSxcbiAgICAgICAgICAgICAgICAgIHsgdGl0bGU6IFwiQnJvY2h1cmVcIiwgdXJsOiBcImh0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2kvYWR2ZXJ0aXNpbmcvYnJvY2h1cmVcIiB9LFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IFxuICAgICAgICAgICAgICBjYXRlZ29yeTogJ0NvdmVycycsIFxuICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IFtcbiAgICAgICAgICAgICAgICAgIHsgdGl0bGU6IFwiQm9vayBDb3ZlclwiLCB1cmw6IFwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaS9jb3ZlcnMvYm9vay1jb3ZlclwiIH0sXG4gICAgICAgICAgICAgICAgICB7IHRpdGxlOiBcIk1hZ2F6aW5lIENvdmVyXCIsIHVybDogXCJodHRwczovL3d3dy50aGVicmFuZC5haS9pL2NvdmVycy9tYWdhemluZS1jb3ZlclwiIH0sXG4gICAgICAgICAgICAgICAgICB7IHRpdGxlOiBcIlJlcG9ydCBDb3ZlclwiLCB1cmw6IFwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaS9jb3ZlcnMvcmVwb3J0LWNvdmVyXCIgfSxcbiAgICAgICAgICAgICAgICAgIHsgdGl0bGU6IFwiUGxhbm5lciBDb3ZlclwiLCB1cmw6IFwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaS9jb3ZlcnMvcGxhbm5lci1jb3ZlclwiIH0sXG4gICAgICAgICAgICAgICAgICB7IHRpdGxlOiBcImVCb29rIENvdmVyXCIsIHVybDogXCJodHRwczovL3d3dy50aGVicmFuZC5haS9pL2NvdmVycy9lYm9vay1jb3ZlclwiIH0sXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIC8vIC0tLSBFTkQgT0YgY29uc3RhbnRzLnRzeCAtLS1cblxuXG4gICAgICAvLyAtLS0gU1RBUlQgT0YgY29tcG9uZW50cy9Mb2dvLnRzeCAtLS1cbiAgICAgIGNvbnN0IExvZ28gPSAoeyBjbGFzc05hbWUsIHRoZW1lID0gJ2xpZ2h0JyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHRoZUNvbG9yID0gdGhlbWUgPT09ICdkYXJrJyA/ICcjOUNBM0FGJyA6ICcjODA4MDgwJztcbiAgICAgICAgY29uc3QgYnJhbmRDb2xvciA9IHRoZW1lID09PSAnZGFyaycgPyAnI0ZGRkZGRicgOiAnIzMzMzMzMyc7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8c3ZnIFxuICAgICAgICAgICAgd2lkdGg9XCIxMTBcIiBcbiAgICAgICAgICAgIGhlaWdodD1cIjMwXCIgXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDExMCAzMFwiIFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJUaGUgQnJhbmQgTG9nb1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGc+XG4gICAgICAgICAgICAgIDxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLCAtMikgcm90YXRlKC01LCAxNSwgMTUpXCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAsMy45OTNDMCwxLjc4OCwxLjc4OCwwLDMuOTkzLDBoMjIuMDEzQzI4LjIxMiwwLDMwLDEuNzg4LDMwLDMuOTkzdjIyLjAxMyBjMCwyLjIwNS0xLjc4OCwzLjk5My0zLjk5MywzLjk5M0gzLjk5M0MxLjc4OCwzMCwwLDI4LjIxMiwwLDI2LjAwN1YzLjk5M3pcIiBmaWxsPVwiIzI5QjZGNlwiLz5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHg9XCIxNVwiIHk9XCIyMVwiIHRleHRBbmNob3I9XCJtaWRkbGVcIiBmb250U2l6ZT1cIjIwXCIgZm9udFdlaWdodD1cImJvbGRcIiBmaWxsPVwid2hpdGVcIiBzdHlsZT17e2ZvbnRGYW1pbHk6ICdpbmhlcml0J319PkI8L3RleHQ+XG4gICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgPHRleHQgeD1cIjQwXCIgeT1cIjEyXCIgZm9udFNpemU9XCI5XCIgZmlsbD17dGhlQ29sb3J9IGZvbnRXZWlnaHQ9XCI2MDBcIiBzdHlsZT17e2ZvbnRGYW1pbHk6ICdpbmhlcml0J319PlRIRTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgeD1cIjQwXCIgeT1cIjI3XCIgZm9udFNpemU9XCIxNlwiIGZpbGw9e2JyYW5kQ29sb3J9IGZvbnRXZWlnaHQ9XCJib2xkXCIgc3R5bGU9e3tmb250RmFtaWx5OiAnaW5oZXJpdCd9fT5CcmFuZDwvdGV4dD5cbiAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICAvLyAtLS0gRU5EIE9GIGNvbXBvbmVudHMvTG9nby50c3ggLS0tXG5cblxuICAgICAgLy8gLS0tIFNUQVJUIE9GIGNvbXBvbmVudHMvSGVhZGVyLnRzeCAtLS1cbiAgICAgIGNvbnN0IEhlYWRlciA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgW2lzTWVudU9wZW4sIHNldElzTWVudU9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgICAgIGNvbnN0IG5hdkxpbmtzID0gW1xuICAgICAgICAgIHsgbmFtZTogJ0JyYW5kIENyZWF0b3InLCBocmVmOiAnaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvYnJhbmRjcmVhdG9yL2luZGV4JyB9LFxuICAgICAgICAgIHsgbmFtZTogJ1RlbXBsYXRlcycsIGhyZWY6ICdodHRwczovL3d3dy50aGVicmFuZC5haS9pL2Rlc2lnbnMnIH0sXG4gICAgICAgICAgeyBuYW1lOiAnSW5zaWdodHMnLCBocmVmOiAnaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaW5zaWdodHMvJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ1ByaWNpbmcnLCBocmVmOiAnaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvYnJhbmRwYXkvY2hvb3NlJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ0Jsb2dzJywgaHJlZjogJ2h0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2Jsb2dzJyB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJiZy13aGl0ZS84MCBiYWNrZHJvcC1ibHVyLXNtIHN0aWNreSB0b3AtMCB6LTUwIHNoYWRvdy1zbVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXIgbXgtYXV0byBweC02IHB5LTRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtOFwiPlxuICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIi9cIiBhcmlhLWxhYmVsPVwiQnJhbmQgQUkgSG9tZXBhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPExvZ28gLz5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgIDxuYXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNlwiPlxuICAgICAgICAgICAgICAgICAgICB7bmF2TGlua3MubWFwKChsaW5rKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGEga2V5PXtsaW5rLm5hbWV9IGhyZWY9e2xpbmsuaHJlZn0gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWJyYW5kLWN5YW4gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtsaW5rLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvbmF2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNFwiPlxuICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vYml0Lmx5LzJMcFFKbU9cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgY2xhc3NOYW1lPVwiZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtYnJhbmQtY3lhbiB0cmFuc2l0aW9uLWNvbG9ycyBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgcHktMiBweC00IHRleHQtc20gaG92ZXI6Ym9yZGVyLWJyYW5kLWN5YW5cIj5Eb3dubG9hZCBBcHA8L2E+XG4gICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzTmFtZT1cImZvbnQtYm9sZCB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtYnJhbmQtY3lhbiB0cmFuc2l0aW9uLWNvbG9yc1wiPkxvZyBpbjwvYT5cbiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3NOYW1lPVwiYmctYnJhbmQtY3lhbiB0ZXh0LXdoaXRlIGZvbnQtYm9sZCBweS0yIHB4LTQgcm91bmRlZC1sZyBob3ZlcjpvcGFjaXR5LTkwIHRyYW5zaXRpb24tb3BhY2l0eVwiPlNpZ24gdXAgZm9yIGZyZWU8L2E+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZDpoaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4gc2V0SXNNZW51T3BlbighaXNNZW51T3Blbil9IGNsYXNzTmFtZT1cInRleHQtZ3JheS04MDAgZm9jdXM6b3V0bGluZS1ub25lXCIgYXJpYS1sYWJlbD1cIlRvZ2dsZSBtZW51XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy02IGgtNlwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9XCIyXCIgZD17aXNNZW51T3BlbiA/IFwiTTYgMThMMTggNk02IDZsMTIgMTJcIiA6IFwiTTQgNmgxNk00IDEyaDE2TTQgMThoMTZcIn0+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAge2lzTWVudU9wZW4gJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWQ6aGlkZGVuIG10LTRcIj5cbiAgICAgICAgICAgICAgICAgIDxuYXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBzcGFjZS15LTRcIj5cbiAgICAgICAgICAgICAgICAgICAge25hdkxpbmtzLm1hcCgobGluaykgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxhIGtleT17bGluay5uYW1lfSBocmVmPXtsaW5rLmhyZWZ9IGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1icmFuZC1jeWFuIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bGluay5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBzcGFjZS15LTMgcHQtNCBib3JkZXItdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL2JpdC5seS8yTHBRSm1PXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIGNsYXNzTmFtZT1cInctZnVsbCB0ZXh0LWNlbnRlciBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHRleHQtZ3JheS02MDAgZm9udC1ib2xkIHB5LTIgcHgtNCByb3VuZGVkLWxnIGhvdmVyOmJvcmRlci1icmFuZC1jeWFuIGhvdmVyOnRleHQtYnJhbmQtY3lhbiB0cmFuc2l0aW9uLWNvbG9yc1wiPkRvd25sb2FkIEFwcDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzTmFtZT1cImZvbnQtYm9sZCB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtYnJhbmQtY3lhbiB0cmFuc2l0aW9uLWNvbG9yc1wiPkxvZyBpbjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzTmFtZT1cInctZnVsbCB0ZXh0LWNlbnRlciBiZy1icmFuZC1jeWFuIHRleHQtd2hpdGUgZm9udC1ib2xkIHB5LTIgcHgtNCByb3VuZGVkLWxnIGhvdmVyOm9wYWNpdHktOTAgdHJhbnNpdGlvbi1vcGFjaXR5XCI+U2lnbiB1cCBmb3IgZnJlZTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25hdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvaGVhZGVyPlxuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIC8vIC0tLSBFTkQgT0YgY29tcG9uZW50cy9IZWFkZXIudHN4IC0tLVxuXG5cbiAgICAgIC8vIC0tLSBTVEFSVCBPRiBjb21wb25lbnRzL0Zvb3Rlci50c3ggLS0tXG4gICAgICBjb25zdCBGb290ZXIgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNvY2lhbExpbmtzID0gW1xuICAgICAgICAgIHsgbmFtZTogJ0ZhY2Vib29rJywgaHJlZjogJ2h0dHBzOi8vZmFjZWJvb2suY29tL1RoZUJyYW5kQXBwJywgaWNvbjogPEZhY2Vib29rSWNvbiAvPiB9LFxuICAgICAgICAgIHsgbmFtZTogJ1R3aXR0ZXInLCBocmVmOiAnaHR0cHM6Ly90d2l0dGVyLmNvbS90aGVicmFuZGhxJywgaWNvbjogPFR3aXR0ZXJJY29uIC8+IH0sXG4gICAgICAgICAgeyBuYW1lOiAnSW5zdGFncmFtJywgaHJlZjogJ2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vdGhlYnJhbmRhcHAnLCBpY29uOiA8SW5zdGFncmFtSWNvbiAvPiB9LFxuICAgICAgICAgIHsgbmFtZTogJ0xpbmtlZEluJywgaHJlZjogJ2h0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21wYW55L3RoZS1icmFuZC1hcHAnLCBpY29uOiA8TGlua2VkSW5JY29uIC8+IH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZm9vdGVyU2VjdGlvbnMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdGZWF0dXJlcycsXG4gICAgICAgICAgICBsaW5rczogW1xuICAgICAgICAgICAgICB7IG5hbWU6ICdCcmFuZCBDcmVhdG9yJywgaHJlZjogJ2h0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2JyYW5kY3JlYXRvci9pbmRleCcgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAnTXkgRGVzaWducycsIGhyZWY6ICdodHRwczovL3d3dy50aGVicmFuZC5haS9pL2FjY291bnQvZGVzaWducycgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAnVGVtcGxhdGVzJywgaHJlZjogJ2h0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2kvZGVzaWducycgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAnQnJhbmQgVG9vbGtpdCcsIGhyZWY6ICdodHRwczovL3d3dy50aGVicmFuZC5haS9pbnNpZ2h0cy9kYXNoYm9hcmQ/ZmVhdHVyZT1icmFuZHRvb2xraXQnIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdSZXNvdXJjZXMnLFxuICAgICAgICAgICAgbGlua3M6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiAnSW5zaWdodHMnLCBocmVmOiAnaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaW5zaWdodHMvJyB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdCbG9ncycsIGhyZWY6ICdodHRwczovL3d3dy50aGVicmFuZC5haS9ibG9ncycgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAnQnJhbmQgSm91cm5leXMnLCBocmVmOiAnaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaW5zaWdodHMvZGFzaGJvYXJkP2ZlYXR1cmU9YnJvd3Nlam91cm5leXMnIH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ1NpdGVzJywgaHJlZjogJ2h0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL3NpdGVzL2luZGV4JyB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiAnQWNjb3VudCcsXG4gICAgICAgICAgICBsaW5rczogW1xuICAgICAgICAgICAgICB7IG5hbWU6ICdNeSBCcmFuZCBJZGVudGl0eScsIGhyZWY6ICdodHRwczovL3d3dy50aGVicmFuZC5haS9pL2FjY291bnQvYnVpbGRfYnJhbmQnIH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ1VwZGF0ZSBCcmFuZCBEZXRhaWxzJywgaHJlZjogJyMnIH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ09uYm9hcmRpbmcnLCBocmVmOiAnaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaW5zaWdodHMvYXV0aC1vbmJvYXJkJyB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiAnQ29tcGFueScsXG4gICAgICAgICAgICBsaW5rczogW1xuICAgICAgICAgICAgICB7IG5hbWU6ICdBYm91dCBVcycsIGhyZWY6ICcjJyB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdDb250YWN0IFVzJywgaHJlZjogJ2h0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2kvY29udGFjdCcgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAnQ2FyZWVycycsIGhyZWY6ICcjJyB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGZvb3RlciBjbGFzc05hbWU9XCJiZy1icmFuZC1taWRuaWdodCB0ZXh0LXdoaXRlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lciBteC1hdXRvIHB4LTYgcHktMTJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIG1kOmdyaWQtY29scy00IGxnOmdyaWQtY29scy01IGdhcC04XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtc3Bhbi0yIGxnOmNvbC1zcGFuLTFcIj5cbiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIvXCIgYXJpYS1sYWJlbD1cIkJyYW5kIEFJIEhvbWVwYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxMb2dvIHRoZW1lPVwiZGFya1wiIC8+XG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC00IHRleHQtZ3JheS00MDBcIj5Zb3VyIHZpc2lvbiwgYW1wbGlmaWVkLjwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7Zm9vdGVyU2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IGtleT17c2VjdGlvbi50aXRsZX0+XG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJmb250LWJvbGQgdXBwZXJjYXNlIHRleHQtZ3JheS00MDBcIj57c2VjdGlvbi50aXRsZX08L2gzPlxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwibXQtNCBzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7c2VjdGlvbi5saW5rcy5tYXAoKGxpbmspID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2xpbmsubmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9e2xpbmsuaHJlZn0gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTMwMCBob3Zlcjp0ZXh0LWJyYW5kLWN5YW4gdHJhbnNpdGlvbi1jb2xvcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bGluay5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTEyIHB0LTggYm9yZGVyLXQgYm9yZGVyLWdyYXktODAwIGZsZXggZmxleC1jb2wgbWQ6ZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtZ3JheS00MDBcIj4mY29weTsge25ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKX0gQnJhbmQgQUkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9wPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBzcGFjZS14LTQgbXQtNCBtZDptdC0wXCI+XG4gICAgICAgICAgICAgICAgICB7c29jaWFsTGlua3MubWFwKChzb2NpYWwpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPGEga2V5PXtzb2NpYWwubmFtZX0gaHJlZj17c29jaWFsLmhyZWZ9IGNsYXNzTmFtZT1cInRleHQtZ3JheS00MDAgaG92ZXI6dGV4dC1icmFuZC1jeWFuIHRyYW5zaXRpb24tY29sb3JzXCIgYXJpYS1sYWJlbD17c29jaWFsLm5hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj57c29jaWFsLm5hbWV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIHtzb2NpYWwuaWNvbn1cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9mb290ZXI+XG4gICAgICAgICk7XG4gICAgICB9O1xuICAgICAgLy8gLS0tIEVORCBPRiBjb21wb25lbnRzL0Zvb3Rlci50c3ggLS0tXG5cblxuICAgICAgLy8gLS0tIFNUQVJUIE9GIGNvbXBvbmVudHMvRmVhdHVyZUNhcmQudHN4IC0tLVxuICAgICAgY29uc3QgRmVhdHVyZUNhcmQgPSAoe1xuICAgICAgICB0aXRsZSxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIGxpbmssXG4gICAgICAgIGJ1dHRvblRleHQsXG4gICAgICAgIGltYWdlVXJsLFxuICAgICAgICBiZ0NvbG9yLFxuICAgICAgICBzaXplID0gJ25vcm1hbCdcbiAgICAgIH0pID0+IHtcbiAgICAgICAgY29uc3Qgc2l6ZUNsYXNzZXMgPSB7XG4gICAgICAgICAgbm9ybWFsOiAnbWluLWgtWzQ4MHB4XSBtZDptaW4taC1bNTIwcHhdJyxcbiAgICAgICAgICBsYXJnZTogJ21pbi1oLVs1MjBweF0gbWQ6Y29sLXNwYW4tMiBsZzpjb2wtc3Bhbi0xJywgLy8gU3BlY2lhbCBjbGFzc2VzIGNhbiBiZSBhZGRlZCBoZXJlXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2ByZWxhdGl2ZSByb3VuZGVkLTN4bCBvdmVyZmxvdy1oaWRkZW4gc2hhZG93LWxnIGdyb3VwIHRleHQtd2hpdGUgcC04IGZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTUwMCBlYXNlLWluLW91dCB0cmFuc2Zvcm0gaG92ZXI6LXRyYW5zbGF0ZS15LTIgJHtzaXplQ2xhc3Nlc1tzaXplXX1gfVxuICAgICAgICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBiZ0NvbG9yIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ6LTEwIHJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJ0ZXh0LTN4bCBtZDp0ZXh0LTR4bCBmb250LWJvbGQgbWItNFwiPnt0aXRsZX08L2gzPlxuICAgICAgICAgICAgICB7ZGVzY3JpcHRpb24gJiYgPHAgY2xhc3NOYW1lPVwidGV4dC1sZyBvcGFjaXR5LTkwIG1iLTZcIj57ZGVzY3JpcHRpb259PC9wPn1cbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBocmVmPXtsaW5rfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLXdoaXRlIHRleHQtZ3JheS04MDAgZm9udC1ib2xkIHB5LTIgcHgtNiByb3VuZGVkLWxnIHRleHQtbWQgaG92ZXI6YmctZ3JheS0yMDAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIGVhc2UtaW4tb3V0IHRyYW5zZm9ybSBncm91cC1ob3ZlcjotdHJhbnNsYXRlLXktMSBpbmxpbmUtYmxvY2tcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2J1dHRvblRleHR9XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMFwiPlxuICAgICAgICAgICAgICA8aW1nIHNyYz17aW1hZ2VVcmx9IGFsdD17dGl0bGV9IGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgb2JqZWN0LWNvdmVyIG9wYWNpdHktODAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6c2NhbGUtMTEwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTUwMCBlYXNlLWluLW91dFwiIGxvYWRpbmc9XCJsYXp5XCIgZGVjb2Rpbmc9XCJhc3luY1wiIC8+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCBiZy1ibGFjayBiZy1vcGFjaXR5LTIwIGdyb3VwLWhvdmVyOmJnLW9wYWNpdHktMTAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNTAwIGVhc2UtaW4tb3V0XCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICAvLyAtLS0gRU5EIE9GIGNvbXBvbmVudHMvRmVhdHVyZUNhcmQudHN4IC0tLVxuXG5cbiAgICAgIC8vIC0tLSBTVEFSVCBPRiBjb21wb25lbnRzL1RlbXBsYXRlQ2FyZC50c3ggLS0tXG4gICAgICBjb25zdCBUZW1wbGF0ZUNhcmQgPSAoeyB0aXRsZSwgdXJsIH0pID0+IHtcbiAgICAgICAgY29uc3QgaW1hZ2VTZWVkID0gdGl0bGUucmVwbGFjZSgvXFxzKy9nLCAnLScpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8YVxuICAgICAgICAgICAgaHJlZj17dXJsfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmxvY2sgZ3JvdXAgcm91bmRlZC1sZyBvdmVyZmxvdy1oaWRkZW4gYmctZ3JheS0xMDAgc2hhZG93LXNtIGhvdmVyOnNoYWRvdy14bCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgdHJhbnNmb3JtIGhvdmVyOi10cmFuc2xhdGUteS0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGFzcGVjdC1bNC8zXSBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIHNyYz17YGh0dHBzOi8vcGljc3VtLnBob3Rvcy9zZWVkLyR7aW1hZ2VTZWVkfS80MDAvMzAwYH1cbiAgICAgICAgICAgICAgICBhbHQ9e3RpdGxlfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgb2JqZWN0LWNvdmVyIGdyb3VwLWhvdmVyOnNjYWxlLTEwNSB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0zMDBcIlxuICAgICAgICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICAgICAgICBkZWNvZGluZz1cImFzeW5jXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIGJnLWJsYWNrLzEwIGdyb3VwLWhvdmVyOmJnLWJsYWNrLzAgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC0zXCI+XG4gICAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTgwMCB0cnVuY2F0ZSBncm91cC1ob3Zlcjp0ZXh0LWJyYW5kLWN5YW4gdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwXCI+XG4gICAgICAgICAgICAgICAge3RpdGxlfVxuICAgICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hPlxuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIC8vIC0tLSBFTkQgT0YgY29tcG9uZW50cy9UZW1wbGF0ZUNhcmQudHN4IC0tLVxuXG5cbiAgICAgIC8vIC0tLSBTVEFSVCBPRiBjb21wb25lbnRzL0ludGVyYWN0aXZlVGVtcGxhdGVzLnRzeCAtLS1cbiAgICAgIGNvbnN0IEludGVyYWN0aXZlVGVtcGxhdGVzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBbYWN0aXZlVGFiLCBzZXRBY3RpdmVUYWJdID0gdXNlU3RhdGUoVEVNUExBVEVfQ0FURUdPUklFU1swXS5jYXRlZ29yeSk7XG5cbiAgICAgICAgY29uc3QgYWN0aXZlQ2F0ZWdvcnkgPSBURU1QTEFURV9DQVRFR09SSUVTLmZpbmQoY2F0ID0+IGNhdC5jYXRlZ29yeSA9PT0gYWN0aXZlVGFiKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyIG14LWF1dG8gcHgtNlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBtYi0xMlwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LTR4bCBtZDp0ZXh0LTV4bCBmb250LWJvbGQgbWItNFwiPlRlbXBsYXRlcyBmb3IgYWJzb2x1dGVseSBhbnl0aGluZzwvaDI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1sZyBtZDp0ZXh0LXhsIHRleHQtZ3JheS02MDAgbWF4LXctMnhsIG14LWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgSnVtcHN0YXJ0IHlvdXIgbmV4dCBwcm9qZWN0IHdpdGggdGhvdXNhbmRzIG9mIHByb2Zlc3Npb25hbCB0ZW1wbGF0ZXMgZm9yIGFueSBvY2Nhc2lvbi5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnRoZWJyYW5kLmFpL2JyYW5kY3JlYXRvci9pbmRleFwiIGNsYXNzTmFtZT1cIm10LTggaW5saW5lLWJsb2NrIGJnLWJyYW5kLWN5YW4gdGV4dC13aGl0ZSBmb250LWJvbGQgcHktMyBweC04IHJvdW5kZWQtbGcgdGV4dC1sZyBob3ZlcjpvcGFjaXR5LTkwIHRyYW5zaXRpb24tb3BhY2l0eVwiPlxuICAgICAgICAgICAgICAgICAgQ3JlYXRlIFlvdXIgQnJhbmQgTm93XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAganVzdGlmeS1jZW50ZXIgZ2FwLTIgbWQ6Z2FwLTQgbWItMTBcIj5cbiAgICAgICAgICAgICAge1RFTVBMQVRFX0NBVEVHT1JJRVMubWFwKGNhdCA9PiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAga2V5PXtjYXQuY2F0ZWdvcnl9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRBY3RpdmVUYWIoY2F0LmNhdGVnb3J5KX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB5LTIgcHgtNSByb3VuZGVkLWZ1bGwgZm9udC1zZW1pYm9sZCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgdGV4dC1zbSBtZDp0ZXh0LWJhc2UgJHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlVGFiID09PSBjYXQuY2F0ZWdvcnlcbiAgICAgICAgICAgICAgICAgICAgICA/ICdiZy1icmFuZC1jeWFuIHRleHQtd2hpdGUgc2hhZG93LWxnIHRyYW5zZm9ybSBzY2FsZS0xMDUnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnYmctZ3JheS0yMDAgdGV4dC1ncmF5LTcwMCBob3ZlcjpiZy1ncmF5LTMwMCdcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtjYXQuY2F0ZWdvcnl9XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBzbTpncmlkLWNvbHMtMyBtZDpncmlkLWNvbHMtNCBsZzpncmlkLWNvbHMtNSB4bDpncmlkLWNvbHMtNiBnYXAtNiBtZDpnYXAtOFwiPlxuICAgICAgICAgICAgICB7YWN0aXZlQ2F0ZWdvcnk/LnRlbXBsYXRlcy5tYXAodGVtcGxhdGUgPT4gKFxuICAgICAgICAgICAgICAgIDxUZW1wbGF0ZUNhcmQgXG4gICAgICAgICAgICAgICAgICBrZXk9e3RlbXBsYXRlLnRpdGxlfVxuICAgICAgICAgICAgICAgICAgdGl0bGU9e3RlbXBsYXRlLnRpdGxlfVxuICAgICAgICAgICAgICAgICAgdXJsPXt0ZW1wbGF0ZS51cmx9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICAvLyAtLS0gRU5EIE9GIGNvbXBvbmVudHMvSW50ZXJhY3RpdmVUZW1wbGF0ZXMudHN4IC0tLVxuXG5cbiAgICAgIC8vIC0tLSBTVEFSVCBPRiBBcHAudHN4IC0tLVxuICAgICAgY29uc3QgQXBwID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgdGV4dC1ncmF5LTgwMCBmb250LXNhbnNcIj5cbiAgICAgICAgICAgIDxIZWFkZXIgLz5cbiAgICAgICAgICAgIDxtYWluPlxuICAgICAgICAgICAgICB7LyogSGVybyBTZWN0aW9uICovfVxuICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyZWxhdGl2ZSB0ZXh0LXdoaXRlIG92ZXJmbG93LWhpZGRlbiBiZy1icmFuZC1taWRuaWdodFwiPlxuICAgICAgICAgICAgICAgIHsvKiBTdHlsaXNoIEJhY2tncm91bmQgKi99XG4gICAgICAgICAgICAgICAgPGRpdiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMCBvcGFjaXR5LTUwXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC1bLTMwJV0gbGVmdC1bLTMwJV0gdy00LzUgaC00LzUgcm91bmRlZC1mdWxsIGJnLWdyYWRpZW50LXRvLWJyIGZyb20tYnJhbmQtY3lhbiB0by10cmFuc3BhcmVudCBmaWx0ZXIgYmx1ci0zeGxcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgYm90dG9tLVstMzAlXSByaWdodC1bLTMwJV0gdy00LzUgaC00LzUgcm91bmRlZC1mdWxsIGJnLWdyYWRpZW50LXRvLXRsIGZyb20tYnJhbmQtY3lhbiB0by10cmFuc3BhcmVudCBmaWx0ZXIgYmx1ci0zeGxcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgei0xMCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtaW4taC1bNzB2aF0gbWQ6bWluLWgtWzgwdmhdIHB4LTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LTV4bCBtZDp0ZXh0LTd4bCBsZzp0ZXh0LTh4bCBmb250LWV4dHJhYm9sZCBtYi00IHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIFlvdXIgZW50aXJlIG1hcmtldGluZyB0ZWFtLCBpbiBvbmUgQUkuXG4gICAgICAgICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1sZyBtZDp0ZXh0LTJ4bCBtYXgtdy0zeGwgbWItOFwiPlxuICAgICAgICAgICAgICAgICAgICBJbWFnaW5lIHRoZSBjcmVhdGl2ZSBmaXJlcG93ZXIgb2YgYSBkZXNpZ24gYWdlbmN5LCB0aGUgc3RyYXRlZ2ljIGluc2lnaHQgb2YgYSBjb25zdWx0YW50LCBhbmQgdGhlIGJyaWxsaWFuY2Ugb2YgYSB0b3AtdGllciBtYXJrZXRpbmcgdGVhbeKAlGFsbCBhdCB5b3VyIGZpbmdlcnRpcHMuIFRoYXQncyBCcmFuZCBBSS5cbiAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAganVzdGlmeS1jZW50ZXIgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvYnJhbmRjcmVhdG9yL2luZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy13aGl0ZSB0ZXh0LWJyYW5kLW1pZG5pZ2h0IGZvbnQtYm9sZCBweS0zIHB4LTggcm91bmRlZC1sZyB0ZXh0LWxnIGhvdmVyOmJnLWdyYXktMjAwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCB0cmFuc2Zvcm0gaG92ZXI6c2NhbGUtMTA1XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0IGNyZWF0aW5nIGZvciBmcmVlXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly93d3cudGhlYnJhbmQuYWkvaW5zaWdodHMvXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy13aGl0ZS8xMCBiYWNrZHJvcC1ibHVyLXNtIHRleHQtd2hpdGUgZm9udC1ib2xkIHB5LTMgcHgtOCByb3VuZGVkLWxnIHRleHQtbGcgaG92ZXI6Ymctd2hpdGUvMjAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIHRyYW5zZm9ybSBob3ZlcjpzY2FsZS0xMDVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgRXhwbG9yZSBBSSBGZWF0dXJlc1xuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgICAgIHsvKiBUaGUgUHJvYmxlbSBTZWN0aW9uICovfVxuICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJweS0yMCBtZDpweS0yOCBiZy1ncmF5LTUwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXIgbXgtYXV0byBweC02IHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC00eGwgbWQ6dGV4dC01eGwgZm9udC1ib2xkIG1iLTRcIj5UaGUgb2xkIHdheSBpcyBicm9rZW4uPC9oMj5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtbGcgbWQ6dGV4dC14bCB0ZXh0LWdyYXktNjAwIG1heC13LTN4bCBteC1hdXRvIG1iLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgIERpZCB5b3Uga25vdyA5MCUgb2YgYnVzaW5lc3NlcyBzdHJ1Z2dsZSB0byBzdGFuZCBvdXQ/IFRoZXkgc3BlbmQgbW9udGhzIGFuZCB0aG91c2FuZHMgb24gc29sdXRpb25zIHRoYXQgZG9u4oCZdCBkZWxpdmVyLlxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0zIGdhcC04IHRleHQtbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgICB7UFJPQkxFTV9DQVJEUy5tYXAoKGNhcmQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2luZGV4fSBjbGFzc05hbWU9XCJiZy13aGl0ZSBwLTggcm91bmRlZC0yeGwgc2hhZG93LW1kIGhvdmVyOnNoYWRvdy14bCBob3ZlcjotdHJhbnNsYXRlLXktMiB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1icmFuZC1jeWFuIG1iLTRcIj57Y2FyZC5pY29ufTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInRleHQteGwgZm9udC1ib2xkIG1iLTJcIj57Y2FyZC50aXRsZX08L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMFwiPntjYXJkLmRlc2NyaXB0aW9ufTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgICAgIHsvKiBUb29scyBTZWN0aW9uICovfVxuICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJweS0yMCBtZDpweS0yOFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyIG14LWF1dG8gcHgtNlwiPlxuICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQtNHhsIG1kOnRleHQtNXhsIGZvbnQtYm9sZCB0ZXh0LWNlbnRlciBtYi0xMlwiPlxuICAgICAgICAgICAgICAgICAgICBBbiBlbnRpcmUgdG9vbGtpdCwgcG93ZXJlZCBieSBBSS5cbiAgICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTMgZ2FwLThcIj5cbiAgICAgICAgICAgICAgICAgICAge0ZFQVRVUkVTX1BSSU1BUlkubWFwKChmZWF0dXJlLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxGZWF0dXJlQ2FyZCBrZXk9e2luZGV4fSB7Li4uZmVhdHVyZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgICAgIHsvKiBUcmFjdGlvbiBTZWN0aW9uICovfVxuICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJweS0yMCBtZDpweS0yNCBiZy1icmFuZC1taWRuaWdodCB0ZXh0LXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXIgbXgtYXV0byBweC02IHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC01eGwgbWQ6dGV4dC02eGwgZm9udC1leHRyYWJvbGQgbWItNCB0cmFja2luZy10aWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAzNCwwMDArIHVzZXJzIGFuZCBncm93aW5nLlxuICAgICAgICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtbGcgbWQ6dGV4dC14bCBvcGFjaXR5LTgwIG1heC13LTN4bCBteC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgIFRydXN0ZWQgYnkgZ292ZXJubWVudHMsIFNNRXMsIGFuZCBzdGFydHVwcyB3b3JsZHdpZGUuIEFsbCBhY2hpZXZlZCB0aHJvdWdoIG9yZ2FuaWMgZ3Jvd3RoIGZ1ZWxlZCBieSB1c2VyIHRydXN0IGFuZCByZWZlcnJhbHMuXG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgICAgICB7LyogQWxsIGluIG9uZSBwbGFjZSBTZWN0aW9uICovfVxuICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJweS0yMCBtZDpweS0yOCBiZy1ncmF5LTUwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXIgbXgtYXV0byBweC02XCI+XG4gICAgICAgICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC00eGwgbWQ6dGV4dC01eGwgZm9udC1ib2xkIHRleHQtY2VudGVyIG1iLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgIEFsbCB0aGUgdG9vbHMuIEFsbCBpbiBvbmUgcGxhY2UuXG4gICAgICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGdhcC04XCI+XG4gICAgICAgICAgICAgICAgICAgIHtGRUFUVVJFU19TRUNPTkRBUlkubWFwKChmZWF0dXJlLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxGZWF0dXJlQ2FyZCBrZXk9e2luZGV4fSB7Li4uZmVhdHVyZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgICAgIHsvKiBUYXJnZXQgTWFya2V0IFNlY3Rpb24gKi99XG4gICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInB5LTIwIG1kOnB5LTI4XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXIgbXgtYXV0byBweC02IHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC00eGwgbWQ6dGV4dC01eGwgZm9udC1ib2xkIG1iLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgIEh5cGVyLWNvbnRleHR1YWwgc29sdXRpb25zIGZvciBldmVyeW9uZS5cbiAgICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGp1c3RpZnktY2VudGVyIGdhcC04IG1kOmdhcC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICB7VEFSR0VUX01BUktFVFMubWFwKChtYXJrZXQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2luZGV4fSBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciB3LTMyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLWN5YW4tMTAwIHRleHQtYnJhbmQtY3lhbiByb3VuZGVkLWZ1bGwgcC01IG1iLTQgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIHRyYW5zZm9ybSBob3ZlcjpzY2FsZS0xMTAgaG92ZXI6YmctY3lhbi0yMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge21hcmtldC5pY29ufVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwiZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwXCI+e21hcmtldC5uYW1lfTwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgICAgICB7LyogVGVtcGxhdGVzIFNlY3Rpb24gKi99XG4gICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInB5LTIwIG1kOnB5LTI4IGJnLWdyYXktNTBcIj5cbiAgICAgICAgICAgICAgICA8SW50ZXJhY3RpdmVUZW1wbGF0ZXMgLz5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgICAgIHsvKiBFY29zeXN0ZW0gU2VjdGlvbiAqL31cbiAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicHktMjAgbWQ6cHktMjhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lciBteC1hdXRvIHB4LTZcIj5cbiAgICAgICAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LTR4bCBtZDp0ZXh0LTV4bCBmb250LWJvbGQgdGV4dC1jZW50ZXIgbWItMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgWW91ciBicmFuZCdzIGVudGlyZSBlY29zeXN0ZW0sIGNvbm5lY3RlZC5cbiAgICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTMgZ2FwLThcIj5cbiAgICAgICAgICAgICAgICAgICAge0ZFQVRVUkVTX1RFUlRJQVJZLm1hcCgoZmVhdHVyZSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8RmVhdHVyZUNhcmQga2V5PXtpbmRleH0gey4uLmZlYXR1cmV9IC8+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDwvbWFpbj5cbiAgICAgICAgICAgIDxGb290ZXIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICAvLyAtLS0gRU5EIE9GIEFwcC50c3ggLS0tXG5cblxuICAgICAgLy8gLS0tIFNUQVJUIE9GIGluZGV4LnRzeCAtLS1cbiAgICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvb3QnKTtcbiAgICAgIGlmICghcm9vdEVsZW1lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGZpbmQgcm9vdCBlbGVtZW50IHRvIG1vdW50IHRvXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByb290ID0gUmVhY3RET00uY3JlYXRlUm9vdChyb290RWxlbWVudCk7XG4gICAgICByb290LnJlbmRlcihcbiAgICAgICAgPFJlYWN0LlN0cmljdE1vZGU+XG4gICAgICAgICAgPEFwcCAvPlxuICAgICAgICA8L1JlYWN0LlN0cmljdE1vZGU+XG4gICAgICApO1xuICAgICAgLy8gLS0tIEVORCBPRiBpbmRleC50c3ggLS0tXG5cbiAgICAiXSwibWFwcGluZ3MiOiI7QUFDTSxPQUFPQSxLQUFLLElBQUlDLFFBQVEsUUFBUSxPQUFPO0FBQ3ZDLE9BQU9DLFFBQVEsTUFBTSxrQkFBa0I7O0FBRXZDO0FBQ0EsSUFBTUMsZ0JBQWdCLEdBQUcsQ0FDdkI7RUFDRUMsS0FBSyxFQUFFLDZDQUE2QztF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</script>
<!-- UMD React for InteractiveTemplates only -->
<script src="https://unpkg.com/react@18.3.1/umd/react.production.min.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js" crossorigin></script>
</head>
<body>
<noscript>
<div style="padding: 12px; text-align: center; background: #fff3cd; color: #664d03; font-family: Inter, sans-serif;">
JavaScript is required to use Brand AI. Please enable JavaScript.
</div>
</noscript>
<!-- Full-screen Auth Modal -->
<div id="authModal" class="fixed inset-0 z-[999] hidden">
<iframe id="authFrame" src="" class="w-full h-full border-0" title="Brand AI Authentication"
allow="clipboard-write; geolocation; microphone; camera"></iframe>
<button id="authClose" type="button" aria-label="Close authentication"
class="absolute top-4 right-4 z-10 bg-gray-900 text-white rounded-full px-4 py-2 shadow-lg hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-white">
Close
</button>
</div>
<div id="root">
<div class="bg-white text-gray-800 font-sans">
<header class="bg-white/80 backdrop-blur-sm sticky top-0 z-50 shadow-sm">
<div class="container mx-auto px-6 py-4">
<div class="flex items-center justify-between">
<div class="flex items-center space-x-8"><a href="https://www.thebrand.ai" aria-label="Brand AI Homepage">
<img src="https://www.thebrand.ai/i/uploads/logo/logo_62a4de26e93f0.png" alt="Brand AI Logo" width="110" height="30">
</a>
<nav class="hidden md:flex items-center space-x-6"><a
href="https://www.thebrand.ai/brandcreator/index"
class="text-gray-600 hover:text-brand-cyan font-medium transition-colors">Brand
Creator</a><a href="https://www.thebrand.ai/i"
class="text-gray-600 hover:text-brand-cyan font-medium transition-colors">Templates</a><a
href="https://www.thebrand.ai/insights/"
class="text-gray-600 hover:text-brand-cyan font-medium transition-colors">Insights</a><a
href="https://www.thebrand.ai/blogs"
class="text-gray-600 hover:text-brand-cyan font-medium transition-colors">Blogs</a>
<a
href="https://www.thebrand.ai/brandpay/choose"
class="text-gray-600 hover:text-brand-cyan font-medium transition-colors">Pricing</a>
</nav>
</div>
<div class="flex items-center space-x-4">
<a href="https://bit.ly/2LpQJmO" target="_blank" rel="noopener noreferrer" class="font-semibold text-gray-600 hover:text-brand-cyan transition-colors border border-gray-300 rounded-lg py-2 px-4 text-sm hover:border-brand-cyan">Download App</a>
<a href="https://www.thebrand.ai/connect/index.php" data-auth="login" class="font-bold text-gray-600 hover:text-brand-cyan transition-colors">Log in</a>
<a href="https://www.thebrand.ai/connect/index.php?action=register" data-auth="signup" class="bg-brand-cyan text-white font-bold py-2 px-4 rounded-lg hover:opacity-90 transition-opacity">Sign up for free</a>
</div>
<div class="md:hidden">
<button class="text-gray-800 focus:outline-none" aria-label="Toggle menu">
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"
xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M4 6h16M4 12h16M4 18h16"></path>
</svg>
</button>
</div>
</div>
</div>
</header>
<main>
<section class="relative text-white overflow-hidden bg-brand-midnight">
<div aria-hidden="true" class="absolute inset-0 z-0 opacity-50">
<div class="absolute top-[-30%] left-[-30%] w-4/5 h-4/5 rounded-full bg-gradient-to-br from-brand-cyan to-transparent filter blur-3xl"></div>
<div class="absolute bottom-[-30%] right-[-30%] w-4/5 h-4/5 rounded-full bg-gradient-to-tl from-brand-cyan to-transparent filter blur-3xl"></div>
</div>
<div class="relative z-10 flex flex-col items-center justify-center min-h-[70vh] md:min-h-[80vh] px-4 text-center">
<h1 class="text-5xl md:text-7xl lg:text-8xl font-extrabold mb-4 tracking-tight"><span class="block">Your Entire Brand.</span><span class="block">One Intelligent Platform.</span></h1>
<p class="text-lg md:text-2xl max-w-3xl mb-8">Imagine
the creative firepower of a design agency, the strategic insight of a
consultant, and the brilliance of a top-tier marketing team—all at your
fingertips. That's Brand AI.</p>
<div class="flex flex-wrap justify-center gap-4"><a
href="https://www.thebrand.ai/brandcreator/dashboard/auth-join.php?url=home"
class="bg-white text-brand-midnight font-bold py-3 px-8 rounded-lg text-lg hover:bg-gray-200 transition-all duration-300 transform hover:scale-105">Start
creating for free</a><a href="https://www.thebrand.ai/i/"
class="bg-white/10 backdrop-blur-sm text-white font-bold py-3 px-8 rounded-lg text-lg hover:bg-white/20 transition-all duration-300 transform hover:scale-105">Browse Templates
</a></div>
</div>
</section>
<section class="py-20 md:py-28 bg-white">
<div class="container mx-auto px-6 text-left">
<div class="max-w-3xl mx-auto mb-12 text-center">
<h2 class="text-4xl md:text-5xl font-bold mb-4">How Brand AI works for your brand</h2>
<p class="text-lg md:text-xl text-gray-600">Brand AI is an AI branding platform that guides you from first idea to a live, consistent brand. Instead of juggling separate tools, you move through one connected flow that turns strategy into ready-to-use assets.</p>
</div>
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
<div class="bg-gray-50 p-8 rounded-2xl shadow-md hover:shadow-xl hover:-translate-y-2 transition-all duration-300">
<p class="text-sm font-semibold text-brand-cyan mb-2 uppercase">Step 1</p>
<h3 class="text-xl font-bold mb-3">Tell Brand AI about your business</h3>
<p class="text-gray-700 mb-3">Describe your company, audience and goals in a guided brand brief. Brand AI turns this into a clear brand strategy that informs every design and message.</p>
<ul class="text-gray-700 text-sm space-y-2">
<li>Capture your mission, tone and visual preferences in minutes.</li>
<li>Align teams and stakeholders around one brand story.</li>
</ul>
</div>
<div class="bg-gray-50 p-8 rounded-2xl shadow-md hover:shadow-xl hover:-translate-y-2 transition-all duration-300">
<p class="text-sm font-semibold text-brand-cyan mb-2 uppercase">Step 2</p>
<h3 class="text-xl font-bold mb-3">Generate a complete brand with AI</h3>
<p class="text-gray-700 mb-3">Use the AI brand creator to instantly explore on-brand options for logos, colors, fonts, layouts and messaging, all mapped to your brief.</p>
<ul class="text-gray-700 text-sm space-y-2">
<li>See brand-safe logo, typography and color systems side by side.</li>
<li>Refine quickly instead of starting every design from scratch.</li>
</ul>
</div>
<div class="bg-gray-50 p-8 rounded-2xl shadow-md hover:shadow-xl hover:-translate-y-2 transition-all duration-300">
<p class="text-sm font-semibold text-brand-cyan mb-2 uppercase">Step 3</p>
<h3 class="text-xl font-bold mb-3">Launch campaigns across every channel</h3>
<p class="text-gray-700 mb-3">Move straight into templates, sites and presentations powered by your brand system, so every asset looks and feels consistent.</p>
<ul class="text-gray-700 text-sm space-y-2">
<li>Publish social posts, pitch decks, landing pages and reports from one workspace.</li>
<li>Use insights to see what performs best and improve the next campaign.</li>
</ul>
</div>
</div>
</div>
</section>
<section class="py-20 md:py-28 bg-gray-50">
<div class="container mx-auto px-6 text-center"><h2 class="text-4xl md:text-5xl font-bold mb-4">The old
way is broken.</h2>
<p class="text-lg md:text-xl text-gray-600 max-w-3xl mx-auto mb-12">Did you know 90% of businesses
struggle to stand out? They spend months and thousands on solutions that don’t deliver.</p>
<div class="grid grid-cols-1 md:grid-cols-3 gap-8 text-left">
<div class="bg-white p-8 rounded-2xl shadow-md hover:shadow-xl hover:-translate-y-2 transition-all duration-300">
<div class="text-brand-cyan mb-4">
<svg xmlns="http://www.w3.org/2000/svg" class="h-10 w-10" fill="none"
viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round"
d="M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 10v-1m-5.293-6.293l-.707.707M17.293 7.707l.707-.707M5.707 16.293l.707.707M16.586 17H19a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2.414"></path>
</svg>
</div>
<h3 class="text-xl font-bold mb-2">Agency-Level Budgets</h3>
<p class="text-gray-600">SMEs and governments need top-tier strategy but lack the budget for
expensive agencies.</p></div>
<div class="bg-white p-8 rounded-2xl shadow-md hover:shadow-xl hover:-translate-y-2 transition-all duration-300">
<div class="text-brand-cyan mb-4">
<svg xmlns="http://www.w3.org/2000/svg" class="h-10 w-10" fill="none"
viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round"
d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
</div>
<h3 class="text-xl font-bold mb-2">Months of Guesswork</h3>
<p class="text-gray-600">Founders and marketers waste precious time guessing their next move
instead of acting on clear insights.</p></div>
<div class="bg-white p-8 rounded-2xl shadow-md hover:shadow-xl hover:-translate-y-2 transition-all duration-300">
<div class="text-brand-cyan mb-4">
<svg xmlns="http://www.w3.org/2000/svg" class="h-10 w-10" fill="none"
viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round"
d="M11 4a2 2 0 114 0v1a1 1 0 001 1h3a1 1 0 011 1v3a1 1 0 01-1 1h-1a2 2 0 100 4h1a1 1 0 011 1v3a1 1 0 01-1 1h-3a1 1 0 01-1-1v-1a2 2 0 10-4 0v1a1 1 0 01-1 1H7a1 1 0 01-1-1v-3a1 1 0 00-1-1H4a2 2 0 110-4h1a1 1 0 001-1V7a1 1 0 011-1h3a1 1 0 001-1V4z"></path>
</svg>
</div>
<h3 class="text-xl font-bold mb-2">Juggling a Dozen Tools</h3>
<p class="text-gray-600">Creatives juggle multiple, disconnected tools to create a single
campaign, with none of them talking to each other.</p></div>
</div>
</div>
</section>
<section class="py-20 md:py-28">
<div class="container mx-auto px-6"><h2 class="text-4xl md:text-5xl font-bold text-center mb-12">An
entire toolkit, powered by AI.</h2>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
<div class="relative rounded-3xl overflow-hidden shadow-lg group text-white p-8 flex flex-col justify-between transition-all duration-500 ease-in-out transform hover:-translate-y-2 min-h-[480px] md:min-h-[520px]"
style="background-color: rgb(30, 0, 59);">
<div class="z-10 relative"><h3 class="text-3xl md:text-4xl font-bold mb-4">Bring Your Brand
to Life with Brand Creator</h3>
<p class="text-lg opacity-90 mb-6">Quickly and effortlessly create a powerful,
professional brand identity and logos that stand out and drive business growth.</p>
<a href="https://www.thebrand.ai/brandcreator/dashboard/auth-join.php?url=home"
class="bg-white text-gray-800 font-bold py-2 px-6 rounded-lg text-md hover:bg-gray-200 transition-all duration-300 ease-in-out transform group-hover:-translate-y-1 inline-block">Explore
Brand Creator</a></div>
<div class="absolute inset-0 z-0"><img alt="Bring Your Brand to Life with Brand Creator"
class="w-full h-full object-cover opacity-80 group-hover:opacity-100 group-hover:scale-110 transition-all duration-500 ease-in-out"
loading="lazy" decoding="async"
src="https://picsum.photos/seed/branding-desk/1200/800">
<div class="absolute inset-0 bg-black bg-opacity-20 group-hover:bg-opacity-10 transition-all duration-500 ease-in-out"></div>
</div>
</div>
<div class="relative rounded-3xl overflow-hidden shadow-lg group text-white p-8 flex flex-col justify-between transition-all duration-500 ease-in-out transform hover:-translate-y-2 min-h-[480px] md:min-h-[520px]"
style="background-color: rgb(0, 61, 91);">
<div class="z-10 relative"><h3 class="text-3xl md:text-4xl font-bold mb-4">Revolutionize
Your Brand with AI Insights</h3>
<p class="text-lg opacity-90 mb-6">Supercharge your brand with intelligent solutions,
design, and big data to drive growth, engagement, and measurable success.</p><a
href="https://www.thebrand.ai/insights/"
class="bg-white text-gray-800 font-bold py-2 px-6 rounded-lg text-md hover:bg-gray-200 transition-all duration-300 ease-in-out transform group-hover:-translate-y-1 inline-block">Explore
Insights</a></div>
<div class="absolute inset-0 z-0"><img alt="Revolutionize Your Brand with AI Insights"
class="w-full h-full object-cover opacity-80 group-hover:opacity-100 group-hover:scale-110 transition-all duration-500 ease-in-out"
loading="lazy" decoding="async"
src="https://picsum.photos/seed/ai-dashboard/1200/800">
<div class="absolute inset-0 bg-black bg-opacity-20 group-hover:bg-opacity-10 transition-all duration-500 ease-in-out"></div>
</div>
</div>
<div class="relative rounded-3xl overflow-hidden shadow-lg group text-white p-8 flex flex-col justify-between transition-all duration-500 ease-in-out transform hover:-translate-y-2 min-h-[480px] md:min-h-[520px]"
style="background-color: rgb(0, 76, 76);">
<div class="z-10 relative"><h3 class="text-3xl md:text-4xl font-bold mb-4">Build a Website
Easily with Brand Sites</h3>
<p class="text-lg opacity-90 mb-6">Choose from over 100 amazing templates to build a
stunning website that empowers your brand to stand out.</p><a
href="https://www.thebrand.ai/sites/index"
class="bg-white text-gray-800 font-bold py-2 px-6 rounded-lg text-md hover:bg-gray-200 transition-all duration-300 ease-in-out transform group-hover:-translate-y-1 inline-block">Explore
Brand Sites</a></div>
<div class="absolute inset-0 z-0"><img alt="Build a Website Easily with Brand Sites"
class="w-full h-full object-cover opacity-80 group-hover:opacity-100 group-hover:scale-110 transition-all duration-500 ease-in-out"
loading="lazy" decoding="async"
src="https://picsum.photos/seed/web-design/1200/800">
<div class="absolute inset-0 bg-black bg-opacity-20 group-hover:bg-opacity-10 transition-all duration-500 ease-in-out"></div>
</div>
</div>
</div>
</div>
</section>
<section class="py-20 md:py-24 bg-brand-midnight text-white">
<div class="container mx-auto px-6 text-center"><h2
class="text-5xl md:text-6xl font-extrabold mb-4 tracking-tight">34,000+ users and growing.</h2>
<p class="text-lg md:text-xl opacity-80 max-w-3xl mx-auto">Trusted by governments, SMEs, and
startups worldwide. All achieved through organic growth fueled by user trust and referrals.</p>
</div>
</section>
<section class="py-20 md:py-28 bg-gray-50">
<div class="container mx-auto px-6"><h2 class="text-4xl md:text-5xl font-bold text-center mb-12">All the
tools. All in one place.</h2>
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
<div class="relative rounded-3xl overflow-hidden shadow-lg group text-white p-8 flex flex-col justify-between transition-all duration-500 ease-in-out transform hover:-translate-y-2 min-h-[520px] md:col-span-2 lg:col-span-1"
style="background-color: rgb(61, 0, 79);">
<div class="z-10 relative"><h3 class="text-3xl md:text-4xl font-bold mb-4">Meet the Visual
Suite</h3>
<p class="text-lg opacity-90 mb-6">Your entire workflow in one place. From bespoke
designs and insightful blogs to tailored strategies—all powered by AI.</p><a
href="https://www.thebrand.ai/insights/dashboard?feature=brandtoolkit"
class="bg-white text-gray-800 font-bold py-2 px-6 rounded-lg text-md hover:bg-gray-200 transition-all duration-300 ease-in-out transform group-hover:-translate-y-1 inline-block">Explore
Visual Suite</a></div>
<div class="absolute inset-0 z-0"><img alt="Meet the Visual Suite"
class="w-full h-full object-cover opacity-80 group-hover:opacity-100 group-hover:scale-110 transition-all duration-500 ease-in-out"
loading="lazy" decoding="async"
src="https://picsum.photos/seed/creative-workspace/1200/800">
<div class="absolute inset-0 bg-black bg-opacity-20 group-hover:bg-opacity-10 transition-all duration-500 ease-in-out"></div>
</div>
</div>
<div class="relative rounded-3xl overflow-hidden shadow-lg group text-white p-8 flex flex-col justify-between transition-all duration-500 ease-in-out transform hover:-translate-y-2 min-h-[520px] md:col-span-2 lg:col-span-1"
style="background-color: rgb(0, 95, 88);">
<div class="z-10 relative"><h3 class="text-3xl md:text-4xl font-bold mb-4">Present with
impact</h3>
<p class="text-lg opacity-90 mb-6">Reimagine presentations with cinematic visuals, smart
collaboration, and AI-powered tools.</p><a href="https://www.thebrand.ai/i/designs"
class="bg-white text-gray-800 font-bold py-2 px-6 rounded-lg text-md hover:bg-gray-200 transition-all duration-300 ease-in-out transform group-hover:-translate-y-1 inline-block">Try
Presentations</a></div>
<div class="absolute inset-0 z-0"><img alt="Present with impact"
class="w-full h-full object-cover opacity-80 group-hover:opacity-100 group-hover:scale-110 transition-all duration-500 ease-in-out"
loading="lazy" decoding="async"
src="https://picsum.photos/seed/presentation-stage/1200/800">
<div class="absolute inset-0 bg-black bg-opacity-20 group-hover:bg-opacity-10 transition-all duration-500 ease-in-out"></div>
</div>
</div>
</div>
</div>
</section>
<section class="py-20 md:py-28">
<div class="container mx-auto px-6 text-center"><h2 class="text-4xl md:text-5xl font-bold mb-12">
Hyper-contextual solutions for everyone.</h2>
<div class="flex flex-wrap justify-center gap-8 md:gap-12">
<div class="flex flex-col items-center text-center w-32">
<div class="bg-cyan-100 text-brand-cyan rounded-full p-5 mb-4 transition-all duration-300 transform hover:scale-110 hover:bg-cyan-200">
<svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8" fill="none" viewBox="0 0 24 24"
stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round"
d="M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0v-4m0 4h5m0 0v-4m0 4h5m-5-4v-5h5v5h-5z"></path>
</svg>
</div>
<h3 class="font-semibold text-gray-700">SMEs</h3></div>
<div class="flex flex-col items-center text-center w-32">
<div class="bg-cyan-100 text-brand-cyan rounded-full p-5 mb-4 transition-all duration-300 transform hover:scale-110 hover:bg-cyan-200">
<svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8" fill="none" viewBox="0 0 24 24"
stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round"
d="M12 21l-2-2m2 2l2-2m2 2l2-2M5 15l-2-2m2 2l2-2m2 2l2-2m2 2l2-2M5 21v-6a2 2 0 012-2h10a2 2 0 012 2v6"></path>
<path stroke-linecap="round" stroke-linejoin="round"
d="M3 21h18M5 10l7-7 7 7"></path>
</svg>
</div>
<h3 class="font-semibold text-gray-700">Governments</h3></div>
<div class="flex flex-col items-center text-center w-32">
<div class="bg-cyan-100 text-brand-cyan rounded-full p-5 mb-4 transition-all duration-300 transform hover:scale-110 hover:bg-cyan-200">
<svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8" fill="none" viewBox="0 0 24 24"
stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round"
d="M13 10V3L4 14h7v7l9-11h-7z"></path>
</svg>
</div>
<h3 class="font-semibold text-gray-700">Startups</h3></div>
<div class="flex flex-col items-center text-center w-32">
<div class="bg-cyan-100 text-brand-cyan rounded-full p-5 mb-4 transition-all duration-300 transform hover:scale-110 hover:bg-cyan-200">
<svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8" fill="none" viewBox="0 0 24 24"
stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round"
d="M11 3.055A9.001 9.001 0 1020.945 13H11V3.055z"></path>
<path stroke-linecap="round" stroke-linejoin="round"
d="M20.488 9H15V3.512A9.025 9.025 0 0120.488 9z"></path>
</svg>
</div>
<h3 class="font-semibold text-gray-700">Marketers</h3></div>
<div class="flex flex-col items-center text-center w-32">
<div class="bg-cyan-100 text-brand-cyan rounded-full p-5 mb-4 transition-all duration-300 transform hover:scale-110 hover:bg-cyan-200">
<svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8" fill="none" viewBox="0 0 24 24"
stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round"
d="M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0v-4m0 4h5m0 0v-4m0 4h5m-5-4V5h5v7h-5z"></path>
</svg>
</div>
<h3 class="font-semibold text-gray-700">Corporations</h3></div>
</div>
</div>
</section>
<section class="py-20 md:py-28 bg-gray-50">
<div class="container mx-auto px-6">
<div class="max-w-3xl mx-auto text-center mb-12">
<h2 class="text-4xl md:text-5xl font-bold mb-4">Who Brand AI is built for</h2>
<p class="text-lg md:text-xl text-gray-600">Different teams use Brand AI in different ways, but they all want the same outcome: a consistent, professional brand that is easy to launch and grow with AI.</p>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
<div class="bg-white p-8 rounded-2xl shadow-md hover:shadow-xl hover:-translate-y-2 transition-all duration-300 text-left">
<h3 class="text-2xl font-bold mb-3">SMEs and startups</h3>
<p class="text-gray-700 mb-3">Use the AI branding platform to get an agency-quality brand without the agency budget. Go from idea to logo, website and launch campaigns in days, not months.</p>
<ul class="text-gray-700 text-sm space-y-2">
<li>Create a full brand kit with AI-guided templates and layouts.</li>
<li>Launch a website, pitch deck and social content from one place.</li>
<li>Reuse winning designs instead of rebuilding every asset from scratch.</li>
</ul>
</div>
<div class="bg-white p-8 rounded-2xl shadow-md hover:shadow-xl hover:-translate-y-2 transition-all duration-300 text-left">
<h3 class="text-2xl font-bold mb-3">Governments and public sector</h3>
<p class="text-gray-700 mb-3">Ensure governance, approvals and brand consistency across departments, campaigns and regions while still moving fast with AI-generated content and templates.</p>
<ul class="text-gray-700 text-sm space-y-2">
<li>Lock in compliant brand systems that teams can safely reuse.</li>
<li>Give internal and external partners on-brand templates to work from.</li>
<li>Track adoption and quality across programs from one brand workspace.</li>
</ul>
</div>
<div class="bg-white p-8 rounded-2xl shadow-md hover:shadow-xl hover:-translate-y-2 transition-all duration-300 text-left">
<h3 class="text-2xl font-bold mb-3">Marketers and agencies</h3>
<p class="text-gray-700 mb-3">Turn Brand AI into your repeatable system for multi-channel campaigns and multi-client work. Keep every asset on-brand while scaling production with AI.</p>
<ul class="text-gray-700 text-sm space-y-2">
<li>Organise client brands, templates and campaigns in one dashboard.</li>
<li>Generate on-brand concepts, variations and reports in a few clicks.</li>
<li>Collaborate with clients in real time instead of emailing static files.</li>
</ul>
</div>
<div class="bg-white p-8 rounded-2xl shadow-md hover:shadow-xl hover:-translate-y-2 transition-all duration-300 text-left">
<h3 class="text-2xl font-bold mb-3">Corporations, creators and freelancers</h3>
<p class="text-gray-700 mb-3">Give every brand touchpoint the same level of polish, from executive reports to creator content. Keep visuals and messaging aligned while your teams focus on the work.</p>
<ul class="text-gray-700 text-sm space-y-2">
<li>Manage brand assets, fonts and templates in one secure library.</li>
<li>Spin up campaigns that match your master brand in minutes.</li>
<li>Share editable designs instead of static PDFs to speed up approvals.</li>
</ul>
</div>
</div>
</div>
</section>
<section class="py-20 md:py-28">
<div class="container mx-auto px-6"><h2 class="text-4xl md:text-5xl font-bold text-center mb-12">Your
brand's entire ecosystem, connected.</h2>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
<div class="relative rounded-3xl overflow-hidden shadow-lg group text-white p-8 flex flex-col justify-between transition-all duration-500 ease-in-out transform hover:-translate-y-2 min-h-[480px] md:min-h-[520px]"
style="background-color: rgb(26, 35, 126);">
<div class="z-10 relative"><h3 class="text-3xl md:text-4xl font-bold mb-4">Define your Brand
Identity</h3>
<p class="text-lg opacity-90 mb-6">A central hub to build, manage, and evolve your
unique brand identity as you scale.</p><a
href="https://www.thebrand.ai/i/account/build_brand"
class="bg-white text-gray-800 font-bold py-2 px-6 rounded-lg text-md hover:bg-gray-200 transition-all duration-300 ease-in-out transform group-hover:-translate-y-1 inline-block">Build
My Brand</a></div>
<div class="absolute inset-0 z-0"><img alt="Define your Brand Identity"
class="w-full h-full object-cover opacity-80 group-hover:opacity-100 group-hover:scale-110 transition-all duration-500 ease-in-out"
loading="lazy" decoding="async"
src="index_files/284-800x600.jpg">
<div class="absolute inset-0 bg-black bg-opacity-20 group-hover:bg-opacity-10 transition-all duration-500 ease-in-out"></div>
</div>
</div>
<div class="relative rounded-3xl overflow-hidden shadow-lg group text-white p-8 flex flex-col justify-between transition-all duration-500 ease-in-out transform hover:-translate-y-2 min-h-[480px] md:min-h-[520px]"
style="background-color: rgb(0, 38, 62);">
<div class="z-10 relative"><h3 class="text-3xl md:text-4xl font-bold mb-4">End-to-end
platform for large organizations</h3>
<p class="text-lg opacity-90 mb-6">Scale brand consistency with enterprise-grade tools,
security, and support for large organizations.</p><a href="#"
class="bg-white text-gray-800 font-bold py-2 px-6 rounded-lg text-md hover:bg-gray-200 transition-all duration-300 ease-in-out transform group-hover:-translate-y-1 inline-block">Explore
Enterprise</a></div>
<div class="absolute inset-0 z-0"><img alt="End-to-end platform for large organizations"
class="w-full h-full object-cover opacity-80 group-hover:opacity-100 group-hover:scale-110 transition-all duration-500 ease-in-out"
loading="lazy" decoding="async"
src="index_files/622-800x600.jpg">
<div class="absolute inset-0 bg-black bg-opacity-20 group-hover:bg-opacity-10 transition-all duration-500 ease-in-out"></div>
</div>
</div>
<div class="relative rounded-3xl overflow-hidden shadow-lg group text-white p-8 flex flex-col justify-between transition-all duration-500 ease-in-out transform hover:-translate-y-2 min-h-[480px] md:min-h-[520px]"
style="background-color: rgb(1, 87, 155);">
<div class="z-10 relative"><h3 class="text-3xl md:text-4xl font-bold mb-4">Unlock Growth
with Insight Journeys</h3>
<p class="text-lg opacity-90 mb-6">Explore expert-led journeys to transform your
startup's growth, overcome challenges, and achieve success.</p><a
href="https://www.thebrand.ai/insights/dashboard?feature=browsejourneys"
class="bg-white text-gray-800 font-bold py-2 px-6 rounded-lg text-md hover:bg-gray-200 transition-all duration-300 ease-in-out transform group-hover:-translate-y-1 inline-block">Discover
Your Path</a></div>
<div class="absolute inset-0 z-0"><img alt="Unlock Growth with Insight Journeys"
class="w-full h-full object-cover opacity-80 group-hover:opacity-100 group-hover:scale-110 transition-all duration-500 ease-in-out"
loading="lazy" decoding="async"
src="index_files/898-800x600.jpg">
<div class="absolute inset-0 bg-black bg-opacity-20 group-hover:bg-opacity-10 transition-all duration-500 ease-in-out"></div>
</div>
</div>
</div>
</div>
</section>
<!-- Templates section: React mounts only here -->
<section class="py-20 md:py-28">
<div id="templates-root"></div>
</section>
<section class="py-20 md:py-28 bg-gray-50">
<div class="container mx-auto px-6">
<div class="max-w-3xl mx-auto text-center mb-12">
<h2 class="text-4xl md:text-5xl font-bold mb-4">Brand AI: AI branding platform FAQ</h2>
<p class="text-lg md:text-xl text-gray-600">Answers to the most common questions about using Brand AI to create and manage your brand with AI.</p>
</div>
<div class="max-w-3xl mx-auto space-y-8 text-left">
<div>
<h3 class="text-xl font-bold mb-2">How do I create a brand identity with AI?</h3>
<p class="text-gray-700">Start by completing a simple brand brief about your business, audience and goals. Brand AI then uses this to recommend logos, colors, fonts and messaging that fit your strategy, so you are not choosing random designs but building a connected brand system.</p>
</div>
<div>
<h3 class="text-xl font-bold mb-2">Is Brand AI a good AI branding platform for small businesses?</h3>
<p class="text-gray-700">Yes. Brand AI is designed for SMEs and startups that need agency-quality branding on a smaller budget. You can create a full brand kit, website and launch assets using guided workflows and templates, without hiring a large team.</p>
</div>
<div>
<h3 class="text-xl font-bold mb-2">How does Brand AI help governments and public sector brands?</h3>
<p class="text-gray-700">Brand AI makes it easier to keep communications consistent across departments and partners. You can set approved brand systems, share on-brand templates and track how teams are using them, so every campaign stays aligned with your official identity.</p>
</div>
<div>
<h3 class="text-xl font-bold mb-2">Do I need design experience to use Brand AI?</h3>
<p class="text-gray-700">You do not need to be a designer. The platform provides expert-built layouts and AI suggestions at every step, so you can choose from options that already follow good design and branding practices while still customizing them to your needs.</p>
</div>
<div>
<h3 class="text-xl font-bold mb-2">Can I start for free before upgrading?</h3>
<p class="text-gray-700">You can start creating for free and explore core tools, templates and brand workflows before deciding on a paid plan. When you are ready, you can upgrade to unlock more advanced features, collaboration and scale.</p>
</div>
</div>
</div>
</section>
</main>
<script>
(function() {
var root = document.getElementById('templates-root');
if (!root) return;
// Image configuration and dynamic resolution
var IMAGES_CONFIG = {
pexelsApiKey: 'SnJeKdzoLJiTT1Ge8rud21n5uvhWZPBTT0I9AwBtNSyG1pQLAJA5sRqh',
pixabayApiKey: '33011976-8e54c670d386b82f432cf1381'
};
var LOCAL_IMAGES = [
'index_files/192-400x300.jpg',
'index_files/1024-400x300.jpg',
'index_files/626-400x300.jpg',
'index_files/682-400x300.jpg',
'index_files/888-400x300.jpg'
];
function pickImage(label) {
var s = (label || '');
var hash = 0;
for (var i = 0; i < s.length; i++) {
hash = (hash * 31 + s.charCodeAt(i)) >>> 0;
}
return LOCAL_IMAGES[hash % LOCAL_IMAGES.length];
}
// Load images.json if present and build an index
var imagesIndex = null; // normalized as { [label]: { url?: string, query?: string, provider?: 'pexels'|'pixabay' } }
function normalizeImagesJson(data) {
var index = {};
if (!data) return index;
if (Array.isArray(data)) {
data.forEach(function(item){
if (!item) return;
var key = item.label || item.name || item.title;
if (!key) return;
var obj = {};
if (typeof item === 'string') {
obj.url = item;
}
if (item.url || item.imageUrl) obj.url = item.url || item.imageUrl;
if (item.query || item.search || item.keyword) obj.query = item.query || item.search || item.keyword;
if (item.provider) obj.provider = item.provider;
index[key] = obj;
});
} else if (typeof data === 'object') {
Object.keys(data).forEach(function(k){
var v = data[k];
var obj = {};
if (typeof v === 'string') { obj.url = v; }
else if (typeof v === 'object' && v) {
if (v.url || v.imageUrl) obj.url = v.url || v.imageUrl;
if (v.query || v.search || v.keyword) obj.query = v.query || v.search || v.keyword;
if (v.provider) obj.provider = v.provider;
}
index[k] = obj;
});
}
return index;
}
function loadImagesIndex() {
return fetch('/images.json')
.then(function(r){ return r.ok ? r.json() : null; })
.then(function(j){ imagesIndex = normalizeImagesJson(j); })
.catch(function(){ imagesIndex = {}; });
}
// Resolve an image for a given label, with caching and API fallback
function cacheGet(label) {
try {
var raw = localStorage.getItem('templateImg:' + label);
if (!raw) return null;
var obj = JSON.parse(raw);
// 7 days TTL
if (obj && obj.url && obj.ts && (Date.now() - obj.ts) < 7*24*60*60*1000) return obj.url;
} catch(_) {}
return null;
}
function cacheSet(label, url) {
try {
localStorage.setItem('templateImg:' + label, JSON.stringify({ url: url, ts: Date.now() }));
} catch(_) {}
}
function fetchFromPexels(query) {
if (!IMAGES_CONFIG.pexelsApiKey) return Promise.reject(new Error('Missing Pexels API key'));
var url = 'https://api.pexels.com/v1/search?per_page=1&query=' + encodeURIComponent(query);
return fetch(url, { headers: { Authorization: IMAGES_CONFIG.pexelsApiKey } })
.then(function(r){ if (!r.ok) throw new Error('Pexels fetch failed'); return r.json(); })
.then(function(j){
var p = j && j.photos && j.photos[0];
var src = p && p.src;
return (src && (src.landscape || src.large || src.medium)) || null;
});
}
function fetchFromPixabay(query) {
if (!IMAGES_CONFIG.pixabayApiKey) return Promise.reject(new Error('Missing Pixabay API key'));
var url = 'https://pixabay.com/api/?image_type=photo&per_page=3&key=' + encodeURIComponent(IMAGES_CONFIG.pixabayApiKey) + '&q=' + encodeURIComponent(query);
return fetch(url)
.then(function(r){ if (!r.ok) throw new Error('Pixabay fetch failed'); return r.json(); })
.then(function(j){
var h = j && j.hits && j.hits[0];
return (h && (h.largeImageURL || h.webformatURL)) || null;
});
}
function resolveImage(label) {
// 1) localStorage cache
var cached = cacheGet(label);
if (cached) return Promise.resolve(cached);
var idx = imagesIndex || {};
var entry = idx[label];
// 2) images.json direct url
if (entry && entry.url) {
cacheSet(label, entry.url);
return Promise.resolve(entry.url);
}
// 3) Query via provider
var query = (entry && entry.query) || label;
var provider = (entry && entry.provider) || 'pexels';
var promise = (provider === 'pixabay') ? fetchFromPixabay(query) : fetchFromPexels(query);
return promise
.catch(function(){
// Fallback to the other provider
return (provider === 'pixabay') ? fetchFromPexels(query) : fetchFromPixabay(query);
})
.then(function(url){
if (url) {
cacheSet(label, url);
return url;
}
// Final local fallback
return pickImage(label);
});
}
function sortCategories(list) {
return list.slice().sort(function(a, b) {
var an = (a && a.label) || '';
var bn = (b && b.label) || '';
if (an === 'Social Media') return -1;
if (bn === 'Social Media') return 1;
return an.localeCompare(bn);
});
}
function render(categories, activeLabel) {
root.innerHTML = '';
var container = document.createElement('div');
container.className = 'container mx-auto px-6';
var header = document.createElement('div');
header.className = 'text-center mb-12';
var h2 = document.createElement('h2');
h2.className = 'text-4xl md:text-5xl font-bold mb-4';
h2.textContent = 'Templates for absolutely anything';
var p = document.createElement('p');
p.className = 'text-lg md:text-xl text-gray-600 max-w-2xl mx-auto';
p.textContent = 'Jumpstart your next project with thousands of professional templates.';
header.appendChild(h2);
header.appendChild(p);
var tabs = document.createElement('div');
tabs.className = 'flex flex-wrap justify-center gap-2 md:gap-4 mb-10';
categories.forEach(function(cat) {
var isActive = activeLabel === cat.label;
var btn = document.createElement('button');
btn.type = 'button';
btn.className = 'py-2 px-5 rounded-full font-semibold transition-all duration-300 text-sm md:text-base ' +
(isActive ? 'bg-brand-cyan text-white shadow-lg transform scale-105' : 'bg-gray-200 text-gray-700 hover:bg-gray-300');
btn.textContent = cat.label;
btn.setAttribute('data-label', cat.label);
btn.setAttribute('aria-pressed', isActive ? 'true' : 'false');
tabs.appendChild(btn);
});
var grid = document.createElement('div');
grid.className = 'grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-6 md:gap-8';
var activeCategory = categories.find(function(c) { return c.label === activeLabel; });
var items = [];
if (activeCategory) {
if (Array.isArray(activeCategory.children)) items = activeCategory.children;
else if (Array.isArray(activeCategory.templates)) items = activeCategory.templates;
}
items.forEach(function(child) {
var a = document.createElement('a');
a.href = child.url;
a.className = 'block group rounded-lg overflow-hidden bg-gray-100 shadow-sm hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1';
var wrap = document.createElement('div');
wrap.className = 'relative aspect-[4/3] overflow-hidden';
var img = document.createElement('img');
// Start with a local placeholder, then resolve asynchronously
img.src = pickImage(child.label);
img.alt = child.label;
img.loading = 'lazy';
img.decoding = 'async';
img.className = 'w-full h-full object-cover group-hover:scale-105 transition-transform duration-300';
var overlay = document.createElement('div');
overlay.className = 'absolute inset-0 bg-black bg-opacity-10 group-hover:bg-opacity-0 transition-all duration-300';
wrap.appendChild(img);
wrap.appendChild(overlay);
var body = document.createElement('div');
body.className = 'p-3';
var h4 = document.createElement('h4');
h4.className = 'text-sm font-semibold text-gray-800 truncate group-hover:text-brand-cyan transition-colors duration-300';
h4.textContent = child.label;
body.appendChild(h4);
a.appendChild(wrap);
a.appendChild(body);
grid.appendChild(a);
// Resolve improved image from images.json / Pexels / Pixabay
resolveImage(child.label).then(function(url){
if (url) img.src = url;
}).catch(function(){ /* keep placeholder */ });
});
container.appendChild(header);
container.appendChild(tabs);
container.appendChild(grid);
root.appendChild(container);
tabs.addEventListener('click', function(e) {
var target = e.target;
if (target && target.matches('button[data-label]')) {
var next = target.getAttribute('data-label');
render(categories, next);
}
});
}
// First load images index, then categories
loadImagesIndex().then(function(){
return fetch('/categories.json')
.then(function(r) { return r.ok ? r.json() : Promise.reject(new Error('Failed to load categories.json')); })
.then(function(data) {
var list = Array.isArray(data) ? data : [];
var sorted = sortCategories(list);
var defaultLabel = sorted.find(function(c) { return c.label === 'Social Media'; }) ? 'Social Media' : (sorted[0] ? sorted[0].label : null);
render(sorted, defaultLabel);
})
.catch(function(err) {
root.innerHTML = '<div class="container mx-auto px-6 py-12 text-center text-red-600">Failed to load templates.</div>';
});
});
})();
</script>
<footer class="bg-brand-midnight text-white">
<div class="container mx-auto px-6 py-12">
<div class="grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-8">
<div class="col-span-2 lg:col-span-1"><a href="https://www.thebrand.ai" aria-label="Brand AI Homepage">
<img src="https://www.thebrand.ai/i/uploads/logo/logo_62a4de26e93f0.png" width="110" height="30" >
</a>
<p class="mt-4 text-gray-400">Your vision, amplified.</p></div>
<div><h3 class="font-bold uppercase text-gray-400">Features</h3>
<ul class="mt-4 space-y-2">
<li><a href="https://www.thebrand.ai/brandcreator/index"
class="text-gray-300 hover:text-brand-cyan transition-colors">Brand Creator</a></li>
<li><a href="https://www.thebrand.ai/i/account/designs"
class="text-gray-300 hover:text-brand-cyan transition-colors">My Designs</a></li>
<li><a href="https://www.thebrand.ai/i"
class="text-gray-300 hover:text-brand-cyan transition-colors">Templates</a></li>
<li><a href="https://www.thebrand.ai/insights/dashboard?feature=brandtoolkit"
class="text-gray-300 hover:text-brand-cyan transition-colors">Brand Toolkit</a></li>
</ul>
</div>
<div><h3 class="font-bold uppercase text-gray-400">Resources</h3>
<ul class="mt-4 space-y-2">
<li><a href="https://www.thebrand.ai/insights/"
class="text-gray-300 hover:text-brand-cyan transition-colors">Insights</a></li>
<li><a href="https://www.thebrand.ai/blogs"
class="text-gray-300 hover:text-brand-cyan transition-colors">Blogs</a></li>
<li><a href="https://www.thebrand.ai/insights/dashboard?feature=browsejourneys"
class="text-gray-300 hover:text-brand-cyan transition-colors">Brand Journeys</a></li>
<li><a href="https://www.thebrand.ai/sites/index"
class="text-gray-300 hover:text-brand-cyan transition-colors">Sites</a></li>
</ul>
</div>
<div><h3 class="font-bold uppercase text-gray-400">Account</h3>
<ul class="mt-4 space-y-2">
<li><a href="https://www.thebrand.ai/i/account/build_brand"
class="text-gray-300 hover:text-brand-cyan transition-colors">My Brand Identity</a>
</li>
<li><a href="#" class="text-gray-300 hover:text-brand-cyan transition-colors">Update Brand
Details</a></li>
<li><a href="https://www.thebrand.ai/insights/auth-onboard"
class="text-gray-300 hover:text-brand-cyan transition-colors">Onboarding</a></li>
</ul>
</div>
<div><h3 class="font-bold uppercase text-gray-400">Company</h3>
<ul class="mt-4 space-y-2">
<li><a href="#" class="text-gray-300 hover:text-brand-cyan transition-colors">About Us</a>
</li>
<li><a href="https://www.thebrand.ai/i/contact"
class="text-gray-300 hover:text-brand-cyan transition-colors">Contact Us</a></li>
<li><a href="#" class="text-gray-300 hover:text-brand-cyan transition-colors">Careers</a>
</li>
</ul>
</div>
</div>
<div class="mt-12 pt-8 border-t border-gray-800 flex flex-col md:flex-row justify-between items-center">
<p class="text-gray-400">© 2025 Brand AI. All rights reserved.</p>
<div class="flex space-x-4 mt-4 md:mt-0"><a href="https://facebook.com/TheBrandApp"
class="text-gray-400 hover:text-brand-cyan transition-colors"
aria-label="Facebook"><span
class="sr-only">Facebook</span>
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path fill-rule="evenodd"
d="M22 12c0-5.523-4.477-10-10-10S2 6.477 2 12c0 4.991 3.657 9.128 8.438 9.878v-6.987h-2.54V12h2.54V9.797c0-2.506 1.492-3.89 3.777-3.89 1.094 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.771-1.63 1.562V12h2.773l-.443 2.89h-2.33v6.988C18.343 21.128 22 16.991 22 12z"
clip-rule="evenodd"></path>
</svg>
</a><a href="https://twitter.com/thebrandhq"
class="text-gray-400 hover:text-brand-cyan transition-colors" aria-label="Twitter"><span
class="sr-only">Twitter</span>
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path d="M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.71v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84"></path>
</svg>
</a><a href="https://www.instagram.com/thebrandapp"
class="text-gray-400 hover:text-brand-cyan transition-colors" aria-label="Instagram"><span
class="sr-only">Instagram</span>
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path fill-rule="evenodd"
d="M12.315 2c2.43 0 2.784.013 3.808.06 1.064.049 1.791.218 2.427.465a4.902 4.902 0 011.772 1.153 4.902 4.902 0 011.153 1.772c.247.636.416 1.363.465 2.427.048 1.024.06 1.378.06 3.808s-.012 2.784-.06 3.808c-.049 1.064-.218 1.791-.465 2.427a4.902 4.902 0 01-1.153 1.772 4.902 4.902 0 01-1.772 1.153c-.636.247-1.363.416-2.427.465-1.024.048-1.378.06-3.808.06s-2.784-.012-3.808-.06c-1.064-.049-1.791-.218-2.427-.465a4.902 4.902 0 01-1.772-1.153 4.902 4.902 0 01-1.153-1.772c-.247-.636-.416-1.363-.465-2.427-.048-1.024-.06-1.378-.06-3.808s.012-2.784.06-3.808c.049-1.064.218-1.791.465-2.427a4.902 4.902 0 011.153-1.772A4.902 4.902 0 016.08 2.525c.636-.247 1.363-.416 2.427-.465C9.53 2.013 9.884 2 12.315 2zM12 7.044c-2.583 0-4.666 2.083-4.666 4.666s2.083 4.666 4.666 4.666 4.666-2.083 4.666-4.666S14.583 7.044 12 7.044zm0 7.666c-1.657 0-3-1.343-3-3s1.343-3 3-3 3 1.343 3 3-1.343 3-3 3zm4.917-7.916a1.146 1.146 0 100-2.292 1.146 1.146 0 000 2.292z"
clip-rule="evenodd"></path>
</svg>
</a><a href="https://www.linkedin.com/company/the-brand-app"
class="text-gray-400 hover:text-brand-cyan transition-colors" aria-label="LinkedIn"><span
class="sr-only">LinkedIn</span>
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path d="M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z"></path>
</svg>
</a></div>
</div>
</div>
</footer>
</div>
</div>
<script type="text/plain" data-disabled="true">
import React, {useState} from 'react';
import ReactDOM from 'react-dom/client';
// --- START OF constants.tsx ---
const FEATURES_PRIMARY = [
{
title: 'Bring Your Brand to Life with Brand Creator',
description: 'Quickly and effortlessly create a powerful, professional brand identity and logos that stand out and drive business growth.',
link: 'https://www.thebrand.ai/brandcreator/index',
buttonText: 'Explore Brand Creator',
imageUrl: 'https://picsum.photos/seed/branding-desk/1200/800',
bgColor: '#1E003B', // Deep Purple/Indigo
},
{
title: 'Revolutionize Your Brand with AI Insights',
description: 'Supercharge your brand with intelligent solutions, design, and big data to drive growth, engagement, and measurable success.',
link: 'https://www.thebrand.ai/insights/',
buttonText: 'Explore Insights',
imageUrl: 'https://picsum.photos/seed/ai-dashboard/1200/800',
bgColor: '#003D5B', // Dark Cyan/Blue
},
{
title: 'Build a Website Easily with Brand Sites',
description: 'Choose from over 100 amazing templates to build a stunning website that empowers your brand to stand out.',
link: 'https://www.thebrand.ai/sites/index',
buttonText: 'Explore Brand Sites',
imageUrl: 'https://picsum.photos/seed/web-design/1200/800',
bgColor: '#004C4C', // Dark Teal
},
];
const FEATURES_SECONDARY = [
{
title: 'Meet the Visual Suite',
description: 'Your entire workflow in one place. From bespoke designs and insightful blogs to tailored strategies—all powered by AI.',
link: 'https://www.thebrand.ai/insights/dashboard?feature=brandtoolkit',
buttonText: 'Explore Visual Suite',
imageUrl: 'https://picsum.photos/seed/creative-workspace/1200/800',
bgColor: '#3D004F', // Dark Magenta/Purple
size: 'large',
},
{
title: 'Present with impact',
description: 'Reimagine presentations with cinematic visuals, smart collaboration, and AI-powered tools.',
link: 'https://www.thebrand.ai/i/designs',
buttonText: 'Try Presentations',
imageUrl: 'https://picsum.photos/seed/presentation-stage/1200/800',
bgColor: '#005F58', // Deep Teal/Green
size: 'large',
},
];
const FEATURES_TERTIARY = [
{
title: 'Define your Brand Identity',
description: 'A central hub to build, manage, and evolve your unique brand identity as you scale.',
link: 'https://www.thebrand.ai/i/account/build_brand',
buttonText: 'Build My Brand',
imageUrl: 'https://picsum.photos/seed/brand-guide/800/600',
bgColor: '#1A237E', // Dark Indigo
},
{
title: 'End-to-end platform for large organizations',
description: 'Scale brand consistency with enterprise-grade tools, security, and support for large organizations.',
link: '#',
buttonText: 'Explore Enterprise',
imageUrl: 'https://picsum.photos/seed/corporate-dash/800/600',
bgColor: '#00263E', // Very Dark Blue
},
{
title: 'Unlock Growth with Insight Journeys',
description: "Explore expert-led journeys to transform your startup's growth, overcome challenges, and achieve success.",
link: 'https://www.thebrand.ai/insights/dashboard?feature=browsejourneys',
buttonText: 'Discover Your Path',
imageUrl: 'https://picsum.photos/seed/growth-path/800/600',
bgColor: '#01579B', // Light Blue
},
];
const CostIcon = () => (
<svg xmlns="http://www.w3.org/2000/svg" className="h-10 w-10" fill="none" viewBox="0 0 24 24"
stroke="currentColor" strokeWidth={2}>
<path strokeLinecap="round" strokeLinejoin="round"
d="M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 10v-1m-5.293-6.293l-.707.707M17.293 7.707l.707-.707M5.707 16.293l.707.707M16.586 17H19a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2.414"/>
</svg>
);
const TimeIcon = () => (
<svg xmlns="http://www.w3.org/2000/svg" className="h-10 w-10" fill="none" viewBox="0 0 24 24"
stroke="currentColor" strokeWidth={2}>
<path strokeLinecap="round" strokeLinejoin="round" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"/>
</svg>
);
const ToolsIcon = () => (
<svg xmlns="http://www.w3.org/2000/svg" className="h-10 w-10" fill="none" viewBox="0 0 24 24"
stroke="currentColor" strokeWidth={2}>
<path strokeLinecap="round" strokeLinejoin="round"
d="M11 4a2 2 0 114 0v1a1 1 0 001 1h3a1 1 0 011 1v3a1 1 0 01-1 1h-1a2 2 0 100 4h1a1 1 0 011 1v3a1 1 0 01-1 1h-3a1 1 0 01-1-1v-1a2 2 0 10-4 0v1a1 1 0 01-1 1H7a1 1 0 01-1-1v-3a1 1 0 00-1-1H4a2 2 0 110-4h1a1 1 0 001-1V7a1 1 0 011-1h3a1 1 0 001-1V4z"/>
</svg>
);
const PROBLEM_CARDS = [
{
icon: <CostIcon/>,
title: 'Agency-Level Budgets',
description: 'SMEs and governments need top-tier strategy but lack the budget for expensive agencies.'
},
{
icon: <TimeIcon/>,
title: 'Months of Guesswork',
description: 'Founders and marketers waste precious time guessing their next move instead of acting on clear insights.'
},
{
icon: <ToolsIcon/>,
title: 'Juggling a Dozen Tools',
description: 'Creatives juggle multiple, disconnected tools to create a single campaign, with none of them talking to each other.'
}
];
const SmeIcon = () => (
<svg xmlns="http://www.w3.org/2000/svg" className="h-8 w-8" fill="none" viewBox="0 0 24 24"
stroke="currentColor" strokeWidth={2}>
<path strokeLinecap="round" strokeLinejoin="round"
d="M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0v-4m0 4h5m0 0v-4m0 4h5m-5-4v-5h5v5h-5z"/>
</svg>
);
const GovernmentIcon = () => (
<svg xmlns="http://www.w3.org/2000/svg" className="h-8 w-8" fill="none" viewBox="0 0 24 24"
stroke="currentColor" strokeWidth={2}>
<path strokeLinecap="round" strokeLinejoin="round"
d="M12 21l-2-2m2 2l2-2m2 2l2-2M5 15l-2-2m2 2l2-2m2 2l2-2m2 2l2-2M5 21v-6a2 2 0 012-2h10a2 2 0 012 2v6"/>
<path strokeLinecap="round" strokeLinejoin="round" d="M3 21h18M5 10l7-7 7 7"/>
</svg>
);
const StartupIcon = () => (
<svg xmlns="http://www.w3.org/2000/svg" className="h-8 w-8" fill="none" viewBox="0 0 24 24"
stroke="currentColor" strokeWidth={2}>
<path strokeLinecap="round" strokeLinejoin="round" d="M13 10V3L4 14h7v7l9-11h-7z"/>
</svg>
);
const MarketerIcon = () => (
<svg xmlns="http://www.w3.org/2000/svg" className="h-8 w-8" fill="none" viewBox="0 0 24 24"
stroke="currentColor" strokeWidth={2}>
<path strokeLinecap="round" strokeLinejoin="round" d="M11 3.055A9.001 9.001 0 1020.945 13H11V3.055z"/>
<path strokeLinecap="round" strokeLinejoin="round" d="M20.488 9H15V3.512A9.025 9.025 0 0120.488 9z"/>
</svg>
);
const CorporateIcon = () => (
<svg xmlns="http://www.w3.org/2000/svg" className="h-8 w-8" fill="none" viewBox="0 0 24 24"
stroke="currentColor" strokeWidth={2}>
<path strokeLinecap="round" strokeLinejoin="round"
d="M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0v-4m0 4h5m0 0v-4m0 4h5m-5-4V5h5v7h-5z"/>
</svg>
);
const TARGET_MARKETS = [
{icon: <SmeIcon/>, name: 'SMEs'},
{icon: <GovernmentIcon/>, name: 'Governments'},
{icon: <StartupIcon/>, name: 'Startups'},
{icon: <MarketerIcon/>, name: 'Marketers'},
{icon: <CorporateIcon/>, name: 'Corporations'},
];
const FacebookIcon = () => (
<svg className="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path fillRule="evenodd"
d="M22 12c0-5.523-4.477-10-10-10S2 6.477 2 12c0 4.991 3.657 9.128 8.438 9.878v-6.987h-2.54V12h2.54V9.797c0-2.506 1.492-3.89 3.777-3.89 1.094 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.771-1.63 1.562V12h2.773l-.443 2.89h-2.33v6.988C18.343 21.128 22 16.991 22 12z"
clipRule="evenodd"/>
</svg>
);
const TwitterIcon = () => (
<svg className="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path
d="M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.71v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84"/>
</svg>
);
const InstagramIcon = () => (
<svg className="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path fillRule="evenodd"
d="M12.315 2c2.43 0 2.784.013 3.808.06 1.064.049 1.791.218 2.427.465a4.902 4.902 0 011.772 1.153 4.902 4.902 0 011.153 1.772c.247.636.416 1.363.465 2.427.048 1.024.06 1.378.06 3.808s-.012 2.784-.06 3.808c-.049 1.064-.218 1.791-.465 2.427a4.902 4.902 0 01-1.153 1.772 4.902 4.902 0 01-1.772 1.153c-.636.247-1.363.416-2.427.465-1.024.048-1.378.06-3.808.06s-2.784-.012-3.808-.06c-1.064-.049-1.791-.218-2.427-.465a4.902 4.902 0 01-1.772-1.153 4.902 4.902 0 01-1.153-1.772c-.247-.636-.416-1.363-.465-2.427-.048-1.024-.06-1.378-.06-3.808s.012-2.784.06-3.808c.049-1.064.218-1.791.465-2.427a4.902 4.902 0 011.153-1.772A4.902 4.902 0 016.08 2.525c.636-.247 1.363-.416 2.427-.465C9.53 2.013 9.884 2 12.315 2zM12 7.044c-2.583 0-4.666 2.083-4.666 4.666s2.083 4.666 4.666 4.666 4.666-2.083 4.666-4.666S14.583 7.044 12 7.044zm0 7.666c-1.657 0-3-1.343-3-3s1.343-3 3-3 3 1.343 3 3-1.343 3-3 3zm4.917-7.916a1.146 1.146 0 100-2.292 1.146 1.146 0 000 2.292z"
clipRule="evenodd"/>
</svg>
);
const LinkedInIcon = () => (
<svg className="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path
d="M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z"/>
</svg>
);
const TEMPLATE_CATEGORIES = [
{
category: 'Social Media',
templates: [
{title: "Facebook Post", url: "https://www.thebrand.ai/i/social-media/facebook-post"},
{title: "Instagram Post", url: "https://www.thebrand.ai/i/social-media/instagram-posts"},
{title: "Instagram Story", url: "https://www.thebrand.ai/i/social-media/instagram-story"},
{title: "LinkedIn Post", url: "https://www.thebrand.ai/i/social-media/linkedin-post"},
{title: "Twitter Post", url: "https://www.thebrand.ai/i/social-media/twitter"},
{title: "Pinterest Pin", url: "https://www.thebrand.ai/i/social-media/pinterest-pin-graphic-templates"},
{title: "IGTV Cover", url: "https://www.thebrand.ai/i/social-media/igtv-cover"},
{title: "Highlight Cover", url: "https://www.thebrand.ai/i/social-media/instagram-highlight-cover"},
{title: "YouTube Graphics", url: "https://www.thebrand.ai/i/social-media/youtube-graphic-templates"},
{title: "Twitch Graphics", url: "https://www.thebrand.ai/i/social-media/online-streaming"},
]
},
{
category: 'Invites & Cards',
templates: [
{title: "Business Card", url: "https://www.thebrand.ai/i/invites-and-cards/business-card-85x55mm"},
{title: "US Business Card", url: "https://www.thebrand.ai/i/invites-and-cards/business-card-us"},
{title: "Greeting Card", url: "https://www.thebrand.ai/i/invites-and-cards/card"},
{title: "Invitation", url: "https://www.thebrand.ai/i/invites-and-cards/invitation-13.9x10.7cm"},
]
},
{
category: 'Documents',
templates: [
{title: "Presentation 16:9", url: "https://www.thebrand.ai/i/documents/presentation-16-9"},
{title: "Resume", url: "https://www.thebrand.ai/i/documents/resume"},
{title: "Letterhead A4", url: "https://www.thebrand.ai/i/documents/letterhead-a4"},
{title: "Proposal A4", url: "https://www.thebrand.ai/i/documents/proposal-a4"},
{title: "Flyer A4", url: "https://www.thebrand.ai/i/documents/flyer-a4"},
{title: "Newsletter", url: "https://www.thebrand.ai/i/documents/newsletter"},
{title: "Invoice A4", url: "https://www.thebrand.ai/i/documents/invoice-a4"},
{title: "Report A4", url: "https://www.thebrand.ai/i/documents/report-a4"},
{title: "Certificate", url: "https://www.thebrand.ai/i/documents/certificate"},
{title: "Menu A4", url: "https://www.thebrand.ai/i/documents/menu-a4"},
{title: "Checklist", url: "https://www.thebrand.ai/i/documents/checklist"},
{title: "Schedule", url: "https://www.thebrand.ai/i/documents/schedule"},
{title: "Workbook", url: "https://www.thebrand.ai/i/documents/workbook"},
{title: "eBook", url: "https://www.thebrand.ai/i/documents/ebook"},
{title: "Whitepaper", url: "https://www.thebrand.ai/i/documents/whitepaper"},
]
},
{
category: 'Advertising',
templates: [
{title: "Poster", url: "https://www.thebrand.ai/i/advertising/poster-a3"},
{title: "Banner", url: "https://www.thebrand.ai/i/advertising/banner-2x6ft"},
{title: "Billboard", url: "https://www.thebrand.ai/i/advertising/billboard"},
{title: "Flyer", url: "https://www.thebrand.ai/i/advertising/flyer-us"},
{title: "Yard Sign", url: "https://www.thebrand.ai/i/advertising/yard-sign"},
{title: "Roll-up Banner", url: "https://www.thebrand.ai/i/advertising/roll-up-banner"},
{title: "Brochure", url: "https://www.thebrand.ai/i/advertising/brochure"},
]
},
{
category: 'Covers',
templates: [
{title: "Book Cover", url: "https://www.thebrand.ai/i/covers/book-cover"},
{title: "Magazine Cover", url: "https://www.thebrand.ai/i/covers/magazine-cover"},
{title: "Report Cover", url: "https://www.thebrand.ai/i/covers/report-cover"},
{title: "Planner Cover", url: "https://www.thebrand.ai/i/covers/planner-cover"},
{title: "eBook Cover", url: "https://www.thebrand.ai/i/covers/ebook-cover"},
]
},
];
// --- END OF constants.tsx ---
// --- START OF components/Logo.tsx ---
const Logo = ({className, theme = 'light'}) => {
const theColor = theme === 'dark' ? '#9CA3AF' : '#808080';
const brandColor = theme === 'dark' ? '#FFFFFF' : '#333333';
};
// --- END OF components/Logo.tsx ---
// --- START OF components/Header.tsx ---
const Header = () => {
const [isMenuOpen, setIsMenuOpen] = useState(false);
const navLinks = [
{name: 'Templates', href: 'https://www.thebrand.ai/i'},
{name: 'Brand Creator', href: 'https://www.thebrand.ai/brandcreator/index'},
{name: 'Insights', href: 'https://www.thebrand.ai/insights/'},
{name: 'Blogs', href: 'https://www.thebrand.ai/blogs'},
{name: 'Pricing', href: 'https://www.thebrand.ai/brandpay/choose'},
];
return (
<header className="bg-white/80 backdrop-blur-sm sticky top-0 z-50 shadow-sm">
<div className="container mx-auto px-6 py-4">
<div className="flex items-center justify-between">
<div className="flex items-center space-x-8">
<a href="/" aria-label="Brand AI Homepage">
<img src="https://www.thebrand.ai/i/uploads/logo/logo_62a4de26e93f0.png" width="110" height="30" />
</a>
<nav className="hidden md:flex items-center space-x-6">
{navLinks.map((link) => (
<a key={link.name} href={link.href}
className="text-gray-600 hover:text-brand-cyan font-medium transition-colors">
{link.name}
</a>
))}
</nav>
</div>
<div className="hidden md:flex items-center space-x-4">
<a href="https://bit.ly/2LpQJmO" target="_blank" rel="noopener noreferrer"
className="font-semibold text-gray-600 hover:text-brand-cyan transition-colors border border-gray-300 rounded-lg py-2 px-4 text-sm hover:border-brand-cyan">Download
App</a>
<a href="#" className="font-bold text-gray-600 hover:text-brand-cyan transition-colors">Log
in</a>
<a href="#"
className="bg-brand-cyan text-white font-bold py-2 px-4 rounded-lg hover:opacity-90 transition-opacity">Sign
up for free</a>
</div>
<div className="md:hidden">
<button onClick={() => setIsMenuOpen(!isMenuOpen)}
className="text-gray-800 focus:outline-none" aria-label="Toggle menu">
<svg className="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"
xmlns="http://www.w3.org/2000/svg">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2"
d={isMenuOpen ? "M6 18L18 6M6 6l12 12" : "M4 6h16M4 12h16M4 18h16"}></path>
</svg>
</button>
</div>
</div>
{isMenuOpen && (
<div className="md:hidden mt-4">
<nav className="flex flex-col space-y-4">
{navLinks.map((link) => (
<a key={link.name} href={link.href}
className="text-gray-600 hover:text-brand-cyan font-medium transition-colors">
{link.name}
</a>
))}
<div className="flex flex-col space-y-3 pt-4 border-t">
<a href="https://bit.ly/2LpQJmO" target="_blank" rel="noopener noreferrer"
className="w-full text-center border border-gray-300 text-gray-600 font-bold py-2 px-4 rounded-lg hover:border-brand-cyan hover:text-brand-cyan transition-colors">Download
App</a>
<a href="#"
className="font-bold text-gray-600 hover:text-brand-cyan transition-colors">Log
in</a>
<a href="#"
className="w-full text-center bg-brand-cyan text-white font-bold py-2 px-4 rounded-lg hover:opacity-90 transition-opacity">Sign
up for free</a>
</div>
</nav>
</div>
)}
</div>
</header>
);
};
// --- END OF components/Header.tsx ---
// --- START OF components/Footer.tsx ---
const Footer = () => {
const socialLinks = [
{name: 'Facebook', href: 'https://facebook.com/TheBrandApp', icon: <FacebookIcon/>},
{name: 'Twitter', href: 'https://twitter.com/thebrandhq', icon: <TwitterIcon/>},
{name: 'Instagram', href: 'https://www.instagram.com/thebrandapp', icon: <InstagramIcon/>},
{name: 'LinkedIn', href: 'https://www.linkedin.com/company/the-brand-app', icon: <LinkedInIcon/>},
];
const footerSections = [
{
title: 'Features',
links: [
{name: 'Brand Creator', href: 'https://www.thebrand.ai/brandcreator/index'},
{name: 'My Designs', href: 'https://www.thebrand.ai/i/account/designs'},
{name: 'Templates', href: 'https://www.thebrand.ai/i/designs'},
{name: 'Brand Toolkit', href: 'https://www.thebrand.ai/insights/dashboard?feature=brandtoolkit'},
],
},
{
title: 'Resources',
links: [
{name: 'Insights', href: 'https://www.thebrand.ai/insights/'},
{name: 'Blogs', href: 'https://www.thebrand.ai/blogs'},
{name: 'Brand Journeys', href: 'https://www.thebrand.ai/insights/dashboard?feature=browsejourneys'},
{name: 'Sites', href: 'https://www.thebrand.ai/sites/index'},
],
},
{
title: 'Account',
links: [
{name: 'My Brand Identity', href: 'https://www.thebrand.ai/i/account/build_brand'},
{name: 'Update Brand Details', href: '#'},
{name: 'Onboarding', href: 'https://www.thebrand.ai/insights/auth-onboard'},
],
},
{
title: 'Company',
links: [
{name: 'About Us', href: '#'},
{name: 'Contact Us', href: 'https://www.thebrand.ai/i/contact'},
{name: 'Careers', href: '#'},
],
},
];
return (
<footer className="bg-brand-midnight text-white">
<div className="container mx-auto px-6 py-12">
<div className="grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-8">
<div className="col-span-2 lg:col-span-1">
<a href="/" aria-label="Brand AI Homepage">
<img src="https://www.thebrand.ai/i/uploads/logo/logo_62a4de26e93f0.png" width="110" height="30" />
</a>
<p className="mt-4 text-gray-400">Your vision, amplified.</p>
</div>
{footerSections.map((section) => (
<div key={section.title}>
<h3 className="font-bold uppercase text-gray-400">{section.title}</h3>
<ul className="mt-4 space-y-2">
{section.links.map((link) => (
<li key={link.name}>
<a href={link.href}
className="text-gray-300 hover:text-brand-cyan transition-colors">
{link.name}
</a>
</li>
))}
</ul>
</div>
))}
</div>
<div
className="mt-12 pt-8 border-t border-gray-800 flex flex-col md:flex-row justify-between items-center">
<p className="text-gray-400">© {new Date().getFullYear()} Brand AI. All rights
reserved.</p>
<div className="flex space-x-4 mt-4 md:mt-0">
{socialLinks.map((social) => (
<a key={social.name} href={social.href}
className="text-gray-400 hover:text-brand-cyan transition-colors"
aria-label={social.name}>
<span className="sr-only">{social.name}</span>
{social.icon}
</a>
))}
</div>
</div>
</div>
</footer>
);
};
// --- END OF components/Footer.tsx ---
// --- START OF components/FeatureCard.tsx ---
const FeatureCard = ({
title,
description,
link,
buttonText,
imageUrl,
bgColor,
size = 'normal'
}) => {
const sizeClasses = {
normal: 'min-h-[480px] md:min-h-[520px]',
large: 'min-h-[520px] md:col-span-2 lg:col-span-1', // Special classes can be added here
};
return (
<div
className={`relative rounded-3xl overflow-hidden shadow-lg group text-white p-8 flex flex-col justify-between transition-all duration-500 ease-in-out transform hover:-translate-y-2 ${sizeClasses[size]}`}
style={{backgroundColor: bgColor}}
>
<div className="z-10 relative">
<h3 className="text-3xl md:text-4xl font-bold mb-4">{title}</h3>
{description && <p className="text-lg opacity-90 mb-6">{description}</p>}
<a
href={link}
className="bg-white text-gray-800 font-bold py-2 px-6 rounded-lg text-md hover:bg-gray-200 transition-all duration-300 ease-in-out transform group-hover:-translate-y-1 inline-block"
>
{buttonText}
</a>
</div>
<div className="absolute inset-0 z-0">
<img src={imageUrl} alt={title}
className="w-full h-full object-cover opacity-80 group-hover:opacity-100 group-hover:scale-110 transition-all duration-500 ease-in-out"
loading="lazy" decoding="async"/>
<div
className="absolute inset-0 bg-black bg-opacity-20 group-hover:bg-opacity-10 transition-all duration-500 ease-in-out"></div>
</div>
</div>
);
};
// --- END OF components/FeatureCard.tsx ---
// --- START OF components/TemplateCard.tsx ---
const TemplateCard = ({title, url}) => {
const imageSeed = title.replace(/\s+/g, '-').toLowerCase();
return (
<a
href={url}
className="block group rounded-lg overflow-hidden bg-gray-100 shadow-sm hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1"
>
<div className="relative aspect-[4/3] overflow-hidden">
<img
src={`https://picsum.photos/seed/${imageSeed}/400/300`}
alt={title}
className="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300"
loading="lazy"
decoding="async"
/>
<div
className="absolute inset-0 bg-black/10 group-hover:bg-black/0 transition-colors duration-300"></div>
</div>
<div className="p-3">
<h4 className="text-sm font-semibold text-gray-800 truncate group-hover:text-brand-cyan transition-colors duration-300">
{title}
</h4>
</div>
</a>
);
};
// --- END OF components/TemplateCard.tsx ---
// --- START OF components/InteractiveTemplates.tsx ---
const InteractiveTemplates = () => {
const initialCache = (typeof window !== 'undefined' && window.__TEMPLATE_CATEGORIES_CACHE) || [];
const [categories, setCategories] = useState(initialCache);
const hasSocialInit = initialCache.some(cat => cat.category === 'Social Media');
const [activeTab, setActiveTab] = useState(hasSocialInit ? 'Social Media' : (initialCache[0]?.category || 'Social Media'));
const [isLoading, setIsLoading] = useState(initialCache.length === 0);
// Load categories from categories.json and map to local structure
React.useEffect(() => {
if (initialCache.length) { setIsLoading(false); return; }
fetch('categories.json')
.then(res => res.json())
.then(data => {
const mapped = (Array.isArray(data) ? data : []).map(cat => ({
category: cat.label,
templates: (Array.isArray(cat.children) ? cat.children : []).map(child => ({
title: child.label,
url: child.url,
})),
}));
const desiredOrder = [
'Social Media',
'Invites & Cards',
'Documents',
'Advertising',
'Covers',
'More'
];
const filtered = mapped.filter(cat => cat.templates && cat.templates.length);
const ordered = filtered.slice().sort((a, b) => {
const ai = desiredOrder.indexOf(a.category);
const bi = desiredOrder.indexOf(b.category);
if (ai === -1 && bi === -1) return 0;
if (ai === -1) return 1;
if (bi === -1) return -1;
return ai - bi;
});
if (ordered.length) {
setCategories(ordered);
const hasSocial = ordered.some(cat => cat.category === 'Social Media');
setActiveTab(hasSocial ? 'Social Media' : ordered[0].category);
}
window.__TEMPLATE_CATEGORIES_CACHE = ordered;
setIsLoading(false);
})
.catch(() => {
// fallback: keep TEMPLATE_CATEGORIES
setIsLoading(false);
});
}, []);
const activeCategory = categories.find(cat => cat.category === activeTab);
return (
<div className="container mx-auto px-6">
<div className="text-center mb-12">
<h2 className="text-4xl md:text-5xl font-bold mb-4">Templates for absolutely anything</h2>
<p className="text-lg md:text-xl text-gray-600 max-w-2xl mx-auto">
Jumpstart your next project with thousands of professional templates for any occasion.
</p>
<a href="https://www.thebrand.ai/brandcreator/dashboard/auth-join.php?url=home"
className="mt-8 inline-block bg-brand-cyan text-white font-bold py-3 px-8 rounded-lg text-lg hover:opacity-90 transition-opacity">
Create Your Brand Now
</a>
</div>
<div className="flex flex-wrap justify-center gap-2 md:gap-4 mb-10">
{categories.map(cat => (
<button
key={cat.category}
onClick={() => setActiveTab(cat.category)}
className={`py-2 px-5 rounded-full font-semibold transition-all duration-300 text-sm md:text-base ${
activeTab === cat.category
? 'bg-brand-cyan text-white shadow-lg transform scale-105'
: 'bg-gray-200 text-gray-700 hover:bg-gray-300'
}`}
>
{cat.category}
</button>
))}
</div>
<div
key={activeTab}
className="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-6 md:gap-8">
{isLoading
? Array.from({ length: 12 }).map((_, i) => (
<div key={i} className="rounded-lg bg-gray-200 h-40 animate-pulse" />
))
: activeCategory?.templates.map(template => (
<TemplateCard
key={template.url}
title={template.title}
url={template.url}
/>
))}
</div>
</div>
);
};
// --- END OF components/InteractiveTemplates.tsx ---
// --- START OF App.tsx ---
const App = () => {
return (
<div className="bg-white text-gray-800 font-sans">
<Header/>
<main>
{/* Hero Section */}
<section className="relative text-white overflow-hidden bg-brand-midnight">
{/* Stylish Background */}
<div aria-hidden="true" className="absolute inset-0 z-0 opacity-50">
<div
className="absolute top-[-30%] left-[-30%] w-4/5 h-4/5 rounded-full bg-gradient-to-br from-brand-cyan to-transparent filter blur-3xl"></div>
<div
className="absolute bottom-[-30%] right-[-30%] w-4/5 h-4/5 rounded-full bg-gradient-to-tl from-brand-cyan to-transparent filter blur-3xl"></div>
</div>
<div
className="relative z-10 flex flex-col items-center justify-center min-h-[70vh] md:min-h-[80vh] px-4 text-center">
<h1 className="text-5xl md:text-7xl lg:text-8xl font-extrabold mb-4 tracking-tight">
Your Entire Brand.<br />One Intelligent Platform.
</h1>
<p className="text-lg md:text-2xl max-w-3xl mb-8">
Imagine the creative firepower of a design agency, the strategic insight of a
consultant, and the brilliance of a top-tier marketing team—all at your fingertips.
That's Brand AI.
</p>
<div className="flex flex-wrap justify-center gap-4">
<a
href="https://www.thebrand.ai/brandcreator/dashboard/auth-join.php?url=home"
className="bg-white text-brand-midnight font-bold py-3 px-8 rounded-lg text-lg hover:bg-gray-200 transition-all duration-300 transform hover:scale-105"
>
Start creating for free
</a>
<a
href="https://www.thebrand.ai/i/"
className="bg-white/10 backdrop-blur-sm text-white font-bold py-3 px-8 rounded-lg text-lg hover:bg-white/20 transition-all duration-300 transform hover:scale-105"
>
Browse Templates
</a>
</div>
</div>
</section>
{/* The Problem Section */}
<section className="py-20 md:py-28 bg-gray-50">
<div className="container mx-auto px-6 text-center">
<h2 className="text-4xl md:text-5xl font-bold mb-4">The old way is broken.</h2>
<p className="text-lg md:text-xl text-gray-600 max-w-3xl mx-auto mb-12">
Did you know 90% of businesses struggle to stand out? They spend months and thousands on
solutions that don’t deliver.
</p>
<div className="grid grid-cols-1 md:grid-cols-3 gap-8 text-left">
{PROBLEM_CARDS.map((card, index) => (
<div key={index}
className="bg-white p-8 rounded-2xl shadow-md hover:shadow-xl hover:-translate-y-2 transition-all duration-300">
<div className="text-brand-cyan mb-4">{card.icon}</div>
<h3 className="text-xl font-bold mb-2">{card.title}</h3>
<p className="text-gray-600">{card.description}</p>
</div>
))}
</div>
</div>
</section>
{/* Tools Section */}
<section className="py-20 md:py-28">
<div className="container mx-auto px-6">
<h2 className="text-4xl md:text-5xl font-bold text-center mb-12">
An entire toolkit, powered by AI.
</h2>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
{FEATURES_PRIMARY.map((feature, index) => (
<FeatureCard key={index} {...feature} />
))}
</div>
</div>
</section>
{/* Traction Section */}
<section className="py-20 md:py-24 bg-brand-midnight text-white">
<div className="container mx-auto px-6 text-center">
<h2 className="text-5xl md:text-6xl font-extrabold mb-4 tracking-tight">
34,000+ users and growing.
</h2>
<p className="text-lg md:text-xl opacity-80 max-w-3xl mx-auto">
Trusted by governments, SMEs, and startups worldwide. All achieved through organic
growth fueled by user trust and referrals.
</p>
</div>
</section>
{/* All in one place Section */}
<section className="py-20 md:py-28 bg-gray-50">
<div className="container mx-auto px-6">
<h2 className="text-4xl md:text-5xl font-bold text-center mb-12">
All the tools. All in one place.
</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-8">
{FEATURES_SECONDARY.map((feature, index) => (
<FeatureCard key={index} {...feature} />
))}
</div>
</div>
</section>
{/* Target Market Section */}
<section className="py-20 md:py-28">
<div className="container mx-auto px-6 text-center">
<h2 className="text-4xl md:text-5xl font-bold mb-12">
Hyper-contextual solutions for everyone.
</h2>
<div className="flex flex-wrap justify-center gap-8 md:gap-12">
{TARGET_MARKETS.map((market, index) => (
<div key={index} className="flex flex-col items-center text-center w-32">
<div
className="bg-cyan-100 text-brand-cyan rounded-full p-5 mb-4 transition-all duration-300 transform hover:scale-110 hover:bg-cyan-200">
{market.icon}
</div>
<h3 className="font-semibold text-gray-700">{market.name}</h3>
</div>
))}
</div>
</div>
</section>
{/* Templates Section */}
<section className="py-20 md:py-28 bg-gray-50">
<InteractiveTemplates/>
</section>
{/* Ecosystem Section */}
<section className="py-20 md:py-28">
<div className="container mx-auto px-6">
<h2 className="text-4xl md:text-5xl font-bold text-center mb-12">
Your brand's entire ecosystem, connected.
</h2>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
{FEATURES_TERTIARY.map((feature, index) => (
<FeatureCard key={index} {...feature} />
))}
</div>
</div>
</section>
</main>
{/* Testimonials Section (Minimal Layout) */}
<section className="py-20 md:py-28">
<div className="container mx-auto px-6 text-center">
<h2 className="text-4xl md:text-5xl font-bold mb-12">Testimonials</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-8 text-left">
<blockquote className="bg-gray-50 border border-gray-300 p-8 rounded-2xl">
<p className="text-xl text-gray-800 font-medium mb-4">“Brand AI gave us agency-level design without agency-level cost.”</p>
<cite className="text-gray-600">— Maria R., Founder, The Cozy Bookstore</cite>
</blockquote>
<blockquote className="bg-gray-50 border border-gray-300 p-8 rounded-2xl">
<p className="text-xl text-gray-800 font-medium mb-4">“AI-powered insights helped us outperform competitors and stay ahead of trends.”</p>
<cite className="text-gray-600">— Chris T., Head of Analytics, Fitness First Gyms</cite>
</blockquote>
</div>
</div>
</section>
{/* Pre-Footer CTA Section */}
<section className="py-20 md:py-28 bg-brand-midnight text-white">
<div className="container mx-auto px-6 text-center">
<h2 className="text-4xl md:text-5xl font-bold mb-4">
Where creativity meets clarity.
</h2>
<p className="text-lg md:text-xl text-gray-300 max-w-3xl mx-auto mb-8">
Brand brings design, strategy, and insight together—so you can build, scale, and express your brand with the precision of AI and the artistry of a designer.
</p>
<div className="flex flex-wrap justify-center gap-4">
<a
href="https://www.thebrand.ai/brandcreator/dashboard/auth-join.php?url=home"
className="bg-white text-brand-midnight font-bold py-3 px-8 rounded-lg text-lg hover:bg-gray-200 transition-all duration-300 transform hover:scale-105"
>
Start for Free
</a>
<a
href="https://www.thebrand.ai/i/"
className="bg-white/10 backdrop-blur-sm text-white font-bold py-3 px-8 rounded-lg text-lg hover:bg-white/20 transition-all duration-300 transform hover:scale-105"
>
Explore Templates
</a>
</div>
</div>
</section>
<Footer/>
</div>
);
};
// --- END OF App.tsx ---
// --- START OF index.tsx ---
// React mount disabled to retain static HTML content within #root.
// --- END OF index.tsx ---
</script>
<!-- Auth modal wiring -->
<script>
(function () {
var modal = document.getElementById('authModal');
var frame = document.getElementById('authFrame');
var closeBtn = document.getElementById('authClose');
if (!modal || !frame || !closeBtn) return;
function openAuth(event) {
if (event) event.preventDefault();
var intent = event && event.currentTarget && event.currentTarget.getAttribute('data-auth');
var src = 'https://www.thebrand.ai/connect/index.php' + (intent === 'signup' ? '?action=register' : '');
try {
frame.src = src;
} catch (e) {}
modal.classList.remove('hidden');
document.body.style.overflow = 'hidden';
}
Array.prototype.forEach.call(document.querySelectorAll('a[data-auth]'), function (a) {
a.addEventListener('click', openAuth);
});
closeBtn.addEventListener('click', function () {
modal.classList.add('hidden');
frame.src = 'about:blank';
document.body.style.overflow = '';
});
})();
</script>
</body>
</html>
<!-- Floating Pricing button -->
<button id="openPricingModal" aria-haspopup="dialog" aria-controls="pricingModal" title="Open Pricing"
style="position:fixed; right:20px; bottom:20px; z-index:1000; background:#111827; color:#fff; border:none; border-radius:24px; padding:10px 16px; box-shadow:0 6px 18px rgba(0,0,0,0.2); cursor:pointer;">
Pricing
</button>
<!-- Pricing Modal -->
<div id="pricingModal" role="dialog" aria-modal="true" aria-labelledby="pricingModalTitle" aria-hidden="true"
style="display:none; position:fixed; inset:0; z-index:1001; background:rgba(0,0,0,0.55);">
<div id="pricingModalPanel" style="position:relative; margin:5vh auto; width:92vw; max-width:1000px; height:85vh; background:#ffffff; border-radius:14px; box-shadow:0 20px 40px rgba(0,0,0,0.25); overflow:hidden; display:flex; flex-direction:column;">
<div style="display:flex; align-items:center; justify-content:space-between; padding:12px 16px; border-bottom:1px solid #e5e7eb;">
<h2 id="pricingModalTitle" style="font-size:16px; font-weight:600; color:#111827;">Pricing & Payment</h2>
<div style="display:flex; align-items:center; gap:8px;">
<a href="https://www.thebrand.ai/brandpay/choose" target="_blank" rel="noopener" aria-label="Open pricing in a new tab"
style="text-decoration:none; font-size:12px; color:#2563eb;">Open in new tab</a>
<button id="closePricingModal" aria-label="Close Pricing Modal"
style="background:#111827; color:#fff; border:none; border-radius:8px; padding:8px 10px; cursor:pointer;">Close</button>
</div>
</div>
<div style="flex:1;">
<iframe id="pricingIframe" title="Choose Payment Method"
data-src="https://www.thebrand.ai/brandpay/choose"
style="width:100%; height:100%; border:0; background:#f9fafb;"
sandbox="allow-forms allow-scripts allow-same-origin allow-popups"
referrerpolicy="no-referrer-when-downgrade"></iframe>
</div>
</div>
</div>
<script>
(function() {
var openBtn = document.getElementById('openPricingModal');
var modal = document.getElementById('pricingModal');
var panel = document.getElementById('pricingModalPanel');
var closeBtn = document.getElementById('closePricingModal');
var iframe = document.getElementById('pricingIframe');
function openModal() {
// Lazy-load iframe
var src = iframe.getAttribute('data-src');
if (src && iframe.src !== src) {
iframe.src = src;
}
modal.style.display = 'block';
modal.setAttribute('aria-hidden', 'false');
// Prevent background scroll
document.body.dataset.prevOverflow = document.body.style.overflow || '';
document.body.style.overflow = 'hidden';
closeBtn.focus();
window.addEventListener('keydown', onKeyDown);
}
function closeModal() {
modal.style.display = 'none';
modal.setAttribute('aria-hidden', 'true');
document.body.style.overflow = document.body.dataset.prevOverflow || '';
window.removeEventListener('keydown', onKeyDown);
openBtn.focus();
}
function onKeyDown(e) {
if (e.key === 'Escape') {
closeModal();
}
}
// Backdrop click closes if clicking outside the panel
modal.addEventListener('click', function(e) {
if (!panel.contains(e.target)) {
closeModal();
}
});
openBtn.addEventListener('click', openModal);
closeBtn.addEventListener('click', closeModal);
// Ensure main navigation "Pricing" link opens the modal
document.addEventListener('click', function(e) {
var anchor = e.target.closest('a');
if (!anchor) return;
var text = (anchor.textContent || '').trim().toLowerCase();
if (text === 'pricing') {
e.preventDefault();
openModal();
}
});
})();
</script>