{"id":207,"date":"2026-03-25T07:53:08","date_gmt":"2026-03-25T07:53:08","guid":{"rendered":"https:\/\/freedomfest.visiondesigning.com\/?page_id=207"},"modified":"2026-04-17T10:30:19","modified_gmt":"2026-04-17T10:30:19","slug":"home","status":"publish","type":"page","link":"https:\/\/sandbarvibes.us\/","title":{"rendered":"FREEDOM FEST"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"207\" class=\"elementor elementor-207\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-eec06a9 e-flex e-con-boxed e-con e-parent\" data-id=\"eec06a9\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6c6705d elementor-widget-tablet__width-initial elementor-widget elementor-widget-image\" data-id=\"6c6705d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"874\" height=\"285\" src=\"https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/Gemini_Generated_Image_r3qnvor3qnvor3qn-removebg-preview.png\" class=\"attachment-full size-full wp-image-10\" alt=\"\" srcset=\"https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/Gemini_Generated_Image_r3qnvor3qnvor3qn-removebg-preview.png 874w, https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/Gemini_Generated_Image_r3qnvor3qnvor3qn-removebg-preview-300x98.png 300w, https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/Gemini_Generated_Image_r3qnvor3qnvor3qn-removebg-preview-768x250.png 768w\" sizes=\"(max-width: 874px) 100vw, 874px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9cb8cb3 e-con-full e-flex e-con e-parent\" data-id=\"9cb8cb3\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5138a991 e-flex e-con-boxed e-con e-parent\" data-id=\"5138a991\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-485372b0 elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-countdown--label-block elementor-widget elementor-widget-countdown\" data-id=\"485372b0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"countdown.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-countdown-wrapper\" data-date=\"1783123140\">\n\t\t\t<div class=\"elementor-countdown-item\"><span class=\"elementor-countdown-digits elementor-countdown-days\"><\/span> <span class=\"elementor-countdown-label\">Days<\/span><\/div><div class=\"elementor-countdown-item\"><span class=\"elementor-countdown-digits elementor-countdown-hours\"><\/span> <span class=\"elementor-countdown-label\">Hours<\/span><\/div><div class=\"elementor-countdown-item\"><span class=\"elementor-countdown-digits elementor-countdown-minutes\"><\/span> <span class=\"elementor-countdown-label\">Minutes<\/span><\/div><div class=\"elementor-countdown-item\"><span class=\"elementor-countdown-digits elementor-countdown-seconds\"><\/span> <span class=\"elementor-countdown-label\">Seconds<\/span><\/div>\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a9574fd e-con-full e-flex e-con e-parent\" data-id=\"a9574fd\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4ce13235 elementor-widget elementor-widget-heading\" data-id=\"4ce13235\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">SPONSORS OF THE FEST<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b1f20d7 e-flex e-con-boxed e-con e-parent\" data-id=\"b1f20d7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-7185bda3 e-con-full e-flex e-con e-child\" data-id=\"7185bda3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e7612d7 elementor-widget-mobile__width-initial elementor-widget elementor-widget-image\" data-id=\"e7612d7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/www.facebook.com\/share\/g\/1DNdnuvEjZ\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"500\" height=\"500\" src=\"https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-1.jpg\" class=\"attachment-full size-full wp-image-156\" alt=\"\" srcset=\"https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-1.jpg 500w, https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-1-300x300.jpg 300w, https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-1-150x150.jpg 150w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-79fe1643 e-con-full e-flex e-con e-child\" data-id=\"79fe1643\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a9985bd elementor-widget-mobile__width-initial elementor-widget elementor-widget-image\" data-id=\"a9985bd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/www.harborsiderealtyfl.com\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"500\" height=\"500\" src=\"https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-3.jpg\" class=\"attachment-full size-full wp-image-154\" alt=\"\" srcset=\"https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-3.jpg 500w, https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-3-300x300.jpg 300w, https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-3-150x150.jpg 150w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-969a1ed e-con-full e-flex e-con e-child\" data-id=\"969a1ed\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-08d4d3b elementor-widget-mobile__width-initial elementor-widget elementor-widget-image\" data-id=\"08d4d3b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/skipjackoutfitters.com\/\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"500\" src=\"https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-4.jpg\" class=\"attachment-full size-full wp-image-153\" alt=\"\" srcset=\"https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-4.jpg 500w, https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-4-300x300.jpg 300w, https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-4-150x150.jpg 150w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7dca66bd e-con-full e-flex e-con e-child\" data-id=\"7dca66bd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6f61f509 elementor-widget-mobile__width-initial elementor-widget elementor-widget-image\" data-id=\"6f61f509\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/www.thehandyguyhomeservices.com\/\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"500\" src=\"https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-2.jpg\" class=\"attachment-full size-full wp-image-155\" alt=\"\" srcset=\"https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-2.jpg 500w, https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-2-300x300.jpg 300w, https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-2-150x150.jpg 150w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2347aa41 e-con-full e-flex e-con e-child\" data-id=\"2347aa41\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6c42e01 elementor-widget-mobile__width-initial elementor-widget elementor-widget-image\" data-id=\"6c42e01\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/visiondesigning.com\/\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"500\" src=\"https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-5.jpg\" class=\"attachment-full size-full wp-image-152\" alt=\"\" srcset=\"https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-5.jpg 500w, https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-5-300x300.jpg 300w, https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/03\/01Artboard-5-150x150.jpg 150w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-09a273f e-flex e-con-boxed e-con e-parent\" data-id=\"09a273f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c58bca9 elementor-widget elementor-widget-html\" data-id=\"c58bca9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n  \/* Base Reset for the container *\/\r\n  .premium-song-request, .premium-song-request * {\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  \/* Premium Dark Container *\/\r\n  .premium-song-request {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    background: linear-gradient(135deg, #0A192F 0%, #061124 100%);\r\n    border: 1px solid rgba(255, 255, 255, 0.1);\r\n    border-radius: 16px; \r\n    padding: 35px 45px;\r\n    width: 100%; \r\n    max-width: 680px; \r\n    margin: 40px auto;\r\n    font-family: 'Montserrat', 'Segoe UI', Helvetica, Arial, sans-serif;\r\n    position: relative;\r\n    \/* Animation is active here for all devices *\/\r\n    animation: zoomInOutPulse 4s infinite ease-in-out;\r\n  }\r\n\r\n  \/* Zoom In and Out Keyframes *\/\r\n  @keyframes zoomInOutPulse {\r\n    0% { transform: scale(1); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15); }\r\n    50% { transform: scale(1.03); box-shadow: 0 15px 40px rgba(211, 47, 47, 0.25); }\r\n    100% { transform: scale(1); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15); }\r\n  }\r\n\r\n  \/* Left column *\/\r\n  .psr-left {\r\n    flex: 1;\r\n    text-align: left;\r\n    padding-right: 30px; \r\n  }\r\n\r\n  .psr-left h3 {\r\n    color: #ffffff;\r\n    font-size: 26px;\r\n    font-weight: 700;\r\n    margin: 0 0 8px 0;\r\n    letter-spacing: 0.5px;\r\n  }\r\n\r\n  .psr-left p {\r\n    color: #A8B2C1; \r\n    font-size: 15px;\r\n    margin: 0 0 25px 0;\r\n    line-height: 1.5;\r\n  }\r\n\r\n  \/* Modern button styling *\/\r\n  .psr-btn {\r\n    display: inline-block;\r\n    background-color: #D32F2F; \r\n    color: #ffffff !important;\r\n    padding: 14px 32px;\r\n    text-decoration: none;\r\n    border-radius: 6px; \r\n    font-weight: 700;\r\n    font-size: 14px;\r\n    text-transform: uppercase;\r\n    letter-spacing: 1px;\r\n    transition: all 0.3s ease;\r\n    box-shadow: 0 4px 15px rgba(211, 47, 47, 0.3);\r\n    text-align: center;\r\n  }\r\n\r\n  .psr-btn:hover {\r\n    background-color: #E53935;\r\n    box-shadow: 0 6px 20px rgba(211, 47, 47, 0.6);\r\n  }\r\n\r\n  \/* Right column *\/\r\n  .psr-right {\r\n    position: relative;\r\n    display: flex;\r\n    justify-content: center;\r\n  }\r\n\r\n  \/* QR Code styling *\/\r\n  .psr-qr {\r\n    width: 140px !important;\r\n    height: 140px !important;\r\n    max-width: 140px !important;\r\n    display: block;\r\n    border-radius: 8px;\r\n    background: #ffffff;\r\n    padding: 6px; \r\n    transition: transform 0.3s ease;\r\n  }\r\n\r\n  .psr-qr:hover {\r\n    transform: scale(1.05);\r\n  }\r\n\r\n  \/* --- RESPONSIVE BREAKPOINTS --- *\/\r\n\r\n  \/* Tablets and smaller screens (under 768px) *\/\r\n  @media (max-width: 768px) {\r\n    .premium-song-request {\r\n      flex-direction: column;\r\n      padding: 30px 25px;\r\n      margin: 20px auto;\r\n      \/* The animation rule has been removed from here so it keeps running! *\/\r\n      box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15);\r\n    }\r\n    \r\n    .psr-left {\r\n      text-align: center;\r\n      padding-right: 0;\r\n      margin-bottom: 25px;\r\n      width: 100%;\r\n    }\r\n\r\n    .psr-left h3 {\r\n      font-size: 22px; \r\n    }\r\n\r\n    .psr-left p {\r\n      font-size: 14px; \r\n    }\r\n\r\n    .psr-btn {\r\n      width: 100%; \r\n      padding: 16px 20px;\r\n    }\r\n\r\n    .psr-right {\r\n      width: 100%;\r\n      padding-top: 25px;\r\n      border-top: 1px solid rgba(255, 255, 255, 0.1); \r\n    }\r\n  }\r\n\r\n  \/* Very small mobile phones (under 400px) *\/\r\n  @media (max-width: 400px) {\r\n    .premium-song-request {\r\n      padding: 25px 15px;\r\n    }\r\n    .psr-qr {\r\n      width: 120px !important; \r\n      height: 120px !important;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<div class=\"premium-song-request\">\r\n  \r\n  <div class=\"psr-left\">\r\n    <h3>Set the Vibe<\/h3>\r\n    <p>Want to hear your favorite track? Scan the QR code or click below to submit your request directly to the DJ.<\/p>\r\n    <a href=\"https:\/\/djrequests.com\/songRequest?access_code=3169\" target=\"_blank\" class=\"psr-btn\">\r\n      Request Songs\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <div class=\"psr-right\">\r\n    <img decoding=\"async\" src=\"https:\/\/sandbarvibes.us\/wp-content\/uploads\/2026\/04\/SongQR.jpg\" alt=\"Scan to Request Songs\" class=\"psr-qr\">\r\n  <\/div>\r\n\r\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-24b871e3 e-con-full e-flex e-con e-parent\" data-id=\"24b871e3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-2ffae033 e-grid e-con-full e-con e-child\" data-id=\"2ffae033\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-432434ae elementor-widget elementor-widget-html\" data-id=\"432434ae\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n.ff-rf1-card {\r\n  border-radius: 18px; overflow: hidden;\r\n  border: 2px solid rgba(255,215,0,.28);\r\n  background: rgba(255,255,255,.05);\r\n  max-width: 560px; margin: 0 auto;\r\n}\r\n.ff-rf1-img { position: relative; height: 180px; }\r\n.ff-rf1-img img {\r\n  width: 100%; height: 100%; object-fit: cover;\r\n  display: block; filter: brightness(.55) saturate(1.2);\r\n}\r\n.ff-rf1-img-ov {\r\n  position: absolute; inset: 0;\r\n  background: linear-gradient(180deg, rgba(0,0,0,.1), rgba(0,24,74,.85));\r\n  display: flex; flex-direction: column;\r\n  justify-content: flex-end; padding: 1.2rem 1.3rem;\r\n}\r\n.ff-rf1-img-ov h3 {\r\n  font-family: 'Bebas Neue', sans-serif;\r\n  font-size: 1.9rem; color: #FFD700; line-height: 1; margin: 0;\r\n}\r\n.ff-rf1-spn {\r\n  font-family: 'Barlow Condensed', sans-serif;\r\n  font-size: .8rem; letter-spacing: .14em;\r\n  text-transform: uppercase; color: rgba(255,255,255,.6); margin-top: .15rem;\r\n}\r\n.ff-rf1-body { padding: 1.5rem; }\r\n.ff-rf1-prize {\r\n  background: rgba(255,215,0,.1); border: 1px solid rgba(255,215,0,.22);\r\n  border-radius: 9px; padding: .7rem .9rem;\r\n  font-size: .9rem; margin-bottom: 1.2rem; line-height: 1.5; color: #fff;\r\n}\r\n.ff-rf1-prize strong {\r\n  color: #FFD700; display: block;\r\n  font-family: 'Barlow Condensed', sans-serif;\r\n  font-size: .72rem; letter-spacing: .2em;\r\n  text-transform: uppercase; margin-bottom: .18rem;\r\n}\r\n.ff-rf1-form { display: flex; flex-direction: column; gap: .7rem; }\r\n\r\n.ff-rf1-field { display: flex; flex-direction: column; gap: .3rem; }\r\n.ff-rf1-field input {\r\n  background: rgba(255,255,255,.08);\r\n  border: 1px solid rgba(255,255,255,.2);\r\n  border-radius: 7px; padding: .7rem .9rem;\r\n  color: #fff; font-family: 'Barlow', sans-serif;\r\n  font-size: 16px !important; \/* <--- MOBILE ZOOM FIX APPLIED HERE *\/\r\n  outline: none;\r\n  transition: border-color .2s, background .2s; width: 100%;\r\n}\r\n.ff-rf1-field input:focus { border-color: #FFD700; }\r\n.ff-rf1-field input::placeholder { color: rgba(255,255,255,.38); }\r\n.ff-rf1-field input.err {\r\n  border-color: #ff4466 !important;\r\n  background: rgba(255,68,102,.1) !important;\r\n}\r\n.ff-rf1-field .ff-field-err {\r\n  display: none; font-size: .78rem;\r\n  color: #ff8899; padding-left: .3rem;\r\n  font-family: 'Barlow', sans-serif;\r\n}\r\n.ff-rf1-field .ff-field-err.show { display: block; }\r\n\r\n.ff-rf1-btn {\r\n  background: linear-gradient(90deg, #C8102E, #e8243f);\r\n  color: #fff; border: none; border-radius: 7px;\r\n  padding: .82rem; font-family: 'Barlow Condensed', sans-serif;\r\n  font-weight: 700; font-size: 1.05rem; letter-spacing: .1em;\r\n  text-transform: uppercase; cursor: pointer;\r\n  transition: transform .2s, box-shadow .2s; width: 100%;\r\n}\r\n.ff-rf1-btn:hover  { transform: scale(1.03); box-shadow: 0 5px 18px rgba(200,16,46,.5); }\r\n.ff-rf1-btn:disabled { opacity: .55; cursor: not-allowed; transform: none; box-shadow: none; }\r\n\r\n.ff-rf1-msg {\r\n  display: none; border-radius: 9px;\r\n  padding: .9rem 1rem; margin-top: .75rem;\r\n  font-family: 'Barlow Condensed', sans-serif;\r\n  font-size: .95rem; line-height: 1.55; text-align: center;\r\n}\r\n.ff-rf1-msg.show    { display: block; }\r\n.ff-rf1-msg.success { background: rgba(0,200,100,.1);  border: 1px solid rgba(0,200,100,.3);  color: #6effa0; }\r\n.ff-rf1-msg.error   { background: rgba(200,16,46,.1);  border: 1px solid rgba(200,16,46,.3);  color: #ff8899; }\r\n.ff-rf1-msg.warning { background: rgba(255,165,0,.1);  border: 1px solid rgba(255,165,0,.35); color: #ffc966; }\r\n.ff-rf1-msg.loading { background: rgba(255,255,255,.05); border: 1px solid rgba(255,255,255,.12); color: rgba(255,255,255,.6); }\r\n\r\n.ff-sp1 {\r\n  display: inline-block; width: 13px; height: 13px;\r\n  border: 2px solid rgba(255,255,255,.3); border-top-color: #fff;\r\n  border-radius: 50%; animation: ffs1 .7s linear infinite;\r\n  vertical-align: middle; margin-right: .4rem;\r\n}\r\n@keyframes ffs1 { to { transform: rotate(360deg); } }\r\n<\/style>\r\n\r\n<div class=\"ff-rf1-card\">\r\n  <div class=\"ff-rf1-img\">\r\n    <img decoding=\"async\" src=\"https:\/\/skipjackoutfitters.com\/wp-content\/uploads\/2023\/11\/MicrosoftTeams-image-4.png\" alt=\"Raffle 1\" loading=\"lazy\">\r\n    <div class=\"ff-rf1-img-ov\">\r\n      <h3>Raffle #1<\/h3>\r\n      <p class=\"ff-rf1-spn\">BY SKIPJACK OUTFITTERS<\/p>\r\n    <\/div>\r\n  <\/div>\r\n  <div class=\"ff-rf1-body\">\r\n    <div class=\"ff-rf1-prize\">\r\n      <strong>\ud83c\udfc6 Prize<\/strong>\r\n      Update this with Sponsor #1's actual prize details!\r\n    <\/div>\r\n\r\n    <div class=\"ff-rf1-form\" id=\"ff-r1-form\">\r\n      <div class=\"ff-rf1-field\">\r\n        <input type=\"text\" id=\"ff-r1-name\" placeholder=\"Your Full Name\" maxlength=\"80\">\r\n        <span class=\"ff-field-err\" id=\"ff-r1-name-err\"><\/span>\r\n      <\/div>\r\n      <div class=\"ff-rf1-field\">\r\n        <input type=\"email\" id=\"ff-r1-email\" placeholder=\"Your Email Address\" maxlength=\"100\">\r\n        <span class=\"ff-field-err\" id=\"ff-r1-email-err\"><\/span>\r\n      <\/div>\r\n      <div class=\"ff-rf1-field\">\r\n        <input type=\"tel\" id=\"ff-r1-phone\" placeholder=\"Phone Number\" maxlength=\"20\">\r\n        <span class=\"ff-field-err\" id=\"ff-r1-phone-err\"><\/span>\r\n      <\/div>\r\n      <div class=\"ff-rf1-field\">\r\n        <input type=\"text\" id=\"ff-r1-address\" placeholder=\"Your Address\" maxlength=\"150\">\r\n        <span class=\"ff-field-err\" id=\"ff-r1-address-err\"><\/span>\r\n      <\/div>\r\n      <button class=\"ff-rf1-btn\" id=\"ff-r1-btn\" onclick=\"ffSubmitR1()\">\r\n        \ud83c\udf9f\ufe0f Enter Raffle #1\r\n      <\/button>\r\n    <\/div>\r\n\r\n    <div class=\"ff-rf1-msg\" id=\"ff-r1-msg\"><\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n\/\/ \u2500\u2500 PASTE YOUR CORRECT WEB APP URL HERE \u2500\u2500\r\nvar FF_URL = 'https:\/\/script.google.com\/macros\/s\/AKfycbwwm3WWfKKQwq_TeAxd8Mju6rPfkb09Y5O7Iu-GGCWPZWiQhsShSJD0DIKOmIvkSIYu\/exec';\r\n\r\nvar FF_RAFFLE_1 = 'Raffle #1 \u2013 SKIPJACK OUTFITTERS';\r\n\r\nfunction ffClearR1() {\r\n  ['name','email','phone','address'].forEach(function(f) {\r\n    document.getElementById('ff-r1-' + f).classList.remove('err');\r\n    var errEl = document.getElementById('ff-r1-' + f + '-err');\r\n    if (errEl) { errEl.textContent = ''; errEl.classList.remove('show'); }\r\n  });\r\n  var msg = document.getElementById('ff-r1-msg');\r\n  msg.className = 'ff-rf1-msg';\r\n  msg.innerHTML = '';\r\n}\r\n\r\nfunction ffMarkR1Field(field, msg) {\r\n  var input = document.getElementById('ff-r1-' + field);\r\n  var errEl = document.getElementById('ff-r1-' + field + '-err');\r\n  if (input) input.classList.add('err');\r\n  if (errEl) { errEl.textContent = '\u26a0 ' + msg; errEl.classList.add('show'); }\r\n}\r\n\r\nfunction ffShowR1Msg(type, html) {\r\n  var el = document.getElementById('ff-r1-msg');\r\n  el.className = 'ff-rf1-msg show ' + type;\r\n  el.innerHTML = html;\r\n}\r\n\r\nfunction ffSubmitR1() {\r\n  var name    = document.getElementById('ff-r1-name').value.trim();\r\n  var email   = document.getElementById('ff-r1-email').value.trim();\r\n  var phone   = document.getElementById('ff-r1-phone').value.trim();\r\n  var address = document.getElementById('ff-r1-address').value.trim();\r\n  var btn     = document.getElementById('ff-r1-btn');\r\n\r\n  ffClearR1();\r\n\r\n  \/\/ \u2500\u2500 Strict Client-side validation \u2500\u2500\r\n  var hasError = false;\r\n  \r\n  if (!name || name.length < 2) {\r\n    ffMarkR1Field('name', 'Please enter your full name.');\r\n    hasError = true;\r\n  }\r\n  \r\n  var emailRegex = \/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$\/;\r\n  if (!email || !emailRegex.test(email)) {\r\n    ffMarkR1Field('email', 'Please enter a valid email address.');\r\n    hasError = true;\r\n  }\r\n  \r\n  var digitsOnly = phone.replace(\/\\D\/g, ''); \r\n  if (!phone || digitsOnly.length !== 10) {\r\n    ffMarkR1Field('phone', 'Please enter a valid 10-digit phone number.');\r\n    hasError = true;\r\n  }\r\n\r\n  if (!address || address.length < 5) {\r\n    ffMarkR1Field('address', 'Please enter a valid address.');\r\n    hasError = true;\r\n  }\r\n\r\n  if (hasError) return;\r\n\r\n  \/\/ \u2500\u2500 Disable button + show loading \u2500\u2500\r\n  btn.disabled = true;\r\n  ffShowR1Msg('loading', '<span class=\"ff-sp1\"><\/span> Checking & submitting your entry\u2026');\r\n\r\n  \/\/ \u2500\u2500 Build GET URL with params \u2500\u2500\r\n  var url = FF_URL\r\n    + '?action=submit'\r\n    + '&name='    + encodeURIComponent(name)\r\n    + '&email='   + encodeURIComponent(email)\r\n    + '&phone='   + encodeURIComponent(phone)\r\n    + '&address=' + encodeURIComponent(address)\r\n    + '&raffle='  + encodeURIComponent(FF_RAFFLE_1);\r\n\r\n  \/\/ \u2500\u2500 GET request \u2014 fully readable response \u2500\u2500\r\n  fetch(url)\r\n    .then(function(res) { return res.json(); })\r\n    .then(function(data) {\r\n\r\n      if (data.result === 'success') {\r\n        document.getElementById('ff-r1-form').style.display = 'none';\r\n        ffShowR1Msg('success',\r\n          '\ud83c\udf89 You\\'re entered in Raffle #1!<br>' +\r\n          '<span style=\"font-size:.85rem;opacity:.8\">Winner announced live at the Sandbar. Good luck!<\/span>'\r\n        );\r\n      } else if (data.result === 'duplicate') {\r\n        btn.disabled = false;\r\n        ffMarkR1Field(data.field, data.message);\r\n        ffShowR1Msg('warning',\r\n          '\ud83d\udeab ' + data.message + '<br>' +\r\n          '<span style=\"font-size:.82rem;opacity:.75\">Each person may only enter each raffle once.<\/span>'\r\n        );\r\n      } else {\r\n        btn.disabled = false;\r\n        ffShowR1Msg('error', '\u26a0\ufe0f ' + (data.message || 'Something went wrong. Please try again.'));\r\n      }\r\n    })\r\n    .catch(function(err) {\r\n      btn.disabled = false;\r\n      ffShowR1Msg('error', '\u26a0\ufe0f Could not connect. Please check your connection and try again.');\r\n    });\r\n}\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-57d080b5 elementor-widget elementor-widget-html\" data-id=\"57d080b5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n.ff-rf2-card {\r\n  border-radius: 18px; overflow: hidden;\r\n  border: 2px solid rgba(255,215,0,.28);\r\n  background: rgba(255,255,255,.05);\r\n  max-width: 560px; margin: 0 auto;\r\n}\r\n.ff-rf2-img { position: relative; height: 180px; }\r\n.ff-rf2-img img {\r\n  width: 100%; height: 100%; object-fit: cover;\r\n  display: block; filter: brightness(.55) saturate(1.2);\r\n}\r\n.ff-rf2-img-ov {\r\n  position: absolute; inset: 0;\r\n  background: linear-gradient(180deg, rgba(0,0,0,.1), rgba(0,24,74,.85));\r\n  display: flex; flex-direction: column;\r\n  justify-content: flex-end; padding: 1.2rem 1.3rem;\r\n}\r\n.ff-rf2-img-ov h3 {\r\n  font-family: 'Bebas Neue', sans-serif;\r\n  font-size: 1.9rem; color: #FFD700; line-height: 1; margin: 0;\r\n}\r\n.ff-rf2-spn {\r\n  font-family: 'Barlow Condensed', sans-serif;\r\n  font-size: .8rem; letter-spacing: .14em;\r\n  text-transform: uppercase; color: rgba(255,255,255,.6); margin-top: .15rem;\r\n}\r\n.ff-rf2-body { padding: 1.5rem; }\r\n.ff-rf2-prize {\r\n  background: rgba(255,215,0,.1); border: 1px solid rgba(255,215,0,.22);\r\n  border-radius: 9px; padding: .7rem .9rem;\r\n  font-size: .9rem; margin-bottom: 1.2rem; line-height: 1.5; color: #fff;\r\n}\r\n.ff-rf2-prize strong {\r\n  color: #FFD700; display: block;\r\n  font-family: 'Barlow Condensed', sans-serif;\r\n  font-size: .72rem; letter-spacing: .2em;\r\n  text-transform: uppercase; margin-bottom: .18rem;\r\n}\r\n.ff-rf2-form { display: flex; flex-direction: column; gap: .7rem; }\r\n\r\n.ff-rf2-field { display: flex; flex-direction: column; gap: .3rem; }\r\n.ff-rf2-field input {\r\n  background: rgba(255,255,255,.08);\r\n  border: 1px solid rgba(255,255,255,.2);\r\n  border-radius: 7px; padding: .7rem .9rem;\r\n  color: #fff; font-family: 'Barlow', sans-serif;\r\n  font-size: 16px !important; \/* <--- MOBILE ZOOM FIX APPLIED HERE *\/\r\n  outline: none;\r\n  transition: border-color .2s, background .2s; width: 100%;\r\n}\r\n.ff-rf2-field input:focus { border-color: #FFD700; }\r\n.ff-rf2-field input::placeholder { color: rgba(255,255,255,.38); }\r\n.ff-rf2-field input.err {\r\n  border-color: #ff4466 !important;\r\n  background: rgba(255,68,102,.1) !important;\r\n}\r\n.ff-rf2-field .ff-field-err {\r\n  display: none; font-size: .78rem;\r\n  color: #ff8899; padding-left: .3rem;\r\n  font-family: 'Barlow', sans-serif;\r\n}\r\n.ff-rf2-field .ff-field-err.show { display: block; }\r\n\r\n.ff-rf2-btn {\r\n  background: linear-gradient(90deg, #002868, #0050a0);\r\n  color: #FFD700; border: none; border-radius: 7px;\r\n  padding: .82rem; font-family: 'Barlow Condensed', sans-serif;\r\n  font-weight: 700; font-size: 1.05rem; letter-spacing: .1em;\r\n  text-transform: uppercase; cursor: pointer;\r\n  transition: transform .2s, box-shadow .2s; width: 100%;\r\n}\r\n.ff-rf2-btn:hover  { transform: scale(1.03); box-shadow: 0 5px 18px rgba(0,40,104,.6); }\r\n.ff-rf2-btn:disabled { opacity: .55; cursor: not-allowed; transform: none; box-shadow: none; }\r\n\r\n.ff-rf2-msg {\r\n  display: none; border-radius: 9px;\r\n  padding: .9rem 1rem; margin-top: .75rem;\r\n  font-family: 'Barlow Condensed', sans-serif;\r\n  font-size: .95rem; line-height: 1.55; text-align: center;\r\n}\r\n.ff-rf2-msg.show    { display: block; }\r\n.ff-rf2-msg.success { background: rgba(0,200,100,.1);  border: 1px solid rgba(0,200,100,.3);  color: #6effa0; }\r\n.ff-rf2-msg.error   { background: rgba(200,16,46,.1);  border: 1px solid rgba(200,16,46,.3);  color: #ff8899; }\r\n.ff-rf2-msg.warning { background: rgba(255,165,0,.1);  border: 1px solid rgba(255,165,0,.35); color: #ffc966; }\r\n.ff-rf2-msg.loading { background: rgba(255,255,255,.05); border: 1px solid rgba(255,255,255,.12); color: rgba(255,255,255,.6); }\r\n\r\n.ff-sp2 {\r\n  display: inline-block; width: 13px; height: 13px;\r\n  border: 2px solid rgba(255,255,255,.3); border-top-color: #fff;\r\n  border-radius: 50%; animation: ffs2 .7s linear infinite;\r\n  vertical-align: middle; margin-right: .4rem;\r\n}\r\n@keyframes ffs2 { to { transform: rotate(360deg); } }\r\n<\/style>\r\n\r\n<div class=\"ff-rf2-card\">\r\n  <div class=\"ff-rf2-img\">\r\n    <img decoding=\"async\" src=\"https:\/\/oqulo-aix.s3.us-west-2.amazonaws.com\/staging\/images\/cml19mwcl00mom2fb0z6xh3zf\/mKGIPmlI5rrZLrC8NU9RU\" alt=\"Raffle 2\" loading=\"lazy\">\r\n    <div class=\"ff-rf2-img-ov\">\r\n      <h3>Raffle #2<\/h3>\r\n      <p class=\"ff-rf2-spn\">BY Harborside Realty &amp; Rental Management<\/p>\r\n    <\/div>\r\n  <\/div>\r\n  <div class=\"ff-rf2-body\">\r\n    <div class=\"ff-rf2-prize\">\r\n      <strong>\ud83c\udfc6 Prize<\/strong>\r\n      Update this with Sponsor #2's actual prize details!\r\n    <\/div>\r\n\r\n    <div class=\"ff-rf2-form\" id=\"ff-r2-form\">\r\n      <div class=\"ff-rf2-field\">\r\n        <input type=\"text\" id=\"ff-r2-name\" placeholder=\"Your Full Name\" maxlength=\"80\">\r\n        <span class=\"ff-field-err\" id=\"ff-r2-name-err\"><\/span>\r\n      <\/div>\r\n      <div class=\"ff-rf2-field\">\r\n        <input type=\"email\" id=\"ff-r2-email\" placeholder=\"Your Email Address\" maxlength=\"100\">\r\n        <span class=\"ff-field-err\" id=\"ff-r2-email-err\"><\/span>\r\n      <\/div>\r\n      <div class=\"ff-rf2-field\">\r\n        <input type=\"tel\" id=\"ff-r2-phone\" placeholder=\"Phone Number\" maxlength=\"20\">\r\n        <span class=\"ff-field-err\" id=\"ff-r2-phone-err\"><\/span>\r\n      <\/div>\r\n      <div class=\"ff-rf2-field\">\r\n        <input type=\"text\" id=\"ff-r2-address\" placeholder=\"Your Address\" maxlength=\"150\">\r\n        <span class=\"ff-field-err\" id=\"ff-r2-address-err\"><\/span>\r\n      <\/div>\r\n      <button class=\"ff-rf2-btn\" id=\"ff-r2-btn\" onclick=\"ffSubmitR2()\">\r\n        \ud83c\udf9f\ufe0f Enter Raffle #2\r\n      <\/button>\r\n    <\/div>\r\n\r\n    <div class=\"ff-rf2-msg\" id=\"ff-r2-msg\"><\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n\/\/ \u2500\u2500 PASTE YOUR CORRECT WEB APP URL HERE \u2500\u2500\r\nvar FF_URL_2 = 'https:\/\/script.google.com\/macros\/s\/AKfycbwwm3WWfKKQwq_TeAxd8Mju6rPfkb09Y5O7Iu-GGCWPZWiQhsShSJD0DIKOmIvkSIYu\/exec';\r\n\r\nvar FF_RAFFLE_2 = 'Raffle #2 \u2013 Harborside Realty & Rental Management';\r\n\r\nfunction ffClearR2() {\r\n  ['name','email','phone','address'].forEach(function(f) {\r\n    document.getElementById('ff-r2-' + f).classList.remove('err');\r\n    var errEl = document.getElementById('ff-r2-' + f + '-err');\r\n    if (errEl) { errEl.textContent = ''; errEl.classList.remove('show'); }\r\n  });\r\n  var msg = document.getElementById('ff-r2-msg');\r\n  msg.className = 'ff-rf2-msg';\r\n  msg.innerHTML = '';\r\n}\r\n\r\nfunction ffMarkR2Field(field, msg) {\r\n  var input = document.getElementById('ff-r2-' + field);\r\n  var errEl = document.getElementById('ff-r2-' + field + '-err');\r\n  if (input) input.classList.add('err');\r\n  if (errEl) { errEl.textContent = '\u26a0 ' + msg; errEl.classList.add('show'); }\r\n}\r\n\r\nfunction ffShowR2Msg(type, html) {\r\n  var el = document.getElementById('ff-r2-msg');\r\n  el.className = 'ff-rf2-msg show ' + type;\r\n  el.innerHTML = html;\r\n}\r\n\r\nfunction ffSubmitR2() {\r\n  var name    = document.getElementById('ff-r2-name').value.trim();\r\n  var email   = document.getElementById('ff-r2-email').value.trim();\r\n  var phone   = document.getElementById('ff-r2-phone').value.trim();\r\n  var address = document.getElementById('ff-r2-address').value.trim();\r\n  var btn     = document.getElementById('ff-r2-btn');\r\n\r\n  ffClearR2();\r\n\r\n  \/\/ \u2500\u2500 Strict Client-side validation \u2500\u2500\r\n  var hasError = false;\r\n  \r\n  if (!name || name.length < 2) {\r\n    ffMarkR2Field('name', 'Full name is required.');\r\n    hasError = true;\r\n  }\r\n  \r\n  var emailRegex = \/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$\/;\r\n  if (!email || !emailRegex.test(email)) {\r\n    ffMarkR2Field('email', 'Please enter a valid email address.');\r\n    hasError = true;\r\n  }\r\n  \r\n  var digitsOnly = phone.replace(\/\\D\/g, ''); \r\n  if (!phone || digitsOnly.length !== 10) {\r\n    ffMarkR2Field('phone', 'Please enter a valid 10-digit phone number.');\r\n    hasError = true;\r\n  }\r\n\r\n  if (!address || address.length < 5) {\r\n    ffMarkR2Field('address', 'Please enter a valid address.');\r\n    hasError = true;\r\n  }\r\n\r\n  if (hasError) return;\r\n\r\n  btn.disabled = true;\r\n  ffShowR2Msg('loading', '<span class=\"ff-sp2\"><\/span> Checking & submitting your entry\u2026');\r\n\r\n  \/\/ \u2500\u2500 Build GET URL with params \u2500\u2500\r\n  var url = FF_URL_2\r\n    + '?action=submit'\r\n    + '&name='    + encodeURIComponent(name)\r\n    + '&email='   + encodeURIComponent(email)\r\n    + '&phone='   + encodeURIComponent(phone)\r\n    + '&address=' + encodeURIComponent(address)\r\n    + '&raffle='  + encodeURIComponent(FF_RAFFLE_2);\r\n\r\n  fetch(url)\r\n    .then(function(res) { return res.json(); })\r\n    .then(function(data) {\r\n\r\n      if (data.result === 'success') {\r\n        document.getElementById('ff-r2-form').style.display = 'none';\r\n        ffShowR2Msg('success',\r\n          '\ud83c\udf89 You\\'re entered in Raffle #2!<br>' +\r\n          '<span style=\"font-size:.85rem;opacity:.8\">Winner announced live at the Sandbar. Good luck!<\/span>'\r\n        );\r\n      } else if (data.result === 'duplicate') {\r\n        btn.disabled = false;\r\n        ffMarkR2Field(data.field, data.message);\r\n        ffShowR2Msg('warning',\r\n          '\ud83d\udeab ' + data.message + '<br>' +\r\n          '<span style=\"font-size:.82rem;opacity:.75\">Each person may only enter each raffle once.<\/span>'\r\n        );\r\n      } else {\r\n        btn.disabled = false;\r\n        ffShowR2Msg('error', '\u26a0\ufe0f ' + (data.message || 'Something went wrong. Please try again.'));\r\n      }\r\n    })\r\n    .catch(function() {\r\n      btn.disabled = false;\r\n      ffShowR2Msg('error', '\u26a0\ufe0f Could not connect. Please check your connection and try again.');\r\n    });\r\n}\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3c7febaf e-flex e-con-boxed e-con e-parent\" data-id=\"3c7febaf\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-77a8b38c elementor-widget elementor-widget-html\" data-id=\"77a8b38c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n<meta charset=\"UTF-8\"\/>\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\/>\r\n<title>Admin \u2013 Raffle Control Panel<\/title>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Oswald:wght@500;700&family=Source+Sans+3:wght@300;400;600&display=swap\" rel=\"stylesheet\"\/>\r\n<style>\r\n  \/* \u2500\u2500 1. ELEMENTOR-PROOF SCOPING \u2500\u2500 *\/\r\n  #ff-admin-fs {\r\n    --red:   #B22234;\r\n    --red-d: #8B1A27;\r\n    --blue:  #3C3B6E;\r\n    --blue-l:#5558A0;\r\n    --white: #FFFFFF;\r\n    --bg:    #12111f;\r\n    --card:  #1b1a2e;\r\n    --surf:  #22203a;\r\n    --bord:  rgba(255,255,255,0.08);\r\n    --text:  #e8e6f0;\r\n    --muted: #6b6b9a;\r\n    --green: #2e7d52;\r\n    --green-l:#4caf7d;\r\n\r\n    display: none; \r\n    position: fixed;\r\n    inset: 0;\r\n    z-index: 999999;\r\n    background: var(--bg);\r\n    color: var(--text);\r\n    font-family: 'Source Sans 3', sans-serif !important;\r\n    overflow-x: hidden;\r\n    overflow-y: auto;\r\n    text-align: left;\r\n    line-height: 1.5;\r\n  }\r\n\r\n  #ff-admin-fs *, #ff-admin-fs *::before, #ff-admin-fs *::after { \r\n    box-sizing: border-box !important; \r\n    margin: 0; \r\n    padding: 0; \r\n  }\r\n\r\n  #ff-admin-fs h1, #ff-admin-fs h2, #ff-admin-fs h3, \r\n  #ff-admin-fs .oswald-font {\r\n    font-family: 'Oswald', sans-serif !important;\r\n    line-height: 1.2 !important;\r\n    color: var(--white) !important;\r\n    margin: 0 !important;\r\n  }\r\n\r\n  #ff-admin-fs button {\r\n    font-family: 'Oswald', sans-serif !important;\r\n    cursor: pointer !important;\r\n    border: none;\r\n  }\r\n\r\n  \/* \u2500\u2500 2. GLOBAL COMPONENTS \u2500\u2500 *\/\r\n  #ff-admin-fs .usa-bar {\r\n    height: 8px; width: 100%;\r\n    background: repeating-linear-gradient(90deg, var(--red) 0, var(--red) 50px, var(--white) 50px, var(--white) 100px, var(--blue) 100px, var(--blue) 150px);\r\n  }\r\n\r\n  #ff-admin-fs .close-admin-btn {\r\n    position: absolute; top: 15px; right: 20px;\r\n    background: rgba(255,255,255,0.1) !important; color: #fff !important;\r\n    font-size: 1.2rem !important; width: 40px !important; height: 40px !important;\r\n    border-radius: 50% !important; z-index: 1000000;\r\n    transition: background 0.2s;\r\n    display: flex; align-items: center; justify-content: center;\r\n  }\r\n  #ff-admin-fs .close-admin-btn:hover { background: var(--red) !important; }\r\n\r\n  \/* \u2500\u2500 3. LOGIN SCREEN \u2500\u2500 *\/\r\n  #ff-admin-fs .login-wrapper {\r\n    display: flex; align-items: center; justify-content: center;\r\n    min-height: calc(100vh - 8px); padding: 2rem 1rem; width: 100%;\r\n  }\r\n  #ff-admin-fs .login-card-container { width: 100%; max-width: 380px; animation: ffFadeUp 0.4s ease both; }\r\n  \r\n  @keyframes ffFadeUp {\r\n    from { opacity: 0; transform: translateY(18px); }\r\n    to   { opacity: 1; transform: translateY(0); }\r\n  }\r\n\r\n  #ff-admin-fs .login-icon { text-align: center; font-size: 3rem; margin-bottom: 0.5rem; }\r\n  #ff-admin-fs .login-box {\r\n    background: var(--card) !important; border: 1px solid var(--bord) !important;\r\n    border-radius: 8px !important; overflow: hidden; box-shadow: 0 24px 60px rgba(0,0,0,0.5);\r\n  }\r\n  #ff-admin-fs .login-head { background: var(--blue) !important; padding: 1.5rem !important; text-align: center; }\r\n  #ff-admin-fs .login-head h2 { font-size: 1.5rem !important; letter-spacing: 0.1em !important; text-transform: uppercase; }\r\n  #ff-admin-fs .login-head p { font-size: 0.8rem !important; color: rgba(255,255,255,0.7) !important; margin-top: 0.2rem !important; letter-spacing: 0.05em; }\r\n  \r\n  #ff-admin-fs .login-body { padding: 1.5rem !important; }\r\n  #ff-admin-fs .login-body label {\r\n    font-size: 0.75rem !important; font-weight: 600 !important; letter-spacing: 0.1em !important;\r\n    text-transform: uppercase; color: var(--muted) !important; display: block; margin-bottom: 0.4rem;\r\n  }\r\n  #ff-admin-fs .login-body input {\r\n    background: rgba(255,255,255,0.05) !important; border: 1.5px solid rgba(255,255,255,0.1) !important;\r\n    border-radius: 6px !important; color: var(--text) !important;\r\n    font-family: 'Source Sans 3', sans-serif !important; font-size: 16px !important; \/* Mobile zoom fix *\/\r\n    padding: 0.8rem 1rem !important; width: 100% !important; margin-bottom: 1rem !important;\r\n    outline: none; transition: all 0.2s;\r\n  }\r\n  #ff-admin-fs .login-body input:focus { border-color: var(--red) !important; box-shadow: 0 0 0 3px rgba(178,34,52,0.2) !important; }\r\n  \r\n  #ff-admin-fs .btn-submit {\r\n    width: 100% !important; padding: 1rem !important; background: var(--red) !important; border-radius: 6px !important;\r\n    color: var(--white) !important; font-size: 1.1rem !important; letter-spacing: 0.1em !important;\r\n    text-transform: uppercase; transition: all 0.2s; box-shadow: 0 4px 16px rgba(178,34,52,0.35);\r\n  }\r\n  #ff-admin-fs .btn-submit:hover { background: var(--red-d) !important; transform: translateY(-2px); }\r\n  \r\n  #ff-admin-fs .login-err {\r\n    display: none; margin-top: 1rem !important; padding: 0.8rem !important;\r\n    background: rgba(178,34,52,0.15) !important; border: 1px solid rgba(178,34,52,0.3) !important;\r\n    border-radius: 6px !important; color: #ff8899 !important; font-size: 0.9rem !important;\r\n    font-weight: 600 !important; text-align: center;\r\n  }\r\n\r\n  \/* \u2500\u2500 4. DASHBOARD LAYOUT \u2500\u2500 *\/\r\n  #ff-admin-fs .dashboard-wrapper { display: none; padding: 2rem 1.5rem 5rem; animation: ffFadeUp 0.5s ease both; max-width: 1000px; margin: 0 auto; }\r\n  \r\n  #ff-admin-fs .dash-header { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 1rem; margin-bottom: 2rem; }\r\n  #ff-admin-fs .dash-header h1 { font-size: 2rem !important; letter-spacing: 0.05em !important; }\r\n  #ff-admin-fs .dash-header h1 span { color: var(--red) !important; }\r\n  \r\n  #ff-admin-fs .logout-btn {\r\n    padding: 0.6rem 1.2rem !important; background: rgba(178,34,52,0.15) !important;\r\n    border: 1px solid rgba(178,34,52,0.3) !important; border-radius: 6px !important;\r\n    color: #ff8899 !important; font-size: 0.9rem !important; font-family: 'Source Sans 3', sans-serif !important;\r\n    font-weight: 600 !important; transition: all 0.2s;\r\n  }\r\n  #ff-admin-fs .logout-btn:hover { background: rgba(178,34,52,0.3) !important; }\r\n\r\n  \/* Tabs *\/\r\n  #ff-admin-fs .tab-container {\r\n    display: flex; gap: 0.5rem; margin-bottom: 1.5rem; flex-wrap: wrap;\r\n    background: var(--surf) !important; border-radius: 8px !important;\r\n    padding: 0.4rem !important; border: 1px solid var(--bord) !important;\r\n  }\r\n  #ff-admin-fs .tab-btn {\r\n    flex: 1; padding: 0.8rem 1rem !important; border-radius: 6px !important; min-width: 140px;\r\n    background: transparent !important; color: var(--muted) !important;\r\n    font-size: 0.95rem !important; letter-spacing: 0.08em !important; text-transform: uppercase;\r\n    transition: all 0.2s; text-align: center;\r\n  }\r\n  #ff-admin-fs .tab-btn.active-blue { background: rgba(60,59,110,0.8) !important; color: var(--white) !important; }\r\n  #ff-admin-fs .tab-btn.active-red { background: rgba(178,34,52,0.8) !important; color: var(--white) !important; }\r\n  #ff-admin-fs .tab-btn:hover:not(.active-blue):not(.active-red) { background: rgba(255,255,255,0.05) !important; color: var(--text) !important; }\r\n\r\n  \/* Panels *\/\r\n  #ff-admin-fs .data-panel { display: none; }\r\n  #ff-admin-fs .data-panel.active { display: block; }\r\n\r\n  \/* Stats Row *\/\r\n  #ff-admin-fs .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 1rem; margin-bottom: 1.5rem; }\r\n  #ff-admin-fs .stat-card {\r\n    background: var(--surf) !important; border: 1px solid var(--bord) !important;\r\n    border-radius: 8px !important; padding: 1.5rem !important; text-align: center;\r\n  }\r\n  #ff-admin-fs .stat-card .num { font-size: 2.5rem !important; margin-bottom: 0.2rem !important; }\r\n  #ff-admin-fs .stat-card .lbl { font-size: 0.75rem !important; letter-spacing: 0.1em !important; text-transform: uppercase; color: var(--muted) !important; }\r\n\r\n  \/* Winner Box *\/\r\n  #ff-admin-fs .draw-box {\r\n    background: var(--surf) !important; border: 1px solid var(--bord) !important;\r\n    border-radius: 8px !important; padding: 1.5rem !important; margin-bottom: 1.5rem;\r\n  }\r\n  #ff-admin-fs .draw-box-header { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 1rem; }\r\n  #ff-admin-fs .draw-lbl { font-size: 0.75rem !important; font-weight: 600 !important; letter-spacing: 0.15em !important; text-transform: uppercase; color: var(--muted) !important; }\r\n  #ff-admin-fs .draw-title { font-size: 1.2rem !important; margin-top: 0.2rem !important; }\r\n  \r\n  #ff-admin-fs .btn-roll {\r\n    padding: 0.8rem 1.5rem !important; border-radius: 6px !important; font-size: 1rem !important;\r\n    letter-spacing: 0.1em !important; text-transform: uppercase; transition: all 0.2s; white-space: nowrap;\r\n  }\r\n  #ff-admin-fs .btn-roll.blue { background: var(--blue) !important; color: var(--white) !important; box-shadow: 0 4px 16px rgba(60,59,110,0.4); }\r\n  #ff-admin-fs .btn-roll.red { background: var(--red) !important; color: var(--white) !important; box-shadow: 0 4px 16px rgba(178,34,52,0.4); }\r\n  #ff-admin-fs .btn-roll:hover:not(:disabled) { opacity: 0.9 !important; transform: translateY(-2px); }\r\n  #ff-admin-fs .btn-roll:disabled { opacity: 0.5 !important; cursor: not-allowed !important; }\r\n\r\n  #ff-admin-fs .winner-display {\r\n    display: none; margin-top: 1.5rem !important; padding: 1.5rem !important; border-radius: 8px !important;\r\n    border: 2px solid; animation: ffPopIn 0.5s cubic-bezier(0.34,1.56,0.64,1) both;\r\n  }\r\n  @keyframes ffPopIn { from { opacity: 0; transform: scale(0.9); } to { opacity: 1; transform: scale(1); } }\r\n  \r\n  #ff-admin-fs .winner-display.blue-theme { border-color: var(--blue-l) !important; background: rgba(60,59,110,0.18) !important; }\r\n  #ff-admin-fs .winner-display.red-theme { border-color: var(--red) !important; background: rgba(178,34,52,0.12) !important; }\r\n  \r\n  #ff-admin-fs .wd-badge { font-size: 0.75rem !important; font-weight: 700 !important; letter-spacing: 0.15em !important; text-transform: uppercase; margin-bottom: 0.5rem !important; }\r\n  #ff-admin-fs .blue-theme .wd-badge { color: var(--blue-l) !important; }\r\n  #ff-admin-fs .red-theme .wd-badge { color: #ff8899 !important; }\r\n  \r\n  #ff-admin-fs .wd-name { font-size: 2rem !important; margin-bottom: 1rem !important; }\r\n  #ff-admin-fs .wd-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 0.8rem; }\r\n  #ff-admin-fs .wd-grid > div { background: rgba(255,255,255,0.05) !important; border-radius: 6px !important; padding: 0.8rem !important; font-family: 'Source Sans 3', sans-serif !important; }\r\n  #ff-admin-fs .wd-grid .lbl { font-size: 0.7rem !important; letter-spacing: 0.1em !important; text-transform: uppercase; color: var(--muted) !important; margin-bottom: 0.2rem !important; font-weight: 600; }\r\n\r\n  \/* Tables *\/\r\n  #ff-admin-fs .table-container { background: var(--surf) !important; border: 1px solid var(--bord) !important; border-radius: 8px !important; overflow: hidden; }\r\n  #ff-admin-fs .table-header { padding: 1.2rem !important; border-bottom: 1px solid var(--bord) !important; display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 1rem; }\r\n  #ff-admin-fs .table-header h3 { font-size: 0.9rem !important; letter-spacing: 0.15em !important; text-transform: uppercase; color: var(--muted) !important; }\r\n  \r\n  #ff-admin-fs .table-actions { display: flex; gap: 0.5rem; align-items: center; flex-wrap: wrap; width: 100%; max-width: 400px; }\r\n  #ff-admin-fs .table-actions input {\r\n    flex: 1; min-width: 150px; background: rgba(255,255,255,0.05) !important; border: 1px solid rgba(255,255,255,0.1) !important;\r\n    border-radius: 6px !important; color: var(--text) !important; padding: 0.6rem 0.8rem !important; outline: none;\r\n    font-family: 'Source Sans 3', sans-serif !important; font-size: 16px !important; \/* Mobile zoom fix *\/\r\n  }\r\n  #ff-admin-fs .table-actions input:focus { border-color: var(--blue-l) !important; }\r\n  #ff-admin-fs .btn-refresh {\r\n    padding: 0.6rem 1rem !important; background: rgba(255,255,255,0.05) !important; border: 1px solid var(--bord) !important;\r\n    border-radius: 6px !important; color: var(--text) !important; font-size: 0.85rem !important;\r\n    font-family: 'Source Sans 3', sans-serif !important; font-weight: 600 !important; transition: all 0.2s;\r\n  }\r\n  #ff-admin-fs .btn-refresh:hover { background: rgba(255,255,255,0.1) !important; }\r\n\r\n  \/* Fully Responsive Table *\/\r\n  #ff-admin-fs .table-scroll { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }\r\n  #ff-admin-fs table { width: 100% !important; border-collapse: collapse !important; font-size: 0.9rem !important; min-width: 700px; }\r\n  #ff-admin-fs th {\r\n    padding: 1rem !important; text-align: left !important; font-size: 0.75rem !important;\r\n    font-weight: 700 !important; letter-spacing: 0.1em !important; text-transform: uppercase !important;\r\n    color: var(--muted) !important; border-bottom: 1px solid var(--bord) !important; white-space: nowrap !important;\r\n  }\r\n  #ff-admin-fs td {\r\n    padding: 1rem !important; border-bottom: 1px solid rgba(255,255,255,0.04) !important;\r\n    white-space: nowrap !important; color: var(--text) !important;\r\n  }\r\n  #ff-admin-fs tbody tr:hover td { background: rgba(255,255,255,0.03) !important; }\r\n\r\n  #ff-admin-fs .status-msg { padding: 3rem !important; text-align: center !important; color: var(--muted) !important; font-size: 1rem !important; font-family: 'Source Sans 3', sans-serif !important; }\r\n  \r\n  #ff-admin-fs .loader {\r\n    display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.15);\r\n    border-top-color: var(--text); border-radius: 50%; animation: ffSpin 0.6s linear infinite; vertical-align: middle;\r\n  }\r\n  @keyframes ffSpin { to { transform: rotate(360deg); } }\r\n\r\n  #ff-confetti { position: fixed; inset: 0; pointer-events: none; z-index: 1000000; }\r\n\r\n  \/* Responsive Adjustments *\/\r\n  @media (max-width: 768px) {\r\n    #ff-admin-fs .dash-header h1 { font-size: 1.5rem !important; }\r\n    #ff-admin-fs .tab-btn { padding: 0.6rem !important; font-size: 0.85rem !important; }\r\n    #ff-admin-fs .draw-box-header { flex-direction: column; align-items: flex-start; }\r\n    #ff-admin-fs .btn-roll { width: 100% !important; }\r\n    #ff-admin-fs .table-actions { flex-direction: column; max-width: 100%; }\r\n    #ff-admin-fs .table-actions input, #ff-admin-fs .btn-refresh { width: 100% !important; }\r\n  }\r\n\r\n  \/* SECRET INVISIBLE MOBILE TRIGGER BUTTON *\/\r\n  #ff-secret-trigger {\r\n    position: fixed;\r\n    bottom: 0;\r\n    right: 0;\r\n    width: 70px;\r\n    height: 70px;\r\n    z-index: 999998; \/* High enough to click, but below the open panel *\/\r\n    opacity: 0;      \/* Completely invisible *\/\r\n    cursor: default;\r\n  }\r\n<\/style>\r\n<\/head>\r\n<body>\r\n\r\n<div id=\"ff-secret-trigger\"><\/div>\r\n\r\n<div id=\"ff-admin-fs\">\r\n  <button onclick=\"closeAdmin()\" class=\"close-admin-btn\" title=\"Close Admin Panel\">\u2715<\/button>\r\n  <canvas id=\"ff-confetti\"><\/canvas>\r\n  <div class=\"usa-bar\"><\/div>\r\n\r\n  <div id=\"loginScreen\" class=\"login-wrapper\">\r\n    <div class=\"login-card-container\">\r\n      <div class=\"login-box\">\r\n        <div class=\"login-head\">\r\n          <h2 class=\"oswald-font\">Admin Control Panel<\/h2>\r\n          <p>Authorized Personnel Only<\/p>\r\n        <\/div>\r\n        <div class=\"login-body\">\r\n          <label>Password<\/label>\r\n          <input type=\"password\" id=\"pwInput\" placeholder=\"Enter admin password\" onkeydown=\"if(event.key==='Enter') login()\"\/>\r\n          <button class=\"btn-submit\" onclick=\"login()\">Unlock Panel<\/button>\r\n          <div class=\"login-err\" id=\"loginErr\">\u26a0\ufe0f Incorrect password. Try again.<\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div id=\"dashboard\" class=\"dashboard-wrapper\">\r\n    \r\n    <div class=\"dash-header\">\r\n      <h1 class=\"oswald-font\">Raffle <span>Admin<\/span><\/h1>\r\n      <button class=\"logout-btn\" onclick=\"logout()\">\u2b05 Logout<\/button>\r\n    <\/div>\r\n\r\n    <div class=\"tab-container\">\r\n      <button class=\"tab-btn active-blue oswald-font\" onclick=\"switchTab(1)\" id=\"tab1\">\ud83c\udfaf Raffle #1<\/button>\r\n      <button class=\"tab-btn oswald-font\" onclick=\"switchTab(2)\" id=\"tab2\">\ud83c\udf81 Raffle #2<\/button>\r\n    <\/div>\r\n\r\n    <div class=\"data-panel active\" id=\"panel1\">\r\n      <div class=\"stats-grid\">\r\n        <div class=\"stat-card\">\r\n          <div class=\"num oswald-font\" id=\"count1\" style=\"color:#7B7FC4\">\u2013<\/div>\r\n          <div class=\"lbl\">Total Entries<\/div>\r\n        <\/div>\r\n        <div class=\"stat-card\">\r\n          <div class=\"num oswald-font\" style=\"color:var(--green-l)\">\u2713<\/div>\r\n          <div class=\"lbl\">Duplicates Blocked<\/div>\r\n        <\/div>\r\n        <div class=\"stat-card\">\r\n          <div class=\"num oswald-font\" style=\"color:#f0c97a\">\ud83c\udfaf<\/div>\r\n          <div class=\"lbl\">Active System<\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"draw-box\">\r\n        <div class=\"draw-box-header\">\r\n          <div>\r\n            <div class=\"draw-lbl\">Winner Selection \u2014 Raffle #1<\/div>\r\n            <h3 class=\"draw-title oswald-font\">Pick a random winner from Raffle #1<\/h3>\r\n          <\/div>\r\n          <button class=\"btn-roll blue\" id=\"drawBtn1\" onclick=\"drawWinner(1)\">\ud83c\udfb2 Draw Winner<\/button>\r\n        <\/div>\r\n        <div class=\"winner-display blue-theme\" id=\"winner1\">\r\n          <div class=\"wd-badge\">\ud83c\udfc6 Raffle #1 Winner<\/div>\r\n          <div class=\"wd-name oswald-font\" id=\"wName1\"><\/div>\r\n          <div class=\"wd-grid\">\r\n            <div><div class=\"lbl\">Email<\/div><div id=\"wEmail1\"><\/div><\/div>\r\n            <div><div class=\"lbl\">Phone<\/div><div id=\"wPhone1\"><\/div><\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"table-container\">\r\n        <div class=\"table-header\">\r\n          <h3 class=\"oswald-font\" id=\"table-title-1\">Recent Entries (Latest 15)<\/h3>\r\n          <div class=\"table-actions\">\r\n            <input type=\"text\" placeholder=\"Search by name, email, or phone...\" oninput=\"filterTable(1, this.value)\"\/>\r\n            <button class=\"btn-refresh\" onclick=\"loadEntries(1)\">\u21bb Refresh<\/button>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"table-scroll\">\r\n          <div class=\"status-msg\" id=\"loading1\"><span class=\"loader\"><\/span>&nbsp; Loading entries\u2026<\/div>\r\n          <table id=\"table1\" style=\"display:none\">\r\n            <thead><tr><th>#<\/th><th>Name<\/th><th>Email<\/th><th>Phone<\/th><th>Timestamp<\/th><\/tr><\/thead>\r\n            <tbody id=\"tbody1\"><\/tbody>\r\n          <\/table>\r\n          <div class=\"status-msg\" id=\"empty1\" style=\"display:none\">No entries yet.<\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"data-panel\" id=\"panel2\">\r\n      <div class=\"stats-grid\">\r\n        <div class=\"stat-card\">\r\n          <div class=\"num oswald-font\" id=\"count2\" style=\"color:#e07070\">\u2013<\/div>\r\n          <div class=\"lbl\">Total Entries<\/div>\r\n        <\/div>\r\n        <div class=\"stat-card\">\r\n          <div class=\"num oswald-font\" style=\"color:var(--green-l)\">\u2713<\/div>\r\n          <div class=\"lbl\">Duplicates Blocked<\/div>\r\n        <\/div>\r\n        <div class=\"stat-card\">\r\n          <div class=\"num oswald-font\" style=\"color:#7fc47f\">\ud83c\udf81<\/div>\r\n          <div class=\"lbl\">Active System<\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"draw-box\">\r\n        <div class=\"draw-box-header\">\r\n          <div>\r\n            <div class=\"draw-lbl\">Winner Selection \u2014 Raffle #2<\/div>\r\n            <h3 class=\"draw-title oswald-font\">Pick a random winner from Raffle #2<\/h3>\r\n          <\/div>\r\n          <button class=\"btn-roll red\" id=\"drawBtn2\" onclick=\"drawWinner(2)\">\ud83c\udfb2 Draw Winner<\/button>\r\n        <\/div>\r\n        <div class=\"winner-display red-theme\" id=\"winner2\">\r\n          <div class=\"wd-badge\">\u2b50 Raffle #2 Winner<\/div>\r\n          <div class=\"wd-name oswald-font\" id=\"wName2\"><\/div>\r\n          <div class=\"wd-grid\">\r\n            <div><div class=\"lbl\">Email<\/div><div id=\"wEmail2\"><\/div><\/div>\r\n            <div><div class=\"lbl\">Phone<\/div><div id=\"wPhone2\"><\/div><\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"table-container\">\r\n        <div class=\"table-header\">\r\n          <h3 class=\"oswald-font\" id=\"table-title-2\">Recent Entries (Latest 15)<\/h3>\r\n          <div class=\"table-actions\">\r\n            <input type=\"text\" placeholder=\"Search by name, email, or phone...\" oninput=\"filterTable(2, this.value)\"\/>\r\n            <button class=\"btn-refresh\" onclick=\"loadEntries(2)\">\u21bb Refresh<\/button>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"table-scroll\">\r\n          <div class=\"status-msg\" id=\"loading2\"><span class=\"loader\"><\/span>&nbsp; Loading entries\u2026<\/div>\r\n          <table id=\"table2\" style=\"display:none\">\r\n            <thead><tr><th>#<\/th><th>Name<\/th><th>Email<\/th><th>Phone<\/th><th>Timestamp<\/th><\/tr><\/thead>\r\n            <tbody id=\"tbody2\"><\/tbody>\r\n          <\/table>\r\n          <div class=\"status-msg\" id=\"empty2\" style=\"display:none\">No entries yet.<\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n  \/\/ =========================================================\r\n  \/\/ 1. PASTE YOUR WEB APP URL HERE (Ending in \/exec)\r\n  \/\/ =========================================================\r\n  const SCRIPT_URL = \"https:\/\/script.google.com\/macros\/s\/AKfycbwwm3WWfKKQwq_TeAxd8Mju6rPfkb09Y5O7Iu-GGCWPZWiQhsShSJD0DIKOmIvkSIYu\/exec\";\r\n  \r\n  \/\/ =========================================================\r\n  \/\/ 2. SET ADMIN PASSWORD HERE\r\n  \/\/ =========================================================\r\n  const ADMIN_PASSWORD = \"Admin@2026\"; \r\n\r\n  let entries = { 1: [], 2: [] };\r\n\r\n  \/\/ \u2500\u2500 DESKTOP SHORTCUT (Ctrl + Shift + Z) \u2500\u2500\r\n  document.addEventListener('keydown', function(e) {\r\n    if (e.ctrlKey && e.shiftKey && (e.key === 'Q' || e.key === 'q')) {\r\n      const wrapper = document.getElementById('ff-admin-fs');\r\n      if (wrapper.style.display === 'block') { closeAdmin(); } \r\n      else { wrapper.style.display = 'block'; document.body.style.overflow = 'hidden'; }\r\n    }\r\n  });\r\n\r\n  \/\/ \u2500\u2500 SECRET MOBILE TRIGGER (Triple-Tap Bottom Right Corner) \u2500\u2500\r\n  let secretTapCount = 0;\r\n  let secretTapTimer;\r\n\r\n  document.getElementById('ff-secret-trigger').addEventListener('click', function(e) {\r\n    e.preventDefault();\r\n    secretTapCount++;\r\n    clearTimeout(secretTapTimer);\r\n    \r\n    if (secretTapCount >= 3) {\r\n      \/\/ 3 Taps achieved: Open the admin panel\r\n      document.getElementById('ff-admin-fs').style.display = 'block'; \r\n      document.body.style.overflow = 'hidden';\r\n      secretTapCount = 0; \r\n    } else {\r\n      \/\/ If they don't tap 3 times within 1.5 seconds, reset the counter\r\n      secretTapTimer = setTimeout(() => { secretTapCount = 0; }, 1500);\r\n    }\r\n  });\r\n\r\n  function closeAdmin() {\r\n    document.getElementById('ff-admin-fs').style.display = 'none';\r\n    document.body.style.overflow = ''; \r\n  }\r\n\r\n  function login() {\r\n    const pw = document.getElementById('pwInput').value;\r\n    if (pw === ADMIN_PASSWORD) {\r\n      document.getElementById('loginScreen').style.display = 'none';\r\n      document.getElementById('dashboard').style.display = 'block';\r\n      loadEntries(1); loadEntries(2);\r\n    } else {\r\n      document.getElementById('loginErr').style.display = 'block';\r\n    }\r\n  }\r\n\r\n  function logout() {\r\n    document.getElementById('loginScreen').style.display = 'flex';\r\n    document.getElementById('dashboard').style.display = 'none';\r\n    document.getElementById('pwInput').value = '';\r\n    document.getElementById('loginErr').style.display = 'none';\r\n  }\r\n\r\n  function switchTab(n) {\r\n    document.querySelectorAll('#ff-admin-fs .data-panel').forEach(p => p.classList.remove('active'));\r\n    document.getElementById('panel' + n).classList.add('active');\r\n    document.getElementById('tab1').className = 'tab-btn oswald-font' + (n === 1 ? ' active-blue' : '');\r\n    document.getElementById('tab2').className = 'tab-btn oswald-font' + (n === 2 ? ' active-red'  : '');\r\n  }\r\n\r\n  async function loadEntries(raffle) {\r\n    const loadEl = document.getElementById('loading' + raffle);\r\n    const tableEl = document.getElementById('table' + raffle);\r\n    const emptyEl = document.getElementById('empty' + raffle);\r\n    loadEl.style.display = 'block'; tableEl.style.display = 'none'; emptyEl.style.display = 'none';\r\n\r\n    try {\r\n      const res = await fetch(SCRIPT_URL + '?action=entries&raffle=' + raffle);\r\n      const data = await res.json();\r\n      \r\n      if (data.result === 'success') {\r\n        entries[raffle] = data.entries || [];\r\n        renderTable(raffle, entries[raffle], false);\r\n      } else {\r\n        loadEl.innerHTML = '\u274c Error loading data. Did you set the Script URL?';\r\n      }\r\n    } catch {\r\n      loadEl.innerHTML = '\u274c Failed to connect. Please check your Script URL.';\r\n    }\r\n  }\r\n\r\n  \/\/ Updated Render function: Limits to 15 entries normally, 50 during search\r\n  function renderTable(raffle, data, isSearch = false) {\r\n    const loadEl = document.getElementById('loading' + raffle);\r\n    const tableEl = document.getElementById('table' + raffle);\r\n    const emptyEl = document.getElementById('empty' + raffle);\r\n    const countEl = document.getElementById('count' + raffle);\r\n    const tbody = document.getElementById('tbody' + raffle);\r\n    const titleEl = document.getElementById('table-title-' + raffle);\r\n\r\n    loadEl.style.display = 'none';\r\n    \r\n    \/\/ Total count always reflects the full database, not just what's displayed\r\n    countEl.textContent = entries[raffle].length;\r\n\r\n    if (data.length === 0) { \r\n      emptyEl.style.display = 'block'; \r\n      tableEl.style.display = 'none'; \r\n      emptyEl.textContent = isSearch ? 'No matching entries found.' : 'No entries yet.';\r\n      return; \r\n    }\r\n\r\n    let displayData = data;\r\n    \r\n    if (!isSearch) {\r\n      \/\/ Default view: Grab the newest 15 entries and reverse to show newest at top\r\n      displayData = data.slice(-15).reverse();\r\n      titleEl.textContent = 'Recent Entries (Latest ' + displayData.length + ')';\r\n    } else {\r\n      \/\/ Search view: Show up to 50 results\r\n      if (displayData.length > 50) displayData = displayData.slice(0, 50);\r\n      titleEl.textContent = 'Search Results (' + displayData.length + ')';\r\n    }\r\n\r\n    tbody.innerHTML = displayData.map((e, i) => `\r\n      <tr>\r\n        <td style=\"color:var(--muted)\">${isSearch ? i + 1 : data.length - i}<\/td>\r\n        <td style=\"font-weight:600\">${esc(e.name)}<\/td>\r\n        <td>${esc(e.email)}<\/td>\r\n        <td>${esc(e.phone || 'N\/A')}<\/td>\r\n        <td style=\"color:var(--muted);font-size:.8rem\">${fmt(e.timestamp)}<\/td>\r\n      <\/tr>\r\n    `).join('');\r\n\r\n    tableEl.style.display = 'table'; \r\n    emptyEl.style.display = 'none';\r\n  }\r\n\r\n  function filterTable(raffle, q) {\r\n    const ql = q.trim().toLowerCase();\r\n    \r\n    \/\/ If search is cleared, reload the default recent view\r\n    if (!ql) {\r\n      renderTable(raffle, entries[raffle], false);\r\n      return;\r\n    }\r\n\r\n    \/\/ Filter through the entire saved array of entries\r\n    renderTable(raffle, entries[raffle].filter(e =>\r\n      (e.name && e.name.toLowerCase().includes(ql)) || \r\n      (e.email && e.email.toLowerCase().includes(ql)) || \r\n      (e.phone && e.phone.includes(ql))\r\n    ), true);\r\n  }\r\n\r\n  function drawWinner(raffle) {\r\n    const pool = entries[raffle];\r\n    if (!pool || pool.length === 0) { alert('No entries loaded yet.'); return; }\r\n    const btn = document.getElementById('drawBtn' + raffle);\r\n    btn.disabled = true; btn.textContent = '\ud83c\udfb2 Drawing\u2026';\r\n\r\n    let ticks = 0;\r\n    const id = setInterval(() => {\r\n      const r = pool[Math.floor(Math.random() * pool.length)];\r\n      displayWinner(raffle, r, false);\r\n      ticks++;\r\n      if (ticks >= 20) {\r\n        clearInterval(id);\r\n        const winner = pool[Math.floor(Math.random() * pool.length)];\r\n        displayWinner(raffle, winner, true);\r\n        btn.disabled = false; btn.textContent = '\ud83c\udfb2 Redraw';\r\n        triggerConfetti(raffle);\r\n      }\r\n    }, 80);\r\n  }\r\n\r\n  function displayWinner(raffle, e, final) {\r\n    const card = document.getElementById('winner' + raffle);\r\n    card.style.display = 'block';\r\n    if (final) { card.style.animation = 'none'; card.offsetHeight; card.style.animation = 'ffPopIn 0.5s cubic-bezier(0.34,1.56,0.64,1) both'; }\r\n    document.getElementById('wName' + raffle).textContent = e.name;\r\n    document.getElementById('wEmail' + raffle).textContent = e.email;\r\n    document.getElementById('wPhone' + raffle).textContent = e.phone || 'N\/A';\r\n  }\r\n\r\n  function triggerConfetti(raffle) {\r\n    const canvas = document.getElementById('ff-confetti');\r\n    const ctx = canvas.getContext('2d');\r\n    canvas.width = window.innerWidth; canvas.height = window.innerHeight;\r\n    const colors = raffle === 1 ? ['#B22234','#FFFFFF','#3C3B6E','#7B7FC4','#f0c97a'] : ['#B22234','#FFFFFF','#3C3B6E','#e07070','#7fc47f'];\r\n    const pieces = Array.from({length: 150}, () => ({\r\n      x: Math.random() * canvas.width, y: -20, r: 4 + Math.random() * 5, d: 2 + Math.random() * 4,\r\n      drift: (Math.random() - 0.5) * 3, rot: Math.random() * 360, rs: (Math.random() - 0.5) * 8,\r\n      color: colors[Math.floor(Math.random() * colors.length)]\r\n    }));\r\n    let frame = 0;\r\n    (function animate() {\r\n      if (frame > 200) { ctx.clearRect(0, 0, canvas.width, canvas.height); return; }\r\n      ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n      pieces.forEach(p => {\r\n        p.y += p.d; p.x += p.drift; p.rot += p.rs;\r\n        ctx.save(); ctx.translate(p.x, p.y); ctx.rotate(p.rot * Math.PI \/ 180);\r\n        ctx.fillStyle = p.color; ctx.globalAlpha = Math.max(0, 1 - frame \/ 180);\r\n        ctx.fillRect(-p.r \/ 2, -p.r \/ 2, p.r, p.r * 1.5); ctx.restore();\r\n      });\r\n      frame++; requestAnimationFrame(animate);\r\n    })();\r\n  }\r\n\r\n  function esc(s) { return String(s || '').replace(\/&\/g,'&amp;').replace(\/<\/g,'&lt;').replace(\/>\/g,'&gt;'); }\r\n  \r\n  function fmt(iso) { \r\n    if (!iso) return 'N\/A';\r\n    try { \r\n      const d = new Date(iso); \r\n      if (isNaN(d)) return String(iso); \r\n      return d.toLocaleDateString() + ' ' + d.toLocaleTimeString([],{hour:'2-digit',minute:'2-digit'}); \r\n    } catch { \r\n      return String(iso); \r\n    } \r\n  }\r\n<\/script>\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-374d3dd3 e-flex e-con-boxed e-con e-parent\" data-id=\"374d3dd3\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-10e93cfc elementor-widget elementor-widget-heading\" data-id=\"10e93cfc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Turn up for Independence Day ! <BR><br>Drop anchor for live DJs, epic vibes, and your chance to win massive prizes<\/h2>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-228e57f8 e-flex e-con-boxed e-con e-parent\" data-id=\"228e57f8\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a172e94 elementor-widget elementor-widget-text-editor\" data-id=\"a172e94\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Copyright \u00a9 2026 Freedom Fest | Website by <a href=\"https:\/\/visiondesigning.com\">Vision Designing<\/a><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Days Hours Minutes Seconds SPONSORS OF THE FEST Set the Vibe Want to hear your favorite track? Scan the QR code or click below to submit your request directly to the DJ. Request Songs Raffle #1 BY SKIPJACK OUTFITTERS \ud83c\udfc6 Prize Update this with Sponsor #1&#8217;s actual prize details! \ud83c\udf9f\ufe0f Enter Raffle #1 Raffle #2 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-207","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/sandbarvibes.us\/index.php?rest_route=\/wp\/v2\/pages\/207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sandbarvibes.us\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sandbarvibes.us\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sandbarvibes.us\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sandbarvibes.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=207"}],"version-history":[{"count":182,"href":"https:\/\/sandbarvibes.us\/index.php?rest_route=\/wp\/v2\/pages\/207\/revisions"}],"predecessor-version":[{"id":404,"href":"https:\/\/sandbarvibes.us\/index.php?rest_route=\/wp\/v2\/pages\/207\/revisions\/404"}],"wp:attachment":[{"href":"https:\/\/sandbarvibes.us\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}