/* ZoukDreams Schedule — frontend.
   Everything is driven by CSS variables set per schedule,
   so three events can look completely different.

   THEME ARMOUR: site themes love to restyle <button> (background,
   pill radius, grey text, big line-heights). Every interactive
   element here is first reset with all:unset, then fully and
   explicitly re-declared — the theme can no longer leak through. */

/* House display font — bundled with the plugin, no external request. */
@font-face{
	font-family:'Michael';
	src:url('fonts/michael.woff') format('woff');
	font-weight:400 700;font-style:normal;font-display:swap;
}

.fpg{
	font-family:var(--fpg-body, serif);
	background:radial-gradient(1200px 800px at 50% -10%, var(--fpg-bg1), var(--fpg-bg2) 70%);
	color:var(--fpg-cream);
	padding:26px 18px 44px;
	border-radius:6px;
	line-height:1.4;
}
.fpg *,.fpg *::before,.fpg *::after{box-sizing:border-box}

/* Full-width bleed: escape the page's narrow content column and stretch
   edge to edge on any screen — ultra-wide curved monitors included.
   The CSS gets it pixel-close; frontend.js then pins it exactly
   (scrollbar-safe) and keeps it pinned on resize. */
.fpg.fpg-bleed{
	width:100vw;max-width:100vw;
	margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);
	border-radius:0;
	padding-left:max(18px, 2.5vw);padding-right:max(18px, 2.5vw);
}

/* Atmospheric glow: soft light blooms derived from the palette
   (accent top-right, brand tint low-left) over the base gradient. */
.fpg.fpg-bg-glow{
	background:
		radial-gradient(920px 460px at 88% -6%, var(--fpg-glow1), rgba(0,0,0,0) 62%),
		radial-gradient(820px 640px at 3% 26%, var(--fpg-glow2), rgba(0,0,0,0) 56%),
		radial-gradient(1000px 620px at 55% 112%, var(--fpg-glow1), rgba(0,0,0,0) 64%),
		radial-gradient(1200px 800px at 50% -10%, var(--fpg-bg1), var(--fpg-bg2) 70%);
}

/* Photo backdrop: the bundled castle banner with a configurable dark veil
   (--fpg-bgo, 0–0.9) so boxes stay readable on top of the artwork. */
.fpg.fpg-bg-photo{
	background-image:
		linear-gradient(rgba(20,10,30,var(--fpg-bgo,0.6)),rgba(20,10,30,var(--fpg-bgo,0.6))),
		var(--fpg-bgphoto)!important;
	background-size:cover!important;
	background-position:center!important;
}


/* hard reset for every button inside the widget */
.fpg button{
	all:unset;
	box-sizing:border-box;
	cursor:pointer;
	font-family:inherit;
	-webkit-appearance:none;
	appearance:none;
}
.fpg button::-moz-focus-inner{border:0;padding:0}

/* ---------- festival header / footer lines ---------- */
.fpg-festhead,.fpg-festfoot{
	display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:6px 14px;
	font-family:var(--fpg-head);font-size:10px;letter-spacing:.26em;color:var(--fpg-goldb);
	text-transform:uppercase;line-height:1.6;
}
.fpg-festhead{border-bottom:1px solid var(--fpg-line1);padding-bottom:9px;margin-bottom:15px}
.fpg-festfoot{border-top:1px solid var(--fpg-line1);padding-top:9px;margin-top:15px}

/* ---------- day navigation (tabs layout) ---------- */
.fpg-daynav{display:flex;align-items:center;justify-content:center;gap:14px;margin-bottom:14px}
.fpg .fpg-nav{
	display:inline-flex!important;align-items:center;justify-content:center;
	width:36px;height:36px;min-width:36px;min-height:36px;padding:0!important;margin:0!important;
	border-radius:50%!important;border:none!important;
	background:var(--fpg-navbg)!important;color:var(--fpg-navc)!important;
	font-family:var(--fpg-head)!important;font-size:18px!important;font-weight:600;
	line-height:1!important;text-align:center;
	box-shadow:0 2px 8px rgba(0,0,0,.25);
	transition:transform .2s ease,filter .2s ease;
}
.fpg .fpg-nav:hover{transform:scale(1.08);filter:brightness(1.15)}
.fpg-daytitle{
	background:var(--fpg-cream);color:var(--fpg-ink);
	font-family:var(--fpg-head);font-weight:var(--fpg-w-head);font-size:calc(var(--fpg-s-day) * .92);
	letter-spacing:calc(.14em + var(--fpg-ls-head));text-align:center;padding:10px 24px;min-width:min(460px,68vw);
	text-transform:uppercase;box-shadow:0 6px 24px rgba(0,0,0,.25);line-height:1.2;
	border-radius:calc(var(--fpg-radius) * .5);
}

/* ---------- scroller ---------- */
.fpg-scroller{overflow-x:auto;-webkit-overflow-scrolling:touch}
.fpg-inner{min-width:var(--fpg-minw)}

/* ---------- venue header row ---------- */
.fpg-venues{display:grid;column-gap:var(--fpg-colgap);margin-bottom:6px;position:sticky;top:0;z-index:8}
.fpg-venues.fpg-venues-st{position:static}
.fpg-vcell{
	background:var(--fpg-vhead);color:var(--fpg-cream);
	font-family:var(--fpg-head);font-size:calc(var(--fpg-s-vcell) * 1.12);letter-spacing:.18em;
	text-align:center;padding:8px 6px;text-transform:uppercase;line-height:1.3;
	border:1px solid var(--fpg-line1);border-radius:calc(var(--fpg-radius) * .5);
}

/* ---------- day bar (stacked layout) ---------- */
.fpg-daybar{
	background:var(--fpg-daybar);color:var(--fpg-daybart);
	font-family:var(--fpg-head);font-weight:var(--fpg-w-head);font-size:var(--fpg-s-day);
	letter-spacing:calc(.16em + var(--fpg-ls-head));text-align:center;text-transform:uppercase;
	padding:12px 20px;margin:30px 0 8px;line-height:1.25;
	border-radius:calc(var(--fpg-radius) * .5);
	box-shadow:0 4px 16px rgba(0,0,0,.28);
}
.fpg-day:first-child .fpg-daybar{margin-top:4px}

/* ---------- category legend ---------- */
.fpg-legend{display:flex;flex-wrap:wrap;gap:8px 22px;justify-content:center;margin:0 0 16px}
.fpg-lchip{
	display:inline-flex;align-items:center;gap:9px;
	font-size:calc(var(--fpg-s-time) * 1.05);color:var(--fpg-cream);
	letter-spacing:.07em;line-height:1.2}
.fpg-lchip i{width:12px;height:12px;border-radius:50%;display:inline-block;flex:0 0 auto}

/* ---------- days ---------- */
.fpg-day{display:none}
.fpg-day.is-active{display:block}
.fpg-empty{
	display:flex;align-items:center;justify-content:center;min-height:220px;
	font-family:var(--fpg-head);letter-spacing:.22em;font-size:15px;color:var(--fpg-cream);opacity:.55;
	text-transform:uppercase;border:1px dashed var(--fpg-line1);margin-top:8px}

/* ---------- the grid body ---------- */
.fpg-body{display:grid;position:relative;column-gap:var(--fpg-colgap)}

/* hour + half-hour lines, only in the venue area */
.fpg-lines{
	grid-area:1/1/-1/-1;z-index:0;position:relative;
	margin-left:calc(var(--fpg-gutter) + var(--fpg-colgap));
	background:
		repeating-linear-gradient(to bottom, var(--fpg-line1) 0 1px, transparent 1px calc(var(--fpg-rowh) * 2)),
		repeating-linear-gradient(to bottom, var(--fpg-line2) 0 1px, transparent 1px var(--fpg-rowh));
	pointer-events:none}

/* time labels */
.fpg-time{
	align-self:start;padding-top:2px;position:relative;z-index:0;
	font-family:var(--fpg-timef);
	font-size:var(--fpg-s-time);color:var(--fpg-cream);opacity:.75;
	letter-spacing:calc(.05em + var(--fpg-ls-time));font-weight:var(--fpg-w-time);line-height:1}

/* ---------- event boxes ---------- */
.fpg .fpg-ev{
	text-transform:none!important;
	position:relative;z-index:2;box-sizing:border-box;
	display:flex;flex-direction:column;justify-content:center;
	margin:var(--fpg-gap) 0!important;padding:6px 14px!important;
	border:none!important;border-radius:var(--fpg-radius)!important;
	background:var(--fpg-cream)!important;color:var(--fpg-ink)!important;
	font-family:var(--fpg-body)!important;text-align:left;
	overflow:hidden;
	box-shadow:0 2px 10px rgba(0,0,0,.18);
	transition:transform .22s ease, box-shadow .22s ease, filter .22s ease}
button.fpg-ev{cursor:pointer}
.fpg .fpg-ev:hover,.fpg .fpg-ev:focus-visible{
	transform:translateY(-3px);box-shadow:0 12px 28px rgba(0,0,0,.4);
	filter:brightness(1.045);z-index:6;outline:none}

.fpg .fpg-type-white{background:var(--fpg-creamb)!important}
.fpg .fpg-type-cream{background:var(--fpg-cream)!important}
.fpg .fpg-type-peach{background:var(--fpg-peach)!important}

/* category accent bar on boxes — colour arrives via the --fpg-catc variable.
   Must out-rank the .fpg .fpg-ev{border:none!important} armour above:
   higher specificity (three classes) AND later in the file. */
.fpg .fpg-ev.fpg-cat{
	border-left:6px solid var(--fpg-catc, transparent)!important;
	padding-left:9px!important;
	border-top-left-radius:calc(var(--fpg-radius) * .6)!important;
	border-bottom-left-radius:calc(var(--fpg-radius) * .6)!important;
}

/* full-width bars — behind boxes (z-index 1) */
.fpg .fpg-type-meal{
	z-index:1;cursor:default;
	background:var(--fpg-gold)!important;color:var(--fpg-mealt, var(--fpg-creamb))!important;
	align-items:center;text-align:center;
	box-shadow:none;padding:0 12px!important}
.fpg .fpg-type-meal .fpg-t{
	font-family:var(--fpg-head);letter-spacing:.28em;
	font-size:calc(var(--fpg-s-title) * .82);text-transform:uppercase;-webkit-line-clamp:1}
.fpg .fpg-type-meal:hover{transform:none;box-shadow:none;filter:none}
.fpg .fpg-type-bar{
	z-index:1;
	background:linear-gradient(165deg,
		color-mix(in srgb, var(--fpg-goldd) 88%, #fff 12%),
		var(--fpg-goldd) 55%,
		color-mix(in srgb, var(--fpg-goldd) 86%, #000 14%))!important;
	color:var(--fpg-cream)!important;
	align-items:center;text-align:center;
	box-shadow:0 3px 14px rgba(0,0,0,.28);padding:8px 16px!important}
.fpg .fpg-type-bar .fpg-t{
	font-family:var(--fpg-head);letter-spacing:.2em;
	font-size:calc(var(--fpg-s-title) * .88);text-transform:uppercase;-webkit-line-clamp:2}
/* readable text on the purple bar boxes (Day Social & co.) */
.fpg .fpg-type-bar .fpg-ti{color:var(--fpg-cream)!important;opacity:.9}
.fpg .fpg-type-bar .fpg-sub{color:var(--fpg-creamb)!important}
/* continuation pieces of a river bar recede a little — clearly one bar,
   no "empty blocks" */
.fpg .fpg-bar-cont{opacity:.62;box-shadow:none!important}
.fpg .fpg-bar-cont:hover{transform:none;box-shadow:none!important;filter:brightness(1.18)}

/* text inside boxes — explicit colours, theme can no longer grey them out */
.fpg .fpg-ti{
	display:block;font-family:var(--fpg-timef)!important;font-size:calc(var(--fpg-s-fac) * .82)!important;
	letter-spacing:calc(.09em + var(--fpg-ls-time));color:var(--fpg-inkt)!important;margin:0 0 6px;line-height:1.25!important;
	font-weight:var(--fpg-w-time);opacity:.92;
	white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fpg .fpg-t{
	display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;
	font-family:var(--fpg-head)!important;font-weight:var(--fpg-w-head);letter-spacing:.12em;line-height:1.22!important;
	color:var(--fpg-ink)!important;text-transform:uppercase;margin:0}
.fpg .fpg-f{
	display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;
	color:var(--fpg-inks)!important;letter-spacing:.16em;margin:6px 0 0;
	text-transform:uppercase;line-height:1.35!important;font-size:calc(var(--fpg-s-fac) * .88)}

/* bars keep their own text colours (cream on gold) */
.fpg .fpg-type-meal .fpg-t,.fpg .fpg-type-bar .fpg-t{color:inherit!important}

/* size classes — typography adapts to box height. Clamps are chosen so the
   worst-case content always fits the smallest box of the class: no cut-off
   text, no overlapping times, ever. */
.fpg-xs{padding:0 10px!important}
.fpg-xs .fpg-t{font-size:calc(var(--fpg-s-title) * .72)!important;-webkit-line-clamp:1}
.fpg-xs .fpg-ti,.fpg-xs .fpg-f{display:none!important}

.fpg-sm{padding:3px 12px!important}
.fpg-sm .fpg-t{font-size:calc(var(--fpg-s-title) * .78)!important;-webkit-line-clamp:1}
.fpg-sm .fpg-f{display:none!important}

.fpg-sm2{padding:4px 12px!important}
.fpg-sm2 .fpg-t{font-size:calc(var(--fpg-s-title) * .84)!important;-webkit-line-clamp:2}
.fpg-sm2 .fpg-f{display:none!important}

.fpg-md{padding:5px 14px!important}
.fpg-md .fpg-t{font-size:calc(var(--fpg-s-title) * .9)!important;-webkit-line-clamp:1}
.fpg-md .fpg-f{font-size:calc(var(--fpg-s-fac) * .92)!important;-webkit-line-clamp:1}

.fpg-lg{padding:7px 14px!important}
.fpg-lg .fpg-t{font-size:var(--fpg-s-title)!important;-webkit-line-clamp:2}
.fpg-lg .fpg-f{font-size:var(--fpg-s-fac)!important;-webkit-line-clamp:2}

/* very tall boxes (long check-ins, day socials) — calm centered composition
   so they read as intentional feature blocks, not empty slabs. */
.fpg-xl{padding:10px 20px!important;align-items:center;text-align:center}
.fpg-xl .fpg-djtxt{align-items:center;text-align:center}
.fpg-xl .fpg-t{font-size:calc(var(--fpg-s-title) * 1.12)!important;-webkit-line-clamp:3;letter-spacing:.18em}
.fpg-xl .fpg-f{font-size:var(--fpg-s-fac)!important;-webkit-line-clamp:2}

/* ---------- lightbox ---------- */
.fpg-overlay{
	position:fixed;inset:0;background:rgba(20,10,6,.78);backdrop-filter:blur(5px);
	display:none;align-items:center;justify-content:center;z-index:99999;padding:18px}
.fpg-overlay.is-open{display:flex;animation:fpgfade .25s ease}
@keyframes fpgfade{from{opacity:0}to{opacity:1}}

/* artwork lightbox — opened from the theme-night card */
.fpg-imgview{
	position:fixed;inset:0;background:rgba(15,8,26,.9);backdrop-filter:blur(8px);
	display:none;align-items:center;justify-content:center;z-index:99999;padding:24px}
.fpg-imgview.is-open{display:flex;animation:fpgfade .25s ease}
.fpg-imgview img{
	max-width:min(1100px, 94vw);max-height:86vh;width:auto;height:auto;
	border-radius:14px;border:1px solid rgba(255,255,255,.16);
	box-shadow:0 30px 80px rgba(0,0,0,.65);animation:fpgpop .28s cubic-bezier(.2,.9,.3,1.2)}
.fpg-imgview .fpg-close{position:fixed;top:22px;right:24px}

/* theme-details view — shown when a night has no artwork image yet:
   the same matte-glass jewel, big and centred. */
.fpg-imgview .fpg-themeview{display:none}
.fpg-imgview.is-theme img{display:none}
.fpg-imgview.is-theme .fpg-themeview{
	display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center;
	max-width:min(560px, 88vw);padding:46px 54px;border-radius:20px;
	border:2px solid color-mix(in srgb, var(--fpg-gold) 55%, transparent);
	background:linear-gradient(165deg, rgba(38,21,60,.94), rgba(20,11,38,.90));
	box-shadow:0 30px 80px rgba(0,0,0,.6);animation:fpgpop .28s cubic-bezier(.2,.9,.3,1.2);
}
.fpg-themeview-name{
	font-family:var(--fpg-head);font-size:34px;font-weight:600;letter-spacing:.06em;line-height:1.25;
	background:linear-gradient(180deg, #fff 20%, color-mix(in srgb, var(--fpg-goldb) 72%, #fff));
	-webkit-background-clip:text;background-clip:text;color:transparent;
}
.fpg-themeview-dress{font-size:16px;letter-spacing:.08em;line-height:1.65;color:var(--fpg-cream);opacity:.92}

.fpg-modal{
	background:linear-gradient(160deg, var(--fpg-bg1), var(--fpg-bg2));
	border:1px solid var(--fpg-line1);border-radius:22px;
	max-width:900px;width:100%;max-height:88vh;overflow-y:auto;
	display:grid;grid-template-columns:320px 1fr;gap:34px;
	padding:34px;position:relative;color:var(--fpg-cream);
	font-family:var(--fpg-body);
	box-shadow:0 30px 80px rgba(0,0,0,.6);animation:fpgpop .28s cubic-bezier(.2,.9,.3,1.2)}
@keyframes fpgpop{from{transform:scale(.94) translateY(10px);opacity:0}to{transform:none;opacity:1}}

.fpg .fpg-close{
	position:absolute;top:16px;right:16px;
	display:inline-flex!important;align-items:center;justify-content:center;
	width:42px;height:42px;min-width:42px;min-height:42px;padding:0!important;margin:0!important;
	border-radius:50%!important;border:none!important;
	background:var(--fpg-navbg)!important;color:var(--fpg-navc)!important;
	font-family:var(--fpg-body)!important;font-size:17px!important;font-weight:400;
	line-height:1!important;text-align:center;
	transition:transform .2s ease,filter .2s ease;z-index:2}
.fpg .fpg-close:hover{transform:scale(1.1);filter:brightness(1.15)}

/* single facilitator photo — one portrait card */
.fpg-mphoto{
	border-radius:14px;overflow:hidden;position:relative;
	aspect-ratio:3/4;align-self:start;width:100%;
	background:linear-gradient(150deg, var(--fpg-vhead), var(--fpg-bg2));
	border:1px solid var(--fpg-line1)}
.fpg-mphoto img{width:100%;height:100%;object-fit:cover;display:block}
.fpg-mphoto .fpg-ph{
	position:absolute;inset:0;display:flex;flex-direction:column;gap:10px;
	align-items:center;justify-content:center;color:var(--fpg-cream);opacity:.6}
.fpg-mphoto .fpg-ph svg{width:54px;height:54px}
.fpg-mphoto .fpg-ph span{font-family:var(--fpg-head);font-size:10px;letter-spacing:.28em;text-transform:uppercase}
.fpg-mphoto .fpg-ph i{font-style:italic;font-size:13px;text-transform:none}

.fpg-mbody{padding:6px 4px;min-width:0}
.fpg-mkicker{font-family:var(--fpg-head);font-size:11px;letter-spacing:.32em;color:var(--fpg-goldb);text-transform:uppercase;margin-bottom:10px}
.fpg-mname{font-family:var(--fpg-head);font-size:var(--fpg-s-mname);color:var(--fpg-goldb);
	font-weight:var(--fpg-w-head);
	letter-spacing:calc(.05em + var(--fpg-ls-head));line-height:1.15;text-transform:uppercase;word-wrap:break-word}
.fpg-mmeta{margin:12px 0 4px;font-size:calc(var(--fpg-s-mtext) * .9);letter-spacing:.14em;color:var(--fpg-cream);opacity:.8;text-transform:uppercase}
.fpg-msec{font-family:var(--fpg-head);font-size:12.5px;letter-spacing:.28em;color:var(--fpg-goldb);
	border-top:1px solid var(--fpg-line1);padding-top:18px;margin-top:22px;text-transform:uppercase}
.fpg-msec .fpg-msession{display:block;font-size:calc(var(--fpg-s-mname) * .6);letter-spacing:.1em;margin-top:6px}
.fpg-mtext{margin-top:10px;font-size:var(--fpg-s-mtext);font-weight:var(--fpg-w-body);line-height:var(--fpg-lh-body);color:var(--fpg-cream);white-space:pre-line}

.fpg-missing{padding:16px;border:1px dashed #c00;color:#c00;font-family:monospace}

/* ---------- mobile ---------- */
/* ---------- phone timeline (mobile_layout = list) ----------
   Rendered per day, hidden on desktop. On phones it replaces the grid:
   one vertical, time-ordered list that always fits the screen. */
.fpg-mob{display:none}
.fpg .fpg-ev.fpg-mrow{
	width:100%;flex-direction:row;align-items:center;justify-content:flex-start;gap:12px;
	margin:5px 0!important;padding:11px 14px!important;min-height:0}
.fpg .fpg-mrow .fpg-t{-webkit-line-clamp:unset!important;font-size:calc(var(--fpg-s-title) * .92)!important}
.fpg .fpg-mrow .fpg-f{-webkit-line-clamp:unset!important;font-size:calc(var(--fpg-s-fac) * .9)!important}
.fpg .fpg-mtime{flex:0 0 auto;min-width:88px;font-family:var(--fpg-timef);font-size:var(--fpg-s-time);color:var(--fpg-inkt);font-weight:var(--fpg-w-time);letter-spacing:calc(.02em + var(--fpg-ls-time))}
.fpg .fpg-mmain{flex:1 1 auto;display:flex;flex-direction:column;gap:2px;min-width:0}
.fpg .fpg-mroom{flex:0 0 auto;max-width:34%;text-align:right;font-size:calc(var(--fpg-s-time) * .82);color:var(--fpg-inks);opacity:.9;letter-spacing:.08em;text-transform:uppercase}
.fpg .fpg-mrow.fpg-type-meal .fpg-mtime,
.fpg .fpg-mrow.fpg-type-bar .fpg-mtime{color:inherit;opacity:.85}
.fpg .fpg-mrow.fpg-type-meal .fpg-mroom,
.fpg .fpg-mrow.fpg-type-bar .fpg-mroom{color:inherit;opacity:.75}

@media (max-width:760px){
	/* !important beats the inline CSS variables — without it these were dead */
	.fpg{padding:18px 10px 34px;--fpg-gutter:46px!important;--fpg-minw:560px!important}
	.fpg.fpg-bleed{padding-left:10px;padding-right:10px}
	/* In timeline mode the scroller stays (the .fpg-mob lists live inside it) —
	   we hide only the grid parts. display:none on .fpg-scroller would wipe
	   out the mobile timeline too. */
	.fpg-moblist .fpg-scroller{overflow:visible}
	.fpg-moblist .fpg-inner{min-width:0!important}
	.fpg-moblist .fpg-venues{display:none}
	.fpg-moblist .fpg-day .fpg-body{display:none}
	.fpg-moblist .fpg-mob{display:block}
	.fpg-festhead,.fpg-festfoot{font-size:9px;letter-spacing:.2em}
	.fpg-daynav{gap:10px}
	.fpg .fpg-nav{width:38px;height:38px;min-width:38px;min-height:38px;font-size:19px!important}
	.fpg-daytitle{min-width:0;flex:1;padding:10px 8px;letter-spacing:.1em}
	.fpg-daybar{padding:10px 12px;letter-spacing:.1em;margin:22px 0 6px}
	.fpg-vcell{letter-spacing:.1em;padding:8px 4px}
	.fpg-legend{gap:6px 14px}
	.fpg-modal{grid-template-columns:1fr;gap:20px;padding:24px 20px;max-height:92vh;border-radius:18px}
	.fpg-mphoto{max-width:280px;margin:0 auto;aspect-ratio:4/3}
	.fpg .fpg-close{top:10px;right:10px}
}

/* ---------- print: every day expanded, no chrome, one day per page ---------- */
@media print{
	.fpg{background:#fff!important;padding:0}
	.fpg-daynav,.fpg-scroller{overflow:visible}
	.fpg-daynav{display:none!important}
	.fpg-day{display:block!important;page-break-inside:avoid;margin-bottom:18px}
	.fpg-day.is-active{display:block!important}
	.fpg-inner{min-width:0!important}
	.fpg-overlay{display:none!important}
	.fpg .fpg-ev{box-shadow:none;border:1px solid rgba(0,0,0,.18)!important}
	.fpg .fpg-ev.fpg-cat{border-left:6px solid var(--fpg-catc, transparent)!important}
	.fpg-daybar{box-shadow:none}
}

/* ---------- facilitator line-up ([festival-lineup]) ----------
   Three layouts: rows (full width), duo (two per row, arch photos),
   cards (four per row). Same palette variables, same armour. */
.fpg-lineup{padding-bottom:40px}

/* filter pills */
.fpg-lpills{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin:4px 0 26px}
.fpg .fpg-lpill{
	display:inline-flex;align-items:center;gap:8px;
	padding:8px 16px!important;border-radius:999px!important;
	border:1px solid var(--fpg-line1)!important;background:transparent!important;
	font-family:var(--fpg-body);font-size:13px;font-weight:600;letter-spacing:.05em;
	color:var(--fpg-cream)!important;text-transform:uppercase!important;line-height:1.2;
	transition:background .18s,border-color .18s,color .18s,transform .18s;
}
.fpg .fpg-lpill:hover{border-color:var(--fpg-goldb)!important;transform:translateY(-1px)}
.fpg .fpg-lpill.is-active{
	background:var(--fpg-goldb)!important;border-color:var(--fpg-goldb)!important;
	color:var(--fpg-bg2)!important;
}
.fpg-ldot{width:9px;height:9px;border-radius:50%;background:var(--fpg-catc, var(--fpg-goldb));flex:0 0 auto;box-shadow:0 0 8px var(--fpg-catc, transparent)}

/* shared card anatomy */
.fpg-lgrid{display:grid;gap:16px}
.fpg .fpg-ev.fpg-lcard{
	display:flex!important;margin:0!important;width:auto!important;min-height:0!important;
	background:#EDEFF2!important;border:1px solid var(--fpg-line1)!important;
	border-radius:var(--fpg-radius)!important;text-transform:none!important;
	box-shadow:0 8px 24px rgba(0,0,0,.18);
	transition:transform .18s,box-shadow .18s,border-color .18s;
}
.fpg .fpg-ev.fpg-lcard:hover{transform:translateY(-4px);border-color:var(--fpg-goldb)!important;box-shadow:0 14px 34px rgba(0,0,0,.26)}
.fpg .fpg-ev.fpg-lcard.is-hidden{display:none!important}
.fpg-lbody{display:flex;flex-direction:column;gap:10px;min-width:0}
.fpg-lname{font-family:var(--fpg-head);font-size:calc(var(--fpg-s-title) * 1.35);font-weight:var(--fpg-w-head);letter-spacing:var(--fpg-ls-head);color:var(--fpg-ink);line-height:1.25}
.fpg-lrole{
	margin-top:-4px;font-size:calc(var(--fpg-s-fac) * .82);font-weight:600;
	letter-spacing:.14em;text-transform:uppercase;color:var(--fpg-goldd);
	white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.fpg-ltags{display:flex;flex-wrap:wrap;gap:5px}
.fpg-ltag{
	padding:4px 13px;border-radius:999px;font-size:12px;font-weight:700;letter-spacing:.06em;
	text-transform:uppercase;line-height:1.5;
	background:transparent;
	color:var(--fpg-catc, var(--fpg-ink));
	color:color-mix(in srgb, var(--fpg-catc, var(--fpg-ink)) 68%, var(--fpg-ink));
	border:1px solid var(--fpg-catc, var(--fpg-line1));
}
.fpg-lsess{font-size:calc(var(--fpg-s-fac) * .92);font-weight:600;color:var(--fpg-inks);letter-spacing:.03em}
.fpg-lexc{font-size:calc(var(--fpg-s-fac) + 1px);font-weight:var(--fpg-w-body);line-height:var(--fpg-lh-body);color:var(--fpg-ink);opacity:.88}
.fpg-lmore{
	display:inline-flex;align-items:center;gap:8px;align-self:flex-start;
	margin-top:4px;padding:10px 24px;border-radius:999px;
	background:var(--fpg-goldb);color:var(--fpg-bg2);
	font-size:13px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;line-height:1;
	transition:transform .18s,filter .18s;
}
.fpg-lmore .fpg-larr{transition:transform .18s}
.fpg .fpg-ev.fpg-lcard:hover .fpg-lmore{filter:brightness(1.08)}
.fpg .fpg-ev.fpg-lcard:hover .fpg-larr{transform:translateX(4px)}

/* ===== layout: CARDS — four per row, photo + name only ===== */
.fpg-lay-cards .fpg-lgrid{grid-template-columns:repeat(auto-fill, minmax(248px, 1fr));gap:20px}
.fpg-lay-cards .fpg-lcard{flex-direction:column!important;align-items:center!important;padding:30px 20px 26px!important;text-align:center}
.fpg-lay-cards .fpg-lbody{align-items:center;text-align:center}
.fpg-lay-cards .fpg-lexc,.fpg-lay-cards .fpg-lmore{display:none}
.fpg-lay-cards .fpg-lphoto{width:118px;height:118px;flex:0 0 auto;margin-bottom:15px}
.fpg-lay-cards .fpg-lphoto img{
	width:118px!important;height:118px!important;border-radius:50%!important;object-fit:cover;
	border:3px solid var(--fpg-goldb)!important;display:block;margin:0!important;
}
.fpg-lay-cards .fpg-lmono{
	display:flex!important;align-items:center;justify-content:center;
	width:118px!important;height:118px!important;border-radius:50%!important;
	background:var(--fpg-catc, var(--fpg-gold))!important;color:var(--fpg-creamb)!important;
	font-family:var(--fpg-head);font-size:38px;font-weight:600;letter-spacing:.04em;
	border:3px solid var(--fpg-goldb)!important;
}
.fpg-lay-cards .fpg-ltags{justify-content:center}

/* ===== layout: DUO — two per row, arch-topped photos + excerpt ===== */
.fpg-lay-duo .fpg-lgrid{grid-template-columns:repeat(2, 1fr);gap:26px}
.fpg-lay-duo .fpg-lcard{flex-direction:column!important;padding:0!important;overflow:hidden}
.fpg-lay-duo .fpg-lphoto{
	position:relative;height:250px;flex:0 0 auto;overflow:hidden;
	display:flex;align-items:center;justify-content:center;background:var(--fpg-cream);
}
.fpg-lay-duo .fpg-lphoto::before{
	content:'';position:absolute;inset:0;background:var(--fpg-catc, var(--fpg-gold));opacity:.16;
}
.fpg-lay-duo .fpg-lphoto img{
	position:absolute;inset:0;width:100%!important;height:100%!important;
	object-fit:cover;border:none!important;border-radius:0!important;margin:0!important;
}
.fpg-lay-duo .fpg-lmono{
	position:relative;z-index:1;display:flex!important;align-items:center;justify-content:center;
	width:130px!important;height:130px!important;border-radius:50%!important;
	background:var(--fpg-catc, var(--fpg-gold))!important;color:var(--fpg-creamb)!important;
	font-family:var(--fpg-head);font-size:42px;font-weight:600;
	border:3px solid var(--fpg-creamb)!important;
	box-shadow:0 6px 20px rgba(0,0,0,.25);
}
/* the dome: content panel rises over the photo with a big soft arch */
.fpg-lay-duo .fpg-lbody{
	position:relative;z-index:2;margin-top:-54px;
	background:var(--fpg-creamb);
	border-radius:50% 50% 0 0 / 54px 54px 0 0;
	padding:44px 34px 30px;align-items:center;text-align:center;flex:1 1 auto;
}
.fpg-lay-duo .fpg-ltags{justify-content:center}
.fpg-lay-duo .fpg-lmore{align-self:center}

/* ===== layout: ROWS — full width, excerpt left, photo right ===== */
.fpg-lay-rows .fpg-lgrid{display:flex;flex-direction:column;gap:18px}
.fpg-lay-rows .fpg-lcard{flex-direction:row!important;align-items:stretch!important;padding:0!important;overflow:hidden;text-align:left;min-height:190px}
.fpg-lay-rows .fpg-lbody{flex:1 1 auto;justify-content:center;padding:26px 34px;order:1}
.fpg-lay-rows .fpg-lphoto{
	flex:0 0 250px;order:2;position:relative;overflow:hidden;
	display:flex;align-items:center;justify-content:center;background:var(--fpg-cream);
}
.fpg-lay-rows .fpg-lphoto::before{
	content:'';position:absolute;inset:0;background:var(--fpg-catc, var(--fpg-gold));opacity:.16;
}
.fpg-lay-rows .fpg-lphoto img{
	position:absolute;inset:0;width:100%!important;height:100%!important;
	object-fit:cover;border:none!important;border-radius:0!important;margin:0!important;
}
.fpg-lay-rows .fpg-lmono{
	position:relative;z-index:1;display:flex!important;align-items:center;justify-content:center;
	width:112px!important;height:112px!important;border-radius:50%!important;
	background:var(--fpg-catc, var(--fpg-gold))!important;color:var(--fpg-creamb)!important;
	font-family:var(--fpg-head);font-size:36px;font-weight:600;
	border:3px solid var(--fpg-creamb)!important;
	box-shadow:0 6px 20px rgba(0,0,0,.25);
}

@media (max-width:900px){
	.fpg-lay-duo .fpg-lgrid{grid-template-columns:1fr}
}
@media (max-width:620px){
	.fpg-lay-cards .fpg-lgrid{grid-template-columns:repeat(2, 1fr);gap:12px}
	.fpg-lay-cards .fpg-lcard{padding:20px 12px 16px!important}
	.fpg-lay-cards .fpg-lphoto,.fpg-lay-cards .fpg-lphoto img{width:88px!important;height:88px!important}
	.fpg-lay-cards .fpg-lmono{width:88px!important;height:88px!important;font-size:29px}
	.fpg-lay-rows .fpg-lcard{flex-direction:column!important;min-height:0}
	.fpg-lay-rows .fpg-lphoto{order:0;flex:0 0 auto;height:190px}
	.fpg-lay-rows .fpg-lbody{padding:20px 22px;align-items:center;text-align:center}
	.fpg-lay-rows .fpg-ltags{justify-content:center}
	.fpg-lay-rows .fpg-lmore{align-self:center}
}

/* no-photo headers (duo/rows): a solid category panel with big
   typographic initials instead of a small circle on a tinted wave */
.fpg-lay-duo .fpg-lphoto.fpg-lnoimg,.fpg-lay-rows .fpg-lphoto.fpg-lnoimg{background:var(--fpg-catc, var(--fpg-gold))}
.fpg-lay-duo .fpg-lphoto.fpg-lnoimg::before,.fpg-lay-rows .fpg-lphoto.fpg-lnoimg::before{display:none}
.fpg-lay-duo .fpg-lnoimg .fpg-lmono{
	width:auto!important;height:auto!important;border:none!important;border-radius:0!important;
	background:transparent!important;box-shadow:none!important;color:var(--fpg-creamb)!important;
	font-size:64px;letter-spacing:.06em;
}
.fpg-lay-rows .fpg-lnoimg .fpg-lmono{
	width:auto!important;height:auto!important;border:none!important;border-radius:0!important;
	background:transparent!important;box-shadow:none!important;color:var(--fpg-creamb)!important;
	font-size:54px;letter-spacing:.06em;
}

/* ===== layout: TRIO — three per row, circle photos + excerpt ===== */
.fpg-lay-trio .fpg-lgrid{grid-template-columns:repeat(3, 1fr);gap:22px}
.fpg-lay-trio .fpg-lcard{flex-direction:column!important;align-items:center!important;padding:30px 26px 26px!important;text-align:center}
.fpg-lay-trio .fpg-lbody{align-items:center;text-align:center}
.fpg-lay-trio .fpg-ltags{justify-content:center}
.fpg-lay-trio .fpg-lmore{align-self:center}
.fpg-lay-trio .fpg-lphoto{width:132px;height:132px;flex:0 0 auto;margin-bottom:15px}
.fpg-lay-trio .fpg-lphoto img{
	width:132px!important;height:132px!important;border-radius:50%!important;object-fit:cover;
	border:3px solid var(--fpg-goldb)!important;display:block;margin:0!important;
}
.fpg-lay-trio .fpg-lmono{
	display:flex!important;align-items:center;justify-content:center;
	width:132px!important;height:132px!important;border-radius:50%!important;
	background:var(--fpg-catc, var(--fpg-gold))!important;color:var(--fpg-creamb)!important;
	font-family:var(--fpg-head);font-size:42px;font-weight:600;letter-spacing:.04em;
	border:3px solid var(--fpg-goldb)!important;
}
@media (max-width:900px){
	.fpg-lay-trio .fpg-lgrid{grid-template-columns:repeat(2, 1fr)}
}
@media (max-width:560px){
	.fpg-lay-trio .fpg-lgrid{grid-template-columns:1fr}
}

/* ===== ZoukDreams additions: logo, theme ribbon, DJ boxes, body tracking ===== */

/* Festival logo above the headline — white artwork, softly lifted off the photo bg. */
.fpg-logo{display:flex;justify-content:center;margin:0 0 6px}
.fpg-logo img{
	max-height:110px;max-width:min(420px, 82%);width:auto;height:auto;display:block;
	filter:drop-shadow(0 4px 18px rgba(0,0,0,.45));
}

/* Theme-night ribbon — a jewel-box banner under the day header:
   matte frosted glass, rotating pink → gold → purple frame, sparkle accents.
   One style for every night on every schedule — artwork never fills the
   card itself, it opens full-screen from the gold pill. */
.fpg .fpg-theme{
	position:relative;display:flex;flex-direction:column;align-items:center;gap:9px;
	margin:16px auto 24px;padding:18px 46px 20px;max-width:680px;text-align:center;
	border:3px solid transparent;border-radius:16px;
	background:
		linear-gradient(165deg, rgba(38,21,60,.80), rgba(20,11,38,.74)) padding-box,
		conic-gradient(from var(--fpg-ang),
			#BF2F52, #F0CA89, #7967AB, #F0CA89, #BF2F52) border-box;
	box-shadow:0 12px 36px rgba(0,0,0,.42), inset 0 1px 0 rgba(255,255,255,.14);
	backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
	animation:fpg-themespin 4s linear infinite;
}
/* when the day has artwork, the card is a <button> that opens it —
   needs the extra .fpg to out-rank the .fpg button{all:unset} armour */
.fpg button.fpg-theme{font:inherit;color:inherit;cursor:pointer;width:auto}
.fpg button.fpg-theme:hover,.fpg button.fpg-theme:focus-visible{
	box-shadow:0 18px 48px rgba(0,0,0,.5), inset 0 1px 0 rgba(255,255,255,.18);
	filter:brightness(1.08);outline:none;
}

/* the rotating frame — falls back to a static gradient border where
   @property isn't supported. */
@property --fpg-ang{syntax:'<angle>';initial-value:0deg;inherits:false}
@keyframes fpg-themespin{to{--fpg-ang:360deg}}
@media (prefers-reduced-motion: reduce){
	.fpg .fpg-theme{animation:none}
	.fpg .fpg-theme-more{animation:none}
}
.fpg-theme-more{
	font-family:var(--fpg-head);font-size:11px;font-weight:700;
	letter-spacing:.24em;text-transform:uppercase;
	color:#3a2547;margin-top:6px;
	padding:8px 20px 7px;border-radius:999px;
	border:1px solid rgba(255,255,255,.38);
	background:linear-gradient(110deg, #F0CA89, #f8e7c4 45%, #e9bd6e 55%, #F0CA89);
	background-size:200% 100%;
	animation:fpg-moreflow 3.2s linear infinite;
	box-shadow:0 4px 14px rgba(240,202,137,.38);
}
.fpg-theme-more::after{content:" ↗"}
@keyframes fpg-moreflow{to{background-position:200% 0}}
.fpg button.fpg-theme:hover .fpg-theme-more{
	background:linear-gradient(110deg, #7967AB, #9684c9 45%, #6a5599 55%, #7967AB);
	background-size:200% 100%;
	color:#ffffff;box-shadow:0 4px 16px rgba(121,103,171,.5);
}
.fpg-theme::before,.fpg-theme::after{
	content:"✦";position:absolute;top:50%;transform:translateY(-50%);
	font-size:13px;color:var(--fpg-gold);opacity:.85;
	text-shadow:0 0 8px color-mix(in srgb, var(--fpg-gold) 70%, transparent);
}
.fpg-theme::before{left:20px}
.fpg-theme::after{right:20px}
.fpg-theme-kicker{
	font-family:var(--fpg-head);font-size:12.5px;font-weight:600;
	letter-spacing:.4em;text-transform:uppercase;color:var(--fpg-gold);
}
.fpg-theme-name{
	font-family:var(--fpg-head);font-weight:var(--fpg-w-head);
	font-size:calc(var(--fpg-s-day) * 1.12);letter-spacing:var(--fpg-ls-head);
	line-height:1.3;
	background:linear-gradient(180deg, #fff 20%, color-mix(in srgb, var(--fpg-goldb) 72%, #fff));
	-webkit-background-clip:text;background-clip:text;color:transparent;
	filter:drop-shadow(0 2px 8px rgba(0,0,0,.4));
}
.fpg-theme-dress{
	font-family:var(--fpg-body);font-size:calc(var(--fpg-s-mtext) * .95);
	font-weight:var(--fpg-w-body);letter-spacing:var(--fpg-ls-body, .2px);
	line-height:1.7;color:var(--fpg-cream);opacity:.9;
}

/* DJ boxes: the button keeps its column layout for plain items; when a DJ
   with a photo is attached, .fpg-djbox flips it to a row with a round
   photo chip on the right. .fpg-djtxt is transparent (display:contents)
   until then. */
.fpg .fpg-djtxt{display:contents}
.fpg .fpg-ev.fpg-djbox{flex-direction:row;align-items:center;gap:10px}
.fpg .fpg-ev.fpg-djbox .fpg-djtxt{
	display:flex;flex-direction:column;flex:1 1 auto;min-width:0;gap:inherit;
}
.fpg .fpg-djph{
	flex:0 0 auto;width:52px;height:52px;border-radius:50%;overflow:hidden;
	border:2px solid var(--fpg-goldb);box-shadow:0 3px 10px rgba(0,0,0,.35);
}
.fpg .fpg-djph img{width:100%!important;height:100%!important;object-fit:cover;display:block;margin:0!important}

/* Mobile row variant: chip sits on the left, before the time. */
.fpg .fpg-djph-m{width:40px;height:40px;border-width:2px;margin-right:10px}

/* Body-copy letter tracking (Karla @ 0.2px for ZoukDreams). */
.fpg .fpg-mtext,.fpg .fpg-lexc,.fpg .fpg-theme-dress{letter-spacing:var(--fpg-ls-body, .2px)}

@media (max-width:760px){
	.fpg-logo img{max-height:74px}
	.fpg .fpg-theme{padding:11px 16px 12px;margin-bottom:14px}
	.fpg .fpg-theme-name{font-size:calc(var(--fpg-s-day) * .92)}
}

/* ---------- ZoukDreams photo fidelity (v1.0) ---------- */

/* DJ set / highlight box colours from the flyers. */
.fpg .fpg-type-djset{background:var(--fpg-goldd)!important;color:var(--fpg-cream)!important}
.fpg .fpg-type-djset .fpg-t,.fpg .fpg-type-djset .fpg-ti{color:var(--fpg-cream)!important}
.fpg .fpg-type-djset .fpg-sub,.fpg .fpg-type-djset .fpg-f{color:var(--fpg-creamb)!important}
.fpg .fpg-mrow.fpg-type-djset .fpg-mtime{color:inherit;opacity:.85}
.fpg .fpg-mrow.fpg-type-djset .fpg-mroom{color:inherit;opacity:.75}
.fpg .fpg-type-lav{background:var(--fpg-goldb)!important;color:var(--fpg-ink)!important}
/* lavender boxes: keep every line dark enough to read — the default
   time/secondary colours are too low-contrast on light purple */
.fpg .fpg-type-lav .fpg-ti{color:var(--fpg-ink)!important;opacity:.78}
.fpg .fpg-type-lav .fpg-sub{color:var(--fpg-ink)!important;opacity:.88}
.fpg .fpg-type-lav .fpg-f{color:var(--fpg-ink)!important;opacity:.72}

/* italic topic line under the (teacher-first) title — bigger & bolder so the
   "what is this session" answer is readable in three seconds */
.fpg .fpg-sub{
	display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;
	font-family:var(--fpg-body)!important;font-style:italic;font-weight:600;
	font-size:calc(var(--fpg-s-fac) * 1.06)!important;
	letter-spacing:calc(.02em + var(--fpg-ls-body));line-height:1.4!important;
	color:var(--fpg-inks)!important;margin:4px 0 0;text-transform:none}
.fpg-xs .fpg-sub,.fpg-sm .fpg-sub,.fpg-sm2 .fpg-sub{display:none!important}
.fpg-md .fpg-sub{-webkit-line-clamp:1}
.fpg-lg .fpg-sub{-webkit-line-clamp:3}
.fpg-xl .fpg-sub{-webkit-line-clamp:6}

/* same line inside mobile rows */
.fpg .fpg-mrow .fpg-sub{
	-webkit-line-clamp:2;font-size:calc(var(--fpg-s-fac) * .95)!important;margin:2px 0 0}

/* italic theme line inside labelled bars ("Theme: Golden Temple") */
.fpg .fpg-bsub{
	display:block;font-family:var(--fpg-body)!important;font-style:italic;
	font-size:calc(var(--fpg-s-fac) * .95)!important;letter-spacing:.04em;
	color:inherit!important;opacity:.92;margin:2px 0 0;text-transform:none}
/* tiny "opens the artwork" hint inside theme-party bars */
.fpg .fpg-bmore{
	display:block;font-family:var(--fpg-head)!important;font-style:normal;
	font-size:calc(var(--fpg-s-fac) * .72)!important;font-weight:600;
	letter-spacing:.28em;text-transform:uppercase;
	color:var(--fpg-gold)!important;margin:6px 0 0}

/* DJ photo chips alternate sides and may lean out of the box */
.fpg .fpg-ev.fpg-djbox-l{flex-direction:row-reverse}
.fpg-kind-dj .fpg-ev.fpg-djbox{overflow:visible;position:relative}
/* give the protruding chips room inside the scrollport without moving the grid */
.fpg-kind-dj .fpg-scroller{padding-left:16px;padding-right:16px;margin-left:-16px;margin-right:-16px}
/* chips hang off the box edge; text is padded clear of them */
.fpg-kind-dj .fpg-djbox .fpg-djph{position:absolute;top:50%;transform:translateY(-50%);margin:0;z-index:3}
.fpg-kind-dj .fpg-djbox:not(.fpg-djbox-l) .fpg-djph{right:-12px}
.fpg-kind-dj .fpg-djbox:not(.fpg-djbox-l) .fpg-djtxt{padding-right:34px}
.fpg-kind-dj .fpg-djbox-l .fpg-djph{left:-12px}
.fpg-kind-dj .fpg-djbox-l .fpg-djtxt{padding-left:34px}
