{"id":69,"date":"2026-10-10T13:13:02","date_gmt":"2026-10-10T13:13:02","guid":{"rendered":"https:\/\/greenbayweathercam.com\/?page_id=69"},"modified":"2026-10-10T17:17:50","modified_gmt":"2026-10-10T17:17:50","slug":"home-test","status":"publish","type":"page","link":"https:\/\/greenbayweathercam.com\/","title":{"rendered":"Home test"},"content":{"rendered":"\n<style>\nbody.page-id-69{background:#eef6f8;color:#173144;font-family:system-ui,-apple-system,\"Segoe UI\",sans-serif;line-height:1.5}\nbody.page-id-69 #masthead .inside-header{padding:20px 24px 12px}body.page-id-69 #masthead .header-image{width:420px!important;max-width:100%!important;height:auto}body.page-id-69 #site-navigation .inside-navigation{justify-content:center}body.page-id-69 #site-navigation .main-nav ul li a{padding-left:15px;padding-right:15px;line-height:48px}body.page-id-69 #page{max-width:1160px!important;margin:24px auto 0;padding:0 24px}body.page-id-69 #post-69 .inside-article{padding:0!important;background:transparent}body.page-id-69 #post-69 .entry-content{margin:0}#post-69 *{box-sizing:border-box}#post-69 h1,#post-69 h2{color:#15384c;line-height:1.2;letter-spacing:-.025em}#post-69 h1{font-size:clamp(27px,4vw,40px);margin:0 0 10px}#post-69 h2{font-size:clamp(23px,3vw,30px);margin:0 0 12px}#post-69 p{margin:0 0 14px}#post-69 a:focus-visible{outline:3px solid #e9ad18;outline-offset:4px}#post-69 .gb-section{margin:0 0 24px;padding:24px;background:#fff;border:1px solid #d7e5eb;border-radius:16px;box-shadow:0 5px 20px #103e5910}#post-69 .gb-eyebrow{font-size:12px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#087ca3;margin:0 0 8px}#post-69 .gb-camera-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px}#post-69 .gb-camera-head h2{margin:0}#post-69 .gb-camera-badge{font-size:13px;font-weight:700;color:#176747;background:#eaf7f0;padding:7px 12px;border-radius:30px;white-space:nowrap}#post-69 .gb-camera-frame{position:relative;aspect-ratio:16\/9;overflow:hidden;border-radius:12px;background:#102c3e}#post-69 .gb-camera-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0}#post-69 .gb-camera-info{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-top:14px;color:#506572;font-size:14px}#post-69 .gb-camera-info p{margin:0}#post-69 .gb-camera-info a{color:#087ca3;font-weight:700}#post-69 #next-12-hours>div{grid-template-columns:repeat(4,minmax(0,1fr))!important}#post-69 #next-12-hours>div>div p{font-size:26px;font-weight:750;color:#15384c;margin:8px 0}#post-69 #next-12-hours small{font-size:12px;color:#506572}#post-69 .gb-links{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}#post-69 .gb-links a{display:block;padding:16px;border:1px solid #d7e5eb;border-radius:10px;background:#f4f9fb;color:#075f84;text-decoration:none;font-weight:700}#post-69 .gb-links a:hover{background:#e3f1f7}#post-69 .gb-links span{display:block;margin-top:5px;color:#506572;font-size:13px;font-weight:400}#post-69 #gb-weather-frame{display:block;width:100%;height:1600px;border:0;border-radius:12px;background:#fff}#post-69 .gb-weather-fallback{font-size:13px;margin-top:12px}\n@media(max-width:768px){body.page-id-69 #masthead .header-image{width:320px!important}body.page-id-69 #masthead .inside-header{padding:16px}body.page-id-69 #page{padding:0 12px;margin-top:16px}#post-69 .gb-section{padding:18px;margin-bottom:18px}#post-69 #next-12-hours>div{grid-template-columns:repeat(2,minmax(0,1fr))!important}#post-69 .gb-links{grid-template-columns:repeat(2,minmax(0,1fr))}#post-69 .gb-camera-info{align-items:flex-start;flex-direction:column;gap:8px}}\n@media(max-width:420px){#post-69 .gb-links{grid-template-columns:1fr}#post-69 .gb-camera-head{gap:8px}#post-69 .gb-camera-badge{font-size:11px;padding:6px 8px}#post-69 #gb-station-status{padding:14px!important}#post-69 #next-12-hours{padding:18px!important}}\n<\/style>\n\n\n\n<div id=\"gb-station-status\" role=\"status\" aria-live=\"polite\"\n  style=\"display:flex;flex-wrap:wrap;align-items:center;\n  justify-content:space-between;gap:12px;\n  padding:18px 22px;margin:0 0 16px;\n  background:#f0faf5;border:1px solid #cbd7de;\n  border-left:8px solid #17834f;border-radius:16px;\n  box-shadow:0 8px 24px rgba(14,59,99,.10);\">\n\n  <div>\n    <div style=\"font-size:12px;font-weight:800;\n      letter-spacing:1px;color:#50616d;\">\n      WEATHER STATION STATUS\n    <\/div>\n    <div id=\"gb-status-label\"\n      style=\"font-size:20px;font-weight:800;color:#15384c;\">\n      Checking station&#8230;\n    <\/div>\n  <\/div>\n\n  <div id=\"gb-status-detail\"\n    style=\"font-size:14px;font-weight:600;color:#425761;\">\n    Checking latest update&#8230;\n  <\/div>\n<\/div>\n\n<script>\n(function () {\n  const url =\n    '\/weather-home-embed.php?station_status=1';\n\n  async function updateStatus() {\n    try {\n      const response = await fetch(url + '&t=' + Date.now(),\n        {cache:'no-store'});\n      if (!response.ok) throw new Error('Status unavailable');\n\n      const data = await response.json();\n      const box = document.getElementById('gb-station-status');\n\n      const colors = {\n        live: ['#f0faf5','#17834f'],\n        delayed: ['#fff8e8','#b26a00'],\n        offline: ['#fff1f1','#bd2e35'],\n        unknown: ['#f4f7f8','#697986']\n      };\n\n      const color = colors[data.state] || colors.unknown;\n      box.style.background = color[0];\n      box.style.borderLeftColor = color[1];\n\n      document.getElementById('gb-status-label').textContent =\n        data.label || 'Station status unavailable';\n\n      document.getElementById('gb-status-detail').textContent =\n        data.detail || 'Update time unavailable';\n\n    } catch (error) {\n      document.getElementById('gb-status-label').textContent =\n        'Station status unavailable';\n      document.getElementById('gb-status-detail').textContent =\n        'Unable to check station data';\n    }\n  }\n\n  updateStatus();\n  setInterval(updateStatus, 60000);\n})();\n<\/script>\n\n\n\n<div id=\"gb-nws-alert\" style=\"\n  padding:15px 20px;\n  margin:0 0 20px;\n  border-radius:12px;\n  background:#f1f4f6;\n  border:1px solid #d1d9de;\n  text-align:center;\n  font-weight:700;\n  color:#425761;\">\n  Checking National Weather Service alerts&#8230;\n<\/div>\n\n<script>\n(function () {\n  const box = document.getElementById('gb-nws-alert');\n\n  async function checkAlerts() {\n    try {\n      const response = await fetch(\n        'https:\/\/api.weather.gov\/alerts\/active?zone=WIC009',\n        {headers:{Accept:'application\/geo+json'}}\n      );\n      if (!response.ok) throw new Error('NWS unavailable');\n\n      const data = await response.json();\n      const alerts = data.features || [];\n\n      if (alerts.length === 0) {\n        box.style.background = '#f1f4f6';\n        box.style.color = '#425761';\n        box.textContent = 'No Warnings, Watches, or Advisories';\n      } else {\n        box.style.background = '#fff1f1';\n        box.style.color = '#a31924';\n        box.innerHTML = '';\n\n        const link = document.createElement('a');\n        link.href = '\/wxadvisory.php';\n        link.style.color = 'inherit';\n        link.textContent = alerts.length +\n          ' Active Weather Alert' +\n          (alerts.length === 1 ? '' : 's') +\n          ' \u2014 View Details';\n        box.appendChild(link);\n      }\n    } catch (error) {\n      box.textContent = 'Weather alert information temporarily unavailable';\n    }\n  }\n\n  checkAlerts();\n  setInterval(checkAlerts, 300000);\n})();\n<\/script>\n\n\n\n<section class=\"gb-section\" aria-labelledby=\"gb-weather-heading\"><h1 id=\"gb-weather-heading\">Current Conditions &amp; Local Forecast<\/h1><iframe id=\"gb-weather-frame\" src=\"\/wx8-modern.php\" title=\"Green Bay live station readings and local forecast\" loading=\"eager\"><\/iframe><p class=\"gb-weather-fallback\"><a href=\"\/wx8-modern.php\" target=\"_blank\" rel=\"noopener\">Open weather conditions in a new tab \u2197<\/a> <span aria-hidden=\"true\"> \u00b7 <\/span> <a href=\"https:\/\/www.weather.gov\/grb\/weatherstory\" target=\"_blank\" rel=\"noopener\" style=\"font-weight:700\">Green Bay Weather Story \u2197<\/a><\/p><\/section><script>(function(){const frame=document.getElementById('gb-weather-frame');function fit(){try{const doc=frame.contentDocument;if(!doc||!doc.body)return;const content=doc.querySelector('main')||doc.body;frame.style.height=Math.ceil(content.getBoundingClientRect().bottom+frame.contentWindow.scrollY+24)+'px';}catch(e){}}frame.addEventListener('load',function(){fit();try{new ResizeObserver(fit).observe(frame.contentDocument.querySelector('main')||frame.contentDocument.body);}catch(e){}});window.addEventListener('resize',fit);})();<\/script>\n\n\n\n<section class=\"gb-section\" aria-labelledby=\"gb-camera-heading\"><div class=\"gb-camera-head\"><h2 id=\"gb-camera-heading\">Live Green Bay Camera<\/h2><span class=\"gb-camera-badge\">EarthCam stream<\/span><\/div><div class=\"gb-camera-frame\"><iframe src=\"https:\/\/www.myearthcam.com\/greenbay?embed\" title=\"Live EarthCam view of Green Bay, Wisconsin\" loading=\"eager\" allow=\"autoplay; fullscreen; picture-in-picture\" allowfullscreen><\/iframe><\/div><div class=\"gb-camera-info\"><p>Haven Way \u00b7 Green Bay, Wisconsin<\/p><a href=\"https:\/\/www.myearthcam.com\/greenbay\" target=\"_blank\" rel=\"noopener noreferrer\">Open camera in a new tab \u2197<\/a><\/div><\/section>\n\n\n\n<section id=\"next-12-hours\" class=\"gb-section\">\n  <h2>Next 12 Hours<\/h2>\n  <p>National Weather Service hourly forecast \u00b7 Next 12 hours<\/p>\n\n  <div style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,180px),1fr));gap:12px;\">\n\n    <div style=\"padding:15px;background:#f4f9fb;border-radius:12px;\">\n      <strong>Expected Temperature<\/strong>\n      <p id=\"next12-temperature\">Loading&#8230;<\/p>\n      <small id=\"next12-temperature-detail\"><\/small>\n    <\/div>\n\n    <div style=\"padding:15px;background:#f4f9fb;border-radius:12px;\">\n      <strong>Rain Chance<\/strong>\n      <p id=\"next12-rain\">Loading&#8230;<\/p>\n    <\/div>\n\n    <div style=\"padding:15px;background:#f4f9fb;border-radius:12px;\">\n      <strong>Strongest Wind<\/strong>\n      <p id=\"next12-wind\">Loading&#8230;<\/p>\n      <small id=\"next12-wind-detail\"><\/small>\n    <\/div>\n\n    <div style=\"padding:15px;background:#f4f9fb;border-radius:12px;\">\n      <strong>Active Alerts<\/strong>\n      <p id=\"next12-alerts\">Loading&#8230;<\/p>\n      <small id=\"next12-alert-detail\"><\/small>\n    <\/div>\n\n  <\/div>\n\n  <p id=\"next12-updated\" style=\"margin-top:15px;font-size:13px;\"><\/p>\n  <p id=\"next12-error\" hidden>Forecast temporarily unavailable.<\/p>\n<\/section>\n\n\n\n<script>\n(function () {\n  const pointUrl =\n    'https:\/\/api.weather.gov\/points\/44.81639,-88.02667';\n\n  const alertsUrl =\n    'https:\/\/api.weather.gov\/alerts\/active?point=44.81639,-88.02667';\n\n  async function loadForecast() {\n    const getJson = async url => {\n      const response = await fetch(url, {\n        headers: { Accept: 'application\/geo+json' }\n      });\n      if (!response.ok) throw new Error('NWS unavailable');\n      return response.json();\n    };\n\n    try {\n      const point = await getJson(pointUrl);\n      const [hourly, alerts] = await Promise.all([\n        getJson(point.properties.forecastHourly),\n        getJson(alertsUrl)\n      ]);\n\n      const periods = hourly.properties.periods.slice(0, 12);\n      const temperatures = periods.map(p => p.temperature);\n      const low = Math.min(...temperatures);\n      const high = Math.max(...temperatures);\n\n      document.getElementById('next12-temperature').textContent =\n        low === high ? low + '\u00b0F' : low + '\u2013' + high + '\u00b0F';\n\n      document.getElementById('next12-temperature-detail').textContent =\n        'Lowest to highest expected temperature';\n\n      const rain = periods.map(p =>\n        p.probabilityOfPrecipitation?.value ?? 0\n      );\n\n      document.getElementById('next12-rain').textContent =\n        Math.max(...rain) + '%';\n\n      const strongest = periods.reduce((best, p) => {\n        const speeds = (p.windSpeed || '').match(\/\\d+\/g) || [];\n        const speed = Math.max(0, ...speeds.map(Number));\n        return speed > best.speed ? { speed, period: p } : best;\n      }, { speed: -1, period: null });\n\n      document.getElementById('next12-wind').textContent =\n        strongest.period?.windSpeed || 'Calm';\n\n      document.getElementById('next12-wind-detail').textContent =\n        strongest.period?.windDirection\n          ? 'From the ' + strongest.period.windDirection\n          : 'Forecast sustained wind';\n\n      document.getElementById('next12-alerts').textContent =\n        alerts.features.length\n          ? alerts.features.length + ' active'\n          : 'None';\n\n      document.getElementById('next12-alert-detail').textContent =\n        alerts.features.length\n          ? [...new Set(alerts.features.map(a => a.properties.event))]\n              .slice(0, 2).join(', ')\n          : 'No active NWS alerts';\n\n      document.getElementById('next12-updated').textContent =\n        'Updated ' + new Date().toLocaleTimeString('en-US', {\n          hour: 'numeric',\n          minute: '2-digit',\n          timeZone: 'America\/Chicago'\n        }) + ' CT';\n\n      document.getElementById('next12-error').hidden = true;\n\n    } catch (error) {\n      document.getElementById('next12-error').hidden = false;\n      document.getElementById('next12-error').textContent =\n        'Forecast temporarily unavailable.';\n    }\n  }\n\n  loadForecast();\n  setInterval(loadForecast, 900000);\n})();\n<\/script>\n\n\n\n\n\n\n\n<style>#post-69 .gb-ad-section{margin:0 0 24px;padding:18px 24px;background:#fff;border:1px solid #d7e5eb;border-radius:16px;box-sizing:border-box}#post-69 .gb-ad-label{margin:0 0 12px;text-align:center;font-size:11px;letter-spacing:.08em;color:#506572;text-transform:uppercase}@media(max-width:768px){#post-69 .gb-ad-section{padding:16px 18px;margin-bottom:18px}}<\/style>\n<aside class=\"gb-ad-section\" aria-label=\"Advertisement\"><p class=\"gb-ad-label\">Advertisement<\/p>\n<!-- GBWEATHER 1: existing responsive AdSense unit -->\n<ins class=\"adsbygoogle\" style=\"display:block\" data-ad-client=\"ca-pub-6630679380083990\" data-ad-slot=\"4794821644\" data-ad-format=\"auto\" data-full-width-responsive=\"true\"><\/ins>\n<\/aside>\n<script>(function(){if(!document.querySelector('script[src*=\"pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"]')){var script=document.createElement('script');script.async=true;script.src='https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-6630679380083990';script.crossOrigin='anonymous';document.head.appendChild(script);}(window.adsbygoogle=window.adsbygoogle||[]).push({});})();<\/script>\n\n\n\n<style>\n#post-69 .gb-saint-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:18px}\n#post-69 .gb-saint-head h2{margin:0}\n#post-69 .gb-saint-date{font-size:13px;color:#506572}\n#post-69 .gb-saint-card{display:grid;grid-template-columns:180px minmax(0,1fr);gap:24px;align-items:start}\n#post-69 .gb-saint-image{width:180px;height:220px;object-fit:cover;object-position:top;border-radius:12px;background:#edf4f6}\n#post-69 .gb-saint-copy{min-width:0}\n#post-69 .gb-saint-copy h3{font-size:25px;color:#173f56;margin:0 0 8px;line-height:1.25}\n#post-69 .gb-saint-era{color:#506572;font-size:14px}\n#post-69 .gb-saint-summary{color:#425761;line-height:1.65}\n#post-69 .gb-saint-more{display:inline-block;background:#e3f1f7;color:#075f84;padding:10px 16px;border-radius:8px;font-weight:700;text-decoration:none;margin-top:4px}\n#post-69 .gb-saint-note{font-size:12px;color:#506572;margin-top:14px}\n@media(max-width:600px){#post-69 .gb-saint-head{align-items:flex-start;flex-direction:column;gap:8px}#post-69 .gb-saint-card{grid-template-columns:1fr;gap:16px}#post-69 .gb-saint-image{width:100%;height:250px;object-fit:contain}}\n<\/style>\n<section class=\"gb-section\" aria-labelledby=\"gb-saint-heading\">\n  <div class=\"gb-saint-head\"><h2 id=\"gb-saint-heading\">Saint of the Day<\/h2><span id=\"gb-saint-date\" class=\"gb-saint-date\"><\/span><\/div>\n  <div id=\"gb-saint-content\" aria-busy=\"true\"><p role=\"status\">Loading today&#8217;s saint\u2026<\/p><\/div>\n  <a class=\"gb-saint-more\" href=\"\/saint-of-the-day\/\">Explore the Saint of the Day \u2192<\/a>\n  <div class=\"gb-saint-note\">From our Catholic calendar \u00b7 Changes daily in Central Time.<\/div>\n<\/section>\n<script>\n(function(){\n  const api='https:\/\/acoci86.github.io\/daily-saints';\n  const content=document.getElementById('gb-saint-content');\n  const dateLabel=document.getElementById('gb-saint-date');\n  let shownDate='',activeRequest;\n  function el(tag,className,text){const node=document.createElement(tag);if(className)node.className=className;if(text!==undefined)node.textContent=text;return node;}\n  function centralDate(){const parts=new Intl.DateTimeFormat('en-US',{timeZone:'America\/Chicago',year:'numeric',month:'2-digit',day:'2-digit'}).formatToParts(new Date());const values={};for(const part of parts)values[part.type]=part.value;return values;}\n  async function load(force){\n    const date=centralDate(),key=date.month+'-'+date.day,fullDate=date.year+'-'+key;\n    if(!force&&shownDate===fullDate)return;\n    shownDate=fullDate;\n    if(activeRequest)activeRequest.abort();\n    const controller=new AbortController();activeRequest=controller;\n    dateLabel.textContent=new Intl.DateTimeFormat('en-US',{timeZone:'America\/Chicago',month:'long',day:'numeric',year:'numeric'}).format(new Date());\n    content.setAttribute('aria-busy','true');content.replaceChildren(el('p','','Loading today\u2019s saint\u2026'));\n    const timeout=setTimeout(()=>controller.abort(),15000);\n    try{\n      const response=await fetch(api+'\/api\/v1\/saints\/'+key+'.json',{signal:controller.signal});\n      if(!response.ok)throw new Error('Calendar unavailable');\n      const data=await response.json();\n      if(!Array.isArray(data.saints))throw new Error('Invalid calendar');\n      if(activeRequest!==controller)return;\n      const saints=data.saints.filter(s=>s&&typeof s.name==='string'&&s.name.trim());\n      if(!saints.length){content.replaceChildren(el('p','','No saint is listed for today in this calendar.'));return;}\n      const saint=saints[0],card=el('article','gb-saint-card'),copy=el('div','gb-saint-copy');\n      if(typeof saint.image==='string'&&saint.image){\n        try{const url=new URL(saint.image.startsWith('\/')?api+saint.image:saint.image,api+'\/');if(url.protocol==='https:'){const image=el('img','gb-saint-image');image.src=url.href;image.alt='Portrait of '+saint.name;image.loading='lazy';image.addEventListener('error',()=>{image.remove();card.style.gridTemplateColumns='1fr';},{once:true});card.append(image);}}catch(error){}\n      }\n      if(!card.firstChild)card.style.gridTemplateColumns='1fr';\n      copy.append(el('h3','',saint.name));\n      if(typeof saint.era==='string')copy.append(el('p','gb-saint-era',saint.era));\n      if(typeof saint.summary==='string'&&saint.summary){let summary=saint.summary;if(summary.length>430){const cutoff=summary.lastIndexOf(' ',430);summary=summary.slice(0,cutoff>0?cutoff:430)+'\u2026';}copy.append(el('p','gb-saint-summary',summary));}\n      if(saints.length>1)copy.append(el('p','gb-saint-note','Also remembered today: '+saints.slice(1).map(s=>s.name).join(', ')));\n      card.append(copy);content.replaceChildren(card);\n    }catch(error){\n      if(activeRequest!==controller)return;\n      content.replaceChildren(el('p','','Today\u2019s saint is temporarily unavailable. You can still open the full calendar below.'));\n      const retry=el('button','','Try again');retry.type='button';retry.addEventListener('click',()=>load(true));content.append(retry);\n    }finally{clearTimeout(timeout);if(activeRequest===controller)content.setAttribute('aria-busy','false');}\n  }\n  load(false);setInterval(()=>load(false),60000);\n})();\n<\/script>\n\n\n\n\n<style>#post-69 .gb-visitor-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px}#post-69 .gb-visitor-grid>div{padding:16px;background:#f4f9fb;border-radius:12px}#post-69 .gb-visitor-label{display:block;font-size:12px;font-weight:750;text-transform:uppercase;letter-spacing:.04em;color:#506572}#post-69 .gb-visitor-value{display:block;font-size:28px;font-weight:800;color:#173f56;margin-top:6px;font-variant-numeric:tabular-nums}@media(max-width:768px){#post-69 .gb-visitor-grid{grid-template-columns:repeat(2,minmax(0,1fr))}#post-69 .gb-visitor-grid>div:last-child{grid-column:1\/-1}}<\/style>\n<section class=\"gb-section\" aria-labelledby=\"gb-visitors-heading\"><h2 id=\"gb-visitors-heading\">Visitor Statistics<\/h2><div class=\"gb-visitor-grid\"><div><span class=\"gb-visitor-label\">Today<\/span><span class=\"gb-visitor-value\" id=\"gb-visitors-today\">\u2014<\/span><\/div><div><span class=\"gb-visitor-label\">Yesterday<\/span><span class=\"gb-visitor-value\" id=\"gb-visitors-yesterday\">\u2014<\/span><\/div><div><span class=\"gb-visitor-label\">Last 7 Days<\/span><span class=\"gb-visitor-value\" id=\"gb-visitors-last7days\">\u2014<\/span><\/div><div><span class=\"gb-visitor-label\">This Month<\/span><span class=\"gb-visitor-value\" id=\"gb-visitors-month\">\u2014<\/span><\/div><div><span class=\"gb-visitor-label\">Total Visitors<\/span><span class=\"gb-visitor-value\" id=\"gb-visitors-total\">\u2014<\/span><\/div><\/div><p id=\"gb-visitors-status\" role=\"status\" style=\"font-size:13px;color:#506572;margin:14px 0 0\">Loading visitor statistics\u2026<\/p><\/section>\n<script>(function(){async function load(){const status=document.getElementById('gb-visitors-status');try{const response=await fetch('\/wp-admin\/admin-ajax.php?action=gbwc_visitor_statistics',{credentials:'same-origin',cache:'no-store'});if(!response.ok)throw new Error('Counter unavailable');const result=await response.json();if(!result.success)throw new Error('Counter unavailable');for(const key of ['today','yesterday','last7days','month','total']){const count=result.data[key];if(!Number.isInteger(count)||count<0)throw new Error('Invalid counter');}for(const key of ['today','yesterday','last7days','month','total'])document.getElementById('gb-visitors-'+key).textContent=result.data[key].toLocaleString('en-US');status.textContent='Last 7 days includes today \u00b7 Daily totals use Central Time.';}catch(error){status.textContent='Visitor statistics are temporarily unavailable.';}}load();})();<\/script>\n\n\n\n<style>\n#post-69 #gb-site-footer{margin:0 0 24px;padding:24px;border:1px solid #d7e5eb;border-radius:16px;background:#fff;color:#425761;box-shadow:0 5px 20px #103e5910;font:inherit;line-height:1.55}\n#gb-site-footer *{box-sizing:border-box}#gb-site-footer .footer-brand{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:20px}#gb-site-footer .footer-brand h2{margin:0 0 8px!important}#gb-site-footer .footer-brand p{margin:0!important;color:#506572}#gb-site-footer .footer-nav{display:flex;flex-wrap:wrap;gap:10px;margin:0 0 24px}#gb-site-footer a{color:#087ca3;text-underline-offset:3px}#gb-site-footer a:hover{color:#075f84}#gb-site-footer .footer-action{display:inline-flex;align-items:center;min-height:42px;padding:10px 16px;border:0;border-radius:8px;color:#075f84;background:#e3f1f7;font:inherit;font-weight:700;text-decoration:none;cursor:pointer}#gb-site-footer .footer-action:first-child{background:#087ca3;color:#fff}#gb-site-footer .footer-action:hover{background:#d6eaf3}#gb-site-footer .footer-action:first-child:hover{background:#066887}#gb-site-footer a:focus-visible,#gb-site-footer button:focus-visible{outline:3px solid #e9ad18;outline-offset:4px}#gb-site-footer .footer-partners{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:0 0 24px;padding:0}#gb-site-footer .partner{display:flex;align-items:center;justify-content:center;min-width:0;min-height:110px;padding:16px;border:1px solid #d7e5eb;border-radius:12px;background:#f4f9fb}#gb-site-footer .partner:hover{background:#eaf4f8}#gb-site-footer .partner img{display:block;max-width:100%;height:auto;max-height:72px;object-fit:contain}#gb-site-footer .footer-meta{padding-top:20px;border-top:1px solid #d7e5eb}#gb-site-footer .footer-meta p{margin:0 0 10px!important;font-size:13px}#gb-site-footer .footer-disclaimer{max-width:850px;color:#506572;font-size:12px!important}#gb-site-footer .bookmark-message{margin:14px 0 0!important;color:#506572;font-size:13px}#gb-site-footer .gb-partner-fallback{color:#173f56;font-weight:750;text-align:center}#post-69 .gb-statcounter{color:#506572;font-size:13px}\n@media(max-width:768px){#post-69 #gb-site-footer{padding:18px;margin-bottom:18px}#gb-site-footer .footer-partners{grid-template-columns:repeat(2,minmax(0,1fr))}#gb-site-footer .partner{padding:12px;min-height:100px}}\n@media print{#post-69 #gb-site-footer{box-shadow:none}.doNotPrint{display:none!important}}\n<\/style>\n<footer id=\"gb-site-footer\" class=\"site-footer\"><div class=\"footer-brand\"><div><p class=\"gb-eyebrow\">Our local weather community<\/p><h2>Green Bay Weather Cam<\/h2><p>Live neighborhood views and local weather, every day.<\/p><\/div><\/div>\n  <nav class=\"footer-nav doNotPrint\" aria-label=\"Footer navigation\">\n    <a class=\"footer-action\" href=\"#masthead\">Top<\/a>\n    <a class=\"footer-action\" href=\"mailto:gbmphillips@outlook.com\" title=\"E-mail us\">Contact Us<\/a>\n    <button class=\"footer-action\" id=\"bookmark-page\" type=\"button\">Bookmark Page<\/button>\n  <\/nav>\n\n\n\n  <div class=\"footer-partners doNotPrint\" aria-label=\"Weather station partners and recognition\">\n    <a class=\"partner\" href=\"https:\/\/www.wunderground.com\/dashboard\/pws\/KWIGREEN251\" target=\"_blank\" rel=\"noopener noreferrer\">\n      <img loading=\"lazy\" decoding=\"async\" src=\"\/wu.PNG\" width=\"275\" height=\"68\" alt=\"Weather Underground personal weather station KWIGREEN251\">\n    <\/a>\n    <a class=\"partner\" href=\"https:\/\/www.pwsweather.com\/obs\/WISCHPK61.html\" target=\"_blank\" rel=\"noopener noreferrer\">\n      <img loading=\"lazy\" decoding=\"async\" src=\"\/pws.png\" width=\"305\" height=\"77\" alt=\"PWSweather station WISCHPK61\">\n    <\/a>\n    <a class=\"partner\" href=\"https:\/\/midwesternweather.net\/\" target=\"_blank\" rel=\"noopener noreferrer\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"\/MWWN_roundsmall.png\" width=\"100\" height=\"100\" alt=\"Midwest Weather Network\">\n    <\/a>\n    <div class=\"partner\"><img loading=\"lazy\" decoding=\"async\" src=\"\/winner.jpg\" width=\"228\" height=\"51\" alt=\"Weather website award\"><\/div>\n  <\/div>\n\n  <div class=\"footer-meta\">\n    <p>\n      \u00a9 <span id=\"gb-footer-year\">2026<\/span>, GWN\n      <span class=\"footer-legal-links doNotPrint\">\n        &nbsp;\u00b7&nbsp; <a href=\"https:\/\/www.weather-display.com\/\" title=\"Weather Display software\">Weather Display<\/a>\n        &nbsp;\u00b7&nbsp; <a href=\"https:\/\/validator.w3.org\/check?uri=referer\">Check HTML<\/a>\n        &nbsp;\u00b7&nbsp; <a href=\"https:\/\/jigsaw.w3.org\/css-validator\/check\/referer\">Check CSS<\/a>\n      <\/span>\n    <\/p>\n    <p class=\"footer-disclaimer\">Never base important decisions on this or any weather information obtained from the Internet.<\/p>\n  <\/div>\n\n  <p id=\"bookmark-message\" class=\"bookmark-message doNotPrint\" role=\"status\" aria-live=\"polite\" hidden><\/p>\n<\/footer>\n<script>\n  (function () {\n    var button = document.getElementById('bookmark-page');\n    var message = document.getElementById('bookmark-message');\n    if (!button || !message) return;\n    button.addEventListener('click', function () {\n      var shortcut = navigator.platform && navigator.platform.toLowerCase().indexOf('mac') >= 0 ? 'Command-D' : 'Ctrl-D';\n      message.textContent = 'Press ' + shortcut + ' to bookmark this page.';\n      message.hidden = false;\n    });\n  }());\n\n(function(){document.getElementById('gb-footer-year').textContent=new Intl.DateTimeFormat('en-US',{year:'numeric',timeZone:'America\/Chicago'}).format(new Date());document.querySelectorAll('#gb-site-footer .partner img').forEach(function(img){function fallback(){const label=document.createElement('span');label.className='gb-partner-fallback';label.textContent=img.alt;img.replaceWith(label);}img.addEventListener('error',fallback,{once:true});if(img.complete&&img.naturalWidth===0)fallback();});})();<\/script>\n<div class=\"gb-statcounter\" style=\"text-align:center;margin:20px 0\"><script>var sc_project=5373873;var sc_invisible=0;var sc_security=\"c7180aef\";var sc_text=2;<\/script><script async src=\"https:\/\/www.statcounter.com\/counter\/counter.js\"><\/script><noscript><a title=\"Web statistics\" href=\"https:\/\/statcounter.com\/\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/c.statcounter.com\/5373873\/0\/c7180aef\/0\/\" alt=\"Web statistics\"><\/a><\/noscript><\/div>\n\n\n<style>\nbody.page-id-69 #masthead .inside-header{display:flex;flex-direction:row!important;align-items:center;justify-content:space-between;gap:28px;padding:20px 24px 12px!important;max-width:1160px;margin:auto;box-sizing:border-box}body.page-id-69 #masthead .site-logo{flex:0 1 420px;min-width:0;margin:0}body.page-id-69 #gb-header-live{display:flex;gap:12px;flex-shrink:0;margin:0!important;font-family:system-ui,-apple-system,\"Segoe UI\",sans-serif}#gb-header-live .gb-header-tile{padding:14px 20px;background:#f4f9fb;border:1px solid #d7e5eb;border-radius:12px;min-width:162px;text-align:left}#gb-header-live .gb-header-label{display:block;color:#506572;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}#gb-header-live .gb-header-value{display:block;color:#15384c;font-size:30px;font-weight:750;line-height:1.3;margin:4px 0;font-variant-numeric:tabular-nums;white-space:nowrap}#gb-header-live .gb-header-note{display:block;color:#506572;font-size:12px}#gb-header-live time{font:inherit}\n@media(max-width:768px){body.page-id-69 #masthead .inside-header{flex-direction:column!important;gap:14px;padding:16px!important}body.page-id-69 #masthead .site-logo{flex:auto;width:320px;max-width:100%}body.page-id-69 #gb-header-live{width:100%;max-width:420px}#gb-header-live .gb-header-tile{flex:1;min-width:0;padding:12px 14px}#gb-header-live .gb-header-value{font-size:26px}}\n<\/style>\n<div id=\"gb-header-live\" aria-label=\"Current station temperature and Green Bay local time\"><div class=\"gb-header-tile\"><span class=\"gb-header-label\">Current temperature<\/span><span id=\"gb-header-temp\" class=\"gb-header-value\">\u2014<\/span><span id=\"gb-header-temp-note\" class=\"gb-header-note\">Local weather station<\/span><\/div><div class=\"gb-header-tile\"><span class=\"gb-header-label\">Green Bay time<\/span><span class=\"gb-header-value\"><time id=\"gb-header-time\">\u2014<\/time><\/span><span id=\"gb-header-date\" class=\"gb-header-note\">Central Time<\/span><\/div><\/div>\n<script>\n(function(){\n const widget=document.getElementById('gb-header-live'),header=document.querySelector('#masthead .inside-header');if(!widget||!header)return;header.appendChild(widget);\n const clock=document.getElementById('gb-header-time'),date=document.getElementById('gb-header-date'),temp=document.getElementById('gb-header-temp'),note=document.getElementById('gb-header-temp-note');\n const timeFormat=new Intl.DateTimeFormat('en-US',{timeZone:'America\/Chicago',hour:'numeric',minute:'2-digit'}),dateFormat=new Intl.DateTimeFormat('en-US',{timeZone:'America\/Chicago',month:'short',day:'numeric',timeZoneName:'short'});\n function tick(){const now=new Date();clock.textContent=timeFormat.format(now);clock.dateTime=now.toISOString();date.textContent=dateFormat.format(now);}tick();setInterval(tick,1000);\n async function updateTemperature(){const controller=new AbortController(),timeout=setTimeout(()=>controller.abort(),12000);try{const response=await fetch('\/wx8-modern.php?t='+Date.now(),{cache:'no-store',signal:controller.signal});if(!response.ok)throw new Error('Station unavailable');const doc=new DOMParser().parseFromString(await response.text(),'text\/html');const card=Array.from(doc.querySelectorAll('.conditions-grid .card')).find(c=>c.querySelector('h3')?.textContent.trim()==='Temperature');const metric=Array.from(card?.querySelectorAll('.metric')||[]).find(m=>m.querySelector('dt')?.textContent.trim()==='Current');const value=metric?.querySelector('dd')?.textContent.match(\/^\\s*(-?\\d+(?:\\.\\d+)?)\\s*\u00b0F\/);if(!value)throw new Error('Temperature unavailable');temp.textContent=value[1]+'\u00b0F';const state=document.getElementById('gb-status-label')?.textContent||'';note.textContent=\/delayed|offline\/i.test(state)?'Last reported reading':'Local weather station';}catch(error){temp.textContent='\u2014';note.textContent='Reading unavailable';}finally{clearTimeout(timeout);}}\n updateTemperature();setInterval(updateTemperature,60000);\n})();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>WEATHER STATION STATUS Checking station&#8230; Checking latest update&#8230; Checking National Weather Service alerts&#8230; Current Conditions &amp; Local Forecast Open weather conditions in a new tab \u2197 \u00b7 Green Bay Weather Story \u2197 Live Green Bay Camera EarthCam stream Haven Way \u00b7 Green Bay, Wisconsin Open camera in a new tab \u2197 Next 12 Hours National &#8230; <a title=\"Home test\" class=\"read-more\" href=\"https:\/\/greenbayweathercam.com\/\" aria-label=\"Read more about Home test\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-69","page","type-page","status-publish"],"_links":{"self":[{"href":"https:\/\/greenbayweathercam.com\/index.php?rest_route=\/wp\/v2\/pages\/69","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/greenbayweathercam.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/greenbayweathercam.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/greenbayweathercam.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/greenbayweathercam.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=69"}],"version-history":[{"count":37,"href":"https:\/\/greenbayweathercam.com\/index.php?rest_route=\/wp\/v2\/pages\/69\/revisions"}],"predecessor-version":[{"id":163,"href":"https:\/\/greenbayweathercam.com\/index.php?rest_route=\/wp\/v2\/pages\/69\/revisions\/163"}],"wp:attachment":[{"href":"https:\/\/greenbayweathercam.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=69"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}