{"id":2014,"date":"2024-05-30T00:54:00","date_gmt":"2024-05-30T00:54:00","guid":{"rendered":"https:\/\/niasnebraska.com\/?p=2014"},"modified":"2026-07-02T23:30:05","modified_gmt":"2026-07-02T23:30:05","slug":"storm-lake-iowa","status":"publish","type":"post","link":"https:\/\/niasnebraska.com\/index.php\/2024\/05\/30\/storm-lake-iowa\/","title":{"rendered":"Storm Lake Iowa"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">I don&#8217;t usually go camping on Memorial and\/or Labor Day Weekends but this year I had a camp spot fall into my lap so I decided to give it a go.  The destination was Storm Lake Iowa and their Sunrise Campground.  I have been to this campground a few times in the past but not recently.  <br>The campground was much like I remember it.  The spots are all level but fairly close together.  They are also full hookup spots which is a nice feature.  The campground was fairly clean and the camp hosts were fantastic.  <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The town is very proud of their city and the lake front looked amazing.  It was a lot of fun to ride the bikes up and down the trails.  They also put on one heck of a display at the court house call the Parade of Flags.  I took some photos and video but I doubt they will do it justice.  <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The campground is a very nice place to base camp but if you are just camping to go camping, it might not be ideal.  We had an Oak Tree in our lot that really needed a lower branch trim.  It was more like a bush.  The restrooms\/showers were very nice and clean and the Verizon Service was adequate.  <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Molly and I were invited to a cookout and everybody was very friendly.  I took some photos which I will post below.  There are also a few videos of the campground and the parade of flags.  The videos are in 360 mode so if they appear funny to you, that&#8217;s probably because your browser doesn&#8217;t support 360 videos.  You can try and load them in the YouTube app (or better yet your Oculus).  <\/p>\n\n\n\nngg_shortcode_0_placeholder\n\n\n<div style=\"text-align:center; max-width:100%; width:800px; height:455px; border-radius: 0px; margin: 0 auto;\"><div id=\"video-container-95487-container\" style=\"position:relative; width:100%; height:100%;\"><div id=\"video-container-95487-compatibility-check\" style=\"position:absolute; top:0; left:0; width:100%; height:100%; display:none; pointer-events:none; flex-direction:column; justify-content:center; align-items:center; background-color:#f9f9f9; border-radius:0px;\">\n                    <div style=\"margin-bottom:20px; text-align:center;\">\n                        <div class=\"wpvr-loading-spinner\" style=\"border:5px solid #f3f3f3; border-top:5px solid #3498db; border-radius:50%; width:50px; height:50px; margin:0 auto 15px; animation:wpvr-spin 1s linear infinite;\"><\/div>\n                        <p style=\"margin:0;\">Checking browser compatibility&#8230;<\/p>\n                    <\/div>\n                   <\/div><style>@keyframes wpvr-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }<\/style><div id=\"video-container-95487-frame\" style=\"text-align:center; max-width:100%; width:800px; height:455px; border-radius:0px; margin: 0 auto; display:block;\"><iframe loading=\"lazy\" id=\"video-container-95487-iframe\" src=\"https:\/\/www.youtube.com\/embed\/6HNPQyyuP04?rel=0&#038;modestbranding=1&#038;autohide=1&#038;showinfo=0&#038;controls=0&#038;playlist=6HNPQyyuP04&#038;enablejsapi=1&#038;playsinline=1&#038;html5=1&#038;origin=https%3A%2F%2Fniasnebraska.com\" width=\"100%\" height=\"100%\" style=\"border-radius:0px;\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; xr-spatial-tracking\"><\/iframe><\/div><div id=\"video-container-95487-drag-surface\" style=\"position:absolute; top:60px; left:0; right:0; bottom:48px; display:none; pointer-events:none; cursor:grab; z-index:3; background:transparent;\"><\/div><div id=\"video-container-95487-controls\" style=\"display:none; position:absolute; bottom:0; left:0; right:0; height:48px; z-index:5; pointer-events:auto; background:linear-gradient(transparent, rgba(0,0,0,0.7)); align-items:center; padding:0 8px; gap:6px; box-sizing:border-box;\"><button type=\"button\" id=\"video-container-95487-play-btn\" style=\"width:36px; height:36px; border:none; background:transparent; cursor:pointer; padding:0; display:flex; align-items:center; justify-content:center; flex-shrink:0;\" title=\"Play\"><svg id=\"video-container-95487-play-icon\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"white\"><path d=\"M8 5v14l11-7z\"\/><\/svg><\/button><span id=\"video-container-95487-time-current\" style=\"color:#fff; font-size:12px; font-family:Arial,sans-serif; min-width:36px; text-align:center; user-select:none;\">0:00<\/span><div id=\"video-container-95487-progress-wrap\" style=\"flex:1; height:4px; background:rgba(255,255,255,0.3); border-radius:2px; cursor:pointer; position:relative;\"><div id=\"video-container-95487-progress-buffered\" style=\"position:absolute; top:0; left:0; height:100%; background:rgba(255,255,255,0.4); border-radius:2px; pointer-events:none;\"><\/div><div id=\"video-container-95487-progress-bar\" style=\"position:absolute; top:0; left:0; height:100%; background:#ff0000; border-radius:2px; pointer-events:none;\"><\/div><div id=\"video-container-95487-progress-thumb\" style=\"position:absolute; top:50%; left:0; width:12px; height:12px; background:#ff0000; border-radius:50%; transform:translate(-50%,-50%); pointer-events:none; display:none;\"><\/div><\/div><span id=\"video-container-95487-time-duration\" style=\"color:#fff; font-size:12px; font-family:Arial,sans-serif; min-width:36px; text-align:center; user-select:none;\">0:00<\/span><button id=\"video-container-95487-mute-btn\" style=\"width:36px; height:36px; border:none; background:transparent; cursor:pointer; padding:0; display:flex; align-items:center; justify-content:center; flex-shrink:0; position:relative;\" title=\"Mute\"><svg id=\"video-container-95487-vol-icon\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"white\"><path d=\"M3 9v6h4l5 5V4L7 9H3zm13.5 3A4.5 4.5 0 0014 8.14v7.72c1.48-.73 2.5-2.25 2.5-3.86zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z\"\/><\/svg><\/button><style>#video-container-95487-vol-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;background:#fff;cursor:pointer;margin-top:-5px;}#video-container-95487-vol-slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:#fff;border:none;cursor:pointer;}#video-container-95487-vol-slider::-webkit-slider-runnable-track{height:4px;border-radius:4px;}#video-container-95487-vol-slider::-moz-range-track{height:4px;border-radius:4px;background:rgba(255,255,255,0.3);}<\/style><div id=\"video-container-95487-vol-slider-wrap\" style=\"display:none; align-items:center; height:40px; padding:0px 4px;\"><input id=\"video-container-95487-vol-slider\" type=\"range\" min=\"0\" max=\"100\" value=\"100\" style=\"width:80px; height:4px; cursor:pointer; -webkit-appearance:none; appearance:none; background:linear-gradient(to right,#fff 100%,rgba(255,255,255,0.3) 100%); border-radius:4px; outline:none; padding:0;\" \/><\/div><button id=\"video-container-95487-fs-btn\" style=\"width:36px; height:36px; border:none; background:transparent; cursor:pointer; padding:0; display:flex; align-items:center; justify-content:center; flex-shrink:0;\" title=\"Toggle fullscreen\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"white\"><path d=\"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\"\/><\/svg><\/button><\/div><div id=\"video-container-95487-browser-warning\" style=\"position:absolute; top:0; left:0; width:100%; height:100%; display:none; pointer-events:none; flex-direction:column; justify-content:center; align-items:center; background-color:rgba(0,0,0,0.7); color:white; text-align:center; border-radius:0px;\"><p id=\"video-container-95487-warning-text\" style=\"font-size:16px; margin:0 20px 5px;\"><\/p><p style=\"font-size:14px; margin:5px 20px 15px;\">For the best experience, use a browser with WebGL support.<\/p><button id=\"video-container-95487-browser-continue\" style=\"padding:10px 15px; background-color:#0085ba; color:#fff; border:none; border-radius:4px; cursor:pointer;\">Continue Anyway<\/button><\/div><div id=\"video-container-95487-iphone-fallback\" style=\"position:absolute; top:0; left:0; width:100%; height:100%; display:none; pointer-events:none; flex-direction:column; justify-content:center; align-items:center; background-color:rgba(0,0,0,0.75); color:white; text-align:center; border-radius:0px;\"><p id=\"video-container-95487-mobile-fallback-title\" style=\"font-size:16px; margin:0 20px 8px;\">YouTube 360 is limited in mobile browser embeds.<\/p><p id=\"video-container-95487-mobile-fallback-description\" style=\"font-size:14px; margin:0 20px 15px;\">For proper 360 playback, open this video in the YouTube app.<\/p><a id=\"video-container-95487-iphone-open\" href=\"https:\/\/www.youtube.com\/watch?v=6HNPQyyuP04\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"color:rgba(255,255,255,0.85); text-decoration:underline; font-size:12px; margin-bottom:8px;\">Open in YouTube<\/a><a id=\"video-container-95487-iphone-continue\" href=\"#\" style=\"color:rgba(255,255,255,0.75); text-decoration:underline; font-size:12px;\">Show Here Anyway<\/a><\/div><\/div><\/div>\n<script>\n        function wpvr_check_360_support() {\n            var support = {\n                supported: false,\n                fullySupported: false,\n                webgl: false,\n                orientation: false,\n                gyroscope: false,\n                touch: false,\n                browser: \"unknown\",\n                isMobile: false,\n                isIPhone: false,\n                isAndroid: false,\n                details: []\n            };\n\n            \/\/ Detect mobile devices\n            support.isMobile = \/iPhone|iPad|iPod|Android\/i.test(navigator.userAgent);\n            support.isIPhone = \/iPhone\/i.test(navigator.userAgent);\n            support.isAndroid = \/Android\/i.test(navigator.userAgent);\n            if (support.isMobile) {\n                support.details.push(\"Mobile device detected\");\n            }\n            if (support.isIPhone) {\n                support.details.push(\"iPhone detected\");\n            }\n            if (support.isAndroid) {\n                support.details.push(\"Android device detected\");\n            }\n\n            \/\/ Browser detection\n            var ua = navigator.userAgent;\n            if (\/^((?!chrome|android).)*safari\/i.test(ua)) {\n                support.browser = \"safari\";\n                support.details.push(\"Safari browser detected\");\n            } else if (ua.indexOf(\"Chrome\") > -1) {\n                support.browser = \"chrome\";\n                support.details.push(\"Chrome browser detected\");\n            } else if (ua.indexOf(\"Firefox\") > -1) {\n                support.browser = \"firefox\";\n                support.details.push(\"Firefox browser detected\");\n            } else if (ua.indexOf(\"MSIE\") > -1 || ua.indexOf(\"Trident\") > -1) {\n                support.browser = \"ie\";\n                support.details.push(\"Internet Explorer detected\");\n            } else if (ua.indexOf(\"Edge\") > -1 || ua.indexOf(\"Edg\") > -1) {\n                support.browser = \"edge\";\n                support.details.push(\"Edge browser detected\");\n            } else if (ua.indexOf(\"Opera\") > -1 || ua.indexOf(\"OPR\") > -1) {\n                support.browser = \"opera\";\n                support.details.push(\"Opera browser detected\");\n            }\n\n            \/\/ Check WebGL support\n            try {\n                var canvas = document.createElement(\"canvas\");\n                support.webgl = !!(window.WebGLRenderingContext &&\n                    (canvas.getContext(\"webgl\") || canvas.getContext(\"experimental-webgl\")));\n\n                if (support.webgl) {\n                    support.details.push(\"WebGL supported\");\n                } else {\n                    support.details.push(\"WebGL not supported\");\n                }\n            } catch (e) {\n                support.webgl = false;\n                support.details.push(\"WebGL detection error: \" + e.message);\n            }\n\n            \/\/ Check device orientation support\n            support.orientation = !!(window.DeviceOrientationEvent);\n            if (support.orientation) {\n                support.details.push(\"Device Orientation API supported\");\n            } else {\n                support.details.push(\"Device Orientation API not supported\");\n            }\n\n            \/\/ Check for gyroscope\n            if (window.Gyroscope) {\n                support.gyroscope = true;\n                support.details.push(\"Gyroscope supported\");\n            } else {\n                support.details.push(\"Gyroscope not supported\");\n            }\n\n            \/\/ Check touch support for mobile interaction\n            support.touch = \"ontouchstart\" in window || navigator.maxTouchPoints > 0;\n            if (support.touch) {\n                support.details.push(\"Touch supported\");\n            } else {\n                support.details.push(\"Touch not supported\");\n            }\n\n            \/\/ Overall support determination\n            support.supported = support.webgl;\n            \n            \/\/ Full support means WebGL + orientation on mobile or WebGL on desktop\n            support.fullySupported = support.webgl;\n\n            \/\/ Browser-specific warnings\n                if (support.browser === \"ie\") {\n                support.browserWarning = \"Internet Explorer has limited support for 360 videos. The experience may not be optimal.\";\n                support.fullySupported = false;\n            } else if (!support.supported) {\n                support.browserWarning = \"Your browser does not fully support 360\u00b0 videos. For the best experience, please use a modern browser with WebGL support.\";\n            }\n\n            return support;\n        }\n    <\/script>\n<script>\n        \/\/ Wait for DOM to be fully loaded\n        document.addEventListener(\"DOMContentLoaded\", function() {\n            var playerInitialised = false;\n            var ytPlayer = null;\n            var dragSurface = document.getElementById(\"video-container-95487-drag-surface\");\n            var isDragging = false;\n            var dragStartX = 0;\n            var dragStartY = 0;\n            var dragStartView = null;\n\n            function clamp(value, min, max) {\n                return Math.min(Math.max(value, min), max);\n            }\n\n            function getSphericalView() {\n                if (!ytPlayer || typeof ytPlayer.getSphericalProperties !== \"function\") {\n                    return null;\n                }\n\n                var view = ytPlayer.getSphericalProperties();\n                return view && Object.keys(view).length ? view : null;\n            }\n\n            function setDragSurfaceEnabled(enabled) {\n                if (!dragSurface) {\n                    return;\n                }\n\n                dragSurface.style.display = enabled ? \"block\" : \"none\";\n                dragSurface.style.pointerEvents = enabled ? \"auto\" : \"none\";\n            }\n\n            function getEventPoint(event) {\n                if (event.touches && event.touches.length) {\n                    return event.touches[0];\n                }\n\n                if (event.changedTouches && event.changedTouches.length) {\n                    return event.changedTouches[0];\n                }\n\n                return event;\n            }\n\n            function beginDrag(event) {\n                var point = getEventPoint(event);\n                var sphericalView = getSphericalView();\n\n                if (!sphericalView || !point) {\n                    return;\n                }\n\n                event.preventDefault();\n                dragStartX = point.clientX;\n                dragStartY = point.clientY;\n                dragStartView = sphericalView;\n                dragSurface.style.cursor = \"grabbing\";\n            }\n\n            function updateDrag(event) {\n                var deltaX;\n                var deltaY;\n                var nextView;\n                var point = getEventPoint(event);\n\n                if (!point) {\n                    return;\n                }\n\n                if (!isDragging && dragStartView) {\n                    deltaX = point.clientX - dragStartX;\n                    deltaY = point.clientY - dragStartY;\n                    if (Math.sqrt(deltaX * deltaX + deltaY * deltaY) > 5) {\n                        isDragging = true;\n                    }\n                }\n\n                if (!isDragging || !dragStartView || !ytPlayer || typeof ytPlayer.setSphericalProperties !== \"function\") {\n                    return;\n                }\n\n                event.preventDefault();\n                deltaX = point.clientX - dragStartX;\n                deltaY = point.clientY - dragStartY;\n\n                nextView = {\n                    yaw: (dragStartView.yaw || 0) + (deltaX * 0.2),\n                    pitch: clamp((dragStartView.pitch || 0) + (deltaY * 0.2), -85, 85),\n                    roll: dragStartView.roll || 0,\n                    fov: dragStartView.fov || 100\n                };\n\n                ytPlayer.setSphericalProperties(nextView);\n            }\n\n            function endDrag() {\n                if (!isDragging && dragStartView && ytPlayer) {\n                    var playerState = ytPlayer.getPlayerState();\n                    if (playerState === 1) {\n                        ytPlayer.pauseVideo();\n                    } else {\n                        ytPlayer.playVideo();\n                    }\n                }\n                isDragging = false;\n                dragStartView = null;\n                if (dragSurface) {\n                    dragSurface.style.cursor = \"grab\";\n                }\n            }\n\n            function update360DragAvailability() {\n                var sphericalView = getSphericalView();\n                setDragSurfaceEnabled(!!sphericalView);\n            }\n\n            function schedule360AvailabilityChecks() {\n                update360DragAvailability();\n                window.setTimeout(update360DragAvailability, 500);\n                window.setTimeout(update360DragAvailability, 1500);\n                window.setTimeout(update360DragAvailability, 3000);\n            }\n\n            if (dragSurface) {\n                dragSurface.addEventListener(\"mousedown\", function(event) {\n                    beginDrag(event);\n                });\n\n                dragSurface.addEventListener(\"touchstart\", function(event) {\n                    beginDrag(event);\n                }, { passive: false });\n\n                dragSurface.addEventListener(\"dragstart\", function(event) {\n                    event.preventDefault();\n                });\n\n                window.addEventListener(\"mousemove\", function(event) {\n                    updateDrag(event);\n                });\n\n                window.addEventListener(\"touchmove\", function(event) {\n                    updateDrag(event);\n                }, { passive: false });\n\n                window.addEventListener(\"mouseup\", function() {\n                    endDrag();\n                });\n\n                window.addEventListener(\"touchend\", function() {\n                    endDrag();\n                });\n\n                window.addEventListener(\"touchcancel\", function() {\n                    endDrag();\n                });\n            }\n\n            function wpvrLoadYouTubeApi(callback) {\n                window.wpvrYoutubeApiCallbacks = window.wpvrYoutubeApiCallbacks || [];\n\n                if (window.YT && window.YT.Player) {\n                    callback();\n                    return;\n                }\n\n                window.wpvrYoutubeApiCallbacks.push(callback);\n\n                if (window.wpvrYoutubeApiLoading) {\n                    return;\n                }\n\n                window.wpvrYoutubeApiLoading = true;\n\n                var previousReady = window.onYouTubeIframeAPIReady;\n                window.onYouTubeIframeAPIReady = function() {\n                    if (typeof previousReady === \"function\") {\n                        previousReady();\n                    }\n\n                    var callbacks = window.wpvrYoutubeApiCallbacks || [];\n                    while (callbacks.length) {\n                        var queuedCallback = callbacks.shift();\n                        if (typeof queuedCallback === \"function\") {\n                            queuedCallback();\n                        }\n                    }\n                };\n\n                var tag = document.createElement(\"script\");\n                tag.src = \"https:\/\/www.youtube.com\/iframe_api\";\n                var firstScriptTag = document.getElementsByTagName(\"script\")[0];\n                firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n            }\n\n            function initializeYouTubePlayer() {\n                if (playerInitialised) {\n                    return;\n                }\n\n                wpvrLoadYouTubeApi(function() {\n                    if (playerInitialised || !(window.YT && window.YT.Player)) {\n                        return;\n                    }\n\n                    ytPlayer = new YT.Player(\"video-container-95487-iframe\", {\n                        events: {\n                            onReady: function() {\n                                schedule360AvailabilityChecks();\n                                startProgressLoop();\n                                scheduleIPhoneFallbackCheck();\n                            },\n                            onStateChange: function() {\n                                schedule360AvailabilityChecks();\n                                startProgressLoop();\n                                scheduleIPhoneFallbackCheck();\n                            }\n                        }\n                    });\n                    playerInitialised = true;\n                });\n            }\n\n            \/\/ Check compatibility first\n            var supportInfo = wpvr_check_360_support();\n            var frameContainer = document.getElementById(\"video-container-95487-frame\");\n            let compatibilityCheck = document.getElementById(\"video-container-95487-compatibility-check\");\n            var iphoneFallback = document.getElementById(\"video-container-95487-iphone-fallback\");\n            var iphoneContinue = document.getElementById(\"video-container-95487-iphone-continue\");\n            var mobileFallbackTitle = document.getElementById(\"video-container-95487-mobile-fallback-title\");\n            var mobileFallbackDescription = document.getElementById(\"video-container-95487-mobile-fallback-description\");\n\n            function updateMobileFallbackContent() {\n                if (!mobileFallbackTitle || !mobileFallbackDescription) {\n                    return;\n                }\n\n                if (supportInfo.isIPhone) {\n                    mobileFallbackTitle.textContent = \"YouTube 360 is limited in iPhone Safari embeds.\";\n                    mobileFallbackDescription.textContent = \"For proper 360 playback, open this video in the YouTube app.\";\n                } else if (supportInfo.isAndroid) {\n                    mobileFallbackTitle.textContent = \"YouTube 360 is limited in Android browser embeds.\";\n                    mobileFallbackDescription.textContent = \"For reliable 360 playback, open this video in the YouTube app.\";\n                } else {\n                    mobileFallbackTitle.textContent = \"YouTube 360 is limited in mobile browser embeds.\";\n                    mobileFallbackDescription.textContent = \"For proper 360 playback, open this video in the YouTube app.\";\n                }\n            }\n\n            function hideIPhoneFallback() {\n                if (!iphoneFallback) {\n                    return;\n                }\n\n                iphoneFallback.style.display = \"none\";\n                iphoneFallback.style.pointerEvents = \"none\";\n            }\n\n            function showIPhoneFallback() {\n                if (!iphoneFallback) {\n                    return;\n                }\n\n                frameContainer.style.display = \"none\";\n                iphoneFallback.style.display = \"flex\";\n                iphoneFallback.style.pointerEvents = \"auto\";\n            }\n\n            function scheduleIPhoneFallbackCheck() {\n                if (!supportInfo.isIPhone && !supportInfo.isAndroid) {\n                    return;\n                }\n\n                updateMobileFallbackContent();\n\n                window.setTimeout(function() {\n                    if (!getSphericalView()) {\n                        showIPhoneFallback();\n                    }\n                }, 1800);\n            }\n\n            if (iphoneContinue) {\n                iphoneContinue.addEventListener(\"click\", function(event) {\n                    event.preventDefault();\n                    hideIPhoneFallback();\n                    showVideo();\n                });\n            }\n\n            if (supportInfo.isMobile && !supportInfo.fullySupported) {\n                compatibilityCheck.style.display = \"flex\";\n                compatibilityCheck.style.pointerEvents = \"auto\";\n            }\n            \/\/ Check browser compatibility and handle overlays accordingly.\n            \/\/ The iframe is already visible by default so the YouTube 360\u00b0 WebGL\n            \/\/ renderer gets the correct dimensions during initialisation.\n            setTimeout(function() {\n                document.getElementById(\"video-container-95487-compatibility-check\").style.display = \"none\";\n                document.getElementById(\"video-container-95487-compatibility-check\").style.pointerEvents = \"none\";\n                \/\/ If browser doesn't support 360 videos well, hide the iframe and show warning\n                if (!supportInfo.supported || supportInfo.browserWarning) {\n                    document.getElementById(\"video-container-95487-frame\").style.display = \"none\";\n                    document.getElementById(\"video-container-95487-warning-text\").textContent = \n                        supportInfo.browserWarning || \"Your browser may not fully support 360\u00b0 videos.\";\n                    var warningEl = document.getElementById(\"video-container-95487-browser-warning\");\n                    warningEl.style.display = \"flex\";\n                    warningEl.style.pointerEvents = \"auto\";\n                    \n                    \/\/ Add continue anyway button handler\n                    document.getElementById(\"video-container-95487-browser-continue\").addEventListener(\"click\", function() {\n                        warningEl.style.display = \"none\";\n                        warningEl.style.pointerEvents = \"none\";\n                        showVideo();\n                    });\n                }\n                \/\/ Otherwise (supported desktop browser): iframe is already visible, nothing to do.\n                else {\n                    initializeYouTubePlayer();\n                }\n            }, 500);\n\n            function showVideo() {\n                hideIPhoneFallback();\n                frameContainer.style.display = \"block\";\n                initializeYouTubePlayer();\n            }\n\n            \/\/ === Custom control bar logic ===\n            var outerContainer = document.getElementById(\"video-container-95487-container\");\n            var controlBar = document.getElementById(\"video-container-95487-controls\");\n            var playBtn = document.getElementById(\"video-container-95487-play-btn\");\n            var playIcon = document.getElementById(\"video-container-95487-play-icon\");\n            var timeCurrent = document.getElementById(\"video-container-95487-time-current\");\n            var timeDuration = document.getElementById(\"video-container-95487-time-duration\");\n            var progressWrap = document.getElementById(\"video-container-95487-progress-wrap\");\n            var progressBar = document.getElementById(\"video-container-95487-progress-bar\");\n            var progressBuffered = document.getElementById(\"video-container-95487-progress-buffered\");\n            var progressThumb = document.getElementById(\"video-container-95487-progress-thumb\");\n            var fsBtn = document.getElementById(\"video-container-95487-fs-btn\");\n            var frameEl = document.getElementById(\"video-container-95487-frame\");\n            var muteBtn = document.getElementById(\"video-container-95487-mute-btn\");\n            var volSlider = document.getElementById(\"video-container-95487-vol-slider\");\n            var volSliderWrap = document.getElementById(\"video-container-95487-vol-slider-wrap\");\n            var volIcon = document.getElementById(\"video-container-95487-vol-icon\");\n\n            var playPath = \"M8 5v14l11-7z\";\n            var pausePath = \"M6 19h4V5H6v14zm8-14v14h4V5h-4z\";\n            var volIconMuted = \"M16.5 12A4.5 4.5 0 0014 8.14v2.07l2.45 2.45c.03-.21.05-.43.05-.66zm2.5 0c0 .93-.21 1.82-.58 2.61l1.47 1.47A8.94 8.94 0 0021 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06a8.99 8.99 0 003.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z\";\n            var volIconLow = \"M7 9v6h4l5 5V4L7 9z\";\n            var volIconMed = \"M3 9v6h4l5 5V4L7 9H3zm13.5 3A4.5 4.5 0 0014 8.14v7.72c1.48-.73 2.5-2.25 2.5-3.86z\";\n            var volIconHigh = \"M3 9v6h4l5 5V4L7 9H3zm13.5 3A4.5 4.5 0 0014 8.14v7.72c1.48-.73 2.5-2.25 2.5-3.86zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z\";\n\n            function formatTime(sec) {\n                if (!sec || isNaN(sec)) return \"0:00\";\n                sec = Math.floor(sec);\n                var m = Math.floor(sec \/ 60);\n                var s = sec % 60;\n                return m + \":\" + (s < 10 ? \"0\" : \"\") + s;\n            }\n\n            \/\/ Show control bar once player exists\n            if (controlBar) controlBar.style.display = \"flex\";\n\n            \/\/ --- Play \/ Pause ---\n            if (playBtn) {\n                playBtn.addEventListener(\"click\", function() {\n                    if (!ytPlayer) return;\n                    var state = ytPlayer.getPlayerState();\n                    if (state === 1) { ytPlayer.pauseVideo(); }\n                    else { ytPlayer.playVideo(); }\n                });\n            }\n\n            function updatePlayIcon() {\n                if (!ytPlayer || !playIcon) return;\n                var state = ytPlayer.getPlayerState();\n                playIcon.querySelector(\"path\").setAttribute(\"d\", state === 1 ? pausePath : playPath);\n            }\n\n            \/\/ --- Progress bar ---\n            var progressAnimId = null;\n            var isSeeking = false;\n            var progressLoopStarted = false;\n\n            function startProgressLoop() {\n                if (progressLoopStarted) return;\n                progressLoopStarted = true;\n                progressAnimId = requestAnimationFrame(updateProgress);\n            }\n\n            function updateProgress() {\n                if (!ytPlayer || isSeeking) { progressAnimId = requestAnimationFrame(updateProgress); return; }\n                try {\n                    var current = typeof ytPlayer.getCurrentTime === \"function\" ? ytPlayer.getCurrentTime() : 0;\n                    var duration = typeof ytPlayer.getDuration === \"function\" ? ytPlayer.getDuration() : 0;\n                    if (duration > 0) {\n                        var pct = (current \/ duration) * 100;\n                        progressBar.style.width = pct + \"%\";\n                        progressThumb.style.left = pct + \"%\";\n                        timeCurrent.textContent = formatTime(current);\n                        timeDuration.textContent = formatTime(duration);\n                    }\n                    if (typeof ytPlayer.getVideoLoadedFraction === \"function\") {\n                        progressBuffered.style.width = (ytPlayer.getVideoLoadedFraction() * 100) + \"%\";\n                    }\n                    updatePlayIcon();\n                } catch (e) {\n                    \/\/ Player API not ready yet, retry on next frame\n                }\n                progressAnimId = requestAnimationFrame(updateProgress);\n            }\n\n            \/\/ Seek on click \/ drag\n            if (progressWrap) {\n                function seekFromEvent(e) {\n                    var rect = progressWrap.getBoundingClientRect();\n                    var x = Math.max(0, Math.min(e.clientX - rect.left, rect.width));\n                    var pct = x \/ rect.width;\n                    var duration = typeof ytPlayer.getDuration === \"function\" ? ytPlayer.getDuration() : 0;\n                    if (duration > 0 && ytPlayer) {\n                        ytPlayer.seekTo(pct * duration, true);\n                        progressBar.style.width = (pct * 100) + \"%\";\n                        progressThumb.style.left = (pct * 100) + \"%\";\n                        timeCurrent.textContent = formatTime(pct * duration);\n                    }\n                }\n\n                progressWrap.addEventListener(\"mousedown\", function(e) {\n                    isSeeking = true;\n                    seekFromEvent(e);\n                    function onMove(e) { seekFromEvent(e); }\n                    function onUp() {\n                        isSeeking = false;\n                        document.removeEventListener(\"mousemove\", onMove);\n                        document.removeEventListener(\"mouseup\", onUp);\n                    }\n                    document.addEventListener(\"mousemove\", onMove);\n                    document.addEventListener(\"mouseup\", onUp);\n                });\n\n                progressWrap.addEventListener(\"mouseenter\", function() {\n                    progressThumb.style.display = \"block\";\n                });\n                progressWrap.addEventListener(\"mouseleave\", function() {\n                    if (!isSeeking) progressThumb.style.display = \"none\";\n                });\n            }\n\n            \/\/ --- Volume ---\n            var volHideTimer = null;\n            var localVol = 100;\n            var localMuted = false;\n\n            function updateVolIconFromLocal() {\n                if (!volIcon) return;\n                var path;\n                if (localMuted || localVol === 0) { path = volIconMuted; }\n                else if (localVol < 40) { path = volIconLow; }\n                else if (localVol < 75) { path = volIconMed; }\n                else { path = volIconHigh; }\n                volIcon.querySelector(\"path\").setAttribute(\"d\", path);\n            }\n\n            \/\/ Called from schedule360AvailabilityChecks \u2014 only syncs icon, never touches slider\n            function updateVolIcon() {\n                updateVolIconFromLocal();\n            }\n\n            function showVolSlider() {\n                if (volHideTimer) { clearTimeout(volHideTimer); volHideTimer = null; }\n                if (volSliderWrap) volSliderWrap.style.display = \"flex\";\n            }\n            function hideVolSlider() {\n                volHideTimer = setTimeout(function() { if (volSliderWrap) volSliderWrap.style.display = \"none\"; }, 400);\n            }\n\n            if (muteBtn) {\n                muteBtn.addEventListener(\"click\", function() {\n                    if (!ytPlayer) return;\n                    if (localMuted) {\n                        ytPlayer.unMute();\n                        localMuted = false;\n                        if (localVol === 0) { localVol = 100; ytPlayer.setVolume(100); }\n                        if (volSlider) volSlider.value = localVol;\n                    } else {\n                        ytPlayer.mute();\n                        localMuted = true;\n                        if (volSlider) volSlider.value = 0;\n                    }\n                    updateVolIconFromLocal();\n                    updateVolSliderFill();\n                });\n                muteBtn.addEventListener(\"mouseenter\", showVolSlider);\n                muteBtn.addEventListener(\"mouseleave\", hideVolSlider);\n            }\n            if (volSliderWrap) {\n                volSliderWrap.addEventListener(\"mouseenter\", showVolSlider);\n                volSliderWrap.addEventListener(\"mouseleave\", hideVolSlider);\n            }\n            function updateVolSliderFill() {\n                if (!volSlider) return;\n                var v = parseInt(volSlider.value, 10);\n                volSlider.style.background = \"linear-gradient(to right,#fff \" + v + \"%,rgba(255,255,255,0.3) \" + v + \"%)\";\n            }\n            if (volSlider) {\n                volSlider.addEventListener(\"input\", function() {\n                    if (!ytPlayer) return;\n                    var val = parseInt(volSlider.value, 10);\n                    localVol = val;\n                    ytPlayer.setVolume(val);\n                    if (val === 0) {\n                        ytPlayer.mute();\n                        localMuted = true;\n                    } else if (localMuted) {\n                        ytPlayer.unMute();\n                        localMuted = false;\n                    }\n                    updateVolIconFromLocal();\n                    updateVolSliderFill();\n                });\n                updateVolSliderFill();\n            }\n\n            \/\/ --- Fullscreen ---\n            if (outerContainer) {\n                var savedFrameWidth = frameEl ? frameEl.style.width : \"\";\n                var savedFrameHeight = frameEl ? frameEl.style.height : \"\";\n                var savedFrameMaxWidth = frameEl ? frameEl.style.maxWidth : \"\";\n                var savedFrameBorderRadius = frameEl ? frameEl.style.borderRadius : \"\";\n                var savedContainerBackground = outerContainer.style.background;\n                if(fsBtn){\n                    fsBtn.addEventListener(\"click\", function() {\n                        var fsEl = document.fullscreenElement || document.webkitFullscreenElement;\n                        if (fsEl) {\n                            (document.exitFullscreen || document.webkitExitFullscreen).call(document);\n                        } else {\n                            (outerContainer.requestFullscreen || outerContainer.webkitRequestFullscreen).call(outerContainer);\n                        }\n                    });\n                }\n                function onFsChange() {\n                    var fsEl = document.fullscreenElement || document.webkitFullscreenElement;\n                    var isFs = (fsEl === outerContainer);\n                    frameEl.style.width = isFs ? \"100%\" : savedFrameWidth;\n                    frameEl.style.height = isFs ? \"100%\" : savedFrameHeight;\n                    frameEl.style.maxWidth = isFs ? \"100%\" : savedFrameMaxWidth;\n                    frameEl.style.borderRadius = isFs ? \"0\" : savedFrameBorderRadius;\n                    outerContainer.style.background = isFs ? \"#000\" : savedContainerBackground;\n                    fsBtn.querySelector(\"svg path\").setAttribute(\"d\", isFs\n                        ? \"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z\"\n                        : \"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\"\n                    );\n                    schedule360AvailabilityChecks();\n                }\n                document.addEventListener(\"fullscreenchange\", onFsChange);\n                document.addEventListener(\"webkitfullscreenchange\", onFsChange);\n            }\n\n            \/\/ Sync controls after player ready\n            var origSchedule = schedule360AvailabilityChecks;\n            schedule360AvailabilityChecks = function() {\n                origSchedule();\n                updateVolIcon();\n                updatePlayIcon();\n            };\n        });\n    <\/script>\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><em><sub>Storm Lake Parade of Flags<\/sub><\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Sunrise CampGround Tour 001\" width=\"819\" height=\"461\" src=\"https:\/\/www.youtube.com\/embed\/y3zQS-U5Fj4?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Sunrise Campground Tour 1 - During the week<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Sunrise Campground Tour 002\" width=\"819\" height=\"461\" src=\"https:\/\/www.youtube.com\/embed\/v9NXrQAGvhQ?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Storm Lake Campground Tour 2 - Complete Loops at Sunset<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"360 - Lake Side Campground Storm Lake Iowa\" width=\"819\" height=\"461\" src=\"https:\/\/www.youtube.com\/embed\/hCSaHVr-AyU?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Nearby Lake Side Campground<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>I don&#8217;t usually go camping on Memorial and\/or Labor Day Weekends but this year I had a camp spot fall [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false,"_members_access_role":[],"_members_access_error":""},"categories":[4,5,81],"tags":[80,78,69,82],"class_list":["post-2014","post","type-post","status-publish","format-standard","hentry","category-camping","category-iowa","category-sunrise-campground","tag-80","tag-78","tag-iowa","tag-storm-lake"],"jetpack_publicize_connections":[],"jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/niasnebraska.com\/index.php\/wp-json\/wp\/v2\/posts\/2014","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/niasnebraska.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/niasnebraska.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/niasnebraska.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/niasnebraska.com\/index.php\/wp-json\/wp\/v2\/comments?post=2014"}],"version-history":[{"count":15,"href":"https:\/\/niasnebraska.com\/index.php\/wp-json\/wp\/v2\/posts\/2014\/revisions"}],"predecessor-version":[{"id":2612,"href":"https:\/\/niasnebraska.com\/index.php\/wp-json\/wp\/v2\/posts\/2014\/revisions\/2612"}],"wp:attachment":[{"href":"https:\/\/niasnebraska.com\/index.php\/wp-json\/wp\/v2\/media?parent=2014"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/niasnebraska.com\/index.php\/wp-json\/wp\/v2\/categories?post=2014"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/niasnebraska.com\/index.php\/wp-json\/wp\/v2\/tags?post=2014"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}