Pablo - test page

.sidebar-first .content-inner {margin-left: 0!important;} #members-menu-container {display:none!important;} :root { --ar-teal: #007682; --ar-dark: #333333; --ar-bg: #f4f7f6; --ar-white: #ffffff; --ar-gray: #888888; } body { font-family: 'Segoe UI', sans-serif; background-color: var(--ar-bg); margin: 0; padding: 20px; color: var(--ar-dark); } .container { max-width: 1400px; margin: 0 auto; } .controls { display: flex; flex-wrap: wrap; gap: 15px; justify-content: center; margin-bottom: 40px; align-items: center; padding: 20px; background: var(--ar-white); border-radius: 15px; box-shadow: 0 4px 15px rgba(0,0,0,0.05); } .btn { padding: 12px 25px; border-radius: 30px; border: none; cursor: pointer; font-weight: bold; transition: 0.3s; text-transform: uppercase; font-size: 12px; } .btn-reset { background: #555; color: white; } .btn-featured { background: var(--ar-teal); color: white; } .btn-load { background: var(--ar-teal); color: white; margin: 40px auto; display: block; padding: 15px 40px; font-size: 14px; } .btn:hover { transform: translateY(-2px); opacity: 0.9; } #searchBar { width: 100%; max-width: 400px; padding: 12px 20px; border: 2px solid #eee; border-radius: 30px; outline: none; font-size: 16px; } .section-title { border-left: 6px solid var(--ar-teal); padding-left: 15px; margin: 50px 0 25px 0; font-size: 22px; font-weight: 700; } .video-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 30px; } .shorts-grid { grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); } .video-card { background: var(--ar-white); border-radius: 12px; overflow: hidden; box-shadow: 0 4px 12px rgba(0,0,0,0.08); cursor: pointer; transition: 0.3s; } .video-card:hover { transform: translateY(-8px); box-shadow: 0 12px 24px rgba(0,0,0,0.15); } .thumb-wrapper { position: relative; width: 100%; padding-top: 56.25%; background: #000; } .short-card .thumb-wrapper { padding-top: 177%; } .thumb-wrapper img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; } .video-info { padding: 15px; } .video-info h3 { margin: 0; font-size: 14px; line-height: 1.4; height: 2.8em; overflow: hidden; } #videoModal { display: none; position: fixed; z-index: 10000; left: 0; top: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.95); justify-content: center; align-items: center; } .modal-content { width: 95%; max-width: 1000px; position: relative; } .video-container { position: relative; padding-bottom: 56.25%; height: 0; background: #000; border-radius: 8px; overflow: hidden; } .video-container iframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 0; } .close-btn { position: absolute; top: -45px; right: 0; color: white; cursor: pointer; font-size: 16px; background: var(--ar-teal); padding: 5px 12px; border-radius: 5px; } .status-msg { text-align: center; font-size: 18px; grid-column: 1 / -1; padding: 60px; color: var(--ar-gray); } Home View Featured Content Loading Protected Library... CLOSE [X] const VIMEO_TOKEN = '415a71f661f6b8bd270d20c75ee0f143'; // THE MASTER TAG LIST - Only videos with one of these will ever show. const ALLOWED_TAGS = ['office-hour-live', 'ohl-clips', 'ohl-shorts', 'ohl-featured']; const mainDisplay = document.getElementById('mainDisplay'); let timeout = null; let currentPage = 1; async function fetchVimeoFiltered(searchTerm, perPage = 12, page = 1) { try { // 1. Fetch from Vimeo const response = await fetch(`https://api.vimeo.com/me/videos?sort=date&direction=desc&query=${encodeURIComponent(searchTerm)}&per_page=${perPage}&page=${page}`, { headers: { 'Authorization': `Bearer ${VIMEO_TOKEN}` } }); const data = await response.json(); // 2. APPLY THE GATEKEEPER FILTER // We only keep videos where at least one of their tags matches our ALLOWED_TAGS list if (data.data) { data.data = data.data.filter(video => { if (!video.tags || video.tags.length === 0) return false; // Check if any tag on the video matches our approved list (lowercase comparison) return video.tags.some(tagObj => ALLOWED_TAGS.includes(tagObj.tag.toLowerCase())); }); } return data; } catch (e) { console.error("Fetch error:", e); return { data: [] }; } } function createCard(video, isShort = false) { const id = video.uri.split('/').pop(); const thumb = video.pictures.sizes[3]?.link || video.pictures.sizes[0].link; return ` ${video.name} `; } async function initDefaultView() { mainDisplay.innerHTML = "Loading Content..."; document.getElementById('searchBar').value = ""; currentPage = 1; // Limiting to 6 per row as requested const row1Data = await fetchVimeoFiltered('office-hour-live', 15); // Pull more to ensure we get 6 after filtering const row2Data = await fetchVimeoFiltered('ohl-shorts', 15); const row3Data = await fetchVimeoFiltered('ohl', 12, 1); mainDisplay.innerHTML = ` Latest Shows & Clips ${row1Data.data.slice(0,6).map(v => createCard(v)).join('')} OHL Shorts ${row2Data.data.slice(0,6).map(v => createCard(v, true)).join('')} Full Video Catalog ${row3Data.data.map(v => createCard(v)).join('')} Load More Videos `; } async function loadMoreCatalog() { const btn = document.getElementById('loadMoreBtn'); btn.innerText = "Loading..."; currentPage++; const moreData = await fetchVimeoFiltered('ohl', 30, currentPage); if (moreData.data && moreData.data.length > 0) { const catalogGrid = document.getElementById('catalogGrid'); const newCards = moreData.data.map(v => createCard(v)).join(''); catalogGrid.insertAdjacentHTML('beforeend', newCards); btn.innerText = "Load More Videos"; } else { btn.style.display = 'none'; } } async function loadFeatured() { mainDisplay.innerHTML = "Loading Featured..."; const data = await fetchVimeoFiltered('ohl-featured', 24); mainDisplay.innerHTML = ` Featured Highlights ${data.data.map(v => createCard(v)).join('')} `; } async function performSearch(query) { if (!query) return initDefaultView(); mainDisplay.innerHTML = `Searching Protected Content...`; // Even search only returns videos that pass the tag filter const data = await fetchVimeoFiltered(query, 30); mainDisplay.innerHTML = ` Search Results: ${query} ${data.data.map(v => createCard(v)).join('')} `; } function debounceSearch(val) { clearTimeout(timeout); timeout = setTimeout(() => performSearch(val), 500); } function openVideo(id) { document.getElementById('player').innerHTML = ``; document.getElementById('videoModal').style.display = 'flex'; document.body.style.overflow = 'hidden'; } function closeVideo() { document.getElementById('videoModal').style.display = 'none'; document.getElementById('player').innerHTML = ''; document.body.style.overflow = 'auto'; } window.onclick = function(event) { if (event.target == document.getElementById('videoModal')) { closeVideo(); } } initDefaultView();
.sidebar-first .content-inner {margin-left: 0!important;} #members-menu-container {display:none!important;} :root { --ar-teal: #007682; --ar-dark: #333333; --ar-bg: #f4f7f6; --ar-white: #ffffff; --ar-gray: #888888; } body { font-family: 'Segoe UI', sans-serif; background-color: var(--ar-bg); margin: 0; padding: 20px; color: var(--ar-dark); } .container { max-width: 1400px; margin: 0 auto; } .controls { display: flex; flex-wrap: wrap; gap: 15px; justify-content: center; margin-bottom: 40px; align-items: center; padding: 20px; background: var(--ar-white); border-radius: 15px; box-shadow: 0 4px 15px rgba(0,0,0,0.05); } .btn { padding: 12px 25px; border-radius: 30px; border: none; cursor: pointer; font…
Continue reading →

Hope for Healing Excerpt: 'Is My Life Out of Control?'

Video Preview