feat: Add animations for video motion, branded layouts, and digital menu boards

This commit is contained in:
Matt Batchelder
2026-03-16 23:47:21 -04:00
parent 8f911e29e8
commit 34c2e4d70c
3 changed files with 898 additions and 3 deletions

View File

@@ -9049,3 +9049,721 @@ p:last-child { margin-bottom: 0; }
@media (max-width: 640px) {
.member-slide__title { font-size: 20px; }
}
/* ═══════════════════════════════════════════════════════════════
VIDEO & MOTION GRAPHICS ANIMATION (.platform-visual.has-video-motion)
Looping reel with kinetic typography and motion preview
═══════════════════════════════════════════════════════════════ */
.platform-visual.has-video-motion {
background: none !important;
border: none !important;
border-radius: 0;
aspect-ratio: unset;
padding: 0;
overflow: visible;
box-shadow: none;
}
.vidmo-stage {
width: 100%;
max-width: 520px;
margin: 0 auto;
}
.vidmo-tv {
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
}
.vidmo-tv__body {
width: 100%;
background: #111;
border: 5px solid #1a1a1a;
border-radius: 8px 8px 4px 4px;
outline: 2px solid #000;
padding: 4px;
box-shadow: 0 14px 48px rgba(0,0,0,0.6), inset 0 1px 0 rgba(255,255,255,0.06);
}
.vidmo-tv__screen {
width: 100%;
aspect-ratio: 16/9;
background: #0a0a0a;
border-radius: 2px;
overflow: hidden;
position: relative;
}
.vidmo-tv__feet {
display: flex;
justify-content: space-between;
width: 60%;
max-width: 300px;
}
.vidmo-tv__foot {
width: 12px;
height: 8px;
background: #111;
border: 1px solid #000;
border-radius: 0 0 4px 4px;
}
/* Slides */
.vidmo-slides {
position: relative;
width: 100%;
height: 100%;
}
.vidmo-slide {
position: absolute;
inset: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 24px;
text-align: center;
opacity: 0;
animation: vidmo-cycle 12s infinite;
}
.vidmo-slide--kinetic { animation-delay: 0s; }
.vidmo-slide--promo { animation-delay: 4s; }
.vidmo-slide--loop { animation-delay: 8s; }
/* Kinetic typography slide */
.vidmo-kinetic {
display: flex;
flex-direction: column;
gap: 4px;
align-items: center;
}
.vidmo-kinetic__word {
font-weight: 800;
text-transform: uppercase;
letter-spacing: 2px;
color: #fff;
opacity: 0;
animation: vidmo-word-in 12s infinite;
}
.vidmo-kinetic__word--1 { font-size: 28px; animation-delay: 0.2s; }
.vidmo-kinetic__word--2 { font-size: 20px; color: var(--color-primary); animation-delay: 0.5s; }
.vidmo-kinetic__word--3 { font-size: 16px; color: rgba(255,255,255,0.5); animation-delay: 0.8s; }
/* Promo slide */
.vidmo-promo {
position: relative;
width: 80%;
max-width: 280px;
}
.vidmo-promo__bg {
position: absolute;
inset: 0;
background: linear-gradient(135deg, rgba(216,51,2,0.2), transparent);
border-radius: 10px;
animation: vidmo-bg-pulse 4s ease-in-out infinite;
}
.vidmo-promo__label {
font-size: 10px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 1.5px;
color: var(--color-primary);
margin-bottom: 6px;
position: relative;
}
.vidmo-promo__title {
font-size: 22px;
font-weight: 800;
color: #fff;
position: relative;
}
.vidmo-promo__sub {
font-size: 12px;
color: rgba(255,255,255,0.5);
margin-top: 6px;
position: relative;
}
/* Loop counter slide */
.vidmo-loop {
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
}
.vidmo-loop__icon {
width: 40px;
height: 40px;
border-radius: 50%;
border: 2px solid var(--color-primary);
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
animation: vidmo-icon-spin 4s linear infinite;
}
.vidmo-loop__text {
font-size: 13px;
font-weight: 600;
color: rgba(255,255,255,0.6);
}
.vidmo-loop__formats {
display: flex;
gap: 8px;
}
.vidmo-loop__fmt {
font-size: 10px;
font-weight: 700;
padding: 3px 8px;
border-radius: 4px;
background: rgba(255,255,255,0.06);
color: rgba(255,255,255,0.4);
letter-spacing: 0.5px;
}
/* Progress bar */
.vidmo-progress {
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 3px;
background: rgba(255,255,255,0.06);
}
.vidmo-progress__bar {
height: 100%;
background: var(--color-primary);
animation: vidmo-progress-fill 12s linear infinite;
}
@keyframes vidmo-cycle {
0%, 2% { opacity: 0; transform: translateY(10px); }
5%, 30% { opacity: 1; transform: translateY(0); }
33%, 100%{ opacity: 0; transform: translateY(-10px); }
}
@keyframes vidmo-word-in {
0%, 2% { opacity: 0; transform: scale(0.8); }
5%, 28% { opacity: 1; transform: scale(1); }
33%, 100%{ opacity: 0; transform: scale(1.05); }
}
@keyframes vidmo-bg-pulse {
0%, 100% { opacity: 0.6; }
50% { opacity: 1; }
}
@keyframes vidmo-icon-spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
@keyframes vidmo-progress-fill {
0% { width: 0%; }
95% { width: 100%; }
100% { width: 0%; }
}
@media (prefers-reduced-motion: reduce) {
.vidmo-slide { animation: none; }
.vidmo-slide--kinetic { opacity: 1; transform: none; }
.vidmo-kinetic__word { animation: none; opacity: 1; transform: none; }
.vidmo-loop__icon { animation: none; }
.vidmo-progress__bar { animation: none; width: 60%; }
}
@media (max-width: 640px) {
.vidmo-kinetic__word--1 { font-size: 22px; }
.vidmo-promo__title { font-size: 18px; }
}
/* ═══════════════════════════════════════════════════════════════
BRANDED LAYOUT DESIGN ANIMATION (.platform-visual.has-brand-layout)
Template builder showing brand elements snapping into place
═══════════════════════════════════════════════════════════════ */
.platform-visual.has-brand-layout {
background: none !important;
border: none !important;
border-radius: 0;
aspect-ratio: unset;
padding: 0;
overflow: visible;
box-shadow: none;
}
.blay-stage {
width: 100%;
max-width: 480px;
margin: 0 auto;
}
.blay-editor {
background: #0d1117;
border: 1px solid #1e2435;
border-radius: 10px;
overflow: hidden;
box-shadow: 0 20px 60px rgba(0,0,0,0.5), 0 0 0 1px rgba(255,255,255,0.04);
}
.blay-toolbar {
display: flex;
align-items: center;
gap: 10px;
padding: 10px 16px;
background: rgba(255,255,255,0.03);
border-bottom: 1px solid rgba(255,255,255,0.06);
}
.blay-toolbar__title {
font-size: 12px;
font-weight: 600;
color: rgba(255,255,255,0.5);
flex: 1;
}
.blay-toolbar__dots {
display: flex;
gap: 4px;
}
.blay-toolbar__dot {
width: 8px;
height: 8px;
border-radius: 50%;
}
.blay-toolbar__dot--r { background: #ff5f56; }
.blay-toolbar__dot--y { background: #ffbd2e; }
.blay-toolbar__dot--g { background: #27c93f; }
.blay-body {
display: grid;
grid-template-columns: 1fr 140px;
}
/* Canvas area */
.blay-canvas {
padding: 16px;
border-right: 1px solid rgba(255,255,255,0.06);
}
.blay-preview {
background: #0a0a0e;
border-radius: 6px;
overflow: hidden;
position: relative;
aspect-ratio: 16/10;
}
/* Brand elements dropping in */
.blay-el {
position: absolute;
opacity: 0;
animation: blay-drop 10s infinite;
}
.blay-el--logo {
top: 12px;
left: 12px;
width: 60px;
height: 18px;
background: var(--color-primary);
border-radius: 3px;
animation-delay: 0s;
}
.blay-el--hero {
top: 38px;
left: 12px;
right: 12px;
height: 48%;
background: linear-gradient(135deg, rgba(255,255,255,0.04), rgba(255,255,255,0.08));
border-radius: 4px;
animation-delay: 0.5s;
}
.blay-el--headline {
bottom: 38%;
left: 12px;
width: 65%;
height: 12px;
background: rgba(255,255,255,0.2);
border-radius: 2px;
animation-delay: 1s;
}
.blay-el--body {
bottom: 28%;
left: 12px;
width: 80%;
height: 6px;
background: rgba(255,255,255,0.08);
border-radius: 2px;
animation-delay: 1.3s;
}
.blay-el--body2 {
bottom: 22%;
left: 12px;
width: 70%;
height: 6px;
background: rgba(255,255,255,0.06);
border-radius: 2px;
animation-delay: 1.5s;
}
.blay-el--cta {
bottom: 10%;
left: 12px;
width: 80px;
height: 24px;
background: var(--color-primary);
border-radius: 4px;
animation-delay: 1.8s;
}
.blay-el--accent {
top: 0;
right: 0;
width: 4px;
height: 100%;
background: var(--color-primary);
animation-delay: 2.1s;
}
/* Brand guide panel */
.blay-panel {
padding: 14px 12px;
}
.blay-panel__title {
font-size: 9px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 1px;
color: rgba(255,255,255,0.35);
margin-bottom: 12px;
}
.blay-colors {
display: flex;
gap: 6px;
margin-bottom: 14px;
}
.blay-color {
width: 22px;
height: 22px;
border-radius: 4px;
border: 1px solid rgba(255,255,255,0.1);
}
.blay-color--1 { background: var(--color-primary); }
.blay-color--2 { background: #1a1a2e; }
.blay-color--3 { background: #fff; }
.blay-color--4 { background: #6b7280; }
.blay-fonts {
display: flex;
flex-direction: column;
gap: 8px;
margin-bottom: 14px;
}
.blay-font {
display: flex;
flex-direction: column;
gap: 2px;
}
.blay-font__label {
font-size: 8px;
text-transform: uppercase;
letter-spacing: 0.5px;
color: rgba(255,255,255,0.25);
}
.blay-font__sample {
font-size: 14px;
font-weight: 700;
color: rgba(255,255,255,0.6);
}
.blay-font__sample--body {
font-size: 11px;
font-weight: 400;
}
.blay-spacing {
display: flex;
flex-direction: column;
gap: 4px;
}
.blay-spacing__label {
font-size: 8px;
text-transform: uppercase;
letter-spacing: 0.5px;
color: rgba(255,255,255,0.25);
}
.blay-spacing__bars {
display: flex;
align-items: flex-end;
gap: 3px;
height: 20px;
}
.blay-spacing__bar {
width: 12px;
border-radius: 2px;
background: rgba(255,255,255,0.1);
}
.blay-spacing__bar--sm { height: 6px; }
.blay-spacing__bar--md { height: 12px; }
.blay-spacing__bar--lg { height: 18px; }
.blay-spacing__bar--xl { height: 20px; }
@keyframes blay-drop {
0%, 5% { opacity: 0; transform: translateY(-8px); }
12%, 75% { opacity: 1; transform: translateY(0); }
85%, 100%{ opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
.blay-el { animation: none; opacity: 1; transform: none; }
}
@media (max-width: 640px) {
.blay-body { grid-template-columns: 1fr; }
.blay-panel { display: none; }
}
/* ═══════════════════════════════════════════════════════════════
DIGITAL MENU BOARD ANIMATION (.platform-visual.has-menu-board)
Rotating restaurant menu with categories and prices
═══════════════════════════════════════════════════════════════ */
.platform-visual.has-menu-board {
background: none !important;
border: none !important;
border-radius: 0;
aspect-ratio: unset;
padding: 0;
overflow: visible;
box-shadow: none;
font-size: inherit;
}
.menu-stage {
width: 100%;
max-width: 520px;
margin: 0 auto;
}
.menu-tv {
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
}
.menu-tv__body {
width: 100%;
background: #111;
border: 5px solid #1a1a1a;
border-radius: 8px 8px 4px 4px;
outline: 2px solid #000;
padding: 4px;
position: relative;
box-shadow: 0 14px 48px rgba(0,0,0,0.6), inset 0 1px 0 rgba(255,255,255,0.06);
}
.menu-tv__screen {
width: 100%;
aspect-ratio: 16/9;
background: #0a0a0a;
border-radius: 2px;
overflow: hidden;
position: relative;
}
.menu-tv__feet {
display: flex;
justify-content: space-between;
width: 60%;
max-width: 300px;
}
.menu-tv__foot {
width: 12px;
height: 8px;
background: #111;
border: 1px solid #000;
border-radius: 0 0 4px 4px;
}
/* Live badge */
.menu-live {
position: absolute;
top: 10px;
right: 10px;
display: flex;
align-items: center;
gap: 5px;
background: rgba(0,0,0,0.5);
padding: 3px 8px;
border-radius: 20px;
z-index: 10;
border: 1px solid rgba(255,255,255,0.1);
backdrop-filter: blur(4px);
}
.menu-live__dot {
width: 6px;
height: 6px;
background: #4ade80;
border-radius: 50%;
box-shadow: 0 0 8px #4ade80;
animation: menu-live-pulse 2s ease-in-out infinite;
}
.menu-live__text {
font-size: 9px;
color: #fff;
font-weight: 500;
letter-spacing: 0.3px;
}
/* Menu slides */
.menu-slides {
position: relative;
width: 100%;
height: 100%;
}
.menu-slide {
position: absolute;
inset: 0;
opacity: 0;
animation: menu-slide-fade 9s infinite;
display: flex;
flex-direction: column;
}
.menu-slide--mains { animation-delay: 0s; }
.menu-slide--drinks { animation-delay: 3s; }
.menu-slide--dessert { animation-delay: 6s; }
.menu-content {
padding: 20px 28px;
height: 100%;
display: flex;
flex-direction: column;
background: linear-gradient(135deg, rgba(15,15,20,1) 0%, rgba(25,25,35,1) 100%);
color: #fff;
}
.menu-content__hd {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 6px;
}
.menu-content__badge {
font-size: 10px;
text-transform: uppercase;
letter-spacing: 1px;
background: var(--color-primary);
padding: 2px 8px;
border-radius: 4px;
font-weight: 700;
}
.menu-content__time {
font-size: 11px;
color: rgba(255,255,255,0.5);
font-family: monospace;
}
.menu-content__title {
font-size: 22px;
font-weight: 800;
margin-bottom: 16px;
color: #fff;
}
.menu-content__items {
display: flex;
flex-direction: column;
gap: 12px;
}
.menu-content__item {
display: flex;
justify-content: space-between;
align-items: flex-start;
border-bottom: 1px solid rgba(255,255,255,0.05);
padding-bottom: 6px;
}
.menu-content__name {
font-size: 14px;
font-weight: 600;
color: #fff;
margin-bottom: 2px;
}
.menu-content__desc {
font-size: 11px;
color: rgba(255,255,255,0.35);
}
.menu-content__price {
font-size: 15px;
font-weight: 700;
color: var(--color-primary);
white-space: nowrap;
}
@keyframes menu-live-pulse {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.4; transform: scale(0.8); }
}
@keyframes menu-slide-fade {
0%, 2% { opacity: 0; transform: translateY(10px); }
5%, 30% { opacity: 1; transform: translateY(0); }
33%, 100%{ opacity: 0; transform: translateY(-10px); }
}
@media (prefers-reduced-motion: reduce) {
.menu-slide { animation: none; }
.menu-slide--mains { opacity: 1; transform: none; }
.menu-live__dot { animation: none; }
}
@media (max-width: 640px) {
.menu-content { padding: 14px 18px; }
.menu-content__title { font-size: 17px; margin-bottom: 10px; }
.menu-content__name { font-size: 12px; }
.menu-content__desc { display: none; }
.menu-content__price { font-size: 13px; }
}

View File

@@ -605,6 +605,9 @@ add_action('init', function () {
'waitingRoomAnim' => ['type' => 'boolean', 'default' => false],
'multiZoneAnim' => ['type' => 'boolean', 'default' => false],
'membershipAnim' => ['type' => 'boolean', 'default' => false],
'videoMotionAnim' => ['type' => 'boolean', 'default' => false],
'brandLayoutAnim' => ['type' => 'boolean', 'default' => false],
'menuBoardAnim' => ['type' => 'boolean', 'default' => false],
'galleryIds' => ['type' => 'array', 'default' => [], 'items' => ['type' => 'number']],
],
'supports' => $block_supports,
@@ -2849,6 +2852,180 @@ function oribi_render_platform_row($a)
$visual_html = $ha;
$visual_cls = 'platform-visual has-hospitality';
}
elseif (!empty($a['videoMotionAnim'])) {
/* ── Video & Motion Graphics: TV with kinetic text, promo, loop preview ── */
$vm = '<div class="vidmo-stage" aria-hidden="true">';
$vm .= '<div class="vidmo-tv">';
$vm .= '<div class="vidmo-tv__body">';
$vm .= '<div class="vidmo-tv__screen">';
$vm .= '<div class="vidmo-slides">';
/* Slide 1: Kinetic typography */
$vm .= '<div class="vidmo-slide vidmo-slide--kinetic">';
$vm .= '<div class="vidmo-kinetic">';
$vm .= '<span class="vidmo-kinetic__word vidmo-kinetic__word--1">Engage</span>';
$vm .= '<span class="vidmo-kinetic__word vidmo-kinetic__word--2">Inform</span>';
$vm .= '<span class="vidmo-kinetic__word vidmo-kinetic__word--3">Convert</span>';
$vm .= '</div>';
$vm .= '</div>';
/* Slide 2: Promo graphic */
$vm .= '<div class="vidmo-slide vidmo-slide--promo">';
$vm .= '<div class="vidmo-promo">';
$vm .= '<div class="vidmo-promo__bg"></div>';
$vm .= '<div class="vidmo-promo__label">Summer Campaign</div>';
$vm .= '<div class="vidmo-promo__title">Your Brand, Animated</div>';
$vm .= '<div class="vidmo-promo__sub">15s promotional loop</div>';
$vm .= '</div>';
$vm .= '</div>';
/* Slide 3: Loop format */
$vm .= '<div class="vidmo-slide vidmo-slide--loop">';
$vm .= '<div class="vidmo-loop">';
$vm .= '<div class="vidmo-loop__icon">&#x25B6;</div>';
$vm .= '<div class="vidmo-loop__text">Screen-Ready Formats</div>';
$vm .= '<div class="vidmo-loop__formats">';
$vm .= '<span class="vidmo-loop__fmt">MP4</span>';
$vm .= '<span class="vidmo-loop__fmt">WEBM</span>';
$vm .= '<span class="vidmo-loop__fmt">GIF</span>';
$vm .= '</div>';
$vm .= '</div>';
$vm .= '</div>';
$vm .= '</div>'; // vidmo-slides
$vm .= '<div class="vidmo-progress"><div class="vidmo-progress__bar"></div></div>';
$vm .= '</div>'; // vidmo-tv__screen
$vm .= '</div>'; // vidmo-tv__body
$vm .= '<div class="vidmo-tv__feet"><div class="vidmo-tv__foot"></div><div class="vidmo-tv__foot"></div></div>';
$vm .= '</div>'; // vidmo-tv
$vm .= '</div>'; // vidmo-stage
$visual_html = $vm;
$visual_cls = 'platform-visual has-video-motion';
}
elseif (!empty($a['brandLayoutAnim'])) {
/* ── Branded Layout Design: template builder with brand guide ── */
$bl = '<div class="blay-stage" aria-hidden="true">';
$bl .= '<div class="blay-editor">';
/* Toolbar */
$bl .= '<div class="blay-toolbar">';
$bl .= '<div class="blay-toolbar__dots">';
$bl .= '<span class="blay-toolbar__dot blay-toolbar__dot--r"></span>';
$bl .= '<span class="blay-toolbar__dot blay-toolbar__dot--y"></span>';
$bl .= '<span class="blay-toolbar__dot blay-toolbar__dot--g"></span>';
$bl .= '</div>';
$bl .= '<div class="blay-toolbar__title">Layout Editor</div>';
$bl .= '</div>';
/* Body: canvas + panel */
$bl .= '<div class="blay-body">';
/* Canvas */
$bl .= '<div class="blay-canvas">';
$bl .= '<div class="blay-preview">';
$bl .= '<div class="blay-el blay-el--logo"></div>';
$bl .= '<div class="blay-el blay-el--hero"></div>';
$bl .= '<div class="blay-el blay-el--headline"></div>';
$bl .= '<div class="blay-el blay-el--body"></div>';
$bl .= '<div class="blay-el blay-el--body2"></div>';
$bl .= '<div class="blay-el blay-el--cta"></div>';
$bl .= '<div class="blay-el blay-el--accent"></div>';
$bl .= '</div>';
$bl .= '</div>';
/* Brand guide panel */
$bl .= '<div class="blay-panel">';
$bl .= '<div class="blay-panel__title">Brand Guide</div>';
$bl .= '<div class="blay-colors">';
$bl .= '<div class="blay-color blay-color--1"></div>';
$bl .= '<div class="blay-color blay-color--2"></div>';
$bl .= '<div class="blay-color blay-color--3"></div>';
$bl .= '<div class="blay-color blay-color--4"></div>';
$bl .= '</div>';
$bl .= '<div class="blay-fonts">';
$bl .= '<div class="blay-font"><span class="blay-font__label">Heading</span><span class="blay-font__sample">Aa</span></div>';
$bl .= '<div class="blay-font"><span class="blay-font__label">Body</span><span class="blay-font__sample blay-font__sample--body">Aa Bb Cc</span></div>';
$bl .= '</div>';
$bl .= '<div class="blay-spacing">';
$bl .= '<div class="blay-spacing__label">Spacing</div>';
$bl .= '<div class="blay-spacing__bars">';
$bl .= '<div class="blay-spacing__bar blay-spacing__bar--sm"></div>';
$bl .= '<div class="blay-spacing__bar blay-spacing__bar--md"></div>';
$bl .= '<div class="blay-spacing__bar blay-spacing__bar--lg"></div>';
$bl .= '<div class="blay-spacing__bar blay-spacing__bar--xl"></div>';
$bl .= '</div>';
$bl .= '</div>';
$bl .= '</div>';
$bl .= '</div>'; // blay-body
$bl .= '</div>'; // blay-editor
$bl .= '</div>'; // blay-stage
$visual_html = $bl;
$visual_cls = 'platform-visual has-brand-layout';
}
elseif (!empty($a['menuBoardAnim'])) {
/* ── Digital Menu Board: TV with rotating menu categories ── */
$mb = '<div class="menu-stage" aria-hidden="true">';
$mb .= '<div class="menu-tv">';
$mb .= '<div class="menu-tv__body">';
$mb .= '<div class="menu-tv__screen">';
/* Live badge */
$mb .= '<div class="menu-live"><span class="menu-live__dot"></span><span class="menu-live__text">LIVE</span></div>';
$mb .= '<div class="menu-slides">';
/* Slide 1: Mains */
$mb .= '<div class="menu-slide menu-slide--mains">';
$mb .= '<div class="menu-content">';
$mb .= '<div class="menu-content__hd"><span class="menu-content__badge">Lunch</span><span class="menu-content__time">11:30 AM</span></div>';
$mb .= '<div class="menu-content__title">Mains</div>';
$mb .= '<div class="menu-content__items">';
$mb .= '<div class="menu-content__item"><div><div class="menu-content__name">Grilled Chicken</div><div class="menu-content__desc">Herb-crusted, seasonal veg</div></div><div class="menu-content__price">$16.50</div></div>';
$mb .= '<div class="menu-content__item"><div><div class="menu-content__name">Wild Salmon</div><div class="menu-content__desc">Pan-seared, lemon butter</div></div><div class="menu-content__price">$22.00</div></div>';
$mb .= '<div class="menu-content__item"><div><div class="menu-content__name">Mushroom Risotto</div><div class="menu-content__desc">Truffle oil, parmesan</div></div><div class="menu-content__price">$14.00</div></div>';
$mb .= '</div>';
$mb .= '</div>';
$mb .= '</div>';
/* Slide 2: Drinks */
$mb .= '<div class="menu-slide menu-slide--drinks">';
$mb .= '<div class="menu-content">';
$mb .= '<div class="menu-content__hd"><span class="menu-content__badge">Drinks</span><span class="menu-content__time">11:30 AM</span></div>';
$mb .= '<div class="menu-content__title">Beverages</div>';
$mb .= '<div class="menu-content__items">';
$mb .= '<div class="menu-content__item"><div><div class="menu-content__name">Flat White</div><div class="menu-content__desc">Double shot, oat option</div></div><div class="menu-content__price">$5.50</div></div>';
$mb .= '<div class="menu-content__item"><div><div class="menu-content__name">Fresh Juice</div><div class="menu-content__desc">Orange, apple or green</div></div><div class="menu-content__price">$7.00</div></div>';
$mb .= '<div class="menu-content__item"><div><div class="menu-content__name">Sparkling Water</div><div class="menu-content__desc">750ml bottle</div></div><div class="menu-content__price">$4.00</div></div>';
$mb .= '</div>';
$mb .= '</div>';
$mb .= '</div>';
/* Slide 3: Desserts */
$mb .= '<div class="menu-slide menu-slide--dessert">';
$mb .= '<div class="menu-content">';
$mb .= '<div class="menu-content__hd"><span class="menu-content__badge">Dessert</span><span class="menu-content__time">11:30 AM</span></div>';
$mb .= '<div class="menu-content__title">Something Sweet</div>';
$mb .= '<div class="menu-content__items">';
$mb .= '<div class="menu-content__item"><div><div class="menu-content__name">Chocolate Fondant</div><div class="menu-content__desc">Molten centre, vanilla ice cream</div></div><div class="menu-content__price">$12.00</div></div>';
$mb .= '<div class="menu-content__item"><div><div class="menu-content__name">Cr&egrave;me Br&ucirc;l&eacute;e</div><div class="menu-content__desc">Classic vanilla, caramelised top</div></div><div class="menu-content__price">$10.00</div></div>';
$mb .= '<div class="menu-content__item"><div><div class="menu-content__name">Seasonal Fruit</div><div class="menu-content__desc">Fresh selection, honey drizzle</div></div><div class="menu-content__price">$8.00</div></div>';
$mb .= '</div>';
$mb .= '</div>';
$mb .= '</div>';
$mb .= '</div>'; // menu-slides
$mb .= '</div>'; // menu-tv__screen
$mb .= '</div>'; // menu-tv__body
$mb .= '<div class="menu-tv__feet"><div class="menu-tv__foot"></div><div class="menu-tv__foot"></div></div>';
$mb .= '</div>'; // menu-tv
$mb .= '</div>'; // menu-stage
$visual_html = $mb;
$visual_cls = 'platform-visual has-menu-board';
}
elseif (!empty($a['cameraAnim'])) {
$visual_html = oribi_render_camera_animation();
$visual_cls = 'platform-visual has-video-editor';