Compare commits

...

2 Commits

Author SHA1 Message Date
Farhan Pathan 3570861081 Revert "Microsite Enhancement- 9-7-2026"
This reverts commit 37f3a39c3e.
2026-07-09 14:30:21 +05:30
Farhan Pathan d601b1a610 Revert "Microsite changes"
This reverts commit 87ed173df8.
2026-07-09 14:29:22 +05:30
7 changed files with 61 additions and 1310 deletions

3
.gitignore vendored
View File

@ -1,3 +0,0 @@
node_modules/
.env
dist/

23
package-lock.json generated
View File

@ -8,10 +8,6 @@
"name": "eventbuzz-web",
"version": "0.0.1",
"dependencies": {
<<<<<<< HEAD
=======
"bootstrap-icons": "^1.13.1",
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
"flatpickr": "^4.6.13",
"react": "^18.3.1",
"react-dom": "^18.3.1",
@ -1279,25 +1275,6 @@
"node": ">=6.0.0"
}
},
<<<<<<< HEAD
=======
"node_modules/bootstrap-icons": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.13.1.tgz",
"integrity": "sha512-ijombt4v6bv5CLeXvRWKy7CuM3TRTuPEuGaGKvTV5cz65rQSY8RQ2JcHt6b90cBBAC7s8fsf2EkQDldzCoXUjw==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/twbs"
},
{
"type": "opencollective",
"url": "https://opencollective.com/bootstrap"
}
],
"license": "MIT"
},
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
"node_modules/browserslist": {
"version": "4.28.4",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.4.tgz",

View File

@ -9,10 +9,6 @@
"preview": "vite preview --port 5175"
},
"dependencies": {
<<<<<<< HEAD
=======
"bootstrap-icons": "^1.13.1",
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
"flatpickr": "^4.6.13",
"react": "^18.3.1",
"react-dom": "^18.3.1",

View File

@ -1,7 +1,7 @@
import { useEffect, useState } from 'react';
import type { AgendaItem, MicrositeSection, MicrositeSpeaker, PublicMicrositePayload } from '../../types';
import { visitorApi } from '../../api/visitor';
import 'bootstrap-icons/font/bootstrap-icons.css';
type Ctx = {
data: PublicMicrositePayload;
eventId: string;
@ -15,27 +15,17 @@ function str(v: unknown, fallback = ''): string {
function HeaderSection({ section, ctx }: { section: MicrositeSection; ctx: Ctx }) {
const c = section.config;
const logoText = str(c.logoText, ctx.data.event.name);
// const logoUrl = str(c.logoUrl, ctx.data.website.logo || ctx.data.event.logoUrl || '');
const logoUrl = str( c.logoUrl || ctx.data.website.logo || ctx.data.event.logoUrl, '');
const logoUrl = str(c.logoUrl, ctx.data.website.logo || ctx.data.event.logoUrl || '');
const menuItems = (Array.isArray(c.menuItems) ? c.menuItems : []) as { label?: string; url?: string }[];
// Temporary console logs for debugging for Logo in Navbar
// console.log("Header config:", c);
// console.log("Website logo:", ctx.data.website.logo);
// console.log("Event logo:", ctx.data.event.logoUrl);
// console.log("Final logoUrl:", logoUrl);
return (
<header className="eb-conference-header fixed-top">
<nav className="navbar navbar-expand-lg navbar-dark">
<div className="container-fluid px-3 px-lg-4" style={{ display: 'flex', flexWrap: 'wrap', alignItems: 'center', justifyContent: 'space-between' }}>
{/* <a className="navbar-brand" href="#hero" style={{ textDecoration: 'none', color: '#fff' }}>
<a className="navbar-brand" href="#hero" style={{ textDecoration: 'none', color: '#fff' }}>
{logoUrl ? <img src={logoUrl} alt={logoText} className="eb-header-logo" /> : <span>{logoText}</span>}
</a> */}
<a className="navbar-brand" href="#hero" style={{ display: 'flex', alignItems: 'center', gap: '12px', textDecoration: 'none', color: '#fff',}}> {logoUrl && ( <img src={logoUrl} alt={logoText} className="eb-header-logo" /> )}
<span>{logoText}</span>
</a>
<ul className="navbar-nav" style={{ display: 'flex',alignItems: 'center', gap: '0.75rem', listStyle: 'none', margin: 0, padding: 0, flexWrap: 'wrap' }}>
<ul className="navbar-nav" style={{ display: 'flex', gap: '0.75rem', listStyle: 'none', margin: 0, padding: 0, flexWrap: 'wrap' }}>
{menuItems.map((item, i) => {
const label = str(item.label);
const url = str(item.url, '#');
@ -173,560 +163,37 @@ function AboutSection({ section }: { section: MicrositeSection }) {
);
}
// function AgendaSection({ section, items }: { section: MicrositeSection; items: AgendaItem[] }) {
// const title = str(section.config.title, 'Schedule');
// const list = items.length ? items : [{ title: 'Session 1', time: '9:00 AM', track: 'Main' }];
// const [expandedIndex, setExpandedIndex] = useState<number | null>(null);
function AgendaSection({ section, items }: { section: MicrositeSection; items: AgendaItem[] }) {
const title = str(section.config.title, 'Schedule');
const list = items.length ? items : [{ title: 'Session 1', time: '9:00 AM', track: 'Main' }];
// return (
// <section id="schedule" className="eb-schedule-section section py-5">
// <div className="container">
// <h2 className="eb-section-heading text-center mb-5">{title}</h2>
// <div
// style={{
// maxWidth: '900px',
// margin: '0 auto',
// background: '#fff',
// borderRadius: '12px',
// overflow: 'hidden',
// boxShadow: '0 1px 3px rgba(0, 0, 0, 0.05)',
// border: '0.5px solid #e2e8f0',
// }}
// >
// {list.map((item, index) => {
// const isExpanded = expandedIndex === index;
// const hasSp = !!str(item.speakerName);
// return (
// <div key={index} style={{ borderBottom: index < list.length - 1 ? '0.5px solid #e2e8f0' : 'none' }}>
// <button
// onClick={() => setExpandedIndex(isExpanded ? null : index)}
// style={{
// width: '100%',
// background: isExpanded ? '#f8fafc' : '#fff',
// border: 'none',
// padding: '1rem 1.5rem',
// textAlign: 'left',
// cursor: 'pointer',
// transition: 'background-color 0.3s, padding 0.3s',
// display: 'flex',
// alignItems: 'center',
// gap: '1rem',
// justifyContent: 'space-between',
// }}
// onMouseEnter={(e) => {
// e.currentTarget.style.backgroundColor = '#f1f5f9';
// }}
// onMouseLeave={(e) => {
// e.currentTarget.style.backgroundColor = isExpanded ? '#f8fafc' : '#fff';
// }}
// >
// <div style={{ display: 'flex', alignItems: 'center', gap: '1rem', flex: 1, minWidth: 0, overflow: 'hidden'}}>
// <span
// style={{
// background: '#0f3072',
// color: '#fff',
// padding: '0.5rem 0.75rem',
// borderRadius: '4px',
// fontSize: '0.8rem',
// fontWeight: 600,
// whiteSpace: 'nowrap',
// flexShrink: 0,
// }}
// >
// {item.time || 'TBA'}
// </span>
// <div style={{ minWidth: 0, flex: 1 }}>
// <div
// style={{
// fontSize: '1rem',
// fontWeight: 700,
// color: '#0f172a',
// margin: '0 0 0.25rem 0',
// overflow: 'hidden',
// textOverflow: 'ellipsis',
// whiteSpace: 'nowrap',
// }}
// >
// {item.title || 'Untitled Session'}
// </div>
// {item.track && (
// <span
// style={{
// background: 'rgba(0, 194, 209, 0.1)',
// color: '#0891b2',
// padding: '0.25rem 0.6rem',
// borderRadius: '3px',
// fontSize: '0.65rem',
// fontWeight: 600,
// textTransform: 'uppercase',
// letterSpacing: '0.3px',
// display: 'inline-block',
// }}
// >
// {item.track}
// </span>
// )}
// </div>
// </div>
// <div
// style={{
// display: 'flex',
// alignItems: 'center',
// justifyContent: 'center',
// width: '26px',
// height: '26px',
// background: isExpanded ? '#e0f2fe' : '#f1f5f9',
// borderRadius: '6px',
// transition: 'all 0.3s',
// color: isExpanded ? '#0891b2' : '#64748b',
// fontWeight: 600,
// fontSize: '1.2rem',
// flexShrink: 0,
// }}
// >
// <i className={`bi ${isExpanded ? 'bi-chevron-up' : 'bi-chevron-down'}`}></i>
// </div>
// </button>
// {isExpanded && (
// <div
// style={{
// background: '#f8fafc',
// padding: '1.5rem',
// borderTop: '1px solid #e2e8f0',
// animation: 'slideDown 0.3s ease-out',
// }}
// >
// {item.description && (
// <div style={{ marginBottom: '1.5rem' }}>
// <h4
// style={{
// fontSize: '0.85rem',
// fontWeight: 600,
// color: '#475569',
// textTransform: 'uppercase',
// letterSpacing: '0.5px',
// marginBottom: '0.75rem',
// margin: 0,
// }}
// >
// Session Details
// </h4>
// <h3
// style={{
// margin: '0.75rem 0 0',
// fontSize: '0.95rem',
// color: '#536885',
// lineHeight: 1.6,
// }}
// >
// {item.title}
// </h3>
// {item.track && (
// <span
// style={{
// background: 'rgba(0, 194, 209, 0.1)',
// color: '#0891b2',
// padding: '0.25rem 0.6rem',
// borderRadius: '3px',
// fontSize: '0.65rem',
// fontWeight: 600,
// textTransform: 'uppercase',
// letterSpacing: '0.3px',
// display: 'inline-block',
// }}
// >
// {item.track}
// </span>
// )}
// <p
// style={{
// margin: '0.75rem 0 0',
// fontSize: '0.95rem',
// color: '#475569',
// lineHeight: 1.6,
// }}
// >
// {item.description}
// </p>
// </div>
// )}
// {hasSp && (
// <div style={{ paddingTop: '1rem', borderTop: '1px solid #e2e8f0' }}>
// <h4
// style={{
// fontSize: '0.85rem',
// fontWeight: 600,
// color: '#475569',
// textTransform: 'uppercase',
// letterSpacing: '0.5px',
// marginBottom: '0.75rem',
// margin: 0,
// }}
// >
// Speaker
// </h4>
// <div style={{ display: 'flex', alignItems: 'center', gap: '1rem', marginTop: '0.75rem' }}>
// {item.speakerPhotoUrl && (
// <img
// src={item.speakerPhotoUrl}
// alt={str(item.speakerName)}
// style={{
// width: '48px',
// height: '48px',
// borderRadius: '50%',
// objectFit: 'cover',
// border: '2px solid #e2e8f0',
// }}
// />
// )}
// <div>
// <div style={{ fontSize: '0.9rem', fontWeight: 600, color: '#0f172a' }}>
// {item.speakerName}
// </div>
// </div>
// </div>
// </div>
// )}
// </div>
// )}
// </div>
// );
// })}
// </div>
// <div className="text-center mt-4">
// <a className="btn btn-primary btn-lg me-2" href="#register">
// Register
// </a>
// <a className="btn btn-outline-secondary btn-lg" href="#hero">
// Back to top
// </a>
// </div>
// </div>
// <style>{`
// @keyframes slideDown {
// from {
// opacity: 0;
// transform: translateY(-10px);
// }
// to {
// opacity: 1;
// transform: translateY(0);
// }
// }
// `}</style>
// </section>
// );
// }
function AgendaSection({
section,
items,
}: {
section: MicrositeSection;
items: AgendaItem[];
}) {
console.log("Items:",items);
const title = str(section.config.title, "Schedule");
const list = items.length
? items
: [{ title: "Session 1", time: "9:00 AM", track: "Main", date: "" }];
// Get unique dates
const dates = [...new Set(list.map((item) => item.date).filter(Boolean))];
// Selected day
const [selectedDate, setSelectedDate] = useState(
dates.length ? dates[0] : ""
);
// Expanded accordion
const [expandedIndex, setExpandedIndex] = useState<number | null>(null);
// Filter sessions according to selected date
const filteredList = list.filter((item) => item.date === selectedDate);
console.log("dates:", dates);
console.log("selectedDate:", selectedDate);
console.log("filteredList:", filteredList);
console.log("list:", list);
return (
<section id="schedule" className="eb-schedule-section section py-5">
<div className="container">
<h2 className="eb-section-heading text-center mb-4">{title}</h2>
{/* Day Selector */}
<div
className="d-flex justify-content-center flex-wrap gap-2 mb-4"
>
{dates.map((date) => (
<button
key={date}
className={`btn ${
selectedDate === date
? "btn-primary"
: "btn-outline-primary"
}`}
style={{ marginRight: "8px" }}
onClick={() => {
setSelectedDate(date);
setExpandedIndex(null);
}}
>
{date}
</button>
))}
</div>
{/* Agenda */}
<div
style={{
maxWidth: "900px",
margin: "0 auto",
background: "#fff",
borderRadius: "12px",
overflow: "hidden",
boxShadow: "0 1px 3px rgba(0,0,0,.05)",
border: "0.5px solid #e2e8f0",
}}
>
{filteredList.map((item, index) => {
const isExpanded = expandedIndex === index;
<h2 className="eb-section-heading text-center mb-5">{title}</h2>
<div className="eb-schedule-list mx-auto" style={{ maxWidth: 820 }}>
{list.map((item, i) => {
const hasSp = !!str(item.speakerName);
return (
<div
key={index}
style={{
borderBottom:
index < filteredList.length - 1
? "0.5px solid #e2e8f0"
: "none",
}}
>
{/* Your existing accordion code */}
<button
onClick={() => setExpandedIndex(isExpanded ? null : index)}
style={{
width: '100%',
background: isExpanded ? '#f8fafc' : '#fff',
border: 'none',
padding: '1rem 1.5rem',
textAlign: 'left',
cursor: 'pointer',
transition: 'background-color 0.3s, padding 0.3s',
display: 'flex',
alignItems: 'center',
gap: '1rem',
justifyContent: 'space-between',
}}
onMouseEnter={(e) => {
e.currentTarget.style.backgroundColor = '#f1f5f9';
}}
onMouseLeave={(e) => {
e.currentTarget.style.backgroundColor = isExpanded ? '#f8fafc' : '#fff';
}}
>
{/* Left: Time and Title */}
<div style={{ display: 'flex', alignItems: 'center', gap: '1rem', flex: 1, minWidth: 0, overflow: 'hidden'}}>
{/* Time Badge */}
<span
style={{
background: '#0f3072',
color: '#fff',
padding: '0.5rem 0.75rem',
borderRadius: '4px',
fontSize: '0.8rem',
fontWeight: 600,
whiteSpace: 'nowrap',
flexShrink: 0,
}}
>
{item.time || 'TBA'}
</span>
{/* Title and Track */}
<div style={{ minWidth: 0, flex: 1 }}>
<div
style={{
fontSize: '1rem',
fontWeight: 700,
color: '#0f172a',
margin: '0 0 0.25rem 0',
overflow: 'hidden',
textOverflow: 'ellipsis',
whiteSpace: 'nowrap',
}}
>
{item.title || 'Untitled Session'}
</div>
{item.track && (
<span
style={{
background: 'rgba(0, 194, 209, 0.1)',
color: '#0891b2',
padding: '0.25rem 0.6rem',
borderRadius: '3px',
fontSize: '0.65rem',
fontWeight: 600,
textTransform: 'uppercase',
letterSpacing: '0.3px',
display: 'inline-block',
}}
>
{item.track}
</span>
)}
</div>
<div key={i} className={`eb-schedule-item py-3 ${hasSp ? 'item-talk' : 'item-other'}`}>
<div className="row align-items-start">
<div className="col-md-3">
<div className="eb-schedule-time">{item.time || ''}</div>
{hasSp && item.speakerPhotoUrl ? (
<img src={item.speakerPhotoUrl} className="rounded-circle mt-2" width={56} height={56} alt="" />
) : null}
{hasSp ? <div className="small text-muted mt-1">{item.speakerName}</div> : null}
</div>
{/* Right: Expand/Collapse Icon */}
<div
style={{
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
width: '26px',
height: '26px',
background: isExpanded ? '#e0f2fe' : '#f1f5f9',
borderRadius: '6px',
transition: 'all 0.3s',
color: isExpanded ? '#0891b2' : '#64748b',
fontWeight: 600,
fontSize: '1.2rem',
flexShrink: 0,
}}
>
{/* {isExpanded ? '−' : '+'} */}
<i className={`bi ${isExpanded ? 'bi-chevron-up' : 'bi-chevron-down'}`}></i>
<div className="col-md-9">
<h3 className="eb-schedule-title h5">{item.title || ''}</h3>
{item.track ? <div className="eb-schedule-track text-muted mb-2">{item.track}</div> : null}
{item.description ? <p className="mb-0 text-muted small">{item.description}</p> : null}
</div>
</button>
{/* Accordion Body/Content */}
{isExpanded && (
<div
style={{
background: '#f8fafc',
padding: '1.5rem',
borderTop: '1px solid #e2e8f0',
animation: 'slideDown 0.3s ease-out',
}}
>
{/* Description/ Session Details*/}
{item.description && (
<div style={{ marginBottom: '1.5rem' }}>
<h4
style={{
fontSize: '0.85rem',
fontWeight: 600,
color: '#475569',
textTransform: 'uppercase',
letterSpacing: '0.5px',
marginBottom: '0.75rem',
margin: 0,
}}
>
Session Details
</h4>
<h3
style={{
margin: '0.75rem 0 0',
fontSize: '0.95rem',
color: '#536885',
lineHeight: 1.6,
}}
>
{item.title}
</h3>
{item.track && (
<span
style={{
background: 'rgba(0, 194, 209, 0.1)',
color: '#0891b2',
padding: '0.25rem 0.6rem',
borderRadius: '3px',
fontSize: '0.65rem',
fontWeight: 600,
textTransform: 'uppercase',
letterSpacing: '0.3px',
display: 'inline-block',
}}
>
{item.track}
</span>
)}
<p
style={{
margin: '0.75rem 0 0',
fontSize: '0.95rem',
color: '#475569',
lineHeight: 1.6,
}}
>
{item.description}
</p>
</div>
)}
{/* Speaker Info */}
{hasSp && (
<div style={{ paddingTop: '1rem', borderTop: '1px solid #e2e8f0' }}>
<h4
style={{
fontSize: '0.85rem',
fontWeight: 600,
color: '#475569',
textTransform: 'uppercase',
letterSpacing: '0.5px',
marginBottom: '0.75rem',
margin: 0,
}}
>
Speaker
</h4>
<div style={{ display: 'flex', alignItems: 'center', gap: '1rem', marginTop: '0.75rem' }}>
{item.speakerPhotoUrl && (
<img
src={item.speakerPhotoUrl}
alt={str(item.speakerName)}
style={{
width: '48px',
height: '48px',
borderRadius: '50%',
objectFit: 'cover',
border: '2px solid #e2e8f0',
}}
/>
)}
<div>
<div style={{ fontSize: '0.9rem', fontWeight: 600, color: '#0f172a' }}>
{item.speakerName}
</div>
</div>
</div>
</div>
)}
</div>
)}
</div>
</div>
);
})}
</div>
{/* Action Buttons */}
<div className="text-center mt-4">
<a className="btn btn-primary btn-lg me-2" href="#register">
Register
@ -736,20 +203,6 @@ console.log("list:", list);
</a>
</div>
</div>
<style>{`
@keyframes slideDown {
from {
opacity: 0;
transform: translateY(-10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
`}</style>
</section>
);
}
@ -907,7 +360,7 @@ function FooterSection({ section, ctx }: { section: MicrositeSection; ctx: Ctx }
return (
<footer id="footer" className="py-4 mt-5" style={{ background: 'var(--eb-conf-footer-bg)', color: '#fff' }}>
<div className="container" style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '1rem', textAlign: 'center' }}>
<div className="container" style={{ display: 'flex', flexWrap: 'wrap', justifyContent: 'space-between', gap: '1rem' }}>
<span style={{ opacity: 0.85 }}>{copyrightText}</span>
<div>
{links.map((link, i) => (
@ -924,7 +377,7 @@ function FooterSection({ section, ctx }: { section: MicrositeSection; ctx: Ctx }
function SponsorsSection({ section }: { section: MicrositeSection }) {
const c = section.config;
const title = str(c.title, 'Sponsors');
const sponsors = (Array.isArray(c.sponsors) ? c.sponsors : []) as Array<{ name?: string; logoUrl?: string; url?: string } | { name: string }>;
const sponsors = (Array.isArray(c.sponsors) ? c.sponsors : []) as { name?: string; logoUrl?: string; url?: string }[];
const cells =
sponsors.length > 0
? sponsors
@ -935,21 +388,43 @@ function SponsorsSection({ section }: { section: MicrositeSection }) {
<div className="container">
<h2 className="eb-section-heading text-center mb-5">{title}</h2>
<div className="row g-3 justify-content-center">
{cells.map((s, i) => {
const sponsor = s as any;
const url = str(sponsor.url, '#');
const logoUrl = sponsor.logoUrl ? str(sponsor.logoUrl) : null;
const name = str(sponsor.name);
return (
<div key={i} className="col-6 col-md-4 col-lg-2 text-center">
<a href={url} style={{ textDecoration: 'none', color: '#475569' }}>
{logoUrl ? <img src={logoUrl} alt={name} style={{ maxHeight: 48 }} className="img-fluid" /> : name}
</a>
</div>
);
})}
)
{cells.map((s, i) => (
<div key={i} className="col-6 col-md-4 col-lg-2 text-center">
<a href={str(s.url, '#')} style={{ textDecoration: 'none', color: '#475569' }}>
{s.logoUrl ? <img src={s.logoUrl} alt={str(s.name)} style={{ maxHeight: 48 }} className="img-fluid" /> : str(s.name)}
</a>
</div>
))}
</div>
</div>
</section>
);
}
function CtaSection({ section, ctx }: { section: MicrositeSection; ctx: Ctx }) {
const c = section.config;
const headline = str(c.headline, 'Join us');
const subtext = str(c.subtext);
const buttonLabel = str(c.buttonLabel, 'Register');
const buttonUrl = str(c.buttonUrl, ctx.registrationUrl);
return (
<section id="cta" className="py-5 text-white text-center" style={{ background: 'var(--eb-conf-primary)' }}>
<div className="container">
<h2 className="eb-section-heading text-white mb-3">{headline}</h2>
{subtext ? <p className="lead mb-4">{subtext}</p> : null}
<a className="btn btn-light btn-lg" href={buttonUrl}>
{buttonLabel}
</a>
</div>
</section>
);
}
function VenueSection({ section }: { section: MicrositeSection }) {
const c = section.config;
const title = str(c.title, 'Venue');
const body = str(c.body);
const mapEmbedUrl = str(c.mapEmbedUrl);
return (

View File

@ -4,60 +4,21 @@
box-sizing: border-box;
}
<<<<<<< HEAD
body {
margin: 0;
font-family: var(--eb-conf-body-font, system-ui, sans-serif);
color: #0f172a;
background: #f8fafc;
=======
:root {
--transition-smooth: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
--shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07), 0 2px 4px rgba(0, 0, 0, 0.05);
--shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.05);
--shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1), 0 10px 10px rgba(0, 0, 0, 0.04);
}
html {
scroll-behavior: smooth;
}
body {
margin: 0;
font-family: var(--eb-conf-body-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif);
color: #0f172a;
background: #ffffff;
line-height: 1.6;
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
}
.eb-microsite-root {
min-height: 100vh;
background: #fff;
<<<<<<< HEAD
}
.eb-conference-header {
background: var(--eb-conf-nav-bg);
padding-top: 0.5rem;
=======
overflow-x: hidden;
}
/* =====================
HEADER & NAVIGATION
===================== */
.eb-conference-header {
background: var(--eb-conf-nav-bg);
padding: 0.75rem 0;
position: sticky;
top: 0;
z-index: 1000;
box-shadow: var(--shadow-md);
transition: box-shadow var(--transition-smooth);
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
}
.eb-conference-header .navbar {
@ -68,64 +29,24 @@ body {
color: #fff !important;
font-family: var(--eb-conf-heading-font);
font-weight: 700;
<<<<<<< HEAD
=======
font-size: 1.25rem;
transition: opacity var(--transition-smooth);
}
.eb-conference-header .navbar-brand:hover {
opacity: 0.85;
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
}
.eb-conference-header .nav-link {
color: rgba(255, 255, 255, 0.9) !important;
<<<<<<< HEAD
=======
transition: color var(--transition-smooth);
font-weight: 500;
letter-spacing: 0.3px;
}
.eb-conference-header .nav-link:hover {
color: #fff !important;
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
}
.eb-header-logo {
max-height: 40px;
width: auto;
<<<<<<< HEAD
}
.eb-hero-block {
min-height: 420px;
=======
transition: transform var(--transition-smooth);
}
.eb-header-logo:hover {
transform: scale(1.05);
}
/* =====================
HERO SECTION
===================== */
.eb-hero-block {
min-height: 500px;
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
display: flex;
align-items: center;
justify-content: center;
padding: 6rem 1rem 4rem;
background: var(--eb-conf-hero-gradient);
<<<<<<< HEAD
=======
position: relative;
overflow: hidden;
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
}
.eb-hero-bg {
@ -133,10 +54,6 @@ body {
inset: 0;
background-size: cover;
background-position: center;
<<<<<<< HEAD
=======
z-index: 1;
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
}
.eb-hero-has-image .eb-hero-bg {
@ -146,40 +63,17 @@ body {
.eb-hero-mask {
position: absolute;
inset: 0;
<<<<<<< HEAD
background: linear-gradient(180deg, rgba(0, 0, 0, 0.35) 0%, rgba(0, 0, 0, 0.55) 100%);
=======
background: linear-gradient(135deg, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.5) 100%);
z-index: 2;
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
}
.eb-hero-inner {
position: relative;
<<<<<<< HEAD
z-index: 1;
max-width: 820px;
=======
z-index: 3;
max-width: 820px;
animation: fadeInUp 0.8s ease-out;
}
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
}
.eb-hero-heading {
font-family: var(--eb-conf-heading-font);
<<<<<<< HEAD
font-size: clamp(2rem, 5vw, 3rem);
font-weight: 800;
line-height: 1.15;
@ -191,41 +85,16 @@ body {
max-width: 640px;
margin-left: auto;
margin-right: auto;
=======
font-size: clamp(2.25rem, 6vw, 3.5rem);
font-weight: 800;
line-height: 1.15;
color: #fff;
margin: 0 0 1.5rem;
letter-spacing: -0.02em;
text-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
}
.eb-hero-intro {
font-size: 1.25rem;
color: rgba(255, 255, 255, 0.95);
max-width: 640px;
margin: 0 auto 2rem;
line-height: 1.6;
text-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
font-style: italic;
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
}
.eb-hero-meta {
font-size: 0.95rem;
<<<<<<< HEAD
opacity: 0.9;
=======
color: rgba(255, 255, 255, 0.9);
margin-bottom: 2rem;
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
}
.eb-hero-cta {
display: flex;
flex-wrap: wrap;
<<<<<<< HEAD
gap: 0.75rem;
justify-content: center;
}
@ -248,190 +117,35 @@ body {
.eb-countdown-heading {
letter-spacing: 0.08em;
opacity: 0.85;
=======
gap: 1rem;
justify-content: center;
}
/* =====================
SECTIONS & LAYOUT
===================== */
.section {
padding: 4rem 1rem;
transition: background-color var(--transition-smooth);
}
.eb-section-heading {
font-family: var(--eb-conf-heading-font);
font-weight: 700;
font-size: clamp(1.5rem, 4vw, 2.5rem);
color: var(--eb-conf-primary-dark);
margin: 0 0 1rem;
letter-spacing: -0.01em;
}
.eb-section-heading::after {
content: '';
display: block;
width: 60px;
height: 4px;
background: linear-gradient(90deg, var(--eb-conf-accent) 0%, var(--eb-conf-primary) 100%);
margin: 1rem auto 0;
border-radius: 2px;
}
.eb-section-light {
background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
}
.eb-static-stats {
background: linear-gradient(135deg, var(--eb-conf-primary-dark) 0%, var(--eb-conf-primary) 100%);
color: #fff;
position: relative;
overflow: hidden;
}
.eb-countdown-heading {
letter-spacing: 0.1em;
opacity: 0.85;
font-weight: 600;
text-transform: uppercase;
font-size: 0.875rem;
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
}
.eb-countdown-phrase {
font-family: var(--eb-conf-heading-font);
<<<<<<< HEAD
font-size: clamp(1.25rem, 3vw, 1.75rem);
font-weight: 700;
}
.eb-schedule-section {
background: #f8fafc;
=======
font-size: clamp(1.5rem, 4vw, 2rem);
font-weight: 700;
margin: 0.5rem 0 0;
}
/* =====================
SCHEDULE SECTION
===================== */
.eb-schedule-section {
background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
}
/* New horizontal card layout */
.eb-schedule-horizontal {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1.5rem;
margin-bottom: 2rem;
}
.eb-schedule-event-card {
background: #fff;
border-radius: 8px;
border: 0.5px solid #e2e8f0;
padding: 1.25rem;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
display: flex;
flex-direction: column;
gap: 0.75rem;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.03);
cursor: pointer;
}
.eb-schedule-event-card:hover {
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.08);
transform: translateY(-4px);
border-color: #cbd5e1;
}
/* Old list layout - kept for backward compatibility */
.eb-schedule-list {
background: #fff;
border-radius: 12px;
overflow: hidden;
box-shadow: var(--shadow-lg);
}
.eb-schedule-item {
padding: 1.5rem !important;
border-bottom: 0.5px solid #e2e8f0;
transition: background-color var(--transition-smooth), transform var(--transition-smooth);
}
.eb-schedule-item:last-child {
border-bottom: none;
}
.eb-schedule-item:hover {
background-color: #f8fafc;
transform: translateX(4px);
}
.eb-schedule-item.item-talk {
border-left: 3px solid var(--eb-conf-accent);
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
}
.eb-schedule-time {
font-weight: 700;
<<<<<<< HEAD
color: var(--eb-conf-primary);
font-size: 0.95rem;
=======
color: var(--eb-conf-accent);
font-size: 1.125rem;
letter-spacing: 0.3px;
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
}
.eb-schedule-title {
font-family: var(--eb-conf-heading-font);
color: #0f172a;
<<<<<<< HEAD
}
.eb-schedule-item {
border-bottom: 1px solid #e2e8f0;
=======
font-size: 1.125rem;
margin: 0.5rem 0;
}
.eb-schedule-track {
font-size: 0.85rem;
color: var(--eb-conf-primary);
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
}
/* Responsive schedule */
@media (max-width: 768px) {
.eb-schedule-horizontal {
grid-template-columns: 1fr;
gap: 1rem;
}
}
/* =====================
SPEAKERS SECTION
===================== */
.eb-speakers-section {
background: #fff;
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
}
.eb-speakers-section .card {
border: none;
<<<<<<< HEAD
box-shadow: 0 2px 12px var(--eb-conf-card-glow);
}
@ -458,209 +172,6 @@ body {
color: #0f172a !important;
}
=======
border-radius: 12px;
overflow: hidden;
box-shadow: var(--shadow-md);
transition: all var(--transition-smooth);
height: 100%;
}
.eb-speakers-section .card:hover {
box-shadow: var(--shadow-xl);
transform: translateY(-8px);
}
.eb-speakers-section .card-img-top {
width: 100%;
height: 240px;
object-fit: cover;
transition: transform var(--transition-smooth);
}
.eb-speakers-section .card:hover .card-img-top {
transform: scale(1.05);
}
.eb-speakers-section .card-body {
padding: 1.25rem;
}
.eb-speakers-section .card-title {
font-family: var(--eb-conf-heading-font);
font-size: 1.125rem;
font-weight: 700;
margin-bottom: 0.5rem;
color: #0f172a;
}
.eb-speakers-section .card-text {
color: #64748b;
font-size: 0.95rem;
}
/* =====================
SPONSORS SECTION
===================== */
.eb-static-sponsors {
background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
}
.eb-static-sponsors .row {
gap: 2rem;
}
.eb-static-sponsors a {
display: flex;
align-items: center;
justify-content: center;
padding: 1.5rem;
background: #fff;
border-radius: 8px;
transition: all var(--transition-smooth);
box-shadow: var(--shadow-sm);
text-decoration: none;
color: #475569;
}
.eb-static-sponsors a:hover {
box-shadow: var(--shadow-md);
transform: translateY(-4px);
background: linear-gradient(135deg, #fff 0%, #f8fafc 100%);
}
.eb-static-sponsors img {
max-height: 48px;
width: auto;
transition: filter var(--transition-smooth);
}
.eb-static-sponsors a:hover img {
filter: brightness(0.95);
}
/* =====================
BUTTONS
===================== */
.btn {
display: inline-block;
padding: 0.75rem 1.5rem;
border-radius: 8px;
border: 1px solid transparent;
font-weight: 600;
text-decoration: none;
cursor: pointer;
font-size: 1rem;
line-height: 1.5;
transition: all var(--transition-smooth);
letter-spacing: 0.3px;
text-transform: uppercase;
font-size: 0.95rem;
}
.btn-primary {
background: linear-gradient(135deg, var(--eb-conf-accent) 0%, var(--eb-conf-primary) 100%);
border-color: var(--eb-conf-accent) !important;
color: var(--eb-conf-accent-foreground) !important;
box-shadow: var(--shadow-md);
}
.btn-primary:hover {
background: linear-gradient(135deg, var(--eb-conf-accent-hover) 0%, var(--eb-conf-primary) 100%);
border-color: var(--eb-conf-accent-hover) !important;
box-shadow: var(--shadow-lg);
transform: translateY(-2px);
}
.btn-primary:active {
transform: translateY(0);
box-shadow: var(--shadow-md);
}
.btn-lg {
padding: 0.875rem 2rem;
font-size: 1.0625rem;
}
.btn-outline-secondary {
background: transparent;
border-color: #94a3b8;
color: #475569;
}
.btn-outline-secondary:hover {
background: #f1f5f9;
border-color: #475569;
color: #0f172a;
}
.btn-outline-light {
background: transparent;
border: 1px solid rgba(255, 255, 255, 0.8);
color: #fff;
}
.btn-outline-light:hover {
background: rgba(255, 255, 255, 0.1);
border-color: #fff;
color: #fff;
}
/* =====================
FORMS
===================== */
.form-label {
display: block;
margin-bottom: 0.5rem;
font-weight: 600;
font-size: 0.875rem;
color: #0f172a;
letter-spacing: 0.2px;
}
.form-control {
width: 100%;
padding: 0.75rem 1rem;
border: 2px solid #e2e8f0;
border-radius: 8px;
font-size: 1rem;
background: #fff;
color: #0f172a;
transition: all var(--transition-smooth);
font-family: inherit;
}
.form-control:focus {
outline: none;
border-color: var(--eb-conf-accent);
box-shadow: 0 0 0 3px rgba(0, 194, 209, 0.1);
background: #fff;
}
.form-control::placeholder {
color: #94a3b8;
}
textarea.form-control {
resize: vertical;
min-height: 120px;
}
.form-error {
color: #dc2626;
font-size: 0.875rem;
font-weight: 500;
margin-top: 0.25rem;
}
/* =====================
UTILITIES
===================== */
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
.container {
width: 100%;
max-width: 1140px;
@ -673,7 +184,6 @@ textarea.form-control {
padding: 0 1rem;
}
<<<<<<< HEAD
@media (min-width: 992px) {
.px-lg-4 {
padding-left: 1.5rem !important;
@ -698,8 +208,6 @@ textarea.form-control {
margin-bottom: 3rem;
}
=======
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
.row {
display: flex;
flex-wrap: wrap;
@ -710,16 +218,9 @@ textarea.form-control {
.col-md-3,
.col-md-4,
.col-md-9,
<<<<<<< HEAD
.col-md-3,
.col-lg-3 {
padding: 0 0.75rem;
=======
.col-lg-2,
.col-lg-3 {
padding: 0 0.75rem;
margin-bottom: 1.5rem;
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
}
.col-6 {
@ -743,20 +244,12 @@ textarea.form-control {
}
@media (min-width: 992px) {
<<<<<<< HEAD
=======
.col-lg-2 {
flex: 0 0 16.667%;
max-width: 16.667%;
}
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
.col-lg-3 {
flex: 0 0 25%;
max-width: 25%;
}
}
<<<<<<< HEAD
.card {
background: #fff;
border-radius: 0;
@ -831,8 +324,6 @@ textarea.form-control {
resize: vertical;
}
=======
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
.g-3 > * {
margin-bottom: 1rem;
}
@ -842,197 +333,22 @@ textarea.form-control {
margin-right: auto;
}
<<<<<<< HEAD
.small {
font-size: 0.875rem;
=======
.mt-4 {
margin-top: 1.5rem;
}
.me-2 {
margin-right: 0.5rem;
}
.ms-2 {
margin-left: 0.5rem;
}
.mb-4 {
margin-bottom: 1.5rem;
}
.mb-5 {
margin-bottom: 3rem;
}
.py-3 {
padding-top: 0.75rem;
padding-bottom: 0.75rem;
}
.py-4 {
padding-top: 1rem;
padding-bottom: 1rem;
}
.py-5 {
padding-top: 3rem;
padding-bottom: 3rem;
}
.px-lg-4 {
padding-left: 1.5rem !important;
padding-right: 1.5rem !important;
}
.text-center {
text-align: center;
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
}
.text-muted {
color: #64748b !important;
}
<<<<<<< HEAD
=======
.small {
font-size: 0.875rem;
}
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
.rounded-circle {
border-radius: 50%;
}
<<<<<<< HEAD
=======
.h-100 {
height: 100%;
}
.shadow-sm {
box-shadow: var(--shadow-sm);
}
.img-fluid {
max-width: 100%;
height: auto;
display: block;
}
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
.align-items-start {
align-items: flex-start;
}
<<<<<<< HEAD
.custom-section :first-child {
margin-top: 0;
}
=======
.align-items-center {
align-items: center;
}
.justify-content-center {
justify-content: center;
}
.card {
background: #fff;
border-radius: 12px;
overflow: hidden;
border: none;
}
.card-img-top {
width: 100%;
aspect-ratio: 4/3;
object-fit: cover;
display: block;
}
.card-body {
padding: 1.25rem;
}
.card-title {
margin: 0 0 0.5rem;
font-size: 1rem;
font-weight: 600;
}
.card-text {
margin: 0;
color: #64748b;
}
/* =====================
FOOTER
===================== */
.eb-static-footer {
background: linear-gradient(135deg, var(--eb-conf-footer-bg) 0%, rgba(0, 0, 0, 0.8) 100%);
color: rgba(255, 255, 255, 0.85);
padding: 2rem 0;
font-size: 0.875rem;
text-align: center;
border-top: 1px solid rgba(255, 255, 255, 0.1);
}
.eb-static-footer strong {
color: #fff;
font-weight: 700;
}
/* =====================
CUSTOM SECTION
===================== */
.custom-section :first-child {
margin-top: 0;
}
.eb-section-contact {
background: linear-gradient(135deg, #fff 0%, #f8fafc 100%);
}
/* =====================
RESPONSIVE
===================== */
@media (max-width: 767px) {
.section {
padding: 3rem 1rem;
}
.eb-hero-block {
min-height: 400px;
padding: 4rem 1rem 3rem;
}
.eb-hero-cta {
gap: 0.5rem;
}
.btn-lg {
width: 100%;
}
.row {
margin: 0 -0.5rem;
}
.col-6,
.col-md-3,
.col-md-4,
.col-md-9,
.col-lg-2,
.col-lg-3 {
padding: 0 0.5rem;
margin-bottom: 1rem;
}
}
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)

View File

@ -58,7 +58,6 @@ export interface MicrositeSpeaker {
export interface AgendaItem {
title?: string;
date?: string;
time?: string;
track?: string;
description?: string;

View File

@ -1,9 +1,5 @@
{
"compilerOptions": {
<<<<<<< HEAD
=======
"ignoreDeprecations": "6.0",
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
@ -17,13 +13,8 @@
"noEmit": true,
"jsx": "react-jsx",
"strict": true,
<<<<<<< HEAD
"noUnusedLocals": true,
"noUnusedParameters": true,
=======
"noUnusedLocals": false,
"noUnusedParameters": false,
>>>>>>> f6fbf96 (Microsite Enhancement- 9-7-2026)
"noFallthroughCasesInSwitch": true,
"baseUrl": ".",
"paths": {