<!DOCTYPE html><html><head><title>Home Assistant</title><script>!function(){const e="ha_cache_bust",t=new RegExp("/frontend_(?:latest|es5)/[^/?#]+\\.[0-9a-f]{8,}\\.js","i"),n=new RegExp("dynamically imported module|Importing a module script failed|error loading dynamically imported|ChunkLoadError","i"),o=new RegExp("^(?:/frontend_(?:latest|es5)/[^/?#]+\\.[0-9a-f]{8,}\\.js)$","i"),r=new RegExp("[a-z]+://[^\\s\"'()]+|/[^\\s\"'()]+\\.(?:m?js|css)\\b","i"),a=["/frontend_latest/core.4fb637fd662502fd.js","/frontend_latest/app.9b4b1551e3718430.js"],s=["/frontend_es5/core.7bac0113d5c0f827.js","/frontend_es5/app.f206e6ad5d4ba006.js"],i="haStaleBuildReload",c={};let l=!1;function f(){return!document.getElementById("ha-launch-screen")}function d(){const e=document.getElementById("ha-launch-screen-info-box");e&&(e.textContent="Could not load Home Assistant. Please refresh the page, and clear your browser cache if the problem persists.")}function h(){if(l)return;if(-1!==location.search.indexOf(e+"="))return void d();if(!function(){const e=Date.now();let t=0;try{t=Number(sessionStorage.getItem(i))||0}catch(e){return!0}if(e-t<=6e4)return!1;try{sessionStorage.setItem(i,String(e))}catch(e){}return!0}())return void d();l=!0;const t=location.pathname+location.search+(location.search?"&":"?")+e+"="+Date.now()+location.hash;if("serviceWorker"in navigator&&navigator.serviceWorker.controller){const e=()=>{location.replace(t)};Promise.all([navigator.serviceWorker.getRegistrations().then(e=>Promise.all(e.map(e=>e.unregister()))).catch(()=>{}),self.caches?caches.keys().then(e=>Promise.all(e.map(e=>caches.delete(e)))).catch(()=>{}):null]).then(e,e)}else location.replace(t)}function u(e){if(f()||!t.test(e)&&!n.test(e))return;const i=function(e){const t=r.exec(e);if(!t)return null;try{const e=new URL(t[0],location.href);if(e.origin===location.origin&&o.test(e.pathname))return e.href}catch(e){}return"foreign"}(e);if("foreign"===i)return;const u=i||function(){const e=window.latestJS?a:s;for(const t of e){const e=new URL(t,location.href);if(e.origin===location.origin&&o.test(e.pathname))return e.href}return null}();var m;u&&!c[u]&&(c[u]=!0,(m=u,Promise.race([fetch(m,{method:"HEAD",cache:"no-store"}).then(e=>e.status,()=>0),new Promise(e=>{setTimeout(()=>e(0),5e3)})]).then(e=>404===e||410===e)).then(e=>{delete c[u],e?h():setTimeout(()=>{f()||l||d()},1e4)}))}window.addEventListener("error",e=>{const t=e.target;!t||"SCRIPT"!==t.tagName&&"LINK"!==t.tagName||u(t.href||t.src||"")},!0),window.addEventListener("unhandledrejection",e=>{const t=e&&e.reason;u(t&&(t.message||String(t))||"")})}()</script><meta charset="utf-8"><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"><link rel="icon" href="/static/icons/favicon.ico"><link rel="modulepreload" href="/frontend_latest/core.4fb637fd662502fd.js" crossorigin="use-credentials"><link rel="modulepreload" href="/frontend_latest/app.9b4b1551e3718430.js" crossorigin="use-credentials"><link rel="mask-icon" href="/static/icons/mask-icon.svg" color="#18bcf2"><link rel="apple-touch-icon" href="/static/icons/favicon-apple-180x180.png"><meta name="apple-itunes-app" content="app-id=1099568401"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="default"><meta name="apple-mobile-web-app-title" content="Home Assistant"><meta name="msapplication-config" content="/static/icons/browserconfig.xml"><meta name="mobile-web-app-capable" content="yes"><meta name="application-name" content="Home Assistant"><meta name="referrer" content="same-origin"><meta name="theme-color" content="#2980b9"><meta name="color-scheme" content="dark light"><meta name="viewport" content="width=device-width,user-scalable=no,viewport-fit=cover,initial-scale=1"><style>body{font-family:Roboto,Noto,sans-serif;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-weight:400;margin:0;padding:0;height:100%}</style><style>html{background-color:var(--primary-background-color,#fafafa);color:var(--primary-text-color,#212121);height:100vh}#ha-launch-screen{font-family:ui-sans-serif,system-ui,sans-serif;position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;user-select:none;-webkit-user-select:none;background-color:var(--primary-background-color,#fafafa);z-index:100;transition:opacity var(--ha-animation-duration-normal, 250ms) ease-out}#ha-launch-screen.removing{opacity:0}@keyframes launch-lockup-in{from{opacity:0}to{opacity:1}}#ha-launch-screen .ha-lockup{display:flex;align-items:center;flex-shrink:0;animation:launch-lockup-in var(--ha-animation-duration-normal,250ms) ease-out both}#ha-launch-screen .ohf-logo,#ha-launch-screen-info-box>*{animation:launch-lockup-in var(--ha-animation-duration-normal,250ms) ease-out both}#ha-launch-screen .ha-logo{width:96px;height:96px}#ha-launch-screen .ha-launch-screen-spacer-top{flex:1;margin-top:calc(2 * max(var(--safe-area-inset-top,0px),48px) + 46px);padding-top:48px}#ha-launch-screen .ha-launch-screen-spacer-bottom{flex:1;padding-top:16px}.ohf-logo{margin:max(var(--safe-area-inset-bottom,0px),48px) 0;display:flex;flex-direction:column;align-items:center;gap:4px;opacity:.66}.ohf-logo span{font-size:12px;line-height:12px;text-transform:uppercase}.ohf-logo picture{display:flex}.ohf-logo img{width:237px;aspect-ratio:237/24;height:auto}@media (prefers-color-scheme:dark){html{background-color:var(--primary-background-color,#111);color:var(--primary-text-color,#e1e1e1)}body #ha-launch-screen{background-color:var(--primary-background-color,#111)}}@media (max-height:560px){body #ha-launch-screen .ha-launch-screen-spacer-top{margin-top:24px;padding-top:24px}body #ha-launch-screen .ha-launch-screen-spacer-bottom{padding-top:16px}.ohf-logo{margin-block:24px}}</style></head><body><div id="ha-launch-screen"><div class="ha-launch-screen-spacer-top"></div><div class="ha-lockup"><img class="ha-logo" src="/static/images/home-assistant-logo-loading.svg" alt="Home Assistant"></div><div id="ha-launch-screen-info-box" class="ha-launch-screen-spacer-bottom"></div><div class="ohf-logo"><span id="ha-launch-screen-attribution">A project from the</span><picture><source media="(prefers-color-scheme: dark)" srcset="/static/images/open-home-foundation-on-dark.svg"><img src="/static/images/open-home-foundation-on-light.svg" alt="Open Home Foundation" width="237" height="24"></picture></div></div><home-assistant></home-assistant><script>function _ls(d,e){var i=document.createElement("script");return e&&(i.crossOrigin="use-credentials"),i.src=d,document.head.appendChild(i)}"attachShadow"in Element.prototype||(_ls("/static/polyfills/webcomponents-bundle.js",!0),_ls("/static/polyfills/lit-polyfill-support.js",!0));var isModern=/Edge?\/(129|1[3-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Firefox\/(13[1-9]|1[4-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(129|1[3-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|(Maci|X1{2}).+ Version\/(18\.\d+|(19|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(18[._]\d+|(19|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](129|1[3-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(13[1-9]|1[4-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(129|1[3-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|SamsungBrowser\/(2[7-9]|[3-9]\d|\d{3,})\.\d+|Home As{2}istant\/[\d.]+ \(.+; macOS (1[3-9]|[2-9]\d|\d{3,})\.\d+(\.\d+)?\)/.test(navigator.userAgent)&&"findLast"in Array.prototype</script><script>if(-1===navigator.userAgent.indexOf("Android")){function _pf(o,t){var n=document.createElement("link");n.rel="preload",n.as="font",n.type="font/woff2",n.href=o,n.crossOrigin="anonymous",document.head.appendChild(n)}_pf("/static/fonts/roboto/Roboto-Regular.woff2"),_pf("/static/fonts/roboto/Roboto-Medium.woff2")}</script><script crossorigin="use-credentials">isModern&&(import("/frontend_latest/core.4fb637fd662502fd.js"),import("/frontend_latest/app.9b4b1551e3718430.js"),window.customPanelJS="/frontend_latest/custom-panel.bda2a4a7bf755979.js",window.latestJS=!0)</script><script>// Caught, or the boot recovery guard reads it as a stale build.
        import("/hacsfiles/iconset.js").catch(function (err) {
          console.error("Failed to load extra module /hacsfiles/iconset.js", err);
        });// Caught, or the boot recovery guard reads it as a stale build.
        import("/browser_mod.js?3.2.3").catch(function (err) {
          console.error("Failed to load extra module /browser_mod.js?3.2.3", err);
        });</script><script>window.latestJS||(window.customPanelJS="/frontend_es5/custom-panel.213d5752d0260c11.js",_ls("/frontend_es5/core.7bac0113d5c0f827.js",!0),_ls("/frontend_es5/app.f206e6ad5d4ba006.js",!0))</script><script>if (!window.latestJS) {}</script></body></html>