/* dznir festival themes: Halloween, Diwali, Black Friday, Christmas, New Year's Eve, Lunar New Year, Valentine's, Holi
   and Eid. Same phone kit as themes.css (the .mini variables); the art markup comes from App\Support\ThemeArt and the
   tap effects from festive.js. Loaded after themes.css wherever pages are drawn. */
:root {
  --m-bat: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 3 24 13'%3E%3Cpath d='M12 7c.6-1 1.4-1.6 1.6-3 .8 1.2.7 2.4.4 3.4 2.6-1.6 6.6-1.4 10 1.4-2 .2-3.2 1.3-3.6 3-1.4-1.2-3-1.2-4 .4-.8-.9-2-1-2.6.2L12 15l-1.8-2.6c-.6-1.2-1.8-1.1-2.6-.2-1-1.6-2.6-1.6-4-.4C3.2 10.1 2 9 0 8.8 3.4 6 7.4 5.8 10 7.4 9.7 6.4 9.6 5.2 10.4 4c.2 1.4 1 2 1.6 3z'/%3E%3C/svg%3E"); --m-heart: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 21s-7.5-4.6-10-9.3C.4 8.4 2.3 4 6.4 4c2.3 0 3.9 1.3 5.6 3.4C13.7 5.3 15.3 4 17.6 4 21.7 4 23.6 8.4 22 11.7 19.5 16.4 12 21 12 21z'/%3E%3C/svg%3E"); --m-spark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 0c1 7 5 11 12 12-7 1-11 5-12 12-1-7-5-11-12-12 7-1 11-5 12-12z'/%3E%3C/svg%3E"); --m-star: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 1l3.1 7 7.6.7-5.8 5 1.8 7.4L12 17.3 5.3 21.1l1.8-7.4-5.8-5 7.6-.7z'/%3E%3C/svg%3E"); --m-flake: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round'%3E%3Cpath d='M12 1v22M2.5 6.5l19 11M21.5 6.5l-19 11M9 3.2l3 2 3-2M9 20.8l3-2 3 2'/%3E%3C/g%3E%3C/svg%3E");
}
.vibe--fest .mini__avatar { box-shadow: 0 0 0 3px color-mix(in srgb, var(--hl) 70%, transparent), 0 10px 24px -8px rgba(0, 0, 0, 0.5); }
.vibe--fest .mini { cursor: pointer; -webkit-tap-highlight-color: transparent; }
.vibe .bg .bf-tape b { position: static; display: inline-block; }
.mask-bat, .hw-bats i { -webkit-mask: var(--m-bat) center / contain no-repeat; mask: var(--m-bat) center / contain no-repeat; }
.vd-hearts i { -webkit-mask: var(--m-heart) center / contain no-repeat; mask: var(--m-heart) center / contain no-repeat; }
.ed-stars i, .ny-glitter i { -webkit-mask: var(--m-spark) center / contain no-repeat; mask: var(--m-spark) center / contain no-repeat; }

/* ---------- Tap effects (festive.js adds these inside the tapped page) ---------- */
.fx { position: absolute; left: 0; top: 0; z-index: 5; width: var(--w, 8px); height: var(--w, 8px); margin: calc(var(--w, 8px) / -2) 0 0 calc(var(--w, 8px) / -2); background: var(--c, #FFFFFF); pointer-events: none; will-change: transform, opacity; }
.fx--dot { border-radius: 50%; box-shadow: 0 0 6px 1px var(--c); }
.fx--bat { -webkit-mask: var(--m-bat) center / contain no-repeat; mask: var(--m-bat) center / contain no-repeat; height: calc(var(--w) * 0.55); margin-top: calc(var(--w) * -0.275); }
.fx--heart { -webkit-mask: var(--m-heart) center / contain no-repeat; mask: var(--m-heart) center / contain no-repeat; }
.fx--spark { -webkit-mask: var(--m-spark) center / contain no-repeat; mask: var(--m-spark) center / contain no-repeat; }
.fx--star { -webkit-mask: var(--m-star) center / contain no-repeat; mask: var(--m-star) center / contain no-repeat; }
.fx--flake { -webkit-mask: var(--m-flake) center / contain no-repeat; mask: var(--m-flake) center / contain no-repeat; }
.fx--coin { border-radius: 50%; background: radial-gradient(circle at 35% 35%, #FFF1B8, #F7C948 45%, #B8860B); box-shadow: inset 0 0 0 1.5px #B8860B; }
.fx--coin::after { content: ''; position: absolute; left: 35%; top: 35%; width: 30%; height: 30%; background: #A10E1C; }
.fx--tag { width: auto; height: auto; margin: -12px 0 0 -24px; padding: 4px 8px; border-radius: 4px; background: #FFE600; color: #0A0A0A; font: 400 15px/1 'Anton', var(--sans); letter-spacing: 0.04em; white-space: nowrap; box-shadow: 3px 3px 0 #FF2D55; }
.fx--powder { border-radius: 50%; filter: blur(5px); opacity: 0.9; }
.fx-stain { position: absolute; z-index: -1; border-radius: 50%; filter: blur(10px); opacity: 0.28; pointer-events: none; transition: opacity 1.2s; }

/* ---------- Halloween: moon, bats, fog, a cobweb ---------- */
.vibe--halloween .mini { --bg: #140A24; --fg: #F7E9D7; --mut: #CDB9A5; --btn: #FF7518; --btnfg: #1A0B12; --rad: 14px; --hl: #B4FF39; --font: 'DM Sans', var(--sans); }
.vibe--halloween .bg { background: radial-gradient(120% 70% at 80% 0%, #3A1E5C, #140A24 55%, #07040D); }
.vibe--halloween .mini__name { font-family: 'Permanent Marker', var(--sans); font-size: 20px; font-weight: 400; color: #FF9A3C; text-shadow: 0 0 12px rgba(255, 117, 24, 0.5); }
.vibe--halloween .mini__link { box-shadow: 0 6px 0 -2px #8A3300; font-weight: 700; }
.vibe--halloween .mini__link--hl { background: #B4FF39; border-color: #B4FF39; color: #1A0B12; box-shadow: 0 0 18px rgba(180, 255, 57, 0.55); }
.hw-moon { right: -18px; top: 36px; width: 84px; height: 84px; border-radius: 50%; background: radial-gradient(circle at 40% 40%, #FFF6D8, #F5D98B 60%, #E0B655); animation: hw-glow 6s ease-in-out infinite alternate; }
.hw-bats { inset: 0; }
.hw-bats i { left: var(--x); top: 16%; width: 34px; height: 18px; scale: var(--s); background: #07030C; animation: hw-bat var(--d) ease-in-out var(--dl) infinite; }
.hw-fog { left: -20%; right: -20%; bottom: -10px; height: 120px; background: radial-gradient(60% 50% at 30% 70%, rgba(190, 170, 220, 0.25), transparent 70%), radial-gradient(50% 50% at 75% 80%, rgba(190, 170, 220, 0.2), transparent 70%); filter: blur(6px); animation: hw-fog 14s ease-in-out infinite alternate; }
.hw-web { left: -4px; top: -4px; width: 96px; height: 96px; background: repeating-radial-gradient(circle at 0 0, transparent 0 13px, rgba(255, 255, 255, 0.2) 13px 14px), repeating-conic-gradient(from 90deg at 0 0, transparent 0 14deg, rgba(255, 255, 255, 0.2) 14deg 15deg); -webkit-mask: radial-gradient(circle at 0 0, #000 55%, transparent 72%); mask: radial-gradient(circle at 0 0, #000 55%, transparent 72%); }
@keyframes hw-glow { from { box-shadow: 0 0 30px 6px rgba(245, 217, 139, 0.25); } to { box-shadow: 0 0 54px 16px rgba(245, 217, 139, 0.45); } }
@keyframes hw-bat { 0% { transform: translate(-70px, 50px) scaleY(1); opacity: 0; } 10% { opacity: 1; } 25% { transform: translate(-24px, -8px) scaleY(0.4); } 50% { transform: translate(28px, 24px) scaleY(1); } 75% { transform: translate(72px, -28px) scaleY(0.4); } 100% { transform: translate(130px, -64px) scaleY(1); opacity: 0; } }
@keyframes hw-fog { from { transform: translateX(-8%); } to { transform: translateX(8%); } }

/* ---------- Diwali: diyas, a turning rangoli, rising sparks ---------- */
.vibe--diwali .mini { --bg: #2A0838; --fg: #FFF4D6; --mut: #F2C98A; --btn: #FFB627; --btnfg: #3B0A2A; --rad: 999px; --hl: #FF6B35; --font: 'DM Sans', var(--sans); }
.vibe--diwali .bg { background: radial-gradient(120% 60% at 50% 110%, #7A1E48, #2A0838 55%, #14031F); }
.vibe--diwali .mini__name { font-family: 'Cinzel', serif; font-size: 18px; font-weight: 900; color: #FFD27A; text-shadow: 0 0 14px rgba(255, 182, 39, 0.55); }
.vibe--diwali .mini__link { background: linear-gradient(180deg, #FFD27A, #FFB627); border-color: #FFD27A; box-shadow: 0 6px 16px -8px rgba(255, 182, 39, 0.8); font-weight: 700; }
.vibe--diwali .mini__link--hl { background: linear-gradient(180deg, #FF8A4C, #FF5E1A); border-color: #FF8A4C; color: #FFFFFF; }
.dw-rangoli { left: 50%; bottom: -96px; width: 224px; height: 224px; margin-left: -112px; border-radius: 50%; background: repeating-conic-gradient(#FF6B35 0 15deg, #FFB627 15deg 30deg, #D6336C 30deg 45deg, #7B2CBF 45deg 60deg); -webkit-mask: radial-gradient(circle, transparent 0 22%, #000 23% 34%, transparent 35% 44%, #000 45% 58%, transparent 59% 66%, #000 67% 70%, transparent 71%); mask: radial-gradient(circle, transparent 0 22%, #000 23% 34%, transparent 35% 44%, #000 45% 58%, transparent 59% 66%, #000 67% 70%, transparent 71%); opacity: 0.5; animation: dw-spin 40s linear infinite; }
.dw-diyas { left: 0; right: 0; bottom: 14px; height: 24px; }
.dw-diyas i { left: calc(4% + var(--i) * 10%); bottom: 0; width: 22px; height: 10px; border-radius: 0 0 12px 12px; background: linear-gradient(#D9662A, #8A3510); }
.dw-diyas i:nth-child(n + 3) { left: auto; right: calc(4% + (4 - var(--i)) * 10%); }
.dw-diyas i::before { content: ''; position: absolute; left: 50%; bottom: 8px; width: 7px; height: 12px; margin-left: -3.5px; border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%; background: radial-gradient(circle at 50% 70%, #FFF6C2, #FFB627 55%, #FF6B35); box-shadow: 0 0 12px 4px rgba(255, 182, 39, 0.55); transform-origin: 50% 100%; animation: dw-flame 1.4s ease-in-out infinite alternate; animation-delay: calc(var(--i) * -0.5s); }
.dw-sparks { inset: 0; }
.dw-sparks i { left: var(--x); bottom: -8px; width: 3px; height: 3px; border-radius: 50%; background: #FFD27A; box-shadow: 0 0 6px 2px rgba(255, 210, 122, 0.8); scale: var(--s); animation: fest-rise var(--d) ease-in var(--dl) infinite; }
@keyframes dw-flame { from { transform: scale(1, 1) rotate(-4deg); } to { transform: scale(0.85, 1.15) rotate(4deg); } }
@keyframes dw-spin { to { transform: rotate(360deg); } }
@keyframes fest-rise { 0% { transform: translate(0, 0); opacity: 0; } 10% { opacity: 1; } 100% { transform: translate(14px, -560px); opacity: 0; } }

/* ---------- Black Friday: sale tape, hard shadows ---------- */
.vibe--black-friday .mini { --bg: #0A0A0A; --fg: #FFFFFF; --mut: #B3B3B3; --btn: #FFE600; --btnfg: #0A0A0A; --rad: 4px; --hl: #FF2D55; --font: 'DM Sans', var(--sans); }
.vibe--black-friday .bg { background: linear-gradient(rgba(255, 255, 255, 0.05) 1px, transparent 1px) 0 0 / 100% 18px, #0A0A0A; }
.vibe--black-friday .mini__name { font-family: 'Anton', var(--sans); font-size: 26px; font-weight: 400; letter-spacing: 0.02em; text-transform: uppercase; }
.vibe--black-friday .mini__link { font-weight: 800; letter-spacing: 0.04em; text-transform: uppercase; box-shadow: 3px 3px 0 #FF2D55; }
.vibe--black-friday .mini__link--hl { background: #FF2D55; border-color: #FF2D55; color: #FFFFFF; box-shadow: 3px 3px 0 #FFE600; animation: bf-pulse 1.2s ease-in-out infinite; }
.vibe--black-friday .blk { background: #141414; }
.bf-tape { left: -20%; right: -20%; top: 66%; height: 22px; overflow: hidden; background: #FFE600; color: #0A0A0A; font: 400 13px/22px 'Anton', var(--sans); letter-spacing: 0.06em; white-space: nowrap; transform: rotate(-12deg); opacity: 0.9; }
.bf-tape b { font-weight: 400; animation: bf-roll 14s linear infinite; }
.bf-tape--2 { top: 84%; background: #FF2D55; color: #FFFFFF; transform: rotate(8deg); opacity: 0.8; }
.bf-tape--2 b { animation-direction: reverse; }
@keyframes bf-roll { to { transform: translateX(-50%); } }
@keyframes bf-pulse { 50% { transform: scale(1.03); } }

/* ---------- Christmas: fairy lights, snow, a snowy hill ---------- */
.vibe--christmas .mini { --bg: #0D3B2C; --fg: #FFFDF7; --mut: #CFE3D6; --btn: #C8102E; --btnfg: #FFFFFF; --rad: 12px; --hl: #F4C430; --font: 'DM Sans', var(--sans); }
.vibe--christmas .bg { background: linear-gradient(180deg, #072A1F, #0D3B2C 55%, #12503B); }
.vibe--christmas .mini__name { font-family: 'Playfair Display', serif; font-size: 19px; font-weight: 900; }
.vibe--christmas .mini__link { border-color: #E23A4F; box-shadow: 0 6px 14px -8px rgba(0, 0, 0, 0.6); font-weight: 700; }
.vibe--christmas .mini__link--hl { background: #F4C430; border-color: #F4C430; color: #3A2A00; }
.xm-lights { left: 0; right: 0; top: 0; height: 40px; }
.xm-lights::before { content: ''; position: absolute; left: -10%; right: -10%; top: -6px; height: 34px; border-bottom: 1.5px solid rgba(255, 255, 255, 0.25); border-radius: 0 0 50% 50%; }
.xm-lights i { left: calc(6% + var(--i) * 11%); top: calc(24px - (var(--i) - 4) * (var(--i) - 4) * 1.2px); width: 7px; height: 10px; border-radius: 50%; color: #FF3B3B; background: currentColor; box-shadow: 0 0 10px 2px currentColor; animation: xm-twinkle 1.6s ease-in-out infinite alternate; animation-delay: calc(var(--i) * -0.35s); }
.xm-lights i:nth-child(4n + 2) { color: #FFD23F; }
.xm-lights i:nth-child(4n + 3) { color: #3BCEAC; }
.xm-lights i:nth-child(4n) { color: #4D9DE0; }
.xm-snow { inset: 0; }
.xm-snow i { left: var(--x); top: -8px; width: 5px; height: 5px; border-radius: 50%; background: #FFFFFF; opacity: 0.85; scale: var(--s); animation: xm-fall var(--d) linear var(--dl) infinite; }
.xm-hill { left: -20%; right: -20%; bottom: -44px; height: 96px; border-radius: 50% 50% 0 0; background: linear-gradient(#F4FAFF, #DCEBF5); opacity: 0.14; }
@keyframes xm-twinkle { from { opacity: 0.35; } to { opacity: 1; } }
@keyframes xm-fall { 0% { transform: translate(0, 0); } 50% { transform: translate(14px, 300px); } 100% { transform: translate(-6px, 620px); } }

/* ---------- New Year's Eve: gold glitter and fireworks ---------- */
.vibe--new-year .mini { --bg: #05060F; --fg: #FFFFFF; --mut: #C9C3E6; --btn: rgba(241, 215, 138, 0.08); --btnfg: #F1D78A; --rad: 999px; --hl: #F1D78A; --font: 'DM Sans', var(--sans); }
.vibe--new-year .bg { background: radial-gradient(120% 70% at 50% 0%, #1C1F4A, #05060F 60%); }
.vibe--new-year .mini__name { font-family: 'Righteous', var(--sans); font-size: 20px; background: linear-gradient(90deg, #F1D78A, #FFFFFF, #F1D78A) 0 0 / 200% 100%; -webkit-background-clip: text; background-clip: text; color: transparent; animation: ny-shine 4s linear infinite; }
.vibe--new-year .mini__link { border-color: rgba(241, 215, 138, 0.6); }
.vibe--new-year .mini__avatar { background: #F1D78A; color: #05060F; }
.vibe--new-year .mini__link--hl { background: #F1D78A; border-color: #F1D78A; color: #05060F; }
.ny-glitter { inset: 0; }
.ny-glitter i { left: var(--x); top: calc((var(--s) - 0.6) * 110%); width: 8px; height: 8px; background: #F1D78A; animation: fest-twinkle var(--d) ease-in-out var(--dl) infinite; }
.ny-bursts { inset: 0; }
.ny-bursts i { left: calc(22% + var(--i) * 28%); top: calc(14% + var(--i) * 8%); width: 92px; height: 92px; margin: -46px 0 0 -46px; border-radius: 50%; color: #FF5EA8; background: repeating-conic-gradient(currentColor 0 5deg, transparent 5deg 22deg); -webkit-mask: radial-gradient(circle, transparent 0 24%, #000 26% 48%, transparent 50%); mask: radial-gradient(circle, transparent 0 24%, #000 26% 48%, transparent 50%); opacity: 0; animation: ny-burst 3.3s ease-out infinite; animation-delay: calc(var(--i) * -1.1s); }
.ny-bursts i:nth-child(1) { left: 16%; top: 14%; }
.ny-bursts i:nth-child(2) { left: 86%; top: 30%; color: #F1D78A; }
.ny-bursts i:nth-child(3) { left: 20%; top: 60%; color: #6EE7F9; }
@keyframes ny-shine { to { background-position: -200% 0; } }
@keyframes ny-burst { 0% { transform: scale(0.1); opacity: 0; } 10% { opacity: 1; } 60% { transform: scale(1); opacity: 0.9; } 100% { transform: scale(1.15); opacity: 0; } }
@keyframes fest-twinkle { 0%, 100% { transform: scale(0.5); opacity: 0.2; } 50% { transform: scale(1); opacity: 1; } }

/* ---------- Lunar New Year: lanterns, gold clouds ---------- */
.vibe--lunar-new-year .mini { --bg: #A10E1C; --fg: #FFF3D6; --mut: #F7D69A; --btn: #F7C948; --btnfg: #7A0710; --rad: 10px; --hl: #FFE7A3; --font: 'DM Sans', var(--sans); }
.vibe--lunar-new-year .bg { background: radial-gradient(120% 70% at 50% 0%, #D32F2F, #A10E1C 50%, #6E0711); }
.vibe--lunar-new-year .mini__name { font-family: 'Cinzel', serif; font-size: 18px; font-weight: 900; color: #F7C948; text-shadow: 0 2px 0 #6E0711; }
.vibe--lunar-new-year .mini__link { border-color: #FFE7A3; font-weight: 700; }
.vibe--lunar-new-year .mini__link--hl { background: #7A0710; border-color: #F7C948; color: #F7C948; }
.ln-clouds { left: 0; right: 0; bottom: 0; height: 64px; background: radial-gradient(circle at 50% 100%, transparent 0 8px, rgba(247, 201, 72, 0.35) 8px 10px, transparent 10px) 0 0 / 24px 12px; -webkit-mask: linear-gradient(to top, #000, transparent); mask: linear-gradient(to top, #000, transparent); }
.ln-lanterns { inset: 0; }
.ln-lanterns i { left: 8%; top: 4px; width: 30px; height: 36px; border-radius: 45%; border-top: 3px solid #F7C948; border-bottom: 3px solid #F7C948; background: radial-gradient(circle at 50% 40%, #FF6B5B, #D6201F 60%, #8E0E12); box-shadow: 0 0 22px 4px rgba(255, 90, 60, 0.45); transform-origin: 50% -24px; animation: ln-sway 3s ease-in-out infinite alternate; animation-delay: calc(var(--i) * -0.8s); }
.ln-lanterns i::after { content: ''; position: absolute; left: 50%; bottom: -13px; width: 2px; height: 10px; margin-left: -1px; background: #F7C948; }
.ln-lanterns i:nth-child(2) { left: auto; right: 8%; top: 10px; }
.ln-lanterns i:nth-child(3) { left: 24%; top: 30px; scale: 0.7; }
.ln-sparks { inset: 0; }
.ln-sparks i { left: var(--x); top: -8px; width: 5px; height: 5px; background: #F7C948; scale: var(--s); animation: xm-fall var(--d) linear var(--dl) infinite; }
@keyframes ln-sway { from { transform: rotate(-6deg); } to { transform: rotate(6deg); } }

/* ---------- Valentine's: rising hearts ---------- */
.vibe--valentines .mini { --bg: #FFE4EC; --fg: #5C0A26; --mut: #A23B5C; --btn: #E11D48; --btnfg: #FFFFFF; --rad: 999px; --hl: #FF8FAB; --font: 'Nunito', var(--sans); }
.vibe--valentines .bg { background: linear-gradient(180deg, #FFD1DF, #FFE9F0 55%, #FFD6E2); }
.vibe--valentines .mini__name { font-family: 'Playfair Display', serif; font-size: 20px; font-style: italic; font-weight: 900; color: #C8103E; }
.vibe--valentines .mini__link { font-weight: 800; box-shadow: 0 6px 14px -8px rgba(225, 29, 72, 0.6); }
.vibe--valentines .mini__link--hl { background: #FFFFFF; border-color: #E11D48; color: #E11D48; }
.vd-hearts { inset: 0; }
.vd-hearts i { left: var(--x); bottom: -16px; width: 14px; height: 13px; background: #FF4D79; scale: var(--s); opacity: 0.7; animation: vd-rise var(--d) ease-in var(--dl) infinite; }
.vd-hearts i:nth-child(3n) { background: #FF8FAB; }
.vd-hearts i:nth-child(3n + 1) { background: #E11D48; }
@keyframes vd-rise { 0% { transform: translate(0, 0) rotate(-10deg); opacity: 0; } 15% { opacity: 0.8; } 50% { transform: translate(-12px, -300px) rotate(10deg); } 100% { transform: translate(10px, -620px) rotate(-8deg); opacity: 0; } }

/* ---------- Holi: drifting colour clouds, floating gulal ---------- */
.vibe--holi .mini { --bg: #FFF8EC; --fg: #2A1A3D; --mut: #5E4B6E; --btn: #FF3CAC; --btnfg: #FFFFFF; --rad: 16px; --hl: #FFD60A; --font: 'Nunito', var(--sans); }
.vibe--holi .bg { background: #FFF8EC; }
.vibe--holi .mini__name { font-family: 'Bangers', var(--sans); font-size: 24px; font-weight: 400; letter-spacing: 0.04em; background: linear-gradient(90deg, #FF3CAC, #FB5607, #E0A800, #2EC4B6, #3A86FF); -webkit-background-clip: text; background-clip: text; color: transparent; }
.vibe--holi .mini__link { font-weight: 800; }
.vibe--holi .mini:not([style*="--btn"]) .mini__links > :nth-child(4n + 2) .mini__link { --btn: #3A86FF; }
.vibe--holi .mini:not([style*="--btn"]) .mini__links > :nth-child(4n + 3) .mini__link { --btn: #FB5607; }
.vibe--holi .mini:not([style*="--btn"]) .mini__links > :nth-child(4n) .mini__link { --btn: #0F8A80; } /* deep teal: white text stays readable (was #2EC4B6, 2.2:1) */
.vibe--holi .mini__link--hl { background: #FFD60A; border-color: #FFD60A; color: #2A1A3D; }
.hl-splash { inset: 0; }
.hl-splash i { left: calc(var(--i) * 22% - 14%); top: calc(var(--i) * 19% - 8%); width: 150px; height: 150px; border-radius: 50%; background: #FF3CAC; filter: blur(22px); opacity: 0.45; animation: hl-drift 10s ease-in-out infinite alternate; animation-delay: calc(var(--i) * -2s); }
.hl-splash i:nth-child(2) { background: #FFD60A; }
.hl-splash i:nth-child(3) { background: #2EC4B6; }
.hl-splash i:nth-child(4) { background: #3A86FF; }
.hl-splash i:nth-child(5) { background: #FB5607; }
.hl-dust { inset: 0; }
.hl-dust i { left: var(--x); bottom: -6px; width: 4px; height: 4px; border-radius: 50%; background: hsl(calc(var(--s) * 400deg) 90% 58%); scale: var(--s); animation: fest-rise var(--d) ease-in var(--dl) infinite; }
@keyframes hl-drift { to { transform: translate(18px, -14px) scale(1.15); } }

/* ---------- Eid: crescent moon, lanterns, stars, a geometric pattern ---------- */
.vibe--eid .mini { --bg: #062A2E; --fg: #FDF6E3; --mut: #CFE3D9; --btn: #D4AF37; --btnfg: #062A2E; --rad: 12px; --hl: #F3D98B; --font: 'DM Sans', var(--sans); }
.vibe--eid .bg { background: radial-gradient(120% 70% at 70% 0%, #0F4A4F, #062A2E 55%, #031A1D); }
.vibe--eid .mini__name { font-family: 'Cinzel', serif; font-size: 18px; font-weight: 900; color: #F3D98B; }
.vibe--eid .mini__link { font-weight: 700; }
.vibe--eid .mini__link--hl { background: transparent; border-color: #D4AF37; color: #F3D98B; box-shadow: 0 0 14px rgba(212, 175, 55, 0.45); }
.ed-pattern { inset: 0; background: conic-gradient(from 45deg, transparent 0 25%, rgba(212, 175, 55, 0.08) 0 50%, transparent 0 75%, rgba(212, 175, 55, 0.08) 0) 0 0 / 28px 28px; -webkit-mask: linear-gradient(to top, #000, transparent 65%); mask: linear-gradient(to top, #000, transparent 65%); }
.ed-moon { right: 24px; top: 34px; width: 44px; height: 44px; border-radius: 50%; box-shadow: inset -12px 4px 0 0 #F3D98B; filter: drop-shadow(0 0 10px rgba(243, 217, 139, 0.6)); transform: rotate(-20deg); }
.ed-lanterns { inset: 0; }
.ed-lanterns i { left: calc(8% + var(--i) * 4%); top: 0; width: 16px; height: 28px; background: radial-gradient(circle at 50% 60%, #FFF2C0, #D4AF37 60%, #8A6A12); clip-path: polygon(30% 0, 70% 0, 100% 30%, 85% 100%, 15% 100%, 0 30%); transform-origin: 50% 0; animation: ln-sway 3.4s ease-in-out infinite alternate; animation-delay: calc(var(--i) * -1.2s); }
.ed-lanterns i:nth-child(2) { left: 18%; top: 18px; scale: 0.75; }
.ed-stars { inset: 0; }
.ed-stars i { left: var(--x); top: calc((var(--s) - 0.6) * 70%); width: 7px; height: 7px; background: #F3D98B; animation: fest-twinkle var(--d) ease-in-out var(--dl) infinite; }

/* ======================================================================================================
   More festivals, drafts of 28 Oct 2026: each one shows only in its own season (Theme::seasonEnds).
   ====================================================================================================== */
.fx--confetti { height: calc(var(--w) * 0.45); border-radius: 1px; }
.fx--leaf { border-radius: 0 100% 0 100%; }
.fx--drop { border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%; background: radial-gradient(circle at 35% 30%, #FFFFFF, var(--c) 55%); }
.vibe .bg .fs-row i, .vibe .bg .fs-fall i, .vibe .bg .fs-rise i, .vibe .bg .fs-twinkle i { position: absolute; display: block; }
.fs-row, .fs-fall, .fs-rise, .fs-twinkle { inset: 0; }
.fs-fall i { left: var(--x); top: 0; scale: var(--s); animation: dz-fall calc(var(--d) * 1.3) linear var(--dl) infinite; }
.fs-rise i { left: var(--x); top: 100%; scale: var(--s); animation: ap-rise calc(var(--d) * 2) linear var(--dl) infinite; }
.fs-twinkle i { left: var(--x); top: calc((var(--s) - 0.6) * 70%); animation: fest-twinkle var(--d) ease-in-out var(--dl) infinite; }
.fs-grain { inset: 0; opacity: 0.22; mix-blend-mode: multiply; background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3'/%3E%3CfeColorMatrix values='0 0 0 0 0.2 0 0 0 0 0.1 0 0 0 0 0.3 0 0 0 0.9 0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E"); }

/* ---- Spooky Cute (Halloween season): a cosy grainy storybook night. Lavender sky, cream clouds, flapping bats,
   grinning pumpkins and a little ghost bobbing along ---- */
.vibe--spooky-cute .mini { --bg: #704F94; --fg: #FFF4E4; --mut: #E8D8C4; --btn: #DCC2A7; --btnfg: #381E75; --rad: 16px; --hl: #963D23; --font: 'Nunito', var(--sans); }
.vibe--spooky-cute .bg { background: radial-gradient(120% 80% at 50% 0%, #8462AA, #704F94 50%, #5A3D80); }
.sc-cloud { width: 70px; height: 20px; border-radius: 999px; background: #F4E9DB; box-shadow: 18px -9px 0 2px #F4E9DB, -14px -5px 0 0 #F4E9DB; animation: pc-drift 34s linear infinite; }
.sc-cloud--a { top: 3%; left: -30%; } .sc-cloud--b { top: 12%; left: -70%; animation-delay: -17s; scale: 0.7; }
.sc-bats i { left: var(--x); top: calc(var(--s) * 9%); width: 40px; height: 22px; scale: var(--s); background: #120D08; animation: sc-flap 0.5s ease-in-out infinite alternate, dz-bob 3s ease-in-out var(--dl) infinite; }
@keyframes sc-flap { to { transform: scaleY(0.6); } }
.sc-ghost { z-index: 1; left: 9%; top: 76px; width: 48px; height: 56px; border-radius: 50% 50% 0 0; background: #FFF8EE; animation: dz-bob 2.6s ease-in-out infinite;
  -webkit-mask: radial-gradient(circle 6px at 8px 100%, #0000 98%, #000) 0 0 / 16px 100% repeat-x; mask: radial-gradient(circle 6px at 8px 100%, #0000 98%, #000) 0 0 / 16px 100% repeat-x; }
.sc-ghost::before { content: ''; position: absolute; left: 13px; top: 18px; width: 6px; height: 8px; border-radius: 50%; background: #120D08; box-shadow: 14px 0 0 #120D08; }
.sc-pumpkins i { bottom: 6px; width: 46px; height: 36px; border-radius: 48% 48% 44% 44%; background: radial-gradient(circle at 50% 40%, #D9622E, #963D23 75%); box-shadow: inset 8px 0 0 -4px rgba(0, 0, 0, 0.15), inset -8px 0 0 -4px rgba(0, 0, 0, 0.15); }
.sc-pumpkins i::before { content: ''; position: absolute; left: 50%; top: -6px; width: 5px; height: 9px; margin-left: -2px; border-radius: 2px; background: #3F5A2A; }
.sc-pumpkins i::after { content: ''; position: absolute; left: 12px; top: 13px; width: 22px; height: 12px; background: #FFD27A; clip-path: polygon(0 0, 30% 0, 15% 40%, 70% 0, 100% 0, 85% 40%, 100% 60%, 80% 100%, 60% 70%, 40% 100%, 20% 70%, 0 60%); }
.sc-pumpkins i:nth-child(1) { left: 8%; } .sc-pumpkins i:nth-child(2) { left: 30%; scale: 0.75; bottom: 2px; } .sc-pumpkins i:nth-child(3) { right: 8%; scale: 0.9; }
.sc-hill { left: -10%; right: -10%; bottom: -16px; height: 48px; border-radius: 50%; background: #422687; }
.sc-pumpkins { inset: 0; }
.vibe .bg .sc-pumpkins i { position: absolute; display: block; }
.vibe--spooky-cute .mini__name { font-weight: 900; font-size: 22px; color: #FFF4E4; text-shadow: 0 3px 0 #381E75; }
.vibe--spooky-cute .mini__link { font-weight: 800; box-shadow: 0 4px 0 #5A2136; border: 0; }
.vibe--spooky-cute .mini__link--hl { background: #963D23; color: #FFF4E4; }

/* ---- Día de los Muertos: marigold petals, papel picado, candles ---- */
.vibe--dia-de-muertos .mini { --bg: #2B0F3A; --fg: #FFF1E0; --mut: #F5C9A8; --btn: #FF8A00; --btnfg: #2B0F3A; --rad: 12px; --hl: #FF2E88; --font: 'DM Sans', var(--sans); }
.vibe--dia-de-muertos .bg { background: radial-gradient(100% 60% at 50% 100%, #6B1E5A, #2B0F3A 70%); }
.dm-picado { left: 0; right: 0; top: 0; height: 46px; background: linear-gradient(90deg, #FF2E88 0 20%, #FFB800 0 40%, #2EC4B6 0 60%, #8B5CF6 0 80%, #FF5A1F 0); transform-origin: top; animation: ln-sway 3s ease-in-out infinite alternate;
  clip-path: polygon(0 0, 100% 0, 100% 80%, 95% 100%, 90% 80%, 85% 100%, 80% 80%, 75% 100%, 70% 80%, 65% 100%, 60% 80%, 55% 100%, 50% 80%, 45% 100%, 40% 80%, 35% 100%, 30% 80%, 25% 100%, 20% 80%, 15% 100%, 10% 80%, 5% 100%, 0 80%); }
.dm-petals i { width: 10px; height: 10px; border-radius: 50% 0; background: #FF9F1C; }
.dm-petals i:nth-child(2n) { background: #FFC300; }
.dm-candles i { bottom: 0; left: calc(10% + var(--i) * 20%); width: 12px; height: 34px; background: #FFF1E0; border-radius: 2px; }
.dm-candles i::before { content: ''; position: absolute; left: 1px; top: -14px; width: 10px; height: 14px; border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%; background: radial-gradient(circle at 50% 70%, #FFF6C2, #FFB000 60%, transparent 70%); animation: hk-flick 0.9s ease-in-out infinite alternate; }
.dm-candles { inset: 0; } .vibe .bg .dm-candles i { position: absolute; display: block; }
.vibe--dia-de-muertos .mini__name { font-family: 'Righteous', var(--sans); font-weight: 400; font-size: 21px; color: #FFB800; }
.vibe--dia-de-muertos .mini__link--hl { background: #FF2E88; color: #FFFFFF; border-color: #FF2E88; }

/* ---- Thanksgiving: autumn leaves on a warm harvest sky ---- */
.vibe--thanksgiving .mini { --bg: #FBE7C6; --fg: #4A2410; --mut: #7A4A2A; --btn: #FFFFFF; --btnfg: #6B2E0E; --rad: 14px; --hl: #C2410C; --font: 'DM Sans', var(--sans); }
.vibe--thanksgiving .bg { background: linear-gradient(180deg, #FFD9A0, #FBE7C6 50%, #E7B77A); }
.tg-leaves i { width: 16px; height: 16px; border-radius: 0 100% 0 100%; background: #C2410C; }
.tg-leaves i:nth-child(3n) { background: #E8A317; } .tg-leaves i:nth-child(3n+1) { background: #8C2F0E; }
.tg-field { left: -10%; right: -10%; bottom: -10%; height: 26%; border-radius: 50% 50% 0 0; background: repeating-linear-gradient(95deg, #C98A3A 0 3px, #B8762C 3px 7px); }
.vibe--thanksgiving .mini__name { font-family: 'Playfair Display', serif; font-weight: 900; font-size: 21px; }
.vibe--thanksgiving .mini__link--hl { background: #C2410C; color: #FFFFFF; border-color: #C2410C; }

/* ---- Hanukkah: a nine-branch menorah with flickering flames, silver stars on blue ---- */
.vibe--hanukkah .mini { --bg: #0B2A6B; --fg: #FFFFFF; --mut: #C7D6F5; --btn: rgba(255, 255, 255, 0.12); --btnfg: #FFFFFF; --rad: 12px; --hl: #9EC5FF; --font: 'DM Sans', var(--sans); }
.vibe--hanukkah .bg { background: radial-gradient(90% 60% at 50% 100%, #1D4FB8, #0B2A6B 65%, #061640); }
.hk-candles { left: 50%; bottom: 34px; width: 180px; margin-left: -90px; height: 60px; }
.hk-candles::after { content: ''; position: absolute; left: 0; right: 0; bottom: -8px; height: 6px; border-radius: 3px; background: linear-gradient(90deg, #C9D3E6, #FFFFFF, #C9D3E6); }
.hk-candles i { position: absolute; bottom: 0; left: calc(var(--i) * 20px + 4px); width: 8px; height: 36px; border-radius: 2px; background: #E6EDFA; }
.hk-candles i:nth-child(5) { height: 50px; }
.hk-candles i::before { content: ''; position: absolute; left: -1px; top: -13px; width: 10px; height: 13px; border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%; background: radial-gradient(circle at 50% 70%, #FFF6C2, #FFC23D 60%, transparent 70%); animation: hk-flick 0.8s ease-in-out infinite alternate; animation-delay: calc(var(--i) * -0.13s); }
@keyframes hk-flick { from { transform: scale(1) rotate(-3deg); } to { transform: scale(1.15, 0.92) rotate(3deg); } }
.hk-stars i { width: 9px; height: 9px; background: #DCE6FA; -webkit-mask: var(--m-star) center / contain no-repeat; mask: var(--m-star) center / contain no-repeat; }
.vibe--hanukkah .mini__name { font-family: 'Cinzel', serif; font-weight: 900; font-size: 19px; color: #E6EDFA; }
.vibe--hanukkah .mini__link { border: 1px solid rgba(158, 197, 255, 0.45); }
.vibe--hanukkah .mini__link--hl { background: #E6EDFA; color: #0B2A6B; }

/* ---- Songkran: the water festival. Splashes, rising bubbles, a cool blue wash ---- */
.vibe--songkran .mini { --bg: #CFF3FF; --fg: #063A52; --mut: #2F6A82; --btn: #FFFFFF; --btnfg: #0369A1; --rad: 999px; --hl: #0EA5E9; --font: 'Nunito', var(--sans); }
.vibe--songkran .bg { background: linear-gradient(180deg, #8FE3FF, #D8F6FF 50%, #FFE7F1); }
.sk-wave { left: -10%; right: -10%; bottom: 0; height: 22%; background: radial-gradient(circle at 50% 0, transparent 14px, #38BDF8 15px) 0 0 / 40px 40px repeat-x; animation: uk-roll2 3s linear infinite; }
.sk-wave--b { bottom: -10px; opacity: 0.6; animation-duration: 4.5s; animation-direction: reverse; }
@keyframes uk-roll2 { to { background-position: 40px 0; } }
.sk-drops i { width: 12px; height: 14px; border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%; background: radial-gradient(circle at 35% 30%, #FFFFFF, #7DD3FC 55%); }
.sk-flowers i { font-style: normal; font-size: 18px; }
.vibe--songkran .mini__name { font-weight: 900; font-size: 21px; }
.vibe--songkran .mini__link { border: 1.5px solid #BAE6FD; font-weight: 800; }
.vibe--songkran .mini__link--hl { background: #0284C7; color: #FFFFFF; border-color: #0284C7; } /* deep enough for white text (was #0EA5E9, 2.8:1) */

/* ---- Oktoberfest: the blue-and-white diamond pattern and swaying bunting ---- */
.vibe--oktoberfest .mini { --bg: #F5F9FF; --fg: #0C2A5B; --mut: #3A5788; --btn: #FFFFFF; --btnfg: #0C2A5B; --rad: 10px; --hl: #1F6FD1; --font: 'DM Sans', var(--sans); }
.vibe--oktoberfest .bg { background: conic-gradient(from 45deg, #1F6FD1 25%, #FFFFFF 0 50%, #1F6FD1 0 75%, #FFFFFF 0) 0 0 / 30px 30px; }
.ok-fade { inset: 0; background: linear-gradient(180deg, rgba(245, 249, 255, 0.35), rgba(245, 249, 255, 0.92) 30%, rgba(245, 249, 255, 0.92) 85%, rgba(245, 249, 255, 0.4)); }
.ok-bunting { left: -4%; right: -4%; top: 6px; height: 24px; transform-origin: top; animation: ln-sway 3s ease-in-out infinite alternate; background: repeating-linear-gradient(90deg, #1F6FD1 0 22px, #FFFFFF 22px 44px); clip-path: polygon(0 0, 100% 0, 100% 10%, 0 10%); -webkit-mask: conic-gradient(from 135deg at 50% 100%, transparent 0 90deg, #000 0) 0 0 / 22px 24px repeat-x; mask: conic-gradient(from 135deg at 50% 100%, transparent 0 90deg, #000 0) 0 0 / 22px 24px repeat-x; clip-path: none; }
.vibe--oktoberfest .mini__name { font-family: 'Playfair Display', serif; font-weight: 900; font-size: 22px; }
.vibe--oktoberfest .mini__link { border: 1.5px solid #C6D7F2; font-weight: 700; }
.vibe--oktoberfest .mini__link--hl { background: #1F6FD1; color: #FFFFFF; border-color: #1F6FD1; }

/* ---- Carnival: confetti rain, feather fans, samba colours ---- */
.vibe--carnival .mini { --bg: #3A0CA3; --fg: #FFFFFF; --mut: #F0D9FF; --btn: #FFFFFF; --btnfg: #3A0CA3; --rad: 999px; --hl: #FFD60A; --font: 'DM Sans', var(--sans); }
.vibe--carnival .bg { background: radial-gradient(80% 50% at 50% 0%, #F72585, transparent 70%), radial-gradient(80% 50% at 0% 100%, #4CC9F0, transparent 70%), #3A0CA3; }
.cv-confetti i { width: 8px; height: 4px; border-radius: 1px; background: #FFD60A; }
.cv-confetti i:nth-child(4n) { background: #4CC9F0; } .cv-confetti i:nth-child(4n+1) { background: #F72585; } .cv-confetti i:nth-child(4n+2) { background: #80FFDB; }
.cv-fan { bottom: -30px; width: 150px; height: 150px; border-radius: 50%; background: repeating-conic-gradient(from -90deg at 50% 100%, #F72585 0 12deg, #FFD60A 12deg 24deg, #4CC9F0 24deg 36deg); -webkit-mask: radial-gradient(circle at 50% 100%, #000 69%, transparent 70%); mask: radial-gradient(circle at 50% 100%, #000 69%, transparent 70%); transform-origin: 50% 100%; animation: ln-sway 2.4s ease-in-out infinite alternate; }
.cv-fan--a { left: -40px; } .cv-fan--b { right: -40px; animation-delay: -1.2s; }
.vibe--carnival .mini__name { font-family: 'Bangers', var(--sans); font-weight: 400; font-size: 28px; letter-spacing: 0.05em; color: #FFD60A; text-shadow: 3px 3px 0 #F72585; }
.vibe--carnival .mini__link { font-weight: 800; border: 0; }
.vibe--carnival .mini__link--hl { background: #FFD60A; color: #3A0CA3; }

/* ---- Mid-Autumn: a full moon, floating paper lanterns, drifting clouds ---- */
.vibe--mid-autumn .mini { --bg: #10133A; --fg: #FFF3D6; --mut: #E2CFA8; --btn: rgba(255, 243, 214, 0.1); --btnfg: #FFF3D6; --rad: 12px; --hl: #FF7A45; --font: 'DM Sans', var(--sans); }
.vibe--mid-autumn .bg { background: radial-gradient(90% 60% at 50% 0%, #2A2F7A, #10133A 70%); }
.ma-moon { right: 12%; top: 26px; width: 84px; height: 84px; border-radius: 50%; background: radial-gradient(circle at 40% 35%, #FFF8E1, #FFE29A 70%); box-shadow: 0 0 40px rgba(255, 226, 154, 0.6); }
.ma-lanterns i { width: 18px; height: 22px; border-radius: 40%; background: radial-gradient(circle at 50% 45%, #FFD08A, #FF5A36 70%); box-shadow: 0 0 14px rgba(255, 122, 69, 0.7); }
.ma-cloud { left: -20%; top: 24%; width: 160px; height: 24px; border-radius: 999px; background: rgba(255, 243, 214, 0.14); animation: pc-drift 30s linear infinite; }
.vibe--mid-autumn .mini__name { font-family: 'Cinzel', serif; font-weight: 900; font-size: 19px; color: #FFE29A; }
.vibe--mid-autumn .mini__link { border: 1px solid rgba(255, 226, 154, 0.4); }
.vibe--mid-autumn .mini__link--hl { background: #FF7A45; color: #10133A; border-color: #FF7A45; }

/* ---- St Patrick's Day: shamrocks, a rainbow, gold ---- */
.vibe--st-patricks .mini { --bg: #0E5E2E; --fg: #FFFFFF; --mut: #CFEFD6; --btn: #FFFFFF; --btnfg: #0E5E2E; --rad: 999px; --hl: #F5C542; --font: 'DM Sans', var(--sans); }
.vibe--st-patricks .bg { background: radial-gradient(90% 60% at 50% 0%, #1F9C4E, #0E5E2E 70%); }
.sp-rainbow { left: -30%; right: -30%; bottom: -40%; height: 70%; border-radius: 50% 50% 0 0; background: radial-gradient(circle at 50% 100%, transparent 44%, #A78BFA 44% 47%, #60A5FA 47% 50%, #34D399 50% 53%, #FDE047 53% 56%, #FB923C 56% 59%, #F87171 59% 62%, transparent 62%); opacity: 0.55; }
.sp-clover i { font-style: normal; font-size: 18px; }
.vibe--st-patricks .mini__name { font-family: 'Righteous', var(--sans); font-weight: 400; font-size: 21px; color: #F5C542; }
.vibe--st-patricks .mini__link { font-weight: 800; border: 0; }
.vibe--st-patricks .mini__link--hl { background: #F5C542; color: #0E5E2E; }

/* ---- Earth Day: a turning planet, leaves drifting up ---- */
.vibe--earth-day .mini { --bg: #E8F7EE; --fg: #0F3D2A; --mut: #3E6B55; --btn: #FFFFFF; --btnfg: #0F3D2A; --rad: 999px; --hl: #16A34A; --font: 'Nunito', var(--sans); }
.vibe--earth-day .bg { background: linear-gradient(180deg, #CDEFFF, #E8F7EE 55%, #CBEBC9); }
.ed-earth { left: 50%; top: 28px; width: 110px; height: 110px; margin-left: -55px; border-radius: 50%; box-shadow: inset -14px -8px 0 rgba(0, 0, 0, 0.14), 0 10px 30px -10px rgba(15, 61, 42, 0.5);
  background: radial-gradient(ellipse 22px 14px at 30% 40%, #22C55E 98%, transparent), radial-gradient(ellipse 16px 24px at 70% 60%, #22C55E 98%, transparent), radial-gradient(ellipse 12px 9px at 55% 22%, #22C55E 98%, transparent), #3B82F6; background-size: 110px 110px; animation: ed-spin 12s linear infinite; }
@keyframes ed-spin { to { background-position: 110px 0, 110px 0, 110px 0, 0 0; } }
.ed-leaves i { width: 14px; height: 14px; border-radius: 0 100% 0 100%; background: #22C55E; }
.ed-leaves i:nth-child(2n) { background: #84CC16; }
.vibe--earth-day .mini__name { font-weight: 900; font-size: 21px; }
.vibe--earth-day .mini__link { border: 1.5px solid #BFE5CC; font-weight: 800; }
.vibe--earth-day .mini__link--hl { background: #16A34A; color: #FFFFFF; border-color: #16A34A; }

/* ---- Pride Month: waving rainbow stripes and rising hearts ---- */
.vibe--pride .mini { --bg: #1A1033; --fg: #FFFFFF; --mut: #E5DAFF; --btn: rgba(255, 255, 255, 0.14); --btnfg: #FFFFFF; --rad: 999px; --hl: #FFFFFF; --font: 'DM Sans', var(--sans); }
.vibe--pride .bg { background: #1A1033; }
.pr-flag { left: -20%; right: -20%; top: -12%; height: 34%; background: linear-gradient(180deg, #E40303 0 16.6%, #FF8C00 0 33.3%, #FFED00 0 50%, #008026 0 66.6%, #004DFF 0 83.3%, #750787 0); transform: skewY(-10deg); animation: pr-wave 4s ease-in-out infinite alternate; -webkit-mask: linear-gradient(180deg, #000 60%, transparent); mask: linear-gradient(180deg, #000 60%, transparent); opacity: 0.85; }
@keyframes pr-wave { to { transform: skewY(-4deg) translateY(6px); } }
.pr-hearts i { width: 14px; height: 14px; background: #FF5FA2; -webkit-mask: var(--m-heart) center / contain no-repeat; mask: var(--m-heart) center / contain no-repeat; }
.pr-hearts i:nth-child(3n) { background: #FFED00; } .pr-hearts i:nth-child(3n+1) { background: #6EE7F9; }
.vibe--pride .mini__name { font-weight: 800; font-size: 21px; text-shadow: 0 2px 10px rgba(0, 0, 0, 0.5); }
.vibe--pride .mini__link { border: 1px solid rgba(255, 255, 255, 0.35); font-weight: 700; }
.vibe--pride .mini__link--hl { background: linear-gradient(90deg, #E40303, #FF8C00, #FFED00, #008026, #004DFF, #750787); color: #FFFFFF; border: 0; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); }

/* ---- Navratri: garba colours, mirror-work dots, dandiya sticks ---- */
.vibe--navratri .mini { --bg: #B0105F; --fg: #FFFFFF; --mut: #FFD9EA; --btn: #FFE14D; --btnfg: #6A0A39; --rad: 14px; --hl: #10B981; --font: 'DM Sans', var(--sans); }
.vibe--navratri .bg { background: radial-gradient(#FFE14D 1.5px, transparent 2px) 0 0 / 16px 16px, radial-gradient(#FFFFFF 1px, transparent 1.6px) 8px 8px / 16px 16px, linear-gradient(160deg, #E11D74, #B0105F 50%, #FF6B00); }
.nv-mirrors i { width: 10px; height: 10px; border-radius: 50%; background: radial-gradient(circle at 35% 35%, #FFFFFF, #C0C7D6 60%); box-shadow: 0 0 0 2px #10B981; }
.nv-sticks { left: 50%; bottom: 30px; width: 0; height: 0; }
.nv-sticks::before, .nv-sticks::after { content: ''; position: absolute; left: -40px; top: 0; width: 80px; height: 6px; border-radius: 3px; background: repeating-linear-gradient(90deg, #FFE14D 0 8px, #10B981 8px 16px, #FFFFFF 16px 20px); animation: nv-clap 0.6s ease-in-out infinite alternate; }
.nv-sticks::before { --r: 30deg; } .nv-sticks::after { --r: -30deg; }
@keyframes nv-clap { from { transform: rotate(var(--r)); } to { transform: rotate(calc(var(--r) * 0.4)); } }
.vibe--navratri .mini__name { font-family: 'Righteous', var(--sans); font-weight: 400; font-size: 21px; color: #FFE14D; text-shadow: 0 2px 0 #6A0A39; }
.vibe--navratri .mini__link { font-weight: 800; border: 0; box-shadow: 0 4px 0 #6A0A39; }
.vibe--navratri .mini__link--hl { background: #059669; color: #FFFFFF; } /* deep enough for white text (was #10B981, 2.5:1) */

@media (prefers-reduced-motion: reduce) {
  .vibe--fest .bg *, .vibe--fest .bg *::before, .vibe--fest .mini__name, .vibe--fest .mini__link--hl { animation: none !important; }
  .ny-bursts i { opacity: 0.5; }
}
.sc-bats i { -webkit-mask: var(--m-bat) center / contain no-repeat; mask: var(--m-bat) center / contain no-repeat; }
